48 lines
1.0 KiB
TypeScript
48 lines
1.0 KiB
TypeScript
export type FileSelection = {
|
|
startLine: number
|
|
startChar: number
|
|
endLine: number
|
|
endChar: number
|
|
}
|
|
|
|
export type SelectedLineRange = {
|
|
start: number
|
|
end: number
|
|
}
|
|
|
|
export function selectionFromLines(selection?: SelectedLineRange): FileSelection | undefined {
|
|
if (!selection) return undefined
|
|
return {
|
|
startLine: selection.start,
|
|
startChar: 0,
|
|
endLine: selection.end,
|
|
endChar: 0,
|
|
}
|
|
}
|
|
|
|
const pool = [
|
|
"src/session/timeline.tsx",
|
|
"src/session/composer.tsx",
|
|
"src/components/prompt-input.tsx",
|
|
"src/components/session-todo-dock.tsx",
|
|
"README.md",
|
|
]
|
|
|
|
export function useFile() {
|
|
return {
|
|
tab(path: string) {
|
|
return `file:${path}`
|
|
},
|
|
pathFromTab(tab: string) {
|
|
if (!tab.startsWith("file:")) return ""
|
|
return tab.slice(5)
|
|
},
|
|
load: async () => undefined,
|
|
async searchFilesAndDirectories(query: string) {
|
|
const text = query.trim().toLowerCase()
|
|
if (!text) return pool
|
|
return pool.filter((path) => path.toLowerCase().includes(text))
|
|
},
|
|
}
|
|
}
|