Upload folder using huggingface_hub
Browse files
client/src/components/Refinity.tsx
CHANGED
|
@@ -125,6 +125,7 @@ const Refinity: React.FC = () => {
|
|
| 125 |
const newVersion: Version = { id: saved._id, taskId: saved.taskId, originalAuthor: saved.originalAuthor, revisedBy: saved.revisedBy, versionNumber: saved.versionNumber, content: saved.content, parentVersionId: saved.parentVersionId };
|
| 126 |
setVersions(prev => [...prev, newVersion]);
|
| 127 |
setCurrentVersionId(newVersion.id);
|
|
|
|
| 128 |
setStage('flow');
|
| 129 |
} finally {
|
| 130 |
setUploading(false);
|
|
@@ -185,6 +186,7 @@ const Refinity: React.FC = () => {
|
|
| 185 |
setVersions(prev => [...prev, newVersion]);
|
| 186 |
setCurrentVersionId(newVersion.id);
|
| 187 |
setPastedTranslation('');
|
|
|
|
| 188 |
setStage('flow');
|
| 189 |
} catch {}
|
| 190 |
};
|
|
@@ -221,6 +223,7 @@ const Refinity: React.FC = () => {
|
|
| 221 |
};
|
| 222 |
setVersions(prev => [...prev, v]);
|
| 223 |
setCurrentVersionId(v.id);
|
|
|
|
| 224 |
setStage('flow');
|
| 225 |
} catch {
|
| 226 |
// no-op; keep user in editor if needed
|
|
@@ -387,13 +390,13 @@ const Refinity: React.FC = () => {
|
|
| 387 |
const offset = idx - focusedIndex;
|
| 388 |
const abs = Math.abs(offset);
|
| 389 |
const isCenter = abs === 0;
|
| 390 |
-
const translateX = offset *
|
| 391 |
-
const rotateY = -offset *
|
| 392 |
-
const translateZ = -abs *
|
| 393 |
-
const scale = isCenter ? 1.
|
| 394 |
const opacity = isCenter ? 1 : Math.max(0.6, 1 - abs * 0.15);
|
| 395 |
const zIndex = 100 - abs;
|
| 396 |
-
const snippet = (v.content || '').slice(0,
|
| 397 |
return (
|
| 398 |
<div
|
| 399 |
key={v.id}
|
|
@@ -403,9 +406,9 @@ const Refinity: React.FC = () => {
|
|
| 403 |
opacity,
|
| 404 |
zIndex,
|
| 405 |
}}
|
| 406 |
-
onClick={() => { if (!isCenter) setFlowIndex(idx); }}
|
| 407 |
>
|
| 408 |
-
<div className="relative w-[520px] rounded-xl p-5 bg-white/10 backdrop-blur-md ring-1 ring-inset ring-white/30 shadow-[0_20px_40px_rgba(0,0,0,0.15),inset_0_0.5px_0_rgba(255,255,255,0.5),inset_0_-1px_1.5px_rgba(0,0,0,0.12)]">
|
| 409 |
<div className="text-gray-800 text-sm mb-2">Original: {v.originalAuthor}</div>
|
| 410 |
<div className="text-gray-600 text-xs mb-3">Revised by: {v.revisedBy ? `${v.revisedBy} (v${v.versionNumber})` : `— (v${v.versionNumber})`}</div>
|
| 411 |
<div className="text-gray-900 whitespace-pre-wrap break-words min-h-[100px]">{snippet}</div>
|
|
@@ -429,6 +432,11 @@ const Refinity: React.FC = () => {
|
|
| 429 |
<button onClick={()=>{ setPreviewVersionId(v.id); setShowPreviewDiff(true); setStage('preview'); }} className="relative overflow-hidden inline-flex items-center justify-center gap-2 px-3 py-2 text-sm font-medium rounded-2xl text-black ring-1 ring-inset ring-white/50 backdrop-blur-md bg-white/30 active:translate-y-0.5 transition-all duration-200">Compare</button>
|
| 430 |
</div>
|
| 431 |
)}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 432 |
</div>
|
| 433 |
</div>
|
| 434 |
);
|
|
|
|
| 125 |
const newVersion: Version = { id: saved._id, taskId: saved.taskId, originalAuthor: saved.originalAuthor, revisedBy: saved.revisedBy, versionNumber: saved.versionNumber, content: saved.content, parentVersionId: saved.parentVersionId };
|
| 126 |
setVersions(prev => [...prev, newVersion]);
|
| 127 |
setCurrentVersionId(newVersion.id);
|
| 128 |
+
setCurrentVersionId(null);
|
| 129 |
setStage('flow');
|
| 130 |
} finally {
|
| 131 |
setUploading(false);
|
|
|
|
| 186 |
setVersions(prev => [...prev, newVersion]);
|
| 187 |
setCurrentVersionId(newVersion.id);
|
| 188 |
setPastedTranslation('');
|
| 189 |
+
setCurrentVersionId(null);
|
| 190 |
setStage('flow');
|
| 191 |
} catch {}
|
| 192 |
};
|
|
|
|
| 223 |
};
|
| 224 |
setVersions(prev => [...prev, v]);
|
| 225 |
setCurrentVersionId(v.id);
|
| 226 |
+
setCurrentVersionId(null);
|
| 227 |
setStage('flow');
|
| 228 |
} catch {
|
| 229 |
// no-op; keep user in editor if needed
|
|
|
|
| 390 |
const offset = idx - focusedIndex;
|
| 391 |
const abs = Math.abs(offset);
|
| 392 |
const isCenter = abs === 0;
|
| 393 |
+
const translateX = offset * 300; // spacing between cards (wider)
|
| 394 |
+
const rotateY = -offset * 35; // gentler angle
|
| 395 |
+
const translateZ = -abs * 120; // less depth to avoid squish
|
| 396 |
+
const scale = isCenter ? 1.02 : 1.0; // minimal size change
|
| 397 |
const opacity = isCenter ? 1 : Math.max(0.6, 1 - abs * 0.15);
|
| 398 |
const zIndex = 100 - abs;
|
| 399 |
+
const snippet = (v.content || '').slice(0, 180) + ((v.content || '').length > 180 ? '…' : '');
|
| 400 |
return (
|
| 401 |
<div
|
| 402 |
key={v.id}
|
|
|
|
| 406 |
opacity,
|
| 407 |
zIndex,
|
| 408 |
}}
|
| 409 |
+
onClick={() => { if (!isCenter) setFlowIndex(idx); else setPreviewVersionId(v.id); }}
|
| 410 |
>
|
| 411 |
+
<div className="relative w-[520px] rounded-xl p-5 bg-white/10 backdrop-blur-md ring-1 ring-inset ring-white/30 shadow-[0_20px_40px_rgba(0,0,0,0.15),inset_0_0.5px_0_rgba(255,255,255,0.5),inset_0_-1px_1.5px_rgba(0,0,0,0.12)] text-base">
|
| 412 |
<div className="text-gray-800 text-sm mb-2">Original: {v.originalAuthor}</div>
|
| 413 |
<div className="text-gray-600 text-xs mb-3">Revised by: {v.revisedBy ? `${v.revisedBy} (v${v.versionNumber})` : `— (v${v.versionNumber})`}</div>
|
| 414 |
<div className="text-gray-900 whitespace-pre-wrap break-words min-h-[100px]">{snippet}</div>
|
|
|
|
| 432 |
<button onClick={()=>{ setPreviewVersionId(v.id); setShowPreviewDiff(true); setStage('preview'); }} className="relative overflow-hidden inline-flex items-center justify-center gap-2 px-3 py-2 text-sm font-medium rounded-2xl text-black ring-1 ring-inset ring-white/50 backdrop-blur-md bg-white/30 active:translate-y-0.5 transition-all duration-200">Compare</button>
|
| 433 |
</div>
|
| 434 |
)}
|
| 435 |
+
{!isCenter && (
|
| 436 |
+
<div className="mt-4 text-center">
|
| 437 |
+
<button onClick={()=> setFlowIndex(idx)} className="text-sm text-indigo-700 hover:underline">Center</button>
|
| 438 |
+
</div>
|
| 439 |
+
)}
|
| 440 |
</div>
|
| 441 |
</div>
|
| 442 |
);
|