Skip to content

Commit f9ab919

Browse files
committed
Add button animations
1 parent edb0b96 commit f9ab919

File tree

6 files changed

+32
-34
lines changed

6 files changed

+32
-34
lines changed

src/app/page.tsx

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,20 +10,19 @@ export default function Home() {
1010
const [isSettingsOpen, setIsSettingsOpen] = useState(false);
1111

1212
return (
13-
<div className='p-4'>
13+
<div className='p-3 md:p-5'>
1414
<div className="flex justify-between items-center mb-6">
1515
<h1 className="text-xl font-bold text-center flex-grow">OpenReader WebUI</h1>
1616
<button
1717
onClick={() => setIsSettingsOpen(true)}
18-
className="rounded-full p-2.5 text-foreground hover:bg-base focus:bg-base
19-
focus:outline-none focus:ring-2 focus:ring-accent transition-colors"
18+
className="rounded-full p-2 text-foreground hover:bg-offbase transform transition-transform duration-200 ease-in-out hover:scale-[1.1] hover:text-accent"
2019
aria-label="Settings"
2120
>
2221
<SettingsIcon className="w-6 h-6 hover:animate-spin-slow" />
2322
</button>
2423
</div>
25-
<div className="flex flex-col items-center gap-6">
26-
<PDFUploader className="w-full max-w-md" />
24+
<div className="flex flex-col items-center gap-5">
25+
<PDFUploader className='max-w-xl' />
2726
<DocumentList />
2827
</div>
2928
<SettingsModal isOpen={isSettingsOpen} setIsOpen={setIsSettingsOpen} />

src/app/pdf/[id]/page.tsx

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -79,34 +79,33 @@ export default function PDFViewerPage() {
7979
<Link
8080
href="/"
8181
onClick={() => {clearCurrDoc(); stop();}}
82-
className="inline-flex items-center px-3 py-1 bg-base text-foreground rounded-lg hover:bg-offbase transition-colors"
82+
className="inline-flex items-center px-3 py-1 bg-base text-foreground rounded-lg hover:bg-offbase transform transition-transform duration-200 ease-in-out hover:scale-[1.02]"
8383
>
84-
<svg className="w-4 h-4 mr-2 text-muted" fill="none" stroke="currentColor" viewBox="0 0 24 24">
84+
<svg className="w-4 h-4 mr-2" fill="currentColor" stroke="currentColor" viewBox="0 0 24 24">
8585
<path strokeLinecap="round" strokeLinejoin="round" strokeWidth="2" d="M10 19l-7-7m0 0l7-7m-7 7h18" />
8686
</svg>
8787
Documents
8888
</Link>
8989
<div className="bg-offbase px-2 py-0.5 rounded-full flex items-center gap-2">
9090
<Button
9191
onClick={handleZoomOut}
92-
className="text-xs hover:text-accent transition-colors"
92+
className="text-xs transform transition-transform duration-200 ease-in-out hover:scale-[1.45] hover:font-semibold hover:text-accent"
9393
aria-label="Zoom out"
9494
>
9595
9696
</Button>
9797
<span className="text-xs">{zoomLevel}%</span>
9898
<Button
9999
onClick={handleZoomIn}
100-
className="text-xs hover:text-accent transition-colors"
100+
className="text-xs transform transition-transform duration-200 ease-in-out hover:scale-[1.45] hover:font-semibold hover:text-accent"
101101
aria-label="Zoom in"
102102
>
103103
104104
</Button>
105105
</div>
106106
<Button
107107
onClick={() => setIsSettingsOpen(true)}
108-
className="rounded-full p-2 text-foreground hover:bg-offbase focus:bg-offbase
109-
focus:outline-none focus:ring-2 focus:ring-accent transition-colors"
108+
className="rounded-full p-1 text-foreground hover:bg-offbase transform transition-transform duration-200 ease-in-out hover:scale-[1.1] hover:text-accent"
110109
aria-label="View Settings"
111110
>
112111
<SettingsIcon className="w-5 h-5 hover:animate-spin-slow" />

src/components/DocumentList.tsx

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { usePDF } from '@/contexts/PDFContext';
22
import Link from 'next/link';
3-
import { Dialog } from '@headlessui/react';
3+
import { Button, Dialog } from '@headlessui/react';
44
import { Transition, TransitionChild, DialogPanel, DialogTitle } from '@headlessui/react';
55
import { Fragment, useState } from 'react';
66

@@ -38,7 +38,7 @@ export function DocumentList() {
3838
}
3939

4040
return (
41-
<div className="w-full max-w-3xl mx-auto">
41+
<div className="w-full mx-auto">
4242
<h2 className="text-xl font-semibold mb-4 text-foreground">Your Documents</h2>
4343
<div className="bg-background rounded-lg shadow p-2 space-y-2">
4444
{documents.map((doc) => (
@@ -64,14 +64,14 @@ export function DocumentList() {
6464
<path strokeLinecap="round" strokeLinejoin="round" strokeWidth="2" d="M7 21h10a2 2 0 002-2V9.414a1 1 0 00-.293-.707l-5.414-5.414A1 1 0 0012.586 3H7a2 2 0 00-2 2v14a2 2 0 002 2z" />
6565
</svg>
6666
</div>
67-
<div className="flex-1 min-w-0">
67+
<div className="flex-1 min-w-0 transform transition-transform duration-200 ease-in-out hover:scale-[1.02]">
6868
<p className="text-foreground font-medium truncate">{doc.name}</p>
6969
<p className="text-sm text-muted truncate">
7070
{(doc.size / 1024 / 1024).toFixed(2)} MB
7171
</p>
7272
</div>
7373
</Link>
74-
<button
74+
<Button
7575
onClick={() => {
7676
setDocumentToDelete({ id: doc.id, name: doc.name });
7777
setIsDeleteDialogOpen(true);
@@ -82,7 +82,7 @@ export function DocumentList() {
8282
<svg className="w-5 h-5" fill="none" stroke="currentColor" viewBox="0 0 24 24">
8383
<path strokeLinecap="round" strokeLinejoin="round" strokeWidth="2" d="M19 7l-.867 12.142A2 2 0 0116.138 21H7.862a2 2 0 01-1.995-1.858L5 7m5 4v6m4-6v6m1-10V4a1 1 0 00-1-1h-4a1 1 0 00-1 1v3M4 7h16" />
8484
</svg>
85-
</button>
85+
</Button>
8686
</div>
8787
</Transition>
8888
))}
@@ -131,20 +131,20 @@ export function DocumentList() {
131131
</div>
132132

133133
<div className="mt-4 flex justify-end space-x-3">
134-
<button
134+
<Button
135135
type="button"
136136
className="inline-flex justify-center rounded-md border border-transparent bg-base px-4 py-2 text-sm font-medium text-foreground hover:bg-base/80 focus:outline-none focus-visible:ring-2 focus-visible:ring-accent focus-visible:ring-offset-2"
137137
onClick={() => setIsDeleteDialogOpen(false)}
138138
>
139139
Cancel
140-
</button>
141-
<button
140+
</Button>
141+
<Button
142142
type="button"
143143
className="inline-flex justify-center rounded-md border border-transparent bg-red-600 px-4 py-2 text-sm font-medium text-white hover:bg-red-700 focus:outline-none focus-visible:ring-2 focus-visible:ring-red-500 focus-visible:ring-offset-2"
144144
onClick={handleDelete}
145145
>
146146
Delete
147-
</button>
147+
</Button>
148148
</div>
149149
</DialogPanel>
150150
</TransitionChild>

src/components/PDFUploader.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ export function PDFUploader({ className = '' }: PDFUploaderProps) {
4545
className={`
4646
w-full py-5 px-3 border-2 border-dashed rounded-lg
4747
${isDragActive ? 'border-accent bg-base' : 'border-muted'}
48-
transition-colors duration-200 ease-in-out
48+
transform trasition-transform duration-200 ease-in-out hover:scale-[1.008]
4949
${isUploading ? 'cursor-not-allowed opacity-50' : 'cursor-pointer hover:border-accent hover:bg-base'}
5050
${className}
5151
`}

src/components/PDFViewSettings.tsx

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
'use client';
22

33
import { Fragment } from 'react';
4-
import { Dialog, DialogPanel, DialogTitle, Transition, TransitionChild, Listbox, ListboxButton, ListboxOptions, ListboxOption } from '@headlessui/react';
4+
import { Dialog, DialogPanel, DialogTitle, Transition, TransitionChild, Listbox, ListboxButton, ListboxOptions, ListboxOption, Button } from '@headlessui/react';
55
import { useConfig, ViewType } from '@/contexts/ConfigContext';
66
import { ChevronUpDownIcon, CheckIcon } from '@/components/icons/Icons';
77

@@ -62,7 +62,7 @@ export function PDFViewSettings({ isOpen, setIsOpen }: PDFViewSettingsProps) {
6262
onChange={(newView) => updateConfigKey('viewType', newView.id as ViewType)}
6363
>
6464
<div className="relative">
65-
<ListboxButton className="relative w-full cursor-pointer rounded-lg bg-background py-2 pl-3 pr-10 text-left text-foreground shadow-sm focus:outline-none focus:ring-2 focus:ring-accent">
65+
<ListboxButton className="relative w-full cursor-pointer rounded-lg bg-background py-2 pl-3 pr-10 text-left text-foreground shadow-sm focus:outline-none focus:ring-2 focus:ring-accent transform transition-transform duration-200 ease-in-out hover:scale-[1.01] hover:text-accent">
6666
<span className="block truncate">{selectedView.name}</span>
6767
<span className="pointer-events-none absolute inset-y-0 right-0 flex items-center pr-2">
6868
<ChevronUpDownIcon className="h-5 w-5 text-muted" />
@@ -113,16 +113,16 @@ export function PDFViewSettings({ isOpen, setIsOpen }: PDFViewSettingsProps) {
113113
</div>
114114

115115
<div className="mt-3 flex justify-end">
116-
<button
116+
<Button
117117
type="button"
118118
className="inline-flex justify-center rounded-lg bg-background px-4 py-2 text-sm
119119
font-medium text-foreground hover:bg-background/90 focus:outline-none
120120
focus-visible:ring-2 focus-visible:ring-accent focus-visible:ring-offset-2
121-
transition-colors"
121+
transform transition-transform duration-200 ease-in-out hover:scale-[1.04] hover:text-accent"
122122
onClick={() => setIsOpen(false)}
123123
>
124124
Close
125-
</button>
125+
</Button>
126126
</div>
127127
</DialogPanel>
128128
</TransitionChild>

src/components/SettingsModal.tsx

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
'use client';
22

33
import { Fragment, useState, useEffect } from 'react';
4-
import { Dialog, DialogPanel, DialogTitle, Transition, TransitionChild, Listbox, ListboxButton, ListboxOptions, ListboxOption } from '@headlessui/react';
4+
import { Dialog, DialogPanel, DialogTitle, Transition, TransitionChild, Listbox, ListboxButton, ListboxOptions, ListboxOption, Button } from '@headlessui/react';
55
import { useTheme } from '@/contexts/ThemeContext';
66
import { useConfig } from '@/contexts/ConfigContext';
77
import { ChevronUpDownIcon, CheckIcon } from './icons/Icons';
@@ -68,7 +68,7 @@ export function SettingsModal({ isOpen, setIsOpen }: SettingsModalProps) {
6868
<label className="block text-sm font-medium text-foreground">Theme</label>
6969
<Listbox value={selectedTheme} onChange={(newTheme) => setTheme(newTheme.id)}>
7070
<div className="relative">
71-
<ListboxButton className="relative w-full cursor-pointer rounded-lg bg-background py-2 pl-3 pr-10 text-left text-foreground shadow-sm focus:outline-none focus:ring-2 focus:ring-accent">
71+
<ListboxButton className="relative w-full cursor-pointer rounded-lg bg-background py-2 pl-3 pr-10 text-left text-foreground shadow-sm focus:outline-none focus:ring-2 focus:ring-accent transform transition-transform duration-200 ease-in-out hover:scale-[1.01] hover:text-accent">
7272
<span className="block truncate">{selectedTheme.name}</span>
7373
<span className="pointer-events-none absolute inset-y-0 right-0 flex items-center pr-2">
7474
<ChevronUpDownIcon className="h-5 w-5 text-muted" />
@@ -134,12 +134,12 @@ export function SettingsModal({ isOpen, setIsOpen }: SettingsModalProps) {
134134
</div>
135135

136136
<div className="mt-6 flex justify-end space-x-3">
137-
<button
137+
<Button
138138
type="button"
139139
className="inline-flex justify-center rounded-lg bg-accent px-4 py-2 text-sm
140140
font-medium text-white hover:bg-accent/90 focus:outline-none
141141
focus-visible:ring-2 focus-visible:ring-accent focus-visible:ring-offset-2
142-
transition-colors"
142+
transform transition-transform duration-200 ease-in-out hover:scale-[1.04] hover:text-background"
143143
onClick={async () => {
144144
await updateConfig({
145145
apiKey: localApiKey,
@@ -149,21 +149,21 @@ export function SettingsModal({ isOpen, setIsOpen }: SettingsModalProps) {
149149
}}
150150
>
151151
Save
152-
</button>
153-
<button
152+
</Button>
153+
<Button
154154
type="button"
155155
className="inline-flex justify-center rounded-lg bg-background px-4 py-2 text-sm
156156
font-medium text-foreground hover:bg-background/90 focus:outline-none
157157
focus-visible:ring-2 focus-visible:ring-accent focus-visible:ring-offset-2
158-
transition-colors"
158+
transform transition-transform duration-200 ease-in-out hover:scale-[1.04] hover:text-accent"
159159
onClick={() => {
160160
setLocalApiKey(apiKey);
161161
setLocalBaseUrl(baseUrl);
162162
setIsOpen(false);
163163
}}
164164
>
165165
Cancel
166-
</button>
166+
</Button>
167167
</div>
168168
</DialogPanel>
169169
</TransitionChild>

0 commit comments

Comments
 (0)