From d797c2e2108a97f1eb80eac30c763240282e14a2 Mon Sep 17 00:00:00 2001 From: David Luzar <5153846+dwelle@users.noreply.github.com> Date: Sat, 29 Mar 2025 19:31:16 +0100 Subject: [PATCH 01/23] fix: strip legacy attrs on element restore (#9318) --- packages/excalidraw/data/restore.ts | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/packages/excalidraw/data/restore.ts b/packages/excalidraw/data/restore.ts index d1002e61f3..30702f130e 100644 --- a/packages/excalidraw/data/restore.ts +++ b/packages/excalidraw/data/restore.ts @@ -221,7 +221,7 @@ const restoreElementWithProperties = < "customData" in extra ? extra.customData : element.customData; } - return { + const ret = { // spread the original element properties to not lose unknown ones // for forward-compatibility ...element, @@ -230,6 +230,12 @@ const restoreElementWithProperties = < ...getNormalizedDimensions(base), ...extra, } as unknown as T; + + // strip legacy props (migrated in previous steps) + delete ret.strokeSharpness; + delete ret.boundElementIds; + + return ret; }; const restoreElement = ( From f2e8404c7bee230c12e78747492fd120a7929a67 Mon Sep 17 00:00:00 2001 From: David Luzar <5153846+dwelle@users.noreply.github.com> Date: Sat, 29 Mar 2025 19:42:33 +0100 Subject: [PATCH 02/23] feat: allow to disable preventUnload in dev (#9319) * feat: allow to disable preventUnload in dev * add template --- .env.development | 3 +++ excalidraw-app/App.tsx | 8 +++++++- excalidraw-app/collab/Collab.tsx | 8 +++++++- 3 files changed, 17 insertions(+), 2 deletions(-) diff --git a/.env.development b/.env.development index 5f69de1469..387ab6204d 100644 --- a/.env.development +++ b/.env.development @@ -48,3 +48,6 @@ UNWEjuqNMi/lwAErS9fFa2oJlWyT8U7zzv/5kQREkxZI6y9v0AF3qcbsy2731FnD s9ChJvOUW9toIab2gsIdrKW8ZNpu084ZFVKb6LNjvIXI1Se4oMTHeszXzNptzlot kdxxjOoaQMAyfljFSot1F1FlU6MQlag7UnFGvFjRHN1JI5q4K+n3a67DX+TMyRqS HQIDAQAB' + +# set to true in .env.development.local to disable the prevent unload dialog +VITE_APP_DISABLE_PREVENT_UNLOAD= diff --git a/excalidraw-app/App.tsx b/excalidraw-app/App.tsx index 60e9b30083..bb62a0e96c 100644 --- a/excalidraw-app/App.tsx +++ b/excalidraw-app/App.tsx @@ -608,7 +608,13 @@ const ExcalidrawWrapper = () => { excalidrawAPI.getSceneElements(), ) ) { - preventUnload(event); + if (import.meta.env.VITE_APP_DISABLE_PREVENT_UNLOAD !== "true") { + preventUnload(event); + } else { + console.warn( + "preventing unload disabled (VITE_APP_DISABLE_PREVENT_UNLOAD)", + ); + } } }; window.addEventListener(EVENT.BEFORE_UNLOAD, unloadHandler); diff --git a/excalidraw-app/collab/Collab.tsx b/excalidraw-app/collab/Collab.tsx index f6f7630412..98c66e4257 100644 --- a/excalidraw-app/collab/Collab.tsx +++ b/excalidraw-app/collab/Collab.tsx @@ -301,7 +301,13 @@ class Collab extends PureComponent { // the purpose is to run in immediately after user decides to stay this.saveCollabRoomToFirebase(syncableElements); - preventUnload(event); + if (import.meta.env.VITE_APP_DISABLE_PREVENT_UNLOAD !== "true") { + preventUnload(event); + } else { + console.warn( + "preventing unload disabled (VITE_APP_DISABLE_PREVENT_UNLOAD)", + ); + } } }); From 83fac6d0db2cceaecb35b66a4dd4e116e607816d Mon Sep 17 00:00:00 2001 From: David Luzar <5153846+dwelle@users.noreply.github.com> Date: Sun, 30 Mar 2025 19:00:31 +0200 Subject: [PATCH 03/23] feat: tweak stats panel input styles (#9321) --- .../components/Stats/DragInput.scss | 32 ++++--------------- .../excalidraw/components/Stats/Stats.scss | 4 +++ .../excalidraw/components/Stats/index.tsx | 6 +++- 3 files changed, 15 insertions(+), 27 deletions(-) diff --git a/packages/excalidraw/components/Stats/DragInput.scss b/packages/excalidraw/components/Stats/DragInput.scss index 76b9d147b1..f31616d949 100644 --- a/packages/excalidraw/components/Stats/DragInput.scss +++ b/packages/excalidraw/components/Stats/DragInput.scss @@ -2,10 +2,12 @@ .drag-input-container { display: flex; width: 100%; + border-radius: var(--border-radius-lg); &:focus-within { box-shadow: 0 0 0 1px var(--color-primary-darkest); border-radius: var(--border-radius-md); + background: transparent; } } @@ -16,24 +18,14 @@ .drag-input-label { flex-shrink: 0; - border: 1px solid var(--default-border-color); - border-right: 0; - padding: 0 0.5rem 0 0.75rem; + border: 0; + padding: 0 0.5rem 0 0.25rem; min-width: 1rem; + width: 1.5rem; height: 2rem; - box-sizing: border-box; + box-sizing: content-box; color: var(--popup-text-color); - :root[dir="ltr"] & { - border-radius: var(--border-radius-md) 0 0 var(--border-radius-md); - } - - :root[dir="rtl"] & { - border-radius: 0 var(--border-radius-md) var(--border-radius-md) 0; - border-right: 1px solid var(--default-border-color); - border-left: 0; - } - display: flex; align-items: center; justify-content: center; @@ -51,20 +43,8 @@ border: 0; outline: none; height: 2rem; - border: 1px solid var(--default-border-color); - border-left: 0; letter-spacing: 0.4px; - :root[dir="ltr"] & { - border-radius: 0 var(--border-radius-md) var(--border-radius-md) 0; - } - - :root[dir="rtl"] & { - border-radius: var(--border-radius-md) 0 0 var(--border-radius-md); - border-left: 1px solid var(--default-border-color); - border-right: 0; - } - padding: 0.5rem; padding-left: 0.25rem; appearance: none; diff --git a/packages/excalidraw/components/Stats/Stats.scss b/packages/excalidraw/components/Stats/Stats.scss index 106ecf303f..384e0fd3c5 100644 --- a/packages/excalidraw/components/Stats/Stats.scss +++ b/packages/excalidraw/components/Stats/Stats.scss @@ -41,6 +41,10 @@ div + div { text-align: right; } + + &:empty { + display: none; + } } &__row--heading { diff --git a/packages/excalidraw/components/Stats/index.tsx b/packages/excalidraw/components/Stats/index.tsx index 889f789717..11a5d6b5d3 100644 --- a/packages/excalidraw/components/Stats/index.tsx +++ b/packages/excalidraw/components/Stats/index.tsx @@ -289,7 +289,11 @@ export const StatsInner = memo( )} - + {appState.croppingElementId ? t("labels.imageCropping") : t(`element.${singleElement.type}`)} From 7c58477382883026b65ca770f31b87ff153654f8 Mon Sep 17 00:00:00 2001 From: David Luzar <5153846+dwelle@users.noreply.github.com> Date: Sun, 30 Mar 2025 19:20:13 +0200 Subject: [PATCH 04/23] feat: tweak properties panel styling (#9322) --- .../components/ColorPicker/ColorPicker.scss | 36 ++++++++++--------- packages/excalidraw/components/Range.scss | 2 +- packages/excalidraw/css/styles.scss | 12 +++++-- 3 files changed, 29 insertions(+), 21 deletions(-) diff --git a/packages/excalidraw/components/ColorPicker/ColorPicker.scss b/packages/excalidraw/components/ColorPicker/ColorPicker.scss index 39e1845c3f..bcb39281d1 100644 --- a/packages/excalidraw/components/ColorPicker/ColorPicker.scss +++ b/packages/excalidraw/components/ColorPicker/ColorPicker.scss @@ -15,7 +15,7 @@ .color-picker-container { display: grid; - grid-template-columns: 1fr 20px 1.625rem; + grid-template-columns: 1fr 8px 1.625rem; padding: 0.25rem 0px; align-items: center; @@ -30,13 +30,14 @@ } .color-picker__button { - --radius: 0.25rem; + --radius: 6px; + --size: 1.375rem; padding: 0; - margin: 0; - width: 1.35rem; - height: 1.35rem; - border: 1px solid var(--color-gray-30); + margin: 1px; + width: var(--size); + height: var(--size); + border: 0; border-radius: var(--radius); filter: var(--theme-filter); background-color: var(--swatch-color); @@ -45,16 +46,16 @@ font-family: inherit; box-sizing: border-box; - &:hover { + &:hover:not(.active) { &::after { content: ""; position: absolute; - top: -2px; - left: -2px; - right: -2px; - bottom: -2px; - box-shadow: 0 0 0 1px var(--color-gray-30); - border-radius: calc(var(--radius) + 1px); + top: 0; + left: 0; + right: 0; + bottom: 0; + box-shadow: 0 0 0 1px var(--swatch-color); + border-radius: var(--radius); filter: var(--theme-filter); } } @@ -62,10 +63,11 @@ &.active { .color-picker__button-outline { position: absolute; - top: -2px; - left: -2px; - right: -2px; - bottom: -2px; + --offset: -1px; + top: var(--offset); + left: var(--offset); + right: var(--offset); + bottom: var(--offset); box-shadow: 0 0 0 1px var(--color-primary-darkest); z-index: 1; // due hover state so this has preference border-radius: calc(var(--radius) + 1px); diff --git a/packages/excalidraw/components/Range.scss b/packages/excalidraw/components/Range.scss index 01cb916897..8dcc705fea 100644 --- a/packages/excalidraw/components/Range.scss +++ b/packages/excalidraw/components/Range.scss @@ -6,7 +6,7 @@ .range-wrapper { position: relative; padding-top: 10px; - padding-bottom: 30px; + padding-bottom: 25px; } .range-input { diff --git a/packages/excalidraw/css/styles.scss b/packages/excalidraw/css/styles.scss index 6f1d9cd48c..33f9b4df04 100644 --- a/packages/excalidraw/css/styles.scss +++ b/packages/excalidraw/css/styles.scss @@ -173,7 +173,7 @@ body.excalidraw-cursor-resize * { .buttonList { flex-wrap: wrap; display: flex; - column-gap: 0.5rem; + column-gap: 0.375rem; row-gap: 0.5rem; label { @@ -386,10 +386,16 @@ body.excalidraw-cursor-resize * { .App-menu__left { overflow-y: auto; - padding: 0.75rem; - width: 12.5rem; + padding: 0.75rem 0.75rem 0.25rem 0.75rem; + width: 11.875rem; box-sizing: border-box; position: absolute; + + .buttonList label, + .buttonList button, + .buttonList .zIndexButton { + --button-bg: transparent; + } } .dropdown-select { From 57a9e301d44f319e160f618413e8fcbb7d2e1ad4 Mon Sep 17 00:00:00 2001 From: David Luzar <5153846+dwelle@users.noreply.github.com> Date: Wed, 2 Apr 2025 14:36:13 +0200 Subject: [PATCH 05/23] feat: tweak color swatch, and button bgs (#9330) * feat: tweak color swatch, and button bgs * snapshots --- packages/common/src/colors.ts | 2 + .../components/ColorPicker/ColorPicker.scss | 34 +++++++---- .../components/ColorPicker/ColorPicker.tsx | 9 ++- .../ColorPicker/CustomColorList.tsx | 4 +- .../components/ColorPicker/HotkeyLabel.tsx | 6 +- .../ColorPicker/PickerColorList.tsx | 2 +- .../components/ColorPicker/ShadeList.tsx | 2 +- .../components/ColorPicker/TopPicks.tsx | 7 +++ .../ColorPicker/colorPickerUtils.ts | 58 +++++++++++++------ packages/excalidraw/css/styles.scss | 12 +--- packages/excalidraw/css/theme.scss | 4 +- .../__snapshots__/excalidraw.test.tsx.snap | 12 ++-- 12 files changed, 94 insertions(+), 58 deletions(-) diff --git a/packages/common/src/colors.ts b/packages/common/src/colors.ts index 84d04bcf48..4dc45616f7 100644 --- a/packages/common/src/colors.ts +++ b/packages/common/src/colors.ts @@ -2,6 +2,8 @@ import oc from "open-color"; import type { Merge } from "./utility-types"; +export const COLOR_OUTLINE_CONTRAST_THRESHOLD = 240; + // FIXME can't put to utils.ts rn because of circular dependency const pick = , K extends readonly (keyof R)[]>( source: R, diff --git a/packages/excalidraw/components/ColorPicker/ColorPicker.scss b/packages/excalidraw/components/ColorPicker/ColorPicker.scss index bcb39281d1..56b40869b0 100644 --- a/packages/excalidraw/components/ColorPicker/ColorPicker.scss +++ b/packages/excalidraw/components/ColorPicker/ColorPicker.scss @@ -15,7 +15,7 @@ .color-picker-container { display: grid; - grid-template-columns: 1fr 8px 1.625rem; + grid-template-columns: 1fr 20px 1.625rem; padding: 0.25rem 0px; align-items: center; @@ -27,14 +27,19 @@ .color-picker__top-picks { display: flex; justify-content: space-between; + align-items: center; } .color-picker__button { - --radius: 6px; + --radius: 4px; --size: 1.375rem; + &.has-outline { + box-shadow: inset 0 0 0 1px #d9d9d9; + } + padding: 0; - margin: 1px; + margin: 0; width: var(--size); height: var(--size); border: 0; @@ -46,15 +51,19 @@ font-family: inherit; box-sizing: border-box; - &:hover:not(.active) { + &:hover:not(.active):not(.color-picker__button--large) { + transform: scale(1.075); + } + + &:hover:not(.active).color-picker__button--large { &::after { content: ""; position: absolute; - top: 0; - left: 0; - right: 0; - bottom: 0; - box-shadow: 0 0 0 1px var(--swatch-color); + top: -1px; + left: -1px; + right: -1px; + bottom: -1px; + box-shadow: 0 0 0 1px var(--color-gray-30); border-radius: var(--radius); filter: var(--theme-filter); } @@ -70,7 +79,7 @@ bottom: var(--offset); box-shadow: 0 0 0 1px var(--color-primary-darkest); z-index: 1; // due hover state so this has preference - border-radius: calc(var(--radius) + 1px); + border-radius: var(--radius); filter: var(--theme-filter); } } @@ -125,10 +134,11 @@ .color-picker__button__hotkey-label { position: absolute; - right: 4px; - bottom: 4px; + right: 5px; + bottom: 3px; filter: none; font-size: 11px; + font-weight: 500; } .color-picker { diff --git a/packages/excalidraw/components/ColorPicker/ColorPicker.tsx b/packages/excalidraw/components/ColorPicker/ColorPicker.tsx index 34f6c6d126..eb6d82d9e5 100644 --- a/packages/excalidraw/components/ColorPicker/ColorPicker.tsx +++ b/packages/excalidraw/components/ColorPicker/ColorPicker.tsx @@ -2,7 +2,11 @@ import * as Popover from "@radix-ui/react-popover"; import clsx from "clsx"; import { useRef } from "react"; -import { COLOR_PALETTE, isTransparent } from "@excalidraw/common"; +import { + COLOR_OUTLINE_CONTRAST_THRESHOLD, + COLOR_PALETTE, + isTransparent, +} from "@excalidraw/common"; import type { ColorTuple, ColorPaletteCustom } from "@excalidraw/common"; @@ -19,7 +23,7 @@ import { ColorInput } from "./ColorInput"; import { Picker } from "./Picker"; import PickerHeading from "./PickerHeading"; import { TopPicks } from "./TopPicks"; -import { activeColorPickerSectionAtom } from "./colorPickerUtils"; +import { activeColorPickerSectionAtom, isColorDark } from "./colorPickerUtils"; import "./ColorPicker.scss"; @@ -190,6 +194,7 @@ const ColorPickerTrigger = ({ type="button" className={clsx("color-picker__button active-color properties-trigger", { "is-transparent": color === "transparent" || !color, + "has-outline": !isColorDark(color, COLOR_OUTLINE_CONTRAST_THRESHOLD), })} aria-label={label} style={color ? { "--swatch-color": color } : undefined} diff --git a/packages/excalidraw/components/ColorPicker/CustomColorList.tsx b/packages/excalidraw/components/ColorPicker/CustomColorList.tsx index 2c735102a5..45d5db84c6 100644 --- a/packages/excalidraw/components/ColorPicker/CustomColorList.tsx +++ b/packages/excalidraw/components/ColorPicker/CustomColorList.tsx @@ -40,7 +40,7 @@ export const CustomColorList = ({ tabIndex={-1} type="button" className={clsx( - "color-picker__button color-picker__button--large", + "color-picker__button color-picker__button--large has-outline", { active: color === c, "is-transparent": c === "transparent" || !c, @@ -56,7 +56,7 @@ export const CustomColorList = ({ key={i} >
- + ); })} diff --git a/packages/excalidraw/components/ColorPicker/HotkeyLabel.tsx b/packages/excalidraw/components/ColorPicker/HotkeyLabel.tsx index 6e4d5e39ce..898a289703 100644 --- a/packages/excalidraw/components/ColorPicker/HotkeyLabel.tsx +++ b/packages/excalidraw/components/ColorPicker/HotkeyLabel.tsx @@ -1,24 +1,22 @@ import React from "react"; -import { getContrastYIQ } from "./colorPickerUtils"; +import { isColorDark } from "./colorPickerUtils"; interface HotkeyLabelProps { color: string; keyLabel: string | number; - isCustomColor?: boolean; isShade?: boolean; } const HotkeyLabel = ({ color, keyLabel, - isCustomColor = false, isShade = false, }: HotkeyLabelProps) => { return (
{isShade && "⇧"} diff --git a/packages/excalidraw/components/ColorPicker/PickerColorList.tsx b/packages/excalidraw/components/ColorPicker/PickerColorList.tsx index 50594a59e1..38e5cf8c5e 100644 --- a/packages/excalidraw/components/ColorPicker/PickerColorList.tsx +++ b/packages/excalidraw/components/ColorPicker/PickerColorList.tsx @@ -65,7 +65,7 @@ const PickerColorList = ({ tabIndex={-1} type="button" className={clsx( - "color-picker__button color-picker__button--large", + "color-picker__button color-picker__button--large has-outline", { active: colorObj?.colorName === key, "is-transparent": color === "transparent" || !color, diff --git a/packages/excalidraw/components/ColorPicker/ShadeList.tsx b/packages/excalidraw/components/ColorPicker/ShadeList.tsx index aa2c25ea0d..1c8e4c4eb4 100644 --- a/packages/excalidraw/components/ColorPicker/ShadeList.tsx +++ b/packages/excalidraw/components/ColorPicker/ShadeList.tsx @@ -55,7 +55,7 @@ export const ShadeList = ({ hex, onChange, palette }: ShadeListProps) => { key={i} type="button" className={clsx( - "color-picker__button color-picker__button--large", + "color-picker__button color-picker__button--large has-outline", { active: i === shade }, )} aria-label="Shade" diff --git a/packages/excalidraw/components/ColorPicker/TopPicks.tsx b/packages/excalidraw/components/ColorPicker/TopPicks.tsx index 6d18a95871..8531172fb3 100644 --- a/packages/excalidraw/components/ColorPicker/TopPicks.tsx +++ b/packages/excalidraw/components/ColorPicker/TopPicks.tsx @@ -1,11 +1,14 @@ import clsx from "clsx"; import { + COLOR_OUTLINE_CONTRAST_THRESHOLD, DEFAULT_CANVAS_BACKGROUND_PICKS, DEFAULT_ELEMENT_BACKGROUND_PICKS, DEFAULT_ELEMENT_STROKE_PICKS, } from "@excalidraw/common"; +import { isColorDark } from "./colorPickerUtils"; + import type { ColorPickerType } from "./colorPickerUtils"; interface TopPicksProps { @@ -51,6 +54,10 @@ export const TopPicks = ({ className={clsx("color-picker__button", { active: color === activeColor, "is-transparent": color === "transparent" || !color, + "has-outline": !isColorDark( + color, + COLOR_OUTLINE_CONTRAST_THRESHOLD, + ), })} style={{ "--swatch-color": color }} key={color} diff --git a/packages/excalidraw/components/ColorPicker/colorPickerUtils.ts b/packages/excalidraw/components/ColorPicker/colorPickerUtils.ts index 4925a31451..f572bd49f3 100644 --- a/packages/excalidraw/components/ColorPicker/colorPickerUtils.ts +++ b/packages/excalidraw/components/ColorPicker/colorPickerUtils.ts @@ -93,19 +93,42 @@ export type ActiveColorPickerSectionAtomType = export const activeColorPickerSectionAtom = atom(null); -const calculateContrast = (r: number, g: number, b: number) => { +const calculateContrast = (r: number, g: number, b: number): number => { const yiq = (r * 299 + g * 587 + b * 114) / 1000; - return yiq >= 160 ? "black" : "white"; + return yiq; }; -// inspiration from https://stackoverflow.com/a/11868398 -export const getContrastYIQ = (bgHex: string, isCustomColor: boolean) => { - if (isCustomColor) { - const style = new Option().style; - style.color = bgHex; +// YIQ algo, inspiration from https://stackoverflow.com/a/11868398 +export const isColorDark = (color: string, threshold = 160): boolean => { + // no color ("") -> assume it default to black + if (!color) { + return true; + } - if (style.color) { - const rgb = style.color + if (color === "transparent") { + return false; + } + + // a string color (white etc) or any other format -> convert to rgb by way + // of creating a DOM node and retrieving the computeStyle + if (!color.startsWith("#")) { + const node = document.createElement("div"); + node.style.color = color; + + if (node.style.color) { + // making invisible so document doesn't reflow (hopefully). + // display=none works too, but supposedly not in all browsers + node.style.position = "absolute"; + node.style.visibility = "hidden"; + node.style.width = "0"; + node.style.height = "0"; + + // needs to be in DOM else browser won't compute the style + document.body.appendChild(node); + const computedColor = getComputedStyle(node).color; + document.body.removeChild(node); + // computed style is in rgb() format + const rgb = computedColor .replace(/^(rgb|rgba)\(/, "") .replace(/\)$/, "") .replace(/\s/g, "") @@ -114,20 +137,17 @@ export const getContrastYIQ = (bgHex: string, isCustomColor: boolean) => { const g = parseInt(rgb[1]); const b = parseInt(rgb[2]); - return calculateContrast(r, g, b); + return calculateContrast(r, g, b) < threshold; } + // invalid color -> assume it default to black + return true; } - // TODO: ? is this wanted? - if (bgHex === "transparent") { - return "black"; - } + const r = parseInt(color.slice(1, 3), 16); + const g = parseInt(color.slice(3, 5), 16); + const b = parseInt(color.slice(5, 7), 16); - const r = parseInt(bgHex.substring(1, 3), 16); - const g = parseInt(bgHex.substring(3, 5), 16); - const b = parseInt(bgHex.substring(5, 7), 16); - - return calculateContrast(r, g, b); + return calculateContrast(r, g, b) < threshold; }; export type ColorPickerType = diff --git a/packages/excalidraw/css/styles.scss b/packages/excalidraw/css/styles.scss index 33f9b4df04..6f1d9cd48c 100644 --- a/packages/excalidraw/css/styles.scss +++ b/packages/excalidraw/css/styles.scss @@ -173,7 +173,7 @@ body.excalidraw-cursor-resize * { .buttonList { flex-wrap: wrap; display: flex; - column-gap: 0.375rem; + column-gap: 0.5rem; row-gap: 0.5rem; label { @@ -386,16 +386,10 @@ body.excalidraw-cursor-resize * { .App-menu__left { overflow-y: auto; - padding: 0.75rem 0.75rem 0.25rem 0.75rem; - width: 11.875rem; + padding: 0.75rem; + width: 12.5rem; box-sizing: border-box; position: absolute; - - .buttonList label, - .buttonList button, - .buttonList .zIndexButton { - --button-bg: transparent; - } } .dropdown-select { diff --git a/packages/excalidraw/css/theme.scss b/packages/excalidraw/css/theme.scss index fd6a8dacb5..1d6a569665 100644 --- a/packages/excalidraw/css/theme.scss +++ b/packages/excalidraw/css/theme.scss @@ -148,7 +148,7 @@ --border-radius-lg: 0.5rem; --color-surface-high: #f1f0ff; - --color-surface-mid: #f2f2f7; + --color-surface-mid: #f6f6f9; --color-surface-low: #ececf4; --color-surface-lowest: #ffffff; --color-on-surface: #1b1b1f; @@ -252,7 +252,7 @@ --color-logo-text: #e2dfff; - --color-surface-high: hsl(245, 10%, 21%); + --color-surface-high: #2e2d39; --color-surface-low: hsl(240, 8%, 15%); --color-surface-mid: hsl(240 6% 10%); --color-surface-lowest: hsl(0, 0%, 7%); diff --git a/packages/excalidraw/tests/__snapshots__/excalidraw.test.tsx.snap b/packages/excalidraw/tests/__snapshots__/excalidraw.test.tsx.snap index e5e431dfc6..bbcc8d7e0b 100644 --- a/packages/excalidraw/tests/__snapshots__/excalidraw.test.tsx.snap +++ b/packages/excalidraw/tests/__snapshots__/excalidraw.test.tsx.snap @@ -572,7 +572,7 @@ exports[` > Test UIOptions prop > Test canvasActions > should rende class="color-picker__top-picks" >