Repository navigation
Flint 1.0 release - #146
Merged
Merged
Conversation
… to presets The chart-author skill hands behaviour to the new skill, which reads the chart spec and the request and returns one interaction_spec from presets. The MCP server ships the skill as a resource and a prompt. The Vega-Lite reference drops its Interactions line per chart type, since the skill is where a chart's presets are read. The skill text and its tests are trimmed to the request and the spec.
…he MCP chart view hands it to the model surface.onSelection calls back with a ChartSelection on every committed gesture except a viewport move: the rows under the marks, from the traced records or else the mark values, and the brushed range on the brushed axis, named by its field. The dashboard lab subscribes through it instead of reading the DOM event. The MCP chart view sends each selection to the host with updateModelContext, as a text table and as structured content, and sends a cleared note when the selection is cleared.
The surface root sizes itself to the compiled chart, so the frame's max-width rule never reached the SVG and a chart with a legend, or with its own size, scrolled. The app clamps the root to the frame, and the SVG scales down through its viewBox as it does in the static path. The surface adds the rail row gap only when it appends a rail, which removes the few px of vertical overflow.
- Readings: overflow placeholders, number precision, ECDF ties, full dates on time axes, untitled legends, stroke-dash series names, aggregate legend fields, per-panel mark grouping, unknown vs. empty membership. - Controller: single tab stop with escape-reset presets, in-place focus on tab-in, activation announces the updated state. - Rebuild the tree only when the scene signature changes. - keyboardTargeting is ignored while accessible navigation is mounted. - Radar: unique layer names per facet panel (panels drew the last panel's vertices). - Add docs/design-accessible-navigation.md and regression tests. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…n context The context a preset reads now extends a ChartState a host can read: the emphasized marks per update, the hidden legend values, the shown viewport, and the marks inside the plot area. The scene is scanned once for both available and visible.
…of onSelection ChartState is what the chart shows: the emphasized marks with their per-update entries, the hidden legend values, the viewport, and the rail windows. The runtime reports every change after the render with the state it produced; a click preset's hover cue reports as a preview, and a chart without navigation reports no viewport. A host reads each mark's value and the gesture's geometry and queries its own data, so there is no row helper and no scene scan for hosts.
…he site tabs read it The MCP view replaces the model context on each commit with a sentence: which marks are emphasized and the range or the values they share, the hidden values, and the zoomed axes. The chart-to-external tab reads onChange, follows a pan and a zoom, and queries its own rows inside the viewport; the dashboard routes commit changes by their interaction id. The map stages stop the page overscroll.
The design doc, the interactive README and the architecture illustration show the read side: the chart state leaves the update processor for the application, in the same semantic terms the gestures enter with.
… ChartUpdate, surface code, and bespoke interactions One skill for every output around a chart's behaviour: how an interaction works, presets as one interaction_spec, the ChartUpdate an application or an agent applies to a mounted chart, reading the state, linking charts, and a bespoke definition from a trigger and a handler. The intent groups and the scenario table give way to a chart-shape list. The preset option table is generated by gen:reference from the factory option types, whose JSDoc now carries the defaults. The MCP instructions, resource, and prompt name the wider scope, and the skill copies are synced.
…ry, and the skill The programming guide and the gallery's app section read the chart through getState and onChange, with the flint-interaction event kept for the gesture itself. The agent pointers name the skill's full scope, and the skill's event shape carries the description accessible-navigation sets on focus-element.
Chart state for hosts, and one interaction-author skill
An agent with no handle on the mounted chart passes ChartUpdate layers beside the input; the view applies them at mount. validateChartUpdates checks the list shape, the surface warns about a layer the chart cannot honour, and an overlay that does not project is reported as unsupported instead of crashing the chart.
# Conflicts: # packages/flint-js/src/echarts/instantiate-spec.ts
- Read a trailing parenthetical with index scans (title-plan, number-compact) instead of patterns that backtrack on runs of brackets or spaces. - Make SCALED_TEXT unambiguous: \(\s*(?:[$£€]\s*)? matches what it did. - Find the root <svg> tag once in injectCanvasFurnitureSVG. - Split Plotly markup on <[^<>]+> so a run of '<' cannot backtrack. - Freeform overlay links also refuse vbscript: and data: URLs (raster data images stay allowed), after dropping control characters browsers ignore. - Tests show each rewrite answers as the old pattern did, and runs fast. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
The tests passed at runtime but their types had drifted from src, so CI failed at typecheck before running them. Also give the renderSvg smoke test 30 s, as its first render loads both backends cold. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Drop four unused imports. onLayoutChange stays a let: renderUpdates may read it before the surface assigns it, which a const would turn into a TDZ error. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
AxisLabelPlan replaced straightRefused with overflowFit in 7772ea7. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
vite build runs out of Node's default ~4 GB heap on the site bundle. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
proxy-addr, fast-uri, @modelcontextprotocol/sdk, hono, qs, ip-address, js-yaml, source-map-js, nanoid and brace-expansion, within their existing ranges. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
vite 7.3.7 (site) and 8.1.6 (MCP UI) fix the Windows launch-editor escaping; vitest and @vitest/mocker 4.1.11 fix the mocker path traversal. Patch releases within the existing majors; the workspace ranges now start at the fixed versions. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…ctive Interaction instrumentation reset a dot's resting opacity to 1 and its ring to Vega's 1.5 px unless the chart set them on the mark. It now reads them from the mark config, as Vega-Lite does, so a theme's fade, Vega-Lite's 0.7 default and a theme's halo look the same with or without interactions. The NYT preset rings its scatter dots with a 1 px white halo, as NYT's own scatter plots do, instead of fading them. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
- Key titles get a theme role (type.keyTitle) and follow axisTitle's face and ink, never lighter than bold unless the theme says so; Plotly applies it too. - Every key keeps its title when a chart draws several, and colour ramps are always titled, since their labels are numbers. - Keys sharing a row seat their titles alike, prefer stacking over moving off the theme's anchor, and splitting keys across edges costs more. - Keys side by side, or stacked beside the plot, stand 2.25 em apart. - Add a Legend layout lab (playground/legend) covering one and several keys across canvas sizes and themes. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
- Interactions page opens on the globe demo and adds a 'See it in action' video (YouTube; the Chinese cut for zh-CN readers). - Header dropdowns get icons; WeChat and Discord move from the header to a side-by-side community section at the bottom of the landing page. - Shorter Advanced Interactions case titles, so the rail fits on one line. - The MCP setup prompt offers the local and hosted servers as equal options. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Date the 1.0.0 changelog entry and rewrite the README to follow the landing page: the demo video, updates, getting started in an agent app (MCP) and in your apps (npm), the four ideas behind Flint with a figure each, and the community and contributors. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
The board strips furniture from its cells and draws it once on its frame, but matched only the earlier kind names, so the Economist tab, footer rules, and text or image furniture were never drawn. planFrameFurniture plans the frame with the chart's own header and closing-rule rules, and headerFurnitureItems, shared with applyHeaderFurniture, places the pieces; the board and its PNG export draw them.
A cell no longer lifts the chart's title and deck into HTML or strips the theme's furniture: the chart draws its own heading, deck, tab and rules, as it does on its own card. The chart/table switch and the edit handle float over the cell; the table view shows the table alone. Plots in a row no longer share a top line when headings wrap differently. A board shown in a pane (fullscreen or picture-in-picture) scrolls, with a stable gutter; inline it stays sized to the board.
…ts and keeps each chart's furniture The board export loaded each chart's SVG from a blob URL, which an MCP App sandbox's img-src blocks, so the board could not be exported in hosts such as Claude Code; it now uses a data URL. A chart's furniture is a 1px overlay layer, which the board export drew at 1px; it is drawn at the chart's size. The chart card painted its furniture on a canvas Vega had left scaled and offset, so the tab came out at the scale squared; the transform is reset before painting.
…art Step 4 sections
The bar and box templates band a temporal x such as a run of years, but the Grouped Bar Chart's local dodge picked its band axis from the semantic type, which stays temporal. It grouped the lane window by the y field, so bars sharing a value shared a lane group and the rest collapsed to zero width. The axis now comes from the offset channel the assembler chose from the banded types. The dodge option's check, in the Grouped Bar Chart and the Boxplot, made the same choice and offered or hid the control from the y field. It now asks for the band axis as declareLayoutMode does.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
No description provided.