diff --git a/changelog.md b/changelog.md index 729aa5a..68b88da 100644 --- a/changelog.md +++ b/changelog.md @@ -50,3 +50,7 @@ 2025-11-08 move wiki data loading into a built workspace dependency and add provider tests wiki-data-reader item-optimizer/src/itemDataProvider.ts item-optimizer/src/__tests__ 2025-11-08 add wiki snapshot refresh + parser/update scripts with hero ingestion wiki-data-reader/scripts wiki-data-reader/snapshots 2025-11-09 fetch remote item icon URLs from wiki snapshots and remove local PNGs wiki-data-reader/scripts item-optimizer/src + +2025-12-18 add mobile tap-to-toggle detail previews in Item Gallery item-optimizer/src/components/ItemGallery.tsx +2025-12-19 clamp tooltip position and anchor mobile taps to item bounds item-optimizer/src/components/ItemGallery.tsx item-optimizer/src/utils/tooltipUtils.ts +2025-12-20 keep Item Gallery detail sticky on mobile and disable tooltip taps item-optimizer/src/components/ItemGallery.tsx diff --git a/item-optimizer/src/components/ItemGallery.tsx b/item-optimizer/src/components/ItemGallery.tsx index b1752b6..da3a2c5 100644 --- a/item-optimizer/src/components/ItemGallery.tsx +++ b/item-optimizer/src/components/ItemGallery.tsx @@ -1,4 +1,4 @@ -import { useState, useMemo } from "react"; +import { useEffect, useMemo, useState, type MouseEvent } from "react"; import { useAppDispatch, useAppSelector } from "../hooks"; import { clearTooltip, setTooltip } from "../slices/tooltipSlice"; import type { Item, ItemOverride } from "../types"; @@ -36,6 +36,24 @@ export default function ItemGallery({ items, heroes, attrTypes }: Props) { const dispatch = useAppDispatch(); const overrideVersion = useAppSelector((s) => s.input.present.overrideVersion); const overrides = useMemo(loadLocalOverrides, [overrideVersion]); + const isMobile = useMemo(() => { + if (typeof window === "undefined") return false; + if (window.matchMedia?.("(pointer: coarse)")?.matches) return true; + return window.innerWidth < 640; + }, []); + + useEffect(() => { + return () => { + dispatch(clearTooltip()); + }; + }, [dispatch]); + + function handleItemClick(it: Item) { + setSelected(it); + if (isMobile) { + dispatch(clearTooltip()); + } + } const filtered = items.filter( (it) => @@ -47,7 +65,12 @@ export default function ItemGallery({ items, heroes, attrTypes }: Props) {

Configuration

-
+
{selected && (
@@ -210,10 +233,20 @@ export default function ItemGallery({ items, heroes, attrTypes }: Props) {