diff --git a/package.json b/package.json index 5cd95dc..1265bd3 100644 --- a/package.json +++ b/package.json @@ -38,6 +38,7 @@ "prettier": "^3.4.2", "react": "^18.3.1", "react-dom": "^18.3.1", + "react-joyride": "^2.8.2", "react-markdown": "^9.0.3", "react-router-dom": "^7.5.2", "sharp": "^0.33.2", @@ -64,6 +65,7 @@ "@types/papaparse": "^5.3.14", "@types/react": "^18.3.5", "@types/react-dom": "^18.3.0", + "@types/react-joyride": "^2.0.5", "@types/sharp": "^0.32.0", "@types/uuid": "^9.0.8", "@vitejs/plugin-react": "^4.3.1", diff --git a/src/App.tsx b/src/App.tsx index 6ab9c90..d2b1bf4 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -90,6 +90,7 @@ import HtmlMinifyBeautify from "./components/HtmlMinifyBeautify"; import SpotlightSearch from "./components/SpotlightSearch"; import KeyboardShortcuts from "./components/KeyboardShortcuts"; import Credits from "./components/Credits"; +import GuidedTour, { useShouldShowTour } from "./components/GuidedTour"; import { DndContext, closestCenter, @@ -197,6 +198,7 @@ function Layout({ tools: defaultTools }: { tools: Tool[] }) { const [isSpotlightOpen, setIsSpotlightOpen] = useState(false); const [isShortcutsOpen, setIsShortcutsOpen] = useState(false); const [isSidebarExpanded, setIsSidebarExpanded] = useState(true); + const { shouldShow: shouldShowTour, setShouldShow: setShowTour } = useShouldShowTour(); const [tools, setTools] = useState(() => { const savedOrder = localStorage.getItem("toolsOrder"); if (savedOrder) { @@ -236,6 +238,11 @@ function Layout({ tools: defaultTools }: { tools: Tool[] }) { e.preventDefault(); setIsShortcutsOpen(true); } + // Command/Control + Shift + ? for tour + if ((e.metaKey || e.ctrlKey) && e.shiftKey && e.key === "?") { + e.preventDefault(); + setShowTour(true); + } }; document.addEventListener("keydown", handleKeyDown); @@ -289,6 +296,7 @@ function Layout({ tools: defaultTools }: { tools: Tool[] }) { DevUtils @@ -308,6 +316,7 @@ function Layout({ tools: defaultTools }: { tools: Tool[] }) { onClick={() => setIsSpotlightOpen(true)} className="p-1.5 hover:bg-gray-100 rounded" title="Search (⌘K)" + data-tour="search-button" > @@ -315,6 +324,7 @@ function Layout({ tools: defaultTools }: { tools: Tool[] }) { onClick={() => setIsShortcutsOpen(true)} className="p-1.5 hover:bg-gray-100 rounded" title="Keyboard Shortcuts (⌘?)" + data-tour="shortcuts-button" > @@ -322,6 +332,7 @@ function Layout({ tools: defaultTools }: { tools: Tool[] }) { onClick={() => setIsSidebarExpanded(false)} className="p-1.5 hover:bg-gray-100 rounded" title="Collapse Sidebar" + data-tour="sidebar-toggle" > @@ -330,7 +341,7 @@ function Layout({ tools: defaultTools }: { tools: Tool[] }) { {isSidebarExpanded && ( -
+ -