UNPKG

one

Version:

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

1 lines • 10.1 kB
{"version":3,"file":"index.js","names":[],"sources":["esm/platform/clipboard/index.js"],"sourcesContent":["import {\n assertGetImageOptions,\n assertGetStringOptions,\n assertListener,\n assertSetImage,\n assertSetStringOptions,\n assertSetStringText,\n assertSetUrl\n} from \"./validate\";\nfunction webClipboard() {\n if (typeof navigator === \"undefined\") return void 0;\n return navigator.clipboard ?? void 0;\n}\nfunction getString(options) {\n assertGetStringOptions(options, \"getString\");\n return readString(options);\n}\nasync function readString(options) {\n const clipboard = webClipboard();\n if (!clipboard) return \"\";\n if (options?.preferredFormat === \"html\" && typeof clipboard.read === \"function\") {\n try {\n for (const item of await clipboard.read()) {\n if (item.types.includes(\"text/html\")) {\n const blob = await item.getType(\"text/html\");\n return await blob.text();\n }\n }\n } catch {\n }\n }\n if (!clipboard.readText) return \"\";\n try {\n return await clipboard.readText();\n } catch {\n return \"\";\n }\n}\nfunction setString(text, options) {\n assertSetStringText(text);\n assertSetStringOptions(options, \"setString\");\n return writeText(text, options?.inputFormat === \"html\");\n}\nasync function writeText(text, html) {\n const clipboard = webClipboard();\n if (!clipboard) return false;\n if (html && typeof clipboard.write === \"function\" && typeof ClipboardItem !== \"undefined\") {\n try {\n await clipboard.write([\n new ClipboardItem({\n \"text/html\": new Blob([text], { type: \"text/html\" }),\n \"text/plain\": new Blob([text], { type: \"text/plain\" })\n })\n ]);\n return true;\n } catch {\n }\n }\n if (!clipboard.writeText) return false;\n try {\n await clipboard.writeText(text);\n return true;\n } catch {\n return false;\n }\n}\nasync function hasString() {\n return (await getString()).length > 0;\n}\nfunction stripDataUriPrefix(base64Image) {\n const comma = base64Image.indexOf(\",\");\n if (base64Image.startsWith(\"data:\") && comma !== -1) {\n return base64Image.slice(comma + 1);\n }\n return base64Image;\n}\nfunction sniffMimeType(bytes) {\n if (bytes.length >= 3 && bytes[0] === 255 && bytes[1] === 216 && bytes[2] === 255) {\n return \"image/jpeg\";\n }\n return \"image/png\";\n}\nfunction decodeBase64(base64Image) {\n try {\n const binary = atob(stripDataUriPrefix(base64Image));\n const bytes = new Uint8Array(binary.length);\n for (let index = 0; index < binary.length; index++) {\n bytes[index] = binary.charCodeAt(index);\n }\n return bytes;\n } catch {\n return null;\n }\n}\nasync function convertImage(blob, format, jpegQuality) {\n try {\n const bitmap = await createImageBitmap(blob);\n const width = bitmap.width;\n const height = bitmap.height;\n const mime = format === \"jpeg\" ? \"image/jpeg\" : \"image/png\";\n if (format === \"png\" && blob.type === \"image/png\" || format === \"jpeg\" && blob.type === \"image/jpeg\") {\n bitmap.close();\n const buffer = await blob.arrayBuffer();\n let binary = \"\";\n const bytes = new Uint8Array(buffer);\n for (let index = 0; index < bytes.length; index++) {\n binary += String.fromCharCode(bytes[index]);\n }\n return { dataUrl: `data:${mime};base64,${btoa(binary)}`, width, height };\n }\n const canvas = document.createElement(\"canvas\");\n canvas.width = width;\n canvas.height = 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 dataUrl = canvas.toDataURL(mime, jpegQuality);\n return { dataUrl, width, height };\n } catch {\n return null;\n }\n}\nfunction getImage(options) {\n assertGetImageOptions(options);\n return readImage(options);\n}\nasync function readImage(options) {\n const clipboard = webClipboard();\n if (!clipboard || typeof clipboard.read !== \"function\") return null;\n try {\n for (const item of await clipboard.read()) {\n const type = item.types.find((entry) => entry.startsWith(\"image/\"));\n if (!type) continue;\n const blob = await item.getType(type);\n const converted = await convertImage(blob, options.format, options.jpegQuality ?? 1);\n if (converted) {\n return { data: converted.dataUrl, size: { width: converted.width, height: converted.height } };\n }\n }\n } catch {\n return null;\n }\n return null;\n}\nfunction setImage(base64Image) {\n assertSetImage(base64Image);\n return writeImage(base64Image);\n}\nasync function writeImage(base64Image) {\n const clipboard = webClipboard();\n if (!clipboard || typeof clipboard.write !== \"function\" || typeof ClipboardItem === \"undefined\") {\n return;\n }\n const bytes = decodeBase64(base64Image);\n if (!bytes) return;\n const mime = sniffMimeType(bytes);\n const copy = new Uint8Array(bytes.length);\n copy.set(bytes);\n try {\n await clipboard.write([\n new ClipboardItem({ [mime]: new Blob([copy.buffer], { type: mime }) })\n ]);\n } catch {\n }\n}\nasync function hasImage() {\n const clipboard = webClipboard();\n if (!clipboard || typeof clipboard.read !== \"function\") return false;\n try {\n for (const item of await clipboard.read()) {\n if (item.types.some((entry) => entry.startsWith(\"image/\"))) return true;\n }\n } catch {\n return false;\n }\n return false;\n}\nfunction getUrl() {\n return Promise.resolve(null);\n}\nfunction setUrl(url) {\n assertSetUrl(url);\n return Promise.resolve();\n}\nasync function hasUrl() {\n return false;\n}\nconst inert = { remove: () => {\n} };\nfunction addListener(_listener) {\n assertListener(_listener);\n return inert;\n}\nconst Clipboard = Object.freeze({\n getString,\n setString,\n hasString,\n getImage,\n setImage,\n hasImage,\n getUrl,\n setUrl,\n hasUrl,\n addListener\n});\nexport {\n Clipboard\n};\n//# sourceMappingURL=index.js.map\n"],"mappings":"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"}