feat: new welcome modal, refactor many things, various bug fixes, use material-ui v5 etc

Co-authored-by: Alex Sparkes <turbomarshmello@gmail.com>
This commit is contained in:
David Ralph 2021-07-02 21:29:33 +01:00
parent c6b65f943a
commit cf36ced2a7
61 changed files with 782 additions and 324 deletions

View File

@ -13,8 +13,8 @@
"dependencies": {
"@fontsource/lexend-deca": "^4.4.5",
"@fontsource/montserrat": "^4.4.5",
"@material-ui/core": "4.11.4",
"@material-ui/icons": "4.11.2",
"@material-ui/core": "5.0.0-beta.0",
"@material-ui/icons": "5.0.0-beta.0",
"fetch-jsonp": "^1.1.3",
"react": "17.0.2",
"react-clock": "3.0.0",
@ -28,26 +28,26 @@
},
"devDependencies": {
"@babel/core": "^7.14.6",
"@babel/eslint-parser": "^7.14.5",
"@babel/eslint-parser": "^7.14.7",
"@babel/plugin-proposal-class-properties": "^7.14.5",
"@babel/plugin-transform-react-constant-elements": "^7.13.15",
"@babel/plugin-transform-runtime": "^7.14.5",
"@babel/preset-env": "^7.14.5",
"@babel/preset-env": "^7.14.7",
"@babel/preset-react": "^7.14.5",
"babel-loader": "^8.2.2",
"babel-plugin-transform-react-class-to-function": "^1.2.2",
"copy-webpack-plugin": "^9.0.0",
"copy-webpack-plugin": "^9.0.1",
"css-loader": "^5.2.6",
"eslint": "^7.28.0",
"eslint": "^7.29.0",
"eslint-config-react-app": "^6.0.0",
"html-webpack-plugin": "^5.3.1",
"html-webpack-plugin": "^5.3.2",
"mini-css-extract-plugin": "^1.6.0",
"sass": "^1.35.1",
"sass-loader": "^12.1.0",
"source-map-loader": "^3.0.0",
"webpack": "^5.39.1",
"webpack": "^5.41.1",
"webpack-cli": "^4.7.2",
"webpack-dev-server": "^3.11.2"
"webpack-dev-server": "^4.0.0-beta.3"
},
"scripts": {
"start": "webpack serve",

View File

@ -0,0 +1,34 @@
<svg width="783" height="702" viewBox="0 0 783 702" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0)">
<path d="M400.51 1.53013L375.064 8.09222L61.5599 88.9387L36.1135 95.5008C23.7622 98.7008 13.1845 106.67 6.70118 117.659C0.217846 128.648 -1.64169 141.76 1.53053 154.119L111.872 581.996C115.072 594.347 123.04 604.925 134.029 611.409C145.019 617.892 158.131 619.751 170.489 616.579L170.555 616.562L534.82 522.626L534.886 522.609C547.237 519.409 557.815 511.44 564.298 500.451C570.782 489.461 572.641 476.349 569.469 463.991L459.128 36.1134C455.928 23.762 447.959 13.1843 436.97 6.7009C425.981 0.217516 412.869 -1.64206 400.51 1.53013Z" fill="#F2F2F2"/>
<path d="M403.969 14.9453L373.83 22.7177L69.7111 101.144L39.5721 108.916C30.7764 111.195 23.2437 116.87 18.6268 124.695C14.0098 132.521 12.6856 141.858 14.9446 150.659L125.286 578.537C127.564 587.332 133.239 594.865 141.065 599.482C148.89 604.099 158.228 605.423 167.029 603.164L167.094 603.147L531.36 509.21L531.426 509.193C540.222 506.914 547.754 501.24 552.371 493.414C556.988 485.588 558.312 476.251 556.053 467.45L445.712 39.5729C443.433 30.7773 437.759 23.2447 429.933 18.6277C422.108 14.0108 412.77 12.6865 403.969 14.9453V14.9453Z" fill="white"/>
<path d="M381.212 153.503L196.939 201.024C194.881 201.554 192.696 201.246 190.866 200.166C189.035 199.086 187.708 197.323 187.178 195.265C186.647 193.206 186.956 191.022 188.036 189.191C189.116 187.36 190.879 186.034 192.937 185.503L377.21 137.983C379.267 137.454 381.45 137.764 383.279 138.844C385.108 139.924 386.434 141.687 386.964 143.744C387.495 145.801 387.187 147.984 386.108 149.814C385.03 151.644 383.269 152.971 381.212 153.503V153.503Z" fill="#F2F2F2"/>
<path d="M419.977 171.439L203.693 227.214C201.635 227.745 199.45 227.437 197.62 226.356C195.789 225.276 194.462 223.513 193.932 221.455C193.401 219.397 193.709 217.212 194.789 215.382C195.87 213.551 197.633 212.225 199.691 211.694L415.975 155.919C418.033 155.388 420.218 155.696 422.048 156.776C423.879 157.856 425.205 159.619 425.736 161.678C426.267 163.736 425.958 165.92 424.878 167.751C423.798 169.582 422.035 170.908 419.977 171.439V171.439Z" fill="#F2F2F2"/>
<path d="M411.48 270.877L227.207 318.397C226.188 318.66 225.127 318.719 224.085 318.572C223.043 318.425 222.04 318.074 221.133 317.539C220.227 317.004 219.435 316.296 218.802 315.455C218.169 314.615 217.708 313.657 217.445 312.638C217.182 311.619 217.123 310.558 217.27 309.516C217.417 308.474 217.768 307.471 218.303 306.565C218.838 305.658 219.546 304.866 220.387 304.233C221.228 303.6 222.185 303.139 223.204 302.877L407.477 255.356C408.496 255.093 409.557 255.034 410.599 255.181C411.641 255.328 412.644 255.679 413.551 256.214C414.457 256.749 415.249 257.457 415.882 258.298C416.515 259.139 416.976 260.096 417.239 261.115C417.502 262.134 417.561 263.195 417.414 264.237C417.267 265.279 416.916 266.282 416.381 267.189C415.846 268.095 415.138 268.887 414.297 269.52C413.456 270.153 412.499 270.614 411.48 270.877V270.877Z" fill="#F2F2F2"/>
<path d="M450.245 288.813L233.961 344.588C232.942 344.851 231.881 344.91 230.839 344.763C229.796 344.616 228.794 344.265 227.887 343.73C226.981 343.195 226.189 342.487 225.556 341.646C224.923 340.805 224.462 339.848 224.199 338.829C223.936 337.81 223.877 336.749 224.024 335.707C224.171 334.665 224.522 333.662 225.057 332.755C225.592 331.849 226.3 331.057 227.141 330.424C227.982 329.791 228.939 329.33 229.958 329.067L446.242 273.292C448.3 272.761 450.485 273.07 452.316 274.15C454.146 275.23 455.473 276.993 456.004 279.051C456.534 281.109 456.226 283.294 455.146 285.125C454.066 286.955 452.303 288.282 450.245 288.813Z" fill="#F2F2F2"/>
<path d="M441.748 388.25L257.475 435.771C255.417 436.3 253.234 435.99 251.404 434.91C249.575 433.83 248.249 432.067 247.719 430.01C247.188 427.953 247.496 425.769 248.575 423.939C249.654 422.109 251.416 420.782 253.472 420.25L437.745 372.73C439.804 372.199 441.988 372.508 443.819 373.588C445.649 374.668 446.976 376.431 447.507 378.489C448.038 380.547 447.729 382.732 446.649 384.562C445.569 386.393 443.806 387.719 441.748 388.25Z" fill="#F2F2F2"/>
<path d="M480.513 406.186L264.229 461.961C263.21 462.225 262.148 462.286 261.106 462.139C260.063 461.992 259.059 461.642 258.152 461.107C257.245 460.572 256.452 459.864 255.819 459.023C255.185 458.182 254.724 457.224 254.461 456.204C254.198 455.184 254.139 454.123 254.286 453.08C254.434 452.038 254.785 451.034 255.321 450.128C255.856 449.221 256.565 448.429 257.407 447.796C258.249 447.163 259.207 446.703 260.227 446.441L476.511 390.666C478.569 390.135 480.754 390.443 482.584 391.523C484.415 392.603 485.742 394.366 486.272 396.425C486.803 398.483 486.494 400.667 485.414 402.498C484.334 404.329 482.571 405.655 480.513 406.186V406.186Z" fill="#F2F2F2"/>
<path d="M165.481 249.749L100.269 266.566C99.2821 266.819 98.2351 266.671 97.3576 266.153C96.4801 265.635 95.8438 264.791 95.5883 263.804L80.6189 205.756C80.3655 204.769 80.514 203.722 81.0317 202.845C81.5494 201.967 82.3941 201.331 83.3803 201.075L148.593 184.258C149.58 184.005 150.627 184.154 151.504 184.671C152.382 185.189 153.018 186.034 153.273 187.02L168.243 245.068C168.496 246.055 168.348 247.102 167.83 247.979C167.312 248.857 166.468 249.493 165.481 249.749V249.749Z" fill="#E6E6E6"/>
<path d="M195.749 367.122L130.537 383.939C129.55 384.193 128.503 384.044 127.625 383.526C126.748 383.009 126.111 382.164 125.856 381.178L110.886 323.13C110.633 322.143 110.782 321.096 111.299 320.218C111.817 319.341 112.662 318.705 113.648 318.449L178.86 301.632C179.847 301.379 180.894 301.527 181.772 302.045C182.649 302.563 183.285 303.407 183.541 304.393L198.51 362.442C198.764 363.428 198.615 364.475 198.098 365.353C197.58 366.23 196.735 366.867 195.749 367.122V367.122Z" fill="#E6E6E6"/>
<path d="M226.019 484.496L160.806 501.313C159.819 501.566 158.772 501.418 157.895 500.9C157.017 500.382 156.381 499.538 156.125 498.551L141.156 440.503C140.903 439.516 141.051 438.469 141.569 437.592C142.087 436.714 142.931 436.078 143.917 435.822L209.13 419.005C210.117 418.752 211.164 418.901 212.041 419.418C212.919 419.936 213.555 420.781 213.811 421.767L228.78 479.815C229.033 480.802 228.885 481.849 228.367 482.726C227.849 483.604 227.005 484.24 226.019 484.496V484.496Z" fill="#E6E6E6"/>
<path d="M654.658 109.992H278.34C265.581 110.006 253.348 115.081 244.326 124.103C235.304 133.125 230.229 145.358 230.215 158.117V599.993C230.229 612.752 235.304 624.984 244.326 634.006C253.348 643.028 265.581 648.103 278.34 648.118H654.658C667.417 648.103 679.65 643.028 688.672 634.006C697.694 624.984 702.769 612.752 702.783 599.993V158.117C702.769 145.358 697.694 133.125 688.672 124.103C679.65 115.081 667.417 110.006 654.658 109.992V109.992Z" fill="#E6E6E6"/>
<path d="M654.658 123.846H278.339C269.253 123.856 260.542 127.47 254.117 133.895C247.693 140.32 244.079 149.031 244.068 158.117V599.993C244.079 609.079 247.693 617.79 254.117 624.215C260.542 630.639 269.253 634.253 278.339 634.263H654.658C663.744 634.253 672.455 630.639 678.88 624.214C685.305 617.79 688.919 609.079 688.929 599.993V158.117C688.919 149.031 685.305 140.32 678.88 133.895C672.455 127.47 663.744 123.856 654.658 123.846V123.846Z" fill="white"/>
<path d="M694.194 701.88C742.713 701.88 782.044 662.548 782.044 614.03C782.044 565.511 742.713 526.179 694.194 526.179C645.676 526.179 606.344 565.511 606.344 614.03C606.344 662.548 645.676 701.88 694.194 701.88Z" fill="#5352ED"/>
<path d="M598.022 366.656H407.72C406.667 366.657 405.624 366.45 404.651 366.048C403.677 365.646 402.793 365.056 402.048 364.311C401.303 363.567 400.711 362.683 400.308 361.71C399.905 360.737 399.697 359.695 399.697 358.641C399.697 357.588 399.905 356.545 400.308 355.572C400.711 354.6 401.303 353.716 402.048 352.971C402.793 352.227 403.677 351.637 404.651 351.235C405.624 350.833 406.667 350.626 407.72 350.627H598.022C600.146 350.63 602.182 351.475 603.683 352.978C605.184 354.48 606.027 356.517 606.027 358.641C606.027 360.765 605.184 362.802 603.683 364.305C602.182 365.808 600.146 366.653 598.022 366.656V366.656Z" fill="#E6E6E6"/>
<path d="M631.08 393.703H407.72C406.667 393.704 405.624 393.498 404.651 393.096C403.677 392.693 402.793 392.103 402.048 391.359C401.303 390.615 400.711 389.731 400.308 388.758C399.905 387.785 399.697 386.742 399.697 385.689C399.697 384.636 399.905 383.593 400.308 382.62C400.711 381.647 401.303 380.763 402.048 380.019C402.793 379.275 403.677 378.685 404.651 378.282C405.624 377.88 406.667 377.674 407.72 377.675H631.08C633.206 377.675 635.244 378.519 636.747 380.022C638.25 381.525 639.094 383.564 639.094 385.689C639.094 387.815 638.25 389.853 636.747 391.356C635.244 392.859 633.206 393.703 631.08 393.703Z" fill="#E6E6E6"/>
<path d="M598.022 487.869H407.72C406.667 487.87 405.624 487.664 404.651 487.262C403.677 486.859 402.793 486.269 402.048 485.525C401.303 484.781 400.711 483.897 400.308 482.924C399.905 481.951 399.697 480.908 399.697 479.855C399.697 478.802 399.905 477.759 400.308 476.786C400.711 475.813 401.303 474.929 402.048 474.185C402.793 473.441 403.677 472.85 404.651 472.448C405.624 472.046 406.667 471.84 407.72 471.841H598.022C600.148 471.841 602.186 472.685 603.689 474.188C605.192 475.691 606.036 477.729 606.036 479.855C606.036 481.98 605.192 484.019 603.689 485.522C602.186 487.025 600.148 487.869 598.022 487.869V487.869Z" fill="#E6E6E6"/>
<path d="M631.08 514.917H407.72C406.667 514.918 405.624 514.711 404.651 514.309C403.677 513.907 402.793 513.317 402.048 512.573C401.303 511.828 400.711 510.944 400.308 509.971C399.905 508.999 399.697 507.956 399.697 506.903C399.697 505.849 399.905 504.806 400.308 503.834C400.711 502.861 401.303 501.977 402.048 501.232C402.793 500.488 403.677 499.898 404.651 499.496C405.624 499.094 406.667 498.887 407.72 498.888H631.08C632.133 498.887 633.176 499.094 634.15 499.496C635.123 499.898 636.008 500.488 636.753 501.232C637.498 501.977 638.089 502.861 638.492 503.834C638.896 504.806 639.103 505.849 639.103 506.903C639.103 507.956 638.896 508.999 638.492 509.971C638.089 510.944 637.498 511.828 636.753 512.573C636.008 513.317 635.123 513.907 634.15 514.309C633.176 514.711 632.133 514.918 631.08 514.917Z" fill="#E6E6E6"/>
<path d="M365.093 405.982H297.747C296.728 405.981 295.751 405.575 295.031 404.855C294.311 404.134 293.905 403.158 293.904 402.139V342.192C293.905 341.173 294.311 340.196 295.031 339.476C295.751 338.755 296.728 338.35 297.747 338.349H365.093C366.112 338.35 367.089 338.755 367.809 339.476C368.529 340.196 368.935 341.173 368.936 342.192V402.139C368.935 403.158 368.529 404.134 367.809 404.855C367.089 405.575 366.112 405.981 365.093 405.982V405.982Z" fill="#E6E6E6"/>
<path d="M365.093 527.195H297.747C296.728 527.194 295.751 526.789 295.031 526.068C294.311 525.348 293.905 524.371 293.904 523.352V463.405C293.905 462.386 294.311 461.409 295.031 460.689C295.751 459.969 296.728 459.563 297.747 459.562H365.093C366.112 459.563 367.089 459.969 367.809 460.689C368.529 461.409 368.935 462.386 368.936 463.405V523.352C368.935 524.371 368.529 525.348 367.809 526.068C367.089 526.789 366.112 527.194 365.093 527.195V527.195Z" fill="#E6E6E6"/>
<path d="M598.234 231.721H457.932C455.807 231.721 453.768 230.877 452.265 229.374C450.762 227.871 449.918 225.832 449.918 223.707C449.918 221.581 450.762 219.543 452.265 218.04C453.768 216.537 455.807 215.693 457.932 215.693H598.234C600.359 215.693 602.398 216.537 603.901 218.04C605.404 219.543 606.248 221.581 606.248 223.707C606.248 225.832 605.404 227.871 603.901 229.374C602.398 230.877 600.359 231.721 598.234 231.721Z" fill="#CCCCCC"/>
<path d="M631.292 258.769H457.932C456.88 258.769 455.838 258.561 454.865 258.159C453.893 257.756 453.009 257.166 452.265 256.421C451.521 255.677 450.931 254.794 450.528 253.821C450.125 252.849 449.918 251.807 449.918 250.755C449.918 249.702 450.125 248.66 450.528 247.688C450.931 246.715 451.521 245.832 452.265 245.088C453.009 244.343 453.893 243.753 454.865 243.35C455.838 242.948 456.88 242.74 457.932 242.74H631.292C633.417 242.74 635.456 243.585 636.959 245.088C638.462 246.591 639.306 248.629 639.306 250.755C639.306 252.88 638.462 254.918 636.959 256.421C635.456 257.924 633.417 258.769 631.292 258.769V258.769Z" fill="#CCCCCC"/>
<path d="M426.882 291.547H297.536C296.517 291.546 295.541 291.141 294.82 290.42C294.1 289.7 293.694 288.723 293.693 287.704V186.757C293.694 185.738 294.1 184.761 294.82 184.041C295.541 183.321 296.517 182.915 297.536 182.914H426.882C427.901 182.915 428.878 183.321 429.598 184.041C430.319 184.761 430.724 185.738 430.725 186.757V287.704C430.724 288.723 430.319 289.7 429.598 290.42C428.878 291.141 427.901 291.546 426.882 291.547V291.547Z" fill="#5352ED"/>
<path d="M700.5 648V591C700.5 587.41 697.59 584.5 694 584.5C690.41 584.5 687.5 587.41 687.5 591V648C687.5 651.59 690.41 654.5 694 654.5C697.59 654.5 700.5 651.59 700.5 648Z" fill="white" stroke="white" stroke-width="5"/>
<path d="M728.202 621.069L728.811 620.498C731.418 618.055 731.565 613.967 729.141 611.344L698.779 578.483C696.206 575.698 691.805 575.697 689.231 578.482L658.86 611.344C656.436 613.967 656.582 618.055 659.189 620.498L659.799 621.069C662.431 623.537 666.569 623.388 669.018 620.737L692.903 594.884C693.497 594.241 694.513 594.241 695.107 594.884L718.982 620.736C721.43 623.387 725.569 623.536 728.202 621.069Z" fill="white" stroke="white" stroke-width="5"/>
</g>
<defs>
<clipPath id="clip0">
<rect width="782.044" height="701.88" fill="white"/>
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 13 KiB

View File

@ -0,0 +1,40 @@
<svg width="462" height="373" viewBox="0 0 462 373" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M358.798 200.076C329.56 178.219 283.766 157.547 233.159 143.363C187.081 130.447 142.137 124.212 106.599 125.804L106.414 121.671C142.376 120.061 187.785 126.348 234.276 139.379C285.355 153.696 331.645 174.611 361.275 196.763L358.798 200.076Z" fill="#CCCCCC"/>
<path d="M355.763 216.912C355.789 236.278 351.729 255.432 343.848 273.121C343.191 274.602 342.505 276.07 341.792 277.523C328.086 305.597 305.271 328.198 277.069 341.641C248.868 355.083 216.944 358.573 186.504 351.541C156.064 344.509 128.905 327.371 109.457 302.921C90.0086 278.472 79.4184 248.154 79.4139 216.912C79.4139 213.715 79.5228 210.541 79.7407 207.393C79.8441 205.792 79.978 204.201 80.1421 202.619C83.8063 167.401 100.85 134.934 127.756 111.917C154.662 88.8999 189.377 77.0897 224.738 78.9234C260.098 80.7571 293.405 96.0949 317.786 121.772C342.167 147.448 355.761 181.505 355.763 216.912V216.912Z" fill="#6C63FF"/>
<path opacity="0.1" d="M343.848 273.121C343.191 274.602 342.505 276.07 341.792 277.523C337.755 277.962 333.505 278.28 329.042 278.479C325.348 278.644 321.546 278.727 317.661 278.727C283.73 278.727 242.894 272.464 201.177 260.773C154.686 247.741 112.625 229.514 82.74 209.445C81.7223 208.763 80.7225 208.079 79.7407 207.393C79.8441 205.792 79.978 204.201 80.1421 202.619C81.7265 203.749 83.3606 204.88 85.0443 206.012C114.578 225.84 156.217 243.873 202.294 256.789C243.647 268.38 284.098 274.59 317.641 274.59C321.476 274.59 325.214 274.509 328.856 274.346C334.16 274.106 339.157 273.698 343.848 273.121Z" fill="black"/>
<path d="M317.662 275.418C283.732 275.419 242.893 269.155 201.178 257.463C154.687 244.432 112.625 226.204 82.7394 206.136C52.23 185.65 37.9235 165.463 42.4551 149.295C46.9866 133.127 69.7009 123.316 106.414 121.671L106.599 125.804C89.4542 126.572 75.4823 129.121 65.071 133.378C54.685 137.625 48.4161 143.356 46.4385 150.412C44.461 157.467 46.8381 165.621 53.5037 174.648C60.1857 183.696 70.7979 193.135 85.0456 202.702C114.576 222.531 156.216 240.564 202.295 253.479C243.649 265.07 284.097 271.281 317.642 271.282C321.475 271.282 325.212 271.201 328.855 271.038C345.999 270.269 359.971 267.721 370.383 263.464C380.769 259.217 387.038 253.486 389.015 246.43C392.566 233.761 381.835 217.299 358.798 200.076L361.276 196.763C373.13 205.626 381.905 214.362 387.358 222.728C393.203 231.697 395.101 240.048 392.999 247.547C388.467 263.715 365.753 273.525 329.04 275.171C325.346 275.336 321.546 275.418 317.662 275.418Z" fill="#CCCCCC"/>
<path d="M221.244 53.8181C222.118 53.8181 222.827 53.1092 222.827 52.2347C222.827 51.3603 222.118 50.6514 221.244 50.6514C220.369 50.6514 219.66 51.3603 219.66 52.2347C219.66 53.1092 220.369 53.8181 221.244 53.8181Z" fill="#F2F2F2"/>
<path d="M11.1866 122.525C12.691 122.525 13.9105 121.305 13.9105 119.801C13.9105 118.296 12.691 117.077 11.1866 117.077C9.68225 117.077 8.46271 118.296 8.46271 119.801C8.46271 121.305 9.68225 122.525 11.1866 122.525Z" fill="#CCCCCC"/>
<path d="M5.38101 231.794C8.35286 231.794 10.762 229.384 10.762 226.413C10.762 223.441 8.35286 221.032 5.38101 221.032C2.40916 221.032 0 223.441 0 226.413C0 229.384 2.40916 231.794 5.38101 231.794Z" fill="#CCCCCC"/>
<path d="M328.383 65.3211C330.364 65.3211 331.97 63.7154 331.97 61.7347C331.97 59.7541 330.364 58.1484 328.383 58.1484C326.403 58.1484 324.797 59.7541 324.797 61.7347C324.797 63.7154 326.403 65.3211 328.383 65.3211Z" fill="#CCCCCC"/>
<path d="M455.578 216.402C458.794 216.402 461.401 213.795 461.401 210.579C461.401 207.363 458.794 204.756 455.578 204.756C452.363 204.756 449.756 207.363 449.756 210.579C449.756 213.795 452.363 216.402 455.578 216.402Z" fill="#CCCCCC"/>
<path d="M410.047 120.078C411.427 120.078 412.546 118.96 412.546 117.58C412.546 116.2 411.427 115.082 410.047 115.082C408.668 115.082 407.549 116.2 407.549 117.58C407.549 118.96 408.668 120.078 410.047 120.078Z" fill="#CCCCCC"/>
<path d="M106.715 89.3826C108.867 89.3826 110.612 87.6377 110.612 85.4852C110.612 83.3328 108.867 81.5879 106.715 81.5879C104.563 81.5879 102.818 83.3328 102.818 85.4852C102.818 87.6377 104.563 89.3826 106.715 89.3826Z" fill="#CCCCCC"/>
<path d="M401.303 201.271C402.683 201.271 403.802 200.152 403.802 198.772C403.802 197.393 402.683 196.274 401.303 196.274C399.924 196.274 398.805 197.393 398.805 198.772C398.805 200.152 399.924 201.271 401.303 201.271Z" fill="#CCCCCC"/>
<path d="M18.0478 305.522C19.7651 305.522 21.1572 304.13 21.1572 302.413C21.1572 300.696 19.7651 299.304 18.0478 299.304C16.3305 299.304 14.9384 300.696 14.9384 302.413C14.9384 304.13 16.3305 305.522 18.0478 305.522Z" fill="#CCCCCC"/>
<path d="M80.8538 349.059C82.7135 349.059 84.221 347.551 84.221 345.691C84.221 343.832 82.7135 342.324 80.8538 342.324C78.9941 342.324 77.4865 343.832 77.4865 345.691C77.4865 347.551 78.9941 349.059 80.8538 349.059Z" fill="#CCCCCC"/>
<path d="M178.742 6.645H172.097V0H168.532V6.645H161.884V10.213H168.532V16.858H172.097V10.213H178.742V6.645Z" fill="#CCCCCC"/>
<path d="M332.884 366.201H328.71V362.029H326.472V366.201H322.3V368.44H326.472V372.612H328.71V368.44H332.884V366.201Z" fill="#CCCCCC"/>
<path d="M429.188 344.844H426.069V341.725H424.394V344.844H421.275V346.519H424.394V349.638H426.069V346.519H429.188V344.844Z" fill="#CCCCCC"/>
<path opacity="0.1" d="M219.66 120.329C226.073 120.329 231.272 115.13 231.272 108.717C231.272 102.305 226.073 97.1062 219.66 97.1062C213.248 97.1062 208.049 102.305 208.049 108.717C208.049 115.13 213.248 120.329 219.66 120.329Z" fill="black"/>
<path opacity="0.1" d="M130.465 205.301C136.878 205.301 142.076 200.103 142.076 193.69C142.076 187.278 136.878 182.079 130.465 182.079C124.053 182.079 118.854 187.278 118.854 193.69C118.854 200.103 124.053 205.301 130.465 205.301Z" fill="black"/>
<path opacity="0.1" d="M258.716 321.941C265.129 321.941 270.327 316.743 270.327 310.33C270.327 303.917 265.129 298.719 258.716 298.719C252.303 298.719 247.105 303.917 247.105 310.33C247.105 316.743 252.303 321.941 258.716 321.941Z" fill="black"/>
<path opacity="0.1" d="M219.66 223.246C226.073 223.246 231.272 218.047 231.272 211.635C231.272 205.222 226.073 200.023 219.66 200.023C213.248 200.023 208.049 205.222 208.049 211.635C208.049 218.047 213.248 223.246 219.66 223.246Z" fill="black"/>
<path opacity="0.1" d="M136.271 287.108C142.683 287.108 147.882 281.909 147.882 275.496C147.882 269.084 142.683 263.885 136.271 263.885C129.858 263.885 124.66 269.084 124.66 275.496C124.66 281.909 129.858 287.108 136.271 287.108Z" fill="black"/>
<path opacity="0.1" d="M281.939 160.968C288.351 160.968 293.55 155.769 293.55 149.357C293.55 142.944 288.351 137.745 281.939 137.745C275.526 137.745 270.327 142.944 270.327 149.357C270.327 155.769 275.526 160.968 281.939 160.968Z" fill="black"/>
<path opacity="0.1" d="M320.467 239.607C326.879 239.607 332.078 234.409 332.078 227.996C332.078 221.583 326.879 216.385 320.467 216.385C314.054 216.385 308.855 221.583 308.855 227.996C308.855 234.409 314.054 239.607 320.467 239.607Z" fill="black"/>
<path d="M219.66 176.273C228.113 176.273 234.966 169.421 234.966 160.968C234.966 152.515 228.113 145.662 219.66 145.662C211.207 145.662 204.355 152.515 204.355 160.968C204.355 169.421 211.207 176.273 219.66 176.273Z" fill="white"/>
<path d="M219.66 138.801C213.921 138.801 208.417 141.081 204.359 145.139C200.301 149.197 198.021 154.701 198.021 160.44C198.021 172.391 219.66 211.635 219.66 211.635C219.66 211.635 241.299 172.391 241.299 160.44C241.299 154.701 239.019 149.197 234.961 145.139C230.903 141.081 225.399 138.801 219.66 138.801ZM219.66 170.995C217.677 170.995 215.738 170.407 214.089 169.305C212.44 168.204 211.155 166.637 210.396 164.805C209.637 162.973 209.438 160.956 209.825 159.011C210.212 157.066 211.167 155.279 212.57 153.877C213.972 152.474 215.759 151.519 217.704 151.132C219.649 150.745 221.665 150.944 223.498 151.703C225.33 152.462 226.896 153.747 227.998 155.396C229.1 157.045 229.688 158.984 229.688 160.968C229.688 162.284 229.429 163.588 228.925 164.805C228.421 166.022 227.682 167.127 226.751 168.058C225.82 168.99 224.714 169.728 223.498 170.232C222.281 170.736 220.977 170.995 219.66 170.995V170.995Z" fill="#CCCCCC"/>
<path d="M136.271 241.718C144.724 241.718 151.576 234.866 151.576 226.413C151.576 217.96 144.724 211.107 136.271 211.107C127.818 211.107 120.965 217.96 120.965 226.413C120.965 234.866 127.818 241.718 136.271 241.718Z" fill="white"/>
<path d="M136.271 204.246C130.532 204.246 125.028 206.526 120.97 210.584C116.912 214.642 114.632 220.146 114.632 225.885C114.632 237.836 136.271 277.08 136.271 277.08C136.271 277.08 157.91 237.836 157.91 225.885C157.91 223.043 157.35 220.229 156.263 217.604C155.175 214.979 153.581 212.593 151.572 210.584C149.563 208.574 147.177 206.98 144.552 205.893C141.926 204.806 139.113 204.246 136.271 204.246ZM136.271 236.44C134.288 236.44 132.349 235.852 130.7 234.75C129.051 233.649 127.765 232.082 127.006 230.25C126.247 228.418 126.049 226.401 126.436 224.456C126.823 222.511 127.778 220.724 129.18 219.322C130.583 217.919 132.369 216.964 134.314 216.577C136.26 216.191 138.276 216.389 140.108 217.148C141.941 217.907 143.507 219.192 144.609 220.841C145.711 222.491 146.299 224.429 146.299 226.413C146.299 227.73 146.039 229.034 145.535 230.25C145.031 231.467 144.293 232.572 143.362 233.503C142.43 234.435 141.325 235.173 140.108 235.677C138.892 236.181 137.588 236.44 136.271 236.44V236.44Z" fill="#CCCCCC"/>
<path d="M320.467 194.218C328.92 194.218 335.772 187.365 335.772 178.912C335.772 170.459 328.92 163.607 320.467 163.607C312.013 163.607 305.161 170.459 305.161 178.912C305.161 187.365 312.013 194.218 320.467 194.218Z" fill="white"/>
<path d="M320.467 156.746C317.625 156.746 314.811 157.305 312.186 158.393C309.56 159.48 307.175 161.074 305.165 163.084C303.156 165.093 301.562 167.478 300.475 170.104C299.387 172.729 298.828 175.543 298.828 178.385C298.828 190.336 320.467 229.579 320.467 229.579C320.467 229.579 342.106 190.336 342.106 178.385C342.106 175.543 341.546 172.729 340.458 170.104C339.371 167.478 337.777 165.093 335.768 163.084C333.758 161.074 331.373 159.48 328.747 158.393C326.122 157.305 323.308 156.746 320.467 156.746ZM320.467 188.94C318.483 188.94 316.544 188.352 314.895 187.25C313.246 186.148 311.961 184.582 311.202 182.75C310.443 180.918 310.245 178.901 310.631 176.956C311.018 175.011 311.973 173.224 313.376 171.822C314.778 170.419 316.565 169.464 318.51 169.077C320.456 168.69 322.472 168.889 324.304 169.648C326.136 170.407 327.703 171.692 328.804 173.341C329.906 174.99 330.494 176.929 330.494 178.912C330.494 180.229 330.235 181.533 329.731 182.75C329.227 183.967 328.489 185.072 327.557 186.003C326.626 186.934 325.521 187.673 324.304 188.177C323.087 188.681 321.783 188.94 320.467 188.94V188.94Z" fill="#CCCCCC"/>
<path d="M219.66 73.356C228.113 73.356 234.966 66.5034 234.966 58.0503C234.966 49.5972 228.113 42.7446 219.66 42.7446C211.207 42.7446 204.355 49.5972 204.355 58.0503C204.355 66.5034 211.207 73.356 219.66 73.356Z" fill="white"/>
<path d="M219.66 35.8835C213.921 35.8836 208.417 38.1634 204.359 42.2215C200.301 46.2796 198.021 51.7835 198.021 57.5225C198.021 69.4734 219.66 108.717 219.66 108.717C219.66 108.717 241.299 69.4734 241.299 57.5225C241.299 51.7835 239.019 46.2796 234.961 42.2215C230.903 38.1634 225.399 35.8835 219.66 35.8835V35.8835ZM219.66 68.0782C217.677 68.0782 215.738 67.4901 214.089 66.3882C212.44 65.2863 211.155 63.7202 210.396 61.8878C209.637 60.0555 209.438 58.0392 209.825 56.094C210.212 54.1488 211.167 52.362 212.57 50.9595C213.972 49.5571 215.759 48.6021 217.704 48.2151C219.649 47.8282 221.665 48.0268 223.498 48.7858C225.33 49.5448 226.896 50.8301 227.998 52.4792C229.1 54.1282 229.688 56.067 229.688 58.0503C229.688 59.3672 229.429 60.6712 228.925 61.8878C228.421 63.1045 227.682 64.21 226.751 65.1411C225.82 66.0723 224.714 66.811 223.498 67.3149C222.281 67.8188 220.977 68.0782 219.66 68.0782V68.0782Z" fill="#CCCCCC"/>
<path d="M258.716 276.552C267.169 276.552 274.022 269.699 274.022 261.246C274.022 252.793 267.169 245.941 258.716 245.941C250.263 245.941 243.41 252.793 243.41 261.246C243.41 269.699 250.263 276.552 258.716 276.552Z" fill="white"/>
<path d="M258.716 239.079C252.977 239.079 247.473 241.359 243.415 245.417C239.357 249.475 237.077 254.979 237.077 260.718C237.077 272.669 258.716 311.913 258.716 311.913C258.716 311.913 280.355 272.669 280.355 260.718C280.355 257.877 279.795 255.063 278.708 252.437C277.62 249.812 276.027 247.427 274.017 245.417C272.008 243.408 269.622 241.814 266.997 240.727C264.372 239.639 261.558 239.079 258.716 239.079V239.079ZM258.716 271.274C256.733 271.274 254.794 270.686 253.145 269.584C251.496 268.482 250.211 266.916 249.452 265.084C248.693 263.251 248.494 261.235 248.881 259.29C249.268 257.345 250.223 255.558 251.625 254.155C253.028 252.753 254.815 251.798 256.76 251.411C258.705 251.024 260.721 251.223 262.554 251.982C264.386 252.741 265.952 254.026 267.054 255.675C268.156 257.324 268.744 259.263 268.744 261.246C268.744 262.563 268.485 263.867 267.981 265.084C267.477 266.3 266.738 267.406 265.807 268.337C264.876 269.268 263.77 270.007 262.554 270.511C261.337 271.015 260.033 271.274 258.716 271.274V271.274Z" fill="#3F3D56"/>
<path d="M130.465 158.856C138.918 158.856 145.771 152.004 145.771 143.551C145.771 135.098 138.918 128.245 130.465 128.245C122.012 128.245 115.16 135.098 115.16 143.551C115.16 152.004 122.012 158.856 130.465 158.856Z" fill="white"/>
<path d="M130.465 121.384C124.726 121.384 119.222 123.664 115.164 127.722C111.106 131.78 108.826 137.284 108.826 143.023C108.826 154.974 130.465 194.218 130.465 194.218C130.465 194.218 152.104 154.974 152.104 143.023C152.104 137.284 149.824 131.78 145.766 127.722C141.708 123.664 136.204 121.384 130.465 121.384ZM130.465 153.579C128.482 153.579 126.543 152.991 124.894 151.889C123.245 150.787 121.96 149.221 121.201 147.389C120.442 145.556 120.243 143.54 120.63 141.595C121.017 139.65 121.972 137.863 123.374 136.46C124.777 135.058 126.564 134.103 128.509 133.716C130.454 133.329 132.47 133.528 134.303 134.287C136.135 135.046 137.701 136.331 138.803 137.98C139.905 139.629 140.493 141.568 140.493 143.551C140.493 144.868 140.234 146.172 139.73 147.389C139.226 148.605 138.487 149.711 137.556 150.642C136.625 151.573 135.519 152.312 134.303 152.816C133.086 153.32 131.782 153.579 130.465 153.579Z" fill="#3F3D56"/>
<path d="M281.939 116.106C290.392 116.106 297.244 109.254 297.244 100.801C297.244 92.3477 290.392 85.4951 281.939 85.4951C273.485 85.4951 266.633 92.3477 266.633 100.801C266.633 109.254 273.485 116.106 281.939 116.106Z" fill="white"/>
<path d="M281.938 78.6338C276.199 78.6338 270.695 80.9136 266.637 84.9717C262.579 89.0298 260.299 94.5338 260.299 100.273C260.299 112.224 281.938 151.468 281.938 151.468C281.938 151.468 303.577 112.224 303.577 100.273C303.577 94.5338 301.298 89.0298 297.24 84.9717C293.181 80.9136 287.677 78.6338 281.938 78.6338V78.6338ZM281.938 110.828C279.955 110.828 278.016 110.24 276.367 109.138C274.718 108.037 273.433 106.47 272.674 104.638C271.915 102.806 271.716 100.789 272.103 98.8443C272.49 96.899 273.445 95.1122 274.848 93.7098C276.25 92.3074 278.037 91.3523 279.982 90.9654C281.927 90.5785 283.944 90.7771 285.776 91.536C287.608 92.295 289.174 93.5803 290.276 95.2294C291.378 96.8785 291.966 98.8173 291.966 100.801C291.966 103.46 290.91 106.011 289.029 107.891C287.149 109.772 284.598 110.828 281.938 110.828V110.828V110.828Z" fill="#3F3D56"/>
</svg>

After

Width:  |  Height:  |  Size: 15 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 8.7 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 6.8 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 11 KiB

View File

@ -0,0 +1,13 @@
<svg width="400px" height="100" viewBox="0 0 629 160" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M502.973 139.536H571.95L606.438 79.8002L571.95 20.0645H502.973L468.484 79.8002L502.973 139.536Z" fill="#F2F2F2"/>
<path d="M56.9728 138.577H125.95L160.438 78.8412L125.95 19.1055H56.9728L22.4844 78.8412L56.9728 138.577Z" fill="#F2F2F2"/>
<path d="M279.973 139.616H348.95L383.438 79.8802L348.95 20.1445H279.973L245.484 79.8802L279.973 139.616Z" fill="#F2F2F2"/>
<path d="M357.693 159.759H271.229C270.352 159.757 269.49 159.526 268.73 159.087C267.971 158.648 267.339 158.018 266.899 157.259L223.668 82.3789C223.23 81.6183 223 80.7563 223 79.8789C223 79.0015 223.23 78.1395 223.668 77.3789L266.899 2.5C267.339 1.74084 267.971 1.11043 268.73 0.671722C269.49 0.23302 270.352 0.00139483 271.229 0H357.693C358.57 0.00137846 359.432 0.232987 360.192 0.671692C360.951 1.1104 361.583 1.74083 362.023 2.5L405.254 77.3789C405.692 78.1394 405.922 79.0015 405.922 79.8789C405.922 80.7563 405.692 81.6184 405.254 82.3789L362.023 157.259C361.583 158.018 360.951 158.648 360.191 159.087C359.432 159.526 358.57 159.757 357.693 159.759ZM271.229 2.00005C270.703 2.00088 270.186 2.13984 269.73 2.40306C269.274 2.66628 268.895 3.04455 268.631 3.50005L225.4 78.379C225.137 78.8353 224.999 79.3525 224.999 79.879C224.999 80.4054 225.137 80.9226 225.4 81.379L268.631 156.259C268.895 156.714 269.274 157.093 269.73 157.356C270.186 157.619 270.703 157.758 271.229 157.759H357.693C358.219 157.758 358.736 157.619 359.192 157.356C359.648 157.093 360.027 156.714 360.29 156.259L403.522 81.3789C403.785 80.9226 403.923 80.4053 403.923 79.8789C403.923 79.3525 403.785 78.8352 403.522 78.3789L360.29 3.5C360.027 3.0445 359.648 2.66624 359.192 2.40302C358.736 2.13979 358.219 2.00082 357.693 2L271.229 2.00005Z" fill="#CCCCCC"/>
<path d="M134.693 159.759H48.2294C47.352 159.757 46.4903 159.526 45.7304 159.087C44.9705 158.648 44.3391 158.018 43.8992 157.259L0.667587 82.3789C0.230185 81.6183 0 80.7563 0 79.8789C0 79.0015 0.230185 78.1395 0.667587 77.3789L43.8993 2.5C44.3392 1.74084 44.9706 1.11043 45.7304 0.671722C46.4903 0.23302 47.352 0.00139483 48.2294 0H134.693C135.57 0.00137846 136.432 0.233018 137.192 0.671722C137.951 1.11043 138.583 1.74083 139.023 2.5L182.254 77.3789C182.692 78.1394 182.922 79.0015 182.922 79.8789C182.922 80.7563 182.692 81.6184 182.254 82.3789L139.023 157.259C138.583 158.018 137.951 158.648 137.191 159.087C136.432 159.526 135.57 159.757 134.693 159.759ZM48.2294 2C47.7029 2.00083 47.1859 2.13982 46.73 2.40305C46.2741 2.66627 45.8952 3.0445 45.6312 3.5L2.39966 78.3789C2.13722 78.8353 1.99909 79.3525 1.99911 79.8789C1.99914 80.4054 2.13729 80.9226 2.39977 81.3789L45.6312 156.259C45.8952 156.714 46.2741 157.093 46.73 157.356C47.1859 157.619 47.7029 157.758 48.2294 157.759H134.693C135.219 157.758 135.736 157.619 136.192 157.356C136.648 157.093 137.027 156.714 137.29 156.259L180.522 81.3789C180.785 80.9226 180.923 80.4053 180.923 79.8789C180.923 79.3525 180.785 78.8352 180.522 78.3789L137.29 3.5C137.027 3.0445 136.648 2.66624 136.192 2.40302C135.736 2.13979 135.219 2.00082 134.693 2H48.2294Z" fill="#CCCCCC"/>
<path d="M580.693 159.759H494.23C493.352 159.757 492.49 159.526 491.731 159.087C490.971 158.648 490.339 158.018 489.899 157.259L446.668 82.3789C446.23 81.6184 446 80.7563 446 79.8788C446 79.0014 446.23 78.1394 446.668 77.3789L489.899 2.5C490.339 1.74084 490.971 1.11039 491.731 0.671692C492.49 0.232989 493.352 0.00139483 494.23 0H580.693C581.57 0.00137846 582.432 0.232987 583.192 0.671692C583.952 1.1104 584.583 1.74083 585.023 2.5L628.254 77.3789C628.692 78.1394 628.922 79.0015 628.922 79.8789C628.922 80.7563 628.692 81.6184 628.254 82.3789L585.023 157.259C584.583 158.018 583.952 158.648 583.192 159.087C582.432 159.526 581.57 159.757 580.693 159.759V159.759ZM494.23 2C493.703 2.00083 493.186 2.13979 492.73 2.40302C492.274 2.66624 491.895 3.0445 491.631 3.5L448.4 78.3789C448.137 78.8352 447.999 79.3525 447.999 79.8789C447.999 80.4054 448.137 80.9226 448.4 81.3789L491.631 156.259C491.895 156.714 492.274 157.093 492.73 157.356C493.186 157.619 493.703 157.758 494.23 157.759H580.693C581.219 157.758 581.736 157.619 582.192 157.356C582.648 157.093 583.027 156.714 583.291 156.259L626.522 81.3789C626.785 80.9226 626.923 80.4053 626.923 79.8789C626.923 79.3525 626.785 78.8352 626.522 78.3789L583.291 3.5C583.027 3.0445 582.648 2.66624 582.192 2.40302C581.736 2.13979 581.219 2.00082 580.693 2H494.23Z" fill="#CCCCCC"/>
<path d="M91.4611 45.8633C84.9389 45.8633 78.5632 47.7973 73.1402 51.4208C67.7172 55.0444 63.4905 60.1946 60.9946 66.2203C58.4987 72.246 57.8456 78.8765 59.118 85.2734C60.3904 91.6702 63.5312 97.5461 68.143 102.158C72.7549 106.77 78.6308 109.911 85.0276 111.183C91.4245 112.455 98.055 111.802 104.081 109.306C110.106 106.811 115.257 102.584 118.88 97.1609C122.504 91.7379 124.438 85.3622 124.438 78.84C124.438 74.5094 123.585 70.2213 121.928 66.2204C120.27 62.2194 117.841 58.5841 114.779 55.5219C111.717 52.4598 108.082 50.0307 104.081 48.3735C100.08 46.7162 95.7916 45.8633 91.4611 45.8633ZM91.4611 55.7563C93.4177 55.7563 95.3305 56.3365 96.9574 57.4236C98.5842 58.5106 99.8523 60.0557 100.601 61.8634C101.35 63.6711 101.546 65.6602 101.164 67.5793C100.782 69.4983 99.8401 71.2611 98.4565 72.6447C97.0729 74.0282 95.3102 74.9704 93.3911 75.3522C91.4721 75.7339 89.4829 75.538 87.6752 74.7892C85.8675 74.0404 84.3224 72.7724 83.2354 71.1455C82.1483 69.5186 81.5681 67.6059 81.5681 65.6493C81.5681 63.0255 82.6104 60.5092 84.4657 58.6539C86.321 56.7986 88.8373 55.7563 91.4611 55.7563V55.7563ZM91.4611 103.382C87.553 103.364 83.7082 102.393 80.2603 100.553C76.8124 98.7134 73.8655 96.06 71.6751 92.8234C71.8337 86.228 84.8658 82.5974 91.4611 82.5974C98.0564 82.5974 111.089 86.228 111.247 92.8234C109.054 96.0576 106.107 98.7091 102.659 100.549C99.2121 102.388 95.3685 103.361 91.4611 103.382V103.382Z" fill="#5352ED"/>
<path d="M314.397 56.9066C312.766 55.1944 310.813 53.8205 308.65 52.8632C306.488 51.9059 304.158 51.384 301.793 51.3274C299.429 51.2708 297.077 51.6806 294.871 52.5332C292.665 53.3859 290.648 54.6648 288.937 56.2969C287.225 57.929 285.852 59.8824 284.896 62.0453C283.939 64.2082 283.418 66.5384 283.362 68.9028C283.307 71.2671 283.717 73.6193 284.571 75.8249C285.424 78.0305 286.704 80.0463 288.337 81.7573C288.534 81.9636 288.735 82.1652 288.942 82.3621L315.009 108.43L340.465 82.9743C343.787 79.4903 345.615 74.845 345.558 70.0312C345.5 65.2174 343.563 60.6168 340.159 57.2127C336.754 53.8086 332.154 51.8709 327.34 51.8137C322.526 51.7565 317.881 53.5843 314.397 56.9066H314.397Z" fill="#5352ED"/>
<path d="M558.697 59.8211C558.697 71.5491 537.462 97.2952 537.462 97.2952C537.462 97.2952 516.227 71.549 516.227 59.8211C516.224 57.0324 516.771 54.2706 517.836 51.6933C518.901 49.116 520.464 46.7738 522.434 44.8003C524.404 42.8268 526.744 41.2607 529.319 40.1914C531.895 39.1221 534.656 38.5706 537.445 38.5684C540.233 38.5661 542.995 39.113 545.572 40.1781C548.15 41.2432 550.492 42.8055 552.465 44.7758C554.439 46.746 556.005 49.0857 557.074 51.6612C558.143 54.2367 558.695 56.9977 558.697 59.7863L558.697 59.8211Z" fill="#5352ED"/>
<path d="M537.462 68.1635C542.069 68.1635 545.804 64.4284 545.804 59.821C545.804 55.2136 542.069 51.4785 537.462 51.4785C532.854 51.4785 529.119 55.2136 529.119 59.821C529.119 64.4284 532.854 68.1635 537.462 68.1635Z" fill="white"/>
<path d="M536.702 121.029C541.309 121.029 545.044 117.294 545.044 112.686C545.044 108.079 541.309 104.344 536.702 104.344C532.094 104.344 528.359 108.079 528.359 112.686C528.359 117.294 532.094 121.029 536.702 121.029Z" fill="#5352ED"/>
</svg>

After

Width:  |  Height:  |  Size: 7.4 KiB

View File

@ -0,0 +1,51 @@
<svg width="1066" height="774" viewBox="0 0 1066 774" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0)">
<path opacity="0.1" d="M995.19 369.87C995.78 363.1 996.09 356.22 996.09 349.27C996.09 240.44 922.25 152.21 831.17 152.21C802.17 152.21 774.83 161.21 751.17 176.96C686.7 126.96 602.53 96.75 510.45 96.75C360.62 96.75 231.74 176.82 174.56 291.65C171.39 291.43 168.19 291.31 164.96 291.31C73.83 291.31 0 379.53 0 488.36C0 528.36 10 565.59 27.14 596.67C27.14 694.58 105.59 773.98 202.36 773.98H324.36L324.9 773.05C332.07 761.41 349.24 758.5 361.2 765.11C364.36 766.85 367.3 769.11 370.83 769.91C384.96 772.91 394.45 750.18 408.75 752.39C415.93 753.5 421.53 760.92 428.75 760.16C433.54 759.65 437.17 755.64 441.67 753.94C448.88 751.2 456.19 755 461.24 761.17C464.17 752.74 464.15 742.75 468.89 735.02C476.06 723.38 493.23 720.47 505.19 727.08C508.35 728.82 511.29 731.08 514.82 731.88C528.95 734.88 538.44 712.15 552.74 714.36C559.92 715.47 565.52 722.89 572.74 722.13C577.53 721.62 581.16 717.61 585.66 715.91C596.88 711.64 608.37 723.23 611.13 734.91C612.199 740.056 612.765 745.294 612.82 750.55C622.5 745.86 630.68 732.67 641.73 734.38C648.91 735.49 654.51 742.91 661.73 742.15C666.52 741.64 670.15 737.63 674.65 735.93C685.87 731.66 697.36 743.25 700.12 754.93C701.59 761.13 701.69 767.57 701.94 773.93H904.09C980.09 773.93 1041.67 711.61 1041.67 634.73C1057.09 604.73 1066 569.45 1066 531.67C1066 464.67 1038 405.47 995.19 369.87Z" fill="#6C63FF"/>
<path d="M114 582.98V558.68L125.2 569.88L128 566.98L112 550.98L96 566.98L98.8 569.78L110 558.68V582.98H114Z" fill="white"/>
<path d="M789 299C792.314 299 795 296.314 795 293C795 289.686 792.314 287 789 287C785.686 287 783 289.686 783 293C783 296.314 785.686 299 789 299Z" fill="white"/>
<path d="M224 283C227.314 283 230 280.314 230 277C230 273.686 227.314 271 224 271C220.686 271 218 273.686 218 277C218 280.314 220.686 283 224 283Z" fill="white"/>
<path d="M401 435C404.314 435 407 432.314 407 429C407 425.686 404.314 423 401 423C397.686 423 395 425.686 395 429C395 432.314 397.686 435 401 435Z" fill="white"/>
<path d="M925 534C926.657 534 928 532.657 928 531C928 529.343 926.657 528 925 528C923.343 528 922 529.343 922 531C922 532.657 923.343 534 925 534Z" fill="white"/>
<path d="M700 617C701.657 617 703 615.657 703 614C703 612.343 701.657 611 700 611C698.343 611 697 612.343 697 614C697 615.657 698.343 617 700 617Z" fill="white"/>
<path d="M315 687C316.657 687 318 685.657 318 684C318 682.343 316.657 681 315 681C313.343 681 312 682.343 312 684C312 685.657 313.343 687 315 687Z" fill="white"/>
<path d="M96 444C97.6569 444 99 442.657 99 441C99 439.343 97.6569 438 96 438C94.3431 438 93 439.343 93 441C93 442.657 94.3431 444 96 444Z" fill="white"/>
<path d="M125 380C126.657 380 128 378.657 128 377C128 375.343 126.657 374 125 374C123.343 374 122 375.343 122 377C122 378.657 123.343 380 125 380Z" fill="white"/>
<path d="M957 492C958.657 492 960 490.657 960 489C960 487.343 958.657 486 957 486C955.343 486 954 487.343 954 489C954 490.657 955.343 492 957 492Z" fill="white"/>
<path d="M770 716C771.657 716 773 714.657 773 713C773 711.343 771.657 710 770 710C768.343 710 767 711.343 767 713C767 714.657 768.343 716 770 716Z" fill="white"/>
<path d="M215 612C216.657 612 218 610.657 218 609C218 607.343 216.657 606 215 606C213.343 606 212 607.343 212 609C212 610.657 213.343 612 215 612Z" fill="white"/>
<path d="M284 337C285.657 337 287 335.657 287 334C287 332.343 285.657 331 284 331C282.343 331 281 332.343 281 334C281 335.657 282.343 337 284 337Z" fill="white"/>
<path d="M386.5 227.5H371V212H369V227.5H353.5V229.5H369V245H371V229.5H386.5V227.5Z" fill="white"/>
<path d="M764 513.89H754.61V504.5H753.39V513.89H744V515.11H753.39V524.5H754.61V515.11H764V513.89Z" fill="white"/>
<path d="M707 688.89H697.61V679.5H696.39V688.89H687V690.11H696.39V699.5H697.61V690.11H707V688.89Z" fill="white"/>
<path d="M240 666.89H230.61V657.5H229.39V666.89H220V668.11H229.39V677.5H230.61V668.11H240V666.89Z" fill="white"/>
<path d="M174 490.89H164.61V481.5H163.39V490.89H154V492.11H163.39V501.5H164.61V492.11H174V490.89Z" fill="white"/>
<path d="M940 667V642.7L951.2 653.9L954 651L938 635L922 651L924.8 653.8L936 642.7V667H940Z" fill="white"/>
<path d="M747 385C750.314 385 753 382.314 753 379C753 375.686 750.314 373 747 373C743.686 373 741 375.686 741 379C741 382.314 743.686 385 747 385Z" fill="white"/>
<path d="M816 618C819.314 618 822 615.314 822 612C822 608.686 819.314 606 816 606C812.686 606 810 608.686 810 612C810 615.314 812.686 618 816 618Z" fill="white"/>
<path d="M807 439C808.657 439 810 437.657 810 436C810 434.343 808.657 433 807 433C805.343 433 804 434.343 804 436C804 437.657 805.343 439 807 439Z" fill="white"/>
<path d="M909.5 329.5H894V314H892V329.5H876.5V331.5H892V347H894V331.5H909.5V329.5Z" fill="white"/>
<path d="M697 592.89H687.61V583.5H686.39V592.89H677V594.11H686.39V603.5H687.61V594.11H697V592.89Z" fill="white"/>
<path d="M258.343 592.735L262.256 588.687L259.824 586.339L255.911 590.387L240.117 598.641L250.652 608.807L258.343 592.735Z" fill="#5352ED"/>
<path d="M268.811 603.045L272.82 598.895L270.33 596.478L266.314 600.636L250.116 609.099L260.928 619.527L268.811 603.045Z" fill="#5352ED"/>
<path d="M279.414 613.083L283.327 609.035L280.895 606.687L276.982 610.735L261.188 618.989L271.731 629.162L279.414 613.083Z" fill="#5352ED"/>
<path d="M354.436 685.727L358.452 681.569L355.955 679.16L351.939 683.317L335.748 691.773L346.553 702.208L354.436 685.727Z" fill="#5352ED"/>
<path d="M365.242 696.161L369.258 692.004L366.76 689.594L362.744 693.752L346.553 702.208L357.358 712.642L365.242 696.161Z" fill="#5352ED"/>
<path d="M376.047 706.596L380.063 702.438L377.565 700.029L373.549 704.186L357.358 712.642L368.163 723.077L376.047 706.596Z" fill="#5352ED"/>
<path d="M305.384 638.366L309.4 634.208L306.903 631.799L302.887 635.956L286.696 644.412L297.501 654.847L305.384 638.366Z" fill="#5352ED"/>
<path d="M316.19 648.8L320.206 644.643L317.716 642.24L313.7 646.398L297.501 654.847L308.306 665.282L316.19 648.8Z" fill="#5352ED"/>
<path d="M326.995 659.235L331.011 655.077L328.521 652.675L324.505 656.832L308.306 665.282L319.118 675.723L326.995 659.235Z" fill="#5352ED"/>
<path d="M575.105 337.375C588.604 322.751 595.751 281.002 586.65 272.215C577.548 263.428 536.901 272.823 522.762 286.828L522.325 286.417L244.585 574.047L297.38 625.019L575.113 337.396L575.105 337.375Z" fill="#5352ED"/>
<path d="M671.535 430.49C685.034 415.867 692.181 374.117 683.08 365.33C673.978 356.543 633.331 365.939 619.199 379.951L618.763 379.539L341.022 667.17L393.817 718.141L671.55 430.518L671.535 430.49Z" fill="#5352ED"/>
<path d="M752.018 249.005C771.948 227.705 790.429 174.211 781.335 165.431C772.241 156.651 720.231 177.763 699.701 198.415L699.272 198.01L292.018 619.758L344.799 670.73L752.059 248.975L752.018 249.005Z" fill="#363192"/>
<g opacity="0.1">
<path opacity="0.1" d="M574.87 274.92C582.46 257.21 597.28 238.74 606.5 238.85C618.5 238.99 640.12 270.64 642.57 290.85L642.83 269.14C642.62 249.24 619.18 213.96 606.53 213.81C597.43 213.7 582.89 231.69 575.21 249.19L574.87 274.92Z" fill="black"/>
<path opacity="0.1" d="M435.41 291.7H436.01C436.68 271.81 459.82 237.09 472.46 237.24C480.72 237.34 493.57 252.41 501.56 268.4L503.5 106.04H504.09C504.87 76.8801 528.22 25.8401 540.86 26.0401C552.8 26.1801 574.22 72.2501 576.64 101.94L576.87 81.9401C576.76 52.7701 553.51 1.17011 540.87 1.02011C528.23 0.870105 504.87 51.9101 504.1 81.0701H503.51L501.57 243.43C493.57 227.43 480.73 212.37 472.47 212.27C459.83 212.12 436.69 246.84 436.02 266.73H435.42L430.65 666.54H430.95L435.41 291.7Z" fill="black"/>
</g>
<path d="M540.858 25.3856L540.848 25.3855C537.021 25.34 533.881 28.4057 533.836 32.2327L533.644 48.4216C533.598 52.2487 536.664 55.3879 540.491 55.4333L540.501 55.4335C544.328 55.4789 547.467 52.4133 547.513 48.5862L547.705 32.3973C547.75 28.5703 544.685 25.431 540.858 25.3856Z" fill="#ECECF3"/>
</g>
<defs>
<clipPath id="clip0">
<rect width="1066" height="773.96" fill="white"/>
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 7.8 KiB

View File

@ -11,14 +11,10 @@ import { ToastContainer } from 'react-toastify';
export default class App extends React.PureComponent {
componentDidMount() {
if (!localStorage.getItem('firstRun')) {
SettingsFunctions.setDefaultSettings();
window.location.reload();
}
// 4.0 -> 5.0 (the key below is only on 5.0)
// now featuring 5.0 -> 5.1
if (!localStorage.getItem('order') || !localStorage.getItem('backgroundFilterAmount')) {
// the firstRun check was moved here because the old function was useless
if (!localStorage.getItem('firstRun') || !localStorage.getItem('order') || !localStorage.getItem('backgroundFilterAmount')) {
SettingsFunctions.moveSettings();
window.location.reload();
}

View File

@ -1,5 +1,7 @@
import React from 'react';
import EventBus from '../../modules/helpers/eventbus';
import Main from './main/Main';
import Navbar from '../widgets/navbar/Navbar';
@ -39,6 +41,8 @@ export default class Modals extends React.PureComponent {
this.setState({
welcomeModal: false
});
EventBus.dispatch('refresh', 'widgets');
EventBus.dispatch('refresh', 'backgroundwelcome');
}
toggleModal(type, action) {
@ -59,7 +63,7 @@ export default class Modals extends React.PureComponent {
<Main modalClose={() => this.toggleModal('mainModal', false)}/>
</Modal>
<React.Suspense fallback={renderLoader()}>
<Modal closeTimeoutMS={300} onRequestClose={() => this.closeWelcome()} isOpen={this.state.welcomeModal} className='Modal welcomemodal mainModal' overlayClassName='Overlay' ariaHideApp={false}>
<Modal closeTimeoutMS={300} onRequestClose={() => this.closeWelcome()} isOpen={this.state.welcomeModal} className='Modal welcomemodal mainModal' overlayClassName='Overlay welcomeoverlay' shouldCloseOnOverlayClick={false} ariaHideApp={false}>
<Welcome modalClose={() => this.closeWelcome()}/>
</Modal>
<Modal closeTimeoutMS={300} onRequestClose={() => this.toggleModal('feedbackModal', false)} isOpen={this.state.feedbackModal} className='Modal mainModal' overlayClassName='Overlay' ariaHideApp={false}>

View File

@ -29,17 +29,17 @@ export default function MainModal(props) {
<>
<span className='closeModal' onClick={props.modalClose}>&times;</span>
<Tabs navbar={true}>
<div label={language.settings}>
<div label={language.settings} name='settings'>
<React.Suspense fallback={renderLoader()}>
<Settings/>
</React.Suspense>
</div>
<div label={language.addons}>
<div label={language.addons} name='addons'>
<React.Suspense fallback={renderLoader()}>
<Addons/>
</React.Suspense>
</div>
<div label={language.marketplace}>
<div label={language.marketplace} name='marketplace'>
<React.Suspense fallback={renderLoader()}>
<Marketplace/>
</React.Suspense>

View File

@ -34,7 +34,7 @@ export default class Item extends React.PureComponent {
}
// prevent console error
let iconsrc = window.constants.DDG_PROXY + this.props.data.icon;
let iconsrc = window.constants.DDG_IMAGE_PROXY + this.props.data.icon;
if (!this.props.data.icon) {
iconsrc = null;
}

View File

@ -3,7 +3,7 @@ export default function Items(props) {
<div className='items'>
{props.items.map((item) => (
<div className='item' onClick={() => props.toggleFunction(item.name)} key={item.name}>
<img alt='icon' draggable='false' src={window.constants.DDG_PROXY + item.icon_url} />
<img alt='icon' draggable='false' src={window.constants.DDG_IMAGE_PROXY + item.icon_url} />
<div className='details'>
<h4>{item.display_name || item.name}</h4>
<p>{item.author}</p>

View File

@ -410,3 +410,7 @@ h3 {
h5 {
font-size: 0.8rem;
}
.checkbox svg {
fill: var(--modal-text) !important;
}

View File

@ -1,7 +1,6 @@
import React from 'react';
import EventBus from '../../../../modules/helpers/eventbus';
import SettingsFunctions from '../../../../modules/helpers/settings';
import CheckboxUI from '@material-ui/core/Checkbox';
import FormControlLabel from '@material-ui/core/FormControlLabel';
@ -15,10 +14,11 @@ export default class Checkbox extends React.PureComponent {
}
handleChange = () => {
SettingsFunctions.setItem(this.props.name);
const value = (this.state.checked === true) ? false : true;
localStorage.setItem(this.props.name, value);
this.setState({
checked: (this.state.checked === true) ? false : true
checked: value
});
window.stats.postEvent('setting', `${this.props.name} ${(this.state.checked === true) ? 'enabled' : 'disabled'}`);
@ -45,7 +45,7 @@ export default class Checkbox extends React.PureComponent {
return (
<>
<FormControlLabel
control={<CheckboxUI name={this.props.name} color='primary' checked={this.state.checked} onChange={this.handleChange} />}
control={<CheckboxUI name={this.props.name} color='primary' className='checkbox' checked={this.state.checked} onChange={this.handleChange} />}
label={text}
/>
<br/>

View File

@ -1,7 +1,6 @@
import React from 'react';
import EventBus from '../../../../modules/helpers/eventbus';
import SettingsFunctions from '../../../../modules/helpers/settings';
import SwitchUI from '@material-ui/core/Switch';
import FormControlLabel from '@material-ui/core/FormControlLabel';
@ -15,10 +14,11 @@ export default class Switch extends React.PureComponent {
}
handleChange = () => {
SettingsFunctions.setItem(this.props.name);
const value = (this.state.checked === true) ? false : true;
localStorage.setItem(this.props.name, value);
this.setState({
checked: (this.state.checked === true) ? false : true
checked: value
});
window.stats.postEvent('setting', `${this.props.name} ${(this.state.checked === true) ? 'enabled' : 'disabled'}`);

View File

@ -3,7 +3,7 @@ import React from 'react';
import Tooltip from '../../../../helpers/tooltip/Tooltip';
import EmailIcon from '@material-ui/icons/Email';
import TwitterIcon from '@material-ui/icons/Twitter';
import ForumIcon from '@material-ui/icons/Forum';
import ChatIcon from '@material-ui/icons/Chat';
import InstagramIcon from '@material-ui/icons/Instagram';
import FacebookIcon from '@material-ui/icons/Facebook';
@ -96,7 +96,7 @@ export default class About extends React.PureComponent {
<a href='https://twitter.com/getmue' className='aboutIcon' target='_blank' rel='noopener noreferrer'><TwitterIcon/></a>
<a href='https://instagram.com/mue.tab' className='aboutIcon' target='_blank' rel='noopener noreferrer'><InstagramIcon/></a>
<a href='https://facebook.com/muetab' className='aboutIcon' target='_blank' rel='noopener noreferrer'><FacebookIcon/></a>
<a href='https://discord.gg/zv8C9F8' className='aboutIcon' target='_blank' rel='noopener noreferrer'><ForumIcon/></a>
<a href='https://discord.gg/zv8C9F8' className='aboutIcon' target='_blank' rel='noopener noreferrer'><ChatIcon/></a>
<h3>{this.language.support_mue}</h3>
<p>

View File

@ -6,9 +6,8 @@ import Text from '../Text';
import Switch from '../Switch';
import ResetModal from '../ResetModal';
import SettingsFunctions from '../../../../../modules/helpers/settings';
import SettingsFunctions from '../../../../../modules/helpers/settings/modals';
import { toast } from 'react-toastify';
import Modal from 'react-modal';
export default class AdvancedSettings extends React.PureComponent {
@ -20,17 +19,6 @@ export default class AdvancedSettings extends React.PureComponent {
this.language = window.language.modals.main.settings;
}
settingsImport(e) {
const content = JSON.parse(e.target.result);
Object.keys(content).forEach((key) => {
localStorage.setItem(key, content[key]);
});
toast(window.language.toasts.imported);
window.stats.postEvent('tab', 'Settings imported');
}
render() {
const { advanced } = this.language.sections;
@ -43,7 +31,7 @@ export default class AdvancedSettings extends React.PureComponent {
<button className='reset' onClick={() => this.setState({ resetModal: true })}>{this.language.buttons.reset}</button>
<button className='export' onClick={() => SettingsFunctions.exportSettings()}>{this.language.buttons.export}</button>
<button className='import' onClick={() => document.getElementById('file-input').click()}>{this.language.buttons.import}</button>
<FileUpload id='file-input' accept='application/json' type='settings' loadFunction={(e) => this.settingsImport(e)}/>
<FileUpload id='file-input' accept='application/json' type='settings' loadFunction={(e) => SettingsFunctions.importSettings(e)}/>
<h3>{advanced.customisation}</h3>
<Text title={advanced.tab_name} name='tabName' default={window.language.tabname} category='other'/>

View File

@ -53,7 +53,7 @@ export default class Changelog extends React.PureComponent {
lightboxImg: img.src
});
};
}
};
for (let link = 0; link < links.length; link++) {
links[link].target = '_blank';

View File

@ -52,7 +52,6 @@ export default class OrderSettings extends React.PureComponent {
}
const newArray = [...array];
const target = newArray[oldIndex];
const inc = newIndex < oldIndex ? -1 : 1;
@ -61,7 +60,6 @@ export default class OrderSettings extends React.PureComponent {
}
newArray[newIndex] = target;
return newArray;
}

View File

@ -8,7 +8,7 @@ export default function QuickLinks() {
<>
<h2>{language.title}</h2>
<Switch name='quicklinksenabled' text={window.language.modals.main.settings.enabled} category='quicklinks' element='.quicklinks-container' />
<Checkbox name='quicklinksddgProxy' text={window.language.modals.main.settings.sections.background.ddg_proxy} element='.other' />
<Checkbox name='quicklinksddgProxy' text={window.language.modals.main.settings.sections.background.ddg_image_proxy} element='.other' />
<Checkbox name='quicklinksnewtab' text={language.open_new} category='quicklinks' />
<Checkbox name='quicklinkstooltip' text={language.tooltip} category='quicklinks' />
</>

View File

@ -85,7 +85,6 @@ export default class SearchSettings extends React.PureComponent {
))}
<option value='custom'>{search.custom.split(' ')[0]}</option>
</Dropdown>
<ul style={{ display: this.state.customDisplay }}>
<br/>
<p style={{ marginTop: '0px' }}>{search.custom} <span className='modalLink' onClick={() => this.resetSearch()}>{language.buttons.reset}</span></p>

View File

@ -153,7 +153,7 @@ export default class BackgroundSettings extends React.PureComponent {
<>
<h2>{background.title}</h2>
<Switch name='background' text={this.language.enabled} category='background' />
<Checkbox name='ddgProxy' text={background.ddg_proxy} />
<Checkbox name='ddgProxy' text={background.ddg_image_proxy} />
<Checkbox name='bgtransition' text={background.transition} />
<Checkbox name='photoInformation' text={background.photo_information} category='background' element='.other' />

View File

@ -55,7 +55,7 @@ export default class ColourSettings extends React.PureComponent {
try {
gradientSettings = JSON.parse(hex);
} catch (e) {
// Disregard exception.
// Disregard exception
}
}

View File

@ -8,8 +8,8 @@ export default function Addons() {
return (
<Tabs>
<div label={addons.added}><Added/></div>
<div label={addons.sideload}><Sideload/></div>
<div label={addons.added} name='added'><Added/></div>
<div label={addons.sideload} name='sideload'><Sideload/></div>
</Tabs>
);
}

View File

@ -7,9 +7,9 @@ export default function Marketplace() {
return (
<Tabs>
<div label={marketplace.photo_packs}><MarketplaceTab type='photo_packs'/></div>
<div label={marketplace.quote_packs}><MarketplaceTab type='quote_packs'/></div>
<div label={marketplace.preset_settings}><MarketplaceTab type='preset_settings'/></div>
<div label={marketplace.photo_packs} name='photo_packs'><MarketplaceTab type='photo_packs'/></div>
<div label={marketplace.quote_packs} name='quote_packs'><MarketplaceTab type='quote_packs'/></div>
<div label={marketplace.preset_settings} name='preset_settings'><MarketplaceTab type='preset_settings'/></div>
</Tabs>
);
}

View File

@ -26,20 +26,20 @@ export default function Settings() {
return (
<>
<Tabs>
<div label={sections.time.title}><Time/></div>
<div label={sections.quote.title}><Quote/></div>
<div label={sections.greeting.title}><Greeting/></div>
<div label={sections.background.title}><Background/></div>
<div label={sections.search.title}><Search/></div>
<div label={sections.quicklinks.title}><QuickLinks/></div>
<div label={sections.weather.title}><Weather/></div>
<div label={sections.appearance.title}><Appearance/></div>
<div label={sections.order.title}><Order/></div>
<div label={sections.language.title}><Language/></div>
<div label={sections.advanced.title}><Advanced/></div>
<div label={sections.experimental.title}><Experimental/></div>
<div label={sections.changelog}><Changelog/></div>
<div label={sections.about.title}><About/></div>
<div label={sections.time.title} name='time'><Time/></div>
<div label={sections.quote.title} name='quote'><Quote/></div>
<div label={sections.greeting.title} name='greeting'><Greeting/></div>
<div label={sections.background.title} name='background'><Background/></div>
<div label={sections.search.title} name='search'><Search/></div>
<div label={sections.quicklinks.title} name='quicklinks'><QuickLinks/></div>
<div label={sections.weather.title} name='weather'><Weather/></div>
<div label={sections.appearance.title} name='appearance'><Appearance/></div>
<div label={sections.order.title} name='order'><Order/></div>
<div label={sections.language.title} name='language'><Language/></div>
<div label={sections.advanced.title} name='advanced'><Advanced/></div>
<div label={sections.experimental.title} name='experimental'><Experimental/></div>
<div label={sections.changelog} name='changelog'><Changelog/></div>
<div label={sections.about.title} name='about'><About/></div>
</Tabs>
<div className='reminder-info' style={{ display: display }}>
<h1>{reminder.title}</h1>

View File

@ -8,17 +8,19 @@ export default class Tabs extends React.PureComponent {
super(props);
this.state = {
currentTab: this.props.children[0].props.label
currentTab: this.props.children[0].props.label,
currentName: this.props.children[0].props.name
};
}
onClick = (tab) => {
if (tab !== this.state.currentTab) {
window.stats.postEvent('tab', `Changed ${this.state.currentTab} to ${tab}`);
onClick = (tab, name) => {
if (name !== this.state.currentName) {
window.stats.postEvent('tab', `Changed ${this.state.currentName} to ${name}`);
}
this.setState({
currentTab: tab
currentTab: tab,
currentName: name
});
};
@ -42,7 +44,7 @@ export default class Tabs extends React.PureComponent {
currentTab={this.state.currentTab}
key={tab.props.label || index}
label={tab.props.label}
onClick={this.onClick}
onClick={(nextTab) => this.onClick(nextTab, tab.props.name)}
navbar={this.props.navbar || false}
/>
))}

View File

@ -0,0 +1,16 @@
export default function ProgressBar(props) {
return (
<div className='progressbar'>
{props.count.map((num) => {
let className = 'step';
const index = props.count.indexOf(num);
if (index === props.currentTab) {
className = 'step active';
}
return <div className={className} key={index} onClick={() => props.switchTab(index)}></div>
})}
</div>
);
}

View File

@ -1,28 +1,69 @@
import EmailIcon from '@material-ui/icons/Email';
import TwitterIcon from '@material-ui/icons/Twitter';
import ForumIcon from '@material-ui/icons/Forum';
import React from 'react';
import WelcomeSections from './WelcomeSections';
import ProgressBar from './ProgressBar';
import './welcome.scss';
export default function WelcomeModal(props) {
const language = window.language.modals.welcome;
export default class WelcomeModal extends React.PureComponent {
constructor() {
super();
this.state = {
image: './././icons/undraw_celebration.svg',
currentTab: 0,
finalTab: 4,
buttonText: 'Next'
};
this.language = window.language.modals.welcome;
this.images = ['./././icons/undraw_celebration.svg', './././icons/undraw_around_the_world_modified.svg', './././icons/undraw_add_files_modified.svg', './././icons/undraw_dark_mode.svg', './././icons/undraw_private_data_modified.svg', './././icons/undraw_upgrade_modified.svg']
}
return (
<div className='welcomeContent'>
<span className='closeModal' onClick={props.modalClose}>&times;</span>
<div className='welcomeModalText'>
<h2 className='subtitle'>{language.title}</h2>
<h1 className='welcometitle'>Mue Tab</h1>
<img alt='celebration' style={{ height: '200px', width: 'auto' }} draggable={false} src='./././icons/undraw_celebration.svg' />
<h2 className='subtitle'>{language.information}</h2>
<p>{language.thankyoumessage1}<br/> {language.thankyoumessage2}</p>
<h2 className='subtitle'>{language.support}</h2>
<a href='mailto:hello@muetab.com' className='welcomeLink' target='_blank' rel='noopener noreferrer'><EmailIcon/></a>
<a href='https://twitter.com/getmue' className='welcomeLink' target='_blank' rel='noopener noreferrer'><TwitterIcon/></a>
<a href='https://discord.gg/zv8C9F8' className='welcomeLink' target='_blank' rel='noopener noreferrer'><ForumIcon/></a>
<br/>
<button className='close' onClick={props.modalClose}>{language.close}</button>
changeTab(minus) {
if (minus) {
return this.setState({
currentTab: this.state.currentTab - 1,
image: this.images[this.state.currentTab - 1],
buttonText: 'Next'
});
}
if (this.state.buttonText === 'Close') {
return this.props.modalClose();
}
this.setState({
currentTab: this.state.currentTab + 1,
image: this.images[this.state.currentTab + 1],
buttonText: (this.state.currentTab !== this.state.finalTab) ? 'Next' : 'Close'
});
}
// specific
switchTab(tab) {
this.setState({
currentTab: tab,
image: this.images[tab],
buttonText: 'Next'
});
}
render() {
return (
<div className='welcomeContent'>
<section>
<img alt='celebration' draggable={false} src={this.state.image} />
<ProgressBar count={this.images} currentTab={this.state.currentTab} switchTab={(tab) => this.switchTab(tab)}/>
</section>
<section>
<div className='content'>
<WelcomeSections currentTab={this.state.currentTab} switchTab={(tab) => this.switchTab(tab)}/>
</div>
<div className='buttons'>
{(this.state.currentTab !== 0) ? <button className='close' style={{ marginRight: '20px' }} onClick={() => this.changeTab(true)}>Previous</button> : null}
<button className='close' onClick={() => this.changeTab()}>{this.state.buttonText}</button>
</div>
</section>
</div>
</div>
);
);
}
}

View File

@ -0,0 +1,156 @@
import React from 'react';
import Radio from '../main/settings/Radio';
//import Checkbox from '../main/settings/Checkbox';
import FileUpload from '../main/settings/FileUpload';
import UploadIcon from '@material-ui/icons/CloudUpload';
import AutoIcon from '@material-ui/icons/AutoAwesome';
import LightModeIcon from '@material-ui/icons/LightMode';
import DarkModeIcon from '@material-ui/icons/DarkMode';
import SettingsFunctions from '../../../modules/helpers/settings';
const languages = require('../../../modules/languages.json');
export default class WelcomeSections extends React.Component {
constructor() {
super();
this.state = {
autoClass: 'toggle auto active',
lightClass: 'toggle lightTheme',
darkClass: 'toggle darkTheme',
welcomeImage: 0
};
this.changeWelcomeImg = this.changeWelcomeImg.bind(this);
this.welcomeImages = ['https://external-content.duckduckgo.com/iu/?u=example.com/example.png'];
}
changeTheme(type) {
this.setState({
autoClass: (type === 'auto') ? 'toggle auto active' : 'toggle auto',
lightClass: (type === 'light') ? 'toggle lightTheme active' : 'toggle lightTheme',
darkClass: (type === 'dark') ? 'toggle darkTheme active': 'toggle darkTheme'
});
localStorage.setItem('theme', type);
SettingsFunctions.loadSettings(true);
}
getSetting(name) {
const value = localStorage.getItem(name).replace('false', 'Off').replace('true', 'On');
return value.charAt(0).toUpperCase() + value.slice(1);
}
importSettings(e) {
SettingsFunctions.importSettings(e);
this.props.switchTab(4);
}
changeWelcomeImg() {
let welcomeImage = this.state.welcomeImage;
this.setState({
welcomeImage: ++welcomeImage % this.welcomeImages.length
});
this.timeout = setTimeout(this.changeWelcomeImg, 3 * 1000);
}
componentDidMount() {
this.timeout = setTimeout(this.changeWelcomeImg, 3 * 1000);
}
render() {
const language = window.language.modals.welcome;
let tabContent;
const intro = (
<>
<h1>{language.title} Mue Tab</h1>
<p>{language.thankyoumessage1} {language.thankyoumessage2}</p>
<h3 className='quicktip'>to be added</h3>
<div className='examples'>
<img src={this.welcomeImages[this.state.welcomeImage]} alt='example mue setup' draggable={false}/>
</div>
</>
);
const chooseLanguage = (
<>
<h1>Choose your language</h1>
<p>to be added</p>
<Radio name='language' options={languages}/>
</>
);
const theme = (
<>
<h1>Select a theme</h1>
<p>Mue is available in both light and dark theme, or this can be automatically set depending on your system theme.</p>
<div className='themesToggleArea'>
<div className={this.state.autoClass} onClick={() => this.changeTheme('auto')}>
<AutoIcon/>
<span>Auto</span>
</div>
<div className='options'>
<div className={this.state.lightClass} onClick={() => this.changeTheme('light')}>
<LightModeIcon/>
<span>Light</span>
</div>
<div className={this.state.darkClass} onClick={() => this.changeTheme('dark')}>
<DarkModeIcon/>
<span>Dark</span>
</div>
</div>
<h3 className='quicktip'>Quick Tip</h3>
<p>Using the Auto settings will use the theme on your computer. This setting will impact the modals and some of the widgets displayed on the screen, such as weather and notes.</p>
</div>
</>
);
const settings = (
<>
<h1>Import Settings</h1>
<p>Installing Mue on a new device? Feel free to import your old settings!</p>
<button className='upload' onClick={() => document.getElementById('file-input').click()}>
<UploadIcon/>
<br/>
<span>{window.language.modals.main.settings.buttons.import}</span>
</button>
<FileUpload id='file-input' accept='application/json' type='settings' loadFunction={(e) => this.importSettings(e)}/>
<h3 className='quicktip'>Quick Tip</h3>
<p>You can export your old settings by navigating to the Advanced tab in your old Mue setup. Then you need to click the export button which will download the JSON file. You can upload this file here to carry across your settings and preferences from your previous Mue installation.</p>
</>
);
const privacy = (
<>
<h1>Privacy Options</h1>
<p>to be added</p>
</>
);
const final = (
<>
<h1>Final step</h1>
<p>Your Mue Tab experience is finally about to begin.</p>
<h3 className='quicktip'>Changes</h3>
<p>To change settings later click on the settings icon in the top right corner of your tab.</p>
<div className='themesToggleArea'>
<div className='toggle' onClick={() => this.props.switchTab(1)}>Language: {languages.find((i) => i.value === localStorage.getItem('language')).name}</div>
<div className='toggle' onClick={() => this.props.switchTab(3)}>Theme: {this.getSetting('theme')}</div>
</div>
</>
)
switch (this.props.currentTab) {
case 1: tabContent = chooseLanguage; break;
case 2: tabContent = settings; break;
case 3: tabContent = theme; break;
case 4: tabContent = privacy; break;
case 5: tabContent = final; break;
// 0
default: tabContent = intro;
}
return tabContent;
}
}

View File

@ -1,59 +1,148 @@
@import '../main/scss/index.scss';
.welcomemodal {
margin-top: 40px;
}
position: absolute;
margin: auto;
top: 0;
right: 0;
bottom: 0;
left: 0;
height: 80%;
width: 60%;
padding: 0;
.welcomeModalText {
line-height: 2px;
h2.subtitle {
font-size: 24px;
color: var(--modal-text);
text-transform: uppercase;
section {
width: 50%;
display: inline;
height: 80vh;
}
h1.welcometitle {
font-size: 50px;
}
}
section:nth-child(1) {
float: left;
background: var(--sidebar);
display: flex;
justify-content: center;
align-items: center;
.welcomeContent {
margin-top: 2em;
text-align: center;
padding: 25px;
a {
text-decoration: none;
line-height: 20px !important;
color: var(--modal-link);
cursor: pointer;
}
img.icon,
svg {
margin-top: -12px;
padding: 10px;
cursor: pointer;
transition: ease 0.2s;
&:hover {
transform: scale(1.1);
img {
height: 300px;
width: 400px;
}
}
p {
margin-top: 0.7rem;
line-height: 1em;
}
section:nth-child(2) {
float: right;
img,
svg {
height: 24px;
width: auto;
.content {
padding: 20px;
}
.buttons {
position: absolute;
bottom: 2rem;
right: 2rem;
}
h1 {
font-size: 2.5em;
}
h3.quicktip {
text-transform: uppercase;
color: #5352ed;
}
}
}
.welcomeLink {
color: var(--modal-text) !important;
.welcomeoverlay {
background-color: rgba(0, 0, 0, 0.4);
}
.progressbar {
position: fixed;
bottom: 50px;
text-align: center;
display: inline;
overflow: hidden;
white-space: nowrap;
.step {
display: inline-block;
width: 50px;
background: #8395a7;
height: 4px;
margin: 10px;
transition: .2s ease;
cursor: pointer;
border-radius: 15px;
}
.active {
background: #5352ed;
}
}
.examples {
display: flex;
flex-wrap: wrap;
flex-direction: column;
align-items: center;
img {
width: 30rem;
height: auto;
display: block;
margin: 30px;
border-radius: 12px;
}
}
.themesToggleArea {
.active {
background: var(--tab-active) !important;
}
.toggle {
background: var(--sidebar);
text-align: center;
border-radius: 40px;
padding: 20px;
margin: 10px;
&:hover {
background: var(--tab-active);
cursor: pointer;
}
}
.auto {
svg {
font-size: 12px;
padding-right: 5px;
}
}
.options {
display: flex;
justify-content: space-between;
.lightTheme,
.darkTheme {
width: 40%;
padding: 50px;
span {
display: block;
}
}
}
}
a.privacy {
text-decoration: none;
color: var(--modal-text);
&:hover {
color: #5352ed;
}
}

View File

@ -43,6 +43,11 @@ export default class Widgets extends React.PureComponent {
}
render() {
// don't hide when welcome is there
if (localStorage.getItem('showWelcome') === 'true') {
return <div id='widgets'></div>
}
// allow for re-ordering widgets
let elements = [];

View File

@ -68,7 +68,7 @@ export default class Background extends React.PureComponent {
const backgroundImage = document.getElementById('backgroundImage');
if (this.state.url !== '') {
const url = (localStorage.getItem('ddgProxy') === 'true' && this.state.photoInfo.offline !== true) ? window.constants.DDG_PROXY + this.state.url : this.state.url;
const url = (localStorage.getItem('ddgProxy') === 'true' && this.state.photoInfo.offline !== true) ? window.constants.DDG_IMAGE_PROXY + this.state.url : this.state.url;
const photoInformation = document.querySelector('.photoInformation');
// just set the background
@ -116,7 +116,10 @@ export default class Background extends React.PureComponent {
// Main background getting function
async getBackground() {
const offline = (localStorage.getItem('offlineMode') === 'true');
let offline = (localStorage.getItem('offlineMode') === 'true');
if (localStorage.getItem('showWelcome') === 'true') {
offline = true;
}
switch (localStorage.getItem('backgroundType')) {
case 'api':
@ -302,7 +305,9 @@ export default class Background extends React.PureComponent {
// fix bug
try {
document.querySelector('.photoInformation').style.display = 'block';
} catch (e) {}
} catch (e) {
// Disregard exception
}
}
element.style.display = 'block';
@ -328,7 +333,7 @@ export default class Background extends React.PureComponent {
}
// uninstall photo pack reverts your background to what you had previously
if (data === 'marketplacebackgrounduninstall') {
if (data === 'marketplacebackgrounduninstall' || data === 'backgroundwelcome') {
refresh();
}
});
@ -362,7 +367,7 @@ export default class Background extends React.PureComponent {
return (
<>
<div style={{ 'WebkitFilter': `blur(${localStorage.getItem('blur')}px) brightness(${localStorage.getItem('brightness')}%) ${backgroundFilter ? backgroundFilter + '(' + localStorage.getItem('backgroundFilterAmount') + '%)' : ''}` }} id='backgroundImage'/>
<div style={{ WebkitFilter: `blur(${localStorage.getItem('blur')}px) brightness(${localStorage.getItem('brightness')}%) ${backgroundFilter ? backgroundFilter + '(' + localStorage.getItem('backgroundFilterAmount') + '%)' : ''}` }} id='backgroundImage'/>
{(this.state.photoInfo.credit !== '') ?
<PhotoInformation className={this.props.photoInformationClass} info={this.state.photoInfo} api={this.state.currentAPI}/>
: null}

View File

@ -9,7 +9,7 @@ export default class Favourite extends React.PureComponent {
constructor() {
super();
this.state = {
favourited: (localStorage.getItem('favourite')) ? <StarIcon onClick={this.favourite} className='topicons' /> : <StarIcon2 onClick={this.favourite} className='topicons' />
favourited: (localStorage.getItem('favourite')) ? <StarIcon onClick={this.favourite} className='topicons' /> : <StarIcon2 onClick={this.favourite} className='topicons' />
};
}

View File

@ -114,7 +114,7 @@ export default class Greeting extends React.PureComponent {
this.getGreeting(0);
element.style.display = 'block';
element.style.fontSize = `${1.6 * Number(localStorage.getItem('zoomGreeting') / 100)}em`;
element.style.fontSize = `${1.6 * Number((localStorage.getItem('zoomGreeting') || 100) / 100)}em`;
}
});
@ -125,6 +125,10 @@ export default class Greeting extends React.PureComponent {
this.getGreeting(0);
}
componentWillUnmount() {
EventBus.remove('refresh');
}
render() {
return <h1 className='greeting'>
{this.state.greeting}

View File

@ -13,6 +13,10 @@ import Tooltip from '../../helpers/tooltip/Tooltip';
import './scss/index.scss';
export default function Navbar(props) {
if (localStorage.getItem('showWelcome') === 'true') {
return null;
}
const backgroundEnabled = (localStorage.getItem('background') === 'true');
return (

View File

@ -4,7 +4,7 @@ import TextareaAutosize from '@material-ui/core/TextareaAutosize';
import CopyIcon from '@material-ui/icons/FileCopyRounded';
import NotesIcon from '@material-ui/icons/AssignmentRounded';
import Pin from './Pin';
import Pin from '@material-ui/icons/PushPin';
import { toast } from 'react-toastify';
@ -37,7 +37,7 @@ export default class Notes extends React.PureComponent {
copy() {
window.stats.postEvent('feature', 'Notes copied');
// this.state.notes doesnt work for some reason
// this.state.notes doesn't work for some reason
navigator.clipboard.writeText(localStorage.getItem('notes'));
toast(window.language.toasts.notes);
}
@ -61,7 +61,7 @@ export default class Notes extends React.PureComponent {
<NotesIcon/>
<h3>{this.language.title}</h3>
</div>
<TextareaAutosize rowsMax={50} placeholder={this.language.placeholder} value={this.state.notes} onChange={this.setNotes}/>
<TextareaAutosize rowsmax={50} placeholder={this.language.placeholder} value={this.state.notes} onChange={this.setNotes}/>
<button onClick={this.pin} className='pinNote'><Pin/></button>
<button onClick={this.copy} className='copyNote'><CopyIcon/></button>
</span>

View File

@ -1,24 +0,0 @@
// License for original pin SVG below
/*
Copyright 2020 Google Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
export default function Pin() {
return (
<svg xmlns='http://www.w3.org/2000/svg' enableBackground='new 0 0 24 24' viewBox='0 0 24 24' fill='black' width='18px' height='18px'>
<g><rect fill='none' height='24' width='24'/></g>
<g><path d='M16,9V4l1,0c0.55,0,1-0.45,1-1v0c0-0.55-0.45-1-1-1H7C6.45,2,6,2.45,6,3v0 c0,0.55,0.45,1,1,1l1,0v5c0,1.66-1.34,3-3,3h0v2h5.97v7l1,1l1-1v-7H19v-2h0C17.34,12,16,10.66,16,9z' fillRule='evenodd'/></g>
</svg>
);
}

View File

@ -119,6 +119,10 @@ export default class QuickLinks extends React.PureComponent {
};
}
componentWillUnmount() {
EventBus.remove('refresh');
}
render() {
let target, rel = null;
if (localStorage.getItem('quicklinksnewtab') === 'true') {
@ -154,9 +158,9 @@ export default class QuickLinks extends React.PureComponent {
<span className='quicklinkscontainer' style={{ visibility: this.state.showAddLink }}>
<div className='topbarquicklinks'>
<h4>{this.language.new}</h4>
<TextareaAutosize rowsMax={1} placeholder={this.language.name} value={this.state.name} onChange={(e) => this.setState({ name: e.target.value })} />
<TextareaAutosize rowsmax={1} placeholder={this.language.name} value={this.state.name} onChange={(e) => this.setState({ name: e.target.value })} />
<p>{this.state.nameError}</p>
<TextareaAutosize rowsMax={10} placeholder={this.language.url} value={this.state.url} onChange={(e) => this.setState({ url: e.target.value })} />
<TextareaAutosize rowsmax={10} placeholder={this.language.url} value={this.state.url} onChange={(e) => this.setState({ url: e.target.value })} />
<p>{this.state.urlError}</p>
<button className='pinNote' onClick={this.addLink}>{this.language.add}</button>
</div>

View File

@ -223,6 +223,10 @@ export default class Quote extends React.PureComponent {
this.init();
}
componentWillUnmount() {
EventBus.remove('refresh');
}
render() {
return (
<div className='quotediv'>

View File

@ -111,6 +111,10 @@ export default class Clock extends React.PureComponent {
this.startTime(0);
}
componentWillUnmount() {
EventBus.remove('refresh');
}
render() {
let clockHTML = <h1 className='clock clock-container'>{this.state.time}<span className='ampm'>{this.state.ampm}</span></h1>;

View File

@ -118,6 +118,10 @@ export default class DateWidget extends React.PureComponent {
this.getDate();
}
componentWillUnmount() {
EventBus.remove('refresh');
}
render() {
return <span className='date'>{this.state.date} <br/> {this.state.weekNumber}</span>;
}

View File

@ -39,7 +39,8 @@ if (window.languagecode !== 'en_GB' || window.languagecode !== 'en_US') {
}
window.constants = Constants;
if (localStorage.getItem('stats') === 'true' && localStorage.getItem('offlineMode') !== 'true') {
// doesn't send to umami when offline mode is on
if (localStorage.getItem('stats') === 'true') {
window.stats = new Stats(window.constants.UMAMI_ID);
} else {
window.stats = {

View File

@ -6,7 +6,7 @@ export const MARKETPLACE_URL = 'https://marketplace.muetab.com';
export const WEATHER_URL = 'https://weather.muetab.com';
export const SPONSORS_URL = 'https://sponsors.muetab.com';
export const GITHUB_URL = 'https://api.github.com';
export const DDG_PROXY = 'https://external-content.duckduckgo.com/iu/?u=';
export const DDG_IMAGE_PROXY = 'https://external-content.duckduckgo.com/iu/?u=';
// Mue URLs
export const WEBSITE_URL = 'https://muetab.com';
@ -22,4 +22,4 @@ export const OFFLINE_IMAGES = 20;
// Version
export const BETA_VERSION = false;
export const VERSION = '5.1.0';
export const VERSION = '5.1.1';

View File

@ -1,52 +1,9 @@
import experimentalInit from './experimental';
import experimentalInit from '../experimental';
const defaultSettings = require('../default_settings.json');
const languages = require('../languages.json');
const saveFile = (data, filename = 'file') => {
if (typeof data === 'object') {
data = JSON.stringify(data, undefined, 4);
}
const blob = new Blob([data], { type: 'text/json' });
let e = document.createEvent('MouseEvents');
let a = document.createElement('a');
a.href = window.URL.createObjectURL(blob);
a.download = filename;
a.dataset.downloadurl = ['text/json', a.download, a.href].join(':');
e.initMouseEvent('click', true, false, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);
a.dispatchEvent(e);
};
const defaultSettings = require('../../default_settings.json');
const languages = require('../../languages.json');
export default class SettingsFunctions {
static exportSettings() {
let settings = {};
Object.keys(localStorage).forEach((key) => {
settings[key] = localStorage.getItem(key);
});
saveFile(settings, 'mue-settings.json');
window.stats.postEvent('tab', 'Settings exported');
}
static setItem(key, value) {
const old = localStorage.getItem(key);
let val = true;
if (old !== null && !value) {
if (old === 'true') {
val = false;
}
if (old === 'false') {
val = true;
}
}
localStorage.setItem(key, val);
}
static setDefaultSettings(reset) {
localStorage.clear();
defaultSettings.forEach((element) => localStorage.setItem(element.name, element.value));
@ -82,6 +39,8 @@ export default class SettingsFunctions {
case 'auto':
if (window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches) {
document.body.classList.add('dark');
} else {
document.body.classList.remove('dark');
}
break;
default:
@ -96,7 +55,9 @@ export default class SettingsFunctions {
custom.forEach((element) => {
try {
document.head.removeChild(document.getElementById(element));
} catch (e) {}
} catch (e) {
// Disregard exception
}
});
}
@ -107,38 +68,24 @@ export default class SettingsFunctions {
const font = localStorage.getItem('font');
if (font) {
const google = localStorage.getItem('fontGoogle');
let url = '';
let fontweight = '';
let fontstyle = '';
if (google === 'true') {
if (localStorage.getItem('fontGoogle') === 'true') {
url = `@import url('https://fonts.googleapis.com/css2?family=${font}&display=swap');`;
}
const fontWeight = localStorage.getItem('fontweight');
if (fontWeight) {
fontweight = `font-weight: ${fontWeight};`;
}
const fontStyle = localStorage.getItem('fontstyle');
if (fontStyle) {
fontstyle = `font-style: ${fontStyle};`;
}
document.head.insertAdjacentHTML('beforeend', `
<style id='customfont'>
${url}
* {
font-family: '${font}', 'Lexend Deca', 'Montserrat' !important;
${fontweight}
${fontstyle}
font-family: '${font}', 'Lexend Deca', 'Montserrat', sans-serif !important;
font-weight: ${localStorage.getItem('fontweight')};
font-style: ${localStorage.getItem('fontstyle')};
}
</style>
`);
}
// everything below this either doesn't support hot reload (custom js) or shouldn't run on a hot reload event
if (hotreload === true) {
return;
}
@ -164,7 +111,7 @@ export default class SettingsFunctions {
Copyright 2018-2021 The Mue Authors
Copyright 2018-${new Date().getFullYear()} The Mue Authors
GitHub: https://github.com/mue/mue ██
Thank you for using Mue!

View File

@ -0,0 +1,40 @@
import { toast } from 'react-toastify';
const saveFile = (data, filename = 'file') => {
if (typeof data === 'object') {
data = JSON.stringify(data, undefined, 4);
}
const blob = new Blob([data], { type: 'text/json' });
let e = document.createEvent('MouseEvents');
let a = document.createElement('a');
a.href = window.URL.createObjectURL(blob);
a.download = filename;
a.dataset.downloadurl = ['text/json', a.download, a.href].join(':');
e.initMouseEvent('click', true, false, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);
a.dispatchEvent(e);
};
export default class ModalSettingsFunctions {
static exportSettings() {
let settings = {};
Object.keys(localStorage).forEach((key) => {
settings[key] = localStorage.getItem(key);
});
saveFile(settings, 'mue-settings.json');
window.stats.postEvent('tab', 'Settings exported');
}
static importSettings(e) {
const content = JSON.parse(e.target.result);
Object.keys(content).forEach((key) => {
localStorage.setItem(key, content[key]);
});
toast(window.language.toasts.imported);
window.stats.postEvent('tab', 'Settings imported');
}
}

View File

@ -1,71 +1,73 @@
export default class Stats {
constructor(id) {
this.id = id;
this.domain = window.constants.UMAMI_DOMAIN;
constructor(id) {
this.id = id;
this.url = window.constants.UMAMI_DOMAIN + '/api/collect';
this.offline = (localStorage.getItem('offlineMode') !== 'true');
}
async postEvent(type, name) {
const value = name.toLowerCase().replaceAll(' ', '-');
if (!this.offline) {
// umami
await fetch(this.url, {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({
type: 'event',
payload: {
website: this.id,
url: '/',
event_type: type,
event_value: value
}
})
});
}
async postEvent(type, name) {
const value = name.toLowerCase().replaceAll(' ', '-');
// local
let data = JSON.parse(localStorage.getItem('statsData'));
// tl;dr this creates the objects if they don't exist
// this really needs a cleanup at some point
if (!data[type] || !data[type][value]) {
if (!data[type]) {
data[type] = {};
}
await fetch(this.domain + '/api/collect', {
method: 'POST',
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json'
},
body: JSON.stringify({
type: 'event',
payload: {
website: this.id,
url: '/',
event_type: type,
event_value: value,
hostname: 'localhost',
language: localStorage.getItem('language').replace('_', '-'),
screen: `${window.screen.width}x${window.screen.height}`
}
})
});
if (!data[type][value]) {
data[type][value] = 1;
}
} else {
data[type][value] = data[type][value] + 1;
}
localStorage.setItem('statsData', JSON.stringify(data));
}
let data = JSON.parse(localStorage.getItem('statsData'));
// tl;dr this creates the objects if they don't exist
// this really needs a cleanup at some point
if (!data[type] || !data[type][value]) {
if (!data[type]) {
data[type] = {};
}
if (!data[type][value]) {
data[type][value] = 1;
}
} else {
data[type][value] = data[type][value] + 1;
}
localStorage.setItem('statsData', JSON.stringify(data));
async tabLoad() {
if (!this.offline) {
// umami
await fetch(this.url, {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({
type: 'pageview',
payload: {
website: this.id,
url: '/',
language: localStorage.getItem('language').replace('_', '-'),
screen: `${window.screen.width}x${window.screen.height}`
}
})
});
}
async tabLoad() {
await fetch(this.domain + '/api/collect', {
method: 'POST',
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json'
},
body: JSON.stringify({
type: 'pageview',
payload: {
website: this.id,
url: '/',
referrer: '',
hostname: 'localhost',
language: localStorage.getItem('language').replace('_', '-'),
screen: `${window.screen.width}x${window.screen.height}`
}
})
});
let data = JSON.parse(localStorage.getItem('statsData'));
data['tabs-opened'] = data['tabs-opened'] + 1 || 1;
localStorage.setItem('statsData', JSON.stringify(data));
}
// local
let data = JSON.parse(localStorage.getItem('statsData'));
data['tabs-opened'] = data['tabs-opened'] + 1 || 1;
localStorage.setItem('statsData', JSON.stringify(data));
}
}

View File

@ -16,9 +16,9 @@ $modal: (
'tab-underline': rgba(204, 204, 204, 1),
'tab-underline-active': rgba(0, 0, 0, 1),
'border-radius': 12px,
'sidebar': #f0f0f0,
'sidebar': rgb(240, 240, 240),
'tab-active': rgba(219, 219, 219, 0.72),
'sidebar-dark': #353b48,
'sidebar-dark': rgb(53, 59, 72),
'tab-active-dark': rgba(65, 71, 84, 0.9),
'modal-link': #5352ed,
'modal-link-dark': #3498db

View File

@ -11,7 +11,7 @@ body {
}
* {
font-family: 'Lexend Deca', 'Montserrat' !important;
font-family: 'Lexend Deca', 'Montserrat', sans-serif !important;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
outline: none;

View File

@ -56,3 +56,27 @@
color: map-get($button-colours, 'other');
}
}
.upload {
width: 100%;
height: 100%;
border-radius: 20px;
border: none;
outline: none;
padding: 50px;
background: var(--sidebar);
color: var(--modal-text);
cursor: pointer;
&:hover {
background: var(--tab-active);
}
svg {
font-size: 4em;
}
span {
font-size: 2em;
}
}

View File

@ -130,7 +130,7 @@
},
"background": {
"title": "Hintergrund",
"ddg_proxy": "DuckDuckGo Bilder Proxy verwenden",
"ddg_image_proxy": "DuckDuckGo Bilder Proxy verwenden",
"transition": "Weicher übergang",
"photo_information": "Show photo information",
"category": "Kategorie",

View File

@ -130,7 +130,7 @@
},
"background": {
"title": "Background",
"ddg_proxy": "Use DuckDuckGo image proxy",
"ddg_image_proxy": "Use DuckDuckGo image proxy",
"transition": "Fade-in transition",
"photo_information": "Show photo information",
"category": "Category",

View File

@ -130,7 +130,7 @@
},
"background": {
"title": "Background",
"ddg_proxy": "Use DuckDuckGo image proxy",
"ddg_image_proxy": "Use DuckDuckGo image proxy",
"transition": "Fade-in transition",
"photo_information": "Show photo information",
"category": "Category",

View File

@ -130,7 +130,7 @@
},
"background": {
"title": "Fondo",
"ddg_proxy": "Utilizar el proxy de imágenes de DuckDuckGo",
"ddg_image_proxy": "Utilizar el proxy de imágenes de DuckDuckGo",
"transition": "Transición fade-in",
"photo_information": "Ver información de la foto",
"category": "Categoría",

View File

@ -130,7 +130,7 @@
},
"background": {
"title": "Fond",
"ddg_proxy": "Utiliser le proxy d'image DuckDuckGo",
"ddg_image_proxy": "Utiliser le proxy d'image DuckDuckGo",
"transition": "Transition en fondu",
"photo_information": "Show photo information",
"category": "Catégorie",

View File

@ -130,7 +130,7 @@
},
"background": {
"title": "Achtergrond",
"ddg_proxy": "Use DuckDuckGo image proxy",
"ddg_image_proxy": "Use DuckDuckGo image proxy",
"transition": "Fade-in transition",
"photo_information": "Show photo information",
"category": "Category",

View File

@ -130,7 +130,7 @@
},
"background": {
"title": "Bakgrunn",
"ddg_proxy": "Use DuckDuckGo image proxy",
"ddg_image_proxy": "Use DuckDuckGo image proxy",
"transition": "Fade-in transition",
"photo_information": "Show photo information",
"category": "Category",

View File

@ -130,7 +130,7 @@
},
"background": {
"title": "Фон",
"ddg_proxy": "Use DuckDuckGo image proxy",
"ddg_image_proxy": "Use DuckDuckGo image proxy",
"transition": "Fade-in transition",
"photo_information": "Show photo information",
"category": "Category",

View File

@ -130,7 +130,7 @@
},
"background": {
"title": "背景",
"ddg_proxy": "使用 DuckDuckGo 图像代理",
"ddg_image_proxy": "使用 DuckDuckGo 图像代理",
"transition": "渐变",
"photo_information": "Show photo information",
"category": "分类",

View File

@ -48,7 +48,7 @@ module.exports = {
clean: true
},
devServer: {
contentBase: path.resolve(__dirname, './build'),
static: path.resolve(__dirname, './build'),
open: true,
port: 3000
},