mirror of
https://github.com/wu736139669/hapi.git
synced 2026-08-05 06:24:37 +00:00
feat: add image paste functionality to composer
Implements paste event handler that automatically adds pasted images as attachments to the composer. Adds Windows x64 binary support to dependencies.
This commit is contained in:
@@ -858,6 +858,8 @@
|
||||
|
||||
"@twsxtd/hapi-linux-x64": ["@twsxtd/hapi-linux-x64@0.12.0", "", { "os": "linux", "cpu": "x64", "bin": { "hapi": "bin/hapi" } }, "sha512-L0giu9XXSQO69TrPjC9+TYoJQ8Mh56hT/J/klOW+ZWxICmHfY1z2cjhgR+E39aFXci2N8t9ZheMb8R67XbvjvA=="],
|
||||
|
||||
"@twsxtd/hapi-win32-x64": ["@twsxtd/hapi-win32-x64@0.12.0", "", { "os": "win32", "cpu": "x64", "bin": { "hapi": "bin/hapi.exe" } }, "sha512-vCWFk1kHaJQgtzl6yExXQuyNV/wf1nIou+gCastLl1vEX/R1GS5ymaowU8lzGuFFwZ0PMCfloJ6/UGFfApE1rQ=="],
|
||||
|
||||
"@types/babel__core": ["@types/babel__core@7.20.5", "", { "dependencies": { "@babel/parser": "^7.20.7", "@babel/types": "^7.20.7", "@types/babel__generator": "*", "@types/babel__template": "*", "@types/babel__traverse": "*" } }, "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA=="],
|
||||
|
||||
"@types/babel__generator": ["@types/babel__generator@7.27.0", "", { "dependencies": { "@babel/types": "^7.0.0" } }, "sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg=="],
|
||||
|
||||
@@ -2,6 +2,7 @@ import { getPermissionModeOptionsForFlavor, MODEL_MODE_LABELS, MODEL_MODES } fro
|
||||
import { ComposerPrimitive, useAssistantApi, useAssistantState } from '@assistant-ui/react'
|
||||
import {
|
||||
type ChangeEvent as ReactChangeEvent,
|
||||
type ClipboardEvent as ReactClipboardEvent,
|
||||
type FormEvent as ReactFormEvent,
|
||||
type KeyboardEvent as ReactKeyboardEvent,
|
||||
type SyntheticEvent as ReactSyntheticEvent,
|
||||
@@ -338,6 +339,23 @@ export function HappyComposer(props: {
|
||||
}))
|
||||
}, [])
|
||||
|
||||
const handlePaste = useCallback(async (e: ReactClipboardEvent<HTMLTextAreaElement>) => {
|
||||
const files = Array.from(e.clipboardData?.files || [])
|
||||
const imageFiles = files.filter(file => file.type.startsWith('image/'))
|
||||
|
||||
if (imageFiles.length === 0) return
|
||||
|
||||
e.preventDefault()
|
||||
|
||||
try {
|
||||
for (const file of imageFiles) {
|
||||
await api.composer().addAttachment(file)
|
||||
}
|
||||
} catch (error) {
|
||||
console.error('Error adding pasted image:', error)
|
||||
}
|
||||
}, [api])
|
||||
|
||||
const handleSettingsToggle = useCallback(() => {
|
||||
haptic('light')
|
||||
setShowSettings(prev => !prev)
|
||||
@@ -528,6 +546,7 @@ export function HappyComposer(props: {
|
||||
onChange={handleChange}
|
||||
onSelect={handleSelect}
|
||||
onKeyDown={handleKeyDown}
|
||||
onPaste={handlePaste}
|
||||
className="flex-1 resize-none bg-transparent text-sm leading-snug text-[var(--app-fg)] placeholder-[var(--app-hint)] focus:outline-none disabled:cursor-not-allowed disabled:opacity-50"
|
||||
/>
|
||||
</div>
|
||||
|
||||
Reference in New Issue
Block a user