create-pixi-vn 2.0.12 → 2.0.14
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.mjs +36 -35
- package/package.json +1 -1
- package/template-react-vite-muijoy/components.json +1 -1
- package/template-react-vite-muijoy/package-lock.json +663 -967
- package/template-react-vite-muijoy/package.json +10 -11
- package/template-react-vite-muijoy/src/components/dev-devtools.tsx +25 -0
- package/template-react-vite-muijoy/src/components/menus/settings/menus/history.tsx +78 -62
- package/template-react-vite-muijoy/src/components/screens/narration/index.tsx +5 -2
- package/template-react-vite-muijoy/src/components/ui/alert-dialog.tsx +3 -2
- package/template-react-vite-muijoy/src/components/ui/avatar.tsx +2 -2
- package/template-react-vite-muijoy/src/components/ui/breadcrumb.tsx +5 -4
- package/template-react-vite-muijoy/src/components/ui/button-group.tsx +3 -2
- package/template-react-vite-muijoy/src/components/ui/button.tsx +2 -2
- package/template-react-vite-muijoy/src/components/ui/card.tsx +6 -10
- package/template-react-vite-muijoy/src/components/ui/carousel.tsx +10 -7
- package/template-react-vite-muijoy/src/components/ui/drawer.tsx +2 -0
- package/template-react-vite-muijoy/src/components/ui/field.tsx +8 -5
- package/template-react-vite-muijoy/src/components/ui/input-group.tsx +4 -3
- package/template-react-vite-muijoy/src/components/ui/input.tsx +1 -1
- package/template-react-vite-muijoy/src/components/ui/item.tsx +9 -8
- package/template-react-vite-muijoy/src/components/ui/label.tsx +1 -1
- package/template-react-vite-muijoy/src/components/ui/radio-group.tsx +4 -1
- package/template-react-vite-muijoy/src/components/ui/scroll-area.tsx +5 -2
- package/template-react-vite-muijoy/src/components/ui/select.tsx +3 -2
- package/template-react-vite-muijoy/src/components/ui/separator.tsx +2 -0
- package/template-react-vite-muijoy/src/components/ui/sonner.tsx +4 -4
- package/template-react-vite-muijoy/src/components/ui/spinner.tsx +2 -1
- package/template-react-vite-muijoy/src/components/ui/switch.tsx +3 -0
- package/template-react-vite-muijoy/src/components/ui/textarea.tsx +2 -1
- package/template-react-vite-muijoy/src/components/ui/tooltip.tsx +2 -0
- package/template-react-vite-muijoy/src/lib/hooks/hotkeys-hooks.ts +2 -0
- package/template-react-vite-muijoy/src/lib/hooks/narration-hooks.ts +24 -9
- package/template-react-vite-muijoy/src/lib/hooks/navigation-hooks.ts +29 -10
- package/template-react-vite-muijoy/src/main.tsx +0 -1
- package/{template-react-vite-muijoy-tauri/src/pixi-vn-keys.gen.d.ts → template-react-vite-muijoy/src/pixi-vn.keys.gen.ts} +4 -2
- package/template-react-vite-muijoy/src/routeTree.gen.ts +3 -21
- package/template-react-vite-muijoy/src/routes/__root.tsx +10 -20
- package/template-react-vite-muijoy/src/styles.css +43 -43
- package/template-react-vite-muijoy/vite.config.ts +1 -1
- package/template-react-vite-muijoy-ink/.vscode/extensions.json +2 -1
- package/template-react-vite-muijoy-ink/.vscode/settings.json +6 -1
- package/template-react-vite-muijoy-ink/_gitignore +1 -0
- package/template-react-vite-muijoy-ink/components.json +1 -1
- package/template-react-vite-muijoy-ink/ink/second_part.ink +571 -0
- package/template-react-vite-muijoy-ink/ink/start.ink +214 -0
- package/template-react-vite-muijoy-ink/package-lock.json +847 -963
- package/template-react-vite-muijoy-ink/package.json +13 -12
- package/template-react-vite-muijoy-ink/src/App.tsx +25 -25
- package/template-react-vite-muijoy-ink/src/assets/index.ts +2 -4
- package/template-react-vite-muijoy-ink/src/assets/ink-manifest.gen.json +4 -1
- package/template-react-vite-muijoy-ink/src/components/dev-devtools.tsx +25 -0
- package/template-react-vite-muijoy-ink/src/components/menus/settings/menus/history.tsx +78 -62
- package/template-react-vite-muijoy-ink/src/components/screens/narration/index.tsx +5 -2
- package/template-react-vite-muijoy-ink/src/components/ui/alert-dialog.tsx +3 -2
- package/template-react-vite-muijoy-ink/src/components/ui/avatar.tsx +2 -2
- package/template-react-vite-muijoy-ink/src/components/ui/breadcrumb.tsx +5 -4
- package/template-react-vite-muijoy-ink/src/components/ui/button-group.tsx +3 -2
- package/template-react-vite-muijoy-ink/src/components/ui/button.tsx +2 -2
- package/template-react-vite-muijoy-ink/src/components/ui/card.tsx +6 -10
- package/template-react-vite-muijoy-ink/src/components/ui/carousel.tsx +10 -7
- package/template-react-vite-muijoy-ink/src/components/ui/drawer.tsx +2 -0
- package/template-react-vite-muijoy-ink/src/components/ui/field.tsx +8 -5
- package/template-react-vite-muijoy-ink/src/components/ui/input-group.tsx +4 -3
- package/template-react-vite-muijoy-ink/src/components/ui/input.tsx +1 -1
- package/template-react-vite-muijoy-ink/src/components/ui/item.tsx +9 -8
- package/template-react-vite-muijoy-ink/src/components/ui/label.tsx +1 -1
- package/template-react-vite-muijoy-ink/src/components/ui/radio-group.tsx +4 -1
- package/template-react-vite-muijoy-ink/src/components/ui/scroll-area.tsx +5 -2
- package/template-react-vite-muijoy-ink/src/components/ui/select.tsx +3 -2
- package/template-react-vite-muijoy-ink/src/components/ui/separator.tsx +2 -0
- package/template-react-vite-muijoy-ink/src/components/ui/sonner.tsx +4 -4
- package/template-react-vite-muijoy-ink/src/components/ui/spinner.tsx +2 -1
- package/template-react-vite-muijoy-ink/src/components/ui/switch.tsx +3 -0
- package/template-react-vite-muijoy-ink/src/components/ui/textarea.tsx +2 -1
- package/template-react-vite-muijoy-ink/src/components/ui/tooltip.tsx +2 -0
- package/template-react-vite-muijoy-ink/src/content/ink/hashtag-commands.ts +39 -0
- package/template-react-vite-muijoy-ink/src/content/ink/text-replaces.ts +19 -0
- package/template-react-vite-muijoy-ink/src/lib/hooks/hotkeys-hooks.ts +2 -0
- package/template-react-vite-muijoy-ink/src/lib/hooks/ink-hooks.tsx +12 -0
- package/template-react-vite-muijoy-ink/src/lib/hooks/narration-hooks.ts +24 -9
- package/template-react-vite-muijoy-ink/src/lib/hooks/navigation-hooks.ts +29 -10
- package/template-react-vite-muijoy-ink/src/lib/i18n.ts +22 -1
- package/template-react-vite-muijoy-ink/src/main.tsx +0 -1
- package/template-react-vite-muijoy-ink/src/pixi-vn.keys.gen.ts +24 -0
- package/template-react-vite-muijoy-ink/src/routeTree.gen.ts +3 -21
- package/template-react-vite-muijoy-ink/src/routes/__root.tsx +14 -20
- package/template-react-vite-muijoy-ink/src/styles.css +43 -43
- package/template-react-vite-muijoy-ink/vite.config.ts +7 -1
- package/template-react-vite-muijoy-ink-tauri/.assetpack.ts +9 -0
- package/template-react-vite-muijoy-ink-tauri/.vscode/extensions.json +5 -1
- package/template-react-vite-muijoy-ink-tauri/.vscode/launch.json +11 -0
- package/template-react-vite-muijoy-ink-tauri/.vscode/settings.json +6 -1
- package/template-react-vite-muijoy-ink-tauri/.vscode/tasks.json +47 -0
- package/template-react-vite-muijoy-ink-tauri/README.md +3 -3
- package/template-react-vite-muijoy-ink-tauri/_github/workflows/desktop.yml +188 -0
- package/template-react-vite-muijoy-ink-tauri/_github/workflows/mobile.yml +270 -0
- package/template-react-vite-muijoy-ink-tauri/_gitignore +11 -0
- package/template-react-vite-muijoy-ink-tauri/components.json +1 -1
- package/template-react-vite-muijoy-ink-tauri/ink/second_part.ink +571 -0
- package/template-react-vite-muijoy-ink-tauri/ink/start.ink +214 -0
- package/template-react-vite-muijoy-ink-tauri/package-lock.json +1145 -1011
- package/template-react-vite-muijoy-ink-tauri/package.json +23 -13
- package/template-react-vite-muijoy-ink-tauri/src/App.tsx +25 -25
- package/template-react-vite-muijoy-ink-tauri/src/assets/index.ts +2 -4
- package/template-react-vite-muijoy-ink-tauri/src/assets/ink-manifest.gen.json +4 -1
- package/template-react-vite-muijoy-ink-tauri/src/components/dev-devtools.tsx +25 -0
- package/template-react-vite-muijoy-ink-tauri/src/components/menus/main-menu.tsx +16 -1
- package/template-react-vite-muijoy-ink-tauri/src/components/menus/settings/menus/history.tsx +78 -62
- package/template-react-vite-muijoy-ink-tauri/src/components/menus/settings/quick-menus.tsx +17 -1
- package/template-react-vite-muijoy-ink-tauri/src/components/menus/settings/system-controls.tsx +11 -1
- package/template-react-vite-muijoy-ink-tauri/src/components/screens/narration/index.tsx +5 -2
- package/template-react-vite-muijoy-ink-tauri/src/components/ui/alert-dialog.tsx +3 -2
- package/template-react-vite-muijoy-ink-tauri/src/components/ui/avatar.tsx +2 -2
- package/template-react-vite-muijoy-ink-tauri/src/components/ui/breadcrumb.tsx +5 -4
- package/template-react-vite-muijoy-ink-tauri/src/components/ui/button-group.tsx +3 -2
- package/template-react-vite-muijoy-ink-tauri/src/components/ui/button.tsx +2 -2
- package/template-react-vite-muijoy-ink-tauri/src/components/ui/card.tsx +6 -10
- package/template-react-vite-muijoy-ink-tauri/src/components/ui/carousel.tsx +10 -7
- package/template-react-vite-muijoy-ink-tauri/src/components/ui/drawer.tsx +2 -0
- package/template-react-vite-muijoy-ink-tauri/src/components/ui/field.tsx +8 -5
- package/template-react-vite-muijoy-ink-tauri/src/components/ui/input-group.tsx +4 -3
- package/template-react-vite-muijoy-ink-tauri/src/components/ui/input.tsx +1 -1
- package/template-react-vite-muijoy-ink-tauri/src/components/ui/item.tsx +9 -8
- package/template-react-vite-muijoy-ink-tauri/src/components/ui/label.tsx +1 -1
- package/template-react-vite-muijoy-ink-tauri/src/components/ui/radio-group.tsx +4 -1
- package/template-react-vite-muijoy-ink-tauri/src/components/ui/scroll-area.tsx +5 -2
- package/template-react-vite-muijoy-ink-tauri/src/components/ui/select.tsx +3 -2
- package/template-react-vite-muijoy-ink-tauri/src/components/ui/separator.tsx +2 -0
- package/template-react-vite-muijoy-ink-tauri/src/components/ui/sonner.tsx +4 -4
- package/template-react-vite-muijoy-ink-tauri/src/components/ui/spinner.tsx +2 -1
- package/template-react-vite-muijoy-ink-tauri/src/components/ui/switch.tsx +3 -0
- package/template-react-vite-muijoy-ink-tauri/src/components/ui/textarea.tsx +2 -1
- package/template-react-vite-muijoy-ink-tauri/src/components/ui/tooltip.tsx +2 -0
- package/template-react-vite-muijoy-ink-tauri/src/content/ink/hashtag-commands.ts +56 -0
- package/template-react-vite-muijoy-ink-tauri/src/content/ink/text-replaces.ts +19 -0
- package/template-react-vite-muijoy-ink-tauri/src/lib/hooks/hotkeys-hooks.ts +2 -0
- package/template-react-vite-muijoy-ink-tauri/src/lib/hooks/ink-hooks.tsx +12 -0
- package/template-react-vite-muijoy-ink-tauri/src/lib/hooks/narration-hooks.ts +24 -9
- package/template-react-vite-muijoy-ink-tauri/src/lib/hooks/navigation-hooks.ts +29 -10
- package/template-react-vite-muijoy-ink-tauri/src/lib/hooks/quit-hooks.ts +24 -0
- package/template-react-vite-muijoy-ink-tauri/src/lib/i18n.ts +22 -1
- package/template-react-vite-muijoy-ink-tauri/src/lib/query/settings-query.ts +7 -1
- package/template-react-vite-muijoy-ink-tauri/src/lib/steam.ts +143 -0
- package/template-react-vite-muijoy-ink-tauri/src/main.tsx +0 -1
- package/template-react-vite-muijoy-ink-tauri/src/pixi-vn.keys.gen.ts +24 -0
- package/template-react-vite-muijoy-ink-tauri/src/routeTree.gen.ts +3 -21
- package/template-react-vite-muijoy-ink-tauri/src/routes/__root.tsx +14 -20
- package/template-react-vite-muijoy-ink-tauri/src/styles.css +43 -43
- package/template-react-vite-muijoy-ink-tauri/src-tauri/Cargo.toml +50 -0
- package/template-react-vite-muijoy-ink-tauri/src-tauri/build.rs +46 -0
- package/template-react-vite-muijoy-ink-tauri/src-tauri/capabilities/default.json +21 -0
- package/template-react-vite-muijoy-ink-tauri/src-tauri/icons/128x128.png +0 -0
- package/template-react-vite-muijoy-ink-tauri/src-tauri/icons/128x128@2x.png +0 -0
- package/template-react-vite-muijoy-ink-tauri/src-tauri/icons/32x32.png +0 -0
- package/template-react-vite-muijoy-ink-tauri/src-tauri/icons/Square107x107Logo.png +0 -0
- package/template-react-vite-muijoy-ink-tauri/src-tauri/icons/Square142x142Logo.png +0 -0
- package/template-react-vite-muijoy-ink-tauri/src-tauri/icons/Square150x150Logo.png +0 -0
- package/template-react-vite-muijoy-ink-tauri/src-tauri/icons/Square284x284Logo.png +0 -0
- package/template-react-vite-muijoy-ink-tauri/src-tauri/icons/Square30x30Logo.png +0 -0
- package/template-react-vite-muijoy-ink-tauri/src-tauri/icons/Square310x310Logo.png +0 -0
- package/template-react-vite-muijoy-ink-tauri/src-tauri/icons/Square44x44Logo.png +0 -0
- package/template-react-vite-muijoy-ink-tauri/src-tauri/icons/Square71x71Logo.png +0 -0
- package/template-react-vite-muijoy-ink-tauri/src-tauri/icons/Square89x89Logo.png +0 -0
- package/template-react-vite-muijoy-ink-tauri/src-tauri/icons/StoreLogo.png +0 -0
- package/template-react-vite-muijoy-ink-tauri/src-tauri/icons/icon.icns +0 -0
- package/template-react-vite-muijoy-ink-tauri/src-tauri/icons/icon.ico +0 -0
- package/template-react-vite-muijoy-ink-tauri/src-tauri/icons/icon.png +0 -0
- package/template-react-vite-muijoy-ink-tauri/src-tauri/src/lib.rs +64 -0
- package/template-react-vite-muijoy-ink-tauri/src-tauri/src/main.rs +6 -0
- package/template-react-vite-muijoy-ink-tauri/src-tauri/src/steam.rs +238 -0
- package/template-react-vite-muijoy-ink-tauri/src-tauri/tauri.conf.json +50 -0
- package/template-react-vite-muijoy-ink-tauri/vite.config.ts +31 -1
- package/template-react-vite-muijoy-tauri/.assetpack.ts +9 -0
- package/template-react-vite-muijoy-tauri/.vscode/extensions.json +4 -1
- package/template-react-vite-muijoy-tauri/.vscode/launch.json +11 -0
- package/template-react-vite-muijoy-tauri/.vscode/tasks.json +47 -0
- package/template-react-vite-muijoy-tauri/README.md +3 -3
- package/template-react-vite-muijoy-tauri/_github/workflows/desktop.yml +188 -0
- package/template-react-vite-muijoy-tauri/_github/workflows/mobile.yml +270 -0
- package/template-react-vite-muijoy-tauri/_gitignore +10 -0
- package/template-react-vite-muijoy-tauri/components.json +1 -1
- package/template-react-vite-muijoy-tauri/package-lock.json +1052 -1106
- package/template-react-vite-muijoy-tauri/package.json +20 -12
- package/template-react-vite-muijoy-tauri/src/components/dev-devtools.tsx +25 -0
- package/template-react-vite-muijoy-tauri/src/components/menus/main-menu.tsx +16 -1
- package/template-react-vite-muijoy-tauri/src/components/menus/settings/menus/history.tsx +78 -62
- package/template-react-vite-muijoy-tauri/src/components/menus/settings/quick-menus.tsx +17 -1
- package/template-react-vite-muijoy-tauri/src/components/menus/settings/system-controls.tsx +11 -1
- package/template-react-vite-muijoy-tauri/src/components/screens/narration/index.tsx +5 -2
- package/template-react-vite-muijoy-tauri/src/components/ui/alert-dialog.tsx +3 -2
- package/template-react-vite-muijoy-tauri/src/components/ui/avatar.tsx +2 -2
- package/template-react-vite-muijoy-tauri/src/components/ui/breadcrumb.tsx +5 -4
- package/template-react-vite-muijoy-tauri/src/components/ui/button-group.tsx +3 -2
- package/template-react-vite-muijoy-tauri/src/components/ui/button.tsx +2 -2
- package/template-react-vite-muijoy-tauri/src/components/ui/card.tsx +6 -10
- package/template-react-vite-muijoy-tauri/src/components/ui/carousel.tsx +10 -7
- package/template-react-vite-muijoy-tauri/src/components/ui/drawer.tsx +2 -0
- package/template-react-vite-muijoy-tauri/src/components/ui/field.tsx +8 -5
- package/template-react-vite-muijoy-tauri/src/components/ui/input-group.tsx +4 -3
- package/template-react-vite-muijoy-tauri/src/components/ui/input.tsx +1 -1
- package/template-react-vite-muijoy-tauri/src/components/ui/item.tsx +9 -8
- package/template-react-vite-muijoy-tauri/src/components/ui/label.tsx +1 -1
- package/template-react-vite-muijoy-tauri/src/components/ui/radio-group.tsx +4 -1
- package/template-react-vite-muijoy-tauri/src/components/ui/scroll-area.tsx +5 -2
- package/template-react-vite-muijoy-tauri/src/components/ui/select.tsx +3 -2
- package/template-react-vite-muijoy-tauri/src/components/ui/separator.tsx +2 -0
- package/template-react-vite-muijoy-tauri/src/components/ui/sonner.tsx +4 -4
- package/template-react-vite-muijoy-tauri/src/components/ui/spinner.tsx +2 -1
- package/template-react-vite-muijoy-tauri/src/components/ui/switch.tsx +3 -0
- package/template-react-vite-muijoy-tauri/src/components/ui/textarea.tsx +2 -1
- package/template-react-vite-muijoy-tauri/src/components/ui/tooltip.tsx +2 -0
- package/template-react-vite-muijoy-tauri/src/lib/hooks/hotkeys-hooks.ts +2 -0
- package/template-react-vite-muijoy-tauri/src/lib/hooks/narration-hooks.ts +24 -9
- package/template-react-vite-muijoy-tauri/src/lib/hooks/navigation-hooks.ts +29 -10
- package/template-react-vite-muijoy-tauri/src/lib/hooks/quit-hooks.ts +24 -0
- package/template-react-vite-muijoy-tauri/src/lib/query/settings-query.ts +7 -1
- package/template-react-vite-muijoy-tauri/src/lib/steam.ts +143 -0
- package/template-react-vite-muijoy-tauri/src/main.tsx +0 -1
- package/{template-react-vite-muijoy-ink/src/pixi-vn-keys.gen.d.ts → template-react-vite-muijoy-tauri/src/pixi-vn.keys.gen.ts} +4 -2
- package/template-react-vite-muijoy-tauri/src/routeTree.gen.ts +3 -21
- package/template-react-vite-muijoy-tauri/src/routes/__root.tsx +10 -20
- package/template-react-vite-muijoy-tauri/src/styles.css +43 -43
- package/template-react-vite-muijoy-tauri/src-tauri/Cargo.toml +50 -0
- package/template-react-vite-muijoy-tauri/src-tauri/build.rs +46 -0
- package/template-react-vite-muijoy-tauri/src-tauri/capabilities/default.json +21 -0
- package/template-react-vite-muijoy-tauri/src-tauri/icons/128x128.png +0 -0
- package/template-react-vite-muijoy-tauri/src-tauri/icons/128x128@2x.png +0 -0
- package/template-react-vite-muijoy-tauri/src-tauri/icons/32x32.png +0 -0
- package/template-react-vite-muijoy-tauri/src-tauri/icons/Square107x107Logo.png +0 -0
- package/template-react-vite-muijoy-tauri/src-tauri/icons/Square142x142Logo.png +0 -0
- package/template-react-vite-muijoy-tauri/src-tauri/icons/Square150x150Logo.png +0 -0
- package/template-react-vite-muijoy-tauri/src-tauri/icons/Square284x284Logo.png +0 -0
- package/template-react-vite-muijoy-tauri/src-tauri/icons/Square30x30Logo.png +0 -0
- package/template-react-vite-muijoy-tauri/src-tauri/icons/Square310x310Logo.png +0 -0
- package/template-react-vite-muijoy-tauri/src-tauri/icons/Square44x44Logo.png +0 -0
- package/template-react-vite-muijoy-tauri/src-tauri/icons/Square71x71Logo.png +0 -0
- package/template-react-vite-muijoy-tauri/src-tauri/icons/Square89x89Logo.png +0 -0
- package/template-react-vite-muijoy-tauri/src-tauri/icons/StoreLogo.png +0 -0
- package/template-react-vite-muijoy-tauri/src-tauri/icons/icon.icns +0 -0
- package/template-react-vite-muijoy-tauri/src-tauri/icons/icon.ico +0 -0
- package/template-react-vite-muijoy-tauri/src-tauri/icons/icon.png +0 -0
- package/template-react-vite-muijoy-tauri/src-tauri/src/lib.rs +64 -0
- package/template-react-vite-muijoy-tauri/src-tauri/src/main.rs +6 -0
- package/template-react-vite-muijoy-tauri/src-tauri/src/steam.rs +238 -0
- package/template-react-vite-muijoy-tauri/src-tauri/tauri.conf.json +50 -0
- package/template-react-vite-muijoy-tauri/vite.config.ts +25 -1
- package/template-react-vite-muijoy/src/pixi-vn-keys.gen.d.ts +0 -20
- package/template-react-vite-muijoy/src/routes/narration.tsx +0 -9
- package/template-react-vite-muijoy-ink/src/content/labels/second.label.ts +0 -1207
- package/template-react-vite-muijoy-ink/src/content/labels/start.label.ts +0 -566
- package/template-react-vite-muijoy-ink/src/routes/narration.tsx +0 -9
- package/template-react-vite-muijoy-ink-tauri/src/content/labels/second.label.ts +0 -1207
- package/template-react-vite-muijoy-ink-tauri/src/content/labels/start.label.ts +0 -566
- package/template-react-vite-muijoy-ink-tauri/src/pixi-vn-keys.gen.d.ts +0 -20
- package/template-react-vite-muijoy-ink-tauri/src/routes/narration.tsx +0 -9
- package/template-react-vite-muijoy-tauri/src/routes/narration.tsx +0 -9
|
@@ -1,9 +1,10 @@
|
|
|
1
|
+
import * as React from "react";
|
|
1
2
|
import { cva, type VariantProps } from "class-variance-authority";
|
|
2
|
-
|
|
3
|
+
|
|
4
|
+
import { cn } from "@/lib/utils";
|
|
3
5
|
import { Button } from "@/components/ui/button";
|
|
4
6
|
import { Input } from "@/components/ui/input";
|
|
5
7
|
import { Textarea } from "@/components/ui/textarea";
|
|
6
|
-
import { cn } from "@/lib/utils";
|
|
7
8
|
|
|
8
9
|
function InputGroup({ className, ...props }: React.ComponentProps<"div">) {
|
|
9
10
|
return (
|
|
@@ -138,7 +139,7 @@ export {
|
|
|
138
139
|
InputGroup,
|
|
139
140
|
InputGroupAddon,
|
|
140
141
|
InputGroupButton,
|
|
141
|
-
InputGroupInput,
|
|
142
142
|
InputGroupText,
|
|
143
|
+
InputGroupInput,
|
|
143
144
|
InputGroupTextarea,
|
|
144
145
|
};
|
|
@@ -1,9 +1,10 @@
|
|
|
1
|
-
import
|
|
2
|
-
import { cn } from "@/lib/utils";
|
|
1
|
+
import * as React from "react";
|
|
3
2
|
import { mergeProps } from "@base-ui/react/merge-props";
|
|
4
3
|
import { useRender } from "@base-ui/react/use-render";
|
|
5
4
|
import { cva, type VariantProps } from "class-variance-authority";
|
|
6
|
-
|
|
5
|
+
|
|
6
|
+
import { cn } from "@/lib/utils";
|
|
7
|
+
import { Separator } from "@/components/ui/separator";
|
|
7
8
|
|
|
8
9
|
function ItemGroup({ className, ...props }: React.ComponentProps<"div">) {
|
|
9
10
|
return (
|
|
@@ -178,13 +179,13 @@ function ItemFooter({ className, ...props }: React.ComponentProps<"div">) {
|
|
|
178
179
|
|
|
179
180
|
export {
|
|
180
181
|
Item,
|
|
181
|
-
|
|
182
|
+
ItemMedia,
|
|
182
183
|
ItemContent,
|
|
183
|
-
|
|
184
|
-
ItemFooter,
|
|
184
|
+
ItemActions,
|
|
185
185
|
ItemGroup,
|
|
186
|
-
ItemHeader,
|
|
187
|
-
ItemMedia,
|
|
188
186
|
ItemSeparator,
|
|
189
187
|
ItemTitle,
|
|
188
|
+
ItemDescription,
|
|
189
|
+
ItemHeader,
|
|
190
|
+
ItemFooter,
|
|
190
191
|
};
|
|
@@ -1,7 +1,10 @@
|
|
|
1
|
-
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
2
3
|
import { Radio as RadioPrimitive } from "@base-ui/react/radio";
|
|
3
4
|
import { RadioGroup as RadioGroupPrimitive } from "@base-ui/react/radio-group";
|
|
4
5
|
|
|
6
|
+
import { cn } from "@/lib/utils";
|
|
7
|
+
|
|
5
8
|
function RadioGroup({ className, ...props }: RadioGroupPrimitive.Props) {
|
|
6
9
|
return (
|
|
7
10
|
<RadioGroupPrimitive
|
|
@@ -1,7 +1,11 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
import * as React from "react";
|
|
1
4
|
import { ScrollArea as ScrollAreaPrimitive } from "@base-ui/react/scroll-area";
|
|
5
|
+
|
|
2
6
|
import { cn } from "@/lib/utils";
|
|
3
7
|
|
|
4
|
-
function ScrollArea({ className, children,
|
|
8
|
+
function ScrollArea({ className, children, ...props }: ScrollAreaPrimitive.Root.Props) {
|
|
5
9
|
return (
|
|
6
10
|
<ScrollAreaPrimitive.Root
|
|
7
11
|
data-slot="scroll-area"
|
|
@@ -9,7 +13,6 @@ function ScrollArea({ className, children, ref, ...props }: ScrollAreaPrimitive.
|
|
|
9
13
|
{...props}
|
|
10
14
|
>
|
|
11
15
|
<ScrollAreaPrimitive.Viewport
|
|
12
|
-
ref={ref}
|
|
13
16
|
data-slot="scroll-area-viewport"
|
|
14
17
|
className="size-full rounded-[inherit] transition-[color,box-shadow] outline-none focus-visible:ring-[3px] focus-visible:ring-ring/50 focus-visible:outline-1"
|
|
15
18
|
>
|
|
@@ -1,7 +1,8 @@
|
|
|
1
|
+
import * as React from "react";
|
|
1
2
|
import { Select as SelectPrimitive } from "@base-ui/react/select";
|
|
2
|
-
|
|
3
|
-
import type * as React from "react";
|
|
3
|
+
|
|
4
4
|
import { cn } from "@/lib/utils";
|
|
5
|
+
import { ChevronDownIcon, CheckIcon, ChevronUpIcon } from "lucide-react";
|
|
5
6
|
|
|
6
7
|
const Select = SelectPrimitive.Root;
|
|
7
8
|
|
|
@@ -1,12 +1,12 @@
|
|
|
1
|
+
import { useTheme } from "next-themes";
|
|
2
|
+
import { Toaster as Sonner, type ToasterProps } from "sonner";
|
|
1
3
|
import {
|
|
2
4
|
CircleCheckIcon,
|
|
3
5
|
InfoIcon,
|
|
4
|
-
Loader2Icon,
|
|
5
|
-
OctagonXIcon,
|
|
6
6
|
TriangleAlertIcon,
|
|
7
|
+
OctagonXIcon,
|
|
8
|
+
Loader2Icon,
|
|
7
9
|
} from "lucide-react";
|
|
8
|
-
import { useTheme } from "next-themes";
|
|
9
|
-
import { Toaster as Sonner, type ToasterProps } from "sonner";
|
|
10
10
|
|
|
11
11
|
const Toaster = ({ ...props }: ToasterProps) => {
|
|
12
12
|
const { theme = "system" } = useTheme();
|
|
@@ -1,9 +1,10 @@
|
|
|
1
|
-
import { Loader2Icon } from "lucide-react";
|
|
2
1
|
import { cn } from "@/lib/utils";
|
|
2
|
+
import { Loader2Icon } from "lucide-react";
|
|
3
3
|
|
|
4
4
|
function Spinner({ className, ...props }: React.ComponentProps<"svg">) {
|
|
5
5
|
return (
|
|
6
6
|
<Loader2Icon
|
|
7
|
+
data-slot="spinner"
|
|
7
8
|
role="status"
|
|
8
9
|
aria-label="Loading"
|
|
9
10
|
className={cn("size-4 animate-spin", className)}
|
|
@@ -250,6 +250,7 @@ export function useNarrationHotkeys(): null {
|
|
|
250
250
|
callback: onSkipKeyUp,
|
|
251
251
|
options: {
|
|
252
252
|
eventType: "keyup",
|
|
253
|
+
conflictBehavior: "allow",
|
|
253
254
|
meta: {
|
|
254
255
|
name: t("next"),
|
|
255
256
|
description: t("skip_release_description"),
|
|
@@ -262,6 +263,7 @@ export function useNarrationHotkeys(): null {
|
|
|
262
263
|
callback: onSkipKeyUp,
|
|
263
264
|
options: {
|
|
264
265
|
eventType: "keyup",
|
|
266
|
+
conflictBehavior: "allow",
|
|
265
267
|
meta: {
|
|
266
268
|
name: t("next"),
|
|
267
269
|
description: t("skip_release_space_description"),
|
|
@@ -2,6 +2,7 @@ import { SKIP_DELAY } from "@/constants";
|
|
|
2
2
|
import { useGameProps } from "@/lib/hooks/props-hooks";
|
|
3
3
|
import { AutoSettings } from "@/lib/stores/auto-settings-store";
|
|
4
4
|
import { GameStatus } from "@/lib/stores/game-status-store";
|
|
5
|
+
import { SearchParams } from "@/lib/stores/search-param-store";
|
|
5
6
|
import { SkipSettings } from "@/lib/stores/skip-settings-store";
|
|
6
7
|
import { TextDisplaySettings } from "@/lib/stores/text-display-settings-store";
|
|
7
8
|
import { hasScrollableParent, isScrollableElement } from "@/lib/utils/scroll-utils";
|
|
@@ -9,12 +10,18 @@ import { narration, stepHistory, type StoredIndexedChoiceInterface } from "@drin
|
|
|
9
10
|
import { useDebouncer } from "@tanstack/react-pacer";
|
|
10
11
|
import { useSelector } from "@tanstack/react-store";
|
|
11
12
|
import type React from "react";
|
|
12
|
-
import { useCallback, useEffect, useRef } from "react";
|
|
13
|
+
import { useCallback, useEffect, useMemo, useRef } from "react";
|
|
13
14
|
|
|
14
15
|
export function useNarrationFunctions() {
|
|
15
16
|
const gameProps = useGameProps();
|
|
17
|
+
const searchParams = useSelector(SearchParams.store, (state) => state);
|
|
18
|
+
const hasOpenMenu = useMemo(
|
|
19
|
+
() => Object.values(searchParams).some((value) => value !== undefined),
|
|
20
|
+
[searchParams],
|
|
21
|
+
);
|
|
16
22
|
|
|
17
23
|
const goNext = useCallback(async () => {
|
|
24
|
+
if (hasOpenMenu) return;
|
|
18
25
|
GameStatus.setLoading(true);
|
|
19
26
|
try {
|
|
20
27
|
if (!narration.canContinue) {
|
|
@@ -36,9 +43,10 @@ export function useNarrationFunctions() {
|
|
|
36
43
|
console.error(e);
|
|
37
44
|
return;
|
|
38
45
|
}
|
|
39
|
-
}, [gameProps]);
|
|
46
|
+
}, [gameProps, hasOpenMenu]);
|
|
40
47
|
|
|
41
48
|
const goBack = useCallback(async () => {
|
|
49
|
+
if (hasOpenMenu) return;
|
|
42
50
|
GameStatus.setLoading(true);
|
|
43
51
|
return stepHistory
|
|
44
52
|
.back(gameProps)
|
|
@@ -50,10 +58,11 @@ export function useNarrationFunctions() {
|
|
|
50
58
|
GameStatus.setLoading(false);
|
|
51
59
|
console.error(e);
|
|
52
60
|
});
|
|
53
|
-
}, [gameProps]);
|
|
61
|
+
}, [gameProps, hasOpenMenu]);
|
|
54
62
|
|
|
55
63
|
const selectChoice = useCallback(
|
|
56
64
|
async (item: StoredIndexedChoiceInterface) => {
|
|
65
|
+
if (hasOpenMenu) return;
|
|
57
66
|
GameStatus.setLoading(true);
|
|
58
67
|
return narration
|
|
59
68
|
.selectChoice(item, gameProps)
|
|
@@ -66,7 +75,7 @@ export function useNarrationFunctions() {
|
|
|
66
75
|
console.error(e);
|
|
67
76
|
});
|
|
68
77
|
},
|
|
69
|
-
[gameProps],
|
|
78
|
+
[gameProps, hasOpenMenu],
|
|
70
79
|
);
|
|
71
80
|
|
|
72
81
|
return {
|
|
@@ -196,6 +205,11 @@ export function useSkipAutoDetector() {
|
|
|
196
205
|
TextDisplaySettings.store,
|
|
197
206
|
(state) => state.inProgress,
|
|
198
207
|
);
|
|
208
|
+
const searchParams = useSelector(SearchParams.store, (state) => state);
|
|
209
|
+
const hasOpenMenu = useMemo(
|
|
210
|
+
() => Object.values(searchParams).some((value) => value !== undefined),
|
|
211
|
+
[searchParams],
|
|
212
|
+
);
|
|
199
213
|
const { goNext } = useNarrationFunctions();
|
|
200
214
|
|
|
201
215
|
const savedGoNext = useRef(goNext);
|
|
@@ -203,11 +217,11 @@ export function useSkipAutoDetector() {
|
|
|
203
217
|
savedGoNext.current = goNext;
|
|
204
218
|
}, [goNext]);
|
|
205
219
|
useEffect(() => {
|
|
206
|
-
if (skipEnabled) {
|
|
220
|
+
if (skipEnabled && !hasOpenMenu) {
|
|
207
221
|
const id = setInterval(() => savedGoNext.current(), SKIP_DELAY);
|
|
208
222
|
return () => clearInterval(id);
|
|
209
223
|
}
|
|
210
|
-
}, [skipEnabled]);
|
|
224
|
+
}, [skipEnabled, hasOpenMenu]);
|
|
211
225
|
|
|
212
226
|
const autoDebouncer = useDebouncer(
|
|
213
227
|
(_trigger: {
|
|
@@ -215,20 +229,21 @@ export function useSkipAutoDetector() {
|
|
|
215
229
|
skipEnabled: boolean;
|
|
216
230
|
typewriterInProgress: boolean;
|
|
217
231
|
autoTime: number;
|
|
232
|
+
hasOpenMenu: boolean;
|
|
218
233
|
}) => {
|
|
219
234
|
goNext();
|
|
220
235
|
},
|
|
221
236
|
{
|
|
222
237
|
wait: autoTime * 1000,
|
|
223
|
-
enabled: autoEnabled && !skipEnabled && !typewriterInProgress,
|
|
238
|
+
enabled: autoEnabled && !skipEnabled && !typewriterInProgress && !hasOpenMenu,
|
|
224
239
|
},
|
|
225
240
|
);
|
|
226
241
|
|
|
227
242
|
const { maybeExecute } = autoDebouncer;
|
|
228
243
|
|
|
229
244
|
useEffect(() => {
|
|
230
|
-
maybeExecute({ autoEnabled, skipEnabled, typewriterInProgress, autoTime });
|
|
231
|
-
}, [maybeExecute, autoEnabled, skipEnabled, typewriterInProgress, autoTime]);
|
|
245
|
+
maybeExecute({ autoEnabled, skipEnabled, typewriterInProgress, autoTime, hasOpenMenu });
|
|
246
|
+
}, [maybeExecute, autoEnabled, skipEnabled, typewriterInProgress, autoTime, hasOpenMenu]);
|
|
232
247
|
|
|
233
248
|
return null;
|
|
234
249
|
}
|
|
@@ -1,9 +1,35 @@
|
|
|
1
1
|
import { SearchParams } from "@/lib/stores/search-param-store";
|
|
2
|
-
import { useDebouncedCallback } from "@tanstack/react-pacer";
|
|
3
2
|
import { useLocation, useNavigate } from "@tanstack/react-router";
|
|
4
3
|
import { useSelector } from "@tanstack/react-store";
|
|
5
4
|
import { useCallback, useEffect } from "react";
|
|
6
5
|
|
|
6
|
+
// Shared pending param changes — all synchronous setters accumulate here
|
|
7
|
+
// and a single navigate fires after a very short delay.
|
|
8
|
+
const _pendingParams: Record<string, unknown> = {};
|
|
9
|
+
let _pendingTimer: ReturnType<typeof setTimeout> | null = null;
|
|
10
|
+
let _pendingNavigate: ((...args: unknown[]) => unknown) | null = null;
|
|
11
|
+
|
|
12
|
+
function scheduleNavigate(navigate: (...args: unknown[]) => unknown, key: string, value: unknown) {
|
|
13
|
+
_pendingParams[key] = value;
|
|
14
|
+
_pendingNavigate = navigate;
|
|
15
|
+
if (_pendingTimer !== null) {
|
|
16
|
+
clearTimeout(_pendingTimer);
|
|
17
|
+
}
|
|
18
|
+
_pendingTimer = setTimeout(() => {
|
|
19
|
+
_pendingTimer = null;
|
|
20
|
+
if (_pendingNavigate) {
|
|
21
|
+
const snapshot = { ..._pendingParams };
|
|
22
|
+
for (const k of Object.keys(_pendingParams)) {
|
|
23
|
+
delete _pendingParams[k];
|
|
24
|
+
}
|
|
25
|
+
_pendingNavigate({
|
|
26
|
+
search: (prev: Record<string, unknown>) => ({ ...prev, ...snapshot }),
|
|
27
|
+
});
|
|
28
|
+
_pendingNavigate = null;
|
|
29
|
+
}
|
|
30
|
+
}, 10);
|
|
31
|
+
}
|
|
32
|
+
|
|
7
33
|
/**
|
|
8
34
|
* useConfirmBackNavigation
|
|
9
35
|
*
|
|
@@ -69,13 +95,6 @@ export function useSetSearchParamState<T>(
|
|
|
69
95
|
): (value: T | undefined | ((previous: T | undefined) => T | undefined)) => void {
|
|
70
96
|
const navigate = useNavigate();
|
|
71
97
|
|
|
72
|
-
const debouncedNavigate = useDebouncedCallback(
|
|
73
|
-
(key: string, value: unknown) => {
|
|
74
|
-
navigate({ search: ((prev: any) => ({ ...prev, [key]: value })) as any });
|
|
75
|
-
},
|
|
76
|
-
{ wait: 300 },
|
|
77
|
-
);
|
|
78
|
-
|
|
79
98
|
return useCallback(
|
|
80
99
|
(value) => {
|
|
81
100
|
const currentValue = SearchParams.store.state[field] as T | undefined;
|
|
@@ -86,8 +105,8 @@ export function useSetSearchParamState<T>(
|
|
|
86
105
|
const normalizedValue = nextValue === false ? undefined : nextValue;
|
|
87
106
|
|
|
88
107
|
SearchParams.set(field, normalizedValue);
|
|
89
|
-
|
|
108
|
+
scheduleNavigate(navigate as never, field, normalizedValue);
|
|
90
109
|
},
|
|
91
|
-
[field,
|
|
110
|
+
[field, navigate],
|
|
92
111
|
);
|
|
93
112
|
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { useAlertDialog } from "@/components/providers/alert-dialog-provider";
|
|
2
|
+
import { exit } from "@tauri-apps/plugin-process";
|
|
3
|
+
import { useCallback } from "react";
|
|
4
|
+
import { useTranslation } from "react-i18next";
|
|
5
|
+
|
|
6
|
+
export function useQuit() {
|
|
7
|
+
const { openAlertDialog } = useAlertDialog();
|
|
8
|
+
const { t } = useTranslation(["ui"]);
|
|
9
|
+
|
|
10
|
+
const canQuit = typeof window !== "undefined" && !!window.__TAURI__;
|
|
11
|
+
|
|
12
|
+
const quit = useCallback(() => {
|
|
13
|
+
openAlertDialog({
|
|
14
|
+
head: t("quit"),
|
|
15
|
+
content: t("quit_confirm"),
|
|
16
|
+
onConfirm: async () => {
|
|
17
|
+
await exit();
|
|
18
|
+
return true;
|
|
19
|
+
},
|
|
20
|
+
});
|
|
21
|
+
}, [openAlertDialog, t]);
|
|
22
|
+
|
|
23
|
+
return { quit, canQuit };
|
|
24
|
+
}
|
|
@@ -1,10 +1,16 @@
|
|
|
1
1
|
import { useQuery } from "@tanstack/react-query";
|
|
2
|
+
import { getCurrentWindow } from "@tauri-apps/api/window";
|
|
2
3
|
|
|
3
4
|
export const IS_FULL_SCREEN_MODE_USE_QUERY_KEY = "is_full_screen_mode_use_query_key";
|
|
4
5
|
|
|
5
6
|
export function useQueryIsFullModeScreen() {
|
|
6
7
|
return useQuery({
|
|
7
8
|
queryKey: [IS_FULL_SCREEN_MODE_USE_QUERY_KEY],
|
|
8
|
-
queryFn: async () =>
|
|
9
|
+
queryFn: async () => {
|
|
10
|
+
if (window.__TAURI__) {
|
|
11
|
+
return getCurrentWindow().isFullscreen();
|
|
12
|
+
}
|
|
13
|
+
return document.fullscreenElement !== null;
|
|
14
|
+
},
|
|
9
15
|
});
|
|
10
16
|
}
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Steam utility — thin wrappers around Tauri commands exposed by the
|
|
3
|
+
* `steam` Cargo feature. All functions are safe to call even when:
|
|
4
|
+
* - the app is running outside Tauri (web mode)
|
|
5
|
+
* - Steam is not running
|
|
6
|
+
* - the `steam` feature was not compiled in
|
|
7
|
+
* In all those cases the functions return sensible defaults (null / false / 0)
|
|
8
|
+
* without throwing.
|
|
9
|
+
*
|
|
10
|
+
* Enable Steam in Rust:
|
|
11
|
+
* src-tauri/Cargo.toml → default = ["steam"] (or pass --features steam)
|
|
12
|
+
*
|
|
13
|
+
* Typical usage:
|
|
14
|
+
* import { steam } from "@/lib/steam";
|
|
15
|
+
*
|
|
16
|
+
* const name = await steam.getPlayerName(); // "Alice" | null
|
|
17
|
+
* await steam.unlockAchievement("ACH_COMPLETE_CH1"); // fire & forget
|
|
18
|
+
* await steam.openOverlay("achievements");
|
|
19
|
+
*/
|
|
20
|
+
|
|
21
|
+
import { invoke } from "@tauri-apps/api/core";
|
|
22
|
+
|
|
23
|
+
const isTauri = typeof window !== "undefined" && "__TAURI__" in window;
|
|
24
|
+
|
|
25
|
+
/** Dialogs supported by the Steam overlay. */
|
|
26
|
+
export type SteamOverlayDialog =
|
|
27
|
+
| "achievements"
|
|
28
|
+
| "community"
|
|
29
|
+
| "friends"
|
|
30
|
+
| "players"
|
|
31
|
+
| "settings"
|
|
32
|
+
| "officialgamegroup"
|
|
33
|
+
| "stats";
|
|
34
|
+
|
|
35
|
+
async function call<T>(cmd: string, args?: Record<string, unknown>): Promise<T | null> {
|
|
36
|
+
if (!isTauri) return null;
|
|
37
|
+
try {
|
|
38
|
+
return await invoke<T>(cmd, args);
|
|
39
|
+
} catch {
|
|
40
|
+
return null;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
// ── API ───────────────────────────────────────────────────────────────────────
|
|
45
|
+
|
|
46
|
+
export namespace steam {
|
|
47
|
+
/** `true` when Steam was initialised successfully (Steam client running). */
|
|
48
|
+
export async function isAvailable(): Promise<boolean> {
|
|
49
|
+
return (await call<boolean>("steam_is_available")) ?? false;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
/** Steam display name of the logged-in user. */
|
|
53
|
+
export async function getPlayerName(): Promise<string | null> {
|
|
54
|
+
return call<string>("steam_get_player_name");
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
/** Numeric App ID of the running application. */
|
|
58
|
+
export async function getAppId(): Promise<number | null> {
|
|
59
|
+
return call<number>("steam_get_app_id");
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
// ── Achievements ──────────────────────────────────────────────────────────
|
|
63
|
+
|
|
64
|
+
/**
|
|
65
|
+
* Unlock an achievement and immediately persist it.
|
|
66
|
+
* `id` must match the API Name in Steamworks Partner.
|
|
67
|
+
*/
|
|
68
|
+
export async function unlockAchievement(id: string): Promise<void> {
|
|
69
|
+
await call("steam_unlock_achievement", { achievementId: id });
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
/**
|
|
73
|
+
* Returns `true` if the user has already unlocked the achievement.
|
|
74
|
+
* Reliable only after the first few seconds of launch (stats are fetched
|
|
75
|
+
* automatically at startup).
|
|
76
|
+
*/
|
|
77
|
+
export async function isAchievementUnlocked(id: string): Promise<boolean> {
|
|
78
|
+
return (await call<boolean>("steam_is_achievement_unlocked", { achievementId: id })) ?? false;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
/** Reset an achievement — intended for development / testing only. */
|
|
82
|
+
export async function clearAchievement(id: string): Promise<void> {
|
|
83
|
+
await call("steam_clear_achievement", { achievementId: id });
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
// ── Stats ─────────────────────────────────────────────────────────────────
|
|
87
|
+
|
|
88
|
+
/** Set an integer stat. Remember to call `storeStats()` afterwards. */
|
|
89
|
+
export async function setStatInt(name: string, value: number): Promise<void> {
|
|
90
|
+
await call("steam_set_stat_int", { name, value: Math.trunc(value) });
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
/** Read an integer stat (returns `0` on error). */
|
|
94
|
+
export async function getStatInt(name: string): Promise<number> {
|
|
95
|
+
return (await call<number>("steam_get_stat_int", { name })) ?? 0;
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
/** Set a float stat. Remember to call `storeStats()` afterwards. */
|
|
99
|
+
export async function setStatFloat(name: string, value: number): Promise<void> {
|
|
100
|
+
await call("steam_set_stat_float", { name, value });
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
/** Read a float stat (returns `0` on error). */
|
|
104
|
+
export async function getStatFloat(name: string): Promise<number> {
|
|
105
|
+
return (await call<number>("steam_get_stat_float", { name })) ?? 0;
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
/**
|
|
109
|
+
* Commit pending stat changes to Steam servers.
|
|
110
|
+
* `unlockAchievement` / `clearAchievement` already call this automatically;
|
|
111
|
+
* you only need this when using `setStatInt` / `setStatFloat` directly.
|
|
112
|
+
*/
|
|
113
|
+
export async function storeStats(): Promise<void> {
|
|
114
|
+
await call("steam_store_stats");
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
// ── DLC ───────────────────────────────────────────────────────────────────
|
|
118
|
+
|
|
119
|
+
/** `true` if the user owns and has installed the DLC with the given App ID. */
|
|
120
|
+
export async function isDlcInstalled(appId: number): Promise<boolean> {
|
|
121
|
+
return (await call<boolean>("steam_is_dlc_installed", { appId })) ?? false;
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
// ── Overlay ───────────────────────────────────────────────────────────────
|
|
125
|
+
|
|
126
|
+
/**
|
|
127
|
+
* Open the Steam overlay to a specific dialog.
|
|
128
|
+
*
|
|
129
|
+
* Common values: "achievements", "friends", "community", "stats",
|
|
130
|
+
* "settings", "officialgamegroup", "players"
|
|
131
|
+
*/
|
|
132
|
+
export async function openOverlay(dialog: SteamOverlayDialog): Promise<void> {
|
|
133
|
+
await call("steam_open_overlay", { dialog });
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
/**
|
|
137
|
+
* Open the Steam store page for this game.
|
|
138
|
+
* Pass a different `appId` to open another game's page.
|
|
139
|
+
*/
|
|
140
|
+
export async function openStore(appId?: number): Promise<void> {
|
|
141
|
+
await call("steam_open_store", { appId: appId ?? null });
|
|
142
|
+
}
|
|
143
|
+
}
|
|
@@ -10,7 +10,6 @@ import { ChannelSound } from "@/lib/stores/channel-sound-stores";
|
|
|
10
10
|
import { MasterSound } from "@/lib/stores/master-sound-storage";
|
|
11
11
|
import "@/styles.css";
|
|
12
12
|
import { Assets, canvas, Container, drawCanvasErrorHandler, Game, sound } from "@drincs/pixi-vn";
|
|
13
|
-
import "@drincs/pixi-vn-spine";
|
|
14
13
|
import { createRoot } from "react-dom/client";
|
|
15
14
|
|
|
16
15
|
// Canvas setup with PIXI
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
// @ts-nocheck
|
|
2
1
|
/* eslint-disable */
|
|
3
2
|
// noinspection JSUnusedGlobalSymbols
|
|
4
3
|
// This file is auto-generated by @drincs/pixi-vn vite plugin. Do not edit manually.
|
|
@@ -17,4 +16,7 @@ declare module "@drincs/pixi-vn/narration" {
|
|
|
17
16
|
"start": never;
|
|
18
17
|
}
|
|
19
18
|
}
|
|
20
|
-
export
|
|
19
|
+
export const characterIds = ["mc","james","steph","sly"] as const;
|
|
20
|
+
export const characterIdsEnum = {"mc":"mc","james":"james","steph":"steph","sly":"sly"} as const;
|
|
21
|
+
export const labelIds = ["animation_01","second_part","start"] as const;
|
|
22
|
+
export const labelIdsEnum = {"animation_01":"animation_01","second_part":"second_part","start":"start"} as const;
|
|
@@ -9,16 +9,10 @@
|
|
|
9
9
|
// Additionally, you should also exclude this file from your linter and/or formatter to prevent it from being checked or modified.
|
|
10
10
|
|
|
11
11
|
import { Route as rootRouteImport } from './routes/__root'
|
|
12
|
-
import { Route as NarrationRouteImport } from './routes/narration'
|
|
13
12
|
import { Route as GameRouteImport } from './routes/game'
|
|
14
13
|
import { Route as IndexRouteImport } from './routes/index'
|
|
15
14
|
import { Route as GameNarrationRouteImport } from './routes/game/narration'
|
|
16
15
|
|
|
17
|
-
const NarrationRoute = NarrationRouteImport.update({
|
|
18
|
-
id: '/narration',
|
|
19
|
-
path: '/narration',
|
|
20
|
-
getParentRoute: () => rootRouteImport,
|
|
21
|
-
} as any)
|
|
22
16
|
const GameRoute = GameRouteImport.update({
|
|
23
17
|
id: '/game',
|
|
24
18
|
path: '/game',
|
|
@@ -38,45 +32,34 @@ const GameNarrationRoute = GameNarrationRouteImport.update({
|
|
|
38
32
|
export interface FileRoutesByFullPath {
|
|
39
33
|
'/': typeof IndexRoute
|
|
40
34
|
'/game': typeof GameRouteWithChildren
|
|
41
|
-
'/narration': typeof NarrationRoute
|
|
42
35
|
'/game/narration': typeof GameNarrationRoute
|
|
43
36
|
}
|
|
44
37
|
export interface FileRoutesByTo {
|
|
45
38
|
'/': typeof IndexRoute
|
|
46
39
|
'/game': typeof GameRouteWithChildren
|
|
47
|
-
'/narration': typeof NarrationRoute
|
|
48
40
|
'/game/narration': typeof GameNarrationRoute
|
|
49
41
|
}
|
|
50
42
|
export interface FileRoutesById {
|
|
51
43
|
__root__: typeof rootRouteImport
|
|
52
44
|
'/': typeof IndexRoute
|
|
53
45
|
'/game': typeof GameRouteWithChildren
|
|
54
|
-
'/narration': typeof NarrationRoute
|
|
55
46
|
'/game/narration': typeof GameNarrationRoute
|
|
56
47
|
}
|
|
57
48
|
export interface FileRouteTypes {
|
|
58
49
|
fileRoutesByFullPath: FileRoutesByFullPath
|
|
59
|
-
fullPaths: '/' | '/game' | '/
|
|
50
|
+
fullPaths: '/' | '/game' | '/game/narration'
|
|
60
51
|
fileRoutesByTo: FileRoutesByTo
|
|
61
|
-
to: '/' | '/game' | '/
|
|
62
|
-
id: '__root__' | '/' | '/game' | '/
|
|
52
|
+
to: '/' | '/game' | '/game/narration'
|
|
53
|
+
id: '__root__' | '/' | '/game' | '/game/narration'
|
|
63
54
|
fileRoutesById: FileRoutesById
|
|
64
55
|
}
|
|
65
56
|
export interface RootRouteChildren {
|
|
66
57
|
IndexRoute: typeof IndexRoute
|
|
67
58
|
GameRoute: typeof GameRouteWithChildren
|
|
68
|
-
NarrationRoute: typeof NarrationRoute
|
|
69
59
|
}
|
|
70
60
|
|
|
71
61
|
declare module '@tanstack/react-router' {
|
|
72
62
|
interface FileRoutesByPath {
|
|
73
|
-
'/narration': {
|
|
74
|
-
id: '/narration'
|
|
75
|
-
path: '/narration'
|
|
76
|
-
fullPath: '/narration'
|
|
77
|
-
preLoaderRoute: typeof NarrationRouteImport
|
|
78
|
-
parentRoute: typeof rootRouteImport
|
|
79
|
-
}
|
|
80
63
|
'/game': {
|
|
81
64
|
id: '/game'
|
|
82
65
|
path: '/game'
|
|
@@ -114,7 +97,6 @@ const GameRouteWithChildren = GameRoute._addFileChildren(GameRouteChildren)
|
|
|
114
97
|
const rootRouteChildren: RootRouteChildren = {
|
|
115
98
|
IndexRoute: IndexRoute,
|
|
116
99
|
GameRoute: GameRouteWithChildren,
|
|
117
|
-
NarrationRoute: NarrationRoute,
|
|
118
100
|
}
|
|
119
101
|
export const routeTree = rootRouteImport
|
|
120
102
|
._addFileChildren(rootRouteChildren)
|