/** * Online-only boards — the public "shop window". * * These boards are implemented by the hosted editor (velxio.com), where they * are free to use; their emulation engines and board wiring are not part of * the OSS tree. The OSS build knows only this list — name, art, a badge — * and renders advertisement cards in the picker that link to the online * editor. * * A build where a board actually exists (the hosted build registers the real * BoardKind) must NOT show its ad. Callers filter with `id in * BOARD_KIND_LABELS`: when the real kind is registered the ad disappears * automatically, so this list needs no per-build switches. */ export interface OnlineOnlyBoardAd { /** Stable id — matches the BoardKind the hosted build registers. */ id: string; label: string; description: string; /** Inline SVG for the card thumbnail (rendered via innerHTML). */ thumbnailSvg: string; } /** Where the ad cards send the user. */ export const ONLINE_EDITOR_URL = 'https://velxio.com'; export const ONLINE_ONLY_BOARD_ADS: OnlineOnlyBoardAd[] = [ { id: 'esp32-c6', label: 'ESP32-C6-DevKitC-1', description: 'RISC-V single-core, WiFi 6 + BLE + 802.15.4 — in-browser emulation', thumbnailSvg: '' + '' + '' + '' + 'C6' + '' + '' + '' + '' + '' + '' + '', }, { id: 'm5stack-core', label: 'M5Stack Core Basic', description: 'ESP32 all-in-one: 2" LCD, 3 buttons, speaker, microSD', thumbnailSvg: '' + '' + '' + '' + '' + '', }, { id: 'cardputer-adv', label: 'M5 Cardputer ADV', description: 'ESP32-S3 card computer: ST7789 LCD + 56-key keyboard', thumbnailSvg: '' + '' + '' + '' + '' + Array.from({ length: 3 }, (_, r) => Array.from( { length: 12 }, (_, c) => ``, ).join(''), ).join('') + '', }, { id: 'pimoroni-pico-plus-2w', label: 'Pimoroni Pico Plus 2W', description: 'RP2350B dual-core RISC-V/ARM + WiFi, 16MB flash + 8MB PSRAM', thumbnailSvg: '' + '' + '' + '' + '' + Array.from({ length: 8 }, (_, i) => ``).join('') + Array.from({ length: 8 }, (_, i) => ``).join('') + '', }, { id: 'galactic-unicorn', label: 'Pimoroni Galactic Unicorn', description: 'RP2350 53×11 RGB LED matrix panel', thumbnailSvg: '' + '' + '' + Array.from({ length: 5 }, (_, r) => Array.from( { length: 14 }, (_, c) => ``, ).join(''), ).join('') + '', }, { id: 'badger-2350', label: 'Pimoroni Badger 2350', description: 'RP2350 wearable badge with 2.7" e-ink display', thumbnailSvg: '' + '' + '' + 'BADGER' + '', }, { id: 'xiao-esp32s3-sense', label: 'XIAO ESP32S3 Sense', description: 'Thumb-size ESP32-S3 with camera + mic (Seeed Studio) - in-browser emulation', thumbnailSvg: 'S3', }, { id: 'xiao-esp32c6', label: 'XIAO ESP32C6', description: 'Thumb-size ESP32-C6: WiFi 6, BLE, 802.15.4 (Seeed Studio) - in-browser emulation', thumbnailSvg: 'C6', }, { id: 'xiao-rp2040', label: 'XIAO RP2040', description: 'Thumb-size RP2040 (Seeed Studio) - in-browser emulation', thumbnailSvg: 'RP', }, , { id: 'unihiker-m10', label: 'UNIHIKER M10', description: 'DFRobot IoT SBC: RK3308 Linux + 2.8" touchscreen (micro:bit edge) - available in the online editor', thumbnailSvg: '' + '' + '' + 'UNIHIKER' + '', } ]; /** Advertisement entry for a hosted-editor-only COMPONENT (picker part). * Same contract as the board ads above: the OSS build renders a card that * links to the online editor, and any build where the real component exists * in the ComponentRegistry (the hosted overlay merges it in) must hide the * ad — callers filter with `registry.getById(ad.id)`, so the ad disappears * automatically and this list needs no per-build switches. */ export interface OnlineOnlyComponentAd { /** Stable id — matches the component metadata id the hosted build merges. */ id: string; label: string; description: string; /** Picker category the ad card appears under (besides "all"). */ category: string; /** Inline SVG for the card thumbnail (rendered via innerHTML). */ thumbnailSvg: string; } export const ONLINE_ONLY_COMPONENT_ADS: OnlineOnlyComponentAd[] = [ { id: 'm5stack-chain-8x8', label: 'M5Stack Chain RGB Matrix (8\u00d78)', description: '64 RGB LEDs, daisy-chainable \u2014 in-browser emulation', category: 'output', thumbnailSvg: "", }, { id: 'm5stack-chain-mono-8x8', label: 'M5Stack Chain Mono Matrix (8\u00d78, White)', description: '64 white LEDs, daisy-chainable \u2014 in-browser emulation', category: 'output', thumbnailSvg: "", },, { id: 'seeed-round-display', label: 'Round Display for XIAO (1.28", GC9A01)', description: 'Round GC9A01 240x240 touch LCD + RTC - available in the online editor', category: 'displays', thumbnailSvg: '', }, { id: 'grove-gesture-pag7660', label: 'Grove Smart IR Gesture (PAG7661QN)', description: 'IR camera gesture sensor on a XIAO carrier: seat a XIAO on its socket and read rotate/tap/grab/pinch/swipe over I2C - available in the online editor', category: 'input', thumbnailSvg: '', }, { id: 'respeaker-lite', label: 'ReSpeaker Lite (XMOS XU316)', description: 'Dual-mic array with a XIAO socket: live mic in, audio out, beamforming/AEC/NS model - online editor', category: 'sensors', thumbnailSvg: '', } ];