}
- className={className}
- type={type}
- badged={badged}
- contrast={contrast}
- prefetch={prefetch}
hoverEntity={countOnHover}
/>
{recipeOnClick &&
diff --git a/src/simulation/PhotoFilmSimulation.tsx b/src/simulation/PhotoFilmSimulation.tsx
index 98029d79..0d26d680 100644
--- a/src/simulation/PhotoFilmSimulation.tsx
+++ b/src/simulation/PhotoFilmSimulation.tsx
@@ -13,9 +13,8 @@ export default function PhotoFilmSimulation({
type = 'icon-last',
badged = true,
contrast = 'low',
- prefetch,
countOnHover,
- className,
+ ...props
}: {
simulation: FilmSimulation
countOnHover?: number
@@ -25,6 +24,7 @@ export default function PhotoFilmSimulation({
return (
}
title={`Film Simulation: ${large}`}
type={type}
- className={className}
badged={badged}
contrast={contrast}
- prefetch={prefetch}
hoverEntity={countOnHover}
iconWide
/>
diff --git a/src/state/AppState.ts b/src/state/AppState.ts
index 09a79c48..bad3c776 100644
--- a/src/state/AppState.ts
+++ b/src/state/AppState.ts
@@ -11,7 +11,7 @@ import { InsightsIndicatorStatus } from '@/admin/insights';
import { INITIAL_UPLOAD_STATE, UploadState } from '@/admin/upload';
import { AdminData } from '@/admin/actions';
import { RecipeProps } from '@/recipe';
-
+import { getCountsForCategoriesAction } from '@/category/actions';
export type AppStateContext = {
// CORE
previousPathname?: string
@@ -24,6 +24,8 @@ export type AppStateContext = {
clearNextPhotoAnimation?: () => void
shouldRespondToKeyboardCommands?: boolean
setShouldRespondToKeyboardCommands?: Dispatch
>
+ categoriesWithCounts?:
+ Awaited>
// MODAL
isCommandKOpen?: boolean
setIsCommandKOpen?: Dispatch>
diff --git a/src/state/AppStateProvider.tsx b/src/state/AppStateProvider.tsx
index af49e2a1..1200d945 100644
--- a/src/state/AppStateProvider.tsx
+++ b/src/state/AppStateProvider.tsx
@@ -24,6 +24,7 @@ import { useRouter, usePathname } from 'next/navigation';
import { isPathAdmin, PATH_SIGN_IN } from '@/app/paths';
import { INITIAL_UPLOAD_STATE, UploadState } from '@/admin/upload';
import { RecipeProps } from '@/recipe';
+import { getCountsForCategoriesAction } from '@/category/actions';
export default function AppStateProvider({
children,
@@ -90,6 +91,11 @@ export default function AppStateProvider({
const invalidateSwr = useCallback(() => setSwrTimestamp(Date.now()), []);
+ const { data: categoriesWithCounts } = useSWR(
+ 'getDataForCategories',
+ getCountsForCategoriesAction,
+ );
+
const {
data: auth,
error: authError,
@@ -167,6 +173,7 @@ export default function AppStateProvider({
clearNextPhotoAnimation: () => setNextPhotoAnimation?.(undefined),
shouldRespondToKeyboardCommands,
setShouldRespondToKeyboardCommands,
+ categoriesWithCounts,
// MODAL
isCommandKOpen,
setIsCommandKOpen,
diff --git a/src/tag/PhotoTag.tsx b/src/tag/PhotoTag.tsx
index 532fcdb5..8e14ddfb 100644
--- a/src/tag/PhotoTag.tsx
+++ b/src/tag/PhotoTag.tsx
@@ -7,26 +7,18 @@ import IconTag from '@/components/icons/IconTag';
export default function PhotoTag({
tag,
- type,
- badged,
- contrast,
- prefetch,
countOnHover,
- className,
+ ...props
}: {
tag: string
countOnHover?: number
} & EntityLinkExternalProps) {
return (
}
- type={type}
- className={className}
- badged={badged}
- contrast={contrast}
- prefetch={prefetch}
hoverEntity={countOnHover}
/>
);
diff --git a/src/tag/PhotoTags.tsx b/src/tag/PhotoTags.tsx
index 802f76ee..b0050146 100644
--- a/src/tag/PhotoTags.tsx
+++ b/src/tag/PhotoTags.tsx
@@ -6,18 +6,27 @@ import { Fragment } from 'react';
export default function PhotoTags({
tags,
+ tagCounts = {},
contrast,
prefetch,
}: {
tags: string[]
+ tagCounts?: Record
} & EntityLinkExternalProps) {
return (
{tags.map(tag =>
{isTagFavs(tag)
- ?
- : }
+ ?
+ : }
)}
);
diff --git a/tailwind.css b/tailwind.css
index f2f8f7d5..e7312cb2 100644
--- a/tailwind.css
+++ b/tailwind.css
@@ -7,6 +7,14 @@
@custom-variant dark (&:where(.dark, .dark *));
+@custom-variant hover {
+ @media (pointer: fine) {
+ &:hover {
+ @slot;
+ }
+ }
+}
+
@theme {
--font-mono: "IBM Plex Mono", ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, 'Liberation Mono', 'Courier New', monospace;