Skip to content

Commit b0b88e6

Browse files
committed
Add divider customization; fix popover overflowing viewport
1 parent 847c3be commit b0b88e6

3 files changed

Lines changed: 31 additions & 16 deletions

File tree

src/components/ColourPicker/ColorPicker.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,7 @@ export const ColorPicker = ({ value, onChange, ...fieldContainerProps }: ColorPi
6666
insetInlineEnd: "anchor(start)",
6767
top: "anchor(top)",
6868
bgcolor: "background.default",
69+
positionTryFallbacks: "flip-block",
6970
}}
7071
>
7172
<Chrome

src/components/PaletteEditor/PaletteEditor.tsx

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,11 +24,12 @@ export const PaletteEditor = () => {
2424
</ToggleButtonGroup>
2525
</FieldGroupContainer>
2626
<SubpaletteEditor name="primary" manual={["main"]} derived={["light", "dark", "contrastText"]} />
27-
<SubpaletteEditor name={"background"} manual={["default", "paper"]} derived={[]} />
28-
<SubpaletteEditor name="text" manual={["primary", "secondary", "disabled"]} derived={[]} />
27+
<SubpaletteEditor name={"background"} manual={["default", "paper"]} />
28+
<SubpaletteEditor name="text" manual={["primary", "secondary", "disabled"]} />
2929
{COLORS_BOTTOM.map((color) => (
3030
<SubpaletteEditor key={color} name={color} manual={["main"]} derived={["light", "dark", "contrastText"]} />
3131
))}
32+
<SubpaletteEditor name="divider" />
3233
</>
3334
);
3435
};

src/components/SubpaletteEditor/SubpaletteEditor.tsx

Lines changed: 27 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -16,26 +16,39 @@ const PALETTES = {
1616

1717
interface SubpaletteEditorProps {
1818
name: keyof PaletteOptions;
19-
manual: Array<string>;
20-
derived: Array<keyof SimplePaletteColorOptions>;
19+
manual?: Array<string>;
20+
derived?: Array<keyof SimplePaletteColorOptions>;
2121
}
2222

23-
export const SubpaletteEditor = ({ name, manual, derived }: SubpaletteEditorProps) => {
23+
export const SubpaletteEditor = ({ name, manual = [], derived = [] }: SubpaletteEditorProps) => {
2424
const { theme, themeOptions, mergeThemeOptions, deleteThemeOptionKey } = useInnerTheme();
2525
const mode = theme.palette.mode;
2626
const [showDerived, setShowDerived] = useState(false);
2727

28-
return (
29-
<FieldGroupContainer
30-
title={name}
31-
actions={
32-
derived.length > 0 ? (
33-
<Button size="small" color="secondary" sx={{ p: 0 }} onClick={() => setShowDerived((prev) => !prev)}>
34-
{showDerived ? "Hide derived" : "See derived"}
35-
</Button>
36-
) : undefined
28+
const derivedToggleButton = (
29+
<Button size="small" color="secondary" sx={{ p: 0 }} onClick={() => setShowDerived((prev) => !prev)}>
30+
{showDerived ? "Hide derived" : "See derived"}
31+
</Button>
32+
);
33+
34+
// Removing this teranry would result in us calling `toStandardHex` on an object
35+
const keylessColorPicker = !manual.length ? (
36+
<ColorPicker
37+
isDefault={theme.palette[name] === PALETTES[mode][name]}
38+
value={toStandardHex(theme.palette[name])}
39+
onChange={(hex) =>
40+
mergeThemeOptions({
41+
palette: { [name]: hex },
42+
})
3743
}
38-
>
44+
onReset={() => {
45+
deleteThemeOptionKey(["palette", name]);
46+
}}
47+
/>
48+
) : undefined;
49+
50+
return (
51+
<FieldGroupContainer title={name} actions={derived.length > 0 ? derivedToggleButton : keylessColorPicker}>
3952
{manual.map((key) => (
4053
<ColorPicker
4154
title={key}
@@ -49,8 +62,8 @@ export const SubpaletteEditor = ({ name, manual, derived }: SubpaletteEditorProp
4962
}
5063
onReset={() => {
5164
const customColorsObject = themeOptions?.palette?.[name] ?? {};
52-
// This might be a string, e.g. for "divider". Handle this later.
5365
if (typeof customColorsObject !== "object") return;
66+
5467
// If there are any custom derived colours, the manual color cannot be deleted
5568
if (derived.some((key) => key in customColorsObject)) {
5669
mergeThemeOptions({

0 commit comments

Comments
 (0)