feat(ui): add --bui-bg-inherit CSS variable (#34124)
* feat(ui): add --bui-bg-inherit CSS variable in core.css Signed-off-by: Johan Persson <johanopersson@gmail.com> * refactor(ui): remove duplicated data-bg painting from Box.module.css Signed-off-by: Johan Persson <johanopersson@gmail.com> * refactor(ui): remove duplicated data-bg painting from Flex.module.css Signed-off-by: Johan Persson <johanopersson@gmail.com> * refactor(ui): remove duplicated data-bg painting from Grid.module.css Signed-off-by: Johan Persson <johanopersson@gmail.com> * refactor(ui): centralize Accordion data-bg painting, preserve no-intent behavior Signed-off-by: Johan Persson <johanopersson@gmail.com> * refactor(ui): use --bui-bg-inherit for Card scroll-shadow gradients Signed-off-by: Johan Persson <johanopersson@gmail.com> * docs(ui): document --bui-bg-inherit token Signed-off-by: Johan Persson <johanopersson@gmail.com> * chore: changeset for --bui-bg-inherit Signed-off-by: Johan Persson <johanopersson@gmail.com> * docs(ui): add Storybook story for --bui-bg-inherit Signed-off-by: Johan Persson <johanopersson@gmail.com> * docs(ui): fold --bui-bg-inherit story into colors stories Signed-off-by: Johan Persson <johanopersson@gmail.com> * changeset: Reword for clarity. Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> Signed-off-by: Johan Persson <johanopersson@gmail.com> --------- Signed-off-by: Johan Persson <johanopersson@gmail.com> Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
This commit is contained in:
@@ -21,18 +21,12 @@
|
||||
width: 100%;
|
||||
border-radius: var(--bui-radius-3);
|
||||
padding: var(--bui-space-3);
|
||||
}
|
||||
|
||||
&[data-bg='neutral-1'] {
|
||||
background-color: var(--bui-bg-neutral-1);
|
||||
}
|
||||
|
||||
&[data-bg='neutral-2'] {
|
||||
background-color: var(--bui-bg-neutral-2);
|
||||
}
|
||||
|
||||
&[data-bg='neutral-3'] {
|
||||
background-color: var(--bui-bg-neutral-3);
|
||||
}
|
||||
.bui-Accordion[data-bg='danger'],
|
||||
.bui-Accordion[data-bg='warning'],
|
||||
.bui-Accordion[data-bg='success'] {
|
||||
background-color: transparent;
|
||||
}
|
||||
|
||||
.bui-AccordionTrigger {
|
||||
|
||||
@@ -22,28 +22,4 @@
|
||||
font-weight: var(--bui-font-weight-regular);
|
||||
color: var(--bui-fg-primary);
|
||||
}
|
||||
|
||||
.bui-Box[data-bg='neutral-1'] {
|
||||
background-color: var(--bui-bg-neutral-1);
|
||||
}
|
||||
|
||||
.bui-Box[data-bg='neutral-2'] {
|
||||
background-color: var(--bui-bg-neutral-2);
|
||||
}
|
||||
|
||||
.bui-Box[data-bg='neutral-3'] {
|
||||
background-color: var(--bui-bg-neutral-3);
|
||||
}
|
||||
|
||||
.bui-Box[data-bg='danger'] {
|
||||
background-color: var(--bui-bg-danger);
|
||||
}
|
||||
|
||||
.bui-Box[data-bg='warning'] {
|
||||
background-color: var(--bui-bg-warning);
|
||||
}
|
||||
|
||||
.bui-Box[data-bg='success'] {
|
||||
background-color: var(--bui-bg-success);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -29,18 +29,6 @@
|
||||
padding: var(--bui-space-3);
|
||||
}
|
||||
|
||||
.bui-Card[data-bg='neutral-1'] {
|
||||
--bui-card-bg: var(--bui-bg-neutral-1);
|
||||
}
|
||||
|
||||
.bui-Card[data-bg='neutral-2'] {
|
||||
--bui-card-bg: var(--bui-bg-neutral-2);
|
||||
}
|
||||
|
||||
.bui-Card[data-bg='neutral-3'] {
|
||||
--bui-card-bg: var(--bui-bg-neutral-3);
|
||||
}
|
||||
|
||||
.bui-Card:has(.bui-CardHeader, .bui-CardBody, .bui-CardFooter) {
|
||||
padding: 0;
|
||||
}
|
||||
@@ -127,8 +115,8 @@
|
||||
margin-bottom: -1.5rem;
|
||||
background: linear-gradient(
|
||||
to bottom,
|
||||
var(--bui-card-bg),
|
||||
rgb(from var(--bui-card-bg) r g b / 0)
|
||||
var(--bui-bg-inherit),
|
||||
rgb(from var(--bui-bg-inherit) r g b / 0)
|
||||
);
|
||||
pointer-events: none;
|
||||
opacity: 0;
|
||||
@@ -146,8 +134,8 @@
|
||||
margin-top: -1.5rem;
|
||||
background: linear-gradient(
|
||||
to top,
|
||||
var(--bui-card-bg),
|
||||
rgb(from var(--bui-card-bg) r g b / 0)
|
||||
var(--bui-bg-inherit),
|
||||
rgb(from var(--bui-bg-inherit) r g b / 0)
|
||||
);
|
||||
pointer-events: none;
|
||||
opacity: 0;
|
||||
|
||||
@@ -23,28 +23,4 @@
|
||||
/* This helps when using `truncate` on text inside a flex container */
|
||||
min-width: 0;
|
||||
}
|
||||
|
||||
.bui-Flex[data-bg='neutral-1'] {
|
||||
background-color: var(--bui-bg-neutral-1);
|
||||
}
|
||||
|
||||
.bui-Flex[data-bg='neutral-2'] {
|
||||
background-color: var(--bui-bg-neutral-2);
|
||||
}
|
||||
|
||||
.bui-Flex[data-bg='neutral-3'] {
|
||||
background-color: var(--bui-bg-neutral-3);
|
||||
}
|
||||
|
||||
.bui-Flex[data-bg='danger'] {
|
||||
background-color: var(--bui-bg-danger);
|
||||
}
|
||||
|
||||
.bui-Flex[data-bg='warning'] {
|
||||
background-color: var(--bui-bg-warning);
|
||||
}
|
||||
|
||||
.bui-Flex[data-bg='success'] {
|
||||
background-color: var(--bui-bg-success);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -20,34 +20,4 @@
|
||||
.bui-Grid {
|
||||
display: grid;
|
||||
}
|
||||
|
||||
.bui-Grid[data-bg='neutral-1'],
|
||||
.bui-GridItem[data-bg='neutral-1'] {
|
||||
background-color: var(--bui-bg-neutral-1);
|
||||
}
|
||||
|
||||
.bui-Grid[data-bg='neutral-2'],
|
||||
.bui-GridItem[data-bg='neutral-2'] {
|
||||
background-color: var(--bui-bg-neutral-2);
|
||||
}
|
||||
|
||||
.bui-Grid[data-bg='neutral-3'],
|
||||
.bui-GridItem[data-bg='neutral-3'] {
|
||||
background-color: var(--bui-bg-neutral-3);
|
||||
}
|
||||
|
||||
.bui-Grid[data-bg='danger'],
|
||||
.bui-GridItem[data-bg='danger'] {
|
||||
background-color: var(--bui-bg-danger);
|
||||
}
|
||||
|
||||
.bui-Grid[data-bg='warning'],
|
||||
.bui-GridItem[data-bg='warning'] {
|
||||
background-color: var(--bui-bg-warning);
|
||||
}
|
||||
|
||||
.bui-Grid[data-bg='success'],
|
||||
.bui-GridItem[data-bg='success'] {
|
||||
background-color: var(--bui-bg-success);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -23,6 +23,24 @@ const meta = preview.meta({
|
||||
tags: ['!manifest'],
|
||||
});
|
||||
|
||||
/**
|
||||
* A `<div>` styled with `background: var(--bui-bg-inherit)` should always
|
||||
* resolve to the same color as the surrounding bg provider — at every level
|
||||
* of the neutral chain and inside intent surfaces.
|
||||
*/
|
||||
const Probe = ({ label }: { label: string }) => (
|
||||
<div
|
||||
style={{
|
||||
backgroundColor: 'var(--bui-bg-inherit)',
|
||||
padding: '0.5rem 0.75rem',
|
||||
borderRadius: '0.25rem',
|
||||
outline: '1px dashed var(--bui-fg-secondary)',
|
||||
}}
|
||||
>
|
||||
<Text>{label}</Text>
|
||||
</div>
|
||||
);
|
||||
|
||||
export const Default = meta.story({
|
||||
render: () => (
|
||||
<div style={{ backgroundColor: 'var(--bui-bg-app)' }}>
|
||||
@@ -151,3 +169,37 @@ export const Default = meta.story({
|
||||
</div>
|
||||
),
|
||||
});
|
||||
|
||||
export const BgInherit = meta.story({
|
||||
render: () => (
|
||||
<Flex direction="column" gap="4">
|
||||
<Probe label="App level (no provider) — resolves to --bui-bg-app" />
|
||||
|
||||
<Box bg="neutral" p="4">
|
||||
<Flex direction="column" gap="3">
|
||||
<Probe label="Inside neutral-1 — resolves to --bui-bg-neutral-1" />
|
||||
<Box bg="neutral" p="4">
|
||||
<Flex direction="column" gap="3">
|
||||
<Probe label="Inside neutral-2 — resolves to --bui-bg-neutral-2" />
|
||||
<Box bg="neutral" p="4">
|
||||
<Probe label="Inside neutral-3 — resolves to --bui-bg-neutral-3" />
|
||||
</Box>
|
||||
</Flex>
|
||||
</Box>
|
||||
</Flex>
|
||||
</Box>
|
||||
|
||||
<Box bg="danger" p="4">
|
||||
<Probe label="Inside danger — resolves to --bui-bg-danger" />
|
||||
</Box>
|
||||
|
||||
<Box bg="warning" p="4">
|
||||
<Probe label="Inside warning — resolves to --bui-bg-warning" />
|
||||
</Box>
|
||||
|
||||
<Box bg="success" p="4">
|
||||
<Probe label="Inside success — resolves to --bui-bg-success" />
|
||||
</Box>
|
||||
</Flex>
|
||||
),
|
||||
});
|
||||
|
||||
@@ -47,4 +47,38 @@
|
||||
[data-theme-mode='light'] {
|
||||
color-scheme: light;
|
||||
}
|
||||
|
||||
:root {
|
||||
--bui-bg-inherit: var(--bui-bg-app);
|
||||
}
|
||||
|
||||
[data-bg='neutral-1'] {
|
||||
background-color: var(--bui-bg-neutral-1);
|
||||
--bui-bg-inherit: var(--bui-bg-neutral-1);
|
||||
}
|
||||
|
||||
[data-bg='neutral-2'] {
|
||||
background-color: var(--bui-bg-neutral-2);
|
||||
--bui-bg-inherit: var(--bui-bg-neutral-2);
|
||||
}
|
||||
|
||||
[data-bg='neutral-3'] {
|
||||
background-color: var(--bui-bg-neutral-3);
|
||||
--bui-bg-inherit: var(--bui-bg-neutral-3);
|
||||
}
|
||||
|
||||
[data-bg='danger'] {
|
||||
background-color: var(--bui-bg-danger);
|
||||
--bui-bg-inherit: var(--bui-bg-danger);
|
||||
}
|
||||
|
||||
[data-bg='warning'] {
|
||||
background-color: var(--bui-bg-warning);
|
||||
--bui-bg-inherit: var(--bui-bg-warning);
|
||||
}
|
||||
|
||||
[data-bg='success'] {
|
||||
background-color: var(--bui-bg-success);
|
||||
--bui-bg-inherit: var(--bui-bg-success);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user