diff --git a/packages/core/ui/src/app/index/showTool/SingleTool.tsx b/packages/core/ui/src/app/index/showTool/SingleTool.tsx index 7ec73854..0d14db9e 100644 --- a/packages/core/ui/src/app/index/showTool/SingleTool.tsx +++ b/packages/core/ui/src/app/index/showTool/SingleTool.tsx @@ -103,11 +103,11 @@ export default function SingleTool(props: { [lists, setLists] = useAtom(listsAtom), // states - [jumpto, setJumpTo] = useState(""), - [removeDialogOpen, setRemoveDialogOpen] = useState(false), - [elevation, setElevation] = useState(lowElevation), - [jumpName, setJumpName] = useState(""), - [jumpDialogOpen, setJumpDialogOpen] = useState(false), + [jumpto, setJumpTo] = useState(""), + [removeDialogOpen, setRemoveDialogOpen] = useState(false), + [elevation, setElevation] = useState(lowElevation), + [jumpName, setJumpName] = useState(""), + [jumpDialogOpen, setJumpDialogOpen] = useState(false), // 常量 { diff --git a/packages/core/ui/src/app/index/sidebar/index.tsx b/packages/core/ui/src/app/index/sidebar/index.tsx index 9d34cf8c..0715d7e5 100644 --- a/packages/core/ui/src/app/index/sidebar/index.tsx +++ b/packages/core/ui/src/app/index/sidebar/index.tsx @@ -47,7 +47,7 @@ export default function Sidebar(props: { sortingFor = useAtomValue(sortingForAtom)(isImplant), setSortingFor = useSetAtom(sortingForAtom), [searchText, setSearchText] = useAtom(searchTextAtom), - [clickCount, setClickCount] = useState(0), + [clickCount, setClickCount] = useState(0), setTab = useSetAtom(tabAtom), setExpand = useSetAtom(expandAtom), tools = useAtomValue(toolsAtom); diff --git a/packages/core/ui/src/app/setting/about/reset/index.tsx b/packages/core/ui/src/app/setting/about/reset/index.tsx index 95410058..297d2dfb 100644 --- a/packages/core/ui/src/app/setting/about/reset/index.tsx +++ b/packages/core/ui/src/app/setting/about/reset/index.tsx @@ -20,7 +20,7 @@ import { import Line from "./Line"; const CheckDialog = dynamic(() => import("@verkfi/shared/dialog/Check")); export default function Reset() { - const [dialogOpen, setDialogOpen] = useState(false); + const [dialogOpen, setDialogOpen] = useState(false); return ( diff --git a/packages/core/ui/src/app/setting/appearance/page.tsx b/packages/core/ui/src/app/setting/appearance/page.tsx index b3102496..ee332726 100644 --- a/packages/core/ui/src/app/setting/appearance/page.tsx +++ b/packages/core/ui/src/app/setting/appearance/page.tsx @@ -31,11 +31,14 @@ import ColorPicker from "./ColorPicker"; import { startTransition } from "react"; +import { + Mode +} from "@mui/system/cssVars/useCurrentColorScheme"; const colorModeIcons = [ ["light", LightMode], ["dark", DarkMode], ["system", BrightnessMedium] -] satisfies [PaletteMode | "system", typeof LightMode][]; +] satisfies [Mode, typeof LightMode][]; function ColorTool() { const setInternalPalette = useSetAtom(internalPaletteAtom), { diff --git a/packages/core/ui/src/app/setting/extensions/DialogButtons.tsx b/packages/core/ui/src/app/setting/extensions/DialogButtons.tsx index d278ea24..22322948 100644 --- a/packages/core/ui/src/app/setting/extensions/DialogButtons.tsx +++ b/packages/core/ui/src/app/setting/extensions/DialogButtons.tsx @@ -17,7 +17,8 @@ import { get } from "react-intl-universal"; import { - NXTMetadata + NXTMetadata, + inputTypes } from "./page"; import { extensionsAtomValue @@ -31,7 +32,7 @@ import { startTransition } from "react"; export default function DialogButtons(props: { - type: "modify" | "add"; + type: inputTypes; fileInfo: NXTMetadata; files: file[]; reset(): void; diff --git a/packages/core/ui/src/app/setting/extensions/RemoveExtensionDialog.tsx b/packages/core/ui/src/app/setting/extensions/RemoveExtensionDialog.tsx index 25be7369..ee7984df 100644 --- a/packages/core/ui/src/app/setting/extensions/RemoveExtensionDialog.tsx +++ b/packages/core/ui/src/app/setting/extensions/RemoveExtensionDialog.tsx @@ -33,7 +33,7 @@ export default function RemoveExtensionDialog(props: { onTrue?: () => any; files: file[]; }) { - const [clearData, setClearData] = useState(false), + const [clearData, setClearData] = useState(false), clearExtensionData = useSetAtom(extensionDataCleanerAtom), setExtensions = useSetAtom(extensionsAtom), [lists, setLists] = useAtom(listsAtom); diff --git a/packages/core/ui/src/app/setting/extensions/page.tsx b/packages/core/ui/src/app/setting/extensions/page.tsx index c32fd227..4d5be5ed 100644 --- a/packages/core/ui/src/app/setting/extensions/page.tsx +++ b/packages/core/ui/src/app/setting/extensions/page.tsx @@ -71,7 +71,7 @@ import { const PureDialog = dynamic(() => import("@verkfi/shared/dialog/Pure")); export type inputTypes = "modify" | "add"; export default function ExtensionManager() { - const [addDialogOpen, setAddDialogOpen] = useState(false), + const [addDialogOpen, setAddDialogOpen] = useState(false), [fileArray, setFileArray] = useState([]), [fileInfo, setFileInfo] = useAtom(fileInfoAtom), [files, setFiles] = useAtom(filesAtom), diff --git a/packages/core/ui/src/app/setting/option/Switcher.tsx b/packages/core/ui/src/app/setting/option/Switcher.tsx index 1f2b273f..03b08766 100644 --- a/packages/core/ui/src/app/setting/option/Switcher.tsx +++ b/packages/core/ui/src/app/setting/option/Switcher.tsx @@ -16,7 +16,6 @@ import { import { startTransition } from "react"; -export type stringifyCheck = "false" | "true"; export function Switcher(props: { option: option; }) { diff --git a/packages/core/ui/src/app/setting/option/page.tsx b/packages/core/ui/src/app/setting/option/page.tsx index c5b7581e..aef81bf2 100644 --- a/packages/core/ui/src/app/setting/option/page.tsx +++ b/packages/core/ui/src/app/setting/option/page.tsx @@ -52,7 +52,7 @@ const PureDialog = dynamic(() => import("@verkfi/shared/dialog/Pure")), export type option = [typeof shareAtom, string]; export default function Options() { const [lang, setLang] = useAtom(langAtom), - [dialogOpen, setDialogOpen] = useState(false), + [dialogOpen, setDialogOpen] = useState(false), router = useRouter(), langId = useId(); return ( diff --git a/packages/shared/CopyButton.tsx b/packages/shared/CopyButton.tsx index b8cb2ab9..d0e5cc9d 100644 --- a/packages/shared/CopyButton.tsx +++ b/packages/shared/CopyButton.tsx @@ -34,9 +34,9 @@ function CopyButton(props: { onlyIcon?: boolean; add?: ButtonOwnProps | IconButtonOwnProps; }) { - const [showCopyDoneDialog, setShowCopyDoneDialog] = useState(false), - [copyError, setCopyError] = useState(""), - [showCopyErrorDialog, setShowCopyErrorDialog] = useState(false), + const [showCopyDoneDialog, setShowCopyDoneDialog] = useState(false), + [copyError, setCopyError] = useState(""), + [showCopyErrorDialog, setShowCopyErrorDialog] = useState(false), handleCopy = async () => { try { await navigator.clipboard.writeText(props.children); @@ -48,7 +48,8 @@ function CopyButton(props: { setShowCopyErrorDialog(true); } }, - add = "add" in props ? props.add : { + add = "add" in props ? (props.add || { + }) : { }, sx: SxProps = { ..."sx" in add ? add.sx : { diff --git a/packages/shared/dialog/Input.tsx b/packages/shared/dialog/Input.tsx index 05eb52db..dd3e210e 100644 --- a/packages/shared/dialog/Input.tsx +++ b/packages/shared/dialog/Input.tsx @@ -28,7 +28,7 @@ export default function InputDialog(props: { sx?: SxProps open: boolean; }) { - const [input, setInput] = useState(""), + const [input, setInput] = useState(""), handleClose = () => { props?.onCancel?.(); }; diff --git a/packages/tools/tool-countletter/page.tsx b/packages/tools/tool-countletter/page.tsx index 84ad4e9f..07c595d7 100644 --- a/packages/tools/tool-countletter/page.tsx +++ b/packages/tools/tool-countletter/page.tsx @@ -28,9 +28,9 @@ const logger = new LpLogger({ }); type numberType = 2 | 8 | 10 | 16; function CountLetter() { - const [enterDialogOpen, setEnterDialogOpen] = useState(false), - [alertDialogOpen, setAlertDialogOpen] = useState(false), - [out, setOut] = useState(""), + const [enterDialogOpen, setEnterDialogOpen] = useState(false), + [alertDialogOpen, setAlertDialogOpen] = useState(false), + [out, setOut] = useState(""), systemId = useId(), [numberType, setNumberType] = useState(10); return ( diff --git a/packages/tools/tool-cylinder/page.tsx b/packages/tools/tool-cylinder/page.tsx index 3eb545a2..813ea9b5 100644 --- a/packages/tools/tool-cylinder/page.tsx +++ b/packages/tools/tool-cylinder/page.tsx @@ -34,12 +34,12 @@ import Cylinder from "./makeCylinder"; const throttleTime = 17, initialRadius = 50; function CylinderPage() { - const [radiusX, setRadiusX] = useState(initialRadius), - [radiusZ, setRadiusZ] = useState(initialRadius), - [thickness, setThickness] = useState(1), - [filled, setFilled] = useState(true), - [posX, setPosX] = useState(1), - [posZ, setPosZ] = useState(1), + const [radiusX, setRadiusX] = useState(initialRadius), + [radiusZ, setRadiusZ] = useState(initialRadius), + [thickness, setThickness] = useState(1), + [filled, setFilled] = useState(true), + [posX, setPosX] = useState(1), + [posZ, setPosZ] = useState(1), radiusXID = useId(), radiusZID = useId(), thicknessID = useId(), diff --git a/packages/tools/tool-filter/page.tsx b/packages/tools/tool-filter/page.tsx index b57d0c54..fb52c600 100644 --- a/packages/tools/tool-filter/page.tsx +++ b/packages/tools/tool-filter/page.tsx @@ -38,10 +38,10 @@ const initialScale = 100, scaleMax = 200; export default function Filter() { const [imageArray, setImageArray] = useState([]), - [imageFileName, setImageFileName] = useState("libear-only"), + [imageFileName, setImageFileName] = useState("libear-only"), [imageURL, setImageURL] = useBlobState(libearOnly.src), [imageTypes, setImageTypes] = useState(ImageTypesGen), - [scale, setScale] = useState(initialScale), + [scale, setScale] = useState(initialScale), sizeId = useId(), handleSliderChange = (event: Event, newValue: number | number[]) => setScale(Number(newValue)), handleInputChange = (event: ChangeEvent) => setScale(Number(event.target.value)), diff --git a/packages/tools/tool-jigsaw/page.tsx b/packages/tools/tool-jigsaw/page.tsx index f766e42e..66f8a102 100644 --- a/packages/tools/tool-jigsaw/page.tsx +++ b/packages/tools/tool-jigsaw/page.tsx @@ -68,12 +68,12 @@ const blobToInt8Array = async (blob: Blob) => new Int8Array(await blob.arrayBuff dragImageSize = 32; export default function JigsawEntry() { const [imageArray, setImageArray] = useState([]), - [imageFileName, setImageFileName] = useState(""), - [dialogOpen, setDialogOpen] = useState(false), - [width, setWidth] = useState(initialSize), - [height, setHeight] = useState(initialSize), + [imageFileName, setImageFileName] = useState(""), + [dialogOpen, setDialogOpen] = useState(false), + [width, setWidth] = useState(initialSize), + [height, setHeight] = useState(initialSize), [jigsaws, setJigsaws] = useStoragedState("jigsaws", []), - [resetDialogOpen, setResetDialogOpen] = useState(false), + [resetDialogOpen, setResetDialogOpen] = useState(false), portrait = useMediaQuery("(orientation: portrait)"), widtha = portrait ? `calc(100vw / ${width})` : `calc(100vw / (${width} + 1))`, heighta = portrait ? `calc((100vh - 56px) / (${height} + 1))` : `calc((100vh - 64px) / ${height})`, diff --git a/packages/tools/tool-mathgen/page.tsx b/packages/tools/tool-mathgen/page.tsx index 77421956..e9922fd4 100644 --- a/packages/tools/tool-mathgen/page.tsx +++ b/packages/tools/tool-mathgen/page.tsx @@ -30,13 +30,13 @@ import range from "@verkfi/shared/range"; const defaultMax = 10, defaultItemCount = 20; function MathGen() { - const [min, setMin] = useState(0), - [max, setMax] = useState(defaultMax), - [itemCount, setItemCount] = useState(defaultItemCount), + const [min, setMin] = useState(0), + [max, setMax] = useState(defaultMax), + [itemCount, setItemCount] = useState(defaultItemCount), [maths, setMath] = useState([]), - [subtractionCheck, setSubtractionCheck] = useState(true), - [divisionCheck, setDivisionCheck] = useState(true), - [showOut, setShowOut] = useState(false), + [subtractionCheck, setSubtractionCheck] = useState(true), + [divisionCheck, setDivisionCheck] = useState(true), + [showOut, setShowOut] = useState(false), [calcs, setCalcs] = useState([ "+", "-" diff --git a/packages/tools/tool-mathgen/singleMath.tsx b/packages/tools/tool-mathgen/singleMath.tsx index be0c9385..1aebb1f0 100644 --- a/packages/tools/tool-mathgen/singleMath.tsx +++ b/packages/tools/tool-mathgen/singleMath.tsx @@ -15,7 +15,7 @@ export default function SingleMath(props: { math: string; showOut: boolean; }) { - const [isError, setError] = useState(false), + const [isError, setError] = useState(false), { math, showOut diff --git a/packages/tools/tool-pi/page.tsx b/packages/tools/tool-pi/page.tsx index 86de898f..f8536652 100644 --- a/packages/tools/tool-pi/page.tsx +++ b/packages/tools/tool-pi/page.tsx @@ -18,10 +18,10 @@ import { import generatePis from "./generatePis"; const AlertDialog = dynamic(() => import("@verkfi/shared/dialog/Alert")); function PI() { - const [digits, setDigits] = useState(1), - [useAlertShow, setUseAlertShow] = useState(false), - [showInfoDialog, setShowInfoDialog] = useState(false), - [dialogInfo, setDialogInfo] = useState(""), + const [digits, setDigits] = useState(1), + [useAlertShow, setUseAlertShow] = useState(false), + [showInfoDialog, setShowInfoDialog] = useState(false), + [dialogInfo, setDialogInfo] = useState(""), [out, setOut] = useState(""); return ( <> diff --git a/packages/tools/tool-pillar/SingleCollocation.tsx b/packages/tools/tool-pillar/SingleCollocation.tsx index 47173c63..0725ec9c 100644 --- a/packages/tools/tool-pillar/SingleCollocation.tsx +++ b/packages/tools/tool-pillar/SingleCollocation.tsx @@ -24,7 +24,7 @@ export const lowElevation = 2, export default function SingleCollocation(props: { collocation: collocation; }) { - const [elevation, setElevation] = useState(lowElevation); + const [elevation, setElevation] = useState(lowElevation); return ( {Object.entries(props.collocation).map((value, index) => { }); export default function Pillar() { const [type, setType] = useState("oneEndAndMiddle"), - [length, setLength] = useState(0), + [length, setLength] = useState(0), [filterRules, setFilterRules] = useState(emptyFilterRules as filterRules), choosesId = useId(), sizeLabelId = useId(), @@ -95,7 +95,7 @@ export default function Pillar() { setType(value)} + onChange={(event, value) => setType(value as pillarPositions)} name="chooses-group" > {(Object.keys(examples) as pillarPositions[]).map(single => (""), - [number, setNumber] = useState("0"), + const [string, setString] = useState("零"), + [number, setNumber] = useState("0"), stringId = useId(), numberId = useId(); return ( diff --git a/packages/tools/tool-reversal/page.tsx b/packages/tools/tool-reversal/page.tsx index 949f1bf1..8c7c28f9 100644 --- a/packages/tools/tool-reversal/page.tsx +++ b/packages/tools/tool-reversal/page.tsx @@ -32,92 +32,90 @@ const InputDialog = dynamic(() => import("@verkfi/shared/dialog/Input")), randomFactor = 1000_0000_0000_0000; function Reversal() { const [wordList, setWordList] = useState<[string, number][]>([]), - [words, setWords] = useState(""), - [output, setOutput] = useState(""), - [showSplitDialog, setShowSplitDialog] = useState(false); - return ( - - *": { - mb: 1 + [words, setWords] = useState(""), + [output, setOutput] = useState(""), + [showSplitDialog, setShowSplitDialog] = useState(false); + return <> + *": { + mb: 1 + } + }}> + + {get("reversal.以空格分隔,按回车添加。")} + + { + if (event.key === "Enter") { + setWordList(current => [...current, [ + words, + Math.random() * randomFactor + ]]); + setWords(""); + logger.log("已保存至列表。"); } + }} onChange={event => { + setWords(event.target.value); + }} value={words} /> + {wordList.map(wordArray => { + return ( + { + setWordList(oldWordList => removeArrayItem(oldWordList, wordArray)); + }} deleteIcon={} /> + ); + })} + - { + const stageOutput: [string, number][] = wordList; + stageOutput.sort(() => { + // 0.5用于随机 + // eslint-disable-next-line no-magic-numbers + return Math.random() - 0.5; + }); + setOutput(stageOutput.map(wordArray => { + return wordArray[0]; + }).join("")); + logger.log("已处理。"); }}> - {get("reversal.以空格分隔,按回车添加。")} - - { - if (event.key === "Enter") { - setWordList(current => [...current, [ - words, - Math.random() * randomFactor - ]]); - setWords(""); - logger.log("已保存至列表。"); - } - }} onChange={event => { - setWords(event.target.value); - }} value={words} /> - {wordList.map(wordArray => { - return ( - { - setWordList(oldWordList => removeArrayItem(oldWordList, wordArray)); - }} deleteIcon={} /> - ); - })} - + - - - - {output} - - - - - {get("结果:")}{output} - - { - setWordList(words.split(context).map(word => { - return [ - word, - Math.random() * randomFactor - ]; - })); - logger.log("已拆分。"); - setShowSplitDialog(false); - }} /> + {get("重来")} + + + + {output} + + - ); + + {get("结果:")}{output} + + { + setWordList(words.split(context).map(word => { + return [ + word, + Math.random() * randomFactor + ]; + })); + logger.log("已拆分。"); + setShowSplitDialog(false); + }} /> + ; } export default Reversal; diff --git a/packages/tools/tool-shaizi/Cube.tsx b/packages/tools/tool-shaizi/Cube.tsx index 52d8c7a5..7f37a1dd 100644 --- a/packages/tools/tool-shaizi/Cube.tsx +++ b/packages/tools/tool-shaizi/Cube.tsx @@ -37,7 +37,7 @@ export default function Cube(props: { mesh = useRef(new Mesh()), stage = useRef([]), cacheStage = useRef([]), - cishu = useRef(0), + cishu = useRef(0), materials = [img1, img2, img3, img4, img5, img6].map((img: StaticImageData) => new MeshPhongMaterial({ map: new TextureLoader().load(img.src), color: 16777215 diff --git a/packages/tools/tool-shaizi/page.tsx b/packages/tools/tool-shaizi/page.tsx index 4d18e515..60cdbcfc 100644 --- a/packages/tools/tool-shaizi/page.tsx +++ b/packages/tools/tool-shaizi/page.tsx @@ -12,7 +12,7 @@ import { import ShaiZiCanvas from "./shaiziCanvas"; const defaultCishu = 10; function ShaiZi() { - const [cishu, setCishu] = useState(defaultCishu); + const [cishu, setCishu] = useState(defaultCishu); return ( <> diff --git a/packages/tools/tool-shaizi/shaiziCanvas.tsx b/packages/tools/tool-shaizi/shaiziCanvas.tsx index 27ca1b1a..003bce5e 100644 --- a/packages/tools/tool-shaizi/shaiziCanvas.tsx +++ b/packages/tools/tool-shaizi/shaiziCanvas.tsx @@ -17,7 +17,7 @@ export default function ShaiZiCanvas(props: { cishu: number; }) { // Use useRef hook to access the canvas element - const canvas = useRef(); + const canvas = useRef(undefined as unknown as HTMLCanvasElement); useEffect(() => { canvas.current.setAttribute("height", "200"); }); // 用ifBrowser的话此时canvas.current还没初始化,不行 diff --git a/packages/tools/tool-speech/page.tsx b/packages/tools/tool-speech/page.tsx index a7b5ecfa..4c311747 100644 --- a/packages/tools/tool-speech/page.tsx +++ b/packages/tools/tool-speech/page.tsx @@ -34,6 +34,7 @@ import getShortTimeEnergy from "./getShortTimeEnergy"; import { LiveAudioVisualizer } from "react-audio-visualize" +import { emptySymbol } from "@verkfi/shared/reader/atomWithStorage"; interface warning { /** * 发生时间 @@ -56,36 +57,36 @@ const secondDivMS = 1000, vibrateTimes = 4, vibrateTime = 250, - emptyBlobContext = "empty", + emptyBlobContext = ["Why you downloaded this??? Do not do it!!!"], // 试验得到的常数 NoiseVoiceWatershedWave = 20; // origin 2.3 export default function Speech() { const [status, setStatus] = useState("inactive"), - [mediaRecorder, setMediaRecorder] = useState<"awaqwq" | MediaRecorder>("awaqwq"), - intervalID = useRef(0), - speechTimeIntervalID = useRef(0), - haveTime = useRef(Date.now()), - [countdown, setCountdown] = useState(0), - [showWarning, setShowWarning] = useState(false), - [selectTime, setSelectTime] = useState(false), - [speechTime, setSpeechTime] = useState(defaultSpeechTime), - [allSpeechTime, setAllSpeechTime] = useState(defaultSpeechTime), + [mediaRecorder, setMediaRecorder] = useState(emptySymbol), + intervalID = useRef(0), + speechTimeIntervalID = useRef(0), + haveTime = useRef(Date.now()), + [countdown, setCountdown] = useState(0), + [showWarning, setShowWarning] = useState(false), + [selectTime, setSelectTime] = useState(false), + [speechTime, setSpeechTime] = useState(defaultSpeechTime), + [allSpeechTime, setAllSpeechTime] = useState(defaultSpeechTime), [warnings, setWarnings] = useState([]), /** * 只有第一个块里才有文件头 */ - firstChunk = useRef(new Blob([emptyBlobContext])), + firstChunk = useRef(new Blob(emptyBlobContext)), theme = useTheme(), barColor = theme.palette.primary.main, - audioFile = useRef(new Blob(["Why you downloaded this??? Do not do it!!!"])); + audioFile = useRef(new Blob(emptyBlobContext)); if (isBrowser()) { getRecording(blob => { audioFile.current = new Blob([blob]); }, async chunk => { // 加载文件头 let blob: Blob; - if (await firstChunk.current.text() === emptyBlobContext) { + if (await firstChunk.current.text() === emptyBlobContext[0]) { firstChunk.current = chunk; blob = chunk; } else {