MCPcopy Index your code
hub / github.com/anomalyco/opencode / useFileViewer

Function useFileViewer

packages/session-ui/src/components/file.tsx:159–370  ·  view source on GitHub ↗
(config: ViewerConfig)

Source from the content-addressed store, hash-verified

157}
158
159function useFileViewer(config: ViewerConfig) {
160 let wrapper!: HTMLDivElement
161 let container!: HTMLDivElement
162 let overlay!: HTMLDivElement
163 let selectionFrame: number | undefined
164 let dragFrame: number | undefined
165 let dragStart: number | undefined
166 let dragEnd: number | undefined
167 let dragMoved = false
168 let lastSelection: SelectedLineRange | null = null
169 let pendingSelectionEnd = false
170
171 const ready = createReadyWatcher()
172 const bridge = createLineNumberSelectionBridge()
173 const [rendered, setRendered] = createSignal(0)
174
175 const getRoot = () => getViewerRoot(container)
176 const getHost = () => getViewerHost(container)
177
178 const find = createFileFind({
179 wrapper: () => wrapper,
180 overlay: () => overlay,
181 getRoot,
182 })
183
184 // -- selection scheduling --
185
186 const scheduleSelectionUpdate = () => {
187 if (selectionFrame !== undefined) return
188 selectionFrame = requestAnimationFrame(() => {
189 selectionFrame = undefined
190 const finishing = pendingSelectionEnd
191 config.updateSelection(finishing)
192 if (!pendingSelectionEnd) return
193 pendingSelectionEnd = false
194 config.onLineSelectionEnd(lastSelection)
195 })
196 }
197
198 const scheduleDragUpdate = () => {
199 if (dragFrame !== undefined) return
200 dragFrame = requestAnimationFrame(() => {
201 dragFrame = undefined
202 const selected = config.buildDragSelection()
203 if (selected) config.setSelectedLines(selected)
204 })
205 }
206
207 // -- mouse handlers --
208
209 const handleMouseDown = (event: MouseEvent) => {
210 if (!config.enableLineSelection()) return
211 if (event.button !== 0) return
212
213 const hit = config.lineFromMouseEvent(event)
214 if (hit.numberColumn) {
215 bridge.begin(true, hit.line)
216 return

Callers 1

useModeViewerFunction · 0.85

Calls 7

createReadyWatcherFunction · 0.90
createFileFindFunction · 0.90
observeViewerSchemeFunction · 0.90
clearReadyWatcherFunction · 0.90
getRootFunction · 0.70
resetMethod · 0.45

Tested by

no test coverage detected