feat(module): ️init module with git submogule

This commit is contained in:
LittleBoy 2025-03-26 17:28:30 +08:00
parent 2cd811f68b
commit b804a6fa7e
161 changed files with 30 additions and 26879 deletions

3
.gitmodules vendored Normal file
View File

@ -0,0 +1,3 @@
[submodule "package"]
path = package
url = git@git.wm-app.xyz:Zverse/ai-plugin-fe-basic.git

View File

@ -21,6 +21,6 @@
<body>
<div id="app_ext"></div>
<div id="root"></div>
<script type="module" src="/src/main.tsx"></script>
<script type="module" src="/src/index.tsx"></script>
</body>
</html>

1
package Submodule

@ -0,0 +1 @@
Subproject commit 3b855086ecb55a0c54b45b4688adb11913e1e234

View File

@ -58,5 +58,6 @@
"typescript": "^5.2.2",
"vite": "^5.0.8",
"vite-plugin-make-offline": "^1.0.0"
}
},
"packageManager": "yarn@1.22.21+sha1.1959a18351b811cdeedbd484a8f86c3cc3bbaf72"
}

View File

@ -1,58 +0,0 @@
import {ConfigProvider} from 'antd';
import zhCN from 'antd/locale/zh_CN';
import './assets/App.less'
import AppRoutes from "./routes";
import {Suspense, useEffect} from "react";
import {useUserinfoStore} from "./service/userinfoStore.ts";
import {useBridge} from "@/core/bridge.ts";
import {ApplicationInfo} from "@/core/config.ts";
function App() {
const {initialized, init} = useUserinfoStore()
const {getAppInfo} = useBridge()
const initAppData = async () => {
document.body.oncontextmenu = () => false;
console.log(`APP-BUILD-AT: ${ApplicationInfo.buildVersion}`,ApplicationInfo)
try{
const info = await getAppInfo()
console.log(`start GetAppVersion`,info)
ApplicationInfo.platformVersion = info.version;
ApplicationInfo.platform = info.platform;
ApplicationInfo.environment = info.environment;
ApplicationInfo.deviceId = info.deviceId;
}catch (e){
console.log(`start GetAppVersion error`,e)
}
const logged = await init();
console.log('init user data finished!logged =>', logged)
}
useEffect(() => {initAppData().catch(e=>console.log(e));}, []);
return (
<ConfigProvider
locale={zhCN}
theme={{
token: {
colorPrimary: 'rgba(201, 160, 99, 1)',
borderRadius: 4,
},
components: {
Button: {
colorPrimary: 'rgba(201, 160, 99, 1)',
algorithm: true,
}
}
}}
>
<div className={"app-main"}>
<Suspense>
{initialized && <AppRoutes/>}
</Suspense>
</div>
</ConfigProvider>
)
}
export default App

View File

@ -1,337 +0,0 @@
.test-age {
max-width: 90%;
margin: auto;
height: 100vh;
overflow: hidden;
width: 400px;
.box-container {
border: solid 3px var(--primary-color);
height: 600px;
overflow: hidden;
}
.row-item {
line-height: 50px;
text-align: center;
border-bottom: solid 1px #eee;
&:hover {
background-color: #fafafa;
}
&:last-child {
border-bottom: none;
}
&.active-item {
background-color: #efefef;
}
}
}
.proofread-panel-container {
.proofread-item {
border-radius: 4px;
margin-bottom: 10px;
padding: 18px 24px;
cursor: pointer;
transition: height 0.2s;
margin-left: 0;
position: relative;
background-color: #efefef;
display: flex;
align-items: center;
justify-content: space-between;
&.processed {
background-color: #fff;
outline: solid 1px #f5f5f5;
}
&:before {
content: ' ';
background: var(--proofread-color,#fd6643 );
position: absolute;
left: 0px;
top: 0px;
bottom: 0px;
width: 4px;
border-radius: 4px 0 0 4px;
}
.description {
overflow: hidden;
line-height: 20px;
font-size: 12px;
//display: grid;
//grid-template-rows: 0fr;
//transition: grid-template-rows ease 1s;
height: 0;
interpolate-size: allow-keywords;
transition: height ease 0.5s;
}
.item-description{
word-break: break-all;
margin-top: 10px;
span{
display: inline;
}
}
.description-item-container{
overflow: hidden;
}
&.select {
//box-shadow: 0 0 8px rgba(0, 0, 0, 0.3);
box-shadow: 0px 9px 28px 8px rgba(0, 0, 0, 0.05), 0px 6px 16px 0px rgba(0, 0, 0, 0.08), 0px 3px 6px -4px rgba(0, 0, 0, 0.12);
margin-bottom: 20px;
background-color: #fff;
border-color: #efefef;
outline: 1px solid #efefef;
.description {
//display: block;
//grid-template-rows: 1fr;
height: auto;
}
}
}
&.v3 {
.proofread-item {
display: block;
}
.processed-wrapper {
font-size: 13px;
.state-accept {
color: var(--primary-process-color, #aaaaaa);
margin-top: 4px;
white-space: nowrap;
margin-left: 2px;
}
}
.action {
.btn, .more-action {
margin-top: 10px;
white-space: nowrap;
width: auto;
display: inline-block;
padding: 0 10px;
height: 26px;
line-height: 26px;
color: white;
border: solid 1px var(--primary-color);
background-color: var(--primary-color);
&:hover {
background-color: #fff !important;
color: var(--primary-color) !important;
}
}
}
}
}
.state-filter-tab {
margin-top: 10px;
padding-right: var(--type-width);
.tab-wrapper {
display: flex;
justify-content: center;
}
.tab-item {
border-bottom: none;
height: 40px;
line-height: 38px;
width: 90px;
text-align: center;
border-radius: 4px 4px 0 0;
margin-right: 7px;
cursor: pointer;
position: relative;
font-size: 16px;
&:after{
content: ' ';
position: absolute;
left: 0;
right: 0;
bottom: 1px;
background: rgba(0,0,0,0);
height: 4px;
border-radius: 10px;
}
&.active {
font-weight: bold;
color: var(--primary-color);
&:after{
background: var(--primary-color);
}
}
&:hover {
background-color: #fff;
border-color: #d9d9d9;
}
.tab-item-count{
font-size: 14px;
}
}
}
.proofread-loading-wrapper {
position: fixed;
z-index: 999;
background: center bottom no-repeat #f5f5f5;
background-size: contain;
font-size: 16px;
min-height: 40px;
.display-control-btn{
position: absolute;
right: 10px;
top:10px;
background: #ffffff;
border-radius: 4px;
padding: 3px 4px 3px 3px;
display: flex;
transform: rotate(180deg);
cursor: pointer;
border: solid 1px #fff;
&:hover{
border-color: var(--primary-color);
}
svg{
transform: translateY(1px);
}
&.hide{
transform: rotate(0);
}
}
&.full-screen {
inset: 0;
display: flex;
align-items: center;
justify-content: center;
text-align: center;
}
&.bottom {
left: 10px;
right: 70px;
bottom: 10px;
border-radius: 4px;
font-size: 14px;
font-weight: 600;
background: linear-gradient(90.87deg, rgba(236, 220, 188, 0.9) 26.04%, rgba(240, 219, 178, 0.7) 60.98%, rgba(249, 235, 207, 0.7) 99.6%);
padding: 0 20px;
.progress-bar-container {
width: 100%;
border: solid 1px rgba(214, 170, 105, 0.6);
}
.progress-bar {
border-radius: 4px 0 0 4px;
background: rgba(214, 170, 105, 0.6);
}
}
.progress-container {
margin: 15px 0;
p {
margin-top: 10px;
color: #000;
}
}
.progress-value {
margin-bottom: 5px;
}
.progress-bar-container {
--bg-bar: no-repeat linear-gradient(rgba(202, 161, 101, 1) 0 0);
--bg: linear-gradient(90.87deg, #ECDCBC 26.04%, #F0DBB2 60.98%, #F9EBCF 99.6%);
border-radius: 4px;
overflow: hidden;
width: 200px;
background: var(--bg);
}
.progress-bar {
height: 6px;
width: 0;
background: var(--bg-bar);
transition: width 0.1s;
border-radius: 4px;
&.loading {
position: relative;
overflow: hidden;
background: none;
width: 100%;
&:before, &:after {
content: ' ';
width: auto;
display: block;
background: var(--bg-bar);
border-radius: 4px;
left: 0;
bottom: 0;
top: 0;
position: absolute;
transition: transform 0.2s linear;
transform-origin: left;
animation: progress-bar-loading 2.1s cubic-bezier(0.65, 0.815, 0.735, 0.395) infinite;
}
&:after {
animation: progress-bar-loading-1 2.1s cubic-bezier(0.165, 0.84, 0.44, 1) 1.1s infinite;
}
}
}
.waiting-tips {
margin: 20px 0;
color: rgba(89, 89, 89, 1);
}
.ant-btn {
padding: 0;
margin: 0;
span {
text-decoration: underline;
color: #000;
}
}
}
.list-container {
padding: 10px;
.list-item {
cursor: pointer;
padding: 10px 20px;
border-radius: 4px;
&:hover {
background-color: #efefef;
}
&.active {
color: #fff;
background-color: #c9a063;
}
}
}

View File

@ -1,10 +0,0 @@
<svg width="64" height="64" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_5239_3394)">
<path d="M10.5379 4.66379H9.46422C9.36601 4.66379 9.28565 4.74414 9.28565 4.84236V10.9874C9.28565 11.0455 9.31244 11.0991 9.35931 11.1325L13.049 13.8267C13.1294 13.8848 13.241 13.8691 13.299 13.7888L13.9374 12.9183C13.9977 12.8357 13.9798 12.7241 13.8995 12.6683L10.7165 10.3669V4.84236C10.7165 4.74414 10.6361 4.66379 10.5379 4.66379ZM15.4441 6.34236L18.9441 7.19727C19.0557 7.22405 19.1651 7.13923 19.1651 7.02539L19.183 3.42048C19.183 3.27093 19.0111 3.18611 18.895 3.27986L15.3772 6.02763C15.3506 6.04819 15.3303 6.07585 15.3188 6.10741C15.3072 6.13897 15.3048 6.17315 15.3118 6.20603C15.3188 6.23891 15.3349 6.26914 15.3583 6.29326C15.3817 6.31738 15.4115 6.3344 15.4441 6.34236ZM19.1874 13.0633L17.9218 12.6281C17.8777 12.6129 17.8294 12.6157 17.7873 12.6357C17.7451 12.6557 17.7125 12.6914 17.6964 12.7352C17.654 12.8491 17.6093 12.9607 17.5624 13.0723C17.1651 14.012 16.5959 14.858 15.8682 15.5834C15.1486 16.3053 14.2958 16.8806 13.3571 17.2776C12.3846 17.6888 11.3393 17.8998 10.2834 17.8982C9.21646 17.8982 8.18297 17.6906 7.20976 17.2776C6.27101 16.8806 5.4182 16.3053 4.6986 15.5834C3.97315 14.858 3.40396 14.012 3.0044 13.0723C2.59551 12.0992 2.38602 11.0541 2.38833 9.99861C2.38833 8.93164 2.59592 7.89593 3.00887 6.92272C3.40619 5.98298 3.97538 5.137 4.70306 4.41155C5.42266 3.68972 6.27547 3.11436 7.21422 2.71736C8.18297 2.30441 9.21869 2.09682 10.2857 2.09682C11.3526 2.09682 12.3861 2.30441 13.3593 2.71736C14.2981 3.11436 15.1509 3.68972 15.8705 4.41155C16.0982 4.64147 16.3124 4.8803 16.5089 5.13254L17.8437 4.08789C16.087 1.84236 13.3526 0.398161 10.2812 0.400393C4.93297 0.402625 0.638331 4.74638 0.691902 10.0968C0.745473 15.3535 5.02003 19.5968 10.2857 19.5968C14.4263 19.5968 17.9531 16.9718 19.2968 13.2955C19.3303 13.2017 19.2812 13.0968 19.1874 13.0633Z" fill="#D6AA69"/>
</g>
<defs>
<clipPath id="clip0_5239_3394">
<rect width="20" height="20" fill="white"/>
</clipPath>
</defs>
</svg>

Before

Width:  |  Height:  |  Size: 2.1 KiB

View File

@ -1,43 +0,0 @@
<svg width="207" height="94" viewBox="0 0 207 94" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M81.3939 69.9675V23.3448L40.697 0L0 23.3448V69.9675L40.697 93.3123L81.3939 69.9675Z"
fill="url(#paint0_linear_2366_40336)"/>
<path d="M76.7295 60.4416H79.0956L81.7997 37.4322H79.366L76.7295 60.4416Z" fill="black"/>
<path d="M112.425 31.5288H104.38L103.569 28.7114H101.135L101.946 31.5288H93.4282V34.2792H112.425V31.5288Z"
fill="black"/>
<path d="M98.9711 35.2855H96.4698L93.2925 43.6708H95.7262L98.9711 35.2855Z" fill="black"/>
<path
d="M92.8188 32.7363H85.9909V28.7114H83.6248V32.7363H76.9321V35.4867H83.6248V61.7161H85.9909V35.4867H92.8188V32.7363Z"
fill="black"/>
<path d="M107.016 35.2855L110.193 43.6708H112.694L109.449 35.2855H107.016Z" fill="black"/>
<path
d="M108.3 56.4837C107.016 55.6787 105.867 54.8737 104.852 54.0016C105.799 53.0625 106.61 52.0562 107.286 51.1171C108.03 50.1108 108.638 49.1716 109.111 48.3667C109.585 47.4946 109.99 46.7567 110.193 46.1529C110.464 45.4821 110.599 45.0125 110.734 44.6771L110.802 44.4758H108.368L108.3 44.61C107.962 45.3479 107.421 46.3542 106.475 47.9642C105.664 49.3058 104.447 50.7816 102.96 52.3245C101.472 50.7816 100.255 49.3058 99.4442 47.9642C98.4978 46.3542 97.957 45.3479 97.619 44.61L97.5514 44.4758H95.1177L95.1853 44.6771C95.3205 45.0125 95.4557 45.4821 95.7261 46.1529C95.9965 46.7567 96.4021 47.5617 96.8753 48.3667C97.3486 49.1716 97.957 50.1108 98.633 51.1171C99.309 52.0562 100.12 53.0625 101.067 54.0687C100.053 54.9408 98.9034 55.7458 97.619 56.5508C96.3345 57.3558 94.7796 58.1608 93.1572 58.8987L93.022 58.9658V61.9174L93.2924 61.8503C95.3205 60.9782 97.1458 60.0391 98.7682 59.0328C100.323 58.0266 101.743 57.0203 102.96 55.947C104.176 57.0203 105.529 58.0937 107.083 59.0328C108.706 60.0391 110.531 60.9782 112.627 61.8503L112.897 61.9174V58.9658L112.762 58.8987C111.14 58.0937 109.652 57.2887 108.3 56.4837Z"
fill="black"/>
<path d="M90.2506 37.4322H87.9521L90.5887 60.4416H92.9548L90.2506 37.5663V37.4322Z" fill="black"/>
<path d="M145.618 38.7738H143.116L145.956 54.9408H148.389L145.618 38.7738Z" fill="black"/>
<path
d="M157.312 29.1139H154.946V32.8034H140.479V35.6209H154.946V58.0266C154.946 58.2949 154.878 58.4962 154.676 58.7645C154.54 58.9657 154.338 59.0999 154.135 59.0999H148.051V61.9174H154.135C155.014 61.9174 155.825 61.5149 156.433 60.7099C157.042 59.9049 157.38 59.0328 157.38 57.8924V35.688H160.151V32.8705H157.38V29.1139H157.312Z"
fill="black"/>
<path
d="M137.37 54.6054C136.288 53.2637 135.274 51.855 134.395 50.5133C135.612 48.2996 136.626 46.0858 137.302 43.9392C137.978 41.7925 138.451 39.9142 138.789 38.2371C139.128 36.5601 139.263 35.2184 139.33 34.1451C139.398 33.0718 139.398 32.468 139.398 32.2668V30.858H125.134V33.6755H136.829C136.761 34.2793 136.694 35.0172 136.559 35.9563C136.423 36.9626 136.221 38.1701 135.95 39.4446C135.68 40.7192 135.274 42.128 134.733 43.6709C134.26 45.0796 133.652 46.5554 132.908 48.0312C132.232 46.8238 131.691 45.6163 131.218 44.4759C130.677 43.2013 130.204 41.9938 129.866 40.8534C129.528 39.713 129.19 38.6396 128.987 37.7005C128.784 36.7613 128.581 35.8892 128.446 35.1513V35.0172H126.013V35.2184C126.148 36.0905 126.351 37.0297 126.621 38.1701C126.891 39.3105 127.229 40.518 127.635 41.8596C128.041 43.2013 128.581 44.61 129.257 46.0858C129.866 47.5617 130.677 49.1046 131.556 50.5804C130.745 51.9221 129.798 53.3308 128.717 54.6725C127.635 56.0141 126.351 57.4229 124.931 58.6974L124.863 58.7645V62.2528L125.134 61.9845C126.824 60.5087 128.379 58.9658 129.663 57.4229C130.88 55.947 132.029 54.4041 132.976 52.9283C133.922 54.4041 135.071 55.947 136.356 57.4229C137.708 58.9658 139.263 60.5087 140.953 61.9845L141.223 62.2528V58.7645L141.156 58.6974C139.804 57.3558 138.519 55.947 137.37 54.6054Z"
fill="black"/>
<path
d="M190.911 59.167V45.8846H205.919V43.1342H190.911V32.468H206.797V29.5834H172.388V32.468H188.274V43.1342H173.266V45.8846H188.274V59.167H172.117V61.9845H207V59.167H190.911Z"
fill="black"/>
<path
d="M17.1714 61.7833H20.2811L24.6077 51.788H38.1283L42.4549 61.7833H45.5646L31.368 28.7115L17.1714 61.7833ZM36.979 49.0376H25.757L31.368 35.9564L36.979 49.0376Z"
fill="black"/>
<path d="M58.5444 29.9189H55.5698V61.7833H58.5444V29.9189Z" fill="black"/>
<defs>
<linearGradient id="paint0_linear_2366_40336" x1="81.4256" y1="46.6327" x2="-0.00259662" y2="46.6327"
gradientUnits="userSpaceOnUse">
<stop offset="0.1" stop-color="white" stop-opacity="0"/>
<stop offset="0.1877" stop-color="#F3EADD" stop-opacity="0.0975"/>
<stop offset="0.3016" stop-color="#E6D4B8" stop-opacity="0.224"/>
<stop offset="0.4208" stop-color="#DCC199" stop-opacity="0.3565"/>
<stop offset="0.5453" stop-color="#D3B281" stop-opacity="0.4948"/>
<stop offset="0.677" stop-color="#CEA870" stop-opacity="0.6411"/>
<stop offset="0.8209" stop-color="#CAA266" stop-opacity="0.8009"/>
<stop offset="1" stop-color="#C9A063"/>
</linearGradient>
</defs>
</svg>

Before

Width:  |  Height:  |  Size: 5.1 KiB

View File

@ -1,9 +0,0 @@
<svg width="594" height="594" viewBox="0 0 70 94" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M81.3939 69.9675V23.3448L40.697 0L0 23.3448V69.9675L40.697 93.3123L81.3939 69.9675Z"
fill="#C9A063"/>
<path
d="M17.1714 61.7833H20.2811L24.6077 51.788H38.1283L42.4549 61.7833H45.5646L31.368 28.7115L17.1714 61.7833ZM36.979 49.0376H25.757L31.368 35.9564L36.979 49.0376Z"
fill="white"/>
<path d="M58.5444 29.9189H55.5698V61.7833H58.5444V29.9189Z" fill="white"/>
</svg>

Before

Width:  |  Height:  |  Size: 519 B

View File

@ -1,3 +0,0 @@
<svg width="64" height="64" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M18.511 5.12109L14.8816 1.49163C14.7141 1.32422 14.5088 1.20145 14.2856 1.13449V1.07422H1.78557C1.39049 1.07422 1.07129 1.39342 1.07129 1.7885V18.2171C1.07129 18.6122 1.39049 18.9314 1.78557 18.9314H18.2141C18.6092 18.9314 18.9284 18.6122 18.9284 18.2171V6.13002C18.9284 5.75056 18.7789 5.38895 18.511 5.12109ZM7.14272 2.68136H12.857V5.00279H7.14272V2.68136ZM17.3213 17.3242H2.67843V2.68136H5.71415V5.71708C5.71415 6.11217 6.03334 6.43136 6.42843 6.43136H13.5713C13.9664 6.43136 14.2856 6.11217 14.2856 5.71708V3.16797L17.3213 6.20368V17.3242ZM9.99986 8.44029C8.22531 8.44029 6.78558 9.88002 6.78558 11.6546C6.78558 13.4291 8.22531 14.8689 9.99986 14.8689C11.7744 14.8689 13.2141 13.4291 13.2141 11.6546C13.2141 9.88002 11.7744 8.44029 9.99986 8.44029ZM9.99986 13.4403C9.01325 13.4403 8.21415 12.6412 8.21415 11.6546C8.21415 10.668 9.01325 9.86886 9.99986 9.86886C10.9865 9.86886 11.7856 10.668 11.7856 11.6546C11.7856 12.6412 10.9865 13.4403 9.99986 13.4403Z" fill="#D6AA69"/>
</svg>

Before

Width:  |  Height:  |  Size: 1.1 KiB

View File

@ -1,3 +0,0 @@
<svg width="64" height="64" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M18.2141 1.07422H1.78557C1.39049 1.07422 1.07129 1.39342 1.07129 1.7885V18.2171C1.07129 18.6122 1.39049 18.9314 1.78557 18.9314H18.2141C18.6092 18.9314 18.9284 18.6122 18.9284 18.2171V1.7885C18.9284 1.39342 18.6092 1.07422 18.2141 1.07422ZM17.3213 17.3242H2.67843V2.68136H17.3213V17.3242ZM9.55343 7.50279H13.6606C13.7588 7.50279 13.8391 7.42243 13.8391 7.32422V6.25279C13.8391 6.15458 13.7588 6.07422 13.6606 6.07422H9.55343C9.45522 6.07422 9.37486 6.15458 9.37486 6.25279V7.32422C9.37486 7.42243 9.45522 7.50279 9.55343 7.50279ZM9.55343 10.7171H13.6606C13.7588 10.7171 13.8391 10.6367 13.8391 10.5385V9.46708C13.8391 9.36886 13.7588 9.28851 13.6606 9.28851H9.55343C9.45522 9.28851 9.37486 9.36886 9.37486 9.46708V10.5385C9.37486 10.6367 9.45522 10.7171 9.55343 10.7171ZM9.55343 13.9314H13.6606C13.7588 13.9314 13.8391 13.851 13.8391 13.7528V12.6814C13.8391 12.5831 13.7588 12.5028 13.6606 12.5028H9.55343C9.45522 12.5028 9.37486 12.5831 9.37486 12.6814V13.7528C9.37486 13.851 9.45522 13.9314 9.55343 13.9314ZM6.16057 6.78851C6.16057 7.02531 6.25464 7.25241 6.42209 7.41985C6.58953 7.58729 6.81663 7.68136 7.05343 7.68136C7.29023 7.68136 7.51733 7.58729 7.68478 7.41985C7.85222 7.25241 7.94629 7.02531 7.94629 6.78851C7.94629 6.5517 7.85222 6.3246 7.68478 6.15716C7.51733 5.98972 7.29023 5.89565 7.05343 5.89565C6.81663 5.89565 6.58953 5.98972 6.42209 6.15716C6.25464 6.3246 6.16057 6.5517 6.16057 6.78851ZM6.16057 10.0028C6.16057 10.2396 6.25464 10.4667 6.42209 10.6341C6.58953 10.8016 6.81663 10.8956 7.05343 10.8956C7.29023 10.8956 7.51733 10.8016 7.68478 10.6341C7.85222 10.4667 7.94629 10.2396 7.94629 10.0028C7.94629 9.76599 7.85222 9.53889 7.68478 9.37145C7.51733 9.204 7.29023 9.10993 7.05343 9.10993C6.81663 9.10993 6.58953 9.204 6.42209 9.37145C6.25464 9.53889 6.16057 9.76599 6.16057 10.0028ZM6.16057 13.2171C6.16057 13.4539 6.25464 13.681 6.42209 13.8484C6.58953 14.0159 6.81663 14.1099 7.05343 14.1099C7.29023 14.1099 7.51733 14.0159 7.68478 13.8484C7.85222 13.681 7.94629 13.4539 7.94629 13.2171C7.94629 12.9803 7.85222 12.7532 7.68478 12.5857C7.51733 12.4183 7.29023 12.3242 7.05343 12.3242C6.81663 12.3242 6.58953 12.4183 6.42209 12.5857C6.25464 12.7532 6.16057 12.9803 6.16057 13.2171Z" fill="#D6AA69"/>
</svg>

Before

Width:  |  Height:  |  Size: 2.3 KiB

View File

@ -1,174 +0,0 @@
:root {
scroll-behavior: smooth;
font-family: -apple-system,pingfang, system-ui, Avenir, Helvetica, Arial, sans-serif;
line-height: 1.5;
font-weight: 400;
color-scheme: light dark;
color: rgba(255, 255, 255, 0.87);
background-color: #242424;
font-synthesis: none;
text-rendering: optimizeLegibility;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
--bar-height: 50px;
user-select: none;
overflow: hidden;
//scrollbar-gutter: stable;
--primary-golden-color: rgba(214, 170, 105, 1);
--primary-color: #D6AA69;
--primary-disabled-color: #D9D9D9;
--primary-process-color: #aaaaaa;
--action-btn-radius: 2px;
}
::-webkit-scrollbar {
width: 3px;
}
::-webkit-scrollbar-thumb {
background: #999;
height: 10px;
border-radius: 5px;
&:hover {
background: #666;
cursor: pointer;
}
}
::-webkit-scrollbar-track {
background: #f0f0f0;
border-radius: 5px;
}
.container-overflow-auto{
overflow: auto;
scrollbar-gutter: stable;
}
a {
font-weight: 500;
color: #646cff;
text-decoration: inherit;
}
a:hover {
color: #535bf2;
}
body {
margin: 0;
background: #fff;
min-height: 100vh;
}
.full-width{
width: 100%;
}
.fz-small{
font-size: 14px;
}
.text-tip{
color: #999;
}
.text-link{
cursor: pointer;
color: #000;
text-decoration: underline;
}
.text-link-blue{
cursor: pointer;
color: #558CB7 !important;
}
.pointer{
cursor: pointer;
}
.relative {
position: relative;
}
.ml-2 {
margin-left: 2px;
}
.d-flex {
display: flex;
}
.space-between{
justify-content: space-between;
}
.text-center {
text-align: center;
}
.text-left {
text-align: left;
}
.text-right {
text-align: right;
}
.text-justify {
text-align: justify;
}
.align-start {
.d-flex;
user-select: text;
align-items: start;
}
.justify-between {
justify-content: space-between;
}
.justify-center {
justify-content: center;
}
.align-end {
.d-flex;
align-items: end;
}
.align-center,.item-center {
.d-flex;
align-items: center;
}
.flex-1 {
flex: 1;
}
.ai-proofread-top {
margin-block-start: calc(var(--bar-height) + 10px);
}
.btn-golden.ant-btn-primary{
box-shadow: none;
background: linear-gradient(270deg, #CAA266 0%, #E9C57E 100%);
&:not(:disabled):not(.ant-btn-disabled):hover{
background: linear-gradient(270deg, #CAA266 0%, #CAA266 100%);
}
}
.text-blank-space{
min-width: 12px;
white-space: pre-wrap;
display: inline !important;
//&:after{
// content: ' ';
//}
}
@media (prefers-color-scheme: light) {
:root {
color: #213547;
background-color: #ffffff;
}
}
@media (prefers-color-scheme: dark) {
:root {
color: #213547;
background-color: #ffffff;
}
}

View File

@ -1,33 +0,0 @@
// material-ui
import {CSSObject} from '@mui/material/styles';
import {Box} from '@mui/material';
// project import
interface Props {
color?: string;
bgColor?: string;
size?: number;
variant?: string;
sx?: CSSObject;
}
const Dot = ({size, variant, sx, bgColor,color}: Props) => {
const main = '#f00'
return (
<Box component="span"
sx={{
width: size || 8,
height: size || 8,
borderRadius: '50%',
bgcolor: bgColor || (variant === 'outlined' ? '' : main),
...(variant === 'outlined' && {
border: `1px solid ${color}`
}),
...sx
}}
/>
);
};
export default Dot;

View File

@ -1,28 +0,0 @@
.win-app-title-bar{
user-select: none;
}
.app-title-bar{
display: flex;
align-items: center;
justify-content: space-between;
height: var(--bar-height);
background-color: #eee;
overflow: hidden;
position: fixed;
left:0;right:0;top:0;
padding: 0 10px 0 20px;
z-index: 9999;
//box-shadow: 0 0 5px rgba(0,0,0,0.7);
//
&.show-bar-border{
border-bottom: solid 1px rgba(181, 181, 181, 0.5);
}
.app-close-btn{
&:hover{
background-color: rgba(0,0,0,0.05) !important;
}
}
}
.app-title-bar-placeholder{
height: var(--bar-height);
}

View File

@ -1,47 +0,0 @@
import React from "react";
import {createPortal} from "react-dom"
import {Button} from "antd";
import {CloseOutlined} from "@ant-design/icons";
import './title-bar.less'
export type AppTitleBarProps = {
title?: React.ReactNode;
bordered?: boolean;
backgroundColor?: string;
closeSize?: string | number;
className?:string;
onClose?:()=>void;
}
export const AppTitleBar: React.FC<AppTitleBarProps> = ({title,className,onClose, backgroundColor, closeSize = 16, bordered = true}) => {
const onMouseDown = (evt: React.MouseEvent<HTMLDivElement>) => {
chrome.webview.hostObjects.sync.event.MouseDownDrag();
evt.preventDefault();
// evt.stopPropagation();
}
return createPortal((
<div className={`win-app-title-bar ${className}`} onContextMenu={e => {
e.stopPropagation();
e.preventDefault();
}}>
<div className={`app-title-bar ${bordered ? 'show-bar-border' : ''}`}
style={backgroundColor ? {backgroundColor} : {}} onMouseDown={onMouseDown}>
<div className="app-title" style={{fontSize: 18,color:'#000'}}>{title}</div>
<Button
type="text" className={'app-close-btn'} size={'small'}
onMouseDown={async (e) => {
e.stopPropagation();
if (e.button == 0) {
if(onClose) {
onClose();
}else {
chrome.webview.hostObjects.sync.event.Close();
}
}
}}
icon={<CloseOutlined style={{fontSize: closeSize,color:'#818181'}}/>}></Button>
</div>
<div className="app-title-bar-placeholder"></div>
</div>
), document.querySelector('#app_ext')!)
}

View File

@ -1,175 +0,0 @@
import {Button, Checkbox, Input, Modal, Space, message, App} from "antd";
import React, {useState} from "react";
import {useSetState} from "ahooks";
export type ModalOptions = {
content?: React.ReactNode,
title?: React.ReactNode,
}
message.config({
prefixCls:'ai-proofread'
})
export const showModal = (opt: ModalOptions) => {
Modal.confirm({
title: opt.title,
content: opt.content,
onOk() {
console.log('OK');
},
onCancel() {
console.log('Cancel');
},
})
}
export function useAlert() {
const {modal} = App.useApp()
return {
show(content: React.ReactNode, width = 300, afterClose?: () => void,title?:string) {
modal.info({
content,
title,
className: 'aui-alert',
icon: null,
width,
onOk: afterClose
});
}
}
}
export function useLoading() {
const {message} = App.useApp()
const key = Math.random().toString(16).substring(2);
return {
show(content = 'loading...') {
message.open({
type: 'loading',
content,
duration: 0,
key
}).then()
},
close() {
message.destroy(key)
}
}
}
export function showToast(content: string, type?: 'success' | 'info' | 'warning' | 'error',duration?:number) {
message.open({
type,
content,
className: 'aui-toast',
duration,
}).then();
}
type ConfirmOptions = {
content?: string;
onYes?: (hideNextNotice?: boolean) => void;
onNo?: () => void;
yesText?: string;
noText?: string;
title?: string;
showNextAsk?: boolean;
}
export function useConfirm() {
const [opts, setOpts] = useState<ConfirmOptions>({})
const [open, setOpen] = useState(false)
const [checked, setChecked] = useState(false)
const confirmHolder = (
<Modal
centered
open={open}
title={opts.title}
maskClosable={false}
width={400}
onCancel={() => {
setOpen(false);
opts.onNo?.()
}}
rootClassName="aui-custom-modal"
footer={<div className={`d-flex space-between align-center ${opts.showNextAsk ? '' : 'space-center'}`}>
<div>
{opts.showNextAsk && <Checkbox onChange={e => {
setChecked(e.target.checked)
}}></Checkbox>}
</div>
<Space size={20}>
<Button className="btn-grey" key="back" onClick={() => {
setOpen(false)
opts.onNo?.()
}}>{opts.noText || '否'}</Button>
<Button key="submit" type="primary" onClick={() => {
setOpen(false)
opts.onYes?.(checked)
}}>{opts.yesText || '是'}</Button>
</Space>
</div>}
>
<div className="modal-confirm-body">
{opts.content}
</div>
</Modal>
)
return {
confirmHolder,
showConfirm: (opts: ConfirmOptions) => {
setOpts(opts)
setOpen(true)
}
}
}
type PromptOptions = {
title?: string;
defaultValue?: string;
placeholder?: string;
required?: boolean;
onOK?: (value: string) => void;
}
export function usePrompt() {
const [opt, setOpt] = useSetState<PromptOptions>({})
const [open, setOpen] = useState<boolean>(false)
const [value, setValue] = useState<string>('')
const promptHolder = (
<Modal
centered
open={open}
title={opt.title}
maskClosable={false}
onCancel={() => {
setOpen(false)
}}
onOk={() => {
setOpen(false);
opt.onOK?.(value)
}}
>
<Input
value={value}
onChange={e => setValue(e.currentTarget.value)}
placeholder={opt.placeholder || '请输入'}
/>
</Modal>
)
return {
promptHolder,
show(option: PromptOptions) {
setOpt(option)
setValue(option.defaultValue || '')
setOpen(true)
// return new Promise<string>((resolve) => {
// options.resolve = resolve
// })
}
}
}

View File

@ -1,29 +0,0 @@
import React from "react";
import {Button, Empty, Pagination as AntPage} from "antd"
import {TPaginationResult} from "@/service/types/base.ts";
type TPagination = {
param?: TPaginationResult;
className?: string;
defaultCurrent?: number;
onPageChange?: (page: number) => void;
emptyText?: string | null;
onEmptyReLoadClick?: () => void;
emptyReLoadText?: string;
}
export const Pagination: React.FC<TPagination> = (props) => {
return props.param && props.param.total > 0 ? (
<AntPage
className={`${props.className} simple-page`}
total={props.param.total}
defaultCurrent={props.defaultCurrent}
pageSize={props.param.pageSize}
hideOnSinglePage
current={props.param.current}
showSizeChanger={false}
onChange={props.onPageChange}
simple
/>
) : (props.emptyText === null ? null : (<Empty description={props.emptyText || '暂无数据'}>{props.onEmptyReLoadClick &&
<Button type="link" onClick={props.onEmptyReLoadClick}>{props.emptyReLoadText || '重新加载'}</Button>}</Empty>))
}

View File

@ -1,104 +0,0 @@
import React from "react";
import {Dropdown, Popover} from "antd";
import {cx} from "@emotion/css";
import {CheckOutlined} from "@ant-design/icons";
export type PopoverMenuItems = {
type?: 'divider' | 'title' | string;
label?: string;
render?: React.ReactNode;
icon?: React.ReactNode;
key?: string;
checked?: boolean;
}
export type PopoverMenuProps = {
items: PopoverMenuItems[]
open?: boolean;
theme?: 'dark' | 'light';
children?: React.ReactNode;
onItemClick?: (item: PopoverMenuItems) => void;
itemClassName?: string;
showCheckBox?: boolean;
}
export const PopoverMenu: React.FC<PopoverMenuProps> = (props) => {
return (<Popover open={props.open} trigger={['hover']} overlayClassName={cx('ai-dropdown-menu ai-toolbar', {
'theme-dark': props.theme == 'dark',
'theme-light': (!props.theme || props.theme == 'light')
})} content={<div>
{props.items && props.items.map((it, index) => (
it.type == 'divider' ? <div key={index} className="list-item-divider"></div> : <div
key={index}
className={cx('list-item', it.type == 'title' ? 'list-item-title' : '')}
onClick={() => {
props.onItemClick && it.type != 'title' && props.onItemClick(it)
}}
>
{props.showCheckBox && <span className="pre-icon">{it.checked && <CheckOutlined/>}</span>}
<div className="text">
<span className="icon">{it.icon}</span>
<span
className={cx('text-inner', `${(props.itemClassName || '')}-${it.key}`)}>{it.render || it.label}</span>
</div>
</div>
))}
</div>}>
{props.children}
</Popover>)
}
export type DropDownMenuItem = {
disabled?: boolean;
danger?: boolean;
icon?: React.ReactNode;
title?: string;
type?: 'divider' | 'title' | string;
label?: string;
key?: string;
theme?: 'dark' | 'light';
children?: DropDownMenuItem[];
onClick?: () => void;
}
export type DropdownMenuProps = {
items: DropDownMenuItem[]
open?: boolean;
theme?: 'dark' | 'light';
children?: React.ReactNode;
onItemClick?: (item: DropDownMenuItem) => void;
inToolbar?:boolean;
className?:string;
itemClassName?: string;
placement?: "topLeft" | "topCenter" | "topRight" | "bottomLeft" | "bottomCenter" | "bottomRight" | "top" | "bottom";
selectable?: boolean;
selectedKey?: string;
}
// 通用popover下拉菜单
export const DropdownMenu: React.FC<DropdownMenuProps> = (props) => {
const onClick = ({key}: { key: string }) => {
const item = props.items.find(it => it.key == key);
if (!item) {
return;
}
if (!item.onClick) {
props.onItemClick?.(item)
}
}
return (<Dropdown
arrow={{pointAtCenter: true}}
open={props.open}
trigger={['hover']}
overlayClassName={cx(props.className,`ai-dropdown-menu ${props.selectable?'ai-dropdown-menu-selectable':'no-selected-icon'}`,props.inToolbar === false ?undefined:'ai-toolbar', {
'theme-dark': props.theme == 'dark',
'theme-light': (!props.theme || props.theme == 'light'),
})}
menu={{
items: (props.items as any),
onClick,
selectable: props.selectable,
selectedKeys: props.selectedKey ? [props.selectedKey] : undefined
}}
placement={props.placement || 'bottom'}>
{props.children}
</Dropdown>)
}

View File

@ -1,28 +0,0 @@
import {useSetState} from "ahooks";
import {useNavigate} from "react-router-dom";
import {useDemoStore} from "../../core/use-demo-store.ts";
import {Alert, Button, Space} from "antd";
export function Test(){
const [state, setState] = useSetState({
warning: false
})
const navigate = useNavigate();
const {view} = useDemoStore()
const startProofread = () => {
setState({warning: true})
}
return <>
<h1>Home</h1>
<Space>
<Button onClick={startProofread}></Button>
<Button onClick={()=>navigate('/login')}></Button>
</Space>
{state.warning && <div style={{margin: "10px 0"}}>
<Alert message={'测试一下alert提示效果'} onClose={() => setState({warning: false})}/>
</div>}
<div>
{JSON.stringify(view)}
</div>
</>
}

View File

@ -1,69 +0,0 @@
import {DependencyList, useEffect} from "react";
type NoticeDataType = {
action: string;
data?: any;
}
// type HostBridge = {
// showDialog: (message: string) => void;
// loginSuccess: (userinfo: string|Account) => void;
// noticeOtherWeb: (data: string, target: string | null) => Promise<void>;
// getAllText: () => Promise<DocumentText[]>;
// }
export const bridge: HostBridge = chrome.webview?.hostObjects.bridge;
export const useBridge = () => {
return {
bridge,
showView: (url:string, width:number, height:number, dialog:boolean)=>{
url = `${location.origin}${url}`
bridge.ShowWebView(url,Math.ceil(width * window.devicePixelRatio),Math.ceil(height * window.devicePixelRatio),dialog);
},
getAppInfo: async () => {
const res = await bridge.GetAppVersion()
if(/^\d+(\.\d+){1,2}$/.test(res)){
return {
version: res,
platform: 'wps',
environment: 'Windows',
deviceId:''
}
}
return JSON.parse(res) as AppPluginInfo
},
noticeOtherWeb: (params: string | NoticeDataType, target: string | null = null) => {
if (typeof params == "object") {
params = JSON.stringify(params)
}
return bridge.noticeOtherWeb(params, target)
}
}
};
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
// @ts-expect-error
window.bridge_ext = {
bridge,
markSentence: (content:string) => {
bridge.MarkSentence(content,0).then((res)=>{
console.log('标记成功',res)
})
}
}
export function useBridgeMessageListener<T>(listener: (params: WebMessage<T>) => void,deps?: DependencyList) {
const onBridgeMessage = (e: MessageEvent) => {
listener(e.data);
}
useEffect(() => {
// 添加消息事件监听
chrome.webview?.addEventListener('message', onBridgeMessage)
return () => {
// 移除消息事件
chrome.webview?.removeEventListener('message', onBridgeMessage)
}
}, deps || [])
}

View File

@ -1,54 +0,0 @@
// 数据 主要是保存当前文档id
import {AppUpgradeInfo} from "@/service/types/settings.ts";
export const CACHE_DATA: {
wordCount: number;
state: 'ready' | 'proofreading' | 'finish';
proofreadMode?: 'full' | 'exact' | string;
DocumentID: number;
correctId: number;
selectId: number;
selectStatus: 1 | 2 | 3;
timer: number | null | undefined | object | object;
progress_timer: number | null | undefined | object | object;
progress_count: number;
userinfo?: Account;
upgradeInfo: AppUpgradeInfo;
clearTimer: () => void;
clearProgressTimer: () => void;
currentSentenceList: V3.ProofreadSentence[];
originData: {
[key: number]: V3.OriginDataInfo
}
} = {
state: 'ready',
DocumentID: 0,
wordCount: 0,
correctId: 1,
selectId: -1,
selectStatus: 1,
userinfo: undefined,
upgradeInfo: {},
timer: null,
progress_timer: null,
progress_count: 0,
currentSentenceList: [],
originData: {},
clearProgressTimer: () => {
console.log('clearProgressTimer')
if (CACHE_DATA.progress_timer) {
clearInterval(Number(CACHE_DATA.progress_timer))
}
CACHE_DATA.progress_timer = 0;
CACHE_DATA.progress_count = 0;
},
clearTimer: () => {
if (CACHE_DATA.timer) {
clearTimeout(Number(CACHE_DATA.timer))
CACHE_DATA.timer = null;
}
}
}
export const SentenceListCache: V3.ProofreadSentence[] = [];

View File

@ -1,23 +0,0 @@
export const ApplicationInfo = {
version: AppVersion.version,
buildVersion: AppVersion.buildVersion,
platform: AppVersion.platform,
platformVersion: AppVersion.platformVersion,
environment: 'Dev',
deviceId: ''
}
export const ProofreadModelConfig:{
[key:string]:{
name:string;id:string
}
} = {
exact: {
name:'优先查准',
id:'xt-20250305183041-correct'
},
full:{
name:'优先查全',
id:'xt-20250305183041-allround'
}
}

View File

@ -1,87 +0,0 @@
// 缓存设备id
import FingerprintJS from "@fingerprintjs/fingerprintjs";
import md5 from "crypto-js/md5"
const CACHE = {
deviceId: localStorage.getItem('ai_office_device_id')
}
function getCanvasFingerprint() {
const canvas = document.createElement('canvas');
const ctx = canvas.getContext('2d');
if (!ctx) {
return md5(navigator.userAgent).toString();
}
canvas.width = 2000
canvas.height = 200
canvas.style.display = 'inline'
ctx.rect(0, 0, 10, 10)
ctx.rect(2, 2, 6, 6)
//result.canvasWinding = ((ctx.isPointInPath(5, 5, 'evenodd') === false) ? 'yes' : 'no');
ctx.textBaseline = 'alphabetic'
ctx.fillStyle = '#f60'
ctx.fillRect(125, 1, 62, 20)
ctx.fillStyle = '#069'
ctx.font = '11pt Arial'
ctx.fillText('Cwm fjordbank glyphs vext quiz, \ud83d\ude03', 2, 15)
ctx.fillStyle = 'rgba(102, 204, 0, 0.2)'
ctx.font = '18pt Arial'
ctx.fillText('Cwm fjordbank glyphs vext quiz, \ud83d\ude03', 4, 45)
ctx.globalCompositeOperation = 'multiply'
ctx.fillStyle = 'rgb(255,0,255)'
ctx.beginPath()
ctx.arc(50, 50, 50, 0, Math.PI * 2, true)
ctx.closePath()
ctx.fill()
ctx.fillStyle = 'rgb(0,255,255)'
ctx.beginPath()
ctx.arc(100, 50, 50, 0, Math.PI * 2, true)
ctx.closePath()
ctx.fill()
ctx.fillStyle = 'rgb(255,255,0)'
ctx.beginPath()
ctx.arc(75, 100, 50, 0, Math.PI * 2, true)
ctx.closePath()
ctx.fill()
ctx.fillStyle = 'rgb(255,0,255)'
ctx.arc(75, 75, 75, 0, Math.PI * 2, true)
ctx.arc(75, 75, 25, 0, Math.PI * 2, true)
ctx.fill('evenodd')
return md5(canvas.toDataURL()).toString().replace(
/^(\w{8})(\w{4})(\w{4})(\w{4})(\w{12})$/i,
'$1-$2-$3-$4-$5'
)
}
const DEVICE_ID_KEY = 'ai_office_device_id'
function saveDeviceId(deviceId: string){
CACHE.deviceId = deviceId
localStorage.setItem(DEVICE_ID_KEY, CACHE.deviceId)
}
function calcDeviceId() {
if (!CACHE.deviceId) {
const deviceId = localStorage.getItem(DEVICE_ID_KEY)
if(deviceId){
CACHE.deviceId = deviceId
return
}
// 如果缓存中没有设备id则获取指纹作为设备id
FingerprintJS.load().then(ret => {
ret.get().then((ret) => {
saveDeviceId(ret.visitorId)
})
})
}
}
// 计算设备id
calcDeviceId();
export function getDeviceId() {
if(!CACHE.deviceId){
CACHE.deviceId = getCanvasFingerprint()
saveDeviceId(CACHE.deviceId)
}
return CACHE.deviceId;
}

View File

@ -1,127 +0,0 @@
import {bridge} from "@/core/bridge.ts";
import {CACHE_DATA} from "@/core/cache.ts";
import GovInfo = V3.GovInfo;
/**
*
*/
const QUEUE_INFO: {
state: 'initial' | 'pause' | 'marking' | 'ended';
list: V3.ProofreadSentence[];
govExtra: {
[key:string]: GovInfo[]
},
confusionNotice: {
[key:string]: string
};
correctId: number[];
index: number;
} = {
state: 'initial',
govExtra: {},
confusionNotice: {},
list: [],
correctId: [],
index: 0,
}
/**
*
*/
export function init() {
QUEUE_INFO.list = [];
QUEUE_INFO.govExtra = {};
QUEUE_INFO.confusionNotice = {};
QUEUE_INFO.correctId = [];
QUEUE_INFO.index = 0;
QUEUE_INFO.state = 'initial';
return QUEUE_INFO;
}
/**
*
*/
export function getQueue() {
return QUEUE_INFO;
}
export function getQueueItem(count: number) {
const list: V3.ProofreadSentence[] = [];
for (let i = 0; i < count; i++) {
if (QUEUE_INFO.index >= QUEUE_INFO.list.length) {
break;
}
list.push(QUEUE_INFO.list[QUEUE_INFO.index])
QUEUE_INFO.index++;
}
return list;
}
// 获取当前处理句子
export function getCurrent() {
return QUEUE_INFO.list[QUEUE_INFO.index];
}
export function pause() {
QUEUE_INFO.state = 'pause';
}
export function resume() {
if (QUEUE_INFO.state !== 'pause') return;
QUEUE_INFO.state = 'marking';
processCurrentSentence();
}
export function end() {
QUEUE_INFO.state = 'ended';
QUEUE_INFO.index = QUEUE_INFO.list.length;
}
// 处理当前队列的句子
export function processCurrentSentence() {
if (QUEUE_INFO.state !== 'marking') return;
if (QUEUE_INFO.index >= QUEUE_INFO.list.length) {
QUEUE_INFO.state = 'ended'
return;
}
// 每次取5个句子进行标记
const list = getQueueItem(5)
// 提交句子到word进行标记
try {
// console.log('mark sentence ===> ', list)
bridge.MarkSentence(JSON.stringify(list), CACHE_DATA.DocumentID)
.then(() => {
processCurrentSentence()
})
.catch(e => {
console.log(e)
processCurrentSentence()
})
} catch (e) {
console.log('MarkSentence==>', e)
}
// const sentence = getCurrent();
// setTimeout(() => {
// console.log('sentence', sentence.insert)
// }, 800)
}
/**
*
* @param sentence
*/
export function push(sentence: V3.ProofreadSentence) {
// 判断数据是否重复
// 添加到队列中
QUEUE_INFO.list.push(sentence);
// 判断状态是未开始
if (QUEUE_INFO.state === 'marking') {
return;
}
// 状态改为标记中
QUEUE_INFO.state = 'marking';
// 处理当前句子
processCurrentSentence()
}

View File

@ -1,174 +0,0 @@
import {bridge} from "@/core/bridge.ts";
import {V3Enums} from "@/types/v3/enums.ts";
import {base64Decode} from "@/core/string-utils.ts";
import {getQueue} from "@/core/proofread-queue.ts";
import {CACHE_DATA} from "@/core/cache.ts";
function findIndexByParagraphAndSentenceNum(searchItem: V3.ProofreadSentence, originList: V3.ProofreadSentence[]) {
const index = originList.findIndex(item => {
// 如果paragraph_num 大于 searchItem.paragraph_num或者 paragraph_num 相同sentence_offset 大于 searchItem.sentence_offset则返回true
return item.paragraph_num > searchItem.paragraph_num || (
item.paragraph_num === searchItem.paragraph_num && item.sentence_offset! > searchItem.sentence_offset!
)
})
// console.log(JSON.stringify(searchItem), index)
return index
}
export function parseProofreadSentence(sentence: V3.ProofreadSentence) {
// 过滤纯空格删除
sentence.diffs = sentence.diffs.filter(it=>{
if(it.tag != 'd') return true;
return it.origin.trim().length > 0;
});
sentence.diffs.forEach(it => {
if(it.color) return;
const data = V3Enums.ProofreadType[it.type] as V3.ProofreadTypeConfig
if(!it.addition && data){
it.addition = data.name
}
if(it.type == "incorrect_expression"){
it.tag = '';
}else if(it.type == 'blacklist_mask'){
it.type = 'blacklist';
it.tag = ''
}else if(it.type == 'blacklist_replace'){
it.type = 'blacklist';
it.tag = 'r'
}
it.color = data?.color || '#D6AA69'; //#80D6AA69 #fd6643
if(data && ['incorrect_expression'].includes(it.type)){
it.typeName = data.name
}
//
// it.id = CACHE_DATA.correctId ++ ;
})
}
/**
* proofreadSentence插入到originList中
* @param sentence
*/
export function buildProofreadSentenceList(sentenceList: V3.ProofreadSentence[], originList: V3.ProofreadSentence[]) {
// 1. 对sentence中的diffs数组根据start进行排序
// const diffs = sentence.diffs
// .sort((a, b) => a.start - b.start)
// .map(it=>({
// ...it,
// sentence_offset: sentence.sentence_offset,
// paragraph_num: sentence.paragraph_num
// }))
const queue = getQueue();
sentenceList.forEach(sentence=>{
if(!sentence.paragraph_offset){
const ext = JSON.parse(base64Decode(sentence.ext)) as V3.SentenceExt;
const origin = CACHE_DATA.originData[ext.index]
if(!origin){
return;
}
// 还原原始段落
sentence.paragraph_num = origin.paragraph_num;
sentence.paragraph_offset = origin.paragraph_num;
sentence.sentence_offset = sentence.sentence_num;
}
// 判断originList中是否存在相同的offset
const oldItem = originList.find(item =>
item.paragraph_num === sentence.paragraph_num
&& item.sentence_num === sentence.sentence_num
);
if (oldItem){
// 如果新数据和老数据不一致 则新增
if(oldItem.diffs.length != sentence.diffs.length){
// 比对差异 并将不存在的数据添加到老的diffs中
const oldDiffs = oldItem.diffs.map(it=>it.id);
// const newDiffs = sentence.diffs.filter(newItem=>{
// return !oldItem.diffs.some(oldItem=>oldItem.id === newItem.id)
// })
sentence.diffs.forEach(it=>{
// 判断是否已经存在, 并且添加到correctId中
if(oldDiffs.includes(it.id) || queue.correctId.includes(it.id)) return;
oldItem.diffs.push(it)
queue.correctId.push(it.id)
})
}
return;
}
// 重新赋值
sentence.diffs = sentence.diffs.filter(it=>{
if(it.index.length == 0){
it.index = '-1'
}
// 判断是否已经存在, 并且添加到correctId中
if(queue.correctId.includes(it.id)) return false;
queue.correctId.push(it.id)
return true
});
sentence.diffs.sort((a, b) => a.start - b.start).forEach(it=>{
if(typeof(it.addition) == "undefined") it.addition = '';
})
// 2. 根据sentence的offset计算出当前结果在originList中所处的位置
const index = findIndexByParagraphAndSentenceNum(sentence, originList)
// 3. 根据找到的位置, 将diffs插入到originList中
//如果index为-1则说明sentence在originList的最后面直接插入即可
if (index === -1) {
originList.push(sentence)
// return [...originList, sentence]
} else {
originList.splice(index, 0, sentence)
}
})
originList.forEach(sentence=>{
// 过滤纯粹的空格删除
sentence.diffs = sentence.diffs.filter(it=> {
if( it.tag == 'd' && (!it.origin || it.origin.trim().length == 0)) return false;
return true;
})
})
return originList;//[...originList.slice(0, index), sentence, ...originList.slice(index)]
}
export function parseV3ProofreadResult(sentences: V3.ProofreadSentence[], disabled: number[] = []) {
const list: V3.ProofreadCorrect[] = [];
const count: {
[key: string]: number
} = {
total: 0
};
try {
// 遍历内容
sentences.forEach((s) => {
s.diffs.forEach(it => {
if (disabled.includes(it.id)) return;
list.push(it)
if (!count[it.type]) count[it.type] = 0;
count['total']++;
count[it.type]++;
})
})
} catch (e) {
console.log('parseV3ProofreadResult=>', e)
}
return {
list,
count: count as V3.ProofreadCount
}
}
export async function saveProofreadCache(cache: V3.CacheData,silent: boolean) {
return await bridge.SaveCache(CACHE_DATA.DocumentID, btoa(encodeURIComponent(JSON.stringify(cache))), silent);
}
export async function loadProofreadCache() {
const res = await bridge.LoadCache();
const data = JSON.parse(res) as BridgeResult<string>
if (data.code != 0) {
throw new Error(data.message)
}
return JSON.parse(decodeURIComponent(atob(data.data))) as V3.CacheData
}

View File

@ -1,62 +0,0 @@
// import Base64 from 'crypto-js/enc-base64';
// import Utf8Encode from 'crypto-js/enc-utf8'
/**
*
* @param char
*/
export function isInvisibleChar(char: string) {
return char.charCodeAt(0) < 32 || char.charCodeAt(0) == 127;
}
/**
*
* @param str
*/
export function getAndRemoveInvisibleChars(str: string) {
const invisibleChars: { pos: number, char: string }[] = [];
let newStr = '';
// let lastPos = 0;
for (let i = 0; i < str.length; i++) {
const char = str[i];
if (isInvisibleChar(char)) {
invisibleChars.push({pos: i, char});
} else {
newStr += char;//str.substring(lastPos,i);
// lastPos = i + 1;
}
}
return {newStr, invisibleChars};
}
/**
*
* @param content
*/
export function isBlankOrInvisibleContent(content: string) {
///^[\x20-\x7E\x7F-\x9F]+$/.test(content)
return !content || content.trim().length === 0 || /^[\x00-\x1F\x7F-\x9F]+$/.test(content);
}
const FootnoteRegExp = /^\[footnoteRef:\d+\]|\[endnoteRef:\d+\]$/
// 判断内容是否时脚注
export function isFootnote(content: string) {
return FootnoteRegExp.test(content);
//return content.startsWith('[^') && content.endsWith(']');
}
/**
* base64编码
* @param str
*/
export const base64Encode = (data: string) => btoa(encodeURI(data));//Base64.stringify(Utf8Encode.parse(data)).toString();
/**
* base64解码
* @param str
*/
export const base64Decode = (content: string) => decodeURI(atob(content));//Utf8Encode.stringify(Base64.parse(content));
export const stringIsEmpty = (str: string|null|undefined) => !str || str.length === 0;

View File

@ -1,32 +0,0 @@
import {create} from "zustand";
export type ModalStoreType = {
open: boolean;
show: () => void;
hide: () => void;
}
type CommonStoreKeys = 'login'
type CommonStoreType = {
view: {
[key in CommonStoreKeys]: boolean;
};
showView: (key: CommonStoreKeys) => void;
hideView: (key: CommonStoreKeys) => void;
}
export const useDemoStore = create<CommonStoreType>((set, _, _state) => ({
view: {
login: false
},
showView: (key: CommonStoreKeys) => {
const view = _state.getState().view;
view[key] = true
set({view})
},
hideView: (key: CommonStoreKeys) => {
const view = _state.getState().view;
view[key] = false
set({view})
}
}))

23
src/index.tsx Normal file
View File

@ -0,0 +1,23 @@
import ReactDOM from "react-dom/client";
import createApp from "../package/package/index.tsx"
const HelloWorld = ()=><h1>Hello world</h1>
console.log(createApp)
const App = createApp([
{
path: "hello-world",
element: <HelloWorld/>
},
{
path: "hello-2",
element: <HelloWorld/>
},
{
path: "hello-3",
element: <HelloWorld/>
}
])
ReactDOM.createRoot(document.getElementById('root')!).render(App)

View File

@ -1,5 +0,0 @@
import ReactDOM from 'react-dom/client'
import './assets/index.less'
import App from './App.tsx'
ReactDOM.createRoot(document.getElementById('root')!).render(<App />)

View File

@ -1,39 +0,0 @@
import React, {useEffect, useRef, useState,} from "react";
import styles from "./style.module.less";
import markdownit from "markdown-it";
type EllipsisParagraphProps = {
content: string;
className?: string;
}
const md = markdownit()
export default function EllipsisParagraph({content,className}: EllipsisParagraphProps) {
const contentRef = useRef<HTMLDivElement | null>(null);
const [expanded, setExpanded] = useState(false);
const [state, setState] = useState({
expandVisible: false,
})
useEffect(() => {
if (contentRef.current) {
const height = contentRef.current.getBoundingClientRect().height,
scrollHeight = contentRef.current.scrollHeight;
if (scrollHeight > height) {
setState({expandVisible: true,})
}
}
}, [contentRef])
return (<div className={styles.detectionResultContainer}>
<div
ref={contentRef} className={`${styles.detectionResult} ${className || ''}`}
dangerouslySetInnerHTML={{__html: content?md.render(content):''}}
style={expanded ? {maxHeight: 'none',height:'auto'} : {maxHeight: '100px'}}
></div>
{state.expandVisible && <div className={styles.contentExpand}>
<span onClick={() => setExpanded(!expanded)}>{expanded ? '收起' : '展开'}</span>
</div>}
</div>)
}

View File

@ -1,30 +0,0 @@
import {Divider, Space} from "antd";
import React from "react";
import styles from "./style.module.less";
import {DetectionType} from "./types.ts";
import {cutSummary} from "@/utils/strings.ts";
export default function GenerateResult({type,summary,location}:{
type: DetectionType;
summary?: string;
location?: string;
onGenerated: () => void;
}){
return (<div className={styles.listItem}>
<Space>
<strong>{(type == DetectionType.All || type == DetectionType.AllError) ? '全文检测' : '段落检测'}</strong>
{type == DetectionType.Paragraph && <>
<Divider type={'vertical'}/>
<span className={styles.summaryText}>{location?`${location}`:''}{cutSummary(summary)}</span>
</>}
</Space>
<Divider style={{margin:'10px 0'}}/>
<div className={styles.detectionResult}>
<div className={styles.generating}>
<span>...</span>
</div>
</div>
</div>)
}

View File

@ -1,100 +0,0 @@
.header {
}
.page {
background-color: #f5f5f5;
min-height: 100vh;
padding: 0 20px;
}
.contentContainer {
}
.noData {
text-align: center;
height: calc(100vh - 100px);
display: flex;
align-items: center;
justify-content: center;
}
.summaryText {
font-size: 14px;
}
.listContainer {
max-height: calc(100vh - 80px);
padding-right: 5px;
margin-right: -5px;
overflow: auto;
margin-top: -4px;
}
.listItem {
padding: 15px 15px;
margin: 15px 0;
background-color: #fff;
border-radius: 3px;
&:first-child {
margin-top: 5px;
}
&:last-child {
margin-bottom: 0;
}
}
.detectionResultContainer {
text-align: justify;
position: relative;
}
.detectionResult{
line-height: 20px;
height: 60px;
font-size: 14px;
overflow: hidden;
user-select: text;
p,h1,h2,h3,h4,h5,h6,ul,ol,li{
margin: 0;
font-size: 14px;
}
h1{
font-size: 16px;
margin-top: 20px;
&:first-child{
margin-top: 0;
}
}
h2{
margin-top: 20px;
&:first-child{
margin-top: 0;
}
}
}
.resultError{
color: rgba(255, 0, 0, 1);
}
.contentExpand {
margin-top: 5px;
display: block;
text-align: right;
color: rgba(214, 170, 105, 1);
span{
cursor: pointer;
font-size: 14px;
}
}
.expandedBtn {
position: absolute;
right: 0;
}
.generating {
color: rgba(68, 52, 255, 1);
min-height: 100px;
user-select: none !important;
}

View File

@ -1,7 +0,0 @@
export enum DetectionType {
All = 1,
Paragraph = 2,
AllError = 3,
ParagraphError = 4
}

View File

@ -1,238 +0,0 @@
import {Divider, Empty, Space} from "antd";
import React, {useEffect, useState} from "react";
import {AppTitleBar} from "@/components/app/title-bar.tsx";
import styles from './components/style.module.less'
import {DetectionType} from "./components/types.ts";
import EllipsisParagraph from "./components/ellipsi-paragraph.tsx";
import GenerateResult from "./components/generating.tsx";
import {useBridge, useBridgeMessageListener} from "@/core/bridge.ts";
import { getDetectionResult, parseDetectionResult, sendContentToDetection } from '@/service/api/detection.ts';
import {cutSummary} from "@/utils/strings.ts";
import {sleep} from "@/utils/sleep.ts";
const runCache = {
first: true
}
// 检测状态
enum DetectionResultStatus {
// 状态需要继续请求(未完成)
Pending = 101,
// result为json格式字符串需要转换成DetectionResult[]
Success = 200,
// 成功状态,未检测到常识性错误
Correct = 201,
// 400+ 异常
Error = 400
}
type IState = {
generating: boolean;
generateType: DetectionType;
generateSummary: string;
location: string;
}
export default function CommonsenseDetection() {
const detectionApi = chrome.webview.hostObjects.detection;
const {bridge} = useBridge()
const [state, setState] = useState<IState>({
generating: false,
generateType: DetectionType.All,
generateSummary: '',
location: ''
})
const [detectionHistory, setHistory] = useState<Detection.DetectionInfo[]>([]);
function saveHistory(prev:IState,result:string,type:DetectionType){
const item:Detection.DetectionInfo = {
id: detectionHistory.length + 1,
result_content:result,
summary: prev.generateSummary,
location: prev.location,
type,
}
// 重置检测状态
detectionApi.SetCheckingData(false, '', prev.generateType == DetectionType.All ? '' : prev.generateSummary, '')
//存储结果
setHistory((list) => [...list, item])
detectionApi.SetHistory(JSON.stringify(item));
return {...prev,generating: false, }
}
// 获取检测结果
const getCheckResult = (key: string,type:number) => {
getDetectionResult(key,type).then((ret) => {
if (ret.status == DetectionResultStatus.Pending) {
// 没有结果
setTimeout(() => {
getCheckResult(key,type)
}, 5000);
return;
}else {
const result = ret.status == DetectionResultStatus.Success ? parseDetectionResult(ret) : ret.result;
setState(prev => saveHistory(prev,result,prev.generateType))
}
}).catch(e=>{
setState(prev => saveHistory(prev,e.message || '常识检测服务异常,请稍后重试',prev.generateType == DetectionType.All ?DetectionType.AllError:DetectionType.ParagraphError))
})
}
/**
*
*/
const checkExistsTask = async () => {
const ret = JSON.parse(await detectionApi.GetCheckStatus()) as Detection.CheckResult;
if (ret.isChecking) {
const generateType = ret.checkingSummary && ret.checkingSummary.length > 0?DetectionType.Paragraph : DetectionType.All
setState(prev => ({
...prev,
generating: true,
generateSummary: ret.checkingSummary,
location: ret.checkingLocation,
generateType,
}))
// 使用缓存的key进行获取检测结果
getCheckResult(ret.checkingKey!,generateType)
return true;
}
return false
}
const startCheck = async (content: string, type: DetectionType, location = '') => {
if(runCache.first) {
runCache.first = false
await sleep(0.2)
}
const exists = await checkExistsTask();
if (exists) {
return;
}
setState(() => ({
generating: true,
generateType: type,
generateSummary: content,
location
}))
try {
const ret = await sendContentToDetection(content,type)
// 存储检测数据
detectionApi.SetCheckingData(true, ret.assistantKey, type == DetectionType.All ? '' : content,location)
// 获取检测结果 ai段落校对后端这边采用分段异步请求了组装 等2s后再获取
setTimeout(()=>getCheckResult(ret.assistantKey,type),2000)
} catch (e) {
bridge.ShowMessage('常识检测失败,请稍后重试',3500,false)
setState(prev => ({
...prev,
generating: false,
}))
}
}
const scrollToBottom = () => {
const scroller = document.querySelector('.list-container')
// 判断是否为null
if (!scroller) {
return;
}
// 自动滚动到底部
scroller.scrollTo({
behavior: 'smooth',
top: scroller.scrollHeight + scroller.getBoundingClientRect().height
})
}
useEffect(() => {
requestAnimationFrame(scrollToBottom)
}, [state.generating,detectionHistory])
// 全文检测
const checkAll = () => {
bridge.GetDocumentAllText().then(async (result) => {
await startCheck(result, DetectionType.All)
})
}
// 选中段落检测
const checkRange = (start: number, end: number) => {
if (start == end || start > end) {
return false;
}
bridge.GetTextByRange(start, end).then(async (result) => {
try {
const ret = JSON.parse(result) as { text: string; line: number; page: number; };
await startCheck(ret.text, DetectionType.Paragraph, `${ret.page}页第${ret.line}`)
} catch (e) {
return false;
}
})
}
/**
*
*/
useBridgeMessageListener<string>(({Message, Data}) => {
const data = Data ? JSON.parse(Data) : {}
if (Message == 'detect-all') {
checkAll()
} else if (Message == 'detect-range') {
checkRange(data.start, data.end)
} else {
runCache.first = false
scrollToBottom()
// document.querySelector('.list-container')?.scrollTo({
// behavior: 'smooth', top: 0
// })
}
});
useEffect(() => {
// 通知初始化完成
detectionApi.WebInitializationCompleted();
// 获取当前历史
detectionApi.GetHistory().then((result) => {
setHistory(JSON.parse(result))
})
// 初始化已经存在任务的状态
checkExistsTask().then()
}, [])
return (<>
<AppTitleBar
className={styles.header}
bordered={false}
backgroundColor={'#f5f5f5'}
onClose={() => detectionApi.Close()}
/>
<div className={styles.page}>
<div className={styles.contentContainer}>
<div className={`${styles.listContainer} list-container`}>
{!state.generating && detectionHistory.length == 0 && <div className={styles.noData}>
<Empty description={'暂无检测记录'}/>
</div>}
{detectionHistory.map((item, idx) => {
return (<div className={styles.listItem} key={idx}>
<Space>
<strong>{(item.type == DetectionType.All || item.type == DetectionType.AllError) ? '全文检测' : '段落检测'}</strong>
{(item.type == DetectionType.Paragraph || item.type == DetectionType.ParagraphError) && <>
<Divider type={'vertical'}/>
<span className={styles.summaryText}>{item.location?`${item.location}`:''}{cutSummary(item.summary)}</span>
</>}
</Space>
<Divider style={{margin: '10px 0'}}/>
<div>
<div className="text">
<EllipsisParagraph className={item.type == DetectionType.AllError || item.type == DetectionType.ParagraphError ? styles.resultError:''} content={item.result_content}/>
</div>
</div>
</div>)
})}
{state.generating && <GenerateResult
summary={state.generateSummary} location={state.location}
type={state.generateType} onGenerated={() => {
setState(prev => ({...prev, generating: false}))
}}/>}
</div>
</div>
</div>
</>);
}

View File

@ -1,297 +0,0 @@
.proofread-container {
.proofread-items, .types {
box-sizing: border-box;
}
.proofread-items {
display: flex;
flex-direction: column;
padding-bottom: 15px;
max-width: calc(100% - 60px);
}
.operation-button {
padding: 10px 0;
}
.btn-accept {
background-color: rgba(0, 0, 0, 0);
color:var(--selected-color);
border-color: var(--selected-color);
&:hover{
background-color: #e7eaf0;
}
}
.btn-cancel{
--btn-background-color: #c9c9c9;
&:hover{
--btn-background-color: #a2a2a2;
}
}
.btn-rollback {
border-color: var(--border-color);
background-color: transparent;
}
}
.proofread-list {
.description {
height: 0;
overflow: hidden;
font-size: 12px;
transition: all 0.5s;
}
span {
display: inline-block;
}
.item:last-child + .selected-line{
display: none;
}
.info{
max-width: 100%;
flex: 1;
}
.origin,.replaced {
max-width: 80%;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
padding: 2px 4px;
//height: 30px;
}
.origin {
color:#000;
}
.replaced {
background-color: var(--primary-color, #558CB7);
color: #fff;
border-radius: 3px;
}
.select{
.replaced {
}
.origin,.replaced {
white-space: normal;
//max-width: 100px;
}
}
.proofread-replace-item-replace{
.origin,.replaced {
max-width: 50%;
}
}
.proofread-replace-item-delete,
.proofread-replace-item-insert{
.origin {
//max-width: 180px;
}
&.select{
.origin,.replaced {
white-space: inherit;
//max-width: 160px;
}
}
}
.action-text {
color: var(--primary-color);
margin-left:20px;
font-weight: bold;
min-width: 40px;
white-space: nowrap;
}
.arrow {
margin: 0 10px;
}
}
// 右侧面板
.panel-right-state-wrapper {
flex: 1;
display: flex;
align-items: center;
justify-content: center;
text-align: center;
color: #979797;
.desc {
margin: 5px 0 20px;
}
.proofread-state-perfect {
.desc {
font-size: 18px;
margin-top: 10px;
}
}
.proofread-state-analyzing{
font-size: 18px;
color: #000;
.remain{
font-weight: bold;
}
.remain-time{
margin-top: 10px;
}
.value{
color: #FA674A;
font-size: 20px;
}
.unit{
font-size: 14px;
margin-left: 3px;
}
.control{
color: #979797;
margin-top: 30px;
line-height: 26px;
.small{
font-size: 14px;
}
}
.back-to-document{
margin-top: 30px;
}
}
}
// tihuan
.text-replace-item {
position: relative;
cursor: pointer;
padding: 5px 0;
&:before{
content:' ';
display: none;
position: absolute;
left:-1px;
right:-1px;
bottom: -5px;
top:-5px;
background-color: rgba(253, 102, 67, 0.4);
}
&.replace-type-replace{
padding-bottom: 7px;
--background-image:url(./../../assets/editor/replace.svg);
background-image:var(--background-image);
background-size: 12px 5px;
background-repeat: repeat-x;
background-position:0 26px;
&:after{
//content:'\2000\2000\2000\2000';
//display: block;
//position: absolute;
//left:0;right:0;
//bottom: -7px;
//height: 5px;
//background-image:linear-gradient(135deg, transparent 40%, var(--current-color,#f00), transparent 60%),
//linear-gradient(45deg, transparent 40%, var(--current-color,#f00), transparent 60%);
//background-size: 10px 10px;
//background-repeat: repeat-x;
//background-position: 0 0rem;
}
}
&.text-replace-none{
text-decoration:none;
border-bottom:none;
color: inherit;
cursor: inherit;
}
&.processed-accept{
--current-color:var(--primary-color) !important;
&.replace-type-replace{
--background-image:url(./../../assets/editor/replace-accept.svg);
background-image: var(--background-image);
}
}
&.processed-ignore{
border-color:#c9c9c9 !important;
--current-color:#c9c9c9 !important;
&.replace-type-replace{
--background-image:url(./../../assets/editor/replace-ignore.svg);
background-image: var(--background-image);
}
}
&.replace-type-insert{
--background-image:url(./../../assets/editor/insert.svg);
min-width: 15px;
background-size: 16px 30px;
background-repeat: repeat-x;
background-position: 0 1px;
&:not(.processed){
background-image: var(--background-image);
color: transparent;
&::selection{
color: transparent;
text-decoration-color: #fff;
}
}
&.processed-ignore{
display: none;
}
}
&.selection {
//background-color: rgba(253, 102, 67, 0.4);
background-image: var(--background-image),linear-gradient(to bottom,rgba(253, 102, 67, .4),rgba(253, 102, 67, .4)) !important;
background-size: 12px 5px,100% 28px;
background-position:0 26px,0 0;
&.replace-type-delete,&.replace-type-insert.processed{
background-image: linear-gradient(to bottom,rgba(253, 102, 67, .4),rgba(253, 102, 67, .4)) !important;
background-size: 100% 28px;
background-position: 0 0;
}
&.replace-type-insert:not(.processed){
background-size: 16px 30px,100% 28px;
background-position:0 1px,0 0;
}
}
&.replace-type-delete{
text-decoration: line-through;
text-decoration-color: var(--current-color,#f00);
text-decoration-thickness: 2px;
border-bottom:none;
&.processed-ignore{
border-color:gray !important;
--current-color: gray !important;
//text-decoration:none;
}
}
&.processed {
&.processed-ignore{
//text-decoration:none;
//border-bottom:none;
}
&.processed-delete:not(.processed-delete-init) {
&:before {
//content: attr(data-replace-text);
text-decoration: line-through;
}
}
}
}
.text-replace-item.processed-delete,.replace-type-insert.processed-ignore{
width: 4px;
max-width: 4px;
min-width: 4px;
display: inline-block !important;
height: 30px;
vertical-align: middle;
}

View File

@ -1,777 +0,0 @@
.view-size-notice {
position: fixed;
//inset-inline: 0;
//inset-block-start: 0;
inset: 0;
display: flex;
align-items: center;
justify-content: center;
background-color: rgba(255, 255, 255, 0.2);
padding: 10px;
line-height: 30px;
z-index: 9999;
text-align: center;
font-weight: bold;
font-size: 14px;
backdrop-filter: blur(2px);
}
@keyframes progress-bar-animation {
0% {
background-position: -150% 0, -150% 0
}
100% {
background-position: 250% 0, 250% 0
}
}
.proofread-notice-wrapper {
position: fixed;
inset: 0;
z-index: 999;
//url(./images/loading.svg)
background: center bottom no-repeat #f5f5f5;
background-size: contain;
text-align: center;
display: flex;
align-items: center;
justify-content: center;
font-size: 14px;
.error-notice {
p {
margin: 0;
color: rgba(140, 140, 140, 1);
font-size: 12px;
}
.error-title {
color: #000;
font-size: 20px;
font-weight: bold;
}
}
.buttons {
button {
width: 260px;
}
}
}
.proofread-panel {
--btn-size: 40px;
--padding-right: 0px;
--padding-left: 0px;
--padding: 10px;
--type-width: 60px;
--header-height: 53px;
font-size: 14px;
.panel-controls {
position: absolute;
top: 0;
bottom: 0;
left: 0;
width: calc(var(--padding-left) - var(--padding-right));
background: #fafafa;
z-index: 1;
}
.panel-btn-visible {
border-radius: 5px 0 0 5px;
width: 28px;
height: 40px;
background-color: var(--primary-color, #36cfc9);
display: flex;
align-items: center;
justify-content: center;
cursor: pointer;
color: #fff;
position: absolute;
top: 53px;
right: 0;
svg {
transform: rotate(-180deg) translateX(-3px);
}
&:hover {
box-shadow: 0 0 1px rgba(0, 0, 0, 0.1);
background-color: #009688;
}
}
&.open {
.panel-btn-visible svg {
transform: rotate(0deg);
}
}
.proofread-count-tag {
border-radius: 8px;
line-height: 1;
padding: 2px 10px;
}
.proofread-panel-tab-wrapper {
background-color: #fff;
margin: 0 var(--padding-right) 0 var(--padding-left);
}
.ant-tabs-nav, .ant-tabs-nav-list {
width: 100%;
}
.ant-tabs-tab {
flex: 1;
justify-content: center;
}
.proofread-panel-tab {
width: 100%;
display: flex;
align-items: center;
.tab-item {
flex: 1;
font-size: 14px;
color: #262626;
&.Mui-selected {
color: #262626;
}
//
}
}
//
.proofread-status {
background-color: #fff;
border-radius: 0 0 4px 4px;
margin: 0 var(--padding-right) 20px var(--padding-left);
}
.btn-all {
display: flex;
flex-direction: row;
justify-content: center;
align-items: center;
height: 32px;
border: 1px solid #D9D9D9;
box-shadow: 0px 2px 0px rgba(0, 0, 0, 0.016);
border-radius: 4px;
&:hover {
border-color: #999;
}
}
.btn-accept-all {
color: rgba(54, 207, 201, 1);
}
.btn-ignore-all {
color: rgba(140, 140, 140, 1);
}
}
.panel-header {
position: sticky;
top: 0;
background: #fff;
z-index: 10;
padding: 10px;
border-bottom: solid 1px rgba(217, 217, 217, 1);
.btn-start-proofread {
display: flex;
align-items: center;
justify-content: center;
width: 150px;
border: none !important;
background: linear-gradient(to right, #E9C57E 0%, #CAA266 100%);
&:hover {
background: linear-gradient(to right, #CAA266 0%, #CAA266 100%) !important;
}
}
.text-tip {
color: #333;
}
.count-value {
color: #E9C57E;
}
}
.header-logo{
svg{
height: 46px;
width: 120px;
}
}
.proofread-list-wrapper {
margin-right: var(--type-width);
&.has-result{
}
}
.proofread-list{
padding: 0 var(--padding);
margin-top: 13px;
margin-right: 5px;
height: calc(100vh - var(--header-height) - 64px);
bottom: 10px;
overflow: auto;
&::-webkit-scrollbar {
width: 5px;
}
&::-webkit-scrollbar-thumb {
background: #fff;
}
&::-webkit-scrollbar-track {
background: #fff;
}
// hover时 显示滚动条
&:hover{
&::-webkit-scrollbar-thumb {
background: #999;
}
&::-webkit-scrollbar-track {
background: #f0f0f0;
}
}
//.selected-line{
// border-bottom:solid 1px transparent;
// margin: 10px 0;
//}
}
.operation-buttons {
position: sticky;
z-index: 10;
background: #fff;
top: calc(var(--header-height) - 1px);
button.ant-btn-default{
&.btn-operation-batch{
border-color: var(--primary-color,rgba(76, 182, 125, 1));
color: var(--primary-color,rgba(76, 182, 125, 1));
&:not(:disabled):hover{
background-color: var(--primary-color,rgba(76, 182, 125, 1));
color: #fff;
}
&:disabled{
background-color: #f4f4f4;
border-color: #D9D9D9;
}
}
&.btn-ignore-all{
border-color: #D9D9D9;
}
}
}
.test-item{
background-color:#99ffff;
height:50px;
margin:10px auto;
justify-content: center;
align-items: center;
display: flex;
border-radius: 4px;
&:hover,&.active{
background-color: #83d9d9;
}
}
.proofread-item-wrapper {
--border-size: 2px;
--timeline-width: 14px;
--proofread-font-size: 16px;
--content-font-size: 12px;
--padding-size: 10px;
cursor: default;
padding: var(--border-size);
overflow: hidden;
margin-top: 15px;
margin-right: calc(var(--padding-right) - 10px);
margin-left: var(--padding-left);
border-radius: 4px;
background-image: linear-gradient(91.26deg, #fff, #fff);
transition: 0.5s;
outline: solid 1px transparent;
.d-flex {
display: flex;
}
.align-center {
align-items: center;
}
&:first-child {
margin-top: 0;
}
.content-container {
padding: 10px;
background: #fff;
border-radius: 4px;
}
&:hover {
outline: solid 1px #ccc;
}
.proofread-content {
display: none;
color: #666;
font-size: var(--content-font-size);
margin-top: 10px;
}
.description-item {
display: flex;
background-color: #f6f5f6;
padding: 5px 6px;
border-radius: 3px;
text-align: justify;
width: 100%;
margin-bottom: 5px;
line-height: 20px;
align-items: flex-start;
::-webkit-scrollbar {
width: 3px;
}
.error_sort {
color: #f00;
}
.content {
flex: 1;
white-space: nowrap;
text-overflow: ellipsis;
overflow: hidden;
height: 20px;
padding-right: 5px;
transition: all 0.5s;
a {
color: var(--primary-color);
text-decoration: underline;
}
}
.content-text {
display: none;
span {
display: inline;
}
}
.selection {
background-color: #fabeb0;
}
.arrow-icon {
transform: rotate(-90deg);
}
.desc-item {
display: flex;
background-color: #f6f5f6;
padding: 5px 6px;
border-radius: 3px;
text-align: justify;
width: 100%;
margin-bottom: 5px;
line-height: 20px;
align-items: flex-start;
}
&.open {
.content {
white-space: normal;
height: 100%;
overflow: auto;
max-height: 120px;
}
.content-text {
display: block;
max-height: 100px;
overflow: auto;
padding-right: 5px;
}
.arrow-icon {
transform: rotate(0deg);
}
}
}
&.active {
outline: solid 1px transparent;
border-color: transparent;
margin-left: 0px;
background-image: linear-gradient(91.26deg, #5E98FE -28.63%, #3DC3FF 13.62%, #FED700 51%, #B80BA7 94.06%, #CE5884 133.87%);
.proofread-content {
display: block;
}
.proofread-info {
.replaced, .origin {
white-space: normal;
}
}
}
&.proofread-item-model {
outline: solid 1px transparent;
border-color: transparent;
background-image: linear-gradient(91.26deg, #5E98FE -28.63%, #3DC3FF 13.62%, #FED700 51%, #B80BA7 94.06%, #CE5884 133.87%);
}
.proofread-item-container {
display: flex;
overflow-x: hidden;
max-width: 100%;
border-bottom: 1px solid #F0F0F0;
padding: var(--padding-size) 0;
}
//
.proofread-item {
position: relative;
padding: 0 var(--padding-size);
font-size: var(--proofread-font-size);
inset-inline-start: 10px;
&:last-child {
.proofread-item-dot:before {
display: none;
}
.proofread-item-container {
border-bottom: none;
}
}
}
.proofread-info {
position: relative;
margin-inline-end: 0;
margin-block-start: 0;
margin-block-end: 0;
line-height: 1.2;
flex: 1;
min-width: 0;
.proofread-text {
display: flex;
align-items: center;
&.has-tag {
align-items: flex-start;
}
}
.proofread-tag {
font-size: 16px;
font-weight: 400;
line-height: 19px;
text-align: center;
color: var(--item-type-color, #f00);
margin-inline-start: 10px;
margin-block-start: -1px;
white-space: nowrap;
}
.text {
width: 100%;
}
}
.proofread-item-dot {
width: var(--timeline-width);
position: absolute;
top: 13px;
bottom: -20px;
left: -10px;
&:before {
content: "";
display: block;
position: absolute;
inset-block-start: 10px;
inset-inline-start: 6px;
height: calc(100% - 10px);
border-inline-start: 1px solid rgba(255, 133, 192, 1);
}
.dot {
width: var(--timeline-width);
height: var(--timeline-width);
border-radius: 50%;
background: var(--item-type-color, #36cfc9);
position: absolute;
border: solid 3px #fff;
left: 0;
}
}
.actions {
margin-inline-start: 10px;
white-space: nowrap;
}
&:hover, &.active {
.proofread-action {
visibility: visible;
}
}
.proofread-action {
visibility: hidden;
display: flex;
--btn-size: 20px;
&.processed {
visibility: visible;
}
.process-state-container {
}
.process-state-actions {
}
button {
width: var(--btn-size);
height: var(--btn-size);
outline: none;
display: flex;
align-items: center;
justify-content: center;
font-size: 14px;
line-height: 1;
padding: 0;
color: #999;
cursor: pointer;
background: none;
border: solid 1px transparent;
border-radius: 4px;
&:not[disabled]:hover {
color: #36CFC9;
border-color: #36CFC9;
}
}
.btn-accept {
color: #36CFC9;
border-color: #36CFC9;
}
.btn-review {
color: #9747FF;
border-color: #9747FF;
}
.btn-ignore {
color: #fff;
background-color: #D9D9D9;
border-color: #D9D9D9;
&:not[disabled]:hover {
color: #fff;
background-color: #ccc;
border-color: #999;
}
}
.btn-add-to-lexicon {
color: #D9D9D9;
border-color: #D9D9D9;
}
.btn-more {
font-size: 10px;
color: rgba(182, 182, 182, 1);
background-color: rgba(245, 245, 245, 1);
border-color: rgba(245, 245, 245, 1);
}
// 已处理状态
.process-state {
display: flex;
font-size: 12px;
align-items: center;
background-color: #f0f0f0;
border-radius: 3px;
padding: 0 4px;
height: var(--btn-size);
}
.state-accept {
color: var(--primary-color-main, #08979C);
}
.state-ignore {
color: #C9C9C9;
}
.ml-2 {
margin-left: 2px;
}
.rollback {
border-radius: 4px;
padding: 2px 4px;
&:hover {
background-color: var(--background-hover-color);
}
}
}
}
.types {
background: #f0f0f0;
position: fixed;
right: 0;
bottom: 0;
top: var(--header-height);
width: var(--type-width);
.item {
text-align: center;
padding: 10px 0;
cursor: pointer;
.count{
color: var(--primary-color);
font-weight: bold;
font-size: 16px;
}
&.active {
background: #fff;
box-shadow: 1px 2px 2px rgba(0, 0, 0, 0.1);
}
}
}
.proofread-item{
.action {
margin-left: 10px;
.btn {
background: #fff;
outline: none;
width: 20px;
height: 20px;
border: solid 1px var(--primary-color);
display: flex;
align-items: center;
justify-content: center;
border-radius: 4px;
color: var(--primary-color);
cursor: pointer;
box-sizing: border-box;
&:disabled{
background-color: var(--primary-disabled-color);
border: solid 1px var(--primary-disabled-color);
color:#fff;
}
&:not(:disabled):hover {
background-color: var(--primary-color);
color: #fff;
}
}
.btn-odd{
background-color: var(--primary-color);
color: #fff;
&:hover {
background-color: #fff;
color: var(--primary-color);
}
}
.btn-review{
.icon-type{
transform: translateY(0.5px);
}
}
.btn-accept {
}
.btn-ignore {
}
.more-action {
box-sizing: border-box;
width: 20px;
height: 20px;
border-radius: 4px;
border: solid 1px var(--primary-color);
background-color: var(--primary-color);
color: #fff;
text-align: center;
&:hover {
background-color: #fff;
color: var(--primary-color);
}
}
.btn-add-to-lexicon {
}
.processed-wrapper {
font-size: 12px;
}
.state-accept {
color: var(--primary-process-color,#aaaaaa);
margin-right: 12px;
}
.state-review{
//color: #3FD4CF;
}
.state-ignore {
color: #C9C9C9;
margin-right: 12px;
}
.rollback {
border-radius: 4px;
padding: 2px 4px;
&:hover {
background-color: var(--background-hover-color);
}
}
}
}
.ant-popover.black-bg{
//--antd-arrow-background-color: var(--primary-color);
.ant-popover-inner{
transform: translateY(1px);
// background-color: var(--primary-color);
padding: 5px 10px;
// .ant-popover-inner-content{
// color: #fff;
// }
}
}

View File

@ -1,135 +0,0 @@
import React, {CSSProperties} from "react";
import Icon from "@ant-design/icons";
import {cx} from "@emotion/css";
type SvgIconProps = {
size?: number;
className?: string;
style?: CSSProperties;
onClick?: (e: React.MouseEvent<HTMLSpanElement>) => void;
component: React.ComponentType
}
export const SvgIcon: React.FC<SvgIconProps> = (props) => {
const styles: CSSProperties = props.style || {}
if (props.size) {
styles.fontSize = props.size + 'px';
}
return (<Icon
onClick={props.onClick}
className={cx(props.className, `icon-type`)}
style={styles}
component={props.component}
/>);
}
export const IconClose = () => (
// width="28" height="40"
<svg width="28" height="40" viewBox="0 0 28 40" fill="none" xmlns="http://www.w3.org/2000/svg" className="icon">
<path d="M9.5 13L9.5 26" stroke="currentColor" strokeLinecap="round"/>
<path d="M15.5 13L22 19.5L15.5 26" stroke="currentColor" strokeLinecap="round" strokeLinejoin="round"/>
</svg>
)
export const IconOpen = () => (
<svg viewBox="0 0 28 40" fill="none" xmlns="http://www.w3.org/2000/svg" className="icon">
<path d="M17.5 13L12.5 19.5L17.5 26" stroke="currentColor" strokeLinejoin="round"/>
</svg>
)
export const IconArrowRight = () => (
<svg width="1em" height="1em" viewBox="0 0 5 10" fill="none" xmlns="http://www.w3.org/2000/svg" className="icon">
<path d="M0.686285 1.20263L4.37257 4.88892L0.686285 8.5752" stroke="currentColor" strokeLinecap="round"
strokeLinejoin="round"/>
</svg>
)
export const IconDotMore = () => (
<svg width="1em" height="1em" viewBox="0 0 10 2" fill="none" xmlns="http://www.w3.org/2000/svg">
<circle cx="1" cy="1" r="1" fill="currentColor"/>
<circle cx="5" cy="1" r="1" fill="currentColor"/>
<circle cx="9" cy="1" r="1" fill="currentColor"/>
</svg>
)
export const IconArrowDown = () => (
<svg className="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" width="1em"
height="1em">
<path d="M232 392L512 672l280-280z" fill="currentColor"></path>
</svg>
)
export const IconAccept = () => (
<svg className="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" width="1em"
height="1em">
<path
d="M864.554667 268.501333a42.666667 42.666667 0 0 1 0 60.330667L412.032 781.397333a42.453333 42.453333 0 0 1-22.613333 11.818667l-5.034667 0.597333H379.306667a42.496 42.496 0 0 1-27.648-12.416l-211.2-211.2a42.666667 42.666667 0 1 1 60.330666-60.330666l180.992 180.992 422.4-422.4a42.666667 42.666667 0 0 1 60.330667 0z"
fill="currentColor"></path>
</svg>
)
export const IconIgnore = () => (
<svg className="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" width="1em"
height="1em">
<path
d="M853.333333 554.666667H170.666667c-23.466667 0-42.666667-19.2-42.666667-42.666667s19.2-42.666667 42.666667-42.666667h682.666666c23.466667 0 42.666667 19.2 42.666667 42.666667s-19.2 42.666667-42.666667 42.666667z"
fill="currentColor"/>
</svg>
)
export const IconReviewOutlined = () => (
<svg className="icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 44 44" width="1em" height="1em">
<path fillRule="evenodd" stroke="currentColor" strokeWidth="2px" strokeLinecap="butt" strokeLinejoin="miter"
fill="rgb(255, 255, 255)"
d="M9.001,1.000 L33.001,1.000 C37.418,1.000 41.000,4.581 41.000,9.000 L41.000,32.999 C41.000,37.417 37.418,41.000 33.001,41.000 L9.001,41.000 C4.584,41.000 0.999,37.417 0.999,32.999 L0.999,9.000 C0.999,4.581 4.584,1.000 9.001,1.000 Z"/>
<path fillRule="evenodd" stroke="currentColor" strokeWidth="4px" strokeLinecap="round"
strokeLinejoin="round" fill="none"
d="M21.000,10.000 C27.075,10.000 32.000,14.925 32.000,21.000 C32.000,27.075 27.075,32.000 21.000,32.000 C14.925,32.000 10.000,27.075 10.000,21.000 C10.000,14.925 14.925,10.000 21.000,10.000 Z"/>
</svg>
)
export const IconReview = () => (
<svg className="icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 44 44" width="1em" height="1em">
<circle cx="22" cy="22" r="12" stroke="currentColor" strokeWidth="4px" fill="none"/>
</svg>
)
export const IconPlus = () => (
<svg className="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" width="1em"
height="1em" fill="currentColor">
<path
d="M480.256 128h64c5.632 0 8.704 3.072 8.704 8.704v751.104c0 5.632-3.072 8.704-8.704 8.704H480.256c-5.632 0-8.704-3.072-8.704-8.704V136.704c0-5.632 2.56-8.704 8.704-8.704z"
></path>
<path
d="M153.6 471.552h716.8c5.632 0 8.704 3.072 8.704 8.704v64c0 5.632-3.072 8.704-8.704 8.704H153.6c-5.632 0-8.704-3.072-8.704-8.704V480.256c0-6.144 3.072-8.704 8.704-8.704z"
></path>
<path d="M471.552 128h84.48v768H471.552z"></path>
<path d="M144.896 554.496V470.016h733.696v84.48z"></path>
</svg>
)
export const IconRollback = () => (
<svg className="icon" width="1em" height="1em" viewBox="0 0 15 14" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M11.26 2.39797H5.07156V1.13664C5.07156 1.02243 4.95996 0.959368 4.8846 1.02925L2.82663 2.9383C2.81277 2.95105 2.80157 2.96735 2.79386 2.98596C2.78615 3.00456 2.78215 3.02499 2.78215 3.04568C2.78215 3.06638 2.78615 3.0868 2.79386 3.10541C2.80157 3.12401 2.81277 3.14031 2.82663 3.15307L4.8846 5.06211C4.95996 5.132 5.07156 5.06893 5.07156 4.95473V3.6934H11.0861V11.7046H2.30344C2.23967 11.7046 2.1875 11.7659 2.1875 11.8409V12.8636C2.1875 12.9386 2.23967 13 2.30344 13H11.26C11.7716 13 12.1875 12.5108 12.1875 11.9091V3.48885C12.1875 2.88716 11.7716 2.39797 11.26 2.39797Z" fill="currentColor"/>
</svg>
)
export const IconRollbackOld = () => (
<svg className="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" width="1em"
height="1em">
<path
d="M328.832 183.168a42.666667 42.666667 0 0 1 0 60.330667L188.330667 384l140.501333 140.501333a42.666667 42.666667 0 1 1-60.330667 60.330667l-170.666666-170.666667a42.666667 42.666667 0 0 1 0-60.330666l170.666666-170.666667a42.666667 42.666667 0 0 1 60.330667 0z"
fill="currentColor"/>
<path
d="M85.333333 384a42.666667 42.666667 0 0 1 42.666667-42.666667h554.666667a256 256 0 0 1 0 512h-213.333334a42.666667 42.666667 0 1 1 0-85.333333h213.333334a170.666667 170.666667 0 0 0 0-341.333333H128a42.666667 42.666667 0 0 1-42.666667-42.666667z"
fill="currentColor"/>
</svg>
)
export const IconDotMore2 = ()=>(
<svg width="1em" height="1em" viewBox="0 0 9 2" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M0.256836 0.666667C0.256836 0.754215 0.27408 0.840905 0.307583 0.921789C0.341086 1.00267 0.390192 1.07617 0.452098 1.13807C0.514004 1.19998 0.587497 1.24908 0.66838 1.28259C0.749264 1.31609 0.835955 1.33333 0.923503 1.33333C1.01105 1.33333 1.09774 1.31609 1.17862 1.28259C1.25951 1.24908 1.333 1.19998 1.39491 1.13807C1.45681 1.07617 1.50592 1.00267 1.53942 0.921789C1.57293 0.840905 1.59017 0.754215 1.59017 0.666667C1.59017 0.579119 1.57293 0.492428 1.53942 0.411544C1.50592 0.330661 1.45681 0.257168 1.39491 0.195262C1.333 0.133356 1.25951 0.0842502 1.17862 0.0507471C1.09774 0.017244 1.01105 0 0.923503 0C0.835955 0 0.749264 0.017244 0.66838 0.0507471C0.587497 0.0842502 0.514004 0.133356 0.452098 0.195262C0.390192 0.257168 0.341086 0.330661 0.307583 0.411544C0.27408 0.492428 0.256836 0.579119 0.256836 0.666667ZM3.59017 0.666667C3.59017 0.843478 3.66041 1.01305 3.78543 1.13807C3.91046 1.2631 4.08002 1.33333 4.25684 1.33333C4.43365 1.33333 4.60322 1.2631 4.72824 1.13807C4.85326 1.01305 4.9235 0.843478 4.9235 0.666667C4.9235 0.489856 4.85326 0.320286 4.72824 0.195262C4.60322 0.0702377 4.43365 0 4.25684 0C4.08002 0 3.91046 0.0702377 3.78543 0.195262C3.66041 0.320286 3.59017 0.489856 3.59017 0.666667ZM6.9235 0.666667C6.9235 0.843478 6.99374 1.01305 7.11876 1.13807C7.24379 1.2631 7.41336 1.33333 7.59017 1.33333C7.76698 1.33333 7.93655 1.2631 8.06157 1.13807C8.1866 1.01305 8.25684 0.843478 8.25684 0.666667C8.25684 0.489856 8.1866 0.320286 8.06157 0.195262C7.93655 0.0702377 7.76698 0 7.59017 0C7.41336 0 7.24379 0.0702377 7.11876 0.195262C6.99374 0.320286 6.9235 0.489856 6.9235 0.666667Z" fill="currentColor"/>
</svg>
)
export const IconStartProofread = () => (
<svg className="icon" width="1em" height="1em" viewBox="0 0 14 14" fill="none" xmlns="http://www.w3.org/2000/svg">
<path
d="M8.63496 9.45299C8.6234 9.43689 8.60814 9.4238 8.59047 9.41482C8.57279 9.40585 8.55322 9.40126 8.5334 9.40142H7.84277C7.74121 9.40142 7.68184 9.51705 7.74121 9.59986L8.89434 11.1952C8.94434 11.2639 9.0459 11.2639 9.0959 11.1952L10.8803 8.72642C10.9396 8.64361 10.8803 8.52799 10.7787 8.52799H10.0865C10.0459 8.52799 10.0084 8.54674 9.98496 8.57955L8.99277 9.95142L8.63496 9.45299ZM9.31152 3.77799V3.02798C9.31152 2.95923 9.25527 2.90298 9.18652 2.90298H3.18652C3.11777 2.90298 3.06152 2.95923 3.06152 3.02798V3.77799C3.06152 3.84674 3.11777 3.90299 3.18652 3.90299H9.18652C9.25527 3.90299 9.31152 3.84674 9.31152 3.77799ZM3.18652 5.15299C3.11777 5.15299 3.06152 5.20924 3.06152 5.27799V6.02799C3.06152 6.09674 3.11777 6.15299 3.18652 6.15299H6.06152C6.13027 6.15299 6.18652 6.09674 6.18652 6.02799V5.27799C6.18652 5.20924 6.13027 5.15299 6.06152 5.15299H3.18652ZM6.06152 12.3092H1.81152V1.30923H10.5615V5.93424C10.5615 6.00299 10.6178 6.05924 10.6865 6.05924H11.5615C11.6303 6.05924 11.6865 6.00299 11.6865 5.93424V0.684235C11.6865 0.407672 11.4631 0.184235 11.1865 0.184235H1.18652C0.909961 0.184235 0.686523 0.407672 0.686523 0.684235V12.9342C0.686523 13.2108 0.909961 13.4342 1.18652 13.4342H6.06152C6.13027 13.4342 6.18652 13.378 6.18652 13.3092V12.4342C6.18652 12.3655 6.13027 12.3092 6.06152 12.3092ZM12.3521 7.29674L9.35215 6.25455C9.33809 6.24986 9.32559 6.2483 9.31152 6.2483C9.29746 6.2483 9.2834 6.24986 9.2709 6.25455L6.2709 7.29674C6.24639 7.30506 6.22509 7.32082 6.20996 7.34183C6.19484 7.36284 6.18665 7.38804 6.18652 7.41392V11.3374C6.18652 11.3764 6.20371 11.4124 6.23496 11.4358L9.23496 13.7827C9.25684 13.7999 9.28496 13.8092 9.31152 13.8092C9.33809 13.8092 9.36621 13.7999 9.38809 13.7827L12.3881 11.4358C12.4178 11.4124 12.4365 11.3764 12.4365 11.3374V7.41392C12.4365 7.3608 12.4021 7.31392 12.3521 7.29674ZM11.4678 10.9295L9.31152 12.6155L7.15527 10.9295V8.01236L9.31152 7.26236L11.4678 8.01236V10.9295Z"
fill="currentColor"/>
</svg>
)

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 1.1 MiB

View File

@ -1,45 +0,0 @@
export const IconLogo = () => (
<svg width="207" height="94" viewBox="0 0 207 94" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M81.3939 69.9675V23.3448L40.697 0L0 23.3448V69.9675L40.697 93.3123L81.3939 69.9675Z"
fill="url(#paint0_linear_2366_40336)"/>
<path d="M76.7295 60.4416H79.0956L81.7997 37.4322H79.366L76.7295 60.4416Z" fill="black"/>
<path d="M112.425 31.5288H104.38L103.569 28.7114H101.135L101.946 31.5288H93.4282V34.2792H112.425V31.5288Z"
fill="black"/>
<path d="M98.9711 35.2855H96.4698L93.2925 43.6708H95.7262L98.9711 35.2855Z" fill="black"/>
<path
d="M92.8188 32.7363H85.9909V28.7114H83.6248V32.7363H76.9321V35.4867H83.6248V61.7161H85.9909V35.4867H92.8188V32.7363Z"
fill="black"/>
<path d="M107.016 35.2855L110.193 43.6708H112.694L109.449 35.2855H107.016Z" fill="black"/>
<path
d="M108.3 56.4837C107.016 55.6787 105.867 54.8737 104.852 54.0016C105.799 53.0625 106.61 52.0562 107.286 51.1171C108.03 50.1108 108.638 49.1716 109.111 48.3667C109.585 47.4946 109.99 46.7567 110.193 46.1529C110.464 45.4821 110.599 45.0125 110.734 44.6771L110.802 44.4758H108.368L108.3 44.61C107.962 45.3479 107.421 46.3542 106.475 47.9642C105.664 49.3058 104.447 50.7816 102.96 52.3245C101.472 50.7816 100.255 49.3058 99.4442 47.9642C98.4978 46.3542 97.957 45.3479 97.619 44.61L97.5514 44.4758H95.1177L95.1853 44.6771C95.3205 45.0125 95.4557 45.4821 95.7261 46.1529C95.9965 46.7567 96.4021 47.5617 96.8753 48.3667C97.3486 49.1716 97.957 50.1108 98.633 51.1171C99.309 52.0562 100.12 53.0625 101.067 54.0687C100.053 54.9408 98.9034 55.7458 97.619 56.5508C96.3345 57.3558 94.7796 58.1608 93.1572 58.8987L93.022 58.9658V61.9174L93.2924 61.8503C95.3205 60.9782 97.1458 60.0391 98.7682 59.0328C100.323 58.0266 101.743 57.0203 102.96 55.947C104.176 57.0203 105.529 58.0937 107.083 59.0328C108.706 60.0391 110.531 60.9782 112.627 61.8503L112.897 61.9174V58.9658L112.762 58.8987C111.14 58.0937 109.652 57.2887 108.3 56.4837Z"
fill="black"/>
<path d="M90.2506 37.4322H87.9521L90.5887 60.4416H92.9548L90.2506 37.5663V37.4322Z" fill="black"/>
<path d="M145.618 38.7738H143.116L145.956 54.9408H148.389L145.618 38.7738Z" fill="black"/>
<path
d="M157.312 29.1139H154.946V32.8034H140.479V35.6209H154.946V58.0266C154.946 58.2949 154.878 58.4962 154.676 58.7645C154.54 58.9657 154.338 59.0999 154.135 59.0999H148.051V61.9174H154.135C155.014 61.9174 155.825 61.5149 156.433 60.7099C157.042 59.9049 157.38 59.0328 157.38 57.8924V35.688H160.151V32.8705H157.38V29.1139H157.312Z"
fill="black"/>
<path
d="M137.37 54.6054C136.288 53.2637 135.274 51.855 134.395 50.5133C135.612 48.2996 136.626 46.0858 137.302 43.9392C137.978 41.7925 138.451 39.9142 138.789 38.2371C139.128 36.5601 139.263 35.2184 139.33 34.1451C139.398 33.0718 139.398 32.468 139.398 32.2668V30.858H125.134V33.6755H136.829C136.761 34.2793 136.694 35.0172 136.559 35.9563C136.423 36.9626 136.221 38.1701 135.95 39.4446C135.68 40.7192 135.274 42.128 134.733 43.6709C134.26 45.0796 133.652 46.5554 132.908 48.0312C132.232 46.8238 131.691 45.6163 131.218 44.4759C130.677 43.2013 130.204 41.9938 129.866 40.8534C129.528 39.713 129.19 38.6396 128.987 37.7005C128.784 36.7613 128.581 35.8892 128.446 35.1513V35.0172H126.013V35.2184C126.148 36.0905 126.351 37.0297 126.621 38.1701C126.891 39.3105 127.229 40.518 127.635 41.8596C128.041 43.2013 128.581 44.61 129.257 46.0858C129.866 47.5617 130.677 49.1046 131.556 50.5804C130.745 51.9221 129.798 53.3308 128.717 54.6725C127.635 56.0141 126.351 57.4229 124.931 58.6974L124.863 58.7645V62.2528L125.134 61.9845C126.824 60.5087 128.379 58.9658 129.663 57.4229C130.88 55.947 132.029 54.4041 132.976 52.9283C133.922 54.4041 135.071 55.947 136.356 57.4229C137.708 58.9658 139.263 60.5087 140.953 61.9845L141.223 62.2528V58.7645L141.156 58.6974C139.804 57.3558 138.519 55.947 137.37 54.6054Z"
fill="black"/>
<path
d="M190.911 59.167V45.8846H205.919V43.1342H190.911V32.468H206.797V29.5834H172.388V32.468H188.274V43.1342H173.266V45.8846H188.274V59.167H172.117V61.9845H207V59.167H190.911Z"
fill="black"/>
<path
d="M17.1714 61.7833H20.2811L24.6077 51.788H38.1283L42.4549 61.7833H45.5646L31.368 28.7115L17.1714 61.7833ZM36.979 49.0376H25.757L31.368 35.9564L36.979 49.0376Z"
fill="black"/>
<path d="M58.5444 29.9189H55.5698V61.7833H58.5444V29.9189Z" fill="black"/>
<defs>
<linearGradient id="paint0_linear_2366_40336" x1="81.4256" y1="46.6327" x2="-0.00259662" y2="46.6327"
gradientUnits="userSpaceOnUse">
<stop offset="0.1" stopColor="white" stopOpacity="0"/>
<stop offset="0.1877" stopColor="#F3EADD" stopOpacity="0.0975"/>
<stop offset="0.3016" stopColor="#E6D4B8" stopOpacity="0.224"/>
<stop offset="0.4208" stopColor="#DCC199" stopOpacity="0.3565"/>
<stop offset="0.5453" stopColor="#D3B281" stopOpacity="0.4948"/>
<stop offset="0.677" stopColor="#CEA870" stopOpacity="0.6411"/>
<stop offset="0.8209" stopColor="#CAA266" stopOpacity="0.8009"/>
<stop offset="1" stopColor="#C9A063"/>
</linearGradient>
</defs>
</svg>
)

View File

@ -1,391 +0,0 @@
export const ErrorNotice = ()=>(
<svg width="260" height="231" viewBox="0 0 260 231" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M129.938 220.959C201.7 220.959 259.875 187.144 259.875 145.43C259.875 103.717 201.7 69.9013 129.938 69.9013C58.1751 69.9013 0 103.717 0 145.43C0 187.144 58.1751 220.959 129.938 220.959Z" fill="white"/>
<path d="M86.544 139.325C97.1855 146.203 97.6191 157.556 86.9777 164.433C76.3362 171.311 58.646 171.106 48.0045 164.229C37.3631 157.352 37.3631 146.203 48.0045 139.325C58.646 132.448 75.9025 132.448 86.544 139.325Z" fill="#E6E6E6"/>
<path d="M138.422 153.811L173.355 176.385C174.446 177.09 174.446 178.234 173.355 178.939L138.422 201.513C137.331 202.218 135.56 202.218 134.469 201.513L117.272 190.4L101.499 200.588C99.7093 201.743 97.4084 202.32 95.1121 202.32C92.8158 202.32 90.5149 201.743 88.7254 200.583L77.0385 193.031L76.4803 191.636L77.9515 191.264L89.6384 198.815C92.656 200.762 97.5682 200.767 100.586 198.815L115.445 189.22L99.5358 178.939C98.4447 178.234 98.4447 177.09 99.5358 176.385L134.469 153.811C135.56 153.106 137.331 153.106 138.422 153.811Z" fill="#F0F0F0"/>
<path d="M64.265 180.763C64.265 181.831 64.9727 182.879 66.2646 183.712L72.1081 187.488L70.9229 188.082L71.195 189.255L65.3516 185.48C63.4753 184.269 62.439 182.593 62.439 180.763C62.439 178.939 63.4707 177.263 65.3516 176.047L86.0639 162.66C86.4976 162.374 87.0591 162.543 87.3102 163.033C87.5613 163.519 87.4152 164.147 86.9769 164.428L66.2646 177.815C64.9772 178.648 64.265 179.696 64.265 180.763Z" fill="#F0F0F0"/>
<path d="M157.014 128.126C156.548 128.126 156.078 128.243 155.713 128.478L113.581 155.707C113.188 155.957 112.974 156.31 112.974 156.693C112.974 157.076 113.188 157.429 113.581 157.679L123.515 164.096L123.743 163.652L113.809 157.234C113.572 157.081 113.43 156.882 113.43 156.688C113.43 156.494 113.567 156.299 113.809 156.141L155.941 128.912C156.521 128.534 157.503 128.534 158.087 128.912L166.172 134.139L166.4 133.695L158.315 128.468C157.95 128.248 157.48 128.126 157.014 128.126Z" fill="#FAAD14"/>
<path d="M157.014 123.333C156.548 123.333 156.078 123.45 155.713 123.685L106.162 155.707C105.769 155.957 105.555 156.309 105.555 156.693C105.555 157.076 105.769 157.428 106.162 157.679L119.812 166.498L120.04 166.053L106.39 157.234C106.153 157.081 106.011 156.882 106.011 156.688C106.011 156.493 106.148 156.299 106.39 156.141L155.941 124.12C156.521 123.747 157.502 123.741 158.086 124.12L169.883 131.743L170.111 131.298L158.315 123.675C157.949 123.45 157.479 123.333 157.014 123.333Z" fill="#FAAD14"/>
<path d="M157.014 118.54C156.548 118.54 156.078 118.658 155.713 118.893L98.7434 155.707C98.3508 155.957 98.1362 156.31 98.1362 156.693C98.1362 157.076 98.3508 157.429 98.7434 157.679L116.1 168.894L116.329 168.45L98.9717 157.239C98.7343 157.086 98.5928 156.887 98.5928 156.693C98.5928 156.504 98.7297 156.304 98.9717 156.146L155.941 119.332C156.521 118.954 157.502 118.954 158.086 119.332L173.59 129.352L173.818 128.907L158.315 118.887C157.949 118.658 157.479 118.54 157.014 118.54Z" fill="#FAAD14"/>
<path d="M53.1406 148.513C54.5878 149.499 56.5097 149.54 58.3221 148.824L59.7145 138.11L53.3004 136.275L53.1406 148.513Z" fill="#FFA8A7"/>
<path d="M63.4531 158.783C63.6083 158.967 63.5125 160.305 63.3162 160.617C63.1062 160.944 62.0196 161.94 59.9973 161.981C58.0662 162.022 56.3588 161.624 55.2677 160.755C54.1766 159.881 53.6699 158.967 53.6242 157.73C53.5786 156.494 53.7566 155.318 53.2773 154.343C52.8345 153.443 52.2319 152.554 52.0858 152.069C51.7708 151.016 52.0766 149.427 52.0766 149.427L63.4531 158.783Z" fill="#7F5204"/>
<path d="M58.765 148.369C58.7742 148.829 58.8244 149.284 58.934 149.749C59.1668 150.72 59.5503 151.639 59.9839 152.518C60.2076 152.973 60.445 153.418 60.7281 153.837C61.2713 154.649 61.9652 155.329 62.545 156.11C63.1248 156.892 63.6042 157.827 63.6087 158.829C63.6087 160.525 61.9424 161 60.6687 161.174C59.3083 161.363 57.8748 161.194 56.5783 160.699C55.1357 160.147 54.1405 158.813 53.9761 157.163C53.9305 156.688 53.9761 156.212 53.9488 155.737C53.8894 154.654 53.4375 153.637 52.917 152.707C52.6157 152.166 52.2825 151.639 52.0953 151.042C51.7529 149.974 52.1227 148.814 52.424 147.787C52.6842 146.898 52.8942 145.83 53.1727 145.932C53.1635 146.116 53.1635 146.51 53.1635 146.51C53.2457 146.709 53.4466 146.857 53.4968 147.087C53.547 147.327 53.6064 147.567 53.6931 147.797C53.8255 148.145 54.0355 148.472 54.3231 148.666C54.3733 148.027 54.4235 147.393 54.4738 146.755C54.4874 146.556 54.5103 146.346 54.6335 146.203C54.7568 146.055 54.9485 146.024 55.1266 145.999C56.204 145.84 57.2996 145.682 58.3724 145.896C58.5322 145.927 58.7103 145.978 58.797 146.137C58.87 146.264 58.8609 146.423 58.8472 146.571C58.797 147.184 58.7513 147.777 58.765 148.369Z" fill="#FFF1B8"/>
<path d="M60.1711 152.886C59.6324 152.381 58.3724 152.299 57.6785 152.34C56.8111 152.391 56.0944 152.687 55.6835 152.989C55.5009 153.121 55.2544 153.086 55.1083 152.902C54.9303 152.687 54.9668 152.35 55.1859 152.186C55.6242 151.864 56.4094 151.425 57.432 151.405C59.1348 151.374 59.6142 151.727 59.6142 151.727C59.6142 151.727 60.3629 152.34 60.1711 152.886Z" fill="#D48806"/>
<path d="M61.3811 154.7C60.6964 154.189 59.3085 154.174 58.6146 154.215C57.7472 154.266 57.0853 154.608 56.6699 154.91C56.4872 155.042 56.2407 155.002 56.0946 154.823C55.9166 154.608 55.9531 154.271 56.1723 154.107C56.6105 153.785 57.4459 153.275 58.4731 153.254C60.1759 153.223 60.5959 153.637 60.5959 153.637C60.5959 153.637 61.299 153.99 61.3811 154.7Z" fill="#D48806"/>
<path d="M56.8482 149.555C58.026 149.488 58.5145 149.667 58.971 149.882C59.2586 150.086 59.4321 150.628 59.2312 150.75C58.866 150.495 58.1904 150.357 57.3549 150.347C56.7934 150.342 56.0812 150.551 55.4923 150.802C55.3417 150.863 55.1682 150.955 55.013 151.042C54.803 151.154 54.5519 151.052 54.4652 150.812C54.3921 150.613 54.4652 150.383 54.6386 150.28C55.0632 150.025 55.8941 149.606 56.8482 149.555Z" fill="#D48806"/>
<path d="M71.1556 144.481C72.2695 147.603 74.0134 146.642 76.6704 144.844L77.0721 134.185L70.311 133.485L71.1556 144.481Z" fill="#FFA8A7"/>
<path d="M86.8687 151.997C87.0103 152.376 86.9281 153.07 86.7227 153.5C86.5127 153.929 84.399 155.099 81.637 154.726C78.8751 154.348 77.0353 152.984 76.0127 152.14C74.9947 151.292 73.899 151.083 72.534 150.909C71.1644 150.74 70.1373 150.204 69.8679 149.468C69.6032 148.732 70.0095 147.516 70.0095 147.516L86.8687 151.997Z" fill="#7F5204"/>
<path d="M76.1133 142.172C76.369 142.121 76.579 142.034 76.8483 141.942C76.9807 141.896 77.1314 141.85 77.2592 141.911C77.4327 141.998 77.492 142.233 77.5286 142.443C77.6062 142.867 77.6199 143.413 77.7659 143.807C77.8983 144.164 78.2544 144.507 78.5009 144.767C79.1446 145.442 79.8888 145.989 80.642 146.5C81.5231 147.097 82.3859 147.573 83.299 148.099C84.2303 148.635 85.4811 149.003 86.1979 149.611C87.2479 150.495 87.2889 152.565 86.0107 153.305C84.9105 153.944 82.0618 154.537 79.1538 153.423C77.5696 152.815 75.8805 150.786 73.7805 150.475C72.4429 150.275 70.6625 150.04 69.8545 148.85C69.5577 148.324 69.8179 146.862 70.0553 145.125C70.2699 143.572 70.4662 141.145 70.9044 141.303L70.941 141.773C70.941 141.773 71.3427 142.315 71.4751 142.494C71.5892 142.652 71.7216 142.749 71.8494 142.892C72.0138 143.071 72.1416 143.275 72.3242 143.439C72.5434 143.638 72.8127 143.786 73.0957 143.802C73.2281 143.807 73.3697 143.781 73.4838 143.71C73.712 143.562 73.7394 143.229 73.9266 143.02C74.1366 142.785 74.3968 142.601 74.6707 142.478C75.0588 142.31 75.4696 142.238 75.8805 142.202C75.9673 142.197 76.0403 142.182 76.1133 142.172Z" fill="#FFF1B8"/>
<path d="M79.4287 145.611C79.4287 145.611 79.2644 145.023 78.4746 144.808C77.872 144.645 76.7672 145.084 76.0687 145.662C75.7811 145.897 75.7948 146.382 76.0961 146.592C76.2742 146.719 76.5024 146.699 76.6713 146.556C77.1324 146.152 78.155 145.432 79.4287 145.611Z" fill="#D48806"/>
<path d="M81.2623 146.908C81.2623 146.908 80.9017 146.193 80.121 146.162C80.121 146.162 78.5232 146.116 77.4914 147.087C77.2267 147.333 77.2221 147.782 77.5143 147.987C77.6878 148.109 77.9069 148.094 78.0667 147.951C78.5323 147.527 79.4682 146.648 81.2623 146.908Z" fill="#D48806"/>
<path d="M83.2988 148.104C83.2988 148.104 82.888 147.455 82.1073 147.419C82.1073 147.419 80.6191 147.394 79.5828 148.359C79.318 148.605 79.3134 149.054 79.6056 149.259C79.7791 149.381 79.9982 149.366 80.158 149.223C80.6282 148.804 81.5047 147.843 83.2988 148.104Z" fill="#D48806"/>
<path d="M52.9586 119.746C53.164 114.6 54.141 111.923 54.2825 110.498C54.2825 110.498 54.6568 82.196 55.2731 73.6018L77.9165 72.5237C78.2498 81.7003 78.5511 106.43 78.3776 109.7C78.2087 112.833 77.072 140 77.072 140C73.8718 141.114 70.4661 139.509 70.4661 139.509C70.4661 139.509 68.567 124.058 68.2566 120.65C67.8548 116.241 68.4711 111.448 68.4711 111.448L67.024 89.4413C67.024 89.4413 65.2755 106.502 64.4081 112.93C63.4175 120.292 59.1764 143.117 59.1764 143.117C56.1223 143.97 53.1458 142.493 53.1458 142.493C53.1458 142.493 52.6618 127.201 52.9586 119.746Z" fill="#D48806"/>
<path d="M67.0195 89.4363L67.4487 86.4064C68.768 86.1867 72.1097 83.8516 74.0865 81.8129C74.0865 81.8129 72.2969 85.2056 68.5352 87.5407L68.4667 111.448L67.0195 89.4363Z" fill="black" fillOpacity="0.4"/>
<path d="M76.3056 57.6143C74.7671 53.6851 72.1193 47.0683 72.1193 47.0683L71.4482 36.3127C71.4482 36.3127 72.9502 36.3536 74.3745 36.604C75.8034 36.8543 78.0587 38.377 79.095 41.2485C79.8619 43.3792 83.8747 56.3778 83.8747 56.3778L90.8595 52.2544C92.649 50.9821 93.279 48.8719 94.4249 47.6763C95.5662 46.4807 96.7212 46.2763 97.9721 45.3004C99.2229 44.3245 99.7388 43.5427 100.054 44.5186C100.373 45.4945 98.9581 46.9916 98.7025 47.3646C98.4468 47.7376 97.0544 48.5347 98.8075 48.6369C100.565 48.7391 104.108 46.8281 104.957 46.5011C105.806 46.1741 105.728 47.3033 105.29 47.9982C104.847 48.6982 104.802 50.7522 104.062 51.907C103.277 53.1333 102.852 53.6595 101.168 54.3851C99.6018 55.0647 96.356 55.2333 94.6851 56.3165C93.0142 57.3946 88.9695 61.4873 86.2714 63.5873C82.6512 66.4078 80.6152 66.5917 79.1954 64.3435C77.771 62.1004 76.8443 58.999 76.3056 57.6143Z" fill="#FFA8A7"/>
<path d="M70.5034 36.1083C72.8728 35.9039 75.6712 36.0674 77.2234 37.6514C78.456 38.9134 78.9216 39.7207 80.3003 44.0536C81.2316 46.9813 83.1673 53.7259 83.1673 53.7259C83.1673 53.7259 79.0586 54.5434 76.2967 58.4267L71.8456 47.2317L70.5034 36.1083Z" fill="#FFD666"/>
<path d="M83.8658 56.3777C82.3182 56.996 81.2865 58.2121 80.9121 58.9121C80.9121 58.9121 81.0765 56.858 83.6375 55.6471L83.8658 56.3777Z" fill="#F28F8F"/>
<path d="M64.8198 35.6278C64.8198 35.6278 63.295 35.5 61.4826 36.0365C59.3963 36.6548 55.6574 37.83 55.6574 37.83C54.4705 38.5198 54.0048 40.8242 53.74 42.1424C52.8818 46.3731 55.1279 55.9585 55.4565 59.6629C55.7807 63.3724 55.0731 74.7973 55.0731 74.7973C57.625 78.1032 71.453 80.3002 78.1867 74.7973C78.1867 74.7973 78.4789 48.6008 77.8169 44.8402C76.8126 39.1533 75.3243 36.4504 70.0698 36.1081L64.8198 35.6278Z" fill="#F5F5F5"/>
<path d="M67.7732 21.5709L66.2712 22.5009C66.0475 22.0155 66.2073 21.4177 66.6227 21.1622C67.0382 20.9067 67.5495 21.0906 67.7732 21.5709Z" fill="#263238"/>
<path d="M74.3012 22.2507L72.9316 21.0704C73.2101 20.631 73.7442 20.539 74.1232 20.866C74.5021 21.1879 74.5797 21.8113 74.3012 22.2507Z" fill="#263238"/>
<path d="M60.8717 16.2214C60.8717 16.2214 59.2556 16.4718 58.6621 17.836C58.1463 19.0214 58.3334 21.8828 59.0182 24.9996C59.703 28.1164 60.3513 29.9967 60.7576 30.8602C61.1593 31.7237 61.9902 31.9638 61.9902 31.9638L61.908 28.2645L61.7893 25.6842C61.7893 25.6842 63.2684 23.4258 63.4282 21.5711C63.6382 19.1901 63.1908 18.2141 63.1908 18.2141L60.8717 16.2214Z" fill="#263238"/>
<path d="M63.4781 19.8031C63.4872 23.6199 66.2628 26.7009 69.6685 26.6907C73.0787 26.6805 75.6306 23.5483 75.6215 19.7315C75.6124 15.9147 73.0376 12.8592 69.6274 12.8746C66.2218 12.8848 63.4644 15.9863 63.4781 19.8031Z" fill="#263238"/>
<path d="M61.8761 25.2753C61.3191 25.8169 60.8672 24.4169 60.4015 23.8753C59.9359 23.3337 58.4111 22.5928 57.6578 24.3812C56.8909 26.2053 58.3243 28.7753 59.493 29.2812C60.7622 29.8279 61.4835 28.6016 61.4835 28.6016V36.8024C63.2411 40.3433 66.3408 40.236 67.9934 40.0367C69.6506 39.8374 70.0113 37.9112 68.8015 36.3579L68.7878 33.8235C68.7878 33.8235 70.6595 34.1352 71.568 33.9717C73.0836 33.706 73.878 32.4235 74.3345 30.5841C75.0649 27.6308 75.3571 22.6593 74.3436 16.9213C72.6454 15.4497 66.7517 15.695 63.1863 18.2242C63.4511 23.3082 62.433 24.7388 61.8761 25.2753Z" fill="#FFA8A7"/>
<path d="M74.6268 14.0192C74.8551 12.9565 74.9601 11.8579 74.9327 10.7645C74.9235 10.3302 74.8368 9.80901 74.4807 9.65062C74.1338 9.49733 73.764 9.78346 73.4536 10.0185C72.1388 11.0097 70.5044 11.2908 68.9203 11.3879C66.1903 11.5565 61.9949 11.3572 60.6025 14.7141C60.2145 15.6441 60.1506 16.6251 60.9129 17.2689C61.5658 17.8156 62.3966 18.066 63.191 18.2193C64.5742 18.4901 65.9484 18.8273 67.3408 19.0368C68.7605 19.2463 70.4131 19.4558 71.8101 18.9704C72.9833 18.5667 74.1703 18.2193 75.0468 17.1769C75.7955 16.2828 76.2338 15.0616 76.2429 13.8353C76.2429 13.6616 76.2064 13.4419 76.0557 13.401C75.9781 13.3806 75.9005 13.4163 75.8275 13.4521C75.4303 13.636 75.0285 13.8302 74.6268 14.0192Z" fill="#263238"/>
<path d="M68.792 33.8186C68.792 33.8186 65.4001 33.0675 64.2177 32.3675C63.4233 31.8974 62.7705 31.085 62.5742 30.5587C62.5742 30.5587 62.7979 31.6828 63.5101 32.6945C64.3775 33.931 68.7966 34.8251 68.7966 34.8251L68.792 33.8186Z" fill="#F28F8F"/>
<path d="M68.1066 24.0853C68.1066 24.5758 67.7688 24.9692 67.3488 24.9692C66.9288 24.9692 66.5864 24.5758 66.5864 24.0853C66.5864 23.5948 66.9243 23.2013 67.3443 23.2013C67.7642 23.2013 68.1066 23.5999 68.1066 24.0853Z" fill="#263238"/>
<path d="M69.7321 29.9866C69.7321 30.4465 68.9336 29.9154 68.5409 29.9154C68.1438 29.9154 67.2446 30.4465 67.2446 29.9866C67.2446 29.5268 68.0935 29.1538 68.4861 29.1538C68.8833 29.1538 69.7321 29.5268 69.7321 29.9866Z" fill="#B16668"/>
<path d="M67.1485 21.4028L65.5781 22.5115C65.3133 22.0057 65.4457 21.3466 65.8794 21.04C66.3176 20.7334 66.8837 20.8969 67.1485 21.4028Z" fill="#263238"/>
<path d="M72.695 20.3195L74.3476 21.1473C74.1605 21.6684 73.6355 21.9086 73.1789 21.6838C72.7224 21.4487 72.5078 20.8407 72.695 20.3195Z" fill="#263238"/>
<path d="M73.567 23.8299C73.567 24.2999 73.2383 24.6832 72.8366 24.6832C72.4303 24.6832 72.1016 24.2999 72.1016 23.8299C72.1016 23.3598 72.4303 22.9766 72.832 22.9766C73.2337 22.9766 73.5624 23.3598 73.567 23.8299Z" fill="#263238"/>
<path d="M69.8335 22.3888L70.1028 28.0654L72.5087 27.3552L69.8335 22.3888Z" fill="#F28F8F"/>
<path d="M27.1939 45.7906C27.9836 46.2658 31.2021 48.8002 32.9506 49.0199C33.6901 49.1118 33.891 48.979 33.8636 48.7644C33.8225 48.468 33.3569 48.0235 33.2427 47.7834C33.0464 47.3695 31.8686 45.6323 32.3251 44.7279C32.7817 43.8235 33.1788 44.6921 34.2653 45.8826C35.3564 47.0731 36.4658 47.4819 37.4199 48.8717C38.374 50.2615 38.6936 52.4535 40.2686 54.0374L46.564 58.8403C46.564 58.8403 49.4949 43.6191 50.7822 41.8257C52.1335 39.9403 58.0318 44.0483 56.7992 50.0418C55.5574 56.0301 52.759 66.4229 50.8142 68.4667C49.5588 69.79 46.9018 68.5382 43.5921 65.2426C40.9762 62.6418 37.3925 58.7177 35.8997 57.3433C34.4069 55.9739 31.2295 55.2126 29.7823 54.2571C28.2256 53.2301 27.8878 52.6374 27.2897 51.2834C26.7282 50.0111 26.9793 47.9724 26.646 47.2009C26.3128 46.4396 26.4041 45.3104 27.1939 45.7906Z" fill="#FFA8A7"/>
<path d="M55.6576 37.8301C57.6708 39.2455 57.7758 41.2995 57.8763 43.6448C57.9676 45.8061 57.5795 48.7901 56.7258 51.7382C55.8721 54.6966 54.5117 60.0974 54.5117 60.0974C54.5117 60.0974 49.2435 60.2354 46.5317 57.6142C46.5317 57.6142 47.7689 51.7944 48.6409 47.4156C49.5174 43.0367 50.5765 38.3258 55.6576 37.8301Z" fill="#FFD666"/>
<path d="M46.5596 58.8403C47.9976 59.7345 48.8376 61.6557 49.1024 62.417C49.1024 62.417 49.0567 59.7191 46.7057 58.0586L46.5596 58.8403Z" fill="#F28F8F"/>
<path d="M101.213 169.272L136.447 192.04V200.43L101.213 177.662V169.272Z" fill="#FAAD14"/>
<path d="M101.213 169.272L136.447 192.04V200.43L101.213 177.662V169.272Z" fill="#D48806"/>
<path d="M171.681 169.272L136.447 192.04V200.43L171.681 177.662V169.272Z" fill="#FAAD14"/>
<path d="M171.681 169.272L136.447 192.04V200.43L171.681 177.662V169.272Z" fill="#AD6800"/>
<path d="M171.681 169.272L136.447 146.504L101.213 169.272L136.447 192.04L171.681 169.272Z" fill="url(#paint0_linear_2661_68499)"/>
<path opacity="0.1" d="M136.447 192.04V189.644L104.92 169.272H101.213L136.447 192.04Z" fill="black"/>
<path opacity="0.1" d="M136.447 146.504V148.901L167.969 169.272H171.681L136.447 146.504Z" fill="black"/>
<path d="M171.681 169.272H167.969L136.447 189.644V192.04L171.681 169.272Z" fill="url(#paint1_linear_2661_68499)"/>
<path d="M136.447 146.504V148.901L104.92 169.272H101.213L136.447 146.504Z" fill="url(#paint2_linear_2661_68499)"/>
<path d="M136.57 159.406L151.708 169.19C152.841 169.921 152.841 171.111 151.708 171.842L140.419 179.138C139.286 179.869 137.451 179.869 136.314 179.138L121.176 169.354C120.044 168.623 120.044 167.433 121.176 166.702L132.466 159.406C133.603 158.675 135.438 158.675 136.57 159.406Z" fill="#D48806"/>
<path d="M140.418 179.139L151.338 172.082L136.569 162.538C135.437 161.807 133.598 161.807 132.465 162.538L121.545 169.594L136.314 179.139C137.451 179.869 139.286 179.869 140.418 179.139Z" fill="url(#paint3_linear_2661_68499)"/>
<path d="M127.43 169.288L134.055 165.006C134.274 164.863 134.625 164.863 134.844 165.006L135.662 165.527C135.881 165.665 135.881 165.895 135.662 166.038L129.037 170.32C128.818 170.463 128.467 170.463 128.248 170.32L127.43 169.793C127.211 169.655 127.211 169.431 127.43 169.288Z" fill="#263238"/>
<path d="M137.324 175.69L143.948 171.408C144.167 171.265 144.518 171.265 144.737 171.408L145.555 171.929C145.774 172.067 145.774 172.297 145.555 172.44L138.93 176.722C138.711 176.865 138.36 176.865 138.141 176.722L137.324 176.195C137.104 176.057 137.104 175.833 137.324 175.69Z" fill="#263238"/>
<path d="M121.135 185.843C121.135 184.417 120.24 182.685 119.14 181.975C118.587 181.617 118.09 181.586 117.729 181.821C117.656 181.867 116.939 182.353 116.866 182.399C116.505 182.634 116.282 183.129 116.282 183.84C116.282 185.265 117.177 186.997 118.277 187.708C118.829 188.065 119.327 188.096 119.687 187.861C119.76 187.815 120.473 187.335 120.546 187.283C120.911 187.054 121.135 186.558 121.135 185.843Z" fill="url(#paint4_linear_2661_68499)"/>
<path d="M118.277 182.552C119.377 183.262 120.272 184.994 120.272 186.42C120.272 187.846 119.377 188.423 118.277 187.708C117.177 186.997 116.282 185.26 116.282 183.84C116.282 182.419 117.177 181.837 118.277 182.552Z" fill="url(#paint5_linear_2661_68499)"/>
<path d="M88.7234 197.134C90.5176 198.294 92.8139 198.872 95.1147 198.872C97.411 198.872 99.7119 198.294 101.497 197.134L118.73 186.006C119.164 185.725 119.315 185.101 119.064 184.611C118.813 184.126 118.256 183.957 117.817 184.238L100.584 195.366C97.5662 197.318 92.6541 197.318 89.6365 195.366L80.6855 189.583L79.3175 188.699L77.8036 188.971L78.2497 190.366L79.4628 191.15L88.7234 197.134Z" fill="#263238"/>
<path d="M62.437 177.315C62.437 179.139 63.4687 180.815 65.3496 182.031L74.8926 188.197L74.628 186.897L76.0714 186.601L66.2626 180.263C64.9753 179.43 64.2631 178.382 64.2631 177.315C64.2631 176.247 64.9707 175.199 66.2626 174.366L93.3434 156.866C96.9225 154.552 99.7301 149.115 99.7301 144.486V48.5651C99.7301 48.003 99.3193 47.5432 98.8171 47.5432C98.3149 47.5432 97.904 48.003 97.904 48.5651V144.486C97.904 148.323 95.3978 153.182 92.4304 155.098L65.3496 172.598C63.4733 173.809 62.437 175.485 62.437 177.315Z" fill="#263238"/>
<path d="M54.1012 11.8839C54.0783 11.7409 54.1012 11.6029 54.1788 11.4803C54.2564 11.3525 54.3568 11.2759 54.4846 11.2504L56.7079 10.7701C56.8357 10.7445 56.959 10.7701 57.0685 10.8569C57.1827 10.9438 57.2511 11.0562 57.274 11.2044L57.6164 13.1971C57.6392 13.3401 57.6164 13.4781 57.5387 13.6007C57.4657 13.7285 57.3607 13.8051 57.2329 13.8307L55.0142 14.3058C54.8864 14.3314 54.7631 14.3058 54.6535 14.219C54.5394 14.1321 54.4709 14.0197 54.4481 13.8766L54.1012 11.8839ZM52.2477 1.1233C52.2249 0.980234 52.2477 0.842277 52.3253 0.719649C52.4029 0.591911 52.5033 0.515268 52.6312 0.48972L54.8544 0.00942637C54.9822 -0.0161212 55.1055 0.00942637 55.2151 0.0962881C55.3292 0.18315 55.3977 0.295559 55.4205 0.438625L56.8859 8.94596C56.9087 9.08903 56.8859 9.22699 56.8083 9.34962C56.7307 9.47735 56.6303 9.554 56.5024 9.57954L54.2792 10.0598C54.1514 10.0854 54.0281 10.0598 53.9185 9.97298C53.8044 9.88611 53.7359 9.7737 53.7131 9.63064L52.2477 1.1233Z" fill="#C9A063"/>
<path d="M50.3925 20.2226C50.3058 20.1153 50.2647 19.9825 50.2692 19.8292C50.2784 19.6759 50.3286 19.5533 50.429 19.4562L52.1136 17.7649C52.214 17.6679 52.3281 17.6219 52.4651 17.6321C52.602 17.6423 52.7116 17.6985 52.7984 17.8109L54.0081 19.3233C54.0949 19.4358 54.136 19.5635 54.1268 19.7168C54.1177 19.8701 54.0675 19.9927 53.967 20.0898L52.2825 21.781C52.1866 21.8781 52.0679 21.9241 51.931 21.9139C51.794 21.9088 51.6844 21.8474 51.5977 21.735L50.3925 20.2226ZM43.8597 12.0576C43.773 11.9503 43.7319 11.8175 43.741 11.6642C43.7501 11.5109 43.8003 11.3883 43.9008 11.2912L45.5853 9.59994C45.6858 9.50286 45.7999 9.45687 45.9369 9.46709C46.0738 9.4722 46.1834 9.53351 46.2701 9.64592L51.4334 16.0992C51.5201 16.2065 51.5612 16.3394 51.5521 16.4927C51.5429 16.646 51.4927 16.7686 51.3923 16.8657L49.7077 18.5569C49.6118 18.654 49.4931 18.7 49.3562 18.6898C49.2192 18.6795 49.1097 18.6233 49.0229 18.5109L43.8597 12.0576Z" fill="url(#paint6_linear_2661_68499)"/>
<path d="M164.632 191.381C164.266 191.616 163.796 191.734 163.331 191.734C162.865 191.734 162.395 191.611 162.03 191.391L153.945 186.164L154.173 185.72L162.258 190.947C162.842 191.325 163.824 191.325 164.403 190.947L185.439 177.352L185.247 177.715L185.698 177.767L164.632 191.381Z" fill="#FAAD14"/>
<path d="M207.371 163.167C207.371 163.55 207.157 163.902 206.764 164.153L186.835 177.123V176.827H186.57L206.536 163.718C206.778 163.56 206.915 163.366 206.915 163.172C206.915 162.978 206.773 162.778 206.536 162.625L196.602 156.207L196.83 155.763L206.764 162.18C207.157 162.431 207.371 162.783 207.371 163.167Z" fill="#FAAD14"/>
<path d="M185.776 176.53V176.827L185.512 176.53H185.776Z" fill="#FAAD14"/>
<path d="M185.247 176.827L185.433 176.787L185.337 177.056L185.247 176.827Z" fill="#FAAD14"/>
<path d="M185.776 177.123L185.636 177.056L185.512 177.123H185.776Z" fill="#FAAD14"/>
<path d="M186.835 177.715V178.011L186.57 177.715H186.835Z" fill="#FAAD14"/>
<path d="M186.305 178.011L186.492 177.972L186.395 178.241L186.305 178.011Z" fill="#FAAD14"/>
<path d="M186.835 178.308L186.694 178.241L186.57 178.308H186.835Z" fill="#FAAD14"/>
<path d="M164.633 196.174C164.267 196.409 163.797 196.527 163.332 196.527C162.866 196.527 162.396 196.409 162.031 196.184L150.234 188.561L150.462 188.116L162.259 195.74C162.843 196.118 163.825 196.113 164.404 195.74L188.687 180.047L188.899 180.492L164.633 196.174Z" fill="#FAAD14"/>
<path d="M214.791 163.167C214.791 163.55 214.576 163.902 214.183 164.153L189.408 180.163L189.18 179.729L213.955 163.719C214.197 163.56 214.334 163.366 214.334 163.172C214.334 162.978 214.192 162.778 213.955 162.625L200.305 153.806L200.533 153.362L214.183 162.181C214.576 162.431 214.791 162.783 214.791 163.167Z" fill="#FAAD14"/>
<path d="M190.011 180.381L189.555 180.492L190.011 180.677V180.381Z" fill="#FAAD14"/>
<path d="M189.253 180.492L189.746 180.973L189.408 181.27L189.253 180.492Z" fill="#FAAD14"/>
<path d="M188.952 181.27V180.677L188.687 180.973L188.952 181.27Z" fill="#FAAD14"/>
<path d="M189.18 179.196L188.952 179.789L188.687 179.196H189.18Z" fill="#FAAD14"/>
<path d="M188.423 179.492L188.687 179.789H188.423V179.492Z" fill="#FAAD14"/>
<path d="M163.331 201.319C163.797 201.319 164.267 201.202 164.632 200.967L221.601 164.153C221.994 163.902 222.208 163.55 222.208 163.167C222.208 162.783 221.994 162.431 221.601 162.18L204.244 150.965L204.016 151.41L221.373 162.62C221.61 162.773 221.752 162.972 221.752 163.167C221.752 163.356 221.615 163.555 221.373 163.713L164.404 200.527C163.824 200.905 162.843 200.905 162.258 200.527L146.755 190.508L146.527 190.952L162.03 200.972C162.395 201.202 162.865 201.319 163.331 201.319Z" fill="#FAAD14"/>
<path d="M222.675 132.009L193.006 151.179L163.332 132.009L193.006 112.838L222.675 132.009Z" fill="#FFF1B8"/>
<path d="M193.006 151.179V160.019C193.718 160.019 194.43 159.845 194.978 159.493H194.982L207.838 151.185L221.488 142.36C222.145 141.936 222.675 140.909 222.675 140.061V132.009L193.823 150.653L193.006 151.179Z" fill="#D48806"/>
<path d="M163.332 132.009V140.061C163.332 140.909 163.866 141.936 164.519 142.36L176.315 149.984L191.029 159.493C191.576 159.845 192.289 160.019 193.005 160.019V151.179L192.083 150.587L163.332 132.009Z" fill="#D48806"/>
<path d="M220.82 135.856V136.944C220.82 137.088 220.734 137.256 220.624 137.328L220.4 137.471C220.291 137.542 220.204 137.486 220.204 137.343V136.255C220.204 136.112 220.291 135.943 220.4 135.871L220.624 135.728C220.729 135.662 220.82 135.718 220.82 135.856Z" fill="#D48806"/>
<path d="M219.82 136.505V137.593C219.82 137.736 219.734 137.905 219.624 137.976L219.4 138.119C219.291 138.191 219.204 138.135 219.204 137.992V136.903C219.204 136.76 219.291 136.592 219.4 136.52L219.624 136.377C219.729 136.306 219.82 136.362 219.82 136.505Z" fill="#D48806"/>
<path d="M218.82 137.149V138.237C218.82 138.38 218.733 138.549 218.624 138.62L218.4 138.763C218.29 138.835 218.204 138.779 218.204 138.636V137.547C218.204 137.404 218.29 137.236 218.4 137.164L218.624 137.021C218.733 136.949 218.82 137.006 218.82 137.149Z" fill="#D48806"/>
<path d="M217.82 137.793V138.881C217.82 139.024 217.734 139.193 217.624 139.264L217.4 139.407C217.291 139.479 217.204 139.423 217.204 139.279V138.191C217.204 138.048 217.291 137.879 217.4 137.808L217.624 137.665C217.734 137.593 217.82 137.65 217.82 137.793Z" fill="#D48806"/>
<path d="M216.822 138.436V139.525C216.822 139.668 216.735 139.837 216.625 139.908L216.402 140.051C216.292 140.123 216.205 140.066 216.205 139.923V138.835C216.205 138.692 216.292 138.523 216.402 138.452L216.625 138.309C216.735 138.237 216.822 138.293 216.822 138.436Z" fill="#FFF1B8"/>
<path d="M215.822 139.08V140.169C215.822 140.312 215.735 140.48 215.625 140.552L215.402 140.695C215.292 140.766 215.205 140.71 215.205 140.567V139.479C215.205 139.336 215.292 139.167 215.402 139.096L215.625 138.953C215.735 138.881 215.822 138.942 215.822 139.08Z" fill="#D48806"/>
<path d="M214.826 139.724V140.812C214.826 140.955 214.739 141.124 214.629 141.196L214.406 141.339C214.296 141.41 214.209 141.354 214.209 141.211V140.123C214.209 139.979 214.296 139.811 214.406 139.739L214.629 139.596C214.734 139.53 214.826 139.586 214.826 139.724Z" fill="#FFF1B8"/>
<path d="M213.826 140.373V141.461C213.826 141.604 213.739 141.773 213.629 141.845L213.406 141.988C213.296 142.059 213.209 142.003 213.209 141.86V140.772C213.209 140.628 213.296 140.46 213.406 140.388L213.629 140.245C213.734 140.174 213.826 140.23 213.826 140.373Z" fill="#FFF1B8"/>
<path d="M212.827 141.017V142.105C212.827 142.248 212.74 142.417 212.63 142.488L212.407 142.631C212.297 142.703 212.21 142.647 212.21 142.503V141.415C212.21 141.272 212.297 141.103 212.407 141.032L212.63 140.889C212.74 140.817 212.827 140.874 212.827 141.017Z" fill="#FFF1B8"/>
<path d="M211.827 141.66V142.749C211.827 142.892 211.74 143.06 211.63 143.132L211.407 143.275C211.297 143.347 211.21 143.29 211.21 143.147V142.059C211.21 141.916 211.297 141.747 211.407 141.676L211.63 141.533C211.74 141.461 211.827 141.517 211.827 141.66Z" fill="#D48806"/>
<path d="M210.827 142.304V143.393C210.827 143.536 210.74 143.704 210.631 143.776L210.407 143.919C210.298 143.99 210.211 143.934 210.211 143.791V142.703C210.211 142.56 210.298 142.391 210.407 142.32L210.631 142.177C210.74 142.105 210.827 142.161 210.827 142.304Z" fill="#D48806"/>
<path d="M209.828 142.948V144.037C209.828 144.18 209.741 144.348 209.631 144.42L209.408 144.563C209.298 144.634 209.211 144.578 209.211 144.435V143.347C209.211 143.204 209.298 143.035 209.408 142.964L209.631 142.82C209.741 142.749 209.828 142.805 209.828 142.948Z" fill="#FFF1B8"/>
<path d="M208.832 143.592V144.68C208.832 144.823 208.745 144.992 208.636 145.064L208.412 145.207C208.302 145.278 208.216 145.222 208.216 145.079V143.991C208.216 143.848 208.302 143.679 208.412 143.607L208.636 143.464C208.741 143.393 208.832 143.454 208.832 143.592Z" fill="#FFF1B8"/>
<path d="M207.833 144.236V145.324C207.833 145.467 207.746 145.636 207.636 145.707L207.413 145.85C207.303 145.922 207.216 145.866 207.216 145.723V144.634C207.216 144.491 207.303 144.323 207.413 144.251L207.636 144.108C207.741 144.042 207.833 144.098 207.833 144.236Z" fill="#D48806"/>
<path d="M206.833 144.885V145.973C206.833 146.116 206.746 146.285 206.636 146.356L206.413 146.499C206.303 146.571 206.216 146.515 206.216 146.372V145.283C206.216 145.14 206.303 144.972 206.413 144.9L206.636 144.757C206.746 144.685 206.833 144.742 206.833 144.885Z" fill="#D48806"/>
<path d="M205.833 145.528V146.617C205.833 146.76 205.746 146.928 205.637 147L205.413 147.143C205.303 147.214 205.217 147.158 205.217 147.015V145.927C205.217 145.784 205.303 145.615 205.413 145.544L205.637 145.401C205.746 145.329 205.833 145.385 205.833 145.528Z" fill="#D48806"/>
<path d="M204.833 146.172V147.261C204.833 147.404 204.747 147.572 204.637 147.644L204.413 147.787C204.304 147.859 204.217 147.802 204.217 147.659V146.571C204.217 146.428 204.304 146.259 204.413 146.188L204.637 146.045C204.747 145.973 204.833 146.029 204.833 146.172Z" fill="#D48806"/>
<path d="M220.82 139.08V140.169C220.82 140.312 220.734 140.48 220.624 140.552L220.4 140.695C220.291 140.766 220.204 140.71 220.204 140.567V139.479C220.204 139.336 220.291 139.167 220.4 139.096L220.624 138.953C220.729 138.881 220.82 138.942 220.82 139.08Z" fill="#D48806"/>
<path d="M219.82 139.724V140.812C219.82 140.955 219.734 141.124 219.624 141.196L219.4 141.339C219.291 141.41 219.204 141.354 219.204 141.211V140.123C219.204 139.979 219.291 139.811 219.4 139.739L219.624 139.596C219.729 139.53 219.82 139.586 219.82 139.724Z" fill="#FFF1B8"/>
<path d="M218.82 140.373V141.461C218.82 141.604 218.733 141.773 218.624 141.845L218.4 141.988C218.29 142.059 218.204 142.003 218.204 141.86V140.772C218.204 140.628 218.29 140.46 218.4 140.388L218.624 140.245C218.733 140.174 218.82 140.23 218.82 140.373Z" fill="#D48806"/>
<path d="M217.82 141.017V142.105C217.82 142.248 217.734 142.417 217.624 142.488L217.4 142.631C217.291 142.703 217.204 142.647 217.204 142.504V141.415C217.204 141.272 217.291 141.104 217.4 141.032L217.624 140.889C217.734 140.818 217.82 140.874 217.82 141.017Z" fill="#FFF1B8"/>
<path d="M216.822 141.661V142.749C216.822 142.892 216.735 143.061 216.625 143.132L216.402 143.275C216.292 143.347 216.205 143.291 216.205 143.148V142.059C216.205 141.916 216.292 141.748 216.402 141.676L216.625 141.533C216.735 141.461 216.822 141.518 216.822 141.661Z" fill="#FFF1B8"/>
<path d="M215.822 142.304V143.393C215.822 143.536 215.735 143.704 215.625 143.776L215.402 143.919C215.292 143.99 215.205 143.934 215.205 143.791V142.703C215.205 142.56 215.292 142.391 215.402 142.32L215.625 142.177C215.735 142.105 215.822 142.161 215.822 142.304Z" fill="#D48806"/>
<path d="M214.826 142.948V144.037C214.826 144.18 214.739 144.348 214.629 144.42L214.406 144.563C214.296 144.634 214.209 144.578 214.209 144.435V143.347C214.209 143.204 214.296 143.035 214.406 142.964L214.629 142.82C214.734 142.749 214.826 142.805 214.826 142.948Z" fill="#D48806"/>
<path d="M213.826 143.592V144.68C213.826 144.823 213.739 144.992 213.629 145.064L213.406 145.207C213.296 145.278 213.209 145.222 213.209 145.079V143.991C213.209 143.848 213.296 143.679 213.406 143.607L213.629 143.464C213.734 143.393 213.826 143.454 213.826 143.592Z" fill="#D48806"/>
<path d="M212.827 144.236V145.324C212.827 145.467 212.74 145.636 212.63 145.707L212.407 145.85C212.297 145.922 212.21 145.866 212.21 145.723V144.634C212.21 144.491 212.297 144.323 212.407 144.251L212.63 144.108C212.74 144.042 212.827 144.098 212.827 144.236Z" fill="#D48806"/>
<path d="M211.827 144.885V145.973C211.827 146.116 211.74 146.285 211.63 146.356L211.407 146.499C211.297 146.571 211.21 146.515 211.21 146.372V145.283C211.21 145.14 211.297 144.972 211.407 144.9L211.63 144.757C211.74 144.685 211.827 144.742 211.827 144.885Z" fill="#FFF1B8"/>
<path d="M210.827 145.529V146.617C210.827 146.76 210.74 146.929 210.631 147L210.407 147.143C210.298 147.215 210.211 147.159 210.211 147.015V145.927C210.211 145.784 210.298 145.615 210.407 145.544L210.631 145.401C210.74 145.329 210.827 145.386 210.827 145.529Z" fill="#FFF1B8"/>
<path d="M209.828 146.172V147.261C209.828 147.404 209.741 147.572 209.631 147.644L209.408 147.787C209.298 147.859 209.211 147.802 209.211 147.659V146.571C209.211 146.428 209.298 146.259 209.408 146.188L209.631 146.045C209.741 145.973 209.828 146.029 209.828 146.172Z" fill="#D48806"/>
<path d="M208.832 146.816V147.904C208.832 148.047 208.745 148.216 208.636 148.288L208.412 148.431C208.302 148.502 208.216 148.446 208.216 148.303V147.215C208.216 147.072 208.302 146.903 208.412 146.831L208.636 146.688C208.741 146.617 208.832 146.673 208.832 146.816Z" fill="#D48806"/>
<path d="M207.833 147.46V148.548C207.833 148.691 207.746 148.86 207.636 148.931L207.413 149.074C207.303 149.146 207.216 149.09 207.216 148.947V147.858C207.216 147.715 207.303 147.547 207.413 147.475L207.636 147.332C207.741 147.261 207.833 147.322 207.833 147.46Z" fill="#FFF1B8"/>
<path d="M206.833 148.104V149.192C206.833 149.335 206.746 149.504 206.636 149.575L206.413 149.718C206.303 149.79 206.216 149.734 206.216 149.591V148.502C206.216 148.359 206.303 148.191 206.413 148.119L206.636 147.976C206.746 147.91 206.833 147.966 206.833 148.104Z" fill="#FFF1B8"/>
<path d="M205.833 148.747V149.836C205.833 149.979 205.746 150.147 205.637 150.219L205.413 150.362C205.303 150.434 205.217 150.377 205.217 150.234V149.146C205.217 149.003 205.303 148.834 205.413 148.763L205.637 148.62C205.746 148.553 205.833 148.609 205.833 148.747Z" fill="#FFF1B8"/>
<path d="M204.833 149.396V150.485C204.833 150.628 204.747 150.796 204.637 150.868L204.413 151.011C204.304 151.082 204.217 151.026 204.217 150.883V149.795C204.217 149.652 204.304 149.483 204.413 149.412L204.637 149.268C204.747 149.197 204.833 149.253 204.833 149.396Z" fill="#FFF1B8"/>
<path d="M201.497 149.851L201.045 149.56H201.04C200.885 149.463 200.67 149.478 200.437 149.626C199.963 149.933 199.579 150.679 199.579 151.292C199.579 151.598 199.675 151.813 199.83 151.915L200.25 152.186L200.328 152.043C200.405 152.022 200.488 151.992 200.574 151.936C201.049 151.629 201.433 150.883 201.433 150.27C201.433 150.178 201.424 150.096 201.405 150.025L201.497 149.851Z" fill="#D48806"/>
<path opacity="0.2" d="M201.497 149.851L201.045 149.56H201.04C200.885 149.463 200.67 149.478 200.437 149.626C199.963 149.933 199.579 150.679 199.579 151.292C199.579 151.598 199.675 151.813 199.83 151.915L200.25 152.186L200.328 152.043C200.405 152.022 200.488 151.992 200.574 151.936C201.049 151.629 201.433 150.883 201.433 150.27C201.433 150.178 201.424 150.096 201.405 150.025L201.497 149.851Z" fill="#874D00"/>
<path d="M200.871 149.902C200.396 150.209 200.012 150.955 200.012 151.568C200.012 152.181 200.396 152.431 200.871 152.125C201.345 151.818 201.729 151.072 201.729 150.459C201.734 149.846 201.345 149.595 200.871 149.902Z" fill="#D48806"/>
<path d="M197.769 152.257L197.317 151.966H197.312C197.157 151.869 196.942 151.884 196.709 152.033C196.235 152.339 195.851 153.085 195.851 153.698C195.851 154.005 195.947 154.22 196.102 154.322L196.522 154.593L196.6 154.449C196.677 154.429 196.76 154.398 196.846 154.342C197.321 154.036 197.705 153.29 197.705 152.676C197.705 152.584 197.696 152.503 197.677 152.431L197.769 152.257Z" fill="#D48806"/>
<path opacity="0.2" d="M197.769 152.257L197.317 151.966H197.312C197.157 151.869 196.942 151.884 196.709 152.033C196.235 152.339 195.851 153.085 195.851 153.698C195.851 154.005 195.947 154.22 196.102 154.322L196.522 154.593L196.6 154.449C196.677 154.429 196.76 154.398 196.846 154.342C197.321 154.036 197.705 153.29 197.705 152.676C197.705 152.584 197.696 152.503 197.677 152.431L197.769 152.257Z" fill="#874D00"/>
<path d="M197.147 152.314C196.672 152.62 196.289 153.366 196.289 153.979C196.289 154.592 196.672 154.843 197.147 154.536C197.622 154.23 198.005 153.484 198.005 152.871C198.005 152.252 197.617 152.007 197.147 152.314Z" fill="#D48806"/>
<path d="M222.675 117.63L193.006 136.801L163.332 117.63L193.006 98.4543L222.675 117.63Z" fill="#FFF1B8"/>
<path d="M222.675 127.216L193.006 146.387V136.801L222.675 117.63V127.216Z" fill="#D48806"/>
<path d="M193.005 146.387L163.332 127.216V117.63L193.005 136.801V146.387Z" fill="#D48806"/>
<path d="M218.962 132.008V129.612L193.005 146.387V148.783L218.962 132.008Z" fill="#D48806"/>
<path d="M165.185 128.411L165.19 130.808L193.005 148.783V146.387L165.185 128.411Z" fill="#D48806"/>
<path opacity="0.2" d="M165.185 128.411L165.19 130.808L193.005 148.783V146.387L165.185 128.411Z" fill="#874D00"/>
<path d="M220.82 121.478V122.566C220.82 122.709 220.734 122.878 220.624 122.95L220.4 123.093C220.291 123.164 220.204 123.108 220.204 122.965V121.877C220.204 121.733 220.291 121.565 220.4 121.493L220.619 121.35C220.729 121.279 220.82 121.34 220.82 121.478Z" fill="#FFF1B8"/>
<path d="M219.82 122.122V123.21C219.82 123.353 219.734 123.522 219.624 123.593L219.4 123.736C219.291 123.808 219.204 123.752 219.204 123.609V122.52C219.204 122.377 219.291 122.209 219.4 122.137L219.624 121.994C219.729 121.927 219.82 121.984 219.82 122.122Z" fill="#D48806"/>
<path d="M218.82 122.771V123.859C218.82 124.002 218.733 124.171 218.624 124.242L218.4 124.385C218.29 124.457 218.204 124.401 218.204 124.258V123.169C218.204 123.026 218.29 122.858 218.4 122.786L218.624 122.643C218.733 122.571 218.82 122.628 218.82 122.771Z" fill="#D48806"/>
<path d="M217.82 123.415V124.503C217.82 124.646 217.734 124.815 217.624 124.886L217.4 125.029C217.291 125.101 217.204 125.045 217.204 124.901V123.813C217.204 123.67 217.291 123.501 217.4 123.43L217.624 123.287C217.734 123.215 217.82 123.272 217.82 123.415Z" fill="#FFF1B8"/>
<path d="M216.822 124.058V125.147C216.822 125.29 216.735 125.458 216.625 125.53L216.402 125.673C216.292 125.745 216.205 125.688 216.205 125.545V124.457C216.205 124.314 216.292 124.145 216.402 124.074L216.625 123.931C216.735 123.859 216.822 123.915 216.822 124.058Z" fill="#FFF1B8"/>
<path d="M215.822 124.702V125.79C215.822 125.933 215.735 126.102 215.625 126.174L215.402 126.317C215.292 126.388 215.205 126.332 215.205 126.189V125.101C215.205 124.957 215.292 124.789 215.402 124.717L215.625 124.574C215.735 124.503 215.822 124.559 215.822 124.702Z" fill="#D48806"/>
<path d="M214.826 125.346V126.434C214.826 126.577 214.739 126.746 214.629 126.817L214.406 126.96C214.296 127.032 214.209 126.976 214.209 126.833V125.744C214.209 125.601 214.296 125.433 214.406 125.361L214.629 125.218C214.734 125.147 214.826 125.208 214.826 125.346Z" fill="#D48806"/>
<path d="M213.826 125.99V127.078C213.826 127.221 213.739 127.39 213.629 127.461L213.406 127.604C213.296 127.676 213.209 127.62 213.209 127.477V126.388C213.209 126.245 213.296 126.077 213.406 126.005L213.629 125.862C213.734 125.796 213.826 125.852 213.826 125.99Z" fill="#D48806"/>
<path d="M212.827 126.633V127.722C212.827 127.865 212.74 128.033 212.63 128.105L212.407 128.248C212.297 128.32 212.21 128.263 212.21 128.12V127.032C212.21 126.889 212.297 126.72 212.407 126.649L212.63 126.506C212.74 126.439 212.827 126.495 212.827 126.633Z" fill="#D48806"/>
<path d="M211.827 127.282V128.371C211.827 128.514 211.74 128.682 211.63 128.754L211.407 128.897C211.297 128.969 211.21 128.912 211.21 128.769V127.681C211.21 127.538 211.297 127.369 211.407 127.298L211.63 127.155C211.74 127.083 211.827 127.139 211.827 127.282Z" fill="#FFF1B8"/>
<path d="M210.827 127.926V129.015C210.827 129.158 210.74 129.326 210.631 129.398L210.407 129.541C210.298 129.612 210.211 129.556 210.211 129.413V128.325C210.211 128.182 210.298 128.013 210.407 127.942L210.631 127.799C210.74 127.727 210.827 127.783 210.827 127.926Z" fill="#FFF1B8"/>
<path d="M209.828 128.57V129.658C209.828 129.802 209.741 129.97 209.631 130.042L209.408 130.185C209.298 130.256 209.211 130.2 209.211 130.057V128.969C209.211 128.826 209.298 128.657 209.408 128.585L209.631 128.442C209.741 128.371 209.828 128.427 209.828 128.57Z" fill="#FFF1B8"/>
<path d="M208.832 129.214V130.302C208.832 130.445 208.745 130.614 208.636 130.685L208.412 130.828C208.302 130.9 208.216 130.844 208.216 130.701V129.612C208.216 129.469 208.302 129.301 208.412 129.229L208.636 129.086C208.741 129.014 208.832 129.071 208.832 129.214Z" fill="#D48806"/>
<path d="M207.833 129.858V130.946C207.833 131.089 207.746 131.258 207.636 131.329L207.413 131.472C207.303 131.544 207.216 131.488 207.216 131.344V130.256C207.216 130.113 207.303 129.944 207.413 129.873L207.636 129.73C207.741 129.658 207.833 129.72 207.833 129.858Z" fill="#D48806"/>
<path d="M206.833 130.502V131.59C206.833 131.733 206.746 131.902 206.636 131.973L206.413 132.116C206.303 132.188 206.216 132.131 206.216 131.988V130.9C206.216 130.757 206.303 130.588 206.413 130.517L206.636 130.374C206.746 130.307 206.833 130.364 206.833 130.502Z" fill="#D48806"/>
<path d="M205.833 131.15V132.239C205.833 132.382 205.746 132.55 205.637 132.622L205.413 132.765C205.303 132.836 205.217 132.78 205.217 132.637V131.549C205.217 131.406 205.303 131.237 205.413 131.166L205.637 131.023C205.746 130.951 205.833 131.007 205.833 131.15Z" fill="#FFF1B8"/>
<path d="M204.833 131.794V132.882C204.833 133.025 204.747 133.194 204.637 133.265L204.413 133.408C204.304 133.48 204.217 133.424 204.217 133.281V132.192C204.217 132.049 204.304 131.881 204.413 131.809L204.637 131.666C204.747 131.595 204.833 131.651 204.833 131.794Z" fill="#D48806"/>
<path d="M220.82 124.702V125.79C220.82 125.933 220.734 126.102 220.624 126.173L220.4 126.316C220.291 126.388 220.204 126.332 220.204 126.189V125.1C220.204 124.957 220.291 124.789 220.4 124.717L220.624 124.574C220.729 124.503 220.82 124.559 220.82 124.702Z" fill="#D48806"/>
<path d="M219.82 125.346V126.434C219.82 126.577 219.734 126.746 219.624 126.817L219.4 126.96C219.291 127.032 219.204 126.976 219.204 126.832V125.744C219.204 125.601 219.291 125.432 219.4 125.361L219.624 125.218C219.729 125.146 219.82 125.208 219.82 125.346Z" fill="#D48806"/>
<path d="M218.82 125.99V127.078C218.82 127.221 218.733 127.39 218.624 127.461L218.4 127.604C218.29 127.676 218.204 127.619 218.204 127.476V126.388C218.204 126.245 218.29 126.076 218.4 126.005L218.624 125.862C218.733 125.795 218.82 125.852 218.82 125.99Z" fill="#D48806"/>
<path d="M217.82 126.633V127.721C217.82 127.865 217.734 128.033 217.624 128.105L217.4 128.248C217.291 128.319 217.204 128.263 217.204 128.12V127.032C217.204 126.889 217.291 126.72 217.4 126.648L217.624 126.505C217.734 126.439 217.82 126.495 217.82 126.633Z" fill="#D48806"/>
<path d="M216.822 127.282V128.37C216.822 128.513 216.735 128.682 216.625 128.753L216.402 128.896C216.292 128.968 216.205 128.912 216.205 128.769V127.68C216.205 127.537 216.292 127.369 216.402 127.297L216.625 127.154C216.735 127.083 216.822 127.139 216.822 127.282Z" fill="#FFF1B8"/>
<path d="M215.822 127.926V129.014C215.822 129.157 215.735 129.326 215.625 129.398L215.402 129.541C215.292 129.612 215.205 129.556 215.205 129.413V128.325C215.205 128.182 215.292 128.013 215.402 127.941L215.625 127.798C215.735 127.727 215.822 127.783 215.822 127.926Z" fill="#FFF1B8"/>
<path d="M214.826 128.57V129.658C214.826 129.801 214.739 129.97 214.629 130.041L214.406 130.184C214.296 130.256 214.209 130.2 214.209 130.056V128.968C214.209 128.825 214.296 128.656 214.406 128.585L214.629 128.442C214.734 128.37 214.826 128.427 214.826 128.57Z" fill="#D48806"/>
<path d="M213.826 129.214V130.302C213.826 130.445 213.739 130.614 213.629 130.685L213.406 130.828C213.296 130.9 213.209 130.843 213.209 130.7V129.612C213.209 129.469 213.296 129.3 213.406 129.229L213.629 129.086C213.734 129.014 213.826 129.07 213.826 129.214Z" fill="#D48806"/>
<path d="M212.827 129.857V130.946C212.827 131.089 212.74 131.257 212.63 131.329L212.407 131.472C212.297 131.543 212.21 131.487 212.21 131.344V130.256C212.21 130.113 212.297 129.944 212.407 129.873L212.63 129.73C212.74 129.658 212.827 129.719 212.827 129.857Z" fill="#D48806"/>
<path d="M211.827 130.501V131.589C211.827 131.732 211.74 131.901 211.63 131.973L211.407 132.116C211.297 132.187 211.21 132.131 211.21 131.988V130.9C211.21 130.756 211.297 130.588 211.407 130.516L211.63 130.373C211.74 130.307 211.827 130.363 211.827 130.501Z" fill="#D48806"/>
<path d="M210.827 131.15V132.238C210.827 132.381 210.74 132.55 210.631 132.622L210.407 132.765C210.298 132.836 210.211 132.78 210.211 132.637V131.549C210.211 131.406 210.298 131.237 210.407 131.165L210.631 131.022C210.74 130.951 210.827 131.007 210.827 131.15Z" fill="#D48806"/>
<path d="M209.828 131.794V132.882C209.828 133.025 209.741 133.194 209.631 133.265L209.408 133.408C209.298 133.48 209.211 133.424 209.211 133.28V132.192C209.211 132.049 209.298 131.88 209.408 131.809L209.631 131.666C209.741 131.594 209.828 131.651 209.828 131.794Z" fill="#FFF1B8"/>
<path d="M208.832 132.438V133.526C208.832 133.669 208.745 133.838 208.636 133.909L208.412 134.052C208.302 134.124 208.216 134.068 208.216 133.925V132.836C208.216 132.693 208.302 132.525 208.412 132.453L208.636 132.31C208.741 132.238 208.832 132.295 208.832 132.438Z" fill="#D48806"/>
<path d="M207.833 133.081V134.17C207.833 134.313 207.746 134.481 207.636 134.553L207.413 134.696C207.303 134.767 207.216 134.711 207.216 134.568V133.48C207.216 133.337 207.303 133.168 207.413 133.097L207.636 132.954C207.741 132.882 207.833 132.938 207.833 133.081Z" fill="#D48806"/>
<path d="M206.833 133.725V134.814C206.833 134.957 206.746 135.125 206.636 135.197L206.413 135.34C206.303 135.411 206.216 135.355 206.216 135.212V134.124C206.216 133.981 206.303 133.812 206.413 133.741L206.636 133.597C206.746 133.526 206.833 133.587 206.833 133.725Z" fill="#D48806"/>
<path d="M205.833 134.369V135.457C205.833 135.601 205.746 135.769 205.637 135.841L205.413 135.984C205.303 136.055 205.217 135.999 205.217 135.856V134.768C205.217 134.625 205.303 134.456 205.413 134.384L205.637 134.241C205.746 134.175 205.833 134.231 205.833 134.369Z" fill="#D48806"/>
<path d="M204.833 135.013V136.101C204.833 136.244 204.747 136.413 204.637 136.484L204.413 136.627C204.304 136.699 204.217 136.643 204.217 136.5V135.411C204.217 135.268 204.304 135.1 204.413 135.028L204.637 134.885C204.747 134.819 204.833 134.875 204.833 135.013Z" fill="#D48806"/>
<path d="M201.497 135.468L201.045 135.177H201.04C200.885 135.08 200.67 135.095 200.437 135.243C199.963 135.55 199.579 136.296 199.579 136.909C199.579 137.215 199.675 137.43 199.83 137.532L200.25 137.803L200.328 137.66C200.405 137.639 200.488 137.609 200.574 137.553C201.049 137.246 201.433 136.5 201.433 135.887C201.433 135.795 201.424 135.713 201.405 135.642L201.497 135.468Z" fill="#D48806"/>
<path opacity="0.2" d="M201.497 135.468L201.045 135.177H201.04C200.885 135.08 200.67 135.095 200.437 135.243C199.963 135.55 199.579 136.296 199.579 136.909C199.579 137.215 199.675 137.43 199.83 137.532L200.25 137.803L200.328 137.66C200.405 137.639 200.488 137.609 200.574 137.553C201.049 137.246 201.433 136.5 201.433 135.887C201.433 135.795 201.424 135.713 201.405 135.642L201.497 135.468Z" fill="#874D00"/>
<path d="M200.871 135.524C200.396 135.831 200.012 136.577 200.012 137.19C200.012 137.803 200.396 138.053 200.871 137.747C201.345 137.44 201.729 136.694 201.729 136.081C201.734 135.468 201.345 135.218 200.871 135.524Z" fill="#D48806"/>
<path d="M197.769 137.879L197.317 137.588H197.312C197.157 137.491 196.942 137.506 196.709 137.655C196.235 137.961 195.851 138.707 195.851 139.32C195.851 139.627 195.947 139.841 196.102 139.944L196.522 140.214L196.6 140.071C196.677 140.051 196.76 140.02 196.846 139.964C197.321 139.657 197.705 138.911 197.705 138.298C197.705 138.206 197.696 138.125 197.677 138.053L197.769 137.879Z" fill="#D48806"/>
<path opacity="0.2" d="M197.769 137.879L197.317 137.588H197.312C197.157 137.491 196.942 137.506 196.709 137.655C196.235 137.961 195.851 138.707 195.851 139.32C195.851 139.627 195.947 139.841 196.102 139.944L196.522 140.214L196.6 140.071C196.677 140.051 196.76 140.02 196.846 139.964C197.321 139.657 197.705 138.911 197.705 138.298C197.705 138.206 197.696 138.125 197.677 138.053L197.769 137.879Z" fill="#874D00"/>
<path d="M197.147 137.935C196.672 138.242 196.289 138.988 196.289 139.601C196.289 140.214 196.672 140.465 197.147 140.158C197.622 139.852 198.005 139.106 198.005 138.492C198.005 137.874 197.617 137.629 197.147 137.935Z" fill="#D48806"/>
<path d="M222.675 103.247L193.006 122.423L163.332 103.247L193.006 84.0766L222.675 103.247Z" fill="#FFF1B8"/>
<path d="M222.675 112.838L193.006 132.009V122.423L222.675 103.247V112.838Z" fill="#D48806"/>
<path d="M193.005 132.009L163.332 112.838V103.248L193.005 122.424V132.009Z" fill="#D48806"/>
<path d="M218.962 117.631V115.234L193.005 132.009V134.405L218.962 117.631Z" fill="#D48806"/>
<path d="M165.185 114.034L165.19 116.43L193.005 134.405V132.009L165.185 114.034Z" fill="#D48806"/>
<path opacity="0.2" d="M165.185 114.034L165.19 116.43L193.005 134.405V132.009L165.185 114.034Z" fill="#874D00"/>
<path d="M220.82 107.1V108.189C220.82 108.332 220.734 108.5 220.624 108.572L220.4 108.715C220.291 108.786 220.204 108.73 220.204 108.587V107.499C220.204 107.356 220.291 107.187 220.4 107.116L220.624 106.973C220.729 106.901 220.82 106.957 220.82 107.1Z" fill="#D48806"/>
<path d="M219.82 107.744V108.832C219.82 108.975 219.734 109.144 219.624 109.216L219.4 109.359C219.291 109.43 219.204 109.374 219.204 109.231V108.143C219.204 108 219.291 107.831 219.4 107.759L219.624 107.616C219.729 107.545 219.82 107.606 219.82 107.744Z" fill="#D48806"/>
<path d="M218.82 108.388V109.476C218.82 109.619 218.733 109.788 218.624 109.859L218.4 110.003C218.29 110.074 218.204 110.018 218.204 109.875V108.786C218.204 108.643 218.29 108.475 218.4 108.403L218.624 108.26C218.733 108.189 218.82 108.25 218.82 108.388Z" fill="#D48806"/>
<path d="M217.82 109.032V110.12C217.82 110.263 217.734 110.432 217.624 110.503L217.4 110.646C217.291 110.718 217.204 110.662 217.204 110.518V109.43C217.204 109.287 217.291 109.118 217.4 109.047L217.624 108.904C217.734 108.837 217.82 108.894 217.82 109.032Z" fill="#FFF1B8"/>
<path d="M216.822 109.68V110.769C216.822 110.912 216.735 111.08 216.625 111.152L216.402 111.295C216.292 111.367 216.205 111.31 216.205 111.167V110.079C216.205 109.936 216.292 109.767 216.402 109.696L216.625 109.553C216.735 109.481 216.822 109.537 216.822 109.68Z" fill="#FFF1B8"/>
<path d="M215.822 110.325V111.413C215.822 111.556 215.735 111.725 215.625 111.796L215.402 111.939C215.292 112.011 215.205 111.954 215.205 111.811V110.723C215.205 110.58 215.292 110.411 215.402 110.34L215.625 110.197C215.735 110.125 215.822 110.181 215.822 110.325Z" fill="#D48806"/>
<path d="M214.826 110.968V112.056C214.826 112.2 214.739 112.368 214.629 112.44L214.406 112.583C214.296 112.654 214.209 112.598 214.209 112.455V111.367C214.209 111.224 214.296 111.055 214.406 110.983L214.629 110.84C214.734 110.769 214.826 110.825 214.826 110.968Z" fill="#D48806"/>
<path d="M213.826 111.612V112.7C213.826 112.843 213.739 113.012 213.629 113.084L213.406 113.227C213.296 113.298 213.209 113.242 213.209 113.099V112.011C213.209 111.867 213.296 111.699 213.406 111.627L213.629 111.484C213.734 111.413 213.826 111.469 213.826 111.612Z" fill="#D48806"/>
<path d="M212.827 112.256V113.344C212.827 113.487 212.74 113.656 212.63 113.727L212.407 113.87C212.297 113.942 212.21 113.886 212.21 113.743V112.654C212.21 112.511 212.297 112.343 212.407 112.271L212.63 112.128C212.74 112.057 212.827 112.118 212.827 112.256Z" fill="#D48806"/>
<path d="M211.827 112.899V113.988C211.827 114.131 211.74 114.299 211.63 114.371L211.407 114.514C211.297 114.586 211.21 114.529 211.21 114.386V113.298C211.21 113.155 211.297 112.986 211.407 112.915L211.63 112.772C211.74 112.705 211.827 112.762 211.827 112.899Z" fill="#D48806"/>
<path d="M210.827 113.549V114.637C210.827 114.78 210.74 114.949 210.631 115.02L210.407 115.163C210.298 115.235 210.211 115.178 210.211 115.035V113.947C210.211 113.804 210.298 113.635 210.407 113.564L210.631 113.421C210.74 113.349 210.827 113.405 210.827 113.549Z" fill="#D48806"/>
<path d="M209.828 114.192V115.28C209.828 115.423 209.741 115.592 209.631 115.664L209.408 115.807C209.298 115.878 209.211 115.822 209.211 115.679V114.591C209.211 114.448 209.298 114.279 209.408 114.207L209.631 114.064C209.741 113.993 209.828 114.049 209.828 114.192Z" fill="#D48806"/>
<path d="M208.832 114.836V115.925C208.832 116.068 208.745 116.236 208.636 116.308L208.412 116.451C208.302 116.522 208.216 116.466 208.216 116.323V115.235C208.216 115.092 208.302 114.923 208.412 114.852L208.636 114.709C208.741 114.637 208.832 114.693 208.832 114.836Z" fill="#FFF1B8"/>
<path d="M207.833 115.48V116.568C207.833 116.711 207.746 116.88 207.636 116.951L207.413 117.094C207.303 117.166 207.216 117.11 207.216 116.967V115.878C207.216 115.735 207.303 115.567 207.413 115.495L207.636 115.352C207.741 115.281 207.833 115.337 207.833 115.48Z" fill="#D48806"/>
<path d="M206.833 116.124V117.212C206.833 117.355 206.746 117.524 206.636 117.595L206.413 117.738C206.303 117.81 206.216 117.754 206.216 117.611V116.522C206.216 116.379 206.303 116.211 206.413 116.139L206.636 115.996C206.746 115.924 206.833 115.986 206.833 116.124Z" fill="#D48806"/>
<path d="M205.833 116.768V117.856C205.833 117.999 205.746 118.168 205.637 118.239L205.413 118.382C205.303 118.454 205.217 118.397 205.217 118.254V117.166C205.217 117.023 205.303 116.854 205.413 116.783L205.637 116.64C205.746 116.568 205.833 116.63 205.833 116.768Z" fill="#D48806"/>
<path d="M204.833 117.411V118.5C204.833 118.643 204.747 118.811 204.637 118.883L204.413 119.026C204.304 119.097 204.217 119.041 204.217 118.898V117.81C204.217 117.667 204.304 117.498 204.413 117.427L204.637 117.283C204.747 117.217 204.833 117.273 204.833 117.411Z" fill="#D48806"/>
<path d="M220.82 110.324V111.413C220.82 111.556 220.734 111.724 220.624 111.796L220.4 111.939C220.291 112.01 220.204 111.954 220.204 111.811V110.723C220.204 110.58 220.291 110.411 220.4 110.34L220.624 110.197C220.729 110.125 220.82 110.181 220.82 110.324Z" fill="#D48806"/>
<path d="M219.82 110.968V112.056C219.82 112.199 219.734 112.368 219.624 112.439L219.4 112.582C219.291 112.654 219.204 112.598 219.204 112.455V111.366C219.204 111.223 219.291 111.055 219.4 110.983L219.624 110.84C219.729 110.769 219.82 110.825 219.82 110.968Z" fill="#FFF1B8"/>
<path d="M218.82 111.612V112.7C218.82 112.843 218.733 113.012 218.624 113.084L218.4 113.227C218.29 113.298 218.204 113.242 218.204 113.099V112.011C218.204 111.867 218.29 111.699 218.4 111.627L218.624 111.484C218.733 111.413 218.82 111.469 218.82 111.612Z" fill="#FFF1B8"/>
<path d="M217.82 112.256V113.344C217.82 113.487 217.734 113.656 217.624 113.727L217.4 113.87C217.291 113.942 217.204 113.885 217.204 113.742V112.654C217.204 112.511 217.291 112.342 217.4 112.271L217.624 112.128C217.734 112.056 217.82 112.118 217.82 112.256Z" fill="#D48806"/>
<path d="M216.822 112.899V113.988C216.822 114.131 216.735 114.299 216.625 114.371L216.402 114.514C216.292 114.586 216.205 114.529 216.205 114.386V113.298C216.205 113.155 216.292 112.986 216.402 112.915L216.625 112.772C216.735 112.705 216.822 112.762 216.822 112.899Z" fill="#D48806"/>
<path d="M215.822 113.549V114.637C215.822 114.78 215.735 114.949 215.625 115.02L215.402 115.163C215.292 115.235 215.205 115.178 215.205 115.035V113.947C215.205 113.804 215.292 113.635 215.402 113.564L215.625 113.421C215.735 113.349 215.822 113.405 215.822 113.549Z" fill="#FFF1B8"/>
<path d="M214.826 114.192V115.28C214.826 115.423 214.739 115.592 214.629 115.664L214.406 115.807C214.296 115.878 214.209 115.822 214.209 115.679V114.591C214.209 114.448 214.296 114.279 214.406 114.207L214.629 114.064C214.734 113.993 214.826 114.049 214.826 114.192Z" fill="#D48806"/>
<path d="M213.826 114.836V115.924C213.826 116.067 213.739 116.236 213.629 116.308L213.406 116.451C213.296 116.522 213.209 116.466 213.209 116.323V115.235C213.209 115.091 213.296 114.923 213.406 114.851L213.629 114.708C213.734 114.637 213.826 114.693 213.826 114.836Z" fill="#D48806"/>
<path d="M212.827 115.48V116.568C212.827 116.711 212.74 116.88 212.63 116.951L212.407 117.094C212.297 117.166 212.21 117.109 212.21 116.966V115.878C212.21 115.735 212.297 115.566 212.407 115.495L212.63 115.352C212.74 115.28 212.827 115.336 212.827 115.48Z" fill="#D48806"/>
<path d="M211.827 116.123V117.212C211.827 117.355 211.74 117.523 211.63 117.595L211.407 117.738C211.297 117.81 211.21 117.753 211.21 117.61V116.522C211.21 116.379 211.297 116.21 211.407 116.139L211.63 115.996C211.74 115.924 211.827 115.985 211.827 116.123Z" fill="#D48806"/>
<path d="M210.827 116.767V117.856C210.827 117.999 210.74 118.167 210.631 118.239L210.407 118.382C210.298 118.453 210.211 118.397 210.211 118.254V117.166C210.211 117.023 210.298 116.854 210.407 116.783L210.631 116.64C210.74 116.568 210.827 116.629 210.827 116.767Z" fill="#FFF1B8"/>
<path d="M209.828 117.411V118.499C209.828 118.642 209.741 118.811 209.631 118.882L209.408 119.026C209.298 119.097 209.211 119.041 209.211 118.898V117.809C209.211 117.666 209.298 117.498 209.408 117.426L209.631 117.283C209.741 117.217 209.828 117.273 209.828 117.411Z" fill="#FFF1B8"/>
<path d="M208.832 118.06V119.149C208.832 119.292 208.745 119.46 208.636 119.532L208.412 119.675C208.302 119.746 208.216 119.69 208.216 119.547V118.459C208.216 118.316 208.302 118.147 208.412 118.076L208.636 117.933C208.741 117.861 208.832 117.917 208.832 118.06Z" fill="#D48806"/>
<path d="M207.833 118.704V119.792C207.833 119.935 207.746 120.104 207.636 120.175L207.413 120.318C207.303 120.39 207.216 120.334 207.216 120.191V119.102C207.216 118.959 207.303 118.791 207.413 118.719L207.636 118.576C207.741 118.505 207.833 118.561 207.833 118.704Z" fill="#D48806"/>
<path d="M206.833 119.348V120.436C206.833 120.579 206.746 120.748 206.636 120.819L206.413 120.962C206.303 121.034 206.216 120.978 206.216 120.835V119.746C206.216 119.603 206.303 119.435 206.413 119.363L206.636 119.22C206.746 119.148 206.833 119.205 206.833 119.348Z" fill="#D48806"/>
<path d="M205.833 119.991V121.08C205.833 121.223 205.746 121.391 205.637 121.463L205.413 121.606C205.303 121.677 205.217 121.621 205.217 121.478V120.39C205.217 120.247 205.303 120.078 205.413 120.007L205.637 119.864C205.746 119.792 205.833 119.848 205.833 119.991Z" fill="#FFF1B8"/>
<path d="M204.833 120.635V121.723C204.833 121.866 204.747 122.035 204.637 122.107L204.413 122.25C204.304 122.321 204.217 122.265 204.217 122.122V121.034C204.217 120.891 204.304 120.722 204.413 120.65L204.637 120.507C204.747 120.436 204.833 120.497 204.833 120.635Z" fill="#D48806"/>
<path d="M201.497 121.09L201.045 120.799H201.04C200.885 120.702 200.67 120.717 200.437 120.865C199.963 121.172 199.579 121.918 199.579 122.531C199.579 122.837 199.675 123.052 199.83 123.154L200.25 123.425L200.328 123.282C200.405 123.261 200.488 123.231 200.574 123.175C201.049 122.868 201.433 122.122 201.433 121.509C201.433 121.417 201.424 121.335 201.405 121.264L201.497 121.09Z" fill="#D48806"/>
<path opacity="0.2" d="M201.497 121.09L201.045 120.799H201.04C200.885 120.702 200.67 120.717 200.437 120.865C199.963 121.172 199.579 121.918 199.579 122.531C199.579 122.837 199.675 123.052 199.83 123.154L200.25 123.425L200.328 123.282C200.405 123.261 200.488 123.231 200.574 123.175C201.049 122.868 201.433 122.122 201.433 121.509C201.433 121.417 201.424 121.335 201.405 121.264L201.497 121.09Z" fill="#874D00"/>
<path d="M200.871 121.146C200.396 121.453 200.012 122.199 200.012 122.812C200.012 123.425 200.396 123.675 200.871 123.369C201.345 123.062 201.729 122.316 201.729 121.703C201.734 121.085 201.345 120.839 200.871 121.146Z" fill="#D48806"/>
<path d="M197.769 123.502L197.317 123.21H197.312C197.157 123.113 196.942 123.129 196.709 123.277C196.235 123.583 195.851 124.329 195.851 124.943C195.851 125.249 195.947 125.464 196.102 125.566L196.522 125.837L196.6 125.694C196.677 125.673 196.76 125.643 196.846 125.586C197.321 125.28 197.705 124.534 197.705 123.921C197.705 123.829 197.696 123.747 197.677 123.675L197.769 123.502Z" fill="#D48806"/>
<path opacity="0.2" d="M197.769 123.502L197.317 123.21H197.312C197.157 123.113 196.942 123.129 196.709 123.277C196.235 123.583 195.851 124.329 195.851 124.943C195.851 125.249 195.947 125.464 196.102 125.566L196.522 125.837L196.6 125.694C196.677 125.673 196.76 125.643 196.846 125.586C197.321 125.28 197.705 124.534 197.705 123.921C197.705 123.829 197.696 123.747 197.677 123.675L197.769 123.502Z" fill="#874D00"/>
<path d="M197.147 123.553C196.672 123.859 196.289 124.605 196.289 125.218C196.289 125.832 196.672 126.082 197.147 125.775C197.622 125.469 198.005 124.723 198.005 124.11C198.005 123.497 197.617 123.246 197.147 123.553Z" fill="#D48806"/>
<path d="M222.675 88.8689L193.006 108.04L163.332 88.8689L193.006 69.698L222.675 88.8689Z" fill="#FFF1B8"/>
<path d="M222.675 98.4543L193.006 117.63V108.04L222.675 88.8689V98.4543Z" fill="#D48806"/>
<path d="M193.005 117.63L163.332 98.4543V88.8689L193.005 108.04V117.63Z" fill="#D48806"/>
<path d="M218.962 103.247V100.851L193.005 117.63V120.027L218.962 103.247Z" fill="#D48806"/>
<path d="M165.185 99.6547L165.19 102.051L193.005 120.026V117.63L165.185 99.6547Z" fill="#D48806"/>
<path opacity="0.2" d="M165.185 99.6547L165.19 102.051L193.005 120.026V117.63L165.185 99.6547Z" fill="#874D00"/>
<path d="M220.82 92.7216V93.81C220.82 93.953 220.734 94.1216 220.624 94.1932L220.4 94.3362C220.291 94.4078 220.204 94.3516 220.204 94.2085V93.1202C220.204 92.9771 220.291 92.8085 220.4 92.737L220.624 92.5939C220.729 92.5224 220.82 92.5786 220.82 92.7216Z" fill="#D48806"/>
<path d="M219.82 93.3652V94.4535C219.82 94.5966 219.734 94.7652 219.624 94.8368L219.4 94.9798C219.291 95.0514 219.204 94.9951 219.204 94.8521V93.7638C219.204 93.6207 219.291 93.4521 219.4 93.3805L219.624 93.2375C219.729 93.1659 219.82 93.2221 219.82 93.3652Z" fill="#FFF1B8"/>
<path d="M218.82 94.0094V95.0977C218.82 95.2408 218.733 95.4094 218.624 95.4809L218.4 95.624C218.29 95.6955 218.204 95.6393 218.204 95.4962V94.4079C218.204 94.2649 218.29 94.0962 218.4 94.0247L218.624 93.8816C218.733 93.8101 218.82 93.8663 218.82 94.0094Z" fill="#D48806"/>
<path d="M217.82 94.6529V95.7412C217.82 95.8843 217.734 96.0529 217.624 96.1245L217.4 96.2675C217.291 96.3391 217.204 96.2828 217.204 96.1398V95.0515C217.204 94.9084 217.291 94.7398 217.4 94.6682L217.624 94.5252C217.734 94.4536 217.82 94.515 217.82 94.6529Z" fill="#FFF1B8"/>
<path d="M216.822 95.2969V96.3852C216.822 96.5283 216.735 96.6969 216.625 96.7684L216.402 96.9115C216.292 96.983 216.205 96.9268 216.205 96.7837V95.6954C216.205 95.5523 216.292 95.3837 216.402 95.3122L216.625 95.1691C216.735 95.1027 216.822 95.1589 216.822 95.2969Z" fill="#FFF1B8"/>
<path d="M215.822 95.9407V97.0291C215.822 97.1721 215.735 97.3407 215.625 97.4123L215.402 97.5553C215.292 97.6269 215.205 97.5707 215.205 97.4276V96.3393C215.205 96.1962 215.292 96.0276 215.402 95.9561L215.625 95.813C215.735 95.7466 215.822 95.8028 215.822 95.9407Z" fill="#FFF1B8"/>
<path d="M214.826 96.5895V97.6778C214.826 97.8209 214.739 97.9895 214.629 98.061L214.406 98.2041C214.296 98.2756 214.209 98.2194 214.209 98.0764V96.988C214.209 96.845 214.296 96.6763 214.406 96.6048L214.629 96.4617C214.734 96.3902 214.826 96.4464 214.826 96.5895Z" fill="#FFF1B8"/>
<path d="M213.826 97.2334V98.3217C213.826 98.4647 213.739 98.6334 213.629 98.7049L213.406 98.848C213.296 98.9195 213.209 98.8633 213.209 98.7202V97.6319C213.209 97.4888 213.296 97.3202 213.406 97.2487L213.629 97.1056C213.734 97.0341 213.826 97.0903 213.826 97.2334Z" fill="#D48806"/>
<path d="M212.827 97.8769V98.9653C212.827 99.1083 212.74 99.2769 212.63 99.3485L212.407 99.4915C212.297 99.5631 212.21 99.5069 212.21 99.3638V98.2755C212.21 98.1324 212.297 97.9638 212.407 97.8923L212.63 97.7492C212.74 97.6777 212.827 97.7339 212.827 97.8769Z" fill="#D48806"/>
<path d="M211.827 98.5211V99.6094C211.827 99.7525 211.74 99.9211 211.63 99.9926L211.407 100.136C211.297 100.207 211.21 100.151 211.21 100.008V98.9196C211.21 98.7766 211.297 98.608 211.407 98.5364L211.63 98.3934C211.74 98.3218 211.827 98.378 211.827 98.5211Z" fill="#D48806"/>
<path d="M210.827 99.1646V100.253C210.827 100.396 210.74 100.565 210.631 100.636L210.407 100.779C210.298 100.851 210.211 100.795 210.211 100.652V99.5632C210.211 99.4201 210.298 99.2515 210.407 99.18L210.631 99.0369C210.74 98.9654 210.827 99.0267 210.827 99.1646Z" fill="#D48806"/>
<path d="M209.828 99.8083V100.897C209.828 101.04 209.741 101.208 209.631 101.28L209.408 101.423C209.298 101.494 209.211 101.438 209.211 101.295V100.207C209.211 100.064 209.298 99.8952 209.408 99.8236L209.631 99.6806C209.741 99.6141 209.828 99.6703 209.828 99.8083Z" fill="#FFF1B8"/>
<path d="M208.832 100.458V101.546C208.832 101.689 208.745 101.858 208.636 101.929L208.412 102.072C208.302 102.144 208.216 102.088 208.216 101.944V100.856C208.216 100.713 208.302 100.544 208.412 100.473L208.636 100.33C208.741 100.258 208.832 100.315 208.832 100.458Z" fill="#FFF1B8"/>
<path d="M207.833 101.101V102.19C207.833 102.333 207.746 102.501 207.636 102.573L207.413 102.716C207.303 102.787 207.216 102.731 207.216 102.588V101.5C207.216 101.357 207.303 101.188 207.413 101.117L207.636 100.973C207.741 100.902 207.833 100.958 207.833 101.101Z" fill="#FFF1B8"/>
<path d="M206.833 101.745V102.833C206.833 102.976 206.746 103.145 206.636 103.217L206.413 103.36C206.303 103.431 206.216 103.375 206.216 103.232V102.144C206.216 102.001 206.303 101.832 206.413 101.76L206.636 101.617C206.746 101.546 206.833 101.602 206.833 101.745Z" fill="#D48806"/>
<path d="M205.833 102.389V103.477C205.833 103.62 205.746 103.789 205.637 103.86L205.413 104.003C205.303 104.075 205.217 104.019 205.217 103.876V102.787C205.217 102.644 205.303 102.476 205.413 102.404L205.637 102.261C205.746 102.189 205.833 102.246 205.833 102.389Z" fill="#FFF1B8"/>
<path d="M204.833 103.032V104.121C204.833 104.264 204.747 104.432 204.637 104.504L204.413 104.647C204.304 104.719 204.217 104.662 204.217 104.519V103.431C204.217 103.288 204.304 103.119 204.413 103.048L204.637 102.905C204.747 102.833 204.833 102.895 204.833 103.032Z" fill="#FFF1B8"/>
<path d="M220.82 95.9404V97.0288C220.82 97.1718 220.734 97.3404 220.624 97.412L220.4 97.555C220.291 97.6266 220.204 97.5704 220.204 97.4273V96.339C220.204 96.1959 220.291 96.0273 220.4 95.9558L220.624 95.8127C220.729 95.7463 220.82 95.8025 220.82 95.9404Z" fill="#FFF1B8"/>
<path d="M219.82 96.5892V97.6775C219.82 97.8206 219.734 97.9892 219.624 98.0607L219.4 98.2038C219.291 98.2753 219.204 98.2191 219.204 98.0761V96.9877C219.204 96.8447 219.291 96.6761 219.4 96.6045L219.624 96.4615C219.729 96.3899 219.82 96.4461 219.82 96.5892Z" fill="#FFF1B8"/>
<path d="M218.82 97.2331V98.3214C218.82 98.4645 218.733 98.6331 218.624 98.7046L218.4 98.8477C218.29 98.9192 218.204 98.863 218.204 98.7199V97.6316C218.204 97.4885 218.29 97.3199 218.4 97.2484L218.624 97.1053C218.733 97.0338 218.82 97.09 218.82 97.2331Z" fill="#D48806"/>
<path d="M217.82 97.8769V98.9653C217.82 99.1083 217.734 99.2769 217.624 99.3485L217.4 99.4915C217.291 99.5631 217.204 99.5069 217.204 99.3638V98.2755C217.204 98.1324 217.291 97.9638 217.4 97.8923L217.624 97.7492C217.734 97.6777 217.82 97.7339 217.82 97.8769Z" fill="#FFF1B8"/>
<path d="M216.822 98.5208V99.6091C216.822 99.7522 216.735 99.9208 216.625 99.9923L216.402 100.135C216.292 100.207 216.205 100.151 216.205 100.008V98.9194C216.205 98.7763 216.292 98.6077 216.402 98.5361L216.625 98.3931C216.735 98.3215 216.822 98.3777 216.822 98.5208Z" fill="#FFF1B8"/>
<path d="M215.822 99.1646V100.253C215.822 100.396 215.735 100.565 215.625 100.636L215.402 100.779C215.292 100.851 215.205 100.795 215.205 100.652V99.5632C215.205 99.4201 215.292 99.2515 215.402 99.18L215.625 99.0369C215.735 98.9654 215.822 99.0267 215.822 99.1646Z" fill="#FFF1B8"/>
<path d="M214.826 99.8083V100.897C214.826 101.04 214.739 101.208 214.629 101.28L214.406 101.423C214.296 101.494 214.209 101.438 214.209 101.295V100.207C214.209 100.064 214.296 99.8952 214.406 99.8236L214.629 99.6806C214.734 99.6141 214.826 99.6703 214.826 99.8083Z" fill="#FFF1B8"/>
<path d="M213.826 100.457V101.546C213.826 101.689 213.739 101.857 213.629 101.929L213.406 102.072C213.296 102.143 213.209 102.087 213.209 101.944V100.856C213.209 100.713 213.296 100.544 213.406 100.473L213.629 100.33C213.734 100.258 213.826 100.314 213.826 100.457Z" fill="#D48806"/>
<path d="M212.827 101.101V102.189C212.827 102.332 212.74 102.501 212.63 102.572L212.407 102.716C212.297 102.787 212.21 102.731 212.21 102.588V101.499C212.21 101.356 212.297 101.188 212.407 101.116L212.63 100.973C212.74 100.902 212.827 100.958 212.827 101.101Z" fill="#FFF1B8"/>
<path d="M211.827 101.745V102.833C211.827 102.976 211.74 103.145 211.63 103.216L211.407 103.359C211.297 103.431 211.21 103.375 211.21 103.232V102.143C211.21 102 211.297 101.832 211.407 101.76L211.63 101.617C211.74 101.546 211.827 101.602 211.827 101.745Z" fill="#FFF1B8"/>
<path d="M210.827 102.389V103.477C210.827 103.62 210.74 103.789 210.631 103.86L210.407 104.003C210.298 104.075 210.211 104.019 210.211 103.876V102.787C210.211 102.644 210.298 102.476 210.407 102.404L210.631 102.261C210.74 102.189 210.827 102.246 210.827 102.389Z" fill="#FFF1B8"/>
<path d="M209.828 103.032V104.121C209.828 104.264 209.741 104.432 209.631 104.504L209.408 104.647C209.298 104.719 209.211 104.662 209.211 104.519V103.431C209.211 103.288 209.298 103.119 209.408 103.048L209.631 102.905C209.741 102.833 209.828 102.895 209.828 103.032Z" fill="#D48806"/>
<path d="M208.832 103.676V104.765C208.832 104.908 208.745 105.076 208.636 105.148L208.412 105.291C208.302 105.363 208.216 105.306 208.216 105.163V104.075C208.216 103.932 208.302 103.763 208.412 103.692L208.636 103.549C208.741 103.482 208.832 103.538 208.832 103.676Z" fill="#D48806"/>
<path d="M207.833 104.32V105.408C207.833 105.551 207.746 105.72 207.636 105.792L207.413 105.935C207.303 106.006 207.216 105.95 207.216 105.807V104.719C207.216 104.575 207.303 104.407 207.413 104.335L207.636 104.192C207.741 104.126 207.833 104.182 207.833 104.32Z" fill="#FFF1B8"/>
<path d="M206.833 104.969V106.057C206.833 106.2 206.746 106.369 206.636 106.441L206.413 106.584C206.303 106.655 206.216 106.599 206.216 106.456V105.368C206.216 105.225 206.303 105.056 206.413 104.984L206.636 104.841C206.746 104.77 206.833 104.826 206.833 104.969Z" fill="#FFF1B8"/>
<path d="M205.833 105.613V106.701C205.833 106.844 205.746 107.013 205.637 107.084L205.413 107.227C205.303 107.299 205.217 107.243 205.217 107.1V106.011C205.217 105.868 205.303 105.7 205.413 105.628L205.637 105.485C205.746 105.413 205.833 105.47 205.833 105.613Z" fill="#FFF1B8"/>
<path d="M204.833 106.257V107.345C204.833 107.488 204.747 107.657 204.637 107.728L204.413 107.871C204.304 107.943 204.217 107.886 204.217 107.743V106.655C204.217 106.512 204.304 106.343 204.413 106.272L204.637 106.129C204.747 106.057 204.833 106.113 204.833 106.257Z" fill="#FFF1B8"/>
<path d="M201.497 106.711L201.045 106.42H201.04C200.885 106.323 200.67 106.338 200.437 106.486C199.963 106.793 199.579 107.539 199.579 108.152C199.579 108.459 199.675 108.673 199.83 108.775L200.25 109.046L200.328 108.903C200.405 108.883 200.488 108.852 200.574 108.796C201.049 108.489 201.433 107.743 201.433 107.13C201.433 107.038 201.424 106.956 201.405 106.885L201.497 106.711Z" fill="#D48806"/>
<path opacity="0.2" d="M201.497 106.711L201.045 106.42H201.04C200.885 106.323 200.67 106.338 200.437 106.486C199.963 106.793 199.579 107.539 199.579 108.152C199.579 108.459 199.675 108.673 199.83 108.775L200.25 109.046L200.328 108.903C200.405 108.883 200.488 108.852 200.574 108.796C201.049 108.489 201.433 107.743 201.433 107.13C201.433 107.038 201.424 106.956 201.405 106.885L201.497 106.711Z" fill="#874D00"/>
<path d="M200.871 106.767C200.396 107.074 200.012 107.82 200.012 108.433C200.012 109.046 200.396 109.297 200.871 108.99C201.345 108.683 201.729 107.937 201.729 107.324C201.734 106.706 201.345 106.461 200.871 106.767Z" fill="#D48806"/>
<path d="M197.769 109.118L197.317 108.827H197.312C197.157 108.729 196.942 108.745 196.709 108.893C196.235 109.2 195.851 109.946 195.851 110.559C195.851 110.865 195.947 111.08 196.102 111.182L196.522 111.453L196.6 111.31C196.677 111.289 196.76 111.259 196.846 111.202C197.321 110.896 197.705 110.15 197.705 109.537C197.705 109.445 197.696 109.363 197.677 109.292L197.769 109.118Z" fill="#D48806"/>
<path opacity="0.2" d="M197.769 109.118L197.317 108.827H197.312C197.157 108.729 196.942 108.745 196.709 108.893C196.235 109.2 195.851 109.946 195.851 110.559C195.851 110.865 195.947 111.08 196.102 111.182L196.522 111.453L196.6 111.31C196.677 111.289 196.76 111.259 196.846 111.202C197.321 110.896 197.705 110.15 197.705 109.537C197.705 109.445 197.696 109.363 197.677 109.292L197.769 109.118Z" fill="#874D00"/>
<path d="M197.147 109.174C196.672 109.481 196.289 110.227 196.289 110.84C196.289 111.453 196.672 111.703 197.147 111.397C197.622 111.09 198.005 110.344 198.005 109.731C198.005 109.118 197.617 108.868 197.147 109.174Z" fill="#D48806"/>
<path d="M222.675 74.4907L193.006 93.6616L163.332 74.4907L193.006 55.3147L222.675 74.4907Z" fill="#FFF1B8"/>
<path d="M222.675 84.076L193.006 103.247V93.6615L222.675 74.4906V84.076Z" fill="#D48806"/>
<path d="M193.005 103.247L163.332 84.076V74.4906L193.005 93.6615V103.247Z" fill="#D48806"/>
<path d="M218.962 88.8688V86.4725L193.005 103.247V105.643L218.962 88.8688Z" fill="#D48806"/>
<path d="M165.185 85.2718L165.19 87.6732L193.005 105.643V103.247L165.185 85.2718Z" fill="#D48806"/>
<path opacity="0.2" d="M165.185 85.2718L165.19 87.6732L193.005 105.643V103.247L165.185 85.2718Z" fill="#874D00"/>
<path d="M220.82 78.3381V79.4265C220.82 79.5695 220.734 79.7381 220.624 79.8097L220.4 79.9527C220.291 80.0243 220.204 79.9681 220.204 79.825V78.7367C220.204 78.5936 220.291 78.425 220.4 78.3535L220.619 78.2104C220.729 78.144 220.82 78.2002 220.82 78.3381Z" fill="#D48806"/>
<path d="M219.82 78.9869V80.0752C219.82 80.2183 219.734 80.3869 219.624 80.4584L219.4 80.6015C219.291 80.673 219.204 80.6168 219.204 80.4738V79.3854C219.204 79.2424 219.291 79.0738 219.4 79.0022L219.624 78.8592C219.729 78.7876 219.82 78.8438 219.82 78.9869Z" fill="#D48806"/>
<path d="M218.82 79.6308V80.7191C218.82 80.8622 218.733 81.0308 218.624 81.1023L218.4 81.2403C218.29 81.3118 218.204 81.2556 218.204 81.1125V80.0242C218.204 79.8811 218.29 79.7125 218.4 79.641L218.624 79.503C218.733 79.4315 218.82 79.4877 218.82 79.6308Z" fill="#FFF1B8"/>
<path d="M217.82 80.2746V81.363C217.82 81.506 217.734 81.6746 217.624 81.7462L217.4 81.8892C217.291 81.9608 217.204 81.9046 217.204 81.7615V80.6732C217.204 80.5301 217.291 80.3615 217.4 80.29L217.624 80.1469C217.734 80.0754 217.82 80.1316 217.82 80.2746Z" fill="#D48806"/>
<path d="M216.822 80.9185V82.0068C216.822 82.1499 216.735 82.3185 216.625 82.39L216.402 82.5331C216.292 82.6046 216.205 82.5484 216.205 82.4054V81.317C216.205 81.174 216.292 81.0054 216.402 80.9338L216.625 80.7908C216.735 80.7192 216.822 80.7754 216.822 80.9185Z" fill="#D48806"/>
<path d="M215.822 81.5623V82.6507C215.822 82.7937 215.735 82.9623 215.625 83.0339L215.402 83.1769C215.292 83.2485 215.205 83.1923 215.205 83.0492V81.9609C215.205 81.8178 215.292 81.6492 215.402 81.5777L215.625 81.4346C215.735 81.3631 215.822 81.4244 215.822 81.5623Z" fill="#FFF1B8"/>
<path d="M214.826 82.206V83.2943C214.826 83.4374 214.739 83.606 214.629 83.6775L214.406 83.8206C214.296 83.8921 214.209 83.8359 214.209 83.6929V82.6045C214.209 82.4615 214.296 82.2929 214.406 82.2213L214.629 82.0783C214.734 82.0118 214.826 82.068 214.826 82.206Z" fill="#FFF1B8"/>
<path d="M213.826 82.855V83.9434C213.826 84.0864 213.739 84.255 213.629 84.3266L213.406 84.4696C213.296 84.5412 213.209 84.485 213.209 84.3419V83.2536C213.209 83.1105 213.296 82.9419 213.406 82.8704L213.629 82.7273C213.734 82.6558 213.826 82.712 213.826 82.855Z" fill="#D48806"/>
<path d="M212.827 83.4986V84.5869C212.827 84.73 212.74 84.8986 212.63 84.9702L212.407 85.1132C212.297 85.1848 212.21 85.1286 212.21 84.9855V83.8972C212.21 83.7541 212.297 83.5855 212.407 83.5139L212.63 83.3709C212.74 83.2993 212.827 83.3556 212.827 83.4986Z" fill="#FFF1B8"/>
<path d="M211.827 84.1425V85.2308C211.827 85.3739 211.74 85.5425 211.63 85.614L211.407 85.7571C211.297 85.8286 211.21 85.7724 211.21 85.6294V84.541C211.21 84.398 211.297 84.2294 211.407 84.1578L211.63 84.0148C211.74 83.9432 211.827 83.9994 211.827 84.1425Z" fill="#D48806"/>
<path d="M210.827 84.7864V85.8747C210.827 86.0178 210.74 86.1864 210.631 86.2579L210.407 86.401C210.298 86.4725 210.211 86.4163 210.211 86.2732V85.1849C210.211 85.0418 210.298 84.8732 210.407 84.8017L210.631 84.6586C210.74 84.5871 210.827 84.6433 210.827 84.7864Z" fill="#D48806"/>
<path d="M209.828 85.4302V86.5185C209.828 86.6616 209.741 86.8302 209.631 86.9017L209.408 87.0448C209.298 87.1163 209.211 87.0601 209.211 86.917V85.8287C209.211 85.6857 209.298 85.517 209.408 85.4455L209.631 85.3024C209.741 85.2309 209.828 85.2922 209.828 85.4302Z" fill="#D48806"/>
<path d="M208.832 86.0741V87.1624C208.832 87.3054 208.745 87.4741 208.636 87.5456L208.412 87.6887C208.302 87.7602 208.216 87.704 208.216 87.5609V86.4726C208.216 86.3295 208.302 86.1609 208.412 86.0894L208.636 85.9463C208.741 85.8748 208.832 85.9361 208.832 86.0741Z" fill="#D48806"/>
<path d="M207.833 86.7177V87.806C207.833 87.9491 207.746 88.1177 207.636 88.1893L207.413 88.3323C207.303 88.4039 207.216 88.3476 207.216 88.2046V87.1163C207.216 86.9732 207.303 86.8046 207.413 86.733L207.636 86.59C207.741 86.5236 207.833 86.5798 207.833 86.7177Z" fill="#FFF1B8"/>
<path d="M206.833 87.3668V88.4551C206.833 88.5982 206.746 88.7668 206.636 88.8383L206.413 88.9814C206.303 89.0529 206.216 88.9967 206.216 88.8536V87.7653C206.216 87.6222 206.303 87.4536 206.413 87.3821L206.636 87.239C206.746 87.1675 206.833 87.2237 206.833 87.3668Z" fill="#FFF1B8"/>
<path d="M205.833 88.0103V89.0987C205.833 89.2417 205.746 89.4103 205.637 89.4819L205.413 89.6249C205.303 89.6965 205.217 89.6403 205.217 89.4972V88.4089C205.217 88.2658 205.303 88.0972 205.413 88.0257L205.637 87.8826C205.746 87.8111 205.833 87.8673 205.833 88.0103Z" fill="#FFF1B8"/>
<path d="M204.833 88.6542V89.7425C204.833 89.8856 204.747 90.0542 204.637 90.1257L204.413 90.2688C204.304 90.3403 204.217 90.2841 204.217 90.1411V89.0527C204.217 88.9097 204.304 88.7411 204.413 88.6695L204.637 88.5265C204.747 88.4549 204.833 88.5111 204.833 88.6542Z" fill="#D48806"/>
<path d="M220.82 81.5623V82.6507C220.82 82.7937 220.734 82.9623 220.624 83.0339L220.4 83.1769C220.291 83.2485 220.204 83.1923 220.204 83.0492V81.9609C220.204 81.8178 220.291 81.6492 220.4 81.5777L220.619 81.4346C220.729 81.3631 220.82 81.4244 220.82 81.5623Z" fill="#D48806"/>
<path d="M219.82 82.206V83.2943C219.82 83.4374 219.734 83.606 219.624 83.6775L219.4 83.8206C219.291 83.8921 219.204 83.8359 219.204 83.6929V82.6045C219.204 82.4615 219.291 82.2929 219.4 82.2213L219.624 82.0783C219.729 82.0118 219.82 82.068 219.82 82.206Z" fill="#D48806"/>
<path d="M218.82 82.855V83.9434C218.82 84.0864 218.733 84.255 218.624 84.3266L218.4 84.4696C218.29 84.5412 218.204 84.485 218.204 84.3419V83.2536C218.204 83.1105 218.29 82.9419 218.4 82.8704L218.624 82.7273C218.733 82.6558 218.82 82.712 218.82 82.855Z" fill="#D48806"/>
<path d="M217.82 83.4989V84.5872C217.82 84.7303 217.734 84.8989 217.624 84.9704L217.4 85.1135C217.291 85.185 217.204 85.1288 217.204 84.9858V83.8974C217.204 83.7544 217.291 83.5858 217.4 83.5142L217.624 83.3712C217.734 83.2996 217.82 83.3558 217.82 83.4989Z" fill="#FFF1B8"/>
<path d="M216.822 84.1428V85.2311C216.822 85.3742 216.735 85.5428 216.625 85.6143L216.402 85.7574C216.292 85.8289 216.205 85.7727 216.205 85.6296V84.5413C216.205 84.3983 216.292 84.2296 216.402 84.1581L216.625 84.015C216.735 83.9435 216.822 83.9997 216.822 84.1428Z" fill="#FFF1B8"/>
<path d="M215.822 84.7864V85.8747C215.822 86.0178 215.735 86.1864 215.625 86.2579L215.402 86.401C215.292 86.4725 215.205 86.4163 215.205 86.2732V85.1849C215.205 85.0418 215.292 84.8732 215.402 84.8017L215.625 84.6586C215.735 84.5871 215.822 84.6433 215.822 84.7864Z" fill="#D48806"/>
<path d="M214.826 85.4302V86.5185C214.826 86.6616 214.739 86.8302 214.629 86.9017L214.406 87.0448C214.296 87.1163 214.209 87.0601 214.209 86.9171V85.8287C214.209 85.6857 214.296 85.517 214.406 85.4455L214.629 85.3024C214.734 85.2309 214.826 85.2922 214.826 85.4302Z" fill="#D48806"/>
<path d="M213.826 86.0741V87.1624C213.826 87.3054 213.739 87.4741 213.629 87.5456L213.406 87.6887C213.296 87.7602 213.209 87.704 213.209 87.5609V86.4726C213.209 86.3295 213.296 86.1609 213.406 86.0894L213.629 85.9463C213.734 85.8748 213.826 85.9361 213.826 86.0741Z" fill="#D48806"/>
<path d="M212.827 86.7177V87.806C212.827 87.9491 212.74 88.1177 212.63 88.1893L212.407 88.3323C212.297 88.4039 212.21 88.3476 212.21 88.2046V87.1163C212.21 86.9732 212.297 86.8046 212.407 86.733L212.63 86.59C212.74 86.5236 212.827 86.5798 212.827 86.7177Z" fill="#FFF1B8"/>
<path d="M211.827 87.3668V88.4551C211.827 88.5982 211.74 88.7668 211.63 88.8383L211.407 88.9814C211.297 89.0529 211.21 88.9967 211.21 88.8536V87.7653C211.21 87.6222 211.297 87.4536 211.407 87.3821L211.63 87.239C211.74 87.1675 211.827 87.2237 211.827 87.3668Z" fill="#FFF1B8"/>
<path d="M210.827 88.0106V89.099C210.827 89.242 210.74 89.4106 210.631 89.4822L210.407 89.6252C210.298 89.6968 210.211 89.6406 210.211 89.4975V88.4092C210.211 88.2661 210.298 88.0975 210.407 88.026L210.631 87.8829C210.74 87.8114 210.827 87.8676 210.827 88.0106Z" fill="#FFF1B8"/>
<path d="M209.828 88.6545V89.7428C209.828 89.8859 209.741 90.0545 209.631 90.126L209.408 90.2691C209.298 90.3406 209.211 90.2844 209.211 90.1414V89.053C209.211 88.91 209.298 88.7414 209.408 88.6698L209.631 88.5268C209.741 88.4552 209.828 88.5114 209.828 88.6545Z" fill="#FFF1B8"/>
<path d="M208.832 89.2981V90.3864C208.832 90.5295 208.745 90.6981 208.636 90.7696L208.412 90.9127C208.302 90.9842 208.216 90.928 208.216 90.7849V89.6966C208.216 89.5536 208.302 89.3849 208.412 89.3134L208.636 89.1703C208.741 89.0988 208.832 89.155 208.832 89.2981Z" fill="#D48806"/>
<path d="M207.833 89.9419V91.0302C207.833 91.1733 207.746 91.3419 207.636 91.4134L207.413 91.5565C207.303 91.628 207.216 91.5718 207.216 91.4288V90.3404C207.216 90.1974 207.303 90.0288 207.413 89.9572L207.636 89.8142C207.741 89.7426 207.833 89.8039 207.833 89.9419Z" fill="#D48806"/>
<path d="M206.833 90.5859V91.6742C206.833 91.8172 206.746 91.9859 206.636 92.0574L206.413 92.2005C206.303 92.272 206.216 92.2158 206.216 92.0727V90.9844C206.216 90.8413 206.303 90.6727 206.413 90.6012L206.636 90.4581C206.746 90.3917 206.833 90.4479 206.833 90.5859Z" fill="#D48806"/>
<path d="M205.833 91.2346V92.3229C205.833 92.466 205.746 92.6346 205.637 92.7062L205.413 92.8492C205.303 92.9207 205.217 92.8645 205.217 92.7215V91.6331C205.217 91.4901 205.303 91.3215 205.413 91.2499L205.637 91.1069C205.746 91.0353 205.833 91.0915 205.833 91.2346Z" fill="#D48806"/>
<path d="M204.833 91.8782V92.9665C204.833 93.1096 204.747 93.2782 204.637 93.3497L204.413 93.4928C204.304 93.5643 204.217 93.5081 204.217 93.3651V92.2767C204.217 92.1337 204.304 91.9651 204.413 91.8935L204.637 91.7505C204.747 91.6789 204.833 91.7351 204.833 91.8782Z" fill="#D48806"/>
<path d="M201.497 92.3332L201.045 92.042H201.04C200.885 91.9449 200.67 91.9602 200.437 92.1084C199.963 92.415 199.579 93.1609 199.579 93.7741C199.579 94.0807 199.675 94.2953 199.83 94.3974L200.25 94.6682L200.328 94.5252C200.405 94.5047 200.488 94.4741 200.574 94.4179C201.049 94.1113 201.433 93.3653 201.433 92.7522C201.433 92.6602 201.424 92.5785 201.405 92.5069L201.497 92.3332Z" fill="#D48806"/>
<path opacity="0.2" d="M201.497 92.3332L201.045 92.042H201.04C200.885 91.9449 200.67 91.9602 200.437 92.1084C199.963 92.415 199.579 93.1609 199.579 93.7741C199.579 94.0807 199.675 94.2953 199.83 94.3974L200.25 94.6682L200.328 94.5252C200.405 94.5047 200.488 94.4741 200.574 94.4179C201.049 94.1113 201.433 93.3653 201.433 92.7522C201.433 92.6602 201.424 92.5785 201.405 92.5069L201.497 92.3332Z" fill="#874D00"/>
<path d="M200.871 92.3843C200.396 92.6909 200.012 93.4369 200.012 94.05C200.012 94.6632 200.396 94.9135 200.871 94.607C201.345 94.3004 201.729 93.5544 201.729 92.9413C201.734 92.3281 201.345 92.0778 200.871 92.3843Z" fill="#D48806"/>
<path d="M197.769 94.7398L197.317 94.4485H197.312C197.157 94.3514 196.942 94.3668 196.709 94.515C196.235 94.8215 195.851 95.5675 195.851 96.1806C195.851 96.4872 195.947 96.7018 196.102 96.804L196.522 97.0748L196.6 96.9317C196.677 96.9113 196.76 96.8807 196.846 96.8244C197.321 96.5179 197.705 95.7719 197.705 95.1587C197.705 95.0668 197.696 94.985 197.677 94.9135L197.769 94.7398Z" fill="#D48806"/>
<path opacity="0.2" d="M197.769 94.7398L197.317 94.4485H197.312C197.157 94.3514 196.942 94.3668 196.709 94.515C196.235 94.8215 195.851 95.5675 195.851 96.1806C195.851 96.4872 195.947 96.7018 196.102 96.804L196.522 97.0748L196.6 96.9317C196.677 96.9113 196.76 96.8807 196.846 96.8244C197.321 96.5179 197.705 95.7719 197.705 95.1587C197.705 95.0668 197.696 94.985 197.677 94.9135L197.769 94.7398Z" fill="#874D00"/>
<path d="M197.147 94.7959C196.672 95.1024 196.289 95.8484 196.289 96.4616C196.289 97.0747 196.672 97.3251 197.147 97.0185C197.622 96.7119 198.005 95.9659 198.005 95.3528C198.005 94.7346 197.617 94.4893 197.147 94.7959Z" fill="#D48806"/>
<path d="M164.519 59.3465L191.832 41.7033C192.485 41.2844 193.553 41.2844 194.206 41.7033L221.488 59.3465C222.141 59.7655 222.675 60.8027 222.675 61.6458V69.6983L192.987 88.8692L163.332 69.6983V61.6458C163.332 60.8027 163.866 59.7655 164.519 59.3465Z" fill="#D48806"/>
<path d="M192.987 78.834V88.8691L222.675 69.6982V61.6456C222.675 60.8996 222.255 59.9952 221.702 59.5149C222.136 59.939 222.063 60.5062 221.488 60.8792L194.17 78.5172C193.846 78.7267 193.416 78.834 192.987 78.834Z" fill="#D48806"/>
<path d="M221.488 60.8791L194.17 78.5171C193.517 78.9412 192.453 78.9412 191.796 78.5171L164.514 60.8791C163.861 60.455 163.861 59.7703 164.514 59.3462L191.832 41.7031C192.485 41.279 193.549 41.279 194.206 41.7031L221.488 59.3462C222.145 59.7652 222.145 60.455 221.488 60.8791Z" fill="#FFF1B8"/>
<path d="M218.962 74.4908V72.0944L193.005 88.8689V91.2653L218.962 74.4908Z" fill="#D48806"/>
<path d="M165.185 70.8937L165.19 73.2901L193.005 91.2654V88.869L165.185 70.8937Z" fill="#D48806"/>
<path opacity="0.2" d="M165.185 70.8937L165.19 73.2901L193.005 91.2654V88.869L165.185 70.8937Z" fill="#874D00"/>
<path d="M220.82 63.9603V65.0486C220.82 65.1917 220.734 65.3603 220.624 65.4318L220.4 65.5749C220.291 65.6464 220.204 65.5902 220.204 65.4472V64.3588C220.204 64.2158 220.291 64.0471 220.4 63.9756L220.619 63.8325C220.729 63.761 220.82 63.8223 220.82 63.9603Z" fill="#FFF1B8"/>
<path d="M219.82 64.604V65.6923C219.82 65.8353 219.734 66.004 219.624 66.0755L219.4 66.2186C219.291 66.2901 219.204 66.2339 219.204 66.0908V65.0025C219.204 64.8594 219.291 64.6908 219.4 64.6193L219.624 64.4762C219.729 64.4098 219.82 64.466 219.82 64.604Z" fill="#FFF1B8"/>
<path d="M218.82 65.2528V66.3411C218.82 66.4842 218.733 66.6528 218.624 66.7244L218.4 66.8674C218.29 66.9338 218.204 66.8776 218.204 66.7346V65.6462C218.204 65.5032 218.29 65.3346 218.4 65.263L218.624 65.12C218.733 65.0535 218.82 65.1097 218.82 65.2528Z" fill="#FFF1B8"/>
<path d="M217.82 65.8969V66.9852C217.82 67.1283 217.734 67.2969 217.624 67.3684L217.4 67.5115C217.291 67.583 217.204 67.5268 217.204 67.3837V66.2954C217.204 66.1523 217.291 65.9837 217.4 65.9122L217.624 65.7691C217.734 65.6976 217.82 65.7538 217.82 65.8969Z" fill="#D48806"/>
<path d="M216.822 66.5407V67.6291C216.822 67.7721 216.735 67.9407 216.625 68.0123L216.402 68.1553C216.292 68.2269 216.205 68.1707 216.205 68.0276V66.9393C216.205 66.7962 216.292 66.6276 216.402 66.5561L216.625 66.413C216.735 66.3415 216.822 66.3977 216.822 66.5407Z" fill="#D48806"/>
<path d="M215.822 67.1843V68.2726C215.822 68.4157 215.735 68.5843 215.625 68.6559L215.402 68.7989C215.292 68.8705 215.205 68.8143 215.205 68.6712V67.5829C215.205 67.4398 215.292 67.2712 215.402 67.1997L215.625 67.0566C215.735 66.9851 215.822 67.0413 215.822 67.1843Z" fill="#FFF1B8"/>
<path d="M214.826 67.8282V68.9165C214.826 69.0596 214.739 69.2282 214.629 69.2997L214.406 69.4428C214.296 69.5143 214.209 69.4581 214.209 69.3151V68.2267C214.209 68.0837 214.296 67.9151 214.406 67.8435L214.629 67.7005C214.734 67.6289 214.826 67.6851 214.826 67.8282Z" fill="#FFF1B8"/>
<path d="M213.826 68.472V69.5603C213.826 69.7034 213.739 69.872 213.629 69.9436L213.406 70.0866C213.296 70.1582 213.209 70.1019 213.209 69.9589V68.8706C213.209 68.7275 213.296 68.5589 213.406 68.4873L213.629 68.3443C213.734 68.2727 213.826 68.3341 213.826 68.472Z" fill="#FFF1B8"/>
<path d="M212.827 69.1157V70.204C212.827 70.3471 212.74 70.5157 212.63 70.5872L212.407 70.7303C212.297 70.8018 212.21 70.7456 212.21 70.6025V69.5142C212.21 69.3712 212.297 69.2025 212.407 69.131L212.63 68.9879C212.74 68.9215 212.827 68.9777 212.827 69.1157Z" fill="#FFF1B8"/>
<path d="M211.827 69.7647V70.853C211.827 70.9961 211.74 71.1647 211.63 71.2363L211.407 71.3793C211.297 71.4509 211.21 71.3947 211.21 71.2516V70.1633C211.21 70.0202 211.297 69.8516 211.407 69.78L211.63 69.637C211.74 69.5654 211.827 69.6217 211.827 69.7647Z" fill="#FFF1B8"/>
<path d="M210.827 70.4086V71.4969C210.827 71.64 210.74 71.8086 210.631 71.8801L210.407 72.0232C210.298 72.0947 210.211 72.0385 210.211 71.8955V70.8071C210.211 70.6641 210.298 70.4955 210.407 70.4239L210.631 70.2809C210.74 70.2093 210.827 70.2655 210.827 70.4086Z" fill="#D48806"/>
<path d="M209.828 71.0525V72.1408C209.828 72.2839 209.741 72.4525 209.631 72.524L209.408 72.6671C209.298 72.7386 209.211 72.6824 209.211 72.5393V71.451C209.211 71.3079 209.298 71.1393 209.408 71.0678L209.631 70.9247C209.741 70.8532 209.828 70.9094 209.828 71.0525Z" fill="#D48806"/>
<path d="M208.832 71.696V72.7844C208.832 72.9274 208.745 73.0961 208.636 73.1676L208.412 73.3107C208.302 73.3822 208.216 73.326 208.216 73.1829V72.0946C208.216 71.9515 208.302 71.7829 208.412 71.7114L208.636 71.5683C208.741 71.4968 208.832 71.553 208.832 71.696Z" fill="#FFF1B8"/>
<path d="M207.833 72.3399V73.4282C207.833 73.5713 207.746 73.7399 207.636 73.8114L207.413 73.9545C207.303 74.026 207.216 73.9698 207.216 73.8267V72.7384C207.216 72.5953 207.303 72.4267 207.413 72.3552L207.636 72.2121C207.741 72.1406 207.833 72.2019 207.833 72.3399Z" fill="#D48806"/>
<path d="M206.833 72.9838V74.0721C206.833 74.2152 206.746 74.3838 206.636 74.4554L206.413 74.5984C206.303 74.67 206.216 74.6138 206.216 74.4707V73.3824C206.216 73.2393 206.303 73.0707 206.413 72.9991L206.636 72.8561C206.746 72.7897 206.833 72.8459 206.833 72.9838Z" fill="#FFF1B8"/>
<path d="M205.833 73.6274V74.7157C205.833 74.8588 205.746 75.0274 205.637 75.0989L205.413 75.242C205.303 75.3135 205.217 75.2573 205.217 75.1143V74.0259C205.217 73.8829 205.303 73.7143 205.413 73.6427L205.637 73.4997C205.746 73.4332 205.833 73.4894 205.833 73.6274Z" fill="#FFF1B8"/>
<path d="M204.833 74.2763V75.3646C204.833 75.5077 204.747 75.6763 204.637 75.7478L204.413 75.8858C204.304 75.9573 204.217 75.9011 204.217 75.758V74.6697C204.217 74.5266 204.304 74.358 204.413 74.2865L204.637 74.1434C204.747 74.077 204.833 74.1332 204.833 74.2763Z" fill="#FFF1B8"/>
<path d="M220.82 67.1844V68.2727C220.82 68.4158 220.734 68.5844 220.624 68.6559L220.4 68.799C220.291 68.8705 220.204 68.8143 220.204 68.6712V67.5829C220.204 67.4398 220.291 67.2712 220.4 67.1997L220.619 67.0566C220.729 66.9851 220.82 67.0413 220.82 67.1844Z" fill="#D48806"/>
<path d="M219.82 67.8279V68.9163C219.82 69.0593 219.734 69.228 219.624 69.2995L219.4 69.4425C219.291 69.5141 219.204 69.4579 219.204 69.3148V68.2265C219.204 68.0834 219.291 67.9148 219.4 67.8433L219.624 67.7002C219.729 67.6287 219.82 67.6849 219.82 67.8279Z" fill="#FFF1B8"/>
<path d="M218.82 68.4721V69.5604C218.82 69.7034 218.733 69.8721 218.624 69.9436L218.4 70.0867C218.29 70.1582 218.204 70.102 218.204 69.9589V68.8706C218.204 68.7275 218.29 68.5589 218.4 68.4874L218.624 68.3443C218.733 68.2728 218.82 68.3341 218.82 68.4721Z" fill="#FFF1B8"/>
<path d="M217.82 69.1157V70.204C217.82 70.3471 217.734 70.5157 217.624 70.5873L217.4 70.7303C217.291 70.8019 217.204 70.7457 217.204 70.6026V69.5143C217.204 69.3712 217.291 69.2026 217.4 69.1311L217.624 68.988C217.734 68.9216 217.82 68.9778 217.82 69.1157Z" fill="#FFF1B8"/>
<path d="M216.822 69.7645V70.8528C216.822 70.9959 216.735 71.1645 216.625 71.236L216.402 71.3791C216.292 71.4506 216.205 71.3944 216.205 71.2513V70.163C216.205 70.02 216.292 69.8513 216.402 69.7798L216.625 69.6367C216.735 69.5652 216.822 69.6214 216.822 69.7645Z" fill="#FFF1B8"/>
<path d="M215.822 70.4086V71.497C215.822 71.64 215.735 71.8086 215.625 71.8802L215.402 72.0232C215.292 72.0948 215.205 72.0386 215.205 71.8955V70.8072C215.205 70.6641 215.292 70.4955 215.402 70.424L215.625 70.2809C215.735 70.2094 215.822 70.2656 215.822 70.4086Z" fill="#D48806"/>
<path d="M214.826 71.0522V72.1405C214.826 72.2836 214.739 72.4522 214.629 72.5238L214.406 72.6668C214.296 72.7384 214.209 72.6822 214.209 72.5391V71.4508C214.209 71.3077 214.296 71.1391 214.406 71.0675L214.629 70.9245C214.734 70.8529 214.826 70.9092 214.826 71.0522Z" fill="#FFF1B8"/>
<path d="M213.826 71.6961V72.7844C213.826 72.9275 213.739 73.0961 213.629 73.1676L213.406 73.3107C213.296 73.3822 213.209 73.326 213.209 73.183V72.0946C213.209 71.9516 213.296 71.7829 213.406 71.7114L213.629 71.5683C213.734 71.4968 213.826 71.553 213.826 71.6961Z" fill="#D48806"/>
<path d="M212.827 72.3399V73.4282C212.827 73.5713 212.74 73.7399 212.63 73.8114L212.407 73.9545C212.297 74.026 212.21 73.9698 212.21 73.8268V72.7384C212.21 72.5954 212.297 72.4268 212.407 72.3552L212.63 72.2122C212.74 72.1406 212.827 72.202 212.827 72.3399Z" fill="#FFF1B8"/>
<path d="M211.827 72.9836V74.0719C211.827 74.215 211.74 74.3836 211.63 74.4551L211.407 74.5982C211.297 74.6697 211.21 74.6135 211.21 74.4704V73.3821C211.21 73.239 211.297 73.0704 211.407 72.9989L211.63 72.8558C211.74 72.7894 211.827 72.8456 211.827 72.9836Z" fill="#D48806"/>
<path d="M210.827 73.6274V74.7158C210.827 74.8588 210.74 75.0274 210.631 75.099L210.407 75.242C210.298 75.3136 210.211 75.2574 210.211 75.1143V74.026C210.211 73.8829 210.298 73.7143 210.407 73.6428L210.631 73.4997C210.74 73.4333 210.827 73.4895 210.827 73.6274Z" fill="#FFF1B8"/>
<path d="M209.828 74.2762V75.3645C209.828 75.5076 209.741 75.6762 209.631 75.7477L209.408 75.8908C209.298 75.9623 209.211 75.9061 209.211 75.7631V74.6747C209.211 74.5317 209.298 74.3631 209.408 74.2915L209.631 74.1485C209.741 74.0769 209.828 74.1331 209.828 74.2762Z" fill="#FFF1B8"/>
<path d="M208.832 74.9204V76.0087C208.832 76.1518 208.745 76.3204 208.636 76.3919L208.412 76.535C208.302 76.6065 208.216 76.5503 208.216 76.4072V75.3189C208.216 75.1758 208.302 75.0072 208.412 74.9357L208.636 74.7926C208.741 74.7211 208.832 74.7773 208.832 74.9204Z" fill="#FFF1B8"/>
<path d="M207.833 75.5639V76.6523C207.833 76.7953 207.746 76.9639 207.636 77.0355L207.413 77.1785C207.303 77.2501 207.216 77.1939 207.216 77.0508V75.9625C207.216 75.8194 207.303 75.6508 207.413 75.5793L207.636 75.4362C207.741 75.3647 207.833 75.4209 207.833 75.5639Z" fill="#FFF1B8"/>
<path d="M206.833 76.2078V77.2961C206.833 77.4392 206.746 77.6078 206.636 77.6793L206.413 77.8224C206.303 77.8939 206.216 77.8377 206.216 77.6947V76.6064C206.216 76.4633 206.303 76.2947 206.413 76.2231L206.636 76.0801C206.746 76.0085 206.833 76.0647 206.833 76.2078Z" fill="#FFF1B8"/>
<path d="M205.833 76.8516V77.94C205.833 78.083 205.746 78.2516 205.637 78.3232L205.413 78.4662C205.303 78.5378 205.217 78.4816 205.217 78.3385V77.2502C205.217 77.1071 205.303 76.9385 205.413 76.867L205.637 76.7239C205.746 76.6524 205.833 76.7137 205.833 76.8516Z" fill="#D48806"/>
<path d="M204.833 77.4953V78.5836C204.833 78.7267 204.747 78.8953 204.637 78.9668L204.413 79.1099C204.304 79.1814 204.217 79.1252 204.217 78.9822V77.8938C204.217 77.7508 204.304 77.5821 204.413 77.5106L204.637 77.3676C204.747 77.3011 204.833 77.3573 204.833 77.4953Z" fill="#FFF1B8"/>
<path d="M201.497 77.95L201.045 77.6587H201.04C200.885 77.5616 200.67 77.577 200.437 77.7251C199.963 78.0317 199.579 78.7777 199.579 79.3908C199.579 79.6974 199.675 79.912 199.83 80.0142L200.25 80.285L200.328 80.1419C200.405 80.1215 200.488 80.0908 200.574 80.0346C201.049 79.7281 201.433 78.9821 201.433 78.3689C201.433 78.277 201.424 78.1952 201.405 78.1237L201.497 77.95Z" fill="#D48806"/>
<path opacity="0.2" d="M201.497 77.95L201.045 77.6587H201.04C200.885 77.5616 200.67 77.577 200.437 77.7251C199.963 78.0317 199.579 78.7777 199.579 79.3908C199.579 79.6974 199.675 79.912 199.83 80.0142L200.25 80.285L200.328 80.1419C200.405 80.1215 200.488 80.0908 200.574 80.0346C201.049 79.7281 201.433 78.9821 201.433 78.3689C201.433 78.277 201.424 78.1952 201.405 78.1237L201.497 77.95Z" fill="#874D00"/>
<path d="M200.871 78.0063C200.396 78.3128 200.012 79.0588 200.012 79.672C200.012 80.2851 200.396 80.5355 200.871 80.2289C201.345 79.9223 201.729 79.1763 201.729 78.5632C201.734 77.9501 201.345 77.6997 200.871 78.0063Z" fill="#D48806"/>
<path d="M197.769 80.3614L197.317 80.0702H197.312C197.157 79.9731 196.942 79.9884 196.709 80.1366C196.235 80.4432 195.851 81.1892 195.851 81.8023C195.851 82.1089 195.947 82.3235 196.102 82.4257L196.522 82.6965L196.6 82.5534C196.677 82.533 196.76 82.5023 196.846 82.4461C197.321 82.1395 197.705 81.3936 197.705 80.7804C197.705 80.6884 197.696 80.6067 197.677 80.5352L197.769 80.3614Z" fill="#D48806"/>
<path opacity="0.2" d="M197.769 80.3614L197.317 80.0702H197.312C197.157 79.9731 196.942 79.9884 196.709 80.1366C196.235 80.4432 195.851 81.1892 195.851 81.8023C195.851 82.1089 195.947 82.3235 196.102 82.4257L196.522 82.6965L196.6 82.5534C196.677 82.533 196.76 82.5023 196.846 82.4461C197.321 82.1395 197.705 81.3936 197.705 80.7804C197.705 80.6884 197.696 80.6067 197.677 80.5352L197.769 80.3614Z" fill="#874D00"/>
<path d="M197.147 80.4175C196.672 80.7241 196.289 81.4701 196.289 82.0832C196.289 82.6964 196.672 82.9467 197.147 82.6402C197.622 82.3336 198.005 81.5876 198.005 80.9745C198.005 80.3562 197.617 80.111 197.147 80.4175Z" fill="#D48806"/>
<path d="M68.8062 138.833L71.3996 138.278L70.394 140.13L68.8062 138.833Z" fill="#263238"/>
<path d="M72.0347 139.574L73.7284 138.833V140.13L72.0347 139.574Z" fill="#263238"/>
<path d="M77.3275 141.427L76.216 139.574L75.4221 141.427H77.3275Z" fill="#263238"/>
<path d="M82.5077 136.858L79.7672 137.25L80.9415 135.684L82.5077 136.858Z" fill="#263238"/>
<path d="M80.5508 134.901L78.9852 135.293L79.6476 134.31L80.5508 134.901Z" fill="#263238"/>
<path d="M76.2453 133.727L77.0281 134.901L78.5937 133.727L76.2453 133.727Z" fill="#263238"/>
<defs>
<linearGradient id="paint0_linear_2661_68499" x1="171.681" y1="169.272" x2="101.213" y2="169.272" gradientUnits="userSpaceOnUse">
<stop stopColor="#CAA266"/>
<stop offset="1" stopColor="#E9C57E"/>
</linearGradient>
<linearGradient id="paint1_linear_2661_68499" x1="171.681" y1="180.656" x2="136.447" y2="180.656" gradientUnits="userSpaceOnUse">
<stop stopColor="#CAA266"/>
<stop offset="1" stopColor="#E9C57E"/>
</linearGradient>
<linearGradient id="paint2_linear_2661_68499" x1="136.447" y1="157.888" x2="101.213" y2="157.888" gradientUnits="userSpaceOnUse">
<stop stopColor="#CAA266"/>
<stop offset="1" stopColor="#E9C57E"/>
</linearGradient>
<linearGradient id="paint3_linear_2661_68499" x1="151.338" y1="170.838" x2="121.545" y2="170.838" gradientUnits="userSpaceOnUse">
<stop stopColor="#CAA266"/>
<stop offset="1" stopColor="#E9C57E"/>
</linearGradient>
<linearGradient id="paint4_linear_2661_68499" x1="117.578" y1="180.496" x2="121.201" y2="180.538" gradientUnits="userSpaceOnUse">
<stop stopColor="#ECDCBC"/>
<stop offset="0.475" stopColor="#F0DBB2"/>
<stop offset="1" stopColor="#F9EBCF"/>
</linearGradient>
<linearGradient id="paint5_linear_2661_68499" x1="120.272" y1="185.13" x2="116.282" y2="185.13" gradientUnits="userSpaceOnUse">
<stop stopColor="#CAA266"/>
<stop offset="1" stopColor="#E9C57E"/>
</linearGradient>
<linearGradient id="paint6_linear_2661_68499" x1="54.1281" y1="15.6905" x2="43.7397" y2="15.6905" gradientUnits="userSpaceOnUse">
<stop stopColor="#CAA266"/>
<stop offset="1" stopColor="#E9C57E"/>
</linearGradient>
</defs>
</svg>
)

View File

@ -1,366 +0,0 @@
import React, {useEffect, useMemo, useState} from "react";
import Icon from "@ant-design/icons";
import {useSetState} from "ahooks";
import {Button, Flex, Space, Typography} from "antd";
import {IProofreadTypeData, ProofreadTypeData} from "@/types/proofread.ts";
import {
ProofreadStateEnum, ProofreadTypeEnum,
TCorrectData,
TCorrectedContent,
TDocumentContentDetail
} from "@/service/types/document.ts";
import {showToast} from "@/components/messages/Modal.tsx";
import {IconRollback, IconStartProofread} from "./icons.tsx";
import {ActionKey, ProofreadItem} from "./proofread-item.tsx";
import {parseProofreadResult} from "./parse-proofread-result.ts";
import './editor.less'
import {IconLogo} from "./images/logo.tsx";
type ProofreadPanelProps = {
document?: TDocumentContentDetail;
proofreadLoading?: boolean
onUpdateProofreadItem: (item: TCorrectedContent) => void;
onSelectProofreadItem: (item: TCorrectedContent | null) => void;
activeProofreadItemId?: number;
disabledProofreadItemList:number[];
onStartProofread: () => Promise<void> | void;
selectedProofreadItemId?: number;
userinfo?: Account;
}
const ProofreadPanel: React.FC<ProofreadPanelProps> = (props) => {
const {userinfo} = props
const [state, setState] = useSetState<{
// 当前选中分类
currentType: IProofreadTypeData | null;
// 默认是否展开panel
open: boolean;
adoptAll?: boolean;
ignoreAll?: boolean;
listMaxCount: number;
activeIndex: number;
}>({
currentType: null,
open: true,
adoptAll: false,
ignoreAll: false,
activeIndex: -1,
listMaxCount: 100000,
})
const [proofreadResult, setProofreadResult] = useState<TCorrectData>()
const [histories, setHistories] = useState<number[][]>([])
useEffect(() => {
handleTypeChange(null)
if (props.proofreadLoading) {
//setProofreadList({all: [], processed: []})
} else {
if (props.document) {
const result = parseProofreadResult(props.document,props.disabledProofreadItemList)
setProofreadResult({
abnormalCount: result.abnormalCount,
list: result.resultList
})
setHistories([])
}
}
}, [props.document, props.proofreadLoading,props.disabledProofreadItemList])
// 当前状态校对列表
const currentProofreadList = useMemo(() => {
const list = proofreadResult?.list || [];
if (!state.currentType) return list;
return list.filter(s => Array.isArray(state.currentType?.id) ? state.currentType?.id.includes(s.type) : s.type == state.currentType?.id)
}, [proofreadResult, state.currentType])
// useEffect(() => {
// if (props.document && bridge) {
// bridge.clearAllProofreadMark()
// currentProofreadList.forEach(it => {
// bridge.addBookmark(JSON.stringify(it))
// })
// }
// }, [currentProofreadList])
// 撤销操作
const redoAction = async () => {
if (!props.document) return;
if (histories.length == 0) return;
const currentList = histories.pop();
setHistories(histories);
if (!currentList || currentList.length == 0) return;
currentList.forEach(id => {
// 状态调整为未处理
const item = proofreadResult?.list?.find(s => s.id == id)
if (item) {
item.isAccept = ProofreadStateEnum.Default
props.onUpdateProofreadItem(item)
}
})
setProofreadResult({
abnormalCount: proofreadResult!.abnormalCount,
list: proofreadResult!.list
})
}
/**
* /
* @param isAccept
* @param p
*/
const getSameProofreadItems = (isAccept?: boolean, p?: TCorrectedContent) => {
const list = currentProofreadList.filter(s => {
if (isAccept && s.type == ProofreadTypeEnum.sensitive) return false;
return s.isAccept == ProofreadStateEnum.Default;
})
// 获取当前类型下所有
return p ? list.filter(s => {
return s.origin == p.origin && s.text == p.text && (
isAccept ? s.tag : true
);
}) : (
isAccept ? list.filter(s => s.tag) : [...list]
)
}
const addToHistory = (items: TCorrectedContent[]) => {
setHistories([
...histories,
items.map(s => s.id)
])
setProofreadResult(proofreadResult)
}
// 批量处理
const batchProcess = (status: ProofreadStateEnum, proofread?: TCorrectedContent) => {
const list = getSameProofreadItems(status == ProofreadStateEnum.Accept, proofread);
if (list.length > 0) {
// 设置 状态
list.map(s => {
s.isAccept = status;
props.onUpdateProofreadItem(s);
return s;
})
addToHistory(list)
}
}
// 处理全部
const handleProcessAll = (action: ActionKey) => {
return () => {
if (!props.document) return;
batchProcess(action == 'acceptAll' ? ProofreadStateEnum.Accept : ProofreadStateEnum.Ignore)
}
}
// 让当前选中的 item 居中
const centerItem = (activeIndex: number) => {
setState({activeIndex})
// 将提示显示在视图中间
const div = document.querySelector(`div.proofread-index-${activeIndex}`)
if (div) {
div.scrollIntoView({
behavior: 'smooth',
block: 'center'
})
}
//
props.onSelectProofreadItem(currentProofreadList[activeIndex]);
}
useEffect(() => {
if (props.selectedProofreadItemId) {
const index = currentProofreadList.findIndex(s => s.id == props.selectedProofreadItemId)
if (index >= 0) {
centerItem(index)
}
}
}, [props.selectedProofreadItemId])
// 处理校对项
const handleItemAction = async (key: ActionKey, item: TCorrectedContent, index: number) => {
try {
if (key == 'click') {
if (item) {
setState({activeIndex: index})
}
centerItem(index)
return;
} else if (key == 'addToLexicon') {
// 添加到词库
showToast('添加词库成功', "success")
} else {
if (key == 'ignoreAll' || key == 'acceptAll') { // 同类型处理
batchProcess(key == 'acceptAll' ? ProofreadStateEnum.Accept : ProofreadStateEnum.Ignore, item)
} else {
if (key == 'ignore') { // 忽略
item.isAccept = ProofreadStateEnum.Ignore;
} else if (key == 'accept') { // 采纳
item.isAccept = ProofreadStateEnum.Accept;
} else if (key == 'review') { // 复核
item.isAccept = ProofreadStateEnum.Review;
}
props.onUpdateProofreadItem(item)
addToHistory([item])
}
}
} catch (e) { // 处理错误了
console.log('process item action error:', (e as Error).message)
}
}
const handleTypeChange = (currentType: IProofreadTypeData | null) => {
setState({
currentType,
activeIndex: -1,
})
window.scrollTo({
top: 0,
behavior: 'smooth'
})
}
// eslint-disable-next-line @typescript-eslint/no-unused-vars
const movePrevOrNextProofreadItem = (action: 'prev' | 'next') => {
const maxCount = currentProofreadList.length;
if (maxCount == 0) return;
let newId = state.activeIndex;
if (action == 'next') {
if (state.activeIndex >= maxCount - 1) {
return;
}
newId += 1;
} else { // 向上滚
if (state.activeIndex <= 0) return;
newId -= 1;
}
centerItem(newId)
}
// const handleUpAndDownEvent = (e: KeyboardEvent) => {
// const key = e.key.toLowerCase();
// if (key == 'arrowup' || key == 'arrowdown') {
// movePrevOrNextProofreadItem(key == 'arrowup' ? 'prev' : 'next')
// } else if (key == 'arrowleft' || key == 'arrowright') {
// // movePrevOrNextProofreadItem(key == 'arrowleft' ? 'accept' : 'ignore')
// }
// }
// const processScroll = (e: WheelEvent) => {
// const {deltaY} = e;
// movePrevOrNextProofreadItem(deltaY > 0 ? 'next' : 'prev')
// }
// const {run: onMousewheel} = useDebounceFn((e) => processScroll(e), {wait: 20,})
// useEffect(() => {
// 绑定键盘事件
// document.documentElement.addEventListener('keyup', handleUpAndDownEvent, false)
// 绑定滚动事件
// document.documentElement.addEventListener('wheel', onMousewheel, false)
// return () => {
// document.documentElement.removeEventListener('wheel', onMousewheel, false)
// // document.documentElement.removeEventListener('keyup', handleUpAndDownEvent, false)
// }
// }, []);
const currentProofreadTotal = useMemo(() => {
return proofreadResult?.abnormalCount.total && proofreadResult?.abnormalCount.total > 0 ? proofreadResult?.abnormalCount.total : 0
}, [proofreadResult])
// const {bridge} = useBridge();
// const processGetContent = () => {
// const t = Date.now()
// //
// bridge.getDocumentData().then(ret => {
// console.log(ret, Date.now() - t);
// // bridge.getTotalParagraphNumber().then((total) => {
// // console.log(total, Date.now() - t)
// // // bridge.getParagraphTextByRange(1535, 1544).then((ret) => {
// // // console.log(ret, Date.now() - t);
// // // })
// //
// // })
// })
// }
return (<div className={'proofread-panel-container'}>
<Flex justify={'space-between'} align={'center'} className="panel-header">
<div className="align-center">
{proofreadResult && currentProofreadTotal > 0 ? <span className={'header-logo'}>
<IconLogo/>
</span> : <Button
type="primary"
className="btn-start-proofread"
icon={<Icon component={IconStartProofread} style={{fontSize: 16}}/>}
onClick={props.onStartProofread}
></Button>}
</div>
<Typography.Text className="text-tip">
<strong
className="count-value">{currentProofreadTotal}</strong>
<span style={{marginLeft: 20}}> </span>
<strong
className="count-value">{proofreadResult?.list.filter(s => s.isAccept == ProofreadStateEnum.Default)?.length || 0}</strong>
</Typography.Text>
</Flex>
<div className={`proofread-list-wrapper ${proofreadResult ? 'has-result' : ''}`}>
<div className="proofread-result">
<Flex justify={'center'} className={'operation-buttons'}>
<Space style={{margin: 10}}>
<Button
disabled={!userinfo || !props.document || currentProofreadTotal == 0}
className={'btn-accept-all btn-operation-batch'}
onClick={handleProcessAll('acceptAll')}></Button>
<Button
disabled={!userinfo || !props.document || currentProofreadTotal == 0}
className={'btn-ignore-all btn-operation-batch'}
onClick={handleProcessAll('ignore')}></Button>
<Button
className="btn-rollback btn-operation-batch"
disabled={!userinfo || histories.length == 0 || !props.document || currentProofreadTotal == 0}
onClick={redoAction}
icon={<Icon component={IconRollback}/>}></Button>
</Space>
</Flex>
<div className={'proofread-list'}>
<div style={{paddingTop: 2}}>
{currentProofreadList.map((it, index) => (
index >= state.listMaxCount ? null : <ProofreadItem
it={it}
className={`proofread-index-${index}`}
index={index}
last={false}
selected={state.activeIndex == index}
onAction={key => handleItemAction(key, it, index)}
key={it.id}
previewMode={false}
/>
))}
</div>
</div>
</div>
<div className="types">
<div className="container">
<div onClick={() => handleTypeChange(null)}
className={`item ${!state.currentType ? 'active' : ''}`}>
<div className="count">{currentProofreadTotal}</div>
<div className="text"></div>
</div>
{ProofreadTypeData.map((currentType, activeType) => (
// 只显示有错误的项
proofreadResult?.abnormalCount[currentType.key] ?
<div key={activeType} onClick={() => handleTypeChange(currentType)}
className={`item ${state.currentType?.key == currentType.key ? 'active' : ''}`}>
<div className="count"
style={{color: currentType.color}}>{proofreadResult?.abnormalCount[currentType.key] || 0}</div>
<div className="text">{currentType.text}</div>
</div> : null
))}
</div>
</div>
</div>
</div>)
}
export default ProofreadPanel;

View File

@ -1,73 +0,0 @@
import React from "react";
import {Button} from "antd";
import IdleImage from "./../images/icon-idle.png"
import PerfectImg from "./../images/icon-perfect.png"
export type TProofreadState = 'idle' | 'processing' | 'perfect' | 'edit' | 'analyzing'
type PanelRightStateProp = {
state: TProofreadState;
proofreadEndTime?: number;
onBack?:()=>void;
}
// 状态配置
const StateConfig: {
[key in TProofreadState]: {image: string, text: string} | null
} = {
'idle': {image: IdleImage, text: '在左侧输入内容开始校验'},
'processing': {image: IdleImage, text: '正在校验中'},
'edit': {image: IdleImage, text: '正在编辑中'},
'perfect': null,
'analyzing': null,
}
const StateElement = ({state}: PanelRightStateProp) => {
return (<div className="proofread-state-idle">
<div className="image">
<img src={StateConfig[state]?.image} alt={state} style={{width: 159}}/>
</div>
<div className="desc-title fz-large"><strong></strong></div>
<div className="desc"></div>
<div className="notice tz-title">{StateConfig[state]?.text}</div>
</div>)
}
const Perfect = () => (<div className="proofread-state-perfect">
<div className="image">
<img src={PerfectImg} alt="perfect"/>
</div>
<div className="desc"></div>
</div>)
const Analyzing = (props:PanelRightStateProp) => (<div className="proofread-state-analyzing text-center">
<div className="remain">
{props.proofreadEndTime === -2 ?<div className="remain-title">...</div>:<>
<div className="remain-title"></div>
<div className="remain-time">
<span className="value">{Math.round(props.proofreadEndTime! / 1000)}</span>
<span className="unit"></span>
</div>
</>}
</div>
<div className="control">
<div className="remain-text">
<b></b>
<div className="small">稿</div>
</div>
</div>
<div className="back-to-document">
<Button onClick={props.onBack} type={'primary'}>稿</Button>
</div>
</div>)
const PanelElement = ({state,onBack,proofreadEndTime}: PanelRightStateProp)=>{
if(state === 'perfect') return <Perfect/>;
if(state === 'analyzing') return <Analyzing proofreadEndTime={proofreadEndTime} state={state} onBack={onBack}/>;
return <StateElement state={state}/>;
}
export const PanelRightState: React.FC<PanelRightStateProp> = (props) => (
<div className="panel-right-state-wrapper">
<PanelElement proofreadEndTime={props.proofreadEndTime} state={props.state} onBack={props.onBack}/>
</div>
)

View File

@ -1,70 +0,0 @@
import {
ProofreadTypeEnum,
TCorrectedContent,
TDocumentContentDetail, TProofreadCountResult,
} from "@/service/types/document.ts";
import {ProofreadTypeData, ProofreadTypeKeys} from "@/types/proofread.ts";
import {int} from "@/service/types/base.ts";
function getTypeData(type: ProofreadTypeEnum) {
return ProofreadTypeData.find(s => Array.isArray(s.id) ? s.id.includes(type) : s.id == type)
}
export function buildProofreadResult(document: TDocumentContentDetail) {
let offset = 0;
let paragraph_offset = 1;
document.correctedSet.forEach((item) => {
item.offset = offset;//Math.ceil(item.offset) + offset;
offset += item.insert_len;
item.diffs?.forEach(it => {
// it.start += item.offset + 1
// it.end += item.offset + 1
it.typeData = getTypeData(it.type)
it.color = '#80D6AA69';//it.typeData?.color;
})
if (item.insert?.length > 1 && (item.insert.startsWith("\f") || item.insert.startsWith("\n"))) {
paragraph_offset++;
}
// 当前是第几段
item.paragraph_offset = paragraph_offset;
// item.paragraph_num = paragraph_offset;
if (item.insert.endsWith("\n") || item.insert.endsWith("\f")) {
paragraph_offset++;
}
})
}
// 解析并处理校对结果
export function parseProofreadResult(document: TDocumentContentDetail, disabled: number[] = []) {
const parseData = [];
const resultList: TCorrectedContent[] = [];
const abnormalCount: {
[key: string]: int
} = {
total: 0
};
// 遍历内容
document.correctedSet.forEach((item) => {
item.diffs?.forEach(it => {
// it.start += item.offset + 1
// it.end += item.offset + 1
// it.typeData = getTypeData(it.type)
// it.color = it.typeData?.color;
if (disabled.includes(it.id)) return;
resultList.push(it)
const type = ProofreadTypeKeys[it.type];
if (!abnormalCount[type]) abnormalCount[type] = 0;
abnormalCount['total']++;
abnormalCount[type]++;
})
})
return {
parseData,
resultList,
abnormalCount: abnormalCount as TProofreadCountResult
}
}

View File

@ -1,179 +0,0 @@
import React, {useMemo} from "react";
import {RightOutlined} from "@ant-design/icons";
import {Popover, Space} from "antd";
import {css} from "@emotion/css";
import {DropdownMenu} from "@/components/popover/dropdown-menu";
import {
ProofreadStateEnum,
ProofreadTypeEnum,
TCorrectedContent,
} from "@/service/types/document";
import {showToast} from "@/components/messages/Modal.tsx";
import {whitelist} from "@/service/api/lexicon.ts";
import {useSetState} from "ahooks";
import {
IconAccept,
IconDotMore2,
IconIgnore,
IconPlus,
IconReview,
SvgIcon
} from "./icons.tsx";
export type ActionKey = 'click' | 'accept' | 'acceptAll' | 'ignore' | 'ignoreAll' | 'addToLexicon' | 'review' | 'redo'
type ProofreadItemProps = {
selected?: boolean;
className?: string | undefined;
previewMode?: boolean;
last?: boolean;
onAction: (key: ActionKey) => void
it: TCorrectedContent
index?: number;
}
const ActionToolTip = (props: {open?:boolean; text: string; children: React.ReactNode }) => (
<Popover
open={props.open}
overlayClassName="black-bg"
content={props.text}
>{props.children}</Popover>)
function getDescription(it: TCorrectedContent) {
// 获取类型数据
// const typeData = getTypeData(it.type)!;
const str = [`${it.typeData?.text}`]
if (it.typeData?.type === 'black' || it.type == ProofreadTypeEnum.sensitive) {
str.push('请复核',it.tag == 'r' && !/^[*]+$/.test(it.text) ?`,将选用"${it.text}"`:'')
} else if (it.tag == 'r') {
str.push(`建议选用"${it.text}"`)
} else {
str.push('建议' + (it.tag == 'd' ? '删除' : '新增'))
}
return str.join('');
// return typeData?.text ? typeData?.text + ',' : ''}{props.it.tag == 'r' ? `选用"${props.it.text}"` : (
// it.tag == 'd' ? '删除' : '新增'
}
export const ProofreadItem: React.FC<ProofreadItemProps> = (props) => {
const requireReview = useMemo(() => {
// 敏感词或者要拦截的黑名单
return props.it.type == ProofreadTypeEnum.sensitive || props.it.type == ProofreadTypeEnum.blackWordBlock || (
props.it.type == ProofreadTypeEnum.blackWord
&& props.it.tag == 'r'
&& /^[*]+$/.test(props.it.text)
);
}, [props.it])
// 当前类别颜色
const colorStyle = css`--proofread-color: ${props.it.typeData?.color || '#000000'}`
const [state, setState] = useSetState({
addToLexiconVisible: true
})
// 添加到词库
const handleAddToLexicon = () => {
whitelist.create({
word: props.it.origin
}).then(() => {
showToast('加入白名单成功', 'success');
// 隐藏添加按钮
setState({
addToLexiconVisible: false
})
}).catch((e) => {
console.log(e);
showToast('加入白名单失败', 'warning')
})
}
// const handleUndo = async () => {
// showToast('撤销成功')
// }
const AddToLexiconButton = ({disabled}:{disabled:boolean}) => {
const AddButton = <button disabled={disabled} className="btn btn-add-to-lexicon" onClick={handleAddToLexicon}>
<SvgIcon component={IconPlus}/>
</button>;
return (props.selected && state.addToLexiconVisible && props.it.type != ProofreadTypeEnum.blackWord) ?
disabled ? AddButton : (<ActionToolTip text="加入白名单">
{AddButton}
</ActionToolTip>) : null
}
return (<>
<div
onClick={() => props.onAction('click')}
className={`proofread-item ${props.it.isAccept == ProofreadStateEnum.Default?'':'processed'} proofread-action-${props.it.action} proofread-item-${props.it.id} ${props.className} ${colorStyle} item ${props.selected ? 'select' : ''}`}>
<div className="info">
<div className="text d-flex align-center">
<span className="origin">{
props.it.tag == 'i' ? props.it.text : (
props.it.origin == ' ' ? '空格' : props.it.origin
)
}</span>
{
props.it.type == ProofreadTypeEnum.blackWord ?
<span className="action-text"></span> : (props.it.typeData?.type == 'sensitive' ?
<span className="action-text"></span> : (props.it.tag == 'r'
? <>
<span className="arrow"><RightOutlined/></span>
<span className="replaced">{props.it.text}</span>
</>
: <span className="action-text">{props.it.tag == 'd' ? '删除' : '新增'}</span>))
}
</div>
<div className="description">
{getDescription(props.it)}
</div>
</div>
{!props.previewMode && <div className="action align-center">
{props.selected && (props.it.isAccept == ProofreadStateEnum.Default) && <Space align={'center'}>
{!requireReview && <ActionToolTip text="采纳">
<button className="btn btn-accept" onClick={() => props.onAction('accept')}>
<SvgIcon component={IconAccept}/>
</button>
</ActionToolTip>}
{requireReview && <ActionToolTip text="复核">
<button className="btn btn-review" onClick={() => props.onAction('review')}>
<SvgIcon component={IconReview}/>
</button>
</ActionToolTip>}
<ActionToolTip text="忽略">
<button className="btn btn-odd btn-ignore" onClick={() => props.onAction('ignore')}>
<SvgIcon component={IconIgnore}/>
</button>
</ActionToolTip>
<AddToLexiconButton disabled={requireReview}/>
<DropdownMenu
theme="dark"
items={!requireReview ? [
{key: 'acceptAll', label: '采纳全部相同结果', onClick: () => props.onAction('acceptAll')},
{type: 'divider'},
{key: 'accept', label: '忽略全部相同结果', onClick: () => props.onAction('ignoreAll')},
] : [{key: 'accept', label: '忽略全部相同结果', onClick: () => props.onAction('ignoreAll')}]}
>
<div className="more-action"><SvgIcon component={IconDotMore2} size={12}/></div>
</DropdownMenu>
</Space>}
{props.it.isAccept != ProofreadStateEnum.Default &&
<div className="processed-wrapper align-center">
{props.it.isAccept == ProofreadStateEnum.Accept && <div className="state-accept align-center">
<SvgIcon component={IconAccept}/>
<span className="ml-2"></span>
</div>}
{props.it.isAccept == ProofreadStateEnum.Review &&
<div className="state-accept state-review align-center">
<SvgIcon component={IconReview}/>
<span className="ml-2"></span>
</div>}
{props.it.isAccept == ProofreadStateEnum.Ignore && <div className="state-ignore align-center">
<SvgIcon component={IconIgnore}/>
<span className="ml-2"></span>
</div>}
</div>}
</div>}
</div>
{props.selected && !props.last && <div className={'selected-line'}></div>}
</>)
}

View File

@ -1,59 +0,0 @@
import {IDocumentCorrect, IDocumentDetail, IDocumentProofread} from "@/types/document";
import {IProofreadResult, ProofreadTypeEnum} from "./types.ts";
type Range = {
start:number;
end:number;
}
export function inRange(a:Range,b:Range){
if(a.start == b.start && a.end == b.end) return true;
// check a in b
if(
a.start >= b.start &&
a.start <= b.end &&
a.end >= b.start &&
a.end <= b.end
) return true;
// check b in a
if (
b.start >= a.start &&
b.start <= a.end &&
b.end >= a.start &&
b.end <= a.end
) return true
return false;
}
function buildProofreadResult(correct: IDocumentProofread[], block: IDocumentCorrect, document: IDocumentDetail) {
const blockCorrect: IProofreadResult[] = [];
correct.forEach(item => {
// 处理涉政类型数据
const result: IProofreadResult = {
...item,
key: block.key,
document_id: document.id,
leader: item.type === ProofreadTypeEnum.leader ? document.leaders[item.mid] : undefined,
position: item.type === ProofreadTypeEnum.position ? document.positions[item.mid] : undefined,
quotation: item.type === ProofreadTypeEnum.quotation ? document.quotations[item.mid] : undefined,
relation:[]
}
for (const block of blockCorrect) {
if (inRange(result,block)) {
result.relation?.push(block)
block.relation?.push(result)
// if(result.tag != block.tag)
blockCorrect.push(result);
return;
}
}
blockCorrect.push(result);
});
return blockCorrect;
}
export function parseProofreadList(document: IDocumentDetail) {
const result = document.correctedSet.filter(s => s.ranges && s.ranges.length > 0)
.map(s => buildProofreadResult(s.ranges!, s, document));
// console.log(result)
return result.flat()
}

View File

@ -1,202 +0,0 @@
export enum ProofreadTypeStatusEnum {
// 默认,未处理?
Default,
// 已采纳
Accept = 2,
// 已忽略
Ignore,
// 已复核
Audited
}
export type EditorProofreadFormat = {
id: string|number;
suggest?: ProofreadTypeStatusEnum;
tag: string;
start: any;
end: any;
current: string
}
// 编辑器
export type SelectionEditorProofread = {
proofread?:EditorProofreadFormat;
insert?:EditorProofreadFormat;
replace?:EditorProofreadFormat;
delete?:EditorProofreadFormat;
leader?:EditorProofreadFormat;
position?:EditorProofreadFormat;
quotation?:EditorProofreadFormat;
}
// 校对分类
export enum ProofreadTypeEnum {
characterError = 2,
/**
*
*/
confusion = 18,
/**
*
*/
quotation = 16,
/**
*
*/
leader = 17,
/**
*
*/
blacklist = 20,
/**
*
*/
punctuation = 22,
/**
*
*/
sensitive = 19,
/**
*
*/
whitelist = 21,
/**
*
*/
position = 23,
/**
*
*/
model = 24,
}
export interface IPositionInfo {
leaders: string[];
position: string;
}
export interface IQuotationInfo {
category: string;
content: string;
document_name: string;
hypelink: string;
id: string;
}
export interface ILeaderInfo {
name?: string;
correct_name: string;
positions: string[];
sort_error?: any;
}
export interface IProofreadResult {
tag: 'r' | 'd' | 'i' | string;
old: string;
new: string;
start: number;
end: number;
id: number;
// 文档编号
document_id: number;
idx: number;
// 对应句子hash
key: string;
suggest: ProofreadTypeStatusEnum;
// 对应领导 语录等的索引
mid: number;
type: ProofreadTypeEnum;
// 关联领导数据
leader?: ILeaderInfo;
// 关联职位数据
position?: IPositionInfo;
// 关联语录数据
quotation?: IQuotationInfo;
// 关联数据
relation?:IProofreadResult[];
}
export type IProofreadTypeData = {
type: string,
key: string;
color: string;
text: string;
count?: number;
id: ProofreadTypeEnum | ProofreadTypeEnum[];
// 采纳全部时要提交的类型
acceptAll?: ProofreadTypeEnum[];
// 忽略全部时要提交的类型
ignoreAll?: ProofreadTypeEnum[];
}
export const ProofreadTypeData: IProofreadTypeData[] = [
{
id: [ProofreadTypeEnum.blacklist],
type: 'black',
acceptAll: [ProofreadTypeEnum.blacklist],
ignoreAll: [ProofreadTypeEnum.blacklist],
count: 0,
text: '黑名单',
color: '#2A2A2A',
key: 'blacklist'
},
{id: ProofreadTypeEnum.whitelist, type: 'unit', count: 0, text: '白名单', color: '#77F1AE', key: 'whitelistError'},
{id: ProofreadTypeEnum.confusion, type: 'confusion', count: 0, text: '易错词', color: '#D6AA69', key: 'confusion'},
{
id: ProofreadTypeEnum.punctuation,
type: 'symbol',
count: 0,
text: '标点错',
color: '#558CB7',
key: 'punctuationError'
},
{id: ProofreadTypeEnum.sensitive, type: 'sensitive', count: 0, text: '敏感词', color: '#e971ba', key: 'sensitive'},
{
id: ProofreadTypeEnum.characterError,
type: 'character',
count: 0,
text: '易错词',
color: '#e971ba',
key: 'characterError'
},
{id: ProofreadTypeEnum.model, type: 'model', count: 0, text: '其他错误', color: '#E9D0A7', key: 'model'},
{id: ProofreadTypeEnum.quotation, type: 'quotation', count: 0, text: '语录', color: '#29CEC0', key: 'quotation'},
{id: ProofreadTypeEnum.leader, type: 'leader', count: 0, text: '政要人物', color: '#c9c9c9', key: 'leader'},
{id: ProofreadTypeEnum.position, type: 'position', count: 0, text: '职位', color: '#CDAFE5', key: 'positionError'},
]
export type ProofreadStatusType = 'all'| 'error'| 'sensitive'| 'blacklist'| 'politics'
export const ProofreadTypeConfig: {
[key in ProofreadStatusType]: ProofreadTypeEnum[]
} = {
all: [],
error: [
ProofreadTypeEnum.punctuation,
ProofreadTypeEnum.characterError,
ProofreadTypeEnum.confusion,
ProofreadTypeEnum.model
],
sensitive: [
ProofreadTypeEnum.sensitive
],
blacklist: [
ProofreadTypeEnum.blacklist
],
politics: [
ProofreadTypeEnum.leader,
ProofreadTypeEnum.quotation,
ProofreadTypeEnum.position,
]
}
export type ProofreadItemActions =
'ignore'
| 'adopt'
| 'review'
| 'revoke'
| 'addToLexicon'
| 'undo'
| 'revokeAll'
| 'acceptAll'
| 'ignoreAll';

Binary file not shown.

Before

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 490 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 476 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 408 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 508 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 47 KiB

View File

@ -1,437 +0,0 @@
import {useDebounceFn, useRequest} from "ahooks";
import React, {useEffect, useState} from "react";
import {useBridge, useBridgeMessageListener} from "@/core/bridge.ts";
import ProofreadPanel from "./components";
import './components/home-proofread.less'
import {
ProofreadLoading,
ProofreadError,
ProofreadPerfect,
} from "./notice.tsx";
import {useUserinfoStore} from "@/service/userinfoStore.ts";
import {proofread, create, save, proofreadDetail} from "@/service/api/document.ts";
import {calcContentLengthLikeWord, formatTime, hidePhone} from "@/utils/strings.ts";
import {getAuthCode} from "@/service/api/user.ts";
import {TDocumentContentDetail} from "@/service/types/document.ts";
import {AppUpgradeInfo, Settings, UpgradeInfo} from "@/service/types/settings.ts";
import {compareVersion, getAppUpgradeInfo, getSettings} from "@/service/api/settings.ts";
import {buildProofreadResult} from "./components/parse-proofread-result.ts";
// import FakeDocument1862 from "../../service/fake/doc-2236.ts";
// import {cloneDeep} from "../../utils/cloneDeep.ts";
// import {sleep} from "../../utils/sleep.ts";
// 数据 主要是保存当前文档id
const CACHE_DATA: {
DOC_ID: number;
timer: number | null | undefined | object | object;
userinfo?: Account;
upgradeInfo: AppUpgradeInfo;
clearTimer: () => void;
} = {
DOC_ID: 0,
userinfo: undefined,
upgradeInfo: {},
timer: null,
clearTimer: () => {
if (CACHE_DATA.timer) {
clearTimeout(Number(CACHE_DATA.timer))
CACHE_DATA.timer = 0;
}
}
}
const progressConfig = {
start: 30,
rangeUp: 20
};
export default function Home() {
const {userinfo: globalUser, logout, init} = useUserinfoStore()
const {bridge} = useBridge();
const [userinfo, setUserinfo] = useState<Account>()
const [proofreadProgress, setProofreadProgress] = useState<number>(-1);
const [disabledList,setDisabledList] = useState<number[]>([])
// const [currentDocumentId,setCurrentDocumentId] = useState(0);
// 获取文档内容
const getDocumentData = async () => {
const content = await bridge.getDocumentData();
return JSON.parse(content) as DocumentData;
};
// 校对并获取校对结果
const getProofreadData = (settings?: Settings) => {
return new Promise<TDocumentContentDetail>((resolve, reject) => {
let retryCount = 0;
const getProofreadResult = (needSetTimeout = true) => {
setProofreadProgress(99);
// 获取结果
proofreadDetail(CACHE_DATA.DOC_ID).then((data) => {
CACHE_DATA.clearTimer();
setProofreadProgress(100);
setTimeout(() => {
// setProofreadProgress(-1);
resolve(data)
}, 500)
}).catch((e) => {
const ex = e as BizError;
if (ex.message == '文稿未完成校对' && needSetTimeout) {
CACHE_DATA.clearTimer();
CACHE_DATA.timer = setTimeout(getProofreadResult, 1500 + 2000 * Math.floor(retryCount / 10))
retryCount ++;
}
})
}
const startCountDown = (current: number, count: number) => {
// 倒计时最多到99 获取结果后再将进度设置为100
if (current >= count - 1) {
// 等待剩余时间后再次获取校对结果
setTimeout(getProofreadResult, 2500)
return;
}
if (current % 10 == 0) {
getProofreadResult(false)
}
const p = Math.floor(current / count * 100);
// fixed bug 51 当前校对进度条是先慢后快体验不好。改成先快后慢前50%进程快一些,逐渐变慢
if (p >= progressConfig.start + progressConfig.rangeUp) setProofreadProgress(p);
else setProofreadProgress(Math.floor(current / count * progressConfig.rangeUp) + progressConfig.start);
// count down
CACHE_DATA.timer = setTimeout(() => {
startCountDown(current + 1, count)
}, 1000)
}
setProofreadProgress(20);
// 開始校對
proofread(CACHE_DATA.DOC_ID, 1, settings).then(ret => {
setProofreadProgress(30);
if (ret.remainingTime > 0) {
// 如果有剩余时间则
//setTimeout(getProofreadResult, ret.remainingTime * 1000)
// 计算进度
startCountDown(1, ret.remainingTime);
} else {
setTimeout(getProofreadResult, 500)
}
}).catch(reject)
})
}
const noteReg = /^\[footnoteRef:\d+\]|\[endnoteRef:\d+\]$/
// 保存内容并校对
const getContentAndProofread = async () => {
try {
setDisabledList([])
CACHE_DATA.clearTimer();
setProofreadProgress(2);
const start = Date.now();
const doc = await getDocumentData();
if(doc.code != 0){
setProofreadProgress(-1);
bridge.ShowDialog(doc.message)
return;
}
// setCurrentDocumentId(doc.documentId);
const count = calcContentLengthLikeWord(doc.content.text)
console.log('doc',count,doc,'get document data spent',Date.now() - start)
// const fakeDoc = cloneDeep(FakeDocument1862)
// if(fakeDoc.abnormalCount.total > 0){
// bridge?.ShowCurrentPane();
// setProofreadProgress(99);
// buildProofreadResult(fakeDoc);
// await sleep(0.2)
// if(CACHE_DATA.DOC_ID < 1){
// const bridgeDocId = Number((await bridge?.GetCurrentDocumentId()) || 0);
// if(bridgeDocId > 0){
// CACHE_DATA.DOC_ID = bridgeDocId;
// }else {
// CACHE_DATA.DOC_ID = 1000001;
// bridge?.SetCurrentDocumentId(CACHE_DATA.DOC_ID);
// }
// }
// await bridge?.InitContent(JSON.stringify(fakeDoc.correctedSet), CACHE_DATA.DOC_ID);
// setProofreadProgress(-1)
// // throw new Error('初始化校对项失败')
// return fakeDoc;
// }
if (doc.content.list.length == 0) {
resetProofreadData()
// bridge?.showDialog('当前文档为空,无法进行校对')
return;
}
if (APP_CONFIG.ALLOW_MAX_COUNT > 0 && count > APP_CONFIG.ALLOW_MAX_COUNT) {
// bridge?.showDialog('正在校对中,请稍后再试...')
bridge?.ShowDialog('校对内容超过最大字数,请删减后再试...')
return;
}
bridge?.ShowCurrentPane();
// 判断是否已经创建了文档id
if (CACHE_DATA.DOC_ID <= 0) {
// 避免无意刷新网页导致 id 丢失
const bridgeDocId = Number((await bridge?.GetCurrentDocumentId()) || 0);
if(bridgeDocId > 0){
CACHE_DATA.DOC_ID = bridgeDocId;
}else{
const {info} = await create({
name: doc.name || ('未命名文档-' + formatTime(Date.now(), 'MMDDHHmmss'))
});
CACHE_DATA.DOC_ID = info.id;
bridge?.SetCurrentDocumentId(CACHE_DATA.DOC_ID);
}
}
bridge?.clearAllProofreadMarkById(CACHE_DATA.DOC_ID);
const content = doc.content.list
// 过滤掉空行、特殊行
.filter(it=>(it.Text.trim().length > 0 && !noteReg.test(it.Text)))
.map(it => ({
insert: it.Text.replace(/\[endnoteRef:\d+\]|\[footnoteRef:\d+\]/ig,' '),
origin_text: it.Text,
hash: it.Hash,
insert_len: it.Text.length,
paragraph_num: it.ParagraphNumber,
}
))
await save(CACHE_DATA.DOC_ID, content);
setProofreadProgress(5);
const settings = await getSettings();
setProofreadProgress(15);
// fixed server bug at 240416 (cannot unmarshal string into Go struct field ProofreadReq.industry_publish of type int64)
// 如果是数字类型,则转换为数字类型
Object.keys(settings).forEach(key => {
if (/^\d+$/.test(String(settings[key]))) {
settings[key] = Number(settings[key])
}
})
const result = await getProofreadData(settings);
buildProofreadResult(result);
const initSuccess = await bridge?.InitContent(JSON.stringify(result.correctedSet),CACHE_DATA.DOC_ID);
if(initSuccess == 'true') {
setProofreadProgress(-1)
}else{
throw new Error('初始化校对项失败')
}
return result;
} catch (e) {
console.log('getContentAndProofread error:',e)
setProofreadProgress(-1);
throw e;
}
}
// 在系统浏览器中打开链接
const openUrlInOSBrowser = async (key: 'document' | 'lexicon') => {
const target = `${APP_CONFIG.WEB_PATH}/${key}?from=office-plugin`;
if (!CACHE_DATA.userinfo) { // 没有登录直接跳转
bridge.OpenUrlWithOsBrowser(target)
return;
}
const {code} = await getAuthCode();
const url = `${APP_CONFIG.WEB_PATH}/redirect?code=${code}&target=${encodeURIComponent(target)}`;
bridge.OpenUrlWithOsBrowser(url)
}
// 校对
const {
data: document, loading,
run: startProofread, error,
mutate,
} = useRequest(getContentAndProofread, {
manual: true,
onError: () => {
//showToast('校对失败,请重试')
}
})
const noticeLoginSuccess = () => {
if (CACHE_DATA.userinfo) {
setUserinfo(CACHE_DATA.userinfo)
const user = {
...CACHE_DATA.userinfo,
nickname: hidePhone(CACHE_DATA.userinfo.nickname || CACHE_DATA.userinfo.phone),
expiration: '企业内测版'
}
bridge?.loginSuccess(JSON.stringify(user))
}
}
// 如果已经登录 则通知登录成功
useEffect(() => {
if (globalUser || CACHE_DATA.userinfo) {
if (globalUser) CACHE_DATA.userinfo = globalUser
noticeLoginSuccess();
}
}, [globalUser])
const getOldVersionUpgradeInfo = (up: UpgradeInfo)=>{
return {
...up,
clientType:up.client_type,
appName:up.app_name,
publishType:up.publish_type,
upgradeType:up.upgrade_type,
downloadUrl:up.download_url,
isShowPop:up.is_show_pop,
}
}
const getUpgradeInfo = (callback?: ()=>void)=>{
bridge.GetAppVersion().then(version => {
// 版本小于 1.0.11 直接提示
if(compareVersion(version, '1.0.11') === -1){
getAppUpgradeInfo(version).then(info => {
// setUpgradeInfo(info)
console.log(info)
CACHE_DATA.upgradeInfo = info;
if(callback){
callback();
return;
}
if (info.upgradeAvailable && info.upgradeInfo.upgrade_type == 1) {
bridge.ShowUpgrade(JSON.stringify(getOldVersionUpgradeInfo(info.upgradeInfo)))
}
})
}
})
}
useEffect(getUpgradeInfo, [])
// 开始校对
const handleProofread = (force?: boolean) => {
// 没有登录则显示登录
if (!CACHE_DATA.userinfo && !force) {
bridge?.ShowLoginForm("proofread")
return;
}
startProofread();
}
// 避免来回乱跳
const {run: setActiveBookMark} = useDebounceFn((id) => bridge?.SelectMarkById(id,CACHE_DATA.DOC_ID), {wait: 200,})
const [currentSelectProofreadId, setCurrentSelectProofreadId] = useState<number>(0)
const resetProofreadData = () => {
CACHE_DATA.clearTimer();
mutate({
abnormalCount: {total: -1},
correctedSet: [],
})
setProofreadProgress(-1)
bridge?.clearAllProofreadMarkById(CACHE_DATA.DOC_ID);
}
const checkLoginAndContinue = (callback: () => void, action = 'normal') => {
if (CACHE_DATA.userinfo) {
callback()
} else {
init().then((account) => {
if (account) {
CACHE_DATA.userinfo = account
callback()
} else {
bridge?.ShowLoginForm(action)
}
})
}
}
// 监听插件通知
useBridgeMessageListener(({Message, Data}) => {
if (Message == 'start') {
// 添加强制更新检测
if (CACHE_DATA.upgradeInfo.upgradeAvailable && CACHE_DATA.upgradeInfo.upgradeInfo!.upgrade_type == 1) {
// bridge.ShowUpgrade(JSON.stringify(CACHE_DATA.upgradeInfo.upgradeInfo))
bridge.ShowUpgrade(JSON.stringify(getOldVersionUpgradeInfo(CACHE_DATA.upgradeInfo.upgradeInfo!)))
return;
}
// 开始校对
checkLoginAndContinue(handleProofread);
// if (CACHE_DATA.userinfo) {
// handleProofread()
// } else {
// init().then((account) => {
// if (account) {
// CACHE_DATA.userinfo = account
// } else {
// bridge?.ShowLoginForm('normal')
// }
// })
// }
} else if (Message == 'upgrade') { // 升级信息
if (!CACHE_DATA.upgradeInfo.upgradeAvailable) {
bridge.ShowDialog("当前版本为最新版本,无需升级")
return;
}
if (CACHE_DATA.upgradeInfo.upgradeInfo) {
bridge.ShowUpgrade(JSON.stringify(getOldVersionUpgradeInfo(CACHE_DATA.upgradeInfo.upgradeInfo!)))
// bridge.ShowUpgrade(JSON.stringify(CACHE_DATA.upgradeInfo.upgradeInfo))
}
} else if (Message == 'clear-tips') { // 显示词库
resetProofreadData()
bridge.HideCurrentPane() // 隐藏当前面板
} else if (Message == 'show-setting') { // 显示设置
checkLoginAndContinue(() => {
bridge?.ShowSettingForm()
}, 'setting');
} else if (Message == 'show-lexicon') { // 显示词库
openUrlInOSBrowser('lexicon').catch(console.error)
} else if (Message == 'logout') { // 退出登录
logout().then(() => {
resetProofreadData()
bridge?.Logout("async-info")
})
} else if (Message == 'async-logout') { // 同步注销登录
resetProofreadData()
CACHE_DATA.userinfo = undefined;
} else if (Message == 'async-login-success') {
init().then(console.log)
} else if (Message == 'select-proofread') {
const id = Number(Data)
if (id > 0) setCurrentSelectProofreadId(id)
} else if (Message == 'getParagraphTextByRange') {
console.log('getParagraphTextByRange', Data)
}else if(Message == 'disabled-proofread'){
// console.log('disabled-proofread',Data)
setDisabledList(Data as number[])
//
} else {
console.log('App useBridgeMessageListener:', Message,Data)
}
})
// const xxx = ()=>{
// //169567 169569 169564
// // setDisabledList(disabledList => [...disabledList,169564])
// // setProofreadProgress(100)
// const result = document?.correctedSet.filter(it=>it.diffs && it.diffs.length > 0).map(it=>{
// it.diffs?.forEach(s=>{
// console.log(s.idx,s,it.insert)
// })
// return it
// });
// console.log(
// result,disabledList
// )
// }
return (<div className={'proofread-panel'}>
{userinfo && proofreadProgress > 0 && <ProofreadLoading progress={`${proofreadProgress}%`}
onOpenWebDocument={() => openUrlInOSBrowser('document')}/>}
{userinfo && !loading && error && <ProofreadError onStartProofread={handleProofread}
onOpenWebDocument={() => openUrlInOSBrowser('document')}/>}
{userinfo && !loading && !error && document && document.abnormalCount.total === 0 && <ProofreadPerfect/>}
{/*<div style={{position:'fixed',insetInline:0,insetBlockEnd:0,backgroundColor:'#fee',zIndex:999,padding:20}}>*/}
{/*<button onClick={xxx}>xxx</button>*/}
{/*</div>*/}
{(!userinfo || (!loading && !error)) && <ProofreadPanel
document={document} userinfo={userinfo}
disabledProofreadItemList={disabledList}
onUpdateProofreadItem={(item) => {
// 还原标签状态
bridge?.processMark(item.id, item.isAccept)
}}
onSelectProofreadItem={(item) => {
if (item) setActiveBookMark(item.id)
}}
onStartProofread={() => handleProofread()}
selectedProofreadItemId={currentSelectProofreadId}
/>}
</div>)
}

View File

@ -1,79 +0,0 @@
import React from "react";
import {Button, Space} from "antd";
import Icon from "@ant-design/icons";
import {ErrorNotice} from "./components/images/notice.tsx";
import {IconLogo} from "./components/images/logo.tsx";
import IconPerfect from "./images/perfect.png";
type NoticeProps = {
onOpenWebDocument?: () => void;
onStartProofread?: () => void;
progress?: number | string;
}
export function ProofreadLoading({progress}: NoticeProps) {
// 加载中...
// 这里可以添加自定义的加载中逻辑
// 例如,显示一个加载动画或提示信息
return (<div className={'proofread-loading-wrapper full-screen'}>
<div className="loading-container">
<div className="logo">
<IconLogo/>
</div>
<div className="progress-container">
<div className="progress-value">{progress}</div>
<div className="progress-bar-container">
<div className="progress-bar" style={{width: progress}}></div>
</div>
{/*<p>正在返回校对结果...</p>*/}
</div>
{/*<Space className={'waiting-tips'}>*/}
{/* <InfoCircleOutlined/>*/}
{/* <span>等得太久?您也可以<Button onClick={onOpenWebDocument} className={'btn'}*/}
{/* type={'link'}>前往网页端</Button>查看该任务</span>*/}
{/*</Space>*/}
</div>
</div>)
}
export function ProofreadError({onStartProofread, onOpenWebDocument}: NoticeProps) {
// 加载中...
// 这里可以添加自定义的加载中逻辑
// 例如,显示一个加载动画或提示信息
return (<div className={'proofread-notice-wrapper'}>
<div className="error-container">
<Space direction={'vertical'} size={'large'}>
<div className="error-notice">
<p className={'error-title'}>
</p>
<p></p>
</div>
<div className="error-image">
<Icon component={ErrorNotice}/>
</div>
<Space direction={'vertical'} className={'buttons'} size={'middle'}>
<Button block type={'primary'} onClick={onStartProofread}></Button>
<Button block onClick={onOpenWebDocument}></Button>
</Space>
</Space>
</div>
</div>)
}
export function ProofreadPerfect({onStartProofread, onOpenWebDocument}: NoticeProps) {
return (<div className={'proofread-notice-wrapper'}>
<div className="error-container">
<Space direction={'vertical'} size={'large'}>
<div className="perfect-image">
<img style={{transform: 'translateX(15px)'}} src={IconPerfect} alt=""/>
<p>
<b style={{color:'#979797',fontSize:18}}></b>
</p>
</div>
</Space>
</div>
</div>);
}

View File

@ -1,106 +0,0 @@
import {formatTime} from "../../../utils/strings.ts";
import React from "react";
import {TBlackLexiconItem, TWhitelistItem} from "@/service/types/lexicon.ts";
import {ColumnGroupType, ColumnType} from "antd/es/table/interface";
import {css} from "@emotion/css";
export type LexiconType = TBlackLexiconItem | TWhitelistItem
export interface EditableCellProps extends React.HTMLAttributes<HTMLElement> {
editing: boolean;
dataIndex: string;
title: any;
inputType: 'number' | 'text' | 'select';
record: LexiconType;
index: number;
children: React.ReactNode;
}
export type TableColumnType = {
dataIndex?: string;
editable?: boolean;
} & (ColumnGroupType<LexiconType> | ColumnType<LexiconType>)
/**
*
* @param type |
* @param indexRender
* @param optionRender
*/
export function getColumns(
type: 'white' | 'black',
indexRender: (id: any, item: LexiconType, index: number) => React.ReactNode,
optionRender: (_: any, item: LexiconType) => React.ReactNode
) {
const columns: TableColumnType[] = [
{
title: '序号',
dataIndex: 'id',
key: 'id',
width: 100,
render: indexRender
},
{
title: type === 'white' ? '放行词' : '拦截词',
dataIndex: 'word',
width: 350,
key: 'word',
editable: true,
},
{
title: '领域',
dataIndex: 'type',
width: 150,
key: 'type',
editable: true,
render: (_, item: LexiconType) => {
return '通用'
}
},
];
if (type === 'black') {
columns.push(...[
{
title: '操作建议',
dataIndex: 'actionType',
key: 'actionType',
editable: true,
width: 170,
render: (_: any, item: LexiconType) => {
return item.actionType == 1 ? '拦截' : '替换';
}
},
{
title: '替换词',
dataIndex: 'replaceWord',
key: 'replaceWord',
width: 350,
editable: true,
render: (_: any, item: LexiconType) => {
return item.actionType == 2 ? item.replaceWord : '';
}
}
])
}
columns.push({
title: '修改时间',
dataIndex: 'utime',
key: 'utime',
className:css(`min-width:200px`),
render: (_, item: LexiconType) => {
return formatTime((item.utime || item.ctime || 0) * 1000);
}
})
columns.push({
title: '操作',
key: 'operation',
width: 200,
render: optionRender
})
return columns
}

View File

@ -1,119 +0,0 @@
import {Button, Divider, Modal, Spin, Upload} from "antd";
import React from "react";
import {useBoolean, useSetState} from "ahooks";
import {LoadingOutlined} from "@ant-design/icons";
import type {UploadProps} from 'antd';
import {blacklist, whitelist} from "@/service/api/lexicon.ts";
import {showToast, useLoading} from "@/components/messages/Modal.tsx";
import {TImportBlackResult} from "@/service/types/lexicon.ts";
type ImportFileProps = {
visible?: boolean;
onClose?: (refresh?: boolean) => void;
type: 'white' | 'black';
}
const loadingIcon = <LoadingOutlined style={{fontSize: 36}} spin/>;
type UploadResult = {
onClose?: (refresh?: boolean) => void;
result?: TImportBlackResult
}
const UploadResult: React.FC<UploadResult> = (props) => {
return (<div className="import-file-result">
<h2 className="text-center"></h2>
<Divider dashed/>
<h3 className="import-info"> <span
className="count">{props.result?.totalWords?.length|| 0}</span> , <span
className="count">{props.result?.words?.length || 0}</span> ;</h3>
<div className="import-message text-tip">
{props.result?.repeatWords && props.result?.repeatWords.length > 0 &&
<p>{props.result?.repeatWords.map(s => `"${s}"`).join(',')} </p>}
{props.result?.formatErrorWords && props.result?.formatErrorWords.length > 0 &&
<p>{props.result?.formatErrorWords.map(s => `"${s}"`).join(',')} </p>}
</div>
<div className="operations text-center" style={{marginTop: 50}}>
<div>
<Button type="primary" onClick={() => props.onClose?.(true)}></Button>
</div>
</div>
</div>)
}
export const ImportFileModal: React.FC<ImportFileProps> = (props) => {
// const [loading,setLoading] = useState(false)
const [loading, {set: setLoading}] = useBoolean(false)
const [showResult, {setTrue}] = useBoolean(false);
const [state, setState] = useSetState<{
showResult?: boolean;
loading?: boolean;
result?: TImportBlackResult
}>({});
const downloadUrl = `https://staticplus.gachafun.com/aixiaodui/templates/${props.type}list.xlsx?s=${Math.random().toString(16).substring(2)}`;
const uploadProps: UploadProps = {
multiple: false,
maxCount: 1,
accept: 'application/vnd.ms-excel,application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
// itemRender:()=>null,
showUploadList: false,
withCredentials: true,
beforeUpload: (file) => {
setState({loading: true})
const upload = props.type === 'black' ? blacklist.import : whitelist.import
upload(file)
.then(result => {
setState({
showResult: true,
result
})
})
.catch(e => showToast(`导入失败(${e.message})`,'warning'))
.finally(() => setState({loading: false}))
return false;
},
};
const downloading = useLoading();
const downloadTemplate = async (e:React.MouseEvent<HTMLElement>)=>{
e.preventDefault()
e.stopPropagation()
// downloading.show('下载中请稍等');
chrome.webview.hostObjects.host.Download(downloadUrl);
//await download(downloadUrl,`${props.type == 'white' ? '白名单' : '黑名单'}-模板.xlsx`)
// downloading.close()
}
return (<Modal
maskClosable={false}
open={props.visible}
className="modal-import-file"
destroyOnClose={true}
onCancel={() => props.onClose?.(state.showResult)}
footer={null}
width={600}
centered
>
{state.showResult ? <UploadResult result={state.result} onClose={props.onClose}/> :
<Spin spinning={loading} tip={<div style={{marginTop: 20}}></div>} indicator={loadingIcon}>
<div style={{padding: '30px 20px'}}>
<h2 className="text-center"></h2>
<Divider dashed/>
<div className="import-description">
1,; <br/>
2.xls/.xlsx1000;<br/>
3,,.
</div>
<div className="operations text-center" style={{marginTop: 40}}>
<div>
<Upload {...uploadProps}>
<Button type="primary"></Button>
</Upload>
</div>
<div style={{marginTop: 20}}>
{/*<a download={`${props.type == 'white' ? '白名单' : '黑名单'}-模板.xlsx`}*/}
{/* href={`${APP_CONFIG.PUBLIC_PATH == './'?'/':APP_CONFIG.PUBLIC_PATH}assets/templates/${props.type}list.xlsx`}>模板下载</a>*/}
<a href={downloadUrl} onClick={downloadTemplate}></a>
</div>
</div>
</div>
</Spin>}
</Modal>)
}

View File

@ -1,109 +0,0 @@
import {Button, Form, Input, Modal, Select, Space} from "antd";
import React from "react";
import {useBoolean, useSetState} from "ahooks";
import {
BlackCreateActionType,
TBlackLexiconItem,
TWhitelistItem
} from "@/service/types/lexicon.ts";
import {blacklist, whitelist} from "@/service/api/lexicon.ts";
import {showToast} from "../../../components/messages/Modal.tsx";
type LexiconType = TWhitelistItem | TBlackLexiconItem;
type SaveModalProps = {
visible?: boolean;
onClose?: (refresh?: boolean) => void;
lexicon: LexiconType;
type: 'white' | 'black'
}
const SuggestionList = [
{value: 1, label: '拦截'},
{value: 2, label: '替换'},
]
export const ModifyModal: React.FC<SaveModalProps> = (props) => {
const [loading, {set: setLoading}] = useBoolean(false)
const [showResult, {setTrue}] = useBoolean(false);
const handleSubmit = () => {
const params = form.getFieldsValue();
// 执行保存
const save = props.type == 'white' ? whitelist.modify : blacklist.modify;
setLoading(true)
save(props.lexicon.id, params as any).then(() => {
showToast('修改名单成功', 'success');
props.onClose?.(true)
}).catch((e: BizError) => showToast(e.message || '修改名单失败','warning')).finally(() => setLoading(false))
};
const [form] = Form.useForm<LexiconType>()
const [state, setState] = useSetState<{
actionType?: BlackCreateActionType
}>({
actionType: props.lexicon.actionType
})
return (<Modal
maskClosable={false}
open={props.visible}
className="modal-save-lexicon"
destroyOnClose={true}
onCancel={() => props.onClose?.()}
footer={null}
>
<div className={`modify-modal-body`}>
<h2 className="text-center">{props.type == 'white' ? '白' : '黑'}</h2>
<Form
labelCol={{span: 5}}
wrapperCol={{span: 19}}
className="search-form"
form={form}
onFinish={handleSubmit}
initialValues={props.lexicon}
>
<Form.Item name="word" label={props.type == 'white' ? '放行词' : '拦截词'} rules={[{required: true}]}>
<Input placeholder={`请输入${props.type == 'white' ? '放行词' : '拦截词'}`}/>
</Form.Item>
<Form.Item label={'领域'} name={"type"}>
<Select
className="w-full"
options={[{value: 0, label: '通用'},]}
/>
</Form.Item>
{props.type === 'black' && <Form.Item label={'操作建议'} name="actionType">
<Select
className="w-full"
options={SuggestionList}
onChange={actionType => setState({actionType})}
/>
</Form.Item>}
{props.type === 'black' && state.actionType == BlackCreateActionType.Replace && <Form.Item
label={'替换词'} name="replaceWord"
rules={[
{required: true},
({ getFieldValue }) => ({
validator(_, value) {
if (getFieldValue('word') === value) {
return Promise.reject(new Error('拦截词与替换词相同'));
}
return Promise.resolve();
},
}),
]}
>
<Input placeholder={`请输入替换词`}/>
</Form.Item>
}
<div className="text-center">
<Space size={20} className="mt-10">
<Button className="btn-grey" onClick={() => props.onClose?.()}></Button>
<Button loading={loading} type="primary" htmlType="submit"></Button>
</Space>
</div>
</Form>
</div>
</Modal>)
}

View File

@ -1,243 +0,0 @@
import {Button, Input, Modal, Select, Space} from "antd";
import React, {useState} from "react";
import {useBoolean} from "ahooks";
import {cloneDeep} from "lodash"
import {
BlackCreateActionType,
TBatchCreateError,
TCreateBatch
} from "@/service/types/lexicon.ts";
import {blacklist, whitelist} from "@/service/api/lexicon.ts";
import {showToast} from "../../../components/messages/Modal.tsx";
import {PlusOutlined} from "@ant-design/icons";
type SaveModalProps = {
visible?: boolean;
onClose?: (refresh?: boolean) => void;
type: 'white' | 'black'
}
type LexiconField = {
words: string | number;
type: string | number;
suggestion: string | number;
replace: string | number;
}
type LexiconFieldList = keyof LexiconField;
type FieldValue = {
value: string | number;
message?: string;
}
type LexiconFieldItem = {
[field in LexiconFieldList]: FieldValue
};
const defaultFieldRow = {
words: {value: '', message: undefined},
type: {value: 1, message: undefined},
suggestion: {value: BlackCreateActionType.Delete, message: undefined},
replace: {value: '', message: undefined},
}
const SuggestionList = [
{value: 1, label: '拦截'},
{value: 2, label: '替换'},
]
export const SaveModal: React.FC<SaveModalProps> = (props) => {
const [loading, {set: setLoading}] = useBoolean(false)
const [showResult, {setTrue}] = useBoolean(false);
const [fieldList, setFieldList] = useState<LexiconFieldItem[]>([cloneDeep(defaultFieldRow)])
const requireCheck = (row: LexiconFieldItem, key: string) => {
// @ts-ignore
const item = row[key] as FieldValue;
if (!item.value) {
item.message = '未填写'
return false;
}
if(key == 'replace' && item.value == row.words.value){
item.message = '拦截词与替换词相同';
return false;
}
return true;
}
const handleSubmit = () => {
const values: LexiconField[] = []
let hasError = false;
const params: TCreateBatch = {
words: [],
actionTypes: [],
replaceWords: [],
}
// 验证是否填写
fieldList.forEach(row => {
row.words.message = undefined;
row.replace.message = undefined;
if (!requireCheck(row, 'words')) hasError = true;
if (props.type === 'black' && row.suggestion.value === BlackCreateActionType.Replace && !requireCheck(row, 'replace')) hasError = true;
params.words.push(row.words.value as any);
if (props.type == 'black') {
params.actionTypes.push(row.suggestion.value as any);
params.replaceWords.push(row.replace.value as any);
}
values.push({
words: row.words.value,
type: row.type.value,
suggestion: row.suggestion.value,
replace: row.replace.value,
})
})
if (hasError) {
setFieldList(cloneDeep(fieldList));
return;
}
setFieldList(cloneDeep(fieldList));
// 执行保存
const save = props.type == 'white' ? whitelist.createBatch : blacklist.createBatch;
setLoading(true)
save(params).then(() => {
resetData()
showToast('添加成功','success');
props.onClose?.(true)
}).catch((e: BizError) => { //
if (e.data && e.code == 2) {
console.log('create e', e, e.data)
//校验失败
const data = e.data as TBatchCreateError[];
data.forEach(it => {
// 是否存在该词条
if (!fieldList[it.index]) return;
if (it.type !== 1) { // 拦截词
if (props.type == 'black') {
fieldList[it.index].replace.message = it.msg
}
} else {
fieldList[it.index].words.message = it.msg
}
})
setFieldList(cloneDeep(fieldList));
return;
}
showToast(e.message || '批量添加名单失败','warning')
}).finally(() => setLoading(false))
};
const resetData = () => {
setFieldList([
cloneDeep(defaultFieldRow)
])
}
const addItem = () => {
const item: LexiconFieldItem = cloneDeep(defaultFieldRow)
console.log('addItem', item)
setFieldList([
...fieldList,
item
])
}
const removeItem = (index: number) => {
if (fieldList.length == 1) return;
const list = cloneDeep(fieldList)
list.splice(index, 1)
setFieldList(list);
}
const setFieldValue = (key: string, index: number, value: any) => {
// @ts-ignore
const item = fieldList[index][key] as FieldValue;
item.value = value;
setFieldList(cloneDeep(fieldList));
}
return (<Modal
maskClosable={false}
open={props.visible}
className="modal-save-lexicon"
destroyOnClose={true}
onCancel={() => props.onClose?.()}
footer={null}
width={props.type == 'white' ? 700 : 850}
>
<div className={`save-modal-body save-modal-${props.type}`}>
<h2 className="text-center">{props.type == 'white' ? '白' : '黑'}</h2>
<div className="table-wrapper text-tip">
<div className="form-table">
<div className="header table-row">
<div className="item item-input item-words">{props.type == 'white' ? '放行词' : '拦截词'}</div>
<div className="item item-type"></div>
{props.type == 'black' && <>
<div className="item item-suggestion"></div>
<div className="item item-input item-replace"></div>
</>}
<div className="item-operation"></div>
</div>
{fieldList.map((it, index) => (<div className="table-row" key={index}>
<div className="item item-input item-words">
<div className="form-item">
<Input
value={it.words.value}
onChange={e => {
setFieldValue('words', index, e.currentTarget.value)
}}
placeholder="请输入"
className={it.words.message ? 'has-error' : ''}
/>
</div>
<div className="validate-message">{it.words.message}</div>
</div>
<div className="item item-type">
<div className="form-item">
<Select
className="w-full"
onChange={value => setFieldValue('type', index, value)}
value={it.type.value}
options={[
{value: 1, label: '通用'},
]}
/>
</div>
<div className="validate-message">{it.type.message}</div>
</div>
{props.type === 'black' && <>
<div className="item item-suggestion">
<div className="form-item">
<Select
className="w-full"
onChange={value => setFieldValue('suggestion', index, value)}
value={it.suggestion.value}
options={SuggestionList}
/>
</div>
<div className="validate-message">{it.type.message}</div>
</div>
<div className="item item-input item-replace">
<div className="form-item">
<Input
disabled={it.suggestion.value != BlackCreateActionType.Replace}
value={it.replace.value}
onChange={e => setFieldValue('replace', index, e.currentTarget.value)}
placeholder={it.suggestion.value == 'rep' ? "请输入" : ''}
className={it.replace.message ? 'has-error' : ''}
/>
</div>
<div className="validate-message">{it.replace.message}</div>
</div>
</>
}
<div className="item-operation text-center">
{fieldList.length > 1 &&
<span className="pointer" onClick={() => removeItem(index)}></span>}
</div>
</div>))}
</div>
<div className="text-right add-row">
<Button type="default" className="btn-default-border" icon={<PlusOutlined />} onClick={addItem}> </Button>
</div>
<div className="text-center">
<Space size={30}>
<Button className="btn-grey" onClick={() => props.onClose?.()}></Button>
<Button loading={loading} type="primary" onClick={handleSubmit}></Button>
</Space>
</div>
</div>
</div>
</Modal>)
}

View File

@ -1,40 +0,0 @@
import {Tabs} from "antd";
import {useState} from "react";
import "./lexicon.less"
import {Lexicon} from "./lexicon.tsx";
import {useNavigate, useSearchParams} from "react-router-dom";
import { AppTitleBar } from '@/components/app/title-bar.tsx';
export default function LexiconIndex() {
const [params] = useSearchParams();
const navigate = useNavigate()
const [activeTab, setActiveTab] = useState(params.get('tab') || 'white')
const onChange = (tab: string) => {
navigate(`?tab=${tab}`)
setActiveTab(tab)
}
return <>
<AppTitleBar title={'词库管理'} backgroundColor={'#eddcb9'}/>
<div className="lexicon-wrapper page-content-container">
<Tabs
activeKey={activeTab}
onChange={onChange}
type="card"
items={[
{
label: `白名单`,
key: 'white',
children: <Lexicon type={"white"}/>,
},
{
label: `黑名单`,
key: 'black',
children: <Lexicon type={"black"}/>,
}
]}
className="normal-tab"
/>
</div>
</>;
};

View File

@ -1,170 +0,0 @@
.lexicon-wrapper {
height: calc(100vh - 50px);
overflow-y: auto;
padding: 20px;
box-sizing: border-box;
.lexicon {
}
.search-form {
margin: 20px 0;
}
.data-table {
.aui-table-container {
border: solid 1px var(--border-color);
border-radius: 0;
}
}
.modify-button{
min-width: 60px;
height: 30px;
}
.del-link{
color: #757575;
&:hover{
color: #333;
}
}
}
.modal-import-file {
.import-file-result {
font-weight: bold;
padding: 30px 20px;
}
.count {
color: #FA674A;
}
.import-message {
margin-top: 30px;
}
}
.modal-save-lexicon{
.modify-modal-body{
padding: 30px;
}
}
.modal-save-lexicon {
.save-modal-body{
padding: 30px;
}
h2{
margin-bottom: 20px;
}
.form-table {
border: solid 1px var(--border-color);
}
.item {
border-left: solid 1px transparent;
flex: 2;
margin-left: 20px;
&:first-child{
border-left: none;
margin-left: 0px;
}
}
.item-input{
width: 170px;
}
.item-suggestion{
flex:1;
}
.item-type{
flex:1;
min-width: 130px;
}
.header {
background-color: #fafafa;
font-weight: bold;
.item {
border-left-color: var(--border-color);
padding-left: 10px;
&:first-child{
padding-left: 0px;
}
}
.item-type{
margin-left: 30px;
}
}
.table-row {
display: flex;
align-items: flex-start;
justify-content: space-between;
border-top: solid 1px var(--border-color);
padding: 8px 10px;
&:first-child{
border-top: none;
}
}
.aui-input-disabled{
border:none;
}
.item-operation {
width: 80px;
padding-top: 3px;
}
.add-row{
margin: 20px 0;
}
.validate-message{
color: #FA674A;
}
.has-error{
border-color:#FA674A;
}
.save-modal-white{
.item-words{
display: flex;
align-items: center;
}
.validate-message{
margin-left: 10px;
}
}
}
// tab 样式
.normal-tab {
.aui-tabs-nav {
background-color: var(--background-color);
margin-bottom: 0;
.aui-tabs-tab {
background-color: transparent;
border-radius: 0 !important;
border: none;
font-weight: bold;
color: #ABABAB;
padding: 13px 40px;
justify-content: center;
&.aui-tabs-tab-active {
background-color: #fff;
.aui-tabs-tab-btn {
color: #000;
}
}
}
}
.aui-tabs-ink-bar {
display: none;
}
.aui-tabs-content-holder {
background-color: #fff;
padding: 40px;
}
}

View File

@ -1,355 +0,0 @@
import React, {useEffect} from "react";
import {Button, DatePicker, Divider, Form, Input, Select, Space, Table, Typography} from "antd";
import {RightOutlined} from "@ant-design/icons";
import {useRequest, useSetState} from "ahooks";
import {ImportFileModal} from "./components/import-file.tsx";
import {showToast, useConfirm} from "@/components/messages/Modal.tsx";
import {SaveModal} from "./components/save-modal.tsx";
import {Pagination} from "@/components/pagination";
import {BlackCreateActionType, TListParam} from "@/service/types/lexicon.ts";
import {whitelist, blacklist} from "@/service/api/lexicon.ts"
import {EditableCellProps, getColumns, LexiconType} from "./components/columns.tsx";
import dayjs from "dayjs";
type PageType = 'white' | 'black'
// type Lexicon
type LexiconProps = {
type: PageType
}
// 是否隐藏删除提示的key
const HIDE_NOTICE_KEY = 'ai-proofread-hide-remove-notice',
Storage = window.sessionStorage // 采用session存储缓存
export const Lexicon: React.FC<LexiconProps> = (props) => {
const [form] = Form.useForm<any>()
// 搜索为单独触发所以文本需要独立
const [searchParam, setSearchParam] = useSetState<TListParam>({
pageSize: 10,
currentPage: 1
})
// 数据
const {data: dataSource, run: loadingDataList, loading} = useRequest(() => {
return props.type === 'white' ? whitelist.list(searchParam) : blacklist.list(searchParam)
}, {
manual: true,
debounceWait: 500,
onSuccess: (data) => {
if(state.modifyItem){
setState({modifyItem: undefined})
}
// 处理页码错误
if (data.list.length == 0 && data.pagination.total > 0) {
const maxPage = Math.ceil(data.pagination.total / data.pagination.pageSize);
if (data.pagination.current > maxPage) {
setSearchParam({currentPage: maxPage})
}
}
}
})
// const loadData
const {confirmHolder, showConfirm} = useConfirm()
// 删除后重新加载数据
const loadDataAfterDelete = (type: 'deleteAll' | 'delete' = 'deleteAll') => {
if (dataSource) {
const page = dataSource.pagination
// 判断是否需要到上一页
const maxPage = Math.ceil(page.total / page.pageSize);
if (page.current >= maxPage && maxPage > 1) { // 如果在最后一页且该页大于第一页 则自动加载前一页数据
if (
(type == 'deleteAll' && state.selectedKeys.length == dataSource.list.length)
|| (type == 'delete' && dataSource.list.length === 1)) { // 删除了该页所有数据
setSearchParam({currentPage: maxPage - 1})
return;
}
}
}
loadingDataList();
}
// 处理多选删除
const handleDeleteAll = () => {
if (state.selectedKeys.length == 0) return;
showConfirm({
content: '是否删除选中结果? 请注意删除后不可恢复',
onYes() {
const remove = props.type === 'black' ? blacklist.removeBatch : whitelist.removeBatch
// 删除并刷新
remove(state.selectedKeys)
.then(() => {
loadDataAfterDelete();
setState({selectedKeys: []}) // 重置选择项
})
.catch((e: BizError) => showToast('删除失败:' + e.message || '请稍后重试', 'warning'))
}
})
}
// 删除
const deleteData = (item: LexiconType) => {
const remove = props.type === 'black' ? blacklist.remove : whitelist.remove
// 删除并刷新
remove(item.id).then(() => {
loadDataAfterDelete('delete')
}).catch((e: BizError) => showToast('删除失败:' + e.message || '请稍后重试', 'warning'))
}
const handleRemove = (item: LexiconType) => {
// 判断是否需要隐藏
if (Storage.getItem(HIDE_NOTICE_KEY)) {
deleteData(item) // 直接走删除流程
} else {
// 弹出提醒
showConfirm({
content: '是否删除选中结果? 请注意删除后不可恢复',
showNextAsk: true, // 是否显示下一次还问
onYes(hideNextNotice) {
// 需要隐藏写入缓存
if (hideNextNotice) Storage.setItem(HIDE_NOTICE_KEY, 'yes')
deleteData(item) // 走删除流程
}
})
}
}
// 页面状态
const [state, setState] = useSetState<{
importVisible?: boolean,
saveVisible?: boolean,
modifyVisible?: boolean,
saving?: boolean;
selectedKeys: any[],
modifyItem?: LexiconType;
}>({
selectedKeys: []
})
// 全选
const toggleSelectAll = () => {
if (!dataSource) return;
if (state.selectedKeys.length != dataSource.list.length) {
const selectedKeys = dataSource.list.map(s => s.id);
setState({selectedKeys})
} else {
setState({selectedKeys: []})
}
}
// 搜索表单
const onFormSearch = () => {
const values = form.getFieldsValue();
const timeParams:{startTime?: number, endTime?: number} = {startTime:undefined,endTime:undefined}
// 搜索时间
if (values.time) {
const [start, end] = values.time;
const timeStart = start.format('YYYY-MM-DD') + ' 00:00:00';
const endStart = end.format('YYYY-MM-DD') + ' 23:59:59';
timeParams.startTime = dayjs(timeStart).unix()
timeParams.endTime = dayjs(endStart).unix()
}
setSearchParam({
currentPage: 1,
word: values.word,
...timeParams
})
}
// 加载
useEffect(loadingDataList, [searchParam]);
const [modifyForm] = Form.useForm();
const [modifyState, setModifyState] = useSetState<{
category?:number;
action?:number;
}>({})
const handleModifySave = async () => {
try{
const params = (await modifyForm.validateFields());
params.actionType = modifyState.action;
params.type = modifyState.category;
if(modifyState.action == 1){
// 修改为拦截则将替换词置为空
params.replaceWord = '';
}
// 执行保存
const save = props.type == 'white' ? whitelist.modify : blacklist.modify;
setState({saving: true})
save(state.modifyItem!.id, params).then(() => {
showToast('修改名单成功', 'success');
loadingDataList();
}).catch((e: BizError) => showToast(e.message || '修改数据失败', 'warning'))
.finally(() => setState({saving: false}))
}catch (e) {}
}
// 列配置
const columns = getColumns(props.type, (_, _item, index) => {
return (index + 1) + ((dataSource?.pagination.current || 1) - 1) * (searchParam.pageSize || 10);
}, (_, item: LexiconType) => {
return (state.modifyItem && state.modifyItem.id == item.id ? <Space size={20}>
<Button loading={state.saving} className={'modify-button'} onClick={handleModifySave} type={'primary'} size={'small'}></Button>
<Button className={'modify-button'} size={'small'} onClick={() => setState({modifyItem: undefined})}></Button>
</Space> : <Space>
<Typography.Link disabled={!!state.modifyItem} className={"text-link-blue"} onClick={() => {
setModifyState({
category:item.type,
action:item.actionType
})
modifyForm.setFieldsValue({...item});
// 修改
setState({
modifyItem: item,
modifyVisible: true
})
}}></Typography.Link>
<Divider type="vertical"/>
<a className={'lexicon-del-link del-link'} onClick={() => handleRemove(item)}></a>
</Space>)
})
// 合并列
const mergedColumns = columns.map((col) => {
if (!col.editable) {
return col;
}
const dataIndex = (col as any).dataIndex as string;
return {
...col,
onCell: (record: LexiconType) => ({
record,
inputType: (dataIndex === 'actionType' || dataIndex === 'type') ? 'select' : 'text',
dataIndex: dataIndex,
title: col.title,
editing: state.modifyItem && state.modifyItem.id == record.id,
}),
};
});
// 修改数据
const SuggestionList = [
{value: 1, label: '拦截'},
{value: 2, label: '替换'},
]
const ActionTypeSelect = () => (<Select value={modifyState?.action} onChange={action=>setModifyState({action})} className="w-full" options={SuggestionList} />)
const CategorySelect = () => (<Select value={modifyState?.category} onChange={category=>setModifyState({category})} className="w-full" options={[{value: 0, label: '通用'},]}/>)
// 自定义单元格渲染
const EditableCell: React.FC<EditableCellProps> =
({
editing,
dataIndex,
title,
inputType,
record,
index,
children,
...restProps
}) => {
const rules: any[] = dataIndex === 'replaceWord'?[]:[{required: true, message: `请填写${title}`}]
if (dataIndex === 'replaceWord') {
rules.push(({getFieldValue}: { getFieldValue: (key: string) => string }) => ({
validator(_: any, value: string) {
// 替换时才判断
if(modifyState.action == 2){
if(value.length == 0){
return Promise.reject(new Error('请填写替换词'));
}
if (getFieldValue('word') === value) {
return Promise.reject(new Error('拦截词与替换词相同'));
}
}
return Promise.resolve();
},
}))
}
return (
<td {...restProps}>
{editing ? (<Form.Item
name={dataIndex}
style={{margin: 0}}
rules={rules}
>
{dataIndex === 'actionType' ? <ActionTypeSelect/> : (
dataIndex === 'type' ? <CategorySelect/> : (<Input disabled={ dataIndex === 'replaceWord' && modifyState?.action != BlackCreateActionType.Replace}/>)
)}
</Form.Item>) : (children)}
</td>
);
};
return (<div className="lexicon">
{confirmHolder}
<SaveModal type={props.type} visible={state.saveVisible} onClose={(refresh) => {
setState({saveVisible: false})
if (refresh) loadingDataList();
}}/>
{/*导入*/}
{state.importVisible && <ImportFileModal type={props.type} visible={state.importVisible} onClose={(refresh) => {
setState({importVisible: false})
if (refresh) loadingDataList();
}}/>}
<Space className="button-wrapper">
<Button type="primary" onClick={() => setState({saveVisible: true})}></Button>
<Button type="primary" onClick={() => setState({importVisible: true})}></Button>
</Space>
<Form
className="search-form" layout="inline"
form={form}
onFinish={onFormSearch}
onReset={onFormSearch}
>
<Form.Item label={props.type === 'white' ? '放行词' : '拦截词'} name="word">
<Input placeholder="请输入" allowClear />
</Form.Item>
<Form.Item label="修改时间" name="time">
<DatePicker.RangePicker
style={{width: 240}}
separator={<RightOutlined style={{color: '#ccc'}}/>}
/>
</Form.Item>
<Form.Item>
<Button type="primary" htmlType="submit"></Button>
</Form.Item>
<Form.Item>
<Button htmlType="reset"></Button>
</Form.Item>
</Form>
<div className="data-table-wrapper">
<div>
<Form component={false} form={modifyForm}>
<Table
className="data-table"
rowKey="id"
components={{body: {cell: EditableCell}}}
rowSelection={{
type: 'checkbox',
selectedRowKeys: state.selectedKeys,
onChange: (selectedKeys) => {
setState({selectedKeys})
},
}}
dataSource={dataSource?.list || []}
columns={mergedColumns as any}
pagination={false}
loading={loading}
/>
</Form>
</div>
{dataSource && dataSource.pagination.total > 0 && <div className="d-flex space-between" style={{marginTop:20}}>
<div className="align-center">
<div
style={{minWidth: 70}}
className="pointer text-left text-link-blue"
onClick={toggleSelectAll}
>{state.selectedKeys.length == dataSource?.list.length ? '取消全选' : '全选'}</div>
{state.selectedKeys.length > 0 && <div className="align-center pointer" onClick={handleDeleteAll}>
{/*<SvgIcon type="delete" size={18}/>*/}
<span></span>
</div>}
</div>
{dataSource && <Pagination
param={dataSource.pagination}
onPageChange={currentPage => setSearchParam({currentPage})}
emptyText={null}
/>}
</div>}
</div>
</div>)
}

View File

@ -1,284 +0,0 @@
import React from "react";
import {companyName,productName} from "./env.ts"
export const AgreementContent: React.FC = () => {
return (
<div className="terms-content">
<p><strong>{productName}</strong><span
>{companyName}</span>
</p>
<p>
<span></span>
</p>
<p><span
>18使</span>
</p>
<p>
<span>使使</span>
</p>
<p><span>2023</span><span
>&nbsp;12</span><span
></span><span
>&nbsp;01</span><span
></span></p>
<p><span></span><span
>2023</span><span
></span><span
>&nbsp;12</span><span
>&nbsp;01</span></p>
<p><strong></strong></p>
<p><span>1</span><strong
>{productName}</strong><span
>SAAS产品</span>
</p>
<p><span
>2使使</span>
</p>
<p><span
>3</span>
</p>
<p><strong></strong></p>
<p><span>1</span></p>
<p>
<span>1使使+使</span>
</p>
<p>
<span>2使</span>
</p>
<p>
<span>3/使使使</span>
</p>
<p>
<span>4使怀使使</span>
</p>
<p><span>2使</span></p>
<p>
<span>1使使使使使</span>
</p>
<p>
<span>2使</span>
</p>
<p>
<span>3</span>
</p>
<p>
<span>4使退使</span>
</p>
<p>
<span>5/使使</span>
</p>
<p><span
>6使</span>
</p>
<p><span>3</span></p>
<p>
<span>15</span>
</p>
<p><strong></strong></p>
<p>
<span>1使使使使</span>
</p>
<p>
<span>2广</span>
</p>
<p>3</p>
<p>
<span>1退</span>
</p>
<p>
<span>2使退使使使</span>
</p>
<p><span
>3</span>
</p>
<p>
<span>4使10</span>
</p>
<p><strong>使</strong></p>
<p>
<span>1使使</span>
</p>
<p>
<span>2使线</span>
</p>
<p>
<span>3使</span>
</p>
<p>
<span>4</span>
</p>
<p>
<span>5使使使线线便广</span>
</p>
<p>
<span>6线</span>
</p>
<p>
<span>7</span>
</p>
<p>8</p>
<p><span
>1使</span>
</p>
<p><span>2</span>
</p>
<p><span
>1</span>
</p>
<p><span
>2</span>
</p>
<p><span
>3广广</span>
</p>
<p><span>4使/</span></p>
<p><span
>5</span>
</p>
<p><span
>6</span>
</p>
<p><span
>7</span>
</p>
<p><span>8TCP/IP数据包名称或部分名称</span></p>
<p><span
>3</span>
</p>
<p><span>4</span></p>
<p><span>5</span></p>
<p><span>1</span></p>
<p><span>2</span></p>
<p><span>3</span></p>
<p><span>4</span></p>
<p><span>5</span></p>
<p><span>6</span></p>
<p><span>7</span></p>
<p><span>8</span></p>
<p><span>9</span></p>
<p><span>10</span></p>
<p><span>11</span></p>
<p><span>12</span></p>
<p><span>13</span>
</p>
<p><span>14</span></p>
<p><span>15</span></p>
<p><span>16</span></p>
<p><span>17</span></p>
<p><span>18</span></p>
<p><span>19</span>
</p>
<p><span
>20广广广</span>
</p>
<p><span>21/广</span></p>
<p><span
>22使</span>
</p>
<p><span>23</span>
</p>
<p><span>24使</span>
</p>
<p><span
>25</span>
</p>
<p><strong></strong></p>
<p><span
>1</span>
</p>
<p><span
>2使使使</span>
</p>
<p><span></span><span
>{companyName}</span><span
>稿</span></p>
<p>3</p>
<p>
<span>1VAD等技术对语音文件进行切分访使使</span>
</p>
<p><span
>2</span>
</p>
<p><span>3</span></p>
<p><span>1稿</span></p>
<p><span>2</span></p>
<p><span>3</span></p>
<p><span>4</span></p>
<p><span>5</span></p>
<p><span
>6</span>
</p>
<p><strong></strong></p>
<p>
<span>1使</span>
</p>
<p><span>2</span></p>
<p><span>1</span></p>
<p>
<span>2线</span>
</p>
<p>3</p>
<p>
<span>1使使</span>
</p>
<p>
<span>2使使访使访</span>
</p>
<p>
<span>3</span>
</p>
<p><strong></strong></p>
<p><span></span></p>
<p><strong></strong></p>
<p>
<span>1使</span>
</p>
<p>
<span>2</span>
</p>
<p>
<span>3使</span>
</p>
<p><strong></strong></p>
<p>
<span>1</span>
</p>
<p><span
>2</span>
</p>
<p>
<span>330</span>
</p>
<p><strong></strong></p>
<p>
<span>1使</span>
</p>
<p><span
>2使:</span>
</p>
<p><span
>电子邮件: zhengjianxiong@guomai.cn</span>
</p>
<p><span> : 021-64386496-228</span></p>
<p>
<span>3</span>
</p>
<p><strong></strong></p>
<p>
<span>1</span>
</p>
<p><span
>2</span>
</p>
<p><span
>3</span>
</p>
<p><span
>4使使</span>
</p>
<p>
<span>5</span>
</p>
</div>
)
}

View File

@ -1,2 +0,0 @@
export const productName = "AI校对王"
export const companyName = "果麦文化"

View File

@ -1,526 +0,0 @@
import React from "react";
import {companyName,productName} from "./env.ts"
export const PrivacyContent: React.FC = () => {
return (
<div className="terms-content">
<p>20231201</p>
<p>20231201</p>
<p><span></span><strong
>{productName}</strong><span
></span><span
>{companyName}</span><span
></span><span
>{companyName}</span><span
></span><strong
>{productName}</strong><span
>使14使</span><span
>{productName}</span><span
></span></p>
<p><strong></strong></p>
<p><span>1.访使</span><span
>{productName}</span><span
>访使</span></p>
<p>2.使{productName}</p>
<p><span>1使</span><span
>{productName}</span><span
></span>
</p>
<p><span>2使</span><strong
>{productName}</strong><span
></span></p>
<p><strong></strong></p>
<p><span></span></p>
<p><span>使</span></p>
<p><span>使 Cookie </span></p>
<p><span></span></p>
<p><span></span></p>
<p><span></span></p>
<p><span></span></p>
<p><span></span></p>
<p><span></span></p>
<p><span></span></p>
<p><span></span></p>
<p><span></span></p>
<p><strong></strong></p>
<p><strong>1. </strong><strong
>{productName}</strong><strong
></strong></p>
<p><span></span><strong
>{productName}</strong><span
></span><strong
>{productName}</strong><span
></span></p>
<p><strong>2. </strong></p>
<p><span></span><strong
>{productName}</strong><span
>使</span><strong
>{productName}</strong><span
></span><strong
>{productName}</strong><span
>访</span></p>
<p><strong>3. </strong></p>
<p><span
></span>
</p>
<p><strong>4. </strong></p>
<p><span
></span>
</p>
<p><strong>5. </strong></p>
<p><span>使</span>
</p>
<p><strong>6. </strong></p>
<p><span
>使</span>
</p>
<p><strong>7. </strong></p>
<p><span
></span>
</p>
<p><strong>8. </strong></p>
<p><span></span></p>
<p><strong>9. </strong></p>
<p><span
></span>
</p>
<p><strong>10. </strong></p>
<p><span
>使</span>
</p>
<p><strong>11. </strong></p>
<p><span></span></p>
<p><strong>12. </strong></p>
<p><span></span><strong
>{productName}</strong><span
></span></p>
<p><strong>13. </strong></p>
<p><span> ID UID IMEI 使Cookies时用以提供广告</span>
</p>
<p><strong>14. IP地址</strong></p>
<p><span> (IP) IP </span>
</p>
<p><strong>15. </strong></p>
<p>
<span>线线线</span>
</p>
<p><strong>16. SSL</strong></p>
<p><span>SSLSecure Socket LayerTCP/IPSSL支持各种类型的网络使</span>
</p>
<p><strong>17. </strong></p>
<p><strong>{productName}</strong><span
></span></p>
<p>
<span>1CookieCookie是您浏览网页时使</span>
</p>
<p>
<span>2Webbeacon Web beacon是装嵌在网站或电邮内的电子图像文件或其他技术访使Cookie</span>
</p>
<p><span>3Log filesLog files储存自动收集的若干数据IPISP/退/</span>
</p>
<p>
<span>4ET TagET Tag是在互联网浏览器与互联网服务器之间背后传送的HTTP协议标头Cookie使使</span>
</p>
<p>
<span>5JavaScriptJavaScript是一种编程语言JavaScript可以设定CookieCookie及删除Cookie</span>
</p>
<p><strong>使</strong></p>
<p><span>{companyName}</span><span
>使</span><strong
>{productName}</strong><span
>使</span>
</p>
<p><strong>1. </strong></p>
<p><strong>1.1</strong>
</p>
<p><span>a./使</span></p>
<p><span>使</span><strong
>{productName}</strong><span
>便使</span><strong
>{productName}</strong><span
></span><strong
>{productName}</strong><span
>使</span><strong
>{productName}</strong><span
>便使访</span><strong
>{productName}</strong><span
></span></p>
<p><span>b.</span></p>
<p><span>使</span><strong
>{productName}</strong><span
></span><strong
>{productName}</strong><span
></span>
</p>
<p><span>访使使使使</span>
</p>
<p><span>1.2</span><strong
>{productName}</strong><span
>使1.1</span>
</p>
<p><span>a.</span></p>
<p><span></span>
</p>
<p><span>b.</span></p>
<p>
<span></span>
</p>
<p>c.</p>
<p><span></span><strong
>{productName}</strong><span
></span><strong
>{productName}</strong><span
>线</span><strong
>{productName}</strong><span
>使</span><strong
>{productName}</strong><span
>使</span><strong
>{productName}</strong><span
></span></p>
<p><strong>2. </strong></p>
<p><span
>使使</span><strong
>{productName}</strong><span
></span></p>
<p><span></span></p>
<p><span>使</span><strong
>{productName}</strong><span
>Cookies或其他方式自动收集某些信息作为系统日志保存使</span><strong
>{productName}</strong><span
>使使访IP使访访</span>
</p>
<p><strong>使Cookie和同类技术</strong></p>
<p><strong>1. Cookie</strong></p>
<p><span> Cookie Cookies收集和使用您的信息使Cookies</span>
</p>
<p><span
>1Cookies有助于我们辨认您作为我们的注册用户的身份</span>
</p>
<p><span
>2使Cookies来了解您使用我们的服务进行什么活动</span>
</p>
<p><strong>2. </strong></p>
<p><span> Cookie 使 URL退</span>
</p>
<p><strong></strong></p>
<p><strong>1.</strong></p>
<p><span>使</span><strong
>{productName}</strong><span
></span></p>
<p><span>使</span><strong
>{productName}</strong><span
> 使</span><strong
>{productName}</strong><span
></span></p>
<p><strong>2.</strong></p>
<p><span
></span>
</p>
<p><span
>1</span>
</p>
<p><span
>2</span>
</p>
<p><span></span>
</p>
<p><strong>3.</strong></p>
<p><span
></span>
</p>
<p><span
>1</span>
</p>
<p><span
>2</span>
</p>
<p><span>3</span>
</p>
<p><strong>4. </strong></p>
<p><span></span></p>
<p><span>1</span>
</p>
<p><span
>2</span>
</p>
<p><span>3</span>
</p>
<p><strong>5. </strong></p>
<p><span></span>
</p>
<p><span>1</span></p>
<p><span>2</span></p>
<p><span>3</span></p>
<p><span>4</span></p>
<p><span
>5</span>
</p>
<p><span>6</span></p>
<p><span
>7</span>
</p>
<p>
<span></span>
</p>
<p><strong></strong></p>
<p><span
>1.</span><span
>{companyName}</span><span
>访使</span>
</p>
<p><span>2.</span><span
>{companyName}</span><span
></span>
</p>
<p><span>3.</span></p>
<p><span>1</span><strong
>{productName}</strong><span
>访使</span><strong
>{productName}</strong><span
>https等方式提供浏览服务TLSSSL使</span><strong
>{productName}</strong><span
></span><strong
>{productName}</strong><span
>访访</span><strong
>{productName}</strong><span
></span>
</p>
<p>
<span>3</span>
</p>
<p>
<span>4使</span>
</p>
<p><span>5</span><span
>{companyName}</span><span
></span><span
>{companyName}</span><span
></span><span
>{companyName}</span><span
></span><span
>{companyName}</span><span
></span><span
>{companyName}</span><span
></span></p>
<p><strong></strong></p>
<p>
<span></span>
</p>
<p><strong>1.</strong></p>
<p><span>{companyName}</span><span
></span><span
>{companyName}</span><span
></span></p>
<p><span> </span></p>
<p><span> </span></p>
<p><span> </span></p>
<p><strong>2.</strong></p>
<p><span>使</span><strong
>{productName}</strong><span
></span><span
>{companyName}</span><span
></span></p>
<p><span> </span></p>
<p><span> </span></p>
<p><span> </span></p>
<p><span> </span><span
>{companyName}</span><span
></span></p>
<p><span> </span><span
>{companyName}</span><span
></span><span
>{companyName}</span><span
></span></p>
<p><span>使</span><strong
>{productName}</strong><span
></span><span
>{companyName}</span><span
>使</span></p>
<p><span></span><strong
>{productName}</strong><span
></span><span
>{companyName}</span><span
></span>
</p>
<p><strong></strong></p>
<p><span
></span>
</p>
<p><span
> </span>
</p>
<p><span
> </span>
</p>
<p><span> </span></p>
<p><span
> </span>
</p>
<p><span> </span></p>
<p><span> </span></p>
<p><span>使</span><strong
>{productName}</strong><span
></span></p>
<p><span></span></p>
<p><strong>1. </strong></p>
<p><span></span></p>
<p><span>1</span><strong
>{productName}</strong><span
></span><strong
>{productName}</strong><span
></span></p>
<p><span>2</span></p>
<p><span>3</span></p>
<p><span>4 </span><strong
>{productName}</strong><span
>访</span><strong
>{productName}</strong><span
>15</span>
</p>
<p><strong>2. /</strong></p>
<p><span>/</span></p>
<p><span>1</span><strong
>{productName}</strong><span
></span><strong
>{productName}</strong><span
></span></p>
<p><span>2</span></p>
<p><span>3</span></p>
<p><span>4 </span><strong
>{productName}</strong><span
></span><strong
>{productName}</strong><span
>-15</span>
</p>
<p><strong>3. </strong></p>
<p><span></span><strong
>{productName}</strong><span
>-15</span>
</p>
<p><span
></span>
</p>
<p><strong>4. </strong></p>
<p><span></span><strong
>{productName}</strong><span
>&nbsp;&nbsp;15</span>
</p>
<p><strong>5. </strong></p>
<p><span
></span><strong
>{productName}</strong><span
>- 线 - 15</span>
</p>
<p><strong>6. </strong></p>
<p><span
></span><strong
>{productName}</strong><span
></span>
</p>
<p><strong>7. </strong></p>
<p><span> </span><strong
>{productName}</strong><span
>- 线</span><strong
>{productName}</strong><span
></span><strong
>{productName}</strong><span
>使</span></p>
<p><strong>8. </strong></p>
<p><span
></span><strong
>{productName}</strong><span
></span><span
>{companyName}</span><span
>15</span>
</p>
<p>
<span>使</span><strong
>{productName}</strong><span
>使</span>
</p>
<p><span></span></p>
<p><span>1</span></p>
<p><span>2</span></p>
<p><span>3</span></p>
<p><span>4</span></p>
<p><span>5</span></p>
<p><span>6</span>
</p>
<p><span>7</span></p>
<p><span>8</span></p>
<p><strong></strong></p>
<p><span>1.</span><span
>{companyName}</span><span
></span>
</p>
<p><span>2.1814</span>
</p>
<p><span
>3.14</span>
</p>
<p><span>4.使使</span>
</p>
<p><span
>5.</span>
</p>
<p><strong></strong></p>
<p><span>使使/使访</span>
</p>
<p><span></span>
</p>
<p><strong></strong></p>
<p><span>1.</span><strong
>{productName}</strong><span
></span><strong
>{productName}</strong><span
></span></p>
<p><span>2.</span><strong
>{productName}</strong><span
></span><strong
>{productName}</strong><span
>使</span><strong
>{productName}</strong><span
></span><strong
>{productName}</strong><span
>使</span>
</p>
<p><span></span></p>
<p><span> </span><strong
>{productName}</strong><span
>使</span>
</p>
<p><span> </span><strong
>{productName}</strong><span
></span></p>
<p><span> </span></p>
<p><span> 使</span></p>
<p><span> </span><strong
>{productName}</strong><span
></span></p>
<p><span> </span></p>
<p><span> </span></p>
<p><strong></strong></p>
<p><span
>使</span><strong
>{productName}</strong><span
></span>
</p>
<p><span> 021-64386496-228</span></p>
<p><span> zhengjianxiong@guomai.cn</span>
</p>
<p><span
>181B座401</span>
</p>
<p><span> </span>
</p>
<p><strong></strong></p>
<p><span
></span>
</p>
<p>
<span></span>
</p>
</div>
)
}

View File

@ -1,9 +0,0 @@
import { useUserinfoStore } from "@/service/userinfoStore";
import {Avatar} from "antd";
import React from "react";
import DefaultAvatar from '@/assets/avatar.png'
export const UserAvatar = ({size,className}: { className?:string;size?: "large" | "small" | "default" | number }) => {
const {userinfo} = useUserinfoStore()
return <Avatar onError={()=>false} alt="点击替换头像" className={className} src={userinfo?.avatar || DefaultAvatar} size={size}/>
}

View File

@ -1,72 +0,0 @@
import {Button, Input, Space} from "antd";
import {useCountDown, useSetState} from "ahooks";
import React from "react";
import {cx} from "@emotion/css";
import { isPhone } from "@/utils/strings";
import { sendCode } from "@/service/api/user";
export const InputValidateCode: React.FC<{
className?: string;
show?: boolean;
defaultValue?: string;
value?: string;
onInput?: (v: string) => void;
onChange?: (v: string) => void;
phone?: string;
onError?: (err: string, isPhone?: boolean) => void;
}> = (props) => {
const [data, setData] = useSetState<{
targetDate?: number;
sending?: boolean
}>({});
// 倒计时
const [countdown] = useCountDown({
targetDate: data.targetDate,
});
// 发送验证码
const handleSendCode = () => {
if (!props.phone) {
props.onError && props.onError('请填写手机号', true);
return;
}
if (!isPhone(props.phone)) {
props.onError && props.onError('请填写正确的手机号', true);
return;
}
props.onError && props.onError('');
setData({sending: true})
// 发送
sendCode(props.phone).then(() => {
setData({
targetDate: Date.now() + 60000
})
}).catch((e: BizError) => {
props.onError && props.onError(e.message || '发送失败,请重新发送');
}).finally(() => setData({sending: false}))
}
return (<div className={cx({hidden: !props.show}, "validate-code input-row align-center space-between")}>
<Space>
<div className="input-code-wrapper">
<Input
className={`input-code ${props.className}`}
defaultValue={props.defaultValue}
maxLength={6}
size={'large'}
placeholder="输入验证码"
onChange={e => {
props.onChange && props.onChange(e.currentTarget.value);
}}/>
</div>
<Button
className="ml-5 btn-solid"
loading={data.sending}
size={'large'}
disabled={countdown > 0 || !props.phone}
onClick={handleSendCode}
style={{width: 100, fontSize: 14}}
>
{data.sending ? '发送中' : (countdown > 0 ? `${Math.round(countdown / 1000)}s` : '获取验证码')}
</Button>
</Space>
</div>)
}

View File

@ -1,139 +0,0 @@
import React, {ChangeEvent, useState} from "react";
import { Button, Form, Input, Space } from 'antd';
import {useRequest, useSetState} from "ahooks";
import css from "./user.module.less";
import {InputValidateCode} from "./input.tsx";
import {isPhone} from "@/utils/strings.ts";
import {useUserinfoStore} from "@/service/userinfoStore.ts";
export type LoginFormProp = {
type?: string;
agreeTerms?: boolean;
onSuccess: (data: Account) => void;
}
export const LoginForm: React.FC<LoginFormProp> = (props) => {
const {login, confirmLogin} = useUserinfoStore();
// 输入数据
const [data, setData] = useSetState<{
phone?: string;
code?: string;
}>({
phone: '',
code: ''
})
const [confirmState,setConfirmState] = useSetState({
loginConfirmVisible: false,
confirmLoginKey: ''
})
const handleConfirmLogin = ()=>{
confirmLogin({
confirm_login_key: confirmState.confirmLoginKey
}).then((data)=>{
props.onSuccess(data);
})
}
// 错误
const [err, setErr] = useState<{
phone?: string;
code?: string;
all?: string;
}>({})
// const {login, loginTarget} = useUserinfoStore();
// 执行登录
const {run, loading} = useRequest(() => {
setErr({})
if (!data.phone) {
setErr({phone: '请填写手机号'})
return Promise.reject();
} else if (!isPhone(data.phone)) {
setErr({phone: '手机号错误,请填写的正确的手机号'})
return Promise.reject();
} else if (!data.code) {
setErr({code: '请填写验证码'})
return Promise.reject();
} else if (!props.agreeTerms) {
setErr({code: '请阅读并同意服务协议和隐私政策'})
return Promise.reject();
}
return login(data)
}, {
manual: true,
async onSuccess(data) {
props.onSuccess(data);
},
onError(e) {
const err = e as BizError
if(err.code == 11){
// 已在别处登录
setConfirmState({
loginConfirmVisible: true,
confirmLoginKey: String(err.data)
})
return;
}
setErr({all: e.message || `${props.type == 'link' ? '关联' : '登录'}失败,请重试`})
}
})
const handlePhoneInput = (e: ChangeEvent<HTMLInputElement>) => {
if (e.currentTarget.value) setErr({phone: undefined})
setData({phone: e.currentTarget.value})
}
return (<div>
{/* 登录确认 */}
<div style={{
position:'fixed',
inset:0,
backgroundColor:'#fff',
zIndex:190090,
display:confirmState.loginConfirmVisible?'flex':'none',
alignItems:'center',
justifyContent:'center',
}}>
<div style={{padding: '30px 20px'}}>
<div className="login-limit-confirm text-center" style={{padding:'0 10px'}}>
<div style={{fontSize:22,padding:'10px'}}></div>
<div className="login-limit-warning">
<div className="content" style={{fontSize:16,margin:'10px 0'}}></div>
<div className="description" style={{fontSize:13,color:"gray"}}>*退</div>
</div>
<Space className="footer" style={{margin:'30px 0 20px'}} size={30}>
<Button onClick={()=>setConfirmState({loginConfirmVisible: false})}></Button>
<Button onClick={handleConfirmLogin} type={'primary'}></Button>
</Space>
</div>
</div>
</div>
<h3 className={css.loginTitle}
style={{marginBottom: props.type === 'link' ? 20 : 0}}>{props.type == 'link' ? '关联手机号' : '手机号登录/注册'}</h3>
<Form>
<div className={css.formItem}>
<Input
maxLength={11}
type="text"
placeholder="手机号"
className={`${err.phone ? 'input-error' : 'input-ok'}`}
onChange={handlePhoneInput}
size={'large'}
/>
</div>
<div className={css.formItem}>
<InputValidateCode
className={`${err.code ? 'input-error' : 'input-ok'}`}
phone={data.phone}
onChange={code => {
setErr({code: undefined})
setData({code})
}}
onError={(err, isPhone) => setErr({
phone: isPhone ? err : undefined,
all: isPhone ? undefined : err
})}/>
</div>
<div className={css.loginError}>{err.phone || err.code || err.all}</div>
<Button className={'btn-golden'} onClick={run} loading={loading} size="large" block type="primary"
htmlType="submit">{props.type == 'link' ? '关联' : '登录/注册'}</Button>
</Form>
</div>)
}

View File

@ -1,92 +0,0 @@
import React from "react";
import { Button, Checkbox, Modal, Space } from 'antd';
import {LoginForm} from "./login-form";
import {QrLogin} from "./qr-login.tsx";
import css from './user.module.less'
import {useSetState} from "ahooks";
import {AgreementContent} from "../terms/agreement.tsx";
import {PrivacyContent} from "../terms/privacy.tsx";
const ModalContent: {
[key: string]: { title: string; content: React.ReactNode }
} = {
agreement: {
title: 'AI校对王服务协议',
content: <AgreementContent/>
},
privacy: {
title: 'AI校对王隐私政策',
content: <PrivacyContent/>
}
}
export const LoginModal: React.FC<{
onSuccess: (data: Account) => void
}> = (props) => {
const [state, setState] = useSetState({
termsChecked: true,
modalVisible: false,
modalType: '',
agreement: false,
privacy: false,
showLinkPhone: false
});
const hideLinkPhone = () => {
setState({showLinkPhone: false})
}
return (<>
{/* 登录-扫码 */}
<div className={css.modalContainer}>
<div className={`d-flex ${css.modalContent}`}>
<LoginForm agreeTerms={state.termsChecked} onSuccess={props.onSuccess}/>
<div className={css.dividerLine}></div>
<QrLogin agreeTerms={state.termsChecked} onSuccess={(data, showBind) => {
if (showBind) setState({showLinkPhone: true})
else props.onSuccess(data)
}}/>
</div>
</div>
<div className="text-center fz-small text-tip" style={{marginTop: 20}}>
<Checkbox checked={state.termsChecked}
onChange={e => setState({termsChecked: e.target.checked})}>
<span className="text-tip"></span>
</Checkbox>
<a className="text-link"
onClick={() => setState({modalVisible: true, modalType: 'agreement'})}></a> <a
className="text-link" onClick={() => setState({modalVisible: true, modalType: 'privacy'})}></a>
</div>
{/* 扫码成功后绑定手机号 */}
{state.showLinkPhone && <Modal
open={true}
destroyOnClose={true}
maskClosable={false}
footer={null}
width={360}
centered
onCancel={() => setState({showLinkPhone: false})}
>
<div style={{padding: '30px 20px'}}>
<LoginForm type={"link"} agreeTerms={true} onSuccess={hideLinkPhone}/>
</div>
</Modal>}
{/* 协议 */}
<Modal
centered
open={state.modalVisible}
onCancel={() => setState({modalVisible: false})}
zIndex={10001}
footer={null}
>
<div className="modal-terms">
<p className="terms-title">
<strong>{ModalContent[state.modalType]?.title}</strong>
</p>
<div className="modal-terms-container container-overflow-auto" style={{maxHeight: 300}}>
{ModalContent[state.modalType]?.content}
</div>
</div>
</Modal>
</>
)
}

View File

@ -1,81 +0,0 @@
import React, {useEffect} from "react";
import {useRequest, useSetState} from "ahooks";
import {Spin} from "antd";
import css from './user.module.less'
import {getLoginQR, qrLoginQRStatus} from "@/service/api/user";
export const QrLogin: React.FC<{
agreeTerms?: boolean;
onSuccess: (data: Account,showBind?:boolean) => void
}> = (props) => {
const [state, setState] = useSetState<{
qrUrl?: string;
ticket?: string;
invalid?: boolean;
}>({})
let invalidTImer: number | string | null | undefined| any;
// 查询状态
const queryQRState = async () => {
try {
// 查询登录状态
const ret = await qrLoginQRStatus();
const state = parseInt(ret.state);
if (state == 3 || state == 2) {
cancel();
invalidTImer && clearTimeout(invalidTImer)
// 扫码成功
props.onSuccess?.(ret,state == 2) // state == 2 执行关联 需要绑定手机号
}
} catch (e) {
// 已过期
cancel(); // 停止
// loadQrImage();// 重新加载
setState({invalid: true})
}
}
// 定时
const {run, cancel} = useRequest(queryQRState, {pollingInterval: 3000,manual: true})
const setQrInvalid = () => {
setState({invalid: true})
cancel();
}
// 加载qr
const loadQrImage = () => {
getLoginQR().then(ret => {
setState({
qrUrl: ret.img_url,
ticket: ret.ticket,
invalid: false
})
setTimeout(run, 2000)
invalidTImer = setTimeout(() => {
setQrInvalid();
invalidTImer = null;
}, 6000 * 100)
}).catch(setQrInvalid)
}
useEffect(() => {
loadQrImage();
return () => {
cancel();// 停止轮询
}
}, []);
return (<div className={`text-center ${css.qrLogin}`}>
<h3 className={css.loginTitle}></h3>
<div className={css.qrContainer}>
{state.qrUrl ? <img alt="" src={state.qrUrl}/> : <div className={css.qrSpin}><Spin size={"large"}/></div>}
{state.invalid && <div className={css.invalidMask} onClick={loadQrImage}></div>}
{!props.agreeTerms && <div className={css.qrTermsTip}>
<span><br/></span>
</div>}
</div>
<div className={`fz-small text-tip`}> /</div>
</div>)
}

View File

@ -1,94 +0,0 @@
.userIndex {
padding-bottom: 50px;
}
.title {
margin-top: 50px;
line-height: 50px;
}
.userinfoContent {
padding: 50px 0;
background-color: #fff;
min-height: calc(100vh - 150px - var(--header-height, 60px));
}
.avatarContainer {
text-align: center;
margin-bottom: 15px;
}
.nicknameContainer {
text-align: center;
margin-bottom: 35px;
}
.bindWechat {
color: var(--primary-color);
padding: 0 10px;
cursor: pointer;
}
.qrContainer {
padding: 20px 0;
}
.qrImageContainer{
width: 180px;
height: 180px;
border: solid 1px #eee;
border-radius: 0;
padding: 5px;
margin: 10px auto;
display: flex;
align-items: center;
justify-items: center;
overflow: hidden;
position: relative;
}
.qrSpin{
margin: auto;
}
.qrImage {
height: 100%;
width: 100%;
scale: 1.15;
canvas {
display: block;
width: 100% !important;
height: 100% !important;
}
}
.invalidMask{
cursor: pointer;
position: absolute;
left:10px;
top:10px;
right:10px;
bottom: 10px;
background: url(./../../assets/qr-invalid-mask.png) center;
}
.btn{
border: solid 1px #333;
color: #333;
border-radius: 5px;
padding: 3px 15px;
cursor: pointer;
outline: none;
margin-left: 20px;
&:hover{
background-color: var(--background-hover-color);
}
}
.saveBtn {
.btn;
background-color: #5d91ba;
color:white;
border-color:#5d91ba;
&:hover{
background-color: var(--btn-primary-hover-color);
border-color:var(--btn-primary-hover-color);
}
}

View File

@ -1,81 +0,0 @@
.loginTitle {
font-size: var(--title-font-size, 16px);
font-weight: bold;
}
.modalContainer{
display: flex;
justify-content: center;
}
.modalContent {
}
.formItem {
margin-top: 20px;
}
.loginError {
height: 30px;
color: var(--error-color, red);
text-align: center;
margin:30px 0 5px;
}
.dividerLine {
margin: 0 30px;
border-right: solid 1px #DFDFDF;
min-height: 100%;
//height: 230px;
}
// 二维码
.qrLogin{
margin-right: 20px;
}
.qrContainer {
padding: 4px;
border: solid 1px #eee;
margin: 10px 0;
position: relative;
overflow: hidden;
width: 180px;
height: 180px;
display: flex;
align-items: center;
img{
scale: 1.15;
display: block;
height: 100%;
}
}
.qrSpin{
margin: auto;
}
.invalidMask{
cursor: pointer;
position: absolute;
left:10px;
top:10px;
right:10px;
bottom: 10px;
background: url(./../../assets/qr-invalid-mask.png) center;
}
.qrTip{
}
.qrTermsTip{
position: absolute;
left:0px;
top:0;
right:0px;
bottom: 0;
background-color: rgba(255,255,255,0.95);
display: flex;
align-items: center;
justify-content: center;
span{
padding: 15px;
margin: auto;
color: var(--primary-color);
font-size: 14px;
}
}

View File

@ -1,39 +0,0 @@
import React, {useEffect} from "react";
import {AppTitleBar} from "../../components/app/title-bar.tsx";
import {LoginModal} from "./components/user/login-modal.tsx";
import {useBridge} from "../../core/bridge.ts";
import {useSearchParams} from "react-router-dom";
import {useUserinfoStore} from "../../service/userinfoStore.ts";
const PageLogin: React.FC = () => {
const {userinfo} = useUserinfoStore()
const {bridge} = useBridge()
const [params] = useSearchParams()
const action = params.get('action') || 'default'
const asyncLoginInfo = (data: Account) => {
console.log('asyncLoginInfo',data,action)
if (action == 'proofread') { // 登录后需要立即
bridge?.StartProofread() // 启动校对
}else if(action == 'setting'){
bridge?.ShowSettingForm() // 启动设置
}
bridge?.loginSuccess?.(JSON.stringify(data)) // 登录成功 通知插件
}
const handleLoginSuccess = (data: Account) => {
asyncLoginInfo(data)
}
useEffect(() => {
if (userinfo) {
asyncLoginInfo(userinfo)
}
}, [userinfo])
return (<div className={'login-page'}>
<AppTitleBar backgroundColor={'white'} bordered={false}/>
<div className="login-container">
<LoginModal onSuccess={handleLoginSuccess}/>
</div>
</div>
)
}
export default PageLogin

View File

@ -1,22 +0,0 @@
.login-page {
//display: flex;
//place-items: center;
.login-container{
height: calc(100vh - 60px);
overflow: auto;
}
.login-content{
width: 300px;
margin: auto;
padding: 50px 0;
}
.qr-login-container {
width: 100%;
display: flex;
justify-content: center;
}
.login-method-switch {
margin-top: 20px;
}
}

View File

@ -1,62 +0,0 @@
import {Breadcrumb, Button, Layout, Menu, Space} from "antd";
const {Header, Content, Footer} = Layout;
const items = new Array(15).fill(null).map((_, index) => ({
key: index + 1,
label: `nav ${index + 1}`,
}));
export default function DefaultPage() {
const request = (url: string) => {
return fetch(`http://localhost:10800/${url}`).then(s => s.json());
}
const init = () => {
request('?action=login').then(console.log)
}
const info = () => {
request('?action=info').then(console.log)
}
return (
<Layout style={{
minHeight: '100vh'
}}>
<Header style={{display: 'flex', alignItems: 'center'}}>
<div className="demo-logo"/>
<Menu
theme="dark"
mode="horizontal"
defaultSelectedKeys={['2']}
items={items}
style={{flex: 1, minWidth: 0}}
/>
</Header>
<Content style={{padding: '0 48px'}}>
<Breadcrumb style={{margin: '15px 0'}}>
<Breadcrumb.Item>Home</Breadcrumb.Item>
<Breadcrumb.Item>List</Breadcrumb.Item>
<Breadcrumb.Item>App</Breadcrumb.Item>
</Breadcrumb>
<div
style={{
background: '#fff',
minHeight: 280,
padding: 24,
borderRadius: 3,
}}
>
<h1>default</h1>
<Space>
<Button onClick={info}>info</Button>
<Button onClick={init}>init</Button>
</Space>
</div>
</Content>
<Footer style={{textAlign: 'center'}}>
Ant Design ©{new Date().getFullYear()} Created by Ant UED
</Footer>
</Layout>
)
}

View File

@ -1,51 +0,0 @@
import {Button, Space} from "antd";
import {AppTitleBar} from "../../components/app/title-bar.tsx";
export default function DefaultPage() {
const request = (url: string) => {
return fetch(`http://localhost:10800/${url}`).then(s => s.json());
}
const init = () => {
request('?action=login').then(console.log)
}
const info = () => {
request('?action=info').then(console.log)
}
const openLogin = () => {
chrome.webview.hostObjects.bridge.ShowLoginForm("");
}
return (
<>
<div style={{
minHeight: 'calc(100vh - var(--bar-height))',
display: "flex",
alignItems: 'center',
justifyContent: 'center',
backgroundColor: '#f0f0f0'
}}>
<AppTitleBar bordered={false} backgroundColor={'#f0f0f0'}/>
<div
style={{
background: '#fff',
minHeight: 250,
borderRadius: 10,
width: '80%',
padding: 20,
boxShadow: '0 0 10px rgba(0,0,0,0.2)',
transform: 'translateY(calc(-1 * var(--bar-height) / 2))',
}}
>
<h1>default</h1>
<Space direction={'vertical'}>
<Button onClick={info}>info</Button>
<Button onClick={init}>init</Button>
<Button type={'primary'} size={'large'} onClick={openLogin}></Button>
</Space>
</div>
</div>
</>
)
}

View File

@ -1,37 +0,0 @@
import {Button} from "antd";
import {AppTitleBar} from "@/components/app/title-bar.tsx";
import {useBridge} from "@/core/bridge.ts";
import ImageWechat from "./images/wechat_qrcode.png"
const PageContact = () => {
const isDevMode = localStorage.getItem('plugin-dev-mode');
const {bridge} = useBridge()
return (<>
<AppTitleBar title={'联系客服'} backgroundColor={'#eddcb9'}/>
<div style={{paddingTop:5,height:'calc(100vh - var(--bar-height,50px))',display:'flex',justifyContent:'center',alignItems:'center'}}>
<div style={{textAlign: 'center',fontSize:16}}>
<div>使使</div>
<div style={{margin:5}}>
<img src={ImageWechat} alt='' />
</div>
<div></div>
<div>
<div style={{
backgroundColor:'#F0F0F080',
padding:'5px 10px',borderRadius:4,
display:'inline-block',margin:5
}}>
<a style={{color:'#D6AA69'}} href="mailto:aiprservice@goldmye.com">aiprservice@goldmye.com</a>
</div>
</div>
{isDevMode && <div style={{marginTop:10,textAlign:'center'}}>
<Button onClick={()=>{
bridge?.ShowCurrentPane()
}}></Button>
</div>}
</div>
</div>
</>)
}
export default PageContact

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.0 KiB

View File

@ -1,49 +0,0 @@
import {useEffect, useState} from "react";
import {useDebounceFn} from "ahooks";
const MaxCount = 20
const centerItem = (activeIndex: number) => {
// 将提示显示在视图中间
const div = document.querySelector(`div.proofread-index-${activeIndex}`)
if (div) {
div.scrollIntoView({
behavior: 'smooth',
block: 'center'
})
}
}
export const TestPage = () => {
const [lastIndex, setLastIndex] = useState(-1);
const [activeIndex, setActiveIndex] = useState(-1)
const {run: setActiveLastIndex} = useDebounceFn((i) => setLastIndex(i), {wait: 200,})
const processScroll = (e: WheelEvent) => {
const {deltaY} = e;
const newIndex = deltaY > 0 ? activeIndex + 1 : activeIndex - 1
if (newIndex < 0 || newIndex >= MaxCount) return;
setActiveIndex(newIndex)
centerItem(newIndex)
setActiveLastIndex(newIndex)
}
const {run: onMousewheel} = useDebounceFn((e) => processScroll(e), {wait: 10,})
useEffect(() => {
// 绑定键盘事件
// document.documentElement.addEventListener('keyup', handleUpAndDownEvent, false)
// 绑定滚动事件
document.documentElement.addEventListener('wheel', onMousewheel, false)
return () => {
document.documentElement.removeEventListener('wheel', onMousewheel, false)
// document.documentElement.removeEventListener('keyup', handleUpAndDownEvent, false)
}
}, []);
return (<div className="test-age">
<h1>TEST == {lastIndex}</h1>
<div className="box-container">
{Array(MaxCount).fill(0).map((_, i) => (
<div key={i} className={`row-item proofread-index-${i} ${activeIndex == i ? 'active-item' : ''}`}>
<span>{i}</span>
</div>))}
</div>
</div>)
}

View File

@ -1,380 +0,0 @@
.proofread-container {
.proofread-items, .types {
box-sizing: border-box;
}
.proofread-items {
display: flex;
flex-direction: column;
padding-bottom: 15px;
max-width: calc(100% - 60px);
}
.operation-button {
padding: 10px 0;
}
.btn-accept {
background-color: rgba(0, 0, 0, 0);
color:var(--selected-color);
border-color: var(--selected-color);
&:hover{
background-color: #e7eaf0;
}
}
.btn-cancel{
--btn-background-color: #c9c9c9;
&:hover{
--btn-background-color: #a2a2a2;
}
}
.btn-rollback {
border-color: var(--border-color);
background-color: transparent;
}
}
.btn-process{
background-color: #fff;
border: none;//solid 1px rgba(214, 170, 105, 0.7);
outline: none;
border-radius: 3px;
font-size: 12px;
padding: 8px 0;
min-width: 70px;
cursor: pointer;
color:#333;
.btn-icon{
font-size: 20px;
color:var(--primary-color);
}
&:hover{
background-color: var(--primary-color);
color:#fff;
.btn-icon{
color: #fff;
}
}
&[disabled]{
color: #ccc;
cursor: not-allowed;
.btn-icon{
color: #ccc;
}
}
&[disabled]:hover{
background-color: #fff;
color: #ccc;
}
}
.proofread-list {
span {
display: inline-block;
}
.item:last-child + .selected-line{
display: none;
}
.info{
max-width: 100%;
min-width: 0;
flex: 1;
}
.origin,.replaced {
max-width: 80%;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
padding: 2px 4px;
//height: 30px;
}
.origin {
color:#000;
}
.replaced {
background-color: var(--primary-color, #558CB7);
color: #fff;
border-radius: 3px;
}
.select{
.replaced {
}
.origin,.replaced {
white-space: normal;
//max-width: 100px;
}
}
.proofread-replace-item-replace{
.origin,.replaced {
max-width: 50%;
}
}
.proofread-replace-item-delete,
.proofread-replace-item-insert{
.origin {
//max-width: 180px;
}
&.select{
.origin,.replaced {
white-space: inherit;
//max-width: 160px;
}
}
}
.action-text {
color: var(--primary-color);
margin-left:20px;
font-weight: bold;
min-width: 40px;
white-space: nowrap;
}
.arrow {
margin: 0 10px;
}
}
// 右侧面板
.panel-right-state-wrapper {
flex: 1;
display: flex;
align-items: center;
justify-content: center;
text-align: center;
color: #979797;
.desc {
margin: 5px 0 20px;
}
.proofread-state-perfect {
.desc {
font-size: 18px;
margin-top: 10px;
}
}
.proofread-state-analyzing{
font-size: 18px;
color: #000;
.remain{
font-weight: bold;
}
.remain-time{
margin-top: 10px;
}
.value{
color: #FA674A;
font-size: 20px;
}
.unit{
font-size: 14px;
margin-left: 3px;
}
.control{
color: #979797;
margin-top: 30px;
line-height: 26px;
.small{
font-size: 14px;
}
}
.back-to-document{
margin-top: 30px;
}
}
}
// tihuan
.text-replace-item {
position: relative;
cursor: pointer;
padding: 5px 0;
&:before{
content:' ';
display: none;
position: absolute;
left:-1px;
right:-1px;
bottom: -5px;
top:-5px;
background-color: rgba(253, 102, 67, 0.4);
}
&.replace-type-replace{
padding-bottom: 7px;
--background-image:url(./../../assets/editor/replace.svg);
background-image:var(--background-image);
background-size: 12px 5px;
background-repeat: repeat-x;
background-position:0 26px;
&:after{
//content:'\2000\2000\2000\2000';
//display: block;
//position: absolute;
//left:0;right:0;
//bottom: -7px;
//height: 5px;
//background-image:linear-gradient(135deg, transparent 40%, var(--current-color,#f00), transparent 60%),
//linear-gradient(45deg, transparent 40%, var(--current-color,#f00), transparent 60%);
//background-size: 10px 10px;
//background-repeat: repeat-x;
//background-position: 0 0rem;
}
}
&.text-replace-none{
text-decoration:none;
border-bottom:none;
color: inherit;
cursor: inherit;
}
&.processed-accept{
--current-color:var(--primary-color) !important;
&.replace-type-replace{
--background-image:url(./../../assets/editor/replace-accept.svg);
background-image: var(--background-image);
}
}
&.processed-ignore{
border-color:#c9c9c9 !important;
--current-color:#c9c9c9 !important;
&.replace-type-replace{
--background-image:url(./../../assets/editor/replace-ignore.svg);
background-image: var(--background-image);
}
}
&.replace-type-insert{
--background-image:url(./../../assets/editor/insert.svg);
min-width: 15px;
background-size: 16px 30px;
background-repeat: repeat-x;
background-position: 0 1px;
&:not(.processed){
background-image: var(--background-image);
color: transparent;
&::selection{
color: transparent;
text-decoration-color: #fff;
}
}
&.processed-ignore{
display: none;
}
}
&.selection {
//background-color: rgba(253, 102, 67, 0.4);
background-image: var(--background-image),linear-gradient(to bottom,rgba(253, 102, 67, .4),rgba(253, 102, 67, .4)) !important;
background-size: 12px 5px,100% 28px;
background-position:0 26px,0 0;
&.replace-type-delete,&.replace-type-insert.processed{
background-image: linear-gradient(to bottom,rgba(253, 102, 67, .4),rgba(253, 102, 67, .4)) !important;
background-size: 100% 28px;
background-position: 0 0;
}
&.replace-type-insert:not(.processed){
background-size: 16px 30px,100% 28px;
background-position:0 1px,0 0;
}
}
&.replace-type-delete{
text-decoration: line-through;
text-decoration-color: var(--current-color,#f00);
text-decoration-thickness: 2px;
border-bottom:none;
&.processed-ignore{
border-color:gray !important;
--current-color: gray !important;
//text-decoration:none;
}
}
&.processed {
&.processed-ignore{
//text-decoration:none;
//border-bottom:none;
}
&.processed-delete:not(.processed-delete-init) {
&:before {
//content: attr(data-replace-text);
text-decoration: line-through;
}
}
}
}
.text-replace-item.processed-delete,.replace-type-insert.processed-ignore{
width: 4px;
max-width: 4px;
min-width: 4px;
display: inline-block !important;
height: 30px;
vertical-align: middle;
}
.gov-extra-panel{
span{
display: inline;
}
.link{
text-decoration: underline;
color: #535bf2;
}
}
.collapse-info-panel{
overflow: hidden;
display: flex;
margin:10px 0;
padding: 6px;
border-radius: 2px;
background: #ebebeb;
.arrow-icon{
min-width: 0;
min-width: 20px;
height: 20px;
display: flex;
align-items: center;
justify-content: center;
}
.caret-icon{
transition: transform 0.2s;
transform: rotate(0deg);
}
.content{
flex: 1;
max-width: 100%;
margin-right: 10px;
overflow: hidden;
}
.more-text{
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
&.open{
.caret-icon{
transform: rotate(90deg);
}
.gov-extra-panel{
margin-right: 0;
}
.more-text{
word-break: break-all;
white-space: normal;
overflow: auto;
}
}
}

View File

@ -1,10 +0,0 @@
import { ReactNode,useState } from 'react';
import {CaretRightFilled} from '@ant-design/icons'
export default function CollapseInfo({ children }: { children: ReactNode }) {
const [open, setOpen] = useState(false);
return <div className={`collapse-info-panel ${open?'open':''}`} onClick={()=>setOpen(!open)}>
<span className='arrow-icon'><CaretRightFilled className={'caret-icon'} /></span>
<div className='content'>{children}</div>
</div>;
}

View File

@ -1,45 +0,0 @@
import { ReactNode } from 'react';
import CollapseInfo from './collapse-info.tsx';
import { bridge } from '@/core/bridge.ts';
function GovExtraPanel({ children }: { children: ReactNode }) {
return <div className={'gov-extra-panel'}>
{children}
</div>;
}
// 显示领导人职位
function LeaderInfo({info}:{info: V3.GovInfo}){
return <CollapseInfo><GovExtraPanel>
<div className='more-text'><span></span><span>{info.data?.origin}{info.content}</span></div>
</GovExtraPanel></CollapseInfo>
}
// 语录
function QuotationInfo({info}:{info: V3.GovInfo}){
const showHyperlink = ()=>{
if(!info.data?.link || info.data?.link?.trim().length == 0) return;
bridge.OpenUrlWithOsBrowser(info.data.link)
}
return <>
<CollapseInfo>
<GovExtraPanel><div className='more-text'>{info.content}</div></GovExtraPanel>
</CollapseInfo>
<CollapseInfo>
<GovExtraPanel>
<div>
<span></span>
<span className="link" onClick={showHyperlink}>{info.data?.from}</span>
</div>
</GovExtraPanel>
</CollapseInfo>
</>
}
export function GovExtra({list}:{list: V3.GovInfo[]}) {
return (<>
{list.map((info,idx)=><div key={idx}>
{info.type == 'quotation' && <QuotationInfo info={info} />}
{info.type == 'position' && <LeaderInfo info={info} />}
{info.type == 'leader' && <LeaderInfo info={info} />}
</div>)}
</>)
}

View File

@ -1,77 +0,0 @@
type QuotationResult = {
[key: string]: {
error_type: string;
notice: {
category: string;
content: string;
document_name: string;
hypelink: string;
id: string;
publish_time: string;
source: string;
}
}
}
type PositionResult = {
[key: string]: {
error_type: string;
notice: {
leaders: string[];
position: string;
}
}
}
type LeaderResult = {
[key: string]: {
error_type: string;
notice: {
positions: string[];
correct_name: string;
}
}
}
export function parseLeader(key:string,result: LeaderResult) {
// split by '、' when has leaders
const nameArray = key.split('、')
// if has leaders, return leaders
return nameArray.map(name=>{
const { notice } = result[name];
return {
type:'leader',
content: `${notice.positions.join('、')}`,
data:{
origin: name
}
} as V3.GovInfo
})
}
export function parsePosition(key:string,result: PositionResult) {
const { notice } = result[key];
const position = notice.position.trim()
const noLeader = position.length == 0 || notice.leaders[0] == '该职位组合无对应领导人'
return {
type:'position',
// 如果没有 position 表示 无对应领导人
content: noLeader ? notice.leaders[0] : `担任${position}的有${notice.leaders.join('、')}`,
data:{
origin: key,
source: noLeader?'position-error':''
}
} as V3.GovInfo
}
export function parseQuotation(key:string,result: QuotationResult) {
const { notice } = result[key];
return {
type:'quotation',
content: notice.content,
data:{
origin: notice.category,
from: notice.document_name,
link: notice.hypelink
}
} as V3.GovInfo
}

View File

@ -1,9 +0,0 @@
## 政务校对
### 文档
https://pu7y37y121.feishu.cn/docx/ZAOzdGxRJoYztbxu7k0cAosNnDe
### 说明
给AI校对王增加政务信息的校对包括领导人排序、领导人讲话溯源和落马官员。
##

View File

@ -1,157 +0,0 @@
import React, {CSSProperties} from "react";
import Icon from "@ant-design/icons";
import {cx} from "@emotion/css";
type SvgIconProps = {
size?: number;
className?: string;
style?: CSSProperties;
onClick?: (e: React.MouseEvent<HTMLSpanElement>) => void;
component: React.ComponentType
}
export const SvgIcon: React.FC<SvgIconProps> = (props) => {
const styles: CSSProperties = props.style || {}
if (props.size) {
styles.fontSize = props.size + 'px';
}
return (<Icon
onClick={props.onClick}
className={cx(props.className, `icon-type`)}
style={styles}
component={props.component}
/>);
}
export const IconClose = () => (
// width="28" height="40"
<svg width="28" height="40" viewBox="0 0 28 40" fill="none" xmlns="http://www.w3.org/2000/svg" className="icon">
<path d="M9.5 13L9.5 26" stroke="currentColor" strokeLinecap="round"/>
<path d="M15.5 13L22 19.5L15.5 26" stroke="currentColor" strokeLinecap="round" strokeLinejoin="round"/>
</svg>
)
export const IconOpen = () => (
<svg viewBox="0 0 28 40" fill="none" xmlns="http://www.w3.org/2000/svg" className="icon">
<path d="M17.5 13L12.5 19.5L17.5 26" stroke="currentColor" strokeLinejoin="round"/>
</svg>
)
export const IconArrowRight = () => (
<svg width="1em" height="1em" viewBox="0 0 5 10" fill="none" xmlns="http://www.w3.org/2000/svg" className="icon">
<path d="M0.686285 1.20263L4.37257 4.88892L0.686285 8.5752" stroke="currentColor" strokeLinecap="round"
strokeLinejoin="round"/>
</svg>
)
export const IconDotMore = () => (
<svg width="1em" height="1em" viewBox="0 0 10 2" fill="none" xmlns="http://www.w3.org/2000/svg">
<circle cx="1" cy="1" r="1" fill="currentColor"/>
<circle cx="5" cy="1" r="1" fill="currentColor"/>
<circle cx="9" cy="1" r="1" fill="currentColor"/>
</svg>
)
export const IconArrowDown = () => (
<svg className="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" width="1em"
height="1em">
<path d="M232 392L512 672l280-280z" fill="currentColor"></path>
</svg>
)
export const IconAccept = () => (
<svg className="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" width="1em"
height="1em">
<path
d="M864.554667 268.501333a42.666667 42.666667 0 0 1 0 60.330667L412.032 781.397333a42.453333 42.453333 0 0 1-22.613333 11.818667l-5.034667 0.597333H379.306667a42.496 42.496 0 0 1-27.648-12.416l-211.2-211.2a42.666667 42.666667 0 1 1 60.330666-60.330666l180.992 180.992 422.4-422.4a42.666667 42.666667 0 0 1 60.330667 0z"
fill="currentColor"></path>
</svg>
)
export const IconIgnore = () => (
<svg className="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" width="1em"
height="1em">
<path
d="M853.333333 554.666667H170.666667c-23.466667 0-42.666667-19.2-42.666667-42.666667s19.2-42.666667 42.666667-42.666667h682.666666c23.466667 0 42.666667 19.2 42.666667 42.666667s-19.2 42.666667-42.666667 42.666667z"
fill="currentColor"/>
</svg>
)
export const IconReviewOutlined = () => (
<svg className="icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 44 44" width="1em" height="1em">
<path fillRule="evenodd" stroke="currentColor" strokeWidth="2px" strokeLinecap="butt" strokeLinejoin="miter"
fill="rgb(255, 255, 255)"
d="M9.001,1.000 L33.001,1.000 C37.418,1.000 41.000,4.581 41.000,9.000 L41.000,32.999 C41.000,37.417 37.418,41.000 33.001,41.000 L9.001,41.000 C4.584,41.000 0.999,37.417 0.999,32.999 L0.999,9.000 C0.999,4.581 4.584,1.000 9.001,1.000 Z"/>
<path fillRule="evenodd" stroke="currentColor" strokeWidth="4px" strokeLinecap="round"
strokeLinejoin="round" fill="none"
d="M21.000,10.000 C27.075,10.000 32.000,14.925 32.000,21.000 C32.000,27.075 27.075,32.000 21.000,32.000 C14.925,32.000 10.000,27.075 10.000,21.000 C10.000,14.925 14.925,10.000 21.000,10.000 Z"/>
</svg>
)
export const IconReview = () => (
<svg className="icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 44 44" width="1em" height="1em">
<circle cx="22" cy="22" r="12" stroke="currentColor" strokeWidth="4px" fill="none"/>
</svg>
)
export const IconPlus = () => (
<svg className="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" width="1em"
height="1em" fill="currentColor">
<path
d="M480.256 128h64c5.632 0 8.704 3.072 8.704 8.704v751.104c0 5.632-3.072 8.704-8.704 8.704H480.256c-5.632 0-8.704-3.072-8.704-8.704V136.704c0-5.632 2.56-8.704 8.704-8.704z"
></path>
<path
d="M153.6 471.552h716.8c5.632 0 8.704 3.072 8.704 8.704v64c0 5.632-3.072 8.704-8.704 8.704H153.6c-5.632 0-8.704-3.072-8.704-8.704V480.256c0-6.144 3.072-8.704 8.704-8.704z"
></path>
<path d="M471.552 128h84.48v768H471.552z"></path>
<path d="M144.896 554.496V470.016h733.696v84.48z"></path>
</svg>
)
export const IconRollback = () => (
<svg className="icon" width="1em" height="1em" viewBox="0 0 15 14" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M11.26 2.39797H5.07156V1.13664C5.07156 1.02243 4.95996 0.959368 4.8846 1.02925L2.82663 2.9383C2.81277 2.95105 2.80157 2.96735 2.79386 2.98596C2.78615 3.00456 2.78215 3.02499 2.78215 3.04568C2.78215 3.06638 2.78615 3.0868 2.79386 3.10541C2.80157 3.12401 2.81277 3.14031 2.82663 3.15307L4.8846 5.06211C4.95996 5.132 5.07156 5.06893 5.07156 4.95473V3.6934H11.0861V11.7046H2.30344C2.23967 11.7046 2.1875 11.7659 2.1875 11.8409V12.8636C2.1875 12.9386 2.23967 13 2.30344 13H11.26C11.7716 13 12.1875 12.5108 12.1875 11.9091V3.48885C12.1875 2.88716 11.7716 2.39797 11.26 2.39797Z" fill="currentColor"/>
</svg>
)
export const IconRollbackOld = () => (
<svg className="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" width="1em"
height="1em">
<path
d="M328.832 183.168a42.666667 42.666667 0 0 1 0 60.330667L188.330667 384l140.501333 140.501333a42.666667 42.666667 0 1 1-60.330667 60.330667l-170.666666-170.666667a42.666667 42.666667 0 0 1 0-60.330666l170.666666-170.666667a42.666667 42.666667 0 0 1 60.330667 0z"
fill="currentColor"/>
<path
d="M85.333333 384a42.666667 42.666667 0 0 1 42.666667-42.666667h554.666667a256 256 0 0 1 0 512h-213.333334a42.666667 42.666667 0 1 1 0-85.333333h213.333334a170.666667 170.666667 0 0 0 0-341.333333H128a42.666667 42.666667 0 0 1-42.666667-42.666667z"
fill="currentColor"/>
</svg>
)
export const IconRollbackCircle = () => (
<svg className="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" width="1em"
height="1em">
<path
d="M48 32c26.496 0 48 21.504 48 48v133.6C191.296 80.32 344.576 0 512 0c282.304 0 512 229.696 512 512s-229.696 512-512 512c-208.096 0-393.952-124.32-473.408-316.672-5.056-12.256-4.672-25.376 0.032-36.704 4.672-11.36 13.76-20.928 26.016-25.984 12.224-5.056 25.344-4.672 36.704 0.032 11.328 4.704 20.896 13.792 25.984 26.016C191.904 827.008 342.88 928 512 928c229.376 0 416-186.624 416-416S741.376 96 512 96c-143.552 0-274.24 72.704-350.368 192H304c26.496 0 48 21.504 48 48s-21.504 48-48 48H48c-26.496 0-48-21.504-48-48V80c0-26.496 21.504-48 48-48z"
fill="currentColor" />
</svg>
)
export const IconMinus = () => (
<svg className="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" width="1em"
height="1em">
<path d="M64 576h896V448H64z" fill="currentColor" />
</svg>
)
export const IconCheckOutline = () => (
<svg className="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" width="1em"
height="1em">
<path
d="M369.792 704.32L930.304 128 1024 223.616 369.984 896l-20.288-20.864-0.128 0.128L0 516.8 96.128 423.68l273.664 280.64z"
fill="currentColor" />
</svg>
)
export const IconDotMore2 = ()=>(
<svg width="1em" height="1em" viewBox="0 0 9 2" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M0.256836 0.666667C0.256836 0.754215 0.27408 0.840905 0.307583 0.921789C0.341086 1.00267 0.390192 1.07617 0.452098 1.13807C0.514004 1.19998 0.587497 1.24908 0.66838 1.28259C0.749264 1.31609 0.835955 1.33333 0.923503 1.33333C1.01105 1.33333 1.09774 1.31609 1.17862 1.28259C1.25951 1.24908 1.333 1.19998 1.39491 1.13807C1.45681 1.07617 1.50592 1.00267 1.53942 0.921789C1.57293 0.840905 1.59017 0.754215 1.59017 0.666667C1.59017 0.579119 1.57293 0.492428 1.53942 0.411544C1.50592 0.330661 1.45681 0.257168 1.39491 0.195262C1.333 0.133356 1.25951 0.0842502 1.17862 0.0507471C1.09774 0.017244 1.01105 0 0.923503 0C0.835955 0 0.749264 0.017244 0.66838 0.0507471C0.587497 0.0842502 0.514004 0.133356 0.452098 0.195262C0.390192 0.257168 0.341086 0.330661 0.307583 0.411544C0.27408 0.492428 0.256836 0.579119 0.256836 0.666667ZM3.59017 0.666667C3.59017 0.843478 3.66041 1.01305 3.78543 1.13807C3.91046 1.2631 4.08002 1.33333 4.25684 1.33333C4.43365 1.33333 4.60322 1.2631 4.72824 1.13807C4.85326 1.01305 4.9235 0.843478 4.9235 0.666667C4.9235 0.489856 4.85326 0.320286 4.72824 0.195262C4.60322 0.0702377 4.43365 0 4.25684 0C4.08002 0 3.91046 0.0702377 3.78543 0.195262C3.66041 0.320286 3.59017 0.489856 3.59017 0.666667ZM6.9235 0.666667C6.9235 0.843478 6.99374 1.01305 7.11876 1.13807C7.24379 1.2631 7.41336 1.33333 7.59017 1.33333C7.76698 1.33333 7.93655 1.2631 8.06157 1.13807C8.1866 1.01305 8.25684 0.843478 8.25684 0.666667C8.25684 0.489856 8.1866 0.320286 8.06157 0.195262C7.93655 0.0702377 7.76698 0 7.59017 0C7.41336 0 7.24379 0.0702377 7.11876 0.195262C6.99374 0.320286 6.9235 0.489856 6.9235 0.666667Z" fill="currentColor"/>
</svg>
)
export const IconStartProofread = () => (
<svg className="icon" width="1em" height="1em" viewBox="0 0 14 14" fill="none" xmlns="http://www.w3.org/2000/svg">
<path
d="M8.63496 9.45299C8.6234 9.43689 8.60814 9.4238 8.59047 9.41482C8.57279 9.40585 8.55322 9.40126 8.5334 9.40142H7.84277C7.74121 9.40142 7.68184 9.51705 7.74121 9.59986L8.89434 11.1952C8.94434 11.2639 9.0459 11.2639 9.0959 11.1952L10.8803 8.72642C10.9396 8.64361 10.8803 8.52799 10.7787 8.52799H10.0865C10.0459 8.52799 10.0084 8.54674 9.98496 8.57955L8.99277 9.95142L8.63496 9.45299ZM9.31152 3.77799V3.02798C9.31152 2.95923 9.25527 2.90298 9.18652 2.90298H3.18652C3.11777 2.90298 3.06152 2.95923 3.06152 3.02798V3.77799C3.06152 3.84674 3.11777 3.90299 3.18652 3.90299H9.18652C9.25527 3.90299 9.31152 3.84674 9.31152 3.77799ZM3.18652 5.15299C3.11777 5.15299 3.06152 5.20924 3.06152 5.27799V6.02799C3.06152 6.09674 3.11777 6.15299 3.18652 6.15299H6.06152C6.13027 6.15299 6.18652 6.09674 6.18652 6.02799V5.27799C6.18652 5.20924 6.13027 5.15299 6.06152 5.15299H3.18652ZM6.06152 12.3092H1.81152V1.30923H10.5615V5.93424C10.5615 6.00299 10.6178 6.05924 10.6865 6.05924H11.5615C11.6303 6.05924 11.6865 6.00299 11.6865 5.93424V0.684235C11.6865 0.407672 11.4631 0.184235 11.1865 0.184235H1.18652C0.909961 0.184235 0.686523 0.407672 0.686523 0.684235V12.9342C0.686523 13.2108 0.909961 13.4342 1.18652 13.4342H6.06152C6.13027 13.4342 6.18652 13.378 6.18652 13.3092V12.4342C6.18652 12.3655 6.13027 12.3092 6.06152 12.3092ZM12.3521 7.29674L9.35215 6.25455C9.33809 6.24986 9.32559 6.2483 9.31152 6.2483C9.29746 6.2483 9.2834 6.24986 9.2709 6.25455L6.2709 7.29674C6.24639 7.30506 6.22509 7.32082 6.20996 7.34183C6.19484 7.36284 6.18665 7.38804 6.18652 7.41392V11.3374C6.18652 11.3764 6.20371 11.4124 6.23496 11.4358L9.23496 13.7827C9.25684 13.7999 9.28496 13.8092 9.31152 13.8092C9.33809 13.8092 9.36621 13.7999 9.38809 13.7827L12.3881 11.4358C12.4178 11.4124 12.4365 11.3764 12.4365 11.3374V7.41392C12.4365 7.3608 12.4021 7.31392 12.3521 7.29674ZM11.4678 10.9295L9.31152 12.6155L7.15527 10.9295V8.01236L9.31152 7.26236L11.4678 8.01236V10.9295Z"
fill="currentColor"/>
</svg>
)

View File

@ -1,8 +0,0 @@
export default function ArrowIcon() {
return (<svg width='10' height='10' viewBox='0 0 10 10' fill='none' xmlns='http://www.w3.org/2000/svg'>
<path
d='M7.5 4.13397C8.16667 4.51888 8.16667 5.48113 7.5 5.86603L1.5 9.33013C0.833334 9.71503 5.06336e-07 9.2339 5.39985e-07 8.4641L8.42827e-07 1.5359C8.76476e-07 0.766098 0.833334 0.284973 1.5 0.669873L7.5 4.13397Z'
fill='#666666' />
</svg>
);
}

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 1.1 MiB

View File

@ -1,47 +0,0 @@
import React from "react";
export const IconLogo = ({style}:{style?:React.CSSProperties}) => (
<svg style={style} width="2em" height="0.9em" viewBox="0 0 207 94" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M81.3939 69.9675V23.3448L40.697 0L0 23.3448V69.9675L40.697 93.3123L81.3939 69.9675Z"
fill="url(#paint0_linear_2366_40336)"/>
<path d="M76.7295 60.4416H79.0956L81.7997 37.4322H79.366L76.7295 60.4416Z" fill="black"/>
<path d="M112.425 31.5288H104.38L103.569 28.7114H101.135L101.946 31.5288H93.4282V34.2792H112.425V31.5288Z"
fill="black"/>
<path d="M98.9711 35.2855H96.4698L93.2925 43.6708H95.7262L98.9711 35.2855Z" fill="black"/>
<path
d="M92.8188 32.7363H85.9909V28.7114H83.6248V32.7363H76.9321V35.4867H83.6248V61.7161H85.9909V35.4867H92.8188V32.7363Z"
fill="black"/>
<path d="M107.016 35.2855L110.193 43.6708H112.694L109.449 35.2855H107.016Z" fill="black"/>
<path
d="M108.3 56.4837C107.016 55.6787 105.867 54.8737 104.852 54.0016C105.799 53.0625 106.61 52.0562 107.286 51.1171C108.03 50.1108 108.638 49.1716 109.111 48.3667C109.585 47.4946 109.99 46.7567 110.193 46.1529C110.464 45.4821 110.599 45.0125 110.734 44.6771L110.802 44.4758H108.368L108.3 44.61C107.962 45.3479 107.421 46.3542 106.475 47.9642C105.664 49.3058 104.447 50.7816 102.96 52.3245C101.472 50.7816 100.255 49.3058 99.4442 47.9642C98.4978 46.3542 97.957 45.3479 97.619 44.61L97.5514 44.4758H95.1177L95.1853 44.6771C95.3205 45.0125 95.4557 45.4821 95.7261 46.1529C95.9965 46.7567 96.4021 47.5617 96.8753 48.3667C97.3486 49.1716 97.957 50.1108 98.633 51.1171C99.309 52.0562 100.12 53.0625 101.067 54.0687C100.053 54.9408 98.9034 55.7458 97.619 56.5508C96.3345 57.3558 94.7796 58.1608 93.1572 58.8987L93.022 58.9658V61.9174L93.2924 61.8503C95.3205 60.9782 97.1458 60.0391 98.7682 59.0328C100.323 58.0266 101.743 57.0203 102.96 55.947C104.176 57.0203 105.529 58.0937 107.083 59.0328C108.706 60.0391 110.531 60.9782 112.627 61.8503L112.897 61.9174V58.9658L112.762 58.8987C111.14 58.0937 109.652 57.2887 108.3 56.4837Z"
fill="black"/>
<path d="M90.2506 37.4322H87.9521L90.5887 60.4416H92.9548L90.2506 37.5663V37.4322Z" fill="black"/>
<path d="M145.618 38.7738H143.116L145.956 54.9408H148.389L145.618 38.7738Z" fill="black"/>
<path
d="M157.312 29.1139H154.946V32.8034H140.479V35.6209H154.946V58.0266C154.946 58.2949 154.878 58.4962 154.676 58.7645C154.54 58.9657 154.338 59.0999 154.135 59.0999H148.051V61.9174H154.135C155.014 61.9174 155.825 61.5149 156.433 60.7099C157.042 59.9049 157.38 59.0328 157.38 57.8924V35.688H160.151V32.8705H157.38V29.1139H157.312Z"
fill="black"/>
<path
d="M137.37 54.6054C136.288 53.2637 135.274 51.855 134.395 50.5133C135.612 48.2996 136.626 46.0858 137.302 43.9392C137.978 41.7925 138.451 39.9142 138.789 38.2371C139.128 36.5601 139.263 35.2184 139.33 34.1451C139.398 33.0718 139.398 32.468 139.398 32.2668V30.858H125.134V33.6755H136.829C136.761 34.2793 136.694 35.0172 136.559 35.9563C136.423 36.9626 136.221 38.1701 135.95 39.4446C135.68 40.7192 135.274 42.128 134.733 43.6709C134.26 45.0796 133.652 46.5554 132.908 48.0312C132.232 46.8238 131.691 45.6163 131.218 44.4759C130.677 43.2013 130.204 41.9938 129.866 40.8534C129.528 39.713 129.19 38.6396 128.987 37.7005C128.784 36.7613 128.581 35.8892 128.446 35.1513V35.0172H126.013V35.2184C126.148 36.0905 126.351 37.0297 126.621 38.1701C126.891 39.3105 127.229 40.518 127.635 41.8596C128.041 43.2013 128.581 44.61 129.257 46.0858C129.866 47.5617 130.677 49.1046 131.556 50.5804C130.745 51.9221 129.798 53.3308 128.717 54.6725C127.635 56.0141 126.351 57.4229 124.931 58.6974L124.863 58.7645V62.2528L125.134 61.9845C126.824 60.5087 128.379 58.9658 129.663 57.4229C130.88 55.947 132.029 54.4041 132.976 52.9283C133.922 54.4041 135.071 55.947 136.356 57.4229C137.708 58.9658 139.263 60.5087 140.953 61.9845L141.223 62.2528V58.7645L141.156 58.6974C139.804 57.3558 138.519 55.947 137.37 54.6054Z"
fill="black"/>
<path
d="M190.911 59.167V45.8846H205.919V43.1342H190.911V32.468H206.797V29.5834H172.388V32.468H188.274V43.1342H173.266V45.8846H188.274V59.167H172.117V61.9845H207V59.167H190.911Z"
fill="black"/>
<path
d="M17.1714 61.7833H20.2811L24.6077 51.788H38.1283L42.4549 61.7833H45.5646L31.368 28.7115L17.1714 61.7833ZM36.979 49.0376H25.757L31.368 35.9564L36.979 49.0376Z"
fill="black"/>
<path d="M58.5444 29.9189H55.5698V61.7833H58.5444V29.9189Z" fill="black"/>
<defs>
<linearGradient id="paint0_linear_2366_40336" x1="81.4256" y1="46.6327" x2="-0.00259662" y2="46.6327"
gradientUnits="userSpaceOnUse">
<stop offset="0.1" stopColor="white" stopOpacity="0"/>
<stop offset="0.1877" stopColor="#F3EADD" stopOpacity="0.0975"/>
<stop offset="0.3016" stopColor="#E6D4B8" stopOpacity="0.224"/>
<stop offset="0.4208" stopColor="#DCC199" stopOpacity="0.3565"/>
<stop offset="0.5453" stopColor="#D3B281" stopOpacity="0.4948"/>
<stop offset="0.677" stopColor="#CEA870" stopOpacity="0.6411"/>
<stop offset="0.8209" stopColor="#CAA266" stopOpacity="0.8009"/>
<stop offset="1" stopColor="#C9A063"/>
</linearGradient>
</defs>
</svg>
)

View File

@ -1,391 +0,0 @@
export const ErrorNotice = ()=>(
<svg width="260" height="231" viewBox="0 0 260 231" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M129.938 220.959C201.7 220.959 259.875 187.144 259.875 145.43C259.875 103.717 201.7 69.9013 129.938 69.9013C58.1751 69.9013 0 103.717 0 145.43C0 187.144 58.1751 220.959 129.938 220.959Z" fill="white"/>
<path d="M86.544 139.325C97.1855 146.203 97.6191 157.556 86.9777 164.433C76.3362 171.311 58.646 171.106 48.0045 164.229C37.3631 157.352 37.3631 146.203 48.0045 139.325C58.646 132.448 75.9025 132.448 86.544 139.325Z" fill="#E6E6E6"/>
<path d="M138.422 153.811L173.355 176.385C174.446 177.09 174.446 178.234 173.355 178.939L138.422 201.513C137.331 202.218 135.56 202.218 134.469 201.513L117.272 190.4L101.499 200.588C99.7093 201.743 97.4084 202.32 95.1121 202.32C92.8158 202.32 90.5149 201.743 88.7254 200.583L77.0385 193.031L76.4803 191.636L77.9515 191.264L89.6384 198.815C92.656 200.762 97.5682 200.767 100.586 198.815L115.445 189.22L99.5358 178.939C98.4447 178.234 98.4447 177.09 99.5358 176.385L134.469 153.811C135.56 153.106 137.331 153.106 138.422 153.811Z" fill="#F0F0F0"/>
<path d="M64.265 180.763C64.265 181.831 64.9727 182.879 66.2646 183.712L72.1081 187.488L70.9229 188.082L71.195 189.255L65.3516 185.48C63.4753 184.269 62.439 182.593 62.439 180.763C62.439 178.939 63.4707 177.263 65.3516 176.047L86.0639 162.66C86.4976 162.374 87.0591 162.543 87.3102 163.033C87.5613 163.519 87.4152 164.147 86.9769 164.428L66.2646 177.815C64.9772 178.648 64.265 179.696 64.265 180.763Z" fill="#F0F0F0"/>
<path d="M157.014 128.126C156.548 128.126 156.078 128.243 155.713 128.478L113.581 155.707C113.188 155.957 112.974 156.31 112.974 156.693C112.974 157.076 113.188 157.429 113.581 157.679L123.515 164.096L123.743 163.652L113.809 157.234C113.572 157.081 113.43 156.882 113.43 156.688C113.43 156.494 113.567 156.299 113.809 156.141L155.941 128.912C156.521 128.534 157.503 128.534 158.087 128.912L166.172 134.139L166.4 133.695L158.315 128.468C157.95 128.248 157.48 128.126 157.014 128.126Z" fill="#FAAD14"/>
<path d="M157.014 123.333C156.548 123.333 156.078 123.45 155.713 123.685L106.162 155.707C105.769 155.957 105.555 156.309 105.555 156.693C105.555 157.076 105.769 157.428 106.162 157.679L119.812 166.498L120.04 166.053L106.39 157.234C106.153 157.081 106.011 156.882 106.011 156.688C106.011 156.493 106.148 156.299 106.39 156.141L155.941 124.12C156.521 123.747 157.502 123.741 158.086 124.12L169.883 131.743L170.111 131.298L158.315 123.675C157.949 123.45 157.479 123.333 157.014 123.333Z" fill="#FAAD14"/>
<path d="M157.014 118.54C156.548 118.54 156.078 118.658 155.713 118.893L98.7434 155.707C98.3508 155.957 98.1362 156.31 98.1362 156.693C98.1362 157.076 98.3508 157.429 98.7434 157.679L116.1 168.894L116.329 168.45L98.9717 157.239C98.7343 157.086 98.5928 156.887 98.5928 156.693C98.5928 156.504 98.7297 156.304 98.9717 156.146L155.941 119.332C156.521 118.954 157.502 118.954 158.086 119.332L173.59 129.352L173.818 128.907L158.315 118.887C157.949 118.658 157.479 118.54 157.014 118.54Z" fill="#FAAD14"/>
<path d="M53.1406 148.513C54.5878 149.499 56.5097 149.54 58.3221 148.824L59.7145 138.11L53.3004 136.275L53.1406 148.513Z" fill="#FFA8A7"/>
<path d="M63.4531 158.783C63.6083 158.967 63.5125 160.305 63.3162 160.617C63.1062 160.944 62.0196 161.94 59.9973 161.981C58.0662 162.022 56.3588 161.624 55.2677 160.755C54.1766 159.881 53.6699 158.967 53.6242 157.73C53.5786 156.494 53.7566 155.318 53.2773 154.343C52.8345 153.443 52.2319 152.554 52.0858 152.069C51.7708 151.016 52.0766 149.427 52.0766 149.427L63.4531 158.783Z" fill="#7F5204"/>
<path d="M58.765 148.369C58.7742 148.829 58.8244 149.284 58.934 149.749C59.1668 150.72 59.5503 151.639 59.9839 152.518C60.2076 152.973 60.445 153.418 60.7281 153.837C61.2713 154.649 61.9652 155.329 62.545 156.11C63.1248 156.892 63.6042 157.827 63.6087 158.829C63.6087 160.525 61.9424 161 60.6687 161.174C59.3083 161.363 57.8748 161.194 56.5783 160.699C55.1357 160.147 54.1405 158.813 53.9761 157.163C53.9305 156.688 53.9761 156.212 53.9488 155.737C53.8894 154.654 53.4375 153.637 52.917 152.707C52.6157 152.166 52.2825 151.639 52.0953 151.042C51.7529 149.974 52.1227 148.814 52.424 147.787C52.6842 146.898 52.8942 145.83 53.1727 145.932C53.1635 146.116 53.1635 146.51 53.1635 146.51C53.2457 146.709 53.4466 146.857 53.4968 147.087C53.547 147.327 53.6064 147.567 53.6931 147.797C53.8255 148.145 54.0355 148.472 54.3231 148.666C54.3733 148.027 54.4235 147.393 54.4738 146.755C54.4874 146.556 54.5103 146.346 54.6335 146.203C54.7568 146.055 54.9485 146.024 55.1266 145.999C56.204 145.84 57.2996 145.682 58.3724 145.896C58.5322 145.927 58.7103 145.978 58.797 146.137C58.87 146.264 58.8609 146.423 58.8472 146.571C58.797 147.184 58.7513 147.777 58.765 148.369Z" fill="#FFF1B8"/>
<path d="M60.1711 152.886C59.6324 152.381 58.3724 152.299 57.6785 152.34C56.8111 152.391 56.0944 152.687 55.6835 152.989C55.5009 153.121 55.2544 153.086 55.1083 152.902C54.9303 152.687 54.9668 152.35 55.1859 152.186C55.6242 151.864 56.4094 151.425 57.432 151.405C59.1348 151.374 59.6142 151.727 59.6142 151.727C59.6142 151.727 60.3629 152.34 60.1711 152.886Z" fill="#D48806"/>
<path d="M61.3811 154.7C60.6964 154.189 59.3085 154.174 58.6146 154.215C57.7472 154.266 57.0853 154.608 56.6699 154.91C56.4872 155.042 56.2407 155.002 56.0946 154.823C55.9166 154.608 55.9531 154.271 56.1723 154.107C56.6105 153.785 57.4459 153.275 58.4731 153.254C60.1759 153.223 60.5959 153.637 60.5959 153.637C60.5959 153.637 61.299 153.99 61.3811 154.7Z" fill="#D48806"/>
<path d="M56.8482 149.555C58.026 149.488 58.5145 149.667 58.971 149.882C59.2586 150.086 59.4321 150.628 59.2312 150.75C58.866 150.495 58.1904 150.357 57.3549 150.347C56.7934 150.342 56.0812 150.551 55.4923 150.802C55.3417 150.863 55.1682 150.955 55.013 151.042C54.803 151.154 54.5519 151.052 54.4652 150.812C54.3921 150.613 54.4652 150.383 54.6386 150.28C55.0632 150.025 55.8941 149.606 56.8482 149.555Z" fill="#D48806"/>
<path d="M71.1556 144.481C72.2695 147.603 74.0134 146.642 76.6704 144.844L77.0721 134.185L70.311 133.485L71.1556 144.481Z" fill="#FFA8A7"/>
<path d="M86.8687 151.997C87.0103 152.376 86.9281 153.07 86.7227 153.5C86.5127 153.929 84.399 155.099 81.637 154.726C78.8751 154.348 77.0353 152.984 76.0127 152.14C74.9947 151.292 73.899 151.083 72.534 150.909C71.1644 150.74 70.1373 150.204 69.8679 149.468C69.6032 148.732 70.0095 147.516 70.0095 147.516L86.8687 151.997Z" fill="#7F5204"/>
<path d="M76.1133 142.172C76.369 142.121 76.579 142.034 76.8483 141.942C76.9807 141.896 77.1314 141.85 77.2592 141.911C77.4327 141.998 77.492 142.233 77.5286 142.443C77.6062 142.867 77.6199 143.413 77.7659 143.807C77.8983 144.164 78.2544 144.507 78.5009 144.767C79.1446 145.442 79.8888 145.989 80.642 146.5C81.5231 147.097 82.3859 147.573 83.299 148.099C84.2303 148.635 85.4811 149.003 86.1979 149.611C87.2479 150.495 87.2889 152.565 86.0107 153.305C84.9105 153.944 82.0618 154.537 79.1538 153.423C77.5696 152.815 75.8805 150.786 73.7805 150.475C72.4429 150.275 70.6625 150.04 69.8545 148.85C69.5577 148.324 69.8179 146.862 70.0553 145.125C70.2699 143.572 70.4662 141.145 70.9044 141.303L70.941 141.773C70.941 141.773 71.3427 142.315 71.4751 142.494C71.5892 142.652 71.7216 142.749 71.8494 142.892C72.0138 143.071 72.1416 143.275 72.3242 143.439C72.5434 143.638 72.8127 143.786 73.0957 143.802C73.2281 143.807 73.3697 143.781 73.4838 143.71C73.712 143.562 73.7394 143.229 73.9266 143.02C74.1366 142.785 74.3968 142.601 74.6707 142.478C75.0588 142.31 75.4696 142.238 75.8805 142.202C75.9673 142.197 76.0403 142.182 76.1133 142.172Z" fill="#FFF1B8"/>
<path d="M79.4287 145.611C79.4287 145.611 79.2644 145.023 78.4746 144.808C77.872 144.645 76.7672 145.084 76.0687 145.662C75.7811 145.897 75.7948 146.382 76.0961 146.592C76.2742 146.719 76.5024 146.699 76.6713 146.556C77.1324 146.152 78.155 145.432 79.4287 145.611Z" fill="#D48806"/>
<path d="M81.2623 146.908C81.2623 146.908 80.9017 146.193 80.121 146.162C80.121 146.162 78.5232 146.116 77.4914 147.087C77.2267 147.333 77.2221 147.782 77.5143 147.987C77.6878 148.109 77.9069 148.094 78.0667 147.951C78.5323 147.527 79.4682 146.648 81.2623 146.908Z" fill="#D48806"/>
<path d="M83.2988 148.104C83.2988 148.104 82.888 147.455 82.1073 147.419C82.1073 147.419 80.6191 147.394 79.5828 148.359C79.318 148.605 79.3134 149.054 79.6056 149.259C79.7791 149.381 79.9982 149.366 80.158 149.223C80.6282 148.804 81.5047 147.843 83.2988 148.104Z" fill="#D48806"/>
<path d="M52.9586 119.746C53.164 114.6 54.141 111.923 54.2825 110.498C54.2825 110.498 54.6568 82.196 55.2731 73.6018L77.9165 72.5237C78.2498 81.7003 78.5511 106.43 78.3776 109.7C78.2087 112.833 77.072 140 77.072 140C73.8718 141.114 70.4661 139.509 70.4661 139.509C70.4661 139.509 68.567 124.058 68.2566 120.65C67.8548 116.241 68.4711 111.448 68.4711 111.448L67.024 89.4413C67.024 89.4413 65.2755 106.502 64.4081 112.93C63.4175 120.292 59.1764 143.117 59.1764 143.117C56.1223 143.97 53.1458 142.493 53.1458 142.493C53.1458 142.493 52.6618 127.201 52.9586 119.746Z" fill="#D48806"/>
<path d="M67.0195 89.4363L67.4487 86.4064C68.768 86.1867 72.1097 83.8516 74.0865 81.8129C74.0865 81.8129 72.2969 85.2056 68.5352 87.5407L68.4667 111.448L67.0195 89.4363Z" fill="black" fillOpacity="0.4"/>
<path d="M76.3056 57.6143C74.7671 53.6851 72.1193 47.0683 72.1193 47.0683L71.4482 36.3127C71.4482 36.3127 72.9502 36.3536 74.3745 36.604C75.8034 36.8543 78.0587 38.377 79.095 41.2485C79.8619 43.3792 83.8747 56.3778 83.8747 56.3778L90.8595 52.2544C92.649 50.9821 93.279 48.8719 94.4249 47.6763C95.5662 46.4807 96.7212 46.2763 97.9721 45.3004C99.2229 44.3245 99.7388 43.5427 100.054 44.5186C100.373 45.4945 98.9581 46.9916 98.7025 47.3646C98.4468 47.7376 97.0544 48.5347 98.8075 48.6369C100.565 48.7391 104.108 46.8281 104.957 46.5011C105.806 46.1741 105.728 47.3033 105.29 47.9982C104.847 48.6982 104.802 50.7522 104.062 51.907C103.277 53.1333 102.852 53.6595 101.168 54.3851C99.6018 55.0647 96.356 55.2333 94.6851 56.3165C93.0142 57.3946 88.9695 61.4873 86.2714 63.5873C82.6512 66.4078 80.6152 66.5917 79.1954 64.3435C77.771 62.1004 76.8443 58.999 76.3056 57.6143Z" fill="#FFA8A7"/>
<path d="M70.5034 36.1083C72.8728 35.9039 75.6712 36.0674 77.2234 37.6514C78.456 38.9134 78.9216 39.7207 80.3003 44.0536C81.2316 46.9813 83.1673 53.7259 83.1673 53.7259C83.1673 53.7259 79.0586 54.5434 76.2967 58.4267L71.8456 47.2317L70.5034 36.1083Z" fill="#FFD666"/>
<path d="M83.8658 56.3777C82.3182 56.996 81.2865 58.2121 80.9121 58.9121C80.9121 58.9121 81.0765 56.858 83.6375 55.6471L83.8658 56.3777Z" fill="#F28F8F"/>
<path d="M64.8198 35.6278C64.8198 35.6278 63.295 35.5 61.4826 36.0365C59.3963 36.6548 55.6574 37.83 55.6574 37.83C54.4705 38.5198 54.0048 40.8242 53.74 42.1424C52.8818 46.3731 55.1279 55.9585 55.4565 59.6629C55.7807 63.3724 55.0731 74.7973 55.0731 74.7973C57.625 78.1032 71.453 80.3002 78.1867 74.7973C78.1867 74.7973 78.4789 48.6008 77.8169 44.8402C76.8126 39.1533 75.3243 36.4504 70.0698 36.1081L64.8198 35.6278Z" fill="#F5F5F5"/>
<path d="M67.7732 21.5709L66.2712 22.5009C66.0475 22.0155 66.2073 21.4177 66.6227 21.1622C67.0382 20.9067 67.5495 21.0906 67.7732 21.5709Z" fill="#263238"/>
<path d="M74.3012 22.2507L72.9316 21.0704C73.2101 20.631 73.7442 20.539 74.1232 20.866C74.5021 21.1879 74.5797 21.8113 74.3012 22.2507Z" fill="#263238"/>
<path d="M60.8717 16.2214C60.8717 16.2214 59.2556 16.4718 58.6621 17.836C58.1463 19.0214 58.3334 21.8828 59.0182 24.9996C59.703 28.1164 60.3513 29.9967 60.7576 30.8602C61.1593 31.7237 61.9902 31.9638 61.9902 31.9638L61.908 28.2645L61.7893 25.6842C61.7893 25.6842 63.2684 23.4258 63.4282 21.5711C63.6382 19.1901 63.1908 18.2141 63.1908 18.2141L60.8717 16.2214Z" fill="#263238"/>
<path d="M63.4781 19.8031C63.4872 23.6199 66.2628 26.7009 69.6685 26.6907C73.0787 26.6805 75.6306 23.5483 75.6215 19.7315C75.6124 15.9147 73.0376 12.8592 69.6274 12.8746C66.2218 12.8848 63.4644 15.9863 63.4781 19.8031Z" fill="#263238"/>
<path d="M61.8761 25.2753C61.3191 25.8169 60.8672 24.4169 60.4015 23.8753C59.9359 23.3337 58.4111 22.5928 57.6578 24.3812C56.8909 26.2053 58.3243 28.7753 59.493 29.2812C60.7622 29.8279 61.4835 28.6016 61.4835 28.6016V36.8024C63.2411 40.3433 66.3408 40.236 67.9934 40.0367C69.6506 39.8374 70.0113 37.9112 68.8015 36.3579L68.7878 33.8235C68.7878 33.8235 70.6595 34.1352 71.568 33.9717C73.0836 33.706 73.878 32.4235 74.3345 30.5841C75.0649 27.6308 75.3571 22.6593 74.3436 16.9213C72.6454 15.4497 66.7517 15.695 63.1863 18.2242C63.4511 23.3082 62.433 24.7388 61.8761 25.2753Z" fill="#FFA8A7"/>
<path d="M74.6268 14.0192C74.8551 12.9565 74.9601 11.8579 74.9327 10.7645C74.9235 10.3302 74.8368 9.80901 74.4807 9.65062C74.1338 9.49733 73.764 9.78346 73.4536 10.0185C72.1388 11.0097 70.5044 11.2908 68.9203 11.3879C66.1903 11.5565 61.9949 11.3572 60.6025 14.7141C60.2145 15.6441 60.1506 16.6251 60.9129 17.2689C61.5658 17.8156 62.3966 18.066 63.191 18.2193C64.5742 18.4901 65.9484 18.8273 67.3408 19.0368C68.7605 19.2463 70.4131 19.4558 71.8101 18.9704C72.9833 18.5667 74.1703 18.2193 75.0468 17.1769C75.7955 16.2828 76.2338 15.0616 76.2429 13.8353C76.2429 13.6616 76.2064 13.4419 76.0557 13.401C75.9781 13.3806 75.9005 13.4163 75.8275 13.4521C75.4303 13.636 75.0285 13.8302 74.6268 14.0192Z" fill="#263238"/>
<path d="M68.792 33.8186C68.792 33.8186 65.4001 33.0675 64.2177 32.3675C63.4233 31.8974 62.7705 31.085 62.5742 30.5587C62.5742 30.5587 62.7979 31.6828 63.5101 32.6945C64.3775 33.931 68.7966 34.8251 68.7966 34.8251L68.792 33.8186Z" fill="#F28F8F"/>
<path d="M68.1066 24.0853C68.1066 24.5758 67.7688 24.9692 67.3488 24.9692C66.9288 24.9692 66.5864 24.5758 66.5864 24.0853C66.5864 23.5948 66.9243 23.2013 67.3443 23.2013C67.7642 23.2013 68.1066 23.5999 68.1066 24.0853Z" fill="#263238"/>
<path d="M69.7321 29.9866C69.7321 30.4465 68.9336 29.9154 68.5409 29.9154C68.1438 29.9154 67.2446 30.4465 67.2446 29.9866C67.2446 29.5268 68.0935 29.1538 68.4861 29.1538C68.8833 29.1538 69.7321 29.5268 69.7321 29.9866Z" fill="#B16668"/>
<path d="M67.1485 21.4028L65.5781 22.5115C65.3133 22.0057 65.4457 21.3466 65.8794 21.04C66.3176 20.7334 66.8837 20.8969 67.1485 21.4028Z" fill="#263238"/>
<path d="M72.695 20.3195L74.3476 21.1473C74.1605 21.6684 73.6355 21.9086 73.1789 21.6838C72.7224 21.4487 72.5078 20.8407 72.695 20.3195Z" fill="#263238"/>
<path d="M73.567 23.8299C73.567 24.2999 73.2383 24.6832 72.8366 24.6832C72.4303 24.6832 72.1016 24.2999 72.1016 23.8299C72.1016 23.3598 72.4303 22.9766 72.832 22.9766C73.2337 22.9766 73.5624 23.3598 73.567 23.8299Z" fill="#263238"/>
<path d="M69.8335 22.3888L70.1028 28.0654L72.5087 27.3552L69.8335 22.3888Z" fill="#F28F8F"/>
<path d="M27.1939 45.7906C27.9836 46.2658 31.2021 48.8002 32.9506 49.0199C33.6901 49.1118 33.891 48.979 33.8636 48.7644C33.8225 48.468 33.3569 48.0235 33.2427 47.7834C33.0464 47.3695 31.8686 45.6323 32.3251 44.7279C32.7817 43.8235 33.1788 44.6921 34.2653 45.8826C35.3564 47.0731 36.4658 47.4819 37.4199 48.8717C38.374 50.2615 38.6936 52.4535 40.2686 54.0374L46.564 58.8403C46.564 58.8403 49.4949 43.6191 50.7822 41.8257C52.1335 39.9403 58.0318 44.0483 56.7992 50.0418C55.5574 56.0301 52.759 66.4229 50.8142 68.4667C49.5588 69.79 46.9018 68.5382 43.5921 65.2426C40.9762 62.6418 37.3925 58.7177 35.8997 57.3433C34.4069 55.9739 31.2295 55.2126 29.7823 54.2571C28.2256 53.2301 27.8878 52.6374 27.2897 51.2834C26.7282 50.0111 26.9793 47.9724 26.646 47.2009C26.3128 46.4396 26.4041 45.3104 27.1939 45.7906Z" fill="#FFA8A7"/>
<path d="M55.6576 37.8301C57.6708 39.2455 57.7758 41.2995 57.8763 43.6448C57.9676 45.8061 57.5795 48.7901 56.7258 51.7382C55.8721 54.6966 54.5117 60.0974 54.5117 60.0974C54.5117 60.0974 49.2435 60.2354 46.5317 57.6142C46.5317 57.6142 47.7689 51.7944 48.6409 47.4156C49.5174 43.0367 50.5765 38.3258 55.6576 37.8301Z" fill="#FFD666"/>
<path d="M46.5596 58.8403C47.9976 59.7345 48.8376 61.6557 49.1024 62.417C49.1024 62.417 49.0567 59.7191 46.7057 58.0586L46.5596 58.8403Z" fill="#F28F8F"/>
<path d="M101.213 169.272L136.447 192.04V200.43L101.213 177.662V169.272Z" fill="#FAAD14"/>
<path d="M101.213 169.272L136.447 192.04V200.43L101.213 177.662V169.272Z" fill="#D48806"/>
<path d="M171.681 169.272L136.447 192.04V200.43L171.681 177.662V169.272Z" fill="#FAAD14"/>
<path d="M171.681 169.272L136.447 192.04V200.43L171.681 177.662V169.272Z" fill="#AD6800"/>
<path d="M171.681 169.272L136.447 146.504L101.213 169.272L136.447 192.04L171.681 169.272Z" fill="url(#paint0_linear_2661_68499)"/>
<path opacity="0.1" d="M136.447 192.04V189.644L104.92 169.272H101.213L136.447 192.04Z" fill="black"/>
<path opacity="0.1" d="M136.447 146.504V148.901L167.969 169.272H171.681L136.447 146.504Z" fill="black"/>
<path d="M171.681 169.272H167.969L136.447 189.644V192.04L171.681 169.272Z" fill="url(#paint1_linear_2661_68499)"/>
<path d="M136.447 146.504V148.901L104.92 169.272H101.213L136.447 146.504Z" fill="url(#paint2_linear_2661_68499)"/>
<path d="M136.57 159.406L151.708 169.19C152.841 169.921 152.841 171.111 151.708 171.842L140.419 179.138C139.286 179.869 137.451 179.869 136.314 179.138L121.176 169.354C120.044 168.623 120.044 167.433 121.176 166.702L132.466 159.406C133.603 158.675 135.438 158.675 136.57 159.406Z" fill="#D48806"/>
<path d="M140.418 179.139L151.338 172.082L136.569 162.538C135.437 161.807 133.598 161.807 132.465 162.538L121.545 169.594L136.314 179.139C137.451 179.869 139.286 179.869 140.418 179.139Z" fill="url(#paint3_linear_2661_68499)"/>
<path d="M127.43 169.288L134.055 165.006C134.274 164.863 134.625 164.863 134.844 165.006L135.662 165.527C135.881 165.665 135.881 165.895 135.662 166.038L129.037 170.32C128.818 170.463 128.467 170.463 128.248 170.32L127.43 169.793C127.211 169.655 127.211 169.431 127.43 169.288Z" fill="#263238"/>
<path d="M137.324 175.69L143.948 171.408C144.167 171.265 144.518 171.265 144.737 171.408L145.555 171.929C145.774 172.067 145.774 172.297 145.555 172.44L138.93 176.722C138.711 176.865 138.36 176.865 138.141 176.722L137.324 176.195C137.104 176.057 137.104 175.833 137.324 175.69Z" fill="#263238"/>
<path d="M121.135 185.843C121.135 184.417 120.24 182.685 119.14 181.975C118.587 181.617 118.09 181.586 117.729 181.821C117.656 181.867 116.939 182.353 116.866 182.399C116.505 182.634 116.282 183.129 116.282 183.84C116.282 185.265 117.177 186.997 118.277 187.708C118.829 188.065 119.327 188.096 119.687 187.861C119.76 187.815 120.473 187.335 120.546 187.283C120.911 187.054 121.135 186.558 121.135 185.843Z" fill="url(#paint4_linear_2661_68499)"/>
<path d="M118.277 182.552C119.377 183.262 120.272 184.994 120.272 186.42C120.272 187.846 119.377 188.423 118.277 187.708C117.177 186.997 116.282 185.26 116.282 183.84C116.282 182.419 117.177 181.837 118.277 182.552Z" fill="url(#paint5_linear_2661_68499)"/>
<path d="M88.7234 197.134C90.5176 198.294 92.8139 198.872 95.1147 198.872C97.411 198.872 99.7119 198.294 101.497 197.134L118.73 186.006C119.164 185.725 119.315 185.101 119.064 184.611C118.813 184.126 118.256 183.957 117.817 184.238L100.584 195.366C97.5662 197.318 92.6541 197.318 89.6365 195.366L80.6855 189.583L79.3175 188.699L77.8036 188.971L78.2497 190.366L79.4628 191.15L88.7234 197.134Z" fill="#263238"/>
<path d="M62.437 177.315C62.437 179.139 63.4687 180.815 65.3496 182.031L74.8926 188.197L74.628 186.897L76.0714 186.601L66.2626 180.263C64.9753 179.43 64.2631 178.382 64.2631 177.315C64.2631 176.247 64.9707 175.199 66.2626 174.366L93.3434 156.866C96.9225 154.552 99.7301 149.115 99.7301 144.486V48.5651C99.7301 48.003 99.3193 47.5432 98.8171 47.5432C98.3149 47.5432 97.904 48.003 97.904 48.5651V144.486C97.904 148.323 95.3978 153.182 92.4304 155.098L65.3496 172.598C63.4733 173.809 62.437 175.485 62.437 177.315Z" fill="#263238"/>
<path d="M54.1012 11.8839C54.0783 11.7409 54.1012 11.6029 54.1788 11.4803C54.2564 11.3525 54.3568 11.2759 54.4846 11.2504L56.7079 10.7701C56.8357 10.7445 56.959 10.7701 57.0685 10.8569C57.1827 10.9438 57.2511 11.0562 57.274 11.2044L57.6164 13.1971C57.6392 13.3401 57.6164 13.4781 57.5387 13.6007C57.4657 13.7285 57.3607 13.8051 57.2329 13.8307L55.0142 14.3058C54.8864 14.3314 54.7631 14.3058 54.6535 14.219C54.5394 14.1321 54.4709 14.0197 54.4481 13.8766L54.1012 11.8839ZM52.2477 1.1233C52.2249 0.980234 52.2477 0.842277 52.3253 0.719649C52.4029 0.591911 52.5033 0.515268 52.6312 0.48972L54.8544 0.00942637C54.9822 -0.0161212 55.1055 0.00942637 55.2151 0.0962881C55.3292 0.18315 55.3977 0.295559 55.4205 0.438625L56.8859 8.94596C56.9087 9.08903 56.8859 9.22699 56.8083 9.34962C56.7307 9.47735 56.6303 9.554 56.5024 9.57954L54.2792 10.0598C54.1514 10.0854 54.0281 10.0598 53.9185 9.97298C53.8044 9.88611 53.7359 9.7737 53.7131 9.63064L52.2477 1.1233Z" fill="#C9A063"/>
<path d="M50.3925 20.2226C50.3058 20.1153 50.2647 19.9825 50.2692 19.8292C50.2784 19.6759 50.3286 19.5533 50.429 19.4562L52.1136 17.7649C52.214 17.6679 52.3281 17.6219 52.4651 17.6321C52.602 17.6423 52.7116 17.6985 52.7984 17.8109L54.0081 19.3233C54.0949 19.4358 54.136 19.5635 54.1268 19.7168C54.1177 19.8701 54.0675 19.9927 53.967 20.0898L52.2825 21.781C52.1866 21.8781 52.0679 21.9241 51.931 21.9139C51.794 21.9088 51.6844 21.8474 51.5977 21.735L50.3925 20.2226ZM43.8597 12.0576C43.773 11.9503 43.7319 11.8175 43.741 11.6642C43.7501 11.5109 43.8003 11.3883 43.9008 11.2912L45.5853 9.59994C45.6858 9.50286 45.7999 9.45687 45.9369 9.46709C46.0738 9.4722 46.1834 9.53351 46.2701 9.64592L51.4334 16.0992C51.5201 16.2065 51.5612 16.3394 51.5521 16.4927C51.5429 16.646 51.4927 16.7686 51.3923 16.8657L49.7077 18.5569C49.6118 18.654 49.4931 18.7 49.3562 18.6898C49.2192 18.6795 49.1097 18.6233 49.0229 18.5109L43.8597 12.0576Z" fill="url(#paint6_linear_2661_68499)"/>
<path d="M164.632 191.381C164.266 191.616 163.796 191.734 163.331 191.734C162.865 191.734 162.395 191.611 162.03 191.391L153.945 186.164L154.173 185.72L162.258 190.947C162.842 191.325 163.824 191.325 164.403 190.947L185.439 177.352L185.247 177.715L185.698 177.767L164.632 191.381Z" fill="#FAAD14"/>
<path d="M207.371 163.167C207.371 163.55 207.157 163.902 206.764 164.153L186.835 177.123V176.827H186.57L206.536 163.718C206.778 163.56 206.915 163.366 206.915 163.172C206.915 162.978 206.773 162.778 206.536 162.625L196.602 156.207L196.83 155.763L206.764 162.18C207.157 162.431 207.371 162.783 207.371 163.167Z" fill="#FAAD14"/>
<path d="M185.776 176.53V176.827L185.512 176.53H185.776Z" fill="#FAAD14"/>
<path d="M185.247 176.827L185.433 176.787L185.337 177.056L185.247 176.827Z" fill="#FAAD14"/>
<path d="M185.776 177.123L185.636 177.056L185.512 177.123H185.776Z" fill="#FAAD14"/>
<path d="M186.835 177.715V178.011L186.57 177.715H186.835Z" fill="#FAAD14"/>
<path d="M186.305 178.011L186.492 177.972L186.395 178.241L186.305 178.011Z" fill="#FAAD14"/>
<path d="M186.835 178.308L186.694 178.241L186.57 178.308H186.835Z" fill="#FAAD14"/>
<path d="M164.633 196.174C164.267 196.409 163.797 196.527 163.332 196.527C162.866 196.527 162.396 196.409 162.031 196.184L150.234 188.561L150.462 188.116L162.259 195.74C162.843 196.118 163.825 196.113 164.404 195.74L188.687 180.047L188.899 180.492L164.633 196.174Z" fill="#FAAD14"/>
<path d="M214.791 163.167C214.791 163.55 214.576 163.902 214.183 164.153L189.408 180.163L189.18 179.729L213.955 163.719C214.197 163.56 214.334 163.366 214.334 163.172C214.334 162.978 214.192 162.778 213.955 162.625L200.305 153.806L200.533 153.362L214.183 162.181C214.576 162.431 214.791 162.783 214.791 163.167Z" fill="#FAAD14"/>
<path d="M190.011 180.381L189.555 180.492L190.011 180.677V180.381Z" fill="#FAAD14"/>
<path d="M189.253 180.492L189.746 180.973L189.408 181.27L189.253 180.492Z" fill="#FAAD14"/>
<path d="M188.952 181.27V180.677L188.687 180.973L188.952 181.27Z" fill="#FAAD14"/>
<path d="M189.18 179.196L188.952 179.789L188.687 179.196H189.18Z" fill="#FAAD14"/>
<path d="M188.423 179.492L188.687 179.789H188.423V179.492Z" fill="#FAAD14"/>
<path d="M163.331 201.319C163.797 201.319 164.267 201.202 164.632 200.967L221.601 164.153C221.994 163.902 222.208 163.55 222.208 163.167C222.208 162.783 221.994 162.431 221.601 162.18L204.244 150.965L204.016 151.41L221.373 162.62C221.61 162.773 221.752 162.972 221.752 163.167C221.752 163.356 221.615 163.555 221.373 163.713L164.404 200.527C163.824 200.905 162.843 200.905 162.258 200.527L146.755 190.508L146.527 190.952L162.03 200.972C162.395 201.202 162.865 201.319 163.331 201.319Z" fill="#FAAD14"/>
<path d="M222.675 132.009L193.006 151.179L163.332 132.009L193.006 112.838L222.675 132.009Z" fill="#FFF1B8"/>
<path d="M193.006 151.179V160.019C193.718 160.019 194.43 159.845 194.978 159.493H194.982L207.838 151.185L221.488 142.36C222.145 141.936 222.675 140.909 222.675 140.061V132.009L193.823 150.653L193.006 151.179Z" fill="#D48806"/>
<path d="M163.332 132.009V140.061C163.332 140.909 163.866 141.936 164.519 142.36L176.315 149.984L191.029 159.493C191.576 159.845 192.289 160.019 193.005 160.019V151.179L192.083 150.587L163.332 132.009Z" fill="#D48806"/>
<path d="M220.82 135.856V136.944C220.82 137.088 220.734 137.256 220.624 137.328L220.4 137.471C220.291 137.542 220.204 137.486 220.204 137.343V136.255C220.204 136.112 220.291 135.943 220.4 135.871L220.624 135.728C220.729 135.662 220.82 135.718 220.82 135.856Z" fill="#D48806"/>
<path d="M219.82 136.505V137.593C219.82 137.736 219.734 137.905 219.624 137.976L219.4 138.119C219.291 138.191 219.204 138.135 219.204 137.992V136.903C219.204 136.76 219.291 136.592 219.4 136.52L219.624 136.377C219.729 136.306 219.82 136.362 219.82 136.505Z" fill="#D48806"/>
<path d="M218.82 137.149V138.237C218.82 138.38 218.733 138.549 218.624 138.62L218.4 138.763C218.29 138.835 218.204 138.779 218.204 138.636V137.547C218.204 137.404 218.29 137.236 218.4 137.164L218.624 137.021C218.733 136.949 218.82 137.006 218.82 137.149Z" fill="#D48806"/>
<path d="M217.82 137.793V138.881C217.82 139.024 217.734 139.193 217.624 139.264L217.4 139.407C217.291 139.479 217.204 139.423 217.204 139.279V138.191C217.204 138.048 217.291 137.879 217.4 137.808L217.624 137.665C217.734 137.593 217.82 137.65 217.82 137.793Z" fill="#D48806"/>
<path d="M216.822 138.436V139.525C216.822 139.668 216.735 139.837 216.625 139.908L216.402 140.051C216.292 140.123 216.205 140.066 216.205 139.923V138.835C216.205 138.692 216.292 138.523 216.402 138.452L216.625 138.309C216.735 138.237 216.822 138.293 216.822 138.436Z" fill="#FFF1B8"/>
<path d="M215.822 139.08V140.169C215.822 140.312 215.735 140.48 215.625 140.552L215.402 140.695C215.292 140.766 215.205 140.71 215.205 140.567V139.479C215.205 139.336 215.292 139.167 215.402 139.096L215.625 138.953C215.735 138.881 215.822 138.942 215.822 139.08Z" fill="#D48806"/>
<path d="M214.826 139.724V140.812C214.826 140.955 214.739 141.124 214.629 141.196L214.406 141.339C214.296 141.41 214.209 141.354 214.209 141.211V140.123C214.209 139.979 214.296 139.811 214.406 139.739L214.629 139.596C214.734 139.53 214.826 139.586 214.826 139.724Z" fill="#FFF1B8"/>
<path d="M213.826 140.373V141.461C213.826 141.604 213.739 141.773 213.629 141.845L213.406 141.988C213.296 142.059 213.209 142.003 213.209 141.86V140.772C213.209 140.628 213.296 140.46 213.406 140.388L213.629 140.245C213.734 140.174 213.826 140.23 213.826 140.373Z" fill="#FFF1B8"/>
<path d="M212.827 141.017V142.105C212.827 142.248 212.74 142.417 212.63 142.488L212.407 142.631C212.297 142.703 212.21 142.647 212.21 142.503V141.415C212.21 141.272 212.297 141.103 212.407 141.032L212.63 140.889C212.74 140.817 212.827 140.874 212.827 141.017Z" fill="#FFF1B8"/>
<path d="M211.827 141.66V142.749C211.827 142.892 211.74 143.06 211.63 143.132L211.407 143.275C211.297 143.347 211.21 143.29 211.21 143.147V142.059C211.21 141.916 211.297 141.747 211.407 141.676L211.63 141.533C211.74 141.461 211.827 141.517 211.827 141.66Z" fill="#D48806"/>
<path d="M210.827 142.304V143.393C210.827 143.536 210.74 143.704 210.631 143.776L210.407 143.919C210.298 143.99 210.211 143.934 210.211 143.791V142.703C210.211 142.56 210.298 142.391 210.407 142.32L210.631 142.177C210.74 142.105 210.827 142.161 210.827 142.304Z" fill="#D48806"/>
<path d="M209.828 142.948V144.037C209.828 144.18 209.741 144.348 209.631 144.42L209.408 144.563C209.298 144.634 209.211 144.578 209.211 144.435V143.347C209.211 143.204 209.298 143.035 209.408 142.964L209.631 142.82C209.741 142.749 209.828 142.805 209.828 142.948Z" fill="#FFF1B8"/>
<path d="M208.832 143.592V144.68C208.832 144.823 208.745 144.992 208.636 145.064L208.412 145.207C208.302 145.278 208.216 145.222 208.216 145.079V143.991C208.216 143.848 208.302 143.679 208.412 143.607L208.636 143.464C208.741 143.393 208.832 143.454 208.832 143.592Z" fill="#FFF1B8"/>
<path d="M207.833 144.236V145.324C207.833 145.467 207.746 145.636 207.636 145.707L207.413 145.85C207.303 145.922 207.216 145.866 207.216 145.723V144.634C207.216 144.491 207.303 144.323 207.413 144.251L207.636 144.108C207.741 144.042 207.833 144.098 207.833 144.236Z" fill="#D48806"/>
<path d="M206.833 144.885V145.973C206.833 146.116 206.746 146.285 206.636 146.356L206.413 146.499C206.303 146.571 206.216 146.515 206.216 146.372V145.283C206.216 145.14 206.303 144.972 206.413 144.9L206.636 144.757C206.746 144.685 206.833 144.742 206.833 144.885Z" fill="#D48806"/>
<path d="M205.833 145.528V146.617C205.833 146.76 205.746 146.928 205.637 147L205.413 147.143C205.303 147.214 205.217 147.158 205.217 147.015V145.927C205.217 145.784 205.303 145.615 205.413 145.544L205.637 145.401C205.746 145.329 205.833 145.385 205.833 145.528Z" fill="#D48806"/>
<path d="M204.833 146.172V147.261C204.833 147.404 204.747 147.572 204.637 147.644L204.413 147.787C204.304 147.859 204.217 147.802 204.217 147.659V146.571C204.217 146.428 204.304 146.259 204.413 146.188L204.637 146.045C204.747 145.973 204.833 146.029 204.833 146.172Z" fill="#D48806"/>
<path d="M220.82 139.08V140.169C220.82 140.312 220.734 140.48 220.624 140.552L220.4 140.695C220.291 140.766 220.204 140.71 220.204 140.567V139.479C220.204 139.336 220.291 139.167 220.4 139.096L220.624 138.953C220.729 138.881 220.82 138.942 220.82 139.08Z" fill="#D48806"/>
<path d="M219.82 139.724V140.812C219.82 140.955 219.734 141.124 219.624 141.196L219.4 141.339C219.291 141.41 219.204 141.354 219.204 141.211V140.123C219.204 139.979 219.291 139.811 219.4 139.739L219.624 139.596C219.729 139.53 219.82 139.586 219.82 139.724Z" fill="#FFF1B8"/>
<path d="M218.82 140.373V141.461C218.82 141.604 218.733 141.773 218.624 141.845L218.4 141.988C218.29 142.059 218.204 142.003 218.204 141.86V140.772C218.204 140.628 218.29 140.46 218.4 140.388L218.624 140.245C218.733 140.174 218.82 140.23 218.82 140.373Z" fill="#D48806"/>
<path d="M217.82 141.017V142.105C217.82 142.248 217.734 142.417 217.624 142.488L217.4 142.631C217.291 142.703 217.204 142.647 217.204 142.504V141.415C217.204 141.272 217.291 141.104 217.4 141.032L217.624 140.889C217.734 140.818 217.82 140.874 217.82 141.017Z" fill="#FFF1B8"/>
<path d="M216.822 141.661V142.749C216.822 142.892 216.735 143.061 216.625 143.132L216.402 143.275C216.292 143.347 216.205 143.291 216.205 143.148V142.059C216.205 141.916 216.292 141.748 216.402 141.676L216.625 141.533C216.735 141.461 216.822 141.518 216.822 141.661Z" fill="#FFF1B8"/>
<path d="M215.822 142.304V143.393C215.822 143.536 215.735 143.704 215.625 143.776L215.402 143.919C215.292 143.99 215.205 143.934 215.205 143.791V142.703C215.205 142.56 215.292 142.391 215.402 142.32L215.625 142.177C215.735 142.105 215.822 142.161 215.822 142.304Z" fill="#D48806"/>
<path d="M214.826 142.948V144.037C214.826 144.18 214.739 144.348 214.629 144.42L214.406 144.563C214.296 144.634 214.209 144.578 214.209 144.435V143.347C214.209 143.204 214.296 143.035 214.406 142.964L214.629 142.82C214.734 142.749 214.826 142.805 214.826 142.948Z" fill="#D48806"/>
<path d="M213.826 143.592V144.68C213.826 144.823 213.739 144.992 213.629 145.064L213.406 145.207C213.296 145.278 213.209 145.222 213.209 145.079V143.991C213.209 143.848 213.296 143.679 213.406 143.607L213.629 143.464C213.734 143.393 213.826 143.454 213.826 143.592Z" fill="#D48806"/>
<path d="M212.827 144.236V145.324C212.827 145.467 212.74 145.636 212.63 145.707L212.407 145.85C212.297 145.922 212.21 145.866 212.21 145.723V144.634C212.21 144.491 212.297 144.323 212.407 144.251L212.63 144.108C212.74 144.042 212.827 144.098 212.827 144.236Z" fill="#D48806"/>
<path d="M211.827 144.885V145.973C211.827 146.116 211.74 146.285 211.63 146.356L211.407 146.499C211.297 146.571 211.21 146.515 211.21 146.372V145.283C211.21 145.14 211.297 144.972 211.407 144.9L211.63 144.757C211.74 144.685 211.827 144.742 211.827 144.885Z" fill="#FFF1B8"/>
<path d="M210.827 145.529V146.617C210.827 146.76 210.74 146.929 210.631 147L210.407 147.143C210.298 147.215 210.211 147.159 210.211 147.015V145.927C210.211 145.784 210.298 145.615 210.407 145.544L210.631 145.401C210.74 145.329 210.827 145.386 210.827 145.529Z" fill="#FFF1B8"/>
<path d="M209.828 146.172V147.261C209.828 147.404 209.741 147.572 209.631 147.644L209.408 147.787C209.298 147.859 209.211 147.802 209.211 147.659V146.571C209.211 146.428 209.298 146.259 209.408 146.188L209.631 146.045C209.741 145.973 209.828 146.029 209.828 146.172Z" fill="#D48806"/>
<path d="M208.832 146.816V147.904C208.832 148.047 208.745 148.216 208.636 148.288L208.412 148.431C208.302 148.502 208.216 148.446 208.216 148.303V147.215C208.216 147.072 208.302 146.903 208.412 146.831L208.636 146.688C208.741 146.617 208.832 146.673 208.832 146.816Z" fill="#D48806"/>
<path d="M207.833 147.46V148.548C207.833 148.691 207.746 148.86 207.636 148.931L207.413 149.074C207.303 149.146 207.216 149.09 207.216 148.947V147.858C207.216 147.715 207.303 147.547 207.413 147.475L207.636 147.332C207.741 147.261 207.833 147.322 207.833 147.46Z" fill="#FFF1B8"/>
<path d="M206.833 148.104V149.192C206.833 149.335 206.746 149.504 206.636 149.575L206.413 149.718C206.303 149.79 206.216 149.734 206.216 149.591V148.502C206.216 148.359 206.303 148.191 206.413 148.119L206.636 147.976C206.746 147.91 206.833 147.966 206.833 148.104Z" fill="#FFF1B8"/>
<path d="M205.833 148.747V149.836C205.833 149.979 205.746 150.147 205.637 150.219L205.413 150.362C205.303 150.434 205.217 150.377 205.217 150.234V149.146C205.217 149.003 205.303 148.834 205.413 148.763L205.637 148.62C205.746 148.553 205.833 148.609 205.833 148.747Z" fill="#FFF1B8"/>
<path d="M204.833 149.396V150.485C204.833 150.628 204.747 150.796 204.637 150.868L204.413 151.011C204.304 151.082 204.217 151.026 204.217 150.883V149.795C204.217 149.652 204.304 149.483 204.413 149.412L204.637 149.268C204.747 149.197 204.833 149.253 204.833 149.396Z" fill="#FFF1B8"/>
<path d="M201.497 149.851L201.045 149.56H201.04C200.885 149.463 200.67 149.478 200.437 149.626C199.963 149.933 199.579 150.679 199.579 151.292C199.579 151.598 199.675 151.813 199.83 151.915L200.25 152.186L200.328 152.043C200.405 152.022 200.488 151.992 200.574 151.936C201.049 151.629 201.433 150.883 201.433 150.27C201.433 150.178 201.424 150.096 201.405 150.025L201.497 149.851Z" fill="#D48806"/>
<path opacity="0.2" d="M201.497 149.851L201.045 149.56H201.04C200.885 149.463 200.67 149.478 200.437 149.626C199.963 149.933 199.579 150.679 199.579 151.292C199.579 151.598 199.675 151.813 199.83 151.915L200.25 152.186L200.328 152.043C200.405 152.022 200.488 151.992 200.574 151.936C201.049 151.629 201.433 150.883 201.433 150.27C201.433 150.178 201.424 150.096 201.405 150.025L201.497 149.851Z" fill="#874D00"/>
<path d="M200.871 149.902C200.396 150.209 200.012 150.955 200.012 151.568C200.012 152.181 200.396 152.431 200.871 152.125C201.345 151.818 201.729 151.072 201.729 150.459C201.734 149.846 201.345 149.595 200.871 149.902Z" fill="#D48806"/>
<path d="M197.769 152.257L197.317 151.966H197.312C197.157 151.869 196.942 151.884 196.709 152.033C196.235 152.339 195.851 153.085 195.851 153.698C195.851 154.005 195.947 154.22 196.102 154.322L196.522 154.593L196.6 154.449C196.677 154.429 196.76 154.398 196.846 154.342C197.321 154.036 197.705 153.29 197.705 152.676C197.705 152.584 197.696 152.503 197.677 152.431L197.769 152.257Z" fill="#D48806"/>
<path opacity="0.2" d="M197.769 152.257L197.317 151.966H197.312C197.157 151.869 196.942 151.884 196.709 152.033C196.235 152.339 195.851 153.085 195.851 153.698C195.851 154.005 195.947 154.22 196.102 154.322L196.522 154.593L196.6 154.449C196.677 154.429 196.76 154.398 196.846 154.342C197.321 154.036 197.705 153.29 197.705 152.676C197.705 152.584 197.696 152.503 197.677 152.431L197.769 152.257Z" fill="#874D00"/>
<path d="M197.147 152.314C196.672 152.62 196.289 153.366 196.289 153.979C196.289 154.592 196.672 154.843 197.147 154.536C197.622 154.23 198.005 153.484 198.005 152.871C198.005 152.252 197.617 152.007 197.147 152.314Z" fill="#D48806"/>
<path d="M222.675 117.63L193.006 136.801L163.332 117.63L193.006 98.4543L222.675 117.63Z" fill="#FFF1B8"/>
<path d="M222.675 127.216L193.006 146.387V136.801L222.675 117.63V127.216Z" fill="#D48806"/>
<path d="M193.005 146.387L163.332 127.216V117.63L193.005 136.801V146.387Z" fill="#D48806"/>
<path d="M218.962 132.008V129.612L193.005 146.387V148.783L218.962 132.008Z" fill="#D48806"/>
<path d="M165.185 128.411L165.19 130.808L193.005 148.783V146.387L165.185 128.411Z" fill="#D48806"/>
<path opacity="0.2" d="M165.185 128.411L165.19 130.808L193.005 148.783V146.387L165.185 128.411Z" fill="#874D00"/>
<path d="M220.82 121.478V122.566C220.82 122.709 220.734 122.878 220.624 122.95L220.4 123.093C220.291 123.164 220.204 123.108 220.204 122.965V121.877C220.204 121.733 220.291 121.565 220.4 121.493L220.619 121.35C220.729 121.279 220.82 121.34 220.82 121.478Z" fill="#FFF1B8"/>
<path d="M219.82 122.122V123.21C219.82 123.353 219.734 123.522 219.624 123.593L219.4 123.736C219.291 123.808 219.204 123.752 219.204 123.609V122.52C219.204 122.377 219.291 122.209 219.4 122.137L219.624 121.994C219.729 121.927 219.82 121.984 219.82 122.122Z" fill="#D48806"/>
<path d="M218.82 122.771V123.859C218.82 124.002 218.733 124.171 218.624 124.242L218.4 124.385C218.29 124.457 218.204 124.401 218.204 124.258V123.169C218.204 123.026 218.29 122.858 218.4 122.786L218.624 122.643C218.733 122.571 218.82 122.628 218.82 122.771Z" fill="#D48806"/>
<path d="M217.82 123.415V124.503C217.82 124.646 217.734 124.815 217.624 124.886L217.4 125.029C217.291 125.101 217.204 125.045 217.204 124.901V123.813C217.204 123.67 217.291 123.501 217.4 123.43L217.624 123.287C217.734 123.215 217.82 123.272 217.82 123.415Z" fill="#FFF1B8"/>
<path d="M216.822 124.058V125.147C216.822 125.29 216.735 125.458 216.625 125.53L216.402 125.673C216.292 125.745 216.205 125.688 216.205 125.545V124.457C216.205 124.314 216.292 124.145 216.402 124.074L216.625 123.931C216.735 123.859 216.822 123.915 216.822 124.058Z" fill="#FFF1B8"/>
<path d="M215.822 124.702V125.79C215.822 125.933 215.735 126.102 215.625 126.174L215.402 126.317C215.292 126.388 215.205 126.332 215.205 126.189V125.101C215.205 124.957 215.292 124.789 215.402 124.717L215.625 124.574C215.735 124.503 215.822 124.559 215.822 124.702Z" fill="#D48806"/>
<path d="M214.826 125.346V126.434C214.826 126.577 214.739 126.746 214.629 126.817L214.406 126.96C214.296 127.032 214.209 126.976 214.209 126.833V125.744C214.209 125.601 214.296 125.433 214.406 125.361L214.629 125.218C214.734 125.147 214.826 125.208 214.826 125.346Z" fill="#D48806"/>
<path d="M213.826 125.99V127.078C213.826 127.221 213.739 127.39 213.629 127.461L213.406 127.604C213.296 127.676 213.209 127.62 213.209 127.477V126.388C213.209 126.245 213.296 126.077 213.406 126.005L213.629 125.862C213.734 125.796 213.826 125.852 213.826 125.99Z" fill="#D48806"/>
<path d="M212.827 126.633V127.722C212.827 127.865 212.74 128.033 212.63 128.105L212.407 128.248C212.297 128.32 212.21 128.263 212.21 128.12V127.032C212.21 126.889 212.297 126.72 212.407 126.649L212.63 126.506C212.74 126.439 212.827 126.495 212.827 126.633Z" fill="#D48806"/>
<path d="M211.827 127.282V128.371C211.827 128.514 211.74 128.682 211.63 128.754L211.407 128.897C211.297 128.969 211.21 128.912 211.21 128.769V127.681C211.21 127.538 211.297 127.369 211.407 127.298L211.63 127.155C211.74 127.083 211.827 127.139 211.827 127.282Z" fill="#FFF1B8"/>
<path d="M210.827 127.926V129.015C210.827 129.158 210.74 129.326 210.631 129.398L210.407 129.541C210.298 129.612 210.211 129.556 210.211 129.413V128.325C210.211 128.182 210.298 128.013 210.407 127.942L210.631 127.799C210.74 127.727 210.827 127.783 210.827 127.926Z" fill="#FFF1B8"/>
<path d="M209.828 128.57V129.658C209.828 129.802 209.741 129.97 209.631 130.042L209.408 130.185C209.298 130.256 209.211 130.2 209.211 130.057V128.969C209.211 128.826 209.298 128.657 209.408 128.585L209.631 128.442C209.741 128.371 209.828 128.427 209.828 128.57Z" fill="#FFF1B8"/>
<path d="M208.832 129.214V130.302C208.832 130.445 208.745 130.614 208.636 130.685L208.412 130.828C208.302 130.9 208.216 130.844 208.216 130.701V129.612C208.216 129.469 208.302 129.301 208.412 129.229L208.636 129.086C208.741 129.014 208.832 129.071 208.832 129.214Z" fill="#D48806"/>
<path d="M207.833 129.858V130.946C207.833 131.089 207.746 131.258 207.636 131.329L207.413 131.472C207.303 131.544 207.216 131.488 207.216 131.344V130.256C207.216 130.113 207.303 129.944 207.413 129.873L207.636 129.73C207.741 129.658 207.833 129.72 207.833 129.858Z" fill="#D48806"/>
<path d="M206.833 130.502V131.59C206.833 131.733 206.746 131.902 206.636 131.973L206.413 132.116C206.303 132.188 206.216 132.131 206.216 131.988V130.9C206.216 130.757 206.303 130.588 206.413 130.517L206.636 130.374C206.746 130.307 206.833 130.364 206.833 130.502Z" fill="#D48806"/>
<path d="M205.833 131.15V132.239C205.833 132.382 205.746 132.55 205.637 132.622L205.413 132.765C205.303 132.836 205.217 132.78 205.217 132.637V131.549C205.217 131.406 205.303 131.237 205.413 131.166L205.637 131.023C205.746 130.951 205.833 131.007 205.833 131.15Z" fill="#FFF1B8"/>
<path d="M204.833 131.794V132.882C204.833 133.025 204.747 133.194 204.637 133.265L204.413 133.408C204.304 133.48 204.217 133.424 204.217 133.281V132.192C204.217 132.049 204.304 131.881 204.413 131.809L204.637 131.666C204.747 131.595 204.833 131.651 204.833 131.794Z" fill="#D48806"/>
<path d="M220.82 124.702V125.79C220.82 125.933 220.734 126.102 220.624 126.173L220.4 126.316C220.291 126.388 220.204 126.332 220.204 126.189V125.1C220.204 124.957 220.291 124.789 220.4 124.717L220.624 124.574C220.729 124.503 220.82 124.559 220.82 124.702Z" fill="#D48806"/>
<path d="M219.82 125.346V126.434C219.82 126.577 219.734 126.746 219.624 126.817L219.4 126.96C219.291 127.032 219.204 126.976 219.204 126.832V125.744C219.204 125.601 219.291 125.432 219.4 125.361L219.624 125.218C219.729 125.146 219.82 125.208 219.82 125.346Z" fill="#D48806"/>
<path d="M218.82 125.99V127.078C218.82 127.221 218.733 127.39 218.624 127.461L218.4 127.604C218.29 127.676 218.204 127.619 218.204 127.476V126.388C218.204 126.245 218.29 126.076 218.4 126.005L218.624 125.862C218.733 125.795 218.82 125.852 218.82 125.99Z" fill="#D48806"/>
<path d="M217.82 126.633V127.721C217.82 127.865 217.734 128.033 217.624 128.105L217.4 128.248C217.291 128.319 217.204 128.263 217.204 128.12V127.032C217.204 126.889 217.291 126.72 217.4 126.648L217.624 126.505C217.734 126.439 217.82 126.495 217.82 126.633Z" fill="#D48806"/>
<path d="M216.822 127.282V128.37C216.822 128.513 216.735 128.682 216.625 128.753L216.402 128.896C216.292 128.968 216.205 128.912 216.205 128.769V127.68C216.205 127.537 216.292 127.369 216.402 127.297L216.625 127.154C216.735 127.083 216.822 127.139 216.822 127.282Z" fill="#FFF1B8"/>
<path d="M215.822 127.926V129.014C215.822 129.157 215.735 129.326 215.625 129.398L215.402 129.541C215.292 129.612 215.205 129.556 215.205 129.413V128.325C215.205 128.182 215.292 128.013 215.402 127.941L215.625 127.798C215.735 127.727 215.822 127.783 215.822 127.926Z" fill="#FFF1B8"/>
<path d="M214.826 128.57V129.658C214.826 129.801 214.739 129.97 214.629 130.041L214.406 130.184C214.296 130.256 214.209 130.2 214.209 130.056V128.968C214.209 128.825 214.296 128.656 214.406 128.585L214.629 128.442C214.734 128.37 214.826 128.427 214.826 128.57Z" fill="#D48806"/>
<path d="M213.826 129.214V130.302C213.826 130.445 213.739 130.614 213.629 130.685L213.406 130.828C213.296 130.9 213.209 130.843 213.209 130.7V129.612C213.209 129.469 213.296 129.3 213.406 129.229L213.629 129.086C213.734 129.014 213.826 129.07 213.826 129.214Z" fill="#D48806"/>
<path d="M212.827 129.857V130.946C212.827 131.089 212.74 131.257 212.63 131.329L212.407 131.472C212.297 131.543 212.21 131.487 212.21 131.344V130.256C212.21 130.113 212.297 129.944 212.407 129.873L212.63 129.73C212.74 129.658 212.827 129.719 212.827 129.857Z" fill="#D48806"/>
<path d="M211.827 130.501V131.589C211.827 131.732 211.74 131.901 211.63 131.973L211.407 132.116C211.297 132.187 211.21 132.131 211.21 131.988V130.9C211.21 130.756 211.297 130.588 211.407 130.516L211.63 130.373C211.74 130.307 211.827 130.363 211.827 130.501Z" fill="#D48806"/>
<path d="M210.827 131.15V132.238C210.827 132.381 210.74 132.55 210.631 132.622L210.407 132.765C210.298 132.836 210.211 132.78 210.211 132.637V131.549C210.211 131.406 210.298 131.237 210.407 131.165L210.631 131.022C210.74 130.951 210.827 131.007 210.827 131.15Z" fill="#D48806"/>
<path d="M209.828 131.794V132.882C209.828 133.025 209.741 133.194 209.631 133.265L209.408 133.408C209.298 133.48 209.211 133.424 209.211 133.28V132.192C209.211 132.049 209.298 131.88 209.408 131.809L209.631 131.666C209.741 131.594 209.828 131.651 209.828 131.794Z" fill="#FFF1B8"/>
<path d="M208.832 132.438V133.526C208.832 133.669 208.745 133.838 208.636 133.909L208.412 134.052C208.302 134.124 208.216 134.068 208.216 133.925V132.836C208.216 132.693 208.302 132.525 208.412 132.453L208.636 132.31C208.741 132.238 208.832 132.295 208.832 132.438Z" fill="#D48806"/>
<path d="M207.833 133.081V134.17C207.833 134.313 207.746 134.481 207.636 134.553L207.413 134.696C207.303 134.767 207.216 134.711 207.216 134.568V133.48C207.216 133.337 207.303 133.168 207.413 133.097L207.636 132.954C207.741 132.882 207.833 132.938 207.833 133.081Z" fill="#D48806"/>
<path d="M206.833 133.725V134.814C206.833 134.957 206.746 135.125 206.636 135.197L206.413 135.34C206.303 135.411 206.216 135.355 206.216 135.212V134.124C206.216 133.981 206.303 133.812 206.413 133.741L206.636 133.597C206.746 133.526 206.833 133.587 206.833 133.725Z" fill="#D48806"/>
<path d="M205.833 134.369V135.457C205.833 135.601 205.746 135.769 205.637 135.841L205.413 135.984C205.303 136.055 205.217 135.999 205.217 135.856V134.768C205.217 134.625 205.303 134.456 205.413 134.384L205.637 134.241C205.746 134.175 205.833 134.231 205.833 134.369Z" fill="#D48806"/>
<path d="M204.833 135.013V136.101C204.833 136.244 204.747 136.413 204.637 136.484L204.413 136.627C204.304 136.699 204.217 136.643 204.217 136.5V135.411C204.217 135.268 204.304 135.1 204.413 135.028L204.637 134.885C204.747 134.819 204.833 134.875 204.833 135.013Z" fill="#D48806"/>
<path d="M201.497 135.468L201.045 135.177H201.04C200.885 135.08 200.67 135.095 200.437 135.243C199.963 135.55 199.579 136.296 199.579 136.909C199.579 137.215 199.675 137.43 199.83 137.532L200.25 137.803L200.328 137.66C200.405 137.639 200.488 137.609 200.574 137.553C201.049 137.246 201.433 136.5 201.433 135.887C201.433 135.795 201.424 135.713 201.405 135.642L201.497 135.468Z" fill="#D48806"/>
<path opacity="0.2" d="M201.497 135.468L201.045 135.177H201.04C200.885 135.08 200.67 135.095 200.437 135.243C199.963 135.55 199.579 136.296 199.579 136.909C199.579 137.215 199.675 137.43 199.83 137.532L200.25 137.803L200.328 137.66C200.405 137.639 200.488 137.609 200.574 137.553C201.049 137.246 201.433 136.5 201.433 135.887C201.433 135.795 201.424 135.713 201.405 135.642L201.497 135.468Z" fill="#874D00"/>
<path d="M200.871 135.524C200.396 135.831 200.012 136.577 200.012 137.19C200.012 137.803 200.396 138.053 200.871 137.747C201.345 137.44 201.729 136.694 201.729 136.081C201.734 135.468 201.345 135.218 200.871 135.524Z" fill="#D48806"/>
<path d="M197.769 137.879L197.317 137.588H197.312C197.157 137.491 196.942 137.506 196.709 137.655C196.235 137.961 195.851 138.707 195.851 139.32C195.851 139.627 195.947 139.841 196.102 139.944L196.522 140.214L196.6 140.071C196.677 140.051 196.76 140.02 196.846 139.964C197.321 139.657 197.705 138.911 197.705 138.298C197.705 138.206 197.696 138.125 197.677 138.053L197.769 137.879Z" fill="#D48806"/>
<path opacity="0.2" d="M197.769 137.879L197.317 137.588H197.312C197.157 137.491 196.942 137.506 196.709 137.655C196.235 137.961 195.851 138.707 195.851 139.32C195.851 139.627 195.947 139.841 196.102 139.944L196.522 140.214L196.6 140.071C196.677 140.051 196.76 140.02 196.846 139.964C197.321 139.657 197.705 138.911 197.705 138.298C197.705 138.206 197.696 138.125 197.677 138.053L197.769 137.879Z" fill="#874D00"/>
<path d="M197.147 137.935C196.672 138.242 196.289 138.988 196.289 139.601C196.289 140.214 196.672 140.465 197.147 140.158C197.622 139.852 198.005 139.106 198.005 138.492C198.005 137.874 197.617 137.629 197.147 137.935Z" fill="#D48806"/>
<path d="M222.675 103.247L193.006 122.423L163.332 103.247L193.006 84.0766L222.675 103.247Z" fill="#FFF1B8"/>
<path d="M222.675 112.838L193.006 132.009V122.423L222.675 103.247V112.838Z" fill="#D48806"/>
<path d="M193.005 132.009L163.332 112.838V103.248L193.005 122.424V132.009Z" fill="#D48806"/>
<path d="M218.962 117.631V115.234L193.005 132.009V134.405L218.962 117.631Z" fill="#D48806"/>
<path d="M165.185 114.034L165.19 116.43L193.005 134.405V132.009L165.185 114.034Z" fill="#D48806"/>
<path opacity="0.2" d="M165.185 114.034L165.19 116.43L193.005 134.405V132.009L165.185 114.034Z" fill="#874D00"/>
<path d="M220.82 107.1V108.189C220.82 108.332 220.734 108.5 220.624 108.572L220.4 108.715C220.291 108.786 220.204 108.73 220.204 108.587V107.499C220.204 107.356 220.291 107.187 220.4 107.116L220.624 106.973C220.729 106.901 220.82 106.957 220.82 107.1Z" fill="#D48806"/>
<path d="M219.82 107.744V108.832C219.82 108.975 219.734 109.144 219.624 109.216L219.4 109.359C219.291 109.43 219.204 109.374 219.204 109.231V108.143C219.204 108 219.291 107.831 219.4 107.759L219.624 107.616C219.729 107.545 219.82 107.606 219.82 107.744Z" fill="#D48806"/>
<path d="M218.82 108.388V109.476C218.82 109.619 218.733 109.788 218.624 109.859L218.4 110.003C218.29 110.074 218.204 110.018 218.204 109.875V108.786C218.204 108.643 218.29 108.475 218.4 108.403L218.624 108.26C218.733 108.189 218.82 108.25 218.82 108.388Z" fill="#D48806"/>
<path d="M217.82 109.032V110.12C217.82 110.263 217.734 110.432 217.624 110.503L217.4 110.646C217.291 110.718 217.204 110.662 217.204 110.518V109.43C217.204 109.287 217.291 109.118 217.4 109.047L217.624 108.904C217.734 108.837 217.82 108.894 217.82 109.032Z" fill="#FFF1B8"/>
<path d="M216.822 109.68V110.769C216.822 110.912 216.735 111.08 216.625 111.152L216.402 111.295C216.292 111.367 216.205 111.31 216.205 111.167V110.079C216.205 109.936 216.292 109.767 216.402 109.696L216.625 109.553C216.735 109.481 216.822 109.537 216.822 109.68Z" fill="#FFF1B8"/>
<path d="M215.822 110.325V111.413C215.822 111.556 215.735 111.725 215.625 111.796L215.402 111.939C215.292 112.011 215.205 111.954 215.205 111.811V110.723C215.205 110.58 215.292 110.411 215.402 110.34L215.625 110.197C215.735 110.125 215.822 110.181 215.822 110.325Z" fill="#D48806"/>
<path d="M214.826 110.968V112.056C214.826 112.2 214.739 112.368 214.629 112.44L214.406 112.583C214.296 112.654 214.209 112.598 214.209 112.455V111.367C214.209 111.224 214.296 111.055 214.406 110.983L214.629 110.84C214.734 110.769 214.826 110.825 214.826 110.968Z" fill="#D48806"/>
<path d="M213.826 111.612V112.7C213.826 112.843 213.739 113.012 213.629 113.084L213.406 113.227C213.296 113.298 213.209 113.242 213.209 113.099V112.011C213.209 111.867 213.296 111.699 213.406 111.627L213.629 111.484C213.734 111.413 213.826 111.469 213.826 111.612Z" fill="#D48806"/>
<path d="M212.827 112.256V113.344C212.827 113.487 212.74 113.656 212.63 113.727L212.407 113.87C212.297 113.942 212.21 113.886 212.21 113.743V112.654C212.21 112.511 212.297 112.343 212.407 112.271L212.63 112.128C212.74 112.057 212.827 112.118 212.827 112.256Z" fill="#D48806"/>
<path d="M211.827 112.899V113.988C211.827 114.131 211.74 114.299 211.63 114.371L211.407 114.514C211.297 114.586 211.21 114.529 211.21 114.386V113.298C211.21 113.155 211.297 112.986 211.407 112.915L211.63 112.772C211.74 112.705 211.827 112.762 211.827 112.899Z" fill="#D48806"/>
<path d="M210.827 113.549V114.637C210.827 114.78 210.74 114.949 210.631 115.02L210.407 115.163C210.298 115.235 210.211 115.178 210.211 115.035V113.947C210.211 113.804 210.298 113.635 210.407 113.564L210.631 113.421C210.74 113.349 210.827 113.405 210.827 113.549Z" fill="#D48806"/>
<path d="M209.828 114.192V115.28C209.828 115.423 209.741 115.592 209.631 115.664L209.408 115.807C209.298 115.878 209.211 115.822 209.211 115.679V114.591C209.211 114.448 209.298 114.279 209.408 114.207L209.631 114.064C209.741 113.993 209.828 114.049 209.828 114.192Z" fill="#D48806"/>
<path d="M208.832 114.836V115.925C208.832 116.068 208.745 116.236 208.636 116.308L208.412 116.451C208.302 116.522 208.216 116.466 208.216 116.323V115.235C208.216 115.092 208.302 114.923 208.412 114.852L208.636 114.709C208.741 114.637 208.832 114.693 208.832 114.836Z" fill="#FFF1B8"/>
<path d="M207.833 115.48V116.568C207.833 116.711 207.746 116.88 207.636 116.951L207.413 117.094C207.303 117.166 207.216 117.11 207.216 116.967V115.878C207.216 115.735 207.303 115.567 207.413 115.495L207.636 115.352C207.741 115.281 207.833 115.337 207.833 115.48Z" fill="#D48806"/>
<path d="M206.833 116.124V117.212C206.833 117.355 206.746 117.524 206.636 117.595L206.413 117.738C206.303 117.81 206.216 117.754 206.216 117.611V116.522C206.216 116.379 206.303 116.211 206.413 116.139L206.636 115.996C206.746 115.924 206.833 115.986 206.833 116.124Z" fill="#D48806"/>
<path d="M205.833 116.768V117.856C205.833 117.999 205.746 118.168 205.637 118.239L205.413 118.382C205.303 118.454 205.217 118.397 205.217 118.254V117.166C205.217 117.023 205.303 116.854 205.413 116.783L205.637 116.64C205.746 116.568 205.833 116.63 205.833 116.768Z" fill="#D48806"/>
<path d="M204.833 117.411V118.5C204.833 118.643 204.747 118.811 204.637 118.883L204.413 119.026C204.304 119.097 204.217 119.041 204.217 118.898V117.81C204.217 117.667 204.304 117.498 204.413 117.427L204.637 117.283C204.747 117.217 204.833 117.273 204.833 117.411Z" fill="#D48806"/>
<path d="M220.82 110.324V111.413C220.82 111.556 220.734 111.724 220.624 111.796L220.4 111.939C220.291 112.01 220.204 111.954 220.204 111.811V110.723C220.204 110.58 220.291 110.411 220.4 110.34L220.624 110.197C220.729 110.125 220.82 110.181 220.82 110.324Z" fill="#D48806"/>
<path d="M219.82 110.968V112.056C219.82 112.199 219.734 112.368 219.624 112.439L219.4 112.582C219.291 112.654 219.204 112.598 219.204 112.455V111.366C219.204 111.223 219.291 111.055 219.4 110.983L219.624 110.84C219.729 110.769 219.82 110.825 219.82 110.968Z" fill="#FFF1B8"/>
<path d="M218.82 111.612V112.7C218.82 112.843 218.733 113.012 218.624 113.084L218.4 113.227C218.29 113.298 218.204 113.242 218.204 113.099V112.011C218.204 111.867 218.29 111.699 218.4 111.627L218.624 111.484C218.733 111.413 218.82 111.469 218.82 111.612Z" fill="#FFF1B8"/>
<path d="M217.82 112.256V113.344C217.82 113.487 217.734 113.656 217.624 113.727L217.4 113.87C217.291 113.942 217.204 113.885 217.204 113.742V112.654C217.204 112.511 217.291 112.342 217.4 112.271L217.624 112.128C217.734 112.056 217.82 112.118 217.82 112.256Z" fill="#D48806"/>
<path d="M216.822 112.899V113.988C216.822 114.131 216.735 114.299 216.625 114.371L216.402 114.514C216.292 114.586 216.205 114.529 216.205 114.386V113.298C216.205 113.155 216.292 112.986 216.402 112.915L216.625 112.772C216.735 112.705 216.822 112.762 216.822 112.899Z" fill="#D48806"/>
<path d="M215.822 113.549V114.637C215.822 114.78 215.735 114.949 215.625 115.02L215.402 115.163C215.292 115.235 215.205 115.178 215.205 115.035V113.947C215.205 113.804 215.292 113.635 215.402 113.564L215.625 113.421C215.735 113.349 215.822 113.405 215.822 113.549Z" fill="#FFF1B8"/>
<path d="M214.826 114.192V115.28C214.826 115.423 214.739 115.592 214.629 115.664L214.406 115.807C214.296 115.878 214.209 115.822 214.209 115.679V114.591C214.209 114.448 214.296 114.279 214.406 114.207L214.629 114.064C214.734 113.993 214.826 114.049 214.826 114.192Z" fill="#D48806"/>
<path d="M213.826 114.836V115.924C213.826 116.067 213.739 116.236 213.629 116.308L213.406 116.451C213.296 116.522 213.209 116.466 213.209 116.323V115.235C213.209 115.091 213.296 114.923 213.406 114.851L213.629 114.708C213.734 114.637 213.826 114.693 213.826 114.836Z" fill="#D48806"/>
<path d="M212.827 115.48V116.568C212.827 116.711 212.74 116.88 212.63 116.951L212.407 117.094C212.297 117.166 212.21 117.109 212.21 116.966V115.878C212.21 115.735 212.297 115.566 212.407 115.495L212.63 115.352C212.74 115.28 212.827 115.336 212.827 115.48Z" fill="#D48806"/>
<path d="M211.827 116.123V117.212C211.827 117.355 211.74 117.523 211.63 117.595L211.407 117.738C211.297 117.81 211.21 117.753 211.21 117.61V116.522C211.21 116.379 211.297 116.21 211.407 116.139L211.63 115.996C211.74 115.924 211.827 115.985 211.827 116.123Z" fill="#D48806"/>
<path d="M210.827 116.767V117.856C210.827 117.999 210.74 118.167 210.631 118.239L210.407 118.382C210.298 118.453 210.211 118.397 210.211 118.254V117.166C210.211 117.023 210.298 116.854 210.407 116.783L210.631 116.64C210.74 116.568 210.827 116.629 210.827 116.767Z" fill="#FFF1B8"/>
<path d="M209.828 117.411V118.499C209.828 118.642 209.741 118.811 209.631 118.882L209.408 119.026C209.298 119.097 209.211 119.041 209.211 118.898V117.809C209.211 117.666 209.298 117.498 209.408 117.426L209.631 117.283C209.741 117.217 209.828 117.273 209.828 117.411Z" fill="#FFF1B8"/>
<path d="M208.832 118.06V119.149C208.832 119.292 208.745 119.46 208.636 119.532L208.412 119.675C208.302 119.746 208.216 119.69 208.216 119.547V118.459C208.216 118.316 208.302 118.147 208.412 118.076L208.636 117.933C208.741 117.861 208.832 117.917 208.832 118.06Z" fill="#D48806"/>
<path d="M207.833 118.704V119.792C207.833 119.935 207.746 120.104 207.636 120.175L207.413 120.318C207.303 120.39 207.216 120.334 207.216 120.191V119.102C207.216 118.959 207.303 118.791 207.413 118.719L207.636 118.576C207.741 118.505 207.833 118.561 207.833 118.704Z" fill="#D48806"/>
<path d="M206.833 119.348V120.436C206.833 120.579 206.746 120.748 206.636 120.819L206.413 120.962C206.303 121.034 206.216 120.978 206.216 120.835V119.746C206.216 119.603 206.303 119.435 206.413 119.363L206.636 119.22C206.746 119.148 206.833 119.205 206.833 119.348Z" fill="#D48806"/>
<path d="M205.833 119.991V121.08C205.833 121.223 205.746 121.391 205.637 121.463L205.413 121.606C205.303 121.677 205.217 121.621 205.217 121.478V120.39C205.217 120.247 205.303 120.078 205.413 120.007L205.637 119.864C205.746 119.792 205.833 119.848 205.833 119.991Z" fill="#FFF1B8"/>
<path d="M204.833 120.635V121.723C204.833 121.866 204.747 122.035 204.637 122.107L204.413 122.25C204.304 122.321 204.217 122.265 204.217 122.122V121.034C204.217 120.891 204.304 120.722 204.413 120.65L204.637 120.507C204.747 120.436 204.833 120.497 204.833 120.635Z" fill="#D48806"/>
<path d="M201.497 121.09L201.045 120.799H201.04C200.885 120.702 200.67 120.717 200.437 120.865C199.963 121.172 199.579 121.918 199.579 122.531C199.579 122.837 199.675 123.052 199.83 123.154L200.25 123.425L200.328 123.282C200.405 123.261 200.488 123.231 200.574 123.175C201.049 122.868 201.433 122.122 201.433 121.509C201.433 121.417 201.424 121.335 201.405 121.264L201.497 121.09Z" fill="#D48806"/>
<path opacity="0.2" d="M201.497 121.09L201.045 120.799H201.04C200.885 120.702 200.67 120.717 200.437 120.865C199.963 121.172 199.579 121.918 199.579 122.531C199.579 122.837 199.675 123.052 199.83 123.154L200.25 123.425L200.328 123.282C200.405 123.261 200.488 123.231 200.574 123.175C201.049 122.868 201.433 122.122 201.433 121.509C201.433 121.417 201.424 121.335 201.405 121.264L201.497 121.09Z" fill="#874D00"/>
<path d="M200.871 121.146C200.396 121.453 200.012 122.199 200.012 122.812C200.012 123.425 200.396 123.675 200.871 123.369C201.345 123.062 201.729 122.316 201.729 121.703C201.734 121.085 201.345 120.839 200.871 121.146Z" fill="#D48806"/>
<path d="M197.769 123.502L197.317 123.21H197.312C197.157 123.113 196.942 123.129 196.709 123.277C196.235 123.583 195.851 124.329 195.851 124.943C195.851 125.249 195.947 125.464 196.102 125.566L196.522 125.837L196.6 125.694C196.677 125.673 196.76 125.643 196.846 125.586C197.321 125.28 197.705 124.534 197.705 123.921C197.705 123.829 197.696 123.747 197.677 123.675L197.769 123.502Z" fill="#D48806"/>
<path opacity="0.2" d="M197.769 123.502L197.317 123.21H197.312C197.157 123.113 196.942 123.129 196.709 123.277C196.235 123.583 195.851 124.329 195.851 124.943C195.851 125.249 195.947 125.464 196.102 125.566L196.522 125.837L196.6 125.694C196.677 125.673 196.76 125.643 196.846 125.586C197.321 125.28 197.705 124.534 197.705 123.921C197.705 123.829 197.696 123.747 197.677 123.675L197.769 123.502Z" fill="#874D00"/>
<path d="M197.147 123.553C196.672 123.859 196.289 124.605 196.289 125.218C196.289 125.832 196.672 126.082 197.147 125.775C197.622 125.469 198.005 124.723 198.005 124.11C198.005 123.497 197.617 123.246 197.147 123.553Z" fill="#D48806"/>
<path d="M222.675 88.8689L193.006 108.04L163.332 88.8689L193.006 69.698L222.675 88.8689Z" fill="#FFF1B8"/>
<path d="M222.675 98.4543L193.006 117.63V108.04L222.675 88.8689V98.4543Z" fill="#D48806"/>
<path d="M193.005 117.63L163.332 98.4543V88.8689L193.005 108.04V117.63Z" fill="#D48806"/>
<path d="M218.962 103.247V100.851L193.005 117.63V120.027L218.962 103.247Z" fill="#D48806"/>
<path d="M165.185 99.6547L165.19 102.051L193.005 120.026V117.63L165.185 99.6547Z" fill="#D48806"/>
<path opacity="0.2" d="M165.185 99.6547L165.19 102.051L193.005 120.026V117.63L165.185 99.6547Z" fill="#874D00"/>
<path d="M220.82 92.7216V93.81C220.82 93.953 220.734 94.1216 220.624 94.1932L220.4 94.3362C220.291 94.4078 220.204 94.3516 220.204 94.2085V93.1202C220.204 92.9771 220.291 92.8085 220.4 92.737L220.624 92.5939C220.729 92.5224 220.82 92.5786 220.82 92.7216Z" fill="#D48806"/>
<path d="M219.82 93.3652V94.4535C219.82 94.5966 219.734 94.7652 219.624 94.8368L219.4 94.9798C219.291 95.0514 219.204 94.9951 219.204 94.8521V93.7638C219.204 93.6207 219.291 93.4521 219.4 93.3805L219.624 93.2375C219.729 93.1659 219.82 93.2221 219.82 93.3652Z" fill="#FFF1B8"/>
<path d="M218.82 94.0094V95.0977C218.82 95.2408 218.733 95.4094 218.624 95.4809L218.4 95.624C218.29 95.6955 218.204 95.6393 218.204 95.4962V94.4079C218.204 94.2649 218.29 94.0962 218.4 94.0247L218.624 93.8816C218.733 93.8101 218.82 93.8663 218.82 94.0094Z" fill="#D48806"/>
<path d="M217.82 94.6529V95.7412C217.82 95.8843 217.734 96.0529 217.624 96.1245L217.4 96.2675C217.291 96.3391 217.204 96.2828 217.204 96.1398V95.0515C217.204 94.9084 217.291 94.7398 217.4 94.6682L217.624 94.5252C217.734 94.4536 217.82 94.515 217.82 94.6529Z" fill="#FFF1B8"/>
<path d="M216.822 95.2969V96.3852C216.822 96.5283 216.735 96.6969 216.625 96.7684L216.402 96.9115C216.292 96.983 216.205 96.9268 216.205 96.7837V95.6954C216.205 95.5523 216.292 95.3837 216.402 95.3122L216.625 95.1691C216.735 95.1027 216.822 95.1589 216.822 95.2969Z" fill="#FFF1B8"/>
<path d="M215.822 95.9407V97.0291C215.822 97.1721 215.735 97.3407 215.625 97.4123L215.402 97.5553C215.292 97.6269 215.205 97.5707 215.205 97.4276V96.3393C215.205 96.1962 215.292 96.0276 215.402 95.9561L215.625 95.813C215.735 95.7466 215.822 95.8028 215.822 95.9407Z" fill="#FFF1B8"/>
<path d="M214.826 96.5895V97.6778C214.826 97.8209 214.739 97.9895 214.629 98.061L214.406 98.2041C214.296 98.2756 214.209 98.2194 214.209 98.0764V96.988C214.209 96.845 214.296 96.6763 214.406 96.6048L214.629 96.4617C214.734 96.3902 214.826 96.4464 214.826 96.5895Z" fill="#FFF1B8"/>
<path d="M213.826 97.2334V98.3217C213.826 98.4647 213.739 98.6334 213.629 98.7049L213.406 98.848C213.296 98.9195 213.209 98.8633 213.209 98.7202V97.6319C213.209 97.4888 213.296 97.3202 213.406 97.2487L213.629 97.1056C213.734 97.0341 213.826 97.0903 213.826 97.2334Z" fill="#D48806"/>
<path d="M212.827 97.8769V98.9653C212.827 99.1083 212.74 99.2769 212.63 99.3485L212.407 99.4915C212.297 99.5631 212.21 99.5069 212.21 99.3638V98.2755C212.21 98.1324 212.297 97.9638 212.407 97.8923L212.63 97.7492C212.74 97.6777 212.827 97.7339 212.827 97.8769Z" fill="#D48806"/>
<path d="M211.827 98.5211V99.6094C211.827 99.7525 211.74 99.9211 211.63 99.9926L211.407 100.136C211.297 100.207 211.21 100.151 211.21 100.008V98.9196C211.21 98.7766 211.297 98.608 211.407 98.5364L211.63 98.3934C211.74 98.3218 211.827 98.378 211.827 98.5211Z" fill="#D48806"/>
<path d="M210.827 99.1646V100.253C210.827 100.396 210.74 100.565 210.631 100.636L210.407 100.779C210.298 100.851 210.211 100.795 210.211 100.652V99.5632C210.211 99.4201 210.298 99.2515 210.407 99.18L210.631 99.0369C210.74 98.9654 210.827 99.0267 210.827 99.1646Z" fill="#D48806"/>
<path d="M209.828 99.8083V100.897C209.828 101.04 209.741 101.208 209.631 101.28L209.408 101.423C209.298 101.494 209.211 101.438 209.211 101.295V100.207C209.211 100.064 209.298 99.8952 209.408 99.8236L209.631 99.6806C209.741 99.6141 209.828 99.6703 209.828 99.8083Z" fill="#FFF1B8"/>
<path d="M208.832 100.458V101.546C208.832 101.689 208.745 101.858 208.636 101.929L208.412 102.072C208.302 102.144 208.216 102.088 208.216 101.944V100.856C208.216 100.713 208.302 100.544 208.412 100.473L208.636 100.33C208.741 100.258 208.832 100.315 208.832 100.458Z" fill="#FFF1B8"/>
<path d="M207.833 101.101V102.19C207.833 102.333 207.746 102.501 207.636 102.573L207.413 102.716C207.303 102.787 207.216 102.731 207.216 102.588V101.5C207.216 101.357 207.303 101.188 207.413 101.117L207.636 100.973C207.741 100.902 207.833 100.958 207.833 101.101Z" fill="#FFF1B8"/>
<path d="M206.833 101.745V102.833C206.833 102.976 206.746 103.145 206.636 103.217L206.413 103.36C206.303 103.431 206.216 103.375 206.216 103.232V102.144C206.216 102.001 206.303 101.832 206.413 101.76L206.636 101.617C206.746 101.546 206.833 101.602 206.833 101.745Z" fill="#D48806"/>
<path d="M205.833 102.389V103.477C205.833 103.62 205.746 103.789 205.637 103.86L205.413 104.003C205.303 104.075 205.217 104.019 205.217 103.876V102.787C205.217 102.644 205.303 102.476 205.413 102.404L205.637 102.261C205.746 102.189 205.833 102.246 205.833 102.389Z" fill="#FFF1B8"/>
<path d="M204.833 103.032V104.121C204.833 104.264 204.747 104.432 204.637 104.504L204.413 104.647C204.304 104.719 204.217 104.662 204.217 104.519V103.431C204.217 103.288 204.304 103.119 204.413 103.048L204.637 102.905C204.747 102.833 204.833 102.895 204.833 103.032Z" fill="#FFF1B8"/>
<path d="M220.82 95.9404V97.0288C220.82 97.1718 220.734 97.3404 220.624 97.412L220.4 97.555C220.291 97.6266 220.204 97.5704 220.204 97.4273V96.339C220.204 96.1959 220.291 96.0273 220.4 95.9558L220.624 95.8127C220.729 95.7463 220.82 95.8025 220.82 95.9404Z" fill="#FFF1B8"/>
<path d="M219.82 96.5892V97.6775C219.82 97.8206 219.734 97.9892 219.624 98.0607L219.4 98.2038C219.291 98.2753 219.204 98.2191 219.204 98.0761V96.9877C219.204 96.8447 219.291 96.6761 219.4 96.6045L219.624 96.4615C219.729 96.3899 219.82 96.4461 219.82 96.5892Z" fill="#FFF1B8"/>
<path d="M218.82 97.2331V98.3214C218.82 98.4645 218.733 98.6331 218.624 98.7046L218.4 98.8477C218.29 98.9192 218.204 98.863 218.204 98.7199V97.6316C218.204 97.4885 218.29 97.3199 218.4 97.2484L218.624 97.1053C218.733 97.0338 218.82 97.09 218.82 97.2331Z" fill="#D48806"/>
<path d="M217.82 97.8769V98.9653C217.82 99.1083 217.734 99.2769 217.624 99.3485L217.4 99.4915C217.291 99.5631 217.204 99.5069 217.204 99.3638V98.2755C217.204 98.1324 217.291 97.9638 217.4 97.8923L217.624 97.7492C217.734 97.6777 217.82 97.7339 217.82 97.8769Z" fill="#FFF1B8"/>
<path d="M216.822 98.5208V99.6091C216.822 99.7522 216.735 99.9208 216.625 99.9923L216.402 100.135C216.292 100.207 216.205 100.151 216.205 100.008V98.9194C216.205 98.7763 216.292 98.6077 216.402 98.5361L216.625 98.3931C216.735 98.3215 216.822 98.3777 216.822 98.5208Z" fill="#FFF1B8"/>
<path d="M215.822 99.1646V100.253C215.822 100.396 215.735 100.565 215.625 100.636L215.402 100.779C215.292 100.851 215.205 100.795 215.205 100.652V99.5632C215.205 99.4201 215.292 99.2515 215.402 99.18L215.625 99.0369C215.735 98.9654 215.822 99.0267 215.822 99.1646Z" fill="#FFF1B8"/>
<path d="M214.826 99.8083V100.897C214.826 101.04 214.739 101.208 214.629 101.28L214.406 101.423C214.296 101.494 214.209 101.438 214.209 101.295V100.207C214.209 100.064 214.296 99.8952 214.406 99.8236L214.629 99.6806C214.734 99.6141 214.826 99.6703 214.826 99.8083Z" fill="#FFF1B8"/>
<path d="M213.826 100.457V101.546C213.826 101.689 213.739 101.857 213.629 101.929L213.406 102.072C213.296 102.143 213.209 102.087 213.209 101.944V100.856C213.209 100.713 213.296 100.544 213.406 100.473L213.629 100.33C213.734 100.258 213.826 100.314 213.826 100.457Z" fill="#D48806"/>
<path d="M212.827 101.101V102.189C212.827 102.332 212.74 102.501 212.63 102.572L212.407 102.716C212.297 102.787 212.21 102.731 212.21 102.588V101.499C212.21 101.356 212.297 101.188 212.407 101.116L212.63 100.973C212.74 100.902 212.827 100.958 212.827 101.101Z" fill="#FFF1B8"/>
<path d="M211.827 101.745V102.833C211.827 102.976 211.74 103.145 211.63 103.216L211.407 103.359C211.297 103.431 211.21 103.375 211.21 103.232V102.143C211.21 102 211.297 101.832 211.407 101.76L211.63 101.617C211.74 101.546 211.827 101.602 211.827 101.745Z" fill="#FFF1B8"/>
<path d="M210.827 102.389V103.477C210.827 103.62 210.74 103.789 210.631 103.86L210.407 104.003C210.298 104.075 210.211 104.019 210.211 103.876V102.787C210.211 102.644 210.298 102.476 210.407 102.404L210.631 102.261C210.74 102.189 210.827 102.246 210.827 102.389Z" fill="#FFF1B8"/>
<path d="M209.828 103.032V104.121C209.828 104.264 209.741 104.432 209.631 104.504L209.408 104.647C209.298 104.719 209.211 104.662 209.211 104.519V103.431C209.211 103.288 209.298 103.119 209.408 103.048L209.631 102.905C209.741 102.833 209.828 102.895 209.828 103.032Z" fill="#D48806"/>
<path d="M208.832 103.676V104.765C208.832 104.908 208.745 105.076 208.636 105.148L208.412 105.291C208.302 105.363 208.216 105.306 208.216 105.163V104.075C208.216 103.932 208.302 103.763 208.412 103.692L208.636 103.549C208.741 103.482 208.832 103.538 208.832 103.676Z" fill="#D48806"/>
<path d="M207.833 104.32V105.408C207.833 105.551 207.746 105.72 207.636 105.792L207.413 105.935C207.303 106.006 207.216 105.95 207.216 105.807V104.719C207.216 104.575 207.303 104.407 207.413 104.335L207.636 104.192C207.741 104.126 207.833 104.182 207.833 104.32Z" fill="#FFF1B8"/>
<path d="M206.833 104.969V106.057C206.833 106.2 206.746 106.369 206.636 106.441L206.413 106.584C206.303 106.655 206.216 106.599 206.216 106.456V105.368C206.216 105.225 206.303 105.056 206.413 104.984L206.636 104.841C206.746 104.77 206.833 104.826 206.833 104.969Z" fill="#FFF1B8"/>
<path d="M205.833 105.613V106.701C205.833 106.844 205.746 107.013 205.637 107.084L205.413 107.227C205.303 107.299 205.217 107.243 205.217 107.1V106.011C205.217 105.868 205.303 105.7 205.413 105.628L205.637 105.485C205.746 105.413 205.833 105.47 205.833 105.613Z" fill="#FFF1B8"/>
<path d="M204.833 106.257V107.345C204.833 107.488 204.747 107.657 204.637 107.728L204.413 107.871C204.304 107.943 204.217 107.886 204.217 107.743V106.655C204.217 106.512 204.304 106.343 204.413 106.272L204.637 106.129C204.747 106.057 204.833 106.113 204.833 106.257Z" fill="#FFF1B8"/>
<path d="M201.497 106.711L201.045 106.42H201.04C200.885 106.323 200.67 106.338 200.437 106.486C199.963 106.793 199.579 107.539 199.579 108.152C199.579 108.459 199.675 108.673 199.83 108.775L200.25 109.046L200.328 108.903C200.405 108.883 200.488 108.852 200.574 108.796C201.049 108.489 201.433 107.743 201.433 107.13C201.433 107.038 201.424 106.956 201.405 106.885L201.497 106.711Z" fill="#D48806"/>
<path opacity="0.2" d="M201.497 106.711L201.045 106.42H201.04C200.885 106.323 200.67 106.338 200.437 106.486C199.963 106.793 199.579 107.539 199.579 108.152C199.579 108.459 199.675 108.673 199.83 108.775L200.25 109.046L200.328 108.903C200.405 108.883 200.488 108.852 200.574 108.796C201.049 108.489 201.433 107.743 201.433 107.13C201.433 107.038 201.424 106.956 201.405 106.885L201.497 106.711Z" fill="#874D00"/>
<path d="M200.871 106.767C200.396 107.074 200.012 107.82 200.012 108.433C200.012 109.046 200.396 109.297 200.871 108.99C201.345 108.683 201.729 107.937 201.729 107.324C201.734 106.706 201.345 106.461 200.871 106.767Z" fill="#D48806"/>
<path d="M197.769 109.118L197.317 108.827H197.312C197.157 108.729 196.942 108.745 196.709 108.893C196.235 109.2 195.851 109.946 195.851 110.559C195.851 110.865 195.947 111.08 196.102 111.182L196.522 111.453L196.6 111.31C196.677 111.289 196.76 111.259 196.846 111.202C197.321 110.896 197.705 110.15 197.705 109.537C197.705 109.445 197.696 109.363 197.677 109.292L197.769 109.118Z" fill="#D48806"/>
<path opacity="0.2" d="M197.769 109.118L197.317 108.827H197.312C197.157 108.729 196.942 108.745 196.709 108.893C196.235 109.2 195.851 109.946 195.851 110.559C195.851 110.865 195.947 111.08 196.102 111.182L196.522 111.453L196.6 111.31C196.677 111.289 196.76 111.259 196.846 111.202C197.321 110.896 197.705 110.15 197.705 109.537C197.705 109.445 197.696 109.363 197.677 109.292L197.769 109.118Z" fill="#874D00"/>
<path d="M197.147 109.174C196.672 109.481 196.289 110.227 196.289 110.84C196.289 111.453 196.672 111.703 197.147 111.397C197.622 111.09 198.005 110.344 198.005 109.731C198.005 109.118 197.617 108.868 197.147 109.174Z" fill="#D48806"/>
<path d="M222.675 74.4907L193.006 93.6616L163.332 74.4907L193.006 55.3147L222.675 74.4907Z" fill="#FFF1B8"/>
<path d="M222.675 84.076L193.006 103.247V93.6615L222.675 74.4906V84.076Z" fill="#D48806"/>
<path d="M193.005 103.247L163.332 84.076V74.4906L193.005 93.6615V103.247Z" fill="#D48806"/>
<path d="M218.962 88.8688V86.4725L193.005 103.247V105.643L218.962 88.8688Z" fill="#D48806"/>
<path d="M165.185 85.2718L165.19 87.6732L193.005 105.643V103.247L165.185 85.2718Z" fill="#D48806"/>
<path opacity="0.2" d="M165.185 85.2718L165.19 87.6732L193.005 105.643V103.247L165.185 85.2718Z" fill="#874D00"/>
<path d="M220.82 78.3381V79.4265C220.82 79.5695 220.734 79.7381 220.624 79.8097L220.4 79.9527C220.291 80.0243 220.204 79.9681 220.204 79.825V78.7367C220.204 78.5936 220.291 78.425 220.4 78.3535L220.619 78.2104C220.729 78.144 220.82 78.2002 220.82 78.3381Z" fill="#D48806"/>
<path d="M219.82 78.9869V80.0752C219.82 80.2183 219.734 80.3869 219.624 80.4584L219.4 80.6015C219.291 80.673 219.204 80.6168 219.204 80.4738V79.3854C219.204 79.2424 219.291 79.0738 219.4 79.0022L219.624 78.8592C219.729 78.7876 219.82 78.8438 219.82 78.9869Z" fill="#D48806"/>
<path d="M218.82 79.6308V80.7191C218.82 80.8622 218.733 81.0308 218.624 81.1023L218.4 81.2403C218.29 81.3118 218.204 81.2556 218.204 81.1125V80.0242C218.204 79.8811 218.29 79.7125 218.4 79.641L218.624 79.503C218.733 79.4315 218.82 79.4877 218.82 79.6308Z" fill="#FFF1B8"/>
<path d="M217.82 80.2746V81.363C217.82 81.506 217.734 81.6746 217.624 81.7462L217.4 81.8892C217.291 81.9608 217.204 81.9046 217.204 81.7615V80.6732C217.204 80.5301 217.291 80.3615 217.4 80.29L217.624 80.1469C217.734 80.0754 217.82 80.1316 217.82 80.2746Z" fill="#D48806"/>
<path d="M216.822 80.9185V82.0068C216.822 82.1499 216.735 82.3185 216.625 82.39L216.402 82.5331C216.292 82.6046 216.205 82.5484 216.205 82.4054V81.317C216.205 81.174 216.292 81.0054 216.402 80.9338L216.625 80.7908C216.735 80.7192 216.822 80.7754 216.822 80.9185Z" fill="#D48806"/>
<path d="M215.822 81.5623V82.6507C215.822 82.7937 215.735 82.9623 215.625 83.0339L215.402 83.1769C215.292 83.2485 215.205 83.1923 215.205 83.0492V81.9609C215.205 81.8178 215.292 81.6492 215.402 81.5777L215.625 81.4346C215.735 81.3631 215.822 81.4244 215.822 81.5623Z" fill="#FFF1B8"/>
<path d="M214.826 82.206V83.2943C214.826 83.4374 214.739 83.606 214.629 83.6775L214.406 83.8206C214.296 83.8921 214.209 83.8359 214.209 83.6929V82.6045C214.209 82.4615 214.296 82.2929 214.406 82.2213L214.629 82.0783C214.734 82.0118 214.826 82.068 214.826 82.206Z" fill="#FFF1B8"/>
<path d="M213.826 82.855V83.9434C213.826 84.0864 213.739 84.255 213.629 84.3266L213.406 84.4696C213.296 84.5412 213.209 84.485 213.209 84.3419V83.2536C213.209 83.1105 213.296 82.9419 213.406 82.8704L213.629 82.7273C213.734 82.6558 213.826 82.712 213.826 82.855Z" fill="#D48806"/>
<path d="M212.827 83.4986V84.5869C212.827 84.73 212.74 84.8986 212.63 84.9702L212.407 85.1132C212.297 85.1848 212.21 85.1286 212.21 84.9855V83.8972C212.21 83.7541 212.297 83.5855 212.407 83.5139L212.63 83.3709C212.74 83.2993 212.827 83.3556 212.827 83.4986Z" fill="#FFF1B8"/>
<path d="M211.827 84.1425V85.2308C211.827 85.3739 211.74 85.5425 211.63 85.614L211.407 85.7571C211.297 85.8286 211.21 85.7724 211.21 85.6294V84.541C211.21 84.398 211.297 84.2294 211.407 84.1578L211.63 84.0148C211.74 83.9432 211.827 83.9994 211.827 84.1425Z" fill="#D48806"/>
<path d="M210.827 84.7864V85.8747C210.827 86.0178 210.74 86.1864 210.631 86.2579L210.407 86.401C210.298 86.4725 210.211 86.4163 210.211 86.2732V85.1849C210.211 85.0418 210.298 84.8732 210.407 84.8017L210.631 84.6586C210.74 84.5871 210.827 84.6433 210.827 84.7864Z" fill="#D48806"/>
<path d="M209.828 85.4302V86.5185C209.828 86.6616 209.741 86.8302 209.631 86.9017L209.408 87.0448C209.298 87.1163 209.211 87.0601 209.211 86.917V85.8287C209.211 85.6857 209.298 85.517 209.408 85.4455L209.631 85.3024C209.741 85.2309 209.828 85.2922 209.828 85.4302Z" fill="#D48806"/>
<path d="M208.832 86.0741V87.1624C208.832 87.3054 208.745 87.4741 208.636 87.5456L208.412 87.6887C208.302 87.7602 208.216 87.704 208.216 87.5609V86.4726C208.216 86.3295 208.302 86.1609 208.412 86.0894L208.636 85.9463C208.741 85.8748 208.832 85.9361 208.832 86.0741Z" fill="#D48806"/>
<path d="M207.833 86.7177V87.806C207.833 87.9491 207.746 88.1177 207.636 88.1893L207.413 88.3323C207.303 88.4039 207.216 88.3476 207.216 88.2046V87.1163C207.216 86.9732 207.303 86.8046 207.413 86.733L207.636 86.59C207.741 86.5236 207.833 86.5798 207.833 86.7177Z" fill="#FFF1B8"/>
<path d="M206.833 87.3668V88.4551C206.833 88.5982 206.746 88.7668 206.636 88.8383L206.413 88.9814C206.303 89.0529 206.216 88.9967 206.216 88.8536V87.7653C206.216 87.6222 206.303 87.4536 206.413 87.3821L206.636 87.239C206.746 87.1675 206.833 87.2237 206.833 87.3668Z" fill="#FFF1B8"/>
<path d="M205.833 88.0103V89.0987C205.833 89.2417 205.746 89.4103 205.637 89.4819L205.413 89.6249C205.303 89.6965 205.217 89.6403 205.217 89.4972V88.4089C205.217 88.2658 205.303 88.0972 205.413 88.0257L205.637 87.8826C205.746 87.8111 205.833 87.8673 205.833 88.0103Z" fill="#FFF1B8"/>
<path d="M204.833 88.6542V89.7425C204.833 89.8856 204.747 90.0542 204.637 90.1257L204.413 90.2688C204.304 90.3403 204.217 90.2841 204.217 90.1411V89.0527C204.217 88.9097 204.304 88.7411 204.413 88.6695L204.637 88.5265C204.747 88.4549 204.833 88.5111 204.833 88.6542Z" fill="#D48806"/>
<path d="M220.82 81.5623V82.6507C220.82 82.7937 220.734 82.9623 220.624 83.0339L220.4 83.1769C220.291 83.2485 220.204 83.1923 220.204 83.0492V81.9609C220.204 81.8178 220.291 81.6492 220.4 81.5777L220.619 81.4346C220.729 81.3631 220.82 81.4244 220.82 81.5623Z" fill="#D48806"/>
<path d="M219.82 82.206V83.2943C219.82 83.4374 219.734 83.606 219.624 83.6775L219.4 83.8206C219.291 83.8921 219.204 83.8359 219.204 83.6929V82.6045C219.204 82.4615 219.291 82.2929 219.4 82.2213L219.624 82.0783C219.729 82.0118 219.82 82.068 219.82 82.206Z" fill="#D48806"/>
<path d="M218.82 82.855V83.9434C218.82 84.0864 218.733 84.255 218.624 84.3266L218.4 84.4696C218.29 84.5412 218.204 84.485 218.204 84.3419V83.2536C218.204 83.1105 218.29 82.9419 218.4 82.8704L218.624 82.7273C218.733 82.6558 218.82 82.712 218.82 82.855Z" fill="#D48806"/>
<path d="M217.82 83.4989V84.5872C217.82 84.7303 217.734 84.8989 217.624 84.9704L217.4 85.1135C217.291 85.185 217.204 85.1288 217.204 84.9858V83.8974C217.204 83.7544 217.291 83.5858 217.4 83.5142L217.624 83.3712C217.734 83.2996 217.82 83.3558 217.82 83.4989Z" fill="#FFF1B8"/>
<path d="M216.822 84.1428V85.2311C216.822 85.3742 216.735 85.5428 216.625 85.6143L216.402 85.7574C216.292 85.8289 216.205 85.7727 216.205 85.6296V84.5413C216.205 84.3983 216.292 84.2296 216.402 84.1581L216.625 84.015C216.735 83.9435 216.822 83.9997 216.822 84.1428Z" fill="#FFF1B8"/>
<path d="M215.822 84.7864V85.8747C215.822 86.0178 215.735 86.1864 215.625 86.2579L215.402 86.401C215.292 86.4725 215.205 86.4163 215.205 86.2732V85.1849C215.205 85.0418 215.292 84.8732 215.402 84.8017L215.625 84.6586C215.735 84.5871 215.822 84.6433 215.822 84.7864Z" fill="#D48806"/>
<path d="M214.826 85.4302V86.5185C214.826 86.6616 214.739 86.8302 214.629 86.9017L214.406 87.0448C214.296 87.1163 214.209 87.0601 214.209 86.9171V85.8287C214.209 85.6857 214.296 85.517 214.406 85.4455L214.629 85.3024C214.734 85.2309 214.826 85.2922 214.826 85.4302Z" fill="#D48806"/>
<path d="M213.826 86.0741V87.1624C213.826 87.3054 213.739 87.4741 213.629 87.5456L213.406 87.6887C213.296 87.7602 213.209 87.704 213.209 87.5609V86.4726C213.209 86.3295 213.296 86.1609 213.406 86.0894L213.629 85.9463C213.734 85.8748 213.826 85.9361 213.826 86.0741Z" fill="#D48806"/>
<path d="M212.827 86.7177V87.806C212.827 87.9491 212.74 88.1177 212.63 88.1893L212.407 88.3323C212.297 88.4039 212.21 88.3476 212.21 88.2046V87.1163C212.21 86.9732 212.297 86.8046 212.407 86.733L212.63 86.59C212.74 86.5236 212.827 86.5798 212.827 86.7177Z" fill="#FFF1B8"/>
<path d="M211.827 87.3668V88.4551C211.827 88.5982 211.74 88.7668 211.63 88.8383L211.407 88.9814C211.297 89.0529 211.21 88.9967 211.21 88.8536V87.7653C211.21 87.6222 211.297 87.4536 211.407 87.3821L211.63 87.239C211.74 87.1675 211.827 87.2237 211.827 87.3668Z" fill="#FFF1B8"/>
<path d="M210.827 88.0106V89.099C210.827 89.242 210.74 89.4106 210.631 89.4822L210.407 89.6252C210.298 89.6968 210.211 89.6406 210.211 89.4975V88.4092C210.211 88.2661 210.298 88.0975 210.407 88.026L210.631 87.8829C210.74 87.8114 210.827 87.8676 210.827 88.0106Z" fill="#FFF1B8"/>
<path d="M209.828 88.6545V89.7428C209.828 89.8859 209.741 90.0545 209.631 90.126L209.408 90.2691C209.298 90.3406 209.211 90.2844 209.211 90.1414V89.053C209.211 88.91 209.298 88.7414 209.408 88.6698L209.631 88.5268C209.741 88.4552 209.828 88.5114 209.828 88.6545Z" fill="#FFF1B8"/>
<path d="M208.832 89.2981V90.3864C208.832 90.5295 208.745 90.6981 208.636 90.7696L208.412 90.9127C208.302 90.9842 208.216 90.928 208.216 90.7849V89.6966C208.216 89.5536 208.302 89.3849 208.412 89.3134L208.636 89.1703C208.741 89.0988 208.832 89.155 208.832 89.2981Z" fill="#D48806"/>
<path d="M207.833 89.9419V91.0302C207.833 91.1733 207.746 91.3419 207.636 91.4134L207.413 91.5565C207.303 91.628 207.216 91.5718 207.216 91.4288V90.3404C207.216 90.1974 207.303 90.0288 207.413 89.9572L207.636 89.8142C207.741 89.7426 207.833 89.8039 207.833 89.9419Z" fill="#D48806"/>
<path d="M206.833 90.5859V91.6742C206.833 91.8172 206.746 91.9859 206.636 92.0574L206.413 92.2005C206.303 92.272 206.216 92.2158 206.216 92.0727V90.9844C206.216 90.8413 206.303 90.6727 206.413 90.6012L206.636 90.4581C206.746 90.3917 206.833 90.4479 206.833 90.5859Z" fill="#D48806"/>
<path d="M205.833 91.2346V92.3229C205.833 92.466 205.746 92.6346 205.637 92.7062L205.413 92.8492C205.303 92.9207 205.217 92.8645 205.217 92.7215V91.6331C205.217 91.4901 205.303 91.3215 205.413 91.2499L205.637 91.1069C205.746 91.0353 205.833 91.0915 205.833 91.2346Z" fill="#D48806"/>
<path d="M204.833 91.8782V92.9665C204.833 93.1096 204.747 93.2782 204.637 93.3497L204.413 93.4928C204.304 93.5643 204.217 93.5081 204.217 93.3651V92.2767C204.217 92.1337 204.304 91.9651 204.413 91.8935L204.637 91.7505C204.747 91.6789 204.833 91.7351 204.833 91.8782Z" fill="#D48806"/>
<path d="M201.497 92.3332L201.045 92.042H201.04C200.885 91.9449 200.67 91.9602 200.437 92.1084C199.963 92.415 199.579 93.1609 199.579 93.7741C199.579 94.0807 199.675 94.2953 199.83 94.3974L200.25 94.6682L200.328 94.5252C200.405 94.5047 200.488 94.4741 200.574 94.4179C201.049 94.1113 201.433 93.3653 201.433 92.7522C201.433 92.6602 201.424 92.5785 201.405 92.5069L201.497 92.3332Z" fill="#D48806"/>
<path opacity="0.2" d="M201.497 92.3332L201.045 92.042H201.04C200.885 91.9449 200.67 91.9602 200.437 92.1084C199.963 92.415 199.579 93.1609 199.579 93.7741C199.579 94.0807 199.675 94.2953 199.83 94.3974L200.25 94.6682L200.328 94.5252C200.405 94.5047 200.488 94.4741 200.574 94.4179C201.049 94.1113 201.433 93.3653 201.433 92.7522C201.433 92.6602 201.424 92.5785 201.405 92.5069L201.497 92.3332Z" fill="#874D00"/>
<path d="M200.871 92.3843C200.396 92.6909 200.012 93.4369 200.012 94.05C200.012 94.6632 200.396 94.9135 200.871 94.607C201.345 94.3004 201.729 93.5544 201.729 92.9413C201.734 92.3281 201.345 92.0778 200.871 92.3843Z" fill="#D48806"/>
<path d="M197.769 94.7398L197.317 94.4485H197.312C197.157 94.3514 196.942 94.3668 196.709 94.515C196.235 94.8215 195.851 95.5675 195.851 96.1806C195.851 96.4872 195.947 96.7018 196.102 96.804L196.522 97.0748L196.6 96.9317C196.677 96.9113 196.76 96.8807 196.846 96.8244C197.321 96.5179 197.705 95.7719 197.705 95.1587C197.705 95.0668 197.696 94.985 197.677 94.9135L197.769 94.7398Z" fill="#D48806"/>
<path opacity="0.2" d="M197.769 94.7398L197.317 94.4485H197.312C197.157 94.3514 196.942 94.3668 196.709 94.515C196.235 94.8215 195.851 95.5675 195.851 96.1806C195.851 96.4872 195.947 96.7018 196.102 96.804L196.522 97.0748L196.6 96.9317C196.677 96.9113 196.76 96.8807 196.846 96.8244C197.321 96.5179 197.705 95.7719 197.705 95.1587C197.705 95.0668 197.696 94.985 197.677 94.9135L197.769 94.7398Z" fill="#874D00"/>
<path d="M197.147 94.7959C196.672 95.1024 196.289 95.8484 196.289 96.4616C196.289 97.0747 196.672 97.3251 197.147 97.0185C197.622 96.7119 198.005 95.9659 198.005 95.3528C198.005 94.7346 197.617 94.4893 197.147 94.7959Z" fill="#D48806"/>
<path d="M164.519 59.3465L191.832 41.7033C192.485 41.2844 193.553 41.2844 194.206 41.7033L221.488 59.3465C222.141 59.7655 222.675 60.8027 222.675 61.6458V69.6983L192.987 88.8692L163.332 69.6983V61.6458C163.332 60.8027 163.866 59.7655 164.519 59.3465Z" fill="#D48806"/>
<path d="M192.987 78.834V88.8691L222.675 69.6982V61.6456C222.675 60.8996 222.255 59.9952 221.702 59.5149C222.136 59.939 222.063 60.5062 221.488 60.8792L194.17 78.5172C193.846 78.7267 193.416 78.834 192.987 78.834Z" fill="#D48806"/>
<path d="M221.488 60.8791L194.17 78.5171C193.517 78.9412 192.453 78.9412 191.796 78.5171L164.514 60.8791C163.861 60.455 163.861 59.7703 164.514 59.3462L191.832 41.7031C192.485 41.279 193.549 41.279 194.206 41.7031L221.488 59.3462C222.145 59.7652 222.145 60.455 221.488 60.8791Z" fill="#FFF1B8"/>
<path d="M218.962 74.4908V72.0944L193.005 88.8689V91.2653L218.962 74.4908Z" fill="#D48806"/>
<path d="M165.185 70.8937L165.19 73.2901L193.005 91.2654V88.869L165.185 70.8937Z" fill="#D48806"/>
<path opacity="0.2" d="M165.185 70.8937L165.19 73.2901L193.005 91.2654V88.869L165.185 70.8937Z" fill="#874D00"/>
<path d="M220.82 63.9603V65.0486C220.82 65.1917 220.734 65.3603 220.624 65.4318L220.4 65.5749C220.291 65.6464 220.204 65.5902 220.204 65.4472V64.3588C220.204 64.2158 220.291 64.0471 220.4 63.9756L220.619 63.8325C220.729 63.761 220.82 63.8223 220.82 63.9603Z" fill="#FFF1B8"/>
<path d="M219.82 64.604V65.6923C219.82 65.8353 219.734 66.004 219.624 66.0755L219.4 66.2186C219.291 66.2901 219.204 66.2339 219.204 66.0908V65.0025C219.204 64.8594 219.291 64.6908 219.4 64.6193L219.624 64.4762C219.729 64.4098 219.82 64.466 219.82 64.604Z" fill="#FFF1B8"/>
<path d="M218.82 65.2528V66.3411C218.82 66.4842 218.733 66.6528 218.624 66.7244L218.4 66.8674C218.29 66.9338 218.204 66.8776 218.204 66.7346V65.6462C218.204 65.5032 218.29 65.3346 218.4 65.263L218.624 65.12C218.733 65.0535 218.82 65.1097 218.82 65.2528Z" fill="#FFF1B8"/>
<path d="M217.82 65.8969V66.9852C217.82 67.1283 217.734 67.2969 217.624 67.3684L217.4 67.5115C217.291 67.583 217.204 67.5268 217.204 67.3837V66.2954C217.204 66.1523 217.291 65.9837 217.4 65.9122L217.624 65.7691C217.734 65.6976 217.82 65.7538 217.82 65.8969Z" fill="#D48806"/>
<path d="M216.822 66.5407V67.6291C216.822 67.7721 216.735 67.9407 216.625 68.0123L216.402 68.1553C216.292 68.2269 216.205 68.1707 216.205 68.0276V66.9393C216.205 66.7962 216.292 66.6276 216.402 66.5561L216.625 66.413C216.735 66.3415 216.822 66.3977 216.822 66.5407Z" fill="#D48806"/>
<path d="M215.822 67.1843V68.2726C215.822 68.4157 215.735 68.5843 215.625 68.6559L215.402 68.7989C215.292 68.8705 215.205 68.8143 215.205 68.6712V67.5829C215.205 67.4398 215.292 67.2712 215.402 67.1997L215.625 67.0566C215.735 66.9851 215.822 67.0413 215.822 67.1843Z" fill="#FFF1B8"/>
<path d="M214.826 67.8282V68.9165C214.826 69.0596 214.739 69.2282 214.629 69.2997L214.406 69.4428C214.296 69.5143 214.209 69.4581 214.209 69.3151V68.2267C214.209 68.0837 214.296 67.9151 214.406 67.8435L214.629 67.7005C214.734 67.6289 214.826 67.6851 214.826 67.8282Z" fill="#FFF1B8"/>
<path d="M213.826 68.472V69.5603C213.826 69.7034 213.739 69.872 213.629 69.9436L213.406 70.0866C213.296 70.1582 213.209 70.1019 213.209 69.9589V68.8706C213.209 68.7275 213.296 68.5589 213.406 68.4873L213.629 68.3443C213.734 68.2727 213.826 68.3341 213.826 68.472Z" fill="#FFF1B8"/>
<path d="M212.827 69.1157V70.204C212.827 70.3471 212.74 70.5157 212.63 70.5872L212.407 70.7303C212.297 70.8018 212.21 70.7456 212.21 70.6025V69.5142C212.21 69.3712 212.297 69.2025 212.407 69.131L212.63 68.9879C212.74 68.9215 212.827 68.9777 212.827 69.1157Z" fill="#FFF1B8"/>
<path d="M211.827 69.7647V70.853C211.827 70.9961 211.74 71.1647 211.63 71.2363L211.407 71.3793C211.297 71.4509 211.21 71.3947 211.21 71.2516V70.1633C211.21 70.0202 211.297 69.8516 211.407 69.78L211.63 69.637C211.74 69.5654 211.827 69.6217 211.827 69.7647Z" fill="#FFF1B8"/>
<path d="M210.827 70.4086V71.4969C210.827 71.64 210.74 71.8086 210.631 71.8801L210.407 72.0232C210.298 72.0947 210.211 72.0385 210.211 71.8955V70.8071C210.211 70.6641 210.298 70.4955 210.407 70.4239L210.631 70.2809C210.74 70.2093 210.827 70.2655 210.827 70.4086Z" fill="#D48806"/>
<path d="M209.828 71.0525V72.1408C209.828 72.2839 209.741 72.4525 209.631 72.524L209.408 72.6671C209.298 72.7386 209.211 72.6824 209.211 72.5393V71.451C209.211 71.3079 209.298 71.1393 209.408 71.0678L209.631 70.9247C209.741 70.8532 209.828 70.9094 209.828 71.0525Z" fill="#D48806"/>
<path d="M208.832 71.696V72.7844C208.832 72.9274 208.745 73.0961 208.636 73.1676L208.412 73.3107C208.302 73.3822 208.216 73.326 208.216 73.1829V72.0946C208.216 71.9515 208.302 71.7829 208.412 71.7114L208.636 71.5683C208.741 71.4968 208.832 71.553 208.832 71.696Z" fill="#FFF1B8"/>
<path d="M207.833 72.3399V73.4282C207.833 73.5713 207.746 73.7399 207.636 73.8114L207.413 73.9545C207.303 74.026 207.216 73.9698 207.216 73.8267V72.7384C207.216 72.5953 207.303 72.4267 207.413 72.3552L207.636 72.2121C207.741 72.1406 207.833 72.2019 207.833 72.3399Z" fill="#D48806"/>
<path d="M206.833 72.9838V74.0721C206.833 74.2152 206.746 74.3838 206.636 74.4554L206.413 74.5984C206.303 74.67 206.216 74.6138 206.216 74.4707V73.3824C206.216 73.2393 206.303 73.0707 206.413 72.9991L206.636 72.8561C206.746 72.7897 206.833 72.8459 206.833 72.9838Z" fill="#FFF1B8"/>
<path d="M205.833 73.6274V74.7157C205.833 74.8588 205.746 75.0274 205.637 75.0989L205.413 75.242C205.303 75.3135 205.217 75.2573 205.217 75.1143V74.0259C205.217 73.8829 205.303 73.7143 205.413 73.6427L205.637 73.4997C205.746 73.4332 205.833 73.4894 205.833 73.6274Z" fill="#FFF1B8"/>
<path d="M204.833 74.2763V75.3646C204.833 75.5077 204.747 75.6763 204.637 75.7478L204.413 75.8858C204.304 75.9573 204.217 75.9011 204.217 75.758V74.6697C204.217 74.5266 204.304 74.358 204.413 74.2865L204.637 74.1434C204.747 74.077 204.833 74.1332 204.833 74.2763Z" fill="#FFF1B8"/>
<path d="M220.82 67.1844V68.2727C220.82 68.4158 220.734 68.5844 220.624 68.6559L220.4 68.799C220.291 68.8705 220.204 68.8143 220.204 68.6712V67.5829C220.204 67.4398 220.291 67.2712 220.4 67.1997L220.619 67.0566C220.729 66.9851 220.82 67.0413 220.82 67.1844Z" fill="#D48806"/>
<path d="M219.82 67.8279V68.9163C219.82 69.0593 219.734 69.228 219.624 69.2995L219.4 69.4425C219.291 69.5141 219.204 69.4579 219.204 69.3148V68.2265C219.204 68.0834 219.291 67.9148 219.4 67.8433L219.624 67.7002C219.729 67.6287 219.82 67.6849 219.82 67.8279Z" fill="#FFF1B8"/>
<path d="M218.82 68.4721V69.5604C218.82 69.7034 218.733 69.8721 218.624 69.9436L218.4 70.0867C218.29 70.1582 218.204 70.102 218.204 69.9589V68.8706C218.204 68.7275 218.29 68.5589 218.4 68.4874L218.624 68.3443C218.733 68.2728 218.82 68.3341 218.82 68.4721Z" fill="#FFF1B8"/>
<path d="M217.82 69.1157V70.204C217.82 70.3471 217.734 70.5157 217.624 70.5873L217.4 70.7303C217.291 70.8019 217.204 70.7457 217.204 70.6026V69.5143C217.204 69.3712 217.291 69.2026 217.4 69.1311L217.624 68.988C217.734 68.9216 217.82 68.9778 217.82 69.1157Z" fill="#FFF1B8"/>
<path d="M216.822 69.7645V70.8528C216.822 70.9959 216.735 71.1645 216.625 71.236L216.402 71.3791C216.292 71.4506 216.205 71.3944 216.205 71.2513V70.163C216.205 70.02 216.292 69.8513 216.402 69.7798L216.625 69.6367C216.735 69.5652 216.822 69.6214 216.822 69.7645Z" fill="#FFF1B8"/>
<path d="M215.822 70.4086V71.497C215.822 71.64 215.735 71.8086 215.625 71.8802L215.402 72.0232C215.292 72.0948 215.205 72.0386 215.205 71.8955V70.8072C215.205 70.6641 215.292 70.4955 215.402 70.424L215.625 70.2809C215.735 70.2094 215.822 70.2656 215.822 70.4086Z" fill="#D48806"/>
<path d="M214.826 71.0522V72.1405C214.826 72.2836 214.739 72.4522 214.629 72.5238L214.406 72.6668C214.296 72.7384 214.209 72.6822 214.209 72.5391V71.4508C214.209 71.3077 214.296 71.1391 214.406 71.0675L214.629 70.9245C214.734 70.8529 214.826 70.9092 214.826 71.0522Z" fill="#FFF1B8"/>
<path d="M213.826 71.6961V72.7844C213.826 72.9275 213.739 73.0961 213.629 73.1676L213.406 73.3107C213.296 73.3822 213.209 73.326 213.209 73.183V72.0946C213.209 71.9516 213.296 71.7829 213.406 71.7114L213.629 71.5683C213.734 71.4968 213.826 71.553 213.826 71.6961Z" fill="#D48806"/>
<path d="M212.827 72.3399V73.4282C212.827 73.5713 212.74 73.7399 212.63 73.8114L212.407 73.9545C212.297 74.026 212.21 73.9698 212.21 73.8268V72.7384C212.21 72.5954 212.297 72.4268 212.407 72.3552L212.63 72.2122C212.74 72.1406 212.827 72.202 212.827 72.3399Z" fill="#FFF1B8"/>
<path d="M211.827 72.9836V74.0719C211.827 74.215 211.74 74.3836 211.63 74.4551L211.407 74.5982C211.297 74.6697 211.21 74.6135 211.21 74.4704V73.3821C211.21 73.239 211.297 73.0704 211.407 72.9989L211.63 72.8558C211.74 72.7894 211.827 72.8456 211.827 72.9836Z" fill="#D48806"/>
<path d="M210.827 73.6274V74.7158C210.827 74.8588 210.74 75.0274 210.631 75.099L210.407 75.242C210.298 75.3136 210.211 75.2574 210.211 75.1143V74.026C210.211 73.8829 210.298 73.7143 210.407 73.6428L210.631 73.4997C210.74 73.4333 210.827 73.4895 210.827 73.6274Z" fill="#FFF1B8"/>
<path d="M209.828 74.2762V75.3645C209.828 75.5076 209.741 75.6762 209.631 75.7477L209.408 75.8908C209.298 75.9623 209.211 75.9061 209.211 75.7631V74.6747C209.211 74.5317 209.298 74.3631 209.408 74.2915L209.631 74.1485C209.741 74.0769 209.828 74.1331 209.828 74.2762Z" fill="#FFF1B8"/>
<path d="M208.832 74.9204V76.0087C208.832 76.1518 208.745 76.3204 208.636 76.3919L208.412 76.535C208.302 76.6065 208.216 76.5503 208.216 76.4072V75.3189C208.216 75.1758 208.302 75.0072 208.412 74.9357L208.636 74.7926C208.741 74.7211 208.832 74.7773 208.832 74.9204Z" fill="#FFF1B8"/>
<path d="M207.833 75.5639V76.6523C207.833 76.7953 207.746 76.9639 207.636 77.0355L207.413 77.1785C207.303 77.2501 207.216 77.1939 207.216 77.0508V75.9625C207.216 75.8194 207.303 75.6508 207.413 75.5793L207.636 75.4362C207.741 75.3647 207.833 75.4209 207.833 75.5639Z" fill="#FFF1B8"/>
<path d="M206.833 76.2078V77.2961C206.833 77.4392 206.746 77.6078 206.636 77.6793L206.413 77.8224C206.303 77.8939 206.216 77.8377 206.216 77.6947V76.6064C206.216 76.4633 206.303 76.2947 206.413 76.2231L206.636 76.0801C206.746 76.0085 206.833 76.0647 206.833 76.2078Z" fill="#FFF1B8"/>
<path d="M205.833 76.8516V77.94C205.833 78.083 205.746 78.2516 205.637 78.3232L205.413 78.4662C205.303 78.5378 205.217 78.4816 205.217 78.3385V77.2502C205.217 77.1071 205.303 76.9385 205.413 76.867L205.637 76.7239C205.746 76.6524 205.833 76.7137 205.833 76.8516Z" fill="#D48806"/>
<path d="M204.833 77.4953V78.5836C204.833 78.7267 204.747 78.8953 204.637 78.9668L204.413 79.1099C204.304 79.1814 204.217 79.1252 204.217 78.9822V77.8938C204.217 77.7508 204.304 77.5821 204.413 77.5106L204.637 77.3676C204.747 77.3011 204.833 77.3573 204.833 77.4953Z" fill="#FFF1B8"/>
<path d="M201.497 77.95L201.045 77.6587H201.04C200.885 77.5616 200.67 77.577 200.437 77.7251C199.963 78.0317 199.579 78.7777 199.579 79.3908C199.579 79.6974 199.675 79.912 199.83 80.0142L200.25 80.285L200.328 80.1419C200.405 80.1215 200.488 80.0908 200.574 80.0346C201.049 79.7281 201.433 78.9821 201.433 78.3689C201.433 78.277 201.424 78.1952 201.405 78.1237L201.497 77.95Z" fill="#D48806"/>
<path opacity="0.2" d="M201.497 77.95L201.045 77.6587H201.04C200.885 77.5616 200.67 77.577 200.437 77.7251C199.963 78.0317 199.579 78.7777 199.579 79.3908C199.579 79.6974 199.675 79.912 199.83 80.0142L200.25 80.285L200.328 80.1419C200.405 80.1215 200.488 80.0908 200.574 80.0346C201.049 79.7281 201.433 78.9821 201.433 78.3689C201.433 78.277 201.424 78.1952 201.405 78.1237L201.497 77.95Z" fill="#874D00"/>
<path d="M200.871 78.0063C200.396 78.3128 200.012 79.0588 200.012 79.672C200.012 80.2851 200.396 80.5355 200.871 80.2289C201.345 79.9223 201.729 79.1763 201.729 78.5632C201.734 77.9501 201.345 77.6997 200.871 78.0063Z" fill="#D48806"/>
<path d="M197.769 80.3614L197.317 80.0702H197.312C197.157 79.9731 196.942 79.9884 196.709 80.1366C196.235 80.4432 195.851 81.1892 195.851 81.8023C195.851 82.1089 195.947 82.3235 196.102 82.4257L196.522 82.6965L196.6 82.5534C196.677 82.533 196.76 82.5023 196.846 82.4461C197.321 82.1395 197.705 81.3936 197.705 80.7804C197.705 80.6884 197.696 80.6067 197.677 80.5352L197.769 80.3614Z" fill="#D48806"/>
<path opacity="0.2" d="M197.769 80.3614L197.317 80.0702H197.312C197.157 79.9731 196.942 79.9884 196.709 80.1366C196.235 80.4432 195.851 81.1892 195.851 81.8023C195.851 82.1089 195.947 82.3235 196.102 82.4257L196.522 82.6965L196.6 82.5534C196.677 82.533 196.76 82.5023 196.846 82.4461C197.321 82.1395 197.705 81.3936 197.705 80.7804C197.705 80.6884 197.696 80.6067 197.677 80.5352L197.769 80.3614Z" fill="#874D00"/>
<path d="M197.147 80.4175C196.672 80.7241 196.289 81.4701 196.289 82.0832C196.289 82.6964 196.672 82.9467 197.147 82.6402C197.622 82.3336 198.005 81.5876 198.005 80.9745C198.005 80.3562 197.617 80.111 197.147 80.4175Z" fill="#D48806"/>
<path d="M68.8062 138.833L71.3996 138.278L70.394 140.13L68.8062 138.833Z" fill="#263238"/>
<path d="M72.0347 139.574L73.7284 138.833V140.13L72.0347 139.574Z" fill="#263238"/>
<path d="M77.3275 141.427L76.216 139.574L75.4221 141.427H77.3275Z" fill="#263238"/>
<path d="M82.5077 136.858L79.7672 137.25L80.9415 135.684L82.5077 136.858Z" fill="#263238"/>
<path d="M80.5508 134.901L78.9852 135.293L79.6476 134.31L80.5508 134.901Z" fill="#263238"/>
<path d="M76.2453 133.727L77.0281 134.901L78.5937 133.727L76.2453 133.727Z" fill="#263238"/>
<defs>
<linearGradient id="paint0_linear_2661_68499" x1="171.681" y1="169.272" x2="101.213" y2="169.272" gradientUnits="userSpaceOnUse">
<stop stopColor="#CAA266"/>
<stop offset="1" stopColor="#E9C57E"/>
</linearGradient>
<linearGradient id="paint1_linear_2661_68499" x1="171.681" y1="180.656" x2="136.447" y2="180.656" gradientUnits="userSpaceOnUse">
<stop stopColor="#CAA266"/>
<stop offset="1" stopColor="#E9C57E"/>
</linearGradient>
<linearGradient id="paint2_linear_2661_68499" x1="136.447" y1="157.888" x2="101.213" y2="157.888" gradientUnits="userSpaceOnUse">
<stop stopColor="#CAA266"/>
<stop offset="1" stopColor="#E9C57E"/>
</linearGradient>
<linearGradient id="paint3_linear_2661_68499" x1="151.338" y1="170.838" x2="121.545" y2="170.838" gradientUnits="userSpaceOnUse">
<stop stopColor="#CAA266"/>
<stop offset="1" stopColor="#E9C57E"/>
</linearGradient>
<linearGradient id="paint4_linear_2661_68499" x1="117.578" y1="180.496" x2="121.201" y2="180.538" gradientUnits="userSpaceOnUse">
<stop stopColor="#ECDCBC"/>
<stop offset="0.475" stopColor="#F0DBB2"/>
<stop offset="1" stopColor="#F9EBCF"/>
</linearGradient>
<linearGradient id="paint5_linear_2661_68499" x1="120.272" y1="185.13" x2="116.282" y2="185.13" gradientUnits="userSpaceOnUse">
<stop stopColor="#CAA266"/>
<stop offset="1" stopColor="#E9C57E"/>
</linearGradient>
<linearGradient id="paint6_linear_2661_68499" x1="54.1281" y1="15.6905" x2="43.7397" y2="15.6905" gradientUnits="userSpaceOnUse">
<stop stopColor="#CAA266"/>
<stop offset="1" stopColor="#E9C57E"/>
</linearGradient>
</defs>
</svg>
)

View File

@ -1,576 +0,0 @@
import React, {useCallback, useEffect, useMemo, useState} from "react";
import Icon from "@ant-design/icons";
import {useDebounceFn, useSetState} from "ahooks";
import {Flex, Space} from "antd";
import clsx from "clsx"
import {ProofreadStateEnum,} from "@/service/types/document.ts";
import {showToast} from "@/components/messages/Modal.tsx";
import './editor.less'
import {IconCheckOutline, IconMinus, IconRollback, IconRollbackCircle, IconRollbackOld} from "./icons.tsx";
import {ActionKey, ProofreadItem} from "./proofread-item.tsx";
import {IconLogo} from "./images/logo.tsx";
import {parseV3ProofreadResult} from "@/core/proofread-util.ts";
import {V3Enums} from "@/types/v3/enums.ts";
import {stringIsEmpty} from "@/core/string-utils.ts";
import {useBridge} from "@/core/bridge.ts";
import {CACHE_DATA} from "@/core/cache.ts";
import {process} from "@/service/api/v3/document.ts";
import {VirtualListItem} from "@/pages/proofread/components/virtual-list-item.tsx";
type ProofreadPanelProps = {
children?: React.ReactNode;
sentences: V3.ProofreadSentence[];
proofreadLoading?: boolean
onUpdateProofreadItem: (item: V3.ProofreadCorrect, action?: 'process' | 'redo') => void;
onSelectProofreadItem: (item: V3.ProofreadCorrect | null) => void;
activeProofreadItemId?: number;
disabledProofreadItemList: number[];
onStartProofread: () => Promise<void> | void;
selectedProofreadItemId?: number;
selectedAcceptStatus?: 1 | 2 | 3;
userinfo?: Account;
histories: V3.ProcessAction[];
setHistories: (values: V3.ProcessAction[]) => void;
onStateChange?: (state: { activeItemId: number; acceptState: AcceptStatus; }) => void;
}
enum AcceptStatus {
NotAdopted = 1,
Adopted = 2,
Default = 3
}
const GovCheckKeys = [
V3Enums.ProofreadType.leader.key,
V3Enums.ProofreadType.position.key,
V3Enums.ProofreadType.quotation.key,
V3Enums.ProofreadType.fallen_officers.key,
]
/**
*
* @param item
*/
function itemNeedReview(item:V3.ProofreadCorrect){
if(
item.tag.trim().length == 0 // not delete insert replace
&& (
item.type == V3Enums.ProofreadType.sensitive.key
|| item.type == V3Enums.ProofreadType.blacklist.key
|| GovCheckKeys.includes(item.type)
)
) {
return true
}
return false
}
const ProofreadPanel: React.FC<ProofreadPanelProps> = (props) => {
const {userinfo, histories, setHistories} = props
const [state, setState] = useSetState<{
// 当前选中分类
currentType: string | null;
// 默认是否展开panel
open: boolean;
adoptAll?: boolean;
ignoreAll?: boolean;
listMaxCount: number;
activeIndex: number;
activeItemId: number;
acceptState: AcceptStatus;
}>({
currentType: null,
open: true,
adoptAll: false,
ignoreAll: false,
activeIndex: -1,
activeItemId: -1,
listMaxCount: -1,
acceptState: AcceptStatus.NotAdopted
})
const [proofreadResult, setProofreadResult] = useState<V3.ParsedProofreadResult>()
useEffect(() => {
handleTypeChange(null, false)
const result = parseV3ProofreadResult(props.sentences, props.disabledProofreadItemList)
setProofreadResult(result)
}, [props.sentences, props.proofreadLoading, props.disabledProofreadItemList])
const getCurrentProofreadTypeListByAcceptStatus = (_state?: AcceptStatus, disableType = false) => {
_state = _state || state.acceptState
let list = proofreadResult?.list || [];
if (_state == AcceptStatus.NotAdopted) {
// 获取未复核的校对项
list = list.filter(s => s.isAccept == ProofreadStateEnum.Default);
} else if (_state == AcceptStatus.Adopted) {
// 获取已复核的校对项
list = list.filter(s => s.isAccept != ProofreadStateEnum.Default)
}
if (state.currentType && !disableType) {
list = list.filter(s => {
if(state.currentType == 'gov-check'){
return GovCheckKeys.includes(s.type)
}
if(state.currentType == 'error'){
return s.type != 'blacklist' && s.type != 'sensitive' && !GovCheckKeys.includes(s.type)
}
return s.type == state.currentType
})
}
return list;
}
// 当前校对数据
const currentProofreadCount = useMemo(() => {
const all = ( proofreadResult?.list || []).length;
// 全局获取待复核的校对项 避免过滤后的数据为空
const not_adopted = ( proofreadResult?.list || []).filter(s => s.isAccept == ProofreadStateEnum.Default).length;
const list = getCurrentProofreadTypeListByAcceptStatus(undefined, true) || [];
const count: V3.ProofreadResultCount = {
all,
adopted: 0,
not_adopted,
error:0,
total: not_adopted,
sensitive: 0,
blacklist: 0,
govCheck: 0,
};
list.forEach(it => {
//count.total ++;
if (it.type === 'sensitive'){
count.sensitive ++;
}else if(it.type === 'blacklist'){
count.blacklist++;
}else if(GovCheckKeys.includes(it.type)){
count.govCheck ++;
}else{
count.error ++;
}
})
count.adopted = all - count.not_adopted;
// if(state.acceptState == AcceptStatus.Adopted) {
// }else{
// count.not_adopted = count.total;
// count.adopted = all - count.not_adopted;
// }
return count;
}, [proofreadResult, state.acceptState, state.activeItemId, props.histories])
// 当前状态校对列表
const currentProofreadList = useMemo(() => {
const list = proofreadResult?.list || [];
if (!state.currentType) return list;
// Array.isArray(state.currentType?.id) ? state.currentType?.id.includes(s.type) :
return list.filter(s => {
if(state.currentType == 'error'){
return s.type != 'blacklist' && s.type != 'sensitive'
}
return s.type == state.currentType
})
}, [proofreadResult, state.currentType])
// 撤销操作
const redoAction = async () => {
if (props.sentences.length == 0 || histories.length == 0) return;
const last = histories[histories.length - 1];
// 获取最后一个历史的同一批次记录
const currentList = histories.filter(s => s.id == last.id);
if (!currentList || currentList.length == 0) return;
currentList.forEach(it => {
// 状态调整为未处理
const item = proofreadResult?.list?.find(s => s.id == it.correctId)
if (item) {
item.isAccept = ProofreadStateEnum.Default
props.onUpdateProofreadItem(item, 'redo')
}
})
setHistories(histories.filter(s => s.id != last.id));
setProofreadResult({
count: proofreadResult!.count,
list: proofreadResult!.list
})
// 将状态调整为未复核
if (state.acceptState == AcceptStatus.Adopted) {
setState({acceptState: AcceptStatus.NotAdopted})
}
// 选中第一个
const actId = currentList[0];
// 找到要选中的item的index
const item = currentProofreadList.find(s => s.id == actId.correctId)
if (item) {
centerItem(-1, item)
// setState({activeIndex: index})
}
}
/**
* /
* @param isAccept
* @param p
*/
const getSameProofreadItems = (isAccept?: boolean, p?: V3.ProofreadCorrect) => {
const list = currentProofreadList.filter(s => {
// if (isAccept && s.type == V3Enums.ProofreadType.sensitive.key) return false;
return s.isAccept == ProofreadStateEnum.Default;
})
// 获取当前类型下所有
return p ? list.filter(s => {
return s.origin == p.origin && s.text == p.text;
}) : (
[...list]
)
}
const addToHistory = (items: V3.ProofreadCorrect[]) => {
// 根据最后一个记录生成新的批次id
const last = histories.length == 0 ? null : histories[histories.length - 1]
const id = last ? last.id + 1 : 1;
setHistories([
...histories,
...items.map(s => ({id, correctId: s.id}))
])
setProofreadResult(proofreadResult)
}
// 批量处理
const batchProcess = (status: ProofreadStateEnum, proofread?: V3.ProofreadCorrect) => {
const isAccept = status == ProofreadStateEnum.Accept;
const list = getSameProofreadItems(isAccept, proofread);
if (list.length > 0) {
const ids: number[] = [];
// 设置 状态
list.map(s => {
ids.push(s.id)
// 处理以下复核情况
s.isAccept = isAccept && itemNeedReview(s) ? ProofreadStateEnum.Review :status;
props.onUpdateProofreadItem(s, 'process');
return s;
})
addToHistory(list)
process(CACHE_DATA.DocumentID, {
ids,
action: status
})
// 采用随机数 避免默认值均为-1 导致选中项不更新
const activeItemId = 0 - Math.ceil(Math.random() * 10)
setTimeout(()=>{
setState({activeItemId})
},20)
}
}
// 处理全部
const handleProcessAll = (action: ActionKey) => {
return () => {
if (props.sentences.length == 0) return;
batchProcess(action == 'acceptAll' ? ProofreadStateEnum.Accept : ProofreadStateEnum.Ignore)
}
}
// 让当前选中的 item 居中
const centerItem = (activeIndex: number, item: V3.ProofreadCorrect, showInCenter = true) => {
if (item.id == state.activeItemId) return;
setState((origin) => ({
...origin,
activeIndex,
activeItemId: item.id
}))
if (showInCenter) {
// 将提示显示在视图中间
const div = document.querySelector(`div.proofread-item-${item.id}`)
if (div) {
div.scrollIntoView({
behavior: 'smooth',
block: 'center',
inline: 'nearest' // 水平对齐方式
})
}
}
//
props.onSelectProofreadItem(item);
}
useEffect(() => {
if (props.selectedProofreadItemId) {
const index = currentProofreadList.filter(s => (state.acceptState == AcceptStatus.Default
|| (state.acceptState == AcceptStatus.Adopted && s.isAccept != ProofreadStateEnum.Default)
|| (state.acceptState == AcceptStatus.NotAdopted && s.isAccept == ProofreadStateEnum.Default)
)).findIndex(s => s.id == props.selectedProofreadItemId)
if (index >= 0) {
centerItem(index, currentProofreadList[index])
}
setState({activeItemId: props.selectedProofreadItemId})
}
}, [props.selectedProofreadItemId])
useEffect(() => {
if (props.selectedAcceptStatus) {
setState({
acceptState: props.selectedAcceptStatus
})
}
}, [props.selectedAcceptStatus])
// 处理校对项
const handleItemAction = async (key: ActionKey, item: V3.ProofreadCorrect, index: number) => {
try {
if (key == 'click') {
if (item) {
setState({activeIndex: index, activeItemId: item.id})
}
centerItem(index, item, false)
return;
} else if (key == 'addToLexicon') {
// 添加到词库
showToast('添加词库成功', "success")
} else {
if (key == 'ignoreAll' || key == 'acceptAll') { // 同类型处理
batchProcess(key == 'acceptAll' ? ProofreadStateEnum.Accept : ProofreadStateEnum.Ignore, item)
} else {
if (key == 'ignore') { // 忽略
item.isAccept = ProofreadStateEnum.Ignore;
} else if (key == 'accept') { // 采纳
item.isAccept = ProofreadStateEnum.Accept;
} else if (key == 'review') { // 复核
item.isAccept = ProofreadStateEnum.Review;
}
props.onUpdateProofreadItem(item, 'process')
addToHistory([item])
process(CACHE_DATA.DocumentID, {
ids: [item.id],
action: item.isAccept
}).catch(console.log)
// 自动定位下一个
const currentList = state.acceptState == AcceptStatus.Default ? currentProofreadList : currentProofreadList.filter(s => (state.acceptState == AcceptStatus.Default
|| (state.acceptState == AcceptStatus.Adopted && s.isAccept != ProofreadStateEnum.Default)
|| (state.acceptState == AcceptStatus.NotAdopted && s.isAccept == ProofreadStateEnum.Default)
));
if (currentList.length == 0) {
setTimeout(() => {
setState((prevState) => ( {
...prevState,
activeIndex: -1,
activeItemId: 0 - Math.ceil(Math.random() * 100),
}))
}, 20)
return;
}
const _idx = index >= currentList.length ? index - 1 : (state.acceptState == AcceptStatus.Default ? index + 1 : index)
const _it = currentList[_idx];
setTimeout(() => {
centerItem(_idx, _it,false)
}, 20)
}
}
} catch (e) { // 处理错误了
console.log('process item action error:', (e as Error).message)
}
}
// 切换类型
const handleTypeChange = (currentType: string | null, resetIndex = true) => {
setState(_prev => ({
currentType: _prev.currentType == currentType ? null : currentType,
activeIndex: resetIndex ? -1 : _prev.activeIndex
}))
window.scrollTo({
top: 0,
behavior: 'smooth'
})
}
const {bridge} = useBridge();
const focusPane = useDebounceFn(() => bridge?.Focus(), {wait: 200,})
// Focus
const movePrevOrNextProofreadItem = (action: 'prev' | 'next') => {
setState(state => {
// 方向键移动
let list = getCurrentProofreadTypeListByAcceptStatus() || [];
if (list.length == 0) return state;
if (!stringIsEmpty(state.currentType)) {
list = list.filter(s => s.type == state.currentType)
}
// 当前选中项的索引
const index = list.findIndex(s => s.id == state.activeItemId)
const maxCount = list.length;
if (maxCount == 0
|| (action == 'next' && index >= maxCount - 1)
|| (action == 'prev' && index <= 0)
) {
return state;
}
const activeIndex = index + (action == 'next' ? 1 : -1)
const item = list[activeIndex]
const div = document.querySelector(`div.proofread-item-${item.id}`)
if (div) {
div.scrollIntoView({behavior: 'smooth', block: 'center',inline: 'nearest'})
}
props.onSelectProofreadItem(item);
setTimeout(focusPane.run, 50);
return {
...state,
activeIndex,
activeItemId: item.id
}
})
}
const handleUpAndDownEvent = useCallback((e: KeyboardEvent) => {
const key = e.key.toLowerCase();
if (key == 'arrowup' || key == 'arrowdown') {
console.log('handleUpAndDownEvent=>', proofreadResult)
if (proofreadResult) {
movePrevOrNextProofreadItem(key == 'arrowup' ? 'prev' : 'next')
}
}
}, [proofreadResult, state])
useEffect(() => {
// 绑定键盘事件
document.documentElement.addEventListener('keyup', handleUpAndDownEvent, false)
return () => {
document.documentElement.removeEventListener('keyup', handleUpAndDownEvent, false)
}
}, [handleUpAndDownEvent]);
const currentProofreadTotal = useMemo(() => {
//const list = getCurrentProofreadTypeListByAcceptStatus(undefined,true) || [];
return currentProofreadCount.total;
// return proofreadResult?.count.total && proofreadResult?.count.total > 0 ? proofreadResult?.count.total : 0
}, [currentProofreadCount])
const _currentList = useMemo(() => {
return getCurrentProofreadTypeListByAcceptStatus() || []
}, [currentProofreadList, state.acceptState, state.activeItemId])
const handleTabChange = (key: AcceptStatus) => {
let activeItemId = -1;
if (key == AcceptStatus.Adopted) {
// 如果切换到已复核 则自动定位到最后一个
if (histories.length > 0) {
// const list = getCurrentProofreadTypeListByAcceptStatus(AcceptStatus.Adopted)
// if(list){
// const last = list.length > 0 ? list[list.length - 1] : null
// if(last) {
// activeItemId = last.id
// }
// }
const last = histories[histories.length - 1];
console.log('---last', last)
activeItemId = last.correctId;
bridge?.SelectMarkById(activeItemId, CACHE_DATA.DocumentID)
}
}
setState({acceptState: key, activeItemId})
handleTypeChange(null)
props.onStateChange?.({acceptState: key, activeItemId})
CACHE_DATA.selectStatus = key
// 如果是
}
return (<div className={'proofread-panel-container v3'}>
<div className="panel-header system-font">
<Flex align="center">
<div style={{fontSize: 50, marginRight: 30}}>
<IconLogo style={{display: 'block'}}/>
</div>
<Flex justify={'center'} className={'operation-buttons'}>
<Space style={{margin: 10}}>
<button
disabled={props.proofreadLoading || state.acceptState == AcceptStatus.Adopted || props.sentences.length == 0 || currentProofreadTotal == 0}
className={'btn-process'}
onClick={handleProcessAll('acceptAll')}>
<div className="btn-icon"><Icon component={IconCheckOutline}/></div>
<div></div>
</button>
<button
disabled={props.proofreadLoading || state.acceptState == AcceptStatus.Adopted || props.sentences.length == 0 || currentProofreadTotal == 0}
className={'btn-process'}
onClick={handleProcessAll('ignore')}>
<div className="btn-icon"><Icon component={IconMinus}/></div>
<div></div>
</button>
<button
className="btn-process"
disabled={histories.length == 0 || props.sentences.length == 0 || (currentProofreadTotal == 0 && histories.length == 0)}
onClick={redoAction}>
<div className="btn-icon"><Icon component={IconRollbackCircle}/></div>
<div></div>
</button>
</Space>
</Flex>
{props.children}
</Flex>
<div className="state-filter-tab">
<div className="tab-wrapper">
{[
{title: '待复核', key: AcceptStatus.NotAdopted, count: currentProofreadCount.not_adopted},
{title: '已复核', key: AcceptStatus.Adopted,count: currentProofreadCount.adopted},
{title: '全部', key: AcceptStatus.Default,count: currentProofreadCount.all}
].map((it, idx) => (
<div
key={idx}
onClick={() => {handleTabChange(it.key)}}
className={clsx('tab-item d-flex justify-center item-center', {active: state.acceptState == it.key})}
>
<span>{it.title}</span>
<span className="tab-item-count" style={{marginLeft:5}}>{props.proofreadLoading?'...':it.count}</span>
</div>
))}
</div>
</div>
</div>
<div className={`proofread-list-wrapper ${proofreadResult ? 'has-result' : ''}`}>
<div className="proofread-result">
<div className={'proofread-list'}>
<div style={{paddingTop: 2}}>
{_currentList.map((it, index) => (
<VirtualListItem key={it.id} id={it.id} index={index}>
<ProofreadItem
it={it}
className={`proofread-index-${index}`}
index={index}
last={false}
proofreading={props.proofreadLoading}
selected={state.activeItemId == it.id}
onAction={key => handleItemAction(key, it, index)}
previewMode={false}
/>
</VirtualListItem>
))}
</div>
</div>
</div>
<div className="types system-font">
<div className="container">
{
[
{title: '错误', key: 'error', count: currentProofreadCount.error},
{title: '敏感词', key: 'sensitive', count: currentProofreadCount.sensitive},
{title: '黑名单', key: 'blacklist', count: currentProofreadCount.blacklist},
{title: '政务', key: 'gov-check', count: currentProofreadCount.govCheck,color:'hsla(179, 100%, 70%, 1)'}
].map((it, idx) => (
it.count <= 0 ? null : <div key={idx} onClick={() => handleTypeChange(it.key)}
className={`item ${state.currentType == it.key ? 'active' : ''}`}>
<div className="count" style={it.color?{color:it.color}:{}}>{props.proofreadLoading ? '...' : it.count}</div>
<div className="text">{it.title}</div>
</div>
))
}
</div>
</div>
</div>
</div>)
}
export default ProofreadPanel;

View File

@ -1,73 +0,0 @@
import React from "react";
import {Button} from "antd";
import IdleImage from "./../images/icon-idle.png"
import PerfectImg from "./../images/icon-perfect.png"
export type TProofreadState = 'idle' | 'processing' | 'perfect' | 'edit' | 'analyzing'
type PanelRightStateProp = {
state: TProofreadState;
proofreadEndTime?: number;
onBack?:()=>void;
}
// 状态配置
const StateConfig: {
[key in TProofreadState]: {image: string, text: string} | null
} = {
'idle': {image: IdleImage, text: '在左侧输入内容开始校验'},
'processing': {image: IdleImage, text: '正在校验中'},
'edit': {image: IdleImage, text: '正在编辑中'},
'perfect': null,
'analyzing': null,
}
const StateElement = ({state}: PanelRightStateProp) => {
return (<div className="proofread-state-idle">
<div className="image">
<img src={StateConfig[state]?.image} alt={state} style={{width: 159}}/>
</div>
<div className="desc-title fz-large"><strong></strong></div>
<div className="desc"></div>
<div className="notice tz-title">{StateConfig[state]?.text}</div>
</div>)
}
const Perfect = () => (<div className="proofread-state-perfect">
<div className="image">
<img src={PerfectImg} alt="perfect"/>
</div>
<div className="desc"></div>
</div>)
const Analyzing = (props:PanelRightStateProp) => (<div className="proofread-state-analyzing text-center">
<div className="remain">
{props.proofreadEndTime === -2 ?<div className="remain-title">...</div>:<>
<div className="remain-title"></div>
<div className="remain-time">
<span className="value">{Math.round(props.proofreadEndTime! / 1000)}</span>
<span className="unit"></span>
</div>
</>}
</div>
<div className="control">
<div className="remain-text">
<b></b>
<div className="small">稿</div>
</div>
</div>
<div className="back-to-document">
<Button onClick={props.onBack} type={'primary'}>稿</Button>
</div>
</div>)
const PanelElement = ({state,onBack,proofreadEndTime}: PanelRightStateProp)=>{
if(state === 'perfect') return <Perfect/>;
if(state === 'analyzing') return <Analyzing proofreadEndTime={proofreadEndTime} state={state} onBack={onBack}/>;
return <StateElement state={state}/>;
}
export const PanelRightState: React.FC<PanelRightStateProp> = (props) => (
<div className="panel-right-state-wrapper">
<PanelElement proofreadEndTime={props.proofreadEndTime} state={props.state} onBack={props.onBack}/>
</div>
)

View File

@ -1,68 +0,0 @@
import {
ProofreadTypeEnum,
TCorrectedContent,
TDocumentContentDetail, TProofreadCountResult,
} from "@/service/types/document.ts";
import {ProofreadTypeData, ProofreadTypeKeys} from "@/types/proofread.ts";
import {int} from "@/service/types/base.ts";
function getTypeData(type: ProofreadTypeEnum) {
return ProofreadTypeData.find(s => Array.isArray(s.id) ? s.id.includes(type) : s.id == type)
}
export function buildProofreadResult(document: TDocumentContentDetail){
let offset = 0;
let paragraph_offset = 1;
document.correctedSet.forEach((item) => {
item.offset = offset;//Math.ceil(item.offset) + offset;
offset += item.insert_len;
item.diffs?.forEach(it => {
// it.start += item.offset + 1
// it.end += item.offset + 1
it.typeData = getTypeData(it.type)
it.color = '#80E9DABB';//it.typeData?.color;
})
if(item.insert?.length > 1 && (item.insert.startsWith("\f") || item.insert.startsWith("\n"))){
paragraph_offset ++;
}
// 当前是第几段
item.paragraph_offset = paragraph_offset;
if(item.insert.endsWith("\n") || item.insert.endsWith("\f")){
paragraph_offset ++;
}
})
}
// 解析并处理校对结果
export function parseProofreadResult(document: TDocumentContentDetail,disabled:number[] = []) {
const parseData = [];
const resultList: TCorrectedContent[] = [];
const abnormalCount : {
[key:string]:int
}= {
total:0
};
// 遍历内容
document.correctedSet.forEach((item) => {
item.diffs?.forEach(it => {
// it.start += item.offset + 1
// it.end += item.offset + 1
// it.typeData = getTypeData(it.type)
// it.color = it.typeData?.color;
if(disabled.includes(it.id)) return;
resultList.push(it)
const type = ProofreadTypeKeys[it.type];
if(!abnormalCount[type]) abnormalCount[type] = 0;
abnormalCount['total'] ++;
abnormalCount[type] ++;
})
})
return {
parseData,
resultList,
abnormalCount: abnormalCount as TProofreadCountResult
}
}

View File

@ -1,90 +0,0 @@
import {V3Enums} from "@/types/v3/enums.ts";
import { stringIsEmpty } from '@/core/string-utils.ts';
const ItemTipsConfig = {
'term': '规范术语',
'first_choice': '首选',
'now_called': '现称',
'alien': '异形词',
'quoting_legal': '引用法律条文时',
'coinage': '造字',
'coinage_first_choice': '造字 首选',
// 'incorrect_expression': '表述有误',
'serial_number': '作为标题序号时',
'after_a_certain_year': '现称',
}
const GovTipConfig = {
'quotation': '引用领导人讲话',
'fallen_officers': '疑似落马官员',
'leader': '政要人物',
'leader-sort': '政要人物顺序',
'leader-error': '政要人物缺失或顺序有误',
'position': '职位或人名有误',
'position-error': '职位或人名有误',
'position-sort': '政要人物的职位顺序',
}
export default function ProofreadItemDescription({it}:{it: V3.ProofreadCorrect}) {
// 获取类型数据 敏感词、
//const typeData = V3Enums.ProofreadType[it.type] || V3Enums.ProofreadType.other;
if(!ItemTipsConfig[it.type] && !GovTipConfig[it.type]) return null;
if(GovTipConfig[it.type]){
if(it.gov && it.gov?.length > 0 && (it.type == 'position-error' || (
it.type == 'position' && it.gov[0].content == '该职位组合无对应领导人'
))){
return <>
{it.gov?.map((it,idx)=>(
<div className='item-description' key={idx}>
<span className='tag' style={{marginLeft:-3}}></span>
<span>{it.content}</span>
</div>
)
)}
</>
}
return <div className='item-description'>
<span className='tag' style={{marginLeft:-3}}></span>
<span>{it.addition || GovTipConfig[it.type]}</span>
</div>
}
if(it.tag == 'r'){
const notice = it.type == V3Enums.ProofreadType.after_a_certain_year.key ? it.addition : ItemTipsConfig[it.type] || it.addition;
if(stringIsEmpty(notice)){
return null;
}
// 有提示内容的情况仅包含下述四种〈现称〉、〈XXXX 年后〉、〈作为标题序号时〉和〈引用法律条文时〉
// 无提示内容的情况:如不属于上述四种情况,则不显示任何提示内容
return <div className='item-description'>
<span className='tag' style={{marginLeft:-3}}></span>
<span>{notice}</span>
</div>
// if(ItemTipsConfig[it.type]){
// return `${}`
// }
// if(it.type == V3Enums.ProofreadType.after_a_certain_year.key){
// return `【提示】${it.addition}`
// }
// return `【提示】${it.addition}`
}
if(it.tag == 'i' || it.tag == 'd' || [
V3Enums.ProofreadType.blacklist.key,
V3Enums.ProofreadType.sensitive.key,
V3Enums.ProofreadType.incorrectExpression.key, // 无修改建议的的情况分为三种:敏感词、黑名单和表述有误。
].includes(it.type)){
return '';
}
return null;
// if (it.type == V3Enums.ProofreadType.blacklist.key) {
// str.push('请复核',it.tag == 'r' && !/^[*]+$/.test(it.text) ?`,将选用"${it.text}"`:'')
// } else if (it.tag == 'r') {
// str.push(`建议选用"${it.text}"`)
// } else {
// str.push('建议' + (it.tag == 'd' ? '删除' : '新增'))
// }
// const str = [`【提示】`] // ${typeData?.name}
// return str.join('');
// return typeData?.text ? typeData?.text + ',' : ''}{props.it.tag == 'r' ? `选用"${props.it.text}"` : (
// it.tag == 'd' ? '删除' : '新增'
}

View File

@ -1,195 +0,0 @@
import React, {useMemo} from "react";
import {RightOutlined} from "@ant-design/icons";
import { Space} from "antd";
import {css} from "@emotion/css";
import {DropdownMenu} from "@/components/popover/dropdown-menu";
import {
ProofreadStateEnum,
} from "@/service/types/document";
import {showToast} from "@/components/messages/Modal.tsx";
import {whitelist} from "@/service/api/lexicon.ts";
import {useSetState} from "ahooks";
import {
IconAccept,
IconIgnore,
IconReview,
SvgIcon
} from "./icons.tsx";
import {V3Enums} from "@/types/v3/enums.ts";
import {stringIsEmpty} from "@/core/string-utils.ts";
import ProofreadItemDescription from '@/pages/proofread/components/proofread-item-description.tsx';
import { GovExtra } from '@/pages/proofread/components/gov/gov-extra.tsx';
export type ActionKey = 'click' | 'accept' | 'acceptAll' | 'ignore' | 'ignoreAll' | 'addToLexicon' | 'review' | 'redo'
type ProofreadItemProps = {
selected?: boolean;
className?: string | undefined;
previewMode?: boolean;
proofreading?: boolean;
last?: boolean;
onAction: (key: ActionKey) => void
it: V3.ProofreadCorrect
index?: number;
}
// const ActionToolTip = (props: {open?:boolean; text: string; children: React.ReactNode }) => (
// <Popover
// open={props.open}
// overlayClassName="black-bg"
// content={props.text}
// >{props.children}</Popover>)
const ProofreadItemType = ({it}:{it: V3.ProofreadCorrect})=>{
if(it.type == V3Enums.ProofreadType.blacklist.key){
return <span className="action-text"></span>
}
if(it.type == V3Enums.ProofreadType.sensitive.key){
return <span className="action-text"></span>
}
if(it.type == V3Enums.ProofreadType.incorrectExpression.key){
return <span className="action-text"></span>
}
return (stringIsEmpty(it.tag) || it.tag == 'r') ? null : <span className="action-text">{it.tag == 'd' ? '删除' : '新增'}</span>
}
function getBlankSpaceElement(regex:RegExp,content:string,id:number){
if(!content || !content.match(regex)) return [];
const matched = content.match(regex);
if(!matched) return [];
return Array(matched[0].length).fill(0).map((_,index)=>(<span key={id + index} className="text-blank-space"> </span>))
}
function replaceWhiteSpaceToTag(content:string,id:number){
if(!content || !content.match(/(\s)+/)) return content;
return [
...getBlankSpaceElement(/^(\s)+/,content,id),
(content.trim().length > 0 ?<span>{content.trim()}</span>:null),
...getBlankSpaceElement(/(\s)+$/,content.trimStart(),id)
]
}
export const ProofreadItem: React.FC<ProofreadItemProps> = (props) => {
const typeData = (V3Enums.ProofreadType[props.it.type] || V3Enums.ProofreadType.other) as V3.ProofreadTypeConfig;
const govCheck = props.it.type == V3Enums.ProofreadType.leader.key
|| props.it.type == V3Enums.ProofreadType.position.key
|| props.it.type == V3Enums.ProofreadType.fallen_officers.key
|| props.it.type == V3Enums.ProofreadType.quotation.key;
const requireReview = useMemo(() => {
if(props.it.tag == 'r') return false;
// 敏感词或者要拦截的黑名单
return govCheck
|| props.it.type == V3Enums.ProofreadType.sensitive.key
|| props.it.type == V3Enums.ProofreadType.incorrectExpression.key
|| props.it.type == V3Enums.ProofreadType.blacklist.key
|| ( props.it.type == V3Enums.ProofreadType.blacklist.key && props.it.tag == 'r' && /^[*]+$/.test(props.it.text)
);
}, [props.it])
// 当前类别颜色
const colorStyle = css`--proofread-color: ${typeData.color || '#000000'}`
const [state, setState] = useSetState({
addToLexiconVisible: true
})
// 添加到词库
const handleAddToLexicon = () => {
whitelist.create({
word: props.it.origin
}).then(() => {
showToast('加入白名单成功', 'success');
// 隐藏添加按钮
setState({
addToLexiconVisible: false
})
}).catch((e) => {
const error = e.message || '加入白名单失败'
if(error == '放行词已存在'){
// 隐藏添加按钮
setState({
addToLexiconVisible: false
})
}
showToast(error == '放行词已存在'?'已经加入白名单':error, 'warning')
})
}
// const handleUndo = async () => {
// showToast('撤销成功')
// }
const AddToLexiconButton = ({disabled}:{disabled:boolean}) => {
if(
props.it.type == V3Enums.ProofreadType.sensitive.key
|| props.it.type == V3Enums.ProofreadType.incorrectExpression.key
) return null;
const AddButton = <button disabled={disabled} className="btn btn-add-to-lexicon" onClick={handleAddToLexicon}></button>;
return (props.selected && state.addToLexiconVisible && props.it.type != V3Enums.ProofreadType.blacklist.key) ?
disabled ? AddButton : (AddButton) : null
}
return (<>
<div
onClick={() => props.onAction('click')}
className={`proofread-item ${props.it.isAccept == ProofreadStateEnum.Default?'':'processed'} proofread-action-${props.it.tag} proofread-item-${props.it.id} ${props.className} ${colorStyle} item ${props.selected ? 'select' : ''}`}>
<div className="align-start">
<div className="info stream-mode">
<div className="text d-flex align-center">
<span className="origin">
{replaceWhiteSpaceToTag(props.it.tag == 'i' ? props.it.text:props.it.origin,props.it.id)}
</span>
{
props.it.tag == 'r' && <>
<span className="arrow"><RightOutlined/></span>
<span className="replaced">{replaceWhiteSpaceToTag(props.it.text,props.it.id)}</span>
</>
}
<ProofreadItemType it={props.it} />
</div>
<div className="description">
<div className="description-item-container">
<ProofreadItemDescription it={props.it} />
</div>
</div>
</div>
{props.it.isAccept != ProofreadStateEnum.Default &&
<div className="processed-wrapper align-center">
{props.it.isAccept == ProofreadStateEnum.Accept && <div className="state-accept align-center">
<SvgIcon component={IconAccept}/>
<span className="ml-2"></span>
</div>}
{props.it.isAccept == ProofreadStateEnum.Review &&
<div className="state-accept state-review align-center">
<SvgIcon component={IconReview}/>
<span className="ml-2"></span>
</div>}
{props.it.isAccept == ProofreadStateEnum.Ignore && <div className="state-ignore align-center">
<SvgIcon component={IconIgnore}/>
<span className="ml-2"></span>
</div>}
</div>}
</div>
{props.selected && (props.it.isAccept == ProofreadStateEnum.Default) && props.it.gov && props.it.gov?.length > 0 && <div className='gov-extra-panel'>
{/* 政务校对 */}
<GovExtra list={props.it.gov} />
</div>}
{/* 非预览模式 */}
{!props.previewMode && <div className="action align-center">
{props.selected && (props.it.isAccept == ProofreadStateEnum.Default) && <Space align={'center'}>
{!requireReview && <button className="btn btn-accept" onClick={() => props.onAction('accept')}></button>}
{requireReview && <button className="btn btn-review" onClick={() => props.onAction('review')}></button>}
<button className="btn btn-ignore" onClick={() => props.onAction('ignore')}></button>
{!govCheck && <AddToLexiconButton disabled={requireReview}/>}
<DropdownMenu
theme="dark"
items={!requireReview ? [
{key: 'acceptAll',disabled:props.proofreading, label: '采纳全部相同结果', onClick: () => props.onAction('acceptAll')},
{type: 'divider'},
{key: 'accept',disabled:props.proofreading, label: '忽略全部相同结果', onClick: () => props.onAction('ignoreAll')},
] : [{key: 'accept',disabled:props.proofreading, label: '忽略全部相同结果', onClick: () => props.onAction('ignoreAll')}]}
>
<div className="more-action"></div>
</DropdownMenu>
</Space>}
</div>}
</div>
{props.selected && !props.last && <div className={'selected-line'}></div>}
</>)
}

View File

@ -1,865 +0,0 @@
.view-size-notice {
position: fixed;
//inset-inline: 0;
//inset-block-start: 0;
inset: 0;
display: flex;
align-items: center;
justify-content: center;
background-color: rgba(255, 255, 255, 0.2);
padding: 10px;
line-height: 30px;
z-index: 9999;
text-align: center;
font-weight: bold;
font-size: 14px;
backdrop-filter: blur(2px);
}
@keyframes progress-bar-animation {
0% {
background-position: -150% 0, -150% 0
}
100% {
background-position: 250% 0, 250% 0
}
}
@keyframes progress-bar-loading{
0%{left:-35%;right:100%;}
60%{left:100%;right:-90%;}
100%{left:100%;right:-90%;}
}
@keyframes progress-bar-loading-1{
0%{left:-200%;right:100%;}
60%{left:107%;right:-8%;}
100%{left:107%;right:-8%;}
}
.proofread-notice-wrapper {
position: fixed;
inset: 0;
z-index: 999;
//url(./images/loading.svg)
background: center bottom no-repeat #f5f5f5;
background-size: contain;
text-align: center;
display: flex;
align-items: center;
justify-content: center;
font-size: 14px;
.error-notice {
p {
margin: 0;
color: rgba(140, 140, 140, 1);
font-size: 12px;
}
.error-title {
color: #000;
font-size: 20px;
font-weight: bold;
}
}
.buttons {
button {
width: 260px;
}
}
}
.proofread-panel {
--btn-size: 40px;
--padding-right: 0px;
--padding-left: 0px;
--padding: 10px;
--type-width: 60px;
--header-height: 140px;
font-size: 14px;
.panel-controls {
position: absolute;
top: 0;
bottom: 0;
left: 0;
width: calc(var(--padding-left) - var(--padding-right));
background: #fafafa;
z-index: 1;
}
.panel-btn-visible {
border-radius: 5px 0 0 5px;
width: 28px;
height: 40px;
background-color: var(--primary-color, #36cfc9);
display: flex;
align-items: center;
justify-content: center;
cursor: pointer;
color: #fff;
position: absolute;
top: 53px;
right: 0;
svg {
transform: rotate(-180deg) translateX(-3px);
}
&:hover {
box-shadow: 0 0 1px rgba(0, 0, 0, 0.1);
background-color: #009688;
}
}
&.open {
.panel-btn-visible svg {
transform: rotate(0deg);
}
}
.proofread-count-tag {
border-radius: 8px;
line-height: 1;
padding: 2px 10px;
}
.proofread-panel-tab-wrapper {
background-color: #fff;
margin: 0 var(--padding-right) 0 var(--padding-left);
}
.ant-tabs-nav, .ant-tabs-nav-list {
width: 100%;
}
.ant-tabs-tab {
flex: 1;
justify-content: center;
}
.proofread-panel-tab {
width: 100%;
display: flex;
align-items: center;
.tab-item {
flex: 1;
font-size: 14px;
color: #262626;
&.Mui-selected {
color: #262626;
}
//
}
}
//
.proofread-status {
background-color: #fff;
border-radius: 0 0 4px 4px;
margin: 0 var(--padding-right) 20px var(--padding-left);
}
.btn-all {
display: flex;
flex-direction: row;
justify-content: center;
align-items: center;
height: 32px;
border: 1px solid #D9D9D9;
box-shadow: 0px 2px 0px rgba(0, 0, 0, 0.016);
border-radius: 4px;
&:hover {
border-color: #999;
}
}
.btn-accept-all {
color: rgba(54, 207, 201, 1);
}
.btn-ignore-all {
color: rgba(140, 140, 140, 1);
}
}
.system-font{
font-family: 'Arial','SimHei','黑体';
font-weight: bold;
}
.ui-font{
font-family: 'Simsun','宋体';
font-weight: normal;
}
.panel-header {
position: sticky;
top: 0;
background: #fff;
z-index: 10;
padding: 10px 10px 2px;
//border-bottom: solid 1px rgba(217, 217, 217, 0.5);
box-shadow: 0 0 5px rgba(0, 0, 0, 0.1);
overflow: hidden;
.btn-start-proofread {
display: flex;
align-items: center;
justify-content: center;
width: 150px;
border: none !important;
background: linear-gradient(to right, #E9C57E 0%, #CAA266 100%);
&:hover {
background: linear-gradient(to right, #CAA266 0%, #CAA266 100%) !important;
}
}
.text-tip {
color: #333;
}
.count-value {
color: #E9C57E;
}
}
.header-logo{
svg{
height: 46px;
width: 120px;
}
}
.proofread-list-wrapper {
margin-right: var(--type-width);
}
.proofread-list{
padding: 0 var(--padding);
margin-top: 13px;
margin-right: 5px;
// fixed 由于添加新的间距 导致高度过高显示内容不足
height: calc(100vh - var(--header-height) - 20px);
bottom: 10px;
overflow: auto;
&::-webkit-scrollbar {
width: 8px;
}
&::-webkit-scrollbar-thumb {
background: #fff;
}
&::-webkit-scrollbar-track {
background: #fff;
}
// hover时 显示滚动条
&:hover{
&::-webkit-scrollbar-thumb {
background: #d2d2d2;
&:hover{
background: #b6b6b6;
}
}
&::-webkit-scrollbar-track {
background: #fff;
}
}
.stream-mode{
.origin {
color: #000;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
text-align: justify;
font-family: '宋体';
}
.arrow {
color: var(--primary-golden-color);
font-size: 10px;
margin: 0 15px;
svg {
display: block;
}
}
.replaced {
font-family: '宋体';
color: #000;
background: none;
border-radius: 3px;
display: block;
padding: 4px 5px;
line-height: 1;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.action-text{
color: var(--primary-color);
}
}
.proofread-item.select{
.stream-mode{
.origin,.replaced{
white-space: normal;
}
}
}
}
.operation-buttons {
position: sticky;
z-index: 10;
background: #fff;
top: calc(var(--header-height) - 1px);
button.ant-btn-default{
&.btn-operation-batch{
border-color: var(--primary-color,rgba(76, 182, 125, 1));
color: var(--primary-color,rgba(76, 182, 125, 1));
&:not(:disabled):hover{
background-color: var(--primary-color,rgba(76, 182, 125, 1));
color: #fff;
}
&:disabled{
background-color: #f4f4f4;
border-color: #D9D9D9;
}
}
&.btn-ignore-all{
border-color: #D9D9D9;
}
}
}
.test-item{
background-color:#99ffff;
height:50px;
margin:10px auto;
justify-content: center;
align-items: center;
display: flex;
border-radius: 4px;
&:hover,&.active{
background-color: #83d9d9;
}
}
.proofread-item-wrapper {
--border-size: 2px;
--timeline-width: 14px;
--proofread-font-size: 16px;
--content-font-size: 12px;
--padding-size: 10px;
cursor: default;
padding: var(--border-size);
overflow: hidden;
margin-top: 15px;
margin-right: calc(var(--padding-right) - 10px);
margin-left: var(--padding-left);
border-radius: 4px;
background-image: linear-gradient(91.26deg, #fff, #fff);
transition: 0.5s;
outline: solid 1px transparent;
.d-flex {
display: flex;
}
.align-center {
align-items: center;
}
&:first-child {
margin-top: 0;
}
.content-container {
padding: 10px;
background: #fff;
border-radius: 4px;
}
&:hover {
outline: solid 1px #ccc;
}
.proofread-content {
display: none;
color: #666;
font-size: var(--content-font-size);
margin-top: 10px;
}
.description-item {
display: flex;
background-color: #f6f5f6;
padding: 5px 6px;
border-radius: 3px;
text-align: justify;
width: 100%;
margin-bottom: 5px;
line-height: 20px;
align-items: flex-start;
::-webkit-scrollbar {
width: 3px;
}
.error_sort {
color: #f00;
}
.content {
flex: 1;
white-space: nowrap;
text-overflow: ellipsis;
overflow: hidden;
height: 20px;
padding-right: 5px;
transition: all 0.5s;
a {
color: var(--primary-color);
text-decoration: underline;
}
}
.content-text {
display: none;
span {
display: inline;
}
}
.selection {
background-color: #fabeb0;
}
.arrow-icon {
transform: rotate(-90deg);
}
.desc-item {
display: flex;
background-color: #f6f5f6;
padding: 5px 6px;
border-radius: 3px;
text-align: justify;
width: 100%;
margin-bottom: 5px;
line-height: 20px;
align-items: flex-start;
}
&.open {
.content {
white-space: normal;
height: 100%;
overflow: auto;
max-height: 120px;
}
.content-text {
display: block;
max-height: 100px;
overflow: auto;
padding-right: 5px;
}
.arrow-icon {
transform: rotate(0deg);
}
}
}
&.active {
outline: solid 1px transparent;
border-color: transparent;
margin-left: 0px;
background-image: linear-gradient(91.26deg, #5E98FE -28.63%, #3DC3FF 13.62%, #FED700 51%, #B80BA7 94.06%, #CE5884 133.87%);
.proofread-content {
display: block;
}
.proofread-info {
.replaced, .origin {
white-space: normal;
}
}
}
&.proofread-item-model {
outline: solid 1px transparent;
border-color: transparent;
background-image: linear-gradient(91.26deg, #5E98FE -28.63%, #3DC3FF 13.62%, #FED700 51%, #B80BA7 94.06%, #CE5884 133.87%);
}
.proofread-item-container {
display: flex;
overflow-x: hidden;
max-width: 100%;
border-bottom: 1px solid #F0F0F0;
padding: var(--padding-size) 0;
}
//
.proofread-item {
position: relative;
padding: 0 var(--padding-size);
font-size: var(--proofread-font-size);
inset-inline-start: 10px;
&:last-child {
.proofread-item-dot:before {
display: none;
}
.proofread-item-container {
border-bottom: none;
}
}
}
.proofread-info {
position: relative;
margin-inline-end: 0;
margin-block-start: 0;
margin-block-end: 0;
line-height: 1.2;
flex: 1;
min-width: 0;
.proofread-text {
display: flex;
align-items: center;
&.has-tag {
align-items: flex-start;
}
}
.proofread-tag {
font-size: 16px;
font-weight: 400;
line-height: 19px;
text-align: center;
color: var(--item-type-color, #f00);
margin-inline-start: 10px;
margin-block-start: -1px;
white-space: nowrap;
}
.text {
width: 100%;
}
.origin-mode {
color: #000;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
text-align: justify;
font-family: -apple-system, Helvetica, Arial, "pingfang-sc", "micrsoft yahei", sans-serif;
}
.arrow {
color: rgba(119, 119, 119, 1);
font-size: 10px;
margin: 0 15px;
svg {
display: block;
}
}
.replaced {
background: rgba(255, 0, 0, 1);
color: #fff;
border-radius: 3px;
display: block;
padding: 4px 5px;
line-height: 1;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
}
.proofread-item-dot {
width: var(--timeline-width);
position: absolute;
top: 13px;
bottom: -20px;
left: -10px;
&:before {
content: "";
display: block;
position: absolute;
inset-block-start: 10px;
inset-inline-start: 6px;
height: calc(100% - 10px);
border-inline-start: 1px solid rgba(255, 133, 192, 1);
}
.dot {
width: var(--timeline-width);
height: var(--timeline-width);
border-radius: 50%;
background: var(--item-type-color, #36cfc9);
position: absolute;
border: solid 3px #fff;
left: 0;
}
}
.actions {
margin-inline-start: 10px;
white-space: nowrap;
}
&:hover, &.active {
.proofread-action {
visibility: visible;
}
}
.proofread-action {
visibility: hidden;
display: flex;
--btn-size: 20px;
&.processed {
visibility: visible;
}
.process-state-container {
}
.process-state-actions {
}
button {
width: var(--btn-size);
height: var(--btn-size);
outline: none;
display: flex;
align-items: center;
justify-content: center;
font-size: 14px;
line-height: 1;
padding: 0;
color: #999;
cursor: pointer;
background: none;
border: solid 1px transparent;
border-radius: 4px;
&:not[disabled]:hover {
color: #36CFC9;
border-color: #36CFC9;
}
}
.btn-accept {
color: #36CFC9;
border-color: #36CFC9;
}
.btn-review {
color: #9747FF;
border-color: #9747FF;
}
.btn-ignore {
color: #fff;
background-color: #D9D9D9;
border-color: #D9D9D9;
&:not[disabled]:hover {
color: #fff;
background-color: #ccc;
border-color: #999;
}
}
.btn-add-to-lexicon {
color: #D9D9D9;
border-color: #D9D9D9;
}
.btn-more {
font-size: 10px;
color: rgba(182, 182, 182, 1);
background-color: rgba(245, 245, 245, 1);
border-color: rgba(245, 245, 245, 1);
}
// 已处理状态
.process-state {
display: flex;
font-size: 12px;
align-items: center;
background-color: #f0f0f0;
border-radius: 3px;
padding: 0 4px;
height: var(--btn-size);
}
.state-accept {
color: var(--primary-color-main, #08979C);
}
.state-ignore {
color: #C9C9C9;
}
.ml-2 {
margin-left: 2px;
}
.rollback {
border-radius: 4px;
padding: 2px 4px;
&:hover {
background-color: var(--background-hover-color);
}
}
}
}
.types {
background: #f0f0f0;
position: fixed;
right: 0;
bottom: 0;
top: var(--header-height);
width: var(--type-width);
.item {
text-align: center;
padding: 10px 0;
cursor: pointer;
.count{
color: red;
font-weight: bold;
font-size: 16px;
}
&.active {
background: #fff;
box-shadow: 1px 2px 2px rgba(0, 0, 0, 0.1);
}
}
}
.proofread-item{
.action {
.btn {
background: #fff;
outline: none;
width: 20px;
height: 20px;
border: solid 1px var(--primary-color);
display: flex;
align-items: center;
justify-content: center;
border-radius: var(--action-btn-radius);
color: var(--primary-color);
cursor: pointer;
box-sizing: border-box;
&:disabled{
background-color: var(--primary-disabled-color);
border: solid 1px var(--primary-disabled-color);
color:#fff;
}
&:not(:disabled):hover {
background-color: var(--primary-color);
color: #fff;
}
}
.btn-odd{
background-color: var(--primary-color);
color: #fff;
&:hover {
background-color: #fff;
color: var(--primary-color);
}
}
.btn-review{
.icon-type{
transform: translateY(0.5px);
}
}
.btn-accept {
}
.btn-ignore {
}
.more-action {
box-sizing: border-box;
width: 20px;
height: 20px;
border-radius: var(--action-btn-radius);
border: solid 1px var(--primary-color);
background-color: var(--primary-color);
color: #fff;
text-align: center;
&:hover {
background-color: #fff;
color: var(--primary-color);
}
}
.btn-add-to-lexicon {
}
.processed-wrapper {
font-size: 12px;
}
.state-accept {
color: var(--primary-process-color,#aaaaaa);
margin-right: 12px;
}
.state-review{
//color: #3FD4CF;
}
.state-ignore {
color: #C9C9C9;
margin-right: 12px;
}
.rollback {
border-radius: 4px;
padding: 2px 4px;
&:hover {
background-color: var(--background-hover-color);
}
}
}
}
.ant-popover.black-bg{
//--antd-arrow-background-color: var(--primary-color);
.ant-popover-inner{
transform: translateY(1px);
// background-color: var(--primary-color);
padding: 5px 10px;
// .ant-popover-inner-content{
// color: #fff;
// }
}
}

Some files were not shown because too many files have changed in this diff Show More