Initial commit

This commit is contained in:
Djuri Baars 2024-03-30 15:17:52 +01:00
commit e670b3f71f
36 changed files with 3243 additions and 0 deletions

13
.eslintignore Normal file
View file

@ -0,0 +1,13 @@
.DS_Store
node_modules
/build
/.svelte-kit
/package
.env
.env.*
!.env.example
# Ignore files for PNPM, NPM and YARN
pnpm-lock.yaml
package-lock.json
yarn.lock

31
.eslintrc.cjs Normal file
View file

@ -0,0 +1,31 @@
/** @type { import("eslint").Linter.Config } */
module.exports = {
root: true,
extends: [
'eslint:recommended',
'plugin:@typescript-eslint/recommended',
'plugin:svelte/recommended',
'prettier'
],
parser: '@typescript-eslint/parser',
plugins: ['@typescript-eslint'],
parserOptions: {
sourceType: 'module',
ecmaVersion: 2020,
extraFileExtensions: ['.svelte']
},
env: {
browser: true,
es2017: true,
node: true
},
overrides: [
{
files: ['*.svelte'],
parser: 'svelte-eslint-parser',
parserOptions: {
parser: '@typescript-eslint/parser'
}
}
]
};

78
.github/workflows/workflow.yml vendored Normal file
View file

@ -0,0 +1,78 @@
name: WebFlasher CI
on: [push]
jobs:
check-changes:
runs-on: ubuntu-latest
outputs:
all_changed_and_modified_files_count: ${{ steps.changed-files.outputs.all_changed_and_modified_files_count }}
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Get changed files count
id: changed-files
uses: tj-actions/changed-files@v40.1.1
with:
files_ignore: 'doc/**,README.md,Dockerfile,.*'
files_ignore_separator: ','
- name: Print changed files count
run: >
echo "Changed files count: ${{
steps.changed-files.outputs.all_changed_and_modified_files_count }}"
build:
needs: check-changes
runs-on: ubuntu-latest
if: ${{ needs.check-changes.outputs.all_changed_and_modified_files_count >= 1 }}
permissions:
contents: write
steps:
- uses: actions/checkout@v4
with:
submodules: recursive
- uses: actions/setup-node@v4
with:
node-version: lts/*
cache: yarn
cache-dependency-path: '**/yarn.lock'
- uses: actions/cache@v4
with:
path: |
~/node_modules
key: ${{ runner.os }}-webflasher
- name: Install yarn
run: yarn && yarn postinstall
- name: Run linter
run: yarn lint
# - name: Run vitest tests
# run: yarn vitest run
# - name: Install Playwright Browsers
# run: npx playwright install --with-deps
# - name: Run Playwright tests
# run: npx playwright test
- name: Build
run: yarn build
- name: Create tarball
run: tar czf webflasher.tgz --strip-components=1 dist
- name: Upload artifacts
uses: actions/upload-artifact@v4
with:
name: "github-pages"
path: |
webflasher.tgz
deploy:
# Add a dependency to the build job
needs: build
permissions:
pages: write # to deploy to Pages
id-token: write # to verify the deployment originates from an appropriate source
environment:
name: github-pages
url: ${{ steps.deployment.outputs.page_url }}
runs-on: ubuntu-latest
steps:
- name: Deploy to GitHub Pages
id: deployment
uses: actions/deploy-pages@v4

11
.gitignore vendored Normal file
View file

@ -0,0 +1,11 @@
.DS_Store
node_modules
/build
/.svelte-kit
/package
.env
.env.*
!.env.example
vite.config.js.timestamp-*
vite.config.ts.timestamp-*
dist/

1
.npmrc Normal file
View file

@ -0,0 +1 @@
engine-strict=true

4
.prettierignore Normal file
View file

@ -0,0 +1,4 @@
# Ignore files for PNPM, NPM and YARN
pnpm-lock.yaml
package-lock.json
yarn.lock

8
.prettierrc Normal file
View file

@ -0,0 +1,8 @@
{
"useTabs": true,
"singleQuote": true,
"trailingComma": "none",
"printWidth": 100,
"plugins": ["prettier-plugin-svelte"],
"overrides": [{ "files": "*.svelte", "options": { "parser": "svelte" } }]
}

5
.vscode/settings.json vendored Normal file
View file

@ -0,0 +1,5 @@
{
"i18n-ally.localesPaths": [
"src/lib/i18n"
]
}

38
README.md Normal file
View file

@ -0,0 +1,38 @@
# create-svelte
Everything you need to build a Svelte project, powered by [`create-svelte`](https://github.com/sveltejs/kit/tree/main/packages/create-svelte).
## Creating a project
If you're seeing this, you've probably already done this step. Congrats!
```bash
# create a new project in the current directory
npm create svelte@latest
# create a new project in my-app
npm create svelte@latest my-app
```
## Developing
Once you've created a project and installed dependencies with `npm install` (or `pnpm install` or `yarn`), start a development server:
```bash
npm run dev
# or start the server and open the app in a new browser tab
npm run dev -- --open
```
## Building
To create a production version of your app:
```bash
npm run build
```
You can preview the production build with `npm run preview`.
> To deploy your app, you may need to install an [adapter](https://kit.svelte.dev/docs/adapters) for your target environment.

46
package.json Normal file
View file

@ -0,0 +1,46 @@
{
"name": "oc-flasher",
"version": "0.0.1",
"private": true,
"scripts": {
"dev": "vite dev",
"build": "vite build",
"preview": "vite preview",
"test": "npm run test:integration && npm run test:unit",
"check": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json",
"check:watch": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --watch",
"lint": "prettier --check . && eslint .",
"format": "prettier --write .",
"test:integration": "playwright test",
"test:unit": "vitest"
},
"devDependencies": {
"@playwright/test": "^1.28.1",
"@sveltejs/adapter-auto": "^3.0.0",
"@sveltejs/adapter-static": "^3.0.1",
"@sveltejs/kit": "^2.0.0",
"@sveltejs/vite-plugin-svelte": "^3.0.0",
"@types/eslint": "^8.56.0",
"@typescript-eslint/eslint-plugin": "^7.0.0",
"@typescript-eslint/parser": "^7.0.0",
"eslint": "^8.56.0",
"eslint-config-prettier": "^9.1.0",
"eslint-plugin-svelte": "^2.35.1",
"prettier": "^3.1.1",
"prettier-plugin-svelte": "^3.1.2",
"sass": "^1.72.0",
"svelte": "^4.2.7",
"svelte-check": "^3.6.0",
"tslib": "^2.4.1",
"typescript": "^5.0.0",
"vite": "^5.0.3",
"vitest": "^1.2.0"
},
"type": "module",
"dependencies": {
"@fontsource/libre-franklin": "^5.0.17",
"@sveltestrap/sveltestrap": "^6.2.7",
"bootstrap": "^5.3.3",
"svelte-i18n": "^4.0.0"
}
}

12
playwright.config.ts Normal file
View file

@ -0,0 +1,12 @@
import type { PlaywrightTestConfig } from '@playwright/test';
const config: PlaywrightTestConfig = {
webServer: {
command: 'npm run build && npm run preview',
port: 4173
},
testDir: 'tests',
testMatch: /(.+\.)?(test|spec)\.[jt]s/
};
export default config;

13
src/app.d.ts vendored Normal file
View file

@ -0,0 +1,13 @@
// See https://kit.svelte.dev/docs/types#app
// for information about these interfaces
declare global {
namespace App {
// interface Error {}
// interface Locals {}
// interface PageData {}
// interface PageState {}
// interface Platform {}
}
}
export {};

47
src/app.html Normal file
View file

@ -0,0 +1,47 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<link
href="/assets/favicon/favicon.ico"
type="image/x-icon"
rel="icon"
media="(prefers-color-scheme: light)"
/>
<link
href="/assets/favicon-dark/favicon.ico"
type="image/x-icon"
rel="icon"
media="(prefers-color-scheme: dark)"
/>
<link
href="/assets/favicon/favicon.png"
type="image/png"
rel="icon"
media="(prefers-color-scheme: light)"
/>
<link
href="/assets/favicon-dark/favicon.png"
type="image/png"
rel="icon"
media="(prefers-color-scheme: dark)"
/>
<link
href="/assets/favicon/favicon.svg"
type="image/svg+xml"
rel="icon"
media="(prefers-color-scheme: light)"
/>
<link
href="/assets/favicon-dark/favicon.svg"
type="image/svg+xml"
rel="icon"
media="(prefers-color-scheme: dark)"
/>
%sveltekit.head%
</head>
<body data-sveltekit-preload-data="hover">
<div style="display: contents">%sveltekit.body%</div>
</body>
</html>

7
src/index.test.ts Normal file
View file

@ -0,0 +1,7 @@
import { describe, it, expect } from 'vitest';
describe('sum test', () => {
it('adds 1 + 2 to equal 3', () => {
expect(1 + 2).toBe(3);
});
});

17
src/lib/i18n/index.ts Normal file
View file

@ -0,0 +1,17 @@
import { browser } from '$app/environment';
import { init, register } from 'svelte-i18n';
const defaultLocale = 'en';
// register('en', () => import('../locales/en.json'));
// register('nl', () => import('../locales/nl.json'));
// register('es', () => import('../locales/es.json'));
init({
fallbackLocale: defaultLocale,
initialLocale: browser
? browser && localStorage.getItem('locale')
? localStorage.getItem('locale')
: window.navigator.language.slice(0, 2)
: defaultLocale
});

1
src/lib/index.ts Normal file
View file

@ -0,0 +1 @@
// place files you want to import through the `$lib` alias in this folder.

66
src/lib/style/app.scss Normal file
View file

@ -0,0 +1,66 @@
@import '../node_modules/bootstrap/scss/functions';
@import '../node_modules/bootstrap/scss/variables';
@import '../node_modules/bootstrap/scss/variables-dark';
@import '@fontsource/libre-franklin';
@import '../node_modules/bootstrap/scss/mixins';
@import '../node_modules/bootstrap/scss/maps';
@import '../node_modules/bootstrap/scss/utilities';
@import '../node_modules/bootstrap/scss/root';
@import '../node_modules/bootstrap/scss/reboot';
@import '../node_modules/bootstrap/scss/type';
@import '../node_modules/bootstrap/scss/containers';
@import '../node_modules/bootstrap/scss/grid';
@import '../node_modules/bootstrap/scss/forms';
@import '../node_modules/bootstrap/scss/buttons';
@import '../node_modules/bootstrap/scss/button-group';
@import '../node_modules/bootstrap/scss/pagination';
@import '../node_modules/bootstrap/scss/dropdown';
@import '../node_modules/bootstrap/scss/navbar';
@import '../node_modules/bootstrap/scss/nav';
@import '../node_modules/bootstrap/scss/card';
@import '../node_modules/bootstrap/scss/progress';
@import '../node_modules/bootstrap/scss/tooltip';
@import '../node_modules/bootstrap/scss/toasts';
@import '../node_modules/bootstrap/scss/helpers';
@import '../node_modules/bootstrap/scss/utilities/api';
@include color-mode(light) {
.darkModeLogo {
display: none;
}
}
@include color-mode(dark) {
.lightModeLogo {
display: none;
}
}
.navbar-brand {
font-style: italic;
font-weight: 600;
img {
max-height: $navbar-brand-height;
// position: absolute;
// top: 50%;
// transform: translateY(-50%);
// max-height: calc(100% - 1rem); /* Adjust the padding as per your navbar */
// max-width: calc(100% - 3rem); /* Adjust the padding as per your navbar */
// max-height: 100%;
// max-width: 100%;
// height: auto;
// width: auto;
}
.navbar-nav {
margin-left: auto;
/* Push the navbar items to the right */
}
}

68
src/routes/+layout.svelte Normal file
View file

@ -0,0 +1,68 @@
<script lang="ts">
import {
Collapse,
Dropdown,
DropdownItem,
DropdownMenu,
DropdownToggle,
Nav,
NavItem,
NavLink,
Navbar,
NavbarBrand
} from '@sveltestrap/sveltestrap';
import { page } from '$app/stores';
import { locale, locales, isLoading } from 'svelte-i18n';
export const setLocale = (lang: string) => () => {
locale.set(lang);
localStorage.setItem('locale', lang);
};
export const getFlagEmoji = (languageCode: string): string | null => {
const flagMap: { [key: string]: string } = {
en: '🇬🇧', // English flag emoji
nl: '🇳🇱', // Dutch flag emoji
es: '🇪🇸' // Spanish flag emoji
};
// Convert the language code to lowercase for case-insensitive matching
const lowercaseCode = languageCode.toLowerCase();
// Check if the language code is in the flagMap
if (Object.prototype.hasOwnProperty.call(flagMap, lowercaseCode)) {
return flagMap[lowercaseCode];
} else {
// Return null for unsupported language codes
return null;
}
};
let languageNames = {};
locale.subscribe(() => {
let newLanguageNames = new Intl.DisplayNames([$locale], { type: 'language' });
for (let l: string of $locales) {
languageNames[l] = newLanguageNames.of(l);
}
});
</script>
<Navbar expand="md">
<NavbarBrand>
<img src="/assets/logo-dark.svg" alt="OrangeClock" class="darkModeLogo" />
<img src="/assets/logo.svg" alt="OrangeClock" class="lightModeLogo" />
</NavbarBrand>
<Collapse navbar expand="md">
<Nav class="me-auto" navbar>
<NavItem>
WebFlasher
</NavItem>
</Nav>
</Collapse>
</Navbar>
<!-- +layout.svelte -->
<slot />

19
src/routes/+layout.ts Normal file
View file

@ -0,0 +1,19 @@
import '$lib/style/app.scss';
import { browser } from '$app/environment';
import '$lib/i18n'; // Import to initialize. Important :)
import { locale, waitLocale } from 'svelte-i18n';
import type { LayoutLoad } from './$types';
export const load: LayoutLoad = async () => {
if (browser && localStorage.getItem('locale')) {
locale.set(localStorage.getItem('locale'));
} else if (browser) {
locale.set(window.navigator.language);
}
await waitLocale();
};
export const prerender = true;
export const ssr = false;
export const csr = true;

69
src/routes/+page.svelte Normal file
View file

@ -0,0 +1,69 @@
<script lang="ts">
// import { PUBLIC_BASE_URL } from '$lib/config';
import {
Container,
Col,
Card,
CardHeader,
CardTitle,
CardSubtitle,
CardFooter,
CardBody,
Button,
CardText,
Row
} from '@sveltestrap/sveltestrap';
// import Settings from './Settings.svelte';
// import Status from './Status.svelte';
// import Control from './Control.svelte';
import { onDestroy, onMount } from 'svelte';
import { writable } from 'svelte/store';
</script>
<svelte:head>
<title>OrangeBTClock</title>
<script
type="module"
src="https://unpkg.com/esp-web-tools@10/dist/web/install-button.js?module"
></script>
</svelte:head>
<Container>
<Row>
<Col>
<Card>
<CardHeader>
<CardTitle>Wemos S2/S3 mini</CardTitle>
</CardHeader>
<CardBody>
<esp-web-install-button manifest="/manifests/epd2_13.json">
<span slot="activate"><Button color="primary">2.13 inch</Button></span>
</esp-web-install-button>
<esp-web-install-button manifest="/manifests/epd2_9.json">
<span slot="activate"><Button color="secondary">2.9 inch</Button></span>
</esp-web-install-button>
</CardBody>
</Card>
</Col>
<Col>
<Card>
<CardHeader>
<CardTitle>OrangeClock PCB</CardTitle>
</CardHeader>
<CardBody>
<esp-web-install-button manifest="/manifests/oc_pcb.json">
<span slot="activate"><Button color="secondary">2.9 inch</Button></span>
</esp-web-install-button>
</CardBody>
</Card>
</Col>
</Row>
<Row>
<Col>
<h1>How it works</h1>
<p>ESP Web Tools works by using Web Serial and a manifest which describes the firmware. ESP Web Tools detects the chipset of the connected ESP device and automatically selects the right firmware variant from the manifest.</p>
<p>Web Serial is available in Google Chrome and Microsoft Edge browsers. Android support should be possible but has not been implemented yet.</p>
</Col>
</Row>
</Container>

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1 KiB

View file

@ -0,0 +1,16 @@
<svg width="880" height="880" viewBox="0 0 880 880" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_1155_1603)">
<path fill-rule="evenodd" clip-rule="evenodd" d="M440 880C683.005 880 880 683.005 880 440C880 196.995 683.005 0 440 0C196.995 0 0 196.995 0 440C0 683.005 196.995 880 440 880ZM440 800C638.823 800 800 638.823 800 440C800 241.177 638.823 80 440 80C241.177 80 80 241.177 80 440C80 638.823 241.177 800 440 800Z" fill="white"/>
<path d="M384.654 124.773C379.12 135.649 376 147.96 376 161V341.57L246.453 212.787C238.19 204.573 238.639 191.014 247.953 184.016C287.432 154.35 333.997 133.605 384.654 124.773Z" fill="#F7931A"/>
<path d="M460.346 559.913L588.106 687.673C596.687 696.254 606.732 702.478 617.438 706.345C577.7 732.871 531.691 750.741 482.107 757.258C470.676 758.761 460.912 749.589 460.878 738.06L460.346 559.913Z" fill="#F7931A"/>
<path d="M420.878 738.173C420.912 749.703 411.201 758.933 399.76 757.498C342.678 750.336 290.273 728.139 246.635 694.996C237.423 687.999 236.969 674.558 245.124 666.354L386.098 524.535C398.66 511.899 420.229 520.758 420.282 538.576L420.878 738.173Z" fill="#F7931A"/>
<path d="M187.957 637.192C195.05 646.245 208.401 646.559 216.509 638.402L359.655 494.398C372.217 481.762 363.23 460.246 345.412 460.299L141.947 460.901C130.417 460.935 121.245 470.7 122.748 482.132C130.379 540.155 153.555 593.282 187.957 637.192Z" fill="#F7931A"/>
<path d="M122.503 399.785C121.069 411.225 130.298 420.935 141.828 420.901L350.018 420.285C367.836 420.232 376.695 398.663 364.059 386.101L217.396 240.303C209.297 232.252 196.062 232.571 188.974 241.524C153.633 286.161 129.944 340.447 122.503 399.785Z" fill="#F7931A"/>
<path d="M456 120C433.909 120 416 137.909 416 160V440C416 451.457 419.912 462.91 428.102 471.101L616.39 659.389C632.011 675.01 657.338 675.01 672.959 659.389C688.58 643.768 688.58 618.441 672.959 602.82L496 425.861V160C496 137.909 478.091 120 456 120Z" fill="white"/>
</g>
<defs>
<clipPath id="clip0_1155_1603">
<rect width="880" height="880" fill="white"/>
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 996 B

View file

@ -0,0 +1,16 @@
<svg width="880" height="880" viewBox="0 0 880 880" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_1155_1587)">
<path fill-rule="evenodd" clip-rule="evenodd" d="M440 880C683.005 880 880 683.005 880 440C880 196.995 683.005 0 440 0C196.995 0 0 196.995 0 440C0 683.005 196.995 880 440 880ZM440 800C638.823 800 800 638.823 800 440C800 241.177 638.823 80 440 80C241.177 80 80 241.177 80 440C80 638.823 241.177 800 440 800Z" fill="black"/>
<path d="M384.654 124.773C379.12 135.649 376 147.96 376 161V341.57L246.453 212.787C238.19 204.573 238.639 191.014 247.953 184.016C287.432 154.35 333.997 133.605 384.654 124.773Z" fill="#F7931A"/>
<path d="M460.346 559.913L588.106 687.673C596.687 696.254 606.732 702.478 617.438 706.345C577.7 732.871 531.691 750.741 482.107 757.258C470.676 758.761 460.912 749.589 460.878 738.06L460.346 559.913Z" fill="#F7931A"/>
<path d="M420.878 738.173C420.912 749.703 411.201 758.933 399.76 757.498C342.678 750.336 290.273 728.139 246.635 694.996C237.423 687.999 236.969 674.558 245.124 666.354L386.098 524.535C398.66 511.899 420.229 520.758 420.282 538.576L420.878 738.173Z" fill="#F7931A"/>
<path d="M187.957 637.192C195.05 646.245 208.401 646.559 216.509 638.402L359.655 494.398C372.217 481.762 363.23 460.246 345.412 460.299L141.947 460.901C130.417 460.935 121.245 470.7 122.748 482.132C130.379 540.155 153.555 593.282 187.957 637.192Z" fill="#F7931A"/>
<path d="M122.503 399.785C121.069 411.225 130.298 420.935 141.828 420.901L350.018 420.285C367.836 420.232 376.695 398.663 364.059 386.101L217.396 240.303C209.297 232.252 196.062 232.571 188.974 241.524C153.633 286.161 129.944 340.447 122.503 399.785Z" fill="#F7931A"/>
<path d="M456 120C433.909 120 416 137.909 416 160V440C416 451.457 419.912 462.91 428.102 471.101L616.39 659.389C632.011 675.01 657.338 675.01 672.959 659.389C688.58 643.768 688.58 618.441 672.959 602.82L496 425.861V160C496 137.909 478.091 120 456 120Z" fill="black"/>
</g>
<defs>
<clipPath id="clip0_1155_1587">
<rect width="880" height="880" fill="white"/>
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 2 KiB

View file

@ -0,0 +1,27 @@
<svg width="5878" height="880" viewBox="0 0 5878 880" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_1155_1600)">
<path d="M5548.98 621.002L5552.48 462.102L5707.18 311.602H5864.68L5693.18 488.702L5625.28 543.302L5548.98 621.002ZM5438.38 691.002V171.602H5571.38V691.002H5438.38ZM5716.98 691.002L5600.78 545.402L5683.38 443.202L5877.98 691.002H5716.98Z" fill="white"/>
<path d="M5211.87 697.302C5169.87 697.302 5132.31 688.902 5099.17 672.102C5066.51 655.302 5040.84 632.202 5022.17 602.802C5003.51 572.935 4994.17 538.868 4994.17 500.602C4994.17 462.335 5003.51 428.502 5022.17 399.102C5040.84 369.702 5066.51 346.835 5099.17 330.502C5132.31 313.702 5169.87 305.302 5211.87 305.302C5254.81 305.302 5291.91 314.402 5323.17 332.602C5354.44 350.802 5376.61 376.468 5389.67 409.602L5286.77 462.102C5277.91 444.368 5266.94 431.535 5253.87 423.602C5240.81 415.202 5226.57 411.002 5211.17 411.002C5195.77 411.002 5181.77 414.502 5169.17 421.502C5156.57 428.502 5146.54 438.768 5139.07 452.302C5132.07 465.368 5128.57 481.468 5128.57 500.602C5128.57 520.202 5132.07 536.768 5139.07 550.302C5146.54 563.835 5156.57 574.102 5169.17 581.102C5181.77 588.102 5195.77 591.602 5211.17 591.602C5226.57 591.602 5240.81 587.635 5253.87 579.702C5266.94 571.302 5277.91 558.235 5286.77 540.502L5389.67 593.002C5376.61 626.135 5354.44 651.802 5323.17 670.002C5291.91 688.202 5254.81 697.302 5211.87 697.302Z" fill="white"/>
<path d="M4742.16 697.302C4700.63 697.302 4663.76 688.902 4631.56 672.102C4599.36 655.302 4573.93 632.202 4555.26 602.802C4537.06 572.935 4527.96 538.868 4527.96 500.602C4527.96 462.335 4537.06 428.502 4555.26 399.102C4573.93 369.702 4599.36 346.835 4631.56 330.502C4663.76 313.702 4700.63 305.302 4742.16 305.302C4783.7 305.302 4820.56 313.702 4852.76 330.502C4885.43 346.835 4910.86 369.702 4929.06 399.102C4947.26 428.502 4956.36 462.335 4956.36 500.602C4956.36 538.868 4947.26 572.935 4929.06 602.802C4910.86 632.202 4885.43 655.302 4852.76 672.102C4820.56 688.902 4783.7 697.302 4742.16 697.302ZM4742.16 591.602C4757.56 591.602 4771.1 588.102 4782.76 581.102C4794.9 574.102 4804.46 563.835 4811.46 550.302C4818.46 536.302 4821.96 519.735 4821.96 500.602C4821.96 481.468 4818.46 465.368 4811.46 452.302C4804.46 438.768 4794.9 428.502 4782.76 421.502C4771.1 414.502 4757.56 411.002 4742.16 411.002C4727.23 411.002 4713.7 414.502 4701.56 421.502C4689.9 428.502 4680.33 438.768 4672.86 452.302C4665.86 465.368 4662.36 481.468 4662.36 500.602C4662.36 519.735 4665.86 536.302 4672.86 550.302C4680.33 563.835 4689.9 574.102 4701.56 581.102C4713.7 588.102 4727.23 591.602 4742.16 591.602Z" fill="white"/>
<path d="M4332.33 691.002V171.602H4465.33V691.002H4332.33Z" fill="white"/>
<path d="M4066.13 700.802C4027.4 700.802 3991.47 694.735 3958.33 682.602C3925.67 670.002 3897.2 652.268 3872.93 629.402C3849.13 606.535 3830.47 579.702 3816.93 548.902C3803.4 517.635 3796.63 483.335 3796.63 446.002C3796.63 408.668 3803.4 374.602 3816.93 343.802C3830.47 312.535 3849.13 285.468 3872.93 262.602C3897.2 239.735 3925.67 222.235 3958.33 210.102C3991.47 197.502 4027.4 191.202 4066.13 191.202C4111.4 191.202 4151.77 199.135 4187.23 215.002C4223.17 230.868 4253.03 253.735 4276.83 283.602L4188.63 363.402C4172.77 344.735 4155.27 330.502 4136.13 320.702C4117.47 310.902 4096.47 306.002 4073.13 306.002C4053.07 306.002 4034.63 309.268 4017.83 315.802C4001.03 322.335 3986.57 331.902 3974.43 344.502C3962.77 356.635 3953.43 371.335 3946.43 388.602C3939.9 405.868 3936.63 425.002 3936.63 446.002C3936.63 467.002 3939.9 486.135 3946.43 503.402C3953.43 520.668 3962.77 535.602 3974.43 548.202C3986.57 560.335 4001.03 569.668 4017.83 576.202C4034.63 582.735 4053.07 586.002 4073.13 586.002C4096.47 586.002 4117.47 581.102 4136.13 571.302C4155.27 561.502 4172.77 547.268 4188.63 528.602L4276.83 608.402C4253.03 637.802 4223.17 660.668 4187.23 677.002C4151.77 692.868 4111.4 700.802 4066.13 700.802Z" fill="white"/>
<path d="M3565.21 697.302C3520.41 697.302 3481.21 688.902 3447.61 672.102C3414.48 654.835 3388.58 631.502 3369.91 602.102C3351.71 572.235 3342.61 538.402 3342.61 500.602C3342.61 462.802 3351.48 429.202 3369.21 399.802C3387.41 369.935 3412.38 346.835 3444.11 330.502C3475.84 313.702 3511.54 305.302 3551.21 305.302C3588.54 305.302 3622.61 313.002 3653.41 328.402C3684.21 343.335 3708.71 365.502 3726.91 394.902C3745.11 424.302 3754.21 460.002 3754.21 502.002C3754.21 506.668 3753.98 512.035 3753.51 518.102C3753.04 524.168 3752.58 529.768 3752.11 534.902H3451.81V464.902H3681.41L3631.01 484.502C3631.48 467.235 3628.21 452.302 3621.21 439.702C3614.68 427.102 3605.34 417.302 3593.21 410.302C3581.54 403.302 3567.78 399.802 3551.91 399.802C3536.04 399.802 3522.04 403.302 3509.91 410.302C3498.24 417.302 3489.14 427.335 3482.61 440.402C3476.08 453.002 3472.81 467.935 3472.81 485.202V505.502C3472.81 524.168 3476.54 540.268 3484.01 553.802C3491.94 567.335 3503.14 577.835 3517.61 585.302C3532.08 592.302 3549.34 595.802 3569.41 595.802C3588.08 595.802 3603.94 593.235 3617.01 588.102C3630.54 582.502 3643.84 574.102 3656.91 562.902L3726.91 635.702C3708.71 655.768 3686.31 671.168 3659.71 681.902C3633.11 692.168 3601.61 697.302 3565.21 697.302Z" fill="white"/>
<path d="M3058.36 833.102C3021.96 833.102 2987.19 828.902 2954.06 820.502C2921.39 812.102 2893.39 799.735 2870.06 783.402L2918.36 690.302C2934.22 702.902 2953.82 712.702 2977.16 719.702C3000.96 727.168 3024.06 730.902 3046.46 730.902C3082.39 730.902 3108.29 722.968 3124.16 707.102C3140.02 691.702 3147.96 669.068 3147.96 639.202V594.402L3154.96 488.002L3154.26 380.902V311.602H3280.96V621.702C3280.96 693.568 3261.59 746.768 3222.86 781.302C3184.12 815.835 3129.29 833.102 3058.36 833.102ZM3035.26 671.402C3001.66 671.402 2970.62 663.935 2942.16 649.002C2914.16 633.602 2891.52 612.368 2874.26 585.302C2857.46 557.768 2849.06 525.335 2849.06 488.002C2849.06 450.668 2857.46 418.468 2874.26 391.402C2891.52 363.868 2914.16 342.635 2942.16 327.702C2970.62 312.768 3001.66 305.302 3035.26 305.302C3067.46 305.302 3094.99 311.835 3117.86 324.902C3140.72 337.502 3157.99 357.335 3169.66 384.402C3181.79 411.468 3187.86 446.002 3187.86 488.002C3187.86 530.002 3181.79 564.535 3169.66 591.602C3157.99 618.668 3140.72 638.735 3117.86 651.802C3094.99 664.868 3067.46 671.402 3035.26 671.402ZM3066.76 565.702C3082.62 565.702 3096.62 562.435 3108.76 555.902C3121.36 549.368 3131.16 540.268 3138.16 528.602C3145.62 516.935 3149.36 503.402 3149.36 488.002C3149.36 472.602 3145.62 459.068 3138.16 447.402C3131.16 435.735 3121.36 426.868 3108.76 420.802C3096.62 414.268 3082.62 411.002 3066.76 411.002C3050.89 411.002 3036.66 414.268 3024.06 420.802C3011.46 426.868 3001.42 435.735 2993.96 447.402C2986.96 459.068 2983.46 472.602 2983.46 488.002C2983.46 503.402 2986.96 516.935 2993.96 528.602C3001.42 540.268 3011.46 549.368 3024.06 555.902C3036.66 562.435 3050.89 565.702 3066.76 565.702Z" fill="white"/>
<path d="M2627.77 305.302C2657.17 305.302 2683.77 311.368 2707.57 323.502C2731.37 335.168 2750.04 353.368 2763.57 378.102C2777.57 402.835 2784.57 434.802 2784.57 474.002V691.002H2651.57V495.702C2651.57 468.635 2645.97 449.035 2634.77 436.902C2624.04 424.302 2608.87 418.002 2589.27 418.002C2575.27 418.002 2562.44 421.268 2550.77 427.802C2539.1 433.868 2530 443.435 2523.47 456.502C2516.94 469.568 2513.67 486.602 2513.67 507.602V691.002H2380.67V311.602H2507.37V419.402L2482.87 387.902C2497.34 360.368 2517.17 339.835 2542.37 326.302C2567.57 312.302 2596.04 305.302 2627.77 305.302Z" fill="white"/>
<path d="M2172.82 691.002V620.302L2163.72 602.802V472.602C2163.72 451.602 2157.18 435.502 2144.12 424.302C2131.52 412.635 2111.22 406.802 2083.22 406.802C2065.02 406.802 2046.58 409.835 2027.92 415.902C2009.25 421.502 1993.38 429.435 1980.32 439.702L1935.52 349.402C1956.98 335.402 1982.65 324.668 2012.52 317.202C2042.85 309.268 2072.95 305.302 2102.82 305.302C2164.42 305.302 2212.02 319.535 2245.62 348.002C2279.68 376.002 2296.72 420.102 2296.72 480.302V691.002H2172.82ZM2060.82 697.302C2030.48 697.302 2004.82 692.168 1983.82 681.902C1962.82 671.635 1946.72 657.635 1935.52 639.902C1924.78 622.168 1919.42 602.335 1919.42 580.402C1919.42 557.068 1925.25 537.002 1936.92 520.202C1949.05 502.935 1967.48 489.868 1992.22 481.002C2016.95 471.668 2048.92 467.002 2088.12 467.002H2177.72V536.302H2106.32C2084.85 536.302 2069.68 539.802 2060.82 546.802C2052.42 553.802 2048.22 563.135 2048.22 574.802C2048.22 586.468 2052.65 595.802 2061.52 602.802C2070.38 609.802 2082.52 613.302 2097.92 613.302C2112.38 613.302 2125.45 609.802 2137.12 602.802C2149.25 595.335 2158.12 584.135 2163.72 569.202L2181.92 618.202C2174.92 644.335 2161.15 664.168 2140.62 677.702C2120.55 690.768 2093.95 697.302 2060.82 697.302Z" fill="white"/>
<path d="M1654.69 691.002V311.602H1781.39V422.202L1762.49 390.702C1773.69 362.235 1791.89 341.002 1817.09 327.002C1842.29 312.535 1872.86 305.302 1908.79 305.302V425.002C1902.73 424.068 1897.36 423.602 1892.69 423.602C1888.49 423.135 1883.83 422.902 1878.69 422.902C1851.63 422.902 1829.69 430.368 1812.89 445.302C1796.09 459.768 1787.69 483.568 1787.69 516.702V691.002H1654.69Z" fill="white"/>
<path d="M1316.1 700.802C1276.9 700.802 1240.73 694.502 1207.6 681.902C1174.47 669.302 1145.53 651.568 1120.8 628.702C1096.53 605.368 1077.63 578.302 1064.1 547.502C1050.57 516.702 1043.8 482.868 1043.8 446.002C1043.8 409.135 1050.57 375.302 1064.1 344.502C1077.63 313.702 1096.53 286.868 1120.8 264.002C1145.53 240.668 1174.47 222.702 1207.6 210.102C1240.73 197.502 1276.9 191.202 1316.1 191.202C1355.77 191.202 1391.93 197.502 1424.6 210.102C1457.73 222.702 1486.43 240.668 1510.7 264.002C1534.97 286.868 1553.87 313.702 1567.4 344.502C1581.4 375.302 1588.4 409.135 1588.4 446.002C1588.4 482.868 1581.4 516.935 1567.4 548.202C1553.87 579.002 1534.97 605.835 1510.7 628.702C1486.43 651.568 1457.73 669.302 1424.6 681.902C1391.93 694.502 1355.77 700.802 1316.1 700.802ZM1316.1 586.002C1334.77 586.002 1352.03 582.735 1367.9 576.202C1384.23 569.668 1398.23 560.335 1409.9 548.202C1422.03 535.602 1431.37 520.668 1437.9 503.402C1444.9 486.135 1448.4 467.002 1448.4 446.002C1448.4 424.535 1444.9 405.402 1437.9 388.602C1431.37 371.335 1422.03 356.635 1409.9 344.502C1398.23 331.902 1384.23 322.335 1367.9 315.802C1352.03 309.268 1334.77 306.002 1316.1 306.002C1297.43 306.002 1279.93 309.268 1263.6 315.802C1247.73 322.335 1233.73 331.902 1221.6 344.502C1209.93 356.635 1200.6 371.335 1193.6 388.602C1187.07 405.402 1183.8 424.535 1183.8 446.002C1183.8 467.002 1187.07 486.135 1193.6 503.402C1200.6 520.668 1209.93 535.602 1221.6 548.202C1233.73 560.335 1247.73 569.668 1263.6 576.202C1279.93 582.735 1297.43 586.002 1316.1 586.002Z" fill="white"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M440 880C683.005 880 880 683.005 880 440C880 196.995 683.005 0 440 0C196.995 0 0 196.995 0 440C0 683.005 196.995 880 440 880ZM440 800C638.823 800 800 638.823 800 440C800 241.177 638.823 80 440 80C241.177 80 80 241.177 80 440C80 638.823 241.177 800 440 800Z" fill="white"/>
<path d="M384.654 124.773C379.12 135.649 376 147.96 376 161V341.57L246.453 212.787C238.19 204.573 238.639 191.014 247.953 184.016C287.432 154.35 333.997 133.605 384.654 124.773Z" fill="#F7931A"/>
<path d="M460.346 559.913L588.106 687.673C596.687 696.254 606.732 702.478 617.438 706.345C577.7 732.871 531.691 750.741 482.107 757.258C470.676 758.761 460.912 749.589 460.878 738.06L460.346 559.913Z" fill="#F7931A"/>
<path d="M420.878 738.173C420.912 749.703 411.201 758.933 399.76 757.498C342.678 750.336 290.273 728.139 246.635 694.996C237.423 687.999 236.969 674.558 245.124 666.354L386.098 524.535C398.66 511.899 420.229 520.758 420.282 538.576L420.878 738.173Z" fill="#F7931A"/>
<path d="M187.957 637.192C195.05 646.245 208.401 646.559 216.509 638.402L359.655 494.398C372.217 481.762 363.23 460.246 345.412 460.299L141.947 460.901C130.417 460.935 121.245 470.7 122.748 482.132C130.379 540.155 153.555 593.282 187.957 637.192Z" fill="#F7931A"/>
<path d="M122.503 399.785C121.069 411.225 130.298 420.935 141.828 420.901L350.018 420.285C367.836 420.232 376.695 398.663 364.059 386.101L217.396 240.303C209.297 232.252 196.062 232.571 188.974 241.524C153.633 286.161 129.944 340.447 122.503 399.785Z" fill="#F7931A"/>
<path d="M456 120C433.909 120 416 137.909 416 160V440C416 451.457 419.912 462.91 428.102 471.101L616.39 659.389C632.011 675.01 657.338 675.01 672.959 659.389C688.58 643.768 688.58 618.441 672.959 602.82L496 425.861V160C496 137.909 478.091 120 456 120Z" fill="white"/>
</g>
<defs>
<clipPath id="clip0_1155_1600">
<rect width="5878" height="880" fill="white"/>
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 12 KiB

27
static/assets/logo.svg Normal file
View file

@ -0,0 +1,27 @@
<svg width="5878" height="880" viewBox="0 0 5878 880" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_1155_1589)">
<path d="M5548.98 621.002L5552.48 462.102L5707.18 311.602H5864.68L5693.18 488.702L5625.28 543.302L5548.98 621.002ZM5438.38 691.002V171.602H5571.38V691.002H5438.38ZM5716.98 691.002L5600.78 545.402L5683.38 443.202L5877.98 691.002H5716.98Z" fill="black"/>
<path d="M5211.87 697.302C5169.87 697.302 5132.31 688.902 5099.17 672.102C5066.51 655.302 5040.84 632.202 5022.17 602.802C5003.51 572.935 4994.17 538.868 4994.17 500.602C4994.17 462.335 5003.51 428.502 5022.17 399.102C5040.84 369.702 5066.51 346.835 5099.17 330.502C5132.31 313.702 5169.87 305.302 5211.87 305.302C5254.81 305.302 5291.91 314.402 5323.17 332.602C5354.44 350.802 5376.61 376.468 5389.67 409.602L5286.77 462.102C5277.91 444.368 5266.94 431.535 5253.87 423.602C5240.81 415.202 5226.57 411.002 5211.17 411.002C5195.77 411.002 5181.77 414.502 5169.17 421.502C5156.57 428.502 5146.54 438.768 5139.07 452.302C5132.07 465.368 5128.57 481.468 5128.57 500.602C5128.57 520.202 5132.07 536.768 5139.07 550.302C5146.54 563.835 5156.57 574.102 5169.17 581.102C5181.77 588.102 5195.77 591.602 5211.17 591.602C5226.57 591.602 5240.81 587.635 5253.87 579.702C5266.94 571.302 5277.91 558.235 5286.77 540.502L5389.67 593.002C5376.61 626.135 5354.44 651.802 5323.17 670.002C5291.91 688.202 5254.81 697.302 5211.87 697.302Z" fill="black"/>
<path d="M4742.16 697.302C4700.63 697.302 4663.76 688.902 4631.56 672.102C4599.36 655.302 4573.93 632.202 4555.26 602.802C4537.06 572.935 4527.96 538.868 4527.96 500.602C4527.96 462.335 4537.06 428.502 4555.26 399.102C4573.93 369.702 4599.36 346.835 4631.56 330.502C4663.76 313.702 4700.63 305.302 4742.16 305.302C4783.7 305.302 4820.56 313.702 4852.76 330.502C4885.43 346.835 4910.86 369.702 4929.06 399.102C4947.26 428.502 4956.36 462.335 4956.36 500.602C4956.36 538.868 4947.26 572.935 4929.06 602.802C4910.86 632.202 4885.43 655.302 4852.76 672.102C4820.56 688.902 4783.7 697.302 4742.16 697.302ZM4742.16 591.602C4757.56 591.602 4771.1 588.102 4782.76 581.102C4794.9 574.102 4804.46 563.835 4811.46 550.302C4818.46 536.302 4821.96 519.735 4821.96 500.602C4821.96 481.468 4818.46 465.368 4811.46 452.302C4804.46 438.768 4794.9 428.502 4782.76 421.502C4771.1 414.502 4757.56 411.002 4742.16 411.002C4727.23 411.002 4713.7 414.502 4701.56 421.502C4689.9 428.502 4680.33 438.768 4672.86 452.302C4665.86 465.368 4662.36 481.468 4662.36 500.602C4662.36 519.735 4665.86 536.302 4672.86 550.302C4680.33 563.835 4689.9 574.102 4701.56 581.102C4713.7 588.102 4727.23 591.602 4742.16 591.602Z" fill="black"/>
<path d="M4332.33 691.002V171.602H4465.33V691.002H4332.33Z" fill="black"/>
<path d="M4066.13 700.802C4027.4 700.802 3991.47 694.735 3958.33 682.602C3925.67 670.002 3897.2 652.268 3872.93 629.402C3849.13 606.535 3830.47 579.702 3816.93 548.902C3803.4 517.635 3796.63 483.335 3796.63 446.002C3796.63 408.668 3803.4 374.602 3816.93 343.802C3830.47 312.535 3849.13 285.468 3872.93 262.602C3897.2 239.735 3925.67 222.235 3958.33 210.102C3991.47 197.502 4027.4 191.202 4066.13 191.202C4111.4 191.202 4151.77 199.135 4187.23 215.002C4223.17 230.868 4253.03 253.735 4276.83 283.602L4188.63 363.402C4172.77 344.735 4155.27 330.502 4136.13 320.702C4117.47 310.902 4096.47 306.002 4073.13 306.002C4053.07 306.002 4034.63 309.268 4017.83 315.802C4001.03 322.335 3986.57 331.902 3974.43 344.502C3962.77 356.635 3953.43 371.335 3946.43 388.602C3939.9 405.868 3936.63 425.002 3936.63 446.002C3936.63 467.002 3939.9 486.135 3946.43 503.402C3953.43 520.668 3962.77 535.602 3974.43 548.202C3986.57 560.335 4001.03 569.668 4017.83 576.202C4034.63 582.735 4053.07 586.002 4073.13 586.002C4096.47 586.002 4117.47 581.102 4136.13 571.302C4155.27 561.502 4172.77 547.268 4188.63 528.602L4276.83 608.402C4253.03 637.802 4223.17 660.668 4187.23 677.002C4151.77 692.868 4111.4 700.802 4066.13 700.802Z" fill="black"/>
<path d="M3565.21 697.302C3520.41 697.302 3481.21 688.902 3447.61 672.102C3414.48 654.835 3388.58 631.502 3369.91 602.102C3351.71 572.235 3342.61 538.402 3342.61 500.602C3342.61 462.802 3351.48 429.202 3369.21 399.802C3387.41 369.935 3412.38 346.835 3444.11 330.502C3475.84 313.702 3511.54 305.302 3551.21 305.302C3588.54 305.302 3622.61 313.002 3653.41 328.402C3684.21 343.335 3708.71 365.502 3726.91 394.902C3745.11 424.302 3754.21 460.002 3754.21 502.002C3754.21 506.668 3753.98 512.035 3753.51 518.102C3753.04 524.168 3752.58 529.768 3752.11 534.902H3451.81V464.902H3681.41L3631.01 484.502C3631.48 467.235 3628.21 452.302 3621.21 439.702C3614.68 427.102 3605.34 417.302 3593.21 410.302C3581.54 403.302 3567.78 399.802 3551.91 399.802C3536.04 399.802 3522.04 403.302 3509.91 410.302C3498.24 417.302 3489.14 427.335 3482.61 440.402C3476.08 453.002 3472.81 467.935 3472.81 485.202V505.502C3472.81 524.168 3476.54 540.268 3484.01 553.802C3491.94 567.335 3503.14 577.835 3517.61 585.302C3532.08 592.302 3549.34 595.802 3569.41 595.802C3588.08 595.802 3603.94 593.235 3617.01 588.102C3630.54 582.502 3643.84 574.102 3656.91 562.902L3726.91 635.702C3708.71 655.768 3686.31 671.168 3659.71 681.902C3633.11 692.168 3601.61 697.302 3565.21 697.302Z" fill="black"/>
<path d="M3058.36 833.102C3021.96 833.102 2987.19 828.902 2954.06 820.502C2921.39 812.102 2893.39 799.735 2870.06 783.402L2918.36 690.302C2934.22 702.902 2953.82 712.702 2977.16 719.702C3000.96 727.168 3024.06 730.902 3046.46 730.902C3082.39 730.902 3108.29 722.968 3124.16 707.102C3140.02 691.702 3147.96 669.068 3147.96 639.202V594.402L3154.96 488.002L3154.26 380.902V311.602H3280.96V621.702C3280.96 693.568 3261.59 746.768 3222.86 781.302C3184.12 815.835 3129.29 833.102 3058.36 833.102ZM3035.26 671.402C3001.66 671.402 2970.62 663.935 2942.16 649.002C2914.16 633.602 2891.52 612.368 2874.26 585.302C2857.46 557.768 2849.06 525.335 2849.06 488.002C2849.06 450.668 2857.46 418.468 2874.26 391.402C2891.52 363.868 2914.16 342.635 2942.16 327.702C2970.62 312.768 3001.66 305.302 3035.26 305.302C3067.46 305.302 3094.99 311.835 3117.86 324.902C3140.72 337.502 3157.99 357.335 3169.66 384.402C3181.79 411.468 3187.86 446.002 3187.86 488.002C3187.86 530.002 3181.79 564.535 3169.66 591.602C3157.99 618.668 3140.72 638.735 3117.86 651.802C3094.99 664.868 3067.46 671.402 3035.26 671.402ZM3066.76 565.702C3082.62 565.702 3096.62 562.435 3108.76 555.902C3121.36 549.368 3131.16 540.268 3138.16 528.602C3145.62 516.935 3149.36 503.402 3149.36 488.002C3149.36 472.602 3145.62 459.068 3138.16 447.402C3131.16 435.735 3121.36 426.868 3108.76 420.802C3096.62 414.268 3082.62 411.002 3066.76 411.002C3050.89 411.002 3036.66 414.268 3024.06 420.802C3011.46 426.868 3001.42 435.735 2993.96 447.402C2986.96 459.068 2983.46 472.602 2983.46 488.002C2983.46 503.402 2986.96 516.935 2993.96 528.602C3001.42 540.268 3011.46 549.368 3024.06 555.902C3036.66 562.435 3050.89 565.702 3066.76 565.702Z" fill="black"/>
<path d="M2627.77 305.302C2657.17 305.302 2683.77 311.368 2707.57 323.502C2731.37 335.168 2750.04 353.368 2763.57 378.102C2777.57 402.835 2784.57 434.802 2784.57 474.002V691.002H2651.57V495.702C2651.57 468.635 2645.97 449.035 2634.77 436.902C2624.04 424.302 2608.87 418.002 2589.27 418.002C2575.27 418.002 2562.44 421.268 2550.77 427.802C2539.1 433.868 2530 443.435 2523.47 456.502C2516.94 469.568 2513.67 486.602 2513.67 507.602V691.002H2380.67V311.602H2507.37V419.402L2482.87 387.902C2497.34 360.368 2517.17 339.835 2542.37 326.302C2567.57 312.302 2596.04 305.302 2627.77 305.302Z" fill="black"/>
<path d="M2172.82 691.002V620.302L2163.72 602.802V472.602C2163.72 451.602 2157.18 435.502 2144.12 424.302C2131.52 412.635 2111.22 406.802 2083.22 406.802C2065.02 406.802 2046.58 409.835 2027.92 415.902C2009.25 421.502 1993.38 429.435 1980.32 439.702L1935.52 349.402C1956.98 335.402 1982.65 324.668 2012.52 317.202C2042.85 309.268 2072.95 305.302 2102.82 305.302C2164.42 305.302 2212.02 319.535 2245.62 348.002C2279.68 376.002 2296.72 420.102 2296.72 480.302V691.002H2172.82ZM2060.82 697.302C2030.48 697.302 2004.82 692.168 1983.82 681.902C1962.82 671.635 1946.72 657.635 1935.52 639.902C1924.78 622.168 1919.42 602.335 1919.42 580.402C1919.42 557.068 1925.25 537.002 1936.92 520.202C1949.05 502.935 1967.48 489.868 1992.22 481.002C2016.95 471.668 2048.92 467.002 2088.12 467.002H2177.72V536.302H2106.32C2084.85 536.302 2069.68 539.802 2060.82 546.802C2052.42 553.802 2048.22 563.135 2048.22 574.802C2048.22 586.468 2052.65 595.802 2061.52 602.802C2070.38 609.802 2082.52 613.302 2097.92 613.302C2112.38 613.302 2125.45 609.802 2137.12 602.802C2149.25 595.335 2158.12 584.135 2163.72 569.202L2181.92 618.202C2174.92 644.335 2161.15 664.168 2140.62 677.702C2120.55 690.768 2093.95 697.302 2060.82 697.302Z" fill="black"/>
<path d="M1654.69 691.002V311.602H1781.39V422.202L1762.49 390.702C1773.69 362.235 1791.89 341.002 1817.09 327.002C1842.29 312.535 1872.86 305.302 1908.79 305.302V425.002C1902.73 424.068 1897.36 423.602 1892.69 423.602C1888.49 423.135 1883.83 422.902 1878.69 422.902C1851.63 422.902 1829.69 430.368 1812.89 445.302C1796.09 459.768 1787.69 483.568 1787.69 516.702V691.002H1654.69Z" fill="black"/>
<path d="M1316.1 700.802C1276.9 700.802 1240.73 694.502 1207.6 681.902C1174.47 669.302 1145.53 651.568 1120.8 628.702C1096.53 605.368 1077.63 578.302 1064.1 547.502C1050.57 516.702 1043.8 482.868 1043.8 446.002C1043.8 409.135 1050.57 375.302 1064.1 344.502C1077.63 313.702 1096.53 286.868 1120.8 264.002C1145.53 240.668 1174.47 222.702 1207.6 210.102C1240.73 197.502 1276.9 191.202 1316.1 191.202C1355.77 191.202 1391.93 197.502 1424.6 210.102C1457.73 222.702 1486.43 240.668 1510.7 264.002C1534.97 286.868 1553.87 313.702 1567.4 344.502C1581.4 375.302 1588.4 409.135 1588.4 446.002C1588.4 482.868 1581.4 516.935 1567.4 548.202C1553.87 579.002 1534.97 605.835 1510.7 628.702C1486.43 651.568 1457.73 669.302 1424.6 681.902C1391.93 694.502 1355.77 700.802 1316.1 700.802ZM1316.1 586.002C1334.77 586.002 1352.03 582.735 1367.9 576.202C1384.23 569.668 1398.23 560.335 1409.9 548.202C1422.03 535.602 1431.37 520.668 1437.9 503.402C1444.9 486.135 1448.4 467.002 1448.4 446.002C1448.4 424.535 1444.9 405.402 1437.9 388.602C1431.37 371.335 1422.03 356.635 1409.9 344.502C1398.23 331.902 1384.23 322.335 1367.9 315.802C1352.03 309.268 1334.77 306.002 1316.1 306.002C1297.43 306.002 1279.93 309.268 1263.6 315.802C1247.73 322.335 1233.73 331.902 1221.6 344.502C1209.93 356.635 1200.6 371.335 1193.6 388.602C1187.07 405.402 1183.8 424.535 1183.8 446.002C1183.8 467.002 1187.07 486.135 1193.6 503.402C1200.6 520.668 1209.93 535.602 1221.6 548.202C1233.73 560.335 1247.73 569.668 1263.6 576.202C1279.93 582.735 1297.43 586.002 1316.1 586.002Z" fill="black"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M440 880C683.005 880 880 683.005 880 440C880 196.995 683.005 0 440 0C196.995 0 0 196.995 0 440C0 683.005 196.995 880 440 880ZM440 800C638.823 800 800 638.823 800 440C800 241.177 638.823 80 440 80C241.177 80 80 241.177 80 440C80 638.823 241.177 800 440 800Z" fill="black"/>
<path d="M384.654 124.773C379.12 135.649 376 147.96 376 161V341.57L246.453 212.787C238.19 204.573 238.639 191.014 247.953 184.016C287.432 154.35 333.997 133.605 384.654 124.773Z" fill="#F7931A"/>
<path d="M460.346 559.913L588.106 687.673C596.687 696.254 606.732 702.478 617.438 706.345C577.7 732.871 531.691 750.741 482.107 757.258C470.676 758.761 460.912 749.589 460.878 738.06L460.346 559.913Z" fill="#F7931A"/>
<path d="M420.878 738.173C420.912 749.703 411.201 758.933 399.76 757.498C342.678 750.336 290.273 728.139 246.635 694.996C237.423 687.999 236.969 674.558 245.124 666.354L386.098 524.535C398.66 511.899 420.229 520.758 420.282 538.576L420.878 738.173Z" fill="#F7931A"/>
<path d="M187.957 637.192C195.05 646.245 208.401 646.559 216.509 638.402L359.655 494.398C372.217 481.762 363.23 460.246 345.412 460.299L141.947 460.901C130.417 460.935 121.245 470.7 122.748 482.132C130.379 540.155 153.555 593.282 187.957 637.192Z" fill="#F7931A"/>
<path d="M122.503 399.785C121.069 411.225 130.298 420.935 141.828 420.901L350.018 420.285C367.836 420.232 376.695 398.663 364.059 386.101L217.396 240.303C209.297 232.252 196.062 232.571 188.974 241.524C153.633 286.161 129.944 340.447 122.503 399.785Z" fill="#F7931A"/>
<path d="M456 120C433.909 120 416 137.909 416 160V440C416 451.457 419.912 462.91 428.102 471.101L616.39 659.389C632.011 675.01 657.338 675.01 672.959 659.389C688.58 643.768 688.58 618.441 672.959 602.82L496 425.861V160C496 137.909 478.091 120 456 120Z" fill="black"/>
</g>
<defs>
<clipPath id="clip0_1155_1589">
<rect width="5878" height="880" fill="white"/>
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 12 KiB

View file

@ -0,0 +1,17 @@
{
"name": "OrangeClock 2.13 inch",
"builds": [
{
"chipFamily": "ESP32-S2",
"parts": [
{ "path": "/firmwares/lolin_s2_mini_213epd.bin", "offset": 0 }
]
},
{
"chipFamily": "ESP32-S3",
"parts": [
{ "path": "/firmwares/lolin_s3_mini_213epd.bin", "offset": 0 }
]
}
]
}

View file

@ -0,0 +1,17 @@
{
"name": "OrangeClock 2.9 inch",
"builds": [
{
"chipFamily": "ESP32-S2",
"parts": [
{ "path": "lolin_s2_mini_29epd.bin", "offset": 0 }
]
},
{
"chipFamily": "ESP32-S3",
"parts": [
{ "path": "lolin_s3_mini_29epd.bin", "offset": 0 }
]
}
]
}

View file

@ -0,0 +1,14 @@
{
"name": "OrangeClock PCB",
"builds": [
{
"chipFamily": "ESP32-S3",
"parts": [
{
"path": "/firmwares/orangeclock_29epd.bin",
"offset": 0
}
]
}
]
}

28
svelte.config.js Normal file
View file

@ -0,0 +1,28 @@
import { vitePreprocess } from '@sveltejs/vite-plugin-svelte';
import adapter from '@sveltejs/adapter-static';
/** @type {import('@sveltejs/kit').Config} */
const config = {
// Consult https://kit.svelte.dev/docs/integrations#preprocessors
// for more information about preprocessors
preprocess: vitePreprocess(),
kit: {
// adapter-auto only supports some environments, see https://kit.svelte.dev/docs/adapter-auto for a list.
// If your environment is not supported or you settled on a specific environment, switch out the adapter.
// See https://kit.svelte.dev/docs/adapters for more information about adapters.
adapter: adapter({
pages: 'dist',
assets: 'dist',
fallback: 'bundle.html',
precompress: false,
strict: true
}),
appDir: 'build',
paths: {
base: process.env.NODE_ENV === 'production' ? '/oc-flasher' : '',
}
}
};
export default config;

6
tests/test.ts Normal file
View file

@ -0,0 +1,6 @@
import { expect, test } from '@playwright/test';
test('index page has expected h1', async ({ page }) => {
await page.goto('/');
await expect(page.getByRole('heading', { name: 'Welcome to SvelteKit' })).toBeVisible();
});

19
tsconfig.json Normal file
View file

@ -0,0 +1,19 @@
{
"extends": "./.svelte-kit/tsconfig.json",
"compilerOptions": {
"allowJs": true,
"checkJs": true,
"esModuleInterop": true,
"forceConsistentCasingInFileNames": true,
"resolveJsonModule": true,
"skipLibCheck": true,
"sourceMap": true,
"strict": true,
"moduleResolution": "bundler"
}
// Path aliases are handled by https://kit.svelte.dev/docs/configuration#alias
// except $lib which is handled by https://kit.svelte.dev/docs/configuration#files
//
// If you want to overwrite includes/excludes, make sure to copy over the relevant includes/excludes
// from the referenced tsconfig.json - TypeScript does not merge them in
}

9
vite.config.ts Normal file
View file

@ -0,0 +1,9 @@
import { sveltekit } from '@sveltejs/kit/vite';
import { defineConfig } from 'vitest/config';
export default defineConfig({
plugins: [sveltekit()],
test: {
include: ['src/**/*.{test,spec}.{js,ts}']
}
});

2493
yarn.lock Normal file

File diff suppressed because it is too large Load diff