({
isEditing,
imageUploadRef
}: {
isEditing: boolean
imageUploadRef: React.RefObject<HTMLInputElement>
})
| 40 | import { Textarea } from './ui/textarea' |
| 41 | |
| 42 | export default function Prompt({ |
| 43 | isEditing, |
| 44 | imageUploadRef |
| 45 | }: { |
| 46 | isEditing: boolean |
| 47 | imageUploadRef: React.RefObject<HTMLInputElement> |
| 48 | }) { |
| 49 | const currentUI = useContext(CurrentUIContext) |
| 50 | const params = useParams() |
| 51 | const [searchParams, setSearchParams] = useSearchParams() |
| 52 | |
| 53 | const navigation = useNavigate() |
| 54 | const id = params.id ?? 'new' |
| 55 | const [item, setItem] = useAtom(historyAtomFamily({ id })) |
| 56 | const wrappedItem = useMemo( |
| 57 | () => new ItemWrapper(item, setItem), |
| 58 | [item, setItem] |
| 59 | ) |
| 60 | const [versionIdx, updateVersion] = useVersion(wrappedItem) |
| 61 | const html = wrappedItem.pureHTML(versionIdx) |
| 62 | |
| 63 | const queryRef = useRef<HTMLTextAreaElement>(null) |
| 64 | const nextExampleRef = useRef<NodeJS.Timeout>() |
| 65 | const [screenshot, setScreenshot] = useAtom(screenshotAtom) |
| 66 | const [inspectorEnabled, setInspectorEnabled] = useAtom(inspectorEnabledAtom) |
| 67 | const [convertFramework, setConvertFramework] = useAtom(convertFrameworkAtom) |
| 68 | const [sidebarState, setSidebarState] = useAtom(historySidebarStateAtom) |
| 69 | const modelSupportsImages = useAtomValue(modelSupportsImagesAtom) |
| 70 | const [comments, setComments] = useAtom(commentsAtom) |
| 71 | const currentRender = useAtomValue( |
| 72 | imageDB.item(`screenshot-${id}-${versionIdx}`) |
| 73 | ) |
| 74 | const setImage = useSetAtom(imageDB.item(`image-${id}-${versionIdx}`)) |
| 75 | const uiState = useAtomValue(uiStateAtom) |
| 76 | const dragging = useAtomValue(draggingAtom) |
| 77 | const { rendering, annotatedHTML } = uiState |
| 78 | const facets = useAtomValue(facetsAtom) |
| 79 | |
| 80 | const model = useAtomValue(modelAtom) |
| 81 | const temperature = useAtomValue(temperatureAtom) |
| 82 | const saveHistory = useSaveHistory() |
| 83 | const [example, setExample] = useState<string>(EXAMPLES[0]) |
| 84 | const [bufferedExample, setBufferedExample] = useState<string>('') |
| 85 | const setHistoryIds = useSetAtom(historyIdsAtom) |
| 86 | const [liveMarkdown, setLiveMarkdown] = useState(item.markdown ?? '') |
| 87 | const throttledMD = useThrottle(liveMarkdown) |
| 88 | const newComponent = useCallback( |
| 89 | (prompt: string, clear = true) => { |
| 90 | // New state management |
| 91 | const newId = nanoid() |
| 92 | historyAtomFamily({ id: newId, prompt, createdAt: new Date() }) |
| 93 | setHistoryIds(prev => [newId, ...prev]) |
| 94 | navigation(`/ai/${newId}?gen=1&clear=${clear}`) |
| 95 | }, |
| 96 | [navigation, setHistoryIds] |
| 97 | ) |
| 98 | const [isFocused, setIsFocused] = useState(false) |
| 99 | const [animate, setAnimate] = useState(false) |
nothing calls this directly
no test coverage detected