@zessjs/cli 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ The MIT License (MIT)
2
+
3
+ Copyright © 2025 Columsys (https://github.com/rpsffx)
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,50 @@
1
+ <div align="center">
2
+ <img src="https://pic1.imgdb.cn/item/68c7c093c5157e1a8804fb52.svg" alt="Zess Logo">
3
+ </div>
4
+
5
+ # @zessjs/cli
6
+
7
+ [![NPM Version](https://img.shields.io/npm/v/@zessjs/cli.svg?style=for-the-badge)](https://www.npmjs.com/package/@zessjs/cli) [![NPM License](https://img.shields.io/npm/l/@zessjs/cli.svg?style=for-the-badge)](https://github.com/rpsffx/zess/blob/main/LICENSE)
8
+
9
+ Zess CLI tool 🔨 For easily creating Vite-powered Zess project.
10
+
11
+ <div align="center">
12
+ <img src="https://pic1.imgdb.cn/item/68d2c7b7c5157e1a882be39f.gif" alt="Zess CLI Usage" style="max-width: 100%; height: auto;">
13
+ </div>
14
+
15
+ ## 🚀 Usage
16
+
17
+ ### Create a new project
18
+
19
+ Run the following command to create a new Zess project:
20
+
21
+ ```bash
22
+ npx create-zess my-app
23
+ ```
24
+
25
+ Where `my-app` is the directory where you want to create your project.
26
+
27
+ ### Start the development server
28
+
29
+ After creating your project, navigate to the project directory and start the development server:
30
+
31
+ ```bash
32
+ cd my-app
33
+ npm run dev
34
+ ```
35
+
36
+ Then open your browser and visit:
37
+
38
+ - Local: http://localhost:5173/
39
+ - Network: use --host to expose
40
+ - press h + enter to show help
41
+
42
+ ## 🔄 Compatibility
43
+
44
+ The Zess CLI is compatible with:
45
+
46
+ - Node.js >=18.12.0
47
+
48
+ ## 📝 License
49
+
50
+ [MIT](https://github.com/rpsffx/zess/blob/main/LICENSE)
package/index.ts ADDED
@@ -0,0 +1,210 @@
1
+ #!/usr/bin/env -S npx tsx
2
+
3
+ import child_process from 'node:child_process'
4
+ import { existsSync } from 'node:fs'
5
+ import { copyFile, mkdir, readdir, readFile, writeFile } from 'node:fs/promises'
6
+ import path from 'node:path'
7
+ import process from 'node:process'
8
+ import { fileURLToPath } from 'node:url'
9
+ import { promisify } from 'node:util'
10
+ import {
11
+ cancel,
12
+ intro,
13
+ isCancel,
14
+ log,
15
+ note,
16
+ outro,
17
+ select,
18
+ spinner,
19
+ text,
20
+ } from '@clack/prompts'
21
+ import { program } from 'commander'
22
+ import gradient from 'gradient-string'
23
+ import pc from 'picocolors'
24
+ import { description, version } from './package.json'
25
+ import { name } from './template/common/package.json'
26
+
27
+ const __dirname = path.dirname(fileURLToPath(import.meta.url))
28
+ const exec = promisify(child_process.exec)
29
+
30
+ function showWelcomeMessage(): void {
31
+ process.stdout.write('\n')
32
+ intro(
33
+ gradient(['skyblue', 'khaki'])(
34
+ 'Welcome to Zess - A compiler-driven framework for high-performance web apps',
35
+ ),
36
+ )
37
+ }
38
+
39
+ async function promptUser(): Promise<{
40
+ projectName: string
41
+ useTypeScript: boolean
42
+ }> {
43
+ const projectName = await text({
44
+ message: 'Project name:',
45
+ placeholder: name,
46
+ defaultValue: name,
47
+ validate(value) {
48
+ if (value && !value.trim()) {
49
+ return 'Project name cannot be empty'
50
+ }
51
+ },
52
+ })
53
+ if (isCancel(projectName)) {
54
+ cancel('Operation cancelled')
55
+ return process.exit(0)
56
+ }
57
+ const useTypeScript = await select({
58
+ message: 'Project language:',
59
+ options: [
60
+ { value: true, label: 'TypeScript' },
61
+ { value: false, label: 'JavaScript' },
62
+ ],
63
+ })
64
+ if (isCancel(useTypeScript)) {
65
+ cancel('Operation cancelled')
66
+ return process.exit(0)
67
+ }
68
+ return { projectName, useTypeScript }
69
+ }
70
+
71
+ async function createProject(
72
+ directoryName: string,
73
+ projectName: string,
74
+ useTypeScript: boolean,
75
+ ): Promise<void> {
76
+ const directoryPath = path.join(process.cwd(), directoryName)
77
+ if (existsSync(directoryPath)) {
78
+ log.step(`Using existing directory: ${pc.cyan(directoryName)}`)
79
+ } else {
80
+ log.step(`Creating project directory: ${pc.cyan(directoryName)}`)
81
+ await mkdir(directoryPath, { recursive: true })
82
+ }
83
+ await copyTemplateFiles(directoryPath, projectName, useTypeScript)
84
+ await installDependencies(directoryPath)
85
+ }
86
+
87
+ async function copyTemplateFiles(
88
+ projectPath: string,
89
+ projectName: string,
90
+ useTypeScript: boolean,
91
+ ): Promise<void> {
92
+ const setupSpinner = spinner()
93
+ setupSpinner.start('Setting up project files...')
94
+ const templatePath = path.join(__dirname, 'template')
95
+ await copyDirectory(path.join(templatePath, 'common'), projectPath, {
96
+ '.gitignore': async (srcPath, destPath) => {
97
+ if (!existsSync(destPath)) return true
98
+ const srcGitignore = await readFile(srcPath, 'utf-8')
99
+ const destGitignore = await readFile(destPath, 'utf-8')
100
+ await writeFile(destPath, `${destGitignore}\n${srcGitignore}`)
101
+ },
102
+ 'package.json': async (srcPath, destPath) => {
103
+ await mergePackageJson(srcPath, destPath, projectName, useTypeScript)
104
+ },
105
+ 'README.md': async (srcPath, destPath) => {
106
+ if (projectName === name) return true
107
+ const srcReadme = await readFile(srcPath, 'utf-8')
108
+ await writeFile(destPath, srcReadme.replace(name, projectName))
109
+ },
110
+ })
111
+ await copyDirectory(
112
+ path.join(templatePath, useTypeScript ? 'typescript' : 'javascript'),
113
+ projectPath,
114
+ )
115
+ setupSpinner.stop('Project files set up')
116
+ }
117
+
118
+ async function installDependencies(projectPath: string): Promise<void> {
119
+ const installSpinner = spinner()
120
+ installSpinner.start('Installing dependencies...')
121
+ await exec('npm install', { cwd: projectPath })
122
+ installSpinner.stop('Dependencies installed successfully!')
123
+ }
124
+
125
+ async function copyDirectory(
126
+ srcDir: string,
127
+ destDir: string,
128
+ handlers?: Record<
129
+ string,
130
+ (src: string, dest: string) => Promise<boolean | void>
131
+ >,
132
+ ): Promise<void> {
133
+ const files = await readdir(srcDir, { withFileTypes: true })
134
+ if (!existsSync(destDir)) await mkdir(destDir, { recursive: true })
135
+ for (const file of files) {
136
+ const srcPath = path.join(srcDir, file.name)
137
+ const destPath = path.join(destDir, file.name)
138
+ if (
139
+ handlers?.[file.name] &&
140
+ !(await handlers[file.name](srcPath, destPath))
141
+ ) {
142
+ continue
143
+ }
144
+ if (file.isDirectory()) {
145
+ await copyDirectory(srcPath, destPath, handlers)
146
+ } else {
147
+ await copyFile(srcPath, destPath)
148
+ }
149
+ }
150
+ }
151
+
152
+ async function mergePackageJson(
153
+ srcPath: string,
154
+ destPath: string,
155
+ projectName: string,
156
+ useTypeScript: boolean,
157
+ ): Promise<void> {
158
+ let srcPackageJson = JSON.parse(await readFile(srcPath, 'utf-8'))
159
+ if (existsSync(destPath)) {
160
+ const destPackageJson = JSON.parse(await readFile(destPath, 'utf-8'))
161
+ Object.assign(destPackageJson.dependencies, srcPackageJson.dependencies)
162
+ Object.assign(
163
+ destPackageJson.devDependencies,
164
+ srcPackageJson.devDependencies,
165
+ )
166
+ Object.assign(destPackageJson.scripts, srcPackageJson.scripts)
167
+ destPackageJson.prettier = srcPackageJson.prettier
168
+ srcPackageJson = destPackageJson
169
+ }
170
+ srcPackageJson.name = projectName
171
+ delete srcPackageJson.devDependencies[
172
+ useTypeScript ? 'eslint-plugin-react' : 'typescript'
173
+ ]
174
+ await writeFile(destPath, JSON.stringify(srcPackageJson, null, 2))
175
+ }
176
+
177
+ function showInstructions(title: string, ...instructions: string[]): void {
178
+ note(instructions.map(pc.cyan).join('\n'), title)
179
+ }
180
+
181
+ function init(): void {
182
+ program
183
+ .version(version)
184
+ .description(description)
185
+ .argument('<directory>', 'directory to create the project in')
186
+ .action(async (directory: string) => {
187
+ showWelcomeMessage()
188
+ const { projectName, useTypeScript } = await promptUser()
189
+ try {
190
+ await createProject(directory, projectName, useTypeScript)
191
+ showInstructions(
192
+ 'Done! We suggest you start by typing:',
193
+ `cd ${directory}`,
194
+ 'npm run dev',
195
+ )
196
+ showInstructions(
197
+ 'Then open your browser and visit:',
198
+ 'Local: http://localhost:5173/',
199
+ 'Network: use --host to expose',
200
+ )
201
+ outro('Happy coding with your Zess project!')
202
+ } catch (error) {
203
+ process.stderr.write(error?.message ?? error)
204
+ process.exit(1)
205
+ }
206
+ })
207
+ .parse()
208
+ }
209
+
210
+ init()
package/package.json ADDED
@@ -0,0 +1,37 @@
1
+ {
2
+ "name": "@zessjs/cli",
3
+ "version": "1.0.0",
4
+ "description": "Zess CLI tool 🔨 For easily creating Vite-powered Zess project.",
5
+ "type": "module",
6
+ "keywords": [
7
+ "zess",
8
+ "vite",
9
+ "cli"
10
+ ],
11
+ "license": "MIT",
12
+ "homepage": "https://github.com/rpsffx/zess/tree/main/packages/cli#readme",
13
+ "bugs": {
14
+ "url": "https://github.com/rpsffx/zess/issues"
15
+ },
16
+ "repository": {
17
+ "type": "git",
18
+ "url": "git+https://github.com/rpsffx/zess.git",
19
+ "directory": "packages/cli"
20
+ },
21
+ "author": "Columsys",
22
+ "bin": {
23
+ "create-zess": "index.ts"
24
+ },
25
+ "publishConfig": {
26
+ "access": "public"
27
+ },
28
+ "dependencies": {
29
+ "@clack/prompts": "^0.11.0",
30
+ "commander": "^14.0.1",
31
+ "gradient-string": "^3.0.0",
32
+ "picocolors": "^1.1.1"
33
+ },
34
+ "engines": {
35
+ "node": ">=18.12.0"
36
+ }
37
+ }
@@ -0,0 +1,61 @@
1
+ # zess-app
2
+
3
+ A high-performance web application template project based on the Zess framework, integrated with [TailwindCSS](https://github.com/tailwindlabs/tailwindcss) and modern development toolchain.
4
+
5
+ ## Usage
6
+
7
+ ### Development Mode
8
+
9
+ ```bash
10
+ npm run dev
11
+ ```
12
+
13
+ Starts the development server, accessible by default at http://localhost:5173/
14
+
15
+ ### Build for Production
16
+
17
+ ```bash
18
+ npm run build
19
+ ```
20
+
21
+ Builds the optimized version for production environment
22
+
23
+ ### Preview Production Build
24
+
25
+ ```bash
26
+ npm run preview
27
+ ```
28
+
29
+ Previews the built production version locally
30
+
31
+ ### Run Tests
32
+
33
+ ```bash
34
+ npm run test
35
+ ```
36
+
37
+ Executes the test cases in the project
38
+
39
+ ### Code Linting
40
+
41
+ ```bash
42
+ npm run lint
43
+ ```
44
+
45
+ Checks code quality using ESLint
46
+
47
+ ### Auto Fix Code Issues
48
+
49
+ ```bash
50
+ npm run lint:fix
51
+ ```
52
+
53
+ Automatically fixes code issues detected by ESLint
54
+
55
+ ### Code Formatting
56
+
57
+ ```bash
58
+ npm run format
59
+ ```
60
+
61
+ Formats all code files in the project using Prettier
@@ -0,0 +1,33 @@
1
+ {
2
+ "name": "zess-app",
3
+ "version": "1.0.0",
4
+ "type": "module",
5
+ "scripts": {
6
+ "dev": "vite",
7
+ "build": "vite build",
8
+ "preview": "vite preview",
9
+ "test": "vitest",
10
+ "lint": "eslint .",
11
+ "lint:fix": "eslint . --fix",
12
+ "format": "prettier --cache --write ."
13
+ },
14
+ "dependencies": {
15
+ "@tailwindcss/vite": "^4.1.13",
16
+ "@zessjs/core": "^1.0.0",
17
+ "@zessjs/router": "^1.0.0",
18
+ "tailwindcss": "^4.1.13"
19
+ },
20
+ "devDependencies": {
21
+ "@sxzz/eslint-config": "^7.2.1",
22
+ "@sxzz/prettier-config": "^2.2.4",
23
+ "@zessjs/vite-plugin": "^1.0.0",
24
+ "eslint": "^9.36.0",
25
+ "eslint-plugin-react": "^7.37.5",
26
+ "jsdom": "^27.0.0",
27
+ "prettier": "^3.6.2",
28
+ "typescript": "^5.9.2",
29
+ "vite": "^6.3.6",
30
+ "vitest": "^3.2.4"
31
+ },
32
+ "prettier": "@sxzz/prettier-config"
33
+ }
@@ -0,0 +1 @@
1
+ <svg version="1.1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1200 1200" width="300" height="300" preserveAspectRatio="none" display="block"><path fill="#000000" d="M 204.054 36.3954 C 217.533 35.6152 231.074 35.7565 244.447 37.7698 C 262.312 40.4593 279.997 47.2059 296.81 53.6819 C 399.192 93.1169 493.15 171.446 566.692 251.747 C 593.711 281.25 617.806 313.731 641.552 345.879 C 642.262 345.167 642.981 344.482 643.752 343.836 C 649.508 339.016 657.811 335.462 664.296 331.38 C 722.871 294.503 802.548 270.193 872.003 276.898 C 888.364 278.478 910.356 284.496 921.019 297.868 C 946.545 329.878 882.154 380.011 863.501 400.687 C 854.372 410.806 845.563 423.536 839.388 435.671 C 824.748 464.44 821.65 501.896 817.64 533.531 C 825.359 540.698 832.42 548.72 839.854 556.207 C 860.436 576.936 881.43 598.222 903.57 617.298 C 921.786 632.992 941.613 648.398 961.316 662.179 C 976.556 672.837 992.382 682.493 1007.49 693.425 C 1012.01 666.635 1020.29 640.617 1032.09 616.141 C 1037.12 605.778 1042.05 594.878 1048.04 585.044 C 1066 555.584 1093.22 523.088 1123.66 506.314 C 1131.03 502.252 1139.6 499.732 1147.55 496.985 C 1150.98 498.272 1154.73 499.456 1157.93 501.268 C 1162.28 503.742 1164.32 508.293 1165.56 512.944 C 1178.26 560.861 1130.55 702.906 1106.06 744.538 C 1107.08 750 1108.69 754.858 1110.43 760.113 C 1121.15 792.586 1152.32 913.082 1138.31 940.141 C 1136.05 944.489 1132.74 947.53 1128.02 949.003 C 1115.87 952.791 1098.5 948.163 1087.61 942.48 C 1059.06 927.583 1027.02 896.694 1017.12 865.468 C 1016.12 863.067 1015.96 861.945 1013.79 860.431 C 1005.13 870.636 996.973 881.67 987.836 891.417 C 966.791 913.869 942.83 933.138 918.568 951.943 C 921.642 956.535 924.032 961.587 927.125 966.21 C 949.451 999.573 972.967 1032.97 989.272 1069.83 C 998.962 1091.74 1000.84 1112.53 992.112 1135.14 C 985.909 1138.88 979.512 1142.39 972.673 1144.8 C 949.515 1152.99 924.394 1148.77 901.119 1143.55 C 888.34 1140.68 875.256 1138.04 862.813 1133.94 C 829.68 1123.02 794.837 1104.05 767.022 1082.93 C 758.157 1076.2 724.275 1043.61 718.906 1042.4 C 710.067 1040.41 679.032 1050.11 668.432 1052.09 C 655.915 1054.43 643.114 1056.34 630.476 1057.89 C 619.554 1059.23 608.411 1059.43 597.423 1060.08 C 542.543 1063.59 487.445 1061.17 433.083 1052.87 C 421.659 1051.12 410.415 1048.24 399.062 1046.09 C 387.435 1043.9 375.481 1042.44 364.001 1039.59 C 320.403 1028.83 278.084 1013.42 237.765 993.648 C 226.268 997.286 215.823 1004.17 205.046 1009.54 C 193.182 1015.44 181.827 1018.91 169.065 1022.15 C 144.387 1028.41 110.806 1036.3 87.4485 1022.04 C 80.3706 1017.72 75.47 1011.46 73.531 1003.35 C 65.6441 970.362 95.5387 919.997 112.405 893.008 C 106.993 879.287 95.304 866.881 87.4337 854.373 C 81.1369 844.366 76.1774 832.84 70.8018 822.269 C 63.6535 808.213 59.2541 794.244 54.5723 779.223 C 48.6695 760.286 42.5887 740.437 39.1512 720.902 C 34.3561 693.653 32.8775 665.562 29.5556 638.072 C 21.8956 574.683 26.4569 508.851 31.752 445.477 C 34.2131 416.022 35.3162 386.271 39.0098 356.938 C 40.6598 343.835 43.5225 330.806 45.7815 317.787 C 58.4921 244.536 81.0221 139.242 127.361 80.5068 C 147.266 55.2781 172.048 40.2054 204.054 36.3954 z" data-c-fill="10001"/><path fill="#fefefe" d="M 82.6189 229.261 C 79.8492 218.59 106.103 151.479 111.555 139.277 C 115.942 129.458 121.151 119.867 126.607 110.606 C 141.07 86.0541 160.913 63.5755 189.532 56.2941 C 250.002 40.9092 320.854 78.5856 371.275 108.766 C 457.923 160.631 538.648 239.809 600.866 318.764 C 613.868 335.344 626.426 352.267 638.528 369.515 C 645.135 379.095 650.813 390.073 658.316 398.926 C 660.715 401.757 663.219 404.226 667.005 404.904 C 669.367 404.043 670.456 403.606 671.692 401.202 C 673.276 398.123 672.001 393.695 670.736 390.694 C 668.775 386.045 666.122 381.384 663.204 377.268 C 659.392 371.537 655.663 365.792 651.287 360.467 C 690.674 333.252 731.097 313.297 777.602 301.137 C 811.066 292.387 869.723 283.632 901.14 302.032 C 904.656 305.761 909.671 310.014 909.729 315.52 C 909.938 335.165 872.425 365.494 859.202 379.672 C 849.218 390.376 838.764 402.525 831.662 415.385 C 811.89 451.189 808.444 480.115 803.494 519.876 L 802.833 518.92 C 796.624 510.08 753.947 462.232 745.827 458.257 C 742.825 458.245 742.756 458.232 740.494 460.194 C 739.509 462.624 737.791 466.402 738.93 468.962 C 743.125 478.398 763.97 498.734 771.828 507.481 C 834.678 577.442 901.224 646.537 982.33 695.476 C 991.365 700.927 1000.8 708.403 1010.72 711.927 C 1013.4 712.879 1015.63 713.255 1018.39 712.294 C 1023.12 706.13 1025.74 682.867 1028.29 673.975 C 1043.54 620.861 1072 565.871 1116.66 531.611 C 1126.78 523.848 1137.93 517.743 1149.19 511.825 C 1155.17 571.174 1129.86 647.275 1107.88 702.081 C 1102.36 715.82 1089.05 731.397 1089.63 746.419 C 1090.18 760.911 1101.78 788.401 1106.16 804.343 C 1111.17 822.541 1130.97 918.774 1124.07 931.596 C 1121.03 933.838 1117.31 933.518 1113.76 932.964 C 1086.6 928.722 1063.03 907.859 1047.6 886.166 C 1038.54 873.437 1031.23 858.457 1025.02 844.127 C 1030.7 834.913 1048.33 812.353 1045.3 801.513 C 1044.65 799.21 1043.08 797.392 1040.93 796.297 C 1039.81 795.729 1038.6 795.303 1037.42 794.88 L 1036.7 795.721 C 1026.65 807.613 1020.68 822.533 1011.65 835.167 C 982.687 875.683 948.353 909.559 907.703 938.212 C 898.128 921.297 885.241 906.32 876.198 889.225 C 872.988 883.6 869.386 875.626 862.463 874.01 C 860.038 873.444 859.136 873.811 856.866 874.574 C 855.131 876.239 854.325 877.692 854.268 880.149 C 854.06 889.257 865.767 902.21 870.657 909.807 C 882.171 927.695 893.323 945.756 905.221 963.4 C 921.765 987.934 1002.29 1096.52 977.306 1123.38 C 970.593 1130.6 959.66 1131.86 950.349 1132.06 C 877.909 1133.62 797.266 1092.04 746.195 1042.78 C 729.543 1026.94 714.907 1009.11 702.618 989.685 C 696.148 979.424 691.019 968.256 683.38 958.798 C 680.318 961.152 676.109 963.699 673.678 966.637 C 674.101 981.859 698.435 1016.45 709.782 1027.27 C 677.116 1032.25 645.914 1042.09 612.54 1042.21 C 498.907 1052.09 384.526 1035.63 278.294 994.099 C 195.629 962.459 122.03 895.964 85.89 814.868 C 28.3463 685.745 38.6084 504.086 55.7324 366.474 C 59.8122 333.688 64.0917 303.607 71.2684 271.234 C 74.4203 257.016 77.3606 242.894 82.6189 229.261 z" data-c-fill="fefefe"/><path fill="#60656f" d="M 82.6189 229.261 C 79.8492 218.59 106.103 151.479 111.555 139.277 C 115.942 129.458 121.151 119.867 126.607 110.606 C 141.07 86.0541 160.913 63.5755 189.532 56.2941 C 250.002 40.9092 320.854 78.5856 371.275 108.766 C 457.923 160.631 538.648 239.809 600.866 318.764 C 613.868 335.344 626.426 352.267 638.528 369.515 C 645.135 379.095 650.813 390.073 658.316 398.926 C 660.715 401.757 663.219 404.226 667.005 404.904 C 669.367 404.043 670.456 403.606 671.692 401.202 C 673.276 398.123 672.001 393.695 670.736 390.694 C 668.775 386.045 666.122 381.384 663.204 377.268 C 659.392 371.537 655.663 365.792 651.287 360.467 C 690.674 333.252 731.097 313.297 777.602 301.137 C 811.066 292.387 869.723 283.632 901.14 302.032 C 904.656 305.761 909.671 310.014 909.729 315.52 C 909.938 335.165 872.425 365.494 859.202 379.672 C 849.218 390.376 838.764 402.525 831.662 415.385 C 811.89 451.189 808.444 480.115 803.494 519.876 L 802.833 518.92 C 796.624 510.08 753.947 462.232 745.827 458.257 C 742.825 458.245 742.756 458.232 740.494 460.194 C 739.509 462.624 737.791 466.402 738.93 468.962 C 743.125 478.398 763.97 498.734 771.828 507.481 C 834.678 577.442 901.224 646.537 982.33 695.476 C 991.365 700.927 1000.8 708.403 1010.72 711.927 C 1013.4 712.879 1015.63 713.255 1018.39 712.294 C 1023.12 706.13 1025.74 682.867 1028.29 673.975 C 1043.54 620.861 1072 565.871 1116.66 531.611 C 1126.78 523.848 1137.93 517.743 1149.19 511.825 C 1155.17 571.174 1129.86 647.275 1107.88 702.081 C 1102.36 715.82 1089.05 731.397 1089.63 746.419 C 1090.18 760.911 1101.78 788.401 1106.16 804.343 C 1111.17 822.541 1130.97 918.774 1124.07 931.596 C 1121.03 933.838 1117.31 933.518 1113.76 932.964 C 1086.6 928.722 1063.03 907.859 1047.6 886.166 C 1038.54 873.437 1031.23 858.457 1025.02 844.127 C 1030.7 834.913 1048.33 812.353 1045.3 801.513 C 1044.65 799.21 1043.08 797.392 1040.93 796.297 C 1039.81 795.729 1038.6 795.303 1037.42 794.88 L 1036.7 795.721 C 1026.65 807.613 1020.68 822.533 1011.65 835.167 C 982.687 875.683 948.353 909.559 907.703 938.212 C 898.128 921.297 885.241 906.32 876.198 889.225 C 872.988 883.6 869.386 875.626 862.463 874.01 C 860.038 873.444 859.136 873.811 856.866 874.574 C 855.131 876.239 854.325 877.692 854.268 880.149 C 854.06 889.257 865.767 902.21 870.657 909.807 C 882.171 927.695 893.323 945.756 905.221 963.4 C 921.765 987.934 1002.29 1096.52 977.306 1123.38 C 970.593 1130.6 959.66 1131.86 950.349 1132.06 C 877.909 1133.62 797.266 1092.04 746.195 1042.78 C 729.543 1026.94 714.907 1009.11 702.618 989.685 C 696.148 979.424 691.019 968.256 683.38 958.798 C 680.318 961.152 676.109 963.699 673.678 966.637 L 672.486 959.019 C 674.555 951.768 675.323 944.08 677.4 936.738 C 685.105 909.499 697.247 886.771 712.983 863.528 C 703.462 858.272 694.435 852.167 686.013 845.286 C 645.653 811.747 625.245 763.926 627.765 711.449 C 629.079 684.065 635.026 656.63 638.331 629.421 C 640.473 611.792 643.597 593.738 641.895 575.971 C 639.372 549.647 632.269 518.09 610.638 500.48 C 603.679 494.837 595.669 490.629 587.073 488.1 C 563.626 481.267 548.261 494.167 527.727 502.173 C 515.644 506.884 501.529 509.777 488.645 511.117 C 473.323 512.711 457.999 510.096 443.211 506.135 C 356.36 482.875 345.572 383.958 304.235 319.582 C 300.728 314.12 296.38 304.721 291.514 300.787 L 290.092 306.779 C 289.48 294.008 285.738 290.333 277.518 281.065 C 277.513 280.095 277.214 279.151 276.708 278.323 C 273.232 272.639 267.711 267.24 263.132 262.446 C 239.023 237.207 207.446 215.649 172.882 208.191 C 136.387 200.315 112.893 209.701 82.6189 229.261 z" data-c-fill="60656f"/><path fill="#fefefe" d="M 876.198 889.225 C 889.624 882.388 905.536 879.145 919.425 872.707 C 971.278 848.673 1002.64 819.033 1041.92 778.564 C 1040.61 784.093 1039.14 789.463 1037.42 794.88 L 1036.7 795.721 C 1026.65 807.613 1020.68 822.533 1011.65 835.167 C 982.687 875.683 948.353 909.559 907.703 938.212 C 898.128 921.297 885.241 906.32 876.198 889.225 z" data-c-fill="fefefe"/><path fill="#7f858f" d="M 651.287 360.467 C 690.674 333.252 731.097 313.297 777.602 301.137 C 811.066 292.387 869.723 283.632 901.14 302.032 L 901.353 305.527 C 895.98 309.272 886.48 308.16 880.114 307.874 C 848.29 306.34 816.415 309.525 785.524 317.325 C 755.185 324.787 722.797 338.602 696.403 355.503 C 686.69 361.723 673.308 373.171 663.204 377.268 C 659.392 371.537 655.663 365.792 651.287 360.467 z" data-c-fill="7f858f"/><path fill="#000000" d="M 461.198 278.365 C 461.411 278.347 461.623 278.327 461.837 278.312 C 483.132 276.848 506.725 285.627 522.77 299.501 C 545.49 319.146 555.527 346.138 557.576 375.56 C 559.377 401.426 550.948 429.498 533.938 449.064 C 518.156 467.217 498.685 477.908 474.465 479.576 C 452.664 481.415 431.88 474.475 415.059 460.729 C 392.2 442.049 381.466 416.299 378.696 387.348 C 376.19 361.153 385.212 329.968 402.075 309.63 C 416.928 291.868 438.156 280.642 461.198 278.365 z" data-c-fill="10001"/><path fill="#fefefe" d="M 460.508 293.154 C 474.703 291.87 488.939 295.146 501.144 302.508 C 521.076 314.437 534.911 334.887 540.551 357.253 C 546.752 381.501 543.085 407.219 530.353 428.767 C 517.645 450.026 500.856 458.296 477.701 464.094 C 462.498 466.475 443.404 461.649 430.43 453.533 C 412.011 442.011 399.756 420.213 395.092 399.29 C 389.536 374.369 394.755 348.86 408.394 327.437 C 420.927 307.749 438.337 298.121 460.508 293.154 z" data-c-fill="fefefe"/><path fill="#000000" d="M436.862 321.32C442.967 320.891 454.018 320.539 458.907 324.563 461.121 331.375 450.842 334.421 451.485 347.654 451.703 352.16 453.494 356.486 456.998 359.438 463.315 364.76 470.146 363.536 477.71 362.793 477.589 367.94 477.522 373.136 476.295 378.164 473.025 391.561 465.499 401.403 453.83 408.557 453.252 408.757 452.672 408.95 452.09 409.135 443.228 411.964 433.031 411.778 424.717 407.35 415.843 402.625 410.64 394.031 407.847 384.623 403.595 370.306 405.013 353.697 412.283 340.556 417.624 330.901 426.325 324.345 436.862 321.32zM692.119 551.427C695.034 551.681 698.202 552.129 700.432 554.213 709.8 562.963 711.866 598.542 712.682 611.242 714.893 645.656 708.242 677.542 696.001 709.521 691.705 720.744 687.427 731.719 679.392 740.859 678.136 741.626 676.387 742.895 674.956 743.226 672.291 743.842 671.242 743.049 669.218 741.607 665.712 733.32 682.587 702.127 686.001 692.3 694.987 666.427 699.834 632.113 696.709 604.786 694.716 587.35 691.173 568.996 692.119 551.427zM749.53 584.408C752.287 584.732 754.565 585.129 756.403 587.398 766.041 599.294 767.269 648.744 766.45 664.427 764.756 696.862 752.903 749.746 727.91 772.336 725.136 772.182 722.992 771.514 720.414 770.505 719.777 769.765 718.499 768.686 718.373 767.735 718.107 765.744 718.497 764.066 719.325 762.258 721.507 757.49 725.144 753.162 727.852 748.668 731.764 742.175 734.701 734.56 737.41 727.488 745.647 705.993 751.048 681.76 752.948 658.827 754.393 641.401 750.717 623.444 748.016 606.318 746.871 599.055 744.945 590.784 749.53 584.408z" data-c-fill="10001"/><path fill="#e0dfdf" d="M 672.486 959.019 L 673.678 966.637 C 674.101 981.859 698.435 1016.45 709.782 1027.27 C 677.116 1032.25 645.914 1042.09 612.54 1042.21 C 612.541 1041.95 612.547 1041.69 612.545 1041.43 C 612.532 1039.78 612.714 1038.59 613.56 1037.12 C 618.383 1028.78 627.321 1020.83 633.744 1013.49 C 640.998 1005.21 667.414 973.373 671.555 964.43 C 672.337 962.74 672.524 960.856 672.486 959.019 z" data-c-fill="e0dfdf"/><path fill="#000000" d="M290.092 306.779C288.093 313.447 284.13 321.178 277.998 324.915 274.128 327.273 269.139 327.681 264.777 326.564 260.629 325.502 257.358 322.825 255.309 319.096 251.772 312.66 251.872 304.421 254.074 297.573 256.183 291.01 260.358 284.907 266.659 281.81 270.504 279.921 273.439 279.664 277.518 281.065 285.738 290.333 289.48 294.008 290.092 306.779zM113.534 496.361C123.315 495.121 134.206 497.186 143.815 498.927 193.711 507.969 222.609 525.901 267.845 545.043 283.23 551.554 299.63 556.922 315.553 561.999 328.896 566.252 343.098 570.354 356.97 572.425 370.041 574.376 383.952 574.22 397.178 574.408 416.58 574.684 437.002 574.836 456.282 572.53 491.079 568.37 533.62 554.961 564.776 538.924 562.049 537.792 559.227 536.677 556.665 535.202 552.738 532.944 550.209 530.261 549.043 525.756 549.714 523.093 549.938 523.01 552.135 521.321 556.27 520.324 559.612 520.827 563.548 522.357 577.211 527.666 590.257 541.771 595.793 555.196 597.806 560.08 600.201 568.937 597.726 573.993 596.808 575.869 596.397 575.938 594.454 576.622 585.768 574.449 578.209 554.256 573.211 546.468 576.68 616.307 559.069 699.667 519.814 758.222 514.904 765.196 509.927 772.122 504.882 778.999 466.721 830.391 406.757 867.84 343.154 877.113 279.412 886 214.729 869.498 163.034 831.162 102.071 785.446 72.6834 707.129 62.2248 633.889 58.7957 609.876 53.2196 550.286 58.3652 528.14 59.2539 524.315 60.8906 521.267 63.2799 518.155 74.6896 503.289 95.8294 498.512 113.534 496.361z" data-c-fill="10001"/><path fill="#703342" d="M 103.906 726.069 C 86.8685 691.629 80.4072 653.559 75.6699 615.751 C 74.3129 604.921 69.17 537.508 73.5119 531.921 L 74.8564 532.6 C 74.9091 533.246 74.9673 533.891 75.0311 534.536 C 76.7221 551.503 85.4303 582.26 99.4028 593.514 C 105.634 598.533 110.526 597.696 117.959 596.903 C 129.408 585.032 142.242 565.918 150.805 551.759 C 154.665 572.023 161.022 590.537 169.141 609.49 C 176.002 625.505 181.335 636.638 198.255 643.394 C 217.661 633.269 234.885 604.551 244.83 585.214 C 249.353 604.189 266.25 648.875 280.324 662.64 C 285.523 667.725 289.484 668.914 296.654 668.826 C 296.767 677.12 299.368 683.924 300.249 691.839 L 299.316 691.962 C 276.422 695.145 249.053 708.06 230.665 721.826 C 222.748 727.753 215.781 734.846 208.075 741.024 C 193.715 752.537 180.512 761.482 169.159 776.32 C 168.342 761.849 166.26 725.933 159.316 714.71 C 156.921 710.841 153.377 707.894 148.804 707.016 C 134.852 704.337 114.789 718.335 103.906 726.069 z" data-c-fill="703342"/><path fill="#ee7e89" d="M 356.235 699.71 C 369.89 698.881 388.8 698.126 402.082 701.955 C 402.428 701.966 402.774 701.959 403.118 701.988 C 435.492 704.891 466.712 715.447 494.204 732.786 C 498.726 735.667 504.81 738.77 508.203 742.967 L 507.856 744.651 C 498.674 743.628 474.856 720.728 453.502 720.776 C 445.307 720.794 440.843 723.911 435.159 729.492 C 434.993 739.847 432.969 750.528 431.72 760.822 C 430.286 772.637 429.511 784.329 429.035 796.21 C 416.26 784.778 384.901 759.894 368.296 758.952 C 364.559 758.74 360.827 759.49 358.091 762.209 C 347.097 773.137 338.65 814.528 338.257 830.035 C 330.28 816.38 303.521 774.478 288.447 769.266 C 284.551 767.877 280.258 768.126 276.548 769.955 C 262.883 776.685 246.268 806.382 241.186 820.558 C 235.352 799.103 227.264 775.728 217.551 755.763 C 220.018 752.899 222.494 750 225.104 747.267 C 254.855 716.118 314.273 700.609 356.235 699.71 z" data-c-fill="ee7e89"/><path fill="#bb5864" d="M 356.235 699.71 C 369.89 698.881 388.8 698.126 402.082 701.955 C 395.125 701.137 388.403 703.843 381.857 705.919 C 367.954 710.327 353.781 715.394 341.179 722.851 C 331.401 728.637 322.083 735.612 311.854 740.567 C 306.457 743.181 298.989 747.319 293.101 745.307 L 292.469 743.676 C 301.549 730.234 356.897 702.374 357.665 700.989 L 356.235 699.71 z" data-c-fill="bb5864"/><path fill="#3d1f25" d="M 537.704 568.516 C 544.48 564.411 551.612 561.031 559.278 558.93 C 556.148 591.993 554.661 626.431 546.425 658.663 C 539.981 683.881 529.437 707.218 518.453 730.682 C 509.392 721.731 498.479 715.686 487.129 710.098 C 449.269 691.458 409.243 684.645 367.175 684.828 C 354.682 684.842 342.206 685.749 329.842 687.541 C 321.621 688.677 307.977 692.624 300.249 691.839 C 299.368 683.924 296.767 677.12 296.654 668.826 C 310.419 665.148 332.073 628.549 339.537 615.598 C 341.917 611.511 343.947 607.229 345.606 602.8 C 354.399 619.677 377.002 668.491 395.154 673.633 C 399.744 674.933 404.196 674.058 408.214 671.648 C 423.759 662.323 444.511 619.935 450.549 601.836 C 460.947 619.572 477.723 640.838 496.087 650.722 C 501.033 650.777 505.994 650.969 510.905 650.284 C 529.423 630.076 534.577 594.778 537.704 568.516 z" data-c-fill="3d1f25"/><path fill="#ee7e89" d="M 174.028 794.012 C 181.16 781.42 194.369 772.059 203.318 760.706 C 210.463 774.866 216.523 788.781 221.156 803.974 C 223.565 811.873 225.167 820.19 227.789 827.983 C 230.329 832.296 232.808 837.307 238.025 838.784 C 240.335 839.438 242.79 838.816 244.796 837.583 C 246.846 836.321 248.667 833.658 250.179 831.79 C 255.931 821.677 272.877 787.474 282.885 784.52 C 284.344 784.089 286.537 784.613 287.834 785.335 C 297.159 790.525 317.093 824.966 324.31 835.448 C 327.24 839.653 331.314 846.58 336.756 847.759 C 338.894 848.221 340.674 848.052 342.534 846.935 C 347.045 844.228 348.904 835.091 350.24 830.233 C 355.773 811.272 359.58 791.27 366.162 772.732 C 385.592 779.074 402.359 793.131 417.654 806.175 C 421.641 808.545 426.658 812.171 431.237 812.994 C 433.259 813.357 435.368 813.111 437.022 811.889 C 441.965 808.239 441.899 799.364 442.577 793.767 C 452.025 794.97 461.026 794.79 470.513 794.793 C 466.256 800.436 459.965 805.338 454.584 809.894 C 406.599 850.518 349.012 867.544 286.555 862.313 C 236.873 858.151 190.186 838.524 154.144 803.752 C 146.716 796.585 140.16 788.359 133.511 780.473 C 138.849 779.978 146.605 782.159 151.212 779.489 C 153.465 776.316 152.984 773.762 153.163 769.925 C 153.62 777.033 152.977 792.157 158.773 797.305 C 160.341 798.697 162.731 799.465 164.822 799.22 C 167.883 798.86 171.388 795.614 174.028 794.012 z" data-c-fill="ee7e89"/><path fill="#fefefe" d="M250.179 831.79C255.931 821.677 272.877 787.474 282.885 784.52 284.344 784.089 286.537 784.613 287.834 785.335 297.159 790.525 317.093 824.966 324.31 835.448 319.726 840.735 316.028 848.302 310.192 852.25 302.35 857.555 285.12 857.061 275.997 855.196 262.994 852.539 256.983 842.038 250.179 831.79zM366.162 772.732C385.592 779.074 402.359 793.131 417.654 806.175 416.567 818.327 415.626 828.012 405.396 836.457 397.225 843.202 385.462 845.5 375.117 844.264 366.614 843.248 356.669 838.777 351.034 832.133 350.527 831.535 350.425 830.971 350.24 830.233 355.773 811.272 359.58 791.27 366.162 772.732zM174.028 794.012C181.16 781.42 194.369 772.059 203.318 760.706 210.463 774.866 216.523 788.781 221.156 803.974 223.565 811.873 225.167 820.19 227.789 827.983 223.625 828.592 219.516 829.69 215.355 830.369 205.855 831.921 195.26 831.131 187.32 825.186 176.986 817.447 175.811 805.823 174.028 794.012zM107.848 512.837C153.484 504.476 206.193 535.131 246.794 552.053 257.406 556.476 283.981 565.546 292.35 570.741 292.65 570.927 293.122 571.315 293.372 571.512L292.393 571.811C288.735 572.911 285.21 572.958 281.592 573.83 273.606 575.755 267.228 581.108 260.92 586.042 261.012 581.081 255.468 568.236 251.952 564.515 249.522 561.943 247.922 561.644 244.616 561.556 240.131 563.483 236.928 569.447 233.853 573.2 220.024 594.69 216.161 607.429 197.497 627.611 178.562 605.061 174.558 578.135 165.326 551.04 164.99 546.712 162.287 537.469 159.424 534.223 157.484 532.025 155.653 531.419 152.807 531.159 148.996 531.807 146.393 534.774 143.636 537.273 138.893 531.623 135.424 525.206 129.981 519.991 122.976 513.28 117.055 512.6 107.848 512.837z" data-c-fill="fefefe"/><path fill="#ee7e89" d="M 107.848 512.837 C 153.484 504.476 206.193 535.131 246.794 552.053 C 257.406 556.476 283.981 565.546 292.35 570.741 C 292.65 570.927 293.122 571.315 293.372 571.512 L 292.393 571.811 C 288.735 572.911 285.21 572.958 281.592 573.83 C 273.606 575.755 267.228 581.108 260.92 586.042 C 261.012 581.081 255.468 568.236 251.952 564.515 C 249.522 561.943 247.922 561.644 244.616 561.556 C 240.131 563.483 236.928 569.447 233.853 573.2 C 226.812 559.735 218.967 545.31 204.3 538.967 C 183.168 529.829 180.033 545.534 165.989 550.816 C 165.771 550.898 165.547 550.966 165.326 551.04 C 164.99 546.712 162.287 537.469 159.424 534.223 C 157.484 532.025 155.653 531.419 152.807 531.159 C 148.996 531.807 146.393 534.774 143.636 537.273 C 138.893 531.623 135.424 525.206 129.981 519.991 C 122.976 513.28 117.055 512.6 107.848 512.837 z" data-c-fill="ee7e89"/><path fill="#fefefe" d="M 293.372 571.512 C 299.472 573.267 305.583 574.985 311.705 576.665 C 321.94 578.722 331.534 580.611 340.931 585.383 C 337.772 590.791 334.789 596.488 330.922 601.425 C 318.962 619.778 309.822 638.201 293.776 653.517 C 274.894 634.292 270.961 609.833 260.92 586.042 C 267.228 581.108 273.606 575.755 281.592 573.83 C 285.21 572.958 288.735 572.911 292.393 571.811 L 293.372 571.512 z" data-c-fill="fefefe"/><path fill="#ee7e89" d="M 311.705 576.665 C 321.94 578.722 331.534 580.611 340.931 585.383 C 337.772 590.791 334.789 596.488 330.922 601.425 C 324.358 593.597 317.576 585.015 311.705 576.665 z" data-c-fill="ee7e89"/><path fill="#fefefe" d="M 354.364 586.478 C 365.774 588.16 377.256 589.334 388.65 591.135 C 400.034 590.789 411.425 590.656 422.815 590.737 C 429.055 589.814 435.432 589.984 441.728 589.929 L 435.534 600.348 C 432.29 609.359 409.144 656.517 401.766 659.518 C 400.617 659.985 399.817 659.558 398.729 659.028 C 387.926 653.766 369.58 616.849 363.517 604.81 C 361.134 598.529 357.469 592.446 354.364 586.478 z" data-c-fill="fefefe"/><path fill="#ee7e89" d="M354.364 586.478C365.774 588.16 377.256 589.334 388.65 591.135 382.382 595.815 371.122 602.75 363.517 604.81 361.134 598.529 357.469 592.446 354.364 586.478zM422.815 590.737C429.055 589.814 435.432 589.984 441.728 589.929L435.534 600.348C430.861 597.837 425.215 595.737 422.815 590.737z" data-c-fill="ee7e89"/><path fill="#fefefe" d="M109.513 583.202C98.8791 567.227 89.5862 545.624 85.9714 526.679 85.5478 524.459 85.1302 521.756 86.5804 519.861 90.4812 514.762 101.864 513.76 107.848 512.837 117.055 512.6 122.976 513.28 129.981 519.991 135.424 525.206 138.893 531.623 143.636 537.273 131.735 552.274 122.199 568.758 109.513 583.202zM442.577 793.767C443.834 782.463 445.022 743.648 450.022 737.126 452.398 735.387 454.223 735.079 457.133 735.577 472.431 738.191 488.678 751.085 501.793 758.8 491.693 770.553 482.144 784.592 470.513 794.793 461.026 794.79 452.025 794.97 442.577 793.767zM478.353 584.316C493.605 579.212 508.89 575.989 524.594 572.749 519.044 596.584 514.154 618.141 502.556 639.904 488.057 627.568 477.343 613.338 466.315 597.976 462.994 594.134 459.652 590.309 456.29 586.502L478.353 584.316z" data-c-fill="fefefe"/><path fill="#ee7e89" d="M 456.29 586.502 L 478.353 584.316 C 474.773 589.316 470.958 593.915 466.315 597.976 C 462.994 594.134 459.652 590.309 456.29 586.502 z" data-c-fill="ee7e89"/><path fill="#fefefe" d="M 108.706 739.749 C 121.224 732.177 133.106 724.104 147.284 720.004 C 151.923 736.712 152.942 752.628 153.163 769.925 C 152.984 773.762 153.465 776.316 151.212 779.489 C 146.605 782.159 138.849 779.978 133.511 780.473 C 124.901 767.061 116.598 753.592 108.706 739.749 z" data-c-fill="fefefe"/><path fill="#e0dfdf" d="M184.105 893.933C184.476 893.927 184.847 893.929 185.217 893.916 186.395 893.876 187.522 893.817 188.693 894.043 196.269 895.5 205.153 900.775 212.213 903.971 234.393 914.013 255.287 922.938 279.705 925.85 300.652 928.349 322.419 929.088 343.482 927.615 355.86 926.749 384.464 919.979 394.711 922.131 396.334 922.471 396.256 922.776 397.122 924.176 395.771 927.341 392.588 928.466 389.687 930 383.192 932.989 376.418 935.333 369.464 936.998 326.374 947.763 285.1 945.06 243.014 931.5 230.766 927.554 218.67 923.339 207.596 916.679 199.987 912.103 186.29 902.802 184.105 893.933zM129.543 340.364C160.849 337.069 200.712 348.562 225.936 367.11 230.009 370.105 235.246 374.198 236.036 379.513 235.239 381.971 235.096 382.147 232.996 383.659 225.173 384.41 213.76 374.799 206.576 371.159 180.883 358.232 145.871 351.608 117.37 357.416 110.787 358.757 99.8924 364.249 93.3778 362.577 91.3004 362.043 91.2165 361.66 90.2378 359.796 90.7852 356.747 92.4377 354.96 94.4514 352.782 101.724 344.916 119.128 341.677 129.543 340.364zM131.559 382.429C159.852 379.333 196.567 392.237 221.222 405.536 226.047 408.139 232.761 412.007 234.425 417.58 233.884 420.365 233.547 420.595 231.476 422.582 224.597 423.985 207.541 413.033 199.666 410.057 176.013 400.037 144.214 393.038 118.543 397.299 108.873 398.904 99.7148 404.084 89.8787 404.802 87.5387 403.746 87.4613 403.764 86.4203 401.431 86.5795 398.761 87.5455 396.75 89.1875 394.643 96.2037 385.64 120.672 383.588 131.559 382.429zM133.03 301.401C159.513 298.523 194.902 306.078 216.155 322.534 219.861 325.404 224.477 329.574 225.054 334.482L223.645 336.019C214.344 337.528 205.735 331.369 197.66 327.391 173.842 315.273 148.65 313.209 122.355 316.763 116.713 317.525 110.935 320.618 105.392 320.764 102.769 320.834 102.027 320.538 100.16 318.792 99.9196 316 101.347 314.033 103.025 311.896 108.464 304.969 124.705 302.314 133.03 301.401z" data-c-fill="e0dfdf"/><path fill="#000000" d="M 89.852 230.128 C 97.329 230.501 99.605 232.25 104.772 237.515 C 106.093 246.907 105.694 256.059 105.027 265.476 C 101.428 268.973 98.2582 271.776 93.7467 274.02 C 91.0726 274.199 87.9395 274.574 85.4854 273.288 C 82.4995 271.722 80.615 268.57 79.5022 265.488 C 76.3134 256.654 78.189 244.591 82.2875 236.329 C 84.1027 232.67 86.0056 231.415 89.852 230.128 z" data-c-fill="10001"/><path fill="#e0dfdf" d="M 224.82 933.975 C 228.953 934.033 289.581 951.633 293.744 953.589 C 294.703 954.039 294.93 955.6 295.291 956.587 C 290.876 956.332 286.426 955.965 282.045 955.354 C 266.291 953.156 234.946 947.395 224.82 933.975 z" data-c-fill="e0dfdf"/><path fill="#60656f" d="M 124.864 904.46 C 143.048 930.876 189.91 970.46 219.648 983.641 C 203.764 990.501 188.769 997.518 172.315 1003.02 L 169.395 1003.98 C 150.24 1010.22 117.535 1019.48 98.5818 1009.51 C 93.8867 1007.04 90.5109 1003.05 89.0505 997.93 C 82.3462 974.434 113.313 924.889 124.864 904.46 z" data-c-fill="60656f"/></svg>
@@ -0,0 +1,30 @@
1
+ @import 'tailwindcss';
2
+
3
+ :root {
4
+ font-family: system-ui, Avenir, Helvetica, Arial, sans-serif;
5
+ line-height: 1.5;
6
+ font-weight: 400;
7
+
8
+ color-scheme: light;
9
+ color: #213547;
10
+ background-color: #ffffff;
11
+
12
+ font-synthesis: none;
13
+ text-rendering: optimizeLegibility;
14
+ -webkit-font-smoothing: antialiased;
15
+ -moz-osx-font-smoothing: grayscale;
16
+ }
17
+
18
+ body {
19
+ margin: 0;
20
+ display: flex;
21
+ place-items: center;
22
+ min-width: 320px;
23
+ min-height: 100vh;
24
+ }
25
+
26
+ #app {
27
+ width: 100%;
28
+ margin: 0 auto;
29
+ text-align: center;
30
+ }
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" class="iconify iconify--logos" width="31.88" height="32" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 257"><defs><linearGradient id="IconifyId1813088fe1fbc01fb466" x1="-.828%" x2="57.636%" y1="7.652%" y2="78.411%"><stop offset="0%" stop-color="#41D1FF"></stop><stop offset="100%" stop-color="#BD34FE"></stop></linearGradient><linearGradient id="IconifyId1813088fe1fbc01fb467" x1="43.376%" x2="50.316%" y1="2.242%" y2="89.03%"><stop offset="0%" stop-color="#FFEA83"></stop><stop offset="8.333%" stop-color="#FFDD35"></stop><stop offset="100%" stop-color="#FFA800"></stop></linearGradient></defs><path fill="url(#IconifyId1813088fe1fbc01fb466)" d="M255.153 37.938L134.897 252.976c-2.483 4.44-8.862 4.466-11.382.048L.875 37.958c-2.746-4.814 1.371-10.646 6.827-9.67l120.385 21.517a6.537 6.537 0 0 0 2.322-.004l117.867-21.483c5.438-.991 9.574 4.796 6.877 9.62Z"></path><path fill="url(#IconifyId1813088fe1fbc01fb467)" d="M185.432.063L96.44 17.501a3.268 3.268 0 0 0-2.634 3.014l-5.474 92.456a3.268 3.268 0 0 0 3.997 3.378l24.777-5.718c2.318-.535 4.413 1.507 3.936 3.838l-7.361 36.047c-.495 2.426 1.782 4.5 4.151 3.78l15.304-4.649c2.372-.72 4.652 1.36 4.15 3.788l-11.698 56.621c-.732 3.542 3.979 5.473 5.943 2.437l1.313-2.028l72.516-144.72c1.215-2.423-.88-5.186-3.54-4.672l-25.505 4.922c-2.396.462-4.435-1.77-3.759-4.114l16.646-57.705c.677-2.35-1.37-4.583-3.769-4.113Z"></path></svg>
@@ -0,0 +1,10 @@
1
+ import { sxzz } from '@sxzz/eslint-config'
2
+ import react from 'eslint-plugin-react'
3
+
4
+ export default sxzz().append({
5
+ plugins: { react },
6
+ rules: {
7
+ 'react/jsx-uses-react': 'error',
8
+ 'react/jsx-uses-vars': 'error',
9
+ },
10
+ })
@@ -0,0 +1,13 @@
1
+ <!doctype html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8" />
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
6
+ <link rel="icon" type="image/svg+xml" href="/zess.svg" />
7
+ <title>Zess App</title>
8
+ </head>
9
+ <body>
10
+ <div id="app"></div>
11
+ <script type="module" src="/src/App.jsx"></script>
12
+ </body>
13
+ </html>
@@ -0,0 +1,11 @@
1
+ {
2
+ "compilerOptions": {
3
+ "target": "ESNext",
4
+ "jsx": "preserve",
5
+ "jsxImportSource": "@zessjs/core",
6
+ "lib": ["ESNext", "DOM", "DOM.Iterable"],
7
+ "types": ["vite/client", "vitest/jsdom"],
8
+ "moduleResolution": "bundler"
9
+ },
10
+ "include": ["src", "tests"]
11
+ }
@@ -0,0 +1,101 @@
1
+ import { render } from '@zessjs/core'
2
+ import { Link, Route, Router } from '@zessjs/router'
3
+ import viteLogo from './assets/vite.svg'
4
+ import ConditionalPage from './pages/ConditionalPage'
5
+ import CounterPage from './pages/CounterPage'
6
+ import HomePage from './pages/HomePage'
7
+ import ListPage from './pages/ListPage'
8
+ import './assets/style.css'
9
+ import zessLogo from '/zess.svg'
10
+
11
+ const AppLayout = (props) => (
12
+ <div class="min-h-screen flex flex-col items-center bg-gradient-to-br from-blue-100 via-white to-yellow-100">
13
+ <nav class="w-full py-4 flex justify-center">
14
+ <div class="flex space-x-6 md:space-x-8">
15
+ {/* Home page link - active when at root URL */}
16
+ <Link
17
+ end
18
+ to="/"
19
+ class="text-gray-700 hover:text-indigo-600 transition-all duration-200"
20
+ activeClass="text-indigo-600 font-semibold"
21
+ >
22
+ Home
23
+ </Link>
24
+ {/* Counter page link */}
25
+ <Link
26
+ end
27
+ to="counter"
28
+ class="text-gray-700 hover:text-indigo-600 transition-all duration-200"
29
+ activeClass="text-indigo-600 font-semibold"
30
+ >
31
+ Counter
32
+ </Link>
33
+ {/* List page link */}
34
+ <Link
35
+ end
36
+ to="list"
37
+ class="text-gray-700 hover:text-indigo-600 transition-all duration-200"
38
+ activeClass="text-indigo-600 font-semibold"
39
+ >
40
+ List
41
+ </Link>
42
+ {/* Conditional page link */}
43
+ <Link
44
+ end
45
+ to="conditional"
46
+ class="text-gray-700 hover:text-indigo-600 transition-all duration-200"
47
+ activeClass="text-indigo-600 font-semibold"
48
+ >
49
+ Conditional
50
+ </Link>
51
+ </div>
52
+ </nav>
53
+ <div class="flex flex-col md:flex-row items-center justify-center my-8 md:my-12 space-y-4 md:space-y-0 md:space-x-12">
54
+ <img
55
+ src={zessLogo}
56
+ class="h-32 md:h-40 transition-all duration-300 hover:drop-shadow-[0_0_2em_#646cffaa]"
57
+ alt="Zess logo"
58
+ />
59
+ <img
60
+ src={viteLogo}
61
+ class="h-32 md:h-40 transition-all duration-300 hover:drop-shadow-[0_0_2em_#646cffaa]"
62
+ alt="Vite logo"
63
+ />
64
+ </div>
65
+ <h1 class="text-5xl md:text-6xl font-bold mb-8 md:mb-12">Hello Zess!</h1>
66
+ <main class="w-full max-w-4xl px-4 pb-12">{props.children}</main>
67
+ </div>
68
+ )
69
+
70
+ const ZessApp = () => (
71
+ <Router root={AppLayout} mode="history">
72
+ {/* Route for Home page */}
73
+ <Route path="/" component={HomePage} />
74
+ {/* Route for Counter page */}
75
+ <Route path="counter" component={CounterPage} />
76
+ {/* Route for List page */}
77
+ <Route path="list" component={ListPage} />
78
+ {/* Route for Conditional page */}
79
+ <Route path="conditional" component={ConditionalPage} />
80
+ {/* Catch-all route for 404 page not found */}
81
+ <Route
82
+ path="*"
83
+ component={() => (
84
+ <div class="text-center py-16">
85
+ <h1 class="text-4xl font-bold mb-4">404</h1>
86
+ <p class="text-xl text-gray-600 mb-8">Page not found</p>
87
+ {/* Link to home page */}
88
+ <Link
89
+ to="/"
90
+ relative={false}
91
+ class="inline-block px-6 py-3 bg-indigo-600 hover:bg-indigo-700 text-white rounded transition-all"
92
+ >
93
+ Go back to Home
94
+ </Link>
95
+ </div>
96
+ )}
97
+ />
98
+ </Router>
99
+ )
100
+
101
+ render(() => <ZessApp />, document.querySelector('#app'))