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>
@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>
`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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>