Commit Graph

19987 Commits

Author SHA1 Message Date
Evan Rusackas
79eb91da96 fix(docker): make docker compose up build reliably
Three interlocking fixes so the full dev stack comes up cleanly:

1. Bind-mount Python package metadata (pyproject.toml, setup.py,
   MANIFEST.in, README.md) into /app in docker-compose.yml. Without
   these mounts, docker-bootstrap.sh's `uv pip install -e .` reads the
   stale metadata baked into the image at build time. After bumping
   apache-superset-core's sqlglot pin (>=28.10.0,<29), the bind mount
   ensures the editable install always sees the host's current pins
   instead of the image's older snapshot — which had been causing
   "apache-superset==0.0.0.dev0 depends on sqlglot>=27.15.2,<28" type
   resolver failures.

2. Bump @superset-ui/glyph-core's react peer from ^17.0.2 to ^18.2.0.
   Root and every other workspace package are on react 18; the
   stranded peer caused ERESOLVE during the in-container `npm install`
   (Docker doesn't use --legacy-peer-deps).

3. Restore the legacy-plugin-chart-partition multi-file plugin
   (controlPanel.tsx, transformProps.ts, index.ts) from master. They
   were missing on our branch; webpack resolves @superset-ui/legacy-
   plugin-chart-* via the tsconfig path mapping to plugins/.../src/,
   and without index.ts the partition entrypoint was unreachable.
   MainPreset.ts imports it.

Verified: docker compose down -v && docker compose build --no-cache &&
docker compose up brings the full stack up, /health returns OK, and
nginx serves the frontend on http://localhost/ (HTTP 302 login).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-19 00:19:40 -05:00
Evan Rusackas
96be1ccb2d fix(deps): drop unused @react-spring/web from root deps
@react-spring/web@^10.0.3 was accidentally introduced via our squash
commit but nothing in the source tree imports from @react-spring/* .
The version conflicted with @visx/xychart's peer dependency on
@react-spring/web@^9.4.5, causing docker compose up to fail with
ERESOLVE in the superset-node frontend container (which runs plain
`npm install`, no --legacy-peer-deps).

Removing the dead dep eliminates the conflict — Docker's npm install
now resolves cleanly without needing --legacy-peer-deps.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-18 23:56:29 -05:00
Evan Rusackas
f63e369687 chore(glyph): drop dead _glyphVisibleWhen write in defineChart
`renderControl` stopped reading controlConfig._glyphVisibleWhen in
commit 28966ce84c — GlyphOptionsPanel evaluates argDef.visibleWhen
directly via evaluateGlyphCondition(). The write site in defineChart
was never cleaned up. No readers anywhere; safe to remove.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-14 19:51:36 -07:00
Evan Rusackas
67231d194e feat(glyph): consolidate plugin-chart-table to defineChart()
Replace src/index.ts with src/index.tsx using defineChart(). Existing
sibling files (buildQuery, controlPanel, transformProps, TableChart,
types, etc.) stay put — index.tsx just composes them.

Adds `canBeAnnotationTypes?: string[]` pass-through on the
defineChart metadata interface so Table can preserve its
['EVENT','INTERVAL'] declaration.

TableChartPlugin is exported as both default and named to match the
prior public API.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-14 19:20:34 -07:00
Evan Rusackas
816583b602 feat(glyph): consolidate plugin-chart-pivot-table to defineChart()
Move plugin/{buildQuery,controlPanel,transformProps} up to src/ as
siblings and replace the plugin/ entrypoint with a new src/index.tsx
that wraps everything via defineChart(). Thin-shim approach: keeps
the large existing controlPanel.tsx (~490 lines), buildQuery, and
transformProps as their own files and just composes them.

PivotTableChartPlugin is exported as both default and named to match
the prior public API.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-14 19:16:53 -07:00
Evan Rusackas
49b9afa591 test(deckgl): update Polygon/Scatter tests for consolidated index
After the layer consolidation, Polygon and Scatter export buildQuery
and transformProps as named exports from their index.tsx instead of
from separate files. Update the tests' imports accordingly. Also
export transformProps (was a private function) since the tests rely
on calling it directly.

Drop Multi/controlPanel.test.ts: its assertions tested the structure
of the standalone controlPanel object which no longer exists; the
build itself validates the controls.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-14 19:13:01 -07:00
Evan Rusackas
8efda4f704 feat(glyph): consolidate deckgl Multi layer to defineChart()
Collapse the Multi composer's index.ts + controlPanel.ts into a single
index.tsx. Multi continues to delegate to ../transformProps (the
preset-level transformProps that handles slice composition). The
Multi.tsx component and its imports of each layer's getPoints stay
intact.

This completes the deckgl single-file consolidation: all 10 layers
plus Multi now use defineChart().

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-14 19:05:22 -07:00
Evan Rusackas
12ebe0f032 feat(glyph): consolidate deckgl Screengrid layer to defineChart()
Collapse multi-file plugin into single index.tsx. Screengrid uses
shared buildSpatialQuery/transformSpatialProps + grid size + default/
fixed/categorical color scheme. Screengrid.tsx component stays as
sibling for Multi.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-14 19:03:35 -07:00
Evan Rusackas
857ba7f855 feat(glyph): consolidate deckgl Scatter layer to defineChart()
Collapse multi-file plugin into single index.tsx. Scatter keeps its
custom buildQuery (spatial config required, metric-or-fixed radius
handling) and transformProps (radius from metric/fix value, category
column, js columns).

Also wires `onInit?: ControlPanelConfig['onInit']` through to
defineChart so Scatter can clear time_grain_sqla and granularity on
chart initialization. The onInit hook is now an optional metadata-level
override surfaced in the generated ControlPanelConfig.

Scatter.tsx component stays as sibling for Multi.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-14 19:01:33 -07:00
Evan Rusackas
dd1226f8e5 feat(glyph): consolidate deckgl Polygon layer to defineChart()
Collapse multi-file plugin into single index.tsx. Polygon keeps its
custom buildQuery (line_column required, optional metric/elevation
metric handling, null filter) and transformProps (json/geohash/zipcode
polygon decoders, fixed/metric elevation, reverse_long_lat). Largest
deckgl layer (500+ lines) but follows the same pattern. Polygon.tsx
component stays as sibling for Multi.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-14 18:56:52 -07:00
Evan Rusackas
46555d12cb feat(glyph): consolidate deckgl Path layer to defineChart()
Collapse multi-file plugin into single index.tsx. Path keeps its
custom buildQuery (line_column required, optional metric/groupby
handling) and transformProps (decoders for json/polyline/geohash line
formats, reverse_long_lat support). Path.tsx component stays as
sibling for Multi.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-14 18:54:06 -07:00
Evan Rusackas
5b0d895322 feat(glyph): consolidate deckgl Hex layer to defineChart()
Collapse multi-file plugin into single index.tsx. Hex uses shared
buildSpatialQuery/transformSpatialProps + categorical color scheme +
dynamic aggregation function (sum/min/max/mean/median/count/etc).
Hex.tsx component stays as sibling for Multi.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-14 18:51:46 -07:00
Evan Rusackas
1eae7b4ee5 feat(glyph): consolidate deckgl Heatmap layer to defineChart()
Collapse multi-file plugin into single index.tsx. Heatmap uses shared
buildSpatialQuery/transformSpatialProps, plus intensity/radius_pixels
controls and a linear color scheme palette. Heatmap.tsx component
stays as sibling for Multi.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-14 18:49:50 -07:00
Evan Rusackas
6a054f9170 feat(glyph): consolidate deckgl Grid layer to defineChart()
Collapse multi-file plugin (buildQuery, controlPanel, transformProps,
index) into single index.tsx. Grid uses shared buildSpatialQuery /
transformSpatialProps. Grid.tsx component stays as sibling for Multi.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-14 18:47:52 -07:00
Evan Rusackas
865b75c90e feat(glyph): consolidate deckgl Geojson layer to defineChart()
Collapse multi-file plugin (buildQuery, controlPanel, transformProps,
index) into single index.tsx. The Geojson.tsx component stays as
sibling. Largest deckgl controlPanel so far due to extensive label /
icon / JavaScript config controls.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-14 18:46:02 -07:00
Evan Rusackas
6fc18b38fa feat(glyph): consolidate deckgl Contour layer to defineChart()
Collapse the multi-file plugin (buildQuery, controlPanel,
transformProps, index) into a single index.tsx. Contour delegates to
the shared buildSpatialQuery / transformSpatialProps from ../spatialUtils.
The Contour.tsx component, getSafeCellSize helper, and Multi.tsx's
getPoints import stay intact.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-14 18:42:58 -07:00
Evan Rusackas
3f61764543 feat(glyph): consolidate deckgl Arc layer to defineChart()
First of 10 deck.gl layer consolidations: collapses Arc's multi-file
plugin (buildQuery, controlPanel, transformProps, index) into a single
index.tsx using defineChart(). The Arc.tsx component (and its
getPoints / getLayer / getHighlightLayer exports for Multi.tsx) stays
intact as a sibling.

Also wires @superset-ui/glyph-core as a TypeScript project reference
in preset-chart-deckgl/tsconfig.json so the deckgl plugin can resolve
the glyph-core source.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-14 18:40:50 -07:00
Evan Rusackas
9dad9cbfc2 feat(glyph): consolidate plugin-chart-word-cloud to defineChart()
Collapse the multi-file plugin/ subdirectory (buildQuery, controlPanel,
transformProps, index) into a single top-level src/index.tsx using
defineChart(). The chart/WordCloud.tsx component stays as a sibling.

  - Move plugin/controls/ up to src/controls/ so the new index.tsx can
    import the local RotationControl and ColorSchemeControl directly.
  - Delete src/index.ts barrel (the new index.tsx is the entrypoint and
    re-exports from ./types).
  - WordCloudChartPlugin is exported both as default and named, matching
    the previous public API.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-14 18:28:08 -07:00
Evan Rusackas
b2c58a0856 feat(glyph): consolidate nvd3 Bubble/Bullet/Compare to defineChart()
Migrate the remaining 3 nvd3 charts to single-file glyph pattern,
matching TimePivot which already uses defineChart. Each plugin now
has a single index.tsx replacing the prior multi-file
{controlPanel.ts, index.ts} layout. All charts continue to share
../transformProps and ../ReactNVD3 via require().

Also adds `label?: ChartLabel` pass-through to the defineChart
metadata interface so the Deprecated badge survives the consolidation
(Bubble + Compare use it).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-14 17:03:22 -07:00
Evan Rusackas
2e16b8266a feat(glyph): single-file chart definition pattern across all plugins
Introduce `defineChart()` — a declarative pattern that bundles metadata,
arguments (control-panel config), buildQuery, transform, and render into
a single chart-plugin file. Migrate every chart plugin to this pattern:

  * plugin-chart-echarts: Pie, Funnel, Gauge, Sankey, Waterfall,
    Histogram, Tree, Bubble, BoxPlot, Sunburst, Radar, Treemap, Graph,
    Heatmap, Gantt, BigNumber (Total, WithTrendline, PoP, Glyph demo),
    MixedTimeseries, and the Timeseries family (Generic, Scatter,
    SmoothLine, Step, Area, Line, Bar)
  * legacy-plugin-chart-*: calendar, horizon, chord, country-map,
    world-map, paired-t-test, parallel-coordinates, partition, rose,
    map-box
  * other plugins: handlebars, word-cloud, pivot-table, table,
    ag-grid-table, cartodiagram
  * legacy-preset-chart-nvd3: Bubble, Bullet, Compare, TimePivot
  * legacy-preset-chart-deckgl: Grid, Hex, Polygon, Scatter (single-file
    defineChart); Arc, Contour, Geojson, Heatmap, Path, Screengrid kept
    on the original multi-file ChartPlugin pattern pending follow-up

Glyph-core lives as @superset-ui/glyph-core (extracted package) and
provides: defineChart, ~14 argument types (Metric, Dimension, Select,
Checkbox, Text, Int, Slider, etc.), reusable presets (ShowLegend,
HeaderFontSize, Subtitle, etc.), cross-filter utilities
(extractCrossFilterProps, createSelectedValuesMap, isDataPointFiltered,
createLabelMap), and visibility-condition helpers
(resolveArgClass, getArgVisibleWhen, evaluateGlyphCondition).

Customize-tab rendering uses a new GlyphOptionsPanel — a native React
renderer that hybrids glyph args with additionalControls, with
inlined sharedControls in the Query section.

Imports are routed through @apache-superset/core subpath entrypoints
(/translation for t, /common for GenericDataType).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-14 15:38:18 -07:00
Evan Rusackas
4e09889607 test(datasets): regression coverage for #16141 (export with same table name, different schemas) (#40123)
Co-authored-by: Superset Dev <dev@superset.apache.org>
Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-14 11:08:23 -07:00
Evan Rusackas
672e9a1477 fix(docs): tighten onBrokenLinks to throw and fix surfaced broken links (#40102)
Co-authored-by: Claude Code <noreply@anthropic.com>
2026-05-14 11:07:18 -07:00
Richard Fogaca Nienkotter
8fa5a75c70 fix(mcp): apply cached adhoc filters to chart retrieval (#40099) 2026-05-14 14:21:54 -03:00
Mafi
144dae7c43 fix(dashboard): use datasetUuid instead of datasetId in display controls export/import (SC-104655) (#40008)
Co-authored-by: Matt Fitzgerald <matt.fitzgerald@preset.io>
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-14 10:18:57 -07:00
Arpit Jain
62dc237014 chore(ci): add explicit permissions to additional workflows (#40067) 2026-05-14 23:24:46 +07:00
Sandesh Devaraju
823eb905d3 fix(mcp): JSON-serialize order_by_cols and support sort direction (#39952)
Co-authored-by: Amin Ghadersohi <amin.ghadersohi@gmail.com>
2026-05-14 11:19:37 -04:00
Alexandru Soare
966e97989b chore(mcp): Standardize error response shapes across chart tools (#39905) 2026-05-14 18:07:31 +03:00
Mehmet Salih Yavuz
8b0e63b58c fix(rls): prevent double-apply when converting physical dataset to virtual (#39725)
Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-14 18:05:48 +03:00
dependabot[bot]
64dae07675 chore(deps): bump markdown-to-jsx from 9.7.16 to 9.8.0 in /superset-frontend (#40111)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-05-14 21:39:48 +07:00
Evan Rusackas
e56883baef fix(ci): handle schedule event in change_detector and actually trigger all-changed (#40105)
Co-authored-by: Claude Code <noreply@anthropic.com>
2026-05-14 21:39:07 +07:00
Mehmet Salih Yavuz
a62bf2b0bb fix: chart rendering race condition and homepage connection reset (#40065)
Co-authored-by: Geidō <60598000+geido@users.noreply.github.com>
2026-05-14 17:10:11 +03:00
Mafi
01224007da fix(mixed-timeseries): preserve all-NaN metric columns after pivot when Jinja evaluates to NULL (#40005)
Co-authored-by: Matt Fitzgerald <matt.fitzgerald@preset.io>
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-14 07:46:34 -03:00
Evan Rusackas
d1e9a5df06 chore(docs): clean up version-cutting tooling and finish developer_portal rename (#39837)
Co-authored-by: Claude Code <noreply@anthropic.com>
2026-05-13 20:14:52 -07:00
dependabot[bot]
48530cb888 chore(deps-dev): bump @babel/register from 7.28.6 to 7.29.3 in /superset-frontend (#39818)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-05-13 19:17:21 -07:00
dependabot[bot]
676979643f chore(deps-dev): bump @babel/preset-env from 7.29.3 to 7.29.5 in /superset-frontend (#39934)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-05-13 16:11:01 -07:00
dependabot[bot]
21e62d594e chore(deps-dev): bump wait-on from 9.0.6 to 9.0.10 in /superset-frontend (#40087)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-05-13 16:09:03 -07:00
dependabot[bot]
5bad4f55fb chore(deps-dev): bump @playwright/test from 1.59.1 to 1.60.0 in /superset-frontend (#40088)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-05-13 16:01:26 -07:00
dependabot[bot]
17a5f69339 chore(deps): bump chrono-node from 2.9.0 to 2.9.1 in /superset-frontend (#39939)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-05-13 15:59:36 -07:00
dependabot[bot]
d690aa7eb4 chore(deps): bump immer from 11.1.4 to 11.1.7 in /superset-frontend (#39941)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-05-13 15:58:20 -07:00
dependabot[bot]
d6c458abd4 chore(deps-dev): bump oxlint from 1.62.0 to 1.63.0 in /superset-frontend (#39937)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Claude <claude@anthropic.com>
2026-05-13 15:57:30 -07:00
dependabot[bot]
c233bf6171 chore(deps-dev): bump baseline-browser-mapping from 2.10.24 to 2.10.29 in /superset-frontend (#39903)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-05-13 15:56:30 -07:00
dependabot[bot]
992f561ab9 chore(deps): bump mapbox-gl from 3.23.0 to 3.23.1 in /superset-frontend (#39879)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-05-13 15:55:54 -07:00
Joe Li
d7fa9301cc fix(dashboard): restore top-level tab drop target for dashboards with content (#39423)
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-13 15:31:29 -07:00
Elizabeth Thompson
958d4aa3de fix(export): fix double app-root prefix in chart/drill-detail export URLs (#39710)
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-13 15:17:13 -07:00
Richard Fogaca Nienkotter
2a1dcb79e3 fix(mcp): expose table chart type labels in chart responses (#40060) 2026-05-13 16:38:31 -03:00
Michael S. Molina
817814d4f6 chore: Bump core packages to 0.1.0 (#40029) 2026-05-13 16:32:19 -03:00
Jean-Baptiste Braun
1a7a14c357 fix(explore): remove leftover debug console.log in ZoomConfigControl (#39991)
Co-authored-by: Claude Code <noreply@anthropic.com>
2026-05-13 10:55:29 -07:00
dependabot[bot]
85c4411041 chore(deps-dev): bump @babel/plugin-transform-modules-systemjs from 7.25.0 to 7.29.4 in /superset-embedded-sdk (#39983)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-05-13 10:10:38 -07:00
Mayank Aggarwal
a50de459ae fix(dashboard): restore spacing for charts inside Tabs layout (#38729) 2026-05-13 09:44:05 -07:00
dependabot[bot]
6216e57490 chore(deps): bump react-syntax-highlighter from 16.1.0 to 16.1.1 in /superset-frontend (#39698)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Claude <claude@anthropic.com>
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-13 09:35:42 -07:00