You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@superset.apache.org by be...@apache.org on 2026/03/03 17:45:36 UTC

(superset) branch semantic-layer-ui-semantic-view updated (8358d9beaea -> 694e66bc450)

This is an automated email from the ASF dual-hosted git repository.

beto pushed a change to branch semantic-layer-ui-semantic-view
in repository https://gitbox.apache.org/repos/asf/superset.git


    omit 8358d9beaea feat: UI for semantic views
    omit 4ade90aeb44 feat: API for semantic views
    omit b11ac4dd90c chore: container for testing
    omit e182520bb36 feat: Explore integration
    omit bfa4d5bd924 feat: models and DAOs
    omit 0e9c71e2831 chore: remove AdhocFilter
    omit 5c1e250b77a feat: semantic layer extension
     add ec6eaf48982 fix(deps): bump elasticsearch-dbapi to 0.2.12 for urllib3 2.x compatibility (#37758)
     add 935bbe6061d docs: Updates extensions docs (#37704)
     add 0415118544f chore: Bump @apache-superset/core (0.0.1-rc10) (#37759)
     add fc26dbfebf8 chore(deps): upgrade deck.gl and luma.gl packages to ~9.2.6 (#37718)
     add a04571fa20f fix(world-map): reset hover highlight on mouse out (#37716)
     add 46bca32677c docs(seo): add structured data, OpenGraph tags, and sitemap improvements (#37404)
     add e9ae212c1cc fix(alerts): show screenshot width field for PDF reports (#37037)
     add fc5506e4669 chore(frontend): comprehensive TypeScript quality improvements (#37625)
     add 9086ae8e6c6 feat(ci): only bump patch version for Storybook-related deps until React 18 (#37749)
     add 9ea5ded9880 fix(dashboard): Prevent fatal error when database connection is unavailable (#37576)
     add 174e3c26d31 chore(deps): update @luma.gl/webgl requirement from ~9.2.5 to ~9.2.6 in /superset-frontend/plugins/legacy-preset-chart-deckgl (#37764)
     add 76a27d5360e chore(deps): bump d3-format from 1.4.5 to 3.1.2 in /superset-frontend/packages/superset-ui-core (#37442)
     add 5cea4fb7feb chore(deps): update @luma.gl/shadertools requirement from ~9.2.5 to ~9.2.6 in /superset-frontend/plugins/legacy-preset-chart-deckgl (#37763)
     add df253f6aa47 chore(deps-dev): bump @babel/plugin-transform-runtime from 7.28.5 to 7.29.0 in /superset-frontend (#37631)
     add b9ab03994ad chore(deps-dev): bump jsdom from 27.4.0 to 28.0.0 in /superset-frontend (#37688)
     add f4708a56484 fix(db): prevent long database error messages from overflowing UI (#37709)
     add 3521f191b24 chore(deps): bump webpack from 5.96.1 to 5.105.0 in /superset-frontend/cypress-base (#37775)
     add c4e7c3b03b7 refactor: consolidating ColorSchemeEnum settings into one place (#37591)
     add 7580bd14015 chore(deps-dev): bump timezone-mock from 1.3.6 to 1.4.0 in /superset-frontend (#37333)
     add c4d2d42b3b0 build(dev-deps): move Webpack-dedicated `js-yaml-loader` to dev deps section (#37788)
     add 563d9f1a3fd chore(lint): migrate Jest lint rules from eslint to oxlint (#37787)
     add 3b75af9ac3b docs(dev_portal/test): remove refs of testing tools not used in project (#37786)
     add 82d6076804b refactor(charts): filter saved metrics by key and label (#37136)
     add ebee9bb3f91 refactor(types): consolidate shared table types and fix Funnel enum typo (#37768)
     add 29aa69b7792 chore(deps): update @luma.gl/engine requirement from ~9.2.5 to ~9.2.6 in /superset-frontend/plugins/legacy-preset-chart-deckgl (#37762)
     add ce872ddaf01 chore(deps-dev): bump @swc/core from 1.14.0 to 1.15.11 in /superset-frontend (#37511)
     add cebdb9e0b7a fix(ListView): add tooltip for layout toggle buttons (#37581)
     add 2b411b32ba0 fix(scatter): Fix ad-hoc metric for pointsize (#37669)
     add 15b3c96f8e9 fix(security): Add table blocklist and fix MCP SQL validation bypass (#37411)
     add a1d65c7529c feat(deps): significant `npm audit fix` to trim off inadvertently runtime dep from upstream libraries  (#37220)
     add 059b57d784e chore(deps-dev): bump @types/node from 25.2.1 to 25.2.2 in /superset-frontend (#37801)
     add 5125a670025 build(dev-deps): remove `npm` from @apache-superset/core (#37774)
     add f25d95be410 fix: Vertical lines in the middle of Treemap categories (#37808)
     add 6984e93171e fix: SQL Lab improvements and bug fixes (#37760)
     add 59dd2fa3857 feat: add global task framework (#36368)
     add f6f96ecc49c test(chart-list): migrate Chart List tests from Cypress to RTL (#37813)
     add 76351ff12c4 fix(i18n): ensure language pack loads before React renders (#36893)
     add 6ca028dee90 chore(deps): bump axios from 1.12.2 to 1.13.5 in /docs (#37814)
     add d078f18ff88 chore(deps-dev): bump @types/node from 25.2.1 to 25.2.2 in /superset-websocket (#37796)
     add 2df60f9caf0 chore(deps): bump immer from 11.1.3 to 11.1.4 in /superset-frontend (#37830)
     add f370da5a87a chore(deps-dev): bump @typescript-eslint/parser from 8.54.0 to 8.55.0 in /docs (#37827)
     add 4d8ff845875 chore(deps-dev): bump @playwright/test from 1.58.1 to 1.58.2 in /superset-frontend (#37826)
     add 8c6bc3eaea3 chore(deps): bump antd from 6.2.3 to 6.3.0 in /docs (#37824)
     add 1cba53a043d chore(deps-dev): bump @typescript-eslint/parser from 8.54.0 to 8.55.0 in /superset-websocket (#37823)
     add 3af795af364 chore(deps-dev): bump @typescript-eslint/eslint-plugin from 8.54.0 to 8.55.0 in /superset-websocket (#37822)
     add 948b1d613b2 chore(deps-dev): bump typescript-eslint from 8.54.0 to 8.55.0 in /docs (#37825)
     add 0f1278fa614 fix(gtf): set dedup_key on atomic sql (#37820)
     add c59d0a73d47 fix: Prevent table rows from overlapping pagination in table view (#37174)
     add ae8d671fea3 fix(sql): fix sql suggestions (#37699)
     add c41942a38ad chore(deps): Upgrade sqlglot from 27.15.2 to 28.10.0 (#37841)
     add 76aa91f5ea2 fix(deps): pin `react-error-boundary` to 6.0.0 for React 17 peer dep constraint (#37706)
     add 7ec5f1d7ecf fix(native-filters): Filters with select first value not restored correctly from url (#37855)
     add b98b34a60f5 refactor: Make extensions contribution schema consistent (#37856)
     add 6a6b9b53864 chore: Bump core packages (0.0.1rc11, 0.0.1rc4) (#37860)
     add 1388a628230 fix(filters): fix filter / customization name not updating in sidebar in real time (#37358)
     add 39ac96817a8 fix(helm): Add default initContainer resources (#37637)
     add 4eb8fc814a9 chore(deps-dev): bump @types/node from 25.2.2 to 25.2.3 in /superset-websocket (#37846)
     add 7d4a7f113c4 chore(deps-dev): bump webpack from 5.105.0 to 5.105.1 in /docs (#37849)
     add 7e5ca83220e chore(deps-dev): bump @types/node from 25.2.2 to 25.2.3 in /superset-frontend (#37851)
     add 9a79dbf4457 fix(docs): make page size selector work in database table (#37863)
     add 69c679be20a fix(explore): Don't show unsaved changes modal on new charts (#37714)
     add 74e1607010e fix(extensions): broken test (#37871)
     add 88a14f2ba0d fix(FiltersBadge): world map wont show filter icon after refresh page (#37260)
     add c28729f944f chore(lint): add jest/expect-expect rule for test assertions (#37887)
     add 534fa48f1ff chore(lint): enforce stricter eslint/oxlint rules (#37883)
     add d640fe42c9b chore: remove Applitools visual testing integration (#37873)
     add 98ca599eef9 perf: fix N+1 query in chart list API when thumbnail_url is requested (#37895)
     add 9089f300459 chore(lint): upgrade array creation, effect, and TypeScript rules (#37885)
     add 255a0ada814 fix(gtf): add missing user_id to task commands (#37867)
     add 5f0001affc9 feat(timeseries): remove stream style for bar charts (#37532)
     add 26a2e127793 perf: fix N+1 query in Slice.datasource property (#37899)
     add 00d02cb2ea1 perf(gtf): improve task base filter (#37900)
     add b0be47a4ac2 fix: Unreachable drop zones within tabs in dashbboard editor (#37904)
     add b012b63e5b8 fix(native-filters): align refresh icon with default value field (#37802)
     add 981b370fe9e chore(storybook): consolidate storybook and enhance plugin stories (#37771)
     add 77148277b96 feat(charts): improve negative stacked bar label positioning and accessibility (#37405)
     add 19ec7b48a0f fix: Conditional formatting painting empty cells (#37894)
     add 30ccbb2e050 chore(deps): update @types/geojson requirement from ^7946.0.10 to ^7946.0.16 in /superset-frontend/plugins/plugin-chart-cartodiagram (#37908)
     add afacca350f0 chore(deps-dev): bump oxlint from 1.42.0 to 1.46.0 in /superset-frontend (#37917)
     add 3f64c257120 fix(mcp): Add database_name as valid filter column for list_datasets (#37865)
     add 4dfece9ee54 feat(mcp): add event_logger instrumentation to MCP tools (#37859)
     add 88ce1425e2c fix(roles): optimize user fetching and resolve N+1 query issue (#37235)
     add dbf5e1f1314 feat(theme): use IBM Plex Mono for code and numerical displays (#37366)
     add 58d245c6b03 chore(deps): Update sqlachemy-utils to 0.42.0 (#36240)
     add 0d5ddb36749 feat(themes): add enhanced validation and error handling with fallback mechanisms (#37378)
     add 6328e516206 test(examples): add tests for UUID threading and security bypass (#37557)
     add 142b2cc4254 test(e2e): add Playwright E2E tests for Chart List page (#37866)
     add 080f629ea21 fix(echarts): formula annotations not rendering with dataset-level columns label (#37522)
     add 0c0d915391d fix(echarts-timeseries-combined-labels): combine annotation labels for events at same timestamp (#37164)
     add e3e2bece6bc feat(owners): display email in owner selectors (#37906)
     add ffd7f103207 chore(deps): bump markdown-to-jsx from 9.7.3 to 9.7.4 in /superset-frontend (#37959)
     add 75d6a95ac39 chore(deps): bump aquasecurity/trivy-action from 0.33.1 to 0.34.0 (#37958)
     add 79f51e2ae7d chore(deps-dev): bump webpack from 5.105.1 to 5.105.2 in /docs (#37953)
     add 475615e1186 chore(deps): bump ioredis from 5.9.2 to 5.9.3 in /superset-websocket (#37951)
     add a65f73a5323 chore(deps): bump qs from 6.14.1 to 6.14.2 in /docs (#37937)
     add 73adff55ee8 chore(deps): Relax sqlalchemy-utils lower bound for pydoris compatibility  (#37949)
     add 097f474f24b chore(deps): bump pillow from 11.3.0 to 12.1.1 (#37935)
     add cbf153845ed chore(deps): bump qs from 6.14.1 to 6.14.2 in /superset-websocket/utils/client-ws-app (#37933)
     add 440602ef344 fix(utils): datetime_to_epoch function is fixed to timezone aware epoch (#37979)
     add 5300f65a74e chore(deps): bump qs from 6.14.1 to 6.14.2 in /superset-frontend (#37936)
     add d748ed19ced chore(deps): bump hot-shots from 13.2.0 to 14.0.0 in /superset-websocket (#37993)
     add 232b34d9443 chore(deps-dev): bump webpack-sources from 3.3.3 to 3.3.4 in /superset-frontend (#38004)
     add eee3af57759 chore(deps-dev): bump oxlint from 1.46.0 to 1.47.0 in /superset-frontend (#38005)
     add 982e2c1ef7f chore(deps-dev): bump webpack from 5.105.0 to 5.105.2 in /superset-frontend (#38003)
     add c873225308e chore(deps-dev): bump jsdom from 28.0.0 to 28.1.0 in /superset-frontend (#37997)
     add d47a7105dfa chore(deps): bump caniuse-lite from 1.0.30001769 to 1.0.30001770 in /docs (#37994)
     add 2c9f0c1c2a8 chore(deps-dev): bump wait-on from 9.0.3 to 9.0.4 in /superset-frontend (#37999)
     add 22ac5e02b60 fix(deckgl): remove dataset field from Deck.gl Layer Visibility Display controls (#37611)
     add 8853ff19d48 chore(websocket): migrate external uuid usage with Node's native UUID generator (#37101)
     add 7b21979fa3b fix(charts): Force refresh uses async mode when GAQ is enabled (#37845)
     add 3e3c9686de8 perf(dashboard): Batch RLS filter lookups for dashboard digest computation (#37941)
     add 84f1ee44093 feat: added conditional formatting enhancements string to pivot table (#35863)
     add 604d49f5579 chore(deps): bump datamaps from 0.5.9 to 0.5.10 in /superset-frontend (#37913)
     add 9566e8a9c6a chore(deps-dev): bump eslint-plugin-react-you-might-not-need-an-effect from 0.8.5 to 0.9.1 in /superset-frontend (#38000)
     add 5cd829f13c8 fix(mcp): handle more chart types in get_chart_data fallback query construction (#37969)
     add f7218e7a192 feat(mcp): expose current user identity in get_instance_info and add created_by_fk filter (#37967)
     add aec1f6edce9 fix(mcp): use last data-bearing statement in execute_sql response (#37968)
     add 5a777c0f45f feat(matrixify): add single metric constraint (#37169)
     add 746e266e901 chore(deps): bump swagger-ui-react from 5.31.0 to 5.31.1 in /docs (#38023)
     add b0f9a73f63d chore(deps-dev): bump typescript-eslint from 8.54.0 to 8.56.0 in /superset-websocket (#38020)
     add 5efc7ea5a51 chore(deps-dev): bump typescript-eslint from 8.55.0 to 8.56.0 in /docs (#38024)
     add 868e719c60e chore(deps-dev): bump oxlint from 1.47.0 to 1.48.0 in /superset-frontend (#38055)
     add 65c460c9d26 chore(deps-dev): bump @swc/plugin-emotion from 14.5.0 to 14.6.0 in /superset-frontend (#38053)
     add cd4cd537260 chore(deps-dev): bump css-loader from 7.1.3 to 7.1.4 in /superset-frontend (#38050)
     add 090eab099c0 chore(deps): bump storybook from 8.6.15 to 8.6.16 in /docs (#38043)
     add a30492f55e1 fix(plugin/cal-heatmap): properly color tooltip's text for both dark/light theme (#38010)
     add 9131739f98b fix(home): null check for possibly undefined filtered other table data due to insufficient permission (#37983)
     add 7b56fc1714c fix(docs): correct DB module filename for editing + update DB metadata file (#37990)
     add 0d2c8fd3737 chore(deps): bump @storybook/core from 8.6.15 to 8.6.16 in /docs (#38046)
     add 21481eef4fc chore(deps): bump the storybook group in /docs with 9 updates (#38067)
     add 29f499528ff chore(deps-dev): bump eslint-plugin-testing-library from 7.15.4 to 7.16.0 in /superset-frontend (#38066)
     add af3e0882331 build(deps): resolve GHSA-36jr-mh4h-2g58 by upgrading d3-color to 3.1.0 (#37981)
     add 11a36ff4887 chore(deps-dev): bump the storybook group across 1 directory with 11 updates (#38068)
     add 9ec56f5f02b fix: Include app_root in next param (#37942)
     add 33441ccf3db feat: add formatting column and formatting object to conditional formating table (#35897)
     add f54bbdc06b3 chore(deps): bump dawidd6/action-download-artifact from 14 to 15 (#38060)
     add de079a7b199 feat(deps)!: bump postgresql from 16 to 17 (#37782)
     add 6b80135aa28 chore(lint): enforce more strict eslint/oxlint rules (batch 2) (#37884)
     add c175346808a fix(table-charts): Prevent time grain from altering Raw Records in Tables + Interactive Tables (#37561)
     add 0b77ace1109 chore: fix lint issue with `no-unsafe-optional-chaining` rule (#38103)
     add f5a5a804e23 perf(dashboard): skip thumbnail_url computing on single dashboard endpoint (#38015)
     add b7a3224f040 feat: Larger folder drag area in folders editor (#38102)
     add e12140beb65 fix: Warning toast copy in folders editor (#38099)
     add 86c8fa5cd7b fix: Badge count in folders editor (#38100)
     add f049d3e34aa fix: Search in folders editor with verbose names (#38101)
     add 1f76944c2b1 fix: Add editors to ContributionConfig and additional properties to EditorKeyword (#38098)
     add 5cc8ae5427d chore(deps): bump ol from 7.5.2 to 10.8.0 in /superset-frontend (#37961)
     add 6a61baf5be8 fix(alerts): show friendly filter names in report edit modal (#38054)
     add 3868821dc81 fix(webpack): skip building service worker in dev (#38106)
     add 5278deaf635 fix(metrics): normalize legacy currency strings (#37455)
     add f4acce5727f fix(table): preserve time grain aggregation when temporal column casing changes (#37893)
     add 88f0e322e32 chore(deps): bump baseline-browser-mapping from 2.9.19 to 2.10.0 in /docs (#38113)
     add 58d8aa01f82 chore(deps): bump react-intersection-observer from 10.0.2 to 10.0.3 in /superset-frontend (#38114)
     add 69653dfd08b chore(deps-dev): bump baseline-browser-mapping from 2.9.19 to 2.10.0 in /superset-frontend (#38116)
     add 1ecff6fe5c1 fix(thumbnails): stabilize digest by sorting datasources and charts (#38079)
     add 9f8b212ccc7 feat(mcp): add LIKE, ILIKE, IN, NOT IN filter operators to MCP chart tools (#38071)
     add 79372465757 fix(button): use colorLink token for link-style buttons (#38121)
     add e30a9caba51 fix(dataset-modal): fix folders tab scrollbar by establishing proper flex chain (#38123)
     add 6fdaa8e9b36 fix(crud): reorder table actions + improve react memoization + improve hooks (#37897)
     add 1a77e171799 fix(chart-customizations): support migration of dynamic group by (#37176)
     add 6f34ba7d4a9 fix(table-chart): support orderby adhoc columns with server-side pagination (#37521)
     add 2d44f52ad16 fix(encryption): resolve SECRET_KEY lazily to fix silent re-encrypt-secrets failures (#37982)
     add 44d6b6a5139 fix(table): preserve line breaks in cell content modal (#37036)
     add cff854b06e3 chore(deps-dev): bump oxlint from 1.48.0 to 1.49.0 in /superset-frontend (#38115)
     add b290f712452 fix(explore): prevent theme object from being passed to ReactAce in TextAreaControl (#38117)
     add b565128fe76 fix(charts): improve error display for failed charts in dashboards (#37939)
     add 577b965a601 chore(deps-dev): bump ajv from 6.12.6 to 6.14.0 in /superset-frontend (#38132)
     add 3d6644864d4 build(deps): migrate to lighter and modern `react-icons` (#38125)
     add 987b6a6f041 chore(deps): bump swagger-ui-react from 5.31.1 to 5.31.2 in /docs (#38140)
     add 5e6524954c8 chore(deps): pin react-icons to 5.4.0 in /superset-frontend (#38144)
     add 82fce8d7de8 chore(deps-dev): bump @types/node from 25.2.3 to 25.3.0 in /superset-frontend (#38143)
     add 5bee32ea93d chore(deps): bump aquasecurity/trivy-action from 0.34.0 to 0.34.1 (#38138)
     add 6424194c874 chore(deps): bump underscore from 1.13.7 to 1.13.8 in /superset-frontend (#38142)
     add 159fb5d6f4a chore(deps-dev): bump ajv from 6.12.6 to 6.14.0 in /superset-frontend/cypress-base (#38131)
     add a87a006aaeb ci: declare explicit permissions in maintenance workflows (#38159)
     add 672a3805876 chore(frontend): enable additional oxlint rules for better code hygiene (#38145)
     add 3f64ad3da5e fix(i18n): wrap untranslated frontend strings and add i18n lint rule (#37776)
     add 2a3567d2f11 fix(mcp): Remove unsupported thumbnail/preview URLs and internal fields from MCP schemas (#38109)
     add cbb80f04627 refactor(extensions): simplify registerEditorProvider API (#38127)
     add 6f3a200c190 chore(deps-dev): bump @types/lodash from 4.17.23 to 4.17.24 in /superset-websocket (#38179)
     add 131a97b6579 fix(handlebars): add missing currencyformatter.js dependency (#38173)
     add 50cc1b93d22 fix(security): fix Guest Token API 422 error by disabling JWT sub claim verification (#38177)
     add 6e94a6c21af fix(mcp): fix dashboard chart placement with proper COLUMN layout and tab support (#37970)
     add 40f609fdce2 fix(extensions): enforce correct naming conventions (#38167)
     add 228b5984096 feat: Labels for encrypted fields (#38075)
     add c4eb7de6de8 fix(excel): remove unwanted index column from Excel exports (#38176)
     add e06427d1efe feat(embedded): add feature flag to disable logout button in embedded contexts (#37537)
     add 8f070169a59 perf(datasource): add pagination to datasource editor tables to prevent browser freeze (#37555)
     add 8a74424545a fix(types): add explicit types for extendedDayjs plugin methods (#37923)
     add 615f13419cb fix(jest): ignore storybook-static and package __mocks__ directories (#37946)
     add 8eb30468884 fix(docs): guard window reference in logging.ts for SSR compatibility (#38201)
     add b8459c15b86 chore(deps-dev): bump @typescript-eslint/parser from 8.56.0 to 8.56.1 in /docs (#38211)
     add f60432e34cf fix: Allow non-owners to fave/unfave charts (#38095)
     add fca8a495611 feat: auto refresh dashboard (#37459)
     add 974bee14c3e fix(extensions): make LOCAL_EXTENSIONS loading resilient to individual failures (#38217)
     add 7b04d251d60 fix(build): restore automatic .d.ts generation in dev mode (#38202)
     add 35c135852e8 feat(extensions): add mandatory publisher field to extension metadata (#38200)
     add 0d66accc377 chore(build): prevent opening Dependabot PRs for `@rjsf/*` deps due to React 18 constraint (#37976)
     add 97b8585fe5d chore(deps-dev): bump typescript-eslint from 8.56.0 to 8.56.1 in /docs (#38209)
     add aa475734ef9 chore(deps-dev): bump eslint from 9.39.2 to 10.0.2 in /superset-websocket (#38204)
     add e4a7cd30c34 fix(GAQ): don't use async queries when cache timeout is -1 (#38089)
     add 76a2559b2b8 fix(ci): revert "chore(deps): bump JustinBeckwith/linkinator-action from 2.3 to 2.4" (#38164)
     add 4809903bb80 chore(deps): bump markdown-to-jsx from 9.7.4 to 9.7.6 in /superset-frontend (#38225)
     add 9e4a88dfa2b chore(deps): bump antd from 6.3.0 to 6.3.1 in /docs (#38221)
     add 01c1b2eb8f0 chore(deps-dev): bump @types/lodash from 4.17.23 to 4.17.24 in /superset-frontend (#38224)
     add 5eb35a47957 fix(reports): validate database field on PUT report schedule (#38084)
     add 1cd35bb1029 feat(mcp): dynamic feature availability via menus and feature flags (#37964)
     add 30849079318 feat(mcp): support unsaved state in Explore and Dashboard tools (#37183)
     add a1312a86e88 fix(mcp): normalize column names to fix time series filter prompt issue (#37187)
     add b543358d2f5 chore(deps-dev): bump @swc/core from 1.15.11 to 1.15.13 in /superset-frontend (#38237)
     add 1b605c4ddad chore(deps): bump fs-extra from 11.3.2 to 11.3.3 in /superset-frontend (#38234)
     add 79b2647481b chore(deps): bump @swc/core from 1.15.11 to 1.15.13 in /docs (#38207)
     add 37a46370181 chore(deps-dev): bump typescript-eslint from 8.56.0 to 8.56.1 in /superset-websocket (#38203)
     add 438a9274206 chore(deps-dev): bump oxlint from 1.49.0 to 1.50.0 in /superset-frontend (#38240)
     add c54b21ef988 fix(mcp): add eager loading to get_info tools to prevent N+1 query timeouts (#38129)
     add cc1128a404a feat(mcp): add response size guard to prevent oversized responses (#37200)
     add eef4d95c229 fix(mcp): add dataset validation for chart tools (#37185)
     add abf0b7cf4b8 fix(mcp): use broad Exception in outermost tool-level handlers (#38254)
     add 26053a8b5d3 fix(alert-modal): show the add filter button on firefox (#38093)
     add 2b6c745444b fix(ci): use OIDC auth token for successful Codecov upload (#38218)
     add ae99b194225 feat(mcp): add detailed JWT error messages and default auth factory fallback (#37972)
     add 2ecfb3406c3 fix(dataset-modal): show warning toast when dropping items outside folders (#38257)
     add 7f72c747f5b fix(dataset-modal): prevent shift-select from selecting search-hidden items (#38255)
     add dce0e5f4e62 chore(deps): bump mapbox-gl from 3.18.1 to 3.19.0 in /superset-frontend (#38264)
     add dcbe77818a0 chore(deps-dev): bump @types/node from 25.3.0 to 25.3.1 in /superset-frontend (#38263)
     add e42202e5ede chore(deps-dev): bump @types/node from 25.2.3 to 25.3.1 in /superset-websocket (#38260)
     add 0e7a9febdf1 chore(deps): bump minimatch from 3.1.2 to 3.1.3 in /superset-frontend/cypress-base (#38228)
     add 8c58b998b17 chore(deps): pin currencyformatter.js to v1 in /superset-frontend (#38242)
     add 660357c76b0 feat: Persist default folders location when repositioned in folders editor (#38105)
     add ca48663c593 chore(deps): bump dawidd6/action-download-artifact from 15 to 16 (#38261)
     add f5d489da29c fix(actionlog): restore full name display in Action Logs user column (#37985)
     add c1c012fb529 fix(chart): make chart error banners non-dismissible (#38014)
     add 5a134170a03 fix(chart): prevent x-axis date labels from disappearing when rotated (#37755)
     add bbafae5f62b fix(save-chart): fix info icon alignment in save chart modal (#37708)
     add 8a053bbe07e fix(dataset-modal): fix drag overlay shift caused by modal transform containing block (#38274)
     add 6589ee48f96 docs: bifurcate documentation into user and admin sections (#38196)
     add bb6ee9e7229 fix(clickhouse): remove _mutate_label workaround and bump clickhouse-connect to >=0.13.0 (#38280)
     add 7f061a3764a fix(bigquery): pass dialect instead of engine to select_star in get_extra_table_metadata (#38281)
     add 0827ec38110 fix(dataset-modal): include nested folders when dragging all their children (#38275)
     add 11dfda11d31 fix(folders): expand collapsed folders on Select All and add selection counter (#38270)
     add 7743183401b fix(bugs): fixing bugs for world map chart (#38030)
     add 761cee2d85b fix(componentParent): Newly created tabs don't show up in Scoping tab (#37807)
     add e5cbc98482e fix(ag-grid): render boolean columns as checkboxes instead of blank cells (#38279)
     add 5e890a8cf76 fix(folders): remove stale column/metric refs from folders on delete (#38302)
     add 63f1d9eb98e feat(folders-editor): drag entire folder block as single unit (#38122)
     add a410b76f99d docs: add Apache Superset CVEs for February 2026 release (#38278)
     add 15d7538435c fix(sqllab): pass queryLimit on data preview queries and fix Decimal TypeError in results handler (#37614)
     add 287a94f46c8 chore(deps): bump react-syntax-highlighter from 16.1.0 to 16.1.1 in /superset-frontend (#38296)
     add b1b10ec329f chore(deps): bump @swc/core from 1.15.13 to 1.15.17 in /docs (#38292)
     add 848cce7b2eb chore(deps): bump actions/upload-artifact from 6 to 7 (#38290)
     add 1f41777800f chore(deps): bump actions/download-artifact from 7 to 8 (#38289)
     add a162b02123f chore(deps-dev): bump @types/node from 25.3.1 to 25.3.2 in /superset-websocket (#38288)
     add a849802a2b1 chore(deps): bump minimatch in /superset-websocket (#38282)
     add 3794591d28e chore(deps): bump caniuse-lite from 1.0.30001770 to 1.0.30001774 in /docs (#38180)
     add 6fe69fc81cd chore: Support specifying app_root via superset_config.py (#38284)
     add d0391720133 chore(deps-dev): bump webpack from 5.105.2 to 5.105.3 in /docs (#38271)
     add 7f280f5de90 fix(Dataset Folders): improve search-collapse (#38188)
     add 1d141b2948e fix: Warning toasts when user drops folder item outside of dnd context (#38304)
     add 0d9db04df05 chore(deps-dev): bump @swc/core from 1.15.13 to 1.15.17 in /superset-frontend (#38295)
     add d31a2f96c99 chore(deps-dev): bump webpack from 5.105.2 to 5.105.3 in /superset-frontend (#38294)
     add ac2914486fe fix(Select): select all buttons to inherit font (#38313)
     add 985c3d12a17 fix(screenshots): downgrade screenshot timeout logs from ERROR to WARNING (#38130)
     add e80311a7950 chore(deps-dev): bump @swc/core from 1.15.17 to 1.15.18 in /superset-frontend (#38335)
     add ec33d6a4214 chore(deps-dev): bump @types/node from 25.3.1 to 25.3.3 in /superset-frontend (#38331)
     add b57c864e98e chore(deps): bump react-syntax-highlighter from 16.1.0 to 16.1.1 in /superset-frontend (#38330)
     add 1025e3729b8 chore(deps-dev): bump globals from 17.3.0 to 17.4.0 in /docs (#38325)
     add 00c62cf8203 chore(deps-dev): bump yeoman-test from 11.2.0 to 11.3.1 in /superset-frontend (#38326)
     add d738431e73e chore(deps): bump swagger-ui-react from 5.31.2 to 5.32.0 in /docs (#38324)
     add 23200e8ce97 chore(deps): bump caniuse-lite from 1.0.30001774 to 1.0.30001775 in /docs (#38322)
     add adc5a2cbdb6 chore(deps-dev): bump globals from 17.3.0 to 17.4.0 in /superset-websocket (#38321)
     add 00a14877059 chore(deps): bump hot-shots from 14.0.0 to 14.1.1 in /superset-websocket (#38320)
     add 01d5245cd2d fix: silence deprecation warnings causing noisy production logs (#38128)
     add a74d32ab44f feat(extensions): code-first frontend contributions (#38346)
     add cb5281b6b82 feat: semantic layer extension
     add 393610a3e66 chore: remove AdhocFilter
     add 0c33cfcaf53 Address TODOs
     add 47e7f8e986b feat: models and DAOs
     add 0039f8a6202 feat: Explore integration
     add 64f82bf5fdc feat: API for semantic views
     new 694e66bc450 feat: UI for semantic views

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   (8358d9beaea)
            \
             N -- N -- N   refs/heads/semantic-layer-ui-semantic-view (694e66bc450)

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.

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 .github/dependabot.yml                             |   111 +-
 .github/workflows/bashlib.sh                       |    23 -
 .github/workflows/dependency-review.yml            |     6 +-
 .github/workflows/docker.yml                       |     2 +-
 .github/workflows/no-hold-label.yml                |     3 +
 .github/workflows/pre-commit.yml                   |     3 +
 .github/workflows/prefer-typescript.yml            |    70 -
 .github/workflows/superset-app-cli.yml             |     2 +-
 .github/workflows/superset-applitool-cypress.yml   |    91 -
 .../workflows/superset-applitools-storybook.yml    |    52 -
 .github/workflows/superset-docs-deploy.yml         |     4 +-
 .github/workflows/superset-docs-verify.yml         |     4 +-
 .github/workflows/superset-e2e.yml                 |     8 +-
 .github/workflows/superset-extensions-cli.yml      |     2 +-
 .github/workflows/superset-frontend.yml            |    42 +-
 .github/workflows/superset-playwright.yml          |     4 +-
 .../workflows/superset-python-integrationtest.yml  |     4 +-
 .github/workflows/superset-python-presto-hive.yml  |     4 +-
 .github/workflows/tech-debt.yml                    |     3 +
 .pre-commit-config.yaml                            |     2 +-
 README.md                                          |    10 +-
 UPDATING.md                                        |    62 +
 docker-compose-image-tag.yml                       |     2 +-
 docker-compose-light.yml                           |     2 +-
 docker-compose-non-dev.yml                         |     2 +-
 docker-compose.yml                                 |     2 +-
 docker/pythonpath_dev/superset_config.py           |     2 -
 docs/.claude/instructions.md                       |     2 +-
 docs/.gitignore                                    |     2 +-
 docs/.nvmrc                                        |     2 +-
 docs/DOCS_CLAUDE.md                                |     2 +-
 docs/README.md                                     |     9 +-
 .../configuration/alerts-reports.mdx               |     8 +-
 .../configuration/async-queries-celery.mdx         |     0
 docs/{docs => admin_docs}/configuration/cache.mdx  |    88 +-
 .../configuration/configuring-superset.mdx         |    13 +-
 .../configuration/country-map-tools.mdx            |     0
 .../configuration/event-logging.mdx                |     0
 .../configuration/feature-flags.mdx                |     0
 .../importing-exporting-datasources.mdx            |     0
 .../configuration/map-tiles.mdx                    |     0
 .../configuration/networking-settings.mdx          |    22 +-
 .../configuration/sql-templating.mdx               |     6 +-
 .../{docs => admin_docs}/configuration/theming.mdx |     0
 .../configuration/timezones.mdx                    |     2 +-
 docs/admin_docs/index.md                           |    42 +
 .../installation/architecture.mdx                  |    12 +-
 .../installation/docker-builds.mdx                 |     0
 .../installation/docker-compose.mdx                |     4 +-
 .../installation/installation-methods.mdx          |    10 +-
 .../installation/kubernetes.mdx                    |     6 +-
 docs/{docs => admin_docs}/installation/pypi.mdx    |     2 +-
 .../installation/upgrading-superset.mdx            |     0
 docs/{docs => admin_docs}/security/cves.mdx        |    10 +
 .../security/securing_superset.mdx                 |     4 +-
 docs/{docs => admin_docs}/security/security.mdx    |     2 +-
 docs/{docs => developer_docs}/api.mdx              |     0
 docs/developer_docs/components/TODO.md             |    71 +
 .../components/design-system/dropdowncontainer.mdx |   167 +
 .../components/design-system/flex.mdx              |   197 +
 .../components/design-system/grid.mdx              |   192 +
 .../components/design-system/index.mdx             |    38 +
 .../components/design-system/layout.mdx            |   139 +
 .../components/design-system/metadatabar.mdx       |   174 +
 .../components/design-system/space.mdx             |   168 +
 .../components/design-system/table.mdx             |   311 +
 docs/developer_docs/components/index.mdx           |    74 +
 docs/developer_docs/components/ui/autocomplete.mdx |   215 +
 docs/developer_docs/components/ui/avatar.mdx       |   140 +
 docs/developer_docs/components/ui/badge.mdx        |   160 +
 docs/developer_docs/components/ui/breadcrumb.mdx   |    93 +
 docs/developer_docs/components/ui/button.mdx       |   142 +
 docs/developer_docs/components/ui/buttongroup.mdx  |    88 +
 docs/developer_docs/components/ui/cachedlabel.mdx  |    79 +
 docs/developer_docs/components/ui/card.mdx         |   142 +
 docs/developer_docs/components/ui/checkbox.mdx     |   141 +
 docs/developer_docs/components/ui/collapse.mdx     |   106 +
 docs/developer_docs/components/ui/datepicker.mdx   |   110 +
 docs/developer_docs/components/ui/divider.mdx      |   144 +
 .../developer_docs/components/ui/editabletitle.mdx |   172 +
 docs/developer_docs/components/ui/emptystate.mdx   |   147 +
 docs/developer_docs/components/ui/favestar.mdx     |    96 +
 docs/developer_docs/components/ui/iconbutton.mdx   |   106 +
 docs/developer_docs/components/ui/icons.mdx        |   252 +
 docs/developer_docs/components/ui/icontooltip.mdx  |   100 +
 docs/developer_docs/components/ui/index.mdx        |    77 +
 docs/developer_docs/components/ui/infotooltip.mdx  |   106 +
 docs/developer_docs/components/ui/input.mdx        |   162 +
 docs/developer_docs/components/ui/label.mdx        |   105 +
 docs/developer_docs/components/ui/list.mdx         |   117 +
 docs/developer_docs/components/ui/listviewcard.mdx |   132 +
 docs/developer_docs/components/ui/loading.mdx      |   187 +
 docs/developer_docs/components/ui/menu.mdx         |   174 +
 docs/developer_docs/components/ui/modal.mdx        |   207 +
 docs/developer_docs/components/ui/modaltrigger.mdx |   192 +
 docs/developer_docs/components/ui/popover.mdx      |   199 +
 docs/developer_docs/components/ui/progressbar.mdx  |   206 +
 docs/developer_docs/components/ui/radio.mdx        |   137 +
 docs/developer_docs/components/ui/safemarkdown.mdx |    85 +
 docs/developer_docs/components/ui/select.mdx       |   308 +
 docs/developer_docs/components/ui/skeleton.mdx     |   140 +
 docs/developer_docs/components/ui/slider.mdx       |   253 +
 docs/developer_docs/components/ui/steps.mdx        |   272 +
 docs/developer_docs/components/ui/switch.mdx       |   193 +
 .../components/ui/tablecollection.mdx              |    66 +
 docs/developer_docs/components/ui/tableview.mdx    |   294 +
 docs/developer_docs/components/ui/tabs.mdx         |   223 +
 docs/developer_docs/components/ui/timer.mdx        |   172 +
 docs/developer_docs/components/ui/tooltip.mdx      |   171 +
 docs/developer_docs/components/ui/tree.mdx         |   268 +
 docs/developer_docs/components/ui/treeselect.mdx   |   286 +
 docs/developer_docs/components/ui/typography.mdx   |   236 +
 .../components/ui/unsavedchangesmodal.mdx          |   126 +
 docs/developer_docs/components/ui/upload.mdx       |   136 +
 .../contributing/code-review.md                    |     0
 .../contributing/development-setup.md              |     6 +-
 .../contributing/guidelines.md                     |     0
 .../contributing/howtos.md                         |    26 +-
 .../contributing/issue-reporting.md                |     0
 .../contributing/overview.md                       |     0
 .../contributing/pkg-resources-migration.md        |    47 +-
 .../contributing/release-process.md                |     0
 .../contributing/resources.md                      |     4 +-
 .../contributing/submitting-pr.md                  |     0
 .../extensions/architecture.md                     |     5 +-
 .../developer_docs/extensions/components/alert.mdx |   131 +
 .../developer_docs/extensions/components/index.mdx |    93 +
 .../extensions/contribution-types.md               |   131 +-
 .../extensions/dependencies.md                     |     0
 .../extensions/deployment.md                       |     0
 .../extensions/development.md                      |   119 +-
 .../extensions/extension-points/editors.md         |     8 +-
 .../extensions/extension-points/sqllab.md          |   136 +-
 .../extensions/mcp.md                              |     0
 .../extensions/overview.md                         |     1 +
 .../extensions/quick-start.md                      |   118 +-
 .../extensions/registry.md                         |     2 +-
 .../extensions/security.md                         |     0
 docs/developer_docs/extensions/tasks.md            |   440 +
 .../guidelines/backend-style-guidelines.md         |     0
 .../guidelines/backend/dao-style-guidelines.md     |     0
 .../guidelines/design-guidelines.md                |     0
 .../guidelines/frontend-style-guidelines.md        |     2 +-
 .../frontend/component-style-guidelines.md         |     0
 .../frontend/emotion-styling-guidelines.md         |     0
 docs/{developer_portal => developer_docs}/index.md |    48 +-
 .../sidebars.js                                    |     1 +
 .../testing/backend-testing.md                     |     0
 .../testing/ci-cd.md                               |     0
 .../testing/e2e-testing.md                         |     0
 .../testing/frontend-testing.md                    |     0
 .../testing/overview.md                            |     2 -
 .../testing/storybook.md                           |     0
 .../testing/testing-guidelines.md                  |     0
 .../versions.json                                  |     0
 docs/docs/contributing/contributing.mdx            |   142 -
 docs/docs/contributing/development.mdx             |  1205 -
 docs/docs/contributing/guidelines.mdx              |   254 -
 docs/docs/contributing/howtos.mdx                  |   720 -
 docs/docs/contributing/misc.mdx                    |    55 -
 docs/docs/contributing/resources.mdx               |   104 -
 docs/docs/faq.mdx                                  |    70 +-
 docs/docs/index.mdx                                |   269 +
 docs/docs/quickstart.mdx                           |    14 +-
 .../creating-your-first-dashboard.mdx              |     4 +-
 docs/docs/using-superset/sql-templating.mdx        |   250 +
 docs/docusaurus.config.ts                          |   553 +-
 docs/i18n/en/docusaurus-theme-classic/footer.json  |     2 +-
 docs/package.json                                  |    39 +-
 docs/plugins/remark-tech-article-schema.mjs        |   153 +
 docs/plugins/robots-txt-plugin.js                  |    83 +
 docs/scripts/convert-api-sidebar.mjs               |     4 +-
 docs/scripts/generate-api-index.mjs                |     4 +-
 docs/scripts/generate-api-tag-pages.mjs            |     2 +-
 docs/scripts/generate-database-docs.mjs            |     2 +-
 docs/{sidebars.js => sidebarAdminDocs.js}          |    76 +-
 docs/sidebarTutorials.js                           |    19 +-
 docs/sidebars.js                                   |    74 +-
 docs/src/components/FAQSchema.tsx                  |    66 +
 docs/src/components/TechArticleSchema.tsx          |    91 +
 docs/src/components/databases/DatabaseIndex.tsx    |     2 +-
 docs/src/components/databases/DatabaseLogoWall.tsx |    71 +
 docs/src/components/databases/DatabasePage.tsx     |     8 +-
 docs/src/data/databases.json                       |   180 +-
 docs/src/pages/index.tsx                           |   128 +
 docs/src/styles/custom.css                         |    24 +-
 docs/static/feature-flags.json                     |     8 +
 docs/static/img/applitools.png                     |   Bin 37046 -> 0 bytes
 docs/static/img/superset-og-image.png              |   Bin 0 -> 89831 bytes
 .../version-6.0.0/configuration/alerts-reports.mdx |     8 +-
 .../version-6.0.0/configuration/cache.mdx          |     4 +-
 .../configuration/configuring-superset.mdx         |     6 +-
 .../version-6.0.0/configuration/databases.mdx      |   108 +-
 .../configuration/networking-settings.mdx          |     2 +-
 .../version-6.0.0/configuration/sql-templating.mdx |     2 +-
 .../version-6.0.0/configuration/timezones.mdx      |     2 +-
 .../version-6.0.0/contributing/contributing.mdx    |     2 +-
 .../version-6.0.0/contributing/development.mdx     |     4 +-
 .../version-6.0.0/contributing/guidelines.mdx      |     2 +-
 docs/versioned_docs/version-6.0.0/faq.mdx          |    10 +-
 .../version-6.0.0/installation/architecture.mdx    |    12 +-
 .../installation/installation-methods.mdx          |    10 +-
 .../version-6.0.0/installation/kubernetes.mdx      |     4 +-
 docs/versioned_docs/version-6.0.0/intro.md         |     4 +-
 docs/versioned_docs/version-6.0.0/quickstart.mdx   |    12 +-
 .../creating-your-first-dashboard.mdx              |     4 +-
 docs/versions-config.json                          |    17 +-
 docs/yarn.lock                                     |  1289 +-
 helm/superset/Chart.lock                           |     6 +-
 helm/superset/Chart.yaml                           |     4 +-
 helm/superset/README.md                            |     4 +-
 helm/superset/values.yaml                          |    30 +
 pyproject.toml                                     |    10 +-
 requirements/base.txt                              |     4 +-
 requirements/development.txt                       |     4 +-
 superset-core/pyproject.toml                       |     7 +-
 superset-core/src/superset_core/api/daos.py        |    44 +
 superset-core/src/superset_core/api/models.py      |   129 +
 superset-core/src/superset_core/api/tasks.py       |   361 +
 .../src/superset_core/extensions/constants.py      |    27 +-
 .../src/superset_core/extensions/types.py          |    97 +-
 .../semantic_layers/semantic_layer.py              |    16 +-
 .../superset_core/semantic_layers/semantic_view.py |    16 +-
 .../src/superset_core/semantic_layers/types.py     |     5 +-
 .../src/superset_extensions_cli/cli.py             |   185 +-
 .../src/superset_extensions_cli/exceptions.py      |     6 +
 .../templates/backend/pyproject.toml.j2            |     2 +-
 .../templates/backend/src/package/entrypoint.py.j2 |     2 +-
 .../templates/extension.json.j2                    |    19 +-
 .../templates/frontend/package.json.j2             |     4 +-
 .../templates/frontend/src/index.tsx.j2            |    17 +-
 .../templates/frontend/webpack.config.js.j2        |     5 +-
 .../src/superset_extensions_cli/types.py           |    49 +
 .../src/superset_extensions_cli/utils.py           |   340 +
 superset-extensions-cli/tests/conftest.py          |    39 +-
 superset-extensions-cli/tests/test_cli_build.py    |    74 +-
 superset-extensions-cli/tests/test_cli_bundle.py   |    19 +-
 superset-extensions-cli/tests/test_cli_dev.py      |    29 +-
 superset-extensions-cli/tests/test_cli_init.py     |   192 +-
 .../tests/test_name_transformations.py             |   502 +
 superset-extensions-cli/tests/test_templates.py    |   126 +-
 superset-frontend/.eslintrc.js                     |    96 +-
 superset-frontend/.eslintrc.minimal.js             |     5 +-
 superset-frontend/.storybook/main.js               |    17 +-
 superset-frontend/.storybook/preview.jsx           |    21 +
 .../shared}/ErrorMessage.tsx                       |     0
 .../shared}/Expandable.tsx                         |     0
 .../shared}/ResizableChartDemo.tsx                 |    14 +-
 .../shared}/ResizablePanel.tsx                     |    20 +-
 .../shared}/VerifyCORS.tsx                         |     0
 .../shared/createQueryStory.tsx}                   |     4 +-
 .../shared/dummyDatasource.ts                      |     0
 .../app.test.js => .storybook/shared/index.ts}     |    30 +-
 superset-frontend/.swcrc                           |    64 -
 superset-frontend/applitools.config.js             |    27 -
 superset-frontend/babel.config.js                  |     2 -
 .../cypress-base/applitools.config.js              |    29 -
 superset-frontend/cypress-base/cypress.config.ts   |   120 +-
 .../cypress/applitools/chartlist.test.ts           |    45 -
 .../cypress/applitools/dashboard.test.ts           |    53 -
 .../cypress/applitools/dashboardlist.test.ts       |    45 -
 .../cypress/e2e/chart_list/_skip.filter.test.ts    |    57 -
 .../cypress/e2e/chart_list/list.test.ts            |    57 -
 .../cypress-base/cypress/support/e2e.ts            |     1 -
 superset-frontend/cypress-base/package-lock.json   | 17321 ++---
 superset-frontend/cypress-base/package.json        |     1 -
 superset-frontend/cypress-base/tsconfig.json       |     4 +-
 .../{index.js => index.ts}                         |    90 +-
 ...plate-vars.test.js => no-template-vars.test.ts} |     8 +-
 .../eslint-plugin-i18n-strings/package.json        |     2 +-
 .../eslint-plugin-icons/{index.js => index.ts}     |    52 +-
 ...-fontawesome.test.js => no-fontawesome.test.ts} |    12 +-
 .../eslint-rules/eslint-plugin-icons/package.json  |     2 +-
 .../{colors.js => colors.ts}                       |     4 +-
 .../eslint-plugin-theme-colors/index.js            |   119 -
 .../eslint-plugin-theme-colors/index.ts            |   162 +
 .../eslint-plugin-theme-colors/package.json        |     2 +-
 superset-frontend/jest.config.js                   |    16 +-
 superset-frontend/oxlint.json                      |    72 +-
 superset-frontend/package-lock.json                | 74717 ++++++++-----------
 superset-frontend/package.json                     |   123 +-
 .../plugin-chart/templates/package-lock.erb        |    18 -
 .../packages/generator-superset/package.json       |     2 +-
 .../test/{app.test.js => app.test.ts}              |     1 +
 .../{plugin-chart.test.js => plugin-chart.test.ts} |     8 +-
 .../packages/superset-core/package.json            |     8 +-
 .../packages/superset-core/src/api/commands.ts     |    49 +-
 .../superset-core/src/api/contributions.ts         |   117 +-
 .../packages/superset-core/src/api/core.ts         |    74 +-
 .../packages/superset-core/src/api/editors.ts      |    59 +-
 .../packages/superset-core/src/api/index.ts        |     2 +
 .../packages/superset-core/src/api/menus.ts        |   102 +
 .../packages/superset-core/src/api/views.ts        |    88 +
 .../superset-core/src/spec/utils/logging.test.ts   |     4 +-
 .../src/ui/components/Alert/index.tsx              |     3 +-
 .../superset-core/src/ui/theme/GlobalStyles.tsx    |     6 +-
 .../superset-core/src/ui/theme/Theme.test.tsx      |     2 +-
 .../packages/superset-core/src/ui/theme/types.ts   |     1 +
 .../superset-core/src/ui/theme/utils/themeUtils.ts |    18 +-
 .../superset-core/src/ui/theme/utils/utils.test.ts |     8 +-
 .../packages/superset-core/src/utils/index.ts      |     1 +
 .../superset-core/src/utils/isBlank.test.ts        |    59 +
 .../superset-core/src/utils/isBlank.ts}            |    13 +-
 .../packages/superset-core/src/utils/logging.ts    |     3 +-
 .../superset-ui-chart-controls/package.json        |     1 -
 .../components/RadioButtonControl.tsx              |   103 +-
 .../src/shared-controls/matrixifyControls.tsx      |    33 +-
 .../src/shared-controls/mixins.tsx                 |     4 +-
 .../src/shared-controls/sharedControls.tsx         |    14 +-
 .../superset-ui-chart-controls/src/types.ts        |    91 +
 .../src/utils/getColorFormatters.ts                |    15 +-
 .../src/utils/metricColumnFilter.test.ts           |    20 +-
 .../test/components/ColumnTypeLabel.test.tsx       |    16 +-
 .../superset-ui-chart-controls/test/index.test.ts  |     2 +-
 .../test/operators/aggregateOperator.test.ts       |    10 +-
 .../operators/utils/extractExtraMetrics.test.ts    |     2 +-
 .../components/RadioButtonControl.test.tsx         |   420 +
 .../test/utils/colorControls.test.ts               |    10 +-
 .../test/utils/columnChoices.test.tsx              |    10 +-
 .../test/utils/defineSavedMetrics.test.tsx         |     6 +-
 .../test/utils/expandControlConfig.test.tsx        |    14 +-
 .../test/utils/getColorFormatters.test.ts          |   113 +-
 .../test/utils/mainMetric.test.ts                  |     8 +-
 .../test/utils/selectOptions.test.ts               |     6 +-
 .../packages/superset-ui-core/package.json         |    12 +-
 .../src/chart/components/FallbackComponent.tsx     |     9 +-
 .../components/Matrixify/MatrixifyGridCell.tsx     |     3 +-
 .../src/chart/components/StatefulChart.tsx         |     3 +-
 .../chart/stories}/ChartDataProvider.stories.tsx   |     4 +-
 .../src/chart/stories}/SuperChart.stories.tsx      |     2 +-
 .../src/color/stories}/ColorPalettes.stories.tsx   |     0
 .../src/color/stories}/RenderPalettes.tsx          |     0
 .../src/color/stories}/color-styles.css            |    11 +-
 .../AsyncAceEditor/AsyncAceEditor.test.tsx         |    15 +
 .../src/components/AsyncAceEditor/index.tsx        |     5 +-
 .../AsyncAceEditor/useJsonValidation.test.ts       |    12 +-
 .../src/components/AsyncEsmComponent/index.tsx     |     2 +-
 .../components/AutoComplete/AutoComplete.test.tsx  |     6 +-
 .../src/components/Breadcrumb/Breadcrumb.test.tsx  |     2 +-
 .../src/components/Button/Button.stories.tsx       |     2 +-
 .../src/components/Button/index.tsx                |    42 +-
 .../components/CachedLabel/CachedLabel.stories.tsx |   100 +
 .../components/CachedLabel/CachedLabel.test.tsx    |     4 +-
 .../src/components/Checkbox/Checkbox.test.tsx      |    20 +-
 .../CodeSyntaxHighlighter/index.test.tsx           |    18 +-
 .../components/CronPicker/CronPicker.stories.tsx   |    19 +-
 .../src/components/Dropdown/Dropdown.test.tsx      |    10 +-
 .../DynamicEditableTitle.test.tsx                  |     8 +-
 .../EditableTitle/EditableTitle.test.tsx           |    10 +-
 ...ut.test.jsx => LabeledErrorBoundInput.test.tsx} |    17 +-
 .../src/components/Grid/Grid.test.tsx              |     2 +-
 .../src/components/IconButton/IconButton.test.tsx  |    12 +-
 .../{IconTooltip.test.jsx => IconTooltip.test.tsx} |     0
 .../src/components/Icons/AntdEnhanced.tsx          |    12 +-
 .../src/components/Label/Label.test.tsx            |     7 +-
 .../src/components/Layout/Layout.test.tsx          |    18 +-
 .../components/ListViewCard/ImageLoader.test.tsx   |     6 +-
 .../components/ListViewCard/ListViewCard.test.tsx  |     6 +-
 .../src/components/Loading/index.tsx               |     9 +-
 .../src/components/MetadataBar/ContentConfig.tsx   |     2 +-
 .../src/components/MetadataBar/MetadataBar.tsx     |     4 +-
 .../src/components/Modal/FormModal.test.tsx        |    10 +-
 .../src/components/Modal/Modal.tsx                 |     2 +-
 .../components/ModalTrigger/ModalTrigger.test.tsx  |     2 +-
 .../src/components/Radio/Radio.test.tsx            |     2 +-
 .../SafeMarkdown/SafeMarkdown.stories.tsx          |   249 +
 .../src/components/Select/AsyncSelect.tsx          |     6 +-
 .../src/components/Select/Select.test.tsx          |    14 +-
 .../src/components/Select/Select.tsx               |     2 +-
 .../src/components/Select/styles.tsx               |     3 +
 .../src/components/Skeleton/Skeleton.test.tsx      |     6 +-
 .../src/components/Table/sorters.test.ts           |    40 +-
 .../src/components/Table/utils/utils.test.ts       |     8 +-
 .../TableCollection/TableCollection.stories.tsx    |   530 +
 .../TableCollection/TableCollection.test.tsx       |     2 +-
 .../src/components/Tabs/Tabs.test.tsx              |    46 +-
 .../src/components/TelemetryPixel/index.tsx        |     1 -
 .../src/components/ThemedAgGridReact/index.tsx     |     3 +
 .../src/components/Timer/Timer.test.tsx            |     2 +-
 .../TimezoneSelector/TimezoneOptionsCache.test.tsx |     2 +-
 .../src/components/Tree/Tree.test.tsx              |     2 +-
 .../src/components/TreeSelect/TreeSelect.test.tsx  |     2 +-
 .../src/components/Typography/Typography.test.tsx  |    14 +-
 .../src/components/Upload/Upload.test.tsx          |     2 +-
 .../src/connection/callApi/callApi.ts              |    10 +-
 .../src/connection/stories}/Connection.stories.tsx |    12 +-
 .../superset-ui-core/src/math-expression/index.ts  |     2 +-
 .../src/models/ExtensibleFunction.ts               |     3 +-
 .../src/number-format/D3FormatConfig.ts            |     1 +
 .../factories/createD3NumberFormatter.ts           |    12 +-
 .../factories/createSiAtMostNDigitFormatter.ts     |     6 +-
 .../factories/createSmartNumberFormatter.ts        |    10 +-
 .../stories}/NumberFormat.stories.tsx              |     0
 .../superset-ui-core/src/query/normalizeOrderBy.ts |     1 -
 .../src/query/processExtraFormData.ts              |     2 +-
 .../superset-ui-core/src/query/types/Dashboard.ts  |    29 +
 .../src/style/stories}/Theme.stories.tsx           |     0
 .../time-format/stories}/TimeFormat.stories.tsx    |     0
 .../superset-ui-core/src/utils/dates.test.ts       |    24 +-
 .../packages/superset-ui-core/src/utils/dates.ts   |    40 +-
 .../superset-ui-core/src/utils/featureFlags.ts     |     2 +
 .../superset-ui-core/src/utils/html.test.tsx       |    75 +-
 .../packages/superset-ui-core/src/utils/html.tsx   |     2 +
 .../superset-ui-core/src/utils/merge.test.ts       |     6 +-
 .../chart-composition/legend/WithLegend.test.tsx   |    19 +-
 .../tooltip/TooltipFrame.test.tsx                  |     4 +-
 .../tooltip/TooltipTable.test.tsx                  |     6 +-
 .../test/chart/clients/ChartClient.test.ts         |    32 +-
 .../chart/components/ChartDataProvider.test.tsx    |    38 +-
 .../test/chart/components/SuperChart.test.tsx      |    34 +-
 .../test/chart/components/SuperChartCore.test.tsx  |    30 +-
 .../components/createLoadableRenderer.test.tsx     |    12 +-
 .../test/chart/components/reactify.test.tsx        |    20 +-
 .../superset-ui-core/test/chart/index.test.ts      |     2 +-
 .../test/chart/models/ChartMetadata.test.ts        |    12 +-
 .../test/chart/models/ChartPlugin.test.tsx         |    40 +-
 .../test/chart/models/ChartProps.test.ts           |    14 +-
 .../test/color/CategoricalColorNameSpace.test.ts   |    48 +-
 .../test/color/CategoricalColorScale.test.ts       |    68 +-
 .../CategoricalSchemeRegistrySingleton.test.ts     |     2 +-
 .../test/color/ColorScheme.test.ts                 |     2 +-
 .../test/color/ColorSchemeRegistry.test.ts         |     8 +-
 .../test/color/LabelsColorMapSingleton.test.ts     |    42 +-
 .../test/color/SequentialScheme.test.ts            |    20 +-
 .../SequentialSchemeRegistrySingleton.test.ts      |     2 +-
 .../test/color/colorSchemes.test.ts                |     4 +-
 .../superset-ui-core/test/color/index.test.ts      |     2 +-
 .../superset-ui-core/test/color/utils.test.ts      |    34 +-
 .../Icons/AsyncIcon.integration.test.tsx           |     8 +-
 .../test/components/SafeMarkdown.test.tsx          |    12 +-
 .../test/connection/SupersetClient.test.ts         |     6 +-
 .../test/connection/SupersetClientClass.test.ts    |    82 +-
 .../test/connection/callApi/callApi.test.ts        |    73 +-
 .../callApi/callApiAndParseWithTimeout.test.ts     |    12 +-
 .../test/connection/callApi/parseResponse.test.ts  |    16 +-
 .../connection/callApi/rejectAfterTimeout.test.ts  |     2 +-
 .../test/currency-format/CurrencyFormatter.test.ts |    10 +-
 .../test/dimension/computeMaxFontSize.test.ts      |    10 +-
 .../test/dimension/getBBoxDummyFill.ts             |     6 +-
 .../dimension/getMultipleTextDimensions.test.ts    |    22 +-
 .../test/dimension/getTextDimension.test.ts        |    24 +-
 .../test/dimension/mergeMargin.test.ts             |    20 +-
 .../test/dimension/parseLength.test.ts             |    10 +-
 .../test/dimension/svg/LazyFactory.test.ts         |    10 +-
 .../test/dimension/svg/getBBoxCeil.test.ts         |     8 +-
 .../test/dimension/svg/updateTextNode.test.ts      |    10 +-
 .../test/dynamic-plugins/shared-modules.test.ts    |    10 +-
 .../packages/superset-ui-core/test/index.test.ts   |     2 +-
 .../test/models/ExtensibleFunction.test.ts         |    12 +-
 .../superset-ui-core/test/models/Plugin.test.ts    |    18 +-
 .../superset-ui-core/test/models/Preset.test.ts    |     8 +-
 .../superset-ui-core/test/models/Registry.test.ts  |    96 +-
 .../test/models/RegistryWithDefaultKey.test.ts     |    52 +-
 .../test/models/TypedRegistry.test.ts              |     4 +-
 .../test/number-format/NumberFormatter.test.ts     |    26 +-
 .../number-format/NumberFormatterRegistry.test.ts  |    22 +-
 .../NumberFormatterRegistrySingleton.test.ts       |    16 +-
 .../factories/createD3NumberFormatter.test.ts      |    32 +-
 .../createSiAtMostNDigitFormatter.test.ts          |    12 +-
 .../factories/createSmartNumberFormatter.test.ts   |    47 +-
 .../test/number-format/index.test.ts               |     2 +-
 .../test/query/DatasourceKey.test.ts               |     4 +-
 .../query/api/legacy/getDatasourceMetadata.test.ts |     2 +-
 .../test/query/api/legacy/getFormData.test.ts      |     4 +-
 .../test/query/api/v1/getChartData.test.ts         |     2 +-
 .../test/query/api/v1/handleError.test.ts          |    26 +-
 .../test/query/api/v1/makeApi.test.ts              |    28 +-
 .../test/query/buildQueryContext.test.ts           |    10 +-
 .../test/query/buildQueryObject.test.ts            |    34 +-
 .../test/query/convertFilter.test.ts               |     6 +-
 .../test/query/extractExtras.test.ts               |     6 +-
 .../test/query/extractQueryFields.test.ts          |    26 +-
 .../test/query/extractTimegrain.test.ts            |    10 +-
 .../test/query/getClientErrorObject.test.ts        |     8 +-
 .../test/query/getColumnLabel.test.ts              |     6 +-
 .../test/query/getMetricLabel.test.ts              |    10 +-
 .../test/query/normalizeOrderBy.test.ts            |    22 +-
 .../test/query/processExtraFormData.test.ts        |    10 +-
 .../test/query/processFilters.test.ts              |     8 +-
 .../test/query/types/AnnotationLayer.test.ts       |    20 +-
 .../test/query/types/Datasource.test.ts            |     3 +-
 .../test/query/types/Filter.test.ts                |    16 +-
 .../time-comparison/customTimeRangeDecode.test.ts  |    22 +-
 .../time-comparison/getComparisonFilters.test.ts   |     8 +-
 .../test/time-comparison/getComparisonInfo.test.ts |    12 +-
 .../test/time-comparison/getTimeOffset.test.ts     |    46 +-
 .../test/time-comparison/index.test.ts             |     2 +-
 .../test/time-comparison/parseDttmToDate.test.ts   |   114 +-
 .../test/time-format/TimeFormatter.test.ts         |    24 +-
 .../test/time-format/TimeFormatterRegistry.test.ts |    34 +-
 .../TimeFormatterRegistrySingleton.test.ts         |    24 +-
 .../factories/createD3TimeFormatter.test.ts        |    14 +-
 .../factories/createMultiFormatter.test.ts         |    64 +-
 .../test/time-format/formatters/smartDate.test.ts  |    20 +-
 .../formatters/smartDateDetailed.test.ts           |    24 +-
 .../formatters/smartDateVerbose.test.ts            |    16 +-
 .../test/time-format/index.test.ts                 |     2 +-
 .../test/time-format/utils/createTime.test.ts      |     8 +-
 .../utils/createTimeRangeFromGranularity.test.ts   |     4 +-
 .../test/time-format/utils/d3Time.test.ts          |    28 +-
 .../test/utils/convertKeysToCamelCase.test.ts      |     8 +-
 .../test/utils/ensureIsArray.test.ts               |     2 +-
 .../test/utils/ensureIsInt.test.ts                 |     2 +-
 .../test/utils/getSelectedText.test.ts             |     3 +-
 .../superset-ui-core/test/utils/isDefined.test.ts  |     4 +-
 .../superset-ui-core/test/utils/isRequired.test.ts |     2 +-
 .../test/utils/makeSingleton.test.ts               |     8 +-
 .../test/utils/promiseTimeout.test.ts              |     4 +-
 .../superset-ui-core/test/utils/random.test.ts     |     4 +-
 .../test/utils/removeDuplicates.test.ts            |     4 +-
 .../test/validator/legacyValidateInteger.test.ts   |     4 +-
 .../test/validator/legacyValidateNumber.test.ts    |     4 +-
 .../test/validator/validateInteger.test.ts         |     4 +-
 .../test/validator/validateMapboxStylesUrl.test.ts |     4 +-
 .../test/validator/validateNonEmpty.test.ts        |     4 +-
 .../test/validator/validateNumber.test.ts          |     4 +-
 .../validateTimeComparisonRangeValues.test.ts      |     4 +-
 .../packages/superset-ui-demo/.babelrc.json        |    18 -
 .../packages/superset-ui-demo/.storybook/main.js   |    55 -
 .../superset-ui-demo/.storybook/preview.js         |    77 -
 .../superset-ui-demo/.storybook/storybook.css      |    19 -
 .../superset-ui-demo/.storybook/themeDecorator.jsx |    10 -
 .../packages/superset-ui-demo/CHANGELOG.md         |    89 -
 .../packages/superset-ui-demo/README.md            |    28 -
 .../packages/superset-ui-demo/package.json         |    84 -
 .../storybook/stories/ExampleApp.stories.jsx       |    90 -
 .../LegacyPluginChartCalendar.stories.tsx          |    53 -
 .../legacy-plugin-chart-map-box/MapBox.stories.tsx |    58 -
 .../Partition.stories.tsx                          |    52 -
 .../legacy-plugin-chart-rose/Rose.stories.tsx      |    45 -
 .../legacy-preset-chart-deckgl/Arc/payload.js      |   269 -
 .../legacy-preset-chart-deckgl/Grid/payload.js     |   113 -
 .../legacy-preset-chart-deckgl/Hex/payload.js      |   113 -
 .../legacy-preset-chart-deckgl/Path/payload.js     |   227 -
 .../Polygon/geojsonPayload.js                      |   130 -
 .../legacy-preset-chart-deckgl/Polygon/payload.js  |   382 -
 .../legacy-preset-chart-deckgl/Scatter/payload.js  |   228 -
 .../Screengrid/payload.js                          |   135 -
 .../BoxPlot/NVD3BoxPlot.stories.tsx                |    28 -
 .../legacy-preset-chart-nvd3/BoxPlot/data.ts       |    77 -
 .../BoxPlot/stories/basic.tsx                      |    37 -
 .../Bubble/NVD3Bubble.stories.tsx                  |    29 -
 .../Bubble/stories/basic.tsx                       |    55 -
 .../Bullet/NVD3Bullet.stories.tsx                  |    29 -
 .../Bullet/stories/basic.tsx                       |    41 -
 .../Compare/NVD3Compare.stories.tsx                |    30 -
 .../Compare/stories/basic.tsx                      |    48 -
 .../Compare/stories/timeFormat.tsx                 |   249 -
 .../plugin-chart-echarts/Gauge/Gauge.stories.tsx   |    52 -
 .../plugin-chart-echarts/Graph/Graph.stories.tsx   |    54 -
 .../PivotTable.stories.tsx                         |    74 -
 .../plugins/plugin-chart-table/birthNames.json     | 13354 ----
 .../plugin-chart-word-cloud/WordCloud.stories.tsx  |   188 -
 .../packages/superset-ui-demo/tsconfig.json        |    22 -
 .../src/switchboard.test.ts                        |    26 +-
 .../components/modals/ChartPropertiesModal.ts      |    52 +
 .../playwright/helpers/api/assertions.ts           |    58 +
 superset-frontend/playwright/helpers/api/chart.ts  |   104 +
 .../playwright/helpers/fixtures/testAssets.ts      |    57 +-
 .../playwright/pages/ChartListPage.ts              |   132 +
 .../tests/experimental/chart/chart-list.spec.ts    |   307 +
 .../tests/experimental/chart/chart-test-helpers.ts |    88 +
 .../experimental/dataset/dataset-list.spec.ts      |    55 +-
 .../src/{Calendar.js => Calendar.ts}               |    93 +-
 .../src/{ReactCalendar.jsx => ReactCalendar.tsx}   |    31 +-
 .../src/{index.js => index.ts}                     |     0
 .../stories/LegacyPluginChartCalendar.stories.tsx  |   123 +
 .../src/stories}/data.ts                           |     0
 .../src/{transformProps.js => transformProps.ts}   |     7 +-
 .../src/vendor/{cal-heatmap.js => cal-heatmap.ts}  |     1 +
 .../test/utils.test.ts                             |    14 +-
 .../legacy-plugin-chart-calendar/tsconfig.json     |     3 +-
 .../types/external.d.ts}                           |    12 +-
 .../src/{Chord.js => Chord.ts}                     |    46 +-
 .../src/{ReactChord.jsx => ReactChord.tsx}         |    27 +-
 .../src/{index.js => index.ts}                     |     0
 .../stories}/LegacyPluginChartChord.stories.tsx    |    45 +-
 .../legacy-plugin-chart-chord/src/stories}/data.ts |    10 +-
 .../src/{transformProps.js => transformProps.ts}   |     4 +-
 .../legacy-plugin-chart-chord/tsconfig.json        |     3 +-
 .../types/external.d.ts}                           |    12 +-
 .../src/{CountryMap.js => CountryMap.ts}           |   121 +-
 .../{ReactCountryMap.jsx => ReactCountryMap.tsx}   |    20 +-
 .../src/{index.js => index.ts}                     |     0
 .../src/stories}/CountryMap.stories.tsx            |    29 +-
 .../src/{transformProps.js => transformProps.ts}   |     4 +-
 .../test/CountryMap.test.tsx                       |    25 +-
 .../legacy-plugin-chart-country-map/tsconfig.json  |     3 +-
 .../types/external.d.ts}                           |    12 +-
 .../legacy-plugin-chart-horizon/package.json       |     2 +-
 .../src/{HorizonChart.jsx => HorizonChart.tsx}     |    66 +-
 .../src/{HorizonRow.jsx => HorizonRow.tsx}         |    72 +-
 .../src/{index.js => index.ts}                     |     0
 .../src/stories}/Horizon.stories.tsx               |    36 +-
 .../src/stories}/data.ts                           |     0
 .../src/{transformProps.js => transformProps.ts}   |    16 +-
 .../legacy-plugin-chart-horizon/tsconfig.json      |     3 +-
 .../types/external.d.ts}                           |    12 +-
 .../src/{MapBox.jsx => MapBox.tsx}                 |   116 +-
 ...tGlowOverlay.jsx => ScatterPlotGlowOverlay.tsx} |   184 +-
 .../src/{index.js => index.ts}                     |     4 +-
 .../src/stories/MapBox.stories.tsx                 |   107 +
 .../src/stories}/data.ts                           |     0
 .../src/{transformProps.js => transformProps.ts}   |    34 +-
 .../src/utils/{geo.js => geo.ts}                   |     6 +-
 .../{luminanceFromRGB.js => luminanceFromRGB.ts}   |     6 +-
 .../test/utils/roundDecimal.test.ts                |     2 +-
 .../legacy-plugin-chart-map-box/tsconfig.json      |     3 +-
 .../types/external.d.ts                            |   101 +
 .../src/{PairedTTest.jsx => PairedTTest.tsx}       |    30 +-
 .../src/{TTestTable.jsx => TTestTable.tsx}         |    88 +-
 .../src/{index.js => index.ts}                     |     0
 .../src/stories}/TTest.stories.tsx                 |    45 +-
 .../src/stories}/data.ts                           |     0
 .../src/{transformProps.js => transformProps.ts}   |     9 +-
 .../tsconfig.json                                  |     3 +-
 .../types/external.d.ts                            |    83 +
 ...rallelCoordinates.js => ParallelCoordinates.ts} |    69 +-
 ...oordinates.jsx => ReactParallelCoordinates.tsx} |    21 +-
 .../src/{index.js => index.ts}                     |     0
 .../src/stories}/ParallelCoordinates.stories.tsx   |    53 +-
 .../src/stories}/data.ts                           |     0
 .../src/{transformProps.js => transformProps.ts}   |     8 +-
 .../parcoords/{d3.parcoords.js => d3.parcoords.ts} |     3 +-
 .../vendor/parcoords/{divgrid.js => divgrid.ts}    |     3 +-
 .../tsconfig.json                                  |     3 +-
 .../types/d3-parcoords.d.ts                        |    28 +-
 .../types/d3.d.ts                                  |     2 +-
 .../types/{d3.d.ts => external.d.ts}               |    15 +-
 .../src/{Partition.js => Partition.ts}             |    82 +-
 .../src/{ReactPartition.jsx => ReactPartition.tsx} |    19 +-
 .../src/{index.js => index.ts}                     |     0
 .../src/stories/Partition.stories.tsx              |   101 +
 .../src/stories}/data.ts                           |     0
 .../src/{transformProps.js => transformProps.ts}   |     8 +-
 ...ription.test.jsx => OptionDescription.test.tsx} |     7 +-
 .../legacy-plugin-chart-partition/tsconfig.json    |     3 +-
 .../types/external.d.ts}                           |    12 +-
 .../src/{ReactRose.jsx => ReactRose.tsx}           |    17 +-
 .../src/{Rose.js => Rose.ts}                       |    87 +-
 .../src/{index.js => index.ts}                     |     0
 .../src/stories/Rose.stories.tsx                   |    95 +
 .../legacy-plugin-chart-rose/src/stories}/data.ts  |     0
 .../src/{transformProps.js => transformProps.ts}   |     4 +-
 .../plugins/legacy-plugin-chart-rose/tsconfig.json |     3 +-
 .../types/external.d.ts}                           |    12 +-
 .../legacy-plugin-chart-world-map/package.json     |     2 +-
 .../src/{ReactWorldMap.jsx => ReactWorldMap.tsx}   |    25 +-
 .../src/{WorldMap.js => WorldMap.ts}               |   106 +-
 .../src/{index.js => index.ts}                     |     0
 .../src/stories}/WorldMap.stories.tsx              |    35 +-
 .../src/stories}/data.ts                           |     0
 .../src/{transformProps.js => transformProps.ts}   |     4 +-
 .../test/WorldMap.test.ts                          |   510 +
 .../test/tsconfig.json                             |     8 +
 .../legacy-plugin-chart-world-map/tsconfig.json    |     3 +-
 .../types/external.d.ts}                           |    12 +-
 .../legacy-preset-chart-deckgl/package.json        |    12 +-
 .../src/Multi/Multi.test.tsx                       |    36 +-
 .../legacy-preset-chart-deckgl/src/Multi/Multi.tsx |     2 +-
 .../src/layers/Arc/stories}/Arc.stories.tsx        |    48 +-
 .../src/layers/Arc/stories/payload.ts              |    80 +
 .../src/layers/Contour/getSafeCellSize.test.ts     |    12 +-
 .../src/layers/Grid/Grid.tsx                       |     6 +-
 .../src/layers/Grid/stories}/Grid.stories.tsx      |    45 +-
 .../src/layers/Grid/stories/payload.ts             |    41 +
 .../src/layers/Hex/Hex.tsx                         |     6 +-
 .../src/layers/Hex/stories}/Hex.stories.tsx        |    45 +-
 .../src/layers/Hex/stories/payload.ts              |    46 +
 .../src/layers/Path/Path.test.tsx                  |     3 +-
 .../src/layers/Path/stories}/Path.stories.tsx      |    38 +-
 .../src/layers/Path/stories/payload.ts}            |    24 +-
 .../src/layers/Polygon/Polygon.test.tsx            |    22 +-
 .../layers/Polygon/stories}/Polygon.stories.tsx    |   174 +-
 .../src/layers/Polygon/stories/geojsonPayload.ts   |    77 +
 .../src/layers/Polygon/stories/payload.ts}         |    79 +-
 .../src/layers/Scatter/buildQuery.test.ts          |   245 +-
 .../src/layers/Scatter/buildQuery.ts               |    44 +-
 .../layers/Scatter/stories}/Scatter.stories.tsx    |    54 +-
 .../src/layers/Scatter/stories/payload.ts          |    41 +
 .../Screengrid/stories/Screengrid.stories.tsx}     |    36 +-
 .../src/layers/Screengrid/stories/payload.ts       |    44 +
 .../src/layers/buildQueryUtils.ts                  |     4 -
 .../src/layers/common.test.ts                      |    42 +-
 .../src/layers/spatialUtils.test.ts                |    54 +-
 .../legacy-preset-chart-deckgl/src/utils.test.ts   |    48 +-
 .../legacy-preset-chart-deckgl/src/utils.ts        |     2 +-
 .../src/utils/crossFiltersDataMask.test.ts         |    14 +-
 .../test/utils/colors.test.ts                      |     2 +-
 .../test/utils/getPointsFromPolygon.test.ts        |     4 +-
 .../src/BoxPlot/stories/NVD3BoxPlot.stories.tsx    |    81 +
 .../src/BoxPlot/stories/data.ts                    |    78 +
 .../src/Bubble/{index.js => index.ts}              |     0
 .../src/Bubble/stories/NVD3Bubble.stories.tsx      |   103 +
 .../src/Bubble/stories}/data.ts                    |     0
 .../src/Bullet/{index.js => index.ts}              |     0
 .../src/Bullet/stories/NVD3Bullet.stories.tsx      |    87 +
 .../src/Bullet/stories}/data.ts                    |     0
 .../src/Compare/{index.js => index.ts}             |     0
 .../src/Compare/stories/NVD3Compare.stories.tsx    |   208 +
 .../src/Compare/stories}/data.ts                   |     0
 .../src/{NVD3Vis.js => NVD3Vis.ts}                 |     1 +
 .../src/{PropTypes.js => PropTypes.ts}             |     0
 .../src/{ReactNVD3.jsx => ReactNVD3.tsx}           |     1 +
 .../src/TimePivot/{index.js => index.ts}           |     0
 .../src/{index.js => index.ts}                     |     0
 .../src/{preset.js => preset.ts}                   |     0
 .../src/{transformProps.js => transformProps.ts}   |    22 +-
 .../src/{utils.js => utils.ts}                     |     1 +
 .../src/utils/{isTruthy.js => isTruthy.ts}         |     2 +-
 .../{AnnotationTypes.js => AnnotationTypes.ts}     |     1 +
 .../superset/{exploreUtils.js => exploreUtils.ts}  |     1 +
 .../test/{utils.test.js => utils.test.ts}          |    21 +-
 .../utils/{isTruthy.test.js => isTruthy.test.ts}   |    12 +-
 .../utils/{tokenize.test.js => tokenize.test.ts}   |    14 +-
 .../types/external.d.ts}                           |    31 +-
 .../plugin-chart-ag-grid-table/package.json        |     1 -
 .../src/AgGridTable/components/CustomPopover.tsx   |    20 +-
 .../src/AgGridTable/index.tsx                      |     4 +-
 .../src/AgGridTableChart.tsx                       |    18 +-
 .../plugin-chart-ag-grid-table/src/buildQuery.ts   |     2 +-
 .../src/controlPanel.tsx                           |    50 +-
 .../src/renderers/TextCellRenderer.tsx             |     2 +
 .../src/stories/AgGridTable.stories.tsx            |   100 +
 .../plugin-chart-ag-grid-table/src/stories/data.ts |    58 +
 .../src/transformProps.ts                          |   177 +-
 .../plugin-chart-ag-grid-table/src/types.ts        |    86 +-
 .../src/utils/agGridFilterConverter.ts             |    82 +-
 .../src/utils/formatValue.ts                       |     2 +-
 .../src/utils/useColDefs.ts                        |    32 +-
 .../test/AgGridTableChart.test.tsx                 |   359 +
 .../test/buildQuery.test.ts                        |   120 +-
 .../test/controlPanel.test.tsx                     |     2 +-
 .../test/utils/agGridFilterConverter.test.ts       |    90 +-
 .../test/utils/filterStateManager.test.ts          |    40 +-
 .../test/utils/getInitialFilterModel.test.ts       |    42 +-
 .../test/utils/useColDefs.test.ts                  |   135 +
 .../plugin-chart-ag-grid-table/tsconfig.json       |     3 +-
 .../plugins/plugin-chart-cartodiagram/package.json |     4 +-
 .../src/stories/Cartodiagram.stories.tsx           |   208 +
 .../plugin-chart-cartodiagram/src/stories/data.ts  |   206 +
 .../src/util/layerUtil.tsx                         |     1 -
 .../test/components/chartLayer.test.ts             |     4 +-
 .../plugin-chart-cartodiagram/test/index.test.ts   |     2 +-
 .../test/plugin/buildQuery.test.ts                 |     4 +-
 .../test/plugin/index.test.ts                      |     2 +-
 .../test/plugin/transformProps.test.ts             |     4 +-
 .../test/util/chartUtil.test.ts                    |     6 +-
 .../test/util/controlPanelUtil.test.tsx            |    12 +-
 .../test/util/geometryUtil.test.ts                 |     6 +-
 .../test/util/layerUtil.test.ts                    |    12 +-
 .../test/util/mapUtil.test.ts                      |     2 +-
 .../test/util/serviceUtil.test.ts                  |     8 +-
 .../test/util/transformPropsUtil.test.ts           |    34 +-
 .../plugin-chart-cartodiagram/tsconfig.json        |     3 +-
 .../BigNumber/BigNumberPeriodOverPeriod/PopKPI.tsx |     6 +-
 .../BigNumberPeriodOverPeriod/controlPanel.ts      |     2 +-
 .../BigNumber/BigNumberPeriodOverPeriod/types.ts   |     5 -
 .../BigNumber/BigNumberTotal/controlPanel.test.ts  |     6 +-
 .../stories}/BigNumberTotal.stories.tsx            |    56 +-
 .../src/BigNumber/BigNumberTotal/stories}/data.ts  |     0
 .../BigNumberTotal/transformProps.test.ts          |    14 +-
 .../src/BigNumber/BigNumberViz.tsx                 |    15 +-
 .../BigNumberWithTrendline/buildQuery.test.ts      |     8 +-
 .../stories}/BigNumber.stories.tsx                 |    76 +-
 .../BigNumberWithTrendline/stories}/data.ts        |     0
 .../BigNumberWithTrendline/transformProps.test.ts  |    12 +-
 .../BigNumberWithTrendline/transformProps.ts       |    13 +-
 .../plugin-chart-echarts/src/BigNumber/types.ts    |     1 +
 .../src/BoxPlot/stories}/BoxPlot.stories.tsx       |    19 +-
 .../src/BoxPlot/stories}/data.ts                   |     0
 .../src/BoxPlot/transformProps.ts                  |     4 +-
 .../plugin-chart-echarts/src/BoxPlot/types.ts      |     2 +-
 .../src/Bubble/stories}/BubbleChart.stories.tsx    |    43 +-
 .../src/Bubble/stories}/data.ts                    |     0
 .../src/Funnel/controlPanel.tsx                    |    28 +-
 .../src/Funnel/stories}/Funnel.stories.tsx         |    43 +-
 .../src/Funnel/stories}/constants.ts               |     0
 .../src/Funnel/transformProps.ts                   |    19 +-
 .../plugin-chart-echarts/src/Funnel/types.ts       |    12 +-
 .../src/Gauge/stories/Gauge.stories.tsx            |   118 +
 .../src/Gauge/stories}/data.ts                     |     0
 .../src/Gauge/transformProps.ts                    |     1 -
 .../plugin-chart-echarts/src/Graph/buildQuery.ts   |    21 +-
 .../src/Graph/stories/Graph.stories.tsx            |   138 +
 .../src/Graph/stories}/data.ts                     |     0
 .../plugin-chart-echarts/src/Graph/types.ts        |     2 +-
 .../plugin-chart-echarts/src/Heatmap/Heatmap.tsx   |     3 +-
 .../src/MixedTimeseries/EchartsMixedTimeseries.tsx |     1 -
 .../src/MixedTimeseries/index.ts                   |     1 -
 .../stories}/MixedSeries.stories.tsx               |   149 +-
 .../src/MixedTimeseries/stories}/negativeData.ts   |     0
 .../src/MixedTimeseries/transformProps.ts          |     3 +-
 .../src/MixedTimeseries/types.ts                   |     2 +-
 .../src/Pie/stories}/Pie.stories.tsx               |   141 +-
 .../plugin-chart-echarts/src/Pie/stories}/data.ts  |     0
 .../plugins/plugin-chart-echarts/src/Pie/types.ts  |     2 +-
 .../src/Radar/stories}/Radar.stories.tsx           |    63 +-
 .../src/Radar/stories}/data.ts                     |     0
 .../plugin-chart-echarts/src/Radar/types.ts        |     2 +-
 .../plugin-chart-echarts/src/Sankey/buildQuery.ts  |    19 +-
 .../src/Sunburst/stories}/Sunburst.stories.tsx     |    23 +-
 .../src/Sunburst/stories}/data.ts                  |     0
 .../src/Timeseries/EchartsTimeseries.test.tsx      |     7 +-
 .../src/Timeseries/EchartsTimeseries.tsx           |     2 +-
 .../src/Timeseries/Regular/Bar/controlPanel.tsx    |    21 +-
 .../src/Timeseries/constants.ts                    |     2 +-
 .../stories}/AreaSeries/AreaSeries.stories.tsx     |    67 +-
 .../src/Timeseries/stories}/AreaSeries/data.ts     |     0
 .../src/Timeseries/stories}/Timeseries.stories.tsx |    96 +-
 .../src/Timeseries/stories}/confbandData.ts        |     0
 .../src/Timeseries/stories}/data.ts                |     0
 .../src/Timeseries/stories}/negativeNumData.ts     |     0
 .../src/Timeseries/stories}/stackWithNulls.ts      |     0
 .../src/Timeseries/transformProps.ts               |    39 +-
 .../src/Timeseries/transformers.ts                 |   309 +-
 .../plugin-chart-echarts/src/Timeseries/types.ts   |     1 +
 .../plugin-chart-echarts/src/Tree/buildQuery.ts    |    15 +-
 .../src/Tree/stories}/Tree.stories.tsx             |   163 +-
 .../plugin-chart-echarts/src/Tree/stories}/data.ts |     0
 .../src/Tree/transformProps.ts                     |    10 +-
 .../src/Treemap/EchartsTreemap.tsx                 |     2 +-
 .../plugin-chart-echarts/src/Treemap/buildQuery.ts |    16 +-
 .../src/Treemap/stories}/Treemap.stories.tsx       |    27 +-
 .../src/Treemap/stories}/data.ts                   |     0
 .../src/Treemap/transformProps.ts                  |     2 -
 .../src/Waterfall/stories}/Waterfall.stories.tsx   |    38 +-
 .../src/Waterfall/stories}/data.ts                 |     0
 .../plugin-chart-echarts/src/components/Echart.tsx |    30 +-
 .../src/components/ExtraControls.tsx               |     7 +-
 .../plugins/plugin-chart-echarts/src/constants.ts  |     8 +
 .../plugins/plugin-chart-echarts/src/controls.tsx  |    21 +-
 .../plugins/plugin-chart-echarts/src/types.ts      |     1 +
 .../src/utils/orderby.test.ts}                     |    21 +-
 .../plugin-chart-echarts/src/utils/orderby.ts      |    51 +
 .../plugin-chart-echarts/src/utils/series.ts       |     6 +-
 .../src/utils/themeOverrides.test.ts               |    14 +-
 .../test/BigNumber/transformProps.test.ts          |    56 +-
 .../test/BoxPlot/buildQuery.test.ts                |     4 +-
 .../test/BoxPlot/transformProps.test.ts            |     2 +-
 .../test/Bubble/buildQuery.test.ts                 |     4 +-
 .../test/Bubble/transformProps.test.ts             |    14 +-
 .../test/Funnel/buildQuery.test.ts                 |     2 +-
 .../test/Funnel/transformProps.test.ts             |    10 +-
 .../test/Gantt/buildQuery.test.ts                  |     2 +-
 .../test/Gantt/transformProps.test.ts              |     8 +-
 .../test/Gauge/buildQuery.test.ts                  |     6 +-
 .../test/Gauge/transformProps.test.ts              |    36 +-
 .../test/Graph/buildQuery.test.ts                  |    10 +-
 .../test/Graph/transformProps.test.ts              |    10 +-
 .../test/MixedTimeseries/transformProps.test.ts    |   279 +-
 .../test/Pie/buildQuery.test.ts                    |     2 +-
 .../test/Pie/transformProps.test.ts                |    32 +-
 .../test/Radar/transformProps.test.ts              |     8 +-
 .../test/Timeseries/Bar/controlPanel.test.ts       |   344 +-
 .../test/Timeseries/Bar/transformProps.test.ts     |    24 +-
 .../test/Timeseries/Scatter/controlPanel.test.ts   |     2 +-
 .../test/Timeseries/Scatter/transformProps.test.ts |     4 -
 .../test/Timeseries/buildQuery.test.ts             |    10 +-
 .../test/Timeseries/constants.test.ts              |     8 +-
 .../test/Timeseries/transformProps.test.ts         |   754 +-
 .../test/Timeseries/transformers.test.ts           |   225 +-
 .../test/Tree/buildQuery.test.ts                   |    37 +-
 .../test/Tree/transformProps.test.ts               |    10 +-
 .../test/Treemap/buildQuery.test.ts                |     2 +-
 .../test/Treemap/transformProps.test.ts            |     2 +-
 .../test/Waterfall/buildQuery.test.ts              |     2 +-
 .../plugins/plugin-chart-echarts/test/helpers.ts   |   110 +
 .../test/utils/annotation.test.ts                  |    16 +-
 .../test/utils/controls.test.ts                    |     4 +-
 .../test/utils/forecast.test.ts                    |    14 +-
 .../test/utils/formatters.test.ts                  |     6 +-
 .../plugin-chart-echarts/test/utils/series.test.ts |    82 +-
 .../test/utils/transformers.test.ts                |   265 +-
 .../test/utils/treeBuilder.test.ts                 |     4 +-
 .../plugins/plugin-chart-echarts/tsconfig.json     |     3 +-
 .../plugins/plugin-chart-handlebars/package.json   |     3 +-
 .../src/components/Handlebars/HandlebarsViewer.tsx |     2 +-
 .../src/stories/Handlebars.stories.tsx             |   268 +
 .../plugin-chart-handlebars/src/stories/data.ts    |   129 +
 .../plugin-chart-handlebars/test/index.test.ts     |     2 +-
 .../test/plugin/buildQuery.test.ts                 |     2 +-
 .../test/plugin/transformProps.test.ts             |     2 +-
 .../plugins/plugin-chart-handlebars/tsconfig.json  |     3 +-
 .../plugins/plugin-chart-pivot-table/package.json  |     2 +-
 .../src/PivotTableChart.tsx                        |    24 +-
 .../src/plugin/controlPanel.tsx                    |    14 +-
 .../{PivotTable.jsx => PivotTable.tsx}             |     8 +-
 .../src/react-pivottable/{Styles.js => Styles.ts}  |     2 +-
 .../{TableRenderers.jsx => TableRenderers.tsx}     |   505 +-
 .../src/react-pivottable/{index.js => index.ts}    |     0
 .../{utilities.js => utilities.ts}                 |   527 +-
 .../src/stories/PivotTable.stories.tsx             |   119 +
 .../src/stories}/testData.ts                       |     0
 .../plugin-chart-pivot-table/test/index.test.ts    |     2 +-
 .../test/plugin/transformProps.test.ts             |   489 +-
 .../test/react-pivottable/tableRenders.test.tsx    |    16 +-
 .../plugins/plugin-chart-table/package.json        |     2 +-
 .../plugin-chart-table/src/DataTable/DataTable.tsx |     4 +-
 .../src/DataTable/components/GlobalFilter.tsx      |     5 +-
 .../src/DataTable/components/Pagination.tsx        |    10 +-
 .../plugins/plugin-chart-table/src/TableChart.tsx  |    83 +-
 .../plugins/plugin-chart-table/src/buildQuery.ts   |     2 +-
 .../plugin-chart-table/src/controlPanel.tsx        |    87 +-
 .../src/stories}/Table.stories.tsx                 |    43 +-
 .../plugin-chart-table/src/stories/birthNames.json |    25 +
 .../plugin-chart-table/src/stories}/testData.ts    |     2 +-
 .../plugin-chart-table/src/transformProps.ts       |   214 +-
 .../plugins/plugin-chart-table/src/types.ts        |    91 +-
 .../plugin-chart-table/test/TableChart.test.tsx    |    73 +-
 .../plugin-chart-table/test/buildQuery.test.ts     |    26 +-
 .../test/controlPanel.test.ts                      |     0
 .../plugin-chart-table/test/controlPanel.test.tsx  |     2 +-
 .../test/sortAlphanumericCaseInsensitive.test.ts   |     6 +-
 .../plugins/plugin-chart-table/tsconfig.json       |     3 +-
 .../plugins/plugin-chart-word-cloud/package.json   |     2 +-
 .../src/plugin/buildQuery.ts                       |    17 +-
 .../src/stories/WordCloud.stories.tsx              |    90 +
 .../plugin-chart-word-cloud/src/stories}/data.ts   |     0
 .../test/buildQuery.test.ts                        |     2 +-
 .../plugins/plugin-chart-word-cloud/tsconfig.json  |     3 +-
 superset-frontend/scripts/check-custom-rules.js    |   368 +-
 .../scripts/check-storybook-coverage.js            |   221 +
 .../spec/fixtures/mockNativeFilters.ts             |     2 +-
 superset-frontend/spec/fixtures/mockStore.js       |    11 +
 superset-frontend/spec/helpers/testing-library.tsx |     7 +-
 superset-frontend/src/.eslintrc.json               |    11 -
 .../actions/{sqlLab.test.js => sqlLab.test.ts}     |   443 +-
 superset-frontend/src/SqlLab/actions/sqlLab.ts     |   355 +-
 .../src/SqlLab/components/App/index.tsx            |     8 +-
 .../SqlLab/components/AppLayout/AppLayout.test.tsx |    78 +-
 .../src/SqlLab/components/AppLayout/index.tsx      |    13 +-
 .../components/EditorWrapper/useKeywords.test.ts   |    12 +-
 .../SqlLab/components/EditorWrapper/useKeywords.ts |     2 +-
 .../QueryAutoRefresh/QueryAutoRefresh.test.tsx     |    23 +-
 .../src/SqlLab/components/QueryHistory/index.tsx   |     4 +-
 .../SqlLab/components/ResultSet/ResultSet.test.tsx |     1 -
 .../src/SqlLab/components/ResultSet/index.tsx      |    12 +-
 .../SaveDatasetModal/SaveDatasetModal.test.tsx     |     9 +-
 .../SqlLab/components/SaveDatasetModal/index.tsx   |     4 +-
 .../src/SqlLab/components/SouthPane/index.tsx      |    24 +-
 .../src/SqlLab/components/SqlEditor/index.tsx      |     7 +-
 .../SqlLab/components/SqlEditorTabHeader/index.tsx |     2 +
 .../SqlLab/components/SqlEditorTopBar/index.tsx    |     4 +-
 .../SqlLab/components/StatusBar/StatusBar.test.tsx |    14 +-
 .../src/SqlLab/components/StatusBar/index.tsx      |    13 +-
 .../TableExploreTree/TreeNodeRenderer.tsx          |     2 +-
 .../SqlLab/components/TableExploreTree/index.tsx   |    65 +-
 .../src/SqlLab/components/TablePreview/index.tsx   |     8 +-
 superset-frontend/src/SqlLab/constants.ts          |     2 +
 superset-frontend/src/SqlLab/contributions.ts      |    41 +-
 superset-frontend/src/SqlLab/fixtures.ts           |     7 +-
 .../src/SqlLab/reducers/getInitialState.ts         |     5 +-
 .../reducers/{sqlLab.test.js => sqlLab.test.ts}    |    70 +-
 .../src/SqlLab/utils/emptyQueryResults.test.ts     |     6 +-
 .../components/DeckglLayerVisibility/index.ts      |     1 +
 .../TimeColumn/TimeColumnFilterPlugin.tsx          |     2 +-
 .../src/components/AuditInfo/index.tsx             |    25 +-
 .../src/components/AuditInfo/types.ts              |     2 +-
 .../src/components/Chart/Chart.test.tsx            |    88 +
 superset-frontend/src/components/Chart/Chart.tsx   |    43 +-
 .../ChartContextMenu/ChartContextMenu.test.tsx     |     6 +-
 .../Chart/ChartContextMenu/useContextMenu.test.tsx |     2 +-
 .../components/Chart/ChartErrorMessage.test.tsx    |    13 +
 .../src/components/Chart/ChartErrorMessage.tsx     |     1 +
 .../src/components/Chart/ChartRenderer.test.jsx    |   288 -
 .../src/components/Chart/ChartRenderer.test.tsx    |   441 +
 .../Chart/{ChartRenderer.jsx => ChartRenderer.tsx} |   312 +-
 .../Chart/DrillBy/useResultsTableView.test.ts      |    48 +
 .../Chart/DrillBy/useResultsTableView.tsx          |     5 +-
 .../Chart/DrillDetail/DrillDetailPane.tsx          |     5 +-
 .../src/components/Chart/chartAction.js            |   652 -
 .../src/components/Chart/chartAction.ts            |  1023 +
 .../{chartActions.test.js => chartActions.test.ts} |   441 +-
 .../src/components/Chart/chartReducer.ts           |     8 +
 ...chartReducers.test.js => chartReducers.test.ts} |    62 +-
 .../useDrillDetailMenuItems.test.tsx               |     1 +
 .../src/components/DatabaseSelector/index.tsx      |     4 +-
 ...dal.test.jsx => ChangeDatasourceModal.test.tsx} |     3 +-
 ...urceModal.test.jsx => DatasourceModal.test.tsx} |    19 +-
 .../Datasource/DatasourceModal/index.tsx           |    24 +-
 .../FoldersEditor/FoldersEditor.test.tsx           |   336 +
 .../Datasource/FoldersEditor/TreeItem.styles.ts    |    17 +-
 .../Datasource/FoldersEditor/TreeItem.tsx          |     5 +-
 .../FoldersEditor/VirtualizedTreeItem.tsx          |     8 +
 .../FoldersEditor/VirtualizedTreeList.tsx          |     4 +
 .../components/DragOverlayContent.test.tsx         |   124 +
 .../components/DragOverlayContent.tsx              |    66 +-
 .../components/FoldersToolbarComponent.tsx         |   118 +-
 .../Datasource/FoldersEditor/constants.ts          |     6 +
 .../FoldersEditor/folderOperations.test.ts         |   143 +
 .../Datasource/FoldersEditor/folderOperations.ts   |    65 +-
 .../hooks/useContainingBlockModifier.ts            |    78 +
 .../FoldersEditor/hooks/useDragHandlers.test.ts    |   164 +
 .../FoldersEditor/hooks/useDragHandlers.ts         |   268 +-
 .../FoldersEditor/hooks/useItemHeights.ts          |     7 +-
 .../components/Datasource/FoldersEditor/index.tsx  |   281 +-
 .../Datasource/FoldersEditor/sensors.test.ts       |   120 +
 .../components/Datasource/FoldersEditor/sensors.ts |    58 +-
 .../components/Datasource/FoldersEditor/styles.tsx |    66 +-
 .../Datasource/FoldersEditor/treeUtils.test.ts     |   143 +
 .../Datasource/FoldersEditor/treeUtils.ts          |    65 +
 .../components/CollectionTable/index.tsx           |    59 +-
 .../{DatasourceEditor.jsx => DatasourceEditor.tsx} |  1149 +-
 .../DatasetUsageTab/DatasetUsageTab.test.tsx       |   143 +
 .../components/DatasetUsageTab/index.tsx           |    71 +-
 .../tests/DatasourceEditor.test.tsx                |   245 +
 .../Datasource/components/Field/index.tsx          |    10 +-
 .../Datasource/components/Fieldset/index.tsx       |    12 +-
 .../src/components/Datasource/types.ts             |    45 +-
 .../Datasource/utils/{index.js => index.ts}        |   134 +-
 .../ErrorMessage/DatabaseErrorMessage.test.tsx     |     2 +-
 .../ErrorMessage/DatabaseErrorMessage.tsx          |     2 +
 .../ErrorMessage/DatasetNotFoundErrorMessage.tsx   |     2 +
 .../ErrorMessageWithStackTrace.test.tsx            |    12 +
 .../ErrorMessage/ErrorMessageWithStackTrace.tsx    |     6 +-
 .../ErrorMessage/FrontendNetworkErrorMessage.tsx   |     2 +
 .../ErrorMessage/InvalidSQLErrorMessage.tsx        |     2 +
 .../src/components/ErrorMessage/IssueCode.tsx      |     3 +-
 .../ErrorMessage/OAuth2RedirectMessage.test.tsx    |     8 +-
 .../ErrorMessage/OAuth2RedirectMessage.tsx         |    17 +-
 .../ErrorMessage/ParameterErrorMessage.tsx         |     2 +
 .../ErrorMessage/TimeoutErrorMessage.tsx           |     2 +
 .../src/components/ErrorMessage/types.ts           |     1 +
 .../src/components/FacePile/FacePile.stories.tsx   |     2 +-
 .../src/components/FacePile/FacePile.test.tsx      |     2 +-
 .../src/components/FacePile/utils.tsx              |     4 +-
 .../src/components/GridTable/Header.tsx            |     5 +-
 .../src/components/JsonModal/index.tsx             |    30 +-
 .../src/components/ListView/CardCollection.tsx     |     6 +-
 .../src/components/ListView/Filters/Select.tsx     |    13 +-
 .../src/components/ListView/Filters/index.tsx      |     2 +
 .../src/components/ListView/ListView.tsx           |    54 +-
 superset-frontend/src/components/ListView/types.ts |     8 +-
 superset-frontend/src/components/ListView/utils.ts |     5 +-
 .../{Toast.test.jsx => Toast.test.tsx}             |     6 +-
 .../src/components/MessageToasts/Toast.tsx         |    21 +-
 ...tPresenter.test.jsx => ToastPresenter.test.tsx} |     5 +-
 .../components/MessageToasts/ToastPresenter.tsx    |    59 +-
 .../{reducers.test.js => reducers.test.ts}         |    41 +-
 .../src/components/MessageToasts/reducers.ts       |     2 +-
 .../src/components/PanelToolbar/index.tsx          |    42 +-
 .../src/components/RowCountLabel/index.tsx         |     2 +-
 .../ViewListExtension/ViewListExtension.test.tsx   |   218 +-
 .../src/components/ViewListExtension/index.tsx     |    24 +-
 superset-frontend/src/components/index.ts          |     2 +-
 superset-frontend/src/core/commands/index.ts       |    42 +-
 .../src/core/editors/AceEditorProvider.test.tsx    |     3 +-
 .../src/core/editors/AceEditorProvider.tsx         |    22 +-
 .../src/core/editors/EditorHost.test.tsx           |    14 +-
 superset-frontend/src/core/editors/EditorHost.tsx  |     8 +-
 .../src/core/editors/EditorProviders.test.ts       |    85 +-
 .../src/core/editors/EditorProviders.ts            |    20 +-
 superset-frontend/src/core/editors/index.ts        |    26 +-
 superset-frontend/src/core/extensions/index.ts     |     6 +-
 superset-frontend/src/core/index.ts                |    14 +-
 superset-frontend/src/core/menus/index.test.ts     |   124 +
 superset-frontend/src/core/menus/index.ts          |    83 +
 superset-frontend/src/core/models.ts               |     4 -
 superset-frontend/src/core/sqlLab/index.ts         |     3 +-
 superset-frontend/src/core/views/index.test.ts     |   112 +
 superset-frontend/src/core/views/index.ts          |    83 +
 .../src/dashboard/actions/autoRefresh.ts           |   124 +
 .../src/dashboard/actions/dashboardFilters.js      |    64 -
 .../src/dashboard/actions/dashboardFilters.ts      |   120 +
 ...boardLayout.test.js => dashboardLayout.test.ts} |   150 +-
 .../{dashboardLayout.js => dashboardLayout.ts}     |   212 +-
 .../src/dashboard/actions/dashboardState.js        |  1100 -
 .../src/dashboard/actions/dashboardState.test.js   |   237 -
 .../src/dashboard/actions/dashboardState.test.ts   |   403 +
 .../src/dashboard/actions/dashboardState.ts        |  1530 +
 .../dashboard/actions/{hydrate.js => hydrate.ts}   |   164 +-
 .../src/dashboard/actions/sliceEntities.ts         |    12 +-
 .../components/AutoRefreshIndicator/index.tsx      |   169 +
 .../AutoRefreshStatus/StatusIndicatorDot.test.tsx  |   114 +
 .../AutoRefreshStatus/StatusIndicatorDot.tsx       |   168 +
 .../StatusTooltipContent.test.tsx                  |   180 +
 .../AutoRefreshStatus/StatusTooltipContent.tsx     |   178 +
 .../{Dashboard.test.jsx => Dashboard.test.tsx}     |    83 +-
 .../components/{Dashboard.jsx => Dashboard.tsx}    |   158 +-
 .../DashboardBuilder/DashboardBuilder.tsx          |     7 -
 ...shboardGrid.test.jsx => DashboardGrid.test.tsx} |    12 +-
 .../{DashboardGrid.jsx => DashboardGrid.tsx}       |   104 +-
 .../dashboard/components/EmbeddedModal/index.tsx   |     2 +-
 .../components/FiltersBadge/FiltersBadge.test.tsx  |   253 +-
 .../dashboard/components/FiltersBadge/index.tsx    |    27 +-
 .../dashboard/components/Header/Header.test.tsx    |   128 +-
 .../components/Header/{index.jsx => index.tsx}     |   318 +-
 .../src/dashboard/components/Header/types.ts       |    71 +-
 .../Header/useHeaderActionsDropdownMenu.tsx        |    27 +-
 .../components/Header/useHeaderAutoRefresh.ts      |   410 +
 .../PropertiesModal/hooks/useAccessOptions.ts      |    32 +-
 .../dashboard/components/PropertiesModal/index.tsx |    35 +-
 .../PropertiesModal/sections/AccessSection.tsx     |    22 +-
 .../PropertiesModal/sections/RefreshSection.tsx    |     2 +-
 .../dashboard/components/RefreshButton/index.tsx   |    81 +
 .../RefreshFrequencySelect.test.tsx}               |    40 +-
 .../RefreshFrequency/RefreshFrequencySelect.tsx    |    67 +-
 .../dashboard/components/RefreshIntervalModal.tsx  |    81 +-
 .../src/dashboard/components/SliceAdder.tsx        |     2 +-
 .../components/SliceHeader/SliceHeader.test.tsx    |    32 -
 .../src/dashboard/components/SliceHeader/index.tsx |     6 +-
 .../SliceHeaderControls.test.tsx                   |    15 +-
 .../components/SliceHeaderControls/index.tsx       |     2 +-
 .../components/URLShortLinkButton/index.tsx        |     2 +-
 ...agDroppable.test.jsx => DragDroppable.test.tsx} |    55 +-
 .../dnd/{DragDroppable.jsx => DragDroppable.tsx}   |   180 +-
 .../components/dnd/dragDroppableConfig.ts          |     4 +
 .../dnd/{handleDrop.js => handleDrop.ts}           |    22 +-
 .../components/filterscope/FilterScope.test.tsx    |     8 +-
 ...erScopeSelector.jsx => FilterScopeSelector.tsx} |   356 +-
 .../Chart/{Chart.test.jsx => Chart.test.tsx}       |    55 +-
 .../gridComponents/Chart/{Chart.jsx => Chart.tsx}  |   504 +-
 .../ChartHolder/ChartHolder.test.tsx               |     5 +-
 .../gridComponents/ChartHolder/ChartHolder.tsx     |    14 +-
 .../Column/{Column.test.jsx => Column.test.tsx}    |    70 +-
 .../Column/{Column.jsx => Column.tsx}              |   132 +-
 .../gridComponents/Divider/Divider.test.tsx        |     6 +-
 .../DynamicComponent/DynamicComponent.tsx          |     2 -
 .../gridComponents/Header/Header.test.tsx          |    26 +-
 .../gridComponents/Markdown/Markdown.test.tsx      |     8 +
 .../Markdown/{Markdown.jsx => Markdown.tsx}        |   165 +-
 .../components/gridComponents/Row/Row.test.tsx     |    73 +-
 .../components/gridComponents/Row/Row.tsx          |     2 +-
 .../components/gridComponents/Tab/Tab.test.tsx     |    27 +-
 .../gridComponents/Tab/{Tab.jsx => Tab.tsx}        |   178 +-
 .../components/gridComponents/Tabs/Tabs.test.tsx   |     7 +-
 .../gridComponents/Tabs/{Tabs.jsx => Tabs.tsx}     |   201 +-
 .../gridComponents/TabsRenderer/TabsRenderer.tsx   |     2 +-
 ...ent.test.jsx => DraggableNewComponent.test.tsx} |     2 +-
 .../new/{NewColumn.test.jsx => NewColumn.test.tsx} |     2 +-
 .../{NewDivider.test.jsx => NewDivider.test.tsx}   |     2 +-
 .../new/{NewHeader.test.jsx => NewHeader.test.tsx} |     2 +-
 .../new/{NewTabs.test.jsx => NewTabs.test.tsx}     |     2 +-
 .../menu/ShareMenuItems/ShareMenuItems.test.tsx    |     3 +-
 ...poverMenu.test.jsx => WithPopoverMenu.test.tsx} |    16 +-
 .../nativeFilters/FilterBar/FilterBar.test.tsx     |   183 +-
 .../FilterBarSettings/FilterBarSettings.test.tsx   |    23 +-
 .../FilterBar/FilterBarSettings/index.tsx          |     4 +-
 .../FilterControls/FilterControls.test.tsx         |     2 +-
 .../FilterBar/FilterControls/FilterControls.tsx    |    20 +-
 .../FilterBar/FilterControls/FilterValue.tsx       |     6 +-
 .../components/nativeFilters/FilterBar/index.tsx   |    12 +-
 .../components/nativeFilters/FilterBar/state.ts    |    16 +-
 .../components/nativeFilters/FilterBar/utils.ts    |     5 +-
 .../nativeFilters/FilterCard/FilterCard.test.tsx   |     1 -
 .../ConfigModalSidebar/ConfigModalSidebar.tsx      |    17 +-
 .../FiltersConfigModal/DraggableFilter.tsx         |     3 +-
 .../FiltersConfigModal/FilterConfigPane.test.tsx   |    12 +-
 .../FiltersConfigModal/FilterTitleContainer.tsx    |     2 +-
 .../FiltersConfigForm/FilterScope/state.ts         |    12 +-
 .../FiltersConfigForm/FilterScope/utils.test.ts    |    79 +-
 .../FiltersConfigForm/FilterScope/utils.ts         |     6 +-
 .../FiltersConfigForm/FiltersConfigForm.tsx        |    22 +-
 .../FiltersConfigForm/getControlItemsMap.test.tsx  |     5 +-
 .../FiltersConfigModal/FiltersConfigModal.test.tsx |    41 +-
 .../FiltersConfigModal/FiltersConfigModal.tsx      |    18 +-
 .../FiltersConfigModal/NativeFiltersModal.test.tsx |     1 -
 .../nativeFilters/FiltersConfigModal/utils.ts      |     7 +-
 .../components/nativeFilters/selectors.test.ts     |   425 +-
 .../components/nativeFilters/selectors.ts          |    60 +-
 .../dashboard/components/nativeFilters/state.ts    |    55 +-
 .../dashboard/components/nativeFilters/utils.ts    |     2 +-
 .../components/resizable/ResizableContainer.tsx    |     4 +-
 .../dashboard/containers/DashboardComponent.jsx    |   144 -
 .../dashboard/containers/DashboardComponent.tsx    |   187 +
 .../src/dashboard/containers/DashboardPage.tsx     |    36 +-
 .../dashboard/contexts/AutoRefreshContext.test.tsx |   137 +
 .../src/dashboard/contexts/AutoRefreshContext.tsx  |   101 +
 .../hooks/useAutoRefreshTabPause.test.tsx          |   378 +
 .../src/dashboard/hooks/useAutoRefreshTabPause.ts  |   146 +
 .../src/dashboard/hooks/useCurrentTime.test.ts     |   182 +
 .../src/dashboard/hooks/useCurrentTime.ts          |    67 +
 .../dashboard/hooks/useRealTimeDashboard.test.ts   |   175 +
 .../src/dashboard/hooks/useRealTimeDashboard.ts    |   245 +
 .../src/dashboard/hooks/useTabVisibility.test.ts   |   175 +
 .../src/dashboard/hooks/useTabVisibility.ts        |   102 +
 .../dashboard/reducers/autoRefreshReducer.test.ts  |   246 +
 ...ardFilters.test.js => dashboardFilters.test.ts} |    58 +-
 .../{dashboardFilters.js => dashboardFilters.ts}   |   110 +-
 .../{dashboardInfo.js => dashboardInfo.ts}         |   185 +-
 ...boardLayout.test.js => dashboardLayout.test.ts} |   151 +-
 .../{dashboardLayout.js => dashboardLayout.ts}     |   172 +-
 .../src/dashboard/reducers/dashboardState.js       |   342 -
 .../src/dashboard/reducers/dashboardState.test.js  |   296 -
 .../src/dashboard/reducers/dashboardState.test.ts  |   328 +-
 .../src/dashboard/reducers/dashboardState.ts       |   526 +
 ...sliceEntities.test.js => sliceEntities.test.ts} |    27 +-
 superset-frontend/src/dashboard/reducers/types.ts  |    81 -
 ...shboardLayout.js => undoableDashboardLayout.ts} |    23 +-
 superset-frontend/src/dashboard/types.ts           |   103 +-
 .../src/dashboard/types/autoRefresh.ts             |    64 +
 .../dashboard/util/buildFilterScopeTreeEntry.ts    |     6 +-
 .../src/dashboard/util/crossFilters.test.ts        |     3 +-
 .../{dnd-reorder.test.js => dnd-reorder.test.ts}   |     2 +-
 .../util/{dnd-reorder.js => dnd-reorder.ts}        |    30 +-
 .../src/dashboard/util/dropOverflowsParent.test.ts |    66 +-
 .../src/dashboard/util/dropOverflowsParent.ts      |    12 +-
 .../src/dashboard/util/extractUrlParams.test.ts    |     4 +-
 ...er.test.js => findFirstParentContainer.test.ts} |    17 +-
 .../src/dashboard/util/findParentId.test.ts        |     8 +-
 ...=> getChartAndLabelComponentIdFromPath.test.ts} |     0
 .../util/getChartIdsInFilterScope.test.ts          |    66 +-
 ...dthFromDrop.js => getComponentWidthFromDrop.ts} |    29 +-
 ...ashboardUrl.test.js => getDashboardUrl.test.ts} |    47 +-
 ...h.test.js => getDetailedComponentWidth.test.ts} |    11 +-
 ...ponentWidth.js => getDetailedComponentWidth.ts} |    37 +-
 ...ropPosition.test.js => getDropPosition.test.ts} |    17 +-
 .../{getDropPosition.js => getDropPosition.ts}     |    45 +-
 ...rs.test.js => getEffectiveExtraFilters.test.ts} |     3 +-
 ...est.js => getFilterConfigsFromFormdata.test.ts} |     3 +
 ...Formdata.js => getFilterConfigsFromFormdata.ts} |    41 +-
 ...test.js => getFilterScopeFromNodesTree.test.ts} |     5 +-
 ...NodesTree.js => getFilterScopeFromNodesTree.ts} |    75 +-
 ...copeNodesTree.js => getFilterScopeNodesTree.ts} |    77 +-
 ....test.js => getLeafComponentIdFromPath.test.ts} |     0
 .../src/dashboard/util/getOverwriteItems.ts        |     2 +-
 .../src/dashboard/util/getRelatedCharts.ts         |     4 +-
 .../src/dashboard/util/getRevertedFilterScope.ts   |    27 +-
 .../src/dashboard/util/isValidChild.test.ts        |     2 +-
 .../util/migrateChartCustomization.test.ts         |   490 +
 .../dashboard/util/migrateChartCustomization.ts    |   155 +
 ...Factory.test.js => newComponentFactory.test.ts} |     0
 ...wComponentFactory.js => newComponentFactory.ts} |    18 +-
 ...romDrop.test.js => newEntitiesFromDrop.test.ts} |    35 +-
 ...wEntitiesFromDrop.js => newEntitiesFromDrop.ts} |    15 +-
 .../src/dashboard/util/propShapes.jsx              |   129 -
 ....test.js => updateComponentParentsList.test.ts} |    24 +-
 superset-frontend/src/dataMask/reducer.ts          |    14 +-
 .../src/embedded/EmbeddedContextProviders.tsx      |     2 +-
 superset-frontend/src/embedded/utils.test.ts       |    12 +-
 superset-frontend/src/embedded/utils.ts            |    10 +-
 .../src/explore/actions/datasourcesActions.test.ts |    15 +-
 ...ploreActions.test.js => exploreActions.test.ts} |    29 +-
 .../src/explore/actions/hydrateExplore.test.ts     |    12 +-
 .../src/explore/actions/saveModalActions.test.ts   |   105 +-
 .../src/explore/actions/saveModalActions.ts        |     4 +-
 .../src/explore/components/ChartPills.tsx          |     6 +-
 .../explore/components/ControlPanelsContainer.tsx  |     3 +-
 .../CopyToClipboardButton.test.tsx                 |     8 +-
 .../explore/components/DataTableControl/index.tsx  |     7 +-
 .../components/DataTableControls.tsx               |     3 +-
 .../components/SingleQueryResultPane.tsx           |     5 +-
 .../DataTablesPane/components/useResultsPane.tsx   |     6 +-
 .../DataTablesPane/test/DataTablesPane.test.tsx    |     2 +-
 .../src/explore/components/DataTablesPane/types.ts |     1 +
 .../explore/components/DatasourcePanel/index.tsx   |     2 +-
 .../transformDatasourceFolders.test.ts             |    12 +-
 .../DatasourcePanel/transformDatasourceFolders.ts  |    71 +-
 ...eContent.test.jsx => EmbedCodeContent.test.tsx} |     7 +-
 .../{EmbedCodeContent.jsx => EmbedCodeContent.tsx} |    33 +-
 .../ExploreChartHeader/ExploreChartHeader.test.tsx |   440 +-
 .../ExploreChartHeader/{index.jsx => index.tsx}    |   117 +-
 ...rtPanel.test.jsx => ExploreChartPanel.test.tsx} |     9 +-
 .../explore/components/ExploreChartPanel/index.tsx |    11 +-
 .../ExploreViewContainer/{index.jsx => index.tsx}  |   398 +-
 .../explore/components/PropertiesModal/index.tsx   |    52 +-
 .../{SaveModal.test.jsx => SaveModal.test.tsx}     |    92 +-
 .../src/explore/components/SaveModal.tsx           |    43 +-
 .../AnnotationLayerControl/AnnotationLayer.tsx     |     4 +-
 .../controls/AnnotationLayerControl/index.tsx      |    12 +-
 .../CollectionControl/CollectionControl.test.tsx   |     2 +-
 .../controls/CollectionControl/index.tsx           |    20 +-
 .../ControlForm/ControlFormItem.tsx                |     2 +-
 .../ConditionalFormattingControl.tsx               |     5 +-
 .../FormattingPopover.tsx                          |     4 +-
 .../FormattingPopoverContent.test.tsx              |   140 +-
 .../FormattingPopoverContent.tsx                   |   272 +-
 .../ConditionalFormattingControl/constants.ts      |    72 +
 .../controls/ConditionalFormattingControl/types.ts |    25 +-
 .../CurrencyControl/CurrencyControl.test.tsx       |    29 +-
 .../controls/CurrencyControl/CurrencyControl.tsx   |    39 +-
 .../DatasourceControl/DatasourceControl.test.tsx   |    23 +-
 .../controls/DatasourceControl/index.tsx           |    22 -
 .../ColumnSelectPopover.test.tsx                   |   199 +-
 .../DndColumnSelectControl/ColumnSelectPopover.tsx |    24 +-
 .../ColumnSelectPopoverTrigger.tsx                 |    20 +-
 .../DndColumnSelectControl/useResizeButton.tsx     |     4 +-
 .../FilterControl/AdhocFilterControl/index.tsx     |    46 +-
 .../AdhocFilterEditPopover.test.tsx                |     1 +
 .../FilterControl/AdhocFilterEditPopover/index.tsx |    28 +-
 ...AdhocFilterEditPopoverSimpleTabContent.test.tsx |   108 +-
 .../AdhocFilterEditPopoverSqlTabContent/index.tsx  |     6 +-
 .../controls/FilterControl/adhocFilterType.test.ts |   104 -
 .../controls/FilterControl/adhocFilterType.ts      |    64 -
 .../components/controls/FilterControl/types.ts     |     7 -
 .../controls/FilterControl/utils/translateToSQL.ts |     7 +-
 .../controls/FixedOrMetricControl/index.tsx        |    16 +-
 .../controls/MetricControl/AdhocMetric.ts          |    54 +-
 .../AdhocMetricEditPopover.test.tsx                |   158 +
 .../MetricControl/AdhocMetricEditPopover/index.tsx |    30 +-
 .../controls/MetricControl/AdhocMetricOption.tsx   |    22 -
 .../MetricControl/FilterDefinitionOption.tsx       |    13 -
 .../MetricControl/MetricDefinitionValue.tsx        |    19 -
 .../controls/MetricControl/MetricsControl.tsx      |    20 -
 .../controls/MetricControl/adhocMetricType.ts      |    37 -
 .../controls/MetricControl/savedMetricType.test.ts |    45 -
 .../controls/MetricControl/savedMetricType.ts      |    31 -
 .../controls/SelectAsyncControl/index.tsx          |     2 +-
 .../explore/components/controls/SelectControl.tsx  |    54 +-
 .../components/controls/TextAreaControl.tsx        |    96 +-
 .../controls/TimeSeriesColumnControl/index.tsx     |    21 -
 .../explore/components/controls/ViewQueryModal.tsx |     2 +-
 .../controls/VizTypeControl/FastVizSwitcher.tsx    |     3 +-
 .../VizTypeControl/VizTypeControl.test.tsx         |     4 +-
 .../ZoomConfigControl/ZoomConfigControl.tsx        |    12 +-
 .../controls/ZoomConfigControl/zoomUtil.test.ts    |     2 +-
 .../{index.jsx => index.tsx}                       |   264 +-
 .../controlUtils/getColumnKeywords.test.tsx        |     2 +-
 .../src/explore/controlUtils/getColumnKeywords.tsx |     2 +-
 ...exploreUtils.test.jsx => exploreUtils.test.tsx} |    54 +-
 .../explore/exploreUtils/getChartDataUri.test.ts   |     8 +-
 .../src/explore/exploreUtils/getChartKey.test.ts   |     5 +-
 .../src/explore/exploreUtils/getExploreUrl.test.ts |     2 +-
 .../exploreUtils/getParsedExploreURLParams.test.ts |     2 +-
 .../exploreUtils/getSimpleSQLExpression.test.ts    |     6 -
 .../explore/exploreUtils/{index.js => index.ts}    |   203 +-
 .../src/explore/reducers/exploreReducer.js         |   375 -
 ...ploreReducer.test.js => exploreReducer.test.ts} |    27 +-
 .../src/explore/reducers/exploreReducer.ts         |   633 +
 superset-frontend/src/explore/types.ts             |     1 +
 .../src/extensions/ExtensionsContext.test.tsx      |   150 -
 .../src/extensions/ExtensionsContext.tsx           |    93 -
 .../src/extensions/ExtensionsContextUtils.test.ts  |    74 -
 .../src/extensions/ExtensionsContextUtils.ts       |    32 -
 .../src/extensions/ExtensionsList.test.tsx         |    17 -
 .../src/extensions/ExtensionsList.tsx              |    29 -
 .../src/extensions/ExtensionsLoader.test.ts        |   113 +
 .../src/extensions/ExtensionsLoader.ts             |   161 +
 .../src/extensions/ExtensionsManager.test.ts       |   568 -
 .../src/extensions/ExtensionsManager.ts            |   338 -
 .../src/extensions/ExtensionsStartup.test.tsx      |    72 +-
 .../src/extensions/ExtensionsStartup.tsx           |    51 +-
 .../src/features/alerts/AlertReportModal.test.tsx  |   310 +-
 .../src/features/alerts/AlertReportModal.tsx       |   128 +-
 superset-frontend/src/features/alerts/types.ts     |     4 +-
 .../DatabaseConnectionForm/CommonParameters.tsx    |     8 +-
 .../DatabaseConnectionForm/OAuth2ClientField.tsx   |    13 +-
 .../DatabaseConnectionForm/ValidatedInputField.tsx |     6 +-
 .../DatabaseModal/DatabaseConnectionForm/index.tsx |     3 +-
 .../databases/DatabaseModal/ExtraOptions.tsx       |     2 +-
 .../databases/DatabaseModal/SSHTunnelForm.tsx      |     8 +-
 .../src/features/databases/DatabaseModal/index.tsx |    25 +-
 .../databases/UploadDataModel/ColumnsPreview.tsx   |     2 +-
 .../UploadDataModel/UploadDataModal.test.tsx       |     6 +-
 .../features/databases/UploadDataModel/index.tsx   |     9 +-
 .../datasets/AddDataset/RightPanel/index.tsx       |     4 +-
 .../src/features/home/DashboardTable.tsx           |     4 +-
 .../src/features/home/RightMenu.test.tsx           |   107 +-
 superset-frontend/src/features/home/RightMenu.tsx  |    33 +-
 .../OwnerSelectLabel/OwnerSelectLabel.test.tsx}    |    33 +-
 .../src/features/owners/OwnerSelectLabel/index.tsx |    62 +
 .../ReportModal/HeaderReportDropdown/index.tsx     |    16 +-
 .../reports/ReportModal/ReportModal.test.tsx       |     5 +-
 .../src/features/reports/ReportModal/actions.js    |   162 -
 .../src/features/reports/ReportModal/actions.ts    |   257 +
 .../src/features/reports/ReportModal/index.tsx     |     3 +-
 .../src/features/reports/ReportModal/reducer.js    |    99 -
 .../src/features/reports/ReportModal/reducer.ts    |   159 +
 .../src/features/roles/RoleListEditModal.test.tsx  |    37 +
 .../src/features/roles/RoleListEditModal.tsx       |    12 +-
 .../src/features/tags/BulkTagModal.tsx             |     4 +-
 superset-frontend/src/features/tags/TagModal.tsx   |     6 +-
 .../src/features/tasks/TaskPayloadPopover.tsx      |    76 +
 .../src/features/tasks/TaskStackTracePopover.tsx   |   137 +
 .../src/features/tasks/TaskStatusIcon.tsx          |   145 +
 .../src/features/tasks/timeUtils.test.ts           |   145 +
 superset-frontend/src/features/tasks/timeUtils.ts  |   151 +
 superset-frontend/src/features/tasks/types.ts      |   115 +
 .../src/features/themes/ThemeModal.test.tsx        |   174 +-
 .../src/features/themes/ThemeModal.tsx             |    65 +-
 .../src/features/userInfo/UserInfoModal.tsx        |     2 +-
 .../src/features/users/UserListModal.tsx           |     2 +-
 .../components/Range/RangeFilterPlugin.test.tsx    |     8 +-
 .../filters/components/Range/RangeFilterPlugin.tsx |     2 +-
 .../src/filters/components/Range/buildQuery.ts     |     2 +-
 .../components/Select/SelectFilterPlugin.test.tsx  |   166 +-
 .../components/Select/SelectFilterPlugin.tsx       |     7 +-
 .../TimeColumn/TimeColumnFilterPlugin.tsx          |    29 +-
 .../components/TimeGrain/TimeGrainFilterPlugin.tsx |     2 +-
 superset-frontend/src/filters/utils.ts             |     1 -
 .../src/hooks/apiResources/dashboards.test.ts      |    23 +-
 .../src/hooks/apiResources/dashboards.ts           |    35 +-
 superset-frontend/src/middleware/logger.test.js    |   161 -
 superset-frontend/src/middleware/logger.test.ts    |   187 +
 .../{loggerMiddleware.js => loggerMiddleware.ts}   |    97 +-
 superset-frontend/src/pages/ActionLog/index.tsx    |    20 +-
 ...eportList.test.jsx => AlertReportList.test.tsx} |    16 +-
 .../src/pages/AlertReportList/index.tsx            |    11 +-
 ...rList.test.jsx => AnnotationLayerList.test.tsx} |    17 +-
 .../src/pages/ChartCreation/ChartCreation.test.tsx |     4 +-
 .../pages/ChartList/ChartList.cardview.test.tsx    |    45 +-
 .../pages/ChartList/ChartList.listview.test.tsx    |   193 +-
 .../pages/ChartList/ChartList.permissions.test.tsx |     2 +-
 .../src/pages/ChartList/ChartList.test.tsx         |   181 +-
 .../src/pages/ChartList/ChartList.testHelpers.tsx  |     2 +-
 superset-frontend/src/pages/ChartList/index.tsx    |   222 +-
 ...plateList.test.jsx => CssTemplateList.test.tsx} |    16 +-
 ...shboardList.test.jsx => DashboardList.test.tsx} |    22 +-
 .../src/pages/DashboardList/index.tsx              |   141 +-
 superset-frontend/src/pages/DatabaseList/index.tsx |   227 +-
 .../DatasetList/DatasetList.behavior.test.tsx      |   116 +-
 .../DatasetList/DatasetList.integration.test.tsx   |     4 +-
 .../DatasetList/DatasetList.listview.test.tsx      |   429 +-
 .../DatasetList/DatasetList.permissions.test.tsx   |   105 +-
 .../src/pages/DatasetList/DatasetList.test.tsx     |   122 +-
 .../pages/DatasetList/DatasetList.testHelpers.tsx  |    88 +-
 superset-frontend/src/pages/DatasetList/index.tsx  |   145 +-
 .../ExecutionLogList/ExecutionLogList.test.tsx     |     2 +-
 .../src/pages/ExecutionLogList/index.tsx           |    12 +-
 .../src/pages/FileHandler/index.test.tsx           |     4 +-
 .../src/pages/GroupsList/GroupsList.test.tsx       |     2 +-
 superset-frontend/src/pages/Home/Home.test.tsx     |     6 +-
 superset-frontend/src/pages/Home/index.tsx         |     2 +-
 superset-frontend/src/pages/Register/index.tsx     |     8 +-
 .../src/pages/RolesList/RolesList.test.tsx         |     8 +-
 .../RowLevelSecurityList.test.tsx                  |     2 +-
 .../src/pages/RowLevelSecurityList/index.tsx       |    80 +-
 .../pages/SavedQueryList/SavedQueryList.test.tsx   |     4 +-
 .../src/pages/SavedQueryList/index.tsx             |    14 +-
 .../src/pages/TaskList/TaskList.test.tsx           |   328 +
 superset-frontend/src/pages/TaskList/index.tsx     |   658 +
 superset-frontend/src/pages/ThemeList/index.tsx    |    18 +-
 .../src/pages/UserInfo/UserInfo.test.tsx           |     2 +-
 superset-frontend/src/pages/UserInfo/index.tsx     |    36 +-
 .../UserRegistrations/UserRegistrations.test.tsx   |     2 +-
 .../src/pages/UsersList/UsersList.test.tsx         |     6 +-
 superset-frontend/src/preamble.ts                  |   135 +-
 superset-frontend/src/setup/setupColors.ts         |     2 -
 superset-frontend/src/theme/ThemeController.ts     |   147 +-
 .../src/theme/hooks/useThemeValidation.test.ts     |   133 +
 .../src/theme/hooks/useThemeValidation.ts          |   155 +
 .../src/theme/tests/ThemeController.test.ts        |   196 +
 .../src/theme/utils/antdTokenNames.test.ts         |   108 +
 .../src/theme/utils/antdTokenNames.ts              |   115 +
 .../theme/utils/themeStructureValidation.test.ts   |   346 +
 .../src/theme/utils/themeStructureValidation.ts    |   191 +
 superset-frontend/src/types/Owner.ts               |     1 +
 superset-frontend/src/utils/assetUrl.test.ts       |     4 +-
 .../src/utils/{common.test.jsx => common.test.tsx} |    28 +-
 .../src/utils/{common.js => common.ts}             |    72 +-
 .../src/utils/getControlsForVizType.test.js        |   102 -
 superset-frontend/src/views/App.tsx                |    45 +-
 superset-frontend/src/views/CRUD/hooks.test.tsx    |   889 +-
 superset-frontend/src/views/CRUD/hooks.ts          |   137 +-
 superset-frontend/src/views/CRUD/types.ts          |     2 +-
 superset-frontend/src/views/CRUD/utils.tsx         |   144 +-
 .../src/views/RootContextProviders.tsx             |    19 +-
 superset-frontend/src/views/index.tsx              |    18 +-
 superset-frontend/src/views/menu.tsx               |     3 +-
 superset-frontend/src/views/routes.tsx             |     9 +
 .../presets/{MainPreset.js => MainPreset.ts}       |     0
 superset-frontend/tsconfig.json                    |     3 +
 superset-frontend/webpack.config.js                |    50 +-
 superset-websocket/package-lock.json               |  1060 +-
 superset-websocket/package.json                    |    21 +-
 superset-websocket/src/index.ts                    |     4 +-
 .../utils/client-ws-app/package-lock.json          |    12 +-
 superset-websocket/utils/loadtest.js               |     4 +-
 superset/app.py                                    |     5 +-
 superset/async_events/cache_backend.py             |   144 +-
 superset/charts/api.py                             |     1 +
 superset/charts/data/api.py                        |    39 +-
 superset/charts/schemas.py                         |    13 +-
 superset/commands/chart/fave.py                    |     8 -
 superset/commands/chart/unfave.py                  |     8 -
 superset/commands/dataset/update.py                |    22 +-
 superset/commands/distributed_lock/__init__.py     |    24 +
 superset/commands/distributed_lock/acquire.py      |   132 +
 superset/commands/distributed_lock/base.py         |    41 +-
 superset/commands/distributed_lock/create.py       |    64 -
 superset/commands/distributed_lock/delete.py       |    49 -
 superset/commands/distributed_lock/get.py          |    45 -
 superset/commands/distributed_lock/release.py      |    83 +
 superset/commands/explore/get.py                   |     6 +-
 superset/commands/report/exceptions.py             |    12 +
 superset/commands/report/update.py                 |    18 +-
 superset/commands/sql_lab/results.py               |     2 +-
 .../registry.py => commands/tasks/__init__.py}     |    12 +-
 superset/commands/tasks/cancel.py                  |   314 +
 superset/commands/tasks/exceptions.py              |   106 +
 superset/commands/tasks/internal_update.py         |   184 +
 superset/commands/tasks/prune.py                   |   134 +
 superset/commands/tasks/submit.py                  |   169 +
 superset/commands/tasks/update.py                  |   170 +
 superset/common/query_context_processor.py         |    16 +-
 superset/config.py                                 |   107 +-
 superset/connectors/sqla/models.py                 |     3 +-
 superset/core/api/core_api_injection.py            |    37 +-
 superset/create_pandas_semantic_layer.py           |    99 -
 superset/daos/base.py                              |    11 +-
 superset/daos/chart.py                             |     5 +-
 superset/daos/database.py                          |     6 +-
 superset/daos/dataset.py                           |    41 +-
 superset/daos/semantic_layer.py                    |     6 +
 superset/daos/tasks.py                             |   474 +
 superset/dashboards/api.py                         |    63 +-
 superset/datasets/schemas.py                       |    23 +-
 superset/db_engine_specs/base.py                   |    29 +-
 superset/db_engine_specs/bigquery.py               |     6 +-
 superset/db_engine_specs/clickhouse.py             |    22 +-
 superset/db_engine_specs/databend.py               |    21 +-
 superset/db_engine_specs/gsheets.py                |    11 +-
 superset/db_engine_specs/mysql.py                  |     4 +-
 superset/db_engine_specs/postgres.py               |     4 +-
 superset/db_engine_specs/redshift.py               |     4 +-
 superset/db_engine_specs/snowflake.py              |     4 +-
 superset/db_engine_specs/ydb.py                    |     5 +-
 superset/distributed_lock/__init__.py              |    63 +-
 superset/exceptions.py                             |    21 +-
 superset/explorables/base.py                       |    12 +
 superset/extensions/api.py                         |    35 +-
 superset/extensions/local_extensions_watcher.py    |     5 +-
 superset/extensions/utils.py                       |    64 +-
 superset/initialization/__init__.py                |    32 +-
 superset/mcp_service/CLAUDE.md                     |    37 +
 superset/mcp_service/app.py                        |    20 +-
 superset/mcp_service/auth.py                       |    18 +-
 superset/mcp_service/chart/chart_utils.py          |   125 +-
 superset/mcp_service/chart/schemas.py              |   130 +-
 superset/mcp_service/chart/tool/generate_chart.py  |   303 +-
 superset/mcp_service/chart/tool/get_chart_data.py  |   333 +-
 superset/mcp_service/chart/tool/get_chart_info.py  |   119 +-
 .../mcp_service/chart/tool/get_chart_preview.py    |   227 +-
 superset/mcp_service/chart/tool/list_charts.py     |    27 +-
 superset/mcp_service/chart/tool/update_chart.py    |    83 +-
 .../mcp_service/chart/tool/update_chart_preview.py |    23 +-
 .../chart/validation/dataset_validator.py          |   153 +-
 superset/mcp_service/chart/validation/pipeline.py  |    86 +-
 .../registry.py => mcp_service/constants.py}       |     7 +-
 .../mcp_service/dashboard/constants.py             |    34 +-
 superset/mcp_service/dashboard/schemas.py          |    56 +-
 .../tool/add_chart_to_existing_dashboard.py        |   281 +-
 .../dashboard/tool/generate_dashboard.py           |   141 +-
 .../dashboard/tool/get_dashboard_info.py           |   134 +-
 .../mcp_service/dashboard/tool/list_dashboards.py  |    25 +-
 superset/mcp_service/dataset/schemas.py            |     1 +
 .../mcp_service/dataset/tool/get_dataset_info.py   |    32 +-
 superset/mcp_service/dataset/tool/list_datasets.py |    28 +-
 .../explore/tool/generate_explore_link.py          |    33 +-
 superset/mcp_service/jwt_verifier.py               |   320 +
 superset/mcp_service/mcp_config.py                 |   117 +-
 superset/mcp_service/mcp_core.py                   |    24 +-
 superset/mcp_service/middleware.py                 |   288 +-
 superset/mcp_service/server.py                     |    62 +-
 superset/mcp_service/sql_lab/tool/execute_sql.py   |    67 +-
 .../sql_lab/tool/open_sql_lab_with_context.py      |     6 +-
 superset/mcp_service/system/schemas.py             |    29 +
 superset/mcp_service/system/system_utils.py        |    29 +
 .../mcp_service/system/tool/get_instance_info.py   |    22 +-
 superset/mcp_service/system/tool/get_schema.py     |     6 +-
 superset/mcp_service/system/tool/health_check.py   |     8 +-
 superset/mcp_service/utils/schema_utils.py         |     6 +-
 superset/mcp_service/utils/token_utils.py          |   424 +
 ...6_33d7e0e21daa_add_semantic_layers_and_views.py |     3 +-
 .../versions/2025_12_18_0220_create_tasks_table.py |   221 +
 superset/models/core.py                            |     5 +-
 superset/models/dashboard.py                       |    32 +-
 superset/models/helpers.py                         |    17 +-
 superset/models/slice.py                           |    25 +-
 superset/models/sql_types/__init__.py              |     7 +
 superset/models/sql_types/base.py                  |   106 +
 superset/models/task_subscribers.py                |    62 +
 superset/models/tasks.py                           |   358 +
 superset/reports/api.py                            |     7 +
 superset/reports/schemas.py                        |     2 +-
 superset/security/api.py                           |    10 +-
 superset/security/manager.py                       |   125 +-
 superset/semantic_layers/mapper.py                 |    20 +-
 superset/semantic_layers/models.py                 |    17 +-
 superset/semantic_layers/registry.py               |     4 +-
 superset/sql/dialects/pinot.py                     |     2 +
 superset/sql/execution/celery_task.py              |     5 +-
 superset/sql/execution/executor.py                 |    41 +-
 superset/sql/parse.py                              |    50 +-
 superset/sql_lab.py                                |    15 +
 superset/sqllab/utils.py                           |     3 +
 superset/tasks/ambient_context.py                  |    87 +
 superset/tasks/api.py                              |   471 +
 superset/tasks/constants.py                        |    54 +
 superset/tasks/context.py                          |   673 +
 superset/tasks/decorators.py                       |   607 +
 superset/tasks/filters.py                          |    63 +
 superset/tasks/locks.py                            |    81 +
 superset/tasks/manager.py                          |   761 +
 superset/tasks/registry.py                         |   110 +
 superset/tasks/scheduler.py                        |   257 +
 superset/tasks/schemas.py                          |   204 +
 superset/tasks/types.py                            |     2 +
 superset/tasks/utils.py                            |   176 +-
 superset/thumbnails/digest.py                      |    15 +-
 superset/translations/ar/LC_MESSAGES/messages.po   |  3274 +-
 superset/translations/ca/LC_MESSAGES/messages.po   |  5178 +-
 superset/translations/de/LC_MESSAGES/messages.po   |  3272 +-
 superset/translations/en/LC_MESSAGES/messages.po   |  2621 +-
 superset/translations/es/LC_MESSAGES/messages.po   |  5661 +-
 superset/translations/fa/LC_MESSAGES/messages.po   |  3266 +-
 superset/translations/fr/LC_MESSAGES/messages.po   |  1540 +-
 superset/translations/it/LC_MESSAGES/messages.po   |  3155 +-
 superset/translations/ja/LC_MESSAGES/messages.po   |  3245 +-
 superset/translations/ko/LC_MESSAGES/messages.po   |  3105 +-
 superset/translations/messages.pot                 |  2615 +-
 superset/translations/mi/LC_MESSAGES/messages.po   |  6248 +-
 superset/translations/nl/LC_MESSAGES/messages.po   |  3280 +-
 superset/translations/pl/LC_MESSAGES/messages.po   |  3303 +-
 superset/translations/pt/LC_MESSAGES/messages.po   |  3188 +-
 .../translations/pt_BR/LC_MESSAGES/messages.po     |  3291 +-
 superset/translations/ru/LC_MESSAGES/messages.po   |  4670 +-
 superset/translations/sk/LC_MESSAGES/messages.po   |  2829 +-
 superset/translations/sl/LC_MESSAGES/messages.po   |  3254 +-
 superset/translations/tr/LC_MESSAGES/messages.po   |  3077 +-
 superset/translations/uk/LC_MESSAGES/messages.po   |  3296 +-
 superset/translations/zh/LC_MESSAGES/messages.po   |  3252 +-
 .../translations/zh_TW/LC_MESSAGES/messages.po     |  3255 +-
 superset/utils/cache_manager.py                    |    55 +-
 superset/utils/dates.py                            |     2 +-
 superset/utils/encrypt.py                          |     2 +-
 superset/utils/log.py                              |     5 +-
 superset/utils/logging_configurator.py             |     7 +
 superset/utils/oauth2.py                           |    10 +-
 superset/utils/pandas_postprocessing/resample.py   |     2 +-
 superset/utils/webdriver.py                        |    32 +-
 superset/views/base.py                             |     7 +-
 .../utils.py => superset/views/tasks.py            |    34 +-
 superset/views/utils.py                            |     4 +-
 superset/viz.py                                    |    12 +-
 tests/integration_tests/charts/api_tests.py        |     1 +
 tests/integration_tests/charts/commands_tests.py   |    17 +-
 tests/integration_tests/charts/data/api_tests.py   |    42 +
 tests/integration_tests/dashboards/api_tests.py    |    81 +
 tests/integration_tests/datasets/api_tests.py      |     2 +-
 tests/integration_tests/model_tests.py             |     2 +-
 tests/integration_tests/reports/api_tests.py       |   314 +-
 tests/integration_tests/security/api_tests.py      |   111 +-
 tests/integration_tests/superset_test_config.py    |     1 +
 tests/integration_tests/tasks/api_tests.py         |   538 +
 .../integration_tests/tasks/commands}/__init__.py  |     0
 .../tasks/commands/test_cancel.py                  |   494 +
 .../tasks/commands/test_internal_update.py         |   419 +
 .../integration_tests/tasks/commands/test_prune.py |   258 +
 .../tasks/commands/test_submit.py                  |   235 +
 .../tasks/commands/test_update.py                  |   260 +
 .../integration_tests/tasks/test_event_handlers.py |   415 +
 .../tasks/test_subscription_visibility.py          |   224 +
 .../integration_tests/tasks/test_sync_join_wait.py |   142 +
 tests/integration_tests/tasks/test_throttling.py   |   172 +
 tests/integration_tests/tasks/test_timeout.py      |   226 +
 .../test_subdirectory_deployments.py               |    56 +
 tests/integration_tests/utils/encrypt_tests.py     |    76 +-
 tests/unit_tests/commands/dataset/update_test.py   |    35 +-
 .../commands/importers/v1/examples_test.py         |   133 +-
 .../unit_tests/commands/report}/__init__.py        |     0
 tests/unit_tests/commands/report/update_test.py    |   254 +
 .../common/test_query_context_processor.py         |    72 +-
 tests/unit_tests/daos/test_tasks.py                |   503 +
 tests/unit_tests/dashboards/api_test.py            |    99 +
 .../databases/commands/importers/v1/import_test.py |    33 +
 tests/unit_tests/datasets/schema_tests.py          |    56 +
 tests/unit_tests/db_engine_specs/test_base.py      |    45 +
 .../unit_tests/db_engine_specs/test_clickhouse.py  |    17 -
 tests/unit_tests/db_engine_specs/test_gsheets.py   |    20 +
 .../distributed_lock/distributed_lock_tests.py     |   158 +-
 .../api => tests/unit_tests/examples}/__init__.py  |     0
 tests/unit_tests/examples/data_loading_test.py     |   204 +
 tests/unit_tests/examples/generic_loader_test.py   |   233 +
 tests/unit_tests/examples/utils_test.py            |   206 +
 tests/unit_tests/extensions/test_types.py          |   162 +-
 tests/unit_tests/initialization_test.py            |    72 +-
 .../mcp_service/chart/test_chart_utils.py          |   268 +-
 .../mcp_service/chart/tool/test_get_chart_data.py  |   437 +-
 .../chart/tool/test_get_chart_preview.py           |     1 -
 .../mcp_service/chart/tool/test_list_charts.py     |     4 +-
 .../validation/test_column_name_normalization.py   |   681 +
 .../dashboard/tool/test_dashboard_generation.py    |   399 +-
 .../mcp_service/dataset/tool/test_dataset_tools.py |    46 +
 .../explore/tool/test_generate_explore_link.py     |   149 +
 .../mcp_service/sql_lab/tool/test_execute_sql.py   |   138 +-
 .../mcp_service/system/test_system_utils.py        |    60 +
 .../system/tool/test_get_current_user.py           |   365 +
 .../mcp_service/system/tool/test_get_schema.py     |     8 +-
 .../mcp_service/system/tool/test_mcp_core.py       |     4 +-
 tests/unit_tests/mcp_service/test_jwt_verifier.py  |   726 +
 tests/unit_tests/mcp_service/test_mcp_config.py    |     9 +
 tests/unit_tests/mcp_service/test_middleware.py    |   343 +
 .../mcp_service/test_middleware_logging.py         |   207 +
 .../mcp_service/utils/test_schema_utils.py         |    11 +
 .../mcp_service/utils/test_token_utils.py          |   358 +
 tests/unit_tests/models/helpers_test.py            |    40 +
 .../unit_tests/models/sql_types}/__init__.py       |     0
 .../models/sql_types/currency_type_test.py         |   129 +
 tests/unit_tests/security/manager_test.py          |   247 +
 tests/unit_tests/semantic_layers/api_test.py       |    17 +
 tests/unit_tests/semantic_layers/mapper_test.py    |    33 +-
 tests/unit_tests/semantic_layers/models_test.py    |   137 +-
 tests/unit_tests/sql/execution/test_executor.py    |    73 +-
 tests/unit_tests/sql/parse_tests.py                |    50 +
 tests/unit_tests/tasks/test_decorators.py          |   477 +
 tests/unit_tests/tasks/test_handlers.py            |   677 +
 tests/unit_tests/tasks/test_manager.py             |   457 +
 tests/unit_tests/tasks/test_timeout.py             |   612 +
 tests/unit_tests/tasks/test_utils.py               |   249 +
 tests/unit_tests/thumbnails/test_digest.py         |   115 +-
 tests/unit_tests/utils/json_tests.py               |     8 +-
 tests/unit_tests/utils/oauth2_tests.py             |     6 +-
 1704 files changed, 187648 insertions(+), 112813 deletions(-)
 delete mode 100644 .github/workflows/prefer-typescript.yml
 delete mode 100644 .github/workflows/superset-applitool-cypress.yml
 delete mode 100644 .github/workflows/superset-applitools-storybook.yml
 rename docs/{docs => admin_docs}/configuration/alerts-reports.mdx (96%)
 rename docs/{docs => admin_docs}/configuration/async-queries-celery.mdx (100%)
 rename docs/{docs => admin_docs}/configuration/cache.mdx (63%)
 rename docs/{docs => admin_docs}/configuration/configuring-superset.mdx (97%)
 rename docs/{docs => admin_docs}/configuration/country-map-tools.mdx (100%)
 rename docs/{docs => admin_docs}/configuration/event-logging.mdx (100%)
 rename docs/{docs => admin_docs}/configuration/feature-flags.mdx (100%)
 rename docs/{docs => admin_docs}/configuration/importing-exporting-datasources.mdx (100%)
 rename docs/{docs => admin_docs}/configuration/map-tiles.mdx (100%)
 rename docs/{docs => admin_docs}/configuration/networking-settings.mdx (86%)
 rename docs/{docs => admin_docs}/configuration/sql-templating.mdx (98%)
 rename docs/{docs => admin_docs}/configuration/theming.mdx (100%)
 rename docs/{docs => admin_docs}/configuration/timezones.mdx (74%)
 create mode 100644 docs/admin_docs/index.md
 rename docs/{docs => admin_docs}/installation/architecture.mdx (85%)
 rename docs/{docs => admin_docs}/installation/docker-builds.mdx (100%)
 rename docs/{docs => admin_docs}/installation/docker-compose.mdx (98%)
 rename docs/{docs => admin_docs}/installation/installation-methods.mdx (90%)
 rename docs/{docs => admin_docs}/installation/kubernetes.mdx (98%)
 rename docs/{docs => admin_docs}/installation/pypi.mdx (97%)
 rename docs/{docs => admin_docs}/installation/upgrading-superset.mdx (100%)
 rename docs/{docs => admin_docs}/security/cves.mdx (91%)
 rename docs/{docs => admin_docs}/security/securing_superset.mdx (98%)
 rename docs/{docs => admin_docs}/security/security.mdx (99%)
 rename docs/{docs => developer_docs}/api.mdx (100%)
 create mode 100644 docs/developer_docs/components/TODO.md
 create mode 100644 docs/developer_docs/components/design-system/dropdowncontainer.mdx
 create mode 100644 docs/developer_docs/components/design-system/flex.mdx
 create mode 100644 docs/developer_docs/components/design-system/grid.mdx
 create mode 100644 docs/developer_docs/components/design-system/index.mdx
 create mode 100644 docs/developer_docs/components/design-system/layout.mdx
 create mode 100644 docs/developer_docs/components/design-system/metadatabar.mdx
 create mode 100644 docs/developer_docs/components/design-system/space.mdx
 create mode 100644 docs/developer_docs/components/design-system/table.mdx
 create mode 100644 docs/developer_docs/components/index.mdx
 create mode 100644 docs/developer_docs/components/ui/autocomplete.mdx
 create mode 100644 docs/developer_docs/components/ui/avatar.mdx
 create mode 100644 docs/developer_docs/components/ui/badge.mdx
 create mode 100644 docs/developer_docs/components/ui/breadcrumb.mdx
 create mode 100644 docs/developer_docs/components/ui/button.mdx
 create mode 100644 docs/developer_docs/components/ui/buttongroup.mdx
 create mode 100644 docs/developer_docs/components/ui/cachedlabel.mdx
 create mode 100644 docs/developer_docs/components/ui/card.mdx
 create mode 100644 docs/developer_docs/components/ui/checkbox.mdx
 create mode 100644 docs/developer_docs/components/ui/collapse.mdx
 create mode 100644 docs/developer_docs/components/ui/datepicker.mdx
 create mode 100644 docs/developer_docs/components/ui/divider.mdx
 create mode 100644 docs/developer_docs/components/ui/editabletitle.mdx
 create mode 100644 docs/developer_docs/components/ui/emptystate.mdx
 create mode 100644 docs/developer_docs/components/ui/favestar.mdx
 create mode 100644 docs/developer_docs/components/ui/iconbutton.mdx
 create mode 100644 docs/developer_docs/components/ui/icons.mdx
 create mode 100644 docs/developer_docs/components/ui/icontooltip.mdx
 create mode 100644 docs/developer_docs/components/ui/index.mdx
 create mode 100644 docs/developer_docs/components/ui/infotooltip.mdx
 create mode 100644 docs/developer_docs/components/ui/input.mdx
 create mode 100644 docs/developer_docs/components/ui/label.mdx
 create mode 100644 docs/developer_docs/components/ui/list.mdx
 create mode 100644 docs/developer_docs/components/ui/listviewcard.mdx
 create mode 100644 docs/developer_docs/components/ui/loading.mdx
 create mode 100644 docs/developer_docs/components/ui/menu.mdx
 create mode 100644 docs/developer_docs/components/ui/modal.mdx
 create mode 100644 docs/developer_docs/components/ui/modaltrigger.mdx
 create mode 100644 docs/developer_docs/components/ui/popover.mdx
 create mode 100644 docs/developer_docs/components/ui/progressbar.mdx
 create mode 100644 docs/developer_docs/components/ui/radio.mdx
 create mode 100644 docs/developer_docs/components/ui/safemarkdown.mdx
 create mode 100644 docs/developer_docs/components/ui/select.mdx
 create mode 100644 docs/developer_docs/components/ui/skeleton.mdx
 create mode 100644 docs/developer_docs/components/ui/slider.mdx
 create mode 100644 docs/developer_docs/components/ui/steps.mdx
 create mode 100644 docs/developer_docs/components/ui/switch.mdx
 create mode 100644 docs/developer_docs/components/ui/tablecollection.mdx
 create mode 100644 docs/developer_docs/components/ui/tableview.mdx
 create mode 100644 docs/developer_docs/components/ui/tabs.mdx
 create mode 100644 docs/developer_docs/components/ui/timer.mdx
 create mode 100644 docs/developer_docs/components/ui/tooltip.mdx
 create mode 100644 docs/developer_docs/components/ui/tree.mdx
 create mode 100644 docs/developer_docs/components/ui/treeselect.mdx
 create mode 100644 docs/developer_docs/components/ui/typography.mdx
 create mode 100644 docs/developer_docs/components/ui/unsavedchangesmodal.mdx
 create mode 100644 docs/developer_docs/components/ui/upload.mdx
 rename docs/{developer_portal => developer_docs}/contributing/code-review.md (100%)
 rename docs/{developer_portal => developer_docs}/contributing/development-setup.md (99%)
 rename docs/{developer_portal => developer_docs}/contributing/guidelines.md (100%)
 rename docs/{developer_portal => developer_docs}/contributing/howtos.md (91%)
 rename docs/{developer_portal => developer_docs}/contributing/issue-reporting.md (100%)
 rename docs/{developer_portal => developer_docs}/contributing/overview.md (100%)
 rename docs/{docs => developer_docs}/contributing/pkg-resources-migration.md (61%)
 rename docs/{developer_portal => developer_docs}/contributing/release-process.md (100%)
 rename docs/{developer_portal => developer_docs}/contributing/resources.md (95%)
 rename docs/{developer_portal => developer_docs}/contributing/submitting-pr.md (100%)
 rename docs/{developer_portal => developer_docs}/extensions/architecture.md (92%)
 create mode 100644 docs/developer_docs/extensions/components/alert.mdx
 create mode 100644 docs/developer_docs/extensions/components/index.mdx
 rename docs/{developer_portal => developer_docs}/extensions/contribution-types.md (55%)
 rename docs/{developer_portal => developer_docs}/extensions/dependencies.md (100%)
 rename docs/{developer_portal => developer_docs}/extensions/deployment.md (100%)
 rename docs/{developer_portal => developer_docs}/extensions/development.md (79%)
 rename docs/{developer_portal => developer_docs}/extensions/extension-points/editors.md (98%)
 rename docs/{developer_portal => developer_docs}/extensions/extension-points/sqllab.md (60%)
 rename docs/{developer_portal => developer_docs}/extensions/mcp.md (100%)
 rename docs/{developer_portal => developer_docs}/extensions/overview.md (97%)
 rename docs/{developer_portal => developer_docs}/extensions/quick-start.md (74%)
 rename docs/{developer_portal => developer_docs}/extensions/registry.md (99%)
 rename docs/{developer_portal => developer_docs}/extensions/security.md (100%)
 create mode 100644 docs/developer_docs/extensions/tasks.md
 rename docs/{developer_portal => developer_docs}/guidelines/backend-style-guidelines.md (100%)
 rename docs/{developer_portal => developer_docs}/guidelines/backend/dao-style-guidelines.md (100%)
 rename docs/{developer_portal => developer_docs}/guidelines/design-guidelines.md (100%)
 rename docs/{developer_portal => developer_docs}/guidelines/frontend-style-guidelines.md (95%)
 rename docs/{developer_portal => developer_docs}/guidelines/frontend/component-style-guidelines.md (100%)
 rename docs/{developer_portal => developer_docs}/guidelines/frontend/emotion-styling-guidelines.md (100%)
 rename docs/{developer_portal => developer_docs}/index.md (72%)
 rename docs/{developer_portal => developer_docs}/sidebars.js (98%)
 rename docs/{developer_portal => developer_docs}/testing/backend-testing.md (100%)
 rename docs/{developer_portal => developer_docs}/testing/ci-cd.md (100%)
 rename docs/{developer_portal => developer_docs}/testing/e2e-testing.md (100%)
 rename docs/{developer_portal => developer_docs}/testing/frontend-testing.md (100%)
 rename docs/{developer_portal => developer_docs}/testing/overview.md (98%)
 rename docs/{developer_portal => developer_docs}/testing/storybook.md (100%)
 rename docs/{developer_portal => developer_docs}/testing/testing-guidelines.md (100%)
 rename docs/{developer_portal => developer_docs}/versions.json (100%)
 delete mode 100644 docs/docs/contributing/contributing.mdx
 delete mode 100644 docs/docs/contributing/development.mdx
 delete mode 100644 docs/docs/contributing/guidelines.mdx
 delete mode 100644 docs/docs/contributing/howtos.mdx
 delete mode 100644 docs/docs/contributing/misc.mdx
 delete mode 100644 docs/docs/contributing/resources.mdx
 create mode 100644 docs/docs/index.mdx
 create mode 100644 docs/docs/using-superset/sql-templating.mdx
 create mode 100644 docs/plugins/remark-tech-article-schema.mjs
 create mode 100644 docs/plugins/robots-txt-plugin.js
 copy docs/{sidebars.js => sidebarAdminDocs.js} (52%)
 create mode 100644 docs/src/components/FAQSchema.tsx
 create mode 100644 docs/src/components/TechArticleSchema.tsx
 create mode 100644 docs/src/components/databases/DatabaseLogoWall.tsx
 delete mode 100644 docs/static/img/applitools.png
 create mode 100644 docs/static/img/superset-og-image.png
 create mode 100644 superset-core/src/superset_core/api/tasks.py
 copy superset/utils/dates.py => superset-core/src/superset_core/extensions/constants.py (52%)
 copy superset/models/sql_types/__init__.py => superset-extensions-cli/src/superset_extensions_cli/exceptions.py (88%)
 create mode 100644 superset-extensions-cli/src/superset_extensions_cli/types.py
 create mode 100644 superset-extensions-cli/tests/test_name_transformations.py
 rename superset-frontend/{packages/superset-ui-demo/storybook/shared/components => .storybook/shared}/ErrorMessage.tsx (100%)
 rename superset-frontend/{packages/superset-ui-demo/storybook/shared/components => .storybook/shared}/Expandable.tsx (100%)
 rename superset-frontend/{packages/superset-ui-demo/storybook/shared/components => .storybook/shared}/ResizableChartDemo.tsx (91%)
 rename superset-frontend/{packages/superset-ui-demo/storybook/shared/components => .storybook/shared}/ResizablePanel.tsx (81%)
 rename superset-frontend/{packages/superset-ui-demo/storybook/shared/components => .storybook/shared}/VerifyCORS.tsx (100%)
 rename superset-frontend/{packages/superset-ui-demo/storybook/shared/components/createQuery.story.tsx => .storybook/shared/createQueryStory.tsx} (98%)
 rename superset-frontend/{packages/superset-ui-demo/storybook => .storybook}/shared/dummyDatasource.ts (100%)
 copy superset-frontend/{packages/generator-superset/test/app.test.js => .storybook/shared/index.ts} (60%)
 delete mode 100644 superset-frontend/.swcrc
 delete mode 100644 superset-frontend/applitools.config.js
 delete mode 100644 superset-frontend/cypress-base/applitools.config.js
 delete mode 100644 superset-frontend/cypress-base/cypress/applitools/chartlist.test.ts
 delete mode 100644 superset-frontend/cypress-base/cypress/applitools/dashboard.test.ts
 delete mode 100644 superset-frontend/cypress-base/cypress/applitools/dashboardlist.test.ts
 delete mode 100644 superset-frontend/cypress-base/cypress/e2e/chart_list/_skip.filter.test.ts
 rename superset-frontend/eslint-rules/eslint-plugin-i18n-strings/{index.js => index.ts} (50%)
 rename superset-frontend/eslint-rules/eslint-plugin-i18n-strings/{no-template-vars.test.js => no-template-vars.test.ts} (88%)
 rename superset-frontend/eslint-rules/eslint-plugin-icons/{index.js => index.ts} (55%)
 rename superset-frontend/eslint-rules/eslint-plugin-icons/{no-fontawesome.test.js => no-fontawesome.test.ts} (83%)
 rename superset-frontend/eslint-rules/eslint-plugin-theme-colors/{colors.js => colors.ts} (97%)
 delete mode 100644 superset-frontend/eslint-rules/eslint-plugin-theme-colors/index.js
 create mode 100644 superset-frontend/eslint-rules/eslint-plugin-theme-colors/index.ts
 rename superset-frontend/packages/generator-superset/test/{app.test.js => app.test.ts} (92%)
 rename superset-frontend/packages/generator-superset/test/{plugin-chart.test.js => plugin-chart.test.ts} (89%)
 create mode 100644 superset-frontend/packages/superset-core/src/api/menus.ts
 create mode 100644 superset-frontend/packages/superset-core/src/api/views.ts
 create mode 100644 superset-frontend/packages/superset-core/src/utils/isBlank.test.ts
 copy superset-frontend/{src/types/Owner.ts => packages/superset-core/src/utils/isBlank.ts} (73%)
 create mode 100644 superset-frontend/packages/superset-ui-chart-controls/test/shared-controls/components/RadioButtonControl.test.tsx
 rename superset-frontend/packages/{superset-ui-demo/storybook/stories/superset-ui-chart => superset-ui-core/src/chart/stories}/ChartDataProvider.stories.tsx (96%)
 rename superset-frontend/packages/{superset-ui-demo/storybook/stories/superset-ui-chart => superset-ui-core/src/chart/stories}/SuperChart.stories.tsx (98%)
 rename superset-frontend/packages/{superset-ui-demo/storybook/stories/superset-ui-color => superset-ui-core/src/color/stories}/ColorPalettes.stories.tsx (100%)
 rename superset-frontend/packages/{superset-ui-demo/storybook/stories/superset-ui-color => superset-ui-core/src/color/stories}/RenderPalettes.tsx (100%)
 rename superset-frontend/packages/{superset-ui-demo/storybook/stories/superset-ui-color => superset-ui-core/src/color/stories}/color-styles.css (87%)
 create mode 100644 superset-frontend/packages/superset-ui-core/src/components/CachedLabel/CachedLabel.stories.tsx
 rename superset-frontend/packages/superset-ui-core/src/components/Form/{LabeledErrorBoundInput.test.jsx => LabeledErrorBoundInput.test.tsx} (83%)
 rename superset-frontend/packages/superset-ui-core/src/components/IconTooltip/{IconTooltip.test.jsx => IconTooltip.test.tsx} (100%)
 create mode 100644 superset-frontend/packages/superset-ui-core/src/components/SafeMarkdown/SafeMarkdown.stories.tsx
 create mode 100644 superset-frontend/packages/superset-ui-core/src/components/TableCollection/TableCollection.stories.tsx
 rename superset-frontend/packages/{superset-ui-demo/storybook/stories/superset-ui-connection => superset-ui-core/src/connection/stories}/Connection.stories.tsx (92%)
 rename superset-frontend/packages/{superset-ui-demo/storybook/stories/superset-ui-number-format => superset-ui-core/src/number-format/stories}/NumberFormat.stories.tsx (100%)
 rename superset-frontend/packages/{superset-ui-demo/storybook/stories/superset-ui-theme => superset-ui-core/src/style/stories}/Theme.stories.tsx (100%)
 rename superset-frontend/packages/{superset-ui-demo/storybook/stories/superset-ui-time-format => superset-ui-core/src/time-format/stories}/TimeFormat.stories.tsx (100%)
 delete mode 100644 superset-frontend/packages/superset-ui-demo/.babelrc.json
 delete mode 100644 superset-frontend/packages/superset-ui-demo/.storybook/main.js
 delete mode 100644 superset-frontend/packages/superset-ui-demo/.storybook/preview.js
 delete mode 100644 superset-frontend/packages/superset-ui-demo/.storybook/storybook.css
 delete mode 100644 superset-frontend/packages/superset-ui-demo/.storybook/themeDecorator.jsx
 delete mode 100644 superset-frontend/packages/superset-ui-demo/CHANGELOG.md
 delete mode 100644 superset-frontend/packages/superset-ui-demo/README.md
 delete mode 100644 superset-frontend/packages/superset-ui-demo/package.json
 delete mode 100644 superset-frontend/packages/superset-ui-demo/storybook/stories/ExampleApp.stories.jsx
 delete mode 100644 superset-frontend/packages/superset-ui-demo/storybook/stories/plugins/legacy-plugin-chart-calendar/LegacyPluginChartCalendar.stories.tsx
 delete mode 100644 superset-frontend/packages/superset-ui-demo/storybook/stories/plugins/legacy-plugin-chart-map-box/MapBox.stories.tsx
 delete mode 100644 superset-frontend/packages/superset-ui-demo/storybook/stories/plugins/legacy-plugin-chart-partition/Partition.stories.tsx
 delete mode 100644 superset-frontend/packages/superset-ui-demo/storybook/stories/plugins/legacy-plugin-chart-rose/Rose.stories.tsx
 delete mode 100644 superset-frontend/packages/superset-ui-demo/storybook/stories/plugins/legacy-preset-chart-deckgl/Arc/payload.js
 delete mode 100644 superset-frontend/packages/superset-ui-demo/storybook/stories/plugins/legacy-preset-chart-deckgl/Grid/payload.js
 delete mode 100644 superset-frontend/packages/superset-ui-demo/storybook/stories/plugins/legacy-preset-chart-deckgl/Hex/payload.js
 delete mode 100644 superset-frontend/packages/superset-ui-demo/storybook/stories/plugins/legacy-preset-chart-deckgl/Path/payload.js
 delete mode 100644 superset-frontend/packages/superset-ui-demo/storybook/stories/plugins/legacy-preset-chart-deckgl/Polygon/geojsonPayload.js
 delete mode 100644 superset-frontend/packages/superset-ui-demo/storybook/stories/plugins/legacy-preset-chart-deckgl/Polygon/payload.js
 delete mode 100644 superset-frontend/packages/superset-ui-demo/storybook/stories/plugins/legacy-preset-chart-deckgl/Scatter/payload.js
 delete mode 100644 superset-frontend/packages/superset-ui-demo/storybook/stories/plugins/legacy-preset-chart-deckgl/Screengrid/payload.js
 delete mode 100644 superset-frontend/packages/superset-ui-demo/storybook/stories/plugins/legacy-preset-chart-nvd3/BoxPlot/NVD3BoxPlot.stories.tsx
 delete mode 100644 superset-frontend/packages/superset-ui-demo/storybook/stories/plugins/legacy-preset-chart-nvd3/BoxPlot/data.ts
 delete mode 100644 superset-frontend/packages/superset-ui-demo/storybook/stories/plugins/legacy-preset-chart-nvd3/BoxPlot/stories/basic.tsx
 delete mode 100644 superset-frontend/packages/superset-ui-demo/storybook/stories/plugins/legacy-preset-chart-nvd3/Bubble/NVD3Bubble.stories.tsx
 delete mode 100644 superset-frontend/packages/superset-ui-demo/storybook/stories/plugins/legacy-preset-chart-nvd3/Bubble/stories/basic.tsx
 delete mode 100644 superset-frontend/packages/superset-ui-demo/storybook/stories/plugins/legacy-preset-chart-nvd3/Bullet/NVD3Bullet.stories.tsx
 delete mode 100644 superset-frontend/packages/superset-ui-demo/storybook/stories/plugins/legacy-preset-chart-nvd3/Bullet/stories/basic.tsx
 delete mode 100644 superset-frontend/packages/superset-ui-demo/storybook/stories/plugins/legacy-preset-chart-nvd3/Compare/NVD3Compare.stories.tsx
 delete mode 100644 superset-frontend/packages/superset-ui-demo/storybook/stories/plugins/legacy-preset-chart-nvd3/Compare/stories/basic.tsx
 delete mode 100644 superset-frontend/packages/superset-ui-demo/storybook/stories/plugins/legacy-preset-chart-nvd3/Compare/stories/timeFormat.tsx
 delete mode 100644 superset-frontend/packages/superset-ui-demo/storybook/stories/plugins/plugin-chart-echarts/Gauge/Gauge.stories.tsx
 delete mode 100644 superset-frontend/packages/superset-ui-demo/storybook/stories/plugins/plugin-chart-echarts/Graph/Graph.stories.tsx
 delete mode 100644 superset-frontend/packages/superset-ui-demo/storybook/stories/plugins/plugin-chart-pivot-table/PivotTable.stories.tsx
 delete mode 100644 superset-frontend/packages/superset-ui-demo/storybook/stories/plugins/plugin-chart-table/birthNames.json
 delete mode 100644 superset-frontend/packages/superset-ui-demo/storybook/stories/plugins/plugin-chart-word-cloud/WordCloud.stories.tsx
 delete mode 100644 superset-frontend/packages/superset-ui-demo/tsconfig.json
 create mode 100644 superset-frontend/playwright/components/modals/ChartPropertiesModal.ts
 create mode 100644 superset-frontend/playwright/helpers/api/chart.ts
 create mode 100644 superset-frontend/playwright/pages/ChartListPage.ts
 create mode 100644 superset-frontend/playwright/tests/experimental/chart/chart-list.spec.ts
 create mode 100644 superset-frontend/playwright/tests/experimental/chart/chart-test-helpers.ts
 rename superset-frontend/plugins/legacy-plugin-chart-calendar/src/{Calendar.js => Calendar.ts} (62%)
 rename superset-frontend/plugins/legacy-plugin-chart-calendar/src/{ReactCalendar.jsx => ReactCalendar.tsx} (91%)
 rename superset-frontend/plugins/legacy-plugin-chart-calendar/src/{index.js => index.ts} (100%)
 create mode 100644 superset-frontend/plugins/legacy-plugin-chart-calendar/src/stories/LegacyPluginChartCalendar.stories.tsx
 rename superset-frontend/{packages/superset-ui-demo/storybook/stories/plugins/legacy-plugin-chart-calendar => plugins/legacy-plugin-chart-calendar/src/stories}/data.ts (100%)
 rename superset-frontend/plugins/legacy-plugin-chart-calendar/src/{transformProps.js => transformProps.ts} (87%)
 rename superset-frontend/plugins/legacy-plugin-chart-calendar/src/vendor/{cal-heatmap.js => cal-heatmap.ts} (99%)
 copy superset-frontend/plugins/{legacy-plugin-chart-parallel-coordinates/types/d3-parcoords.d.ts => legacy-plugin-chart-calendar/types/external.d.ts} (84%)
 rename superset-frontend/plugins/legacy-plugin-chart-chord/src/{Chord.js => Chord.ts} (76%)
 rename superset-frontend/plugins/legacy-plugin-chart-chord/src/{ReactChord.jsx => ReactChord.tsx} (73%)
 rename superset-frontend/plugins/legacy-plugin-chart-chord/src/{index.js => index.ts} (100%)
 rename superset-frontend/{packages/superset-ui-demo/storybook/stories/plugins/legacy-plugin-chart-chord => plugins/legacy-plugin-chart-chord/src/stories}/LegacyPluginChartChord.stories.tsx (59%)
 rename superset-frontend/{packages/superset-ui-demo/storybook/stories/plugins/legacy-plugin-chart-chord => plugins/legacy-plugin-chart-chord/src/stories}/data.ts (89%)
 rename superset-frontend/plugins/legacy-plugin-chart-chord/src/{transformProps.js => transformProps.ts} (90%)
 copy superset-frontend/plugins/{legacy-plugin-chart-parallel-coordinates/types/d3-parcoords.d.ts => legacy-plugin-chart-chord/types/external.d.ts} (84%)
 rename superset-frontend/plugins/legacy-plugin-chart-country-map/src/{CountryMap.js => CountryMap.ts} (69%)
 rename superset-frontend/plugins/legacy-plugin-chart-country-map/src/{ReactCountryMap.jsx => ReactCountryMap.tsx} (78%)
 rename superset-frontend/plugins/legacy-plugin-chart-country-map/src/{index.js => index.ts} (100%)
 rename superset-frontend/{packages/superset-ui-demo/storybook/stories/plugins/legacy-plugin-chart-country-map => plugins/legacy-plugin-chart-country-map/src/stories}/CountryMap.stories.tsx (88%)
 rename superset-frontend/plugins/legacy-plugin-chart-country-map/src/{transformProps.js => transformProps.ts} (91%)
 copy superset-frontend/plugins/{legacy-plugin-chart-parallel-coordinates/types/d3-parcoords.d.ts => legacy-plugin-chart-country-map/types/external.d.ts} (84%)
 rename superset-frontend/plugins/legacy-plugin-chart-horizon/src/{HorizonChart.jsx => HorizonChart.tsx} (75%)
 rename superset-frontend/plugins/legacy-plugin-chart-horizon/src/{HorizonRow.jsx => HorizonRow.tsx} (83%)
 rename superset-frontend/plugins/legacy-plugin-chart-horizon/src/{index.js => index.ts} (100%)
 rename superset-frontend/{packages/superset-ui-demo/storybook/stories/plugins/legacy-plugin-chart-horizon => plugins/legacy-plugin-chart-horizon/src/stories}/Horizon.stories.tsx (63%)
 rename superset-frontend/{packages/superset-ui-demo/storybook/stories/plugins/legacy-plugin-chart-horizon => plugins/legacy-plugin-chart-horizon/src/stories}/data.ts (100%)
 copy superset-frontend/plugins/legacy-plugin-chart-horizon/src/{transformProps.js => transformProps.ts} (67%)
 copy superset-frontend/plugins/{legacy-plugin-chart-parallel-coordinates/types/d3-parcoords.d.ts => legacy-plugin-chart-horizon/types/external.d.ts} (84%)
 rename superset-frontend/plugins/legacy-plugin-chart-map-box/src/{MapBox.jsx => MapBox.tsx} (61%)
 rename superset-frontend/plugins/legacy-plugin-chart-map-box/src/{ScatterPlotGlowOverlay.jsx => ScatterPlotGlowOverlay.tsx} (66%)
 rename superset-frontend/plugins/legacy-plugin-chart-map-box/src/{index.js => index.ts} (92%)
 create mode 100644 superset-frontend/plugins/legacy-plugin-chart-map-box/src/stories/MapBox.stories.tsx
 rename superset-frontend/{packages/superset-ui-demo/storybook/stories/plugins/legacy-plugin-chart-map-box => plugins/legacy-plugin-chart-map-box/src/stories}/data.ts (100%)
 rename superset-frontend/plugins/legacy-plugin-chart-map-box/src/{transformProps.js => transformProps.ts} (79%)
 rename superset-frontend/plugins/legacy-plugin-chart-map-box/src/utils/{geo.js => geo.ts} (92%)
 rename superset-frontend/plugins/legacy-plugin-chart-map-box/src/utils/{luminanceFromRGB.js => luminanceFromRGB.ts} (92%)
 create mode 100644 superset-frontend/plugins/legacy-plugin-chart-map-box/types/external.d.ts
 rename superset-frontend/plugins/legacy-plugin-chart-paired-t-test/src/{PairedTTest.jsx => PairedTTest.tsx} (86%)
 rename superset-frontend/plugins/legacy-plugin-chart-paired-t-test/src/{TTestTable.jsx => TTestTable.tsx} (81%)
 rename superset-frontend/plugins/legacy-plugin-chart-paired-t-test/src/{index.js => index.ts} (100%)
 rename superset-frontend/{packages/superset-ui-demo/storybook/stories/plugins/legacy-plugin-chart-paired-t-test => plugins/legacy-plugin-chart-paired-t-test/src/stories}/TTest.stories.tsx (55%)
 rename superset-frontend/{packages/superset-ui-demo/storybook/stories/plugins/legacy-plugin-chart-paired-t-test => plugins/legacy-plugin-chart-paired-t-test/src/stories}/data.ts (100%)
 rename superset-frontend/plugins/legacy-plugin-chart-paired-t-test/src/{transformProps.js => transformProps.ts} (80%)
 create mode 100644 superset-frontend/plugins/legacy-plugin-chart-paired-t-test/types/external.d.ts
 rename superset-frontend/plugins/legacy-plugin-chart-parallel-coordinates/src/{ParallelCoordinates.js => ParallelCoordinates.ts} (64%)
 rename superset-frontend/plugins/legacy-plugin-chart-parallel-coordinates/src/{ReactParallelCoordinates.jsx => ReactParallelCoordinates.tsx} (88%)
 rename superset-frontend/plugins/legacy-plugin-chart-parallel-coordinates/src/{index.js => index.ts} (100%)
 rename superset-frontend/{packages/superset-ui-demo/storybook/stories/plugins/legacy-plugin-chart-parallel-coordinates => plugins/legacy-plugin-chart-parallel-coordinates/src/stories}/ParallelCoordinates.stories.tsx (56%)
 rename superset-frontend/{packages/superset-ui-demo/storybook/stories/plugins/legacy-plugin-chart-parallel-coordinates => plugins/legacy-plugin-chart-parallel-coordinates/src/stories}/data.ts (100%)
 rename superset-frontend/plugins/legacy-plugin-chart-parallel-coordinates/src/{transformProps.js => transformProps.ts} (84%)
 rename superset-frontend/plugins/legacy-plugin-chart-parallel-coordinates/src/vendor/parcoords/{d3.parcoords.js => d3.parcoords.ts} (99%)
 rename superset-frontend/plugins/legacy-plugin-chart-parallel-coordinates/src/vendor/parcoords/{divgrid.js => divgrid.ts} (96%)
 copy superset-frontend/plugins/legacy-plugin-chart-parallel-coordinates/types/{d3.d.ts => external.d.ts} (79%)
 rename superset-frontend/plugins/legacy-plugin-chart-partition/src/{Partition.js => Partition.ts} (84%)
 rename superset-frontend/plugins/legacy-plugin-chart-partition/src/{ReactPartition.jsx => ReactPartition.tsx} (78%)
 rename superset-frontend/plugins/legacy-plugin-chart-partition/src/{index.js => index.ts} (100%)
 create mode 100644 superset-frontend/plugins/legacy-plugin-chart-partition/src/stories/Partition.stories.tsx
 rename superset-frontend/{packages/superset-ui-demo/storybook/stories/plugins/legacy-plugin-chart-partition => plugins/legacy-plugin-chart-partition/src/stories}/data.ts (100%)
 rename superset-frontend/plugins/legacy-plugin-chart-partition/src/{transformProps.js => transformProps.ts} (87%)
 rename superset-frontend/plugins/legacy-plugin-chart-partition/test/{OptionDescription.test.jsx => OptionDescription.test.tsx} (91%)
 copy superset-frontend/plugins/{legacy-plugin-chart-parallel-coordinates/types/d3-parcoords.d.ts => legacy-plugin-chart-partition/types/external.d.ts} (84%)
 rename superset-frontend/plugins/legacy-plugin-chart-rose/src/{ReactRose.jsx => ReactRose.tsx} (79%)
 rename superset-frontend/plugins/legacy-plugin-chart-rose/src/{Rose.js => Rose.ts} (89%)
 rename superset-frontend/plugins/legacy-plugin-chart-rose/src/{index.js => index.ts} (100%)
 create mode 100644 superset-frontend/plugins/legacy-plugin-chart-rose/src/stories/Rose.stories.tsx
 rename superset-frontend/{packages/superset-ui-demo/storybook/stories/plugins/legacy-plugin-chart-rose => plugins/legacy-plugin-chart-rose/src/stories}/data.ts (100%)
 rename superset-frontend/plugins/legacy-plugin-chart-rose/src/{transformProps.js => transformProps.ts} (91%)
 copy superset-frontend/plugins/{legacy-plugin-chart-parallel-coordinates/types/d3-parcoords.d.ts => legacy-plugin-chart-rose/types/external.d.ts} (84%)
 rename superset-frontend/plugins/legacy-plugin-chart-world-map/src/{ReactWorldMap.jsx => ReactWorldMap.tsx} (71%)
 rename superset-frontend/plugins/legacy-plugin-chart-world-map/src/{WorldMap.js => WorldMap.ts} (71%)
 rename superset-frontend/plugins/legacy-plugin-chart-world-map/src/{index.js => index.ts} (100%)
 rename superset-frontend/{packages/superset-ui-demo/storybook/stories/plugins/legacy-plugin-chart-world-map => plugins/legacy-plugin-chart-world-map/src/stories}/WorldMap.stories.tsx (65%)
 rename superset-frontend/{packages/superset-ui-demo/storybook/stories/plugins/legacy-plugin-chart-world-map => plugins/legacy-plugin-chart-world-map/src/stories}/data.ts (100%)
 rename superset-frontend/plugins/legacy-plugin-chart-world-map/src/{transformProps.js => transformProps.ts} (94%)
 create mode 100644 superset-frontend/plugins/legacy-plugin-chart-world-map/test/WorldMap.test.ts
 create mode 100644 superset-frontend/plugins/legacy-plugin-chart-world-map/test/tsconfig.json
 copy superset-frontend/plugins/{legacy-plugin-chart-parallel-coordinates/types/d3-parcoords.d.ts => legacy-plugin-chart-world-map/types/external.d.ts} (84%)
 rename superset-frontend/{packages/superset-ui-demo/storybook/stories/plugins/legacy-preset-chart-deckgl/Arc => plugins/legacy-preset-chart-deckgl/src/layers/Arc/stories}/Arc.stories.tsx (72%)
 create mode 100644 superset-frontend/plugins/legacy-preset-chart-deckgl/src/layers/Arc/stories/payload.ts
 rename superset-frontend/{packages/superset-ui-demo/storybook/stories/plugins/legacy-preset-chart-deckgl/Grid => plugins/legacy-preset-chart-deckgl/src/layers/Grid/stories}/Grid.stories.tsx (70%)
 create mode 100644 superset-frontend/plugins/legacy-preset-chart-deckgl/src/layers/Grid/stories/payload.ts
 rename superset-frontend/{packages/superset-ui-demo/storybook/stories/plugins/legacy-preset-chart-deckgl/Hex => plugins/legacy-preset-chart-deckgl/src/layers/Hex/stories}/Hex.stories.tsx (70%)
 create mode 100644 superset-frontend/plugins/legacy-preset-chart-deckgl/src/layers/Hex/stories/payload.ts
 rename superset-frontend/{packages/superset-ui-demo/storybook/stories/plugins/legacy-preset-chart-deckgl/Path => plugins/legacy-preset-chart-deckgl/src/layers/Path/stories}/Path.stories.tsx (76%)
 rename superset-frontend/plugins/{legacy-plugin-chart-horizon/src/transformProps.js => legacy-preset-chart-deckgl/src/layers/Path/stories/payload.ts} (70%)
 rename superset-frontend/{packages/superset-ui-demo/storybook/stories/plugins/legacy-preset-chart-deckgl/Polygon => plugins/legacy-preset-chart-deckgl/src/layers/Polygon/stories}/Polygon.stories.tsx (65%)
 create mode 100644 superset-frontend/plugins/legacy-preset-chart-deckgl/src/layers/Polygon/stories/geojsonPayload.ts
 copy superset-frontend/{src/components/FacePile/FacePile.stories.tsx => plugins/legacy-preset-chart-deckgl/src/layers/Polygon/stories/payload.ts} (50%)
 rename superset-frontend/{packages/superset-ui-demo/storybook/stories/plugins/legacy-preset-chart-deckgl/Scatter => plugins/legacy-preset-chart-deckgl/src/layers/Scatter/stories}/Scatter.stories.tsx (67%)
 create mode 100644 superset-frontend/plugins/legacy-preset-chart-deckgl/src/layers/Scatter/stories/payload.ts
 rename superset-frontend/{packages/superset-ui-demo/storybook/stories/plugins/legacy-preset-chart-deckgl/Screengrid/Stories.tsx => plugins/legacy-preset-chart-deckgl/src/layers/Screengrid/stories/Screengrid.stories.tsx} (75%)
 create mode 100644 superset-frontend/plugins/legacy-preset-chart-deckgl/src/layers/Screengrid/stories/payload.ts
 create mode 100644 superset-frontend/plugins/legacy-preset-chart-nvd3/src/BoxPlot/stories/NVD3BoxPlot.stories.tsx
 create mode 100644 superset-frontend/plugins/legacy-preset-chart-nvd3/src/BoxPlot/stories/data.ts
 rename superset-frontend/plugins/legacy-preset-chart-nvd3/src/Bubble/{index.js => index.ts} (100%)
 create mode 100644 superset-frontend/plugins/legacy-preset-chart-nvd3/src/Bubble/stories/NVD3Bubble.stories.tsx
 rename superset-frontend/{packages/superset-ui-demo/storybook/stories/plugins/legacy-preset-chart-nvd3/Bubble => plugins/legacy-preset-chart-nvd3/src/Bubble/stories}/data.ts (100%)
 rename superset-frontend/plugins/legacy-preset-chart-nvd3/src/Bullet/{index.js => index.ts} (100%)
 create mode 100644 superset-frontend/plugins/legacy-preset-chart-nvd3/src/Bullet/stories/NVD3Bullet.stories.tsx
 rename superset-frontend/{packages/superset-ui-demo/storybook/stories/plugins/legacy-preset-chart-nvd3/Bullet => plugins/legacy-preset-chart-nvd3/src/Bullet/stories}/data.ts (100%)
 rename superset-frontend/plugins/legacy-preset-chart-nvd3/src/Compare/{index.js => index.ts} (100%)
 create mode 100644 superset-frontend/plugins/legacy-preset-chart-nvd3/src/Compare/stories/NVD3Compare.stories.tsx
 rename superset-frontend/{packages/superset-ui-demo/storybook/stories/plugins/legacy-preset-chart-nvd3/Compare => plugins/legacy-preset-chart-nvd3/src/Compare/stories}/data.ts (100%)
 rename superset-frontend/plugins/legacy-preset-chart-nvd3/src/{NVD3Vis.js => NVD3Vis.ts} (99%)
 rename superset-frontend/plugins/legacy-preset-chart-nvd3/src/{PropTypes.js => PropTypes.ts} (100%)
 rename superset-frontend/plugins/legacy-preset-chart-nvd3/src/{ReactNVD3.jsx => ReactNVD3.tsx} (98%)
 rename superset-frontend/plugins/legacy-preset-chart-nvd3/src/TimePivot/{index.js => index.ts} (100%)
 rename superset-frontend/plugins/legacy-preset-chart-nvd3/src/{index.js => index.ts} (100%)
 rename superset-frontend/plugins/legacy-preset-chart-nvd3/src/{preset.js => preset.ts} (100%)
 rename superset-frontend/plugins/legacy-preset-chart-nvd3/src/{transformProps.js => transformProps.ts} (88%)
 rename superset-frontend/plugins/legacy-preset-chart-nvd3/src/{utils.js => utils.ts} (99%)
 rename superset-frontend/plugins/legacy-preset-chart-nvd3/src/utils/{isTruthy.js => isTruthy.ts} (94%)
 rename superset-frontend/plugins/legacy-preset-chart-nvd3/src/vendor/superset/{AnnotationTypes.js => AnnotationTypes.ts} (97%)
 rename superset-frontend/plugins/legacy-preset-chart-nvd3/src/vendor/superset/{exploreUtils.js => exploreUtils.ts} (97%)
 rename superset-frontend/plugins/legacy-preset-chart-nvd3/test/{utils.test.js => utils.test.ts} (86%)
 rename superset-frontend/plugins/legacy-preset-chart-nvd3/test/utils/{isTruthy.test.js => isTruthy.test.ts} (87%)
 rename superset-frontend/plugins/legacy-preset-chart-nvd3/test/utils/{tokenize.test.js => tokenize.test.ts} (86%)
 copy superset-frontend/plugins/{legacy-plugin-chart-parallel-coordinates/types/d3.d.ts => legacy-preset-chart-nvd3/types/external.d.ts} (61%)
 create mode 100644 superset-frontend/plugins/plugin-chart-ag-grid-table/src/stories/AgGridTable.stories.tsx
 create mode 100644 superset-frontend/plugins/plugin-chart-ag-grid-table/src/stories/data.ts
 create mode 100644 superset-frontend/plugins/plugin-chart-ag-grid-table/test/AgGridTableChart.test.tsx
 create mode 100644 superset-frontend/plugins/plugin-chart-ag-grid-table/test/utils/useColDefs.test.ts
 create mode 100644 superset-frontend/plugins/plugin-chart-cartodiagram/src/stories/Cartodiagram.stories.tsx
 create mode 100644 superset-frontend/plugins/plugin-chart-cartodiagram/src/stories/data.ts
 rename superset-frontend/{packages/superset-ui-demo/storybook/stories/plugins/legacy-preset-chart-big-number/BigNumberTotal => plugins/plugin-chart-echarts/src/BigNumber/BigNumberTotal/stories}/BigNumberTotal.stories.tsx (57%)
 rename superset-frontend/{packages/superset-ui-demo/storybook/stories/plugins/legacy-preset-chart-big-number/BigNumberTotal => plugins/plugin-chart-echarts/src/BigNumber/BigNumberTotal/stories}/data.ts (100%)
 rename superset-frontend/{packages/superset-ui-demo/storybook/stories/plugins/legacy-preset-chart-big-number/BigNumber => plugins/plugin-chart-echarts/src/BigNumber/BigNumberWithTrendline/stories}/BigNumber.stories.tsx (63%)
 rename superset-frontend/{packages/superset-ui-demo/storybook/stories/plugins/legacy-preset-chart-big-number/BigNumber => plugins/plugin-chart-echarts/src/BigNumber/BigNumberWithTrendline/stories}/data.ts (100%)
 rename superset-frontend/{packages/superset-ui-demo/storybook/stories/plugins/plugin-chart-echarts/BoxPlot => plugins/plugin-chart-echarts/src/BoxPlot/stories}/BoxPlot.stories.tsx (88%)
 rename superset-frontend/{packages/superset-ui-demo/storybook/stories/plugins/plugin-chart-echarts/BoxPlot => plugins/plugin-chart-echarts/src/BoxPlot/stories}/data.ts (100%)
 rename superset-frontend/{packages/superset-ui-demo/storybook/stories/plugins/plugin-chart-echarts/Bubble => plugins/plugin-chart-echarts/src/Bubble/stories}/BubbleChart.stories.tsx (90%)
 rename superset-frontend/{packages/superset-ui-demo/storybook/stories/plugins/plugin-chart-echarts/Bubble => plugins/plugin-chart-echarts/src/Bubble/stories}/data.ts (100%)
 rename superset-frontend/{packages/superset-ui-demo/storybook/stories/plugins/plugin-chart-echarts/Funnel => plugins/plugin-chart-echarts/src/Funnel/stories}/Funnel.stories.tsx (84%)
 rename superset-frontend/{packages/superset-ui-demo/storybook/stories/plugins/plugin-chart-echarts/Funnel => plugins/plugin-chart-echarts/src/Funnel/stories}/constants.ts (100%)
 create mode 100644 superset-frontend/plugins/plugin-chart-echarts/src/Gauge/stories/Gauge.stories.tsx
 rename superset-frontend/{packages/superset-ui-demo/storybook/stories/plugins/plugin-chart-echarts/Gauge => plugins/plugin-chart-echarts/src/Gauge/stories}/data.ts (100%)
 create mode 100644 superset-frontend/plugins/plugin-chart-echarts/src/Graph/stories/Graph.stories.tsx
 rename superset-frontend/{packages/superset-ui-demo/storybook/stories/plugins/plugin-chart-echarts/Graph => plugins/plugin-chart-echarts/src/Graph/stories}/data.ts (100%)
 rename superset-frontend/{packages/superset-ui-demo/storybook/stories/plugins/plugin-chart-echarts/MixedSeries => plugins/plugin-chart-echarts/src/MixedTimeseries/stories}/MixedSeries.stories.tsx (77%)
 rename superset-frontend/{packages/superset-ui-demo/storybook/stories/plugins/plugin-chart-echarts/MixedSeries => plugins/plugin-chart-echarts/src/MixedTimeseries/stories}/negativeData.ts (100%)
 rename superset-frontend/{packages/superset-ui-demo/storybook/stories/plugins/plugin-chart-echarts/Pie => plugins/plugin-chart-echarts/src/Pie/stories}/Pie.stories.tsx (77%)
 rename superset-frontend/{packages/superset-ui-demo/storybook/stories/plugins/plugin-chart-echarts/Pie => plugins/plugin-chart-echarts/src/Pie/stories}/data.ts (100%)
 rename superset-frontend/{packages/superset-ui-demo/storybook/stories/plugins/plugin-chart-echarts/Radar => plugins/plugin-chart-echarts/src/Radar/stories}/Radar.stories.tsx (59%)
 rename superset-frontend/{packages/superset-ui-demo/storybook/stories/plugins/plugin-chart-echarts/Radar => plugins/plugin-chart-echarts/src/Radar/stories}/data.ts (100%)
 rename superset-frontend/{packages/superset-ui-demo/storybook/stories/plugins/plugin-chart-echarts/Sunburst => plugins/plugin-chart-echarts/src/Sunburst/stories}/Sunburst.stories.tsx (86%)
 rename superset-frontend/{packages/superset-ui-demo/storybook/stories/plugins/plugin-chart-echarts/Sunburst => plugins/plugin-chart-echarts/src/Sunburst/stories}/data.ts (100%)
 rename superset-frontend/{packages/superset-ui-demo/storybook/stories/plugins/plugin-chart-echarts => plugins/plugin-chart-echarts/src/Timeseries/stories}/AreaSeries/AreaSeries.stories.tsx (85%)
 rename superset-frontend/{packages/superset-ui-demo/storybook/stories/plugins/plugin-chart-echarts => plugins/plugin-chart-echarts/src/Timeseries/stories}/AreaSeries/data.ts (100%)
 rename superset-frontend/{packages/superset-ui-demo/storybook/stories/plugins/plugin-chart-echarts/Timeseries => plugins/plugin-chart-echarts/src/Timeseries/stories}/Timeseries.stories.tsx (84%)
 rename superset-frontend/{packages/superset-ui-demo/storybook/stories/plugins/plugin-chart-echarts/Timeseries => plugins/plugin-chart-echarts/src/Timeseries/stories}/confbandData.ts (100%)
 rename superset-frontend/{packages/superset-ui-demo/storybook/stories/plugins/plugin-chart-echarts/Timeseries => plugins/plugin-chart-echarts/src/Timeseries/stories}/data.ts (100%)
 rename superset-frontend/{packages/superset-ui-demo/storybook/stories/plugins/plugin-chart-echarts/Timeseries => plugins/plugin-chart-echarts/src/Timeseries/stories}/negativeNumData.ts (100%)
 rename superset-frontend/{packages/superset-ui-demo/storybook/stories/plugins/plugin-chart-echarts/Timeseries => plugins/plugin-chart-echarts/src/Timeseries/stories}/stackWithNulls.ts (100%)
 rename superset-frontend/{packages/superset-ui-demo/storybook/stories/plugins/plugin-chart-echarts/Tree => plugins/plugin-chart-echarts/src/Tree/stories}/Tree.stories.tsx (50%)
 rename superset-frontend/{packages/superset-ui-demo/storybook/stories/plugins/plugin-chart-echarts/Tree => plugins/plugin-chart-echarts/src/Tree/stories}/data.ts (100%)
 rename superset-frontend/{packages/superset-ui-demo/storybook/stories/plugins/plugin-chart-echarts/Treemap => plugins/plugin-chart-echarts/src/Treemap/stories}/Treemap.stories.tsx (85%)
 rename superset-frontend/{packages/superset-ui-demo/storybook/stories/plugins/plugin-chart-echarts/Treemap => plugins/plugin-chart-echarts/src/Treemap/stories}/data.ts (100%)
 rename superset-frontend/{packages/superset-ui-demo/storybook/stories/plugins/plugin-chart-echarts/Waterfall => plugins/plugin-chart-echarts/src/Waterfall/stories}/Waterfall.stories.tsx (68%)
 rename superset-frontend/{packages/superset-ui-demo/storybook/stories/plugins/plugin-chart-echarts/Waterfall => plugins/plugin-chart-echarts/src/Waterfall/stories}/data.ts (100%)
 rename superset-frontend/{cypress-base/cypress/applitools/sqllab.test.ts => plugins/plugin-chart-echarts/src/utils/orderby.test.ts} (64%)
 create mode 100644 superset-frontend/plugins/plugin-chart-echarts/src/utils/orderby.ts
 create mode 100644 superset-frontend/plugins/plugin-chart-echarts/test/helpers.ts
 create mode 100644 superset-frontend/plugins/plugin-chart-handlebars/src/stories/Handlebars.stories.tsx
 create mode 100644 superset-frontend/plugins/plugin-chart-handlebars/src/stories/data.ts
 rename superset-frontend/plugins/plugin-chart-pivot-table/src/react-pivottable/{PivotTable.jsx => PivotTable.tsx} (85%)
 rename superset-frontend/plugins/plugin-chart-pivot-table/src/react-pivottable/{Styles.js => Styles.ts} (98%)
 rename superset-frontend/plugins/plugin-chart-pivot-table/src/react-pivottable/{TableRenderers.jsx => TableRenderers.tsx} (71%)
 rename superset-frontend/plugins/plugin-chart-pivot-table/src/react-pivottable/{index.js => index.ts} (100%)
 rename superset-frontend/plugins/plugin-chart-pivot-table/src/react-pivottable/{utilities.js => utilities.ts} (61%)
 create mode 100644 superset-frontend/plugins/plugin-chart-pivot-table/src/stories/PivotTable.stories.tsx
 rename superset-frontend/{packages/superset-ui-demo/storybook/stories/plugins/plugin-chart-pivot-table => plugins/plugin-chart-pivot-table/src/stories}/testData.ts (100%)
 rename superset-frontend/{packages/superset-ui-demo/storybook/stories/plugins/plugin-chart-table => plugins/plugin-chart-table/src/stories}/Table.stories.tsx (90%)
 create mode 100644 superset-frontend/plugins/plugin-chart-table/src/stories/birthNames.json
 rename superset-frontend/{packages/superset-ui-demo/storybook/stories/plugins/plugin-chart-table => plugins/plugin-chart-table/src/stories}/testData.ts (95%)
 copy superset-frontend/plugins/{plugin-chart-ag-grid-table => plugin-chart-table}/test/controlPanel.test.ts (100%)
 create mode 100644 superset-frontend/plugins/plugin-chart-word-cloud/src/stories/WordCloud.stories.tsx
 rename superset-frontend/{packages/superset-ui-demo/storybook/stories/plugins/plugin-chart-word-cloud => plugins/plugin-chart-word-cloud/src/stories}/data.ts (100%)
 create mode 100644 superset-frontend/scripts/check-storybook-coverage.js
 delete mode 100644 superset-frontend/src/.eslintrc.json
 rename superset-frontend/src/SqlLab/actions/{sqlLab.test.js => sqlLab.test.ts} (81%)
 rename superset-frontend/src/SqlLab/reducers/{sqlLab.test.js => sqlLab.test.ts} (92%)
 create mode 100644 superset-frontend/src/components/Chart/Chart.test.tsx
 delete mode 100644 superset-frontend/src/components/Chart/ChartRenderer.test.jsx
 create mode 100644 superset-frontend/src/components/Chart/ChartRenderer.test.tsx
 rename superset-frontend/src/components/Chart/{ChartRenderer.jsx => ChartRenderer.tsx} (60%)
 delete mode 100644 superset-frontend/src/components/Chart/chartAction.js
 create mode 100644 superset-frontend/src/components/Chart/chartAction.ts
 rename superset-frontend/src/components/Chart/{chartActions.test.js => chartActions.test.ts} (52%)
 rename superset-frontend/src/components/Chart/{chartReducers.test.js => chartReducers.test.ts} (55%)
 rename superset-frontend/src/components/Datasource/ChangeDatasourceModal/{ChangeDatasourceModal.test.jsx => ChangeDatasourceModal.test.tsx} (98%)
 rename superset-frontend/src/components/Datasource/DatasourceModal/{DatasourceModal.test.jsx => DatasourceModal.test.tsx} (95%)
 create mode 100644 superset-frontend/src/components/Datasource/FoldersEditor/components/DragOverlayContent.test.tsx
 create mode 100644 superset-frontend/src/components/Datasource/FoldersEditor/hooks/useContainingBlockModifier.ts
 create mode 100644 superset-frontend/src/components/Datasource/FoldersEditor/hooks/useDragHandlers.test.ts
 create mode 100644 superset-frontend/src/components/Datasource/FoldersEditor/sensors.test.ts
 rename superset-frontend/src/components/Datasource/components/DatasourceEditor/{DatasourceEditor.jsx => DatasourceEditor.tsx} (71%)
 rename superset-frontend/src/components/Datasource/utils/{index.js => index.ts} (60%)
 rename superset-frontend/src/components/MessageToasts/{Toast.test.jsx => Toast.test.tsx} (88%)
 rename superset-frontend/src/components/MessageToasts/{ToastPresenter.test.jsx => ToastPresenter.test.tsx} (91%)
 rename superset-frontend/src/components/MessageToasts/{reducers.test.js => reducers.test.ts} (58%)
 create mode 100644 superset-frontend/src/core/menus/index.test.ts
 create mode 100644 superset-frontend/src/core/menus/index.ts
 create mode 100644 superset-frontend/src/core/views/index.test.ts
 create mode 100644 superset-frontend/src/core/views/index.ts
 create mode 100644 superset-frontend/src/dashboard/actions/autoRefresh.ts
 delete mode 100644 superset-frontend/src/dashboard/actions/dashboardFilters.js
 create mode 100644 superset-frontend/src/dashboard/actions/dashboardFilters.ts
 rename superset-frontend/src/dashboard/actions/{dashboardLayout.test.js => dashboardLayout.test.ts} (78%)
 rename superset-frontend/src/dashboard/actions/{dashboardLayout.js => dashboardLayout.ts} (65%)
 delete mode 100644 superset-frontend/src/dashboard/actions/dashboardState.js
 delete mode 100644 superset-frontend/src/dashboard/actions/dashboardState.test.js
 create mode 100644 superset-frontend/src/dashboard/actions/dashboardState.test.ts
 create mode 100644 superset-frontend/src/dashboard/actions/dashboardState.ts
 rename superset-frontend/src/dashboard/actions/{hydrate.js => hydrate.ts} (67%)
 create mode 100644 superset-frontend/src/dashboard/components/AutoRefreshIndicator/index.tsx
 create mode 100644 superset-frontend/src/dashboard/components/AutoRefreshStatus/StatusIndicatorDot.test.tsx
 create mode 100644 superset-frontend/src/dashboard/components/AutoRefreshStatus/StatusIndicatorDot.tsx
 create mode 100644 superset-frontend/src/dashboard/components/AutoRefreshStatus/StatusTooltipContent.test.tsx
 create mode 100644 superset-frontend/src/dashboard/components/AutoRefreshStatus/StatusTooltipContent.tsx
 rename superset-frontend/src/dashboard/components/{Dashboard.test.jsx => Dashboard.test.tsx} (82%)
 rename superset-frontend/src/dashboard/components/{Dashboard.jsx => Dashboard.tsx} (70%)
 rename superset-frontend/src/dashboard/components/{DashboardGrid.test.jsx => DashboardGrid.test.tsx} (94%)
 rename superset-frontend/src/dashboard/components/{DashboardGrid.jsx => DashboardGrid.tsx} (81%)
 rename superset-frontend/src/dashboard/components/Header/{index.jsx => index.tsx} (78%)
 create mode 100644 superset-frontend/src/dashboard/components/Header/useHeaderAutoRefresh.ts
 create mode 100644 superset-frontend/src/dashboard/components/RefreshButton/index.tsx
 rename superset-frontend/{cypress-base/cypress/applitools/explore.test.ts => src/dashboard/components/RefreshFrequency/RefreshFrequencySelect.test.tsx} (53%)
 rename superset-frontend/src/dashboard/components/dnd/{DragDroppable.test.jsx => DragDroppable.test.tsx} (82%)
 rename superset-frontend/src/dashboard/components/dnd/{DragDroppable.jsx => DragDroppable.tsx} (60%)
 rename superset-frontend/src/dashboard/components/dnd/{handleDrop.js => handleDrop.ts} (83%)
 rename superset-frontend/src/dashboard/components/filterscope/{FilterScopeSelector.jsx => FilterScopeSelector.tsx} (69%)
 rename superset-frontend/src/dashboard/components/gridComponents/Chart/{Chart.test.jsx => Chart.test.tsx} (90%)
 rename superset-frontend/src/dashboard/components/gridComponents/Chart/{Chart.jsx => Chart.tsx} (57%)
 rename superset-frontend/src/dashboard/components/gridComponents/Column/{Column.test.jsx => Column.test.tsx} (77%)
 rename superset-frontend/src/dashboard/components/gridComponents/Column/{Column.jsx => Column.tsx} (71%)
 rename superset-frontend/src/dashboard/components/gridComponents/Markdown/{Markdown.jsx => Markdown.tsx} (75%)
 rename superset-frontend/src/dashboard/components/gridComponents/Tab/{Tab.jsx => Tab.tsx} (77%)
 rename superset-frontend/src/dashboard/components/gridComponents/Tabs/{Tabs.jsx => Tabs.tsx} (78%)
 rename superset-frontend/src/dashboard/components/gridComponents/new/{DraggableNewComponent.test.jsx => DraggableNewComponent.test.tsx} (97%)
 rename superset-frontend/src/dashboard/components/gridComponents/new/{NewColumn.test.jsx => NewColumn.test.tsx} (96%)
 rename superset-frontend/src/dashboard/components/gridComponents/new/{NewDivider.test.jsx => NewDivider.test.tsx} (96%)
 rename superset-frontend/src/dashboard/components/gridComponents/new/{NewHeader.test.jsx => NewHeader.test.tsx} (96%)
 rename superset-frontend/src/dashboard/components/gridComponents/new/{NewTabs.test.jsx => NewTabs.test.tsx} (97%)
 rename superset-frontend/src/dashboard/components/menu/{WithPopoverMenu.test.jsx => WithPopoverMenu.test.tsx} (96%)
 delete mode 100644 superset-frontend/src/dashboard/containers/DashboardComponent.jsx
 create mode 100644 superset-frontend/src/dashboard/containers/DashboardComponent.tsx
 create mode 100644 superset-frontend/src/dashboard/contexts/AutoRefreshContext.test.tsx
 create mode 100644 superset-frontend/src/dashboard/contexts/AutoRefreshContext.tsx
 create mode 100644 superset-frontend/src/dashboard/hooks/useAutoRefreshTabPause.test.tsx
 create mode 100644 superset-frontend/src/dashboard/hooks/useAutoRefreshTabPause.ts
 create mode 100644 superset-frontend/src/dashboard/hooks/useCurrentTime.test.ts
 create mode 100644 superset-frontend/src/dashboard/hooks/useCurrentTime.ts
 create mode 100644 superset-frontend/src/dashboard/hooks/useRealTimeDashboard.test.ts
 create mode 100644 superset-frontend/src/dashboard/hooks/useRealTimeDashboard.ts
 create mode 100644 superset-frontend/src/dashboard/hooks/useTabVisibility.test.ts
 create mode 100644 superset-frontend/src/dashboard/hooks/useTabVisibility.ts
 create mode 100644 superset-frontend/src/dashboard/reducers/autoRefreshReducer.test.ts
 rename superset-frontend/src/dashboard/reducers/{dashboardFilters.test.js => dashboardFilters.test.ts} (77%)
 rename superset-frontend/src/dashboard/reducers/{dashboardFilters.js => dashboardFilters.ts} (50%)
 rename superset-frontend/src/dashboard/reducers/{dashboardInfo.js => dashboardInfo.ts} (53%)
 rename superset-frontend/src/dashboard/reducers/{dashboardLayout.test.js => dashboardLayout.test.ts} (74%)
 rename superset-frontend/src/dashboard/reducers/{dashboardLayout.js => dashboardLayout.ts} (65%)
 delete mode 100644 superset-frontend/src/dashboard/reducers/dashboardState.js
 delete mode 100644 superset-frontend/src/dashboard/reducers/dashboardState.test.js
 create mode 100644 superset-frontend/src/dashboard/reducers/dashboardState.ts
 rename superset-frontend/src/dashboard/reducers/{sliceEntities.test.js => sliceEntities.test.ts} (71%)
 delete mode 100644 superset-frontend/src/dashboard/reducers/types.ts
 rename superset-frontend/src/dashboard/reducers/{undoableDashboardLayout.js => undoableDashboardLayout.ts} (83%)
 create mode 100644 superset-frontend/src/dashboard/types/autoRefresh.ts
 rename superset-frontend/src/dashboard/util/{dnd-reorder.test.js => dnd-reorder.test.ts} (99%)
 rename superset-frontend/src/dashboard/util/{dnd-reorder.js => dnd-reorder.ts} (86%)
 rename superset-frontend/src/dashboard/util/{findFirstParentContainer.test.js => findFirstParentContainer.test.ts} (85%)
 rename superset-frontend/src/dashboard/util/{getChartAndLabelComponentIdFromPath.test.js => getChartAndLabelComponentIdFromPath.test.ts} (100%)
 rename superset-frontend/src/dashboard/util/{getComponentWidthFromDrop.js => getComponentWidthFromDrop.ts} (74%)
 rename superset-frontend/src/dashboard/util/{getDashboardUrl.test.js => getDashboardUrl.test.ts} (82%)
 rename superset-frontend/src/dashboard/util/{getDetailedComponentWidth.test.js => getDetailedComponentWidth.test.ts} (95%)
 rename superset-frontend/src/dashboard/util/{getDetailedComponentWidth.js => getDetailedComponentWidth.ts} (76%)
 rename superset-frontend/src/dashboard/util/{getDropPosition.test.js => getDropPosition.test.ts} (96%)
 rename superset-frontend/src/dashboard/util/{getDropPosition.js => getDropPosition.ts} (84%)
 rename superset-frontend/src/dashboard/util/{getEffectiveExtraFilters.test.js => getEffectiveExtraFilters.test.ts} (93%)
 rename superset-frontend/src/dashboard/util/{getFilterConfigsFromFormdata.test.js => getFilterConfigsFromFormdata.test.ts} (97%)
 rename superset-frontend/src/dashboard/util/{getFilterConfigsFromFormdata.js => getFilterConfigsFromFormdata.ts} (69%)
 rename superset-frontend/src/dashboard/util/{getFilterScopeFromNodesTree.test.js => getFilterScopeFromNodesTree.test.ts} (98%)
 rename superset-frontend/src/dashboard/util/{getFilterScopeFromNodesTree.js => getFilterScopeFromNodesTree.ts} (75%)
 rename superset-frontend/src/dashboard/util/{getFilterScopeNodesTree.js => getFilterScopeNodesTree.ts} (62%)
 rename superset-frontend/src/dashboard/util/{getLeafComponentIdFromPath.test.js => getLeafComponentIdFromPath.test.ts} (100%)
 create mode 100644 superset-frontend/src/dashboard/util/migrateChartCustomization.test.ts
 create mode 100644 superset-frontend/src/dashboard/util/migrateChartCustomization.ts
 rename superset-frontend/src/dashboard/util/{newComponentFactory.test.js => newComponentFactory.test.ts} (100%)
 rename superset-frontend/src/dashboard/util/{newComponentFactory.js => newComponentFactory.ts} (82%)
 rename superset-frontend/src/dashboard/util/{newEntitiesFromDrop.test.js => newEntitiesFromDrop.test.ts} (75%)
 rename superset-frontend/src/dashboard/util/{newEntitiesFromDrop.js => newEntitiesFromDrop.ts} (84%)
 delete mode 100644 superset-frontend/src/dashboard/util/propShapes.jsx
 rename superset-frontend/src/dashboard/util/{updateComponentParentsList.test.js => updateComponentParentsList.test.ts} (90%)
 rename superset-frontend/src/explore/actions/{exploreActions.test.js => exploreActions.test.ts} (87%)
 rename superset-frontend/src/explore/components/{EmbedCodeContent.test.jsx => EmbedCodeContent.test.tsx} (92%)
 rename superset-frontend/src/explore/components/{EmbedCodeContent.jsx => EmbedCodeContent.tsx} (84%)
 rename superset-frontend/src/explore/components/ExploreChartHeader/{index.jsx => index.tsx} (77%)
 rename superset-frontend/src/explore/components/ExploreChartPanel/{ExploreChartPanel.test.jsx => ExploreChartPanel.test.tsx} (95%)
 rename superset-frontend/src/explore/components/ExploreViewContainer/{index.jsx => index.tsx} (73%)
 rename superset-frontend/src/explore/components/{SaveModal.test.jsx => SaveModal.test.tsx} (90%)
 create mode 100644 superset-frontend/src/explore/components/controls/ConditionalFormattingControl/constants.ts
 delete mode 100644 superset-frontend/src/explore/components/controls/FilterControl/adhocFilterType.test.ts
 delete mode 100644 superset-frontend/src/explore/components/controls/FilterControl/adhocFilterType.ts
 delete mode 100644 superset-frontend/src/explore/components/controls/MetricControl/adhocMetricType.ts
 delete mode 100644 superset-frontend/src/explore/components/controls/MetricControl/savedMetricType.test.ts
 delete mode 100644 superset-frontend/src/explore/components/controls/MetricControl/savedMetricType.ts
 rename superset-frontend/src/explore/components/useExploreAdditionalActionsMenu/{index.jsx => index.tsx} (79%)
 rename superset-frontend/src/explore/exploreUtils/{exploreUtils.test.jsx => exploreUtils.test.tsx} (89%)
 rename superset-frontend/src/explore/exploreUtils/{index.js => index.ts} (64%)
 delete mode 100644 superset-frontend/src/explore/reducers/exploreReducer.js
 rename superset-frontend/src/explore/reducers/{exploreReducer.test.js => exploreReducer.test.ts} (66%)
 create mode 100644 superset-frontend/src/explore/reducers/exploreReducer.ts
 delete mode 100644 superset-frontend/src/extensions/ExtensionsContext.test.tsx
 delete mode 100644 superset-frontend/src/extensions/ExtensionsContext.tsx
 delete mode 100644 superset-frontend/src/extensions/ExtensionsContextUtils.test.ts
 delete mode 100644 superset-frontend/src/extensions/ExtensionsContextUtils.ts
 create mode 100644 superset-frontend/src/extensions/ExtensionsLoader.test.ts
 create mode 100644 superset-frontend/src/extensions/ExtensionsLoader.ts
 delete mode 100644 superset-frontend/src/extensions/ExtensionsManager.test.ts
 delete mode 100644 superset-frontend/src/extensions/ExtensionsManager.ts
 copy superset-frontend/src/{SqlLab/components/StatusBar/StatusBar.test.tsx => features/owners/OwnerSelectLabel/OwnerSelectLabel.test.tsx} (53%)
 create mode 100644 superset-frontend/src/features/owners/OwnerSelectLabel/index.tsx
 delete mode 100644 superset-frontend/src/features/reports/ReportModal/actions.js
 create mode 100644 superset-frontend/src/features/reports/ReportModal/actions.ts
 delete mode 100644 superset-frontend/src/features/reports/ReportModal/reducer.js
 create mode 100644 superset-frontend/src/features/reports/ReportModal/reducer.ts
 create mode 100644 superset-frontend/src/features/tasks/TaskPayloadPopover.tsx
 create mode 100644 superset-frontend/src/features/tasks/TaskStackTracePopover.tsx
 create mode 100644 superset-frontend/src/features/tasks/TaskStatusIcon.tsx
 create mode 100644 superset-frontend/src/features/tasks/timeUtils.test.ts
 create mode 100644 superset-frontend/src/features/tasks/timeUtils.ts
 create mode 100644 superset-frontend/src/features/tasks/types.ts
 delete mode 100644 superset-frontend/src/middleware/logger.test.js
 create mode 100644 superset-frontend/src/middleware/logger.test.ts
 rename superset-frontend/src/middleware/{loggerMiddleware.js => loggerMiddleware.ts} (67%)
 rename superset-frontend/src/pages/AlertReportList/{AlertReportList.test.jsx => AlertReportList.test.tsx} (95%)
 rename superset-frontend/src/pages/AnnotationLayerList/{AnnotationLayerList.test.jsx => AnnotationLayerList.test.tsx} (92%)
 rename superset-frontend/src/pages/CssTemplateList/{CssTemplateList.test.jsx => CssTemplateList.test.tsx} (92%)
 rename superset-frontend/src/pages/DashboardList/{DashboardList.test.jsx => DashboardList.test.tsx} (93%)
 create mode 100644 superset-frontend/src/pages/TaskList/TaskList.test.tsx
 create mode 100644 superset-frontend/src/pages/TaskList/index.tsx
 create mode 100644 superset-frontend/src/theme/hooks/useThemeValidation.test.ts
 create mode 100644 superset-frontend/src/theme/hooks/useThemeValidation.ts
 create mode 100644 superset-frontend/src/theme/utils/antdTokenNames.test.ts
 create mode 100644 superset-frontend/src/theme/utils/antdTokenNames.ts
 create mode 100644 superset-frontend/src/theme/utils/themeStructureValidation.test.ts
 create mode 100644 superset-frontend/src/theme/utils/themeStructureValidation.ts
 rename superset-frontend/src/utils/{common.test.jsx => common.test.tsx} (88%)
 rename superset-frontend/src/utils/{common.js => common.ts} (66%)
 delete mode 100644 superset-frontend/src/utils/getControlsForVizType.test.js
 rename superset-frontend/src/visualizations/presets/{MainPreset.js => MainPreset.ts} (100%)
 create mode 100644 superset/commands/distributed_lock/acquire.py
 delete mode 100644 superset/commands/distributed_lock/create.py
 delete mode 100644 superset/commands/distributed_lock/delete.py
 delete mode 100644 superset/commands/distributed_lock/get.py
 create mode 100644 superset/commands/distributed_lock/release.py
 copy superset/{semantic_layers/registry.py => commands/tasks/__init__.py} (68%)
 create mode 100644 superset/commands/tasks/cancel.py
 create mode 100644 superset/commands/tasks/exceptions.py
 create mode 100644 superset/commands/tasks/internal_update.py
 create mode 100644 superset/commands/tasks/prune.py
 create mode 100644 superset/commands/tasks/submit.py
 create mode 100644 superset/commands/tasks/update.py
 delete mode 100644 superset/create_pandas_semantic_layer.py
 create mode 100644 superset/daos/tasks.py
 copy superset/{semantic_layers/registry.py => mcp_service/constants.py} (78%)
 copy superset-extensions-cli/src/superset_extensions_cli/utils.py => superset/mcp_service/dashboard/constants.py (60%)
 create mode 100644 superset/mcp_service/jwt_verifier.py
 create mode 100644 superset/mcp_service/utils/token_utils.py
 create mode 100644 superset/migrations/versions/2025_12_18_0220_create_tasks_table.py
 create mode 100644 superset/models/sql_types/base.py
 create mode 100644 superset/models/task_subscribers.py
 create mode 100644 superset/models/tasks.py
 create mode 100644 superset/tasks/ambient_context.py
 create mode 100644 superset/tasks/api.py
 create mode 100644 superset/tasks/constants.py
 create mode 100644 superset/tasks/context.py
 create mode 100644 superset/tasks/decorators.py
 create mode 100644 superset/tasks/filters.py
 create mode 100644 superset/tasks/locks.py
 create mode 100644 superset/tasks/manager.py
 create mode 100644 superset/tasks/registry.py
 create mode 100644 superset/tasks/schemas.py
 copy superset-extensions-cli/src/superset_extensions_cli/utils.py => superset/views/tasks.py (61%)
 create mode 100644 tests/integration_tests/tasks/api_tests.py
 copy {superset-core/src/superset_core/api => tests/integration_tests/tasks/commands}/__init__.py (100%)
 create mode 100644 tests/integration_tests/tasks/commands/test_cancel.py
 create mode 100644 tests/integration_tests/tasks/commands/test_internal_update.py
 create mode 100644 tests/integration_tests/tasks/commands/test_prune.py
 create mode 100644 tests/integration_tests/tasks/commands/test_submit.py
 create mode 100644 tests/integration_tests/tasks/commands/test_update.py
 create mode 100644 tests/integration_tests/tasks/test_event_handlers.py
 create mode 100644 tests/integration_tests/tasks/test_subscription_visibility.py
 create mode 100644 tests/integration_tests/tasks/test_sync_join_wait.py
 create mode 100644 tests/integration_tests/tasks/test_throttling.py
 create mode 100644 tests/integration_tests/tasks/test_timeout.py
 copy {superset-core/src/superset_core/api => tests/unit_tests/commands/report}/__init__.py (100%)
 create mode 100644 tests/unit_tests/commands/report/update_test.py
 create mode 100644 tests/unit_tests/daos/test_tasks.py
 create mode 100644 tests/unit_tests/dashboards/api_test.py
 copy {superset-core/src/superset_core/api => tests/unit_tests/examples}/__init__.py (100%)
 create mode 100644 tests/unit_tests/examples/data_loading_test.py
 create mode 100644 tests/unit_tests/examples/generic_loader_test.py
 create mode 100644 tests/unit_tests/examples/utils_test.py
 create mode 100644 tests/unit_tests/mcp_service/chart/validation/test_column_name_normalization.py
 create mode 100644 tests/unit_tests/mcp_service/system/test_system_utils.py
 create mode 100644 tests/unit_tests/mcp_service/system/tool/test_get_current_user.py
 create mode 100644 tests/unit_tests/mcp_service/test_jwt_verifier.py
 create mode 100644 tests/unit_tests/mcp_service/test_middleware.py
 create mode 100644 tests/unit_tests/mcp_service/test_middleware_logging.py
 create mode 100644 tests/unit_tests/mcp_service/utils/test_token_utils.py
 copy {superset-core/src/superset_core/api => tests/unit_tests/models/sql_types}/__init__.py (100%)
 create mode 100644 tests/unit_tests/models/sql_types/currency_type_test.py
 create mode 100644 tests/unit_tests/tasks/test_decorators.py
 create mode 100644 tests/unit_tests/tasks/test_handlers.py
 create mode 100644 tests/unit_tests/tasks/test_manager.py
 create mode 100644 tests/unit_tests/tasks/test_timeout.py


(superset) 01/01: feat: UI for semantic views

Posted by be...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

beto pushed a commit to branch semantic-layer-ui-semantic-view
in repository https://gitbox.apache.org/repos/asf/superset.git

commit 694e66bc450f3540ff97292d62346e53826f02c3
Author: Beto Dealmeida <ro...@dealmeida.net>
AuthorDate: Wed Feb 11 11:19:50 2026 -0500

    feat: UI for semantic views
---
 docker/pythonpath_dev/superset_config.py           |    6 +-
 docs/static/feature-flags.json                     |    6 +
 .../components/Label/reusable/DatasetTypeLabel.tsx |   20 +-
 .../superset-ui-core/src/utils/featureFlags.ts     |    1 +
 .../semanticViews/SemanticViewEditModal.tsx        |  120 ++
 superset-frontend/src/pages/DatasetList/index.tsx  |  223 ++-
 superset/config.py                                 |    3 +
 superset/datasource/api.py                         |  267 +++-
 superset/semantic_layers/models.py                 |    8 +
 superset/static/service-worker.js                  | 1492 +++++++++++++++++++-
 10 files changed, 2093 insertions(+), 53 deletions(-)

diff --git a/docker/pythonpath_dev/superset_config.py b/docker/pythonpath_dev/superset_config.py
index 108305cf900..201a7320540 100644
--- a/docker/pythonpath_dev/superset_config.py
+++ b/docker/pythonpath_dev/superset_config.py
@@ -105,7 +105,11 @@ class CeleryConfig:
 
 CELERY_CONFIG = CeleryConfig
 
-FEATURE_FLAGS = {"ALERT_REPORTS": True, "DATASET_FOLDERS": True}
+FEATURE_FLAGS = {
+    "ALERT_REPORTS": True,
+    "DATASET_FOLDERS": True,
+    "SEMANTIC_LAYERS": True,
+}
 ALERT_REPORTS_NOTIFICATION_DRY_RUN = True
 WEBDRIVER_BASEURL = f"http://superset_app{os.environ.get('SUPERSET_APP_ROOT', '/')}/"  # When using docker compose baseurl should be http://superset_nginx{ENV{BASEPATH}}/  # noqa: E501
 # The base URL for the email report hyperlinks.
diff --git a/docs/static/feature-flags.json b/docs/static/feature-flags.json
index 227d529c1db..699cad9e324 100644
--- a/docs/static/feature-flags.json
+++ b/docs/static/feature-flags.json
@@ -69,6 +69,12 @@
         "lifecycle": "development",
         "description": "Expand nested types in Presto into extra columns/arrays. Experimental, doesn't work with all nested types."
       },
+      {
+        "name": "SEMANTIC_LAYERS",
+        "default": false,
+        "lifecycle": "development",
+        "description": "Enable semantic layers and show semantic views alongside datasets"
+      },
       {
         "name": "TABLE_V2_TIME_COMPARISON_ENABLED",
         "default": false,
diff --git a/superset-frontend/packages/superset-ui-core/src/components/Label/reusable/DatasetTypeLabel.tsx b/superset-frontend/packages/superset-ui-core/src/components/Label/reusable/DatasetTypeLabel.tsx
index d8567d93b2a..f3d19617742 100644
--- a/superset-frontend/packages/superset-ui-core/src/components/Label/reusable/DatasetTypeLabel.tsx
+++ b/superset-frontend/packages/superset-ui-core/src/components/Label/reusable/DatasetTypeLabel.tsx
@@ -23,7 +23,7 @@ import { Label } from '..';
 
 // Define the prop types for DatasetTypeLabel
 interface DatasetTypeLabelProps {
-  datasetType: 'physical' | 'virtual'; // Accepts only 'physical' or 'virtual'
+  datasetType: 'physical' | 'virtual' | 'semantic_view';
 }
 
 const SIZE = 's'; // Define the size as a constant
@@ -32,6 +32,24 @@ export const DatasetTypeLabel: React.FC<DatasetTypeLabelProps> = ({
   datasetType,
 }) => {
   const theme = useTheme();
+
+  if (datasetType === 'semantic_view') {
+    return (
+      <Label
+        icon={
+          <Icons.ApartmentOutlined
+            iconSize={SIZE}
+            iconColor={theme.colorInfo}
+          />
+        }
+        type="info"
+        style={{ color: theme.colorInfo }}
+      >
+        {t('Semantic')}
+      </Label>
+    );
+  }
+
   const label: string =
     datasetType === 'physical' ? t('Physical') : t('Virtual');
   const icon =
diff --git a/superset-frontend/packages/superset-ui-core/src/utils/featureFlags.ts b/superset-frontend/packages/superset-ui-core/src/utils/featureFlags.ts
index 9770951342b..e117e097599 100644
--- a/superset-frontend/packages/superset-ui-core/src/utils/featureFlags.ts
+++ b/superset-frontend/packages/superset-ui-core/src/utils/featureFlags.ts
@@ -59,6 +59,7 @@ export enum FeatureFlag {
   ListviewsDefaultCardView = 'LISTVIEWS_DEFAULT_CARD_VIEW',
   Matrixify = 'MATRIXIFY',
   ScheduledQueries = 'SCHEDULED_QUERIES',
+  SemanticLayers = 'SEMANTIC_LAYERS',
   SqllabBackendPersistence = 'SQLLAB_BACKEND_PERSISTENCE',
   SqlValidatorsByEngine = 'SQL_VALIDATORS_BY_ENGINE',
   SshTunneling = 'SSH_TUNNELING',
diff --git a/superset-frontend/src/features/semanticViews/SemanticViewEditModal.tsx b/superset-frontend/src/features/semanticViews/SemanticViewEditModal.tsx
new file mode 100644
index 00000000000..ed90d165b9c
--- /dev/null
+++ b/superset-frontend/src/features/semanticViews/SemanticViewEditModal.tsx
@@ -0,0 +1,120 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+import { useState, useEffect } from 'react';
+import { t } from '@apache-superset/core';
+import { styled } from '@apache-superset/core/ui';
+import { SupersetClient } from '@superset-ui/core';
+import { Input, InputNumber } from '@superset-ui/core/components';
+import { Icons } from '@superset-ui/core/components/Icons';
+import {
+  StandardModal,
+  ModalFormField,
+  MODAL_STANDARD_WIDTH,
+} from 'src/components/Modal';
+
+const ModalContent = styled.div`
+  padding: ${({ theme }) => theme.sizeUnit * 4}px;
+`;
+
+interface SemanticViewEditModalProps {
+  show: boolean;
+  onHide: () => void;
+  onSave: () => void;
+  addDangerToast: (msg: string) => void;
+  addSuccessToast: (msg: string) => void;
+  semanticView: {
+    id: number;
+    table_name: string;
+    description?: string | null;
+    cache_timeout?: number | null;
+  } | null;
+}
+
+export default function SemanticViewEditModal({
+  show,
+  onHide,
+  onSave,
+  addDangerToast,
+  addSuccessToast,
+  semanticView,
+}: SemanticViewEditModalProps) {
+  const [description, setDescription] = useState<string>('');
+  const [cacheTimeout, setCacheTimeout] = useState<number | null>(null);
+  const [saving, setSaving] = useState(false);
+
+  useEffect(() => {
+    if (semanticView) {
+      setDescription(semanticView.description || '');
+      setCacheTimeout(semanticView.cache_timeout ?? null);
+    }
+  }, [semanticView]);
+
+  const handleSave = async () => {
+    if (!semanticView) return;
+    setSaving(true);
+    try {
+      await SupersetClient.put({
+        endpoint: `/api/v1/semantic_view/${semanticView.id}`,
+        jsonPayload: {
+          description: description || null,
+          cache_timeout: cacheTimeout,
+        },
+      });
+      addSuccessToast(t('Semantic view updated'));
+      onSave();
+      onHide();
+    } catch {
+      addDangerToast(t('An error occurred while saving the semantic view'));
+    } finally {
+      setSaving(false);
+    }
+  };
+
+  return (
+    <StandardModal
+      show={show}
+      onHide={onHide}
+      onSave={handleSave}
+      title={t('Edit %s', semanticView?.table_name || '')}
+      icon={<Icons.EditOutlined />}
+      isEditMode
+      width={MODAL_STANDARD_WIDTH}
+      saveLoading={saving}
+    >
+      <ModalContent>
+        <ModalFormField label={t('Description')}>
+          <Input.TextArea
+            value={description}
+            onChange={e => setDescription(e.target.value)}
+            rows={4}
+          />
+        </ModalFormField>
+        <ModalFormField label={t('Cache timeout')}>
+          <InputNumber
+            value={cacheTimeout}
+            onChange={value => setCacheTimeout(value as number | null)}
+            min={0}
+            placeholder={t('Duration in seconds')}
+            style={{ width: '100%' }}
+          />
+        </ModalFormField>
+      </ModalContent>
+    </StandardModal>
+  );
+}
diff --git a/superset-frontend/src/pages/DatasetList/index.tsx b/superset-frontend/src/pages/DatasetList/index.tsx
index 39684dd9ca7..9ee9bb4fd84 100644
--- a/superset-frontend/src/pages/DatasetList/index.tsx
+++ b/superset-frontend/src/pages/DatasetList/index.tsx
@@ -17,7 +17,12 @@
  * under the License.
  */
 import { t } from '@apache-superset/core';
-import { getExtensionsRegistry, SupersetClient } from '@superset-ui/core';
+import {
+  getExtensionsRegistry,
+  SupersetClient,
+  isFeatureEnabled,
+  FeatureFlag,
+} from '@superset-ui/core';
 import { styled, useTheme, css } from '@apache-superset/core/ui';
 import { FunctionComponent, useState, useMemo, useCallback, Key } from 'react';
 import { Link, useHistory } from 'react-router-dom';
@@ -50,6 +55,7 @@ import {
   ListViewFilterOperator as FilterOperator,
   type ListViewProps,
   type ListViewFilters,
+  type ListViewFetchDataConfig,
 } from 'src/components';
 import { Typography } from '@superset-ui/core/components/Typography';
 import handleResourceExport from 'src/utils/export';
@@ -67,6 +73,7 @@ import {
   CONFIRM_OVERWRITE_MESSAGE,
 } from 'src/features/datasets/constants';
 import DuplicateDatasetModal from 'src/features/datasets/DuplicateDatasetModal';
+import SemanticViewEditModal from 'src/features/semanticViews/SemanticViewEditModal';
 import { useSelector } from 'react-redux';
 import { QueryObjectColumns } from 'src/views/CRUD/types';
 import { WIDER_DROPDOWN_WIDTH } from 'src/components/ListView/utils';
@@ -120,13 +127,16 @@ type Dataset = {
   database: {
     id: string;
     database_name: string;
-  };
+  } | null;
   kind: string;
+  source_type?: 'database' | 'semantic_layer';
   explore_url: string;
   id: number;
   owners: Array<Owner>;
   schema: string;
   table_name: string;
+  description?: string | null;
+  cache_timeout?: number | null;
 };
 
 interface VirtualDataset extends Dataset {
@@ -152,18 +162,90 @@ const DatasetList: FunctionComponent<DatasetListProps> = ({
   const history = useHistory();
   const theme = useTheme();
   const {
-    state: {
-      loading,
-      resourceCount: datasetCount,
-      resourceCollection: datasets,
-      bulkSelectEnabled,
-    },
+    state: { bulkSelectEnabled },
     hasPerm,
-    fetchData,
     toggleBulkSelect,
-    refreshData,
   } = useListViewResource<Dataset>('dataset', t('dataset'), addDangerToast);
 
+  // Combined endpoint state
+  const [datasets, setDatasets] = useState<Dataset[]>([]);
+  const [datasetCount, setDatasetCount] = useState(0);
+  const [loading, setLoading] = useState(true);
+  const [lastFetchConfig, setLastFetchConfig] =
+    useState<ListViewFetchDataConfig | null>(null);
+  const [currentSourceFilter, setCurrentSourceFilter] = useState<string>('');
+
+  const fetchData = useCallback((config: ListViewFetchDataConfig) => {
+    setLastFetchConfig(config);
+    setLoading(true);
+    const { pageIndex, pageSize, sortBy, filters: filterValues } = config;
+
+    // Separate source_type filter from other filters
+    const sourceTypeFilter = filterValues.find(f => f.id === 'source_type');
+
+    // Track source filter for conditional Type filter visibility
+    const sourceVal =
+      sourceTypeFilter?.value && typeof sourceTypeFilter.value === 'object'
+        ? (sourceTypeFilter.value as { value: string }).value
+        : ((sourceTypeFilter?.value as string) ?? '');
+    setCurrentSourceFilter(sourceVal);
+    const otherFilters = filterValues
+      .filter(f => f.id !== 'source_type')
+      .filter(
+        ({ value }) => value !== '' && value !== null && value !== undefined,
+      )
+      .map(({ id, operator: opr, value }) => ({
+        col: id,
+        opr,
+        value:
+          value && typeof value === 'object' && 'value' in value
+            ? value.value
+            : value,
+      }));
+
+    // Add source_type filter for the combined endpoint
+    const sourceTypeValue =
+      sourceTypeFilter?.value && typeof sourceTypeFilter.value === 'object'
+        ? (sourceTypeFilter.value as { value: string }).value
+        : sourceTypeFilter?.value;
+    if (sourceTypeValue) {
+      otherFilters.push({
+        col: 'source_type',
+        opr: 'eq',
+        value: sourceTypeValue,
+      });
+    }
+
+    const queryParams = rison.encode_uri({
+      order_column: sortBy[0].id,
+      order_direction: sortBy[0].desc ? 'desc' : 'asc',
+      page: pageIndex,
+      page_size: pageSize,
+      ...(otherFilters.length ? { filters: otherFilters } : {}),
+    });
+
+    return SupersetClient.get({
+      endpoint: `/api/v1/datasource/?q=${queryParams}`,
+    })
+      .then(({ json = {} }) => {
+        setDatasets(json.result);
+        setDatasetCount(json.count);
+      })
+      .catch(() => {
+        addDangerToast(t('An error occurred while fetching datasets'));
+      })
+      .finally(() => {
+        setLoading(false);
+      });
+  }, []);
+
+  const refreshData = useCallback(() => {
+    if (lastFetchConfig) {
+      return fetchData(lastFetchConfig);
+    }
+    return undefined;
+  }, [lastFetchConfig, fetchData]);
+
   const [datasetCurrentlyDeleting, setDatasetCurrentlyDeleting] = useState<
     | (Dataset & {
         charts: any;
@@ -178,6 +260,10 @@ const DatasetList: FunctionComponent<DatasetListProps> = ({
   const [datasetCurrentlyDuplicating, setDatasetCurrentlyDuplicating] =
     useState<VirtualDataset | null>(null);
 
+  const [svCurrentlyEditing, setSvCurrentlyEditing] = useState<Dataset | null>(
+    null,
+  );
+
   const [importingDataset, showImportModal] = useState<boolean>(false);
   const [passwordFields, setPasswordFields] = useState<string[]>([]);
   const [preparingExport, setPreparingExport] = useState<boolean>(false);
@@ -372,12 +458,22 @@ const DatasetList: FunctionComponent<DatasetListProps> = ({
         id: 'kind',
       },
       {
+        Cell: ({
+          row: {
+            original: { database },
+          },
+        }: any) => database?.database_name || '-',
         Header: t('Database'),
         accessor: 'database.database_name',
         size: 'xl',
         id: 'database.database_name',
       },
       {
+        Cell: ({
+          row: {
+            original: { schema },
+          },
+        }: any) => schema || '-',
         Header: t('Schema'),
         accessor: 'schema',
         size: 'lg',
@@ -420,9 +516,40 @@ const DatasetList: FunctionComponent<DatasetListProps> = ({
         disableSortBy: true,
         id: 'sql',
       },
+      {
+        accessor: 'source_type',
+        hidden: true,
+        disableSortBy: true,
+        id: 'source_type',
+      },
       {
         Cell: ({ row: { original } }: any) => {
-          // Verify owner or isAdmin
+          const isSemanticView = original.source_type === 'semantic_layer';
+
+          // Semantic view: only show edit button
+          if (isSemanticView) {
+            if (!canEdit) return null;
+            return (
+              <Actions className="actions">
+                <Tooltip
+                  id="edit-action-tooltip"
+                  title={t('Edit')}
+                  placement="bottom"
+                >
+                  <span
+                    role="button"
+                    tabIndex={0}
+                    className="action-button"
+                    onClick={() => setSvCurrentlyEditing(original)}
+                  >
+                    <Icons.EditOutlined iconSize="l" />
+                  </span>
+                </Tooltip>
+              </Actions>
+            );
+          }
+
+          // Dataset: full set of actions
           const allowEdit =
             original.owners.map((o: Owner) => o.id).includes(user.userId) ||
             isUserAdmin(user);
@@ -536,6 +663,22 @@ const DatasetList: FunctionComponent<DatasetListProps> = ({
 
   const filterTypes: ListViewFilters = useMemo(
     () => [
+      ...(isFeatureEnabled(FeatureFlag.SemanticLayers)
+        ? [
+            {
+              Header: t('Source'),
+              key: 'source_type',
+              id: 'source_type',
+              input: 'select' as const,
+              operator: FilterOperator.Equals,
+              unfilteredLabel: t('All'),
+              selects: [
+                { label: t('Database'), value: 'database' },
+                { label: t('Semantic Layer'), value: 'semantic_layer' },
+              ],
+            },
+          ]
+        : []),
       {
         Header: t('Name'),
         key: 'search',
@@ -543,18 +686,42 @@ const DatasetList: FunctionComponent<DatasetListProps> = ({
         input: 'search',
         operator: FilterOperator.Contains,
       },
-      {
-        Header: t('Type'),
-        key: 'sql',
-        id: 'sql',
-        input: 'select',
-        operator: FilterOperator.DatasetIsNullOrEmpty,
-        unfilteredLabel: 'All',
-        selects: [
-          { label: t('Virtual'), value: false },
-          { label: t('Physical'), value: true },
-        ],
-      },
+      ...(isFeatureEnabled(FeatureFlag.SemanticLayers)
+        ? [
+            {
+              Header: t('Type'),
+              key: 'sql',
+              id: 'sql',
+              input: 'select' as const,
+              operator: FilterOperator.DatasetIsNullOrEmpty,
+              unfilteredLabel: 'All',
+              selects: [
+                ...(currentSourceFilter !== 'semantic_layer'
+                  ? [
+                      { label: t('Physical'), value: true },
+                      { label: t('Virtual'), value: false },
+                    ]
+                  : []),
+                ...(currentSourceFilter !== 'database'
+                  ? [{ label: t('Semantic View'), value: 'semantic_view' }]
+                  : []),
+              ],
+            },
+          ]
+        : [
+            {
+              Header: t('Type'),
+              key: 'sql',
+              id: 'sql',
+              input: 'select' as const,
+              operator: FilterOperator.DatasetIsNullOrEmpty,
+              unfilteredLabel: 'All',
+              selects: [
+                { label: t('Physical'), value: true },
+                { label: t('Virtual'), value: false },
+              ],
+            },
+          ]),
       {
         Header: t('Database'),
         key: 'database',
@@ -645,7 +812,7 @@ const DatasetList: FunctionComponent<DatasetListProps> = ({
         dropdownStyle: { minWidth: WIDER_DROPDOWN_WIDTH },
       },
     ],
-    [user],
+    [user, currentSourceFilter],
   );
 
   const menuData: SubMenuProps = {
@@ -897,6 +1064,14 @@ const DatasetList: FunctionComponent<DatasetListProps> = ({
         onHide={closeDatasetDuplicateModal}
         onDuplicate={handleDatasetDuplicate}
       />
+      <SemanticViewEditModal
+        show={!!svCurrentlyEditing}
+        onHide={() => setSvCurrentlyEditing(null)}
+        onSave={refreshData}
+        addDangerToast={addDangerToast}
+        addSuccessToast={addSuccessToast}
+        semanticView={svCurrentlyEditing}
+      />
       <ConfirmStatusChange
         title={t('Please confirm')}
         description={t(
diff --git a/superset/config.py b/superset/config.py
index dfeafb3b261..fe1d5da2fa9 100644
--- a/superset/config.py
+++ b/superset/config.py
@@ -562,6 +562,9 @@ DEFAULT_FEATURE_FLAGS: dict[str, bool] = {
     # in addition to relative timeshifts (e.g., "1 day ago")
     # @lifecycle: development
     "DATE_RANGE_TIMESHIFTS_ENABLED": False,
+    # Enable semantic layers and show semantic views alongside datasets
+    # @lifecycle: development
+    "SEMANTIC_LAYERS": False,
     # Enables advanced data type support
     # @lifecycle: development
     "ENABLE_ADVANCED_DATA_TYPES": False,
diff --git a/superset/datasource/api.py b/superset/datasource/api.py
index da5f7e3ded8..ca8a235192b 100644
--- a/superset/datasource/api.py
+++ b/superset/datasource/api.py
@@ -15,17 +15,23 @@
 # specific language governing permissions and limitations
 # under the License.
 import logging
+from typing import Any
 
 from flask import current_app as app, request
-from flask_appbuilder.api import expose, protect, safe
+from flask_appbuilder.api import expose, protect, rison, safe
+from flask_appbuilder.api.schemas import get_list_schema
+from sqlalchemy import and_, func, literal, or_, select, union_all
 
-from superset import event_logger
-from superset.connectors.sqla.models import BaseDatasource
+from superset import db, event_logger, is_feature_enabled, security_manager
+from superset.connectors.sqla import models as sqla_models
+from superset.connectors.sqla.models import BaseDatasource, SqlaTable
 from superset.daos.datasource import DatasourceDAO
 from superset.daos.exceptions import DatasourceNotFound, DatasourceTypeNotSupportedError
 from superset.exceptions import SupersetSecurityException
+from superset.semantic_layers.models import SemanticView
 from superset.superset_typing import FlaskResponse
 from superset.utils.core import apply_max_row_limit, DatasourceType, SqlExpressionType
+from superset.utils.filters import get_dataset_access_filters
 from superset.views.base_api import BaseSupersetApi, statsd_metrics
 
 logger = logging.getLogger(__name__)
@@ -303,3 +309,258 @@ class DatasourceRestApi(BaseSupersetApi):
                 f"Invalid expression type: {expression_type}. "
                 f"Valid types are: column, metric, where, having"
             ) from None
+
+    @expose("/", methods=("GET",))
+    @safe
+    @statsd_metrics
+    @rison(get_list_schema)
+    @event_logger.log_this_with_context(
+        action=lambda self, *args, **kwargs: f"{self.__class__.__name__}"
+        ".combined_list",
+        log_to_statsd=False,
+    )
+    def combined_list(self, **kwargs: Any) -> FlaskResponse:
+        """List datasets and semantic views combined.
+        ---
+        get:
+          summary: List datasets and semantic views combined
+          parameters:
+          - in: query
+            name: q
+            content:
+              application/json:
+                schema:
+                  $ref: '#/components/schemas/get_list_schema'
+          responses:
+            200:
+              description: Combined list of datasets and semantic views
+            401:
+              $ref: '#/components/responses/401'
+            403:
+              $ref: '#/components/responses/403'
+            500:
+              $ref: '#/components/responses/500'
+        """
+        if not security_manager.can_access("can_read", "Dataset"):
+            return self.response(403, message="Access denied")
+
+        args = kwargs.get("rison", {})
+        page = args.get("page", 0)
+        page_size = args.get("page_size", 25)
+        order_column = args.get("order_column", "changed_on")
+        order_direction = args.get("order_direction", "desc")
+        filters = args.get("filters", [])
+
+        # Extract source_type, name search, sql (type), and type_filter
+        source_type = "all"
+        name_filter = None
+        sql_filter = None  # None = no filter, True = physical, False = virtual
+        type_filter = None  # None = no filter, "semantic_view" / True / False
+        for f in filters:
+            if f.get("col") == "source_type":
+                source_type = f.get("value", "all")
+            elif f.get("col") == "table_name" and f.get("opr") == "ct":
+                name_filter = f.get("value")
+            elif f.get("col") == "sql":
+                val = f.get("value")
+                if val == "semantic_view":
+                    type_filter = "semantic_view"
+                else:
+                    sql_filter = val
+
+        # If semantic layers feature flag is off, only show datasets
+        if not is_feature_enabled("SEMANTIC_LAYERS"):
+            source_type = "database"
+
+        # Map sort columns
+        sort_col_map = {
+            "changed_on_delta_humanized": "changed_on",
+            "table_name": "table_name",
+        }
+        sort_col_name = sort_col_map.get(order_column, "changed_on")
+
+        # Build dataset subquery
+        ds_q = select(
+            SqlaTable.id.label("item_id"),
+            literal("database").label("source_type"),
+            SqlaTable.changed_on,
+            SqlaTable.table_name,
+        ).select_from(SqlaTable.__table__)
+
+        # Apply security filters for datasets
+        if not security_manager.can_access_all_datasources():
+            ds_q = ds_q.join(
+                sqla_models.Database,
+                sqla_models.Database.id == SqlaTable.database_id,
+            )
+            ds_q = ds_q.where(get_dataset_access_filters(SqlaTable))
+
+        # Apply name filter to datasets
+        if name_filter:
+            ds_q = ds_q.where(SqlaTable.table_name.ilike(f"%{name_filter}%"))
+
+        # Apply sql (type) filter to datasets
+        if sql_filter is not None:
+            if sql_filter:
+                # Physical: sql is null or empty
+                ds_q = ds_q.where(
+                    or_(SqlaTable.sql.is_(None), SqlaTable.sql == "")
+                )
+            else:
+                # Virtual: sql is not null and not empty
+                ds_q = ds_q.where(
+                    and_(SqlaTable.sql.isnot(None), SqlaTable.sql != "")
+                )
+            # Selecting Physical/Virtual implicitly means "database only"
+            if source_type == "all":
+                source_type = "database"
+
+        # Handle type_filter = "semantic_view"
+        if type_filter == "semantic_view":
+            source_type = "semantic_layer"
+
+        # Build semantic view subquery
+        sv_q = select(
+            SemanticView.id.label("item_id"),
+            literal("semantic_layer").label("source_type"),
+            SemanticView.changed_on,
+            SemanticView.name.label("table_name"),
+        ).select_from(SemanticView.__table__)
+
+        # Apply name filter to semantic views
+        if name_filter:
+            sv_q = sv_q.where(SemanticView.name.ilike(f"%{name_filter}%"))
+
+        # Build combined query based on source_type
+        if source_type == "database":
+            combined = ds_q.subquery()
+        elif source_type == "semantic_layer":
+            combined = sv_q.subquery()
+        else:
+            combined = union_all(ds_q, sv_q).subquery()
+
+        # Count total
+        count_q = select(func.count()).select_from(combined)
+        total_count = db.session.execute(count_q).scalar() or 0
+
+        # Sort and paginate
+        sort_col = combined.c[sort_col_name]
+        if order_direction == "desc":
+            sort_col = sort_col.desc()
+        else:
+            sort_col = sort_col.asc()
+
+        paginated_q = (
+            select(
+                combined.c.item_id,
+                combined.c.source_type,
+            )
+            .order_by(sort_col)
+            .offset(page * page_size)
+            .limit(page_size)
+        )
+        rows = db.session.execute(paginated_q).fetchall()
+
+        # Collect IDs by type
+        dataset_ids = [r.item_id for r in rows if r.source_type == "database"]
+        sv_ids = [r.item_id for r in rows if r.source_type == "semantic_layer"]
+
+        # Fetch full ORM objects
+        datasets_map: dict[int, SqlaTable] = {}
+        if dataset_ids:
+            ds_objs = (
+                db.session.query(SqlaTable)
+                .filter(SqlaTable.id.in_(dataset_ids))
+                .all()
+            )
+            datasets_map = {obj.id: obj for obj in ds_objs}
+
+        sv_map: dict[int, SemanticView] = {}
+        if sv_ids:
+            sv_objs = (
+                db.session.query(SemanticView)
+                .filter(SemanticView.id.in_(sv_ids))
+                .all()
+            )
+            sv_map = {obj.id: obj for obj in sv_objs}
+
+        # Serialize in UNION order
+        result = []
+        for row in rows:
+            if row.source_type == "database":
+                obj = datasets_map.get(row.item_id)
+                if obj:
+                    result.append(self._serialize_dataset(obj))
+            else:
+                obj = sv_map.get(row.item_id)
+                if obj:
+                    result.append(self._serialize_semantic_view(obj))
+
+        return self.response(200, count=total_count, result=result)
+
+    @staticmethod
+    def _serialize_dataset(obj: SqlaTable) -> dict[str, Any]:
+        changed_by = obj.changed_by
+        return {
+            "id": obj.id,
+            "uuid": str(obj.uuid),
+            "table_name": obj.table_name,
+            "kind": obj.kind,
+            "source_type": "database",
+            "description": obj.description,
+            "explore_url": obj.explore_url,
+            "database": {
+                "id": obj.database_id,
+                "database_name": obj.database.database_name,
+            }
+            if obj.database
+            else None,
+            "schema": obj.schema,
+            "sql": obj.sql,
+            "extra": obj.extra,
+            "owners": [
+                {
+                    "id": o.id,
+                    "first_name": o.first_name,
+                    "last_name": o.last_name,
+                }
+                for o in obj.owners
+            ],
+            "changed_by_name": obj.changed_by_name,
+            "changed_by": {
+                "first_name": changed_by.first_name,
+                "last_name": changed_by.last_name,
+            }
+            if changed_by
+            else None,
+            "changed_on_delta_humanized": obj.changed_on_delta_humanized(),
+            "changed_on_utc": obj.changed_on_utc(),
+        }
+
+    @staticmethod
+    def _serialize_semantic_view(obj: SemanticView) -> dict[str, Any]:
+        changed_by = obj.changed_by
+        return {
+            "id": obj.id,
+            "uuid": str(obj.uuid),
+            "table_name": obj.name,
+            "kind": "semantic_view",
+            "source_type": "semantic_layer",
+            "description": obj.description,
+            "cache_timeout": obj.cache_timeout,
+            "explore_url": obj.explore_url,
+            "database": None,
+            "schema": None,
+            "sql": None,
+            "extra": None,
+            "owners": [],
+            "changed_by_name": obj.changed_by_name,
+            "changed_by": {
+                "first_name": changed_by.first_name,
+                "last_name": changed_by.last_name,
+            }
+            if changed_by
+            else None,
+            "changed_on_delta_humanized": obj.changed_on_delta_humanized(),
+            "changed_on_utc": obj.changed_on_utc(),
+        }
diff --git a/superset/semantic_layers/models.py b/superset/semantic_layers/models.py
index 80c0d88d400..95b225e9592 100644
--- a/superset/semantic_layers/models.py
+++ b/superset/semantic_layers/models.py
@@ -205,6 +205,14 @@ class SemanticView(AuditMixinNullable, Model):
     def get_query_str(self, query_obj: QueryObjectDict) -> str:
         return "Not implemented for semantic layers"
 
+    @property
+    def table_name(self) -> str:
+        return self.name
+
+    @property
+    def kind(self) -> str:
+        return "semantic_view"
+
     @property
     def uid(self) -> str:
         return self.implementation.uid()
diff --git a/superset/static/service-worker.js b/superset/static/service-worker.js
index 43cb14a4894..85638a05975 100644
--- a/superset/static/service-worker.js
+++ b/superset/static/service-worker.js
@@ -1,27 +1,1471 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
+/*
+ * ATTENTION: An "eval-source-map" devtool has been used.
+ * This devtool is neither made for production nor for readable output files.
+ * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools.
+ * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/)
+ * or disable the default devtool with "devtool: false".
+ * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/).
  */
+/******/ (() => { // webpackBootstrap
+/******/ 	"use strict";
+/******/ 	var __webpack_modules__ = ({
 
-// Minimal service worker for PWA file handling support
-self.addEventListener('install', event => {
-  event.waitUntil(self.skipWaiting());
-});
+/***/ "./src/service-worker.ts"
+/*!*******************************!*\
+  !*** ./src/service-worker.ts ***!
+  \*******************************/
+() {
 
-self.addEventListener('activate', event => {
-  event.waitUntil(self.clients.claim());
-});
+eval("{/**\n * Licensed to the Apache Software Foundation (ASF) under one\n * or more contributor license agreements.  See the NOTICE file\n * distributed with this work for additional information\n * regarding copyright ownership.  The ASF licenses this file\n * to you under the Apache License, Version 2.0 (the\n * \"License\"); you may not use this file except in compliance\n * with the License.  You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2 [...]
+
+/***/ }
+
+/******/ 	});
+/************************************************************************/
+/******/ 	// The module cache
+/******/ 	var __webpack_module_cache__ = {};
+/******/ 	
+/******/ 	// The require function
+/******/ 	function __webpack_require__(moduleId) {
+/******/ 		// Check if module is in cache
+/******/ 		var cachedModule = __webpack_module_cache__[moduleId];
+/******/ 		if (cachedModule !== undefined) {
+/******/ 			return cachedModule.exports;
+/******/ 		}
+/******/ 		// Check if module exists (development only)
+/******/ 		if (__webpack_modules__[moduleId] === undefined) {
+/******/ 			var e = new Error("Cannot find module '" + moduleId + "'");
+/******/ 			e.code = 'MODULE_NOT_FOUND';
+/******/ 			throw e;
+/******/ 		}
+/******/ 		// Create a new module (and put it into the cache)
+/******/ 		var module = __webpack_module_cache__[moduleId] = {
+/******/ 			id: moduleId,
+/******/ 			loaded: false,
+/******/ 			exports: {}
+/******/ 		};
+/******/ 	
+/******/ 		// Execute the module function
+/******/ 		var execOptions = { id: moduleId, module: module, factory: __webpack_modules__[moduleId], require: __webpack_require__ };
+/******/ 		__webpack_require__.i.forEach(function(handler) { handler(execOptions); });
+/******/ 		module = execOptions.module;
+/******/ 		execOptions.factory.call(module.exports, module, module.exports, execOptions.require);
+/******/ 	
+/******/ 		// Flag the module as loaded
+/******/ 		module.loaded = true;
+/******/ 	
+/******/ 		// Return the exports of the module
+/******/ 		return module.exports;
+/******/ 	}
+/******/ 	
+/******/ 	// expose the modules object (__webpack_modules__)
+/******/ 	__webpack_require__.m = __webpack_modules__;
+/******/ 	
+/******/ 	// expose the module cache
+/******/ 	__webpack_require__.c = __webpack_module_cache__;
+/******/ 	
+/******/ 	// expose the module execution interceptor
+/******/ 	__webpack_require__.i = [];
+/******/ 	
+/************************************************************************/
+/******/ 	/* webpack/runtime/chunk loaded */
+/******/ 	(() => {
+/******/ 		var deferred = [];
+/******/ 		__webpack_require__.O = (result, chunkIds, fn, priority) => {
+/******/ 			if(chunkIds) {
+/******/ 				priority = priority || 0;
+/******/ 				for(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];
+/******/ 				deferred[i] = [chunkIds, fn, priority];
+/******/ 				return;
+/******/ 			}
+/******/ 			var notFulfilled = Infinity;
+/******/ 			for (var i = 0; i < deferred.length; i++) {
+/******/ 				var [chunkIds, fn, priority] = deferred[i];
+/******/ 				var fulfilled = true;
+/******/ 				for (var j = 0; j < chunkIds.length; j++) {
+/******/ 					if ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every((key) => (__webpack_require__.O[key](chunkIds[j])))) {
+/******/ 						chunkIds.splice(j--, 1);
+/******/ 					} else {
+/******/ 						fulfilled = false;
+/******/ 						if(priority < notFulfilled) notFulfilled = priority;
+/******/ 					}
+/******/ 				}
+/******/ 				if(fulfilled) {
+/******/ 					deferred.splice(i--, 1)
+/******/ 					var r = fn();
+/******/ 					if (r !== undefined) result = r;
+/******/ 				}
+/******/ 			}
+/******/ 			return result;
+/******/ 		};
+/******/ 	})();
+/******/ 	
+/******/ 	/* webpack/runtime/compat get default export */
+/******/ 	(() => {
+/******/ 		// getDefaultExport function for compatibility with non-harmony modules
+/******/ 		__webpack_require__.n = (module) => {
+/******/ 			var getter = module && module.__esModule ?
+/******/ 				() => (module['default']) :
+/******/ 				() => (module);
+/******/ 			__webpack_require__.d(getter, { a: getter });
+/******/ 			return getter;
+/******/ 		};
+/******/ 	})();
+/******/ 	
+/******/ 	/* webpack/runtime/create fake namespace object */
+/******/ 	(() => {
+/******/ 		var getProto = Object.getPrototypeOf ? (obj) => (Object.getPrototypeOf(obj)) : (obj) => (obj.__proto__);
+/******/ 		var leafPrototypes;
+/******/ 		// create a fake namespace object
+/******/ 		// mode & 1: value is a module id, require it
+/******/ 		// mode & 2: merge all properties of value into the ns
+/******/ 		// mode & 4: return value when already ns object
+/******/ 		// mode & 16: return value when it's Promise-like
+/******/ 		// mode & 8|1: behave like require
+/******/ 		__webpack_require__.t = function(value, mode) {
+/******/ 			if(mode & 1) value = this(value);
+/******/ 			if(mode & 8) return value;
+/******/ 			if(typeof value === 'object' && value) {
+/******/ 				if((mode & 4) && value.__esModule) return value;
+/******/ 				if((mode & 16) && typeof value.then === 'function') return value;
+/******/ 			}
+/******/ 			var ns = Object.create(null);
+/******/ 			__webpack_require__.r(ns);
+/******/ 			var def = {};
+/******/ 			leafPrototypes = leafPrototypes || [null, getProto({}), getProto([]), getProto(getProto)];
+/******/ 			for(var current = mode & 2 && value; (typeof current == 'object' || typeof current == 'function') && !~leafPrototypes.indexOf(current); current = getProto(current)) {
+/******/ 				Object.getOwnPropertyNames(current).forEach((key) => (def[key] = () => (value[key])));
+/******/ 			}
+/******/ 			def['default'] = () => (value);
+/******/ 			__webpack_require__.d(ns, def);
+/******/ 			return ns;
+/******/ 		};
+/******/ 	})();
+/******/ 	
+/******/ 	/* webpack/runtime/define property getters */
+/******/ 	(() => {
+/******/ 		// define getter functions for harmony exports
+/******/ 		__webpack_require__.d = (exports, definition) => {
+/******/ 			for(var key in definition) {
+/******/ 				if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {
+/******/ 					Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });
+/******/ 				}
+/******/ 			}
+/******/ 		};
+/******/ 	})();
+/******/ 	
+/******/ 	/* webpack/runtime/get javascript update chunk filename */
+/******/ 	(() => {
+/******/ 		// This function allow to reference all chunks
+/******/ 		__webpack_require__.hu = (chunkId) => {
+/******/ 			// return url for filenames based on template
+/******/ 			return "" + chunkId + "." + __webpack_require__.h() + ".hot-update.js";
+/******/ 		};
+/******/ 	})();
+/******/ 	
+/******/ 	/* webpack/runtime/get update manifest filename */
+/******/ 	(() => {
+/******/ 		__webpack_require__.hmrF = () => ("service-worker." + __webpack_require__.h() + ".hot-update.json");
+/******/ 	})();
+/******/ 	
+/******/ 	/* webpack/runtime/getFullHash */
+/******/ 	(() => {
+/******/ 		__webpack_require__.h = () => ("87e83073d75b3c4295d1")
+/******/ 	})();
+/******/ 	
+/******/ 	/* webpack/runtime/harmony module decorator */
+/******/ 	(() => {
+/******/ 		__webpack_require__.hmd = (module) => {
+/******/ 			module = Object.create(module);
+/******/ 			if (!module.children) module.children = [];
+/******/ 			Object.defineProperty(module, 'exports', {
+/******/ 				enumerable: true,
+/******/ 				set: () => {
+/******/ 					throw new Error('ES Modules may not assign module.exports or exports.*, Use ESM export syntax, instead: ' + module.id);
+/******/ 				}
+/******/ 			});
+/******/ 			return module;
+/******/ 		};
+/******/ 	})();
+/******/ 	
+/******/ 	/* webpack/runtime/hasOwnProperty shorthand */
+/******/ 	(() => {
+/******/ 		__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))
+/******/ 	})();
+/******/ 	
+/******/ 	/* webpack/runtime/load script */
+/******/ 	(() => {
+/******/ 		var inProgress = {};
+/******/ 		var dataWebpackPrefix = "superset:";
+/******/ 		// loadScript function to load a script via script tag
+/******/ 		__webpack_require__.l = (url, done, key, chunkId) => {
+/******/ 			if(inProgress[url]) { inProgress[url].push(done); return; }
+/******/ 			var script, needAttach;
+/******/ 			if(key !== undefined) {
+/******/ 				var scripts = document.getElementsByTagName("script");
+/******/ 				for(var i = 0; i < scripts.length; i++) {
+/******/ 					var s = scripts[i];
+/******/ 					if(s.getAttribute("src") == url || s.getAttribute("data-webpack") == dataWebpackPrefix + key) { script = s; break; }
+/******/ 				}
+/******/ 			}
+/******/ 			if(!script) {
+/******/ 				needAttach = true;
+/******/ 				script = document.createElement('script');
+/******/ 		
+/******/ 				script.charset = 'utf-8';
+/******/ 				if (__webpack_require__.nc) {
+/******/ 					script.setAttribute("nonce", __webpack_require__.nc);
+/******/ 				}
+/******/ 				script.setAttribute("data-webpack", dataWebpackPrefix + key);
+/******/ 		
+/******/ 				script.src = url;
+/******/ 			}
+/******/ 			inProgress[url] = [done];
+/******/ 			var onScriptComplete = (prev, event) => {
+/******/ 				// avoid mem leaks in IE.
+/******/ 				script.onerror = script.onload = null;
+/******/ 				clearTimeout(timeout);
+/******/ 				var doneFns = inProgress[url];
+/******/ 				delete inProgress[url];
+/******/ 				script.parentNode && script.parentNode.removeChild(script);
+/******/ 				doneFns && doneFns.forEach((fn) => (fn(event)));
+/******/ 				if(prev) return prev(event);
+/******/ 			}
+/******/ 			var timeout = setTimeout(onScriptComplete.bind(null, undefined, { type: 'timeout', target: script }), 120000);
+/******/ 			script.onerror = onScriptComplete.bind(null, script.onerror);
+/******/ 			script.onload = onScriptComplete.bind(null, script.onload);
+/******/ 			needAttach && document.head.appendChild(script);
+/******/ 		};
+/******/ 	})();
+/******/ 	
+/******/ 	/* webpack/runtime/make namespace object */
+/******/ 	(() => {
+/******/ 		// define __esModule on exports
+/******/ 		__webpack_require__.r = (exports) => {
+/******/ 			if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
+/******/ 				Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+/******/ 			}
+/******/ 			Object.defineProperty(exports, '__esModule', { value: true });
+/******/ 		};
+/******/ 	})();
+/******/ 	
+/******/ 	/* webpack/runtime/node module decorator */
+/******/ 	(() => {
+/******/ 		__webpack_require__.nmd = (module) => {
+/******/ 			module.paths = [];
+/******/ 			if (!module.children) module.children = [];
+/******/ 			return module;
+/******/ 		};
+/******/ 	})();
+/******/ 	
+/******/ 	/* webpack/runtime/sharing */
+/******/ 	(() => {
+/******/ 		__webpack_require__.S = {};
+/******/ 		var initPromises = {};
+/******/ 		var initTokens = {};
+/******/ 		__webpack_require__.I = (name, initScope) => {
+/******/ 			if(!initScope) initScope = [];
+/******/ 			// handling circular init calls
+/******/ 			var initToken = initTokens[name];
+/******/ 			if(!initToken) initToken = initTokens[name] = {};
+/******/ 			if(initScope.indexOf(initToken) >= 0) return;
+/******/ 			initScope.push(initToken);
+/******/ 			// only runs once
+/******/ 			if(initPromises[name]) return initPromises[name];
+/******/ 			// creates a new share scope if needed
+/******/ 			if(!__webpack_require__.o(__webpack_require__.S, name)) __webpack_require__.S[name] = {};
+/******/ 			// runs all init snippets from all modules reachable
+/******/ 			var scope = __webpack_require__.S[name];
+/******/ 			var warn = (msg) => {
+/******/ 				if (typeof console !== "undefined" && console.warn) console.warn(msg);
+/******/ 			};
+/******/ 			var uniqueName = "superset";
+/******/ 			var register = (name, version, factory, eager) => {
+/******/ 				var versions = scope[name] = scope[name] || {};
+/******/ 				var activeVersion = versions[version];
+/******/ 				if(!activeVersion || (!activeVersion.loaded && (!eager != !activeVersion.eager ? eager : uniqueName > activeVersion.from))) versions[version] = { get: factory, from: uniqueName, eager: !!eager };
+/******/ 			};
+/******/ 			var initExternal = (id) => {
+/******/ 				var handleError = (err) => (warn("Initialization of sharing external failed: " + err));
+/******/ 				try {
+/******/ 					var module = __webpack_require__(id);
+/******/ 					if(!module) return;
+/******/ 					var initFn = (module) => (module && module.init && module.init(__webpack_require__.S[name], initScope))
+/******/ 					if(module.then) return promises.push(module.then(initFn, handleError));
+/******/ 					var initResult = initFn(module);
+/******/ 					if(initResult && initResult.then) return promises.push(initResult['catch'](handleError));
+/******/ 				} catch(err) { handleError(err); }
+/******/ 			}
+/******/ 			var promises = [];
+/******/ 			switch(name) {
+/******/ 				case "default": {
+/******/ 					register("antd", "5.27.6", () => (() => (__webpack_require__(/*! ./node_modules/antd/es/index.js */ "./node_modules/antd/es/index.js"))), 1);
+/******/ 					register("react-dom", "17.0.2", () => (() => (__webpack_require__(/*! ./node_modules/react-dom/index.js */ "./node_modules/react-dom/index.js"))), 1);
+/******/ 					register("react", "17.0.2", () => (() => (__webpack_require__(/*! ./node_modules/react/index.js */ "./node_modules/react/index.js"))), 1);
+/******/ 				}
+/******/ 				break;
+/******/ 			}
+/******/ 			if(!promises.length) return initPromises[name] = 1;
+/******/ 			return initPromises[name] = Promise.all(promises).then(() => (initPromises[name] = 1));
+/******/ 		};
+/******/ 	})();
+/******/ 	
+/******/ 	/* webpack/runtime/hot module replacement */
+/******/ 	(() => {
+/******/ 		var currentModuleData = {};
+/******/ 		var installedModules = __webpack_require__.c;
+/******/ 		
+/******/ 		// module and require creation
+/******/ 		var currentChildModule;
+/******/ 		var currentParents = [];
+/******/ 		
+/******/ 		// status
+/******/ 		var registeredStatusHandlers = [];
+/******/ 		var currentStatus = "idle";
+/******/ 		
+/******/ 		// while downloading
+/******/ 		var blockingPromises = 0;
+/******/ 		var blockingPromisesWaiting = [];
+/******/ 		
+/******/ 		// The update info
+/******/ 		var currentUpdateApplyHandlers;
+/******/ 		var queuedInvalidatedModules;
+/******/ 		
+/******/ 		__webpack_require__.hmrD = currentModuleData;
+/******/ 		
+/******/ 		__webpack_require__.i.push(function (options) {
+/******/ 			var module = options.module;
+/******/ 			var require = createRequire(options.require, options.id);
+/******/ 			module.hot = createModuleHotObject(options.id, module);
+/******/ 			module.parents = currentParents;
+/******/ 			module.children = [];
+/******/ 			currentParents = [];
+/******/ 			options.require = require;
+/******/ 		});
+/******/ 		
+/******/ 		__webpack_require__.hmrC = {};
+/******/ 		__webpack_require__.hmrI = {};
+/******/ 		
+/******/ 		function createRequire(require, moduleId) {
+/******/ 			var me = installedModules[moduleId];
+/******/ 			if (!me) return require;
+/******/ 			var fn = function (request) {
+/******/ 				if (me.hot.active) {
+/******/ 					if (installedModules[request]) {
+/******/ 						var parents = installedModules[request].parents;
+/******/ 						if (parents.indexOf(moduleId) === -1) {
+/******/ 							parents.push(moduleId);
+/******/ 						}
+/******/ 					} else {
+/******/ 						currentParents = [moduleId];
+/******/ 						currentChildModule = request;
+/******/ 					}
+/******/ 					if (me.children.indexOf(request) === -1) {
+/******/ 						me.children.push(request);
+/******/ 					}
+/******/ 				} else {
+/******/ 					console.warn(
+/******/ 						"[HMR] unexpected require(" +
+/******/ 							request +
+/******/ 							") from disposed module " +
+/******/ 							moduleId
+/******/ 					);
+/******/ 					currentParents = [];
+/******/ 				}
+/******/ 				return require(request);
+/******/ 			};
+/******/ 			var createPropertyDescriptor = function (name) {
+/******/ 				return {
+/******/ 					configurable: true,
+/******/ 					enumerable: true,
+/******/ 					get: function () {
+/******/ 						return require[name];
+/******/ 					},
+/******/ 					set: function (value) {
+/******/ 						require[name] = value;
+/******/ 					}
+/******/ 				};
+/******/ 			};
+/******/ 			for (var name in require) {
+/******/ 				if (Object.prototype.hasOwnProperty.call(require, name) && name !== "e") {
+/******/ 					Object.defineProperty(fn, name, createPropertyDescriptor(name));
+/******/ 				}
+/******/ 			}
+/******/ 			fn.e = function (chunkId, fetchPriority) {
+/******/ 				return trackBlockingPromise(require.e(chunkId, fetchPriority));
+/******/ 			};
+/******/ 			return fn;
+/******/ 		}
+/******/ 		
+/******/ 		function createModuleHotObject(moduleId, me) {
+/******/ 			var _main = currentChildModule !== moduleId;
+/******/ 			var hot = {
+/******/ 				// private stuff
+/******/ 				_acceptedDependencies: {},
+/******/ 				_acceptedErrorHandlers: {},
+/******/ 				_declinedDependencies: {},
+/******/ 				_selfAccepted: false,
+/******/ 				_selfDeclined: false,
+/******/ 				_selfInvalidated: false,
+/******/ 				_disposeHandlers: [],
+/******/ 				_main: _main,
+/******/ 				_requireSelf: function () {
+/******/ 					currentParents = me.parents.slice();
+/******/ 					currentChildModule = _main ? undefined : moduleId;
+/******/ 					__webpack_require__(moduleId);
+/******/ 				},
+/******/ 		
+/******/ 				// Module API
+/******/ 				active: true,
+/******/ 				accept: function (dep, callback, errorHandler) {
+/******/ 					if (dep === undefined) hot._selfAccepted = true;
+/******/ 					else if (typeof dep === "function") hot._selfAccepted = dep;
+/******/ 					else if (typeof dep === "object" && dep !== null) {
+/******/ 						for (var i = 0; i < dep.length; i++) {
+/******/ 							hot._acceptedDependencies[dep[i]] = callback || function () {};
+/******/ 							hot._acceptedErrorHandlers[dep[i]] = errorHandler;
+/******/ 						}
+/******/ 					} else {
+/******/ 						hot._acceptedDependencies[dep] = callback || function () {};
+/******/ 						hot._acceptedErrorHandlers[dep] = errorHandler;
+/******/ 					}
+/******/ 				},
+/******/ 				decline: function (dep) {
+/******/ 					if (dep === undefined) hot._selfDeclined = true;
+/******/ 					else if (typeof dep === "object" && dep !== null)
+/******/ 						for (var i = 0; i < dep.length; i++)
+/******/ 							hot._declinedDependencies[dep[i]] = true;
+/******/ 					else hot._declinedDependencies[dep] = true;
+/******/ 				},
+/******/ 				dispose: function (callback) {
+/******/ 					hot._disposeHandlers.push(callback);
+/******/ 				},
+/******/ 				addDisposeHandler: function (callback) {
+/******/ 					hot._disposeHandlers.push(callback);
+/******/ 				},
+/******/ 				removeDisposeHandler: function (callback) {
+/******/ 					var idx = hot._disposeHandlers.indexOf(callback);
+/******/ 					if (idx >= 0) hot._disposeHandlers.splice(idx, 1);
+/******/ 				},
+/******/ 				invalidate: function () {
+/******/ 					this._selfInvalidated = true;
+/******/ 					switch (currentStatus) {
+/******/ 						case "idle":
+/******/ 							currentUpdateApplyHandlers = [];
+/******/ 							Object.keys(__webpack_require__.hmrI).forEach(function (key) {
+/******/ 								__webpack_require__.hmrI[key](
+/******/ 									moduleId,
+/******/ 									currentUpdateApplyHandlers
+/******/ 								);
+/******/ 							});
+/******/ 							setStatus("ready");
+/******/ 							break;
+/******/ 						case "ready":
+/******/ 							Object.keys(__webpack_require__.hmrI).forEach(function (key) {
+/******/ 								__webpack_require__.hmrI[key](
+/******/ 									moduleId,
+/******/ 									currentUpdateApplyHandlers
+/******/ 								);
+/******/ 							});
+/******/ 							break;
+/******/ 						case "prepare":
+/******/ 						case "check":
+/******/ 						case "dispose":
+/******/ 						case "apply":
+/******/ 							(queuedInvalidatedModules = queuedInvalidatedModules || []).push(
+/******/ 								moduleId
+/******/ 							);
+/******/ 							break;
+/******/ 						default:
+/******/ 							// ignore requests in error states
+/******/ 							break;
+/******/ 					}
+/******/ 				},
+/******/ 		
+/******/ 				// Management API
+/******/ 				check: hotCheck,
+/******/ 				apply: hotApply,
+/******/ 				status: function (l) {
+/******/ 					if (!l) return currentStatus;
+/******/ 					registeredStatusHandlers.push(l);
+/******/ 				},
+/******/ 				addStatusHandler: function (l) {
+/******/ 					registeredStatusHandlers.push(l);
+/******/ 				},
+/******/ 				removeStatusHandler: function (l) {
+/******/ 					var idx = registeredStatusHandlers.indexOf(l);
+/******/ 					if (idx >= 0) registeredStatusHandlers.splice(idx, 1);
+/******/ 				},
+/******/ 		
+/******/ 				// inherit from previous dispose call
+/******/ 				data: currentModuleData[moduleId]
+/******/ 			};
+/******/ 			currentChildModule = undefined;
+/******/ 			return hot;
+/******/ 		}
+/******/ 		
+/******/ 		function setStatus(newStatus) {
+/******/ 			currentStatus = newStatus;
+/******/ 			var results = [];
+/******/ 		
+/******/ 			for (var i = 0; i < registeredStatusHandlers.length; i++)
+/******/ 				results[i] = registeredStatusHandlers[i].call(null, newStatus);
+/******/ 		
+/******/ 			return Promise.all(results).then(function () {});
+/******/ 		}
+/******/ 		
+/******/ 		function unblock() {
+/******/ 			if (--blockingPromises === 0) {
+/******/ 				setStatus("ready").then(function () {
+/******/ 					if (blockingPromises === 0) {
+/******/ 						var list = blockingPromisesWaiting;
+/******/ 						blockingPromisesWaiting = [];
+/******/ 						for (var i = 0; i < list.length; i++) {
+/******/ 							list[i]();
+/******/ 						}
+/******/ 					}
+/******/ 				});
+/******/ 			}
+/******/ 		}
+/******/ 		
+/******/ 		function trackBlockingPromise(promise) {
+/******/ 			switch (currentStatus) {
+/******/ 				case "ready":
+/******/ 					setStatus("prepare");
+/******/ 				/* fallthrough */
+/******/ 				case "prepare":
+/******/ 					blockingPromises++;
+/******/ 					promise.then(unblock, unblock);
+/******/ 					return promise;
+/******/ 				default:
+/******/ 					return promise;
+/******/ 			}
+/******/ 		}
+/******/ 		
+/******/ 		function waitForBlockingPromises(fn) {
+/******/ 			if (blockingPromises === 0) return fn();
+/******/ 			return new Promise(function (resolve) {
+/******/ 				blockingPromisesWaiting.push(function () {
+/******/ 					resolve(fn());
+/******/ 				});
+/******/ 			});
+/******/ 		}
+/******/ 		
+/******/ 		function hotCheck(applyOnUpdate) {
+/******/ 			if (currentStatus !== "idle") {
+/******/ 				throw new Error("check() is only allowed in idle status");
+/******/ 			}
+/******/ 			return setStatus("check")
+/******/ 				.then(__webpack_require__.hmrM)
+/******/ 				.then(function (update) {
+/******/ 					if (!update) {
+/******/ 						return setStatus(applyInvalidatedModules() ? "ready" : "idle").then(
+/******/ 							function () {
+/******/ 								return null;
+/******/ 							}
+/******/ 						);
+/******/ 					}
+/******/ 		
+/******/ 					return setStatus("prepare").then(function () {
+/******/ 						var updatedModules = [];
+/******/ 						currentUpdateApplyHandlers = [];
+/******/ 		
+/******/ 						return Promise.all(
+/******/ 							Object.keys(__webpack_require__.hmrC).reduce(function (
+/******/ 								promises,
+/******/ 								key
+/******/ 							) {
+/******/ 								__webpack_require__.hmrC[key](
+/******/ 									update.c,
+/******/ 									update.r,
+/******/ 									update.m,
+/******/ 									promises,
+/******/ 									currentUpdateApplyHandlers,
+/******/ 									updatedModules,
+/******/ 									update.css
+/******/ 								);
+/******/ 								return promises;
+/******/ 							}, [])
+/******/ 						).then(function () {
+/******/ 							return waitForBlockingPromises(function () {
+/******/ 								if (applyOnUpdate) {
+/******/ 									return internalApply(applyOnUpdate);
+/******/ 								}
+/******/ 								return setStatus("ready").then(function () {
+/******/ 									return updatedModules;
+/******/ 								});
+/******/ 							});
+/******/ 						});
+/******/ 					});
+/******/ 				});
+/******/ 		}
+/******/ 		
+/******/ 		function hotApply(options) {
+/******/ 			if (currentStatus !== "ready") {
+/******/ 				return Promise.resolve().then(function () {
+/******/ 					throw new Error(
+/******/ 						"apply() is only allowed in ready status (state: " +
+/******/ 							currentStatus +
+/******/ 							")"
+/******/ 					);
+/******/ 				});
+/******/ 			}
+/******/ 			return internalApply(options);
+/******/ 		}
+/******/ 		
+/******/ 		function internalApply(options) {
+/******/ 			options = options || {};
+/******/ 		
+/******/ 			applyInvalidatedModules();
+/******/ 		
+/******/ 			var results = currentUpdateApplyHandlers.map(function (handler) {
+/******/ 				return handler(options);
+/******/ 			});
+/******/ 			currentUpdateApplyHandlers = undefined;
+/******/ 		
+/******/ 			var errors = results
+/******/ 				.map(function (r) {
+/******/ 					return r.error;
+/******/ 				})
+/******/ 				.filter(Boolean);
+/******/ 		
+/******/ 			if (errors.length > 0) {
+/******/ 				return setStatus("abort").then(function () {
+/******/ 					throw errors[0];
+/******/ 				});
+/******/ 			}
+/******/ 		
+/******/ 			// Now in "dispose" phase
+/******/ 			var disposePromise = setStatus("dispose");
+/******/ 		
+/******/ 			results.forEach(function (result) {
+/******/ 				if (result.dispose) result.dispose();
+/******/ 			});
+/******/ 		
+/******/ 			// Now in "apply" phase
+/******/ 			var applyPromise = setStatus("apply");
+/******/ 		
+/******/ 			var error;
+/******/ 			var reportError = function (err) {
+/******/ 				if (!error) error = err;
+/******/ 			};
+/******/ 		
+/******/ 			var outdatedModules = [];
+/******/ 		
+/******/ 			var onAccepted = function () {
+/******/ 				return Promise.all([disposePromise, applyPromise]).then(function () {
+/******/ 					// handle errors in accept handlers and self accepted module load
+/******/ 					if (error) {
+/******/ 						return setStatus("fail").then(function () {
+/******/ 							throw error;
+/******/ 						});
+/******/ 					}
+/******/ 		
+/******/ 					if (queuedInvalidatedModules) {
+/******/ 						return internalApply(options).then(function (list) {
+/******/ 							outdatedModules.forEach(function (moduleId) {
+/******/ 								if (list.indexOf(moduleId) < 0) list.push(moduleId);
+/******/ 							});
+/******/ 							return list;
+/******/ 						});
+/******/ 					}
+/******/ 		
+/******/ 					return setStatus("idle").then(function () {
+/******/ 						return outdatedModules;
+/******/ 					});
+/******/ 				});
+/******/ 			};
+/******/ 		
+/******/ 			return Promise.all(
+/******/ 				results
+/******/ 					.filter(function (result) {
+/******/ 						return result.apply;
+/******/ 					})
+/******/ 					.map(function (result) {
+/******/ 						return result.apply(reportError);
+/******/ 					})
+/******/ 			)
+/******/ 				.then(function (applyResults) {
+/******/ 					applyResults.forEach(function (modules) {
+/******/ 						if (modules) {
+/******/ 							for (var i = 0; i < modules.length; i++) {
+/******/ 								outdatedModules.push(modules[i]);
+/******/ 							}
+/******/ 						}
+/******/ 					});
+/******/ 				})
+/******/ 				.then(onAccepted);
+/******/ 		}
+/******/ 		
+/******/ 		function applyInvalidatedModules() {
+/******/ 			if (queuedInvalidatedModules) {
+/******/ 				if (!currentUpdateApplyHandlers) currentUpdateApplyHandlers = [];
+/******/ 				Object.keys(__webpack_require__.hmrI).forEach(function (key) {
+/******/ 					queuedInvalidatedModules.forEach(function (moduleId) {
+/******/ 						__webpack_require__.hmrI[key](
+/******/ 							moduleId,
+/******/ 							currentUpdateApplyHandlers
+/******/ 						);
+/******/ 					});
+/******/ 				});
+/******/ 				queuedInvalidatedModules = undefined;
+/******/ 				return true;
+/******/ 			}
+/******/ 		}
+/******/ 	})();
+/******/ 	
+/******/ 	/* webpack/runtime/publicPath */
+/******/ 	(() => {
+/******/ 		__webpack_require__.p = "/static/assets/";
+/******/ 	})();
+/******/ 	
+/******/ 	/* webpack/runtime/react refresh */
+/******/ 	(() => {
+/******/ 		const setup = (moduleId) => {
+/******/ 			const refresh = {
+/******/ 				moduleId: moduleId,
+/******/ 				register: (type, id) => {
+/******/ 					const typeId = moduleId + ' ' + id;
+/******/ 					refresh.runtime.register(type, typeId);
+/******/ 				},
+/******/ 				signature: () => (refresh.runtime.createSignatureFunctionForTransform()),
+/******/ 				runtime: {
+/******/ 					createSignatureFunctionForTransform: () => ((type) => (type)),
+/******/ 					register: x => {}
+/******/ 				},
+/******/ 			};
+/******/ 			return refresh;
+/******/ 		};
+/******/ 		
+/******/ 		__webpack_require__.i.push((options) => {
+/******/ 			const originalFactory = options.factory;
+/******/ 			options.factory = function(moduleObject, moduleExports, webpackRequire) {
+/******/ 				const hotRequire = (request) => (webpackRequire(request));
+/******/ 				const createPropertyDescriptor = (name) => {
+/******/ 					return {
+/******/ 						configurable: true,
+/******/ 						enumerable: true,
+/******/ 						get: () => (webpackRequire[name]),
+/******/ 						set: (value) => {
+/******/ 							webpackRequire[name] = value;
+/******/ 						},
+/******/ 					};
+/******/ 				};
+/******/ 				for (const name in webpackRequire) {
+/******/ 					if (name === "$Refresh$") continue;
+/******/ 					if (Object.prototype.hasOwnProperty.call(webpackRequire, name)) {
+/******/ 						Object.defineProperty(hotRequire, name, createPropertyDescriptor(name));
+/******/ 					}
+/******/ 				}
+/******/ 				hotRequire.$Refresh$ = setup(options.id);
+/******/ 				originalFactory.call(this, moduleObject, moduleExports, hotRequire);
+/******/ 			};
+/******/ 		});
+/******/ 	})();
+/******/ 	
+/******/ 	/* webpack/runtime/consumes */
+/******/ 	(() => {
+/******/ 		var parseVersion = (str) => {
+/******/ 			// see webpack/lib/util/semver.js for original code
+/******/ 			var p=p=>{return p.split(".").map(p=>{return+p==p?+p:p})},n=/^([^-+]+)?(?:-([^+]+))?(?:\+(.+))?$/.exec(str),r=n[1]?p(n[1]):[];return n[2]&&(r.length++,r.push.apply(r,p(n[2]))),n[3]&&(r.push([]),r.push.apply(r,p(n[3]))),r;
+/******/ 		}
+/******/ 		var versionLt = (a, b) => {
+/******/ 			// see webpack/lib/util/semver.js for original code
+/******/ 			a=parseVersion(a),b=parseVersion(b);for(var r=0;;){if(r>=a.length)return r<b.length&&"u"!=(typeof b[r])[0];var e=a[r],n=(typeof e)[0];if(r>=b.length)return"u"==n;var t=b[r],f=(typeof t)[0];if(n!=f)return"o"==n&&"n"==f||("s"==f||"u"==n);if("o"!=n&&"u"!=n&&e!=t)return e<t;r++}
+/******/ 		}
+/******/ 		var rangeToString = (range) => {
+/******/ 			// see webpack/lib/util/semver.js for original code
+/******/ 			var r=range[0],n="";if(1===range.length)return"*";if(r+.5){n+=0==r?">=":-1==r?"<":1==r?"^":2==r?"~":r>0?"=":"!=";for(var e=1,a=1;a<range.length;a++){e--,n+="u"==(typeof(t=range[a]))[0]?"-":(e>0?".":"")+(e=2,t)}return n}var g=[];for(a=1;a<range.length;a++){var t=range[a];g.push(0===t?"not("+o()+")":1===t?"("+o()+" || "+o()+")":2===t?g.pop()+" "+g.pop():rangeToString(t))}return o();function o(){return g.pop().replace(/^\((.+)\)$/,"$1")}
+/******/ 		}
+/******/ 		var satisfy = (range, version) => {
+/******/ 			// see webpack/lib/util/semver.js for original code
+/******/ 			if(0 in range){version=parseVersion(version);var e=range[0],r=e<0;r&&(e=-e-1);for(var n=0,i=1,a=!0;;i++,n++){var f,s,g=i<range.length?(typeof range[i])[0]:"";if(n>=version.length||"o"==(s=(typeof(f=version[n]))[0]))return!a||("u"==g?i>e&&!r:""==g!=r);if("u"==s){if(!a||"u"!=g)return!1}else if(a)if(g==s)if(i<=e){if(f!=range[i])return!1}else{if(r?f>range[i]:f<range[i])return!1;f!=range[i]&&(a=!1)}else if("s"!=g&&"n"!=g){if(r||i<=e)return!1;a=!1,i--}else{if(i<=e||s<g!=r)return!1; [...]
+/******/ 		}
+/******/ 		var exists = (scope, key) => {
+/******/ 			return scope && __webpack_require__.o(scope, key);
+/******/ 		}
+/******/ 		var get = (entry) => {
+/******/ 			entry.loaded = 1;
+/******/ 			return entry.get()
+/******/ 		};
+/******/ 		var eagerOnly = (versions) => {
+/******/ 			return Object.keys(versions).reduce((filtered, version) => {
+/******/ 					if (versions[version].eager) {
+/******/ 						filtered[version] = versions[version];
+/******/ 					}
+/******/ 					return filtered;
+/******/ 			}, {});
+/******/ 		};
+/******/ 		var findLatestVersion = (scope, key, eager) => {
+/******/ 			var versions = eager ? eagerOnly(scope[key]) : scope[key];
+/******/ 			var key = Object.keys(versions).reduce((a, b) => {
+/******/ 				return !a || versionLt(a, b) ? b : a;
+/******/ 			}, 0);
+/******/ 			return key && versions[key];
+/******/ 		};
+/******/ 		var findSatisfyingVersion = (scope, key, requiredVersion, eager) => {
+/******/ 			var versions = eager ? eagerOnly(scope[key]) : scope[key];
+/******/ 			var key = Object.keys(versions).reduce((a, b) => {
+/******/ 				if (!satisfy(requiredVersion, b)) return a;
+/******/ 				return !a || versionLt(a, b) ? b : a;
+/******/ 			}, 0);
+/******/ 			return key && versions[key]
+/******/ 		};
+/******/ 		var findSingletonVersionKey = (scope, key, eager) => {
+/******/ 			var versions = eager ? eagerOnly(scope[key]) : scope[key];
+/******/ 			return Object.keys(versions).reduce((a, b) => {
+/******/ 				return !a || (!versions[a].loaded && versionLt(a, b)) ? b : a;
+/******/ 			}, 0);
+/******/ 		};
+/******/ 		var getInvalidSingletonVersionMessage = (scope, key, version, requiredVersion) => {
+/******/ 			return "Unsatisfied version " + version + " from " + (version && scope[key][version].from) + " of shared singleton module " + key + " (required " + rangeToString(requiredVersion) + ")"
+/******/ 		};
+/******/ 		var getInvalidVersionMessage = (scope, scopeName, key, requiredVersion, eager) => {
+/******/ 			var versions = scope[key];
+/******/ 			return "No satisfying version (" + rangeToString(requiredVersion) + ")" + (eager ? " for eager consumption" : "") + " of shared module " + key + " found in shared scope " + scopeName + ".\n" +
+/******/ 				"Available versions: " + Object.keys(versions).map((key) => {
+/******/ 				return key + " from " + versions[key].from;
+/******/ 			}).join(", ");
+/******/ 		};
+/******/ 		var fail = (msg) => {
+/******/ 			throw new Error(msg);
+/******/ 		}
+/******/ 		var failAsNotExist = (scopeName, key) => {
+/******/ 			return fail("Shared module " + key + " doesn't exist in shared scope " + scopeName);
+/******/ 		}
+/******/ 		var warn = /*#__PURE__*/ (msg) => {
+/******/ 			if (typeof console !== "undefined" && console.warn) console.warn(msg);
+/******/ 		};
+/******/ 		var init = (fn) => (function(scopeName, key, eager, c, d) {
+/******/ 			var promise = __webpack_require__.I(scopeName);
+/******/ 			if (promise && promise.then && !eager) {
+/******/ 				return promise.then(fn.bind(fn, scopeName, __webpack_require__.S[scopeName], key, false, c, d));
+/******/ 			}
+/******/ 			return fn(scopeName, __webpack_require__.S[scopeName], key, eager, c, d);
+/******/ 		});
+/******/ 		
+/******/ 		var useFallback = (scopeName, key, fallback) => {
+/******/ 			return fallback ? fallback() : failAsNotExist(scopeName, key);
+/******/ 		}
+/******/ 		var load = /*#__PURE__*/ init((scopeName, scope, key, eager, fallback) => {
+/******/ 			if (!exists(scope, key)) return useFallback(scopeName, key, fallback);
+/******/ 			return get(findLatestVersion(scope, key, eager));
+/******/ 		});
+/******/ 		var loadVersion = /*#__PURE__*/ init((scopeName, scope, key, eager, requiredVersion, fallback) => {
+/******/ 			if (!exists(scope, key)) return useFallback(scopeName, key, fallback);
+/******/ 			var satisfyingVersion = findSatisfyingVersion(scope, key, requiredVersion, eager);
+/******/ 			if (satisfyingVersion) return get(satisfyingVersion);
+/******/ 			warn(getInvalidVersionMessage(scope, scopeName, key, requiredVersion, eager))
+/******/ 			return get(findLatestVersion(scope, key, eager));
+/******/ 		});
+/******/ 		var loadStrictVersion = /*#__PURE__*/ init((scopeName, scope, key, eager, requiredVersion, fallback) => {
+/******/ 			if (!exists(scope, key)) return useFallback(scopeName, key, fallback);
+/******/ 			var satisfyingVersion = findSatisfyingVersion(scope, key, requiredVersion, eager);
+/******/ 			if (satisfyingVersion) return get(satisfyingVersion);
+/******/ 			if (fallback) return fallback();
+/******/ 			fail(getInvalidVersionMessage(scope, scopeName, key, requiredVersion, eager));
+/******/ 		});
+/******/ 		var loadSingleton = /*#__PURE__*/ init((scopeName, scope, key, eager, fallback) => {
+/******/ 			if (!exists(scope, key)) return useFallback(scopeName, key, fallback);
+/******/ 			var version = findSingletonVersionKey(scope, key, eager);
+/******/ 			return get(scope[key][version]);
+/******/ 		});
+/******/ 		var loadSingletonVersion = /*#__PURE__*/ init((scopeName, scope, key, eager, requiredVersion, fallback) => {
+/******/ 			if (!exists(scope, key)) return useFallback(scopeName, key, fallback);
+/******/ 			var version = findSingletonVersionKey(scope, key, eager);
+/******/ 			if (!satisfy(requiredVersion, version)) {
+/******/ 				warn(getInvalidSingletonVersionMessage(scope, key, version, requiredVersion));
+/******/ 			}
+/******/ 			return get(scope[key][version]);
+/******/ 		});
+/******/ 		var loadStrictSingletonVersion = /*#__PURE__*/ init((scopeName, scope, key, eager, requiredVersion, fallback) => {
+/******/ 			if (!exists(scope, key)) return useFallback(scopeName, key, fallback);
+/******/ 			var version = findSingletonVersionKey(scope, key, eager);
+/******/ 			if (!satisfy(requiredVersion, version)) {
+/******/ 				fail(getInvalidSingletonVersionMessage(scope, key, version, requiredVersion));
+/******/ 			}
+/******/ 			return get(scope[key][version]);
+/******/ 		});
+/******/ 		var installedModules = {};
+/******/ 		var moduleToHandlerMapping = {
+/******/ 			"webpack/sharing/consume/default/react-dom/react-dom": () => (loadSingletonVersion("default", "react-dom", true, [1,17,0,2], () => (() => (__webpack_require__(/*! react-dom */ "./node_modules/react-dom/index.js"))))),
+/******/ 			"webpack/sharing/consume/default/react/react": () => (loadSingletonVersion("default", "react", true, [1,17,0,2], () => (() => (__webpack_require__(/*! react */ "./node_modules/react/index.js")))))
+/******/ 		};
+/******/ 		var initialConsumes = ["webpack/sharing/consume/default/react-dom/react-dom","webpack/sharing/consume/default/react/react"];
+/******/ 		initialConsumes.forEach((id) => {
+/******/ 			__webpack_require__.m[id] = (module) => {
+/******/ 				// Handle case when module is used sync
+/******/ 				installedModules[id] = 0;
+/******/ 				delete __webpack_require__.c[id];
+/******/ 				var factory = moduleToHandlerMapping[id]();
+/******/ 				if(typeof factory !== "function") throw new Error("Shared module is not available for eager consumption: " + id);
+/******/ 				module.exports = factory();
+/******/ 			}
+/******/ 		});
+/******/ 		// no chunk loading of consumes
+/******/ 	})();
+/******/ 	
+/******/ 	/* webpack/runtime/jsonp chunk loading */
+/******/ 	(() => {
+/******/ 		// no baseURI
+/******/ 		
+/******/ 		// object to store loaded and loading chunks
+/******/ 		// undefined = chunk not loaded, null = chunk preloaded/prefetched
+/******/ 		// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded
+/******/ 		var installedChunks = __webpack_require__.hmrS_jsonp = __webpack_require__.hmrS_jsonp || {
+/******/ 			"service-worker": 0,
+/******/ 			"webpack_sharing_consume_default_react-dom_react-dom-webpack_sharing_consume_default_react_rea-153fef": 0
+/******/ 		};
+/******/ 		
+/******/ 		// no chunk on demand loading
+/******/ 		
+/******/ 		// no prefetching
+/******/ 		
+/******/ 		// no preloaded
+/******/ 		
+/******/ 		var currentUpdatedModulesList;
+/******/ 		var waitingUpdateResolves = {};
+/******/ 		function loadUpdateChunk(chunkId, updatedModulesList) {
+/******/ 			currentUpdatedModulesList = updatedModulesList;
+/******/ 			return new Promise((resolve, reject) => {
+/******/ 				waitingUpdateResolves[chunkId] = resolve;
+/******/ 				// start update chunk loading
+/******/ 				var url = __webpack_require__.p + __webpack_require__.hu(chunkId);
+/******/ 				// create error before stack unwound to get useful stacktrace later
+/******/ 				var error = new Error();
+/******/ 				var loadingEnded = (event) => {
+/******/ 					if(waitingUpdateResolves[chunkId]) {
+/******/ 						waitingUpdateResolves[chunkId] = undefined
+/******/ 						var errorType = event && (event.type === 'load' ? 'missing' : event.type);
+/******/ 						var realSrc = event && event.target && event.target.src;
+/******/ 						error.message = 'Loading hot update chunk ' + chunkId + ' failed.\n(' + errorType + ': ' + realSrc + ')';
+/******/ 						error.name = 'ChunkLoadError';
+/******/ 						error.type = errorType;
+/******/ 						error.request = realSrc;
+/******/ 						reject(error);
+/******/ 					}
+/******/ 				};
+/******/ 				__webpack_require__.l(url, loadingEnded);
+/******/ 			});
+/******/ 		}
+/******/ 		
+/******/ 		globalThis["webpackHotUpdatesuperset"] = (chunkId, moreModules, runtime) => {
+/******/ 			for(var moduleId in moreModules) {
+/******/ 				if(__webpack_require__.o(moreModules, moduleId)) {
+/******/ 					currentUpdate[moduleId] = moreModules[moduleId];
+/******/ 					if(currentUpdatedModulesList) currentUpdatedModulesList.push(moduleId);
+/******/ 				}
+/******/ 			}
+/******/ 			if(runtime) currentUpdateRuntime.push(runtime);
+/******/ 			if(waitingUpdateResolves[chunkId]) {
+/******/ 				waitingUpdateResolves[chunkId]();
+/******/ 				waitingUpdateResolves[chunkId] = undefined;
+/******/ 			}
+/******/ 		};
+/******/ 		
+/******/ 		var currentUpdateChunks;
+/******/ 		var currentUpdate;
+/******/ 		var currentUpdateRemovedChunks;
+/******/ 		var currentUpdateRuntime;
+/******/ 		function applyHandler(options) {
+/******/ 			if (__webpack_require__.f) delete __webpack_require__.f.jsonpHmr;
+/******/ 			currentUpdateChunks = undefined;
+/******/ 			function getAffectedModuleEffects(updateModuleId) {
+/******/ 				var outdatedModules = [updateModuleId];
+/******/ 				var outdatedDependencies = {};
+/******/ 		
+/******/ 				var queue = outdatedModules.map(function (id) {
+/******/ 					return {
+/******/ 						chain: [id],
+/******/ 						id: id
+/******/ 					};
+/******/ 				});
+/******/ 				while (queue.length > 0) {
+/******/ 					var queueItem = queue.pop();
+/******/ 					var moduleId = queueItem.id;
+/******/ 					var chain = queueItem.chain;
+/******/ 					var module = __webpack_require__.c[moduleId];
+/******/ 					if (
+/******/ 						!module ||
+/******/ 						(module.hot._selfAccepted && !module.hot._selfInvalidated)
+/******/ 					)
+/******/ 						continue;
+/******/ 					if (module.hot._selfDeclined) {
+/******/ 						return {
+/******/ 							type: "self-declined",
+/******/ 							chain: chain,
+/******/ 							moduleId: moduleId
+/******/ 						};
+/******/ 					}
+/******/ 					if (module.hot._main) {
+/******/ 						return {
+/******/ 							type: "unaccepted",
+/******/ 							chain: chain,
+/******/ 							moduleId: moduleId
+/******/ 						};
+/******/ 					}
+/******/ 					for (var i = 0; i < module.parents.length; i++) {
+/******/ 						var parentId = module.parents[i];
+/******/ 						var parent = __webpack_require__.c[parentId];
+/******/ 						if (!parent) continue;
+/******/ 						if (parent.hot._declinedDependencies[moduleId]) {
+/******/ 							return {
+/******/ 								type: "declined",
+/******/ 								chain: chain.concat([parentId]),
+/******/ 								moduleId: moduleId,
+/******/ 								parentId: parentId
+/******/ 							};
+/******/ 						}
+/******/ 						if (outdatedModules.indexOf(parentId) !== -1) continue;
+/******/ 						if (parent.hot._acceptedDependencies[moduleId]) {
+/******/ 							if (!outdatedDependencies[parentId])
+/******/ 								outdatedDependencies[parentId] = [];
+/******/ 							addAllToSet(outdatedDependencies[parentId], [moduleId]);
+/******/ 							continue;
+/******/ 						}
+/******/ 						delete outdatedDependencies[parentId];
+/******/ 						outdatedModules.push(parentId);
+/******/ 						queue.push({
+/******/ 							chain: chain.concat([parentId]),
+/******/ 							id: parentId
+/******/ 						});
+/******/ 					}
+/******/ 				}
+/******/ 		
+/******/ 				return {
+/******/ 					type: "accepted",
+/******/ 					moduleId: updateModuleId,
+/******/ 					outdatedModules: outdatedModules,
+/******/ 					outdatedDependencies: outdatedDependencies
+/******/ 				};
+/******/ 			}
+/******/ 		
+/******/ 			function addAllToSet(a, b) {
+/******/ 				for (var i = 0; i < b.length; i++) {
+/******/ 					var item = b[i];
+/******/ 					if (a.indexOf(item) === -1) a.push(item);
+/******/ 				}
+/******/ 			}
+/******/ 		
+/******/ 			// at begin all updates modules are outdated
+/******/ 			// the "outdated" status can propagate to parents if they don't accept the children
+/******/ 			var outdatedDependencies = {};
+/******/ 			var outdatedModules = [];
+/******/ 			var appliedUpdate = {};
+/******/ 		
+/******/ 			var warnUnexpectedRequire = function warnUnexpectedRequire(module) {
+/******/ 				console.warn(
+/******/ 					"[HMR] unexpected require(" + module.id + ") to disposed module"
+/******/ 				);
+/******/ 			};
+/******/ 		
+/******/ 			for (var moduleId in currentUpdate) {
+/******/ 				if (__webpack_require__.o(currentUpdate, moduleId)) {
+/******/ 					var newModuleFactory = currentUpdate[moduleId];
+/******/ 					var result = newModuleFactory
+/******/ 						? getAffectedModuleEffects(moduleId)
+/******/ 						: {
+/******/ 								type: "disposed",
+/******/ 								moduleId: moduleId
+/******/ 							};
+/******/ 					/** @type {Error|false} */
+/******/ 					var abortError = false;
+/******/ 					var doApply = false;
+/******/ 					var doDispose = false;
+/******/ 					var chainInfo = "";
+/******/ 					if (result.chain) {
+/******/ 						chainInfo = "\nUpdate propagation: " + result.chain.join(" -> ");
+/******/ 					}
+/******/ 					switch (result.type) {
+/******/ 						case "self-declined":
+/******/ 							if (options.onDeclined) options.onDeclined(result);
+/******/ 							if (!options.ignoreDeclined)
+/******/ 								abortError = new Error(
+/******/ 									"Aborted because of self decline: " +
+/******/ 										result.moduleId +
+/******/ 										chainInfo
+/******/ 								);
+/******/ 							break;
+/******/ 						case "declined":
+/******/ 							if (options.onDeclined) options.onDeclined(result);
+/******/ 							if (!options.ignoreDeclined)
+/******/ 								abortError = new Error(
+/******/ 									"Aborted because of declined dependency: " +
+/******/ 										result.moduleId +
+/******/ 										" in " +
+/******/ 										result.parentId +
+/******/ 										chainInfo
+/******/ 								);
+/******/ 							break;
+/******/ 						case "unaccepted":
+/******/ 							if (options.onUnaccepted) options.onUnaccepted(result);
+/******/ 							if (!options.ignoreUnaccepted)
+/******/ 								abortError = new Error(
+/******/ 									"Aborted because " + moduleId + " is not accepted" + chainInfo
+/******/ 								);
+/******/ 							break;
+/******/ 						case "accepted":
+/******/ 							if (options.onAccepted) options.onAccepted(result);
+/******/ 							doApply = true;
+/******/ 							break;
+/******/ 						case "disposed":
+/******/ 							if (options.onDisposed) options.onDisposed(result);
+/******/ 							doDispose = true;
+/******/ 							break;
+/******/ 						default:
+/******/ 							throw new Error("Unexception type " + result.type);
+/******/ 					}
+/******/ 					if (abortError) {
+/******/ 						return {
+/******/ 							error: abortError
+/******/ 						};
+/******/ 					}
+/******/ 					if (doApply) {
+/******/ 						appliedUpdate[moduleId] = newModuleFactory;
+/******/ 						addAllToSet(outdatedModules, result.outdatedModules);
+/******/ 						for (moduleId in result.outdatedDependencies) {
+/******/ 							if (__webpack_require__.o(result.outdatedDependencies, moduleId)) {
+/******/ 								if (!outdatedDependencies[moduleId])
+/******/ 									outdatedDependencies[moduleId] = [];
+/******/ 								addAllToSet(
+/******/ 									outdatedDependencies[moduleId],
+/******/ 									result.outdatedDependencies[moduleId]
+/******/ 								);
+/******/ 							}
+/******/ 						}
+/******/ 					}
+/******/ 					if (doDispose) {
+/******/ 						addAllToSet(outdatedModules, [result.moduleId]);
+/******/ 						appliedUpdate[moduleId] = warnUnexpectedRequire;
+/******/ 					}
+/******/ 				}
+/******/ 			}
+/******/ 			currentUpdate = undefined;
+/******/ 		
+/******/ 			// Store self accepted outdated modules to require them later by the module system
+/******/ 			var outdatedSelfAcceptedModules = [];
+/******/ 			for (var j = 0; j < outdatedModules.length; j++) {
+/******/ 				var outdatedModuleId = outdatedModules[j];
+/******/ 				var module = __webpack_require__.c[outdatedModuleId];
+/******/ 				if (
+/******/ 					module &&
+/******/ 					(module.hot._selfAccepted || module.hot._main) &&
+/******/ 					// removed self-accepted modules should not be required
+/******/ 					appliedUpdate[outdatedModuleId] !== warnUnexpectedRequire &&
+/******/ 					// when called invalidate self-accepting is not possible
+/******/ 					!module.hot._selfInvalidated
+/******/ 				) {
+/******/ 					outdatedSelfAcceptedModules.push({
+/******/ 						module: outdatedModuleId,
+/******/ 						require: module.hot._requireSelf,
+/******/ 						errorHandler: module.hot._selfAccepted
+/******/ 					});
+/******/ 				}
+/******/ 			}
+/******/ 		
+/******/ 			var moduleOutdatedDependencies;
+/******/ 		
+/******/ 			return {
+/******/ 				dispose: function () {
+/******/ 					currentUpdateRemovedChunks.forEach(function (chunkId) {
+/******/ 						delete installedChunks[chunkId];
+/******/ 					});
+/******/ 					currentUpdateRemovedChunks = undefined;
+/******/ 		
+/******/ 					var idx;
+/******/ 					var queue = outdatedModules.slice();
+/******/ 					while (queue.length > 0) {
+/******/ 						var moduleId = queue.pop();
+/******/ 						var module = __webpack_require__.c[moduleId];
+/******/ 						if (!module) continue;
+/******/ 		
+/******/ 						var data = {};
+/******/ 		
+/******/ 						// Call dispose handlers
+/******/ 						var disposeHandlers = module.hot._disposeHandlers;
+/******/ 						for (j = 0; j < disposeHandlers.length; j++) {
+/******/ 							disposeHandlers[j].call(null, data);
+/******/ 						}
+/******/ 						__webpack_require__.hmrD[moduleId] = data;
+/******/ 		
+/******/ 						// disable module (this disables requires from this module)
+/******/ 						module.hot.active = false;
+/******/ 		
+/******/ 						// remove module from cache
+/******/ 						delete __webpack_require__.c[moduleId];
+/******/ 		
+/******/ 						// when disposing there is no need to call dispose handler
+/******/ 						delete outdatedDependencies[moduleId];
+/******/ 		
+/******/ 						// remove "parents" references from all children
+/******/ 						for (j = 0; j < module.children.length; j++) {
+/******/ 							var child = __webpack_require__.c[module.children[j]];
+/******/ 							if (!child) continue;
+/******/ 							idx = child.parents.indexOf(moduleId);
+/******/ 							if (idx >= 0) {
+/******/ 								child.parents.splice(idx, 1);
+/******/ 							}
+/******/ 						}
+/******/ 					}
+/******/ 		
+/******/ 					// remove outdated dependency from module children
+/******/ 					var dependency;
+/******/ 					for (var outdatedModuleId in outdatedDependencies) {
+/******/ 						if (__webpack_require__.o(outdatedDependencies, outdatedModuleId)) {
+/******/ 							module = __webpack_require__.c[outdatedModuleId];
+/******/ 							if (module) {
+/******/ 								moduleOutdatedDependencies =
+/******/ 									outdatedDependencies[outdatedModuleId];
+/******/ 								for (j = 0; j < moduleOutdatedDependencies.length; j++) {
+/******/ 									dependency = moduleOutdatedDependencies[j];
+/******/ 									idx = module.children.indexOf(dependency);
+/******/ 									if (idx >= 0) module.children.splice(idx, 1);
+/******/ 								}
+/******/ 							}
+/******/ 						}
+/******/ 					}
+/******/ 				},
+/******/ 				apply: function (reportError) {
+/******/ 					var acceptPromises = [];
+/******/ 					// insert new code
+/******/ 					for (var updateModuleId in appliedUpdate) {
+/******/ 						if (__webpack_require__.o(appliedUpdate, updateModuleId)) {
+/******/ 							__webpack_require__.m[updateModuleId] = appliedUpdate[updateModuleId];
+/******/ 						}
+/******/ 					}
+/******/ 		
+/******/ 					// run new runtime modules
+/******/ 					for (var i = 0; i < currentUpdateRuntime.length; i++) {
+/******/ 						currentUpdateRuntime[i](__webpack_require__);
+/******/ 					}
+/******/ 		
+/******/ 					// call accept handlers
+/******/ 					for (var outdatedModuleId in outdatedDependencies) {
+/******/ 						if (__webpack_require__.o(outdatedDependencies, outdatedModuleId)) {
+/******/ 							var module = __webpack_require__.c[outdatedModuleId];
+/******/ 							if (module) {
+/******/ 								moduleOutdatedDependencies =
+/******/ 									outdatedDependencies[outdatedModuleId];
+/******/ 								var callbacks = [];
+/******/ 								var errorHandlers = [];
+/******/ 								var dependenciesForCallbacks = [];
+/******/ 								for (var j = 0; j < moduleOutdatedDependencies.length; j++) {
+/******/ 									var dependency = moduleOutdatedDependencies[j];
+/******/ 									var acceptCallback =
+/******/ 										module.hot._acceptedDependencies[dependency];
+/******/ 									var errorHandler =
+/******/ 										module.hot._acceptedErrorHandlers[dependency];
+/******/ 									if (acceptCallback) {
+/******/ 										if (callbacks.indexOf(acceptCallback) !== -1) continue;
+/******/ 										callbacks.push(acceptCallback);
+/******/ 										errorHandlers.push(errorHandler);
+/******/ 										dependenciesForCallbacks.push(dependency);
+/******/ 									}
+/******/ 								}
+/******/ 								for (var k = 0; k < callbacks.length; k++) {
+/******/ 									var result;
+/******/ 									try {
+/******/ 										result = callbacks[k].call(null, moduleOutdatedDependencies);
+/******/ 									} catch (err) {
+/******/ 										if (typeof errorHandlers[k] === "function") {
+/******/ 											try {
+/******/ 												errorHandlers[k](err, {
+/******/ 													moduleId: outdatedModuleId,
+/******/ 													dependencyId: dependenciesForCallbacks[k]
+/******/ 												});
+/******/ 											} catch (err2) {
+/******/ 												if (options.onErrored) {
+/******/ 													options.onErrored({
+/******/ 														type: "accept-error-handler-errored",
+/******/ 														moduleId: outdatedModuleId,
+/******/ 														dependencyId: dependenciesForCallbacks[k],
+/******/ 														error: err2,
+/******/ 														originalError: err
+/******/ 													});
+/******/ 												}
+/******/ 												if (!options.ignoreErrored) {
+/******/ 													reportError(err2);
+/******/ 													reportError(err);
+/******/ 												}
+/******/ 											}
+/******/ 										} else {
+/******/ 											if (options.onErrored) {
+/******/ 												options.onErrored({
+/******/ 													type: "accept-errored",
+/******/ 													moduleId: outdatedModuleId,
+/******/ 													dependencyId: dependenciesForCallbacks[k],
+/******/ 													error: err
+/******/ 												});
+/******/ 											}
+/******/ 											if (!options.ignoreErrored) {
+/******/ 												reportError(err);
+/******/ 											}
+/******/ 										}
+/******/ 									}
+/******/ 									if (result && typeof result.then === "function") {
+/******/ 										acceptPromises.push(result);
+/******/ 									}
+/******/ 								}
+/******/ 							}
+/******/ 						}
+/******/ 					}
+/******/ 		
+/******/ 					var onAccepted = function () {
+/******/ 						// Load self accepted modules
+/******/ 						for (var o = 0; o < outdatedSelfAcceptedModules.length; o++) {
+/******/ 							var item = outdatedSelfAcceptedModules[o];
+/******/ 							var moduleId = item.module;
+/******/ 							try {
+/******/ 								item.require(moduleId);
+/******/ 							} catch (err) {
+/******/ 								if (typeof item.errorHandler === "function") {
+/******/ 									try {
+/******/ 										item.errorHandler(err, {
+/******/ 											moduleId: moduleId,
+/******/ 											module: __webpack_require__.c[moduleId]
+/******/ 										});
+/******/ 									} catch (err1) {
+/******/ 										if (options.onErrored) {
+/******/ 											options.onErrored({
+/******/ 												type: "self-accept-error-handler-errored",
+/******/ 												moduleId: moduleId,
+/******/ 												error: err1,
+/******/ 												originalError: err
+/******/ 											});
+/******/ 										}
+/******/ 										if (!options.ignoreErrored) {
+/******/ 											reportError(err1);
+/******/ 											reportError(err);
+/******/ 										}
+/******/ 									}
+/******/ 								} else {
+/******/ 									if (options.onErrored) {
+/******/ 										options.onErrored({
+/******/ 											type: "self-accept-errored",
+/******/ 											moduleId: moduleId,
+/******/ 											error: err
+/******/ 										});
+/******/ 									}
+/******/ 									if (!options.ignoreErrored) {
+/******/ 										reportError(err);
+/******/ 									}
+/******/ 								}
+/******/ 							}
+/******/ 						}
+/******/ 					};
+/******/ 		
+/******/ 					return Promise.all(acceptPromises)
+/******/ 						.then(onAccepted)
+/******/ 						.then(function () {
+/******/ 							return outdatedModules;
+/******/ 						});
+/******/ 				}
+/******/ 			};
+/******/ 		}
+/******/ 		__webpack_require__.hmrI.jsonp = function (moduleId, applyHandlers) {
+/******/ 			if (!currentUpdate) {
+/******/ 				currentUpdate = {};
+/******/ 				currentUpdateRuntime = [];
+/******/ 				currentUpdateRemovedChunks = [];
+/******/ 				applyHandlers.push(applyHandler);
+/******/ 			}
+/******/ 			if (!__webpack_require__.o(currentUpdate, moduleId)) {
+/******/ 				currentUpdate[moduleId] = __webpack_require__.m[moduleId];
+/******/ 			}
+/******/ 		};
+/******/ 		__webpack_require__.hmrC.jsonp = function (
+/******/ 			chunkIds,
+/******/ 			removedChunks,
+/******/ 			removedModules,
+/******/ 			promises,
+/******/ 			applyHandlers,
+/******/ 			updatedModulesList
+/******/ 		) {
+/******/ 			applyHandlers.push(applyHandler);
+/******/ 			currentUpdateChunks = {};
+/******/ 			currentUpdateRemovedChunks = removedChunks;
+/******/ 			currentUpdate = removedModules.reduce(function (obj, key) {
+/******/ 				obj[key] = false;
+/******/ 				return obj;
+/******/ 			}, {});
+/******/ 			currentUpdateRuntime = [];
+/******/ 			chunkIds.forEach(function (chunkId) {
+/******/ 				if (
+/******/ 					__webpack_require__.o(installedChunks, chunkId) &&
+/******/ 					installedChunks[chunkId] !== undefined
+/******/ 				) {
+/******/ 					promises.push(loadUpdateChunk(chunkId, updatedModulesList));
+/******/ 					currentUpdateChunks[chunkId] = true;
+/******/ 				} else {
+/******/ 					currentUpdateChunks[chunkId] = false;
+/******/ 				}
+/******/ 			});
+/******/ 			if (__webpack_require__.f) {
+/******/ 				__webpack_require__.f.jsonpHmr = function (chunkId, promises) {
+/******/ 					if (
+/******/ 						currentUpdateChunks &&
+/******/ 						__webpack_require__.o(currentUpdateChunks, chunkId) &&
+/******/ 						!currentUpdateChunks[chunkId]
+/******/ 					) {
+/******/ 						promises.push(loadUpdateChunk(chunkId));
+/******/ 						currentUpdateChunks[chunkId] = true;
+/******/ 					}
+/******/ 				};
+/******/ 			}
+/******/ 		};
+/******/ 		
+/******/ 		__webpack_require__.hmrM = () => {
+/******/ 			if (typeof fetch === "undefined") throw new Error("No browser support: need fetch API");
+/******/ 			return fetch(__webpack_require__.p + __webpack_require__.hmrF()).then((response) => {
+/******/ 				if(response.status === 404) return; // no update available
+/******/ 				if(!response.ok) throw new Error("Failed to fetch update manifest " + response.statusText);
+/******/ 				return response.json();
+/******/ 			});
+/******/ 		};
+/******/ 		
+/******/ 		__webpack_require__.O.j = (chunkId) => (installedChunks[chunkId] === 0);
+/******/ 		
+/******/ 		// install a JSONP callback for chunk loading
+/******/ 		var webpackJsonpCallback = (parentChunkLoadingFunction, data) => {
+/******/ 			var [chunkIds, moreModules, runtime] = data;
+/******/ 			// add "moreModules" to the modules object,
+/******/ 			// then flag all "chunkIds" as loaded and fire callback
+/******/ 			var moduleId, chunkId, i = 0;
+/******/ 			if(chunkIds.some((id) => (installedChunks[id] !== 0))) {
+/******/ 				for(moduleId in moreModules) {
+/******/ 					if(__webpack_require__.o(moreModules, moduleId)) {
+/******/ 						__webpack_require__.m[moduleId] = moreModules[moduleId];
+/******/ 					}
+/******/ 				}
+/******/ 				if(runtime) var result = runtime(__webpack_require__);
+/******/ 			}
+/******/ 			if(parentChunkLoadingFunction) parentChunkLoadingFunction(data);
+/******/ 			for(;i < chunkIds.length; i++) {
+/******/ 				chunkId = chunkIds[i];
+/******/ 				if(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {
+/******/ 					installedChunks[chunkId][0]();
+/******/ 				}
+/******/ 				installedChunks[chunkId] = 0;
+/******/ 			}
+/******/ 			return __webpack_require__.O(result);
+/******/ 		}
+/******/ 		
+/******/ 		var chunkLoadingGlobal = globalThis["webpackChunksuperset"] = globalThis["webpackChunksuperset"] || [];
+/******/ 		chunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));
+/******/ 		chunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));
+/******/ 	})();
+/******/ 	
+/************************************************************************/
+/******/ 	
+/******/ 	// module cache are used so entry inlining is disabled
+/******/ 	// startup
+/******/ 	// Load entry module and return exports
+/******/ 	__webpack_require__.O(undefined, ["vendors","vendors-node_modules_rc-component_color-picker_es_index_js-node_modules_rc-component_mutate-o-484854","webpack_sharing_consume_default_react-dom_react-dom-webpack_sharing_consume_default_react_rea-153fef"], () => (__webpack_require__("./node_modules/@pmmmwh/react-refresh-webpack-plugin/client/ReactRefreshEntry.js")))
+/******/ 	__webpack_require__.O(undefined, ["vendors","vendors-node_modules_rc-component_color-picker_es_index_js-node_modules_rc-component_mutate-o-484854","webpack_sharing_consume_default_react-dom_react-dom-webpack_sharing_consume_default_react_rea-153fef"], () => (__webpack_require__("./node_modules/webpack-dev-server/client/index.js?protocol=ws%3A&hostname=0.0.0.0&port=0&pathname=%2Fws&logging=info&overlay=%7B%22errors%22%3Atrue%2C%22warnings%22%3Afalse%2C%22runtimeErrors%22%3A%22er [...]
+/******/ 	__webpack_require__.O(undefined, ["vendors","vendors-node_modules_rc-component_color-picker_es_index_js-node_modules_rc-component_mutate-o-484854","webpack_sharing_consume_default_react-dom_react-dom-webpack_sharing_consume_default_react_rea-153fef"], () => (__webpack_require__("./node_modules/webpack/hot/only-dev-server.js")))
+/******/ 	__webpack_require__.O(undefined, ["vendors","vendors-node_modules_rc-component_color-picker_es_index_js-node_modules_rc-component_mutate-o-484854","webpack_sharing_consume_default_react-dom_react-dom-webpack_sharing_consume_default_react_rea-153fef"], () => (__webpack_require__("./node_modules/@pmmmwh/react-refresh-webpack-plugin/client/ErrorOverlayEntry.js")))
+/******/ 	var __webpack_exports__ = __webpack_require__.O(undefined, ["vendors","vendors-node_modules_rc-component_color-picker_es_index_js-node_modules_rc-component_mutate-o-484854","webpack_sharing_consume_default_react-dom_react-dom-webpack_sharing_consume_default_react_rea-153fef"], () => (__webpack_require__("./src/service-worker.ts")))
+/******/ 	__webpack_exports__ = __webpack_require__.O(__webpack_exports__);
+/******/ 	
+/******/ })()
+;
\ No newline at end of file