| 156 | // search query (filter the preset list). Anything with a scheme, slash, or |
| 157 | // host-with-TLD is treated as a URL; everything else is search. |
| 158 | const looksLikeUrl = (raw: string): boolean => { |
| 159 | const v = raw.trim(); |
| 160 | if (v.length === 0) return false; |
| 161 | if (/^[a-z][a-z0-9+\-.]*:\/\//i.test(v)) return true; |
| 162 | if (v.includes("/")) return true; |
| 163 | if (/^[a-z0-9][a-z0-9.-]*\.[a-z]{2,}(?::\d+)?$/i.test(v)) return true; |
| 164 | return false; |
| 165 | }; |
| 166 | |
| 167 | export function ConnectDialog(props: { open: boolean; onOpenChange: (open: boolean) => void }) { |
| 168 | const integrationPlugins = useIntegrationPlugins(); |