-
Notifications
You must be signed in to change notification settings - Fork 14.8k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
feat: massive collaboratvie theming feature branch #31590
base: master
Are you sure you want to change the base?
Conversation
Based on your review schedule, I'll hold off on reviewing this PR until it's marked as ready for review. If you'd like me to take a look now, comment
|
f1c7929
to
43452ff
Compare
97e182d
to
0655910
Compare
1ca8e6e
to
6c6532e
Compare
003f992
to
1652452
Compare
Chiseling at #31590 and bringing what's atomically committable out of there. This simply adds eslint checks to pre-commit. Note that: - it requires having run `npm i` in superset-frontend - it's set up to NOT run in CI as part of the pre-commit validation workflow, since we run eslint more formally in another workflow Why doing this? Currently it's common to forget to run `npm run lint` prior to committing/pushing, so people can waste time waiting for CI to fail where it could be caught easily. It's nice to have pre-commit do the check itself because it will only evaluate the files that have changed, making it much faster than running a full lint run against all files.
…rt/e2e.ts While working on #31590, I noticed that `expect` was not properly imported. It was using it from global for some unknown reason.
1652452
to
f89a23b
Compare
Chiseling at #31590 that has gotten big / unruly, in this PR is a refactor of Alert-related components, going vanilla AntD. Also. Deprecating colors.alerts since it's ambiguous/redundant with warning/error and does not exist in antd-v5
Chiseling at #31590 that has gotten big / unruly, in this PR is a refactor of Alert-related components, going vanilla AntD. Also. Deprecating colors.alerts since it's ambiguous/redundant with warning/error and does not exist in antd-v5
Chiseling at #31590 that has gotten big / unruly, in this PR is a refactor of Alert-related components, going vanilla AntD. Also. Deprecating colors.alerts since it's ambiguous/redundant with warning/error and does not exist in antd-v5
Chiseling at #31590 that has gotten big / unruly, in this PR is a refactor of Alert-related components, going vanilla AntD. Also. Deprecating colors.alerts since it's ambiguous/redundant with warning/error and does not exist in antd-v5
Chiseling at #31590 that has gotten big / unruly, in this PR is a refactor of Alert-related components, going vanilla AntD. Also. Deprecating colors.alerts since it's ambiguous/redundant with warning/error and does not exist in antd-v5
// Kept as is for backwards compatibility with the old theme system / superset_config.py | ||
link = ( | ||
<GenericLink className="navbar-brand" to={brand.path}> | ||
<img src={brand.icon} alt={brand.alt} /> |
Check warning
Code scanning / CodeQL
DOM text reinterpreted as HTML Medium
DOM text
Show autofix suggestion
Hide autofix suggestion
Copilot Autofix
AI 1 day ago
To fix the problem, we need to ensure that the brand.icon
value is properly sanitized before being used in the src
attribute of the img
tag. This can be achieved by using a library like DOMPurify
to sanitize the URL or by ensuring that the value is a safe URL.
- Import the
DOMPurify
library to sanitize thebrand.icon
value. - Sanitize the
brand.icon
value before using it in thesrc
attribute of theimg
tag. - Make changes in the
superset-frontend/src/features/home/Menu.tsx
file to implement the sanitization.
-
Copy modified line R20 -
Copy modified line R284 -
Copy modified line R290
@@ -19,2 +19,3 @@ | ||
import { useState, useEffect } from 'react'; | ||
import DOMPurify from 'dompurify'; | ||
import { styled, css, useTheme } from '@superset-ui/core'; | ||
@@ -282,3 +283,3 @@ | ||
<GenericLink className="navbar-brand" to={brand.path}> | ||
<img src={brand.icon} alt={brand.alt} /> | ||
<img src={DOMPurify.sanitize(brand.icon)} alt={brand.alt} /> | ||
</GenericLink> | ||
@@ -288,3 +289,3 @@ | ||
<a className="navbar-brand" href={brand.path} tabIndex={-1}> | ||
<img src={brand.icon} alt={brand.alt} /> | ||
<img src={DOMPurify.sanitize(brand.icon)} alt={brand.alt} /> | ||
</a> |
-
Copy modified lines R220-R221
@@ -219,3 +219,4 @@ | ||
"use-query-params": "^1.1.9", | ||
"yargs": "^17.7.2" | ||
"yargs": "^17.7.2", | ||
"dompurify": "^3.2.5" | ||
}, |
Package | Version | Security advisories |
dompurify (npm) | 3.2.5 | None |
); | ||
} else { | ||
link = ( | ||
<a className="navbar-brand" href={brand.path} tabIndex={-1}> |
Check warning
Code scanning / CodeQL
DOM text reinterpreted as HTML Medium
DOM text
Show autofix suggestion
Hide autofix suggestion
Copilot Autofix
AI 2 days ago
To fix the problem, we need to ensure that the brand.path
value is properly sanitized before being used in the href
attribute. This can be achieved by using a library like DOMPurify
to sanitize the value. We will import DOMPurify
and use it to sanitize the brand.path
value before rendering it in the href
attribute.
-
Copy modified line R20 -
Copy modified line R289
@@ -19,2 +19,3 @@ | ||
import { useState, useEffect } from 'react'; | ||
import DOMPurify from 'dompurify'; | ||
import { styled, css, useTheme } from '@superset-ui/core'; | ||
@@ -287,3 +288,3 @@ | ||
link = ( | ||
<a className="navbar-brand" href={brand.path} tabIndex={-1}> | ||
<a className="navbar-brand" href={DOMPurify.sanitize(brand.path)} tabIndex={-1}> | ||
<img src={brand.icon} alt={brand.alt} /> |
-
Copy modified lines R220-R221
@@ -219,3 +219,4 @@ | ||
"use-query-params": "^1.1.9", | ||
"yargs": "^17.7.2" | ||
"yargs": "^17.7.2", | ||
"dompurify": "^3.2.5" | ||
}, |
Package | Version | Security advisories |
dompurify (npm) | 3.2.5 | None |
} else { | ||
link = ( | ||
<a className="navbar-brand" href={brand.path} tabIndex={-1}> | ||
<img src={brand.icon} alt={brand.alt} /> |
Check warning
Code scanning / CodeQL
DOM text reinterpreted as HTML Medium
DOM text
Show autofix suggestion
Hide autofix suggestion
Copilot Autofix
AI 2 days ago
To fix the problem, we need to ensure that the brand.icon
value is properly sanitized before it is used in the img
tag's src
attribute. This can be achieved by using a library like DOMPurify
to sanitize the value.
- Install the
DOMPurify
library. - Import
DOMPurify
in the relevant file. - Use
DOMPurify
to sanitize thebrand.icon
value before using it in theimg
tag.
-
Copy modified line R283 -
Copy modified line R289
@@ -282,3 +282,3 @@ | ||
<GenericLink className="navbar-brand" to={brand.path}> | ||
<img src={brand.icon} alt={brand.alt} /> | ||
<img src={DOMPurify.sanitize(brand.icon)} alt={brand.alt} /> | ||
</GenericLink> | ||
@@ -288,3 +288,3 @@ | ||
<a className="navbar-brand" href={brand.path} tabIndex={-1}> | ||
<img src={brand.icon} alt={brand.alt} /> | ||
<img src={DOMPurify.sanitize(brand.icon)} alt={brand.alt} /> | ||
</a> |
-
Copy modified lines R220-R221
@@ -219,3 +219,4 @@ | ||
"use-query-params": "^1.1.9", | ||
"yargs": "^17.7.2" | ||
"yargs": "^17.7.2", | ||
"dompurify": "^3.2.5" | ||
}, |
Package | Version | Security advisories |
dompurify (npm) | 3.2.5 | None |
…#32705) Co-authored-by: Diego Pucci <[email protected]> Co-authored-by: Geido <[email protected]> Co-authored-by: Mehmet Salih Yavuz <[email protected]>
Co-authored-by: Maxime Beauchemin <[email protected]>
Co-authored-by: Maxime Beauchemin <[email protected]>
Co-authored-by: Maxime Beauchemin <[email protected]> Co-authored-by: Diego Pucci <[email protected]>
Co-authored-by: Geido <[email protected]>
Co-authored-by: Diego Pucci <[email protected]>
Recently looked into typescript's import `type` keyword and its implications. Turns out using it should have noticeable impacts on bundle size and memory usage (yeh!), and there's a nice lint rule for it. This PR is DRAFT and will be on hold until we merge the Theming branch to avoid a lot of conflicts. Note that: - there are north of 2k lint instance - `--fix` seems to cover most cases, short by 100-200 - unclear how much we'll save on bundle size, but clearly is good hygiene Let's pick this up after the great merge of #31590
Recently looked into typescript's import `type` keyword and its implications. Turns out using it should have noticeable impacts on bundle size and memory usage (yeh!), and there's a nice lint rule for it. This PR is DRAFT and will be on hold until we merge the Theming branch to avoid a lot of conflicts. Note that: - there are north of 2k lint instance - `--fix` seems to cover most cases, short by 100-200 - unclear how much we'll save on bundle size, but clearly is good hygiene Let's pick this up after the great merge of #31590
Excuse the large PR, but this is fairly tangled up, and working on fixing up theming probably requires some massive PRs as it's really hard to proceed PR-by-PR - especially during the holiday break...
Introducing less handlebars templates
First. Clearly we should move away from
less
and commit to emotion/antd for theming Now deleting the less files is going to be difficult. In the meantime, I wanted to provide a way for less files to source from the main theme object. I decided to go with handlebars since that should be part of the build process.Considerations:
.less
files from the repo, and make sure they are dynamically generated on every builds. In the meantime I thought I'd leave them here, and we can instruct people to alter.less.hds
files and runnpm run compile-less
on demand, if/when altering the main themeLarge refactor - what's in this PR?
antd
theme tokenswhat's NOT in this PR? - yet to come
theme.antd
referencing in emotionThemeConfig
as the theme setup, this will require more moving from legacy theme object to antdCompiling TODOs / visual bug as of 3/4/25
ok did a round of updates here, tackled some and left some TODOs in the list... thanks to @kgabryje and others for finding these issues!
antd-v5-related
these should fix themselves as we migrate the components to antd-v5