diff --git a/components/RecipeHero.tsx b/components/RecipeHero.tsx index 1497ebd..fddad8e 100644 --- a/components/RecipeHero.tsx +++ b/components/RecipeHero.tsx @@ -1,7 +1,9 @@ -import IconExternalLink from "https://deno.land/x/tabler_icons_tsx@0.0.3/tsx/external-link.tsx"; import { Star } from "@components/Stars.tsx"; -import IconArrowNarrowLeft from "https://deno.land/x/tabler_icons_tsx@0.0.3/tsx/arrow-narrow-left.tsx"; -import IconEdit from "https://deno.land/x/tabler_icons_tsx@0.0.3/tsx/edit.tsx"; +import { + IconArrowNarrowLeft, + IconEdit, + IconExternalLink, +} from "@components/icons.tsx"; export function RecipeHero( { data, subline, backlink, editLink }: { @@ -29,6 +31,7 @@ export function RecipeHero( Recipe Banner )} @@ -57,7 +60,9 @@ export function RecipeHero( class={`relative inset-x-0 py-4 px-8 ${imageUrl ? "py-8" : ""} `} >
diff --git a/components/Stars.tsx b/components/Stars.tsx index 27f0ccd..cccc41e 100644 --- a/components/Stars.tsx +++ b/components/Stars.tsx @@ -1,5 +1,4 @@ -import IconStar from "https://deno.land/x/tabler_icons_tsx@0.0.3/tsx/star.tsx"; -import IconStarFilled from "https://deno.land/x/tabler_icons_tsx@0.0.3/tsx/star-filled.tsx"; +import { IconStar, IconStarFilled } from "@components/icons.tsx"; export const Star = ( { max = 5, rating = 3 }: { max?: number; rating: number }, diff --git a/components/icons.tsx b/components/icons.tsx new file mode 100644 index 0000000..70b645f --- /dev/null +++ b/components/icons.tsx @@ -0,0 +1,10 @@ +export { default as IconStar } from "https://deno.land/x/tabler_icons_tsx@0.0.3/tsx/star.tsx"; +export { default as IconStarFilled } from "https://deno.land/x/tabler_icons_tsx@0.0.3/tsx/star-filled.tsx"; +export { default as IconExternalLink } from "https://deno.land/x/tabler_icons_tsx@0.0.3/tsx/external-link.tsx"; +export { default as IconArrowNarrowLeft } from "https://deno.land/x/tabler_icons_tsx@0.0.3/tsx/arrow-narrow-left.tsx"; +export { default as IconEdit } from "https://deno.land/x/tabler_icons_tsx@0.0.3/tsx/edit.tsx"; +export { default as IconArrowLeft } from "https://deno.land/x/tabler_icons_tsx@0.0.3/tsx/arrow-left.tsx"; +export { default as IconError404 } from "https://deno.land/x/tabler_icons_tsx@0.0.3/tsx/error-404.tsx"; +export { default as IconSquareRoundedPlus } from "https://deno.land/x/tabler_icons_tsx@0.0.3/tsx/square-rounded-plus.tsx"; +export { default as IconReportSearch } from "https://deno.land/x/tabler_icons_tsx@0.0.3/tsx/report-search.tsx"; +export { default as IconRefresh } from "https://deno.land/x/tabler_icons_tsx@0.0.3/tsx/refresh.tsx"; diff --git a/islands/KMenu.tsx b/islands/KMenu.tsx index bb7c7e0..518d795 100644 --- a/islands/KMenu.tsx +++ b/islands/KMenu.tsx @@ -3,7 +3,7 @@ import { useRef } from "preact/hooks"; import { useEventListener } from "@lib/hooks/useEventListener.ts"; import { menus } from "@islands/KMenu/commands.ts"; import { MenuEntry } from "@islands/KMenu/types.ts"; - +import * as icons from "@components/icons.tsx"; const KMenuEntry = ( { entry, activeIndex, index }: { entry: MenuEntry; @@ -14,12 +14,13 @@ const KMenuEntry = ( return (
activeIndex.value = index} - class={`px-4 py-2 ${ + class={`px-4 py-2 flex items-center gap-1 ${ activeIndex.value === index ? "bg-gray-100 text-gray-900" : "text-gray-400" }`} > + {entry?.icon && icons[entry.icon]({ class: "w-4 h-4 mr-1" })} {entry.title}
); @@ -38,7 +39,7 @@ export const KMenu = ( const input = useRef(null); const commandInput = useSignal(""); - const visible = useSignal(false); + const visible = useSignal(true); if (visible.value === false) { setTimeout(() => { activeMenuType.value = "main"; @@ -126,11 +127,10 @@ export const KMenu = ( class={`opacity-${visible.value ? 100 : 0} pointer-events-${ visible.value ? "auto" : "none" } transition grid place-items-center w-full h-full fixed top-0 left-0 z-50`} - style={{ background: "#1f1f1f88" }} + style={{ background: "#141217ee" }} >
{ commandInput.value = input.current?.value || ""; }} + style={{ outline: "none !important" }} placeholder="Command" - class="bg-transparent color pl-4 border-0" + class="bg-transparent color pl-4 outline outline outline-2 outline-offset-2" /> )} diff --git a/islands/KMenu/commands.ts b/islands/KMenu/commands.ts index a8e45e9..c696727 100644 --- a/islands/KMenu/commands.ts +++ b/islands/KMenu/commands.ts @@ -18,6 +18,7 @@ export const menus: Record = { { title: "Create new article", meta: "", + icon: "IconSquareRoundedPlus", cb: (state) => { state.menus["input_link"] = { title: "Link:", @@ -48,6 +49,7 @@ export const menus: Record = { }, { title: "Clear Cache", + icon: "IconRefresh", cb: async (state) => { state.activeState.value = "loading"; await fetch("/api/cache", { @@ -60,6 +62,7 @@ export const menus: Record = { { title: "Add Movie infos", meta: "", + icon: "IconReportSearch", cb: async (state, context) => { state.activeState.value = "loading"; const movie = context as Movie; diff --git a/islands/KMenu/types.ts b/islands/KMenu/types.ts index 3a75408..60fc96b 100644 --- a/islands/KMenu/types.ts +++ b/islands/KMenu/types.ts @@ -1,4 +1,7 @@ import { Signal } from "@preact/signals"; +import * as icons from "@components/icons.tsx"; + +type IconKey = keyof typeof icons; export type MenuState = { activeMenu: Signal; @@ -10,10 +13,10 @@ export type MenuState = { export type MenuEntry = { cb: (state: MenuState, context: unknown) => void; + icon?: IconKey; meta?: string; visible?: boolean | ((context: unknown) => boolean); title: string; - icon?: string; }; export type Menu = { diff --git a/routes/api/images/index.ts b/routes/api/images/index.ts index bc6a922..da413e4 100644 --- a/routes/api/images/index.ts +++ b/routes/api/images/index.ts @@ -158,7 +158,7 @@ const GET = async ( processImage(imageUrl, params) ); - cache.setImage(resizedImage.slice(), { + cache.setImage(resizedImage, { url: imageUrl, width: params.width, height: params.height, @@ -166,8 +166,9 @@ const GET = async ( }); console.log("[api/image] not-cached: " + imageUrl); + console.log({ imageUrl, resizedImage }); - return new Response(resizedImage, { + return new Response(new Uint8Array(resizedImage), { headers: { "Content-Type": mediaType, }, diff --git a/routes/articles/index.tsx b/routes/articles/index.tsx index b26cab8..a42d968 100644 --- a/routes/articles/index.tsx +++ b/routes/articles/index.tsx @@ -1,10 +1,10 @@ import { Handlers, PageProps } from "$fresh/server.ts"; import { MainLayout } from "@components/layouts/main.tsx"; -import IconArrowLeft from "https://deno.land/x/tabler_icons_tsx@0.0.3/tsx/arrow-left.tsx"; import { Article, getAllArticles } from "@lib/resource/articles.ts"; import { Card } from "@components/Card.tsx"; import { KMenu } from "@islands/KMenu.tsx"; import { Grid } from "@components/Grid.tsx"; +import { IconArrowLeft } from "@components/icons.tsx"; export const handler: Handlers = { async GET(_, ctx) { diff --git a/routes/movies/index.tsx b/routes/movies/index.tsx index 4ddd657..3c1280e 100644 --- a/routes/movies/index.tsx +++ b/routes/movies/index.tsx @@ -1,9 +1,10 @@ import { Handlers, PageProps } from "$fresh/server.ts"; import { MainLayout } from "@components/layouts/main.tsx"; -import IconArrowLeft from "https://deno.land/x/tabler_icons_tsx@0.0.3/tsx/arrow-left.tsx"; import { getAllMovies, Movie } from "@lib/resource/movies.ts"; import { MovieCard } from "@components/MovieCard.tsx"; import { Grid } from "@components/Grid.tsx"; +import { IconArrowLeft } from "@components/icons.tsx"; +import { KMenu } from "@islands/KMenu.tsx"; export const handler: Handlers = { async GET(_, ctx) { @@ -15,6 +16,7 @@ export const handler: Handlers = { export default function Greet(props: PageProps) { return ( +
= { async GET(_, ctx) { diff --git a/static/global.css b/static/global.css index 8d81040..de2413e 100644 --- a/static/global.css +++ b/static/global.css @@ -14,6 +14,7 @@ pre { position: absolute; height: 100%; width: 100%; + filter: saturate(0) brightness(2); background: url(/grainy-gradient.png); background-size: contain; } diff --git a/static/grainy-gradient(1).png:Zone.Identifier b/static/grainy-gradient(1).png:Zone.Identifier new file mode 100644 index 0000000..053d112 --- /dev/null +++ b/static/grainy-gradient(1).png:Zone.Identifier @@ -0,0 +1,3 @@ +[ZoneTransfer] +ZoneId=3 +HostUrl=about:internet diff --git a/static/grainy-gradient.png b/static/grainy-gradient.png index 71af862..6bddaf9 100644 Binary files a/static/grainy-gradient.png and b/static/grainy-gradient.png differ