This is an automated email from the ASF dual-hosted git repository.
rusackas pushed a change to branch feat/color-picker-consolidation
in repository https://gitbox.apache.org/repos/asf/superset.git
discard a788aeb7161 fix(bullet): ignore range_colors when the automatic
fallback band is used
discard 8a72271c37e Merge master into feat/color-picker-consolidation
discard f3006199000 test(pop-kpi): assert decrease path uses custom
decreaseColor
discard 38f3a1f7db3 fix(color-picker): address review on legacy Gauge indices,
Bullet preview legend, PopKPI color tests
discard 42cb91272b9 test(mcp): regenerate native tool inventory for
gauge/bullet preview growth
discard 6ad66f3891f fix(color-picker): align legacy gauge index resolution
with the renderer
discard 6c757d0d5a8 fix(color-picker): address sadpandajoe review on #42910
discard e17f3032696 fix(color-picker): attach theme-colors disable to object
properties so custom-rules detects it
discard 5acd7d9cf1a fix(color-picker): satisfy custom-rules, oxfmt, and
dashboard hydration test
discard e410ab5b96a fix(explore): address review feedback on color picker
consolidation
discard 0576ee44ccc chore(i18n): restore color-picker messages.pot entries
after rebase
discard f845990fc22 fix(color-picker): address review feedback on gauge,
bullet, PoP, and MCP preview
discard e3ae4a65500 fix(mcp): honor explicit Gauge interval_colors in rebind
and preview
discard e430d645e1d fix(bullet): keep range_colors when the ranges control is
temporarily cleared
discard 68e6f69a46e fix(color-picker): match Gauge renderer fallbacks in
legacy interval color migration
discard 15207a403e2 chore(color-picker): add 'Up to' to messages.pot and apply
oxfmt
discard 5e1ea01d079 fix(color-picker): address review feedback on legacy
scheme migration, i18n label, and theme cast
discard 55293d20534 fix(color-picker): guard Gauge interval colors against
mid-edit misalignment
discard ccd953b65a5 fix(color-picker): fix real jest failures in
interval-color migration and bullet range control
discard 220deda628f fix(i18n): drop a messages.pot entry orphaned by an
earlier description edit
discard f022947a6a2 fix(color-picker): migrate legacy color fields and guard
transient input
discard ac640aceec6 fix(big-number): revert PopKPI arrow color assertion to
render-only check
discard b165dd3739e fix(color-picker): address bito review findings on
range/comparison colors
discard 9e567d7f4dd fix(bullet): share one range tokenizer, assert the
down-arrow value
discard ce84a50959d refactor(bignumber): name the comparison pill tint alpha
suffix
discard e37513d30aa test(color-picker): await click before asserting
reset-button onChange
discard f03b7857ac6 refactor(color-picker): dedupe comparison color config and
disable theme pickers on invalid JSON
discard 8801c8ed227 test(themes): paste JSON into the theme editor instead of
typing it
discard 8a2eead7fa9 fix(charts): align finite-value filtering between Bullet
ranges and range colors
discard 0fe4a8b8c85 fix(charts): address bot review findings on legacy color
fallbacks
discard 7b9c6a3738b feat(themes): add curated color pickers above the theme
JSON editor
discard 58f5bc907bc feat(big-number): replace 2-choice comparison scheme with
color pickers
discard d855031944a feat(bullet): add optional per-range band colors
discard ada6e525eaa feat(gauge): replace scheme-index interval colors with a
color picker
add 00688c7871b chore(deps-dev): update pinotdb requirement from
<10.0.0,>=8.0.0 to >=9.2.2,<10.0.0 (#45414)
add 73737afbfbb chore(deps): bump pyarrow from 25.0.1 to 26.0.0 (#45412)
add 067d536e216 chore(deps-dev): bump fastmcp from 3.4.7 to 4.1.0 (#45415)
add b7bfbd365e6 chore(deps-dev): bump oxfmt in /docs (#45565)
add 2b1046959d2 chore: bump pillow, certifi and geopy pins, tidy two small
code nits (#45578)
add 54aaf3ad7d7 fix(mcp): surface missing query_context warning in
get_chart_data result (#45250)
add fdb22260e25 fix(number-format): make the adaptive formatters follow
D3_FORMAT (#45241)
add c3279f01921 ci: skip jobs that cannot complete on forks and private
mirrors (#45035)
add 385844237e6 fix(explore): preserve zero thresholds in contour controls
(#44966)
add 3de22376c5c fix(dashboards): update last modified timestamp when
adding chart to dashboard (#44305) (#44358)
add 77ebc0e55f3 fix(chart): keep dataset_uuid in exports when the dataset
is deleted (#44347)
add 452dea81f23 chore(deps-dev): bump @playwright/test from 1.62.1 to
1.64.0 in /superset-frontend (#45371)
add bc83e3e6fdb fix(mcp): propose a matching value when a dashboard filter
value is rejected (#45547)
add b129d6a4c12 fix(semantic-layer): narrow Filter|OrFilter unions in test
helpers for mypy (#45268)
add ff214bdfb14 fix(sqllab): clip multi-line result values to their row
(#45487)
add 62d22e0697c fix(semantic-layer): type the E2E stub filters for the
full filter union (#45419)
add 5eaad449f5c fix(import): return 422 instead of 500 for unsafe ZIP
import bundles (#45440)
add 676af61b1c9 fix(jinja): keep filters with 0 or false values in
get_filters and fi… (#45437)
add 47358be13c1 fix(import): return 422 instead of 500 for non-UTF-8
members in import bundles (#45424)
add b4f8ca407a3 chore(deps-dev): bump vite from 8.3.1 to 8.3.5 in
/superset-websocket in the security group across 1 directory (#45590)
add 7ff7f9048bf fix(semantic-layer): handle absent fetch-values predicate
(#45539)
add 9ce458594fe fix(connection): encode next in the unauthorized login
redirect (#45477)
add 2304d1b80f2 fix(datasets): re-check statement count after query
mutation (#45453)
add 4bfd874c4cb fix(postprocessing): handle Decimal comparisons with zero
baselines (#45467)
add 4e5d0ef8f13 fix(models): keep NULL rows in NOT IN filters without a
NULL value (#45305)
add a0ebed9ff1a docs(auth): add Keycloak PKCE, logout and group-mapping
example (#38092)
add b3471a1369c fix(a11y): WCAG 1.4.1 — add non-color visual cues to
status indicators (#39233)
add 3297c39d94c docs(installation): describe the default image instead of
lean in Docker Compose responsibilities (#45582)
add 47300cf4c2f fix(mcp): pass time_grain as a string and keep annotation
DB error classification (#45484)
add 030f36a00c3 docs(extensions): move Semantic Layers into its own
extension point page (#45630)
add 578d43fef9b fix(listview): prevent table column layout shift on
content change (#37299)
add 97a536f37d9 feat(echarts): allow configuring minInterval on bar and
line chart axes (#43515)
add dfd84bf3d9e fix(mcp): only serve the browser hello page on the MCP
endpoint (#45391)
add 7fceb05c1ce docs(docker): drop redundant packages from custom image
example, bump version numbers (#44240)
add aabddf5b3f5 fix(semantic-layers): cap and time-bound bulk semantic
view creation (#45532)
add 2c275ed0a5b fix(echarts): restore series color markers in sanitized
tooltips (#45505)
add 98fac9104fb fix(datasets): validate metric d3format (#45633)
add bf18152476a chore: stop forcing .ipynb as a binary attribute (#45602)
add 87d1abb21e6 chore(frontend): let JEST_MAX_WORKERS cap the Jest worker
pool locally (#45594)
add 5cfcee95b4e fix(import): return 400 instead of 500 on malformed JSON
in import form fields (#45579)
add 44be9b819dd fix(bigquery): return empty extra metadata instead of 500
when table is not found (#45634)
add 0689df740e2 fix(sql-lab): return 400 instead of 500 when stop_query is
missing client_id (#45521)
add 3b7001836c7 fix(charts): keep large nullable-integer dimensions exact
(#45308)
add 43006c1d054 fix(explore): omit constant Custom SQL dimensions from
GROUP BY (#45271)
add be40309811d fix: filter Sunburst temporal segments by bucket and
invert Hours offset in grained filters (#45598)
add d595becba71 test(explore): cover column config, conditional
formatting, and contour controls (#44843)
add b1c1d41b55f ci(docker): give the CI node image the workspace manifests
so jobs stop reinstalling (#45606)
add 8cd2ab1c2ca chore(deps): bump the security group across 2 directories
with 1 update (#45645)
add 2f6d51e7ae3 chore(deps-dev): bump vitest from 5.0.3 to 5.0.4 in
/superset-websocket (#45629)
add b4e592836a9 chore(deps-dev): bump jsdom from 30.1.2 to 30.1.3 in
/superset-frontend (#45628)
add 30df96241ff chore(deps): bump antd from 6.6.5 to 6.6.6 in
/superset-frontend (#45627)
add f5eaf7c4f7c chore(deps): bump postcss from 8.5.28 to 8.5.30 in
/superset-frontend (#45626)
add c505b8b4916 chore(deps-dev): bump vitest from 5.0.3 to 5.0.4 in
/superset-embedded-sdk (#45625)
add dffb06978cd chore(deps-dev): bump jsdom from 30.1.2 to 30.1.3 in
/superset-embedded-sdk (#45624)
add 6752eef54c3 chore(deps): bump antd from 6.6.5 to 6.6.6 in /docs
(#45623)
add 9b3f66df370 chore(deps): bump zizmorcore/zizmor-action from 0.6.4 to
0.7.1 (#45621)
add 09edc1a2c6e chore(deps): bump the codeql group with 3 updates (#45620)
add 0454c5e940c chore(frontend): upgrade to TypeScript 7 (#45603)
add 3f4f772efef ci(storybook): use every core for story tests and install
deps for Chromium only (#45600)
add 3823c6dc2c5 chore(i18n): sync translation catalogs with messages.pot
(#45583)
add 424c34c695d fix(security): stop dataset editorship from authorizing
new SQL (#45342)
add 3f77b342cb8 fix(explore): persist aliased column config by real key
(#44955)
add 89840862d6f chore(deps-dev): bump vitest from 5.0.4 to 5.0.5 in
/superset-websocket (#45669)
add eeb2fc2ff36 chore(deps-dev): bump vitest from 5.0.4 to 5.0.5 in
/superset-embedded-sdk (#45666)
add 5877cb58db8 chore(deps): bump swagger-ui-react from 5.33.2 to 5.33.3
in /docs (#45665)
add ff50234bf25 chore(deps): bump js-yaml from 5.4.3 to 5.5.0 in /docs
(#45664)
add d0897f77c93 chore(deps): bump chromaui/action from 18.12.2 to 18.13.0
(#45662)
add d0116153376 feat(dashboard): expose authorized chart display labels
(#45552)
add c016883970d fix(dataset): preserve pending metric and column edits
(#45506)
add 23f10960f5a feat(plugin-chart-echarts): let users hide legend
All/Invert buttons (#45172)
add 6114b81c928 feat(ci): label PRs/issues from UTSC 2026 students (#45656)
add 26d7b5e5d8d feat(gauge): replace scheme-index interval colors with a
color picker
add 6ef50e0b0ee feat(bullet): add optional per-range band colors
add ea48f157a04 feat(big-number): replace 2-choice comparison scheme with
color pickers
add bcf375ede7c feat(themes): add curated color pickers above the theme
JSON editor
add 9410eb13487 fix(charts): address bot review findings on legacy color
fallbacks
add 6c28a1b3e9d fix(charts): align finite-value filtering between Bullet
ranges and range colors
add 76a531262c8 test(themes): paste JSON into the theme editor instead of
typing it
add bbe24c8724a refactor(color-picker): dedupe comparison color config and
disable theme pickers on invalid JSON
add cb4cd4f0f3c test(color-picker): await click before asserting
reset-button onChange
add d28c6d31ae2 refactor(bignumber): name the comparison pill tint alpha
suffix
add 4dd49dd1924 fix(bullet): share one range tokenizer, assert the
down-arrow value
add ba64882f106 fix(color-picker): address bito review findings on
range/comparison colors
add ee94543f7ce fix(big-number): revert PopKPI arrow color assertion to
render-only check
add 3775d4f0336 fix(color-picker): migrate legacy color fields and guard
transient input
add 5a959162a76 fix(i18n): drop a messages.pot entry orphaned by an
earlier description edit
add 22967e88d3d fix(color-picker): fix real jest failures in
interval-color migration and bullet range control
add a1bf552a68f fix(color-picker): guard Gauge interval colors against
mid-edit misalignment
add ab6459a122d fix(color-picker): address review feedback on legacy
scheme migration, i18n label, and theme cast
add e9d16120485 chore(color-picker): add 'Up to' to messages.pot and apply
oxfmt
add dbcaaa0c676 fix(color-picker): match Gauge renderer fallbacks in
legacy interval color migration
add 0466816a754 fix(bullet): keep range_colors when the ranges control is
temporarily cleared
add e17135b2d75 fix(mcp): honor explicit Gauge interval_colors in rebind
and preview
add 9fc7c96e736 fix(color-picker): address review feedback on gauge,
bullet, PoP, and MCP preview
add c022eefbf1e chore(i18n): restore color-picker messages.pot entries
after rebase
add 97ed8d37e73 fix(explore): address review feedback on color picker
consolidation
add b7530253e95 fix(color-picker): satisfy custom-rules, oxfmt, and
dashboard hydration test
add a20f266dc2d fix(color-picker): attach theme-colors disable to object
properties so custom-rules detects it
add 2bcfa4d555c fix(color-picker): address sadpandajoe review on #42910
add 1bdbb64e5e2 fix(color-picker): align legacy gauge index resolution
with the renderer
add 51101b8f35e fix(color-picker): address review on legacy Gauge indices,
Bullet preview legend, PopKPI color tests
add 19c6972243c test(pop-kpi): assert decrease path uses custom
decreaseColor
add e28c1a81be2 fix(bullet): ignore range_colors when the automatic
fallback band is used
add 66b9cc27a44 fix(color-picker): address review feedback on Bullet
preview, Green preset, Gauge description
This update added new revisions after undoing existing revisions.
That is to say, some revisions that were in the old version of the
branch are not in the new version. This situation occurs
when a user --force pushes a change and generates a repository
containing something like this:
* -- * -- B -- O -- O -- O (a788aeb7161)
\
N -- N -- N refs/heads/feat/color-picker-consolidation
(66b9cc27a44)
You should already have received notification emails for all of the O
revisions, and so the following emails describe only the N revisions
from the common base, B.
Any revisions marked "omit" are not gone; other references still
refer to them. Any revisions marked "discard" are gone forever.
No new revisions were added by this update.
Summary of changes:
.gitattributes | 1 -
.github/utsc2026-students.yml | 63 +
.github/workflows/chromatic.yml | 4 +-
.github/workflows/codeql-analysis.yml | 23 +-
.github/workflows/docker.yml | 27 +-
.github/workflows/frontend-bundle-size-nightly.yml | 5 +-
.github/workflows/github-action-validator.yml | 16 +-
.github/workflows/python-nightly-canary.yml | 3 +
.../scripts/check-code-scanning-available.sh | 64 +
.../scripts/check-code-scanning-available.test.sh | 118 ++
.github/workflows/showtime-cleanup.yml | 3 +
.github/workflows/superset-docs-verify.yml | 5 +
.github/workflows/superset-frontend.yml | 13 +-
.github/workflows/superset-translations.yml | 9 +-
.github/workflows/testcontainers.yml | 7 +-
.github/workflows/utsc2026-labeler.yml | 57 +
AGENTS.md | 1 +
Dockerfile | 28 +-
UPDATING.md | 39 +-
docker-compose-light.yml | 1 -
docker-compose.yml | 1 -
docs/admin_docs/configuration/cache.mdx | 2 +-
.../configuration/configuring-superset.mdx | 2 +
docs/admin_docs/configuration/mcp-server.mdx | 7 +-
docs/admin_docs/installation/docker-builds.mdx | 43 +-
.../installation/installation-methods.mdx | 4 +-
docs/admin_docs/security/oauth.mdx | 318 +++++
.../contributing/development-setup.md | 9 +-
docs/developer_docs/contributing/howtos.md | 3 +
.../extensions/contribution-types.md | 332 +----
.../semantic-layers.md} | 392 +++---
.../extensions/semantic-execution-context.md | 102 --
docs/developer_docs/extensions/semantic-filters.md | 79 --
docs/developer_docs/semantic-layer-cache-clear.md | 2 +-
docs/developer_docs/sidebars.js | 1 +
docs/docs/using-superset/embedding.mdx | 36 +
docs/docs/using-superset/exploring-data.mdx | 29 +
.../using-superset/semantic-layer-connections.mdx | 11 +
.../using-superset/semantic-member-selections.mdx | 2 +-
.../docs/using-superset/using-ai-with-superset.mdx | 20 +
docs/package.json | 8 +-
docs/sidebarTutorials.js | 2 +-
docs/static/resources/openapi.json | 14 +
docs/yarn.lock | 938 ++++++-------
pyproject.toml | 8 +-
requirements/base.in | 2 +-
requirements/base.txt | 10 +-
requirements/development.txt | 48 +-
superset-embedded-sdk/package-lock.json | 278 ++--
superset-embedded-sdk/package.json | 4 +-
superset-frontend/.storybook/main.mjs | 5 +-
.../.storybook/playwright.storybook-ci.config.ts | 4 +
superset-frontend/jest.config.js | 4 +
superset-frontend/package-lock.json | 644 ++++++---
superset-frontend/package.json | 17 +-
.../packages/superset-core/package.json | 2 +-
.../src/utils/headerGroups.test.ts | 182 ++-
.../src/utils/headerGroups.ts | 68 +-
.../src/components/Modal/Modal.tsx | 17 +-
.../src/components/TableCollection/utils.tsx | 3 +-
.../src/connection/SupersetClientClass.ts | 4 +-
.../src/number-format/NumberFormatterRegistry.ts | 28 +-
.../factories/createSmartNumberFormatter.ts | 56 +-
.../superset-ui-core/src/query/types/Datasource.ts | 1 +
.../packages/superset-ui-core/src/utils/tooltip.ts | 31 +
.../test/chart/models/ChartProps.test.ts | 15 +
.../test/connection/SupersetClientClass.test.ts | 5 +-
.../number-format/NumberFormatterRegistry.test.ts | 18 +
.../factories/createSmartNumberFormatter.test.ts | 14 +
.../superset-ui-core/test/utils/tooltip.test.ts | 34 +
.../playwright/helpers/api/assertions.ts | 16 +-
.../playwright/tests/chart/chart-list.spec.ts | 4 +-
.../tests/dashboard/dashboard-list.spec.ts | 4 +-
.../playwright/tests/dataset/dataset-list.spec.ts | 4 +-
.../src/controlPanel.tsx | 5 +
.../src/transformProps.ts | 9 +-
.../src/utils/isEqualColumns.ts | 8 +
.../test/controlPanel.test.tsx | 34 +
.../test/transformProps.test.ts | 159 +++
.../BigNumberPeriodOverPeriod/transformProps.ts | 6 +-
.../src/BigNumber/BigNumberTotal/transformProps.ts | 6 +-
.../BigNumberWithTrendline/transformProps.ts | 6 +-
.../plugin-chart-echarts/src/BigNumber/utils.ts | 10 +-
.../src/Bubble/transformProps.ts | 3 +
.../src/Butterfly/transformProps.ts | 3 +
.../src/Candlestick/transformProps.ts | 3 +
.../src/Funnel/controlPanel.tsx | 13 +-
.../src/Funnel/transformProps.ts | 3 +
.../src/Gantt/transformProps.ts | 3 +
.../src/Gauge/controlPanel.tsx | 2 +-
.../src/Graph/transformProps.ts | 3 +
.../src/Histogram/controlPanel.tsx | 7 +-
.../src/Histogram/transformProps.ts | 10 +-
.../plugin-chart-echarts/src/Histogram/types.ts | 1 +
.../src/MixedTimeseries/transformProps.ts | 3 +
.../plugin-chart-echarts/src/Pie/transformProps.ts | 3 +
.../src/Radar/controlPanel.tsx | 10 +-
.../src/Radar/transformProps.ts | 3 +
.../src/Sunburst/EchartsSunburst.tsx | 99 +-
.../src/Sunburst/transformProps.ts | 36 +-
.../plugin-chart-echarts/src/Sunburst/types.ts | 4 +
.../plugin-chart-echarts/src/Sunburst/utils.ts | 190 +++
.../src/Timeseries/EchartsTimeseries.test.tsx | 1 +
.../src/Timeseries/Regular/Bar/controlPanel.tsx | 28 +
.../src/Timeseries/Regular/Line/controlPanel.tsx | 19 +
.../src/Timeseries/constants.ts | 1 +
.../src/Timeseries/transformProps.ts | 86 +-
.../plugin-chart-echarts/src/Timeseries/types.ts | 2 +
.../plugins/plugin-chart-echarts/src/constants.ts | 1 +
.../plugins/plugin-chart-echarts/src/controls.tsx | 55 +-
.../plugins/plugin-chart-echarts/src/types.ts | 3 +-
.../plugin-chart-echarts/src/utils/forecast.ts | 20 +-
.../plugin-chart-echarts/src/utils/series.ts | 5 +-
.../src/utils/xAxisDrillByFilter.ts | 37 +-
.../test/BigNumber/chartDisplayLabels.test.ts | 196 +++
.../test/Gantt/transformProps.test.ts | 7 +-
.../test/Histogram/buildQuery.test.ts | 1 +
.../test/Histogram/transformProps.test.ts | 12 +
.../test/MixedTimeseries/transformProps.test.ts | 9 +-
.../test/Sunburst/EchartsSunburst.test.tsx | 474 +++++++
.../test/Sunburst/transformProps.test.ts | 149 ++-
.../test/Sunburst/utils.test.ts | 52 +
.../test/Timeseries/Bar/controlPanel.test.ts | 28 +
.../test/Timeseries/EchartsTimeseries.test.tsx | 40 +
.../test/Timeseries/Line/controlPanel.test.ts | 42 +
.../test/Timeseries/helpers.ts | 1 +
.../test/Timeseries/transformProps.test.ts | 205 ++-
.../test/utils/forecast.test.ts | 63 +-
.../plugin-chart-echarts/test/utils/series.test.ts | 32 +-
.../plugin-chart-table/src/controlPanel.tsx | 5 +
.../plugin-chart-table/src/transformProps.ts | 9 +-
.../plugin-chart-table/src/utils/isEqualColumns.ts | 8 +
.../plugin-chart-table/test/TableChart.test.tsx | 112 ++
.../plugin-chart-table/test/controlPanel.test.tsx | 34 +
.../test/transformProps.test.tsx | 58 +
.../src/layers/Contour/Contour.test.ts | 56 +
.../src/layers/Contour/Contour.tsx | 2 +-
.../components/Chart/ChartErrorMessage.test.tsx | 2 +-
.../src/components/Chart/ChartErrorMessage.tsx | 3 +-
.../Chart/DrillBy/DrillByTemporalFilters.test.tsx | 256 ++++
.../DatasourceModal.pendingEdits.test.tsx | 196 +++
.../CollectionTable.debounce.test.tsx | 287 ++++
.../components/CollectionTable/index.tsx | 231 ++--
.../src/components/Datasource/types.ts | 10 -
.../components/ErrorMessage/ErrorAlert.test.tsx | 41 +
.../src/components/GridTable/GridTable.test.tsx | 21 +
.../src/components/GridTable/index.tsx | 10 +-
.../components/gridComponents/Chart/Chart.test.tsx | 55 +
.../components/gridComponents/Chart/Chart.tsx | 7 +-
.../nativeFilters/FilterBar/utils.test.ts | 35 +
.../components/nativeFilters/FilterBar/utils.ts | 5 +-
superset-frontend/src/dashboard/types.ts | 1 +
.../dashboard/util/withChartDisplayLabels.test.ts | 153 +++
.../src/dashboard/util/withChartDisplayLabels.ts | 61 +
.../components/controls/ColorPickerControl.tsx | 6 +
.../ColorSchemeControl/ColorSchemeLabel.test.tsx | 14 +
.../ColorSchemeControl/ColorSchemeLabel.tsx | 3 +
.../ColumnConfigControl.popover.test.tsx | 293 +++++
.../ColumnConfigControl.test.tsx | 75 ++
.../ColumnConfigControl/ColumnConfigControl.tsx | 20 +-
.../ControlForm/ControlForm.test.tsx | 158 +++
.../controls/ColumnConfigControl/types.ts | 1 +
.../components/controls/ComparisonRangeLabel.tsx | 66 +-
.../ConditionalFormattingControl.test.tsx | 297 ++++-
.../ContourControl/ContourControl.test.tsx | 128 ++
.../controls/ContourControl/ContourOption.test.tsx | 111 ++
.../controls/ContourControl/ContourOption.tsx | 8 +-
.../ContourControl/ContourPopoverControl.test.tsx | 277 ++++
.../ContourControl/ContourPopoverControl.tsx | 17 +-
.../ContourControl/ContourPopoverTrigger.test.tsx | 133 ++
.../controls/ContourControl/index.test.tsx | 212 +++
.../alerts/components/AlertStatusIcon.test.tsx | 14 +
.../features/alerts/components/AlertStatusIcon.tsx | 1 +
superset-frontend/src/pages/ChartList/index.tsx | 9 +-
.../src/pages/DashboardList/index.tsx | 3 +-
superset-frontend/src/pages/DatasetList/index.tsx | 18 +-
superset-frontend/webpack.config.js | 43 +-
superset-websocket/package-lock.json | 410 +++---
superset-websocket/package.json | 4 +-
superset/charts/api.py | 25 +-
superset/commands/chart/create.py | 4 +
superset/commands/chart/export.py | 34 +-
superset/commands/chart/update.py | 19 +
superset/commands/chart/utils.py | 39 +
superset/commands/dashboard/export.py | 51 +-
superset/commands/dataset/create.py | 4 +-
superset/commands/explore/get.py | 14 +-
superset/commands/export/assets.py | 75 +-
superset/commands/export/models.py | 18 +-
superset/commands/importers/v1/utils.py | 24 +-
superset/commands/semantic_layer/create.py | 11 +
superset/common/utils/dataframe_utils.py | 64 +
superset/config.py | 13 +
superset/connectors/sqla/models.py | 242 +++-
superset/connectors/sqla/utils.py | 55 +-
superset/daos/dashboard.py | 18 +-
superset/dashboards/api.py | 51 +-
superset/dashboards/schemas.py | 13 +
superset/databases/api.py | 32 +-
superset/datasets/api.py | 26 +-
superset/datasets/schemas.py | 17 +-
superset/db_engine_specs/bigquery.py | 15 +-
superset/explore/utils.py | 6 +-
superset/importexport/api.py | 38 +-
superset/jinja_context.py | 4 +-
superset/mcp_service/chart/chart_helpers.py | 23 +
superset/mcp_service/chart/chart_utils.py | 16 +-
superset/mcp_service/chart/compile.py | 176 ++-
superset/mcp_service/chart/preview_utils.py | 5 +-
superset/mcp_service/chart/schemas.py | 7 +-
superset/mcp_service/chart/tool/get_chart_data.py | 98 +-
superset/mcp_service/dashboard/layout_placement.py | 21 +-
.../dashboard/tool/apply_dashboard_filters.py | 34 +-
superset/mcp_service/dashboard_scope_sql.py | 18 +-
superset/mcp_service/dataset/schemas.py | 21 +
superset/mcp_service/jwt_verifier.py | 28 +-
superset/models/core.py | 5 +-
superset/models/dashboard.py | 225 +++-
superset/models/helpers.py | 195 ++-
superset/queries/api.py | 3 +
superset/queries/saved_queries/api.py | 26 +-
superset/queries/schemas.py | 2 +-
superset/security/manager.py | 75 +-
superset/semantic_layers/api.py | 63 +-
superset/semantic_layers/models.py | 3 +
superset/sql/parse.py | 27 +
superset/translations/ar/LC_MESSAGES/messages.po | 170 ++-
superset/translations/ca/LC_MESSAGES/messages.po | 170 ++-
superset/translations/cs/LC_MESSAGES/messages.po | 170 ++-
superset/translations/de/LC_MESSAGES/messages.po | 170 ++-
superset/translations/en/LC_MESSAGES/messages.po | 166 ++-
superset/translations/es/LC_MESSAGES/messages.po | 170 ++-
superset/translations/fa/LC_MESSAGES/messages.po | 170 ++-
superset/translations/fi/LC_MESSAGES/messages.po | 176 ++-
superset/translations/fr/LC_MESSAGES/messages.po | 170 ++-
superset/translations/it/LC_MESSAGES/messages.po | 173 ++-
superset/translations/ja/LC_MESSAGES/messages.po | 170 ++-
superset/translations/ko/LC_MESSAGES/messages.po | 175 ++-
superset/translations/lv/LC_MESSAGES/messages.po | 170 ++-
superset/translations/messages.pot | 98 +-
superset/translations/mi/LC_MESSAGES/messages.po | 170 ++-
superset/translations/nl/LC_MESSAGES/messages.po | 170 ++-
superset/translations/pl/LC_MESSAGES/messages.po | 175 ++-
superset/translations/pt/LC_MESSAGES/messages.po | 173 ++-
.../translations/pt_BR/LC_MESSAGES/messages.po | 170 ++-
superset/translations/ro/LC_MESSAGES/messages.po | 170 ++-
superset/translations/ru/LC_MESSAGES/messages.po | 170 ++-
superset/translations/sk/LC_MESSAGES/messages.po | 170 ++-
superset/translations/sl/LC_MESSAGES/messages.po | 170 ++-
superset/translations/sr/LC_MESSAGES/messages.po | 172 ++-
.../translations/sr_Latn/LC_MESSAGES/messages.po | 172 ++-
superset/translations/ta/LC_MESSAGES/messages.po | 170 ++-
superset/translations/th/LC_MESSAGES/messages.po | 176 ++-
superset/translations/tr/LC_MESSAGES/messages.po | 170 ++-
superset/translations/uk/LC_MESSAGES/messages.po | 170 ++-
superset/translations/zh/LC_MESSAGES/messages.po | 170 ++-
.../translations/zh_TW/LC_MESSAGES/messages.po | 170 ++-
superset/utils/excel.py | 41 +-
superset/utils/number_format.py | 94 ++
superset/utils/pandas_postprocessing/compare.py | 14 +-
superset/views/base_api.py | 24 +
.../src/superset_e2e_semantic_stub/__init__.py | 12 +-
tests/integration_tests/dashboards/api_tests.py | 617 ++++++++-
tests/integration_tests/datasets/api_tests.py | 45 +
tests/integration_tests/fixtures/public_role.py | 47 +-
tests/integration_tests/queries/api_tests.py | 30 +
.../security/public_role_tests.py | 93 ++
tests/unit_tests/charts/test_client_processing.py | 41 +
.../charts/test_exact_integer_chart_data.py | 824 ++++++++++++
tests/unit_tests/commands/chart/create_test.py | 252 +++-
tests/unit_tests/commands/chart/export_test.py | 576 ++++++++
tests/unit_tests/commands/chart/update_test.py | 266 +++-
tests/unit_tests/commands/dashboard/export_test.py | 8 +-
tests/unit_tests/commands/dataset/test_create.py | 11 +
.../explore/test_get_query_authorship_bypass.py | 100 +-
.../unit_tests/commands/importers/v1/utils_test.py | 92 +-
.../commands/semantic_layer/create_test.py | 53 +-
tests/unit_tests/common/test_dataframe_utils.py | 53 +
.../unit_tests/common/test_query_cache_manager.py | 38 +
.../common/test_query_context_processor.py | 50 +
tests/unit_tests/connectors/sqla/utils_test.py | 50 +
tests/unit_tests/dashboards/datasets_test.py | 1381 +++++++++++++++++++-
tests/unit_tests/databases/api_test.py | 44 +
tests/unit_tests/datasets/schema_tests.py | 80 ++
tests/unit_tests/datasource/test_query_api.py | 24 +
tests/unit_tests/db_engine_specs/test_bigquery.py | 70 +
tests/unit_tests/explore/utils_test.py | 39 +
tests/unit_tests/importexport/api_test.py | 99 +-
tests/unit_tests/jinja_context_test.py | 74 ++
.../mcp_service/chart/test_bullet_chart.py | 20 +
.../mcp_service/chart/test_bullet_tool_paths.py | 3 +
.../mcp_service/chart/test_chart_helpers.py | 42 +
tests/unit_tests/mcp_service/chart/test_compile.py | 464 +++++++
.../test_review_query_and_preview_regressions.py | 7 +-
.../chart/test_time_grain_generic_axes.py | 171 +++
.../mcp_service/chart/tool/test_get_chart_data.py | 365 ++++++
.../dashboard/tool/test_apply_dashboard_filters.py | 67 +-
.../mcp_service/native_tool_inventory.json | 20 +-
.../mcp_service/test_browser_hello_middleware.py | 126 ++
.../mcp_service/test_dashboard_scope_sql.py | 51 +
.../mcp_service/test_native_tool_surface.py | 10 +-
.../unit_tests/mcp_service/test_tool_inventory.py | 21 +-
.../mcp_service/test_validation_contract.py | 17 +-
.../models/groupby_literal_column_test.py | 288 ++++
tests/unit_tests/models/helpers_test.py | 171 +++
.../models/normalize_df_large_integer_test.py | 307 +++++
.../models/test_hours_offset_bound_truncation.py | 480 ++++++-
.../pandas_postprocessing/test_compare.py | 109 ++
.../security/test_dashboard_chart_labels.py | 207 +++
tests/unit_tests/semantic_layers/api_test.py | 262 +++-
.../semantic_layers/cache_policy_test.py | 3 +-
.../semantic_layers/e2e_stub_extension_test.py | 42 +-
.../semantic_layers/import_export_test.py | 6 +-
.../semantic_layers/metric_filter_test.py | 72 +-
tests/unit_tests/sql/parse_tests.py | 44 +
tests/unit_tests/subjects/test_raise_for_access.py | 4 +
tests/unit_tests/utils/csv_tests.py | 14 +
tests/unit_tests/utils/excel_tests.py | 38 +
tests/unit_tests/utils/number_format_test.py | 31 +
.../unit_tests/views/test_parse_json_form_field.py | 54 +
320 files changed, 23482 insertions(+), 3049 deletions(-)
create mode 100644 .github/utsc2026-students.yml
create mode 100755 .github/workflows/scripts/check-code-scanning-available.sh
create mode 100755
.github/workflows/scripts/check-code-scanning-available.test.sh
create mode 100644 .github/workflows/utsc2026-labeler.yml
create mode 100644 docs/admin_docs/security/oauth.mdx
copy docs/developer_docs/extensions/{contribution-types.md =>
extension-points/semantic-layers.md} (65%)
delete mode 100644 docs/developer_docs/extensions/semantic-execution-context.md
delete mode 100644 docs/developer_docs/extensions/semantic-filters.md
create mode 100644
superset-frontend/plugins/plugin-chart-echarts/src/Sunburst/utils.ts
create mode 100644
superset-frontend/plugins/plugin-chart-echarts/test/BigNumber/chartDisplayLabels.test.ts
create mode 100644
superset-frontend/plugins/plugin-chart-echarts/test/Sunburst/EchartsSunburst.test.tsx
create mode 100644
superset-frontend/plugins/plugin-chart-echarts/test/Sunburst/utils.test.ts
create mode 100644
superset-frontend/plugins/plugin-chart-table/test/transformProps.test.tsx
create mode 100644
superset-frontend/plugins/preset-chart-deckgl/src/layers/Contour/Contour.test.ts
create mode 100644
superset-frontend/src/components/Chart/DrillBy/DrillByTemporalFilters.test.tsx
create mode 100644
superset-frontend/src/components/Datasource/DatasourceModal/DatasourceModal.pendingEdits.test.tsx
create mode 100644
superset-frontend/src/components/Datasource/components/CollectionTable/CollectionTable.debounce.test.tsx
create mode 100644
superset-frontend/src/dashboard/util/withChartDisplayLabels.test.ts
create mode 100644
superset-frontend/src/dashboard/util/withChartDisplayLabels.ts
create mode 100644
superset-frontend/src/explore/components/controls/ColumnConfigControl/ColumnConfigControl.popover.test.tsx
create mode 100644
superset-frontend/src/explore/components/controls/ColumnConfigControl/ControlForm/ControlForm.test.tsx
create mode 100644
superset-frontend/src/explore/components/controls/ContourControl/ContourControl.test.tsx
create mode 100644
superset-frontend/src/explore/components/controls/ContourControl/ContourOption.test.tsx
create mode 100644
superset-frontend/src/explore/components/controls/ContourControl/ContourPopoverControl.test.tsx
create mode 100644
superset-frontend/src/explore/components/controls/ContourControl/ContourPopoverTrigger.test.tsx
create mode 100644
superset-frontend/src/explore/components/controls/ContourControl/index.test.tsx
create mode 100644 tests/integration_tests/security/public_role_tests.py
create mode 100644 tests/unit_tests/charts/test_exact_integer_chart_data.py
create mode 100644 tests/unit_tests/commands/chart/export_test.py
create mode 100644
tests/unit_tests/mcp_service/test_browser_hello_middleware.py
create mode 100644 tests/unit_tests/models/groupby_literal_column_test.py
create mode 100644 tests/unit_tests/models/normalize_df_large_integer_test.py
create mode 100644 tests/unit_tests/security/test_dashboard_chart_labels.py
create mode 100644 tests/unit_tests/views/test_parse_json_form_field.py