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.
Files changed (205) hide show
  1. package/dist/index.mjs +36 -35
  2. package/package.json +1 -1
  3. package/template-react-vite-muijoy/components.json +1 -1
  4. package/template-react-vite-muijoy/package-lock.json +760 -1060
  5. package/template-react-vite-muijoy/package.json +11 -12
  6. package/template-react-vite-muijoy/src/components/dev-devtools.tsx +25 -0
  7. package/template-react-vite-muijoy/src/components/loading.tsx +11 -1
  8. package/template-react-vite-muijoy/src/components/menus/choice-menus.tsx +4 -0
  9. package/template-react-vite-muijoy/src/components/menus/main-menu.tsx +1 -6
  10. package/template-react-vite-muijoy/src/components/menus/settings/index.tsx +3 -1
  11. package/template-react-vite-muijoy/src/components/menus/settings/menus/history.tsx +78 -62
  12. package/template-react-vite-muijoy/src/components/modals/input-request-dialogues.tsx +1 -1
  13. package/template-react-vite-muijoy/src/components/modals/quick-actions-wheel.tsx +3 -1
  14. package/template-react-vite-muijoy/src/components/providers/alert-dialog-provider.tsx +3 -0
  15. package/template-react-vite-muijoy/src/components/screens/narration/index.tsx +5 -2
  16. package/template-react-vite-muijoy/src/components/screens/narration/narration-cards.tsx +40 -19
  17. package/template-react-vite-muijoy/src/components/ui/alert-dialog.tsx +3 -2
  18. package/template-react-vite-muijoy/src/components/ui/avatar.tsx +2 -2
  19. package/template-react-vite-muijoy/src/components/ui/breadcrumb.tsx +5 -4
  20. package/template-react-vite-muijoy/src/components/ui/button-group.tsx +3 -2
  21. package/template-react-vite-muijoy/src/components/ui/button.tsx +2 -2
  22. package/template-react-vite-muijoy/src/components/ui/card.tsx +6 -10
  23. package/template-react-vite-muijoy/src/components/ui/carousel.tsx +10 -7
  24. package/template-react-vite-muijoy/src/components/ui/drawer.tsx +2 -0
  25. package/template-react-vite-muijoy/src/components/ui/field.tsx +8 -5
  26. package/template-react-vite-muijoy/src/components/ui/input-group.tsx +4 -3
  27. package/template-react-vite-muijoy/src/components/ui/input.tsx +1 -1
  28. package/template-react-vite-muijoy/src/components/ui/item.tsx +9 -8
  29. package/template-react-vite-muijoy/src/components/ui/label.tsx +1 -1
  30. package/template-react-vite-muijoy/src/components/ui/radio-group.tsx +4 -1
  31. package/template-react-vite-muijoy/src/components/ui/scroll-area.tsx +5 -2
  32. package/template-react-vite-muijoy/src/components/ui/select.tsx +3 -2
  33. package/template-react-vite-muijoy/src/components/ui/separator.tsx +2 -0
  34. package/template-react-vite-muijoy/src/components/ui/sonner.tsx +4 -4
  35. package/template-react-vite-muijoy/src/components/ui/spinner.tsx +2 -1
  36. package/template-react-vite-muijoy/src/components/ui/switch.tsx +3 -0
  37. package/template-react-vite-muijoy/src/components/ui/textarea.tsx +2 -1
  38. package/template-react-vite-muijoy/src/components/ui/tooltip.tsx +2 -0
  39. package/template-react-vite-muijoy/src/lib/hooks/hotkeys-hooks.ts +113 -10
  40. package/template-react-vite-muijoy/src/lib/hooks/narration-hooks.ts +31 -10
  41. package/template-react-vite-muijoy/src/lib/hooks/navigation-hooks.ts +29 -10
  42. package/template-react-vite-muijoy/src/lib/query/narration-query.ts +32 -2
  43. package/template-react-vite-muijoy/src/lib/stores/alert-dialog-store.ts +13 -0
  44. package/template-react-vite-muijoy/src/lib/stores/text-display-settings-store.ts +20 -1
  45. package/template-react-vite-muijoy/src/locales/en.json +2 -0
  46. package/template-react-vite-muijoy/src/main.tsx +0 -1
  47. 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
  48. package/template-react-vite-muijoy/src/routeTree.gen.ts +3 -21
  49. package/template-react-vite-muijoy/src/routes/__root.tsx +10 -21
  50. package/template-react-vite-muijoy/src/styles.css +43 -43
  51. package/template-react-vite-muijoy/vite.config.ts +1 -1
  52. package/template-react-vite-muijoy-ink/components.json +1 -1
  53. package/template-react-vite-muijoy-ink/package-lock.json +721 -1059
  54. package/template-react-vite-muijoy-ink/package.json +12 -13
  55. package/template-react-vite-muijoy-ink/src/components/dev-devtools.tsx +25 -0
  56. package/template-react-vite-muijoy-ink/src/components/loading.tsx +11 -1
  57. package/template-react-vite-muijoy-ink/src/components/menus/choice-menus.tsx +4 -0
  58. package/template-react-vite-muijoy-ink/src/components/menus/main-menu.tsx +1 -6
  59. package/template-react-vite-muijoy-ink/src/components/menus/settings/index.tsx +3 -1
  60. package/template-react-vite-muijoy-ink/src/components/menus/settings/menus/history.tsx +78 -62
  61. package/template-react-vite-muijoy-ink/src/components/modals/input-request-dialogues.tsx +1 -1
  62. package/template-react-vite-muijoy-ink/src/components/modals/quick-actions-wheel.tsx +3 -1
  63. package/template-react-vite-muijoy-ink/src/components/providers/alert-dialog-provider.tsx +3 -0
  64. package/template-react-vite-muijoy-ink/src/components/screens/narration/index.tsx +5 -2
  65. package/template-react-vite-muijoy-ink/src/components/screens/narration/narration-cards.tsx +40 -19
  66. package/template-react-vite-muijoy-ink/src/components/ui/alert-dialog.tsx +3 -2
  67. package/template-react-vite-muijoy-ink/src/components/ui/avatar.tsx +2 -2
  68. package/template-react-vite-muijoy-ink/src/components/ui/breadcrumb.tsx +5 -4
  69. package/template-react-vite-muijoy-ink/src/components/ui/button-group.tsx +3 -2
  70. package/template-react-vite-muijoy-ink/src/components/ui/button.tsx +2 -2
  71. package/template-react-vite-muijoy-ink/src/components/ui/card.tsx +6 -10
  72. package/template-react-vite-muijoy-ink/src/components/ui/carousel.tsx +10 -7
  73. package/template-react-vite-muijoy-ink/src/components/ui/drawer.tsx +2 -0
  74. package/template-react-vite-muijoy-ink/src/components/ui/field.tsx +8 -5
  75. package/template-react-vite-muijoy-ink/src/components/ui/input-group.tsx +4 -3
  76. package/template-react-vite-muijoy-ink/src/components/ui/input.tsx +1 -1
  77. package/template-react-vite-muijoy-ink/src/components/ui/item.tsx +9 -8
  78. package/template-react-vite-muijoy-ink/src/components/ui/label.tsx +1 -1
  79. package/template-react-vite-muijoy-ink/src/components/ui/radio-group.tsx +4 -1
  80. package/template-react-vite-muijoy-ink/src/components/ui/scroll-area.tsx +5 -2
  81. package/template-react-vite-muijoy-ink/src/components/ui/select.tsx +3 -2
  82. package/template-react-vite-muijoy-ink/src/components/ui/separator.tsx +2 -0
  83. package/template-react-vite-muijoy-ink/src/components/ui/sonner.tsx +4 -4
  84. package/template-react-vite-muijoy-ink/src/components/ui/spinner.tsx +2 -1
  85. package/template-react-vite-muijoy-ink/src/components/ui/switch.tsx +3 -0
  86. package/template-react-vite-muijoy-ink/src/components/ui/textarea.tsx +2 -1
  87. package/template-react-vite-muijoy-ink/src/components/ui/tooltip.tsx +2 -0
  88. package/template-react-vite-muijoy-ink/src/content/ink/hashtag-commands.ts +2 -1
  89. package/template-react-vite-muijoy-ink/src/lib/hooks/hotkeys-hooks.ts +113 -10
  90. package/template-react-vite-muijoy-ink/src/lib/hooks/narration-hooks.ts +31 -10
  91. package/template-react-vite-muijoy-ink/src/lib/hooks/navigation-hooks.ts +29 -10
  92. package/template-react-vite-muijoy-ink/src/lib/query/narration-query.ts +32 -2
  93. package/template-react-vite-muijoy-ink/src/lib/stores/alert-dialog-store.ts +13 -0
  94. package/template-react-vite-muijoy-ink/src/lib/stores/text-display-settings-store.ts +20 -1
  95. package/template-react-vite-muijoy-ink/src/locales/en.json +2 -0
  96. package/template-react-vite-muijoy-ink/src/main.tsx +0 -1
  97. package/template-react-vite-muijoy-ink/src/pixi-vn.keys.gen.ts +24 -0
  98. package/template-react-vite-muijoy-ink/src/routeTree.gen.ts +3 -21
  99. package/template-react-vite-muijoy-ink/src/routes/__root.tsx +10 -21
  100. package/template-react-vite-muijoy-ink/src/styles.css +43 -43
  101. package/template-react-vite-muijoy-ink/vite.config.ts +1 -1
  102. package/template-react-vite-muijoy-ink-tauri/components.json +1 -1
  103. package/template-react-vite-muijoy-ink-tauri/package-lock.json +721 -1059
  104. package/template-react-vite-muijoy-ink-tauri/package.json +12 -13
  105. package/template-react-vite-muijoy-ink-tauri/src/components/dev-devtools.tsx +25 -0
  106. package/template-react-vite-muijoy-ink-tauri/src/components/loading.tsx +11 -1
  107. package/template-react-vite-muijoy-ink-tauri/src/components/menus/choice-menus.tsx +4 -0
  108. package/template-react-vite-muijoy-ink-tauri/src/components/menus/main-menu.tsx +1 -6
  109. package/template-react-vite-muijoy-ink-tauri/src/components/menus/settings/index.tsx +3 -1
  110. package/template-react-vite-muijoy-ink-tauri/src/components/menus/settings/menus/history.tsx +78 -62
  111. package/template-react-vite-muijoy-ink-tauri/src/components/modals/input-request-dialogues.tsx +1 -1
  112. package/template-react-vite-muijoy-ink-tauri/src/components/modals/quick-actions-wheel.tsx +3 -1
  113. package/template-react-vite-muijoy-ink-tauri/src/components/providers/alert-dialog-provider.tsx +3 -0
  114. package/template-react-vite-muijoy-ink-tauri/src/components/screens/narration/index.tsx +5 -2
  115. package/template-react-vite-muijoy-ink-tauri/src/components/screens/narration/narration-cards.tsx +40 -19
  116. package/template-react-vite-muijoy-ink-tauri/src/components/ui/alert-dialog.tsx +3 -2
  117. package/template-react-vite-muijoy-ink-tauri/src/components/ui/avatar.tsx +2 -2
  118. package/template-react-vite-muijoy-ink-tauri/src/components/ui/breadcrumb.tsx +5 -4
  119. package/template-react-vite-muijoy-ink-tauri/src/components/ui/button-group.tsx +3 -2
  120. package/template-react-vite-muijoy-ink-tauri/src/components/ui/button.tsx +2 -2
  121. package/template-react-vite-muijoy-ink-tauri/src/components/ui/card.tsx +6 -10
  122. package/template-react-vite-muijoy-ink-tauri/src/components/ui/carousel.tsx +10 -7
  123. package/template-react-vite-muijoy-ink-tauri/src/components/ui/drawer.tsx +2 -0
  124. package/template-react-vite-muijoy-ink-tauri/src/components/ui/field.tsx +8 -5
  125. package/template-react-vite-muijoy-ink-tauri/src/components/ui/input-group.tsx +4 -3
  126. package/template-react-vite-muijoy-ink-tauri/src/components/ui/input.tsx +1 -1
  127. package/template-react-vite-muijoy-ink-tauri/src/components/ui/item.tsx +9 -8
  128. package/template-react-vite-muijoy-ink-tauri/src/components/ui/label.tsx +1 -1
  129. package/template-react-vite-muijoy-ink-tauri/src/components/ui/radio-group.tsx +4 -1
  130. package/template-react-vite-muijoy-ink-tauri/src/components/ui/scroll-area.tsx +5 -2
  131. package/template-react-vite-muijoy-ink-tauri/src/components/ui/select.tsx +3 -2
  132. package/template-react-vite-muijoy-ink-tauri/src/components/ui/separator.tsx +2 -0
  133. package/template-react-vite-muijoy-ink-tauri/src/components/ui/sonner.tsx +4 -4
  134. package/template-react-vite-muijoy-ink-tauri/src/components/ui/spinner.tsx +2 -1
  135. package/template-react-vite-muijoy-ink-tauri/src/components/ui/switch.tsx +3 -0
  136. package/template-react-vite-muijoy-ink-tauri/src/components/ui/textarea.tsx +2 -1
  137. package/template-react-vite-muijoy-ink-tauri/src/components/ui/tooltip.tsx +2 -0
  138. package/template-react-vite-muijoy-ink-tauri/src/content/ink/hashtag-commands.ts +2 -1
  139. package/template-react-vite-muijoy-ink-tauri/src/lib/hooks/hotkeys-hooks.ts +113 -10
  140. package/template-react-vite-muijoy-ink-tauri/src/lib/hooks/narration-hooks.ts +31 -10
  141. package/template-react-vite-muijoy-ink-tauri/src/lib/hooks/navigation-hooks.ts +29 -10
  142. package/template-react-vite-muijoy-ink-tauri/src/lib/query/narration-query.ts +32 -2
  143. package/template-react-vite-muijoy-ink-tauri/src/lib/stores/alert-dialog-store.ts +13 -0
  144. package/template-react-vite-muijoy-ink-tauri/src/lib/stores/text-display-settings-store.ts +20 -1
  145. package/template-react-vite-muijoy-ink-tauri/src/locales/en.json +2 -0
  146. package/template-react-vite-muijoy-ink-tauri/src/main.tsx +0 -1
  147. 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
  148. package/template-react-vite-muijoy-ink-tauri/src/routeTree.gen.ts +3 -21
  149. package/template-react-vite-muijoy-ink-tauri/src/routes/__root.tsx +10 -21
  150. package/template-react-vite-muijoy-ink-tauri/src/styles.css +43 -43
  151. package/template-react-vite-muijoy-ink-tauri/vite.config.ts +1 -1
  152. package/template-react-vite-muijoy-tauri/components.json +1 -1
  153. package/template-react-vite-muijoy-tauri/package-lock.json +760 -1060
  154. package/template-react-vite-muijoy-tauri/package.json +11 -12
  155. package/template-react-vite-muijoy-tauri/src/components/dev-devtools.tsx +25 -0
  156. package/template-react-vite-muijoy-tauri/src/components/loading.tsx +11 -1
  157. package/template-react-vite-muijoy-tauri/src/components/menus/choice-menus.tsx +4 -0
  158. package/template-react-vite-muijoy-tauri/src/components/menus/main-menu.tsx +1 -6
  159. package/template-react-vite-muijoy-tauri/src/components/menus/settings/index.tsx +3 -1
  160. package/template-react-vite-muijoy-tauri/src/components/menus/settings/menus/history.tsx +78 -62
  161. package/template-react-vite-muijoy-tauri/src/components/modals/input-request-dialogues.tsx +1 -1
  162. package/template-react-vite-muijoy-tauri/src/components/modals/quick-actions-wheel.tsx +3 -1
  163. package/template-react-vite-muijoy-tauri/src/components/providers/alert-dialog-provider.tsx +3 -0
  164. package/template-react-vite-muijoy-tauri/src/components/screens/narration/index.tsx +5 -2
  165. package/template-react-vite-muijoy-tauri/src/components/screens/narration/narration-cards.tsx +40 -19
  166. package/template-react-vite-muijoy-tauri/src/components/ui/alert-dialog.tsx +3 -2
  167. package/template-react-vite-muijoy-tauri/src/components/ui/avatar.tsx +2 -2
  168. package/template-react-vite-muijoy-tauri/src/components/ui/breadcrumb.tsx +5 -4
  169. package/template-react-vite-muijoy-tauri/src/components/ui/button-group.tsx +3 -2
  170. package/template-react-vite-muijoy-tauri/src/components/ui/button.tsx +2 -2
  171. package/template-react-vite-muijoy-tauri/src/components/ui/card.tsx +6 -10
  172. package/template-react-vite-muijoy-tauri/src/components/ui/carousel.tsx +10 -7
  173. package/template-react-vite-muijoy-tauri/src/components/ui/drawer.tsx +2 -0
  174. package/template-react-vite-muijoy-tauri/src/components/ui/field.tsx +8 -5
  175. package/template-react-vite-muijoy-tauri/src/components/ui/input-group.tsx +4 -3
  176. package/template-react-vite-muijoy-tauri/src/components/ui/input.tsx +1 -1
  177. package/template-react-vite-muijoy-tauri/src/components/ui/item.tsx +9 -8
  178. package/template-react-vite-muijoy-tauri/src/components/ui/label.tsx +1 -1
  179. package/template-react-vite-muijoy-tauri/src/components/ui/radio-group.tsx +4 -1
  180. package/template-react-vite-muijoy-tauri/src/components/ui/scroll-area.tsx +5 -2
  181. package/template-react-vite-muijoy-tauri/src/components/ui/select.tsx +3 -2
  182. package/template-react-vite-muijoy-tauri/src/components/ui/separator.tsx +2 -0
  183. package/template-react-vite-muijoy-tauri/src/components/ui/sonner.tsx +4 -4
  184. package/template-react-vite-muijoy-tauri/src/components/ui/spinner.tsx +2 -1
  185. package/template-react-vite-muijoy-tauri/src/components/ui/switch.tsx +3 -0
  186. package/template-react-vite-muijoy-tauri/src/components/ui/textarea.tsx +2 -1
  187. package/template-react-vite-muijoy-tauri/src/components/ui/tooltip.tsx +2 -0
  188. package/template-react-vite-muijoy-tauri/src/lib/hooks/hotkeys-hooks.ts +113 -10
  189. package/template-react-vite-muijoy-tauri/src/lib/hooks/narration-hooks.ts +31 -10
  190. package/template-react-vite-muijoy-tauri/src/lib/hooks/navigation-hooks.ts +29 -10
  191. package/template-react-vite-muijoy-tauri/src/lib/query/narration-query.ts +32 -2
  192. package/template-react-vite-muijoy-tauri/src/lib/stores/alert-dialog-store.ts +13 -0
  193. package/template-react-vite-muijoy-tauri/src/lib/stores/text-display-settings-store.ts +20 -1
  194. package/template-react-vite-muijoy-tauri/src/locales/en.json +2 -0
  195. package/template-react-vite-muijoy-tauri/src/main.tsx +0 -1
  196. 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
  197. package/template-react-vite-muijoy-tauri/src/routeTree.gen.ts +3 -21
  198. package/template-react-vite-muijoy-tauri/src/routes/__root.tsx +10 -21
  199. package/template-react-vite-muijoy-tauri/src/styles.css +43 -43
  200. package/template-react-vite-muijoy-tauri/vite.config.ts +1 -1
  201. package/template-react-vite-muijoy/src/pixi-vn-keys.gen.d.ts +0 -20
  202. package/template-react-vite-muijoy/src/routes/narration.tsx +0 -9
  203. package/template-react-vite-muijoy-ink/src/routes/narration.tsx +0 -9
  204. package/template-react-vite-muijoy-ink-tauri/src/routes/narration.tsx +0 -9
  205. 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
- debouncedNavigate(field, normalizedValue);
108
+ scheduleNavigate(navigate as never, field, normalizedValue);
90
109
  },
91
- [field, debouncedNavigate],
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
- return useQuery<DialogueModel>({
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
@@ -1,4 +1,3 @@
1
- // @ts-nocheck
2
1
  /* eslint-disable */
3
2
  // noinspection JSUnusedGlobalSymbols
4
3
  // This file is auto-generated by @drincs/pixi-vn vite plugin. Do not edit manually.
@@ -19,4 +18,7 @@ declare module "@drincs/pixi-vn/narration" {
19
18
  "start_|_c-1": never;
20
19
  }
21
20
  }
22
- export {};
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' | '/narration' | '/game/narration'
50
+ fullPaths: '/' | '/game' | '/game/narration'
60
51
  fileRoutesByTo: FileRoutesByTo
61
- to: '/' | '/game' | '/narration' | '/game/narration'
62
- id: '__root__' | '/' | '/game' | '/narration' | '/game/narration'
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 { TanStackRouterDevtoolsPanel } from "@tanstack/react-router-devtools";
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
- <TanStackDevtools
62
- config={{
63
- position: "bottom-right",
64
- }}
65
- plugins={[
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.141 0.005 285.823);
11
+ --foreground: oklch(0.145 0 0);
12
12
  --card: oklch(1 0 0);
13
- --card-foreground: oklch(0.141 0.005 285.823);
13
+ --card-foreground: oklch(0.145 0 0);
14
14
  --popover: oklch(1 0 0);
15
- --popover-foreground: oklch(0.141 0.005 285.823);
16
- --primary: oklch(0.21 0.006 285.885);
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.967 0.001 286.375);
19
- --secondary-foreground: oklch(0.21 0.006 285.885);
20
- --muted: oklch(0.967 0.001 286.375);
21
- --muted-foreground: oklch(0.552 0.016 285.938);
22
- --accent: oklch(0.967 0.001 286.375);
23
- --accent-foreground: oklch(0.21 0.006 285.885);
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.92 0.004 286.32);
26
- --input: oklch(0.92 0.004 286.32);
27
- --ring: oklch(0.705 0.015 286.067);
28
- --chart-1: oklch(0.871 0.006 286.286);
29
- --chart-2: oklch(0.552 0.016 285.938);
30
- --chart-3: oklch(0.442 0.017 285.786);
31
- --chart-4: oklch(0.37 0.013 285.805);
32
- --chart-5: oklch(0.274 0.006 286.033);
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.141 0.005 285.823);
36
- --sidebar-primary: oklch(0.21 0.006 285.885);
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.967 0.001 286.375);
39
- --sidebar-accent-foreground: oklch(0.21 0.006 285.885);
40
- --sidebar-border: oklch(0.92 0.004 286.32);
41
- --sidebar-ring: oklch(0.705 0.015 286.067);
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: "Inter Variable", sans-serif;
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.141 0.005 285.823);
101
+ --background: oklch(0.145 0 0);
102
102
  --foreground: oklch(0.985 0 0);
103
- --card: oklch(0.21 0.006 285.885);
103
+ --card: oklch(0.205 0 0);
104
104
  --card-foreground: oklch(0.985 0 0);
105
- --popover: oklch(0.21 0.006 285.885);
105
+ --popover: oklch(0.205 0 0);
106
106
  --popover-foreground: oklch(0.985 0 0);
107
- --primary: oklch(0.92 0.004 286.32);
108
- --primary-foreground: oklch(0.21 0.006 285.885);
109
- --secondary: oklch(0.274 0.006 286.033);
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.274 0.006 286.033);
112
- --muted-foreground: oklch(0.705 0.015 286.067);
113
- --accent: oklch(0.274 0.006 286.033);
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.552 0.016 285.938);
119
- --chart-1: oklch(0.871 0.006 286.286);
120
- --chart-2: oklch(0.552 0.016 285.938);
121
- --chart-3: oklch(0.442 0.017 285.786);
122
- --chart-4: oklch(0.37 0.013 285.805);
123
- --chart-5: oklch(0.274 0.006 286.033);
124
- --sidebar: oklch(0.21 0.006 285.885);
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.274 0.006 286.033);
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.552 0.016 285.938);
131
+ --sidebar-ring: oklch(0.556 0 0);
132
132
  }
133
133
 
134
134
  @layer base {
@@ -38,7 +38,7 @@ export default defineConfig(({ mode }) => ({
38
38
  content: "./src/content/index.ts",
39
39
  characters: "./src/content/characters.ts",
40
40
  labels: "./src/content/labels/*.label.ts",
41
- typeFilePath: "./src/pixi-vn-keys.gen.d.ts",
41
+ typeFilePath: "./src/pixi-vn.keys.gen.ts",
42
42
  }),
43
43
  vitePluginInk({
44
44
  inkGlob: "./ink/**/*.ink",
@@ -6,7 +6,7 @@
6
6
  "tailwind": {
7
7
  "config": "",
8
8
  "css": "src/styles.css",
9
- "baseColor": "zinc",
9
+ "baseColor": "neutral",
10
10
  "cssVariables": true,
11
11
  "prefix": ""
12
12
  },