{desc}
55 |91 | {props.word.description} 92 |
93 |{splitted[0]}
11 | {splitted.map((s, i) => { 12 | if (i === 0 || i === 4 || !s) { 13 | return null; 14 | } 15 | return ( 16 |28 | {s} 29 |
30 | ) : null; 31 | })} 32 |{splitted[4]}
36 | > 37 | ); 38 | } 39 | 40 | export function RenderedWordByStep({ 41 | word, 42 | index, 43 | }: { 44 | word: string; 45 | index: number; 46 | }) { 47 | const splitted = SplitWord(word); 48 | return ( 49 | <> 50 |{splitted[0]}
51 | {splitted.map((s, i) => { 52 | if (i === 0 || i === 4 || !s || i !== index) { 53 | return null; 54 | } 55 | return ( 56 |79 | {s} 80 |
81 | ) : null; 82 | })} 83 |{splitted[4]}
87 | > 88 | ); 89 | } 90 | 91 | export function SplitWord(input: string) { 92 | let pre = ""; 93 | let part1 = ""; 94 | let part2 = ""; 95 | let part3 = ""; 96 | let post = ""; 97 | let prev = ""; 98 | let currentType: "pre" | "1" | "2" | "3" | "post" = "pre"; 99 | for (let char of input) { 100 | switch (char) { 101 | case "1": 102 | if (prev === "\n") { 103 | currentType = "1"; 104 | } 105 | break; 106 | case "2": 107 | if (prev === "\n") { 108 | currentType = "2"; 109 | } 110 | break; 111 | case "3": 112 | if (prev === "\n") { 113 | currentType = "3"; 114 | } 115 | 116 | break; 117 | case "\n": 118 | if (prev === "\n" && currentType === "3") { 119 | currentType = "post"; 120 | } 121 | break; 122 | } 123 | switch (currentType) { 124 | case "pre": 125 | pre = pre + char; 126 | break; 127 | case "1": 128 | part1 = part1 + char; 129 | break; 130 | case "2": 131 | part2 = part2 + char; 132 | break; 133 | case "3": 134 | part3 = part3 + char; 135 | break; 136 | case "post": 137 | post = post + char; 138 | break; 139 | } 140 | prev = char; 141 | } 142 | return [ 143 | pre.replace(/^\n+|\n+$/g, ""), 144 | part1.replace(/^\n+|\n+$/g, ""), 145 | part2.replace(/^\n+|\n+$/g, ""), 146 | part3.replace(/^\n+|\n+$/g, ""), 147 | post.replace(/^\n+|\n+$/g, ""), 148 | ] as const; 149 | } 150 | -------------------------------------------------------------------------------- /src/utils/client/fingerprint.ts: -------------------------------------------------------------------------------- 1 | "use client"; 2 | 3 | // utils/fingerprint.js 4 | 5 | import crypto from "crypto"; 6 | import { useEffect, useState } from "react"; 7 | import { z } from "zod"; 8 | 9 | const FPLSSchema = z.object({ 10 | title: z.string(), 11 | desc: z.string(), 12 | }); 13 | type IFPLS = z.infer45 | {t("Desc")} 46 |
47 |113 | {t("ChooseOnly")} 114 | {selected.length === 0 115 | ? t("EmptySelect") 116 | : t("Selected") + selected.join(", ")} 117 |
118 |{t("Desc1")}
115 |{t("Desc2")}
117 |{props.desc}
180 |