({ error, id }: HTMLAnnotatorProps)
| 90 | } |
| 91 | |
| 92 | export 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]) |
nothing calls this directly
no test coverage detected