fix: move retry button into inline toolbar (v1.63.2)
This commit is contained in:
4
package-lock.json
generated
4
package-lock.json
generated
@@ -1,12 +1,12 @@
|
|||||||
{
|
{
|
||||||
"name": "pinchchat",
|
"name": "pinchchat",
|
||||||
"version": "1.63.1",
|
"version": "1.63.2",
|
||||||
"lockfileVersion": 3,
|
"lockfileVersion": 3,
|
||||||
"requires": true,
|
"requires": true,
|
||||||
"packages": {
|
"packages": {
|
||||||
"": {
|
"": {
|
||||||
"name": "pinchchat",
|
"name": "pinchchat",
|
||||||
"version": "1.63.1",
|
"version": "1.63.2",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@tailwindcss/vite": "^4.1.18",
|
"@tailwindcss/vite": "^4.1.18",
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "pinchchat",
|
"name": "pinchchat",
|
||||||
"version": "1.63.1",
|
"version": "1.63.2",
|
||||||
"description": "A sleek, dark-themed webchat UI for OpenClaw — monitor sessions, stream responses, and inspect tool calls in real-time.",
|
"description": "A sleek, dark-themed webchat UI for OpenClaw — monitor sessions, stream responses, and inspect tool calls in real-time.",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"repository": {
|
"repository": {
|
||||||
|
|||||||
@@ -540,20 +540,20 @@ export const ChatMessageComponent = memo(function ChatMessageComponent({ message
|
|||||||
<Bookmark size={12} className={isBookmarked ? 'fill-amber-400' : ''} />
|
<Bookmark size={12} className={isBookmarked ? 'fill-amber-400' : ''} />
|
||||||
</button>
|
</button>
|
||||||
)}
|
)}
|
||||||
|
{isUser && onRetry && (
|
||||||
|
<button
|
||||||
|
onClick={() => onRetry(getPlainText(message))}
|
||||||
|
className={`h-6 w-6 rounded-md flex items-center justify-center transition-colors ${message.sendStatus === 'error' ? 'text-red-400' : 'text-pc-text-faint hover:text-pc-accent-light'}`}
|
||||||
|
title={t('message.retry')}
|
||||||
|
aria-label={t('message.retry')}
|
||||||
|
>
|
||||||
|
<RefreshCw size={12} />
|
||||||
|
</button>
|
||||||
|
)}
|
||||||
<MetadataViewer metadata={message.metadata} />
|
<MetadataViewer metadata={message.metadata} />
|
||||||
<RawJsonToggle isOpen={showRawJson} onToggle={() => setShowRawJson(o => !o)} />
|
<RawJsonToggle isOpen={showRawJson} onToggle={() => setShowRawJson(o => !o)} />
|
||||||
</div>
|
</div>
|
||||||
{/* Retry button (user messages only) */}
|
{/* Retry button moved into the action toolbar below */}
|
||||||
{isUser && onRetry && (
|
|
||||||
<button
|
|
||||||
onClick={() => onRetry(getPlainText(message))}
|
|
||||||
className={`absolute -top-3 right-2 h-7 w-7 rounded-lg border border-pc-border bg-pc-elevated/80 backdrop-blur-sm flex items-center justify-center text-pc-text-secondary hover:text-pc-accent-light hover:border-[var(--pc-accent-dim)] transition-all ${message.sendStatus === 'error' ? 'opacity-100' : 'opacity-0 group-hover:opacity-100'}`}
|
|
||||||
title={t('message.retry')}
|
|
||||||
aria-label={t('message.retry')}
|
|
||||||
>
|
|
||||||
<RefreshCw size={13} className={message.sendStatus === 'error' ? 'text-red-400' : ''} />
|
|
||||||
</button>
|
|
||||||
)}
|
|
||||||
{/* User-visible text */}
|
{/* User-visible text */}
|
||||||
{!isUser ? (
|
{!isUser ? (
|
||||||
<CollapsibleContent content={message.content || ''} isStreaming={message.isStreaming}>
|
<CollapsibleContent content={message.content || ''} isStreaming={message.isStreaming}>
|
||||||
|
|||||||
Reference in New Issue
Block a user