diff --git a/src-tauri/src/handlers.rs b/src-tauri/src/handlers.rs index 230e014..ba8cf59 100644 --- a/src-tauri/src/handlers.rs +++ b/src-tauri/src/handlers.rs @@ -31,7 +31,7 @@ pub struct Work { pub struct ImageAsset { name: String, path: String, - image_dimensions: ImageDimensions, + dimensions: ImageDimensions, } #[derive(serde::Serialize)] @@ -287,7 +287,7 @@ fn add_asset(asset: &PathBuf, work: &mut Work) { work.assets.push(ImageAsset { name: asset_name.to_string_lossy().to_string(), path: asset.to_string_lossy().to_string(), - image_dimensions: ImageDimensions { + dimensions: ImageDimensions { width: asset_width, height: asset_height, }, diff --git a/src/App.tsx b/src/App.tsx index 2912722..a3990cb 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -3,7 +3,7 @@ import { WorksViewer } from '@/components/layout/works-viewer/WorksViewer'; import { CollectionProvider } from '@/contexts/CollectionContext'; import { SearchProvider } from '@/contexts/SearchContext'; import { ThemeButton } from '@/components/layout/ThemeButton'; -import { useLocalStorage } from '@/hooks/useLocalStorage'; +import { useLocalStorage } from '@/hooks/use-local-storage'; import { FC, useCallback } from 'react'; export type Theme = 'light' | 'dark'; diff --git a/src/components/layout/FavoriteButton.tsx b/src/components/layout/FavoriteButton.tsx index 71c6635..e0ed0c6 100644 --- a/src/components/layout/FavoriteButton.tsx +++ b/src/components/layout/FavoriteButton.tsx @@ -1,5 +1,5 @@ import { SearchContext } from '@/contexts/SearchContext'; -import { useKeyboardEvent } from '@/hooks/useKeyboardEvent'; +import { useKeyboardEvent } from '@/hooks/use-keyboard-event'; import { FC, useCallback, useContext, useEffect, useState } from 'react'; export const FavoriteButton: FC = () => { @@ -7,17 +7,13 @@ export const FavoriteButton: FC = () => { const [prevSearchRequest, setPrevSearchRequest] = useState(''); const toggleFavorites = useCallback( - () => - setSearch((prev) => ({ - request: prev?.request === '#favorites' ? prevSearchRequest : '#favorites', - mode: prev?.mode ?? 'all', - })), + () => setSearch((prev) => (prev === '#favorites' ? prevSearchRequest : '#favorites')), [setSearch, prevSearchRequest], ); useEffect(() => { - if (!search || search.request === '#favorites') return; - setPrevSearchRequest(search.request); + if (search === '#favorites') return; + setPrevSearchRequest(search); }, [search]); useKeyboardEvent( @@ -37,9 +33,9 @@ export const FavoriteButton: FC = () => { ); }; diff --git a/src/components/layout/header/CollectionButton.tsx b/src/components/layout/header/CollectionButton.tsx index 7c6b564..36027de 100644 --- a/src/components/layout/header/CollectionButton.tsx +++ b/src/components/layout/header/CollectionButton.tsx @@ -1,7 +1,7 @@ import { FC, useCallback, useContext, useEffect, useRef } from 'react'; import { CollectionContext } from '@/contexts/CollectionContext'; -import { useLocalStorage } from '@/hooks/useLocalStorage'; -import { useKeyboardEvent } from '@/hooks/useKeyboardEvent'; +import { useLocalStorage } from '@/hooks/use-local-storage'; +import { useKeyboardEvent } from '@/hooks/use-keyboard-event'; export const CollectionButton: FC = () => { const { collection, loadCollection } = useContext(CollectionContext); diff --git a/src/components/layout/header/Searchbar.tsx b/src/components/layout/header/Searchbar.tsx index cfef2a4..9f73f44 100644 --- a/src/components/layout/header/Searchbar.tsx +++ b/src/components/layout/header/Searchbar.tsx @@ -1,6 +1,6 @@ import { SearchContext } from '@/contexts/SearchContext'; -import { useKeyboardEvent } from '@/hooks/useKeyboardEvent'; -import { useWanakana } from '@/hooks/useWanakana'; +import { useKeyboardEvent } from '@/hooks/use-keyboard-event'; +import { useWanakana } from '@/hooks/use-wanakana'; import { FC, useContext, useRef, useState } from 'react'; export const Searchbar: FC = () => { @@ -11,14 +11,6 @@ export const Searchbar: FC = () => { useWanakana(inputRef, {}, kanaConversion); - const toggleSearchMode = () => { - setSearch((prev) => ({ - request: prev?.request ?? '', - mode: prev?.mode === 'all' ? 'works' : prev?.mode === 'works' ? 'users' : 'all', - })); - inputRef.current?.focus(); - }; - const toggleKanaConversion = () => { setKanaConversion((prev) => !prev); inputRef.current?.focus(); @@ -30,8 +22,6 @@ export const Searchbar: FC = () => { useKeyboardEvent('keydown', 'Escape', () => inputRef.current?.blur(), [inputRef.current]); - useKeyboardEvent('keyup', 'Backquote', toggleSearchMode, [], { alt: true }); - useKeyboardEvent('keyup', 'Backquote', toggleKanaConversion, [], { control: true }); return ( @@ -40,36 +30,22 @@ export const Searchbar: FC = () => { e.preventDefault(); inputRef.current?.blur(); }} - className="border-text-header flex min-w-0 grow basis-40 gap-1 rounded-full border-2" + className="flex min-w-0 grow basis-40 gap-1 rounded-full border-2 border-text-header" > - setSearch((prev) => ({ - request: (e.target as HTMLInputElement).value, - mode: prev?.mode ?? 'all', - })) - } + className="min-w-0 grow bg-transparent py-1.5 pl-3 placeholder:text-text-header/80 focus:outline-none" + value={search} + onInput={(e) => setSearch((e.target as HTMLInputElement).value)} onFocus={() => setIsInputInFocus(true)} onBlur={() => setIsInputInFocus(false)} /> - -
-

+

x{work.assets.length}

@@ -29,7 +29,7 @@ const WorkCardContents: FC = memo(({ work }: WorkCardContents)
)}
-

+

{work.title ?? 'Untitled'}

@@ -92,7 +92,7 @@ export const WorkCard: FC = memo( onClick={() => selectIndex(index)} tabIndex={-1} className={ - 'border-text/30 grid w-full grid-cols-[3fr_8fr] items-center gap-2 rounded-xl border-2 p-1 shadow-md focus:outline-none' + + 'grid w-full grid-cols-[3fr_8fr] items-center gap-2 rounded-xl border-2 border-text/30 p-1 shadow-md focus:outline-none' + (active ? ' border-text/60 bg-text/20' : ' hover:bg-text/10') } > diff --git a/src/components/layout/works-viewer/WorkDetails.tsx b/src/components/layout/works-viewer/WorkDetails.tsx index a57dd65..2cabd9f 100644 --- a/src/components/layout/works-viewer/WorkDetails.tsx +++ b/src/components/layout/works-viewer/WorkDetails.tsx @@ -1,7 +1,7 @@ import { CollectionContext } from '@/contexts/CollectionContext'; -import { useAnimateScroll } from '@/hooks/useAnimateScroll'; -import { useKeyboardEvent } from '@/hooks/useKeyboardEvent'; -import { Work } from '@/lib/Collection'; +import { useAnimateScroll } from '@/hooks/use-animate-scroll'; +import { useKeyboardEvent } from '@/hooks/use-keyboard-event'; +import { Work } from '@/lib/collection'; import { FC, Fragment, useContext, useEffect, useRef, useState } from 'react'; interface WorkDetailsContentsProps { @@ -119,11 +119,11 @@ const WorkDetailsContents: FC = ({ work, expanded }) = )} - {work.dateTime && ( + {work.uploadTime && ( uploaded:  -

{work.dateTime.toDateString()}

+

{work.uploadTime}

)} @@ -141,12 +141,12 @@ const WorkDetailsContents: FC = ({ work, expanded }) = )} - {work.pageUrl && ( + {work.url && ( = ({ work, fullscreenMode }) => { className={ 'relative z-20 flex grow basis-0 items-center justify-center overflow-hidden shadow-lg transition-[border-radius] duration-1000' + (!controlsShown ? ' cursor-none' : '') + - (!fullscreenMode ? ' border-text/30 rounded-xl border-2' : '') + (!fullscreenMode ? ' rounded-xl border-2 border-text/30' : '') } > {work?.assets?.length && work.assets[pageNumber] ? ( @@ -69,12 +69,12 @@ export const WorkView: FC = ({ work, fullscreenMode }) => {
-
+
-
+
- {search?.request === '#favorites' && ( + {search === '#favorites' && (