diff options
| author | Brendan Allan <[email protected]> | 2026-03-20 23:02:07 +0800 |
|---|---|---|
| committer | GitHub <[email protected]> | 2026-03-20 15:02:07 +0000 |
| commit | d0a57305efcf03f4fd69ca180d97ea85e6cb2f1d (patch) | |
| tree | c4112592fa632f24544deab42e465b0e2c1d0ff6 /packages/app/src/constants | |
| parent | 27a70ad70f30faf30d159f56b394c01f9474c7a4 (diff) | |
| download | opencode-d0a57305efcf03f4fd69ca180d97ea85e6cb2f1d.tar.gz opencode-d0a57305efcf03f4fd69ca180d97ea85e6cb2f1d.zip | |
app: file type filter on desktop + multiple files (#18403)
Diffstat (limited to 'packages/app/src/constants')
| -rw-r--r-- | packages/app/src/constants/file-picker.ts | 89 |
1 files changed, 89 insertions, 0 deletions
diff --git a/packages/app/src/constants/file-picker.ts b/packages/app/src/constants/file-picker.ts new file mode 100644 index 000000000..c661bc8f3 --- /dev/null +++ b/packages/app/src/constants/file-picker.ts @@ -0,0 +1,89 @@ +export const ACCEPTED_IMAGE_TYPES = ["image/png", "image/jpeg", "image/gif", "image/webp"] + +export const ACCEPTED_FILE_TYPES = [ + ...ACCEPTED_IMAGE_TYPES, + "application/pdf", + "text/*", + "application/json", + "application/ld+json", + "application/toml", + "application/x-toml", + "application/x-yaml", + "application/xml", + "application/yaml", + ".c", + ".cc", + ".cjs", + ".conf", + ".cpp", + ".css", + ".csv", + ".cts", + ".env", + ".go", + ".gql", + ".graphql", + ".h", + ".hh", + ".hpp", + ".htm", + ".html", + ".ini", + ".java", + ".js", + ".json", + ".jsx", + ".log", + ".md", + ".mdx", + ".mjs", + ".mts", + ".py", + ".rb", + ".rs", + ".sass", + ".scss", + ".sh", + ".sql", + ".toml", + ".ts", + ".tsx", + ".txt", + ".xml", + ".yaml", + ".yml", + ".zsh", +] + +const MIME_EXT = new Map([ + ["image/png", "png"], + ["image/jpeg", "jpg"], + ["image/gif", "gif"], + ["image/webp", "webp"], + ["application/pdf", "pdf"], + ["application/json", "json"], + ["application/ld+json", "jsonld"], + ["application/toml", "toml"], + ["application/x-toml", "toml"], + ["application/x-yaml", "yaml"], + ["application/xml", "xml"], + ["application/yaml", "yaml"], +]) + +const TEXT_EXT = ["txt", "text", "md", "markdown", "log", "csv"] + +export const ACCEPTED_FILE_EXTENSIONS = Array.from( + new Set( + ACCEPTED_FILE_TYPES.flatMap((item) => { + if (item.startsWith(".")) return [item.slice(1)] + if (item === "text/*") return TEXT_EXT + const out = MIME_EXT.get(item) + return out ? [out] : [] + }), + ), +).sort() + +export function filePickerFilters(ext?: string[]) { + if (!ext || ext.length === 0) return undefined + return [{ name: "Files", extensions: ext }] +} |
