Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
25 commits
Select commit Hold shift + click to select a range
0d3e032
chore: add intro.js and intro.js-react dependencies
flavioislima Mar 7, 2025
a9f21bd
feat: implement guided tour feature for the library section
flavioislima Mar 7, 2025
bc16b42
feat: add tour components to App.tsx and fix stylings
flavioislima Mar 7, 2025
175af96
feat: add sidebar tour functionality and update tour steps
flavioislima Mar 7, 2025
5309dc8
feat: add game page tour functionality and steps
flavioislima Mar 7, 2025
fbf8c78
feat: add top navigation tour functionality and steps
flavioislima Mar 7, 2025
1b20e9a
Merge branch 'main' of https://github.com/HyperPlay-Gaming/hyperplay-…
flavioislima Apr 24, 2025
137f5b8
ui: update styles
flavioislima Apr 24, 2025
8db767a
chore: disable example tours for now
flavioislima Apr 24, 2025
d137ffc
i18n: updated keys
flavioislima Apr 24, 2025
4c1b02b
feat: add first welcome tour
flavioislima Apr 24, 2025
aa3ef78
fix: styles
flavioislima Apr 24, 2025
ed93491
fix: mark as completed on skip
flavioislima Apr 24, 2025
c6f1ad7
tech: use tour ids instead of tour methods
flavioislima Apr 24, 2025
24dd0a0
chore: remove unused tours
flavioislima Apr 24, 2025
9da6aeb
Merge branch 'main' of github.com:HyperPlay-Gaming/hyperplay-desktop-…
flavioislima Apr 24, 2025
154e42d
chore: comments
flavioislima Apr 24, 2025
b7a7484
fix: styles
flavioislima Apr 30, 2025
0dd6547
fix: capitalization
flavioislima Apr 30, 2025
2b73e42
fix: more styles
flavioislima Apr 30, 2025
fa21cd5
fix: padding
flavioislima Apr 30, 2025
92501f5
Merge branch 'main' into feat/introjs_2
flavioislima Apr 30, 2025
dcf1dfc
Merge branch 'feat/introjs_2' of github.com:HyperPlay-Gaming/hyperpla…
flavioislima Apr 30, 2025
f8b8eba
fix: move last step to the bottom
flavioislima Apr 30, 2025
c56764a
ui: use buttons from hp-ui and bump version
flavioislima Apr 30, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "hyperplay",
"version": "0.25.1",
"version": "0.26.0",
"private": true,
"main": "build/main/main.js",
"homepage": "./",
Expand Down Expand Up @@ -119,6 +119,8 @@
"i18next-fs-backend": "^2.3.2",
"i18next-http-backend": "^2.5.2",
"ini": "^3.0.1",
"intro.js": "^7.2.0",
"intro.js-react": "^1.0.0",
"jest-environment-jsdom": "^29.7.0",
"jsdom": "^20.0.0",
"json5": "^2.2.3",
Expand Down
22 changes: 22 additions & 0 deletions pnpm-lock.yaml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

17 changes: 17 additions & 0 deletions public/locales/en/tour.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
{
"tour": {
"back": "Back",
"done": "Done",
"first-welcome": {
"account": "Login and connect your primary wallet to track progress.",
"account-title": "Start Your Journey",
"links-title": "A Galaxy of Games",
"quests": "Take on quests, make leaderboards, and earn along the way.",
"rewards-title": "Earn Real Rewards 🎁",
"stores": "Explore all the titles from HyperPlay, Epic Games, and GOG.",
"welcome": "Begin your journey through the Web3 galaxy and discover top-tier games.",
"welcome-title": "Ready for Takeoff 🚀"
},
"next": "Next"
}
}
196 changes: 101 additions & 95 deletions src/frontend/App.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,7 @@ import { QuestsPage } from './screens/Quests'
import { NavigateListener } from './NavigateListener'
import G7Webview from './screens/G7Webview'
import CardPrivacyPolicy from './screens/Onboarding/analytics/CardPrivacyPolicy'
import { TourProvider } from './components/TourGuide/TourContext'

function App() {
const { sidebarCollapsed, isSettingsModalOpen, connectivity } =
Expand All @@ -50,106 +51,111 @@ function App() {

return (
<div className={classNames('App', { collapsed: sidebarCollapsed })}>
<HashRouter>
<OfflineMessage />
<TopNavBar />
<Sidebar />
<main className="content">
<CardPrivacyPolicy />
<QaAuthHandler />
<NavigateListener />
<ExtensionHandler />
<ExtensionManager />
<DialogHandler />
<ExternalLinkDialog />
<AuthModal />
<EmailSubscriptionModal />
<StoreNavHandler />
{isSettingsModalOpen.gameInfo && (
<SettingsModal
gameInfo={isSettingsModalOpen.gameInfo}
type={isSettingsModalOpen.type}
/>
)}
<Routes>
<Route
path="/"
element={<Navigate replace to={firstDestination} />}
/>
<Route path="/library" element={<Library />} />
<Route
path="/achievements"
element={
<AchievementsLayout>
<Outlet />
</AchievementsLayout>
}
>
<Route index element={<Achievements />} />
<TourProvider>
<HashRouter>
<OfflineMessage />
<TopNavBar />
<Sidebar />
<main className="content">
<CardPrivacyPolicy />
<QaAuthHandler />
<NavigateListener />
<ExtensionHandler />
<ExtensionManager />
<DialogHandler />
<ExternalLinkDialog />
<AuthModal />
<EmailSubscriptionModal />
<StoreNavHandler />
{isSettingsModalOpen.gameInfo && (
<SettingsModal
gameInfo={isSettingsModalOpen.gameInfo}
type={isSettingsModalOpen.type}
/>
)}
<Routes>
<Route
path="/achievements/:id"
element={<GameAchievementDetails />}
path="/"
element={<Navigate replace to={firstDestination} />}
/>
</Route>
<Route path="login" element={<Login />} />
<Route
path="hyperplaystore"
element={<WebView key="hyperplaystore" />}
/>
<Route path="epicstore" element={<WebView key="epicstore" />} />
<Route path="gogstore" element={<WebView key="gogstore" />} />
<Route path="docs" element={<WebView key="docs" />} />
<Route path="metamaskHome" element={<MetaMaskHome />} />
<Route
path="metamaskSnaps"
element={<WebView key="metamaskSnaps" />}
/>
<Route path="game7Portal" element={<G7Webview />} />
<Route path="metamaskPortfolio" element={<MetaMaskPortfolio />}>
<Route path=":page" element={<MetaMaskPortfolio />} />
</Route>
<Route path="/gamepage">
<Route path=":runner">
<Route path=":appName" element={<GamePage />} />
<Route path="/library" element={<Library />} />
<Route
path="/achievements"
element={
<AchievementsLayout>
<Outlet />
</AchievementsLayout>
}
>
<Route index element={<Achievements />} />
<Route
path="/achievements/:id"
element={<GameAchievementDetails />}
/>
</Route>
<Route path="login" element={<Login />} />
<Route
path="hyperplaystore"
element={<WebView key="hyperplaystore" />}
/>
<Route path="epicstore" element={<WebView key="epicstore" />} />
<Route path="gogstore" element={<WebView key="gogstore" />} />
<Route path="docs" element={<WebView key="docs" />} />
<Route path="metamaskHome" element={<MetaMaskHome />} />
<Route
path="metamaskSnaps"
element={<WebView key="metamaskSnaps" />}
/>
<Route path="game7Portal" element={<G7Webview />} />
<Route path="metamaskPortfolio" element={<MetaMaskPortfolio />}>
<Route path=":page" element={<MetaMaskPortfolio />} />
</Route>
<Route path="/gamepage">
<Route path=":runner">
<Route path=":appName" element={<GamePage />} />
</Route>
</Route>
<Route
path="/store-page"
element={<WebView key="store-page" />}
/>
<Route path="loginweb">
<Route path=":runner" element={<WebView key="loginweb" />} />
</Route>
</Route>
<Route path="/store-page" element={<WebView key="store-page" />} />
<Route path="loginweb">
<Route path=":runner" element={<WebView key="loginweb" />} />
</Route>
<Route path="settings">
<Route path=":runner">
<Route path=":appName">
<Route path=":type" element={<Settings />} />
<Route path="settings">
<Route path=":runner">
<Route path=":appName">
<Route path=":type" element={<Settings />} />
</Route>
</Route>
</Route>
</Route>
<Route path="/download-manager" element={<DownloadManager />} />
<Route path="/quests" element={<QuestsPage />}>
<Route path=":questId" element={<QuestsPage />} />
</Route>
</Routes>
</main>
<div className="controller">
<ControllerHints />
<div className="simple-keyboard"></div>
</div>
<OnboardingStoreController />
{onboardingStore.isOnboardingOpen && (
<Onboarding
disableOnboarding={(disableReason: WalletOnboardCloseReason) => {
if (disableReason === 'skipped') {
window.api.trackEvent({ event: 'Onboarding Skipped' })
}
onboardingStore.closeOnboarding()
}}
/>
)}
</HashRouter>
<TransactionNotification />
<DownloadToastManager />
<DeviceStateController />
<UpdateModalController />
<Route path="/download-manager" element={<DownloadManager />} />
<Route path="/quests" element={<QuestsPage />}>
<Route path=":questId" element={<QuestsPage />} />
</Route>
</Routes>
</main>
<div className="controller">
<ControllerHints />
<div className="simple-keyboard"></div>
</div>
<OnboardingStoreController />
{onboardingStore.isOnboardingOpen && (
<Onboarding
disableOnboarding={(disableReason: WalletOnboardCloseReason) => {
if (disableReason === 'skipped') {
window.api.trackEvent({ event: 'Onboarding Skipped' })
}
onboardingStore.closeOnboarding()
}}
/>
)}
</HashRouter>
<TransactionNotification />
<DownloadToastManager />
<DeviceStateController />
<UpdateModalController />
</TourProvider>
</div>
)
}
Expand Down
40 changes: 40 additions & 0 deletions src/frontend/components/TourGuide/CustomButtons.scss
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
.hp-custom-buttons-active {
.introjs-button {
opacity: 0 !important;
pointer-events: none !important;
position: absolute;
height: 0;
}

.hp-custom-buttons-container {
position: relative;
min-height: 60px;
}
}

.custom-tour-buttons {
width: 100%;
box-sizing: border-box;
display: flex;
align-items: center;
z-index: 10;

button {
margin-left: 12px;
min-width: 90px;
font-weight: 500;
}

&.two-buttons {
justify-content: space-between;

button:first-child {
margin-right: auto;
margin-left: 0;
}
}

&.one-button {
justify-content: flex-end;
}
}
Loading