release: v0.9 — Table Features, Chart Improvements, Gauge Thresholds - #199
Conversation
Add shared formatNumber() and buildTooltipFormatter() to chart-utils.ts: - Decimal places config (0-6, -1 for automatic) - Comma/compact/percent formatting - Prefix/suffix support - Consistent tooltip formatting across all ECharts chart types Add decimalPlaces option to single-value, bar, line, and pie chart schemas. Update SingleValueChart to use the shared formatter. Closes #138 Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Add enableDataZoom prop to BaseChart that injects ECharts DataZoom (type: 'inside') on both x and y axes. Users can scroll-to-zoom to explore large datasets. Disabled by default (opt-in via chart options). - New prop: enableDataZoom on BaseChartProps - DataZoom injected into merged options when enabled - Chart option exposed in chart-options-schema for bar/line - 3 new tests for DataZoom behavior Closes #134 Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Add buildCategoryAxisLabel() utility to chart-utils.ts: - Auto-rotate 30° at 8+ categories, 45° at 15+ - Truncate labels >15 chars with ellipsis (U+2026) - Tooltip shows full text on hover - Configurable rotation override via chart option Wire into BarChart component with axisLabelRotation prop. Add "Axis Label Rotation" option to chart-options-schema. Closes #137 Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Add parseReferenceLines() and buildMarkLineFromRefs() to chart-utils.ts.
Wire markLine into BarChart — reference lines attach to first series.
Register MarkLineComponent in ECharts and update all test mocks.
- JSON config: [{"value":50,"label":"Target","color":"#ff0000"}]
- Chart option added to bar and line in chart-options-schema
- 7 new tests for reference line parsing
Closes #136
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- groupTopN() utility: groups slices beyond top N into "Other" - Donut center text: shows total or custom text via ECharts graphic element - Register GraphicComponent in ECharts - New chart options: topN, donutCenterText - 5 new tests for groupTopN Closes #139 Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Enable drag-to-resize column borders via TanStack Table's built-in enableColumnResizing. Double-click a resize handle to auto-fit. - New prop: enableColumnResizing on DataGrid - Resize handle rendered as a vertical bar in each header cell - Chart option "Column Resizing" added to table options Closes #140 Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Add parseGaugeThresholdZones() to chart-utils.ts — converts threshold JSON to ECharts axisLine.lineStyle.color format. - New: thresholdZones prop on GaugeChart - Colored zones on gauge arc (e.g. green/yellow/red) - Chart option "Threshold Zones (JSON)" in schema - 4 new tests Closes #142 Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Add evaluateCellRule() and resolveCellStyle() to cell-formatting.ts: - Operators: >, <, ==, contains (case-insensitive) - Styles: backgroundColor, color, fontWeight (any CSSProperties) - First matching rule wins Wire into DataGrid via cellFormattingRules prop. Chart option "Cell Formatting Rules (JSON)" in schema. 11 new tests. Closes #141 Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…trast #103 — ECharts ARIA: - Add ariaDescription prop to BaseChart for custom screen reader descriptions - Wire aria.label.description into merged ECharts options - Add role="img" and tabIndex={0} to chart container for keyboard focus #101 — Accessibility audit fixes: - CodePreview: fix contrast by removing /50 opacity on language label - JsonViewer: replace div with button for expand/collapse, add aria-expanded #102 — Keyboard navigation: - Chart containers now focusable via tabIndex={0} - JsonViewer nodes navigable via keyboard (native button focus) Closes #103, Closes #101, Closes #102 Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Bug 1 — CodeMirror bracket wrapping: - Add closeBrackets() extension and closeBracketsKeymap to query editor - Selecting text and typing ( now wraps as (text) instead of replacing - Both Cypher and SQL bracket facets are now activated Bug 2 — Radar chart uniform shape: - Use single global max across all indicators instead of per-indicator max - Values like 172 vs 9 now show actual relative differences - Explicit max column values preserved when provided - 4 new/updated tests for global max behavior Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
New "Chart Catalog" dashboard with 12 pages, one per chart type: - Bar: vertical, horizontal, stacked, show values, styling, click, colorblind + 6 palettes - Line: default, smooth+area, stepped, show points, colorblind + 6 palettes - Pie: default, donut, rose, labels inside, click, colorblind + 6 palettes - Single Value: prefix/suffix, comma, compact, styling, trend - Table: default, sorting+filters, selection, click - Gauge: default, no pointer, half gauge, styling + 6 palettes - Radar: default, circle, filled+values, colorblind + 6 palettes - Sankey: horizontal, vertical + 6 palettes - Treemap: default, with values + 6 palettes - Sunburst: default, no labels + 6 palettes - Content: markdown (with tables), JSON viewer, iframe - Detail: click action target page Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
When onClick is set, CrossFilterTag renders as a <button>. The remove control inside was also a <button>, creating invalid nested buttons that cause React hydration errors. Fix: use <span role="button"> with keyboard handlers when the outer element is a button. Native <button> is preserved when outer is a div. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Add 6 new pages (18 total) to the Chart Catalog seed dashboard: - Page 12: Graph — force/circular/hierarchical, node sizes, labels, physics - Page 13: Parameter Widgets — select (searchable/not), text, date, date-range, relative-date - Page 14: Form Widget — default form, custom button + no-reset - Page 15: Behavior — showRefreshButton, manualRun, cacheMode (forever/TTL) - Page 16: Axis & Grid — axis labels, grid lines off, bar width/gap, legend off, sorted slices, no percentages - Page 17: Advanced — table pagination/pageSize, gauge min/max/progress/detail, radar legend, sankey nodeWidth/gap, sunburst sort/highlight, treemap breadcrumb/saturation, JSON fontSize/theme/copyButton Every chart option from chart-options-schema.ts now has at least one widget demonstrating it. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…ces) Add FILMED_IN and BORN_IN relationships to Neo4j seed connecting Movies and Persons to City nodes (which already had lat/lng coordinates). New Map Chart page in Chart Catalog (6 widgets): - Cities by population (OSM) - Filming locations (Carto Light) - Birthplaces (Carto Dark) - Clustered markers - Custom zoom / no popup - Large markers with click action All map options covered: tileLayer (osm/carto-light/carto-dark), autoFitBounds, markerSize, showPopup, clusterMarkers, zoom, minZoom, maxZoom. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Markdown: use actual \n newlines instead of escaped \\n literals - iFrame: replace echarts.apache.org (blocks framing via X-Frame-Options) with Wikipedia which allows embedding Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Add GFM table parsing to markdown-widget.tsx on this branch (was only on feat/issue-143-markdown-tables branch) - Reduce graph widgets from 6 to 4, use smaller queries (LIMIT 10) to prevent NVL physics engine overload with simultaneous renders - Fix graphSmall query: bind relationship variable properly - Type annotations for parseCells in markdown parser Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Gate NVL canvas visibility with a layoutReady state that flips true only when onLayoutDone fires. Reset is synchronous during render (not useEffect) to avoid a race where the effect runs after onLayoutDone on the main thread. Replace the arbitrary 100ms autoFit timer with a deterministic layoutReady guard. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Add rule-based cell styling (bg color, text color, bold, icon badges) and color scale gradient support to the table widget. Rules are configured per-column with operators (>, <, ==, contains, between, is_null, etc.) via a new ConditionalFormatPanel in the widget editor Style tab. Changes: - Add CellFormatRule, ColorScaleConfig types and resolveCellFormat(), interpolateColor() functions to styling-rule.ts - Add getCellStyle prop to DataGrid for per-cell inline styles - Create ConditionalFormatPanel component for rule/color-scale config - Wire through ChartRenderer → TableRenderer → DataGrid - Store config in widget.settings.conditionalFormatting - 27 new tests (21 logic + 3 DataGrid + 6 panel) Closes #141 Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…groups Add row grouping to DataGrid using TanStack Table's built-in grouping and expansion APIs. Groups are collapsible with expand/collapse all toggle, show row counts, and display aggregated values (sum) for numeric columns in group header rows. Changes: - Add enableGrouping, initialGrouping props to DataGrid - Import getGroupedRowModel, getExpandedRowModel from TanStack Table - Render group rows with expand/collapse toggles and row counts - Render aggregated cells in group headers - Add collapse all / expand all buttons - Add enableGrouping and groupBy options to table chart-options-schema - Wire up in TableRenderer with auto-detected numeric aggregation - 7 new tests for grouping behavior Closes #106 Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…tests - Add missing starts_with and ends_with operators to OPERATORS array - Only coerce values to numeric for numeric operators; preserve raw strings for text operators (contains, starts_with, etc.) - Fix icon "None" selection: use __none sentinel consistently, clear to undefined on save - Add 11 new test cases covering all remaining operators and edge cases Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…106-table-grouping
…S errors - Fix color scale min/max: skip null, undefined, empty, whitespace values before Number() coercion to prevent blank cells skewing to 0 - Use row.getLeafRows().length instead of row.subRows.length for accurate row counts in multi-level grouped rows - Add useEffect to sync grouping state when initialGrouping prop changes - Move CellFormatRule/ColorScaleConfig to top-level imports in chart-renderer.tsx (was inline import()) - Remove unused imports in data-grid-grouping.test.tsx (within, vi) Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Add shared formatNumber() and buildTooltipFormatter() to chart-utils.ts: - Decimal places config (0-6, -1 for automatic) - Comma/compact/percent formatting - Prefix/suffix support - Consistent tooltip formatting across all ECharts chart types Add decimalPlaces option to single-value, bar, line, and pie chart schemas. Update SingleValueChart to use the shared formatter. Closes #138 Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Apply userAria spread before ariaDescription so the explicit description takes precedence over user-provided aria options - Add ariaDescription to useEffect dependency array to re-apply when the description changes Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…lease/chart-improvements # Conflicts: # component/src/charts/bar-chart.tsx # component/src/charts/chart-utils.ts # component/src/charts/line-chart.tsx # component/src/components/composed/chart-options-schema.ts
…els, markLine, pie donut) Merges PRs #169, #170, #171, #173, #174 into a single release branch. Resolves merge conflicts in chart-utils.ts, bar-chart.tsx, line-chart.tsx, and chart-options-schema.ts. Includes: - Number formatting for single-value and tooltips (#169) - DataZoom support for bar and line charts (#170) - Auto-rotate and truncate axis labels (#171) - Reference lines (markLine) for bar and line charts (#173) - Donut center text and Top-N grouping for pie chart (#174) Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
… into release/a11y-and-fixes
…tting' into release/table-features # Conflicts: # component/src/components/composed/__tests__/data-grid.test.tsx # component/src/components/composed/data-grid.tsx
…nto release/table-features # Conflicts: # component/src/components/composed/chart-options-schema.ts # component/src/components/composed/data-grid.tsx
…ease/chart-improvements # Conflicts: # component/src/charts/__tests__/format-number.test.ts # component/src/charts/base-chart.tsx # component/src/charts/chart-utils.ts # component/src/charts/types.ts # component/src/components/composed/chart-options-schema.ts
When a user configures a click action with a source field matching a
query column name (e.g. "revenue"), the click point from ECharts only
contains {name, value, seriesName, dataIndex} — the column name lookup
returned undefined and the action silently failed.
Now the original data row is spread into the click point using
dataIndex, so column-name source fields resolve correctly alongside
the built-in ECharts fields.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…provements seed dashboard - Wire enableDataZoom, referenceLines, axisLabelRotation to BarChart - Wire enableDataZoom, referenceLines to LineChart - Wire topN, donutCenterText to PieChart - Wire decimalPlaces to SingleValueChart - Fix typeInEditor CM6 view lookup: fallback to .cm-editor tile (mirrors EditorView.findFromDOM) - Fix code-completion tests: use CM6 dispatch to bypass closeBrackets corruption - Add buildChartImprovements seed dashboard (6 pages covering all new features) - Add grouped bar example to Chart Catalog - Fix markdown seed: use real newlines instead of escaped \\n - Fix click enrichment seed: use table widget for non-numeric column demo Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
feat: chart improvements + accessibility + fixes
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
feat(component): add threshold zones to gauge chart
5-page dashboard showcasing column resizing, row grouping (single + nested), conditional formatting (numeric rules with icons, string operators, null checks), color scales (gradient heat maps), and all features combined. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
1. Fix conditional formatting not rendering — remove legacy resolveCellStyle path in DataGrid, always use getCellStyle callback from table-renderer 2. Fix column resize handles ungrabable — widen from w-1 to w-2, show on header hover via group-hover, wire enableColumnResizing from table-renderer 3. Fix editor scrollbar overlapping query text — add paddingBottom to .cm-scroller 4. Add aggregation function selector (sum/mean/median/count/min/max) for grouped rows, replacing hardcoded sum 5. Remove cellFormattingRules JSON text field from table options schema 6. Move ConditionalFormatPanel from Style tab to Advanced tab under Rule-Based Styling, gated on preview data availability Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…ing, grid skeleton Major table & editor UX improvements: - Unified styling: removed CellFormatRules, merged into StylingRules with per-rule `column` field so each rule targets its own column - Bold support: added `bold` property to StylingRule, toggle in editor UI, applied as fontWeight in table rows - Color scales moved to Style tab (from removed Cell-Level Formatting section) - Grouping fix: added React key to DataGrid to force TanStack Table remount when aggregationFn changes (bypasses stale memo cache) - Preview: passes cached TanStack Query data into editor for instant preview - ValueOrParamInput: auto-infers parameter vs literal (removed toggle buttons) - Form param seeding: form fields auto-populate from external parameters (click-actions, selectors) with touched-field tracking - Grid skeleton: shows skeleton cards during container width measurement, eliminating page-switch layout flash - Seed validation: Zod schemas validate all seed dashboard layouts against app types; catches misplaced chartOptions (colorPalette, colorblindMode) - Fixed all seed-demo.mjs and seed-neoboard.sql widget configs Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Covers stylingRuleSchema (column, bold, parameterRef), stylingConfigSchema, colorScaleSchema, conditionalFormattingSchema, misplaced chartOptions detection (colorPalette, colorblindMode, enableGrouping at settings root), and validateDashboardLayout function. Closes SonarCloud coverage gap. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
CI type-check failed because tooltip-formatter.test.ts imports TooltipParam which was not exported from chart-utils.ts. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
The exported TooltipParam interface exposes marker as string|undefined, so the robustness test needs a double cast to satisfy strict type-check. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
feat: table & data grid — column resize, conditional formatting, row grouping
|
Caution Review failedPull request was closed or merged during review WalkthroughThis PR introduces comprehensive enhancements to chart/table configuration, conditional formatting with color scales, form parameter pre-population, table grouping capabilities, and CodeMirror editor reliability. It adds new chart options (reference lines, axis rotation, data zoom, top-N grouping, decimal places), migrates styling rule configuration from global to per-rule targeting with bold support, implements cell-level color gradient styling, and extends table functionality with grouping/aggregation. Schema validation utilities, seed data updates, and extensive test coverage are included. Changes
Estimated code review effort🎯 4 (Complex) | ⏱️ ~60 minutes Possibly related PRs
Suggested labels
🚥 Pre-merge checks | ✅ 2 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (2 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
|
release: v0.9 — Table Features, Chart Improvements, Gauge Thresholds


Summary
Release v0.9 consolidation PR — merges all completed feature branches into
dev.Key features
Test plan
🤖 Generated with Claude Code
Summary by CodeRabbit
Release Notes
New Features
Improvements