import { select, confirm, isCancel } from '@clack/prompts'; export type LinkAction = 'connect' | 'save' | 'skip' | 'quit'; export interface LinkView { url: string; title?: string; description?: string; connected?: boolean; saved?: boolean; } export async function promptForLink(link: LinkView): Promise { const title = link.title?.slice(0, 80) || 'no title'; const description = link.description?.slice(0, 120) || ''; const statuses: string[] = []; if (link.saved) statuses.push('saved'); if (link.connected) statuses.push('connected'); const status = statuses.length ? ` [${statuses.join(', ')}]` : ''; const action = await select({ message: `${title}${status}\n ${link.url}\n ${description}`, options: [ { value: 'connect', label: 'connect (create RELATED link)' }, { value: 'save', label: 'save + create RELATED link' }, { value: 'skip', label: 'skip' }, { value: 'quit', label: 'quit' }, ], }); if (isCancel(action)) return 'quit'; return action; } export async function confirmContinue(): Promise { const answer = await confirm({ message: 'Continue reviewing links?', active: 'Y', inactive: 'n', initialValue: true, }); if (isCancel(answer)) return false; return answer; }