Commit Graph

21417 Commits

Author SHA1 Message Date
Superset Dev
fa4f62cdcb fix(mobile): tab bar scroll affordance, sticky behavior, spacing; drawer nav row taps
- Fade the clipped edge of the swipeable tab bar with a theme-colored
  gradient (restyling antd's ping-edge shadow elements, which are hard
  to see on dark themes) so scrollability is visible
- Let the dashboard title header scroll away on mobile instead of
  pinning underneath the higher-z sticky tab bar, where its bottom edge
  (kebab button) peeked out below the tabs
- Add padding below the tab bar so the first card doesn't butt against
  it; padding rather than margin so the gap is part of the opaque
  sticky bar when stuck
- Fix dead User Info / Logout taps in the mobile nav drawer: the reused
  desktop items navigate via anchors that only span their label text,
  but the drawer's tap target is the full row — navigate explicitly on
  row tap

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-17 13:50:41 -07:00
Superset Dev
9b71958c4a fix(mobile): guard viewport meta against missing is_feature_enabled in template context
Templates hot-reload before the Python context processor does during dev
reloads (and could similarly skew in a rolling deploy), which raised
'is_feature_enabled is undefined' when rendering spa.html. Check
'is defined' before calling so the page renders without the meta tag
instead of erroring.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-17 13:36:37 -07:00
Superset Dev
aad2504a23 fix(mobile): viewport meta tag, swipeable tabs, and accurate title sizing
Three fixes surfaced by measuring the dashboard header in an iPhone
emulation instead of a resized desktop window:

- Serve <meta name="viewport" content="width=device-width"> from
  spa.html when MOBILE_CONSUMPTION_MODE is on. Without it mobile
  browsers lay the page out at the ~980px legacy viewport and none of
  the mobile breakpoints ever match on a real device — the mode only
  appeared to work in resized desktop windows and devtools emulation.
  Gated on the flag so desktop-only deployments keep shrink-to-fit
  rendering on phones; exposes is_feature_enabled to Jinja via the
  common context processor.
- Replace the dashboard tab overflow dropdown with a swipeable tab bar
  on mobile. The "more" menu is a poor touch target and duplicates
  half-clipped tabs; antd's tab nav scrolls natively on touch and its
  ping-edge shadows signal overflow.
- DynamicEditableTitle sized its input from a hidden sizer measured
  before webfonts loaded (fallback metrics ~10px narrower) and never
  re-measured, truncating titles that actually fit; the input also
  rendered at font-weight 400 while the sizer measured at the
  container's 500. Re-measure on document.fonts.ready and inherit the
  container's font weight.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-17 13:11:16 -07:00
Superset Dev
ac71153d56 fix(mobile): hide redundant header refresh button, uniform gutters between stacked cards
- The dashboard header's refresh icon duplicates the kebab menu's
  "Refresh dashboard" item on mobile, where title space is scarce; hide
  the icon and keep the menu item
- Rows collapsed into a vertical stack lost their gutter (the desktop
  margin-right is zeroed), so same-row neighbors touched while
  cross-row neighbors kept GridContent's 16px margin; give stacked row
  children the same theme.sizeUnit * 4 gutter GridContent and Column use

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-16 22:37:16 -07:00
Superset Dev
33d570284b fix(mobile): full-width for all grid components, cap chart height to viewport
Fixes two layout defects in mobile consumption mode:

- Markdown, Column, and other non-chart grid components kept their
  desktop pixel widths (only ChartHolder got the JS-level mobile width),
  rendering narrow and clipping charts nested inside columns. Restore
  the full-width mobile CSS on ResizableContainer, gated on the feature
  flag, to cover every component that sizes via re-resizable's inline
  width.
- Charts authored tall for wide desktop grids became towers in the
  single-column stacked layout. Cap the height at the viewport minus
  app chrome (MOBILE_CHROME_HEIGHT), applied to both the container
  shell and the height handed to the chart plugin so they stay in sync.

Also rework useIsMobile to subscribe to matchMedia only when
MOBILE_CONSUMPTION_MODE is enabled, instead of antd Grid.useBreakpoint.
useBreakpoint forces a post-mount re-render of every consumer even with
the flag off, which changed measured chart header heights and made the
flag non-inert for default deployments. With the rework, flag off means
no subscription, no state updates, and zero render delta.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-16 21:31:39 -07:00
Superset Dev
a175324cff chore(mobile): enable MOBILE_CONSUMPTION_MODE in the docker dev config
The shipped default in superset/config.py remains False; this only turns
the flag on for the docker compose development environment, matching the
other in-development flags enabled there.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-16 18:55:28 -07:00
Superset Dev
9da3908bec refactor(mobile): gate consumption mode behind MOBILE_CONSUMPTION_MODE flag, fix chart sizing
Review-pass hardening of the mobile consumption mode:

- Add MOBILE_CONSUMPTION_MODE feature flag (default off, @lifecycle:
  development) and a shared useIsMobile() hook; all mobile behavior and
  mobile CSS now keys off the flag, so default behavior is unchanged
- Fix chart sizing: ChartHolder reports the full grid column count on
  mobile so plugins get the true stacked width; drop the
  width:100%!important CSS overrides on Chart/Row/ResizableContainer
- ListView: mount a single FilterControls instance (inline or drawer)
  so filtersRef/clearFilters always target the visible instance; drop
  the desktop-filters/desktop-sort CSS-hidden duplicates
- Route gating: routes declare mobileSupported in routes.tsx and
  MobileRouteGuard receives it as a prop; remove the regex allowlist,
  the unregistered /mobile-unsupported entry, and dead ?from= handling
- FilterBar: first-class mobileMode in verticalConfig replaces the
  :has()/!important drawer CSS surgery in DashboardBuilder
- Consumption-only controls (explore links, slice kebab menus, card
  kebab menus) are render-gated instead of CSS-hidden for a11y
- Use theme.screenSMMax instead of hardcoded 767px media queries
- RightMenu: match the Dashboards nav item by FAB-internal name, not
  translated label; fix getOwnerName -> getUserName and owners ->
  editors after the Subject-model refactor
- MobileUnsupported: use Button/link + icon instead of raw styled
  buttons and a trailing arrow outside the translated string
- Regenerate docs/static/feature-flags.json

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-15 23:53:04 -07:00
Claude Code
76c247513e feat(mobile): Add mobile-friendly dashboard consumption mode
Adds a mobile-optimized dashboard consumption experience:

- Drawer-based nav and filter menus on mobile
- Full-width chart layout on small screens, with charts stacked
- Compact dashboard header (hidden action buttons that don't apply in
  consumption mode)
- Force card view (and hide the table/card toggle) on the dashboard list
- Full-width cards on the welcome page when viewed on mobile
- Filter drawer for the dashboard list page
- Route guard for pages that don't yet have a mobile experience, with a
  dedicated MobileUnsupported page
- Mock-friendly `Grid.useBreakpoint` plumbing for existing component
  tests, plus a new mobile-focused test suite and Playwright coverage

Squashed from 32 commits on the long-running mobile-dashboard-support
branch and rebased onto current master.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-07-15 22:48:31 -07:00
Evan Rusackas
f697a0c24d test(charts): assert drill-to-detail carries applied filters (#28562) (#41960)
Co-authored-by: Claude Code <noreply@anthropic.com>
2026-07-15 22:24:33 -07:00
Evan Rusackas
13d38a9cbd test(security): assert intended trailing-slash behavior of security API (#29934) (#41965)
Co-authored-by: Claude Code <noreply@anthropic.com>
2026-07-15 22:24:15 -07:00
yousoph
8603048518 fix(dashboard): block dependent filter from fetching until defaultToFirstItem parent selects (#40978)
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-15 22:01:56 -07:00
Mike Bridge
635b18103d fix(reports): null-guard execution against missing target (#39973)
Co-authored-by: Mike Bridge <michael.bridge@ext.preset.io>
Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Co-authored-by: Evan Rusackas <evan@preset.io>
2026-07-15 22:00:46 -07:00
gr33nak
d57569c54a feat(reports): add XLSX (Excel) attachments for Alerts & Reports (#41424)
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-authored-by: Martin Kominek <martin.kominek@stratox.cz>
Co-authored-by: kominma3 <127758497+kominma3@users.noreply.github.com>
2026-07-15 21:49:47 -07:00
Benedict Jin
409605de70 fix(plugin-chart-echarts): key Mixed Timeseries label maps by rendered series names (#41933) 2026-07-15 21:37:59 -07:00
Greg Neighbors
8ce6d42942 feat(mcp): add restore_chart and restore_dashboard tools (#41842)
Co-authored-by: Greg Neighbors <gregneighbors@Gregs-Air-2.lan>
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-07-15 15:51:15 -07:00
Greg Neighbors
2bbb7d0638 feat(mcp): histogram and box plot chart type plugins (#41860)
Co-authored-by: Greg Neighbors <gregneighbors@Gregs-Air-2.lan>
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-07-15 15:50:09 -07:00
Evan Rusackas
1b0c6aaed3 chore(a11y): enable jsx-a11y/click-events-have-key-events as error (#42009)
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-15 15:49:45 -07:00
dependabot[bot]
1f786f1949 chore(deps): bump websocket-driver from 0.7.4 to 0.7.5 in /superset-frontend (#42094)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-07-15 15:49:15 -07:00
Evan Rusackas
c540f782a3 fix(ci): remove Python 3.10 from the test matrix to unblock CI (#42058)
Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-15 15:48:47 -07:00
Joe Li
6fe4655ba2 fix(semantic-layers): separate grain and offset time-axis resolvers (#42093)
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-15 15:33:52 -07:00
Elizabeth Thompson
689fc34ac2 fix: replace deprecated appbuilder.app with current_app in test_explore_redirect (#42086) 2026-07-15 15:05:15 -07:00
Elizabeth Thompson
e564389a01 fix(a11y): associate Name label with input in CssTemplateModal (#42081) 2026-07-15 15:04:33 -07:00
Elizabeth Thompson
da518d7a10 fix(a11y): associate Description label with TagModal input (#42034) 2026-07-15 15:03:40 -07:00
Joe Li
c6da740ce2 fix(app-root): restore legacy redirects for HEAD and the /superset app root (#42015)
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-15 13:13:46 -07:00
Beto Dealmeida
e28b259de0 fix(semantic-layers): expose time grains in Explore for SemanticView datasources (#41456) 2026-07-15 12:25:41 -07:00
Elizabeth Thompson
beb9d53687 fix(plugin-chart-echarts): use echarts 5.6.0 i18n export path for locale import (#42055)
Co-authored-by: Claude <noreply@anthropic.com>
2026-07-15 11:45:14 -07:00
Mike Bridge
90f9238f8a fix(charts): preserve time filter for expression axes (#42052)
Co-authored-by: Mike Bridge <michael.bridge@ext.preset.io>
2026-07-15 14:27:50 -03:00
Amin Ghadersohi
f38fff2a19 test(mcp): close systematic test-coverage gaps in mcp_service (#41924) 2026-07-15 12:30:04 -04:00
Amin Ghadersohi
cec9afb165 fix(mcp): await ctx.info calls in update_dashboard tool (#41920)
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
2026-07-15 12:28:44 -04:00
dependabot[bot]
753113d169 chore(deps-dev): bump trino from 0.337.0 to 0.338.0 (#42059)
Signed-off-by: dependabot[bot] <support@github.com>
Signed-off-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-07-15 08:13:33 -07:00
dependabot[bot]
5c8e14e9dc chore(deps-dev): bump hdbcli from 2.28.21 to 2.29.23 (#42060)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-07-15 08:13:30 -07:00
dependabot[bot]
e66d58361a chore(deps-dev): update clickhouse-connect requirement from <2.0,>=1.1.1 to >=1.4.2,<2.0 (#42062)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-07-15 08:13:26 -07:00
dependabot[bot]
7bc1895050 chore(deps-dev): update pydoris requirement from <2.0.0,>=1.0.0 to >=1.2.0,<2.0.0 (#42063)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-07-15 08:13:22 -07:00
dependabot[bot]
071c431580 chore(deps-dev): bump @types/node from 26.1.0 to 26.1.1 in /superset-websocket (#42076)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-07-15 08:13:19 -07:00
dependabot[bot]
53c4603c8c chore(deps-dev): bump @types/node from 26.1.0 to 26.1.1 in /superset-frontend (#42077)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-07-15 08:13:15 -07:00
Mehmet Salih Yavuz
f010affbc2 fix(reports): paginate Slack recipient picker for large workspaces (#41998) 2026-07-15 18:00:53 +03:00
Amin Ghadersohi
6c2b7aceb5 fix(mcp): correct decorator order on query_dataset tool (#41925) 2026-07-15 10:42:11 -04:00
Daniel Vaz Gaspar
2af66b2c9b fix(async-queries): add Celery task expiry to GAQ async query tasks (#42084)
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-07-15 15:04:56 +01:00
Evan Rusackas
a540f56f5c fix(reports): raise typed executor-not-found error in alert-query path (#41486)
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-14 23:53:03 -07:00
aikawa-ohno
aa85455a5c fix(i18n): Update Japanese translations (#41984)
Co-authored-by: Amin Ghadersohi <amin.ghadersohi@gmail.com>
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-14 22:07:38 -07:00
dependabot[bot]
d80267d00b chore(deps): bump github/codeql-action/init from 4.36.3 to 4.37.0 (#42068)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-07-14 21:21:25 -07:00
yousoph
7953382d10 feat(submenu_export): Add export to png and pdf options for charts (#38535)
Co-authored-by: Ramiro Aquino Romero <ramiroaquinoromero@gmail.com>
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-authored-by: Joe Li <joe@preset.io>
Co-authored-by: Claude <claude@anthropic.com>
2026-07-14 21:21:12 -07:00
dependabot[bot]
abafe195bf chore(deps): bump click from 8.4.1 to 8.4.2 (#42064)
Signed-off-by: dependabot[bot] <support@github.com>
Signed-off-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-07-14 20:38:32 -07:00
dependabot[bot]
b4373f60b3 chore(deps-dev): bump fastmcp from 3.4.2 to 3.4.3 (#42065)
Signed-off-by: dependabot[bot] <support@github.com>
Signed-off-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-07-14 20:38:30 -07:00
dependabot[bot]
6dcd95e14a chore(deps-dev): bump syntaqlite from 0.6.0 to 0.7.0 (#42067)
Signed-off-by: dependabot[bot] <support@github.com>
Signed-off-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-07-14 20:38:27 -07:00
dependabot[bot]
ad8f2cf268 chore(deps): bump github/codeql-action/analyze from 4.36.3 to 4.37.0 (#42069)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-07-14 20:38:21 -07:00
Mafi
9db88203e1 fix(migration): use sqlalchemy.orm.declarative_base to avoid MovedIn20Warning (#42056)
Co-authored-by: Matt Fitzgerald <matt.fitzgerald@preset.io>
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-07-14 21:08:43 -04:00
Joe Li
13121fcd58 fix(ci): skip unsupported React 19 Dependabot updates (#42047) 2026-07-15 08:03:14 +07:00
Evan Rusackas
be768efc0f fix(ci): make pre-commit fail closed instead of silently passing on an empty file list (#42044)
Co-authored-by: Amin Ghadersohi <amin.ghadersohi@gmail.com>
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-14 16:20:56 -07:00
Elizabeth Thompson
d68e84e731 fix(databricks): classify insufficient-permissions errors as 4xx (#41945)
Co-authored-by: Claude <noreply@anthropic.com>
2026-07-14 13:44:41 -07:00