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(
)}
@@ -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 (
+