From 6eb88ee5653a1249f37eb337620d2fda31c2c09f Mon Sep 17 00:00:00 2001 From: Tanish Manku Date: Mon, 15 Jun 2026 18:01:09 -0700 Subject: [PATCH] pagedraw: replace hardcoded chrome colors with semantic tokens MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Implements the P0 color item from the PageDraw design review. Swap raw hex/palette chrome colors for the semantic tokens shared by both lib hosts (artcraft desktop + artcraft-webapp): - ContextMenu: #1A1A1A/#333333/#ECECEC -> bg-ui-panel, white/10 hairlines, text-base-fg/90 - SideToolbar: zinc swatch + #404040/#303030 popovers -> ui-controls / bg-ui-panel + white/10 borders - SliderWithIndicator: #5F5F68 tooltip -> bg-ui-controls - SplitPane: gray-500/600 -> white/20-30 - HistoryStack: text-gray-400 -> text-base-fg/50 - PageDraw + base-image-selector: blue-500/600 accents -> primary token (so the editor accent matches the product's brand-primary) - pagedraw.css pegboard: #1b1b1b -> var(--st-canvas, #1b1b1b) Only tokens defined in both host themes are used. Konva canvas-paint colors (node strokes, brush defaults, selection fills) are intentionally left as literals — they're canvas content, not CSS chrome. Oversized modules deferred per scope. --- .../src/pages/pagedraw/base-image-selector.tsx | 6 +++--- .../libs/components/pagedraw/src/lib/HistoryStack.tsx | 2 +- frontend/libs/components/pagedraw/src/lib/PageDraw.tsx | 6 +++--- .../pagedraw/src/lib/components/ui/ContextMenu.tsx | 8 ++++---- .../pagedraw/src/lib/components/ui/SideToolbar.tsx | 6 +++--- .../src/lib/components/ui/SliderWithIndicator.tsx | 2 +- .../pagedraw/src/lib/components/ui/SplitPane.tsx | 4 ++-- frontend/libs/components/pagedraw/src/lib/pagedraw.css | 4 +++- 8 files changed, 20 insertions(+), 18 deletions(-) diff --git a/frontend/apps/artcraft-webapp/src/pages/pagedraw/base-image-selector.tsx b/frontend/apps/artcraft-webapp/src/pages/pagedraw/base-image-selector.tsx index b18919e90f..10f5222d9b 100644 --- a/frontend/apps/artcraft-webapp/src/pages/pagedraw/base-image-selector.tsx +++ b/frontend/apps/artcraft-webapp/src/pages/pagedraw/base-image-selector.tsx @@ -148,8 +148,8 @@ export function BaseImageSelector({ onDrop={onDrop} className={`flex h-full w-full cursor-pointer flex-col items-center justify-center gap-4 rounded-2xl border-2 border-dashed p-8 text-center transition-colors ${ isDragging - ? "border-blue-400 bg-blue-500/10" - : "border-ui-panel-border bg-ui-background hover:border-blue-400/50" + ? "border-primary-400 bg-primary/10" + : "border-ui-panel-border bg-ui-background hover:border-primary-400/50" } ${busy ? "pointer-events-none opacity-60" : ""}`} > -
+
e.stopPropagation()} onClick={() => onEdit(nodeId)} @@ -185,7 +185,7 @@ function DragScrubButton({ return ( - {item.divider &&
} + {item.divider &&
} ))}
, diff --git a/frontend/libs/components/pagedraw/src/lib/components/ui/SideToolbar.tsx b/frontend/libs/components/pagedraw/src/lib/components/ui/SideToolbar.tsx index 418c0d6ce1..d07f47f11f 100644 --- a/frontend/libs/components/pagedraw/src/lib/components/ui/SideToolbar.tsx +++ b/frontend/libs/components/pagedraw/src/lib/components/ui/SideToolbar.tsx @@ -170,7 +170,7 @@ const SideToolbar: React.FC = ({ extra?: React.ReactNode, ) => (
- @@ -378,7 +378,7 @@ const SideToolbar: React.FC = ({ {open === "shape-color" && (
setOpen(null)} - className="absolute left-14 top-1/2 -translate-y-1/2 rounded-xl border border-[#404040] bg-[#303030] transition-all duration-200 ease-in-out" + className="absolute left-14 top-1/2 -translate-y-1/2 rounded-xl border border-white/10 bg-ui-panel transition-all duration-200 ease-in-out" > {ShapePopout}
@@ -547,7 +547,7 @@ const SideToolbar: React.FC = ({ onMouseLeave={() => { setOpen(null); }} - className="absolute left-14 top-1/2 -translate-y-1/2 rounded-xl border border-[#404040] bg-[#303030] transition-all duration-200 ease-in-out" + className="absolute left-14 top-1/2 -translate-y-1/2 rounded-xl border border-white/10 bg-ui-panel transition-all duration-200 ease-in-out" > {popout}
diff --git a/frontend/libs/components/pagedraw/src/lib/components/ui/SliderWithIndicator.tsx b/frontend/libs/components/pagedraw/src/lib/components/ui/SliderWithIndicator.tsx index 07d41602d4..37ab63ad83 100644 --- a/frontend/libs/components/pagedraw/src/lib/components/ui/SliderWithIndicator.tsx +++ b/frontend/libs/components/pagedraw/src/lib/components/ui/SliderWithIndicator.tsx @@ -58,7 +58,7 @@ const SliderWithIndicator: React.FC = ({ absolute top-6 -translate-x-1/2 transform rounded - bg-[#5F5F68] + bg-ui-controls px-2 py-1 text-xs font-medium text-white shadow-lg diff --git a/frontend/libs/components/pagedraw/src/lib/components/ui/SplitPane.tsx b/frontend/libs/components/pagedraw/src/lib/components/ui/SplitPane.tsx index d8a5a8f938..78d7e500b4 100644 --- a/frontend/libs/components/pagedraw/src/lib/components/ui/SplitPane.tsx +++ b/frontend/libs/components/pagedraw/src/lib/components/ui/SplitPane.tsx @@ -81,8 +81,8 @@ export default function SplitPane({
diff --git a/frontend/libs/components/pagedraw/src/lib/pagedraw.css b/frontend/libs/components/pagedraw/src/lib/pagedraw.css index e6002b3ec2..ff7467165d 100644 --- a/frontend/libs/components/pagedraw/src/lib/pagedraw.css +++ b/frontend/libs/components/pagedraw/src/lib/pagedraw.css @@ -3,7 +3,9 @@ .pegboard-bg { inset: 0; z-index: 0; - background-color: #1b1b1b; + /* Themeable canvas backdrop; hosts may set --st-canvas, otherwise the + original dark grey is used. */ + background-color: var(--st-canvas, #1b1b1b); background-size: 50px 50px; background-position: 0 0,