import { Component, createSignal, For, Show, onCleanup, onMount, } from "solid-js"; import { docEntries, type DocEntry } from "./doc-data"; import { journalDocEntries, type JournalDocEntry } from "./journal-doc-data"; type DocSet = "directives" | "journal"; type AnyEntry = DocEntry | JournalDocEntry; export interface DocDialogProps { isOpen: boolean; onClose: () => void; } const DocDialog: Component = (props) => { const [docSet, setDocSet] = createSignal("directives"); const [selectedTag, setSelectedTag] = createSignal(docEntries[0]?.tag ?? ""); const [dropdownOpen, setDropdownOpen] = createSignal(false); let dropdownRef!: HTMLDivElement; const currentEntries = () => docSet() === "directives" ? (docEntries as AnyEntry[]) : (journalDocEntries as AnyEntry[]); const selectedEntry = () => currentEntries().find((e) => e.tag === selectedTag()) ?? currentEntries()[0]; const docSetLabel = () => docSet() === "directives" ? "指令组件文档" : "Journal 服务器文档"; const handleKeyDown = (e: KeyboardEvent) => { if (e.key === "Escape") props.onClose(); }; const switchDocSet = (set: DocSet) => { setDocSet(set); setDropdownOpen(false); const entries = set === "directives" ? docEntries : journalDocEntries; setSelectedTag(entries[0]?.tag ?? ""); }; onMount(() => { document.addEventListener("keydown", handleKeyDown); // Close dropdown on outside click document.addEventListener("click", (e) => { if (dropdownRef && !dropdownRef.contains(e.target as Node)) { setDropdownOpen(false); } }); }); onCleanup(() => { document.removeEventListener("keydown", handleKeyDown); }); return (
{ if (e.target === e.currentTarget) props.onClose(); }} >
{(entry) => }
); }; /** Single entry documentation content */ const DocContent: Component<{ entry: AnyEntry }> = (props) => { const e = props.entry; return (

{e.icon} {e.title} :{e.tag}

{e.description}

基本语法

          {e.syntax}
        
0}>

属性

{(prop) => ( )}
属性 类型 默认值 说明
{prop.name} {prop.type} {prop.default ?? "—"} {prop.desc}

示例

{e.body}
); }; export default DocDialog;