UNPKG

one

Version:

One is a React framework for web, iOS, and Android apps.

1 lines • 8.21 kB
{"version":3,"file":"index.js","names":[],"sources":["esm/platform/image-picker/index.js"],"sourcesContent":["import { resolveCameraOptions, resolveImagePickerOptions } from \"./options\";\nconst granted = Object.freeze({\n status: \"granted\",\n granted: true,\n canAskAgain: true\n});\nfunction acceptFor(mediaTypes) {\n const accept = [];\n if (mediaTypes.includes(\"images\")) accept.push(\"image/*\");\n if (mediaTypes.includes(\"videos\")) accept.push(\"video/*\");\n return accept.join(\",\");\n}\nfunction pickFiles(accept, multiple, capture) {\n return new Promise((resolve) => {\n const input = document.createElement(\"input\");\n input.type = \"file\";\n input.accept = accept;\n input.multiple = multiple;\n if (capture) input.capture = capture;\n input.onchange = () => resolve(input.files ? [...input.files] : []);\n input.addEventListener(\"cancel\", () => resolve(null));\n input.click();\n });\n}\nasync function imageSize(file) {\n try {\n const bitmap = await createImageBitmap(file);\n const size = { width: bitmap.width, height: bitmap.height };\n bitmap.close();\n return size;\n } catch {\n return { width: 0, height: 0 };\n }\n}\nfunction videoSize(url) {\n return new Promise((resolve) => {\n const video = document.createElement(\"video\");\n video.preload = \"metadata\";\n video.muted = true;\n video.onloadedmetadata = () => resolve({ width: video.videoWidth, height: video.videoHeight });\n video.onerror = () => resolve({ width: 0, height: 0 });\n video.src = url;\n });\n}\nfunction videoDuration(url) {\n return new Promise((resolve) => {\n const video = document.createElement(\"video\");\n video.preload = \"metadata\";\n video.muted = true;\n video.onloadedmetadata = () => resolve(\n Number.isFinite(video.duration) ? Math.round(video.duration * 1e3) : void 0\n );\n video.onerror = () => resolve(void 0);\n video.src = url;\n });\n}\nasync function toAsset(file, quality) {\n const uri = URL.createObjectURL(file);\n const isVideo = file.type.startsWith(\"video/\");\n const asset = {\n uri,\n width: 0,\n height: 0,\n mimeType: file.type || void 0,\n fileName: file.name,\n fileSize: file.size,\n type: isVideo ? \"video\" : \"image\"\n };\n if (isVideo) {\n const url = uri;\n const size2 = await videoSize(url);\n asset.width = size2.width;\n asset.height = size2.height;\n const duration = await videoDuration(url);\n if (duration !== void 0) asset.duration = duration;\n return asset;\n }\n if (quality < 1) {\n const compressed = await compressImage(file, quality);\n if (compressed) {\n URL.revokeObjectURL(uri);\n return compressed;\n }\n }\n const size = await imageSize(file);\n asset.width = size.width;\n asset.height = size.height;\n return asset;\n}\nasync function compressImage(file, quality) {\n try {\n const bitmap = await createImageBitmap(file);\n const canvas = document.createElement(\"canvas\");\n canvas.width = bitmap.width;\n canvas.height = bitmap.height;\n const context = canvas.getContext(\"2d\");\n if (!context) {\n bitmap.close();\n return null;\n }\n context.drawImage(bitmap, 0, 0);\n bitmap.close();\n const blob = await new Promise(\n (resolve) => canvas.toBlob(resolve, \"image/jpeg\", quality)\n );\n if (!blob) return null;\n const uri = URL.createObjectURL(blob);\n return {\n uri,\n width: canvas.width,\n height: canvas.height,\n mimeType: \"image/jpeg\",\n fileName: file.name,\n fileSize: blob.size,\n type: \"image\"\n };\n } catch {\n return null;\n }\n}\nasync function pick(verb, selectionLimit, mediaTypes, quality, capture) {\n if (typeof document === \"undefined\") {\n throw new Error(`ImagePicker.${verb} needs an iOS or Android build`);\n }\n const files = await pickFiles(\n acceptFor(mediaTypes),\n selectionLimit !== 1,\n capture\n );\n if (!files || files.length === 0) return { canceled: true, assets: null };\n const limited = selectionLimit > 0 ? files.slice(0, selectionLimit) : files;\n const assets = [];\n for (const file of limited) {\n assets.push(await toAsset(file, quality));\n }\n return { canceled: false, assets };\n}\nfunction launchLibrary(options = {}) {\n const resolved = resolveImagePickerOptions(options);\n return pick(\"launchLibrary\", resolved.selectionLimit, resolved.mediaTypes, resolved.quality);\n}\nfunction launchCamera(options = {}) {\n const resolved = resolveCameraOptions(options);\n return pick(\"launchCamera\", 1, resolved.mediaTypes, resolved.quality, \"environment\");\n}\nasync function getCameraPermissions() {\n return granted;\n}\nasync function requestCameraPermissions() {\n return granted;\n}\nconst ImagePicker = Object.freeze({\n launchLibrary,\n launchCamera,\n getCameraPermissions,\n requestCameraPermissions\n});\nexport {\n ImagePicker\n};\n//# sourceMappingURL=index.js.map\n"],"mappings":"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"}