Skip to content

Commit b7ea6ac

Browse files
committed
feat: move Copy button to fixed footer position
1 parent fca8f99 commit b7ea6ac

4 files changed

Lines changed: 80 additions & 21 deletions

File tree

apps/desktop/src/App.css

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -658,6 +658,15 @@ button {
658658
100% { transform: translateX(120%); }
659659
}
660660

661+
/* Fixed copy button footer */
662+
.copy-button-fixed {
663+
position: fixed;
664+
right: var(--space-8);
665+
bottom: 1rem;
666+
z-index: 101;
667+
transition: bottom 0.2s ease;
668+
}
669+
661670
/* Footer progress bar container pinned to bottom padding area */
662671
.status-footer-fixed {
663672
position: fixed;
@@ -675,6 +684,19 @@ button {
675684
z-index: 100;
676685
}
677686

687+
/* Mobile: center the copy button */
688+
@media (max-width: 600px) {
689+
.copy-button-fixed {
690+
left: var(--space-3);
691+
right: var(--space-3);
692+
bottom: 1rem;
693+
}
694+
695+
.copy-button-fixed button {
696+
width: 100%;
697+
}
698+
}
699+
678700
.gc-overlay-card {
679701
max-width: 680px;
680702
width: 100%;

apps/desktop/src/App.tsx

Lines changed: 17 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -681,16 +681,6 @@ function AppContent() {
681681
fileTreeTokens={includeFileTree ? fileTreeTokens : 0}
682682
limit={tokenLimit}
683683
/>
684-
685-
{/* Copy button */}
686-
<button
687-
onClick={copyAllSelected}
688-
disabled={selectedPaths.size === 0 || !!copyFlash}
689-
className="gc-button gc-button-primary"
690-
style={{ width: '100%', marginTop: '12px' }}
691-
>
692-
{copyFlash ? copyFlash : (<><Copy size={16} /> COPY ALL SELECTED</>)}
693-
</button>
694684
</div>
695685

696686
{/* Selected files list */}
@@ -714,6 +704,23 @@ function AppContent() {
714704
{renderPreview()}
715705
</div>
716706

707+
{/* Fixed Copy Button Footer */}
708+
{selectedPaths.size > 0 && gitClient && (
709+
<div
710+
className="copy-button-fixed"
711+
style={{ bottom: copyFlash ? '1rem' : '5rem' }}
712+
>
713+
<button
714+
onClick={copyAllSelected}
715+
disabled={selectedPaths.size === 0 || !!copyFlash}
716+
className="gc-button gc-button-primary"
717+
style={{ minWidth: '200px', fontSize: '1rem', padding: 'var(--space-3) var(--space-5)' }}
718+
>
719+
{copyFlash ? copyFlash : (<><Copy size={18} /> COPY ALL SELECTED</>)}
720+
</button>
721+
</div>
722+
)}
723+
717724
{/* Status bar */}
718725
<div style={{ padding: '0 1rem 1rem 1rem' }}>
719726
{repoStatus.state === 'error' && (

apps/web/src/App.css

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -449,6 +449,15 @@ button {
449449
100% { transform: translateX(120%); }
450450
}
451451

452+
/* Fixed copy button footer */
453+
.copy-button-fixed {
454+
position: fixed;
455+
right: var(--space-8);
456+
bottom: 1rem;
457+
z-index: 101;
458+
transition: bottom 0.2s ease;
459+
}
460+
452461
/* Footer progress bar container pinned to bottom padding area */
453462
.status-footer-fixed {
454463
position: fixed;
@@ -466,6 +475,19 @@ button {
466475
z-index: 100;
467476
}
468477

478+
/* Mobile: center the copy button */
479+
@media (max-width: 600px) {
480+
.copy-button-fixed {
481+
left: var(--space-3);
482+
right: var(--space-3);
483+
bottom: 1rem;
484+
}
485+
486+
.copy-button-fixed button {
487+
width: 100%;
488+
}
489+
}
490+
469491
.gc-overlay-card {
470492
max-width: 680px;
471493
width: 100%;

apps/web/src/App.tsx

Lines changed: 19 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1279,17 +1279,6 @@ function App() {
12791279
/>
12801280
Include Binary as Paths
12811281
</label>
1282-
<div className="row ml-auto">
1283-
<button
1284-
data-testid="copy-all-selected"
1285-
type="button"
1286-
className="btn btn-primary"
1287-
onClick={() => { void copyAllSelected() }}
1288-
disabled={selectedPaths.size === 0 || !gitClient}
1289-
>
1290-
{copyFlash ? copyFlash : (<><Copy size={16} /> COPY ALL SELECTED</>)}
1291-
</button>
1292-
</div>
12931282
</div>
12941283

12951284
<div className="row" style={{ width: '100%' }}>
@@ -1358,6 +1347,25 @@ function App() {
13581347
)}
13591348
{notif && <div className="hint" style={{ color: 'green' }}>{notif}</div>}
13601349

1350+
{/* Fixed Copy Button Footer */}
1351+
{selectedPaths.size > 0 && gitClient && (
1352+
<div
1353+
className="copy-button-fixed"
1354+
style={{ bottom: copyFlash ? '1rem' : hideStatus && appStatus.state === 'READY' ? '1rem' : '5rem' }}
1355+
>
1356+
<button
1357+
data-testid="copy-all-selected"
1358+
type="button"
1359+
className="btn btn-primary"
1360+
onClick={() => { void copyAllSelected() }}
1361+
disabled={selectedPaths.size === 0 || !gitClient}
1362+
style={{ minWidth: '200px', fontSize: '1rem', padding: 'var(--space-3) var(--space-5)' }}
1363+
>
1364+
{copyFlash ? copyFlash : (<><Copy size={18} /> COPY ALL SELECTED</>)}
1365+
</button>
1366+
</div>
1367+
)}
1368+
13611369
{!copyFlash && (
13621370
<div
13631371
className="status-footer-fixed"

0 commit comments

Comments
 (0)