create-pixi-vn 2.0.5 → 2.0.7

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.
Files changed (58) hide show
  1. package/package.json +1 -1
  2. package/template-react-vite-muijoy/src/components/menus/choice-menus.tsx +1 -1
  3. package/template-react-vite-muijoy/src/components/menus/main-menu.tsx +5 -2
  4. package/template-react-vite-muijoy/src/components/menus/settings/menus/history.tsx +2 -5
  5. package/template-react-vite-muijoy/src/components/modals/input-request-dialogues.tsx +1 -1
  6. package/template-react-vite-muijoy/src/components/quick-tools.tsx +1 -1
  7. package/template-react-vite-muijoy/src/components/{scrrens → screens}/narration/index.tsx +2 -2
  8. package/template-react-vite-muijoy/src/components/{scrrens → screens}/narration/narration-cards.tsx +1 -1
  9. package/template-react-vite-muijoy/src/constants.ts +2 -0
  10. package/template-react-vite-muijoy/src/lib/hooks/hotkeys-hooks.ts +1 -1
  11. package/template-react-vite-muijoy/src/lib/hooks/props-hooks.ts +4 -2
  12. package/{template-react-vite-muijoy-ink-tauri/src/lib/query/interface-query.ts → template-react-vite-muijoy/src/lib/query/narration-query.ts} +7 -8
  13. package/template-react-vite-muijoy/src/routes/__root.tsx +2 -2
  14. package/template-react-vite-muijoy/src/routes/game/narration.tsx +2 -2
  15. package/template-react-vite-muijoy-ink/src/components/menus/choice-menus.tsx +1 -1
  16. package/template-react-vite-muijoy-ink/src/components/menus/main-menu.tsx +5 -2
  17. package/template-react-vite-muijoy-ink/src/components/menus/settings/menus/history.tsx +2 -5
  18. package/template-react-vite-muijoy-ink/src/components/modals/input-request-dialogues.tsx +1 -1
  19. package/template-react-vite-muijoy-ink/src/components/quick-tools.tsx +1 -1
  20. package/{template-react-vite-muijoy-ink-tauri/src/components/scrrens → template-react-vite-muijoy-ink/src/components/screens}/narration/index.tsx +2 -2
  21. package/{template-react-vite-muijoy-tauri/src/components/scrrens → template-react-vite-muijoy-ink/src/components/screens}/narration/narration-cards.tsx +1 -1
  22. package/template-react-vite-muijoy-ink/src/constants.ts +2 -0
  23. package/template-react-vite-muijoy-ink/src/lib/hooks/hotkeys-hooks.ts +1 -1
  24. package/template-react-vite-muijoy-ink/src/lib/hooks/props-hooks.ts +4 -2
  25. package/template-react-vite-muijoy-ink/src/lib/query/{interface-query.ts → narration-query.ts} +7 -8
  26. package/template-react-vite-muijoy-ink/src/routes/__root.tsx +2 -2
  27. package/template-react-vite-muijoy-ink/src/routes/game/narration.tsx +2 -2
  28. package/template-react-vite-muijoy-ink-tauri/package-lock.json +8 -8
  29. package/template-react-vite-muijoy-ink-tauri/src/components/menus/choice-menus.tsx +1 -1
  30. package/template-react-vite-muijoy-ink-tauri/src/components/menus/main-menu.tsx +5 -2
  31. package/template-react-vite-muijoy-ink-tauri/src/components/menus/settings/menus/history.tsx +2 -5
  32. package/template-react-vite-muijoy-ink-tauri/src/components/modals/input-request-dialogues.tsx +1 -1
  33. package/template-react-vite-muijoy-ink-tauri/src/components/quick-tools.tsx +1 -1
  34. package/{template-react-vite-muijoy-ink/src/components/scrrens → template-react-vite-muijoy-ink-tauri/src/components/screens}/narration/index.tsx +2 -2
  35. package/{template-react-vite-muijoy-ink/src/components/scrrens → template-react-vite-muijoy-ink-tauri/src/components/screens}/narration/narration-cards.tsx +1 -1
  36. package/template-react-vite-muijoy-ink-tauri/src/constants.ts +2 -0
  37. package/template-react-vite-muijoy-ink-tauri/src/lib/hooks/hotkeys-hooks.ts +1 -1
  38. package/template-react-vite-muijoy-ink-tauri/src/lib/hooks/props-hooks.ts +4 -2
  39. package/{template-react-vite-muijoy-tauri/src/lib/query/interface-query.ts → template-react-vite-muijoy-ink-tauri/src/lib/query/narration-query.ts} +7 -8
  40. package/template-react-vite-muijoy-ink-tauri/src/routes/__root.tsx +2 -2
  41. package/template-react-vite-muijoy-ink-tauri/src/routes/game/narration.tsx +2 -2
  42. package/template-react-vite-muijoy-tauri/src/components/menus/choice-menus.tsx +1 -1
  43. package/template-react-vite-muijoy-tauri/src/components/menus/main-menu.tsx +5 -2
  44. package/template-react-vite-muijoy-tauri/src/components/menus/settings/menus/history.tsx +2 -5
  45. package/template-react-vite-muijoy-tauri/src/components/modals/input-request-dialogues.tsx +1 -1
  46. package/template-react-vite-muijoy-tauri/src/components/quick-tools.tsx +1 -1
  47. package/template-react-vite-muijoy-tauri/src/components/{scrrens → screens}/narration/index.tsx +2 -2
  48. package/{template-react-vite-muijoy-ink-tauri/src/components/scrrens → template-react-vite-muijoy-tauri/src/components/screens}/narration/narration-cards.tsx +1 -1
  49. package/template-react-vite-muijoy-tauri/src/constants.ts +2 -0
  50. package/template-react-vite-muijoy-tauri/src/lib/hooks/hotkeys-hooks.ts +1 -1
  51. package/template-react-vite-muijoy-tauri/src/lib/hooks/props-hooks.ts +4 -2
  52. package/{template-react-vite-muijoy/src/lib/query/interface-query.ts → template-react-vite-muijoy-tauri/src/lib/query/narration-query.ts} +7 -8
  53. package/template-react-vite-muijoy-tauri/src/routes/__root.tsx +2 -2
  54. package/template-react-vite-muijoy-tauri/src/routes/game/narration.tsx +2 -2
  55. /package/template-react-vite-muijoy/src/components/{scrrens → screens}/narration/click-overlay.tsx +0 -0
  56. /package/template-react-vite-muijoy-ink/src/components/{scrrens → screens}/narration/click-overlay.tsx +0 -0
  57. /package/template-react-vite-muijoy-ink-tauri/src/components/{scrrens → screens}/narration/click-overlay.tsx +0 -0
  58. /package/template-react-vite-muijoy-tauri/src/components/{scrrens → screens}/narration/click-overlay.tsx +0 -0
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "create-pixi-vn",
3
3
  "description": "Create a new Pixi’VN project",
4
- "version": "2.0.5",
4
+ "version": "2.0.7",
5
5
  "type": "module",
6
6
  "license": "GPL-3.0",
7
7
  "author": "DRincs-Productions",
@@ -1,6 +1,6 @@
1
1
  import { Button } from "@/components/ui/button";
2
2
  import { useNarrationFunctions } from "@/lib/hooks/narration-hooks";
3
- import { useQueryChoiceMenuOptions } from "@/lib/query/interface-query";
3
+ import { useQueryChoiceMenuOptions } from "@/lib/query/narration-query";
4
4
  import { GameStatus } from "@/lib/stores/game-status-store";
5
5
  import { TextDisplaySettings } from "@/lib/stores/text-display-settings-store";
6
6
  import { useDebouncedValue } from "@tanstack/react-pacer";
@@ -3,10 +3,13 @@ import { Button } from "@/components/ui/button";
3
3
  import { Card, CardContent } from "@/components/ui/card";
4
4
  import { Spinner } from "@/components/ui/spinner";
5
5
  import { Tooltip, TooltipContent, TooltipTrigger } from "@/components/ui/tooltip";
6
- import { CANVAS_UI_LAYER_NAME, overlayTextShadowClass } from "@/constants";
6
+ import {
7
+ CANVAS_UI_LAYER_NAME,
8
+ INTERFACE_DATA_USE_QUERY_KEY,
9
+ overlayTextShadowClass,
10
+ } from "@/constants";
7
11
  import { useSetSearchParamState } from "@/lib/hooks/navigation-hooks";
8
12
  import { useGameProps } from "@/lib/hooks/props-hooks";
9
- import { INTERFACE_DATA_USE_QUEY_KEY as INTERFACE_DATA_USE_QUERY_KEY } from "@/lib/query/interface-query";
10
13
  import { useQueryLastSave } from "@/lib/query/save-query";
11
14
  import { InterfaceSettings } from "@/lib/stores/interface-settings-store";
12
15
  import { cn } from "@/lib/utils";
@@ -11,7 +11,7 @@ import {
11
11
  import { Kbd } from "@/components/ui/kbd";
12
12
  import { ScrollArea } from "@/components/ui/scroll-area";
13
13
  import { useImageSrc } from "@/lib/hooks/image-hooks";
14
- import { useQueryNarrativeHistory } from "@/lib/query/interface-query";
14
+ import { useQueryNarrativeHistory } from "@/lib/query/narration-query";
15
15
  import { cn } from "@/lib/utils";
16
16
  import { useDebouncedValue } from "@tanstack/react-pacer";
17
17
  import { Check, Search } from "lucide-react";
@@ -42,10 +42,7 @@ export function HistoryList({ searchString }: { searchString?: string }) {
42
42
  <Item key={key} variant="outline">
43
43
  {item.character && (
44
44
  <ItemMedia variant="image">
45
- <HistoryItemAvatar
46
- icon={item.icon}
47
- character={item.character}
48
- />
45
+ <HistoryItemAvatar icon={item.icon} character={item.character} />
49
46
  </ItemMedia>
50
47
  )}
51
48
  <ItemContent
@@ -2,7 +2,7 @@ import { Button } from "@/components/ui/button";
2
2
  import { Dialog, DialogContent, DialogFooter } from "@/components/ui/dialog";
3
3
  import { Input } from "@/components/ui/input";
4
4
  import { useGameProps } from "@/lib/hooks/props-hooks";
5
- import { useQueryDialogue, useQueryInputValue } from "@/lib/query/interface-query";
5
+ import { useQueryDialogue, useQueryInputValue } from "@/lib/query/narration-query";
6
6
  import { TextDisplaySettings } from "@/lib/stores/text-display-settings-store";
7
7
  import { narration } from "@drincs/pixi-vn";
8
8
  import { useDebouncedValue } from "@tanstack/react-pacer";
@@ -5,7 +5,7 @@ import { useNarrationFunctions } from "@/lib/hooks/narration-hooks";
5
5
  import { useSetSearchParamState } from "@/lib/hooks/navigation-hooks";
6
6
  import { useGameProps } from "@/lib/hooks/props-hooks";
7
7
  import { useWheelActions } from "@/lib/hooks/quick-tools-hooks";
8
- import { useQueryCanGoBack } from "@/lib/query/interface-query";
8
+ import { useQueryCanGoBack } from "@/lib/query/narration-query";
9
9
  import {
10
10
  LAST_SAVE_USE_QUEY_KEY,
11
11
  SAVES_USE_QUEY_KEY,
@@ -1,7 +1,7 @@
1
1
  import { ChoiceMenu } from "@/components/menus/choice-menus";
2
- import { NarrationCards } from "@/components/scrrens/narration/narration-cards";
2
+ import { NarrationCards } from "@/components/screens/narration/narration-cards";
3
3
  import { ResizableHandle, ResizablePanel, ResizablePanelGroup } from "@/components/ui/resizable";
4
- import { useQueryDialogue } from "@/lib/query/interface-query";
4
+ import { useQueryDialogue } from "@/lib/query/narration-query";
5
5
 
6
6
  export function NarrationScreen() {
7
7
  const { data: { animatedText, text } = {} } = useQueryDialogue();
@@ -6,7 +6,7 @@ import { Image } from "@/components/ui/image";
6
6
  import { ResizableHandle, ResizablePanel, ResizablePanelGroup } from "@/components/ui/resizable";
7
7
  import { ScrollArea } from "@/components/ui/scroll-area";
8
8
  import { useNarrationPointerHandlers } from "@/lib/hooks/narration-hooks";
9
- import { useQueryDialogue } from "@/lib/query/interface-query";
9
+ import { useQueryDialogue } from "@/lib/query/narration-query";
10
10
  import { TextDisplaySettings } from "@/lib/stores/text-display-settings-store";
11
11
  import { useSelector } from "@tanstack/react-store";
12
12
  import { type RefObject, useCallback, useRef } from "react";
@@ -9,5 +9,7 @@ export const SFX_CHANNEL_NAME = "sfx";
9
9
 
10
10
  export const SKIP_DELAY = 100;
11
11
 
12
+ export const INTERFACE_DATA_USE_QUERY_KEY = "interface_data_use_query_key";
13
+
12
14
  /** Text-shadow that outlines text with black so it remains legible over any image or canvas background. */
13
15
  export const overlayTextShadowClass = "[text-shadow:0_0_3px_black,0_0_6px_black]";
@@ -2,7 +2,7 @@ import { useAlertDialog } from "@/components/providers/alert-dialog-provider";
2
2
  import { useNarrationFunctions } from "@/lib/hooks/narration-hooks";
3
3
  import { useSetSearchParamState } from "@/lib/hooks/navigation-hooks";
4
4
  import { useGameProps } from "@/lib/hooks/props-hooks";
5
- import { useQueryInputValue } from "@/lib/query/interface-query";
5
+ import { useQueryInputValue } from "@/lib/query/narration-query";
6
6
  import {
7
7
  LAST_SAVE_USE_QUEY_KEY,
8
8
  SAVES_USE_QUEY_KEY,
@@ -1,4 +1,4 @@
1
- import { INTERFACE_DATA_USE_QUEY_KEY } from "@/lib/query/interface-query";
1
+ import { INTERFACE_DATA_USE_QUERY_KEY } from "@/constants";
2
2
  import type { StepLabelProps } from "@drincs/pixi-vn";
3
3
  import { useQueryClient } from "@tanstack/react-query";
4
4
  import { useNavigate } from "@tanstack/react-router";
@@ -18,7 +18,9 @@ export function useGameProps(): StepLabelProps {
18
18
  toast,
19
19
  invalidateInterfaceData: async (delay: number = 0) => {
20
20
  if (delay > 0) await new Promise((resolve) => setTimeout(resolve, delay));
21
- return await queryClient.invalidateQueries({ queryKey: [INTERFACE_DATA_USE_QUEY_KEY] });
21
+ return await queryClient.invalidateQueries({
22
+ queryKey: [INTERFACE_DATA_USE_QUERY_KEY],
23
+ });
22
24
  },
23
25
  };
24
26
  }
@@ -1,13 +1,12 @@
1
+ import { INTERFACE_DATA_USE_QUERY_KEY } from "@/constants";
1
2
  import { type CharacterInterface, narration, stepHistory } from "@drincs/pixi-vn";
2
3
  import { useQuery, useQueryClient } from "@tanstack/react-query";
3
4
  import { useTranslation } from "react-i18next";
4
5
 
5
- export const INTERFACE_DATA_USE_QUEY_KEY = "interface_data_use_quey_key";
6
-
7
6
  const CAN_GO_BACK_USE_QUEY_KEY = "can_go_back_use_quey_key";
8
7
  export function useQueryCanGoBack() {
9
8
  return useQuery({
10
- queryKey: [INTERFACE_DATA_USE_QUEY_KEY, CAN_GO_BACK_USE_QUEY_KEY],
9
+ queryKey: [INTERFACE_DATA_USE_QUERY_KEY, CAN_GO_BACK_USE_QUEY_KEY],
11
10
  queryFn: async () => stepHistory.canGoBack,
12
11
  });
13
12
  }
@@ -16,7 +15,7 @@ const CHOICE_MENU_OPTIONS_USE_QUEY_KEY = "choice_menu_options_use_quey_key";
16
15
  export function useQueryChoiceMenuOptions() {
17
16
  const { t } = useTranslation(["narration"]);
18
17
  return useQuery({
19
- queryKey: [INTERFACE_DATA_USE_QUEY_KEY, CHOICE_MENU_OPTIONS_USE_QUEY_KEY],
18
+ queryKey: [INTERFACE_DATA_USE_QUERY_KEY, CHOICE_MENU_OPTIONS_USE_QUEY_KEY],
20
19
  queryFn: async () =>
21
20
  narration.choices?.map((option) => ({
22
21
  ...option,
@@ -31,7 +30,7 @@ export function useQueryChoiceMenuOptions() {
31
30
  const INPUT_VALUE_USE_QUEY_KEY = "input_value_use_quey_key";
32
31
  export function useQueryInputValue<T>() {
33
32
  return useQuery({
34
- queryKey: [INTERFACE_DATA_USE_QUEY_KEY, INPUT_VALUE_USE_QUEY_KEY],
33
+ queryKey: [INTERFACE_DATA_USE_QUERY_KEY, INPUT_VALUE_USE_QUEY_KEY],
35
34
  queryFn: async () => ({
36
35
  isRequired: narration.isRequiredInput,
37
36
  type: narration.inputType,
@@ -51,7 +50,7 @@ export function useQueryDialogue() {
51
50
  const queryClient = useQueryClient();
52
51
 
53
52
  return useQuery<DialogueModel>({
54
- queryKey: [INTERFACE_DATA_USE_QUEY_KEY, DIALOGUE_USE_QUEY_KEY],
53
+ queryKey: [INTERFACE_DATA_USE_QUERY_KEY, DIALOGUE_USE_QUEY_KEY],
55
54
  queryFn: async ({ queryKey }) => {
56
55
  const dialogue = narration.dialogue;
57
56
  let text = dialogue?.text;
@@ -93,7 +92,7 @@ export function useQueryDialogue() {
93
92
  const CAN_GO_NEXT_USE_QUEY_KEY = "can_go_next_use_quey_key";
94
93
  export function useQueryCanGoNext() {
95
94
  return useQuery({
96
- queryKey: [INTERFACE_DATA_USE_QUEY_KEY, CAN_GO_NEXT_USE_QUEY_KEY],
95
+ queryKey: [INTERFACE_DATA_USE_QUERY_KEY, CAN_GO_NEXT_USE_QUEY_KEY],
97
96
  queryFn: async () => narration.canContinue && !narration.isRequiredInput,
98
97
  });
99
98
  }
@@ -104,7 +103,7 @@ export function useQueryNarrativeHistory({ searchString }: { searchString?: stri
104
103
  const normalizedSearch = searchString?.toLowerCase().trim();
105
104
 
106
105
  return useQuery({
107
- queryKey: [INTERFACE_DATA_USE_QUEY_KEY, NARRATIVE_HISTORY_USE_QUEY_KEY],
106
+ queryKey: [INTERFACE_DATA_USE_QUERY_KEY, NARRATIVE_HISTORY_USE_QUEY_KEY],
108
107
  queryFn: async () => {
109
108
  const promises = stepHistory.narrativeHistory.map(async (step) => {
110
109
  const character = step.dialogue?.character;
@@ -2,10 +2,10 @@ import { PendingComponent } from "@/components/loading";
2
2
  import { SettingsDialogue } from "@/components/menus/settings";
3
3
  import { OfflineAllert } from "@/components/modals/error-allerts";
4
4
  import { RootProvider } from "@/components/providers/root-provider";
5
+ import { INTERFACE_DATA_USE_QUERY_KEY } from "@/constants";
5
6
  import { useConfirmBackNavigation } from "@/lib/hooks/navigation-hooks";
6
7
  import { useAutoSaveOnPageClose } from "@/lib/hooks/save-hooks";
7
8
  import { useI18n } from "@/lib/i18n";
8
- import { INTERFACE_DATA_USE_QUEY_KEY } from "@/lib/query/interface-query";
9
9
  import { SearchParams } from "@/lib/stores/search-param-store";
10
10
  import { defineAssets } from "@/lib/utils/assets-utility";
11
11
  import { initializeIndexedDB } from "@/lib/utils/db-utility";
@@ -30,7 +30,7 @@ export const Route = createRootRouteWithContext<RouterContext>()({
30
30
  const isRefreshSaveExist = await loadRefreshSave();
31
31
  if (isRefreshSaveExist) {
32
32
  await context.queryClient.invalidateQueries({
33
- queryKey: [INTERFACE_DATA_USE_QUEY_KEY],
33
+ queryKey: [INTERFACE_DATA_USE_QUERY_KEY],
34
34
  });
35
35
  }
36
36
  }
@@ -1,5 +1,5 @@
1
- import { NarrationScreen } from "@/components/scrrens/narration";
2
- import { NarrationClickOverlay } from "@/components/scrrens/narration/click-overlay";
1
+ import { NarrationScreen } from "@/components/screens/narration";
2
+ import { NarrationClickOverlay } from "@/components/screens/narration/click-overlay";
3
3
  import { useNarrationHotkeys } from "@/lib/hooks/hotkeys-hooks";
4
4
  import { useSkipAutoDetector } from "@/lib/hooks/narration-hooks";
5
5
  import { createFileRoute } from "@tanstack/react-router";
@@ -1,6 +1,6 @@
1
1
  import { Button } from "@/components/ui/button";
2
2
  import { useNarrationFunctions } from "@/lib/hooks/narration-hooks";
3
- import { useQueryChoiceMenuOptions } from "@/lib/query/interface-query";
3
+ import { useQueryChoiceMenuOptions } from "@/lib/query/narration-query";
4
4
  import { GameStatus } from "@/lib/stores/game-status-store";
5
5
  import { TextDisplaySettings } from "@/lib/stores/text-display-settings-store";
6
6
  import { useDebouncedValue } from "@tanstack/react-pacer";
@@ -3,10 +3,13 @@ import { Button } from "@/components/ui/button";
3
3
  import { Card, CardContent } from "@/components/ui/card";
4
4
  import { Spinner } from "@/components/ui/spinner";
5
5
  import { Tooltip, TooltipContent, TooltipTrigger } from "@/components/ui/tooltip";
6
- import { CANVAS_UI_LAYER_NAME, overlayTextShadowClass } from "@/constants";
6
+ import {
7
+ CANVAS_UI_LAYER_NAME,
8
+ INTERFACE_DATA_USE_QUERY_KEY,
9
+ overlayTextShadowClass,
10
+ } from "@/constants";
7
11
  import { useSetSearchParamState } from "@/lib/hooks/navigation-hooks";
8
12
  import { useGameProps } from "@/lib/hooks/props-hooks";
9
- import { INTERFACE_DATA_USE_QUEY_KEY as INTERFACE_DATA_USE_QUERY_KEY } from "@/lib/query/interface-query";
10
13
  import { useQueryLastSave } from "@/lib/query/save-query";
11
14
  import { InterfaceSettings } from "@/lib/stores/interface-settings-store";
12
15
  import { cn } from "@/lib/utils";
@@ -11,7 +11,7 @@ import {
11
11
  import { Kbd } from "@/components/ui/kbd";
12
12
  import { ScrollArea } from "@/components/ui/scroll-area";
13
13
  import { useImageSrc } from "@/lib/hooks/image-hooks";
14
- import { useQueryNarrativeHistory } from "@/lib/query/interface-query";
14
+ import { useQueryNarrativeHistory } from "@/lib/query/narration-query";
15
15
  import { cn } from "@/lib/utils";
16
16
  import { useDebouncedValue } from "@tanstack/react-pacer";
17
17
  import { Check, Search } from "lucide-react";
@@ -42,10 +42,7 @@ export function HistoryList({ searchString }: { searchString?: string }) {
42
42
  <Item key={key} variant="outline">
43
43
  {item.character && (
44
44
  <ItemMedia variant="image">
45
- <HistoryItemAvatar
46
- icon={item.icon}
47
- character={item.character}
48
- />
45
+ <HistoryItemAvatar icon={item.icon} character={item.character} />
49
46
  </ItemMedia>
50
47
  )}
51
48
  <ItemContent
@@ -2,7 +2,7 @@ import { Button } from "@/components/ui/button";
2
2
  import { Dialog, DialogContent, DialogFooter } from "@/components/ui/dialog";
3
3
  import { Input } from "@/components/ui/input";
4
4
  import { useGameProps } from "@/lib/hooks/props-hooks";
5
- import { useQueryDialogue, useQueryInputValue } from "@/lib/query/interface-query";
5
+ import { useQueryDialogue, useQueryInputValue } from "@/lib/query/narration-query";
6
6
  import { TextDisplaySettings } from "@/lib/stores/text-display-settings-store";
7
7
  import { narration } from "@drincs/pixi-vn";
8
8
  import { useDebouncedValue } from "@tanstack/react-pacer";
@@ -5,7 +5,7 @@ import { useNarrationFunctions } from "@/lib/hooks/narration-hooks";
5
5
  import { useSetSearchParamState } from "@/lib/hooks/navigation-hooks";
6
6
  import { useGameProps } from "@/lib/hooks/props-hooks";
7
7
  import { useWheelActions } from "@/lib/hooks/quick-tools-hooks";
8
- import { useQueryCanGoBack } from "@/lib/query/interface-query";
8
+ import { useQueryCanGoBack } from "@/lib/query/narration-query";
9
9
  import {
10
10
  LAST_SAVE_USE_QUEY_KEY,
11
11
  SAVES_USE_QUEY_KEY,
@@ -1,7 +1,7 @@
1
1
  import { ChoiceMenu } from "@/components/menus/choice-menus";
2
- import { NarrationCards } from "@/components/scrrens/narration/narration-cards";
2
+ import { NarrationCards } from "@/components/screens/narration/narration-cards";
3
3
  import { ResizableHandle, ResizablePanel, ResizablePanelGroup } from "@/components/ui/resizable";
4
- import { useQueryDialogue } from "@/lib/query/interface-query";
4
+ import { useQueryDialogue } from "@/lib/query/narration-query";
5
5
 
6
6
  export function NarrationScreen() {
7
7
  const { data: { animatedText, text } = {} } = useQueryDialogue();
@@ -6,7 +6,7 @@ import { Image } from "@/components/ui/image";
6
6
  import { ResizableHandle, ResizablePanel, ResizablePanelGroup } from "@/components/ui/resizable";
7
7
  import { ScrollArea } from "@/components/ui/scroll-area";
8
8
  import { useNarrationPointerHandlers } from "@/lib/hooks/narration-hooks";
9
- import { useQueryDialogue } from "@/lib/query/interface-query";
9
+ import { useQueryDialogue } from "@/lib/query/narration-query";
10
10
  import { TextDisplaySettings } from "@/lib/stores/text-display-settings-store";
11
11
  import { useSelector } from "@tanstack/react-store";
12
12
  import { type RefObject, useCallback, useRef } from "react";
@@ -9,5 +9,7 @@ export const SFX_CHANNEL_NAME = "sfx";
9
9
 
10
10
  export const SKIP_DELAY = 100;
11
11
 
12
+ export const INTERFACE_DATA_USE_QUERY_KEY = "interface_data_use_query_key";
13
+
12
14
  /** Text-shadow that outlines text with black so it remains legible over any image or canvas background. */
13
15
  export const overlayTextShadowClass = "[text-shadow:0_0_3px_black,0_0_6px_black]";
@@ -2,7 +2,7 @@ import { useAlertDialog } from "@/components/providers/alert-dialog-provider";
2
2
  import { useNarrationFunctions } from "@/lib/hooks/narration-hooks";
3
3
  import { useSetSearchParamState } from "@/lib/hooks/navigation-hooks";
4
4
  import { useGameProps } from "@/lib/hooks/props-hooks";
5
- import { useQueryInputValue } from "@/lib/query/interface-query";
5
+ import { useQueryInputValue } from "@/lib/query/narration-query";
6
6
  import {
7
7
  LAST_SAVE_USE_QUEY_KEY,
8
8
  SAVES_USE_QUEY_KEY,
@@ -1,4 +1,4 @@
1
- import { INTERFACE_DATA_USE_QUEY_KEY } from "@/lib/query/interface-query";
1
+ import { INTERFACE_DATA_USE_QUERY_KEY } from "@/constants";
2
2
  import type { StepLabelProps } from "@drincs/pixi-vn";
3
3
  import { useQueryClient } from "@tanstack/react-query";
4
4
  import { useNavigate } from "@tanstack/react-router";
@@ -18,7 +18,9 @@ export function useGameProps(): StepLabelProps {
18
18
  toast,
19
19
  invalidateInterfaceData: async (delay: number = 0) => {
20
20
  if (delay > 0) await new Promise((resolve) => setTimeout(resolve, delay));
21
- return await queryClient.invalidateQueries({ queryKey: [INTERFACE_DATA_USE_QUEY_KEY] });
21
+ return await queryClient.invalidateQueries({
22
+ queryKey: [INTERFACE_DATA_USE_QUERY_KEY],
23
+ });
22
24
  },
23
25
  };
24
26
  }
@@ -1,13 +1,12 @@
1
+ import { INTERFACE_DATA_USE_QUERY_KEY } from "@/constants";
1
2
  import { type CharacterInterface, narration, stepHistory } from "@drincs/pixi-vn";
2
3
  import { useQuery, useQueryClient } from "@tanstack/react-query";
3
4
  import { useTranslation } from "react-i18next";
4
5
 
5
- export const INTERFACE_DATA_USE_QUEY_KEY = "interface_data_use_quey_key";
6
-
7
6
  const CAN_GO_BACK_USE_QUEY_KEY = "can_go_back_use_quey_key";
8
7
  export function useQueryCanGoBack() {
9
8
  return useQuery({
10
- queryKey: [INTERFACE_DATA_USE_QUEY_KEY, CAN_GO_BACK_USE_QUEY_KEY],
9
+ queryKey: [INTERFACE_DATA_USE_QUERY_KEY, CAN_GO_BACK_USE_QUEY_KEY],
11
10
  queryFn: async () => stepHistory.canGoBack,
12
11
  });
13
12
  }
@@ -16,7 +15,7 @@ const CHOICE_MENU_OPTIONS_USE_QUEY_KEY = "choice_menu_options_use_quey_key";
16
15
  export function useQueryChoiceMenuOptions() {
17
16
  const { t } = useTranslation(["narration"]);
18
17
  return useQuery({
19
- queryKey: [INTERFACE_DATA_USE_QUEY_KEY, CHOICE_MENU_OPTIONS_USE_QUEY_KEY],
18
+ queryKey: [INTERFACE_DATA_USE_QUERY_KEY, CHOICE_MENU_OPTIONS_USE_QUEY_KEY],
20
19
  queryFn: async () =>
21
20
  narration.choices?.map((option) => ({
22
21
  ...option,
@@ -31,7 +30,7 @@ export function useQueryChoiceMenuOptions() {
31
30
  const INPUT_VALUE_USE_QUEY_KEY = "input_value_use_quey_key";
32
31
  export function useQueryInputValue<T>() {
33
32
  return useQuery({
34
- queryKey: [INTERFACE_DATA_USE_QUEY_KEY, INPUT_VALUE_USE_QUEY_KEY],
33
+ queryKey: [INTERFACE_DATA_USE_QUERY_KEY, INPUT_VALUE_USE_QUEY_KEY],
35
34
  queryFn: async () => ({
36
35
  isRequired: narration.isRequiredInput,
37
36
  type: narration.inputType,
@@ -51,7 +50,7 @@ export function useQueryDialogue() {
51
50
  const queryClient = useQueryClient();
52
51
 
53
52
  return useQuery<DialogueModel>({
54
- queryKey: [INTERFACE_DATA_USE_QUEY_KEY, DIALOGUE_USE_QUEY_KEY],
53
+ queryKey: [INTERFACE_DATA_USE_QUERY_KEY, DIALOGUE_USE_QUEY_KEY],
55
54
  queryFn: async ({ queryKey }) => {
56
55
  const dialogue = narration.dialogue;
57
56
  let text = dialogue?.text;
@@ -93,7 +92,7 @@ export function useQueryDialogue() {
93
92
  const CAN_GO_NEXT_USE_QUEY_KEY = "can_go_next_use_quey_key";
94
93
  export function useQueryCanGoNext() {
95
94
  return useQuery({
96
- queryKey: [INTERFACE_DATA_USE_QUEY_KEY, CAN_GO_NEXT_USE_QUEY_KEY],
95
+ queryKey: [INTERFACE_DATA_USE_QUERY_KEY, CAN_GO_NEXT_USE_QUEY_KEY],
97
96
  queryFn: async () => narration.canContinue && !narration.isRequiredInput,
98
97
  });
99
98
  }
@@ -104,7 +103,7 @@ export function useQueryNarrativeHistory({ searchString }: { searchString?: stri
104
103
  const normalizedSearch = searchString?.toLowerCase().trim();
105
104
 
106
105
  return useQuery({
107
- queryKey: [INTERFACE_DATA_USE_QUEY_KEY, NARRATIVE_HISTORY_USE_QUEY_KEY],
106
+ queryKey: [INTERFACE_DATA_USE_QUERY_KEY, NARRATIVE_HISTORY_USE_QUEY_KEY],
108
107
  queryFn: async () => {
109
108
  const promises = stepHistory.narrativeHistory.map(async (step) => {
110
109
  const character = step.dialogue?.character;
@@ -2,11 +2,11 @@ import { PendingComponent } from "@/components/loading";
2
2
  import { SettingsDialogue } from "@/components/menus/settings";
3
3
  import { OfflineAllert } from "@/components/modals/error-allerts";
4
4
  import { RootProvider } from "@/components/providers/root-provider";
5
+ import { INTERFACE_DATA_USE_QUERY_KEY } from "@/constants";
5
6
  import useInkInitialization from "@/lib/hooks/ink-hooks";
6
7
  import { useConfirmBackNavigation } from "@/lib/hooks/navigation-hooks";
7
8
  import { useAutoSaveOnPageClose } from "@/lib/hooks/save-hooks";
8
9
  import { useI18n } from "@/lib/i18n";
9
- import { INTERFACE_DATA_USE_QUEY_KEY } from "@/lib/query/interface-query";
10
10
  import { SearchParams } from "@/lib/stores/search-param-store";
11
11
  import { defineAssets } from "@/lib/utils/assets-utility";
12
12
  import { initializeIndexedDB } from "@/lib/utils/db-utility";
@@ -33,7 +33,7 @@ export const Route = createRootRouteWithContext<RouterContext>()({
33
33
  const isRefreshSaveExist = await loadRefreshSave();
34
34
  if (isRefreshSaveExist) {
35
35
  await context.queryClient.invalidateQueries({
36
- queryKey: [INTERFACE_DATA_USE_QUEY_KEY],
36
+ queryKey: [INTERFACE_DATA_USE_QUERY_KEY],
37
37
  });
38
38
  }
39
39
  }
@@ -1,5 +1,5 @@
1
- import { NarrationScreen } from "@/components/scrrens/narration";
2
- import { NarrationClickOverlay } from "@/components/scrrens/narration/click-overlay";
1
+ import { NarrationScreen } from "@/components/screens/narration";
2
+ import { NarrationClickOverlay } from "@/components/screens/narration/click-overlay";
3
3
  import { useNarrationHotkeys } from "@/lib/hooks/hotkeys-hooks";
4
4
  import { useSkipAutoDetector } from "@/lib/hooks/narration-hooks";
5
5
  import { createFileRoute } from "@tanstack/react-router";
@@ -10,8 +10,8 @@
10
10
  "license": "GPL-3.0",
11
11
  "dependencies": {
12
12
  "@base-ui/react": "^1.5.0",
13
- "@drincs/pixi-vn": "^1.8.11",
14
- "@drincs/pixi-vn-ink": "^1.0.4",
13
+ "@drincs/pixi-vn": "^1.8.13",
14
+ "@drincs/pixi-vn-ink": "^1.0.5",
15
15
  "@drincs/pixi-vn-spine": "^0.2.1",
16
16
  "@tailwindcss/vite": "^4.3.0",
17
17
  "@tanstack/react-devtools": "^0.10.5",
@@ -2119,9 +2119,9 @@
2119
2119
  }
2120
2120
  },
2121
2121
  "node_modules/@drincs/pixi-vn": {
2122
- "version": "1.8.12",
2123
- "resolved": "https://registry.npmjs.org/@drincs/pixi-vn/-/pixi-vn-1.8.12.tgz",
2124
- "integrity": "sha512-1Ff8mZ+hYQzpA2F/LAH37f6cfEewJcYtE4hjLcJRQCv2ql+ti12JAAzCUItopUt8VWEKFGY43J8XILAc66wfjA==",
2122
+ "version": "1.8.13",
2123
+ "resolved": "https://registry.npmjs.org/@drincs/pixi-vn/-/pixi-vn-1.8.13.tgz",
2124
+ "integrity": "sha512-UFo1cUYmy3FSgqKqjHkA5NpTXSwjk24WMZAkGe9tgoVLcexi1d+TmhJGSt1VloPjw/hHwYKaip2vyrmBACZ1fA==",
2125
2125
  "license": "LGPL-2.1",
2126
2126
  "workspaces": [
2127
2127
  "sandbox"
@@ -2146,9 +2146,9 @@
2146
2146
  }
2147
2147
  },
2148
2148
  "node_modules/@drincs/pixi-vn-ink": {
2149
- "version": "1.0.4",
2150
- "resolved": "https://registry.npmjs.org/@drincs/pixi-vn-ink/-/pixi-vn-ink-1.0.4.tgz",
2151
- "integrity": "sha512-iRBWZTVxXsxqH9zHL7gERreg2103Arqfg6lxPld0PkKs1m0LVCgwVy1ZBuxY29FIU14jyYvHcmr9uU/EVmw8tA==",
2149
+ "version": "1.0.5",
2150
+ "resolved": "https://registry.npmjs.org/@drincs/pixi-vn-ink/-/pixi-vn-ink-1.0.5.tgz",
2151
+ "integrity": "sha512-oYp4xkp2MQJHebyDfnD90U3dtSZ/9ARwMehg1OvMwR7MRbpske9NNM6OJ9ijA68j/1TPJP/LUuDPpdNmDQwcRQ==",
2152
2152
  "license": "LGPL-2.1",
2153
2153
  "workspaces": [
2154
2154
  "playground"
@@ -1,6 +1,6 @@
1
1
  import { Button } from "@/components/ui/button";
2
2
  import { useNarrationFunctions } from "@/lib/hooks/narration-hooks";
3
- import { useQueryChoiceMenuOptions } from "@/lib/query/interface-query";
3
+ import { useQueryChoiceMenuOptions } from "@/lib/query/narration-query";
4
4
  import { GameStatus } from "@/lib/stores/game-status-store";
5
5
  import { TextDisplaySettings } from "@/lib/stores/text-display-settings-store";
6
6
  import { useDebouncedValue } from "@tanstack/react-pacer";
@@ -3,11 +3,14 @@ import { Button } from "@/components/ui/button";
3
3
  import { Card, CardContent } from "@/components/ui/card";
4
4
  import { Spinner } from "@/components/ui/spinner";
5
5
  import { Tooltip, TooltipContent, TooltipTrigger } from "@/components/ui/tooltip";
6
- import { CANVAS_UI_LAYER_NAME, overlayTextShadowClass } from "@/constants";
6
+ import {
7
+ CANVAS_UI_LAYER_NAME,
8
+ INTERFACE_DATA_USE_QUERY_KEY,
9
+ overlayTextShadowClass,
10
+ } from "@/constants";
7
11
  import { useSetSearchParamState } from "@/lib/hooks/navigation-hooks";
8
12
  import { useGameProps } from "@/lib/hooks/props-hooks";
9
13
  import { useQuit } from "@/lib/hooks/quit-hooks";
10
- import { INTERFACE_DATA_USE_QUEY_KEY as INTERFACE_DATA_USE_QUERY_KEY } from "@/lib/query/interface-query";
11
14
  import { useQueryLastSave } from "@/lib/query/save-query";
12
15
  import { InterfaceSettings } from "@/lib/stores/interface-settings-store";
13
16
  import { cn } from "@/lib/utils";
@@ -11,7 +11,7 @@ import {
11
11
  import { Kbd } from "@/components/ui/kbd";
12
12
  import { ScrollArea } from "@/components/ui/scroll-area";
13
13
  import { useImageSrc } from "@/lib/hooks/image-hooks";
14
- import { useQueryNarrativeHistory } from "@/lib/query/interface-query";
14
+ import { useQueryNarrativeHistory } from "@/lib/query/narration-query";
15
15
  import { cn } from "@/lib/utils";
16
16
  import { useDebouncedValue } from "@tanstack/react-pacer";
17
17
  import { Check, Search } from "lucide-react";
@@ -42,10 +42,7 @@ export function HistoryList({ searchString }: { searchString?: string }) {
42
42
  <Item key={key} variant="outline">
43
43
  {item.character && (
44
44
  <ItemMedia variant="image">
45
- <HistoryItemAvatar
46
- icon={item.icon}
47
- character={item.character}
48
- />
45
+ <HistoryItemAvatar icon={item.icon} character={item.character} />
49
46
  </ItemMedia>
50
47
  )}
51
48
  <ItemContent
@@ -2,7 +2,7 @@ import { Button } from "@/components/ui/button";
2
2
  import { Dialog, DialogContent, DialogFooter } from "@/components/ui/dialog";
3
3
  import { Input } from "@/components/ui/input";
4
4
  import { useGameProps } from "@/lib/hooks/props-hooks";
5
- import { useQueryDialogue, useQueryInputValue } from "@/lib/query/interface-query";
5
+ import { useQueryDialogue, useQueryInputValue } from "@/lib/query/narration-query";
6
6
  import { TextDisplaySettings } from "@/lib/stores/text-display-settings-store";
7
7
  import { narration } from "@drincs/pixi-vn";
8
8
  import { useDebouncedValue } from "@tanstack/react-pacer";
@@ -5,7 +5,7 @@ import { useNarrationFunctions } from "@/lib/hooks/narration-hooks";
5
5
  import { useSetSearchParamState } from "@/lib/hooks/navigation-hooks";
6
6
  import { useGameProps } from "@/lib/hooks/props-hooks";
7
7
  import { useWheelActions } from "@/lib/hooks/quick-tools-hooks";
8
- import { useQueryCanGoBack } from "@/lib/query/interface-query";
8
+ import { useQueryCanGoBack } from "@/lib/query/narration-query";
9
9
  import {
10
10
  LAST_SAVE_USE_QUEY_KEY,
11
11
  SAVES_USE_QUEY_KEY,
@@ -1,7 +1,7 @@
1
1
  import { ChoiceMenu } from "@/components/menus/choice-menus";
2
- import { NarrationCards } from "@/components/scrrens/narration/narration-cards";
2
+ import { NarrationCards } from "@/components/screens/narration/narration-cards";
3
3
  import { ResizableHandle, ResizablePanel, ResizablePanelGroup } from "@/components/ui/resizable";
4
- import { useQueryDialogue } from "@/lib/query/interface-query";
4
+ import { useQueryDialogue } from "@/lib/query/narration-query";
5
5
 
6
6
  export function NarrationScreen() {
7
7
  const { data: { animatedText, text } = {} } = useQueryDialogue();
@@ -6,7 +6,7 @@ import { Image } from "@/components/ui/image";
6
6
  import { ResizableHandle, ResizablePanel, ResizablePanelGroup } from "@/components/ui/resizable";
7
7
  import { ScrollArea } from "@/components/ui/scroll-area";
8
8
  import { useNarrationPointerHandlers } from "@/lib/hooks/narration-hooks";
9
- import { useQueryDialogue } from "@/lib/query/interface-query";
9
+ import { useQueryDialogue } from "@/lib/query/narration-query";
10
10
  import { TextDisplaySettings } from "@/lib/stores/text-display-settings-store";
11
11
  import { useSelector } from "@tanstack/react-store";
12
12
  import { type RefObject, useCallback, useRef } from "react";
@@ -9,5 +9,7 @@ export const SFX_CHANNEL_NAME = "sfx";
9
9
 
10
10
  export const SKIP_DELAY = 100;
11
11
 
12
+ export const INTERFACE_DATA_USE_QUERY_KEY = "interface_data_use_query_key";
13
+
12
14
  /** Text-shadow that outlines text with black so it remains legible over any image or canvas background. */
13
15
  export const overlayTextShadowClass = "[text-shadow:0_0_3px_black,0_0_6px_black]";
@@ -2,7 +2,7 @@ import { useAlertDialog } from "@/components/providers/alert-dialog-provider";
2
2
  import { useNarrationFunctions } from "@/lib/hooks/narration-hooks";
3
3
  import { useSetSearchParamState } from "@/lib/hooks/navigation-hooks";
4
4
  import { useGameProps } from "@/lib/hooks/props-hooks";
5
- import { useQueryInputValue } from "@/lib/query/interface-query";
5
+ import { useQueryInputValue } from "@/lib/query/narration-query";
6
6
  import {
7
7
  LAST_SAVE_USE_QUEY_KEY,
8
8
  SAVES_USE_QUEY_KEY,
@@ -1,4 +1,4 @@
1
- import { INTERFACE_DATA_USE_QUEY_KEY } from "@/lib/query/interface-query";
1
+ import { INTERFACE_DATA_USE_QUERY_KEY } from "@/constants";
2
2
  import type { StepLabelProps } from "@drincs/pixi-vn";
3
3
  import { useQueryClient } from "@tanstack/react-query";
4
4
  import { useNavigate } from "@tanstack/react-router";
@@ -18,7 +18,9 @@ export function useGameProps(): StepLabelProps {
18
18
  toast,
19
19
  invalidateInterfaceData: async (delay: number = 0) => {
20
20
  if (delay > 0) await new Promise((resolve) => setTimeout(resolve, delay));
21
- return await queryClient.invalidateQueries({ queryKey: [INTERFACE_DATA_USE_QUEY_KEY] });
21
+ return await queryClient.invalidateQueries({
22
+ queryKey: [INTERFACE_DATA_USE_QUERY_KEY],
23
+ });
22
24
  },
23
25
  };
24
26
  }
@@ -1,13 +1,12 @@
1
+ import { INTERFACE_DATA_USE_QUERY_KEY } from "@/constants";
1
2
  import { type CharacterInterface, narration, stepHistory } from "@drincs/pixi-vn";
2
3
  import { useQuery, useQueryClient } from "@tanstack/react-query";
3
4
  import { useTranslation } from "react-i18next";
4
5
 
5
- export const INTERFACE_DATA_USE_QUEY_KEY = "interface_data_use_quey_key";
6
-
7
6
  const CAN_GO_BACK_USE_QUEY_KEY = "can_go_back_use_quey_key";
8
7
  export function useQueryCanGoBack() {
9
8
  return useQuery({
10
- queryKey: [INTERFACE_DATA_USE_QUEY_KEY, CAN_GO_BACK_USE_QUEY_KEY],
9
+ queryKey: [INTERFACE_DATA_USE_QUERY_KEY, CAN_GO_BACK_USE_QUEY_KEY],
11
10
  queryFn: async () => stepHistory.canGoBack,
12
11
  });
13
12
  }
@@ -16,7 +15,7 @@ const CHOICE_MENU_OPTIONS_USE_QUEY_KEY = "choice_menu_options_use_quey_key";
16
15
  export function useQueryChoiceMenuOptions() {
17
16
  const { t } = useTranslation(["narration"]);
18
17
  return useQuery({
19
- queryKey: [INTERFACE_DATA_USE_QUEY_KEY, CHOICE_MENU_OPTIONS_USE_QUEY_KEY],
18
+ queryKey: [INTERFACE_DATA_USE_QUERY_KEY, CHOICE_MENU_OPTIONS_USE_QUEY_KEY],
20
19
  queryFn: async () =>
21
20
  narration.choices?.map((option) => ({
22
21
  ...option,
@@ -31,7 +30,7 @@ export function useQueryChoiceMenuOptions() {
31
30
  const INPUT_VALUE_USE_QUEY_KEY = "input_value_use_quey_key";
32
31
  export function useQueryInputValue<T>() {
33
32
  return useQuery({
34
- queryKey: [INTERFACE_DATA_USE_QUEY_KEY, INPUT_VALUE_USE_QUEY_KEY],
33
+ queryKey: [INTERFACE_DATA_USE_QUERY_KEY, INPUT_VALUE_USE_QUEY_KEY],
35
34
  queryFn: async () => ({
36
35
  isRequired: narration.isRequiredInput,
37
36
  type: narration.inputType,
@@ -51,7 +50,7 @@ export function useQueryDialogue() {
51
50
  const queryClient = useQueryClient();
52
51
 
53
52
  return useQuery<DialogueModel>({
54
- queryKey: [INTERFACE_DATA_USE_QUEY_KEY, DIALOGUE_USE_QUEY_KEY],
53
+ queryKey: [INTERFACE_DATA_USE_QUERY_KEY, DIALOGUE_USE_QUEY_KEY],
55
54
  queryFn: async ({ queryKey }) => {
56
55
  const dialogue = narration.dialogue;
57
56
  let text = dialogue?.text;
@@ -93,7 +92,7 @@ export function useQueryDialogue() {
93
92
  const CAN_GO_NEXT_USE_QUEY_KEY = "can_go_next_use_quey_key";
94
93
  export function useQueryCanGoNext() {
95
94
  return useQuery({
96
- queryKey: [INTERFACE_DATA_USE_QUEY_KEY, CAN_GO_NEXT_USE_QUEY_KEY],
95
+ queryKey: [INTERFACE_DATA_USE_QUERY_KEY, CAN_GO_NEXT_USE_QUEY_KEY],
97
96
  queryFn: async () => narration.canContinue && !narration.isRequiredInput,
98
97
  });
99
98
  }
@@ -104,7 +103,7 @@ export function useQueryNarrativeHistory({ searchString }: { searchString?: stri
104
103
  const normalizedSearch = searchString?.toLowerCase().trim();
105
104
 
106
105
  return useQuery({
107
- queryKey: [INTERFACE_DATA_USE_QUEY_KEY, NARRATIVE_HISTORY_USE_QUEY_KEY],
106
+ queryKey: [INTERFACE_DATA_USE_QUERY_KEY, NARRATIVE_HISTORY_USE_QUEY_KEY],
108
107
  queryFn: async () => {
109
108
  const promises = stepHistory.narrativeHistory.map(async (step) => {
110
109
  const character = step.dialogue?.character;
@@ -2,11 +2,11 @@ import { PendingComponent } from "@/components/loading";
2
2
  import { SettingsDialogue } from "@/components/menus/settings";
3
3
  import { OfflineAllert } from "@/components/modals/error-allerts";
4
4
  import { RootProvider } from "@/components/providers/root-provider";
5
+ import { INTERFACE_DATA_USE_QUERY_KEY } from "@/constants";
5
6
  import useInkInitialization from "@/lib/hooks/ink-hooks";
6
7
  import { useConfirmBackNavigation } from "@/lib/hooks/navigation-hooks";
7
8
  import { useAutoSaveOnPageClose } from "@/lib/hooks/save-hooks";
8
9
  import { useI18n } from "@/lib/i18n";
9
- import { INTERFACE_DATA_USE_QUEY_KEY } from "@/lib/query/interface-query";
10
10
  import { SearchParams } from "@/lib/stores/search-param-store";
11
11
  import { defineAssets } from "@/lib/utils/assets-utility";
12
12
  import { initializeIndexedDB } from "@/lib/utils/db-utility";
@@ -33,7 +33,7 @@ export const Route = createRootRouteWithContext<RouterContext>()({
33
33
  const isRefreshSaveExist = await loadRefreshSave();
34
34
  if (isRefreshSaveExist) {
35
35
  await context.queryClient.invalidateQueries({
36
- queryKey: [INTERFACE_DATA_USE_QUEY_KEY],
36
+ queryKey: [INTERFACE_DATA_USE_QUERY_KEY],
37
37
  });
38
38
  }
39
39
  }
@@ -1,5 +1,5 @@
1
- import { NarrationScreen } from "@/components/scrrens/narration";
2
- import { NarrationClickOverlay } from "@/components/scrrens/narration/click-overlay";
1
+ import { NarrationScreen } from "@/components/screens/narration";
2
+ import { NarrationClickOverlay } from "@/components/screens/narration/click-overlay";
3
3
  import { useNarrationHotkeys } from "@/lib/hooks/hotkeys-hooks";
4
4
  import { useSkipAutoDetector } from "@/lib/hooks/narration-hooks";
5
5
  import { createFileRoute } from "@tanstack/react-router";
@@ -1,6 +1,6 @@
1
1
  import { Button } from "@/components/ui/button";
2
2
  import { useNarrationFunctions } from "@/lib/hooks/narration-hooks";
3
- import { useQueryChoiceMenuOptions } from "@/lib/query/interface-query";
3
+ import { useQueryChoiceMenuOptions } from "@/lib/query/narration-query";
4
4
  import { GameStatus } from "@/lib/stores/game-status-store";
5
5
  import { TextDisplaySettings } from "@/lib/stores/text-display-settings-store";
6
6
  import { useDebouncedValue } from "@tanstack/react-pacer";
@@ -3,11 +3,14 @@ import { Button } from "@/components/ui/button";
3
3
  import { Card, CardContent } from "@/components/ui/card";
4
4
  import { Spinner } from "@/components/ui/spinner";
5
5
  import { Tooltip, TooltipContent, TooltipTrigger } from "@/components/ui/tooltip";
6
- import { CANVAS_UI_LAYER_NAME, overlayTextShadowClass } from "@/constants";
6
+ import {
7
+ CANVAS_UI_LAYER_NAME,
8
+ INTERFACE_DATA_USE_QUERY_KEY,
9
+ overlayTextShadowClass,
10
+ } from "@/constants";
7
11
  import { useSetSearchParamState } from "@/lib/hooks/navigation-hooks";
8
12
  import { useGameProps } from "@/lib/hooks/props-hooks";
9
13
  import { useQuit } from "@/lib/hooks/quit-hooks";
10
- import { INTERFACE_DATA_USE_QUEY_KEY as INTERFACE_DATA_USE_QUERY_KEY } from "@/lib/query/interface-query";
11
14
  import { useQueryLastSave } from "@/lib/query/save-query";
12
15
  import { InterfaceSettings } from "@/lib/stores/interface-settings-store";
13
16
  import { cn } from "@/lib/utils";
@@ -11,7 +11,7 @@ import {
11
11
  import { Kbd } from "@/components/ui/kbd";
12
12
  import { ScrollArea } from "@/components/ui/scroll-area";
13
13
  import { useImageSrc } from "@/lib/hooks/image-hooks";
14
- import { useQueryNarrativeHistory } from "@/lib/query/interface-query";
14
+ import { useQueryNarrativeHistory } from "@/lib/query/narration-query";
15
15
  import { cn } from "@/lib/utils";
16
16
  import { useDebouncedValue } from "@tanstack/react-pacer";
17
17
  import { Check, Search } from "lucide-react";
@@ -42,10 +42,7 @@ export function HistoryList({ searchString }: { searchString?: string }) {
42
42
  <Item key={key} variant="outline">
43
43
  {item.character && (
44
44
  <ItemMedia variant="image">
45
- <HistoryItemAvatar
46
- icon={item.icon}
47
- character={item.character}
48
- />
45
+ <HistoryItemAvatar icon={item.icon} character={item.character} />
49
46
  </ItemMedia>
50
47
  )}
51
48
  <ItemContent
@@ -2,7 +2,7 @@ import { Button } from "@/components/ui/button";
2
2
  import { Dialog, DialogContent, DialogFooter } from "@/components/ui/dialog";
3
3
  import { Input } from "@/components/ui/input";
4
4
  import { useGameProps } from "@/lib/hooks/props-hooks";
5
- import { useQueryDialogue, useQueryInputValue } from "@/lib/query/interface-query";
5
+ import { useQueryDialogue, useQueryInputValue } from "@/lib/query/narration-query";
6
6
  import { TextDisplaySettings } from "@/lib/stores/text-display-settings-store";
7
7
  import { narration } from "@drincs/pixi-vn";
8
8
  import { useDebouncedValue } from "@tanstack/react-pacer";
@@ -5,7 +5,7 @@ import { useNarrationFunctions } from "@/lib/hooks/narration-hooks";
5
5
  import { useSetSearchParamState } from "@/lib/hooks/navigation-hooks";
6
6
  import { useGameProps } from "@/lib/hooks/props-hooks";
7
7
  import { useWheelActions } from "@/lib/hooks/quick-tools-hooks";
8
- import { useQueryCanGoBack } from "@/lib/query/interface-query";
8
+ import { useQueryCanGoBack } from "@/lib/query/narration-query";
9
9
  import {
10
10
  LAST_SAVE_USE_QUEY_KEY,
11
11
  SAVES_USE_QUEY_KEY,
@@ -1,7 +1,7 @@
1
1
  import { ChoiceMenu } from "@/components/menus/choice-menus";
2
- import { NarrationCards } from "@/components/scrrens/narration/narration-cards";
2
+ import { NarrationCards } from "@/components/screens/narration/narration-cards";
3
3
  import { ResizableHandle, ResizablePanel, ResizablePanelGroup } from "@/components/ui/resizable";
4
- import { useQueryDialogue } from "@/lib/query/interface-query";
4
+ import { useQueryDialogue } from "@/lib/query/narration-query";
5
5
 
6
6
  export function NarrationScreen() {
7
7
  const { data: { animatedText, text } = {} } = useQueryDialogue();
@@ -6,7 +6,7 @@ import { Image } from "@/components/ui/image";
6
6
  import { ResizableHandle, ResizablePanel, ResizablePanelGroup } from "@/components/ui/resizable";
7
7
  import { ScrollArea } from "@/components/ui/scroll-area";
8
8
  import { useNarrationPointerHandlers } from "@/lib/hooks/narration-hooks";
9
- import { useQueryDialogue } from "@/lib/query/interface-query";
9
+ import { useQueryDialogue } from "@/lib/query/narration-query";
10
10
  import { TextDisplaySettings } from "@/lib/stores/text-display-settings-store";
11
11
  import { useSelector } from "@tanstack/react-store";
12
12
  import { type RefObject, useCallback, useRef } from "react";
@@ -9,5 +9,7 @@ export const SFX_CHANNEL_NAME = "sfx";
9
9
 
10
10
  export const SKIP_DELAY = 100;
11
11
 
12
+ export const INTERFACE_DATA_USE_QUERY_KEY = "interface_data_use_query_key";
13
+
12
14
  /** Text-shadow that outlines text with black so it remains legible over any image or canvas background. */
13
15
  export const overlayTextShadowClass = "[text-shadow:0_0_3px_black,0_0_6px_black]";
@@ -2,7 +2,7 @@ import { useAlertDialog } from "@/components/providers/alert-dialog-provider";
2
2
  import { useNarrationFunctions } from "@/lib/hooks/narration-hooks";
3
3
  import { useSetSearchParamState } from "@/lib/hooks/navigation-hooks";
4
4
  import { useGameProps } from "@/lib/hooks/props-hooks";
5
- import { useQueryInputValue } from "@/lib/query/interface-query";
5
+ import { useQueryInputValue } from "@/lib/query/narration-query";
6
6
  import {
7
7
  LAST_SAVE_USE_QUEY_KEY,
8
8
  SAVES_USE_QUEY_KEY,
@@ -1,4 +1,4 @@
1
- import { INTERFACE_DATA_USE_QUEY_KEY } from "@/lib/query/interface-query";
1
+ import { INTERFACE_DATA_USE_QUERY_KEY } from "@/constants";
2
2
  import type { StepLabelProps } from "@drincs/pixi-vn";
3
3
  import { useQueryClient } from "@tanstack/react-query";
4
4
  import { useNavigate } from "@tanstack/react-router";
@@ -18,7 +18,9 @@ export function useGameProps(): StepLabelProps {
18
18
  toast,
19
19
  invalidateInterfaceData: async (delay: number = 0) => {
20
20
  if (delay > 0) await new Promise((resolve) => setTimeout(resolve, delay));
21
- return await queryClient.invalidateQueries({ queryKey: [INTERFACE_DATA_USE_QUEY_KEY] });
21
+ return await queryClient.invalidateQueries({
22
+ queryKey: [INTERFACE_DATA_USE_QUERY_KEY],
23
+ });
22
24
  },
23
25
  };
24
26
  }
@@ -1,13 +1,12 @@
1
+ import { INTERFACE_DATA_USE_QUERY_KEY } from "@/constants";
1
2
  import { type CharacterInterface, narration, stepHistory } from "@drincs/pixi-vn";
2
3
  import { useQuery, useQueryClient } from "@tanstack/react-query";
3
4
  import { useTranslation } from "react-i18next";
4
5
 
5
- export const INTERFACE_DATA_USE_QUEY_KEY = "interface_data_use_quey_key";
6
-
7
6
  const CAN_GO_BACK_USE_QUEY_KEY = "can_go_back_use_quey_key";
8
7
  export function useQueryCanGoBack() {
9
8
  return useQuery({
10
- queryKey: [INTERFACE_DATA_USE_QUEY_KEY, CAN_GO_BACK_USE_QUEY_KEY],
9
+ queryKey: [INTERFACE_DATA_USE_QUERY_KEY, CAN_GO_BACK_USE_QUEY_KEY],
11
10
  queryFn: async () => stepHistory.canGoBack,
12
11
  });
13
12
  }
@@ -16,7 +15,7 @@ const CHOICE_MENU_OPTIONS_USE_QUEY_KEY = "choice_menu_options_use_quey_key";
16
15
  export function useQueryChoiceMenuOptions() {
17
16
  const { t } = useTranslation(["narration"]);
18
17
  return useQuery({
19
- queryKey: [INTERFACE_DATA_USE_QUEY_KEY, CHOICE_MENU_OPTIONS_USE_QUEY_KEY],
18
+ queryKey: [INTERFACE_DATA_USE_QUERY_KEY, CHOICE_MENU_OPTIONS_USE_QUEY_KEY],
20
19
  queryFn: async () =>
21
20
  narration.choices?.map((option) => ({
22
21
  ...option,
@@ -31,7 +30,7 @@ export function useQueryChoiceMenuOptions() {
31
30
  const INPUT_VALUE_USE_QUEY_KEY = "input_value_use_quey_key";
32
31
  export function useQueryInputValue<T>() {
33
32
  return useQuery({
34
- queryKey: [INTERFACE_DATA_USE_QUEY_KEY, INPUT_VALUE_USE_QUEY_KEY],
33
+ queryKey: [INTERFACE_DATA_USE_QUERY_KEY, INPUT_VALUE_USE_QUEY_KEY],
35
34
  queryFn: async () => ({
36
35
  isRequired: narration.isRequiredInput,
37
36
  type: narration.inputType,
@@ -51,7 +50,7 @@ export function useQueryDialogue() {
51
50
  const queryClient = useQueryClient();
52
51
 
53
52
  return useQuery<DialogueModel>({
54
- queryKey: [INTERFACE_DATA_USE_QUEY_KEY, DIALOGUE_USE_QUEY_KEY],
53
+ queryKey: [INTERFACE_DATA_USE_QUERY_KEY, DIALOGUE_USE_QUEY_KEY],
55
54
  queryFn: async ({ queryKey }) => {
56
55
  const dialogue = narration.dialogue;
57
56
  let text = dialogue?.text;
@@ -93,7 +92,7 @@ export function useQueryDialogue() {
93
92
  const CAN_GO_NEXT_USE_QUEY_KEY = "can_go_next_use_quey_key";
94
93
  export function useQueryCanGoNext() {
95
94
  return useQuery({
96
- queryKey: [INTERFACE_DATA_USE_QUEY_KEY, CAN_GO_NEXT_USE_QUEY_KEY],
95
+ queryKey: [INTERFACE_DATA_USE_QUERY_KEY, CAN_GO_NEXT_USE_QUEY_KEY],
97
96
  queryFn: async () => narration.canContinue && !narration.isRequiredInput,
98
97
  });
99
98
  }
@@ -104,7 +103,7 @@ export function useQueryNarrativeHistory({ searchString }: { searchString?: stri
104
103
  const normalizedSearch = searchString?.toLowerCase().trim();
105
104
 
106
105
  return useQuery({
107
- queryKey: [INTERFACE_DATA_USE_QUEY_KEY, NARRATIVE_HISTORY_USE_QUEY_KEY],
106
+ queryKey: [INTERFACE_DATA_USE_QUERY_KEY, NARRATIVE_HISTORY_USE_QUEY_KEY],
108
107
  queryFn: async () => {
109
108
  const promises = stepHistory.narrativeHistory.map(async (step) => {
110
109
  const character = step.dialogue?.character;
@@ -2,10 +2,10 @@ import { PendingComponent } from "@/components/loading";
2
2
  import { SettingsDialogue } from "@/components/menus/settings";
3
3
  import { OfflineAllert } from "@/components/modals/error-allerts";
4
4
  import { RootProvider } from "@/components/providers/root-provider";
5
+ import { INTERFACE_DATA_USE_QUERY_KEY } from "@/constants";
5
6
  import { useConfirmBackNavigation } from "@/lib/hooks/navigation-hooks";
6
7
  import { useAutoSaveOnPageClose } from "@/lib/hooks/save-hooks";
7
8
  import { useI18n } from "@/lib/i18n";
8
- import { INTERFACE_DATA_USE_QUEY_KEY } from "@/lib/query/interface-query";
9
9
  import { SearchParams } from "@/lib/stores/search-param-store";
10
10
  import { defineAssets } from "@/lib/utils/assets-utility";
11
11
  import { initializeIndexedDB } from "@/lib/utils/db-utility";
@@ -30,7 +30,7 @@ export const Route = createRootRouteWithContext<RouterContext>()({
30
30
  const isRefreshSaveExist = await loadRefreshSave();
31
31
  if (isRefreshSaveExist) {
32
32
  await context.queryClient.invalidateQueries({
33
- queryKey: [INTERFACE_DATA_USE_QUEY_KEY],
33
+ queryKey: [INTERFACE_DATA_USE_QUERY_KEY],
34
34
  });
35
35
  }
36
36
  }
@@ -1,5 +1,5 @@
1
- import { NarrationScreen } from "@/components/scrrens/narration";
2
- import { NarrationClickOverlay } from "@/components/scrrens/narration/click-overlay";
1
+ import { NarrationScreen } from "@/components/screens/narration";
2
+ import { NarrationClickOverlay } from "@/components/screens/narration/click-overlay";
3
3
  import { useNarrationHotkeys } from "@/lib/hooks/hotkeys-hooks";
4
4
  import { useSkipAutoDetector } from "@/lib/hooks/narration-hooks";
5
5
  import { createFileRoute } from "@tanstack/react-router";