create-pixi-vn 2.0.2 → 2.0.4

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 (128) hide show
  1. package/index.js +1 -1
  2. package/package.json +5 -4
  3. package/template-react-vite-muijoy/package-lock.json +4 -4
  4. package/template-react-vite-muijoy/package.json +1 -1
  5. package/template-react-vite-muijoy/src/assets/ink-manifest.gen.json +1 -0
  6. package/template-react-vite-muijoy/src/components/menus/main-menu.tsx +1 -2
  7. package/template-react-vite-muijoy/src/components/menus/save-menu/save-slots.tsx +2 -2
  8. package/template-react-vite-muijoy/src/components/scrrens/narration/narration-cards.tsx +1 -1
  9. package/template-react-vite-muijoy/src/components/ui/image.tsx +7 -38
  10. package/template-react-vite-muijoy/src/content/labels/start.label.ts +2 -4
  11. package/template-react-vite-muijoy/src/pixi-vn-keys.gen.d.ts +20 -0
  12. package/template-react-vite-muijoy/vite.config.ts +1 -0
  13. package/template-react-vite-muijoy-ink/package-lock.json +3 -3
  14. package/template-react-vite-muijoy-ink/package.json +2 -2
  15. package/template-react-vite-muijoy-ink/src/components/menus/save-menu/save-slots.tsx +2 -2
  16. package/template-react-vite-muijoy-ink/src/components/scrrens/narration/narration-cards.tsx +1 -1
  17. package/template-react-vite-muijoy-ink/src/components/ui/image.tsx +7 -38
  18. package/template-react-vite-muijoy-ink/src/pixi-vn-keys.gen.d.ts +22 -0
  19. package/template-react-vite-muijoy-ink/vite.config.ts +1 -0
  20. package/template-react-vite-muijoy-ink-tauri/package-lock.json +3 -3
  21. package/template-react-vite-muijoy-ink-tauri/package.json +2 -2
  22. package/template-react-vite-muijoy-ink-tauri/src/components/menus/save-menu/save-slots.tsx +2 -2
  23. package/template-react-vite-muijoy-ink-tauri/src/components/scrrens/narration/narration-cards.tsx +1 -1
  24. package/template-react-vite-muijoy-ink-tauri/src/components/ui/image.tsx +7 -38
  25. package/template-react-vite-muijoy-ink-tauri/src/pixi-vn-keys.gen.d.ts +22 -0
  26. package/template-react-vite-muijoy-ink-tauri/vite.config.ts +1 -0
  27. package/template-react-vite-muijoy-tauri/package-lock.json +4 -4
  28. package/template-react-vite-muijoy-tauri/package.json +1 -1
  29. package/template-react-vite-muijoy-tauri/src/assets/ink-manifest.gen.json +1 -0
  30. package/template-react-vite-muijoy-tauri/src/components/menus/main-menu.tsx +1 -2
  31. package/template-react-vite-muijoy-tauri/src/components/menus/save-menu/save-slots.tsx +2 -2
  32. package/template-react-vite-muijoy-tauri/src/components/scrrens/narration/narration-cards.tsx +1 -1
  33. package/template-react-vite-muijoy-tauri/src/components/ui/image.tsx +7 -38
  34. package/template-react-vite-muijoy-tauri/src/content/labels/start.label.ts +2 -4
  35. package/template-react-vite-muijoy-tauri/src/pixi-vn-keys.gen.d.ts +20 -0
  36. package/template-react-vite-muijoy-tauri/vite.config.ts +1 -0
  37. package/template-react-vite-muijoy-electron/.eslintrc.cjs +0 -29
  38. package/template-react-vite-muijoy-electron/.vscode/extensions.json +0 -9
  39. package/template-react-vite-muijoy-electron/.vscode/launch.json +0 -32
  40. package/template-react-vite-muijoy-electron/.vscode/settings.json +0 -49
  41. package/template-react-vite-muijoy-electron/README.md +0 -207
  42. package/template-react-vite-muijoy-electron/_gitignore +0 -107
  43. package/template-react-vite-muijoy-electron/forge.config.cts +0 -73
  44. package/template-react-vite-muijoy-electron/forge.env.d.ts +0 -1
  45. package/template-react-vite-muijoy-electron/index.html +0 -13
  46. package/template-react-vite-muijoy-electron/ionic.config.json +0 -7
  47. package/template-react-vite-muijoy-electron/package-lock.json +0 -16984
  48. package/template-react-vite-muijoy-electron/package.json +0 -85
  49. package/template-react-vite-muijoy-electron/public/apple-touch-icon.png +0 -0
  50. package/template-react-vite-muijoy-electron/public/favicon.ico +0 -0
  51. package/template-react-vite-muijoy-electron/public/mask-icon.svg +0 -890
  52. package/template-react-vite-muijoy-electron/public/pixi-vn.svg +0 -23
  53. package/template-react-vite-muijoy-electron/public/pwa-192x192.png +0 -0
  54. package/template-react-vite-muijoy-electron/public/pwa-512x512.png +0 -0
  55. package/template-react-vite-muijoy-electron/public/robots.txt +0 -3
  56. package/template-react-vite-muijoy-electron/src/App.css +0 -42
  57. package/template-react-vite-muijoy-electron/src/App.tsx +0 -16
  58. package/template-react-vite-muijoy-electron/src/AppRoutes.tsx +0 -66
  59. package/template-react-vite-muijoy-electron/src/Home.tsx +0 -27
  60. package/template-react-vite-muijoy-electron/src/Imports.tsx +0 -34
  61. package/template-react-vite-muijoy-electron/src/atoms/autoInfoState.ts +0 -50
  62. package/template-react-vite-muijoy-electron/src/atoms/dialogueCardHeightState.ts +0 -23
  63. package/template-react-vite-muijoy-electron/src/atoms/dialogueCardImageWidthState.ts +0 -23
  64. package/template-react-vite-muijoy-electron/src/atoms/hideInterfaceState.ts +0 -6
  65. package/template-react-vite-muijoy-electron/src/atoms/nextStepLoadingState.ts +0 -6
  66. package/template-react-vite-muijoy-electron/src/atoms/openGameSaveScreenState.ts +0 -6
  67. package/template-react-vite-muijoy-electron/src/atoms/openHistoryScreenState.ts +0 -6
  68. package/template-react-vite-muijoy-electron/src/atoms/openSettingsState.ts +0 -6
  69. package/template-react-vite-muijoy-electron/src/atoms/saveLoadAlertState.ts +0 -26
  70. package/template-react-vite-muijoy-electron/src/atoms/saveScreenPageState.ts +0 -23
  71. package/template-react-vite-muijoy-electron/src/atoms/skipEnabledState.ts +0 -6
  72. package/template-react-vite-muijoy-electron/src/atoms/typewriterDelayState.ts +0 -23
  73. package/template-react-vite-muijoy-electron/src/atoms/typewriterIsAnimatedState.ts +0 -6
  74. package/template-react-vite-muijoy-electron/src/components/ChoiceButton.tsx +0 -19
  75. package/template-react-vite-muijoy-electron/src/components/DragHandleDivider.tsx +0 -40
  76. package/template-react-vite-muijoy-electron/src/components/MenuButton.tsx +0 -37
  77. package/template-react-vite-muijoy-electron/src/components/ModalConfirmation.tsx +0 -70
  78. package/template-react-vite-muijoy-electron/src/components/ModalDialog.tsx +0 -103
  79. package/template-react-vite-muijoy-electron/src/components/NextButton.tsx +0 -94
  80. package/template-react-vite-muijoy-electron/src/components/SettingButton.tsx +0 -44
  81. package/template-react-vite-muijoy-electron/src/components/SliderResizer.tsx +0 -53
  82. package/template-react-vite-muijoy-electron/src/components/TextMenuButton.tsx +0 -41
  83. package/template-react-vite-muijoy-electron/src/components/Typewriter.tsx +0 -335
  84. package/template-react-vite-muijoy-electron/src/components/TypographyShadow.tsx +0 -15
  85. package/template-react-vite-muijoy-electron/src/i18n.ts +0 -29
  86. package/template-react-vite-muijoy-electron/src/index.css +0 -9
  87. package/template-react-vite-muijoy-electron/src/interceptors/EventInterceptor.tsx +0 -49
  88. package/template-react-vite-muijoy-electron/src/interceptors/SkipAutoInterceptor.tsx +0 -67
  89. package/template-react-vite-muijoy-electron/src/main.tsx +0 -39
  90. package/template-react-vite-muijoy-electron/src/models/Character.ts +0 -86
  91. package/template-react-vite-muijoy-electron/src/models/GameSaveData.ts +0 -9
  92. package/template-react-vite-muijoy-electron/src/pixi-vn.d.ts +0 -36
  93. package/template-react-vite-muijoy-electron/src/providers/ThemeProvider.tsx +0 -165
  94. package/template-react-vite-muijoy-electron/src/screens/ChoiceMenu.tsx +0 -130
  95. package/template-react-vite-muijoy-electron/src/screens/GameSaveScreen.tsx +0 -274
  96. package/template-react-vite-muijoy-electron/src/screens/HistoryScreen.tsx +0 -155
  97. package/template-react-vite-muijoy-electron/src/screens/LoadingScreen.tsx +0 -40
  98. package/template-react-vite-muijoy-electron/src/screens/MainMenu.tsx +0 -98
  99. package/template-react-vite-muijoy-electron/src/screens/NarrationScreen.tsx +0 -220
  100. package/template-react-vite-muijoy-electron/src/screens/QuickTools.tsx +0 -168
  101. package/template-react-vite-muijoy-electron/src/screens/Settings.tsx +0 -536
  102. package/template-react-vite-muijoy-electron/src/screens/modals/SaveLoadAlert.tsx +0 -135
  103. package/template-react-vite-muijoy-electron/src/screens/modals/TextInput.tsx +0 -61
  104. package/template-react-vite-muijoy-electron/src/use_query/useQueryInterface.ts +0 -73
  105. package/template-react-vite-muijoy-electron/src/use_query/useQueryLastSave.ts +0 -18
  106. package/template-react-vite-muijoy-electron/src/use_query/useQuerySaves.ts +0 -18
  107. package/template-react-vite-muijoy-electron/src/utilities/actions-utility.ts +0 -10
  108. package/template-react-vite-muijoy-electron/src/utilities/component-utility.ts +0 -25
  109. package/template-react-vite-muijoy-electron/src/utilities/indexedDB-utility.ts +0 -196
  110. package/template-react-vite-muijoy-electron/src/utilities/navigate-utility.ts +0 -18
  111. package/template-react-vite-muijoy-electron/src/utilities/save-utility.ts +0 -125
  112. package/template-react-vite-muijoy-electron/src/values/characters.ts +0 -11
  113. package/template-react-vite-muijoy-electron/src/values/translations/strings_en.json +0 -60
  114. package/template-react-vite-muijoy-electron/src/vite-env.d.ts +0 -4
  115. package/template-react-vite-muijoy-electron/src-electron/icons/icon.icns +0 -0
  116. package/template-react-vite-muijoy-electron/src-electron/icons/icon.ico +0 -0
  117. package/template-react-vite-muijoy-electron/src-electron/icons/icon.png +0 -0
  118. package/template-react-vite-muijoy-electron/src-electron/index.css +0 -7
  119. package/template-react-vite-muijoy-electron/src-electron/main.ts +0 -59
  120. package/template-react-vite-muijoy-electron/src-electron/preload.ts +0 -2
  121. package/template-react-vite-muijoy-electron/src-electron/renderer.ts +0 -31
  122. package/template-react-vite-muijoy-electron/tsconfig.json +0 -32
  123. package/template-react-vite-muijoy-electron/tsconfig.node.json +0 -11
  124. package/template-react-vite-muijoy-electron/vite.base.config.ts +0 -93
  125. package/template-react-vite-muijoy-electron/vite.config.ts +0 -54
  126. package/template-react-vite-muijoy-electron/vite.main.config.ts +0 -9
  127. package/template-react-vite-muijoy-electron/vite.preload.config.ts +0 -9
  128. package/template-react-vite-muijoy-electron/vite.renderer.config.ts +0 -9
@@ -1,29 +0,0 @@
1
- import i18n from 'i18next';
2
- import LanguageDetector from 'i18next-browser-languagedetector';
3
- import { initReactI18next } from 'react-i18next';
4
- import strings_en from '../src/values/translations/strings_en.json';
5
-
6
- const getUserLang = (): string => {
7
- let userLang: string = navigator.language || "en";
8
- return userLang?.toLocaleLowerCase()?.split("-")[0];
9
- }
10
-
11
- export const useI18n = () => {
12
- if (!i18n.isInitialized) {
13
- i18n
14
- .use(LanguageDetector)
15
- .use(initReactI18next)
16
- .init({
17
- debug: false,
18
- fallbackLng: 'en',
19
- lng: getUserLang(),
20
- interpolation: {
21
- escapeValue: false,
22
- },
23
- resources: {
24
- en: strings_en,
25
- // Add more languages here
26
- }
27
- });
28
- }
29
- }
@@ -1,9 +0,0 @@
1
- :root {
2
- background-color: #242424;
3
- }
4
-
5
- body {
6
- margin: 0;
7
- display: flex;
8
- overflow: hidden;
9
- }
@@ -1,49 +0,0 @@
1
- import { useQueryClient } from '@tanstack/react-query';
2
- import { useEffect } from 'react';
3
- import { useRecoilState } from 'recoil';
4
- import { hideInterfaceState } from '../atoms/hideInterfaceState';
5
- import { INTERFACE_DATA_USE_QUEY_KEY } from '../use_query/useQueryInterface';
6
- import { initializeIndexedDB } from '../utilities/indexedDB-utility';
7
- import { useMyNavigate } from '../utilities/navigate-utility';
8
- import { addRefreshSave, loadRefreshSave } from '../utilities/save-utility';
9
-
10
- export default function EventInterceptor() {
11
- const [hideInterface, setHideInterface] = useRecoilState(hideInterfaceState);
12
- const navigate = useMyNavigate();
13
- const queryClient = useQueryClient()
14
-
15
- useEffect(() => {
16
- Promise.all([loadRefreshSave(navigate), initializeIndexedDB()])
17
- .then(() => queryClient.invalidateQueries({ queryKey: [INTERFACE_DATA_USE_QUEY_KEY] }))
18
- window.addEventListener("beforeunload", async () => {
19
- await addRefreshSave()
20
- });
21
- window.addEventListener("popstate", onpopstate);
22
- window.addEventListener('keydown', onkeydown);
23
-
24
- return () => {
25
- window.removeEventListener("beforeunload", async () => {
26
- await addRefreshSave()
27
- });
28
- window.removeEventListener("popstate", onpopstate);
29
- window.removeEventListener('keydown', onkeydown);
30
- };
31
- }, []);
32
-
33
- function onpopstate() {
34
- window.history.forward();
35
- }
36
-
37
- function onkeydown(event: KeyboardEvent) {
38
- if (event.code == 'Enter' || event.code == 'Space') {
39
- if (hideInterface) {
40
- setHideInterface(false)
41
- }
42
- }
43
- else if (event.code == 'KeyV' && event.shiftKey) {
44
- setHideInterface((prev) => !prev)
45
- }
46
- }
47
-
48
- return null
49
- }
@@ -1,67 +0,0 @@
1
- import { StepLabelProps } from '@drincs/pixi-vn/dist/override';
2
- import { useSnackbar } from 'notistack';
3
- import { useEffect, useState } from 'react';
4
- import { useTranslation } from 'react-i18next';
5
- import { useRecoilValue } from 'recoil';
6
- import { autoInfoState } from '../atoms/autoInfoState';
7
- import { skipEnabledState } from '../atoms/skipEnabledState';
8
- import { typewriterIsAnimatedState } from '../atoms/typewriterIsAnimatedState';
9
- import { useMyNavigate } from '../utilities/navigate-utility';
10
-
11
- export default function SkipAutoInterceptor({ nextOnClick }: {
12
- nextOnClick: (props: StepLabelProps) => Promise<void>,
13
- }) {
14
- const navigate = useMyNavigate();
15
- const { t: tNarration } = useTranslation(["narration"]);
16
- const skipEnabled = useRecoilValue(skipEnabledState)
17
- const autoInfo = useRecoilValue(autoInfoState)
18
- const typewriterIsAnimated = useRecoilValue(typewriterIsAnimatedState)
19
- const [recheckSkip, setRecheckSkip] = useState<number>(0)
20
- const { enqueueSnackbar } = useSnackbar();
21
-
22
- useEffect(() => {
23
- // Debouncing
24
- let timeout = setTimeout(() => {
25
- if (skipEnabled) {
26
- nextOnClick({
27
- t: tNarration,
28
- navigate,
29
- notify: (message, variant) => enqueueSnackbar(message, { variant }),
30
- }).then(() => {
31
- setRecheckSkip((p) => p + 1)
32
- })
33
- }
34
- }, 400);
35
-
36
- return () => {
37
- clearTimeout(timeout)
38
- }
39
- }, [skipEnabled, recheckSkip])
40
-
41
- useEffect(() => {
42
- if (skipEnabled) {
43
- return
44
- }
45
- if (autoInfo.enabled && !typewriterIsAnimated) {
46
- if (autoInfo.time) {
47
- let millisecond = autoInfo.time * 1000
48
- // Debouncing
49
- let timeout = setTimeout(() => {
50
- if (autoInfo.enabled && !skipEnabled) {
51
- nextOnClick({
52
- t: tNarration,
53
- navigate,
54
- notify: (message, variant) => enqueueSnackbar(message, { variant }),
55
- })
56
- }
57
- }, millisecond);
58
-
59
- return () => {
60
- clearTimeout(timeout)
61
- }
62
- }
63
- }
64
- }, [autoInfo, typewriterIsAnimated, skipEnabled])
65
-
66
- return null
67
- }
@@ -1,39 +0,0 @@
1
- import { canvas, narration } from '@drincs/pixi-vn'
2
- import { createRoot } from 'react-dom/client'
3
- import App from './App'
4
- import './index.css'
5
- import { gameEnd } from './utilities/actions-utility'
6
-
7
- // Canvas setup with PIXI
8
- const body = document.body
9
- if (!body) {
10
- throw new Error('body element not found')
11
- }
12
-
13
- canvas.initialize(body, 1920, 1080, {
14
- backgroundColor: "#303030"
15
- }).then(() => {
16
- // React setup with ReactDOM
17
- const root = document.getElementById('root')
18
- if (!root) {
19
- throw new Error('root element not found')
20
- }
21
-
22
- canvas.initializeHTMLLayout(root)
23
- if (!canvas.htmlLayout) {
24
- throw new Error('htmlLayout not found')
25
- }
26
- const reactRoot = createRoot(canvas.htmlLayout)
27
-
28
- reactRoot.render(
29
- <App />
30
- )
31
- })
32
-
33
- narration.onGameEnd = async ({ navigate }) => {
34
- gameEnd(navigate)
35
- }
36
-
37
- narration.onStepError = async (_error, { notify, t }) => {
38
- notify(t("allert_error_occurred"), "error")
39
- }
@@ -1,86 +0,0 @@
1
- import { CharacterInterface, CharacterStoredClass } from "@drincs/pixi-vn";
2
-
3
- interface CharacterProps {
4
- /**
5
- * The name of the character.
6
- */
7
- name?: string;
8
- /**
9
- * The surname of the character.
10
- */
11
- surname?: string;
12
- /**
13
- * The age of the character.
14
- */
15
- age?: number;
16
- /**
17
- * The icon of the character.
18
- */
19
- icon?: string;
20
- /**
21
- * The color of the character.
22
- */
23
- color?: string;
24
- }
25
-
26
- export default class Character extends CharacterStoredClass implements CharacterInterface {
27
- /**
28
- * @param id The id of the character.
29
- * @param props The properties of the character.
30
- */
31
- constructor(id: string | { id: string, emotion: string }, props: CharacterProps) {
32
- super(typeof id === "string" ? id : id.id, typeof id === "string" ? "" : id.emotion)
33
- this.defaultName = props.name
34
- this.defaultSurname = props.surname
35
- this.defaultAge = props.age
36
- this._icon = props.icon
37
- this._color = props.color
38
- }
39
- private defaultName?: string
40
- /***
41
- * The name of the character.
42
- * If you set undefined, it will return the default name.
43
- */
44
- get name(): string {
45
- return this.getStorageProperty<string>("name") || this.defaultName || this.id
46
- }
47
- set name(value: string | undefined) {
48
- this.setStorageProperty<string>("name", value)
49
- }
50
- private defaultSurname?: string
51
- /**
52
- * The surname of the character.
53
- * If you set undefined, it will return the default surname.
54
- */
55
- get surname(): string | undefined {
56
- return this.getStorageProperty<string>("surname") || this.defaultSurname
57
- }
58
- set surname(value: string | undefined) {
59
- this.setStorageProperty<string>("surname", value)
60
- }
61
- private defaultAge?: number | undefined
62
- /**
63
- * The age of the character.
64
- * If you set undefined, it will return the default age.
65
- */
66
- get age(): number | undefined {
67
- return this.getStorageProperty<number>("age") || this.defaultAge
68
- }
69
- set age(value: number | undefined) {
70
- this.setStorageProperty<number>("age", value)
71
- }
72
- private _icon?: string
73
- /**
74
- * The icon of the character.
75
- */
76
- get icon(): string | undefined {
77
- return this._icon
78
- }
79
- private _color?: string | undefined
80
- /**
81
- * The color of the character.
82
- */
83
- get color(): string | undefined {
84
- return this._color
85
- }
86
- }
@@ -1,9 +0,0 @@
1
- import { SaveData as PiviVNSaveData } from "@drincs/pixi-vn"
2
-
3
- export default interface GameSaveData {
4
- saveData: PiviVNSaveData
5
- gameVersion: string
6
- date: Date
7
- name: string
8
- image?: string
9
- }
@@ -1,36 +0,0 @@
1
- import { VariantType } from "notistack"
2
-
3
- declare module '@drincs/pixi-vn/dist/override' {
4
- interface StepLabelResult {
5
- [key: string]: any
6
- }
7
- interface StepLabelProps {
8
- /**
9
- * function to navigate to a new route.
10
- * @param route The route to navigate to.
11
- * @returns
12
- */
13
- navigate: (route: string) => void
14
- /**
15
- * Translate a key to a string.
16
- * @param key The key to translate.
17
- * @returns The translated string.
18
- */
19
- t: TFunction<[string], undefined>
20
- /**
21
- * Show a notification.
22
- * @param message The message to show.
23
- * @param variant The variant of the notification.
24
- * @returns
25
- */
26
- notify: (message: string, variant: VariantType) => void
27
- [key: string]: any
28
- }
29
- interface CharacterInterface {
30
- name: string
31
- surname?: string
32
- age?: number
33
- icon?: string
34
- color?: string
35
- }
36
- }
@@ -1,165 +0,0 @@
1
- import { CssVarsProvider, extendTheme } from '@mui/joy';
2
- import {
3
- THEME_ID as MATERIAL_THEME_ID,
4
- ThemeProvider as MaterialCssVarsProvider,
5
- extendTheme as materialExtendTheme,
6
- } from '@mui/material/styles';
7
- import { createContext, useContext, useMemo, useState } from 'react';
8
- import ShadeGenerator from 'shade-generator';
9
-
10
- type Iprops = {
11
- children: React.ReactNode
12
- }
13
- type SolidColorType = "black" | "white"
14
-
15
- const ColorContext = createContext<{
16
- primaryColor: string,
17
- setPrimaryColor: (color: string) => void,
18
- solidColor: SolidColorType,
19
- setSolidColor: (color: SolidColorType) => void,
20
-
21
- }>({
22
- primaryColor: "",
23
- setPrimaryColor: () => { },
24
- solidColor: "white",
25
- setSolidColor: () => { },
26
- })
27
- const materialTheme = materialExtendTheme();
28
-
29
- export function useEditColorProvider() {
30
- const context = useContext(ColorContext);
31
- if (context === undefined) {
32
- throw new Error("usePrimaryColorProvider must be used within a PrimaryColorProvider")
33
- }
34
- return context;
35
- }
36
-
37
- /**
38
- * Get 10 shades of a color based on the color you pass in.
39
- * @param color
40
- * @example
41
- * If you pass in a color of '#03a9f4', you will get the following shades:
42
- * {
43
- * "50": "#e1f5fe",
44
- * "100": "#b3e5fc",
45
- * "200": "#81d4fa",
46
- * "300": "#4fc3f7",
47
- * "400": "#29b6f6",
48
- * "500": "#03a9f4",
49
- * "600": "#039be5",
50
- * "700": "#0288d1",
51
- * "800": "#0277bd",
52
- * "900": "#01579b"
53
- * }
54
- */
55
- function get10ColorShades(color: string) {
56
- return {
57
- "50": ShadeGenerator.hue(color).shade("10").hex(),
58
- "100": ShadeGenerator.hue(color).shade("20").hex(),
59
- "200": ShadeGenerator.hue(color).shade("40").hex(),
60
- "300": ShadeGenerator.hue(color).shade("60").hex(),
61
- "400": ShadeGenerator.hue(color).shade("80").hex(),
62
- "500": ShadeGenerator.hue(color).shade("100").hex(),
63
- "600": ShadeGenerator.hue(color).shade("200").hex(),
64
- "700": ShadeGenerator.hue(color).shade("300").hex(),
65
- "800": ShadeGenerator.hue(color).shade("400").hex(),
66
- "900": ShadeGenerator.hue(color).shade("500").hex(),
67
- }
68
- }
69
-
70
- export default function MyThemeProvider({ children }: Iprops) {
71
- const [primaryColor, setPrimaryColor] = useState(localStorage.getItem("primaryColor") || '#1c73ff')
72
- const [solidColor, setSolidColor] = useState<SolidColorType>(localStorage.getItem("solidColor") as SolidColorType || "white")
73
-
74
- // Build the theme: https://mui.com/joy-ui/customization/theme-builder
75
- const theme = useMemo(() => {
76
- // Debouncing
77
- localStorage.setItem("primaryColor", primaryColor)
78
- localStorage.setItem("solidColor", solidColor)
79
-
80
- let colors = get10ColorShades(primaryColor)
81
- return extendTheme({
82
- colorSchemes: {
83
- light: {
84
- palette: {
85
- primary: {
86
- ...colors,
87
- solidColor: solidColor === "black" ? "var(--joy-palette-common-black)" : "var(--joy-palette-common-white)",
88
- },
89
- },
90
- },
91
- dark: {
92
- palette: {
93
- primary: {
94
- ...colors,
95
- solidColor: solidColor === "black" ? "var(--joy-palette-common-black)" : "var(--joy-palette-common-white)",
96
- },
97
- },
98
- },
99
- },
100
- components: {
101
- JoyButton: {
102
- styleOverrides: {
103
- root: {
104
- pointerEvents: "auto",
105
- userSelect: "none",
106
- },
107
- },
108
- },
109
- JoyLink: {
110
- styleOverrides: {
111
- root: {
112
- pointerEvents: "auto",
113
- },
114
- },
115
- },
116
- JoySvgIcon: {
117
- styleOverrides: {
118
- root: {
119
- pointerEvents: "auto",
120
- },
121
- },
122
- },
123
- MuiSvgIcon: {
124
- styleOverrides: {
125
- root: {
126
- pointerEvents: "auto",
127
- },
128
- },
129
- },
130
- JoyCard: {
131
- styleOverrides: {
132
- root: {
133
- pointerEvents: "auto",
134
- },
135
- },
136
- },
137
- JoyIconButton: {
138
- styleOverrides: {
139
- root: {
140
- pointerEvents: "auto",
141
- }
142
- }
143
- }
144
- }
145
- })
146
- }, [primaryColor, solidColor])
147
-
148
-
149
- return (
150
- <MaterialCssVarsProvider theme={{ [MATERIAL_THEME_ID]: materialTheme }}>
151
- <CssVarsProvider
152
- theme={theme}
153
- >
154
- <ColorContext.Provider value={{
155
- primaryColor: primaryColor,
156
- setPrimaryColor: setPrimaryColor,
157
- solidColor: solidColor,
158
- setSolidColor: setSolidColor,
159
- }}>
160
- {children}
161
- </ColorContext.Provider>
162
- </CssVarsProvider>
163
- </MaterialCssVarsProvider>
164
- );
165
- }
@@ -1,130 +0,0 @@
1
- import { ChoiceMenuOption, ChoiceMenuOptionClose, narration } from '@drincs/pixi-vn';
2
- import KeyboardReturnIcon from '@mui/icons-material/KeyboardReturn';
3
- import { Box, Grid } from '@mui/joy';
4
- import { useQueryClient } from '@tanstack/react-query';
5
- import { motion, Variants } from "motion/react";
6
- import { useSnackbar } from 'notistack';
7
- import { useState } from 'react';
8
- import { useTranslation } from 'react-i18next';
9
- import { useRecoilValue } from 'recoil';
10
- import { dialogueCardHeightState } from '../atoms/dialogueCardHeightState';
11
- import { hideInterfaceState } from '../atoms/hideInterfaceState';
12
- import ChoiceButton from '../components/ChoiceButton';
13
- import { INTERFACE_DATA_USE_QUEY_KEY, useQueryChoiceMenuOptions } from '../use_query/useQueryInterface';
14
- import { useMyNavigate } from '../utilities/navigate-utility';
15
-
16
- export default function ChoiceMenu({ fullscreen = true }: {
17
- fullscreen?: boolean,
18
- }) {
19
- const [loading, setLoading] = useState(false)
20
- const marginButton = useRecoilValue(dialogueCardHeightState)
21
- const height = 100 - marginButton
22
- const { t: tNarration } = useTranslation(["narration"]);
23
- const navigate = useMyNavigate();
24
- const { data: menu = [] } = useQueryChoiceMenuOptions()
25
- const hideInterface = useRecoilValue(hideInterfaceState) || menu.length == 0;
26
- const queryClient = useQueryClient()
27
- const { enqueueSnackbar } = useSnackbar();
28
- const gridVariants: Variants = {
29
- open: {
30
- clipPath: "inset(0% 0% 0% 0% round 10px)",
31
- transition: {
32
- type: "spring",
33
- bounce: 0,
34
- duration: 0.7,
35
- staggerChildren: 0.05
36
- },
37
- },
38
- closed: {
39
- clipPath: "inset(10% 50% 90% 50% round 10px)",
40
- transition: {
41
- type: "spring",
42
- bounce: 0,
43
- duration: 0.3
44
- },
45
- }
46
- };
47
- const itemVariants: Variants = {
48
- open: {
49
- opacity: 1,
50
- y: 0,
51
- transition: { type: "spring", stiffness: 300, damping: 24 }
52
- },
53
- closed: { opacity: 0, y: 20, transition: { duration: 0.2 } }
54
- };
55
-
56
- function afterSelectChoice(item: ChoiceMenuOptionClose | ChoiceMenuOption<{}>) {
57
- setLoading(true)
58
- narration.selectChoice(item, {
59
- navigate: navigate,
60
- t: tNarration,
61
- notify: (message, variant) => enqueueSnackbar(message, { variant }),
62
- ...item.props
63
- })
64
- .then(() => {
65
- queryClient.invalidateQueries({ queryKey: [INTERFACE_DATA_USE_QUEY_KEY] })
66
- setLoading(false)
67
- })
68
- .catch((e) => {
69
- setLoading(false)
70
- console.error(e)
71
- })
72
- }
73
-
74
- return (
75
- <Box
76
- sx={{
77
- width: '100%',
78
- position: "absolute",
79
- top: 0,
80
- left: 0,
81
- right: 0,
82
- height: fullscreen ? "100%" : `${height}%`,
83
- pointerEvents: hideInterface ? "none" : "auto",
84
- }}
85
- >
86
- <Grid
87
- container
88
- direction="column"
89
- justifyContent="center"
90
- alignItems="center"
91
- spacing={2}
92
- sx={{
93
- overflow: 'auto',
94
- height: "100%",
95
- gap: 1,
96
- width: '100%',
97
- }}
98
- component={motion.div}
99
- variants={gridVariants}
100
- animate={hideInterface ? "closed" : "open"}
101
- >
102
- {menu?.map((item, index) => {
103
- return (
104
- <Grid
105
- key={"choice-" + index}
106
- justifyContent="center"
107
- alignItems="center"
108
- component={motion.div}
109
- variants={itemVariants}
110
- >
111
- <ChoiceButton
112
- loading={loading}
113
- onClick={() => {
114
- afterSelectChoice(item)
115
- }}
116
- sx={{
117
- left: 0,
118
- right: 0,
119
- }}
120
- startDecorator={item.type == "close" ? <KeyboardReturnIcon /> : undefined}
121
- >
122
- {item.text}
123
- </ChoiceButton>
124
- </Grid>
125
- )
126
- })}
127
- </Grid>
128
- </Box>
129
- );
130
- }