create-pixi-vn 2.0.3 → 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 (116) 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/content/labels/start.label.ts +2 -4
  8. package/template-react-vite-muijoy/src/pixi-vn-keys.gen.d.ts +20 -0
  9. package/template-react-vite-muijoy/vite.config.ts +1 -0
  10. package/template-react-vite-muijoy-ink/package-lock.json +3 -3
  11. package/template-react-vite-muijoy-ink/package.json +2 -2
  12. package/template-react-vite-muijoy-ink/src/pixi-vn-keys.gen.d.ts +22 -0
  13. package/template-react-vite-muijoy-ink/vite.config.ts +1 -0
  14. package/template-react-vite-muijoy-ink-tauri/package-lock.json +3 -3
  15. package/template-react-vite-muijoy-ink-tauri/package.json +2 -2
  16. package/template-react-vite-muijoy-ink-tauri/src/pixi-vn-keys.gen.d.ts +22 -0
  17. package/template-react-vite-muijoy-ink-tauri/vite.config.ts +1 -0
  18. package/template-react-vite-muijoy-tauri/package-lock.json +4 -4
  19. package/template-react-vite-muijoy-tauri/package.json +1 -1
  20. package/template-react-vite-muijoy-tauri/src/assets/ink-manifest.gen.json +1 -0
  21. package/template-react-vite-muijoy-tauri/src/components/menus/main-menu.tsx +1 -2
  22. package/template-react-vite-muijoy-tauri/src/content/labels/start.label.ts +2 -4
  23. package/template-react-vite-muijoy-tauri/src/pixi-vn-keys.gen.d.ts +20 -0
  24. package/template-react-vite-muijoy-tauri/vite.config.ts +1 -0
  25. package/template-react-vite-muijoy-electron/.eslintrc.cjs +0 -29
  26. package/template-react-vite-muijoy-electron/.vscode/extensions.json +0 -9
  27. package/template-react-vite-muijoy-electron/.vscode/launch.json +0 -32
  28. package/template-react-vite-muijoy-electron/.vscode/settings.json +0 -49
  29. package/template-react-vite-muijoy-electron/README.md +0 -207
  30. package/template-react-vite-muijoy-electron/_gitignore +0 -107
  31. package/template-react-vite-muijoy-electron/forge.config.cts +0 -73
  32. package/template-react-vite-muijoy-electron/forge.env.d.ts +0 -1
  33. package/template-react-vite-muijoy-electron/index.html +0 -13
  34. package/template-react-vite-muijoy-electron/ionic.config.json +0 -7
  35. package/template-react-vite-muijoy-electron/package-lock.json +0 -16984
  36. package/template-react-vite-muijoy-electron/package.json +0 -85
  37. package/template-react-vite-muijoy-electron/public/apple-touch-icon.png +0 -0
  38. package/template-react-vite-muijoy-electron/public/favicon.ico +0 -0
  39. package/template-react-vite-muijoy-electron/public/mask-icon.svg +0 -890
  40. package/template-react-vite-muijoy-electron/public/pixi-vn.svg +0 -23
  41. package/template-react-vite-muijoy-electron/public/pwa-192x192.png +0 -0
  42. package/template-react-vite-muijoy-electron/public/pwa-512x512.png +0 -0
  43. package/template-react-vite-muijoy-electron/public/robots.txt +0 -3
  44. package/template-react-vite-muijoy-electron/src/App.css +0 -42
  45. package/template-react-vite-muijoy-electron/src/App.tsx +0 -16
  46. package/template-react-vite-muijoy-electron/src/AppRoutes.tsx +0 -66
  47. package/template-react-vite-muijoy-electron/src/Home.tsx +0 -27
  48. package/template-react-vite-muijoy-electron/src/Imports.tsx +0 -34
  49. package/template-react-vite-muijoy-electron/src/atoms/autoInfoState.ts +0 -50
  50. package/template-react-vite-muijoy-electron/src/atoms/dialogueCardHeightState.ts +0 -23
  51. package/template-react-vite-muijoy-electron/src/atoms/dialogueCardImageWidthState.ts +0 -23
  52. package/template-react-vite-muijoy-electron/src/atoms/hideInterfaceState.ts +0 -6
  53. package/template-react-vite-muijoy-electron/src/atoms/nextStepLoadingState.ts +0 -6
  54. package/template-react-vite-muijoy-electron/src/atoms/openGameSaveScreenState.ts +0 -6
  55. package/template-react-vite-muijoy-electron/src/atoms/openHistoryScreenState.ts +0 -6
  56. package/template-react-vite-muijoy-electron/src/atoms/openSettingsState.ts +0 -6
  57. package/template-react-vite-muijoy-electron/src/atoms/saveLoadAlertState.ts +0 -26
  58. package/template-react-vite-muijoy-electron/src/atoms/saveScreenPageState.ts +0 -23
  59. package/template-react-vite-muijoy-electron/src/atoms/skipEnabledState.ts +0 -6
  60. package/template-react-vite-muijoy-electron/src/atoms/typewriterDelayState.ts +0 -23
  61. package/template-react-vite-muijoy-electron/src/atoms/typewriterIsAnimatedState.ts +0 -6
  62. package/template-react-vite-muijoy-electron/src/components/ChoiceButton.tsx +0 -19
  63. package/template-react-vite-muijoy-electron/src/components/DragHandleDivider.tsx +0 -40
  64. package/template-react-vite-muijoy-electron/src/components/MenuButton.tsx +0 -37
  65. package/template-react-vite-muijoy-electron/src/components/ModalConfirmation.tsx +0 -70
  66. package/template-react-vite-muijoy-electron/src/components/ModalDialog.tsx +0 -103
  67. package/template-react-vite-muijoy-electron/src/components/NextButton.tsx +0 -94
  68. package/template-react-vite-muijoy-electron/src/components/SettingButton.tsx +0 -44
  69. package/template-react-vite-muijoy-electron/src/components/SliderResizer.tsx +0 -53
  70. package/template-react-vite-muijoy-electron/src/components/TextMenuButton.tsx +0 -41
  71. package/template-react-vite-muijoy-electron/src/components/Typewriter.tsx +0 -335
  72. package/template-react-vite-muijoy-electron/src/components/TypographyShadow.tsx +0 -15
  73. package/template-react-vite-muijoy-electron/src/i18n.ts +0 -29
  74. package/template-react-vite-muijoy-electron/src/index.css +0 -9
  75. package/template-react-vite-muijoy-electron/src/interceptors/EventInterceptor.tsx +0 -49
  76. package/template-react-vite-muijoy-electron/src/interceptors/SkipAutoInterceptor.tsx +0 -67
  77. package/template-react-vite-muijoy-electron/src/main.tsx +0 -39
  78. package/template-react-vite-muijoy-electron/src/models/Character.ts +0 -86
  79. package/template-react-vite-muijoy-electron/src/models/GameSaveData.ts +0 -9
  80. package/template-react-vite-muijoy-electron/src/pixi-vn.d.ts +0 -36
  81. package/template-react-vite-muijoy-electron/src/providers/ThemeProvider.tsx +0 -165
  82. package/template-react-vite-muijoy-electron/src/screens/ChoiceMenu.tsx +0 -130
  83. package/template-react-vite-muijoy-electron/src/screens/GameSaveScreen.tsx +0 -274
  84. package/template-react-vite-muijoy-electron/src/screens/HistoryScreen.tsx +0 -155
  85. package/template-react-vite-muijoy-electron/src/screens/LoadingScreen.tsx +0 -40
  86. package/template-react-vite-muijoy-electron/src/screens/MainMenu.tsx +0 -98
  87. package/template-react-vite-muijoy-electron/src/screens/NarrationScreen.tsx +0 -220
  88. package/template-react-vite-muijoy-electron/src/screens/QuickTools.tsx +0 -168
  89. package/template-react-vite-muijoy-electron/src/screens/Settings.tsx +0 -536
  90. package/template-react-vite-muijoy-electron/src/screens/modals/SaveLoadAlert.tsx +0 -135
  91. package/template-react-vite-muijoy-electron/src/screens/modals/TextInput.tsx +0 -61
  92. package/template-react-vite-muijoy-electron/src/use_query/useQueryInterface.ts +0 -73
  93. package/template-react-vite-muijoy-electron/src/use_query/useQueryLastSave.ts +0 -18
  94. package/template-react-vite-muijoy-electron/src/use_query/useQuerySaves.ts +0 -18
  95. package/template-react-vite-muijoy-electron/src/utilities/actions-utility.ts +0 -10
  96. package/template-react-vite-muijoy-electron/src/utilities/component-utility.ts +0 -25
  97. package/template-react-vite-muijoy-electron/src/utilities/indexedDB-utility.ts +0 -196
  98. package/template-react-vite-muijoy-electron/src/utilities/navigate-utility.ts +0 -18
  99. package/template-react-vite-muijoy-electron/src/utilities/save-utility.ts +0 -125
  100. package/template-react-vite-muijoy-electron/src/values/characters.ts +0 -11
  101. package/template-react-vite-muijoy-electron/src/values/translations/strings_en.json +0 -60
  102. package/template-react-vite-muijoy-electron/src/vite-env.d.ts +0 -4
  103. package/template-react-vite-muijoy-electron/src-electron/icons/icon.icns +0 -0
  104. package/template-react-vite-muijoy-electron/src-electron/icons/icon.ico +0 -0
  105. package/template-react-vite-muijoy-electron/src-electron/icons/icon.png +0 -0
  106. package/template-react-vite-muijoy-electron/src-electron/index.css +0 -7
  107. package/template-react-vite-muijoy-electron/src-electron/main.ts +0 -59
  108. package/template-react-vite-muijoy-electron/src-electron/preload.ts +0 -2
  109. package/template-react-vite-muijoy-electron/src-electron/renderer.ts +0 -31
  110. package/template-react-vite-muijoy-electron/tsconfig.json +0 -32
  111. package/template-react-vite-muijoy-electron/tsconfig.node.json +0 -11
  112. package/template-react-vite-muijoy-electron/vite.base.config.ts +0 -93
  113. package/template-react-vite-muijoy-electron/vite.config.ts +0 -54
  114. package/template-react-vite-muijoy-electron/vite.main.config.ts +0 -9
  115. package/template-react-vite-muijoy-electron/vite.preload.config.ts +0 -9
  116. package/template-react-vite-muijoy-electron/vite.renderer.config.ts +0 -9
@@ -1,274 +0,0 @@
1
- import DeleteIcon from '@mui/icons-material/Delete';
2
- import DownloadIcon from '@mui/icons-material/Download';
3
- import FolderOpenIcon from '@mui/icons-material/FolderOpen';
4
- import SaveAsIcon from '@mui/icons-material/SaveAs';
5
- import UnarchiveIcon from '@mui/icons-material/Unarchive';
6
- import { AspectRatio, Grid, IconButton, Skeleton, Stack, Theme, Typography, useTheme } from "@mui/joy";
7
- import { Pagination, Tooltip, useMediaQuery } from '@mui/material';
8
- import { useQueryClient } from '@tanstack/react-query';
9
- import { useSnackbar } from 'notistack';
10
- import { useTranslation } from 'react-i18next';
11
- import { useLocation } from 'react-router-dom';
12
- import { useRecoilState, useSetRecoilState } from 'recoil';
13
- import { openGameSaveScreenState } from '../atoms/openGameSaveScreenState';
14
- import { saveLoadAlertState } from '../atoms/saveLoadAlertState';
15
- import { saveScreenPageState } from '../atoms/saveScreenPageState';
16
- import ModalDialogCustom from '../components/ModalDialog';
17
- import TypographyShadow from "../components/TypographyShadow";
18
- import GameSaveData from '../models/GameSaveData';
19
- import { INTERFACE_DATA_USE_QUEY_KEY } from '../use_query/useQueryInterface';
20
- import useQuerySaves from '../use_query/useQuerySaves';
21
- import { useMyNavigate } from '../utilities/navigate-utility';
22
- import { downloadGameSave, loadGameSaveFromFile } from '../utilities/save-utility';
23
-
24
- export default function GameSaveScreen() {
25
- const [open, setOpen] = useRecoilState(openGameSaveScreenState);
26
- const { t } = useTranslation(["ui"]);
27
- const smScreen = useMediaQuery((theme: Theme) => theme.breakpoints.down("lg"));
28
- const setOpenLoadAlert = useSetRecoilState(saveLoadAlertState);
29
- const [page, setPage] = useRecoilState(saveScreenPageState);
30
- const navigate = useMyNavigate();
31
- const { enqueueSnackbar } = useSnackbar();
32
- const queryClient = useQueryClient()
33
- let location = useLocation();
34
-
35
- return (
36
- <ModalDialogCustom
37
- open={open}
38
- setOpen={setOpen}
39
- layout={(smScreen ? "fullscreen" : "center")}
40
- head={<Typography level="h2">
41
- {`${t("save")}/${t("load")}`}
42
- </Typography>}
43
- minWidth="80%"
44
- sx={{
45
- minHeight: "50%",
46
- paddingBottom: 6,
47
- }}
48
- >
49
- <Stack
50
- direction={"row"}
51
- sx={{
52
- position: "absolute",
53
- top: 10,
54
- right: 40,
55
- }}
56
- >
57
- <Tooltip title={t("load_from_file")}>
58
- <IconButton
59
- size="lg"
60
- onClick={() => loadGameSaveFromFile(navigate, () => {
61
- queryClient.invalidateQueries({ queryKey: [INTERFACE_DATA_USE_QUEY_KEY] })
62
- enqueueSnackbar(t("success_load"), { variant: 'success' })
63
- setOpen(false)
64
- })}
65
- >
66
- <FolderOpenIcon fontSize="large" />
67
- </IconButton>
68
- </Tooltip>
69
- <Tooltip title={t("save_to_file")}>
70
- <IconButton
71
- size="lg"
72
- onClick={() => { downloadGameSave() }}
73
- disabled={location.pathname == "/"}
74
- >
75
- <DownloadIcon fontSize="large" />
76
- </IconButton>
77
- </Tooltip>
78
- </Stack>
79
- <Grid
80
- container
81
- >
82
- {/* for 6 element */}
83
- {Array.from({ length: 6 }).map((_, index) => {
84
- let id = page * 6 + index;
85
- return <Grid xs={12} sm={6} md={4} key={"ModalDialogCustom" + index}>
86
- <GameSaveSlot
87
- saveId={id}
88
- onSave={() => {
89
- setOpenLoadAlert({ open: true, data: id, type: "save", deafultName: "" });
90
- }}
91
- onOverwriteSave={(data) => {
92
- setOpenLoadAlert({ open: true, data: id, type: "overwrite_save", deafultName: data.name });
93
- }}
94
- onLoad={(data) => {
95
- setOpenLoadAlert({ open: true, data: { ...data, id: id }, type: "load" });
96
- }}
97
- onDelete={() => {
98
- setOpenLoadAlert({ open: true, data: id, type: "delete" });
99
- }}
100
- />
101
- </Grid>
102
- })}
103
- </Grid>
104
- <Pagination
105
- count={Infinity}
106
- siblingCount={smScreen ? 2 : 7}
107
- page={page + 1}
108
- onChange={(_event, value) => setPage(value - 1)}
109
- sx={{
110
- position: "absolute",
111
- bottom: 7,
112
- right: 0,
113
- left: 0,
114
- justifySelf: "center",
115
- "& .MuiPaginationItem-root": {
116
- color: "var(--joy-palette-text-primary)",
117
- }
118
- }}
119
- />
120
- </ModalDialogCustom>
121
- );
122
- }
123
-
124
- function GameSaveSlot({ saveId, onDelete, onLoad, onOverwriteSave, onSave }: {
125
- saveId: number,
126
- onDelete: () => Promise<void> | void,
127
- onSave: () => Promise<void> | void,
128
- onOverwriteSave: (data: GameSaveData) => Promise<void> | void,
129
- onLoad: (saveData: GameSaveData) => Promise<void> | void,
130
- }) {
131
- const { t } = useTranslation(["ui"]);
132
- const {
133
- isLoading,
134
- data: saveData,
135
- isError,
136
- } = useQuerySaves({ id: saveId })
137
- let location = useLocation();
138
-
139
- if (isLoading) {
140
- return (
141
- <AspectRatio
142
- sx={{
143
- borderRadius: 10,
144
- margin: { xs: 1, sm: 2, md: 1, lg: 2 },
145
- }}
146
- >
147
- <Skeleton />
148
- </AspectRatio>
149
- );
150
- }
151
-
152
- if (!saveData || isError) {
153
- return (
154
- <AspectRatio
155
- sx={{
156
- borderRadius: 10,
157
- margin: { xs: 1, sm: 2, md: 1, lg: 2 },
158
- }}
159
- >
160
- <IconButton
161
- variant="soft"
162
- sx={{
163
- height: "100%",
164
- width: "100%",
165
- }}
166
- onClick={onSave}
167
- disabled={location.pathname == "/"}
168
- >
169
- <SaveAsIcon sx={{ fontSize: '3rem', opacity: 0.2 }} />
170
- </IconButton>
171
- </AspectRatio>
172
- );
173
- }
174
-
175
- return (
176
- <AspectRatio
177
- objectFit="contain"
178
- sx={{
179
- borderRadius: 10,
180
- margin: { xs: 1, sm: 2, md: 1, lg: 2 },
181
- }}
182
- >
183
- <img
184
- src={saveData.image}
185
- style={{
186
- backgroundColor: "#303030",
187
- pointerEvents: "none",
188
- userSelect: "none",
189
- }}
190
- />
191
- <Stack
192
- position={"absolute"}
193
- top={10}
194
- left={10}
195
- sx={{
196
- pointerEvents: "none",
197
- userSelect: "none",
198
- }}
199
- >
200
- <TypographyShadow
201
- level="h2"
202
- >
203
- {saveData.name}
204
- </TypographyShadow>
205
- <TypographyShadow>
206
- {saveData.date.toLocaleDateString()}
207
- </TypographyShadow>
208
- <TypographyShadow>
209
- {saveData.date.toLocaleTimeString()}
210
- </TypographyShadow>
211
- <TypographyShadow>
212
- {`${t("save_slot")} ${saveId + 1}`}
213
- </TypographyShadow>
214
- </Stack>
215
- <Stack
216
- direction={"row"}
217
- position={"absolute"}
218
- bottom={10}
219
- right={10}
220
- >
221
- <IconButton
222
- onClick={() => {
223
- downloadGameSave(saveData)
224
- }}
225
- >
226
- <DownloadIcon
227
- fontSize={"large"}
228
- sx={{
229
- color: useTheme().palette.neutral[300],
230
- }}
231
- />
232
- </IconButton>
233
- <IconButton
234
- onClick={() => onOverwriteSave(saveData)}
235
- >
236
- <SaveAsIcon
237
- fontSize={"large"}
238
- sx={{
239
- color: useTheme().palette.neutral[300],
240
- }}
241
- />
242
- </IconButton>
243
- <IconButton
244
- onClick={() => {
245
- onLoad(saveData)
246
- }}
247
- >
248
- <UnarchiveIcon
249
- fontSize={"large"}
250
- sx={{
251
- color: useTheme().palette.neutral[300],
252
- }}
253
- />
254
- </IconButton>
255
- </Stack>
256
- <Stack
257
- direction={"row"}
258
- position={"absolute"}
259
- top={10}
260
- right={10}
261
- >
262
- <IconButton
263
- color="danger"
264
- size="md"
265
- onClick={onDelete}
266
- >
267
- <DeleteIcon
268
- fontSize={"large"}
269
- />
270
- </IconButton>
271
- </Stack>
272
- </AspectRatio>
273
- );
274
- }
@@ -1,155 +0,0 @@
1
- import { CharacterBaseModel, getCharacterById, narration } from '@drincs/pixi-vn';
2
- import CheckIcon from '@mui/icons-material/Check';
3
- import SearchRoundedIcon from "@mui/icons-material/SearchRounded";
4
- import { Box, Chip, Input, Stack, Theme, Typography } from "@mui/joy";
5
- import Avatar from '@mui/joy/Avatar';
6
- import { useMediaQuery } from '@mui/material';
7
- import React, { useEffect, useState } from 'react';
8
- import { useTranslation } from 'react-i18next';
9
- import Markdown from 'react-markdown';
10
- import { useRecoilState } from 'recoil';
11
- import rehypeRaw from "rehype-raw";
12
- import remarkGfm from "remark-gfm";
13
- import { openHistoryScreenState } from '../atoms/openHistoryScreenState';
14
- import ModalDialogCustom from '../components/ModalDialog';
15
-
16
- export default function HistoryScreen() {
17
- const [open, setOpen] = useRecoilState(openHistoryScreenState);
18
- const [searchString, setSearchString] = useState("")
19
- const { t } = useTranslation(["ui"]);
20
- const smScreen = useMediaQuery((theme: Theme) => theme.breakpoints.down("md"));
21
- const { t: tNarration } = useTranslation(["narration"]);
22
-
23
- useEffect(() => {
24
- window.addEventListener('keydown', onkeydown);
25
- return () => {
26
- window.removeEventListener('keydown', onkeydown);
27
- };
28
- }, []);
29
-
30
- function onkeydown(event: KeyboardEvent) {
31
- if (event.code == 'KeyH' && event.shiftKey) {
32
- setOpen((prev) => !prev)
33
- }
34
- }
35
-
36
- return (
37
- <ModalDialogCustom
38
- open={open}
39
- setOpen={setOpen}
40
- layout={(smScreen ? "fullscreen" : "center")}
41
- head={<Stack
42
- sx={{
43
- width: "100%",
44
- }}
45
- >
46
- <Stack sx={{ mb: 2 }}>
47
- <Typography level="h2">
48
- {t("history")}
49
- </Typography>
50
- </Stack>
51
- <Input
52
- placeholder={t("search")}
53
- value={searchString}
54
- onChange={(e) => setSearchString(e.target.value)}
55
- startDecorator={<SearchRoundedIcon />}
56
- aria-label={t("search")}
57
- />
58
- </Stack>}
59
- minWidth="80%"
60
- sx={{
61
- minHeight: "50%",
62
- }}
63
- >
64
- <Box
65
- sx={{
66
- display: 'flex',
67
- flex: 1,
68
- minHeight: 0,
69
- px: 2,
70
- py: 3,
71
- overflowY: 'scroll',
72
- flexDirection: 'column-reverse',
73
- }}
74
- >
75
- <Stack spacing={2} justifyContent="flex-end">
76
- {narration.narrativeHistory
77
- .map((step) => {
78
- let character = step.dialoge?.character ? getCharacterById(step.dialoge?.character) ?? new CharacterBaseModel(step.dialoge?.character, { name: tNarration(step.dialoge?.character) }) : undefined
79
- return {
80
- character: character?.name ? character.name + (character.surname ? " " + character.surname : "") : undefined,
81
- text: step.dialoge?.text || "",
82
- icon: character?.icon,
83
- choices: step.choices,
84
- inputValue: step.inputValue,
85
- }
86
- })
87
- .filter((data) => {
88
- if (!searchString) return true
89
- return data.character?.toLowerCase().includes(searchString.toLowerCase()) || data.text?.toLowerCase().includes(searchString.toLowerCase())
90
- })
91
- .map((data, index) => {
92
- return <React.Fragment key={"history" + index}>
93
- <Stack
94
- direction="row"
95
- spacing={1.5}
96
- >
97
- <Avatar
98
- size="sm"
99
- src={data.icon}
100
- />
101
- <Box sx={{ flex: 1 }}>
102
- {data.character && <Typography level="title-sm">{data.character}</Typography>}
103
- <Markdown
104
- remarkPlugins={[remarkGfm]}
105
- rehypePlugins={[rehypeRaw]}
106
- components={{
107
- p: ({ children, key }) => {
108
- return <p key={key} style={{ margin: 0 }}>{children}</p>
109
- },
110
- }}
111
- >
112
- {data.text}
113
- </Markdown>
114
- </Box>
115
- </Stack>
116
- <Stack
117
- direction="row"
118
- spacing={0.5}
119
- >
120
- <Box sx={{ flex: 1 }}>
121
- {data.choices && data.choices.map((choice, index) => {
122
- if (choice.hidden) {
123
- return null
124
- }
125
- if (choice.isResponse) {
126
- return <Chip
127
- key={"choices-success" + index}
128
- color="success"
129
- endDecorator={<CheckIcon />}
130
- >
131
- {choice.text}
132
- </Chip>
133
- }
134
- return <Chip
135
- key={"choices" + index}
136
- color="primary"
137
- >
138
- {choice.text}
139
- </Chip>
140
- })}
141
- {data.inputValue && <Chip
142
- key={"choices-success" + index}
143
- color="neutral"
144
- >
145
- {data.inputValue.toString()}
146
- </Chip>}
147
- </Box>
148
- </Stack>
149
- </React.Fragment>
150
- })}
151
- </Stack>
152
- </Box>
153
- </ModalDialogCustom>
154
- );
155
- }
@@ -1,40 +0,0 @@
1
- import { Box, CircularProgress } from "@mui/joy";
2
- import { motion } from "motion/react";
3
-
4
- export default function LoadingScreen() {
5
- return (
6
- <Box
7
- sx={{
8
- height: '100vh',
9
- width: '100vw',
10
- }}
11
- >
12
- <Box
13
- sx={{
14
- position: "absolute",
15
- right: 0,
16
- bottom: 0,
17
- margin: 2,
18
- }}
19
- component={motion.div}
20
- variants={{
21
- open: {
22
- opacity: 1,
23
- scale: 1,
24
- pointerEvents: "auto",
25
- },
26
- closed: {
27
- opacity: 0,
28
- scale: 0,
29
- pointerEvents: "none",
30
- }
31
- }}
32
- initial={"closed"}
33
- animate={"open"}
34
- exit={"closed"}
35
- >
36
- <CircularProgress />
37
- </Box>
38
- </Box>
39
- )
40
- }
@@ -1,98 +0,0 @@
1
- import { addImage, canvas, clearAllGameDatas, narration, pixivnTestStartLabel } from '@drincs/pixi-vn';
2
- import Stack from '@mui/joy/Stack';
3
- import { useQueryClient } from '@tanstack/react-query';
4
- import { motion } from "motion/react";
5
- import { useSnackbar } from 'notistack';
6
- import { useEffect } from 'react';
7
- import { useTranslation } from 'react-i18next';
8
- import { useSetRecoilState } from 'recoil';
9
- import { hideInterfaceState } from '../atoms/hideInterfaceState';
10
- import { openGameSaveScreenState } from '../atoms/openGameSaveScreenState';
11
- import { openSettingsState } from '../atoms/openSettingsState';
12
- import MenuButton from '../components/MenuButton';
13
- import { INTERFACE_DATA_USE_QUEY_KEY } from '../use_query/useQueryInterface';
14
- import useQueryLastSave from '../use_query/useQueryLastSave';
15
- import { useMyNavigate } from '../utilities/navigate-utility';
16
- import { loadSave } from '../utilities/save-utility';
17
-
18
- export default function MainMenu() {
19
- const navigate = useMyNavigate();
20
- const setOpenSettings = useSetRecoilState(openSettingsState);
21
- const setHideInterface = useSetRecoilState(hideInterfaceState);
22
- const setGameSaveScreen = useSetRecoilState(openGameSaveScreenState);
23
- const { enqueueSnackbar } = useSnackbar();
24
- const { t } = useTranslation(["ui"]);
25
- const { t: tNarration } = useTranslation(["narration"]);
26
- const queryClient = useQueryClient()
27
- const { data: lastSave = null, isLoading } = useQueryLastSave()
28
-
29
- useEffect(() => {
30
- setHideInterface(false)
31
- clearAllGameDatas()
32
- let bg = addImage("background_main_menu", "https://andreannaking.com/wp-content/uploads/2021/12/Download-Beautiful-Nature-Landscape-Hd-Wallpaper-Full-HD-Wallpapers.jpg")
33
- bg.load()
34
- })
35
-
36
- return (
37
- <Stack
38
- direction="column"
39
- justifyContent="center"
40
- alignItems="flex-start"
41
- spacing={{ xs: 1, sm: 2, lg: 3 }}
42
- sx={{
43
- height: "100%",
44
- width: "100%",
45
- paddingLeft: { xs: 1, sm: 2, md: 4, lg: 6, xl: 8 }
46
- }}
47
- component={motion.div}
48
- initial="closed"
49
- animate={"open"}
50
- exit="closed"
51
- >
52
- <MenuButton
53
- onClick={() => {
54
- if (!lastSave) {
55
- return
56
- }
57
- loadSave(lastSave, navigate)
58
- .then(() => queryClient.invalidateQueries({ queryKey: [INTERFACE_DATA_USE_QUEY_KEY] }))
59
- .catch((e) => {
60
- enqueueSnackbar(t("fail_load"), { variant: 'error' })
61
- console.error(e)
62
- })
63
- }}
64
- transitionDelay={0.1}
65
- loading={isLoading}
66
- disabled={!isLoading && !lastSave}
67
- >
68
- {t("continue")}
69
- </MenuButton>
70
- <MenuButton
71
- onClick={() => {
72
- canvas.removeAll()
73
- navigate("/narration")
74
- narration.callLabel(pixivnTestStartLabel, {
75
- navigate: navigate,
76
- t: tNarration,
77
- notify: (message, variant) => enqueueSnackbar(message, { variant }),
78
- }).then(() => queryClient.invalidateQueries({ queryKey: [INTERFACE_DATA_USE_QUEY_KEY] }))
79
- }}
80
- transitionDelay={0.2}
81
- >
82
- {t("start")}
83
- </MenuButton>
84
- <MenuButton
85
- onClick={() => setGameSaveScreen(true)}
86
- transitionDelay={0.3}
87
- >
88
- {t("load")}
89
- </MenuButton>
90
- <MenuButton
91
- onClick={() => setOpenSettings(true)}
92
- transitionDelay={0.4}
93
- >
94
- {t("settings")}
95
- </MenuButton>
96
- </Stack>
97
- );
98
- }