MCPcopy
hub / github.com/wandb/openui / HTMLAnnotator

Function HTMLAnnotator

frontend/src/components/HtmlAnnotator.tsx:92–777  ·  view source on GitHub ↗
({ error, id }: HTMLAnnotatorProps)

Source from the content-addressed store, hash-verified

90}
91
92export default function HTMLAnnotator({ error, id }: HTMLAnnotatorProps) {
93 const currentUI = useContext(CurrentUIContext)
94
95 // Only point to our local annotator in development / running locally otherwise use github pages
96 const iframeSrc = /127\.0\.0\.1|localhost/.test(document.location.hostname)
97 ? `http://${document.location.hostname}:${document.location.port === '5173' ? '7878' : document.location.port}`
98 : 'https://wandb.github.io'
99 const iframeRef = useRef<HTMLIFrameElement | null>(null)
100 const annotatorRef = useRef<HTMLDivElement | null>(null)
101 const iframeId = useMemo(() => nanoid(8), [])
102 const saveHistory = useSaveHistory()
103 const [rawItem, setRawItem] = useAtom(historyAtomFamily({ id }))
104 const item = useMemo(
105 () => new ItemWrapper(rawItem, setRawItem, saveHistory),
106 [rawItem, setRawItem, saveHistory]
107 )
108 const [versionIdx] = useVersion(item)
109 const navigation = useNavigate()
110
111 // global state
112 const [comments, setComments] = useAtom(commentsAtom)
113 const [facets, setFacets] = useAtom(facetsAtom)
114 const darkMode = useAtomValue(darkModeAtom)
115 const [inspectorEnabled, setInspectorEnabled] = useAtom(inspectorEnabledAtom)
116 const setSidebarState = useSetAtom(historySidebarStateAtom)
117 const uiState = useAtomValue(uiStateAtom)
118 const [uiTheme, setUiTheme] = useAtom(uiThemeAtom)
119 const modelSupportsImages = useAtomValue(modelSupportsImagesAtom)
120 const [image, setImage] = useAtom(
121 imageDB.item(`screenshot-${id}-${versionIdx}`)
122 )
123 const isRendering = uiState.rendering // && `${html}`.length < 10
124
125 // Local state
126 const [isReady, setIsReady] = useState<boolean>(false)
127 const [popoverOpen, setPopoverOpen] = useState<boolean>(false)
128 const [themePopoverOpen, setThemePopoverOpen] = useState<boolean>(false)
129 const [previewDarkMode, setPreviewDarkMode] = useState<string>(darkMode)
130 const [voted, setVoted] = useState<string>('')
131 // TODO: wire this up to jotai and make the versions pane absolute
132 const [isCodeVisible, setIsCodeVisible] = useState<boolean>(false)
133 const [userMedia, setUserMedia] = useState<
134 'desktop' | 'mobile' | 'tablet' | undefined
135 >()
136 const [autoMedia, setAutoMedia] = useState<'mobile' | 'tablet' | undefined>()
137 const media = userMedia ?? autoMedia ?? 'desktop'
138 const [inspectorToggled, setInspectorToggled] = useState<boolean>(false)
139 const [scale, setScale] = useState<number>(1)
140
141 useLayoutEffect(() => {
142 if (darkMode === 'system') {
143 if (window.matchMedia('(prefers-color-scheme: dark)').matches) {
144 setPreviewDarkMode('dark')
145 } else {
146 setPreviewDarkMode('light')
147 }
148 }
149 }, [darkMode])

Callers

nothing calls this directly

Calls 7

useSaveHistoryFunction · 0.90
useVersionFunction · 0.90
voteRequestFunction · 0.90
cnFunction · 0.90
onMethod · 0.80
offMethod · 0.80
writeMethod · 0.80

Tested by

no test coverage detected