@k2b/ui 0.31.0 → 0.32.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/base.css +2 -0
- package/dist/browser/actions/ViewTabs.js +8 -0
- package/dist/browser/actions/ViewTabs.js.map +1 -1
- package/dist/browser/content/Chart.js +104 -55
- package/dist/browser/content/Chart.js.map +1 -1
- package/dist/browser/content/ChartExplorer.js +5 -3
- package/dist/browser/content/ChartExplorer.js.map +1 -1
- package/dist/browser/content/MapView.js +4 -4
- package/dist/browser/content/MapView.js.map +1 -1
- package/dist/browser/content/chart-inspection-core.js +4 -1
- package/dist/browser/content/chart-inspection-core.js.map +1 -1
- package/dist/browser/content/code-highlight.js +66 -0
- package/dist/browser/content/code-highlight.js.map +1 -1
- package/dist/browser/content/index.js +1 -0
- package/dist/browser/content/index.js.map +1 -1
- package/dist/browser/content/map-view-live.js +47 -10
- package/dist/browser/content/map-view-live.js.map +1 -1
- package/dist/browser/content/map-view-types.js.map +1 -1
- package/dist/browser/inputs/AutocompleteEditor.js +167 -104
- package/dist/browser/inputs/AutocompleteEditor.js.map +1 -1
- package/dist/browser/inputs/RichSelect.js +1474 -0
- package/dist/browser/inputs/RichSelect.js.map +1 -0
- package/dist/browser/inputs/TextInput.js +95 -60
- package/dist/browser/inputs/TextInput.js.map +1 -1
- package/dist/browser/inputs/choice.js +19 -8
- package/dist/browser/inputs/choice.js.map +1 -1
- package/dist/browser/inputs/index.js +1 -0
- package/dist/browser/inputs/index.js.map +1 -1
- package/dist/browser/inputs/rich-select-messages.js +46 -0
- package/dist/browser/inputs/rich-select-messages.js.map +1 -0
- package/dist/browser/layout/AppWorkspace.js +177 -135
- package/dist/browser/layout/AppWorkspace.js.map +1 -1
- package/dist/browser/layout/DetailPanel.js +10 -1
- package/dist/browser/layout/DetailPanel.js.map +1 -1
- package/dist/browser/layout/Navigation.js +14 -5
- package/dist/browser/layout/Navigation.js.map +1 -1
- package/dist/browser/layout/PageTitle.js +9 -3
- package/dist/browser/layout/PageTitle.js.map +1 -1
- package/dist/browser/layout/ResizeSeparator.js +8 -2
- package/dist/browser/layout/ResizeSeparator.js.map +1 -1
- package/dist/browser/layout/app-workspace-controller.js +192 -31
- package/dist/browser/layout/app-workspace-controller.js.map +1 -1
- package/dist/browser/layout/navigation-model.js.map +1 -1
- package/dist/browser/layout/resize-separator.js +25 -1
- package/dist/browser/layout/resize-separator.js.map +1 -1
- package/dist/browser/surfaces/Skeleton.js +14 -0
- package/dist/browser/surfaces/Skeleton.js.map +1 -0
- package/dist/browser/surfaces/index.js +1 -0
- package/dist/browser/surfaces/index.js.map +1 -1
- package/dist/ssr/actions/ViewTabs.js +8 -0
- package/dist/ssr/actions/ViewTabs.js.map +1 -1
- package/dist/ssr/content/Chart.js +27 -7
- package/dist/ssr/content/Chart.js.map +1 -1
- package/dist/ssr/content/ChartExplorer.js +5 -3
- package/dist/ssr/content/ChartExplorer.js.map +1 -1
- package/dist/ssr/content/MapView.js +4 -4
- package/dist/ssr/content/MapView.js.map +1 -1
- package/dist/ssr/content/chart-inspection-core.js +4 -1
- package/dist/ssr/content/chart-inspection-core.js.map +1 -1
- package/dist/ssr/content/code-highlight.js +66 -0
- package/dist/ssr/content/code-highlight.js.map +1 -1
- package/dist/ssr/content/index.js +1 -0
- package/dist/ssr/content/index.js.map +1 -1
- package/dist/ssr/content/map-view-types.js.map +1 -1
- package/dist/ssr/inputs/AutocompleteEditor.js +64 -24
- package/dist/ssr/inputs/AutocompleteEditor.js.map +1 -1
- package/dist/ssr/inputs/RichSelect.js +950 -0
- package/dist/ssr/inputs/RichSelect.js.map +1 -0
- package/dist/ssr/inputs/TextInput.js +40 -16
- package/dist/ssr/inputs/TextInput.js.map +1 -1
- package/dist/ssr/inputs/choice.js +19 -8
- package/dist/ssr/inputs/choice.js.map +1 -1
- package/dist/ssr/inputs/index.js +1 -0
- package/dist/ssr/inputs/index.js.map +1 -1
- package/dist/ssr/inputs/rich-select-messages.js +46 -0
- package/dist/ssr/inputs/rich-select-messages.js.map +1 -0
- package/dist/ssr/layout/AppWorkspace.js +36 -7
- package/dist/ssr/layout/AppWorkspace.js.map +1 -1
- package/dist/ssr/layout/DetailPanel.js +1 -1
- package/dist/ssr/layout/DetailPanel.js.map +1 -1
- package/dist/ssr/layout/Navigation.js +1 -1
- package/dist/ssr/layout/Navigation.js.map +1 -1
- package/dist/ssr/layout/PageTitle.js +9 -3
- package/dist/ssr/layout/PageTitle.js.map +1 -1
- package/dist/ssr/layout/ResizeSeparator.js +4 -1
- package/dist/ssr/layout/ResizeSeparator.js.map +1 -1
- package/dist/ssr/layout/app-workspace-controller.js +192 -31
- package/dist/ssr/layout/app-workspace-controller.js.map +1 -1
- package/dist/ssr/layout/navigation-model.js.map +1 -1
- package/dist/ssr/layout/resize-separator.js +25 -1
- package/dist/ssr/layout/resize-separator.js.map +1 -1
- package/dist/ssr/surfaces/Skeleton.js +8 -0
- package/dist/ssr/surfaces/Skeleton.js.map +1 -0
- package/dist/ssr/surfaces/index.js +1 -0
- package/dist/ssr/surfaces/index.js.map +1 -1
- package/dist/styles.css +1 -1
- package/dist/types/content/Chart.d.ts +4 -2
- package/dist/types/content/ChartExplorer.d.ts +0 -1
- package/dist/types/content/code-highlight.d.ts +3 -1
- package/dist/types/content/index.d.ts +1 -0
- package/dist/types/content/map-view-live.d.ts +1 -1
- package/dist/types/content/map-view-types.d.ts +2 -0
- package/dist/types/inputs/AutocompleteEditor.d.ts +6 -1
- package/dist/types/inputs/RichSelect.d.ts +93 -0
- package/dist/types/inputs/TextInput.d.ts +5 -2
- package/dist/types/inputs/choice.d.ts +24 -4
- package/dist/types/inputs/index.d.ts +2 -0
- package/dist/types/inputs/rich-select-messages.d.ts +21 -0
- package/dist/types/layout/AppWorkspace.d.ts +7 -0
- package/dist/types/layout/DetailPanel.d.ts +2 -0
- package/dist/types/layout/app-workspace-controller.d.ts +2 -0
- package/dist/types/layout/navigation-model.d.ts +2 -0
- package/dist/types/layout/resize-separator.d.ts +1 -0
- package/dist/types/surfaces/Skeleton.d.ts +6 -0
- package/dist/types/surfaces/index.d.ts +1 -0
- package/package.json +4 -4
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":[],"sources":["content/chart-inspection-core.ts"],"sourcesContent":["import type { ChartDatum, charts } from \"@k2b/stdlib\";\nimport { positionTooltipSurface } from \"../feedback/tooltip-position\";\nimport type { ChartCursor, ChartCursorState } from \"./chart-cursor\";\n\nexport type ChartKind = keyof typeof charts;\n\nexport type ChartDatumRef = Pick<ChartDatum, \"role\" | \"index\" | \"seriesIndex\">;\nexport const sameChartDatum = (a: ChartDatumRef, b: ChartDatumRef) =>\n a.role === b.role && a.index === b.index && a.seriesIndex === b.seriesIndex;\n\nexport type ChartSelection = { kind: ChartKind; datum: ChartDatum };\nexport type ChartTooltip = { title?: string; rows: readonly { label: string; value: string }[] };\nexport type ChartTooltipFormatter = (selection: ChartSelection) => ChartTooltip;\n\ntype Entry = { element: SVGGraphicsElement; datum: ChartDatum };\nconst object = (value: unknown): value is Record<string, unknown> => typeof value === \"object\" && value !== null;\nconst pair = (value: unknown): value is [number, number] =>\n Array.isArray(value) && value.length === 2 && value.every((n) => typeof n === \"number\" && Number.isFinite(n));\nconst roles = new Set([\"point\", \"item\", \"bin\", \"box\", \"outlier\", \"value\", \"cell\", \"interval\"]);\nexport function isChartDatum(value: unknown): value is ChartDatum {\n return (\n object(value) &&\n Number.isInteger(value.index) &&\n typeof value.index === \"number\" &&\n value.index >= 0 &&\n (value.seriesIndex === undefined ||\n (typeof value.seriesIndex === \"number\" && Number.isInteger(value.seriesIndex) && value.seriesIndex >= 0)) &&\n typeof value.role === \"string\" &&\n roles.has(value.role) &&\n pair(value.anchor) &&\n (value.grid === undefined || pair(value.grid)) &&\n (value.label === undefined || typeof value.label === \"string\") &&\n Array.isArray(value.values) &&\n value.values.every(\n (field) =>\n object(field) &&\n typeof field.key === \"string\" &&\n (typeof field.value === \"string\" || (typeof field.value === \"number\" && Number.isFinite(field.value))) &&\n (field.formatted === undefined || typeof field.formatted === \"string\"),\n )\n );\n}\n\n/** Adds or removes only the tooltip id, keeping descriptions the host put on the container. */\nconst describe = (container: HTMLElement, id: string, on: boolean) => {\n const ids = (container.getAttribute(\"aria-describedby\") ?? \"\").split(/\\s+/).filter((token) => token && token !== id);\n if (on) ids.push(id);\n if (ids.length) container.setAttribute(\"aria-describedby\", ids.join(\" \"));\n else container.removeAttribute(\"aria-describedby\");\n};\n\n/** Enhances existing SVG nodes. Pointer/focus changes never rebuild the chart. */\nexport function createChartInspector(options: {\n container: () => HTMLElement | undefined;\n cursor?: () => ChartCursor | undefined;\n tooltip: () => HTMLSpanElement | undefined;\n anchor: () => HTMLSpanElement | undefined;\n kind: () => ChartKind;\n enabled: () => boolean;\n format: ChartTooltipFormatter;\n select: (selection: ChartSelection) => void;\n}) {\n const source = Symbol(\"chart cursor\");\n let entries: Entry[] | undefined;\n let sortedPoints: Entry[] = [];\n const byElement = new Map<Element, Entry>();\n let active: Entry | undefined;\n let highlighted: Entry[] = [];\n let pinned = false;\n let pointerStart: { x: number; y: number } | undefined;\n let moved = false;\n let pending: { x: number; y: number; target: Element | null } | undefined;\n let frame: number | undefined;\n // The cursor this chart is subscribed to. Closing reads it instead of the cursor prop: a chart also closes\n // while it unmounts, when a parent `<Show>` may already have dropped the value the prop came from.\n let linkedCursor: ChartCursor | undefined;\n\n const records = () => {\n if (!entries || (entries.length > 0 && !entries[0]!.element.isConnected)) {\n entries = [];\n byElement.clear();\n sortedPoints = [];\n for (const element of Array.from(options.container()?.querySelectorAll<SVGGraphicsElement>(\"[data-chart-datum]\") ?? [])) {\n try {\n const value: unknown = JSON.parse(element.getAttribute(\"data-chart-datum\") ?? \"null\");\n if (isChartDatum(value)) {\n const entry = { element, datum: value };\n entries.push(entry);\n byElement.set(element, entry);\n }\n } catch {\n /* Only valid renderer metadata participates in inspection. */\n }\n }\n sortedPoints = entries.filter((entry) => entry.datum.role === \"point\").sort((a, b) => a.datum.anchor[0] - b.datum.anchor[0]);\n }\n return entries;\n };\n const highlightColor = (item: Entry): string => {\n // Read the actual paint before applying inspection styles, including\n // custom series and threshold colors. Invisible points use their line.\n const point = item.element.querySelector(\".stdlib-chart-inspection-point\");\n const source = point\n ? options\n .container()\n ?.querySelector(\n options.kind() === \"line\"\n ? `.stdlib-chart-line.stdlib-chart-series-${(item.datum.seriesIndex ?? 0) % 8}`\n : \".stdlib-chart-sparkline, .stdlib-chart-stat-sparkline\",\n )\n : (item.element.querySelector(\".stdlib-chart-bar-gauge-fill, .stdlib-chart-gauge-fill, .stdlib-chart-stat-value\") ??\n item.element.querySelector(\"rect, path, circle\"));\n const paint = source ? source.ownerDocument.defaultView?.getComputedStyle(source) : undefined;\n const color =\n (point || item.element.hasAttribute(\"data-chart-reference\") ? paint?.stroke : paint?.fill) ||\n `var(--stdlib-chart-c${((item.datum.seriesIndex ?? 0) % 8) + 1})`;\n return `color-mix(in srgb, ${color} 72%, var(--k2b-chart-highlight-mix))`;\n };\n const selectData = (selected: readonly ChartDatumRef[]) => {\n for (const entry of records()) {\n const matches = selected.some((datum) => sameChartDatum(datum, entry.datum));\n if (matches) entry.element.style.setProperty(\"--k2b-chart-selection-color\", highlightColor(entry));\n else entry.element.style.removeProperty(\"--k2b-chart-selection-color\");\n entry.element.toggleAttribute(\"data-selected\", matches);\n }\n };\n const screenPoint = (entry: Entry) => {\n const matrix = entry.element.getScreenCTM?.();\n const [x, y] = entry.datum.anchor;\n if (matrix) return { x: matrix.a * x + matrix.c * y + matrix.e, y: matrix.b * x + matrix.d * y + matrix.f };\n const rect = entry.element.getBoundingClientRect();\n return { x: rect.x + rect.width / 2, y: rect.y + rect.height / 2 };\n };\n const visibleRecords = () => {\n const nodes = records();\n if (options.kind() !== \"map\") return nodes;\n const viewport = options.container()?.querySelector<SVGSVGElement>(\".stdlib-chart-map-viewport\");\n if (!viewport?.getScreenCTM?.()) return nodes;\n const root = viewport.ownerSVGElement?.getBoundingClientRect();\n if (!root?.width || !root.height) return nodes;\n const width = viewport?.width?.baseVal.value;\n const height = viewport?.height?.baseVal.value;\n if (!width || !height) return nodes;\n const left = root.left + viewport.x.baseVal.value;\n const top = root.top + viewport.y.baseVal.value;\n const clip = { left, top, right: left + width, bottom: top + height };\n return nodes.filter((entry) => {\n const point = screenPoint(entry);\n return point.x >= clip.left && point.x <= clip.right && point.y >= clip.top && point.y <= clip.bottom;\n });\n };\n const rawX = (entry: Entry) => entry.datum.values.find((field) => field.key === \"x\")?.value;\n const seriesChart = () => options.kind() === \"line\" || options.kind() === \"sparkline\";\n const clearHighlight = () => {\n for (const entry of highlighted) {\n entry.element.removeAttribute(\"data-inspected\");\n entry.element.style.removeProperty(\"--k2b-chart-inspection-color\");\n if (!entry.element.getAttribute(\"style\")) entry.element.removeAttribute(\"style\");\n }\n highlighted = [];\n };\n const close = (broadcast = true, cancelPending = true) => {\n const state = linkedCursor?.read();\n if (broadcast && state && state.source !== source) return;\n if (broadcast) linkedCursor?.clear(source);\n options.container()?.removeAttribute(\"data-cursor-source\");\n pinned = false;\n active = undefined;\n clearHighlight();\n const container = options.container(),\n id = options.tooltip()?.id;\n if (container && id) describe(container, id, false);\n options.container()?.removeAttribute(\"data-inspecting\");\n const tooltip = options.tooltip();\n if (tooltip) {\n try {\n if (tooltip.matches(\":popover-open\")) tooltip.hidePopover();\n } catch {\n /* Detached during navigation. */\n }\n }\n if (cancelPending) {\n if (frame !== undefined) cancelAnimationFrame(frame);\n frame = undefined;\n pending = undefined;\n }\n };\n const invalidate = () => {\n options.cursor?.()?.clear(source);\n close(false);\n entries = undefined;\n sortedPoints = [];\n byElement.clear();\n receive(options.cursor?.()?.read() ?? null);\n };\n const show = (entry: Entry, broadcast = true) => {\n const x = rawX(entry);\n if (broadcast && options.kind() === \"line\" && typeof x === \"number\") options.cursor?.()?.move(source, x);\n const tooltip = options.tooltip(),\n anchor = options.anchor(),\n container = options.container();\n if (!tooltip || !anchor || !container || !options.enabled()) return;\n if (active === entry && tooltip.matches(\":popover-open\")) return;\n clearHighlight();\n active = entry;\n highlighted = options.kind() === \"line\" ? records().filter((candidate) => rawX(candidate) === rawX(entry)) : [entry];\n for (const item of highlighted) {\n item.element.style.setProperty(\"--k2b-chart-inspection-color\", highlightColor(item));\n item.element.setAttribute(\"data-inspected\", \"true\");\n }\n const document = tooltip.ownerDocument;\n const contents = highlighted.map((item) => ({\n item,\n content: options.format({ kind: options.kind(), datum: item.datum }),\n missing: false,\n }));\n if (options.cursor?.() && options.kind() === \"line\") {\n const present = new Set(highlighted.map((item) => item.datum.seriesIndex));\n for (const item of records()) {\n if (present.has(item.datum.seriesIndex)) continue;\n present.add(item.datum.seriesIndex);\n contents.push({ item, content: options.format({ kind: options.kind(), datum: item.datum }), missing: true });\n }\n contents.sort((a, b) => (a.item.datum.seriesIndex ?? 0) - (b.item.datum.seriesIndex ?? 0));\n }\n tooltip.replaceChildren();\n const sharedTitle = typeof x === \"number\" ? options.cursor?.()?.formatX?.(x) : undefined;\n const commonTitle =\n sharedTitle ??\n (contents.every(({ content }) => content.title === contents[0]?.content.title) ? contents[0]?.content.title : undefined);\n if (commonTitle) {\n const title = document.createElement(\"strong\");\n title.className = \"k2b-chart__tooltip-title\";\n title.textContent = commonTitle;\n tooltip.append(title);\n }\n for (const { item, content, missing } of contents) {\n if (content.title && !commonTitle) {\n const title = document.createElement(\"strong\");\n title.className = \"k2b-chart__tooltip-title\";\n title.textContent = content.title;\n tooltip.append(title);\n }\n for (const row of content.rows) {\n const line = document.createElement(\"span\");\n line.className = \"k2b-chart__tooltip-row\";\n if (options.kind() === \"line\") {\n const swatch = document.createElement(\"i\");\n swatch.setAttribute(\"aria-hidden\", \"true\");\n const series = container.querySelector(`.stdlib-chart-line.stdlib-chart-series-${(item.datum.seriesIndex ?? 0) % 8}`);\n swatch.style.background = series\n ? getComputedStyle(series).stroke\n : `var(--stdlib-chart-c${((item.datum.seriesIndex ?? 0) % 8) + 1})`;\n line.append(swatch);\n }\n const label = document.createElement(\"span\");\n label.textContent = `${row.label}: `;\n const value = document.createElement(\"b\");\n value.textContent = missing ? \"—\" : row.value;\n line.append(label, value);\n tooltip.append(line);\n }\n }\n const rect = container.getBoundingClientRect(),\n point = screenPoint(entry);\n anchor.style.left = `${point.x - rect.left}px`;\n anchor.style.top = `${point.y - rect.top}px`;\n updatePlotBounds();\n container.style.setProperty(\"--k2b-chart-inspection-x\", `${point.x - rect.left}px`);\n container.setAttribute(\"data-inspecting\", seriesChart() ? \"series\" : \"datum\");\n describe(container, tooltip.id, true);\n try {\n if (!tooltip.matches(\":popover-open\")) tooltip.showPopover();\n positionTooltipSurface(tooltip, anchor);\n } catch {\n /* SVG titles remain available without the Popover API. */\n }\n };\n const updatePlotBounds = () => {\n const container = options.container();\n if (!container) return;\n const axes = Array.from(container.querySelectorAll(\".stdlib-chart-axis\")).map((axis) => axis.getBoundingClientRect());\n if (axes.length < 2) return;\n const left = Math.min(...axes.map((a) => a.left)),\n right = Math.max(...axes.map((a) => a.right));\n const top = Math.min(...axes.map((a) => a.top)),\n bottom = Math.max(...axes.map((a) => a.bottom));\n if (right <= left || bottom <= top) return;\n const rect = container.getBoundingClientRect();\n for (const [name, value] of Object.entries({\n left: left - rect.left,\n right: rect.right - right,\n top: top - rect.top,\n bottom: rect.bottom - bottom,\n }))\n container.style.setProperty(`--k2b-chart-plot-${name}`, `${value}px`);\n return { left, right, top, bottom };\n };\n const receive = (state: ChartCursorState) => {\n if (state?.source === source) return;\n close(false, false);\n if (!state || options.kind() !== \"line\") return;\n const entry = records().find((item) => rawX(item) === state.x);\n if (entry) show(entry, false);\n };\n const linkCursor = (cursor: ChartCursor | undefined): (() => void) => {\n linkedCursor = cursor;\n const unsubscribe = cursor?.subscribe(receive);\n return () => {\n unsubscribe?.();\n cursor?.clear(source);\n linkedCursor = undefined;\n };\n };\n const nearest = (x: number, y: number, target: Element | null): Entry | undefined => {\n if (target?.closest(\"button,a\") && !target.closest(\"[data-chart-datum]\")) return;\n const nodes = visibleRecords();\n // A mark wins before the plot bounds: the first and last points of a line sit on the plot's edges, so half of\n // their hit area lies outside it.\n const direct = target?.closest(\"[data-chart-datum]\");\n const hit = direct ? byElement.get(direct) : undefined;\n if (hit && nodes.includes(hit)) return hit;\n if (seriesChart()) {\n const plot = updatePlotBounds();\n if (plot && (x < plot.left || x > plot.right || y < plot.top || y > plot.bottom)) return;\n }\n // Exact shapes win. A small physical hit radius also reaches tiny or\n // zero-sized marks; distant whitespace leaves the chart unselected.\n const points = seriesChart() ? sortedPoints : nodes;\n if (seriesChart() && points.length) {\n const matrix = points[0]!.element.getScreenCTM?.();\n if (matrix) {\n const determinant = matrix.a * matrix.d - matrix.b * matrix.c;\n if (!determinant) return;\n const targetX = ((x - matrix.e) * matrix.d - (y - matrix.f) * matrix.c) / determinant;\n let low = 0,\n high = points.length - 1;\n while (low < high) {\n const mid = Math.floor((low + high) / 2);\n if (points[mid]!.datum.anchor[0] < targetX) low = mid + 1;\n else high = mid;\n }\n const previous = Math.max(0, low - 1);\n return Math.abs(points[previous]!.datum.anchor[0] - targetX) <= Math.abs(points[low]!.datum.anchor[0] - targetX)\n ? points[previous]\n : points[low];\n }\n }\n const matrices = new Map<SVGSVGElement, DOMMatrix | null>();\n let best: Entry | undefined,\n distance = Infinity;\n for (const entry of points) {\n const svg = entry.element.ownerSVGElement;\n if (svg && !matrices.has(svg)) matrices.set(svg, svg.getScreenCTM?.() ?? null);\n const matrix = svg ? matrices.get(svg) : null;\n const [ax, ay] = entry.datum.anchor;\n const point = matrix\n ? { x: matrix.a * ax + matrix.c * ay + matrix.e, y: matrix.b * ax + matrix.d * ay + matrix.f }\n : screenPoint(entry);\n const dx = point.x - x,\n dy = point.y - y;\n const next = seriesChart() ? Math.abs(dx) : Math.hypot(dx, dy);\n if (next < distance) {\n distance = next;\n best = entry;\n }\n }\n return seriesChart() || distance <= 24 ? best : undefined;\n };\n const move = (event: PointerEvent) => {\n if (event.target instanceof Node && options.tooltip()?.contains(event.target)) return;\n if (pointerStart && Math.hypot(event.clientX - pointerStart.x, event.clientY - pointerStart.y) > 6) moved = true;\n if (!options.enabled() || pinned || event.pointerType === \"touch\" || event.buttons) return;\n pending = { x: event.clientX, y: event.clientY, target: event.target instanceof Element ? event.target : null };\n if (frame !== undefined) return;\n frame = requestAnimationFrame(() => {\n frame = undefined;\n const sample = pending;\n pending = undefined;\n if (!sample) return;\n const entry = nearest(sample.x, sample.y, sample.target);\n if (entry) {\n show(entry);\n if (seriesChart()) {\n const container = options.container();\n container?.setAttribute(\"data-cursor-source\", \"true\");\n container?.style.setProperty(\"--k2b-chart-inspection-y\", `${sample.y - container.getBoundingClientRect().top}px`);\n }\n } else close();\n });\n };\n const down = (event: PointerEvent) => {\n pointerStart = { x: event.clientX, y: event.clientY };\n moved = false;\n };\n const click = (event: MouseEvent) => {\n if (!options.enabled() || moved || (event.target instanceof Element && event.target.closest(\"button,a\"))) return;\n const entry = nearest(event.clientX, event.clientY, event.target instanceof Element ? event.target : null);\n if (!entry) {\n close();\n return;\n }\n pinned = true;\n show(entry);\n options.select({ kind: options.kind(), datum: entry.datum });\n };\n const focus = (event: FocusEvent) => {\n if (event.target !== options.container() || !options.enabled()) return;\n const nodes = visibleRecords();\n const first = options.kind() === \"line\" ? sortedPoints.at(-1) : nodes[0];\n if (first) show(first);\n };\n const key = (event: KeyboardEvent): boolean => {\n if (!options.enabled() || event.target !== options.container()) return false;\n if (event.key === \"Escape\") {\n close();\n return true;\n }\n if (event.key === \"Enter\" && active) {\n if (options.kind() === \"map\" && !visibleRecords().includes(active)) {\n close();\n return true;\n }\n event.preventDefault();\n pinned = true;\n const link = active.element.closest(\"a\");\n if (link) link.dispatchEvent(new MouseEvent(\"click\", { bubbles: true, cancelable: true }));\n else options.select({ kind: options.kind(), datum: active.datum });\n return true;\n }\n const navigationChart = options.kind() === \"map\" || options.kind() === \"stateTimeline\";\n if (navigationChart && !event.altKey) return false;\n if (![\"Home\", \"End\", \"ArrowLeft\", \"ArrowRight\", \"ArrowUp\", \"ArrowDown\"].includes(event.key)) return false;\n let nodes = visibleRecords();\n if (seriesChart()) nodes = [...nodes].sort((a, b) => a.datum.anchor[0] - b.datum.anchor[0]);\n if (options.kind() === \"line\") {\n const seen = new Set<string | number | undefined>();\n nodes = nodes.filter((entry) => {\n const x = rawX(entry);\n if (seen.has(x)) return false;\n seen.add(x);\n return true;\n });\n }\n if (!nodes.length) return false;\n event.preventDefault();\n pinned = false;\n let index = active\n ? options.kind() === \"line\"\n ? nodes.findIndex((entry) => rawX(entry) === rawX(active!))\n : nodes.indexOf(active)\n : -1;\n if (event.key === \"Home\") index = 0;\n else if (event.key === \"End\") index = nodes.length - 1;\n else if (active?.datum.grid && [\"ArrowUp\", \"ArrowDown\", \"ArrowLeft\", \"ArrowRight\"].includes(event.key)) {\n const [x, y] = active.datum.grid;\n const dx = event.key === \"ArrowLeft\" ? -1 : event.key === \"ArrowRight\" ? 1 : 0;\n const dy = event.key === \"ArrowUp\" ? -1 : event.key === \"ArrowDown\" ? 1 : 0;\n const next = nodes\n .filter(\n (entry) =>\n entry.datum.grid &&\n (dx\n ? entry.datum.grid[1] === y && (entry.datum.grid[0] - x) * dx > 0\n : entry.datum.grid[0] === x && (entry.datum.grid[1] - y) * dy > 0),\n )\n .sort(\n (a, b) =>\n Math.abs(a.datum.grid![0] - x) +\n Math.abs(a.datum.grid![1] - y) -\n Math.abs(b.datum.grid![0] - x) -\n Math.abs(b.datum.grid![1] - y),\n )[0];\n if (next) index = nodes.indexOf(next);\n } else index += event.key === \"ArrowLeft\" || event.key === \"ArrowUp\" ? -1 : 1;\n show(nodes[Math.max(0, Math.min(nodes.length - 1, index))]!);\n return true;\n };\n return {\n selectDatum: (selected: ChartDatumRef | null | undefined) => selectData(selected ? [selected] : []),\n selectData,\n linkCursor,\n destroy: () => close(false),\n move,\n down,\n click,\n focus,\n key,\n close: () => close(),\n invalidate,\n leave: () => {\n if (!pinned) close();\n },\n };\n}\n\n/** Dismiss inspection on outside interaction, but allow the tooltip itself to scroll. */\nexport function closeChartInspectionOnOutside(options: {\n container: () => HTMLElement | undefined;\n tooltip: () => HTMLElement | undefined;\n close: () => void;\n}): () => void {\n const outside = (event: PointerEvent) => {\n if (event.target instanceof Node && !options.container()?.contains(event.target)) options.close();\n };\n const scroll = (event: Event) => {\n if (event.target instanceof Node && options.tooltip()?.contains(event.target)) return;\n options.close();\n };\n window.addEventListener(\"pointerdown\", outside);\n window.addEventListener(\"scroll\", scroll, true);\n window.addEventListener(\"resize\", options.close);\n return () => {\n window.removeEventListener(\"pointerdown\", outside);\n window.removeEventListener(\"scroll\", scroll, true);\n window.removeEventListener(\"resize\", options.close);\n };\n}\n\nexport type InspectChartOptions = {\n kind: ChartKind;\n format: ChartTooltipFormatter;\n select?: (selection: ChartSelection) => void;\n cursor?: ChartCursor;\n};\nexport type ChartInspection = { invalidate(): void; close(): void; destroy(): void };\n\nlet tooltipId = 0;\n\n/** Attach inspection to stdlib SVG rendered with inspect: true, without a framework. */\nexport function inspectChart(container: HTMLElement, options: InspectChartOptions): ChartInspection {\n const document = container.ownerDocument;\n const anchor = document.createElement(\"span\");\n anchor.className = \"k2b-chart__anchor\";\n anchor.setAttribute(\"aria-hidden\", \"true\");\n const tooltip = document.createElement(\"span\");\n tooltip.className = \"k2b-tooltip k2b-chart__tooltip\";\n tooltip.setAttribute(\"role\", \"tooltip\");\n tooltip.setAttribute(\"popover\", \"manual\");\n tooltip.setAttribute(\"data-instant\", \"true\");\n do {\n tooltip.id = `k2b-chart-tooltip-${++tooltipId}`;\n } while (document.getElementById(tooltip.id));\n container.append(anchor, tooltip);\n const addedTabindex = !container.hasAttribute(\"tabindex\");\n if (addedTabindex) container.setAttribute(\"tabindex\", \"0\");\n\n const inspector = createChartInspector({\n container: () => container,\n cursor: () => options.cursor,\n tooltip: () => tooltip,\n anchor: () => anchor,\n kind: () => options.kind,\n enabled: () => true,\n format: options.format,\n select: (selection) => options.select?.(selection),\n });\n container.addEventListener(\"pointerdown\", inspector.down);\n container.addEventListener(\"pointermove\", inspector.move);\n container.addEventListener(\"click\", inspector.click);\n container.addEventListener(\"pointerleave\", inspector.leave);\n container.addEventListener(\"focusin\", inspector.focus);\n container.addEventListener(\"focusout\", inspector.close);\n container.addEventListener(\"keydown\", inspector.key);\n const removeOutside = closeChartInspectionOnOutside({ container: () => container, tooltip: () => tooltip, close: inspector.close });\n const unlinkCursor = inspector.linkCursor(options.cursor);\n let destroyed = false;\n return {\n invalidate: () => {\n if (!destroyed) inspector.invalidate();\n },\n close: () => {\n if (!destroyed) inspector.close();\n },\n destroy() {\n if (destroyed) return;\n destroyed = true;\n container.removeEventListener(\"pointerdown\", inspector.down);\n container.removeEventListener(\"pointermove\", inspector.move);\n container.removeEventListener(\"click\", inspector.click);\n container.removeEventListener(\"pointerleave\", inspector.leave);\n container.removeEventListener(\"focusin\", inspector.focus);\n container.removeEventListener(\"focusout\", inspector.close);\n container.removeEventListener(\"keydown\", inspector.key);\n removeOutside();\n unlinkCursor();\n inspector.destroy();\n for (const element of container.querySelectorAll<SVGGraphicsElement>(\"[data-chart-datum]\")) {\n element.removeAttribute(\"data-inspected\");\n element.style.removeProperty(\"--k2b-chart-inspection-color\");\n if (!element.getAttribute(\"style\")) element.removeAttribute(\"style\");\n }\n // Inspection geometry the inspector wrote onto the host container.\n for (const name of [\"inspection-x\", \"inspection-y\", \"plot-left\", \"plot-right\", \"plot-top\", \"plot-bottom\"])\n container.style.removeProperty(`--k2b-chart-${name}`);\n anchor.remove();\n tooltip.remove();\n if (addedTabindex) container.removeAttribute(\"tabindex\");\n },\n };\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":[],"sources":["content/chart-inspection-core.ts"],"sourcesContent":["import type { ChartDatum, charts } from \"@k2b/stdlib\";\nimport { positionTooltipSurface } from \"../feedback/tooltip-position\";\nimport type { ChartCursor, ChartCursorState } from \"./chart-cursor\";\n\nexport type ChartKind = keyof typeof charts;\n\nexport type ChartDatumRef = Pick<ChartDatum, \"role\" | \"index\" | \"seriesIndex\">;\nexport const sameChartDatum = (a: ChartDatumRef, b: ChartDatumRef) =>\n a.role === b.role && a.index === b.index && a.seriesIndex === b.seriesIndex;\n\nexport type ChartSelection = { kind: ChartKind; datum: ChartDatum };\nexport type ChartTooltip = { title?: string; rows: readonly { label: string; value: string }[] };\nexport type ChartTooltipFormatter = (selection: ChartSelection) => ChartTooltip;\n\ntype Entry = { element: SVGGraphicsElement; datum: ChartDatum };\nconst object = (value: unknown): value is Record<string, unknown> => typeof value === \"object\" && value !== null;\nconst pair = (value: unknown): value is [number, number] =>\n Array.isArray(value) && value.length === 2 && value.every((n) => typeof n === \"number\" && Number.isFinite(n));\nconst roles = new Set([\"point\", \"item\", \"bin\", \"box\", \"outlier\", \"value\", \"cell\", \"interval\"]);\nexport function isChartDatum(value: unknown): value is ChartDatum {\n return (\n object(value) &&\n Number.isInteger(value.index) &&\n typeof value.index === \"number\" &&\n value.index >= 0 &&\n (value.seriesIndex === undefined ||\n (typeof value.seriesIndex === \"number\" && Number.isInteger(value.seriesIndex) && value.seriesIndex >= 0)) &&\n typeof value.role === \"string\" &&\n roles.has(value.role) &&\n pair(value.anchor) &&\n (value.grid === undefined || pair(value.grid)) &&\n (value.label === undefined || typeof value.label === \"string\") &&\n Array.isArray(value.values) &&\n value.values.every(\n (field) =>\n object(field) &&\n typeof field.key === \"string\" &&\n (typeof field.value === \"string\" || (typeof field.value === \"number\" && Number.isFinite(field.value))) &&\n (field.formatted === undefined || typeof field.formatted === \"string\"),\n )\n );\n}\n\n/** Adds or removes only the tooltip id, keeping descriptions the host put on the container. */\nconst describe = (container: HTMLElement, id: string, on: boolean) => {\n const ids = (container.getAttribute(\"aria-describedby\") ?? \"\").split(/\\s+/).filter((token) => token && token !== id);\n if (on) ids.push(id);\n if (ids.length) container.setAttribute(\"aria-describedby\", ids.join(\" \"));\n else container.removeAttribute(\"aria-describedby\");\n};\n\n/** Enhances existing SVG nodes. Pointer/focus changes never rebuild the chart. */\nexport function createChartInspector(options: {\n container: () => HTMLElement | undefined;\n cursor?: () => ChartCursor | undefined;\n tooltip: () => HTMLSpanElement | undefined;\n anchor: () => HTMLSpanElement | undefined;\n kind: () => ChartKind;\n enabled: () => boolean;\n format: ChartTooltipFormatter;\n select: (selection: ChartSelection) => void;\n}) {\n const source = Symbol(\"chart cursor\");\n let entries: Entry[] | undefined;\n let sortedPoints: Entry[] = [];\n const byElement = new Map<Element, Entry>();\n let active: Entry | undefined;\n let highlighted: Entry[] = [];\n let pinned = false;\n let pointerStart: { x: number; y: number } | undefined;\n let moved = false;\n let pending: { x: number; y: number; target: Element | null } | undefined;\n let frame: number | undefined;\n // The cursor this chart is subscribed to. Closing reads it instead of the cursor prop: a chart also closes\n // while it unmounts, when a parent `<Show>` may already have dropped the value the prop came from.\n let linkedCursor: ChartCursor | undefined;\n\n const records = () => {\n if (!entries || (entries.length > 0 && !entries[0]!.element.isConnected)) {\n entries = [];\n byElement.clear();\n sortedPoints = [];\n for (const element of Array.from(options.container()?.querySelectorAll<SVGGraphicsElement>(\"[data-chart-datum]\") ?? [])) {\n try {\n const value: unknown = JSON.parse(element.getAttribute(\"data-chart-datum\") ?? \"null\");\n if (isChartDatum(value)) {\n const entry = { element, datum: value };\n entries.push(entry);\n byElement.set(element, entry);\n }\n } catch {\n /* Only valid renderer metadata participates in inspection. */\n }\n }\n sortedPoints = entries.filter((entry) => entry.datum.role === \"point\").sort((a, b) => a.datum.anchor[0] - b.datum.anchor[0]);\n }\n return entries;\n };\n const highlightColor = (item: Entry): string => {\n // Read the actual paint before applying inspection styles, including\n // custom series and threshold colors. Invisible points use their line.\n const point = item.element.querySelector(\".stdlib-chart-inspection-point\");\n const source = point\n ? options\n .container()\n ?.querySelector(\n options.kind() === \"line\"\n ? `.stdlib-chart-line.stdlib-chart-series-${(item.datum.seriesIndex ?? 0) % 8}`\n : \".stdlib-chart-sparkline, .stdlib-chart-stat-sparkline\",\n )\n : (item.element.querySelector(\".stdlib-chart-bar-gauge-fill, .stdlib-chart-gauge-fill, .stdlib-chart-stat-value\") ??\n item.element.querySelector(\"rect, path, circle\"));\n const paint = source ? source.ownerDocument.defaultView?.getComputedStyle(source) : undefined;\n const color =\n (point || item.element.hasAttribute(\"data-chart-reference\") ? paint?.stroke : paint?.fill) ||\n `var(--stdlib-chart-c${((item.datum.seriesIndex ?? 0) % 8) + 1})`;\n return `color-mix(in srgb, ${color} 72%, var(--k2b-chart-highlight-mix))`;\n };\n const selectData = (selected: readonly ChartDatumRef[]) => {\n for (const entry of records()) {\n const matches = selected.some((datum) => sameChartDatum(datum, entry.datum));\n if (matches) entry.element.style.setProperty(\"--k2b-chart-selection-color\", highlightColor(entry));\n else entry.element.style.removeProperty(\"--k2b-chart-selection-color\");\n entry.element.toggleAttribute(\"data-selected\", matches);\n }\n };\n const screenPoint = (entry: Entry) => {\n const matrix = entry.element.getScreenCTM?.();\n const [x, y] = entry.datum.anchor;\n if (matrix) return { x: matrix.a * x + matrix.c * y + matrix.e, y: matrix.b * x + matrix.d * y + matrix.f };\n const rect = entry.element.getBoundingClientRect();\n return { x: rect.x + rect.width / 2, y: rect.y + rect.height / 2 };\n };\n const visibleRecords = () => {\n const nodes = records();\n if (options.kind() !== \"map\") return nodes;\n const viewport = options.container()?.querySelector<SVGSVGElement>(\".stdlib-chart-map-viewport\");\n if (!viewport?.getScreenCTM?.()) return nodes;\n const root = viewport.ownerSVGElement?.getBoundingClientRect();\n if (!root?.width || !root.height) return nodes;\n const width = viewport?.width?.baseVal.value;\n const height = viewport?.height?.baseVal.value;\n if (!width || !height) return nodes;\n const left = root.left + viewport.x.baseVal.value;\n const top = root.top + viewport.y.baseVal.value;\n const clip = { left, top, right: left + width, bottom: top + height };\n return nodes.filter((entry) => {\n const point = screenPoint(entry);\n return point.x >= clip.left && point.x <= clip.right && point.y >= clip.top && point.y <= clip.bottom;\n });\n };\n const rawX = (entry: Entry) => entry.datum.values.find((field) => field.key === \"x\")?.value;\n const seriesChart = () => options.kind() === \"line\" || options.kind() === \"sparkline\";\n const clearHighlight = () => {\n for (const entry of highlighted) {\n entry.element.removeAttribute(\"data-inspected\");\n entry.element.style.removeProperty(\"--k2b-chart-inspection-color\");\n if (!entry.element.getAttribute(\"style\")) entry.element.removeAttribute(\"style\");\n }\n highlighted = [];\n };\n const close = (broadcast = true, cancelPending = true) => {\n const state = linkedCursor?.read();\n if (broadcast && state && state.source !== source) return;\n if (broadcast) linkedCursor?.clear(source);\n options.container()?.removeAttribute(\"data-cursor-source\");\n pinned = false;\n active = undefined;\n clearHighlight();\n const container = options.container(),\n id = options.tooltip()?.id;\n if (container && id) describe(container, id, false);\n options.container()?.removeAttribute(\"data-inspecting\");\n const tooltip = options.tooltip();\n if (tooltip) {\n try {\n if (tooltip.matches(\":popover-open\")) tooltip.hidePopover();\n } catch {\n /* Detached during navigation. */\n }\n }\n if (cancelPending) {\n if (frame !== undefined) cancelAnimationFrame(frame);\n frame = undefined;\n pending = undefined;\n }\n };\n const invalidate = () => {\n options.cursor?.()?.clear(source);\n close(false);\n entries = undefined;\n sortedPoints = [];\n byElement.clear();\n receive(options.cursor?.()?.read() ?? null);\n };\n const show = (entry: Entry, broadcast = true) => {\n const x = rawX(entry);\n if (broadcast && options.kind() === \"line\" && typeof x === \"number\") options.cursor?.()?.move(source, x);\n const tooltip = options.tooltip(),\n anchor = options.anchor(),\n container = options.container();\n if (!tooltip || !anchor || !container || !options.enabled()) return;\n if (active === entry && tooltip.matches(\":popover-open\")) return;\n clearHighlight();\n active = entry;\n highlighted = options.kind() === \"line\" ? records().filter((candidate) => rawX(candidate) === rawX(entry)) : [entry];\n for (const item of highlighted) {\n item.element.style.setProperty(\"--k2b-chart-inspection-color\", highlightColor(item));\n item.element.setAttribute(\"data-inspected\", \"true\");\n }\n const document = tooltip.ownerDocument;\n const contents = highlighted.map((item) => ({\n item,\n content: options.format({ kind: options.kind(), datum: item.datum }),\n missing: false,\n }));\n if (options.cursor?.() && options.kind() === \"line\") {\n const present = new Set(highlighted.map((item) => item.datum.seriesIndex));\n for (const item of records()) {\n if (present.has(item.datum.seriesIndex)) continue;\n present.add(item.datum.seriesIndex);\n contents.push({ item, content: options.format({ kind: options.kind(), datum: item.datum }), missing: true });\n }\n contents.sort((a, b) => (a.item.datum.seriesIndex ?? 0) - (b.item.datum.seriesIndex ?? 0));\n }\n tooltip.replaceChildren();\n const sharedTitle = typeof x === \"number\" ? options.cursor?.()?.formatX?.(x) : undefined;\n const commonTitle =\n sharedTitle ??\n (contents.every(({ content }) => content.title === contents[0]?.content.title) ? contents[0]?.content.title : undefined);\n if (commonTitle) {\n const title = document.createElement(\"strong\");\n title.className = \"k2b-chart__tooltip-title\";\n title.textContent = commonTitle;\n tooltip.append(title);\n }\n for (const { item, content, missing } of contents) {\n if (content.title && !commonTitle) {\n const title = document.createElement(\"strong\");\n title.className = \"k2b-chart__tooltip-title\";\n title.textContent = content.title;\n tooltip.append(title);\n }\n for (const row of content.rows) {\n const line = document.createElement(\"span\");\n line.className = \"k2b-chart__tooltip-row\";\n if (options.kind() === \"line\") {\n const swatch = document.createElement(\"i\");\n swatch.setAttribute(\"aria-hidden\", \"true\");\n const series = container.querySelector(`.stdlib-chart-line.stdlib-chart-series-${(item.datum.seriesIndex ?? 0) % 8}`);\n swatch.style.background = series\n ? getComputedStyle(series).stroke\n : `var(--stdlib-chart-c${((item.datum.seriesIndex ?? 0) % 8) + 1})`;\n line.append(swatch);\n }\n const label = document.createElement(\"span\");\n label.textContent = `${row.label}: `;\n const value = document.createElement(\"b\");\n value.textContent = missing ? \"—\" : row.value;\n line.append(label, value);\n tooltip.append(line);\n }\n }\n const rect = container.getBoundingClientRect(),\n point = screenPoint(entry);\n anchor.style.left = `${point.x - rect.left}px`;\n anchor.style.top = `${point.y - rect.top}px`;\n updatePlotBounds();\n container.style.setProperty(\"--k2b-chart-inspection-x\", `${point.x - rect.left}px`);\n container.setAttribute(\"data-inspecting\", seriesChart() ? \"series\" : \"datum\");\n describe(container, tooltip.id, true);\n try {\n if (!tooltip.matches(\":popover-open\")) tooltip.showPopover();\n positionTooltipSurface(tooltip, anchor);\n } catch {\n /* SVG titles remain available without the Popover API. */\n }\n };\n const updatePlotBounds = () => {\n const container = options.container();\n if (!container) return;\n const axes = Array.from(container.querySelectorAll(\".stdlib-chart-axis\")).map((axis) => axis.getBoundingClientRect());\n if (axes.length < 2) return;\n const left = Math.min(...axes.map((a) => a.left)),\n right = Math.max(...axes.map((a) => a.right));\n const top = Math.min(...axes.map((a) => a.top)),\n bottom = Math.max(...axes.map((a) => a.bottom));\n if (right <= left || bottom <= top) return;\n const rect = container.getBoundingClientRect();\n for (const [name, value] of Object.entries({\n left: left - rect.left,\n right: rect.right - right,\n top: top - rect.top,\n bottom: rect.bottom - bottom,\n }))\n container.style.setProperty(`--k2b-chart-plot-${name}`, `${value}px`);\n return { left, right, top, bottom };\n };\n const receive = (state: ChartCursorState) => {\n if (state?.source === source) return;\n close(false, false);\n if (!state || options.kind() !== \"line\") return;\n const entry = records().find((item) => rawX(item) === state.x);\n if (entry) show(entry, false);\n };\n const linkCursor = (cursor: ChartCursor | undefined): (() => void) => {\n linkedCursor = cursor;\n const unsubscribe = cursor?.subscribe(receive);\n return () => {\n unsubscribe?.();\n cursor?.clear(source);\n linkedCursor = undefined;\n };\n };\n const nearest = (x: number, y: number, target: Element | null): Entry | undefined => {\n if (target?.closest(\"button,a\") && !target.closest(\"[data-chart-datum]\")) return;\n const nodes = visibleRecords();\n // A mark wins before the plot bounds: the first and last points of a line sit on the plot's edges, so half of\n // their hit area lies outside it.\n const direct = target?.closest(\"[data-chart-datum]\");\n const hit = direct ? byElement.get(direct) : undefined;\n if (hit && nodes.includes(hit)) return hit;\n if (seriesChart()) {\n const plot = updatePlotBounds();\n // SVG transforms and DOM rectangles can round the same painted edge\n // differently. Keep its half-pixel raster fringe inspectable.\n const edgeTolerance = 0.5;\n if (\n plot &&\n (x < plot.left - edgeTolerance || x > plot.right + edgeTolerance || y < plot.top - edgeTolerance || y > plot.bottom + edgeTolerance)\n )\n return;\n }\n // Exact shapes win. A small physical hit radius also reaches tiny or\n // zero-sized marks; distant whitespace leaves the chart unselected.\n const points = seriesChart() ? sortedPoints : nodes;\n if (seriesChart() && points.length) {\n const matrix = points[0]!.element.getScreenCTM?.();\n if (matrix) {\n const determinant = matrix.a * matrix.d - matrix.b * matrix.c;\n if (!determinant) return;\n const targetX = ((x - matrix.e) * matrix.d - (y - matrix.f) * matrix.c) / determinant;\n let low = 0,\n high = points.length - 1;\n while (low < high) {\n const mid = Math.floor((low + high) / 2);\n if (points[mid]!.datum.anchor[0] < targetX) low = mid + 1;\n else high = mid;\n }\n const previous = Math.max(0, low - 1);\n return Math.abs(points[previous]!.datum.anchor[0] - targetX) <= Math.abs(points[low]!.datum.anchor[0] - targetX)\n ? points[previous]\n : points[low];\n }\n }\n const matrices = new Map<SVGSVGElement, DOMMatrix | null>();\n let best: Entry | undefined,\n distance = Infinity;\n for (const entry of points) {\n const svg = entry.element.ownerSVGElement;\n if (svg && !matrices.has(svg)) matrices.set(svg, svg.getScreenCTM?.() ?? null);\n const matrix = svg ? matrices.get(svg) : null;\n const [ax, ay] = entry.datum.anchor;\n const point = matrix\n ? { x: matrix.a * ax + matrix.c * ay + matrix.e, y: matrix.b * ax + matrix.d * ay + matrix.f }\n : screenPoint(entry);\n const dx = point.x - x,\n dy = point.y - y;\n const next = seriesChart() ? Math.abs(dx) : Math.hypot(dx, dy);\n if (next < distance) {\n distance = next;\n best = entry;\n }\n }\n return seriesChart() || distance <= 24 ? best : undefined;\n };\n const move = (event: PointerEvent) => {\n if (event.target instanceof Node && options.tooltip()?.contains(event.target)) return;\n if (pointerStart && Math.hypot(event.clientX - pointerStart.x, event.clientY - pointerStart.y) > 6) moved = true;\n if (!options.enabled() || pinned || event.pointerType === \"touch\" || event.buttons) return;\n pending = { x: event.clientX, y: event.clientY, target: event.target instanceof Element ? event.target : null };\n if (frame !== undefined) return;\n frame = requestAnimationFrame(() => {\n frame = undefined;\n const sample = pending;\n pending = undefined;\n if (!sample) return;\n const entry = nearest(sample.x, sample.y, sample.target);\n if (entry) {\n show(entry);\n if (seriesChart()) {\n const container = options.container();\n container?.setAttribute(\"data-cursor-source\", \"true\");\n container?.style.setProperty(\"--k2b-chart-inspection-y\", `${sample.y - container.getBoundingClientRect().top}px`);\n }\n } else close();\n });\n };\n const down = (event: PointerEvent) => {\n pointerStart = { x: event.clientX, y: event.clientY };\n moved = false;\n };\n const click = (event: MouseEvent) => {\n if (!options.enabled() || moved || (event.target instanceof Element && event.target.closest(\"button,a\"))) return;\n const entry = nearest(event.clientX, event.clientY, event.target instanceof Element ? event.target : null);\n if (!entry) {\n close();\n return;\n }\n pinned = true;\n show(entry);\n options.select({ kind: options.kind(), datum: entry.datum });\n };\n const focus = (event: FocusEvent) => {\n if (event.target !== options.container() || !options.enabled()) return;\n const nodes = visibleRecords();\n const first = options.kind() === \"line\" ? sortedPoints.at(-1) : nodes[0];\n if (first) show(first);\n };\n const key = (event: KeyboardEvent): boolean => {\n if (!options.enabled() || event.target !== options.container()) return false;\n if (event.key === \"Escape\") {\n close();\n return true;\n }\n if (event.key === \"Enter\" && active) {\n if (options.kind() === \"map\" && !visibleRecords().includes(active)) {\n close();\n return true;\n }\n event.preventDefault();\n pinned = true;\n const link = active.element.closest(\"a\");\n if (link) link.dispatchEvent(new MouseEvent(\"click\", { bubbles: true, cancelable: true }));\n else options.select({ kind: options.kind(), datum: active.datum });\n return true;\n }\n const navigationChart = options.kind() === \"map\" || options.kind() === \"stateTimeline\";\n if (navigationChart && !event.altKey) return false;\n if (![\"Home\", \"End\", \"ArrowLeft\", \"ArrowRight\", \"ArrowUp\", \"ArrowDown\"].includes(event.key)) return false;\n let nodes = visibleRecords();\n if (seriesChart()) nodes = [...nodes].sort((a, b) => a.datum.anchor[0] - b.datum.anchor[0]);\n if (options.kind() === \"line\") {\n const seen = new Set<string | number | undefined>();\n nodes = nodes.filter((entry) => {\n const x = rawX(entry);\n if (seen.has(x)) return false;\n seen.add(x);\n return true;\n });\n }\n if (!nodes.length) return false;\n event.preventDefault();\n pinned = false;\n let index = active\n ? options.kind() === \"line\"\n ? nodes.findIndex((entry) => rawX(entry) === rawX(active!))\n : nodes.indexOf(active)\n : -1;\n if (event.key === \"Home\") index = 0;\n else if (event.key === \"End\") index = nodes.length - 1;\n else if (active?.datum.grid && [\"ArrowUp\", \"ArrowDown\", \"ArrowLeft\", \"ArrowRight\"].includes(event.key)) {\n const [x, y] = active.datum.grid;\n const dx = event.key === \"ArrowLeft\" ? -1 : event.key === \"ArrowRight\" ? 1 : 0;\n const dy = event.key === \"ArrowUp\" ? -1 : event.key === \"ArrowDown\" ? 1 : 0;\n const next = nodes\n .filter(\n (entry) =>\n entry.datum.grid &&\n (dx\n ? entry.datum.grid[1] === y && (entry.datum.grid[0] - x) * dx > 0\n : entry.datum.grid[0] === x && (entry.datum.grid[1] - y) * dy > 0),\n )\n .sort(\n (a, b) =>\n Math.abs(a.datum.grid![0] - x) +\n Math.abs(a.datum.grid![1] - y) -\n Math.abs(b.datum.grid![0] - x) -\n Math.abs(b.datum.grid![1] - y),\n )[0];\n if (next) index = nodes.indexOf(next);\n } else index += event.key === \"ArrowLeft\" || event.key === \"ArrowUp\" ? -1 : 1;\n show(nodes[Math.max(0, Math.min(nodes.length - 1, index))]!);\n return true;\n };\n return {\n selectDatum: (selected: ChartDatumRef | null | undefined) => selectData(selected ? [selected] : []),\n selectData,\n linkCursor,\n destroy: () => close(false),\n move,\n down,\n click,\n focus,\n key,\n close: () => close(),\n invalidate,\n leave: () => {\n if (!pinned) close();\n },\n };\n}\n\n/** Dismiss inspection on outside interaction, but allow the tooltip itself to scroll. */\nexport function closeChartInspectionOnOutside(options: {\n container: () => HTMLElement | undefined;\n tooltip: () => HTMLElement | undefined;\n close: () => void;\n}): () => void {\n const outside = (event: PointerEvent) => {\n if (event.target instanceof Node && !options.container()?.contains(event.target)) options.close();\n };\n const scroll = (event: Event) => {\n if (event.target instanceof Node && options.tooltip()?.contains(event.target)) return;\n options.close();\n };\n window.addEventListener(\"pointerdown\", outside);\n window.addEventListener(\"scroll\", scroll, true);\n window.addEventListener(\"resize\", options.close);\n return () => {\n window.removeEventListener(\"pointerdown\", outside);\n window.removeEventListener(\"scroll\", scroll, true);\n window.removeEventListener(\"resize\", options.close);\n };\n}\n\nexport type InspectChartOptions = {\n kind: ChartKind;\n format: ChartTooltipFormatter;\n select?: (selection: ChartSelection) => void;\n cursor?: ChartCursor;\n};\nexport type ChartInspection = { invalidate(): void; close(): void; destroy(): void };\n\nlet tooltipId = 0;\n\n/** Attach inspection to stdlib SVG rendered with inspect: true, without a framework. */\nexport function inspectChart(container: HTMLElement, options: InspectChartOptions): ChartInspection {\n const document = container.ownerDocument;\n const anchor = document.createElement(\"span\");\n anchor.className = \"k2b-chart__anchor\";\n anchor.setAttribute(\"aria-hidden\", \"true\");\n const tooltip = document.createElement(\"span\");\n tooltip.className = \"k2b-tooltip k2b-chart__tooltip\";\n tooltip.setAttribute(\"role\", \"tooltip\");\n tooltip.setAttribute(\"popover\", \"manual\");\n tooltip.setAttribute(\"data-instant\", \"true\");\n do {\n tooltip.id = `k2b-chart-tooltip-${++tooltipId}`;\n } while (document.getElementById(tooltip.id));\n container.append(anchor, tooltip);\n const addedTabindex = !container.hasAttribute(\"tabindex\");\n if (addedTabindex) container.setAttribute(\"tabindex\", \"0\");\n\n const inspector = createChartInspector({\n container: () => container,\n cursor: () => options.cursor,\n tooltip: () => tooltip,\n anchor: () => anchor,\n kind: () => options.kind,\n enabled: () => true,\n format: options.format,\n select: (selection) => options.select?.(selection),\n });\n container.addEventListener(\"pointerdown\", inspector.down);\n container.addEventListener(\"pointermove\", inspector.move);\n container.addEventListener(\"click\", inspector.click);\n container.addEventListener(\"pointerleave\", inspector.leave);\n container.addEventListener(\"focusin\", inspector.focus);\n container.addEventListener(\"focusout\", inspector.close);\n container.addEventListener(\"keydown\", inspector.key);\n const removeOutside = closeChartInspectionOnOutside({ container: () => container, tooltip: () => tooltip, close: inspector.close });\n const unlinkCursor = inspector.linkCursor(options.cursor);\n let destroyed = false;\n return {\n invalidate: () => {\n if (!destroyed) inspector.invalidate();\n },\n close: () => {\n if (!destroyed) inspector.close();\n },\n destroy() {\n if (destroyed) return;\n destroyed = true;\n container.removeEventListener(\"pointerdown\", inspector.down);\n container.removeEventListener(\"pointermove\", inspector.move);\n container.removeEventListener(\"click\", inspector.click);\n container.removeEventListener(\"pointerleave\", inspector.leave);\n container.removeEventListener(\"focusin\", inspector.focus);\n container.removeEventListener(\"focusout\", inspector.close);\n container.removeEventListener(\"keydown\", inspector.key);\n removeOutside();\n unlinkCursor();\n inspector.destroy();\n for (const element of container.querySelectorAll<SVGGraphicsElement>(\"[data-chart-datum]\")) {\n element.removeAttribute(\"data-inspected\");\n element.style.removeProperty(\"--k2b-chart-inspection-color\");\n if (!element.getAttribute(\"style\")) element.removeAttribute(\"style\");\n }\n // Inspection geometry the inspector wrote onto the host container.\n for (const name of [\"inspection-x\", \"inspection-y\", \"plot-left\", \"plot-right\", \"plot-top\", \"plot-bottom\"])\n container.style.removeProperty(`--k2b-chart-${name}`);\n anchor.remove();\n tooltip.remove();\n if (addedTabindex) container.removeAttribute(\"tabindex\");\n },\n };\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -114,6 +114,7 @@ const highlightMarkdownInline = escaped => escaped.replace(/(`)([^`\n]+?)(`)/g,
|
|
|
114
114
|
export const highlightMarkdownDisplay = code => code.split("\n").map(highlightMarkdownLine).join("\n");
|
|
115
115
|
export const highlightCodeDisplayLines = (code, language = "text") => {
|
|
116
116
|
const lines = code.split("\n");
|
|
117
|
+
if (language === "sql") return highlightSql(code).split("\n");
|
|
117
118
|
if (language === "text") return lines.map(line => escapeCodeHtml(line || " "));
|
|
118
119
|
if (language === "markdown" || language === "md") {
|
|
119
120
|
let fencedLanguage;
|
|
@@ -136,9 +137,74 @@ export const highlightCodeDisplayLines = (code, language = "text") => {
|
|
|
136
137
|
return lines.map(line => highlightCode(line || " "));
|
|
137
138
|
};
|
|
138
139
|
export const highlightCodeDisplay = (code, language = "text") => {
|
|
140
|
+
if (language === "sql") return highlightSql(code);
|
|
139
141
|
if (code.includes("\n")) return highlightCodeDisplayLines(code, language).join("\n");
|
|
140
142
|
if (language === "markdown" || language === "md") return highlightMarkdownDisplay(code);
|
|
141
143
|
if (language === "text") return escapeCodeHtml(code);
|
|
142
144
|
return highlightCode(code);
|
|
143
145
|
};
|
|
146
|
+
const SQL_KEYWORDS = new Set("SELECT WITH FROM WHERE AS AND OR NOT NULL IS IN BETWEEN LIKE ILIKE JOIN LEFT RIGHT INNER OUTER CROSS ON USING UNION ALL DISTINCT GROUP BY HAVING ORDER ASC DESC LIMIT OFFSET CASE WHEN THEN ELSE END OVER PARTITION ROWS RANGE INTERVAL TRUE FALSE SETTINGS FORMAT".split(" "));
|
|
147
|
+
|
|
148
|
+
/** Display-only, tolerant of incomplete SQL while typing. Source is always escaped. */
|
|
149
|
+
export const highlightSql = code => {
|
|
150
|
+
// CodeDisplay puts each returned line into its own <code> element.
|
|
151
|
+
const token = (kind, raw) => raw.split("\n").map(line => wrap(kind, line)).join("\n");
|
|
152
|
+
let out = "",
|
|
153
|
+
i = 0;
|
|
154
|
+
while (i < code.length) {
|
|
155
|
+
const start = i,
|
|
156
|
+
c = code[i];
|
|
157
|
+
if (code.startsWith("--", i)) {
|
|
158
|
+
const end = code.indexOf("\n", i);
|
|
159
|
+
i = end < 0 ? code.length : end;
|
|
160
|
+
out += token("cd-c", code.slice(start, i));
|
|
161
|
+
} else if (code.startsWith("/*", i)) {
|
|
162
|
+
i += 2;
|
|
163
|
+
let depth = 1;
|
|
164
|
+
while (i < code.length && depth) {
|
|
165
|
+
if (code.startsWith("/*", i)) {
|
|
166
|
+
depth++;
|
|
167
|
+
i += 2;
|
|
168
|
+
} else if (code.startsWith("*/", i)) {
|
|
169
|
+
depth--;
|
|
170
|
+
i += 2;
|
|
171
|
+
} else i++;
|
|
172
|
+
}
|
|
173
|
+
out += token("cd-c", code.slice(start, i));
|
|
174
|
+
} else if (c === "'" || c === '"' || c === "`") {
|
|
175
|
+
i++;
|
|
176
|
+
while (i < code.length) {
|
|
177
|
+
if (code[i] === "\\") {
|
|
178
|
+
i = Math.min(code.length, i + 2);
|
|
179
|
+
continue;
|
|
180
|
+
}
|
|
181
|
+
if (code[i++] === c) {
|
|
182
|
+
if (code[i] === c) {
|
|
183
|
+
i++;
|
|
184
|
+
continue;
|
|
185
|
+
}
|
|
186
|
+
break;
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
out += token(c === "'" ? "cd-s" : "cd-p", code.slice(start, i));
|
|
190
|
+
} else if (c === ":" && code[i - 1] !== ":" && !/[A-Za-z0-9_]/.test(code[i - 1] ?? "") && /[A-Za-z_]/.test(code[i + 1] ?? "")) {
|
|
191
|
+
i += 2;
|
|
192
|
+
while (/[A-Za-z0-9_]/.test(code[i] ?? "")) i++;
|
|
193
|
+
out += token("cd-a cd-param", code.slice(start, i));
|
|
194
|
+
} else if (/[A-Za-z_]/.test(c)) {
|
|
195
|
+
i++;
|
|
196
|
+
while (/[A-Za-z0-9_]/.test(code[i] ?? "")) i++;
|
|
197
|
+
const word = code.slice(start, i);
|
|
198
|
+
out += SQL_KEYWORDS.has(word.toUpperCase()) ? token("cd-k", word) : escapeCodeHtml(word);
|
|
199
|
+
} else if (isDigit(c)) {
|
|
200
|
+
i++;
|
|
201
|
+
while (/[0-9.]/.test(code[i] ?? "")) i++;
|
|
202
|
+
out += token("cd-n", code.slice(start, i));
|
|
203
|
+
} else {
|
|
204
|
+
out += escapeCodeHtml(c);
|
|
205
|
+
i++;
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
return out;
|
|
209
|
+
};
|
|
144
210
|
//# sourceMappingURL=code-highlight.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":[],"sources":["content/code-highlight.ts"],"sourcesContent":["/**\n * Small safe highlighters for CodeDisplay.\n *\n * These are display-only highlighters: no AST, no runtime parser, no\n * dependency. Every input character is HTML-escaped before being wrapped\n * in token spans, so the returned strings are safe to inject with\n * `innerHTML`.\n */\n\nconst KEYWORDS = new Set([\n \"const\",\n \"let\",\n \"var\",\n \"function\",\n \"return\",\n \"if\",\n \"else\",\n \"for\",\n \"while\",\n \"import\",\n \"from\",\n \"export\",\n \"default\",\n \"async\",\n \"await\",\n \"new\",\n \"true\",\n \"false\",\n \"null\",\n \"undefined\",\n \"as\",\n \"type\",\n \"interface\",\n \"void\",\n \"this\",\n \"typeof\",\n \"in\",\n \"of\",\n]);\n\nexport type CodeDisplayLanguage = \"ts\" | \"tsx\" | \"js\" | \"jsx\" | \"script\" | \"markdown\" | \"md\" | \"text\";\n\nexport const escapeCodeHtml = (s: string): string => s.replace(/&/g, \"&\").replace(/</g, \"<\").replace(/>/g, \">\");\n\nconst isIdStart = (c: string): boolean => /[A-Za-z_$]/.test(c);\nconst isIdCont = (c: string): boolean => /[\\w$]/.test(c);\nconst isDigit = (c: string): boolean => /[0-9]/.test(c);\nconst wrap = (cls: string, raw: string): string => `<span class=\"${cls}\">${escapeCodeHtml(raw)}</span>`;\nconst isCodeLanguage = (language: string | undefined): boolean =>\n language === \"script\" || language === \"js\" || language === \"jsx\" || language === \"ts\" || language === \"tsx\";\n\nexport const highlightCode = (code: string): string => {\n let out = \"\";\n let i = 0;\n const n = code.length;\n\n while (i < n) {\n const c = code[i]!;\n\n if (c === \"/\" && code[i + 1] === \"/\") {\n const nl = code.indexOf(\"\\n\", i);\n const end = nl === -1 ? n : nl;\n out += wrap(\"cd-c\", code.slice(i, end));\n i = end;\n continue;\n }\n\n if (c === \"/\" && code[i + 1] === \"*\") {\n const close = code.indexOf(\"*/\", i + 2);\n const end = close === -1 ? n : close + 2;\n out += wrap(\"cd-c\", code.slice(i, end));\n i = end;\n continue;\n }\n\n if (c === '\"' || c === \"'\" || c === \"`\") {\n const quote = c;\n let j = i + 1;\n while (j < n) {\n if (code[j] === \"\\\\\") {\n j += 2;\n continue;\n }\n if (code[j] === quote) {\n j++;\n break;\n }\n j++;\n }\n out += wrap(\"cd-s\", code.slice(i, j));\n i = j;\n continue;\n }\n\n if (isDigit(c)) {\n let j = i;\n while (j < n && (isDigit(code[j]!) || code[j] === \".\")) j++;\n out += wrap(\"cd-n\", code.slice(i, j));\n i = j;\n continue;\n }\n\n if (isIdStart(c)) {\n let j = i;\n while (j < n && isIdCont(code[j]!)) j++;\n const word = code.slice(i, j);\n let cls = \"\";\n if (KEYWORDS.has(word)) cls = \"cd-k\";\n else if (/^[A-Z]/.test(word)) cls = \"cd-p\";\n else {\n let k = j;\n while (k < n && code[k] === \" \") k++;\n const next = code[k];\n const prev = i > 0 ? code[i - 1] : \"\";\n const assignment = next === \"=\" && code[k + 1] !== \"=\" && code[k + 1] !== \">\";\n const objectKey = next === \":\";\n const functionCall = next === \"(\";\n const property = prev === \".\";\n if (assignment || objectKey) cls = \"cd-a\";\n else if (functionCall || property) cls = \"cd-f\";\n }\n out += cls ? wrap(cls, word) : escapeCodeHtml(word);\n i = j;\n continue;\n }\n\n out += escapeCodeHtml(c);\n i++;\n }\n\n return out;\n};\n\nconst highlightMarkdownLine = (line: string): string => {\n const escaped = escapeCodeHtml(line);\n\n const heading = /^(#{1,6})(\\s.*)$/.exec(escaped);\n if (heading) return `<span class=\"cd-md-syntax\">${heading[1]}</span>${highlightMarkdownInline(heading[2] ?? \"\")}`;\n\n const ref = /^(@[A-Za-z][\\w-]*)$/.exec(escaped);\n if (ref) return `<span class=\"cd-md-ref\">${ref[1]}</span>`;\n\n const directive = /^(\\s*:::)([A-Za-z][\\w-]*)?(.*)$/.exec(escaped);\n if (directive) {\n const name = directive[2] ? `<span class=\"cd-md-directive\">${directive[2]}</span>` : \"\";\n return `${directive[1] ? `<span class=\"cd-md-syntax\">${directive[1]}</span>` : \"\"}${name}${highlightMarkdownInline(directive[3] ?? \"\")}`;\n }\n\n const fence = /^(```)(.*)$/.exec(escaped);\n if (fence) {\n const language = fence[2] ? `<span class=\"cd-md-ref\">${fence[2]}</span>` : \"\";\n return `<span class=\"cd-md-syntax\">${fence[1]}</span>${language}`;\n }\n\n const table = /^(\\s*\\|)(.*)(\\|\\s*)$/.exec(escaped);\n if (table) return `<span class=\"cd-md-syntax\">${table[1]}</span>${table[2]}<span class=\"cd-md-syntax\">${table[3]}</span>`;\n\n const task = /^(\\s*(?:[-*+]|\\d+\\.)\\s+)(\\[[ xX]\\])(\\s+.*)$/.exec(escaped);\n if (task) {\n return `<span class=\"cd-md-syntax\">${task[1]}</span><span class=\"cd-md-checkbox\">${task[2]}</span>${highlightMarkdownInline(task[3] ?? \"\")}`;\n }\n\n const list = /^(\\s*(?:[-*+]|\\d+\\.)\\s+)(.*)$/.exec(escaped);\n if (list) return `<span class=\"cd-md-syntax\">${list[1]}</span>${highlightMarkdownInline(list[2] ?? \"\")}`;\n\n return highlightMarkdownInline(escaped);\n};\n\nconst highlightMarkdownInline = (escaped: string): string =>\n escaped\n .replace(\n /(`)([^`\\n]+?)(`)/g,\n '<span class=\"cd-md-syntax\">$1</span><span class=\"cd-md-code\">$2</span><span class=\"cd-md-syntax\">$3</span>',\n )\n .replace(/(\\*\\*)([^*\\n]+?)(\\*\\*)/g, '<span class=\"cd-md-syntax\">$1</span>$2<span class=\"cd-md-syntax\">$3</span>')\n .replace(/(\\[[^\\]\\n]+?\\])(\\([^)]+\\))/g, '<span class=\"cd-md-link\">$1</span><span class=\"cd-md-syntax\">$2</span>')\n .replace(/(^|\\s)(@[A-Za-z][\\w-]*)/g, '$1<span class=\"cd-md-ref\">$2</span>')\n .replace(/(#[A-Za-z][\\w/-]*)/g, '<span class=\"cd-md-tag\">$1</span>')\n .replace(/(=[A-Z][A-Z0-9_]*\\([^)\\n]*\\))/g, '<span class=\"cd-md-formula\">$1</span>');\n\nexport const highlightMarkdownDisplay = (code: string): string => code.split(\"\\n\").map(highlightMarkdownLine).join(\"\\n\");\n\nexport const highlightCodeDisplayLines = (code: string, language: CodeDisplayLanguage = \"text\"): string[] => {\n const lines = code.split(\"\\n\");\n\n if (language === \"text\") return lines.map((line) => escapeCodeHtml(line || \" \"));\n\n if (language === \"markdown\" || language === \"md\") {\n let fencedLanguage: string | undefined;\n return lines.map((line) => {\n const fence = /^(```)(\\w+)?(.*)$/.exec(line);\n if (fence) {\n const highlightedFence = highlightMarkdownLine(line);\n fencedLanguage = fencedLanguage ? undefined : fence[2];\n return highlightedFence;\n }\n return isCodeLanguage(fencedLanguage) ? highlightCode(line || \" \") : highlightMarkdownLine(line || \" \");\n });\n }\n\n if (lines.length >= 2 && /^```\\w+/.test(lines[0] ?? \"\") && /^```\\s*$/.test(lines[lines.length - 1] ?? \"\")) {\n return lines.map((line, index) => {\n if (index === 0 || index === lines.length - 1) return highlightMarkdownLine(line || \" \");\n return highlightCode(line || \" \");\n });\n }\n\n return lines.map((line) => highlightCode(line || \" \"));\n};\n\nexport const highlightCodeDisplay = (code: string, language: CodeDisplayLanguage = \"text\"): string => {\n if (code.includes(\"\\n\")) return highlightCodeDisplayLines(code, language).join(\"\\n\");\n if (language === \"markdown\" || language === \"md\") return highlightMarkdownDisplay(code);\n if (language === \"text\") return escapeCodeHtml(code);\n return highlightCode(code);\n};\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":[],"sources":["content/code-highlight.ts"],"sourcesContent":["/**\n * Small safe highlighters for CodeDisplay.\n *\n * These are display-only highlighters: no AST, no runtime parser, no\n * dependency. Every input character is HTML-escaped before being wrapped\n * in token spans, so the returned strings are safe to inject with\n * `innerHTML`.\n */\n\nconst KEYWORDS = new Set([\n \"const\",\n \"let\",\n \"var\",\n \"function\",\n \"return\",\n \"if\",\n \"else\",\n \"for\",\n \"while\",\n \"import\",\n \"from\",\n \"export\",\n \"default\",\n \"async\",\n \"await\",\n \"new\",\n \"true\",\n \"false\",\n \"null\",\n \"undefined\",\n \"as\",\n \"type\",\n \"interface\",\n \"void\",\n \"this\",\n \"typeof\",\n \"in\",\n \"of\",\n]);\n\nexport type CodeDisplayLanguage = \"ts\" | \"tsx\" | \"js\" | \"jsx\" | \"script\" | \"markdown\" | \"md\" | \"text\" | \"sql\";\n\nexport const escapeCodeHtml = (s: string): string => s.replace(/&/g, \"&\").replace(/</g, \"<\").replace(/>/g, \">\");\n\nconst isIdStart = (c: string): boolean => /[A-Za-z_$]/.test(c);\nconst isIdCont = (c: string): boolean => /[\\w$]/.test(c);\nconst isDigit = (c: string): boolean => /[0-9]/.test(c);\nconst wrap = (cls: string, raw: string): string => `<span class=\"${cls}\">${escapeCodeHtml(raw)}</span>`;\nconst isCodeLanguage = (language: string | undefined): boolean =>\n language === \"script\" || language === \"js\" || language === \"jsx\" || language === \"ts\" || language === \"tsx\";\n\nexport const highlightCode = (code: string): string => {\n let out = \"\";\n let i = 0;\n const n = code.length;\n\n while (i < n) {\n const c = code[i]!;\n\n if (c === \"/\" && code[i + 1] === \"/\") {\n const nl = code.indexOf(\"\\n\", i);\n const end = nl === -1 ? n : nl;\n out += wrap(\"cd-c\", code.slice(i, end));\n i = end;\n continue;\n }\n\n if (c === \"/\" && code[i + 1] === \"*\") {\n const close = code.indexOf(\"*/\", i + 2);\n const end = close === -1 ? n : close + 2;\n out += wrap(\"cd-c\", code.slice(i, end));\n i = end;\n continue;\n }\n\n if (c === '\"' || c === \"'\" || c === \"`\") {\n const quote = c;\n let j = i + 1;\n while (j < n) {\n if (code[j] === \"\\\\\") {\n j += 2;\n continue;\n }\n if (code[j] === quote) {\n j++;\n break;\n }\n j++;\n }\n out += wrap(\"cd-s\", code.slice(i, j));\n i = j;\n continue;\n }\n\n if (isDigit(c)) {\n let j = i;\n while (j < n && (isDigit(code[j]!) || code[j] === \".\")) j++;\n out += wrap(\"cd-n\", code.slice(i, j));\n i = j;\n continue;\n }\n\n if (isIdStart(c)) {\n let j = i;\n while (j < n && isIdCont(code[j]!)) j++;\n const word = code.slice(i, j);\n let cls = \"\";\n if (KEYWORDS.has(word)) cls = \"cd-k\";\n else if (/^[A-Z]/.test(word)) cls = \"cd-p\";\n else {\n let k = j;\n while (k < n && code[k] === \" \") k++;\n const next = code[k];\n const prev = i > 0 ? code[i - 1] : \"\";\n const assignment = next === \"=\" && code[k + 1] !== \"=\" && code[k + 1] !== \">\";\n const objectKey = next === \":\";\n const functionCall = next === \"(\";\n const property = prev === \".\";\n if (assignment || objectKey) cls = \"cd-a\";\n else if (functionCall || property) cls = \"cd-f\";\n }\n out += cls ? wrap(cls, word) : escapeCodeHtml(word);\n i = j;\n continue;\n }\n\n out += escapeCodeHtml(c);\n i++;\n }\n\n return out;\n};\n\nconst highlightMarkdownLine = (line: string): string => {\n const escaped = escapeCodeHtml(line);\n\n const heading = /^(#{1,6})(\\s.*)$/.exec(escaped);\n if (heading) return `<span class=\"cd-md-syntax\">${heading[1]}</span>${highlightMarkdownInline(heading[2] ?? \"\")}`;\n\n const ref = /^(@[A-Za-z][\\w-]*)$/.exec(escaped);\n if (ref) return `<span class=\"cd-md-ref\">${ref[1]}</span>`;\n\n const directive = /^(\\s*:::)([A-Za-z][\\w-]*)?(.*)$/.exec(escaped);\n if (directive) {\n const name = directive[2] ? `<span class=\"cd-md-directive\">${directive[2]}</span>` : \"\";\n return `${directive[1] ? `<span class=\"cd-md-syntax\">${directive[1]}</span>` : \"\"}${name}${highlightMarkdownInline(directive[3] ?? \"\")}`;\n }\n\n const fence = /^(```)(.*)$/.exec(escaped);\n if (fence) {\n const language = fence[2] ? `<span class=\"cd-md-ref\">${fence[2]}</span>` : \"\";\n return `<span class=\"cd-md-syntax\">${fence[1]}</span>${language}`;\n }\n\n const table = /^(\\s*\\|)(.*)(\\|\\s*)$/.exec(escaped);\n if (table) return `<span class=\"cd-md-syntax\">${table[1]}</span>${table[2]}<span class=\"cd-md-syntax\">${table[3]}</span>`;\n\n const task = /^(\\s*(?:[-*+]|\\d+\\.)\\s+)(\\[[ xX]\\])(\\s+.*)$/.exec(escaped);\n if (task) {\n return `<span class=\"cd-md-syntax\">${task[1]}</span><span class=\"cd-md-checkbox\">${task[2]}</span>${highlightMarkdownInline(task[3] ?? \"\")}`;\n }\n\n const list = /^(\\s*(?:[-*+]|\\d+\\.)\\s+)(.*)$/.exec(escaped);\n if (list) return `<span class=\"cd-md-syntax\">${list[1]}</span>${highlightMarkdownInline(list[2] ?? \"\")}`;\n\n return highlightMarkdownInline(escaped);\n};\n\nconst highlightMarkdownInline = (escaped: string): string =>\n escaped\n .replace(\n /(`)([^`\\n]+?)(`)/g,\n '<span class=\"cd-md-syntax\">$1</span><span class=\"cd-md-code\">$2</span><span class=\"cd-md-syntax\">$3</span>',\n )\n .replace(/(\\*\\*)([^*\\n]+?)(\\*\\*)/g, '<span class=\"cd-md-syntax\">$1</span>$2<span class=\"cd-md-syntax\">$3</span>')\n .replace(/(\\[[^\\]\\n]+?\\])(\\([^)]+\\))/g, '<span class=\"cd-md-link\">$1</span><span class=\"cd-md-syntax\">$2</span>')\n .replace(/(^|\\s)(@[A-Za-z][\\w-]*)/g, '$1<span class=\"cd-md-ref\">$2</span>')\n .replace(/(#[A-Za-z][\\w/-]*)/g, '<span class=\"cd-md-tag\">$1</span>')\n .replace(/(=[A-Z][A-Z0-9_]*\\([^)\\n]*\\))/g, '<span class=\"cd-md-formula\">$1</span>');\n\nexport const highlightMarkdownDisplay = (code: string): string => code.split(\"\\n\").map(highlightMarkdownLine).join(\"\\n\");\n\nexport const highlightCodeDisplayLines = (code: string, language: CodeDisplayLanguage = \"text\"): string[] => {\n const lines = code.split(\"\\n\");\n if (language === \"sql\") return highlightSql(code).split(\"\\n\");\n\n if (language === \"text\") return lines.map((line) => escapeCodeHtml(line || \" \"));\n\n if (language === \"markdown\" || language === \"md\") {\n let fencedLanguage: string | undefined;\n return lines.map((line) => {\n const fence = /^(```)(\\w+)?(.*)$/.exec(line);\n if (fence) {\n const highlightedFence = highlightMarkdownLine(line);\n fencedLanguage = fencedLanguage ? undefined : fence[2];\n return highlightedFence;\n }\n return isCodeLanguage(fencedLanguage) ? highlightCode(line || \" \") : highlightMarkdownLine(line || \" \");\n });\n }\n\n if (lines.length >= 2 && /^```\\w+/.test(lines[0] ?? \"\") && /^```\\s*$/.test(lines[lines.length - 1] ?? \"\")) {\n return lines.map((line, index) => {\n if (index === 0 || index === lines.length - 1) return highlightMarkdownLine(line || \" \");\n return highlightCode(line || \" \");\n });\n }\n\n return lines.map((line) => highlightCode(line || \" \"));\n};\n\nexport const highlightCodeDisplay = (code: string, language: CodeDisplayLanguage = \"text\"): string => {\n if (language === \"sql\") return highlightSql(code);\n if (code.includes(\"\\n\")) return highlightCodeDisplayLines(code, language).join(\"\\n\");\n if (language === \"markdown\" || language === \"md\") return highlightMarkdownDisplay(code);\n if (language === \"text\") return escapeCodeHtml(code);\n return highlightCode(code);\n};\n\nconst SQL_KEYWORDS = new Set(\n \"SELECT WITH FROM WHERE AS AND OR NOT NULL IS IN BETWEEN LIKE ILIKE JOIN LEFT RIGHT INNER OUTER CROSS ON USING UNION ALL DISTINCT GROUP BY HAVING ORDER ASC DESC LIMIT OFFSET CASE WHEN THEN ELSE END OVER PARTITION ROWS RANGE INTERVAL TRUE FALSE SETTINGS FORMAT\".split(\n \" \",\n ),\n);\n\n/** Display-only, tolerant of incomplete SQL while typing. Source is always escaped. */\nexport const highlightSql = (code: string): string => {\n // CodeDisplay puts each returned line into its own <code> element.\n const token = (kind: string, raw: string) =>\n raw\n .split(\"\\n\")\n .map((line) => wrap(kind, line))\n .join(\"\\n\");\n let out = \"\",\n i = 0;\n while (i < code.length) {\n const start = i,\n c = code[i]!;\n if (code.startsWith(\"--\", i)) {\n const end = code.indexOf(\"\\n\", i);\n i = end < 0 ? code.length : end;\n out += token(\"cd-c\", code.slice(start, i));\n } else if (code.startsWith(\"/*\", i)) {\n i += 2;\n let depth = 1;\n while (i < code.length && depth) {\n if (code.startsWith(\"/*\", i)) {\n depth++;\n i += 2;\n } else if (code.startsWith(\"*/\", i)) {\n depth--;\n i += 2;\n } else i++;\n }\n out += token(\"cd-c\", code.slice(start, i));\n } else if (c === \"'\" || c === '\"' || c === \"`\") {\n i++;\n while (i < code.length) {\n if (code[i] === \"\\\\\") {\n i = Math.min(code.length, i + 2);\n continue;\n }\n if (code[i++] === c) {\n if (code[i] === c) {\n i++;\n continue;\n }\n break;\n }\n }\n out += token(c === \"'\" ? \"cd-s\" : \"cd-p\", code.slice(start, i));\n } else if (c === \":\" && code[i - 1] !== \":\" && !/[A-Za-z0-9_]/.test(code[i - 1] ?? \"\") && /[A-Za-z_]/.test(code[i + 1] ?? \"\")) {\n i += 2;\n while (/[A-Za-z0-9_]/.test(code[i] ?? \"\")) i++;\n out += token(\"cd-a cd-param\", code.slice(start, i));\n } else if (/[A-Za-z_]/.test(c)) {\n i++;\n while (/[A-Za-z0-9_]/.test(code[i] ?? \"\")) i++;\n const word = code.slice(start, i);\n out += SQL_KEYWORDS.has(word.toUpperCase()) ? token(\"cd-k\", word) : escapeCodeHtml(word);\n } else if (isDigit(c)) {\n i++;\n while (/[0-9.]/.test(code[i] ?? \"\")) i++;\n out += token(\"cd-n\", code.slice(start, i));\n } else {\n out += escapeCodeHtml(c);\n i++;\n }\n }\n return out;\n};\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -8,6 +8,7 @@ export { default as CodeDisplay } from "./CodeDisplay";
|
|
|
8
8
|
export { createChartCursor } from "./chart-cursor";
|
|
9
9
|
export { createChartExplorer } from "./chart-explorer";
|
|
10
10
|
export { prepareChartSnapshot } from "./chart-snapshot";
|
|
11
|
+
export { highlightSql } from "./code-highlight";
|
|
11
12
|
export { createCollectionSelection } from "./collection-selection";
|
|
12
13
|
export { default as DataTable } from "./DataTable";
|
|
13
14
|
export { DocCode, DocConceptGrid, DocInlineCode, DocLead, DocNote, DocPage, DocRows, DocSection } from "./Docs";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":[],"sources":["content/index.ts"],"sourcesContent":["export type {\n CalendarAttendee,\n CalendarCommand,\n CalendarController,\n CalendarCustomView,\n CalendarDayBadge,\n CalendarEvent,\n CalendarEventColor,\n CalendarEventRenderContext,\n CalendarEventTimeChange,\n CalendarExternalDrag,\n CalendarLabels,\n CalendarProps,\n CalendarQuickCreateControls,\n CalendarRange,\n CalendarRecurrence,\n CalendarResource,\n CalendarSelectionControls,\n CalendarView,\n} from \"./Calendar\";\nexport { default as Calendar } from \"./Calendar\";\n\nexport type { ChartKind, ChartLabels, ChartProps, ChartRenderOptions } from \"./Chart\";\nexport { default as Chart } from \"./Chart\";\nexport type { ChartExplorerColumn, ChartExplorerProps, ChartLegendEntry } from \"./ChartExplorer\";\nexport { ChartExplorer } from \"./ChartExplorer\";\nexport type { ChartExplorerControlsProps } from \"./ChartExplorerControls\";\nexport { ChartExplorerControls } from \"./ChartExplorerControls\";\nexport { ChartFilterControls, type ChartFilterControlsProps } from \"./ChartFilterControls\";\nexport { ChartSnapshotView } from \"./ChartSnapshotView\";\nexport type { CodeDisplayLanguage, CodeDisplayProps } from \"./CodeDisplay\";\nexport { default as CodeDisplay } from \"./CodeDisplay\";\nexport { type ChartCursor, createChartCursor } from \"./chart-cursor\";\nexport type {\n ChartExplorerCharts,\n ChartExplorerController,\n ChartExplorerData,\n ChartExplorerOptions,\n ChartExplorerRequest,\n ChartExplorerRow,\n ChartExplorerSnapshot,\n} from \"./chart-explorer\";\nexport { createChartExplorer } from \"./chart-explorer\";\nexport type { ChartDatumRef, ChartSelection, ChartTooltip, ChartTooltipFormatter } from \"./chart-inspection-core\";\nexport type { ChartSnapshot } from \"./chart-snapshot\";\nexport { prepareChartSnapshot } from \"./chart-snapshot\";\nexport type {\n StateTimelineChartOptions,\n StateTimelineDomain,\n StateTimelineInterval,\n StateTimelineRow,\n StateTimelineState,\n} from \"./chart-state-timeline\";\nexport { type CollectionSelection, createCollectionSelection, type SelectionModifiers } from \"./collection-selection\";\nexport type {\n DataTableColumn,\n DataTableControlsProps,\n DataTableFooter,\n DataTableHeaderProps,\n DataTablePanelFooterProps,\n DataTablePanelProps,\n DataTableProps,\n DataTableRenderCell,\n DataTableRenderHeader,\n DataTableSort,\n} from \"./DataTable\";\nexport { default as DataTable } from \"./DataTable\";\nexport type { DocCodeHighlighter, DocCodeProps, DocConcept, DocNoteVariant, DocRow } from \"./Docs\";\nexport { DocCode, DocConceptGrid, DocInlineCode, DocLead, DocNote, DocPage, DocRows, DocSection } from \"./Docs\";\nexport { FileBrowserPanel, type FileBrowserPanelProps, type FileSource, openFileBrowser } from \"./FileBrowser\";\nexport { FileGrid, type FileGridProps } from \"./FileGrid\";\nexport { default as FileTree, type FileTreeActions, type FileTreeEntry, type FileTreeProps } from \"./FileTree\";\nexport { type FileType, FileTypeIcon, type FileTypeIconProps, fileTypeOf } from \"./FileTypeIcon\";\nexport {\n canPreviewFile,\n default as FileView,\n type FileViewContent,\n type FileViewFile,\n type FileViewPreviewKind,\n type FileViewProps,\n type FileViewRenderer,\n type FileViewRendererProps,\n formatFileViewSize,\n getFileViewPreviewKind,\n} from \"./FileView\";\nexport type { KbdProps } from \"./Kbd\";\nexport { Kbd } from \"./Kbd\";\nexport type { LabelChipProps } from \"./LabelChip\";\nexport { LabelChip } from \"./LabelChip\";\nexport type { LightboxAction, LightboxImage } from \"./Lightbox\";\nexport { default as Lightbox } from \"./Lightbox\";\nexport type { LogTableEntry } from \"./LogEntriesTable\";\nexport { default as LogEntriesTable } from \"./LogEntriesTable\";\nexport { MapAttribution } from \"./MapAttribution\";\nexport { MapView } from \"./MapView\";\nexport { MapViewFrame } from \"./MapViewFrame\";\nexport { default as MarkdownView, type MarkdownRenderOptions, type MarkdownViewProps, renderSafeMarkdown } from \"./MarkdownView\";\nexport type {\n MessageGroupEntry,\n MessageRowAction,\n MessageRowAttachment,\n MessageRowAuthor,\n MessageRowFile,\n MessageRowMedia,\n MessageRowProgress,\n MessageRowProps,\n MessageRowQuote,\n MessageRowReaction,\n MessageRowStatus,\n MessageRowThread,\n MessageSystemRowProps,\n} from \"./MessageRow\";\nexport { MessageRow, MessageSystemRow, startsMessageGroup } from \"./MessageRow\";\nexport { type MapPaletteColors, type MapTheme, mapPalette } from \"./map-palette\";\nexport { type MapStyleOptions, mapAttribution, mapStyle } from \"./map-style\";\nexport type {\n MapViewArea,\n MapViewFit,\n MapViewFrameProps,\n MapViewLine,\n MapViewLineTone,\n MapViewMarker,\n MapViewOwnLocation,\n MapViewPoint,\n MapViewProps,\n MapViewStyle,\n MapViewStyleSource,\n MapViewTone,\n} from \"./map-view-types\";\nexport {\n MARKDOWN_CALLOUT_CLASSES,\n MARKDOWN_CALLOUT_ICON_ATTRIBUTES,\n type MarkdownInfoBlock,\n type MarkdownInfoBlockRenderInput,\n type MarkdownInfoBlockType,\n markdownInfoBlocks,\n renderMarkdownInfoBlock,\n scanMarkdownInfoBlock,\n} from \"./markdown-info-blocks\";\nexport {\n type MarkdownLinkInput,\n type MarkdownReference,\n type MarkdownReferenceKind,\n type MarkdownReferenceType,\n markdownLinkReference,\n markdownReferenceIcon,\n markdownReferenceType,\n markdownReferenceTypeLabel,\n markStandaloneLinks,\n renderMarkdownLink,\n} from \"./markdown-links\";\nexport { Pagination, type PaginationProps } from \"./Pagination\";\nexport type { PdfPreviewProps, PdfPreviewRequest } from \"./PdfPreview\";\nexport { default as PdfPreview } from \"./PdfPreview\";\nexport type { RangeOption, RangePickerProps } from \"./RangePicker\";\nexport { default as RangePicker } from \"./RangePicker\";\nexport { ReactionBar, type ReactionBarItem, type ReactionBarProps } from \"./ReactionBar\";\nexport type {\n ReferenceChipObjectProps,\n ReferenceChipPersonProps,\n ReferenceChipProps,\n ReferenceChipTimeProps,\n} from \"./ReferenceChip\";\nexport { REFERENCE_CHIP_MAX_CHARACTERS, ReferenceChip, truncateMiddle } from \"./ReferenceChip\";\nexport type { StepsProps } from \"./Steps\";\nexport { Steps } from \"./Steps\";\nexport type { StructuredDataPreviewMode, StructuredDataPreviewProps, StructuredDataValue } from \"./StructuredDataPreview\";\nexport { default as StructuredDataPreview, isStructuredDataValue } from \"./StructuredDataPreview\";\nexport type { TimelineColor, TimelineController, TimelineItem, TimelineProps } from \"./Timeline\";\nexport { default as Timeline } from \"./Timeline\";\nexport { VideoPlayer, type VideoPlayerProps } from \"./VideoPlayer\";\nexport type { VirtualFeedController, VirtualFeedProps, VirtualFeedScrollOptions } from \"./VirtualFeed\";\nexport { VirtualFeed } from \"./VirtualFeed\";\nexport type { ZoomPanAction, ZoomPanFullscreen, ZoomPanViewportProps } from \"./ZoomPanViewport\";\nexport { ZoomPanViewport } from \"./ZoomPanViewport\";\n"],"mappings":"AAoBA,SAAS,OAAO,IAAI,QAAQ,QAAQ,YAAY;AAGhD,SAAS,OAAO,IAAI,KAAK,QAAQ,SAAS;AAE1C,SAAS,aAAa,QAAQ,iBAAiB;AAE/C,SAAS,qBAAqB,QAAQ,yBAAyB;AAC/D,SAAS,mBAAmB,QAAuC,uBAAuB;AAC1F,SAAS,iBAAiB,QAAQ,qBAAqB;AAEvD,SAAS,OAAO,IAAI,WAAW,QAAQ,eAAe;AACtD,SAA2B,iBAAiB,QAAQ,gBAAgB;AAUpE,SAAS,mBAAmB,QAAQ,kBAAkB;AAGtD,SAAS,oBAAoB,QAAQ,kBAAkB;AAQvD,SAAmC,yBAAyB,QAAiC,wBAAwB;AAarH,SAAS,OAAO,IAAI,SAAS,QAAQ,aAAa;AAElD,SAAS,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,QAAQ,QAAQ;AAC/G,SAAS,gBAAgB,EAA+C,eAAe,QAAQ,eAAe;AAC9G,SAAS,QAAQ,QAA4B,YAAY;AACzD,SAAS,OAAO,IAAI,QAAQ,QAAsE,YAAY;AAC9G,SAAwB,YAAY,EAA0B,UAAU,QAAQ,gBAAgB;AAChG,SACE,cAAc,EACd,OAAO,IAAI,QAAQ,EAOnB,kBAAkB,EAClB,sBAAsB,QACjB,YAAY;AAEnB,SAAS,GAAG,QAAQ,OAAO;AAE3B,SAAS,SAAS,QAAQ,aAAa;AAEvC,SAAS,OAAO,IAAI,QAAQ,QAAQ,YAAY;AAEhD,SAAS,OAAO,IAAI,eAAe,QAAQ,mBAAmB;AAC9D,SAAS,cAAc,QAAQ,kBAAkB;AACjD,SAAS,OAAO,QAAQ,WAAW;AACnC,SAAS,YAAY,QAAQ,gBAAgB;AAC7C,SAAS,OAAO,IAAI,YAAY,EAAsD,kBAAkB,QAAQ,gBAAgB;AAgBhI,SAAS,UAAU,EAAE,gBAAgB,EAAE,kBAAkB,QAAQ,cAAc;AAC/E,SAA+C,UAAU,QAAQ,eAAe;AAChF,SAA+B,cAAc,EAAE,QAAQ,QAAQ,aAAa;AAe5E,SACE,wBAAwB,EACxB,gCAAgC,EAIhC,kBAAkB,EAClB,uBAAuB,EACvB,qBAAqB,QAChB,wBAAwB;AAC/B,SAKE,qBAAqB,EACrB,qBAAqB,EACrB,qBAAqB,EACrB,0BAA0B,EAC1B,mBAAmB,EACnB,kBAAkB,QACb,kBAAkB;AACzB,SAAS,UAAU,QAA8B,cAAc;AAE/D,SAAS,OAAO,IAAI,UAAU,QAAQ,cAAc;AAEpD,SAAS,OAAO,IAAI,WAAW,QAAQ,eAAe;AACtD,SAAS,WAAW,QAAqD,eAAe;AAOxF,SAAS,6BAA6B,EAAE,aAAa,EAAE,cAAc,QAAQ,iBAAiB;AAE9F,SAAS,KAAK,QAAQ,SAAS;AAE/B,SAAS,OAAO,IAAI,qBAAqB,EAAE,qBAAqB,QAAQ,yBAAyB;AAEjG,SAAS,OAAO,IAAI,QAAQ,QAAQ,YAAY;AAChD,SAAS,WAAW,QAA+B,eAAe;AAElE,SAAS,WAAW,QAAQ,eAAe;AAE3C,SAAS,eAAe,QAAQ,mBAAmB","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":[],"sources":["content/index.ts"],"sourcesContent":["export type {\n CalendarAttendee,\n CalendarCommand,\n CalendarController,\n CalendarCustomView,\n CalendarDayBadge,\n CalendarEvent,\n CalendarEventColor,\n CalendarEventRenderContext,\n CalendarEventTimeChange,\n CalendarExternalDrag,\n CalendarLabels,\n CalendarProps,\n CalendarQuickCreateControls,\n CalendarRange,\n CalendarRecurrence,\n CalendarResource,\n CalendarSelectionControls,\n CalendarView,\n} from \"./Calendar\";\nexport { default as Calendar } from \"./Calendar\";\n\nexport type { ChartKind, ChartLabels, ChartProps, ChartRenderOptions } from \"./Chart\";\nexport { default as Chart } from \"./Chart\";\nexport type { ChartExplorerColumn, ChartExplorerProps, ChartLegendEntry } from \"./ChartExplorer\";\nexport { ChartExplorer } from \"./ChartExplorer\";\nexport type { ChartExplorerControlsProps } from \"./ChartExplorerControls\";\nexport { ChartExplorerControls } from \"./ChartExplorerControls\";\nexport { ChartFilterControls, type ChartFilterControlsProps } from \"./ChartFilterControls\";\nexport { ChartSnapshotView } from \"./ChartSnapshotView\";\nexport type { CodeDisplayLanguage, CodeDisplayProps } from \"./CodeDisplay\";\nexport { default as CodeDisplay } from \"./CodeDisplay\";\nexport { type ChartCursor, createChartCursor } from \"./chart-cursor\";\nexport type {\n ChartExplorerCharts,\n ChartExplorerController,\n ChartExplorerData,\n ChartExplorerOptions,\n ChartExplorerRequest,\n ChartExplorerRow,\n ChartExplorerSnapshot,\n} from \"./chart-explorer\";\nexport { createChartExplorer } from \"./chart-explorer\";\nexport type { ChartDatumRef, ChartSelection, ChartTooltip, ChartTooltipFormatter } from \"./chart-inspection-core\";\nexport type { ChartSnapshot } from \"./chart-snapshot\";\nexport { prepareChartSnapshot } from \"./chart-snapshot\";\nexport type {\n StateTimelineChartOptions,\n StateTimelineDomain,\n StateTimelineInterval,\n StateTimelineRow,\n StateTimelineState,\n} from \"./chart-state-timeline\";\nexport { highlightSql } from \"./code-highlight\";\nexport { type CollectionSelection, createCollectionSelection, type SelectionModifiers } from \"./collection-selection\";\nexport type {\n DataTableColumn,\n DataTableControlsProps,\n DataTableFooter,\n DataTableHeaderProps,\n DataTablePanelFooterProps,\n DataTablePanelProps,\n DataTableProps,\n DataTableRenderCell,\n DataTableRenderHeader,\n DataTableSort,\n} from \"./DataTable\";\nexport { default as DataTable } from \"./DataTable\";\nexport type { DocCodeHighlighter, DocCodeProps, DocConcept, DocNoteVariant, DocRow } from \"./Docs\";\nexport { DocCode, DocConceptGrid, DocInlineCode, DocLead, DocNote, DocPage, DocRows, DocSection } from \"./Docs\";\nexport { FileBrowserPanel, type FileBrowserPanelProps, type FileSource, openFileBrowser } from \"./FileBrowser\";\nexport { FileGrid, type FileGridProps } from \"./FileGrid\";\nexport { default as FileTree, type FileTreeActions, type FileTreeEntry, type FileTreeProps } from \"./FileTree\";\nexport { type FileType, FileTypeIcon, type FileTypeIconProps, fileTypeOf } from \"./FileTypeIcon\";\nexport {\n canPreviewFile,\n default as FileView,\n type FileViewContent,\n type FileViewFile,\n type FileViewPreviewKind,\n type FileViewProps,\n type FileViewRenderer,\n type FileViewRendererProps,\n formatFileViewSize,\n getFileViewPreviewKind,\n} from \"./FileView\";\nexport type { KbdProps } from \"./Kbd\";\nexport { Kbd } from \"./Kbd\";\nexport type { LabelChipProps } from \"./LabelChip\";\nexport { LabelChip } from \"./LabelChip\";\nexport type { LightboxAction, LightboxImage } from \"./Lightbox\";\nexport { default as Lightbox } from \"./Lightbox\";\nexport type { LogTableEntry } from \"./LogEntriesTable\";\nexport { default as LogEntriesTable } from \"./LogEntriesTable\";\nexport { MapAttribution } from \"./MapAttribution\";\nexport { MapView } from \"./MapView\";\nexport { MapViewFrame } from \"./MapViewFrame\";\nexport { default as MarkdownView, type MarkdownRenderOptions, type MarkdownViewProps, renderSafeMarkdown } from \"./MarkdownView\";\nexport type {\n MessageGroupEntry,\n MessageRowAction,\n MessageRowAttachment,\n MessageRowAuthor,\n MessageRowFile,\n MessageRowMedia,\n MessageRowProgress,\n MessageRowProps,\n MessageRowQuote,\n MessageRowReaction,\n MessageRowStatus,\n MessageRowThread,\n MessageSystemRowProps,\n} from \"./MessageRow\";\nexport { MessageRow, MessageSystemRow, startsMessageGroup } from \"./MessageRow\";\nexport { type MapPaletteColors, type MapTheme, mapPalette } from \"./map-palette\";\nexport { type MapStyleOptions, mapAttribution, mapStyle } from \"./map-style\";\nexport type {\n MapViewArea,\n MapViewFit,\n MapViewFrameProps,\n MapViewLine,\n MapViewLineTone,\n MapViewMarker,\n MapViewOwnLocation,\n MapViewPoint,\n MapViewProps,\n MapViewStyle,\n MapViewStyleSource,\n MapViewTone,\n} from \"./map-view-types\";\nexport {\n MARKDOWN_CALLOUT_CLASSES,\n MARKDOWN_CALLOUT_ICON_ATTRIBUTES,\n type MarkdownInfoBlock,\n type MarkdownInfoBlockRenderInput,\n type MarkdownInfoBlockType,\n markdownInfoBlocks,\n renderMarkdownInfoBlock,\n scanMarkdownInfoBlock,\n} from \"./markdown-info-blocks\";\nexport {\n type MarkdownLinkInput,\n type MarkdownReference,\n type MarkdownReferenceKind,\n type MarkdownReferenceType,\n markdownLinkReference,\n markdownReferenceIcon,\n markdownReferenceType,\n markdownReferenceTypeLabel,\n markStandaloneLinks,\n renderMarkdownLink,\n} from \"./markdown-links\";\nexport { Pagination, type PaginationProps } from \"./Pagination\";\nexport type { PdfPreviewProps, PdfPreviewRequest } from \"./PdfPreview\";\nexport { default as PdfPreview } from \"./PdfPreview\";\nexport type { RangeOption, RangePickerProps } from \"./RangePicker\";\nexport { default as RangePicker } from \"./RangePicker\";\nexport { ReactionBar, type ReactionBarItem, type ReactionBarProps } from \"./ReactionBar\";\nexport type {\n ReferenceChipObjectProps,\n ReferenceChipPersonProps,\n ReferenceChipProps,\n ReferenceChipTimeProps,\n} from \"./ReferenceChip\";\nexport { REFERENCE_CHIP_MAX_CHARACTERS, ReferenceChip, truncateMiddle } from \"./ReferenceChip\";\nexport type { StepsProps } from \"./Steps\";\nexport { Steps } from \"./Steps\";\nexport type { StructuredDataPreviewMode, StructuredDataPreviewProps, StructuredDataValue } from \"./StructuredDataPreview\";\nexport { default as StructuredDataPreview, isStructuredDataValue } from \"./StructuredDataPreview\";\nexport type { TimelineColor, TimelineController, TimelineItem, TimelineProps } from \"./Timeline\";\nexport { default as Timeline } from \"./Timeline\";\nexport { VideoPlayer, type VideoPlayerProps } from \"./VideoPlayer\";\nexport type { VirtualFeedController, VirtualFeedProps, VirtualFeedScrollOptions } from \"./VirtualFeed\";\nexport { VirtualFeed } from \"./VirtualFeed\";\nexport type { ZoomPanAction, ZoomPanFullscreen, ZoomPanViewportProps } from \"./ZoomPanViewport\";\nexport { ZoomPanViewport } from \"./ZoomPanViewport\";\n"],"mappings":"AAoBA,SAAS,OAAO,IAAI,QAAQ,QAAQ,YAAY;AAGhD,SAAS,OAAO,IAAI,KAAK,QAAQ,SAAS;AAE1C,SAAS,aAAa,QAAQ,iBAAiB;AAE/C,SAAS,qBAAqB,QAAQ,yBAAyB;AAC/D,SAAS,mBAAmB,QAAuC,uBAAuB;AAC1F,SAAS,iBAAiB,QAAQ,qBAAqB;AAEvD,SAAS,OAAO,IAAI,WAAW,QAAQ,eAAe;AACtD,SAA2B,iBAAiB,QAAQ,gBAAgB;AAUpE,SAAS,mBAAmB,QAAQ,kBAAkB;AAGtD,SAAS,oBAAoB,QAAQ,kBAAkB;AAQvD,SAAS,YAAY,QAAQ,kBAAkB;AAC/C,SAAmC,yBAAyB,QAAiC,wBAAwB;AAarH,SAAS,OAAO,IAAI,SAAS,QAAQ,aAAa;AAElD,SAAS,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,QAAQ,QAAQ;AAC/G,SAAS,gBAAgB,EAA+C,eAAe,QAAQ,eAAe;AAC9G,SAAS,QAAQ,QAA4B,YAAY;AACzD,SAAS,OAAO,IAAI,QAAQ,QAAsE,YAAY;AAC9G,SAAwB,YAAY,EAA0B,UAAU,QAAQ,gBAAgB;AAChG,SACE,cAAc,EACd,OAAO,IAAI,QAAQ,EAOnB,kBAAkB,EAClB,sBAAsB,QACjB,YAAY;AAEnB,SAAS,GAAG,QAAQ,OAAO;AAE3B,SAAS,SAAS,QAAQ,aAAa;AAEvC,SAAS,OAAO,IAAI,QAAQ,QAAQ,YAAY;AAEhD,SAAS,OAAO,IAAI,eAAe,QAAQ,mBAAmB;AAC9D,SAAS,cAAc,QAAQ,kBAAkB;AACjD,SAAS,OAAO,QAAQ,WAAW;AACnC,SAAS,YAAY,QAAQ,gBAAgB;AAC7C,SAAS,OAAO,IAAI,YAAY,EAAsD,kBAAkB,QAAQ,gBAAgB;AAgBhI,SAAS,UAAU,EAAE,gBAAgB,EAAE,kBAAkB,QAAQ,cAAc;AAC/E,SAA+C,UAAU,QAAQ,eAAe;AAChF,SAA+B,cAAc,EAAE,QAAQ,QAAQ,aAAa;AAe5E,SACE,wBAAwB,EACxB,gCAAgC,EAIhC,kBAAkB,EAClB,uBAAuB,EACvB,qBAAqB,QAChB,wBAAwB;AAC/B,SAKE,qBAAqB,EACrB,qBAAqB,EACrB,qBAAqB,EACrB,0BAA0B,EAC1B,mBAAmB,EACnB,kBAAkB,QACb,kBAAkB;AACzB,SAAS,UAAU,QAA8B,cAAc;AAE/D,SAAS,OAAO,IAAI,UAAU,QAAQ,cAAc;AAEpD,SAAS,OAAO,IAAI,WAAW,QAAQ,eAAe;AACtD,SAAS,WAAW,QAAqD,eAAe;AAOxF,SAAS,6BAA6B,EAAE,aAAa,EAAE,cAAc,QAAQ,iBAAiB;AAE9F,SAAS,KAAK,QAAQ,SAAS;AAE/B,SAAS,OAAO,IAAI,qBAAqB,EAAE,qBAAqB,QAAQ,yBAAyB;AAEjG,SAAS,OAAO,IAAI,QAAQ,QAAQ,YAAY;AAChD,SAAS,WAAW,QAA+B,eAAe;AAElE,SAAS,WAAW,QAAQ,eAAe;AAE3C,SAAS,eAAe,QAAQ,mBAAmB","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":[],"sources":["content/map-view-types.ts"],"sourcesContent":["import type { StyleSpecification } from \"maplibre-gl\";\nimport type { JSX } from \"solid-js\";\n\nexport type MapViewPoint = { lat: number; lon: number };\nexport type MapViewTone = \"accent\" | \"second\" | \"neutral\" | \"warning\";\nexport type MapViewMarker = {\n id: string;\n point: MapViewPoint;\n /** A number, a single letter, or \"+\". Omit for a drop pin. */\n mark?: number | string;\n label: string;\n tone?: MapViewTone;\n selected?: boolean;\n};\nexport type MapViewLineTone = \"accent\" | \"muted\" | \"preview\" | \"previous\";\nexport type MapViewLine = { id: string; tone?: MapViewLineTone } & ({ polyline6: string } | { points: MapViewPoint[] });\nexport type MapViewArea = { id: string; polygon: MapViewPoint[]; tone?: MapViewTone };\nexport type MapViewOwnLocation = { point: MapViewPoint; accuracyMeters?: number };\nexport type MapViewStyle = string | StyleSpecification;\nexport type MapViewStyleSource = MapViewStyle | { light: MapViewStyle; dark: MapViewStyle };\nexport type MapViewFit = \"all\" | \"markers\";\nexport type MapViewFrameProps = {\n markers?: MapViewMarker[];\n lines?: MapViewLine[];\n areas?: MapViewArea[];\n ownLocation?: MapViewOwnLocation;\n height: number;\n padding?: number;\n fit?: MapViewFit;\n selectedId?: string;\n attribution?: JSX.Element;\n class?: string;\n};\nexport type MapViewProps = Omit<MapViewFrameProps, \"attribution\"> & {\n style: MapViewStyleSource;\n attribution: JSX.Element;\n onSelect?: (id: string) => void;\n infoTile?: (marker: MapViewMarker) => JSX.Element;\n notice?: JSX.Element;\n empty?: JSX.Element;\n onLocate?: () => void;\n};\n"],"mappings":"","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":[],"sources":["content/map-view-types.ts"],"sourcesContent":["import type { StyleSpecification } from \"maplibre-gl\";\nimport type { JSX } from \"solid-js\";\n\nexport type MapViewPoint = { lat: number; lon: number };\nexport type MapViewTone = \"accent\" | \"second\" | \"neutral\" | \"warning\";\nexport type MapViewMarker = {\n id: string;\n point: MapViewPoint;\n /** A number, a single letter, or \"+\". Omit for a drop pin. */\n mark?: number | string;\n label: string;\n tone?: MapViewTone;\n selected?: boolean;\n};\nexport type MapViewLineTone = \"accent\" | \"muted\" | \"preview\" | \"previous\";\nexport type MapViewLine = { id: string; tone?: MapViewLineTone } & ({ polyline6: string } | { points: MapViewPoint[] });\nexport type MapViewArea = { id: string; polygon: MapViewPoint[]; tone?: MapViewTone };\nexport type MapViewOwnLocation = { point: MapViewPoint; accuracyMeters?: number };\nexport type MapViewStyle = string | StyleSpecification;\nexport type MapViewStyleSource = MapViewStyle | { light: MapViewStyle; dark: MapViewStyle };\nexport type MapViewFit = \"all\" | \"markers\";\nexport type MapViewFrameProps = {\n markers?: MapViewMarker[];\n lines?: MapViewLine[];\n areas?: MapViewArea[];\n ownLocation?: MapViewOwnLocation;\n height: number;\n padding?: number;\n fit?: MapViewFit;\n selectedId?: string;\n attribution?: JSX.Element;\n class?: string;\n};\nexport type MapViewProps = Omit<MapViewFrameProps, \"attribution\"> & {\n style: MapViewStyleSource;\n attribution: JSX.Element;\n onSelect?: (id: string) => void;\n infoTile?: (marker: MapViewMarker) => JSX.Element;\n notice?: JSX.Element;\n empty?: JSX.Element;\n onLocate?: () => void;\n /** Observe rendering and resource failures without receiving provider responses or URLs. */\n onStateChange?: (state: \"static\" | \"loading\" | \"ready\" | \"error\" | \"no-webgl\" | \"empty\") => void;\n};\n"],"mappings":"","ignoreList":[]}
|