import type { ReactNode, SVGProps } from 'react' /** * Phosphor icons (regular weight), path data inlined from @phosphor-icons/core * (MIT (c) Phosphor Icons - phosphoricons.com). Deliberately NOT an icon package * dependency: the shell ships as source into unknown hosts, and every runtime dep * must resolve through the host's package-manager layout (see DECISIONS.md). */ type IconProps = SVGProps & { size?: number } const icon = (children: ReactNode) => function Icon({ size = 16, ...rest }: IconProps) { return ( {children} ) } export const SunIcon = icon() export const MoonIcon = icon() export const CaretIcon = icon() /** arrows-in-line-horizontal: fold a row in on itself (the lane's Done tiles) */ export const ArrowsInLineHorizontalIcon = icon() export const PlayIcon = icon() export const GridIcon = icon() export const CopyIcon = icon() export const PlusIcon = icon() export const XIcon = icon() export const ReloadIcon = icon() export const CheckIcon = icon() export const ColumnsIcon = icon() export const ArrowUpIcon = icon() export const CommentIcon = icon() export const EyeSlashIcon = icon() export const CheckSquareOffsetIcon = icon() export const DevicesIcon = icon() export const DeviceMobileIcon = icon() export const DeviceTabletIcon = icon() export const LaptopIcon = icon() export const MonitorIcon = icon() export const TvIcon = icon() export const ImagesSquareIcon = icon() export const SignpostIcon = icon() export const ParallelogramDuoIcon = icon(<>) /** The marver mark, SOLID fill (for the Marver avatar - a filled white parallelogram on accent). */ export const ParallelogramFillIcon = icon() /** Sidebar trigger, custom in Phosphor 256-space: outer frame + panel pill - * pill filled while the sidebar is open, hollow while collapsed. */ export const PanelFilledIcon = icon(<>) /** Plain UI frame - the rectangle every non-content sidebar row leads with. */ export const FrameRectIcon = icon() export const UserIcon = icon() export const PencilSimpleIcon = icon() export const LinkIcon = icon() export const LaserIcon = icon(<>) /* Content-frame intent glyphs, custom in the same 256-space. */ export const DiagramShapeIcon = icon(<>) export const SpecDocIcon = icon(<>) export const MoodboardIcon = icon(<>) export const NoteStickyIcon = icon(<>) export const ContentBlocksIcon = icon(<>) /** intent -> glyph; unknown intents fall to the generic content icon (forward-compatible). * Accessible by default: role img + label + tooltip carry the intent name (the base * icon() is aria-hidden; the spread below overrides it). */ export function IntentGlyph({ intent, size = 14, ...rest }: IconProps & { intent: string }) { const I = intent === 'diagram' ? DiagramShapeIcon : intent === 'spec' ? SpecDocIcon : intent === 'moodboard' ? MoodboardIcon : intent === 'notes' ? NoteStickyIcon : ContentBlocksIcon return } /** The slide badge (v1.5): a 16:9 stage with the play wedge - a deck frame. */ export const SlideFrameIcon = icon() export const PanelHollowIcon = icon(<>) export const FrameCornersIcon = icon() export const ArrowLeftIcon = icon() export const ArrowRightIcon = icon() /** Variants/experimentation mark: the flask (Phosphor). */ export const VariantsIcon = icon() /** The board glyph, for a board with no type. */ export const CardsIcon = icon() /** Viewport-name -> device glyph; unknown custom names fall back to the generic Devices. */ export function deviceIcon(name: string | null, size = 14) { const Icon = ({ mobile: DeviceMobileIcon, tablet: DeviceTabletIcon, laptop: LaptopIcon, monitor: MonitorIcon, tv: TvIcon } as Record)[name ?? ''] ?? DevicesIcon return } export const BrowsersIcon = icon() /** Sidebar folders (Phosphor regular): closed, open, plus (new), minus (delete). */ export const FolderIcon = icon() export const FolderOpenIcon = icon() export const FolderPlusIcon = icon() export const FolderMinusIcon = icon() export const ArrowLineUpIcon = icon() // Jam V2 (spec 27): the capture and review surfaces. Phosphor regular, same source and licence. export const WaveformIcon = icon() export const StopIcon = icon() export const MicrophoneIcon = icon() export const MicrophoneSlashIcon = icon() export const CursorClickIcon = icon() export const CursorIcon = icon() export const TextboxIcon = icon() export const EyeIcon = icon() export const FileCodeIcon = icon() export const KeyboardIcon = icon() export const ArrowBendUpLeftIcon = icon() export const WarningIcon = icon() export const NotebookIcon = icon()