summaryrefslogtreecommitdiffhomepage
path: root/packages/app/src/constants
diff options
context:
space:
mode:
authorBrendan Allan <[email protected]>2026-03-20 23:02:07 +0800
committerGitHub <[email protected]>2026-03-20 15:02:07 +0000
commitd0a57305efcf03f4fd69ca180d97ea85e6cb2f1d (patch)
treec4112592fa632f24544deab42e465b0e2c1d0ff6 /packages/app/src/constants
parent27a70ad70f30faf30d159f56b394c01f9474c7a4 (diff)
downloadopencode-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.ts89
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 }]
+}