🎨(react) enhance FileUploader component styles

update FileUploader token and css files with new css variables
introduce with the new tokens architectures
This commit is contained in:
Nathan Panchout
2025-08-22 10:13:19 +02:00
committed by NathanVss
parent fe0c2b367f
commit e002cfde0f
4 changed files with 50 additions and 39 deletions

View File

@@ -13,7 +13,7 @@ export const FileUploaderMono = ({
const [file, setFile] = useState<File | undefined>( const [file, setFile] = useState<File | undefined>(
fakeDefaultFiles && fakeDefaultFiles.length > 0 fakeDefaultFiles && fakeDefaultFiles.length > 0
? fakeDefaultFiles[0] ? fakeDefaultFiles[0]
: undefined, : undefined
); );
// This is made to prevent useEffects inside DropZone that depends on `files` to trigger on each render, // This is made to prevent useEffects inside DropZone that depends on `files` to trigger on each render,
// doing this preserves the reference of the array. // doing this preserves the reference of the array.

View File

@@ -38,13 +38,14 @@ export const FileUploaderMulti = ({
<div className="c__file-uploader__file__specs"> <div className="c__file-uploader__file__specs">
<span>{formatBytes(file.size)}</span> <span>{formatBytes(file.size)}</span>
<Button <Button
color="tertiary-text" color="tertiary"
variant="neutral"
size="nano" size="nano"
aria-label={t( aria-label={t(
"components.forms.file_uploader.delete_file_name", "components.forms.file_uploader.delete_file_name",
{ {
name: file.name, name: file.name,
}, }
)} )}
onClick={() => { onClick={() => {
setFiles(files.filter((f) => f !== file)); setFiles(files.filter((f) => f !== file));

View File

@@ -1,3 +1,20 @@
@mixin file-uploader-variant($context) {
border-color: var(--c--components--forms-fileuploader--color--#{$context});
.c__file-uploader__inner {
&__icon {
color: var(--c--components--forms-fileuploader--color--#{$context});
}
// Only apply the color override if the context is "error"
@if $context == "error" {
&__text {
color: var(--c--components--forms-fileuploader--color--#{$context});
}
}
}
}
.c__file-uploader { .c__file-uploader {
display: flex; display: flex;
align-items: center; align-items: center;
@@ -7,35 +24,20 @@
border-color: var(--c--components--forms-fileuploader--border-color); border-color: var(--c--components--forms-fileuploader--border-color);
border-radius: var(--c--components--forms-fileuploader--border-radius); border-radius: var(--c--components--forms-fileuploader--border-radius);
color: var(--c--components--forms-fileuploader--color); color: var(--c--components--forms-fileuploader--color);
font-weight: var(--c--theme--font--weights--light); font-weight: var(--c--globals--font--weights--light);
padding: var(--c--components--forms-fileuploader--padding); padding: var(--c--components--forms-fileuploader--padding);
position: relative; position: relative;
cursor: pointer; cursor: pointer;
transition: border var(--c--theme--transitions--duration) var(--c--theme--transitions--ease-out); transition: border var(--c--globals--transitions--duration)
var(--c--globals--transitions--ease-out);
background-color: var(--c--components--forms-fileuploader--background-color); background-color: var(--c--components--forms-fileuploader--background-color);
&--success { &--success {
border-color: var(--c--theme--colors--success-600); @include file-uploader-variant("success");
.c__file-uploader__inner {
&__icon {
color: var(--c--theme--colors--success-600);
}
}
} }
&--error { &--error {
border-color: var(--c--theme--colors--danger-600); @include file-uploader-variant("error");
.c__file-uploader__inner {
&__icon {
color: var(--c--theme--colors--danger-600);
}
&__text {
color: var(--c--theme--colors--danger-600);
}
}
} }
&__inner { &__inner {
@@ -72,7 +74,7 @@
color: var(--c--components--forms-fileuploader--text-color); color: var(--c--components--forms-fileuploader--text-color);
&:hover { &:hover {
color: var(--c--theme--colors--danger-600); color: var(--c--globals--colors--error-600);
} }
} }
} }
@@ -85,7 +87,9 @@
} }
&__file { &__file {
background-color: var(--c--components--forms-fileuploader--file-background-color); background-color: var(
--c--components--forms-fileuploader--file-background-color
);
border-radius: var(--c--components--forms-fileuploader--file-border-radius); border-radius: var(--c--components--forms-fileuploader--file-border-radius);
border-style: solid; border-style: solid;
border-color: var(--c--components--forms-fileuploader--file-border-color); border-color: var(--c--components--forms-fileuploader--file-border-color);
@@ -94,7 +98,7 @@
font-weight: var(--c--components--forms-fileuploader--file-text-weight); font-weight: var(--c--components--forms-fileuploader--file-text-weight);
color: var(--c--components--forms-fileuploader--file-text-color); color: var(--c--components--forms-fileuploader--file-text-color);
height: 2.5rem; height: 2.5rem;
padding: 0 .75rem; padding: 0 0.75rem;
display: flex; display: flex;
justify-content: space-between; justify-content: space-between;
align-items: center; align-items: center;
@@ -124,13 +128,15 @@
&--active, &--active,
&:hover { &:hover {
border-color: var(--c--components--forms-fileuploader--accent-color); border-color: var(--c--components--forms-fileuploader--accent-color);
background-color: var(--c--components--forms-fileuploader--background-color--active); background-color: var(
--c--components--forms-fileuploader--background-color--active
);
&.c__file-uploader--animate-icon { &.c__file-uploader--animate-icon {
.c__file-uploader__inner { .c__file-uploader__inner {
&__icon { &__icon {
animation-name: bounce-5; animation-name: bounce-5;
animation-timing-function: var(--c--theme--transitions--ease-out); animation-timing-function: var(--c--globals--transitions--ease-out);
animation-duration: 2s; animation-duration: 2s;
animation-iteration-count: infinite; animation-iteration-count: infinite;

View File

@@ -1,24 +1,28 @@
import { DefaultTokens } from "@openfun/cunningham-tokens"; import { DefaultTokens } from "@openfun/cunningham-tokens";
export const tokens = (defaults: DefaultTokens) => ({ export const tokens = (defaults: DefaultTokens) => ({
"background-color": defaults.theme.colors["greyscale-000"], "background-color": defaults.contextuals.background.surface.primary,
"border-color": defaults.theme.colors["greyscale-300"], "border-color": defaults.contextuals.border.semantic.neutral.tertiary,
"border-radius": "0.5rem", "border-radius": "0.5rem",
"border-width": "2px", "border-width": "2px",
"border-style": "dotted", "border-style": "dotted",
"background-color--active": defaults.theme.colors["primary-100"], "background-color--active":
color: defaults.theme.colors["greyscale-900"], defaults.contextuals.background.semantic.brand.tertiary,
color: defaults.contextuals.content.semantic.neutral.primary,
"color--success": defaults.contextuals.content.semantic.success.tertiary,
"color--error": defaults.contextuals.content.semantic.error.tertiary,
padding: "1rem", padding: "1rem",
"accent-color": defaults.theme.colors["primary-600"], "accent-color": defaults.contextuals.border.semantic.brand.primary,
"text-color": defaults.theme.colors["greyscale-600"], "text-color": defaults.contextuals.content.semantic.neutral.tertiary,
"text-size": "0.6875rem", "text-size": "0.6875rem",
"file-text-size": "0.8125rem", "file-text-size": "0.8125rem",
"file-text-color": defaults.theme.colors["greyscale-900"], "file-text-color": defaults.contextuals.content.semantic.neutral.primary,
"file-text-weight": defaults.theme.font.weights.light, "file-text-weight": defaults.globals.font.weights.light,
"file-border-color": defaults.theme.colors["greyscale-300"], "file-border-color": defaults.contextuals.border.semantic.neutral.tertiary,
"file-border-width": "1px", "file-border-width": "1px",
"file-border-radius": "0.5rem", "file-border-radius": "0.5rem",
"file-background-color": defaults.theme.colors["greyscale-000"], "file-background-color": defaults.contextuals.background.surface.primary,
"file-specs-size": "0.6875rem", "file-specs-size": "0.6875rem",
"file-specs-color": defaults.theme.colors["greyscale-600"], "file-specs-color": defaults.contextuals.content.semantic.neutral.tertiary,
}); });