create-pixi-vn 2.0.13 → 2.0.15
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 +760 -1060
- package/template-react-vite-muijoy/package.json +11 -12
- package/template-react-vite-muijoy/src/components/dev-devtools.tsx +25 -0
- package/template-react-vite-muijoy/src/components/loading.tsx +11 -1
- package/template-react-vite-muijoy/src/components/menus/choice-menus.tsx +4 -0
- package/template-react-vite-muijoy/src/components/menus/main-menu.tsx +1 -6
- package/template-react-vite-muijoy/src/components/menus/settings/index.tsx +3 -1
- package/template-react-vite-muijoy/src/components/menus/settings/menus/history.tsx +78 -62
- package/template-react-vite-muijoy/src/components/modals/input-request-dialogues.tsx +1 -1
- package/template-react-vite-muijoy/src/components/modals/quick-actions-wheel.tsx +3 -1
- package/template-react-vite-muijoy/src/components/providers/alert-dialog-provider.tsx +3 -0
- package/template-react-vite-muijoy/src/components/screens/narration/index.tsx +5 -2
- package/template-react-vite-muijoy/src/components/screens/narration/narration-cards.tsx +40 -19
- 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 +113 -10
- package/template-react-vite-muijoy/src/lib/hooks/narration-hooks.ts +31 -10
- package/template-react-vite-muijoy/src/lib/hooks/navigation-hooks.ts +29 -10
- package/template-react-vite-muijoy/src/lib/query/narration-query.ts +32 -2
- package/template-react-vite-muijoy/src/lib/stores/alert-dialog-store.ts +13 -0
- package/template-react-vite-muijoy/src/lib/stores/text-display-settings-store.ts +20 -1
- package/template-react-vite-muijoy/src/locales/en.json +2 -0
- 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 -21
- 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/components.json +1 -1
- package/template-react-vite-muijoy-ink/package-lock.json +721 -1059
- package/template-react-vite-muijoy-ink/package.json +12 -13
- package/template-react-vite-muijoy-ink/src/components/dev-devtools.tsx +25 -0
- package/template-react-vite-muijoy-ink/src/components/loading.tsx +11 -1
- package/template-react-vite-muijoy-ink/src/components/menus/choice-menus.tsx +4 -0
- package/template-react-vite-muijoy-ink/src/components/menus/main-menu.tsx +1 -6
- package/template-react-vite-muijoy-ink/src/components/menus/settings/index.tsx +3 -1
- package/template-react-vite-muijoy-ink/src/components/menus/settings/menus/history.tsx +78 -62
- package/template-react-vite-muijoy-ink/src/components/modals/input-request-dialogues.tsx +1 -1
- package/template-react-vite-muijoy-ink/src/components/modals/quick-actions-wheel.tsx +3 -1
- package/template-react-vite-muijoy-ink/src/components/providers/alert-dialog-provider.tsx +3 -0
- package/template-react-vite-muijoy-ink/src/components/screens/narration/index.tsx +5 -2
- package/template-react-vite-muijoy-ink/src/components/screens/narration/narration-cards.tsx +40 -19
- 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 +2 -1
- package/template-react-vite-muijoy-ink/src/lib/hooks/hotkeys-hooks.ts +113 -10
- package/template-react-vite-muijoy-ink/src/lib/hooks/narration-hooks.ts +31 -10
- package/template-react-vite-muijoy-ink/src/lib/hooks/navigation-hooks.ts +29 -10
- package/template-react-vite-muijoy-ink/src/lib/query/narration-query.ts +32 -2
- package/template-react-vite-muijoy-ink/src/lib/stores/alert-dialog-store.ts +13 -0
- package/template-react-vite-muijoy-ink/src/lib/stores/text-display-settings-store.ts +20 -1
- package/template-react-vite-muijoy-ink/src/locales/en.json +2 -0
- 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 +10 -21
- package/template-react-vite-muijoy-ink/src/styles.css +43 -43
- package/template-react-vite-muijoy-ink/vite.config.ts +1 -1
- package/template-react-vite-muijoy-ink-tauri/components.json +1 -1
- package/template-react-vite-muijoy-ink-tauri/package-lock.json +721 -1059
- package/template-react-vite-muijoy-ink-tauri/package.json +12 -13
- package/template-react-vite-muijoy-ink-tauri/src/components/dev-devtools.tsx +25 -0
- package/template-react-vite-muijoy-ink-tauri/src/components/loading.tsx +11 -1
- package/template-react-vite-muijoy-ink-tauri/src/components/menus/choice-menus.tsx +4 -0
- package/template-react-vite-muijoy-ink-tauri/src/components/menus/main-menu.tsx +1 -6
- package/template-react-vite-muijoy-ink-tauri/src/components/menus/settings/index.tsx +3 -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/modals/input-request-dialogues.tsx +1 -1
- package/template-react-vite-muijoy-ink-tauri/src/components/modals/quick-actions-wheel.tsx +3 -1
- package/template-react-vite-muijoy-ink-tauri/src/components/providers/alert-dialog-provider.tsx +3 -0
- package/template-react-vite-muijoy-ink-tauri/src/components/screens/narration/index.tsx +5 -2
- package/template-react-vite-muijoy-ink-tauri/src/components/screens/narration/narration-cards.tsx +40 -19
- 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 +2 -1
- package/template-react-vite-muijoy-ink-tauri/src/lib/hooks/hotkeys-hooks.ts +113 -10
- package/template-react-vite-muijoy-ink-tauri/src/lib/hooks/narration-hooks.ts +31 -10
- package/template-react-vite-muijoy-ink-tauri/src/lib/hooks/navigation-hooks.ts +29 -10
- package/template-react-vite-muijoy-ink-tauri/src/lib/query/narration-query.ts +32 -2
- package/template-react-vite-muijoy-ink-tauri/src/lib/stores/alert-dialog-store.ts +13 -0
- package/template-react-vite-muijoy-ink-tauri/src/lib/stores/text-display-settings-store.ts +20 -1
- package/template-react-vite-muijoy-ink-tauri/src/locales/en.json +2 -0
- package/template-react-vite-muijoy-ink-tauri/src/main.tsx +0 -1
- package/{template-react-vite-muijoy-ink/src/pixi-vn-keys.gen.d.ts → template-react-vite-muijoy-ink-tauri/src/pixi-vn.keys.gen.ts} +4 -2
- package/template-react-vite-muijoy-ink-tauri/src/routeTree.gen.ts +3 -21
- package/template-react-vite-muijoy-ink-tauri/src/routes/__root.tsx +10 -21
- package/template-react-vite-muijoy-ink-tauri/src/styles.css +43 -43
- package/template-react-vite-muijoy-ink-tauri/vite.config.ts +1 -1
- package/template-react-vite-muijoy-tauri/components.json +1 -1
- package/template-react-vite-muijoy-tauri/package-lock.json +760 -1060
- package/template-react-vite-muijoy-tauri/package.json +11 -12
- package/template-react-vite-muijoy-tauri/src/components/dev-devtools.tsx +25 -0
- package/template-react-vite-muijoy-tauri/src/components/loading.tsx +11 -1
- package/template-react-vite-muijoy-tauri/src/components/menus/choice-menus.tsx +4 -0
- package/template-react-vite-muijoy-tauri/src/components/menus/main-menu.tsx +1 -6
- package/template-react-vite-muijoy-tauri/src/components/menus/settings/index.tsx +3 -1
- package/template-react-vite-muijoy-tauri/src/components/menus/settings/menus/history.tsx +78 -62
- package/template-react-vite-muijoy-tauri/src/components/modals/input-request-dialogues.tsx +1 -1
- package/template-react-vite-muijoy-tauri/src/components/modals/quick-actions-wheel.tsx +3 -1
- package/template-react-vite-muijoy-tauri/src/components/providers/alert-dialog-provider.tsx +3 -0
- package/template-react-vite-muijoy-tauri/src/components/screens/narration/index.tsx +5 -2
- package/template-react-vite-muijoy-tauri/src/components/screens/narration/narration-cards.tsx +40 -19
- 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 +113 -10
- package/template-react-vite-muijoy-tauri/src/lib/hooks/narration-hooks.ts +31 -10
- package/template-react-vite-muijoy-tauri/src/lib/hooks/navigation-hooks.ts +29 -10
- package/template-react-vite-muijoy-tauri/src/lib/query/narration-query.ts +32 -2
- package/template-react-vite-muijoy-tauri/src/lib/stores/alert-dialog-store.ts +13 -0
- package/template-react-vite-muijoy-tauri/src/lib/stores/text-display-settings-store.ts +20 -1
- package/template-react-vite-muijoy-tauri/src/locales/en.json +2 -0
- package/template-react-vite-muijoy-tauri/src/main.tsx +0 -1
- package/{template-react-vite-muijoy-ink-tauri/src/pixi-vn-keys.gen.d.ts → template-react-vite-muijoy-tauri/src/pixi-vn.keys.gen.ts} +4 -4
- package/template-react-vite-muijoy-tauri/src/routeTree.gen.ts +3 -21
- package/template-react-vite-muijoy-tauri/src/routes/__root.tsx +10 -21
- package/template-react-vite-muijoy-tauri/src/styles.css +43 -43
- package/template-react-vite-muijoy-tauri/vite.config.ts +1 -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/routes/narration.tsx +0 -9
- 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
|
@@ -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,19 @@ 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;
|
|
25
|
+
TextDisplaySettings.resetForNext();
|
|
18
26
|
GameStatus.setLoading(true);
|
|
19
27
|
try {
|
|
20
28
|
if (!narration.canContinue) {
|
|
@@ -36,9 +44,10 @@ export function useNarrationFunctions() {
|
|
|
36
44
|
console.error(e);
|
|
37
45
|
return;
|
|
38
46
|
}
|
|
39
|
-
}, [gameProps]);
|
|
47
|
+
}, [gameProps, hasOpenMenu]);
|
|
40
48
|
|
|
41
49
|
const goBack = useCallback(async () => {
|
|
50
|
+
if (hasOpenMenu) return;
|
|
42
51
|
GameStatus.setLoading(true);
|
|
43
52
|
return stepHistory
|
|
44
53
|
.back(gameProps)
|
|
@@ -50,10 +59,11 @@ export function useNarrationFunctions() {
|
|
|
50
59
|
GameStatus.setLoading(false);
|
|
51
60
|
console.error(e);
|
|
52
61
|
});
|
|
53
|
-
}, [gameProps]);
|
|
62
|
+
}, [gameProps, hasOpenMenu]);
|
|
54
63
|
|
|
55
64
|
const selectChoice = useCallback(
|
|
56
65
|
async (item: StoredIndexedChoiceInterface) => {
|
|
66
|
+
if (hasOpenMenu) return;
|
|
57
67
|
GameStatus.setLoading(true);
|
|
58
68
|
return narration
|
|
59
69
|
.selectChoice(item, gameProps)
|
|
@@ -66,7 +76,7 @@ export function useNarrationFunctions() {
|
|
|
66
76
|
console.error(e);
|
|
67
77
|
});
|
|
68
78
|
},
|
|
69
|
-
[gameProps],
|
|
79
|
+
[gameProps, hasOpenMenu],
|
|
70
80
|
);
|
|
71
81
|
|
|
72
82
|
return {
|
|
@@ -85,6 +95,7 @@ const isDragGesture = (dx: number, dy: number) =>
|
|
|
85
95
|
export function useNarrationPointerHandlers() {
|
|
86
96
|
const { goNext } = useNarrationFunctions();
|
|
87
97
|
const skipEnabled = useSelector(SkipSettings.store, (state) => state.enabled);
|
|
98
|
+
const typewriterInProgress = useSelector(TextDisplaySettings.store, (state) => state.inProgress);
|
|
88
99
|
const pointerDownPos = useRef<{ x: number; y: number } | null>(null);
|
|
89
100
|
const longPressTimer = useRef<ReturnType<typeof setTimeout> | null>(null);
|
|
90
101
|
const longPressTriggered = useRef(false);
|
|
@@ -157,9 +168,13 @@ export function useNarrationPointerHandlers() {
|
|
|
157
168
|
if (skipEnabled) {
|
|
158
169
|
SkipSettings.setEnabled(false);
|
|
159
170
|
}
|
|
171
|
+
if (typewriterInProgress && !narration.dialogGlue) {
|
|
172
|
+
TextDisplaySettings.complete();
|
|
173
|
+
return;
|
|
174
|
+
}
|
|
160
175
|
goNext();
|
|
161
176
|
},
|
|
162
|
-
[clearLongPressTimer, goNext, skipEnabled],
|
|
177
|
+
[clearLongPressTimer, goNext, skipEnabled, typewriterInProgress],
|
|
163
178
|
);
|
|
164
179
|
|
|
165
180
|
const handlePointerMove = useCallback(
|
|
@@ -196,6 +211,11 @@ export function useSkipAutoDetector() {
|
|
|
196
211
|
TextDisplaySettings.store,
|
|
197
212
|
(state) => state.inProgress,
|
|
198
213
|
);
|
|
214
|
+
const searchParams = useSelector(SearchParams.store, (state) => state);
|
|
215
|
+
const hasOpenMenu = useMemo(
|
|
216
|
+
() => Object.values(searchParams).some((value) => value !== undefined),
|
|
217
|
+
[searchParams],
|
|
218
|
+
);
|
|
199
219
|
const { goNext } = useNarrationFunctions();
|
|
200
220
|
|
|
201
221
|
const savedGoNext = useRef(goNext);
|
|
@@ -203,11 +223,11 @@ export function useSkipAutoDetector() {
|
|
|
203
223
|
savedGoNext.current = goNext;
|
|
204
224
|
}, [goNext]);
|
|
205
225
|
useEffect(() => {
|
|
206
|
-
if (skipEnabled) {
|
|
226
|
+
if (skipEnabled && !hasOpenMenu) {
|
|
207
227
|
const id = setInterval(() => savedGoNext.current(), SKIP_DELAY);
|
|
208
228
|
return () => clearInterval(id);
|
|
209
229
|
}
|
|
210
|
-
}, [skipEnabled]);
|
|
230
|
+
}, [skipEnabled, hasOpenMenu]);
|
|
211
231
|
|
|
212
232
|
const autoDebouncer = useDebouncer(
|
|
213
233
|
(_trigger: {
|
|
@@ -215,20 +235,21 @@ export function useSkipAutoDetector() {
|
|
|
215
235
|
skipEnabled: boolean;
|
|
216
236
|
typewriterInProgress: boolean;
|
|
217
237
|
autoTime: number;
|
|
238
|
+
hasOpenMenu: boolean;
|
|
218
239
|
}) => {
|
|
219
240
|
goNext();
|
|
220
241
|
},
|
|
221
242
|
{
|
|
222
243
|
wait: autoTime * 1000,
|
|
223
|
-
enabled: autoEnabled && !skipEnabled && !typewriterInProgress,
|
|
244
|
+
enabled: autoEnabled && !skipEnabled && !typewriterInProgress && !hasOpenMenu,
|
|
224
245
|
},
|
|
225
246
|
);
|
|
226
247
|
|
|
227
248
|
const { maybeExecute } = autoDebouncer;
|
|
228
249
|
|
|
229
250
|
useEffect(() => {
|
|
230
|
-
maybeExecute({ autoEnabled, skipEnabled, typewriterInProgress, autoTime });
|
|
231
|
-
}, [maybeExecute, autoEnabled, skipEnabled, typewriterInProgress, autoTime]);
|
|
251
|
+
maybeExecute({ autoEnabled, skipEnabled, typewriterInProgress, autoTime, hasOpenMenu });
|
|
252
|
+
}, [maybeExecute, autoEnabled, skipEnabled, typewriterInProgress, autoTime, hasOpenMenu]);
|
|
232
253
|
|
|
233
254
|
return null;
|
|
234
255
|
}
|
|
@@ -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
|
}
|
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
import { INTERFACE_DATA_USE_QUERY_KEY } from "@/constants";
|
|
2
|
+
import { TextDisplaySettings } from "@/lib/stores/text-display-settings-store";
|
|
2
3
|
import { type CharacterInterface, narration, stepHistory } from "@drincs/pixi-vn";
|
|
3
4
|
import { keepPreviousData, useQuery, useQueryClient } from "@tanstack/react-query";
|
|
5
|
+
import { useSelector } from "@tanstack/react-store";
|
|
6
|
+
import { useCallback } from "react";
|
|
4
7
|
import { useTranslation } from "react-i18next";
|
|
5
8
|
|
|
6
9
|
const CAN_GO_BACK_USE_QUERY_KEY = "can_go_back_use_query_key";
|
|
@@ -24,7 +27,6 @@ export function useQueryChoiceMenuOptions() {
|
|
|
24
27
|
? t(option.text)
|
|
25
28
|
: option.text.map((text) => t(text)).join(" "),
|
|
26
29
|
})) || [],
|
|
27
|
-
placeholderData: keepPreviousData,
|
|
28
30
|
});
|
|
29
31
|
}
|
|
30
32
|
|
|
@@ -45,13 +47,30 @@ type DialogueModel = {
|
|
|
45
47
|
animatedText?: string;
|
|
46
48
|
text?: string;
|
|
47
49
|
character?: CharacterInterface;
|
|
50
|
+
lastText?: string;
|
|
48
51
|
};
|
|
49
52
|
const DIALOGUE_USE_QUERY_KEY = "dialogue_use_query_key";
|
|
50
53
|
export function useQueryDialogue() {
|
|
51
54
|
const { t } = useTranslation(["narration"]);
|
|
52
55
|
const queryClient = useQueryClient();
|
|
56
|
+
const forceComplete = useSelector(TextDisplaySettings.store, (state) => state.forceComplete);
|
|
53
57
|
|
|
54
|
-
|
|
58
|
+
const finalizeDialogue = useCallback(() => {
|
|
59
|
+
queryClient.setQueryData<DialogueModel>(
|
|
60
|
+
[INTERFACE_DATA_USE_QUERY_KEY, DIALOGUE_USE_QUERY_KEY],
|
|
61
|
+
(prev) => {
|
|
62
|
+
if (!prev) return prev;
|
|
63
|
+
const fullText = (prev.text || "") + (prev.animatedText || "");
|
|
64
|
+
return {
|
|
65
|
+
...prev,
|
|
66
|
+
text: fullText || undefined,
|
|
67
|
+
animatedText: undefined,
|
|
68
|
+
};
|
|
69
|
+
},
|
|
70
|
+
);
|
|
71
|
+
}, [queryClient]);
|
|
72
|
+
|
|
73
|
+
const query = useQuery<DialogueModel>({
|
|
55
74
|
queryKey: [INTERFACE_DATA_USE_QUERY_KEY, DIALOGUE_USE_QUERY_KEY],
|
|
56
75
|
queryFn: async ({ queryKey }) => {
|
|
57
76
|
const dialogue = narration.dialogue;
|
|
@@ -78,6 +97,7 @@ export function useQueryDialogue() {
|
|
|
78
97
|
}
|
|
79
98
|
return {
|
|
80
99
|
animatedText: newText,
|
|
100
|
+
lastText: newText,
|
|
81
101
|
text: oldText,
|
|
82
102
|
character: character,
|
|
83
103
|
};
|
|
@@ -85,11 +105,21 @@ export function useQueryDialogue() {
|
|
|
85
105
|
|
|
86
106
|
return {
|
|
87
107
|
animatedText: text,
|
|
108
|
+
lastText: text,
|
|
88
109
|
character: character,
|
|
89
110
|
};
|
|
90
111
|
},
|
|
91
112
|
placeholderData: keepPreviousData,
|
|
113
|
+
select: forceComplete
|
|
114
|
+
? (data) => ({
|
|
115
|
+
...data,
|
|
116
|
+
text: (data.text || "") + (data.animatedText || "") || undefined,
|
|
117
|
+
animatedText: undefined,
|
|
118
|
+
})
|
|
119
|
+
: undefined,
|
|
92
120
|
});
|
|
121
|
+
|
|
122
|
+
return { ...query, finalizeDialogue };
|
|
93
123
|
}
|
|
94
124
|
|
|
95
125
|
const CAN_GO_NEXT_USE_QUERY_KEY = "can_go_next_use_query_key";
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { Store } from "@tanstack/store";
|
|
2
|
+
|
|
3
|
+
export namespace AlertDialogState {
|
|
4
|
+
export const store = new Store<{ count: number }>({ count: 0 });
|
|
5
|
+
|
|
6
|
+
export function increment() {
|
|
7
|
+
store.setState((state) => ({ count: state.count + 1 }));
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
export function decrement() {
|
|
11
|
+
store.setState((state) => ({ count: Math.max(0, state.count - 1) }));
|
|
12
|
+
}
|
|
13
|
+
}
|
|
@@ -9,6 +9,10 @@ type TextDisplayStorage = {
|
|
|
9
9
|
* Whether the typewriter effect is in progress
|
|
10
10
|
*/
|
|
11
11
|
inProgress: boolean;
|
|
12
|
+
/**
|
|
13
|
+
* Whether the typewriter effect should be force-completed instantly
|
|
14
|
+
*/
|
|
15
|
+
forceComplete: boolean;
|
|
12
16
|
/**
|
|
13
17
|
* The font size in percent (100 = default)
|
|
14
18
|
*/
|
|
@@ -22,6 +26,7 @@ export namespace TextDisplaySettings {
|
|
|
22
26
|
export const store = new Store<TextDisplayStorage>({
|
|
23
27
|
delay: Number(localStorage.getItem("typewriter_delay_millisecond") ?? 10),
|
|
24
28
|
inProgress: false,
|
|
29
|
+
forceComplete: false,
|
|
25
30
|
fontSize: initialFontSize,
|
|
26
31
|
});
|
|
27
32
|
|
|
@@ -57,6 +62,20 @@ export namespace TextDisplaySettings {
|
|
|
57
62
|
* End the typewriter effect
|
|
58
63
|
*/
|
|
59
64
|
export function end() {
|
|
60
|
-
store.setState((state) => ({ ...state, inProgress: false }));
|
|
65
|
+
store.setState((state) => ({ ...state, inProgress: false, forceComplete: false }));
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
/**
|
|
69
|
+
* Force the typewriter effect to complete instantly
|
|
70
|
+
*/
|
|
71
|
+
export function complete() {
|
|
72
|
+
store.setState((state) => ({ ...state, forceComplete: true, inProgress: false }));
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
/**
|
|
76
|
+
* Clear the forceComplete flag before advancing to the next step
|
|
77
|
+
*/
|
|
78
|
+
export function resetForNext() {
|
|
79
|
+
store.setState((state) => ({ ...state, forceComplete: false }));
|
|
61
80
|
}
|
|
62
81
|
}
|
|
@@ -81,6 +81,8 @@
|
|
|
81
81
|
"menu_navigation_up_description": "Focus the previous menu item.",
|
|
82
82
|
"menu_navigation_home_description": "Focus the first menu item.",
|
|
83
83
|
"menu_navigation_end_description": "Focus the last menu item.",
|
|
84
|
+
"choice_navigation": "Choices",
|
|
85
|
+
"choice_navigation_description": "Use ↑ / ↓ to select an choice, then Enter to run it.",
|
|
84
86
|
"success_delete": "Delete successful",
|
|
85
87
|
"success_load": "Load successful",
|
|
86
88
|
"success_save": "Save successful",
|
|
@@ -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
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/* eslint-disable */
|
|
2
|
+
// noinspection JSUnusedGlobalSymbols
|
|
3
|
+
// This file is auto-generated by @drincs/pixi-vn vite plugin. Do not edit manually.
|
|
4
|
+
declare module "@drincs/pixi-vn/characters" {
|
|
5
|
+
interface PixivnCharacterIds {
|
|
6
|
+
"mc": never;
|
|
7
|
+
"james": never;
|
|
8
|
+
"steph": never;
|
|
9
|
+
"sly": never;
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
declare module "@drincs/pixi-vn/narration" {
|
|
13
|
+
interface PixivnLabelIds {
|
|
14
|
+
"animation_01": never;
|
|
15
|
+
"second_part": never;
|
|
16
|
+
"start": never;
|
|
17
|
+
"start_|_c-0": never;
|
|
18
|
+
"start_|_c-1": never;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
export const characterIds = ["mc","james","steph","sly"] as const;
|
|
22
|
+
export const characterIdsEnum = {"mc":"mc","james":"james","steph":"steph","sly":"sly"} as const;
|
|
23
|
+
export const labelIds = ["animation_01","second_part","start","start_|_c-0","start_|_c-1"] as const;
|
|
24
|
+
export const labelIdsEnum = {"animation_01":"animation_01","second_part":"second_part","start":"start","start_|_c-0":"start_|_c-0","start_|_c-1":"start_|_c-1"} 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)
|
|
@@ -12,13 +12,13 @@ import { defineAssets } from "@/lib/utils/assets-utility";
|
|
|
12
12
|
import { initializeIndexedDB } from "@/lib/utils/db-utility";
|
|
13
13
|
import { loadRefreshSave } from "@/lib/utils/save-utility";
|
|
14
14
|
import type { RouterContext } from "@/router";
|
|
15
|
+
import { narration } from "@drincs/pixi-vn";
|
|
15
16
|
import { setupInkHmrListener } from "@drincs/pixi-vn-ink/vite-listener";
|
|
16
17
|
import { setupPixivnViteData } from "@drincs/pixi-vn/vite-listener";
|
|
17
|
-
import { TanStackDevtools } from "@tanstack/react-devtools";
|
|
18
|
-
import { hotkeysDevtoolsPlugin } from "@tanstack/react-hotkeys-devtools";
|
|
19
|
-
import { ReactQueryDevtoolsPanel } from "@tanstack/react-query-devtools";
|
|
20
18
|
import { createRootRouteWithContext, ErrorComponent, Outlet } from "@tanstack/react-router";
|
|
21
|
-
import {
|
|
19
|
+
import { lazy, Suspense } from "react";
|
|
20
|
+
|
|
21
|
+
const DevDevtools = import.meta.env.DEV ? lazy(() => import("@/components/dev-devtools")) : null;
|
|
22
22
|
|
|
23
23
|
export const Route = createRootRouteWithContext<RouterContext>()({
|
|
24
24
|
validateSearch: (search) => SearchParams.setMany(search),
|
|
@@ -29,7 +29,7 @@ export const Route = createRootRouteWithContext<RouterContext>()({
|
|
|
29
29
|
await Promise.all([import("@/content"), initializeIndexedDB(), defineAssets(), useI18n()]);
|
|
30
30
|
await setupPixivnViteData();
|
|
31
31
|
await setupInkHmrListener();
|
|
32
|
-
if (location.pathname !== "/") {
|
|
32
|
+
if (location.pathname !== "/" && narration.stepCounter === 0) {
|
|
33
33
|
const isRefreshSaveExist = await loadRefreshSave();
|
|
34
34
|
if (isRefreshSaveExist) {
|
|
35
35
|
await context.queryClient.invalidateQueries({
|
|
@@ -58,22 +58,11 @@ function RootComponent() {
|
|
|
58
58
|
<Outlet />
|
|
59
59
|
</RootProvider>
|
|
60
60
|
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
{
|
|
67
|
-
name: "UI screens",
|
|
68
|
-
render: <TanStackRouterDevtoolsPanel />,
|
|
69
|
-
},
|
|
70
|
-
{ ...hotkeysDevtoolsPlugin(), name: "Hotkeys" },
|
|
71
|
-
{
|
|
72
|
-
name: "UI cache",
|
|
73
|
-
render: <ReactQueryDevtoolsPanel />,
|
|
74
|
-
},
|
|
75
|
-
]}
|
|
76
|
-
/>
|
|
61
|
+
{DevDevtools && (
|
|
62
|
+
<Suspense>
|
|
63
|
+
<DevDevtools />
|
|
64
|
+
</Suspense>
|
|
65
|
+
)}
|
|
77
66
|
</>
|
|
78
67
|
);
|
|
79
68
|
}
|
|
@@ -8,37 +8,37 @@
|
|
|
8
8
|
|
|
9
9
|
:root {
|
|
10
10
|
--background: oklch(1 0 0);
|
|
11
|
-
--foreground: oklch(0.
|
|
11
|
+
--foreground: oklch(0.145 0 0);
|
|
12
12
|
--card: oklch(1 0 0);
|
|
13
|
-
--card-foreground: oklch(0.
|
|
13
|
+
--card-foreground: oklch(0.145 0 0);
|
|
14
14
|
--popover: oklch(1 0 0);
|
|
15
|
-
--popover-foreground: oklch(0.
|
|
16
|
-
--primary: oklch(0.
|
|
15
|
+
--popover-foreground: oklch(0.145 0 0);
|
|
16
|
+
--primary: oklch(0.205 0 0);
|
|
17
17
|
--primary-foreground: oklch(0.985 0 0);
|
|
18
|
-
--secondary: oklch(0.
|
|
19
|
-
--secondary-foreground: oklch(0.
|
|
20
|
-
--muted: oklch(0.
|
|
21
|
-
--muted-foreground: oklch(0.
|
|
22
|
-
--accent: oklch(0.
|
|
23
|
-
--accent-foreground: oklch(0.
|
|
18
|
+
--secondary: oklch(0.97 0 0);
|
|
19
|
+
--secondary-foreground: oklch(0.205 0 0);
|
|
20
|
+
--muted: oklch(0.97 0 0);
|
|
21
|
+
--muted-foreground: oklch(0.556 0 0);
|
|
22
|
+
--accent: oklch(0.97 0 0);
|
|
23
|
+
--accent-foreground: oklch(0.205 0 0);
|
|
24
24
|
--destructive: oklch(0.577 0.245 27.325);
|
|
25
|
-
--border: oklch(0.
|
|
26
|
-
--input: oklch(0.
|
|
27
|
-
--ring: oklch(0.
|
|
28
|
-
--chart-1: oklch(0.
|
|
29
|
-
--chart-2: oklch(0.
|
|
30
|
-
--chart-3: oklch(0.
|
|
31
|
-
--chart-4: oklch(0.
|
|
32
|
-
--chart-5: oklch(0.
|
|
25
|
+
--border: oklch(0.922 0 0);
|
|
26
|
+
--input: oklch(0.922 0 0);
|
|
27
|
+
--ring: oklch(0.708 0 0);
|
|
28
|
+
--chart-1: oklch(0.87 0 0);
|
|
29
|
+
--chart-2: oklch(0.556 0 0);
|
|
30
|
+
--chart-3: oklch(0.439 0 0);
|
|
31
|
+
--chart-4: oklch(0.371 0 0);
|
|
32
|
+
--chart-5: oklch(0.269 0 0);
|
|
33
33
|
--radius: 0.625rem;
|
|
34
34
|
--sidebar: oklch(0.985 0 0);
|
|
35
|
-
--sidebar-foreground: oklch(0.
|
|
36
|
-
--sidebar-primary: oklch(0.
|
|
35
|
+
--sidebar-foreground: oklch(0.145 0 0);
|
|
36
|
+
--sidebar-primary: oklch(0.205 0 0);
|
|
37
37
|
--sidebar-primary-foreground: oklch(0.985 0 0);
|
|
38
|
-
--sidebar-accent: oklch(0.
|
|
39
|
-
--sidebar-accent-foreground: oklch(0.
|
|
40
|
-
--sidebar-border: oklch(0.
|
|
41
|
-
--sidebar-ring: oklch(0.
|
|
38
|
+
--sidebar-accent: oklch(0.97 0 0);
|
|
39
|
+
--sidebar-accent-foreground: oklch(0.205 0 0);
|
|
40
|
+
--sidebar-border: oklch(0.922 0 0);
|
|
41
|
+
--sidebar-ring: oklch(0.708 0 0);
|
|
42
42
|
}
|
|
43
43
|
|
|
44
44
|
html,
|
|
@@ -56,7 +56,7 @@ body {
|
|
|
56
56
|
|
|
57
57
|
@theme inline {
|
|
58
58
|
--font-heading: var(--font-sans);
|
|
59
|
-
--font-sans: "
|
|
59
|
+
--font-sans: "Geist Variable", sans-serif;
|
|
60
60
|
--color-sidebar-ring: var(--sidebar-ring);
|
|
61
61
|
--color-sidebar-border: var(--sidebar-border);
|
|
62
62
|
--color-sidebar-accent-foreground: var(--sidebar-accent-foreground);
|
|
@@ -98,37 +98,37 @@ body {
|
|
|
98
98
|
}
|
|
99
99
|
|
|
100
100
|
.dark {
|
|
101
|
-
--background: oklch(0.
|
|
101
|
+
--background: oklch(0.145 0 0);
|
|
102
102
|
--foreground: oklch(0.985 0 0);
|
|
103
|
-
--card: oklch(0.
|
|
103
|
+
--card: oklch(0.205 0 0);
|
|
104
104
|
--card-foreground: oklch(0.985 0 0);
|
|
105
|
-
--popover: oklch(0.
|
|
105
|
+
--popover: oklch(0.205 0 0);
|
|
106
106
|
--popover-foreground: oklch(0.985 0 0);
|
|
107
|
-
--primary: oklch(0.
|
|
108
|
-
--primary-foreground: oklch(0.
|
|
109
|
-
--secondary: oklch(0.
|
|
107
|
+
--primary: oklch(0.922 0 0);
|
|
108
|
+
--primary-foreground: oklch(0.205 0 0);
|
|
109
|
+
--secondary: oklch(0.269 0 0);
|
|
110
110
|
--secondary-foreground: oklch(0.985 0 0);
|
|
111
|
-
--muted: oklch(0.
|
|
112
|
-
--muted-foreground: oklch(0.
|
|
113
|
-
--accent: oklch(0.
|
|
111
|
+
--muted: oklch(0.269 0 0);
|
|
112
|
+
--muted-foreground: oklch(0.708 0 0);
|
|
113
|
+
--accent: oklch(0.269 0 0);
|
|
114
114
|
--accent-foreground: oklch(0.985 0 0);
|
|
115
115
|
--destructive: oklch(0.704 0.191 22.216);
|
|
116
116
|
--border: oklch(1 0 0 / 10%);
|
|
117
117
|
--input: oklch(1 0 0 / 15%);
|
|
118
|
-
--ring: oklch(0.
|
|
119
|
-
--chart-1: oklch(0.
|
|
120
|
-
--chart-2: oklch(0.
|
|
121
|
-
--chart-3: oklch(0.
|
|
122
|
-
--chart-4: oklch(0.
|
|
123
|
-
--chart-5: oklch(0.
|
|
124
|
-
--sidebar: oklch(0.
|
|
118
|
+
--ring: oklch(0.556 0 0);
|
|
119
|
+
--chart-1: oklch(0.87 0 0);
|
|
120
|
+
--chart-2: oklch(0.556 0 0);
|
|
121
|
+
--chart-3: oklch(0.439 0 0);
|
|
122
|
+
--chart-4: oklch(0.371 0 0);
|
|
123
|
+
--chart-5: oklch(0.269 0 0);
|
|
124
|
+
--sidebar: oklch(0.205 0 0);
|
|
125
125
|
--sidebar-foreground: oklch(0.985 0 0);
|
|
126
126
|
--sidebar-primary: oklch(0.488 0.243 264.376);
|
|
127
127
|
--sidebar-primary-foreground: oklch(0.985 0 0);
|
|
128
|
-
--sidebar-accent: oklch(0.
|
|
128
|
+
--sidebar-accent: oklch(0.269 0 0);
|
|
129
129
|
--sidebar-accent-foreground: oklch(0.985 0 0);
|
|
130
130
|
--sidebar-border: oklch(1 0 0 / 10%);
|
|
131
|
-
--sidebar-ring: oklch(0.
|
|
131
|
+
--sidebar-ring: oklch(0.556 0 0);
|
|
132
132
|
}
|
|
133
133
|
|
|
134
134
|
@layer base {
|
|
@@ -36,7 +36,7 @@ export default defineConfig(({ mode }) => ({
|
|
|
36
36
|
content: "./src/content/index.ts",
|
|
37
37
|
characters: "./src/content/characters.ts",
|
|
38
38
|
labels: "./src/content/labels/*.label.ts",
|
|
39
|
-
typeFilePath: "./src/pixi-vn
|
|
39
|
+
typeFilePath: "./src/pixi-vn.keys.gen.ts",
|
|
40
40
|
}),
|
|
41
41
|
vitePluginInk({
|
|
42
42
|
inkGlob: "./ink/**/*.ink",
|