/** * @file canvas-icons.tsx — Phase 5.1 inline-SVG icon set * @scope apps/studio/canvas-icons.tsx * @purpose Tiny dependency-free Lucide-style icon set for the canvas * chrome (tool palette, context toolbar). Each icon is a single * `` with `currentColor` stroke so it inherits the button * foreground. Sized 16 px by default; the parent button is * 32 × 32, leaving 8 px of optical padding on every side. */ import type { JSX, SVGProps } from 'react'; type IconProps = SVGProps & { size?: number }; function Svg({ size = 16, children, ...rest }: IconProps) { return ( ); } export function IconMove(props: IconProps) { return ( ); } // feature-4 (browse/move split) — Browse tool. A pointing-hand ("tap") cursor: // the universal "the mock is alive, click it" glyph, deliberately distinct from // Move's solid selection arrow. export function IconBrowse(props: IconProps) { return ( ); } // DDR-223 addendum 2 — the Preview/Edit/Present toggle glyphs (owner steer // 2026-08-15): lucide `eye` + `pencil-ruler` (ISC), redrawn in the house // 24 × 24 / 1.75-stroke language. Mode segments deliberately do NOT reuse tool // glyphs — a mode is a way of looking at the canvas, not a recalled tool. export function IconEye(props: IconProps) { return ( ); } export function IconPencilRuler(props: IconProps) { return ( ); } export function IconHand(props: IconProps) { return ( ); } export function IconComment(props: IconProps) { return ( ); } export function IconPen(props: IconProps) { return ( ); } export function IconRect(props: IconProps) { return ( ); } export function IconEllipse(props: IconProps) { return ( ); } export function IconArrow(props: IconProps) { return ( ); } export function IconEraser(props: IconProps) { return ( ); } // Phase 21 — sticky note: folded-corner square (dog-ear at the top-right). export function IconSticky(props: IconProps) { return ( ); } // Phase 21 — standalone text: capital-T glyph (cap bar + stem). export function IconText(props: IconProps) { return ( ); } // Phase 23 — link (chain) glyph, used by the annotation context toolbar's // "Open link" button. (Media is paste/drop-only — no toolbar buttons — so the // picture-frame image icon was dropped.) export function IconLink(props: IconProps) { return ( ); } // DDR-223 addendum 2 — redrawn to the lucide `presentation` glyph so the three // mode-segment icons (eye / pencil-ruler / presentation) read as one family. export function IconPresentation(props: IconProps) { return ( ); } export function IconChevronDown(props: IconProps) { return ( ); } // ── Phase 21 context-toolbar icons ────────────────────────────────────────── // Corner radius: a square whose corners show the chosen rounding. export function IconCornerSquare(props: IconProps) { return ( ); } export function IconCornerSoft(props: IconProps) { return ( ); } export function IconCornerPill(props: IconProps) { return ( ); } // Arrow direction: a shaft with chevron head(s) on the chosen end(s). export function IconArrowNone(props: IconProps) { return ( ); } export function IconArrowStartHead(props: IconProps) { return ( ); } export function IconArrowEndHead(props: IconProps) { return ( ); } export function IconArrowBothHeads(props: IconProps) { return ( ); } // Dashed line toggle. export function IconDash(props: IconProps) { return ( ); } // Stroke weight: thin vs thick rule. export function IconLineThin(props: IconProps) { return ( ); } export function IconLineThick(props: IconProps) { return ( ); } // Letter "A" — font-size chips render it at three sizes (S / M / L). export function IconLetterA(props: IconProps) { return ( ); } // Trash — delete selected annotations. export function IconTrash(props: IconProps) { return ( ); } // ── Phase 24 shape-tool icons ──────────────────────────────────────────────── // IconShape — the Shape tool button: a square + circle composite (FigJam-style). export function IconShape(props: IconProps) { return ( ); } export function IconSquare(props: IconProps) { return ( ); } export function IconRoundedSquare(props: IconProps) { return ( ); } export function IconCircle(props: IconProps) { return ( ); } export function IconDiamond(props: IconProps) { return ( ); } export function IconTriangle(props: IconProps) { return ( ); } export function IconTriangleDown(props: IconProps) { return ( ); } // ── Phase 24 arrowhead-picker icons ────────────────────────────────────────── // Each shows a short shaft ending in the head style on the right. export function IconArrowheadLine(props: IconProps) { return ( ); } export function IconArrowheadTriangle(props: IconProps) { return ( ); } export function IconArrowheadTriangleOutline(props: IconProps) { return ( ); } export function IconArrowheadCircle(props: IconProps) { return ( ); } export function IconArrowheadDiamond(props: IconProps) { return ( ); } // ── Phase 24 line-type icons ───────────────────────────────────────────────── export function IconLineStraight(props: IconProps) { return ( ); } export function IconLineCurved(props: IconProps) { return ( ); } export function IconLineElbow(props: IconProps) { return ( ); } // ── Phase 24 text-style icons ──────────────────────────────────────────────── export function IconBold(props: IconProps) { return ( ); } export function IconStrike(props: IconProps) { return ( ); } export function IconAlignLeft(props: IconProps) { return ( ); } export function IconAlignCenter(props: IconProps) { return ( ); } export function IconAlignRight(props: IconProps) { return ( ); } // ── Annotation polish text-style icons (italic / underline / lists) ────────── export function IconItalic(props: IconProps) { return ( ); } export function IconUnderline(props: IconProps) { return ( ); } export function IconListBullet(props: IconProps) { return ( ); } export function IconListOrdered(props: IconProps) { return ( ); } // ── Annotation polish — highlighter (chisel-tip marker) ────────────────────── export function IconHighlighter(props: IconProps) { return ( ); } export const TOOL_ICONS: Record JSX.Element> = { browse: IconBrowse, move: IconMove, hand: IconHand, comment: IconComment, pen: IconPen, highlighter: IconHighlighter, // Phase 24 — single Shape tool. rect/ellipse kept for any legacy lookups. shape: IconShape, rect: IconRect, ellipse: IconEllipse, sticky: IconSticky, // FigJam v3 — labelled organizing container. section: IconSection, arrow: IconArrow, text: IconText, eraser: IconEraser, }; // Phase 24 — shape-kind → icon, for the palette popover + context toolbar. export const SHAPE_KIND_ICONS: Record JSX.Element> = { square: IconSquare, rounded: IconRoundedSquare, circle: IconCircle, diamond: IconDiamond, triangle: IconTriangle, 'triangle-down': IconTriangleDown, }; // ── FigJam v3 — multi-select manipulation icons ────────────────────────────── // Object align (an edge line + two boxes), distribute (rails + a box), and // group/ungroup. Same 24×24 stroke language as the rest of the set. export function IconObjAlignLeft(props: IconProps) { return ( ); } export function IconObjAlignHCenter(props: IconProps) { return ( ); } export function IconObjAlignRight(props: IconProps) { return ( ); } export function IconObjAlignTop(props: IconProps) { return ( ); } export function IconObjAlignVCenter(props: IconProps) { return ( ); } export function IconObjAlignBottom(props: IconProps) { return ( ); } export function IconDistributeH(props: IconProps) { return ( ); } export function IconDistributeV(props: IconProps) { return ( ); } export function IconGroup(props: IconProps) { return ( ); } export function IconUngroup(props: IconProps) { return ( ); } /** FigJam v3 — section tool: a region with its name chip docked top-left. */ export function IconSection(props: IconProps) { return ( ); }