diff --git a/package.json b/package.json
index 68b1c100c2..701f641397 100644
--- a/package.json
+++ b/package.json
@@ -13,7 +13,9 @@
"format": "prettier --plugin-search-dir . --write .",
"test:integration": "playwright test",
"test:unit": "vitest",
- "icons:build": "node ./src/icons/build.js"
+ "icons:build": "node ./src/icons/build.js",
+ "icons:optimize": "node ./src/icons/optimize.js",
+ "icons:generate": "node ./src/icons/optimize.js && node ./src/icons/build.js"
},
"devDependencies": {
"@melt-ui/pp": "^0.1.2",
@@ -33,6 +35,7 @@
"eslint-plugin-svelte": "^2.33.1",
"glob": "^10.3.10",
"openapi-types": "^12.1.3",
+ "oslllo-svg-fixer": "^3.0.0",
"prettier": "^2.8.8",
"prettier-plugin-svelte": "^2.10.1",
"sass": "^1.66.1",
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index cbe3faf849..fbb06379c2 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -91,6 +91,9 @@ devDependencies:
openapi-types:
specifier: ^12.1.3
version: 12.1.3
+ oslllo-svg-fixer:
+ specifier: ^3.0.0
+ version: 3.0.0
prettier:
specifier: ^2.8.8
version: 2.8.8
@@ -164,6 +167,17 @@ packages:
the-new-css-reset: 1.9.0
dev: false
+ /@assemblyscript/loader@0.10.1:
+ resolution: {integrity: sha512-H71nDOOL8Y7kWRLqf6Sums+01Q5msqBW2KhDUTemh1tvY04eSkSXrK0uj/4mmY0Xr16/3zyZmsrxN7CKuRbNRg==}
+ dev: true
+
+ /@babel/runtime@7.23.2:
+ resolution: {integrity: sha512-mM8eg4yl5D6i3lu2QKPuPH4FArvJ8KhTofbE7jwMUv9KX5mBvwPAqnV3MlyBNqdp9RyRKP6Yck8TrfYrPvX3bg==}
+ engines: {node: '>=6.9.0'}
+ dependencies:
+ regenerator-runtime: 0.14.0
+ dev: true
+
/@esbuild/android-arm64@0.18.20:
resolution: {integrity: sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==}
engines: {node: '>=12'}
@@ -455,6 +469,381 @@ packages:
'@sinclair/typebox': 0.27.8
dev: true
+ /@jimp/bmp@0.16.13(@jimp/custom@0.16.13):
+ resolution: {integrity: sha512-9edAxu7N2FX7vzkdl5Jo1BbACfycUtBQX+XBMcHA2bk62P8R0otgkHg798frgAk/WxQIzwxqOH6wMiCwrlAzdQ==}
+ peerDependencies:
+ '@jimp/custom': '>=0.3.5'
+ dependencies:
+ '@babel/runtime': 7.23.2
+ '@jimp/custom': 0.16.13
+ '@jimp/utils': 0.16.13
+ bmp-js: 0.1.0
+ dev: true
+
+ /@jimp/core@0.16.13:
+ resolution: {integrity: sha512-qXpA1tzTnlkTku9yqtuRtS/wVntvE6f3m3GNxdTdtmc+O+Wcg9Xo2ABPMh7Nc0AHbMKzwvwgB2JnjZmlmJEObg==}
+ dependencies:
+ '@babel/runtime': 7.23.2
+ '@jimp/utils': 0.16.13
+ any-base: 1.1.0
+ buffer: 5.7.1
+ exif-parser: 0.1.12
+ file-type: 16.5.4
+ load-bmfont: 1.4.1
+ mkdirp: 0.5.6
+ phin: 2.9.3
+ pixelmatch: 4.0.2
+ tinycolor2: 1.6.0
+ dev: true
+
+ /@jimp/custom@0.16.13:
+ resolution: {integrity: sha512-LTATglVUPGkPf15zX1wTMlZ0+AU7cGEGF6ekVF1crA8eHUWsGjrYTB+Ht4E3HTrCok8weQG+K01rJndCp/l4XA==}
+ dependencies:
+ '@babel/runtime': 7.23.2
+ '@jimp/core': 0.16.13
+ dev: true
+
+ /@jimp/gif@0.16.13(@jimp/custom@0.16.13):
+ resolution: {integrity: sha512-yFAMZGv3o+YcjXilMWWwS/bv1iSqykFahFMSO169uVMtfQVfa90kt4/kDwrXNR6Q9i6VHpFiGZMlF2UnHClBvg==}
+ peerDependencies:
+ '@jimp/custom': '>=0.3.5'
+ dependencies:
+ '@babel/runtime': 7.23.2
+ '@jimp/custom': 0.16.13
+ '@jimp/utils': 0.16.13
+ gifwrap: 0.9.4
+ omggif: 1.0.10
+ dev: true
+
+ /@jimp/jpeg@0.16.13(@jimp/custom@0.16.13):
+ resolution: {integrity: sha512-BJHlDxzTlCqP2ThqP8J0eDrbBfod7npWCbJAcfkKqdQuFk0zBPaZ6KKaQKyKxmWJ87Z6ohANZoMKEbtvrwz1AA==}
+ peerDependencies:
+ '@jimp/custom': '>=0.3.5'
+ dependencies:
+ '@babel/runtime': 7.23.2
+ '@jimp/custom': 0.16.13
+ '@jimp/utils': 0.16.13
+ jpeg-js: 0.4.4
+ dev: true
+
+ /@jimp/plugin-blit@0.16.13(@jimp/custom@0.16.13):
+ resolution: {integrity: sha512-8Z1k96ZFxlhK2bgrY1JNWNwvaBeI/bciLM0yDOni2+aZwfIIiC7Y6PeWHTAvjHNjphz+XCt01WQmOYWCn0ML6g==}
+ peerDependencies:
+ '@jimp/custom': '>=0.3.5'
+ dependencies:
+ '@babel/runtime': 7.23.2
+ '@jimp/custom': 0.16.13
+ '@jimp/utils': 0.16.13
+ dev: true
+
+ /@jimp/plugin-blur@0.16.13(@jimp/custom@0.16.13):
+ resolution: {integrity: sha512-PvLrfa8vkej3qinlebyhLpksJgCF5aiysDMSVhOZqwH5nQLLtDE9WYbnsofGw4r0VVpyw3H/ANCIzYTyCtP9Cg==}
+ peerDependencies:
+ '@jimp/custom': '>=0.3.5'
+ dependencies:
+ '@babel/runtime': 7.23.2
+ '@jimp/custom': 0.16.13
+ '@jimp/utils': 0.16.13
+ dev: true
+
+ /@jimp/plugin-circle@0.16.13(@jimp/custom@0.16.13):
+ resolution: {integrity: sha512-RNave7EFgZrb5V5EpdvJGAEHMnDAJuwv05hKscNfIYxf0kR3KhViBTDy+MoTnMlIvaKFULfwIgaZWzyhuINMzA==}
+ peerDependencies:
+ '@jimp/custom': '>=0.3.5'
+ dependencies:
+ '@babel/runtime': 7.23.2
+ '@jimp/custom': 0.16.13
+ '@jimp/utils': 0.16.13
+ dev: true
+
+ /@jimp/plugin-color@0.16.13(@jimp/custom@0.16.13):
+ resolution: {integrity: sha512-xW+9BtEvoIkkH/Wde9ql4nAFbYLkVINhpgAE7VcBUsuuB34WUbcBl/taOuUYQrPEFQJ4jfXiAJZ2H/rvKjCVnQ==}
+ peerDependencies:
+ '@jimp/custom': '>=0.3.5'
+ dependencies:
+ '@babel/runtime': 7.23.2
+ '@jimp/custom': 0.16.13
+ '@jimp/utils': 0.16.13
+ tinycolor2: 1.6.0
+ dev: true
+
+ /@jimp/plugin-contain@0.16.13(@jimp/custom@0.16.13)(@jimp/plugin-blit@0.16.13)(@jimp/plugin-resize@0.16.13)(@jimp/plugin-scale@0.16.13):
+ resolution: {integrity: sha512-QayTXw4tXMwU6q6acNTQrTTFTXpNRBe+MgTGMDU0lk+23PjlFCO/9sacflelG8lsp7vNHhAxFeHptDMAksEYzg==}
+ peerDependencies:
+ '@jimp/custom': '>=0.3.5'
+ '@jimp/plugin-blit': '>=0.3.5'
+ '@jimp/plugin-resize': '>=0.3.5'
+ '@jimp/plugin-scale': '>=0.3.5'
+ dependencies:
+ '@babel/runtime': 7.23.2
+ '@jimp/custom': 0.16.13
+ '@jimp/plugin-blit': 0.16.13(@jimp/custom@0.16.13)
+ '@jimp/plugin-resize': 0.16.13(@jimp/custom@0.16.13)
+ '@jimp/plugin-scale': 0.16.13(@jimp/custom@0.16.13)(@jimp/plugin-resize@0.16.13)
+ '@jimp/utils': 0.16.13
+ dev: true
+
+ /@jimp/plugin-cover@0.16.13(@jimp/custom@0.16.13)(@jimp/plugin-crop@0.16.13)(@jimp/plugin-resize@0.16.13)(@jimp/plugin-scale@0.16.13):
+ resolution: {integrity: sha512-BSsP71GTNaqWRcvkbWuIVH+zK7b3TSNebbhDkFK0fVaUTzHuKMS/mgY4hDZIEVt7Rf5FjadAYtsujHN9w0iSYA==}
+ peerDependencies:
+ '@jimp/custom': '>=0.3.5'
+ '@jimp/plugin-crop': '>=0.3.5'
+ '@jimp/plugin-resize': '>=0.3.5'
+ '@jimp/plugin-scale': '>=0.3.5'
+ dependencies:
+ '@babel/runtime': 7.23.2
+ '@jimp/custom': 0.16.13
+ '@jimp/plugin-crop': 0.16.13(@jimp/custom@0.16.13)
+ '@jimp/plugin-resize': 0.16.13(@jimp/custom@0.16.13)
+ '@jimp/plugin-scale': 0.16.13(@jimp/custom@0.16.13)(@jimp/plugin-resize@0.16.13)
+ '@jimp/utils': 0.16.13
+ dev: true
+
+ /@jimp/plugin-crop@0.16.13(@jimp/custom@0.16.13):
+ resolution: {integrity: sha512-WEl2tPVYwzYL8OKme6Go2xqiWgKsgxlMwyHabdAU4tXaRwOCnOI7v4021gCcBb9zn/oWwguHuKHmK30Fw2Z/PA==}
+ peerDependencies:
+ '@jimp/custom': '>=0.3.5'
+ dependencies:
+ '@babel/runtime': 7.23.2
+ '@jimp/custom': 0.16.13
+ '@jimp/utils': 0.16.13
+ dev: true
+
+ /@jimp/plugin-displace@0.16.13(@jimp/custom@0.16.13):
+ resolution: {integrity: sha512-qt9WKq8vWrcjySa9DyQ0x/RBMHQeiVjdVSY1SJsMjssPUf0pS74qorcuAkGi89biN3YoGUgPkpqECnAWnYwgGA==}
+ peerDependencies:
+ '@jimp/custom': '>=0.3.5'
+ dependencies:
+ '@babel/runtime': 7.23.2
+ '@jimp/custom': 0.16.13
+ '@jimp/utils': 0.16.13
+ dev: true
+
+ /@jimp/plugin-dither@0.16.13(@jimp/custom@0.16.13):
+ resolution: {integrity: sha512-5/N3yJggbWQTlGZHQYJPmQXEwR52qaXjEzkp1yRBbtdaekXE3BG/suo0fqeoV/csf8ooI78sJzYmIrxNoWVtgQ==}
+ peerDependencies:
+ '@jimp/custom': '>=0.3.5'
+ dependencies:
+ '@babel/runtime': 7.23.2
+ '@jimp/custom': 0.16.13
+ '@jimp/utils': 0.16.13
+ dev: true
+
+ /@jimp/plugin-fisheye@0.16.13(@jimp/custom@0.16.13):
+ resolution: {integrity: sha512-2rZmTdFbT/cF9lEZIkXCYO0TsT114Q27AX5IAo0Sju6jVQbvIk1dFUTnwLDadTo8wkJlFzGqMQ24Cs8cHWOliA==}
+ peerDependencies:
+ '@jimp/custom': '>=0.3.5'
+ dependencies:
+ '@babel/runtime': 7.23.2
+ '@jimp/custom': 0.16.13
+ '@jimp/utils': 0.16.13
+ dev: true
+
+ /@jimp/plugin-flip@0.16.13(@jimp/custom@0.16.13)(@jimp/plugin-rotate@0.16.13):
+ resolution: {integrity: sha512-EmcgAA74FTc5u7Z+hUO/sRjWwfPPLuOQP5O64x5g4j0T12Bd29IgsYZxoutZo/rb3579+JNa/3wsSEmyVv1EpA==}
+ peerDependencies:
+ '@jimp/custom': '>=0.3.5'
+ '@jimp/plugin-rotate': '>=0.3.5'
+ dependencies:
+ '@babel/runtime': 7.23.2
+ '@jimp/custom': 0.16.13
+ '@jimp/plugin-rotate': 0.16.13(@jimp/custom@0.16.13)(@jimp/plugin-blit@0.16.13)(@jimp/plugin-crop@0.16.13)(@jimp/plugin-resize@0.16.13)
+ '@jimp/utils': 0.16.13
+ dev: true
+
+ /@jimp/plugin-gaussian@0.16.13(@jimp/custom@0.16.13):
+ resolution: {integrity: sha512-A1XKfGQD0iDdIiKqFYi8nZMv4dDVYdxbrmgR7y/CzUHhSYdcmoljLIIsZZM3Iks/Wa353W3vtvkWLuDbQbch1w==}
+ peerDependencies:
+ '@jimp/custom': '>=0.3.5'
+ dependencies:
+ '@babel/runtime': 7.23.2
+ '@jimp/custom': 0.16.13
+ '@jimp/utils': 0.16.13
+ dev: true
+
+ /@jimp/plugin-invert@0.16.13(@jimp/custom@0.16.13):
+ resolution: {integrity: sha512-xFMrIn7czEZbdbMzZWuaZFnlLGJDVJ82y5vlsKsXRTG2kcxRsMPXvZRWHV57nSs1YFsNqXSbrC8B98n0E32njQ==}
+ peerDependencies:
+ '@jimp/custom': '>=0.3.5'
+ dependencies:
+ '@babel/runtime': 7.23.2
+ '@jimp/custom': 0.16.13
+ '@jimp/utils': 0.16.13
+ dev: true
+
+ /@jimp/plugin-mask@0.16.13(@jimp/custom@0.16.13):
+ resolution: {integrity: sha512-wLRYKVBXql2GAYgt6FkTnCfE+q5NomM7Dlh0oIPGAoMBWDyTx0eYutRK6PlUrRK2yMHuroAJCglICTbxqGzowQ==}
+ peerDependencies:
+ '@jimp/custom': '>=0.3.5'
+ dependencies:
+ '@babel/runtime': 7.23.2
+ '@jimp/custom': 0.16.13
+ '@jimp/utils': 0.16.13
+ dev: true
+
+ /@jimp/plugin-normalize@0.16.13(@jimp/custom@0.16.13):
+ resolution: {integrity: sha512-3tfad0n9soRna4IfW9NzQdQ2Z3ijkmo21DREHbE6CGcMIxOSvfRdSvf1qQPApxjTSo8LTU4MCi/fidx/NZ0GqQ==}
+ peerDependencies:
+ '@jimp/custom': '>=0.3.5'
+ dependencies:
+ '@babel/runtime': 7.23.2
+ '@jimp/custom': 0.16.13
+ '@jimp/utils': 0.16.13
+ dev: true
+
+ /@jimp/plugin-print@0.16.13(@jimp/custom@0.16.13)(@jimp/plugin-blit@0.16.13):
+ resolution: {integrity: sha512-0m6i3p01PGRkGAK9r53hDYrkyMq+tlhLOIbsSTmZyh6HLshUKlTB7eXskF5OpVd5ZUHoltlNc6R+ggvKIzxRFw==}
+ peerDependencies:
+ '@jimp/custom': '>=0.3.5'
+ '@jimp/plugin-blit': '>=0.3.5'
+ dependencies:
+ '@babel/runtime': 7.23.2
+ '@jimp/custom': 0.16.13
+ '@jimp/plugin-blit': 0.16.13(@jimp/custom@0.16.13)
+ '@jimp/utils': 0.16.13
+ load-bmfont: 1.4.1
+ dev: true
+
+ /@jimp/plugin-resize@0.16.13(@jimp/custom@0.16.13):
+ resolution: {integrity: sha512-qoqtN8LDknm3fJm9nuPygJv30O3vGhSBD2TxrsCnhtOsxKAqVPJtFVdGd/qVuZ8nqQANQmTlfqTiK9mVWQ7MiQ==}
+ peerDependencies:
+ '@jimp/custom': '>=0.3.5'
+ dependencies:
+ '@babel/runtime': 7.23.2
+ '@jimp/custom': 0.16.13
+ '@jimp/utils': 0.16.13
+ dev: true
+
+ /@jimp/plugin-rotate@0.16.13(@jimp/custom@0.16.13)(@jimp/plugin-blit@0.16.13)(@jimp/plugin-crop@0.16.13)(@jimp/plugin-resize@0.16.13):
+ resolution: {integrity: sha512-Ev+Jjmj1nHYw897z9C3R9dYsPv7S2/nxdgfFb/h8hOwK0Ovd1k/+yYS46A0uj/JCKK0pQk8wOslYBkPwdnLorw==}
+ peerDependencies:
+ '@jimp/custom': '>=0.3.5'
+ '@jimp/plugin-blit': '>=0.3.5'
+ '@jimp/plugin-crop': '>=0.3.5'
+ '@jimp/plugin-resize': '>=0.3.5'
+ dependencies:
+ '@babel/runtime': 7.23.2
+ '@jimp/custom': 0.16.13
+ '@jimp/plugin-blit': 0.16.13(@jimp/custom@0.16.13)
+ '@jimp/plugin-crop': 0.16.13(@jimp/custom@0.16.13)
+ '@jimp/plugin-resize': 0.16.13(@jimp/custom@0.16.13)
+ '@jimp/utils': 0.16.13
+ dev: true
+
+ /@jimp/plugin-scale@0.16.13(@jimp/custom@0.16.13)(@jimp/plugin-resize@0.16.13):
+ resolution: {integrity: sha512-05POQaEJVucjTiSGMoH68ZiELc7QqpIpuQlZ2JBbhCV+WCbPFUBcGSmE7w4Jd0E2GvCho/NoMODLwgcVGQA97A==}
+ peerDependencies:
+ '@jimp/custom': '>=0.3.5'
+ '@jimp/plugin-resize': '>=0.3.5'
+ dependencies:
+ '@babel/runtime': 7.23.2
+ '@jimp/custom': 0.16.13
+ '@jimp/plugin-resize': 0.16.13(@jimp/custom@0.16.13)
+ '@jimp/utils': 0.16.13
+ dev: true
+
+ /@jimp/plugin-shadow@0.16.13(@jimp/custom@0.16.13)(@jimp/plugin-blur@0.16.13)(@jimp/plugin-resize@0.16.13):
+ resolution: {integrity: sha512-nmu5VSZ9hsB1JchTKhnnCY+paRBnwzSyK5fhkhtQHHoFD5ArBQ/5wU8y6tCr7k/GQhhGq1OrixsECeMjPoc8Zw==}
+ peerDependencies:
+ '@jimp/custom': '>=0.3.5'
+ '@jimp/plugin-blur': '>=0.3.5'
+ '@jimp/plugin-resize': '>=0.3.5'
+ dependencies:
+ '@babel/runtime': 7.23.2
+ '@jimp/custom': 0.16.13
+ '@jimp/plugin-blur': 0.16.13(@jimp/custom@0.16.13)
+ '@jimp/plugin-resize': 0.16.13(@jimp/custom@0.16.13)
+ '@jimp/utils': 0.16.13
+ dev: true
+
+ /@jimp/plugin-threshold@0.16.13(@jimp/custom@0.16.13)(@jimp/plugin-color@0.16.13)(@jimp/plugin-resize@0.16.13):
+ resolution: {integrity: sha512-+3zArBH0OE3Rhjm4HyAokMsZlIq5gpQec33CncyoSwxtRBM2WAhUVmCUKuBo+Lr/2/4ISoY4BWpHKhMLDix6cA==}
+ peerDependencies:
+ '@jimp/custom': '>=0.3.5'
+ '@jimp/plugin-color': '>=0.8.0'
+ '@jimp/plugin-resize': '>=0.8.0'
+ dependencies:
+ '@babel/runtime': 7.23.2
+ '@jimp/custom': 0.16.13
+ '@jimp/plugin-color': 0.16.13(@jimp/custom@0.16.13)
+ '@jimp/plugin-resize': 0.16.13(@jimp/custom@0.16.13)
+ '@jimp/utils': 0.16.13
+ dev: true
+
+ /@jimp/plugins@0.16.13(@jimp/custom@0.16.13):
+ resolution: {integrity: sha512-CJLdqODEhEVs4MgWCxpWL5l95sCBlkuSLz65cxEm56X5akIsn4LOlwnKoSEZioYcZUBvHhCheH67AyPTudfnQQ==}
+ peerDependencies:
+ '@jimp/custom': '>=0.3.5'
+ dependencies:
+ '@babel/runtime': 7.23.2
+ '@jimp/custom': 0.16.13
+ '@jimp/plugin-blit': 0.16.13(@jimp/custom@0.16.13)
+ '@jimp/plugin-blur': 0.16.13(@jimp/custom@0.16.13)
+ '@jimp/plugin-circle': 0.16.13(@jimp/custom@0.16.13)
+ '@jimp/plugin-color': 0.16.13(@jimp/custom@0.16.13)
+ '@jimp/plugin-contain': 0.16.13(@jimp/custom@0.16.13)(@jimp/plugin-blit@0.16.13)(@jimp/plugin-resize@0.16.13)(@jimp/plugin-scale@0.16.13)
+ '@jimp/plugin-cover': 0.16.13(@jimp/custom@0.16.13)(@jimp/plugin-crop@0.16.13)(@jimp/plugin-resize@0.16.13)(@jimp/plugin-scale@0.16.13)
+ '@jimp/plugin-crop': 0.16.13(@jimp/custom@0.16.13)
+ '@jimp/plugin-displace': 0.16.13(@jimp/custom@0.16.13)
+ '@jimp/plugin-dither': 0.16.13(@jimp/custom@0.16.13)
+ '@jimp/plugin-fisheye': 0.16.13(@jimp/custom@0.16.13)
+ '@jimp/plugin-flip': 0.16.13(@jimp/custom@0.16.13)(@jimp/plugin-rotate@0.16.13)
+ '@jimp/plugin-gaussian': 0.16.13(@jimp/custom@0.16.13)
+ '@jimp/plugin-invert': 0.16.13(@jimp/custom@0.16.13)
+ '@jimp/plugin-mask': 0.16.13(@jimp/custom@0.16.13)
+ '@jimp/plugin-normalize': 0.16.13(@jimp/custom@0.16.13)
+ '@jimp/plugin-print': 0.16.13(@jimp/custom@0.16.13)(@jimp/plugin-blit@0.16.13)
+ '@jimp/plugin-resize': 0.16.13(@jimp/custom@0.16.13)
+ '@jimp/plugin-rotate': 0.16.13(@jimp/custom@0.16.13)(@jimp/plugin-blit@0.16.13)(@jimp/plugin-crop@0.16.13)(@jimp/plugin-resize@0.16.13)
+ '@jimp/plugin-scale': 0.16.13(@jimp/custom@0.16.13)(@jimp/plugin-resize@0.16.13)
+ '@jimp/plugin-shadow': 0.16.13(@jimp/custom@0.16.13)(@jimp/plugin-blur@0.16.13)(@jimp/plugin-resize@0.16.13)
+ '@jimp/plugin-threshold': 0.16.13(@jimp/custom@0.16.13)(@jimp/plugin-color@0.16.13)(@jimp/plugin-resize@0.16.13)
+ timm: 1.7.1
+ dev: true
+
+ /@jimp/png@0.16.13(@jimp/custom@0.16.13):
+ resolution: {integrity: sha512-8cGqINvbWJf1G0Her9zbq9I80roEX0A+U45xFby3tDWfzn+Zz8XKDF1Nv9VUwVx0N3zpcG1RPs9hfheG4Cq2kg==}
+ peerDependencies:
+ '@jimp/custom': '>=0.3.5'
+ dependencies:
+ '@babel/runtime': 7.23.2
+ '@jimp/custom': 0.16.13
+ '@jimp/utils': 0.16.13
+ pngjs: 3.4.0
+ dev: true
+
+ /@jimp/tiff@0.16.13(@jimp/custom@0.16.13):
+ resolution: {integrity: sha512-oJY8d9u95SwW00VPHuCNxPap6Q1+E/xM5QThb9Hu+P6EGuu6lIeLaNBMmFZyblwFbwrH+WBOZlvIzDhi4Dm/6Q==}
+ peerDependencies:
+ '@jimp/custom': '>=0.3.5'
+ dependencies:
+ '@babel/runtime': 7.23.2
+ '@jimp/custom': 0.16.13
+ utif: 2.0.1
+ dev: true
+
+ /@jimp/types@0.16.13(@jimp/custom@0.16.13):
+ resolution: {integrity: sha512-mC0yVNUobFDjoYLg4hoUwzMKgNlxynzwt3cDXzumGvRJ7Kb8qQGOWJQjQFo5OxmGExqzPphkirdbBF88RVLBCg==}
+ peerDependencies:
+ '@jimp/custom': '>=0.3.5'
+ dependencies:
+ '@babel/runtime': 7.23.2
+ '@jimp/bmp': 0.16.13(@jimp/custom@0.16.13)
+ '@jimp/custom': 0.16.13
+ '@jimp/gif': 0.16.13(@jimp/custom@0.16.13)
+ '@jimp/jpeg': 0.16.13(@jimp/custom@0.16.13)
+ '@jimp/png': 0.16.13(@jimp/custom@0.16.13)
+ '@jimp/tiff': 0.16.13(@jimp/custom@0.16.13)
+ timm: 1.7.1
+ dev: true
+
+ /@jimp/utils@0.16.13:
+ resolution: {integrity: sha512-VyCpkZzFTHXtKgVO35iKN0sYR10psGpV6SkcSeV4oF7eSYlR8Bl6aQLCzVeFjvESF7mxTmIiI3/XrMobVrtxDA==}
+ dependencies:
+ '@babel/runtime': 7.23.2
+ regenerator-runtime: 0.13.11
+ dev: true
+
/@jridgewell/gen-mapping@0.3.3:
resolution: {integrity: sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==}
engines: {node: '>=6.0.0'}
@@ -642,6 +1031,132 @@ packages:
resolution: {integrity: sha512-a5Sab1C4/icpTZVzZc5Ghpz88yQtGOyNqYXcZgOssB2uuAr+wF/MvN6bgtW32q7HHrvBki+BsZ0OuNv6EV3K9g==}
dev: true
+ /@resvg/resvg-js-android-arm-eabi@2.4.1:
+ resolution: {integrity: sha512-AA6f7hS0FAPpvQMhBCf6f1oD1LdlqNXKCxAAPpKh6tR11kqV0YIB9zOlIYgITM14mq2YooLFl6XIbbvmY+jwUw==}
+ engines: {node: '>= 10'}
+ cpu: [arm]
+ os: [android]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@resvg/resvg-js-android-arm64@2.4.1:
+ resolution: {integrity: sha512-/QleoRdPfsEuH9jUjilYcDtKK/BkmWcK+1LXM8L2nsnf/CI8EnFyv7ZzCj4xAIvZGAy9dTYr/5NZBcTwxG2HQg==}
+ engines: {node: '>= 10'}
+ cpu: [arm64]
+ os: [android]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@resvg/resvg-js-darwin-arm64@2.4.1:
+ resolution: {integrity: sha512-U1oMNhea+kAXgiEXgzo7EbFGCD1Edq5aSlQoe6LMly6UjHzgx2W3N5kEXCwU/CgN5FiQhZr7PlSJSlcr7mdhfg==}
+ engines: {node: '>= 10'}
+ cpu: [arm64]
+ os: [darwin]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@resvg/resvg-js-darwin-x64@2.4.1:
+ resolution: {integrity: sha512-avyVh6DpebBfHHtTQTZYSr6NG1Ur6TEilk1+H0n7V+g4F7x7WPOo8zL00ZhQCeRQ5H4f8WXNWIEKL8fwqcOkYw==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [darwin]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@resvg/resvg-js-linux-arm-gnueabihf@2.4.1:
+ resolution: {integrity: sha512-isY/mdKoBWH4VB5v621co+8l101jxxYjuTkwOLsbW+5RK9EbLciPlCB02M99ThAHzI2MYxIUjXNmNgOW8btXvw==}
+ engines: {node: '>= 10'}
+ cpu: [arm]
+ os: [linux]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@resvg/resvg-js-linux-arm64-gnu@2.4.1:
+ resolution: {integrity: sha512-uY5voSCrFI8TH95vIYBm5blpkOtltLxLRODyhKJhGfskOI7XkRw5/t1u0sWAGYD8rRSNX+CA+np86otKjubrNg==}
+ engines: {node: '>= 10'}
+ cpu: [arm64]
+ os: [linux]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@resvg/resvg-js-linux-arm64-musl@2.4.1:
+ resolution: {integrity: sha512-6mT0+JBCsermKMdi/O2mMk3m7SqOjwi9TKAwSngRZ/nQoL3Z0Z5zV+572ztgbWr0GODB422uD8e9R9zzz38dRQ==}
+ engines: {node: '>= 10'}
+ cpu: [arm64]
+ os: [linux]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@resvg/resvg-js-linux-x64-gnu@2.4.1:
+ resolution: {integrity: sha512-60KnrscLj6VGhkYOJEmmzPlqqfcw1keDh6U+vMcNDjPhV3B5vRSkpP/D/a8sfokyeh4VEacPSYkWGezvzS2/mg==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [linux]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@resvg/resvg-js-linux-x64-musl@2.4.1:
+ resolution: {integrity: sha512-0AMyZSICC1D7ge115cOZQW8Pcad6PjWuZkBFF3FJuSxC6Dgok0MQnLTs2MfMdKBlAcwO9dXsf3bv9tJZj8pATA==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [linux]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@resvg/resvg-js-win32-arm64-msvc@2.4.1:
+ resolution: {integrity: sha512-76XDFOFSa3d0QotmcNyChh2xHwk+JTFiEQBVxMlHpHMeq7hNrQJ1IpE1zcHSQvrckvkdfLboKRrlGB86B10Qjw==}
+ engines: {node: '>= 10'}
+ cpu: [arm64]
+ os: [win32]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@resvg/resvg-js-win32-ia32-msvc@2.4.1:
+ resolution: {integrity: sha512-odyVFGrEWZIzzJ89KdaFtiYWaIJh9hJRW/frcEcG3agJ464VXkN/2oEVF5ulD+5mpGlug9qJg7htzHcKxDN8sg==}
+ engines: {node: '>= 10'}
+ cpu: [ia32]
+ os: [win32]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@resvg/resvg-js-win32-x64-msvc@2.4.1:
+ resolution: {integrity: sha512-vY4kTLH2S3bP+puU5x7hlAxHv+ulFgcK6Zn3efKSr0M0KnZ9A3qeAjZteIpkowEFfUeMPNg2dvvoFRJA9zqxSw==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [win32]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@resvg/resvg-js@2.4.1:
+ resolution: {integrity: sha512-wTOf1zerZX8qYcMmLZw3czR4paI4hXqPjShNwJRh5DeHxvgffUS5KM7XwxtbIheUW6LVYT5fhT2AJiP6mU7U4A==}
+ engines: {node: '>= 10'}
+ optionalDependencies:
+ '@resvg/resvg-js-android-arm-eabi': 2.4.1
+ '@resvg/resvg-js-android-arm64': 2.4.1
+ '@resvg/resvg-js-darwin-arm64': 2.4.1
+ '@resvg/resvg-js-darwin-x64': 2.4.1
+ '@resvg/resvg-js-linux-arm-gnueabihf': 2.4.1
+ '@resvg/resvg-js-linux-arm64-gnu': 2.4.1
+ '@resvg/resvg-js-linux-arm64-musl': 2.4.1
+ '@resvg/resvg-js-linux-x64-gnu': 2.4.1
+ '@resvg/resvg-js-linux-x64-musl': 2.4.1
+ '@resvg/resvg-js-win32-arm64-msvc': 2.4.1
+ '@resvg/resvg-js-win32-ia32-msvc': 2.4.1
+ '@resvg/resvg-js-win32-x64-msvc': 2.4.1
+ dev: true
+
/@rollup/plugin-commonjs@25.0.4(rollup@3.28.0):
resolution: {integrity: sha512-L92Vz9WUZXDnlQQl3EwbypJR4+DM2EbsO+/KOcEkP4Mc6Ct453EeDB2uH9lgRwj4w5yflgNpq9pHOiY8aoUXBQ==}
engines: {node: '>=14.0.0'}
@@ -800,6 +1315,10 @@ packages:
- supports-color
dev: true
+ /@tokenizer/token@0.3.0:
+ resolution: {integrity: sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A==}
+ dev: true
+
/@tootallnate/once@2.0.0:
resolution: {integrity: sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==}
engines: {node: '>= 10'}
@@ -945,6 +1464,10 @@ packages:
'@types/node': 20.5.0
dev: true
+ /@types/node@16.9.1:
+ resolution: {integrity: sha512-QpLcX9ZSsq3YYUUnD3nFDY8H7wctAhQj/TFKL8Ya8v5fMm3CFXxo8zStsLAl780ltoYoo1WvKUVGBQK+1ifr7g==}
+ dev: true
+
/@types/node@20.5.0:
resolution: {integrity: sha512-Mgq7eCtoTjT89FqNoTzzXg2XvCi5VMhRV6+I2aYanc6kQCBImeNaAYRs/DyoVqk1YEUJK5gN9VO7HRIdz4Wo3Q==}
dev: true
@@ -1285,6 +1808,10 @@ packages:
engines: {node: '>=12'}
dev: true
+ /any-base@1.1.0:
+ resolution: {integrity: sha512-uMgjozySS8adZZYePpaWs8cxB9/kdzmpX6SgJZ+wbz1K5eYk5QMYDVJaZKhxyIHUdnnJkfR7SVgStgH7LkGUyg==}
+ dev: true
+
/any-promise@1.3.0:
resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==}
dev: true
@@ -1395,7 +1922,6 @@ packages:
/base64-js@1.5.1:
resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==}
- dev: false
/base@0.11.2:
resolution: {integrity: sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==}
@@ -1429,6 +1955,10 @@ packages:
readable-stream: 3.6.2
dev: false
+ /bmp-js@0.1.0:
+ resolution: {integrity: sha512-vHdS19CnY3hwiNdkaqk93DvjVLfbEcI8mys4UjuWrlX1haDmroo8o4xCzh4wD6DGV6HxRCyauwhHRqMTfERtjw==}
+ dev: true
+
/body-parser@1.20.1:
resolution: {integrity: sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==}
engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16}
@@ -1495,12 +2025,16 @@ packages:
resolution: {integrity: sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==}
dev: true
+ /buffer-equal@0.0.1:
+ resolution: {integrity: sha512-RgSV6InVQ9ODPdLWJ5UAqBqJBOg370Nz6ZQtRzpt6nUjc8v0St97uJ4PYC6NztqIScrAXafKM3mZPMygSe1ggA==}
+ engines: {node: '>=0.4.0'}
+ dev: true
+
/buffer@5.7.1:
resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==}
dependencies:
base64-js: 1.5.1
ieee754: 1.2.1
- dev: false
/bufferstreams@3.0.0:
resolution: {integrity: sha512-Qg0ggJUWJq90vtg4lDsGN9CDWvzBMQxhiEkSOD/sJfYt6BLect3eV1/S6K7SCSKJ34n60rf6U5eUPmQENVE4UA==}
@@ -1669,6 +2203,21 @@ packages:
engines: {node: '>=6'}
dev: true
+ /cli-progress@3.12.0:
+ resolution: {integrity: sha512-tRkV3HJ1ASwm19THiiLIXLO7Im7wlTuKnvkYaTkyoAPefqjNg7W7DHKUlGRxy9vxDvbyCYQkQozvptuMkGCg8A==}
+ engines: {node: '>=4'}
+ dependencies:
+ string-width: 4.2.3
+ dev: true
+
+ /cliui@7.0.4:
+ resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==}
+ dependencies:
+ string-width: 4.2.3
+ strip-ansi: 6.0.1
+ wrap-ansi: 7.0.0
+ dev: true
+
/cliui@8.0.1:
resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==}
engines: {node: '>=12'}
@@ -2044,6 +2593,10 @@ packages:
entities: 4.5.0
dev: true
+ /dom-walk@0.1.2:
+ resolution: {integrity: sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w==}
+ dev: true
+
/domelementtype@2.3.0:
resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==}
dev: true
@@ -2055,6 +2608,10 @@ packages:
domelementtype: 2.3.0
dev: true
+ /domino@2.1.6:
+ resolution: {integrity: sha512-3VdM/SXBZX2omc9JF9nOPCtDaYQ67BGp5CoLpIQlO2KCAPETs8TcDHacF26jXadGbvUteZzRTeos2fhID5+ucQ==}
+ dev: true
+
/domutils@3.1.0:
resolution: {integrity: sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==}
dependencies:
@@ -2337,6 +2894,14 @@ packages:
engines: {node: '>= 0.6'}
dev: false
+ /eventemitter-asyncresource@1.0.0:
+ resolution: {integrity: sha512-39F7TBIV0G7gTelxwbEqnwhp90eqCPON1k0NwNfwhgKn4Co4ybUbj2pECcXT0B3ztRKZ7Pw1JujUUgmQJHcVAQ==}
+ dev: true
+
+ /exif-parser@0.1.12:
+ resolution: {integrity: sha512-c2bQfLNbMzLPmzQuOr8fy0csy84WmwnER81W88DzTp9CYNPJ6yzOj2EZAh9pywYpqHnshVLHQJ8WzldAyfY+Iw==}
+ dev: true
+
/expand-brackets@2.1.4:
resolution: {integrity: sha512-w/ozOKR9Obk3qoWeY/WDi6MFta9AoMR+zud60mdnbniMcBxRuFJyDt2LdX/14A1UABeqk+Uk+LDfUpvoGKppZA==}
engines: {node: '>=0.10.0'}
@@ -2471,6 +3036,15 @@ packages:
flat-cache: 3.0.4
dev: true
+ /file-type@16.5.4:
+ resolution: {integrity: sha512-/yFHK0aGjFEgDJjEKP0pWCplsPFPhwyfwevf/pVxiN0tmE4L9LmwWxWukdJSHdoCli4VgQLehjJtwQBnqmsKcw==}
+ engines: {node: '>=10'}
+ dependencies:
+ readable-web-to-node-stream: 3.0.2
+ strtok3: 6.3.0
+ token-types: 4.2.1
+ dev: true
+
/file-uri-to-path@1.0.0:
resolution: {integrity: sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==}
dev: true
@@ -2648,6 +3222,13 @@ packages:
engines: {node: '>=0.10.0'}
dev: true
+ /gifwrap@0.9.4:
+ resolution: {integrity: sha512-MDMwbhASQuVeD4JKd1fKgNgCRL3fGqMM4WaqpNhWO0JiMOAjbQdumbs4BbBZEy9/M00EHEjKN3HieVhCUlwjeQ==}
+ dependencies:
+ image-q: 4.0.0
+ omggif: 1.0.10
+ dev: true
+
/github-from-package@0.0.0:
resolution: {integrity: sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==}
dev: false
@@ -2711,6 +3292,13 @@ packages:
once: 1.4.0
dev: true
+ /global@4.4.0:
+ resolution: {integrity: sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w==}
+ dependencies:
+ min-document: 2.19.0
+ process: 0.11.10
+ dev: true
+
/globals@13.21.0:
resolution: {integrity: sha512-ybyme3s4yy/t/3s35bewwXKOf7cvzfreG2lH0lZl0JB7I4GxRP2ghxOK/Nb9EkRXdbBXZLfq/p/0W2JUONB/Gg==}
engines: {node: '>=8'}
@@ -2802,6 +3390,18 @@ packages:
dependencies:
function-bind: 1.1.1
+ /hdr-histogram-js@2.0.3:
+ resolution: {integrity: sha512-Hkn78wwzWHNCp2uarhzQ2SGFLU3JY8SBDDd3TAABK4fc30wm+MuPOrg5QVFVfkKOQd6Bfz3ukJEI+q9sXEkK1g==}
+ dependencies:
+ '@assemblyscript/loader': 0.10.1
+ base64-js: 1.5.1
+ pako: 1.0.11
+ dev: true
+
+ /hdr-histogram-percentiles-obj@3.0.0:
+ resolution: {integrity: sha512-7kIufnBqdsBGcSZLPJwqHT3yhk1QTsSlFsVD3kx5ixH/AlgBs9yM1q6DPhXZ8f8gtdqgh7N7/5btRLpQsS2gHw==}
+ dev: true
+
/hey-listen@1.0.8:
resolution: {integrity: sha512-COpmrF2NOg4TBWUJ5UVyaCU2A88wEMkUPK4hNqyCkqHbxT92BbvfjoSozkAIIm6XhicGlJHhFdullInrdhwU8Q==}
dev: false
@@ -2884,13 +3484,18 @@ packages:
/ieee754@1.2.1:
resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==}
- dev: false
/ignore@5.2.4:
resolution: {integrity: sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==}
engines: {node: '>= 4'}
dev: true
+ /image-q@4.0.0:
+ resolution: {integrity: sha512-PfJGVgIfKQJuq3s0tTDOKtztksibuUEbJQIYT3by6wctQo+Rdlh7ef4evJ5NCdxY4CfMbvFkocEwbl4BF8RlJw==}
+ dependencies:
+ '@types/node': 16.9.1
+ dev: true
+
/image2uri@1.0.5:
resolution: {integrity: sha512-y0BKZgnoDLRIF2J0Pg/Wa6uhY5i6SqR7Wfagghf0UHRpnWJ5jm1IS0bZjAV5ADOxHAM2zdzYWmw8EbQgEUlvmw==}
dev: true
@@ -3041,6 +3646,10 @@ packages:
engines: {node: '>=8'}
dev: true
+ /is-function@1.0.2:
+ resolution: {integrity: sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ==}
+ dev: true
+
/is-glob@4.0.3:
resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
engines: {node: '>=0.10.0'}
@@ -3142,11 +3751,25 @@ packages:
minimatch: 3.1.2
dev: true
+ /jimp@0.16.13:
+ resolution: {integrity: sha512-Bxz8q7V4rnCky9A0ktTNGA9SkNFVWRHodddI/DaAWZJzF7sVUlFYKQ60y9JGqrKpi48ECA/TnfMzzc5C70VByA==}
+ dependencies:
+ '@babel/runtime': 7.23.2
+ '@jimp/custom': 0.16.13
+ '@jimp/plugins': 0.16.13(@jimp/custom@0.16.13)
+ '@jimp/types': 0.16.13(@jimp/custom@0.16.13)
+ regenerator-runtime: 0.13.11
+ dev: true
+
/jiti@1.19.3:
resolution: {integrity: sha512-5eEbBDQT/jF1xg6l36P+mWGGoH9Spuy0PCdSr2dtWRDGC6ph/w9ZCL4lmESW8f8F7MwT3XKescfP0wnZWAKL9w==}
hasBin: true
dev: true
+ /jpeg-js@0.4.4:
+ resolution: {integrity: sha512-WZzeDOEtTOBK4Mdsar0IqEU5sMr3vSV2RqkAIzUEV2BHnUfKGyswWFPFwK5EeDo93K3FohSHbLAjj0s1Wzd+dg==}
+ dev: true
+
/js-yaml@4.1.0:
resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==}
hasBin: true
@@ -3262,6 +3885,19 @@ packages:
lit-html: 2.8.0
dev: false
+ /load-bmfont@1.4.1:
+ resolution: {integrity: sha512-8UyQoYmdRDy81Brz6aLAUhfZLwr5zV0L3taTQ4hju7m6biuwiWiJXjPhBJxbUQJA8PrkvJ/7Enqmwk2sM14soA==}
+ dependencies:
+ buffer-equal: 0.0.1
+ mime: 1.6.0
+ parse-bmfont-ascii: 1.0.6
+ parse-bmfont-binary: 1.0.6
+ parse-bmfont-xml: 1.1.4
+ phin: 2.9.3
+ xhr: 2.6.0
+ xtend: 4.0.2
+ dev: true
+
/local-pkg@0.4.3:
resolution: {integrity: sha512-SFppqq5p42fe2qcZQqqEOiVRXl+WCP1MdT6k7BDEW1j++sp5fIY+/fdRQitvKgB5BrBcmrs5m/L0v2FrU5MY1g==}
engines: {node: '>=14'}
@@ -3473,7 +4109,6 @@ packages:
resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==}
engines: {node: '>=4'}
hasBin: true
- dev: false
/mime@3.0.0:
resolution: {integrity: sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==}
@@ -3486,6 +4121,12 @@ packages:
engines: {node: '>=10'}
dev: false
+ /min-document@2.19.0:
+ resolution: {integrity: sha512-9Wy1B3m3f66bPPmU5hdA4DR4PB2OfDU/+GS3yAB7IQozE3tqXaVv2zOjgla7MEGSRv95+ILmOuvhLkOK6wJtCQ==}
+ dependencies:
+ dom-walk: 0.1.2
+ dev: true
+
/min-indent@1.0.1:
resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==}
engines: {node: '>=4'}
@@ -3709,6 +4350,16 @@ packages:
resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==}
engines: {node: '>= 0.6'}
+ /nice-napi@1.0.2:
+ resolution: {integrity: sha512-px/KnJAJZf5RuBGcfD+Sp2pAKq0ytz8j+1NehvgIGFkvtvFrDM3T8E4x/JJODXK9WZow8RRGrbA9QQ3hs+pDhA==}
+ os: ['!win32']
+ requiresBuild: true
+ dependencies:
+ node-addon-api: 3.2.1
+ node-gyp-build: 4.6.1
+ dev: true
+ optional: true
+
/node-abi@3.47.0:
resolution: {integrity: sha512-2s6B2CWZM//kPgwnuI0KrYwNjfdByE25zvAaEpq9IH4zcNsarH8Ihu/UuX6XMPEogDAxkuUFeZn60pXNHAqn3A==}
engines: {node: '>=10'}
@@ -3716,6 +4367,12 @@ packages:
semver: 7.5.4
dev: false
+ /node-addon-api@3.2.1:
+ resolution: {integrity: sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==}
+ requiresBuild: true
+ dev: true
+ optional: true
+
/node-addon-api@6.1.0:
resolution: {integrity: sha512-+eawOlIgy680F0kBzPUNFhMZGtJ1YmqM6l4+Crf4IkImjYrO/mqPwRMh352g23uIaQKFItcQ64I7KMaJxHgAVA==}
dev: false
@@ -3732,6 +4389,13 @@ packages:
whatwg-url: 5.0.0
dev: false
+ /node-gyp-build@4.6.1:
+ resolution: {integrity: sha512-24vnklJmyRS8ViBNI8KbtK/r/DmXQMRiOMXTNz2nrTnAYUwjmEEbnnpB/+kt+yWRv73bPsSPRFddrcIbAxSiMQ==}
+ hasBin: true
+ requiresBuild: true
+ dev: true
+ optional: true
+
/node-gyp@9.4.0:
resolution: {integrity: sha512-dMXsYP6gc9rRbejLXmTbVRYjAHw7ppswsKyMxuxJxxOHzluIO1rGp9TOQgjFJ+2MCqcOcQTOPB/8Xwhr+7s4Eg==}
engines: {node: ^12.13 || ^14.13 || >=16}
@@ -3821,6 +4485,10 @@ packages:
isobject: 3.0.1
dev: true
+ /omggif@1.0.10:
+ resolution: {integrity: sha512-LMJTtvgc/nugXj0Vcrrs68Mn2D1r0zf630VNtqtpI1FEO7e+O9FP4gqs9AcnBaSEeoHIPm28u6qgPR0oyEpGSw==}
+ dev: true
+
/on-finished@2.4.1:
resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==}
engines: {node: '>= 0.8'}
@@ -3854,6 +4522,44 @@ packages:
type-check: 0.4.0
dev: true
+ /oslllo-potrace@2.0.1:
+ resolution: {integrity: sha512-XDsVIUfwXnylngcbecF/6gBHdtFgEnqDt0a9WKqXIo/jPe2AkZkmi6bNaNb9OwlAgoIjy0b1Hi6odPEqztPszg==}
+ dependencies:
+ jimp: 0.16.13
+ dev: true
+
+ /oslllo-svg-fixer@3.0.0:
+ resolution: {integrity: sha512-fk0oWpDfWlcZI42EJfwZV2a7K2hbB63big8KBCDdIU/72QUeUw2z41hTRO/YJeNyFwixb6ecmwOVdJuWQ6SMLg==}
+ engines: {node: '>=16.0.0'}
+ hasBin: true
+ dependencies:
+ ansi-colors: 4.1.3
+ cli-progress: 3.12.0
+ fast-glob: 3.3.1
+ oslllo-potrace: 2.0.1
+ oslllo-svg2: 2.0.2
+ oslllo-validator: 3.1.0
+ piscina: 4.1.0
+ yargs: 16.2.0
+ dev: true
+
+ /oslllo-svg2@2.0.2:
+ resolution: {integrity: sha512-Pg1e7op02QaGoUWAuAfORj7TrtJuTXFAOm+5Ycq8iBOvcg/0ZZc3Laxj3Ceh3f9Ad8zmt7qvz90amKPLqXjk7g==}
+ dependencies:
+ '@resvg/resvg-js': 2.4.1
+ domino: 2.1.6
+ jimp: 0.16.13
+ oslllo-validator: 3.1.0
+ dev: true
+
+ /oslllo-validator@3.1.0:
+ resolution: {integrity: sha512-eqaVuDxnxDO55+pncqTTphbeq6O5XHMyrSfWQoL48mG2rUjr2ZBzvkFkcxIiG3l7IaIY6/L1oX1AJIDdZyzuPQ==}
+ engines: {node: '>= 10.0'}
+ dependencies:
+ domino: 2.1.6
+ validator: 13.11.0
+ dev: true
+
/p-limit@3.1.0:
resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==}
engines: {node: '>=10'}
@@ -3893,6 +4599,25 @@ packages:
callsites: 3.1.0
dev: true
+ /parse-bmfont-ascii@1.0.6:
+ resolution: {integrity: sha512-U4RrVsUFCleIOBsIGYOMKjn9PavsGOXxbvYGtMOEfnId0SVNsgehXh1DxUdVPLoxd5mvcEtvmKs2Mmf0Mpa1ZA==}
+ dev: true
+
+ /parse-bmfont-binary@1.0.6:
+ resolution: {integrity: sha512-GxmsRea0wdGdYthjuUeWTMWPqm2+FAd4GI8vCvhgJsFnoGhTrLhXDDupwTo7rXVAgaLIGoVHDZS9p/5XbSqeWA==}
+ dev: true
+
+ /parse-bmfont-xml@1.1.4:
+ resolution: {integrity: sha512-bjnliEOmGv3y1aMEfREMBJ9tfL3WR0i0CKPj61DnSLaoxWR3nLrsQrEbCId/8rF4NyRF0cCqisSVXyQYWM+mCQ==}
+ dependencies:
+ xml-parse-from-string: 1.0.1
+ xml2js: 0.4.23
+ dev: true
+
+ /parse-headers@2.0.5:
+ resolution: {integrity: sha512-ft3iAoLOB/MlwbNXgzy43SWGP6sQki2jQvAyBg/zDFAgr9bfNWZIUj42Kw2eJIl8kEi4PbgE6U1Zau/HwI75HA==}
+ dev: true
+
/parse5-htmlparser2-tree-adapter@7.0.0:
resolution: {integrity: sha512-B77tOZrqqfUfnVcOrUvfdLbz4pu4RopLD/4vmu3HUPswwTA8OH0EMW9BlWR2B0RCoiZRAHEUu7IxeP1Pd1UU+g==}
dependencies:
@@ -3960,6 +4685,11 @@ packages:
resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==}
dev: true
+ /peek-readable@4.1.0:
+ resolution: {integrity: sha512-ZI3LnwUv5nOGbQzD9c2iDG6toheuXSZP5esSHBjopsXH4dg19soufvpUGA3uohi5anFtGb2lhAVdHzH6R/Evvg==}
+ engines: {node: '>=8'}
+ dev: true
+
/periscopic@3.1.0:
resolution: {integrity: sha512-vKiQ8RRtkl9P+r/+oefh25C3fhybptkHKCZSPlcXiJux2tJF55GnEj3BVn4A5gKfq9NWWXXrxkHBwVPUfH0opw==}
dependencies:
@@ -3968,6 +4698,10 @@ packages:
is-reference: 3.0.1
dev: true
+ /phin@2.9.3:
+ resolution: {integrity: sha512-CzFr90qM24ju5f88quFC/6qohjC144rehe5n6DH900lgXmUe86+xCKc10ev56gRKC4/BkHUoG4uSiQgBiIXwDA==}
+ dev: true
+
/picocolors@1.0.0:
resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==}
dev: true
@@ -3982,6 +4716,23 @@ packages:
engines: {node: '>= 6'}
dev: true
+ /piscina@4.1.0:
+ resolution: {integrity: sha512-sjbLMi3sokkie+qmtZpkfMCUJTpbxJm/wvaPzU28vmYSsTSW8xk9JcFUsbqGJdtPpIQ9tuj+iDcTtgZjwnOSig==}
+ dependencies:
+ eventemitter-asyncresource: 1.0.0
+ hdr-histogram-js: 2.0.3
+ hdr-histogram-percentiles-obj: 3.0.0
+ optionalDependencies:
+ nice-napi: 1.0.2
+ dev: true
+
+ /pixelmatch@4.0.2:
+ resolution: {integrity: sha512-J8B6xqiO37sU/gkcMglv6h5Jbd9xNER7aHzpfRdNmV4IbQBzBpe4l9XmbG+xPF/znacgu2jfEw+wHffaq/YkXA==}
+ hasBin: true
+ dependencies:
+ pngjs: 3.4.0
+ dev: true
+
/pkg-types@1.0.3:
resolution: {integrity: sha512-nN7pYi0AQqJnoLPC9eHFQ8AcyaixBUOwvqc5TDnIKCMEE6I0y8P7OKA7fPexsXGCGxQDl/cmrLAp26LhcwxZ4A==}
dependencies:
@@ -4006,6 +4757,11 @@ packages:
fsevents: 2.3.2
dev: true
+ /pngjs@3.4.0:
+ resolution: {integrity: sha512-NCrCHhWmnQklfH4MtJMRjZ2a8c80qXeMlQMv2uVp9ISJMTt562SbGd6n2oq0PaPgKm7Z6pL9E2UlLIhC+SHL3w==}
+ engines: {node: '>=4.0.0'}
+ dev: true
+
/posix-character-classes@0.1.1:
resolution: {integrity: sha512-xTgYBc3fuo7Yt7JbiuFxSYGToMoz8fLoE6TC9Wx1P/u+LfeThMOAqmuyECnlBaaJb+u1m9hHiXUEtwW4OzfUJg==}
engines: {node: '>=0.10.0'}
@@ -4125,6 +4881,11 @@ packages:
resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==}
dev: true
+ /process@0.11.10:
+ resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==}
+ engines: {node: '>= 0.6.0'}
+ dev: true
+
/promise-retry@2.0.1:
resolution: {integrity: sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==}
engines: {node: '>=10'}
@@ -4224,6 +4985,13 @@ packages:
string_decoder: 1.3.0
util-deprecate: 1.0.2
+ /readable-web-to-node-stream@3.0.2:
+ resolution: {integrity: sha512-ePeK6cc1EcKLEhJFt/AebMCLL+GgSKhuygrZ/GLaKZYEecIgIECf4UaUuaByiGtzckwR4ain9VzUh95T1exYGw==}
+ engines: {node: '>=8'}
+ dependencies:
+ readable-stream: 3.6.2
+ dev: true
+
/readdirp@2.2.1:
resolution: {integrity: sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==}
engines: {node: '>=0.10'}
@@ -4242,6 +5010,14 @@ packages:
picomatch: 2.3.1
dev: true
+ /regenerator-runtime@0.13.11:
+ resolution: {integrity: sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==}
+ dev: true
+
+ /regenerator-runtime@0.14.0:
+ resolution: {integrity: sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==}
+ dev: true
+
/regex-not@1.0.2:
resolution: {integrity: sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==}
engines: {node: '>=0.10.0'}
@@ -4726,6 +5502,14 @@ packages:
acorn: 8.10.0
dev: true
+ /strtok3@6.3.0:
+ resolution: {integrity: sha512-fZtbhtvI9I48xDSywd/somNqgUHl2L2cstmXCCif0itOf96jeW18MBSyrLuNicYQVkvpOxkZtkzujiTJ9LW5Jw==}
+ engines: {node: '>=10'}
+ dependencies:
+ '@tokenizer/token': 0.3.0
+ peek-readable: 4.1.0
+ dev: true
+
/sucrase@3.34.0:
resolution: {integrity: sha512-70/LQEZ07TEcxiU2dz51FKaE6hCTWC6vr7FOk3Gr0U60C3shtAN+H+BFr9XlYe5xqf3RA8nrc+VIwzCfnxuXJw==}
engines: {node: '>=8'}
@@ -5053,6 +5837,10 @@ packages:
xtend: 4.0.2
dev: true
+ /timm@1.7.1:
+ resolution: {integrity: sha512-IjZc9KIotudix8bMaBW6QvMuq64BrJWFs1+4V0lXwWGQZwH+LnX87doAYhem4caOEusRP9/g6jVDQmZ8XOk1nw==}
+ dev: true
+
/tiny-glob@0.2.9:
resolution: {integrity: sha512-g/55ssRPUjShh+xkfx9UPDXqhckHEsHr4Vd9zX55oSdGZc/MD0m3sferOkwWtp98bv+kcVfEHtRJgBVJzelrzg==}
dependencies:
@@ -5064,6 +5852,10 @@ packages:
resolution: {integrity: sha512-kRwSG8Zx4tjF9ZiyH4bhaebu+EDz1BOx9hOigYHlUW4xxI/wKIUQUqo018UlU4ar6ATPBsaMrdbKZ+tmPdohFA==}
dev: true
+ /tinycolor2@1.6.0:
+ resolution: {integrity: sha512-XPaBkWQJdsf3pLKJV9p4qN/S+fm2Oj8AIPo1BTUhg5oxkvm9+SVEGFdhyOz7tTdUTfvxMiAs4sp6/eZO2Ew+pw==}
+ dev: true
+
/tinypool@0.5.0:
resolution: {integrity: sha512-paHQtnrlS1QZYKF/GnLoOM/DN9fqaGOFbCbxzAhwniySnzl9Ebk8w73/dd34DAhe/obUbPAOldTyYXQZxnPBPQ==}
engines: {node: '>=14.0.0'}
@@ -5111,6 +5903,14 @@ packages:
engines: {node: '>=0.6'}
dev: false
+ /token-types@4.2.1:
+ resolution: {integrity: sha512-6udB24Q737UD/SDsKAHI9FCRP7Bqc9D/MQUV02ORQg5iskjtLJlZJNdN4kKtcdtwCeWIwIHDGaUsTsCCAa8sFQ==}
+ engines: {node: '>=10'}
+ dependencies:
+ '@tokenizer/token': 0.3.0
+ ieee754: 1.2.1
+ dev: true
+
/toml-eslint-parser@0.6.0:
resolution: {integrity: sha512-aTmQa0RFb+2URe8IZOfo/oxt3b5rlXlpG9xE+6FmeI8immCGLnZYvKVxbnCYJx4bIKIaEwl0BnCDhwO70yeWSA==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
@@ -5287,6 +6087,12 @@ packages:
engines: {node: '>=0.10.0'}
dev: true
+ /utif@2.0.1:
+ resolution: {integrity: sha512-Z/S1fNKCicQTf375lIP9G8Sa1H/phcysstNrrSdZKj1f9g58J4NMgb5IgiEZN9/nLMPDwF0W7hdOe9Qq2IYoLg==}
+ dependencies:
+ pako: 1.0.11
+ dev: true
+
/util-deprecate@1.0.2:
resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==}
@@ -5295,6 +6101,11 @@ packages:
engines: {node: '>= 0.4.0'}
dev: false
+ /validator@13.11.0:
+ resolution: {integrity: sha512-Ii+sehpSfZy+At5nPdnyMhx78fEoPDkR2XW/zimHEL3MyGJQOCQ7WeP20jPYRz7ZCpcKLB21NxuXHF3bxjStBQ==}
+ engines: {node: '>= 0.10'}
+ dev: true
+
/vary@1.1.2:
resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==}
engines: {node: '>= 0.8'}
@@ -5510,6 +6321,32 @@ packages:
/wrappy@1.0.2:
resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
+ /xhr@2.6.0:
+ resolution: {integrity: sha512-/eCGLb5rxjx5e3mF1A7s+pLlR6CGyqWN91fv1JgER5mVWg1MZmlhBvy9kjcsOdRk8RrIujotWyJamfyrp+WIcA==}
+ dependencies:
+ global: 4.4.0
+ is-function: 1.0.2
+ parse-headers: 2.0.5
+ xtend: 4.0.2
+ dev: true
+
+ /xml-parse-from-string@1.0.1:
+ resolution: {integrity: sha512-ErcKwJTF54uRzzNMXq2X5sMIy88zJvfN2DmdoQvy7PAFJ+tPRU6ydWuOKNMyfmOjdyBQTFREi60s0Y0SyI0G0g==}
+ dev: true
+
+ /xml2js@0.4.23:
+ resolution: {integrity: sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug==}
+ engines: {node: '>=4.0.0'}
+ dependencies:
+ sax: 1.2.4
+ xmlbuilder: 11.0.1
+ dev: true
+
+ /xmlbuilder@11.0.1:
+ resolution: {integrity: sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==}
+ engines: {node: '>=4.0'}
+ dev: true
+
/xtend@4.0.2:
resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==}
engines: {node: '>=0.4'}
@@ -5542,11 +6379,29 @@ packages:
engines: {node: '>= 14'}
dev: true
+ /yargs-parser@20.2.9:
+ resolution: {integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==}
+ engines: {node: '>=10'}
+ dev: true
+
/yargs-parser@21.1.1:
resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==}
engines: {node: '>=12'}
dev: true
+ /yargs@16.2.0:
+ resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==}
+ engines: {node: '>=10'}
+ dependencies:
+ cliui: 7.0.4
+ escalade: 3.1.1
+ get-caller-file: 2.0.5
+ require-directory: 2.1.1
+ string-width: 4.2.3
+ y18n: 5.0.8
+ yargs-parser: 20.2.9
+ dev: true
+
/yargs@17.7.2:
resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==}
engines: {node: '>=12'}
diff --git a/src/icons/optimize.js b/src/icons/optimize.js
new file mode 100644
index 0000000000..f4a916df67
--- /dev/null
+++ b/src/icons/optimize.js
@@ -0,0 +1,3 @@
+import { optimizeSVG } from './scripts.js';
+
+optimizeSVG();
diff --git a/src/icons/optimized/apple.svg b/src/icons/optimized/apple.svg
new file mode 100644
index 0000000000..5fc37a4828
--- /dev/null
+++ b/src/icons/optimized/apple.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/icons/optimized/arrow-down.svg b/src/icons/optimized/arrow-down.svg
new file mode 100644
index 0000000000..ea2e26aae2
--- /dev/null
+++ b/src/icons/optimized/arrow-down.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/icons/optimized/arrow-ext-link.svg b/src/icons/optimized/arrow-ext-link.svg
new file mode 100644
index 0000000000..eb13a48839
--- /dev/null
+++ b/src/icons/optimized/arrow-ext-link.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/icons/optimized/arrow-left.svg b/src/icons/optimized/arrow-left.svg
new file mode 100644
index 0000000000..ec5745a544
--- /dev/null
+++ b/src/icons/optimized/arrow-left.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/icons/optimized/arrow-right.svg b/src/icons/optimized/arrow-right.svg
new file mode 100644
index 0000000000..e4f29544c5
--- /dev/null
+++ b/src/icons/optimized/arrow-right.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/icons/optimized/arrow-up.svg b/src/icons/optimized/arrow-up.svg
new file mode 100644
index 0000000000..274fa60304
--- /dev/null
+++ b/src/icons/optimized/arrow-up.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/icons/optimized/calendar.svg b/src/icons/optimized/calendar.svg
new file mode 100644
index 0000000000..ef63018332
--- /dev/null
+++ b/src/icons/optimized/calendar.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/icons/optimized/check.svg b/src/icons/optimized/check.svg
new file mode 100644
index 0000000000..b4dac258d3
--- /dev/null
+++ b/src/icons/optimized/check.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/icons/optimized/chevron-down.svg b/src/icons/optimized/chevron-down.svg
new file mode 100644
index 0000000000..c0a9a1ff64
--- /dev/null
+++ b/src/icons/optimized/chevron-down.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/icons/optimized/chevron-left.svg b/src/icons/optimized/chevron-left.svg
new file mode 100644
index 0000000000..8c6c2d0668
--- /dev/null
+++ b/src/icons/optimized/chevron-left.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/icons/optimized/chevron-right.svg b/src/icons/optimized/chevron-right.svg
new file mode 100644
index 0000000000..17c7204bb9
--- /dev/null
+++ b/src/icons/optimized/chevron-right.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/icons/optimized/chevron-up.svg b/src/icons/optimized/chevron-up.svg
new file mode 100644
index 0000000000..a4845c84ae
--- /dev/null
+++ b/src/icons/optimized/chevron-up.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/icons/optimized/close.svg b/src/icons/optimized/close.svg
new file mode 100644
index 0000000000..59e06fb38e
--- /dev/null
+++ b/src/icons/optimized/close.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/icons/optimized/copy.svg b/src/icons/optimized/copy.svg
new file mode 100644
index 0000000000..4ee95f79bd
--- /dev/null
+++ b/src/icons/optimized/copy.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/icons/optimized/dark.svg b/src/icons/optimized/dark.svg
new file mode 100644
index 0000000000..a26fbff2f5
--- /dev/null
+++ b/src/icons/optimized/dark.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/icons/optimized/discord.svg b/src/icons/optimized/discord.svg
new file mode 100644
index 0000000000..63f02f9787
--- /dev/null
+++ b/src/icons/optimized/discord.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/icons/optimized/divider-vertical.svg b/src/icons/optimized/divider-vertical.svg
new file mode 100644
index 0000000000..4789df1e1a
--- /dev/null
+++ b/src/icons/optimized/divider-vertical.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/icons/optimized/download.svg b/src/icons/optimized/download.svg
new file mode 100644
index 0000000000..5a64430c84
--- /dev/null
+++ b/src/icons/optimized/download.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/icons/optimized/github.svg b/src/icons/optimized/github.svg
new file mode 100644
index 0000000000..6795c68225
--- /dev/null
+++ b/src/icons/optimized/github.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/icons/optimized/google.svg b/src/icons/optimized/google.svg
new file mode 100644
index 0000000000..40a28f78f3
--- /dev/null
+++ b/src/icons/optimized/google.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/icons/optimized/hamburger-menu.svg b/src/icons/optimized/hamburger-menu.svg
new file mode 100644
index 0000000000..60d8a6b33f
--- /dev/null
+++ b/src/icons/optimized/hamburger-menu.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/icons/optimized/light.svg b/src/icons/optimized/light.svg
new file mode 100644
index 0000000000..a8ca5a8b4c
--- /dev/null
+++ b/src/icons/optimized/light.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/icons/optimized/linkedin.svg b/src/icons/optimized/linkedin.svg
new file mode 100644
index 0000000000..9c1f7632fc
--- /dev/null
+++ b/src/icons/optimized/linkedin.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/icons/optimized/location.svg b/src/icons/optimized/location.svg
new file mode 100644
index 0000000000..9ef82f6292
--- /dev/null
+++ b/src/icons/optimized/location.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/icons/optimized/logout-left.svg b/src/icons/optimized/logout-left.svg
new file mode 100644
index 0000000000..d5ef8f14ef
--- /dev/null
+++ b/src/icons/optimized/logout-left.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/icons/optimized/logout-right.svg b/src/icons/optimized/logout-right.svg
new file mode 100644
index 0000000000..b0be927824
--- /dev/null
+++ b/src/icons/optimized/logout-right.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/icons/optimized/microsoft.svg b/src/icons/optimized/microsoft.svg
new file mode 100644
index 0000000000..45564f6618
--- /dev/null
+++ b/src/icons/optimized/microsoft.svg
@@ -0,0 +1,6 @@
+
diff --git a/src/icons/optimized/minus.svg b/src/icons/optimized/minus.svg
new file mode 100644
index 0000000000..af6c032313
--- /dev/null
+++ b/src/icons/optimized/minus.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/icons/optimized/nuxt.svg b/src/icons/optimized/nuxt.svg
new file mode 100644
index 0000000000..9a43ddb06b
--- /dev/null
+++ b/src/icons/optimized/nuxt.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/icons/optimized/platform.svg b/src/icons/optimized/platform.svg
new file mode 100644
index 0000000000..305c6856f9
--- /dev/null
+++ b/src/icons/optimized/platform.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/icons/optimized/plus.svg b/src/icons/optimized/plus.svg
new file mode 100644
index 0000000000..efaa702d04
--- /dev/null
+++ b/src/icons/optimized/plus.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/icons/optimized/product-hunt.svg b/src/icons/optimized/product-hunt.svg
new file mode 100644
index 0000000000..9e934ed4ed
--- /dev/null
+++ b/src/icons/optimized/product-hunt.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/icons/optimized/rest.svg b/src/icons/optimized/rest.svg
new file mode 100644
index 0000000000..0c7dc423ee
--- /dev/null
+++ b/src/icons/optimized/rest.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/icons/optimized/search.svg b/src/icons/optimized/search.svg
new file mode 100644
index 0000000000..43e97e4a73
--- /dev/null
+++ b/src/icons/optimized/search.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/icons/optimized/star.svg b/src/icons/optimized/star.svg
new file mode 100644
index 0000000000..461ab37e83
--- /dev/null
+++ b/src/icons/optimized/star.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/icons/optimized/system.svg b/src/icons/optimized/system.svg
new file mode 100644
index 0000000000..c026de2fbc
--- /dev/null
+++ b/src/icons/optimized/system.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/icons/optimized/twitter.svg b/src/icons/optimized/twitter.svg
new file mode 100644
index 0000000000..93e90dec6a
--- /dev/null
+++ b/src/icons/optimized/twitter.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/icons/optimized/vue.svg b/src/icons/optimized/vue.svg
new file mode 100644
index 0000000000..283273265e
--- /dev/null
+++ b/src/icons/optimized/vue.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/icons/optimized/x.svg b/src/icons/optimized/x.svg
new file mode 100644
index 0000000000..ea832b9d09
--- /dev/null
+++ b/src/icons/optimized/x.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/icons/optimized/youtube.svg b/src/icons/optimized/youtube.svg
new file mode 100644
index 0000000000..c26f54e20e
--- /dev/null
+++ b/src/icons/optimized/youtube.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/icons/output/_variables.scss b/src/icons/output/_variables.scss
index 6599b2c7f9..3bfcd5d4e2 100644
--- a/src/icons/output/_variables.scss
+++ b/src/icons/output/_variables.scss
@@ -33,7 +33,8 @@ $aw-icon-product-hunt: "\ea20";
$aw-icon-rest: "\ea21";
$aw-icon-search: "\ea22";
$aw-icon-star: "\ea23";
-$aw-icon-twitter: "\ea24";
-$aw-icon-vue: "\ea25";
-$aw-icon-x: "\ea26";
-$aw-icon-youtube: "\ea27";
+$aw-icon-system: "\ea24";
+$aw-icon-twitter: "\ea25";
+$aw-icon-vue: "\ea26";
+$aw-icon-x: "\ea27";
+$aw-icon-youtube: "\ea28";
diff --git a/src/icons/output/aw-icon.css b/src/icons/output/aw-icon.css
index 15c8f5dcea..9f03999502 100644
--- a/src/icons/output/aw-icon.css
+++ b/src/icons/output/aw-icon.css
@@ -52,7 +52,8 @@
.aw-icon-rest:before { content: "\ea21"; }
.aw-icon-search:before { content: "\ea22"; }
.aw-icon-star:before { content: "\ea23"; }
-.aw-icon-twitter:before { content: "\ea24"; }
-.aw-icon-vue:before { content: "\ea25"; }
-.aw-icon-x:before { content: "\ea26"; }
-.aw-icon-youtube:before { content: "\ea27"; }
+.aw-icon-system:before { content: "\ea24"; }
+.aw-icon-twitter:before { content: "\ea25"; }
+.aw-icon-vue:before { content: "\ea26"; }
+.aw-icon-x:before { content: "\ea27"; }
+.aw-icon-youtube:before { content: "\ea28"; }
diff --git a/src/icons/output/aw-icon.eot b/src/icons/output/aw-icon.eot
index 16f3095c40..d338e8e6d7 100644
Binary files a/src/icons/output/aw-icon.eot and b/src/icons/output/aw-icon.eot differ
diff --git a/src/icons/output/aw-icon.scss b/src/icons/output/aw-icon.scss
index 19b768f202..0f952fe68f 100644
--- a/src/icons/output/aw-icon.scss
+++ b/src/icons/output/aw-icon.scss
@@ -51,10 +51,11 @@
.aw-icon-rest:before { content: "\ea21"; }
.aw-icon-search:before { content: "\ea22"; }
.aw-icon-star:before { content: "\ea23"; }
-.aw-icon-twitter:before { content: "\ea24"; }
-.aw-icon-vue:before { content: "\ea25"; }
-.aw-icon-x:before { content: "\ea26"; }
-.aw-icon-youtube:before { content: "\ea27"; }
+.aw-icon-system:before { content: "\ea24"; }
+.aw-icon-twitter:before { content: "\ea25"; }
+.aw-icon-vue:before { content: "\ea26"; }
+.aw-icon-x:before { content: "\ea27"; }
+.aw-icon-youtube:before { content: "\ea28"; }
$aw-icon-apple: "\ea01";
$aw-icon-arrow-down: "\ea02";
@@ -91,7 +92,8 @@ $aw-icon-product-hunt: "\ea20";
$aw-icon-rest: "\ea21";
$aw-icon-search: "\ea22";
$aw-icon-star: "\ea23";
-$aw-icon-twitter: "\ea24";
-$aw-icon-vue: "\ea25";
-$aw-icon-x: "\ea26";
-$aw-icon-youtube: "\ea27";
+$aw-icon-system: "\ea24";
+$aw-icon-twitter: "\ea25";
+$aw-icon-vue: "\ea26";
+$aw-icon-x: "\ea27";
+$aw-icon-youtube: "\ea28";
diff --git a/src/icons/output/aw-icon.svg b/src/icons/output/aw-icon.svg
index 32f2145968..9c863ceb92 100644
--- a/src/icons/output/aw-icon.svg
+++ b/src/icons/output/aw-icon.svg
@@ -2,128 +2,131 @@
diff --git a/src/icons/output/aw-icon.symbol.svg b/src/icons/output/aw-icon.symbol.svg
index 20f0a420d8..017905ca83 100644
--- a/src/icons/output/aw-icon.symbol.svg
+++ b/src/icons/output/aw-icon.symbol.svg
@@ -1,3 +1,6 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/src/icons/output/aw-icon.ttf b/src/icons/output/aw-icon.ttf
index dbc16aa7de..567dc43d2a 100644
Binary files a/src/icons/output/aw-icon.ttf and b/src/icons/output/aw-icon.ttf differ
diff --git a/src/icons/output/aw-icon.woff b/src/icons/output/aw-icon.woff
index 633a66a9cb..dd612d2bf6 100644
Binary files a/src/icons/output/aw-icon.woff and b/src/icons/output/aw-icon.woff differ
diff --git a/src/icons/output/aw-icon.woff2 b/src/icons/output/aw-icon.woff2
index f7b928abd9..9ceca3cfe3 100644
Binary files a/src/icons/output/aw-icon.woff2 and b/src/icons/output/aw-icon.woff2 differ
diff --git a/src/icons/output/info.json b/src/icons/output/info.json
index bec9024106..511431821b 100644
--- a/src/icons/output/info.json
+++ b/src/icons/output/info.json
@@ -209,28 +209,34 @@
"className": "aw-icon-star",
"unicode": ""
},
- "twitter": {
+ "system": {
"encodedCode": "\\ea24",
"prefix": "aw-icon",
- "className": "aw-icon-twitter",
+ "className": "aw-icon-system",
"unicode": ""
},
- "vue": {
+ "twitter": {
"encodedCode": "\\ea25",
"prefix": "aw-icon",
- "className": "aw-icon-vue",
+ "className": "aw-icon-twitter",
"unicode": ""
},
- "x": {
+ "vue": {
"encodedCode": "\\ea26",
"prefix": "aw-icon",
- "className": "aw-icon-x",
+ "className": "aw-icon-vue",
"unicode": ""
},
- "youtube": {
+ "x": {
"encodedCode": "\\ea27",
"prefix": "aw-icon",
- "className": "aw-icon-youtube",
+ "className": "aw-icon-x",
"unicode": ""
+ },
+ "youtube": {
+ "encodedCode": "\\ea28",
+ "prefix": "aw-icon",
+ "className": "aw-icon-youtube",
+ "unicode": ""
}
}
diff --git a/src/icons/scripts.js b/src/icons/scripts.js
index 4a7599aa60..3df9b60a36 100644
--- a/src/icons/scripts.js
+++ b/src/icons/scripts.js
@@ -1,29 +1,40 @@
+// @ts-expect-error missing types
+import SVGFixer from 'oslllo-svg-fixer';
import svgtofont from 'svgtofont';
import { resolve } from 'path';
const src = resolve(process.cwd(), 'src/icons/svg');
+const optimized = resolve(process.cwd(), 'src/icons/optimized');
const dist = resolve(process.cwd(), 'src/icons/output');
+export const optimizeSVG = async () => {
+ const fixer = new SVGFixer(src, optimized, {
+ showProgressBar: true
+ });
+
+ await fixer.fix();
+};
+
export const generateIcons = async () => {
- await svgtofont({
- classNamePrefix: 'aw-icon',
- src: src,
- dist: dist,
- fontName: 'aw-icon',
- styleTemplates: resolve(process.cwd(), 'src/icons/templates'),
- css: {
- fontSize: '20px'
- },
- outSVGReact: false,
- svgicons2svgfont: {
- centerHorizontally: true,
- centerVertically: true,
- fixedWidth: true,
- fontHeight: 1000,
- normalize: true,
- descent: 200
- },
- emptyDist: true,
- generateInfoData: true,
- });
+ await svgtofont({
+ classNamePrefix: 'aw-icon',
+ src: optimized,
+ dist: dist,
+ fontName: 'aw-icon',
+ styleTemplates: resolve(process.cwd(), 'src/icons/templates'),
+ css: {
+ fontSize: '20px'
+ },
+ outSVGReact: false,
+ svgicons2svgfont: {
+ centerHorizontally: true,
+ centerVertically: true,
+ fixedWidth: true,
+ fontHeight: 1000,
+ normalize: true,
+ descent: 200
+ },
+ emptyDist: true,
+ generateInfoData: true
+ });
};
diff --git a/src/icons/svg/apple.svg b/src/icons/svg/apple.svg
index 1426513c7f..0539053097 100644
--- a/src/icons/svg/apple.svg
+++ b/src/icons/svg/apple.svg
@@ -1 +1,11 @@
-
\ No newline at end of file
+
diff --git a/src/icons/svg/arrow-down.svg b/src/icons/svg/arrow-down.svg
index cac7d9dd67..bf2141c93c 100644
--- a/src/icons/svg/arrow-down.svg
+++ b/src/icons/svg/arrow-down.svg
@@ -1 +1,5 @@
-
\ No newline at end of file
+
diff --git a/src/icons/svg/arrow-ext-link.svg b/src/icons/svg/arrow-ext-link.svg
index 322645d08f..5f29016353 100644
--- a/src/icons/svg/arrow-ext-link.svg
+++ b/src/icons/svg/arrow-ext-link.svg
@@ -1 +1,5 @@
-
\ No newline at end of file
+
diff --git a/src/icons/svg/arrow-left.svg b/src/icons/svg/arrow-left.svg
index 283002da6e..882fee24ef 100644
--- a/src/icons/svg/arrow-left.svg
+++ b/src/icons/svg/arrow-left.svg
@@ -1 +1,5 @@
-
\ No newline at end of file
+
diff --git a/src/icons/svg/arrow-right.svg b/src/icons/svg/arrow-right.svg
index f9180ada05..da037c523c 100644
--- a/src/icons/svg/arrow-right.svg
+++ b/src/icons/svg/arrow-right.svg
@@ -1 +1,5 @@
-
\ No newline at end of file
+
diff --git a/src/icons/svg/arrow-up.svg b/src/icons/svg/arrow-up.svg
index 074407af05..9c24506b12 100644
--- a/src/icons/svg/arrow-up.svg
+++ b/src/icons/svg/arrow-up.svg
@@ -1 +1,5 @@
-
\ No newline at end of file
+
diff --git a/src/icons/svg/calendar.svg b/src/icons/svg/calendar.svg
index 8b1f33fb79..c25f3228ed 100644
--- a/src/icons/svg/calendar.svg
+++ b/src/icons/svg/calendar.svg
@@ -1 +1,6 @@
-
\ No newline at end of file
+
diff --git a/src/icons/svg/check.svg b/src/icons/svg/check.svg
index 37d9a2d80d..909e23e7b1 100644
--- a/src/icons/svg/check.svg
+++ b/src/icons/svg/check.svg
@@ -1 +1,3 @@
-
\ No newline at end of file
+
diff --git a/src/icons/svg/chevron-down.svg b/src/icons/svg/chevron-down.svg
index 0d20112103..ff29b8c1ca 100644
--- a/src/icons/svg/chevron-down.svg
+++ b/src/icons/svg/chevron-down.svg
@@ -1 +1,3 @@
-
\ No newline at end of file
+
diff --git a/src/icons/svg/chevron-left.svg b/src/icons/svg/chevron-left.svg
index 11eadc410c..1ea43ff53d 100644
--- a/src/icons/svg/chevron-left.svg
+++ b/src/icons/svg/chevron-left.svg
@@ -1 +1,3 @@
-
\ No newline at end of file
+
diff --git a/src/icons/svg/chevron-right.svg b/src/icons/svg/chevron-right.svg
index 4d4b6fabf8..e5c681cc2d 100644
--- a/src/icons/svg/chevron-right.svg
+++ b/src/icons/svg/chevron-right.svg
@@ -1 +1,3 @@
-
\ No newline at end of file
+
diff --git a/src/icons/svg/chevron-up.svg b/src/icons/svg/chevron-up.svg
index 03a10d8396..0c470b4e64 100644
--- a/src/icons/svg/chevron-up.svg
+++ b/src/icons/svg/chevron-up.svg
@@ -1 +1,3 @@
-
\ No newline at end of file
+
diff --git a/src/icons/svg/close.svg b/src/icons/svg/close.svg
index 23aaae8c62..d3c39f416a 100644
--- a/src/icons/svg/close.svg
+++ b/src/icons/svg/close.svg
@@ -1 +1,4 @@
-
\ No newline at end of file
+
diff --git a/src/icons/svg/copy.svg b/src/icons/svg/copy.svg
index 121d9e756a..819dbc6e57 100644
--- a/src/icons/svg/copy.svg
+++ b/src/icons/svg/copy.svg
@@ -1 +1,4 @@
-
\ No newline at end of file
+
diff --git a/src/icons/svg/dark.svg b/src/icons/svg/dark.svg
index 61aed72bc8..cf2c3a5618 100644
--- a/src/icons/svg/dark.svg
+++ b/src/icons/svg/dark.svg
@@ -1 +1,6 @@
-
\ No newline at end of file
+
diff --git a/src/icons/svg/discord.svg b/src/icons/svg/discord.svg
index 2ee95b365c..2d8c75c519 100644
--- a/src/icons/svg/discord.svg
+++ b/src/icons/svg/discord.svg
@@ -1 +1,3 @@
-
\ No newline at end of file
+
diff --git a/src/icons/svg/divider-vertical.svg b/src/icons/svg/divider-vertical.svg
index cdc0332f3f..b7dabc8c60 100644
--- a/src/icons/svg/divider-vertical.svg
+++ b/src/icons/svg/divider-vertical.svg
@@ -1 +1,3 @@
-
\ No newline at end of file
+
diff --git a/src/icons/svg/download.svg b/src/icons/svg/download.svg
index adeba770ed..4ad32e4a3c 100644
--- a/src/icons/svg/download.svg
+++ b/src/icons/svg/download.svg
@@ -1 +1,6 @@
-
\ No newline at end of file
+
diff --git a/src/icons/svg/github.svg b/src/icons/svg/github.svg
index 577ce83bdf..ed3bfd6b4a 100644
--- a/src/icons/svg/github.svg
+++ b/src/icons/svg/github.svg
@@ -1 +1,3 @@
-
\ No newline at end of file
+
diff --git a/src/icons/svg/google.svg b/src/icons/svg/google.svg
index 79a6226051..ffdc755ed0 100644
--- a/src/icons/svg/google.svg
+++ b/src/icons/svg/google.svg
@@ -1 +1 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/src/icons/svg/hamburger-menu.svg b/src/icons/svg/hamburger-menu.svg
index 96c8e29167..e9311ace7d 100644
--- a/src/icons/svg/hamburger-menu.svg
+++ b/src/icons/svg/hamburger-menu.svg
@@ -1 +1,4 @@
-
\ No newline at end of file
+
diff --git a/src/icons/svg/light.svg b/src/icons/svg/light.svg
index f05a49917a..cc3c7e7e15 100644
--- a/src/icons/svg/light.svg
+++ b/src/icons/svg/light.svg
@@ -1 +1,3 @@
-
\ No newline at end of file
+
diff --git a/src/icons/svg/linkedin.svg b/src/icons/svg/linkedin.svg
index 4ac21b63dd..2e4abf00f9 100644
--- a/src/icons/svg/linkedin.svg
+++ b/src/icons/svg/linkedin.svg
@@ -1 +1,3 @@
-
\ No newline at end of file
+
diff --git a/src/icons/svg/location.svg b/src/icons/svg/location.svg
index 1bf3b968a8..ce45ee8fcc 100644
--- a/src/icons/svg/location.svg
+++ b/src/icons/svg/location.svg
@@ -1 +1,4 @@
-
\ No newline at end of file
+
diff --git a/src/icons/svg/logout-left.svg b/src/icons/svg/logout-left.svg
index 589ec0f543..a832b25e0d 100644
--- a/src/icons/svg/logout-left.svg
+++ b/src/icons/svg/logout-left.svg
@@ -1 +1,6 @@
-
\ No newline at end of file
+
diff --git a/src/icons/svg/logout-right.svg b/src/icons/svg/logout-right.svg
index 1fb4829e1b..604ad668e2 100644
--- a/src/icons/svg/logout-right.svg
+++ b/src/icons/svg/logout-right.svg
@@ -1 +1,6 @@
-
\ No newline at end of file
+
diff --git a/src/icons/svg/microsoft.svg b/src/icons/svg/microsoft.svg
deleted file mode 100644
index 7d8dc08cbf..0000000000
--- a/src/icons/svg/microsoft.svg
+++ /dev/null
@@ -1 +0,0 @@
-
diff --git a/src/icons/svg/minus.svg b/src/icons/svg/minus.svg
index 7e77329aaf..28d2aecba7 100644
--- a/src/icons/svg/minus.svg
+++ b/src/icons/svg/minus.svg
@@ -1 +1,3 @@
-
\ No newline at end of file
+
diff --git a/src/icons/svg/nuxt.svg b/src/icons/svg/nuxt.svg
index a96f49acf9..d02fff10b2 100644
--- a/src/icons/svg/nuxt.svg
+++ b/src/icons/svg/nuxt.svg
@@ -1,3 +1 @@
-
+
\ No newline at end of file
diff --git a/src/icons/svg/platform.svg b/src/icons/svg/platform.svg
index 45d54cc837..0654d1b492 100644
--- a/src/icons/svg/platform.svg
+++ b/src/icons/svg/platform.svg
@@ -1 +1 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/src/icons/svg/plus.svg b/src/icons/svg/plus.svg
index b6270fd23e..bae9a1d75b 100644
--- a/src/icons/svg/plus.svg
+++ b/src/icons/svg/plus.svg
@@ -1 +1,4 @@
-
\ No newline at end of file
+
diff --git a/src/icons/svg/product-hunt.svg b/src/icons/svg/product-hunt.svg
index a00da8f39a..2fd4281079 100644
--- a/src/icons/svg/product-hunt.svg
+++ b/src/icons/svg/product-hunt.svg
@@ -1 +1,10 @@
-
\ No newline at end of file
+
diff --git a/src/icons/svg/rest.svg b/src/icons/svg/rest.svg
index a77906d376..3c5bd1a0e7 100644
--- a/src/icons/svg/rest.svg
+++ b/src/icons/svg/rest.svg
@@ -1 +1 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/src/icons/svg/search.svg b/src/icons/svg/search.svg
index b52b2889b9..3b729ab4fe 100644
--- a/src/icons/svg/search.svg
+++ b/src/icons/svg/search.svg
@@ -1 +1,3 @@
-
\ No newline at end of file
+
diff --git a/src/icons/svg/star.svg b/src/icons/svg/star.svg
index 0b479875b0..387ffa6801 100644
--- a/src/icons/svg/star.svg
+++ b/src/icons/svg/star.svg
@@ -1 +1,3 @@
-
\ No newline at end of file
+
diff --git a/src/icons/svg/system.svg b/src/icons/svg/system.svg
new file mode 100644
index 0000000000..83c52a6b52
--- /dev/null
+++ b/src/icons/svg/system.svg
@@ -0,0 +1,4 @@
+
diff --git a/src/icons/svg/twitter.svg b/src/icons/svg/twitter.svg
index a0eaf267a2..009976c7a3 100644
--- a/src/icons/svg/twitter.svg
+++ b/src/icons/svg/twitter.svg
@@ -1 +1,3 @@
-
\ No newline at end of file
+
diff --git a/src/icons/svg/vue.svg b/src/icons/svg/vue.svg
index 12475ef256..684b94a63f 100644
--- a/src/icons/svg/vue.svg
+++ b/src/icons/svg/vue.svg
@@ -1 +1,4 @@
-
\ No newline at end of file
+
diff --git a/src/icons/svg/x.svg b/src/icons/svg/x.svg
index 418b0af632..94df3ddcbe 100644
--- a/src/icons/svg/x.svg
+++ b/src/icons/svg/x.svg
@@ -1 +1,3 @@
-
\ No newline at end of file
+
diff --git a/src/icons/svg/youtube.svg b/src/icons/svg/youtube.svg
index 15161ca632..ab2fae7c06 100644
--- a/src/icons/svg/youtube.svg
+++ b/src/icons/svg/youtube.svg
@@ -1 +1,3 @@
-
\ No newline at end of file
+
diff --git a/src/lib/animations/Products/Products.svelte b/src/lib/animations/Products/Products.svelte
index 1ab065969b..7ba932f5e8 100644
--- a/src/lib/animations/Products/Products.svelte
+++ b/src/lib/animations/Products/Products.svelte
@@ -355,7 +355,7 @@
display: none;
}
- @media (min-width: 1440px) {
+ @media (min-width: 1400px) {
#products {
display: block;
}
diff --git a/src/lib/animations/Products/ProductsMobile.svelte b/src/lib/animations/Products/ProductsMobile.svelte
index 77e2443451..86e218788f 100644
--- a/src/lib/animations/Products/ProductsMobile.svelte
+++ b/src/lib/animations/Products/ProductsMobile.svelte
@@ -1,200 +1,202 @@
-
Products_
-
-
- Your backend, minus the hassle
-
-
-
- Build secure and scalable applications with less code. Add authentication, databases, storage, and more using Appwrite's development platform.
-
-
-
- {#each objectKeys(infos) as prod}
- {@const info = infos[prod]}
-
- {#if info}
-
-
-
- {info.title}
-
-
-
{info.subtitle}
-
- {info.description}
-
-
- {#each info.features as feature}
- - {feature}
- {/each}
-
-
- {#if info.shot}
-

- {/if}
-
- {/if}
- {/each}
-
-
-
-

-
-
-
See your products grow
-
- Keep track of your projects progress on the Appwrite Console and see them grow into products users love and use every day.
-
-
+
Products_
+
+
+ Your backend, minus the hassle
+
+
+
+ Build secure and scalable applications with less code. Add authentication, databases,
+ storage, and more using Appwrite's development platform.
+
+
+
+ {#each objectKeys(infos) as prod}
+ {@const info = infos[prod]}
+
+ {#if info}
+
+
+
+ {info.title}
+
+
+
{info.subtitle}
+
+ {info.description}
+
+
+ {#each info.features as feature}
+ - {feature}
+ {/each}
+
+
+ {#if info.shot}
+

+ {/if}
+
+ {/if}
+ {/each}
+
+
+
+

+
+
+
See your products grow
+
+ Keep track of your projects progress on the Appwrite Console and see them grow into
+ products users love and use every day.
+
+
diff --git a/src/lib/animations/Products/auth/controls.svelte b/src/lib/animations/Products/auth/controls.svelte
index d1d84fd1eb..9662876281 100644
--- a/src/lib/animations/Products/auth/controls.svelte
+++ b/src/lib/animations/Products/auth/controls.svelte
@@ -1,77 +1,81 @@
- {#each objectKeys($state.controls) as provider, i}
- {@const isLast = i === objectKeys($state.controls).length - 1}
-
-
- {provider}
-
-
- {#if !isLast}
-
- {/if}
- {/each}
+ {#each objectKeys($state.controls) as provider, i}
+ {@const isLast = i === objectKeys($state.controls).length - 1}
+
+
+ {provider}
+
+
+ {#if !isLast}
+
+ {/if}
+ {/each}
diff --git a/src/lib/animations/index.ts b/src/lib/animations/index.ts
index 0ec36716fd..35db7a9b9b 100644
--- a/src/lib/animations/index.ts
+++ b/src/lib/animations/index.ts
@@ -1,50 +1,50 @@
import type { Action } from 'svelte/action';
import {
- animate as motionAnimate,
- type ElementOrSelector,
- type MotionKeyframesDefinition,
- type AnimationOptionsWithOverrides,
- animate
+ animate as motionAnimate,
+ type ElementOrSelector,
+ type MotionKeyframesDefinition,
+ type AnimationOptionsWithOverrides,
+ animate
} from 'motion';
export function animation(
- elementOrSelector: ElementOrSelector,
- keyframes: MotionKeyframesDefinition,
- options?: AnimationOptionsWithOverrides
+ elementOrSelector: ElementOrSelector,
+ keyframes: MotionKeyframesDefinition,
+ options?: AnimationOptionsWithOverrides
) {
- const play = () => {
- const played = motionAnimate(elementOrSelector, keyframes, options);
- return played;
- };
-
- const reverse = () => {
- const reversedKeyframes = Object.fromEntries(
- Object.entries(keyframes).map(([key, keyframe]) => {
- return [key, Array.isArray(keyframe) ? [...keyframe].reverse() : keyframe];
- })
- ) as typeof keyframes;
- const reversed = motionAnimate(elementOrSelector, reversedKeyframes, options);
- return reversed;
- };
-
- return {
- play,
- reverse
- };
+ const play = () => {
+ const played = motionAnimate(elementOrSelector, keyframes, options);
+ return played;
+ };
+
+ const reverse = () => {
+ const reversedKeyframes = Object.fromEntries(
+ Object.entries(keyframes).map(([key, keyframe]) => {
+ return [key, Array.isArray(keyframe) ? [...keyframe].reverse() : keyframe];
+ })
+ ) as typeof keyframes;
+ const reversed = motionAnimate(elementOrSelector, reversedKeyframes, options);
+ return reversed;
+ };
+
+ return {
+ play,
+ reverse
+ };
}
export type Animation = ReturnType;
export const safeAnimate = (
- elementOrSelector: ElementOrSelector,
- keyframes: MotionKeyframesDefinition,
- options?: AnimationOptionsWithOverrides
+ elementOrSelector: ElementOrSelector,
+ keyframes: MotionKeyframesDefinition,
+ options?: AnimationOptionsWithOverrides
) => {
- try {
- return animate(elementOrSelector, keyframes, options);
- } catch {
- // do nothing lol
- }
+ try {
+ return animate(elementOrSelector, keyframes, options);
+ } catch {
+ // do nothing lol
+ }
};
type Unsubscriber = () => void;
@@ -52,138 +52,135 @@ type Unsubscriber = () => void;
type PreviousScroll = 'before' | 'after' | undefined;
type ScrollCallbackState = {
- previous?: PreviousScroll;
- unsubscribe?: Unsubscriber;
- executedCount: number;
+ previous?: PreviousScroll;
+ unsubscribe?: Unsubscriber;
+ executedCount: number;
};
export type ScrollCallback = {
- percentage: number;
- whenAfter?: (args: Omit) => Unsubscriber | void;
+ percentage: number;
+ whenAfter?: (args: Omit) => Unsubscriber | void;
};
export function createScrollHandler(callbacks: ScrollCallback[]) {
- const states: ScrollCallbackState[] = callbacks.map(() => ({ executedCount: 0 }));
-
- const handler = function (scrollPercentage: number) {
- callbacks.forEach((callback, i) => {
- const { percentage, whenAfter } = callback;
- const { previous, unsubscribe, executedCount } = states[i];
-
- if (scrollPercentage >= percentage && previous !== 'after') {
- // Execute whenAfter
- states[i].unsubscribe = whenAfter?.({ previous, executedCount }) ?? undefined;
- states[i].previous = 'after';
- if (whenAfter) {
- states[i].executedCount++;
- }
- } else if (scrollPercentage < percentage && previous === 'after') {
- unsubscribe?.();
- states[i].unsubscribe = undefined;
- states[i].previous = 'before';
- }
- });
- };
-
- handler.reset = () => {
- states.forEach((state) => {
- // state.unsubscribe?.();
- state.unsubscribe = undefined;
- state.previous = undefined;
- state.executedCount = 0;
- });
- };
-
- return handler;
+ const states: ScrollCallbackState[] = callbacks.map(() => ({ executedCount: 0 }));
+
+ const handler = function (scrollPercentage: number) {
+ callbacks.forEach((callback, i) => {
+ const { percentage, whenAfter } = callback;
+ const { previous, unsubscribe, executedCount } = states[i];
+
+ if (scrollPercentage >= percentage && previous !== 'after') {
+ // Execute whenAfter
+ states[i].unsubscribe = whenAfter?.({ previous, executedCount }) ?? undefined;
+ states[i].previous = 'after';
+ if (whenAfter) {
+ states[i].executedCount++;
+ }
+ } else if (scrollPercentage < percentage && previous === 'after') {
+ unsubscribe?.();
+ states[i].unsubscribe = undefined;
+ states[i].previous = 'before';
+ }
+ });
+ };
+
+ handler.reset = () => {
+ states.forEach((state) => {
+ // state.unsubscribe?.();
+ state.unsubscribe = undefined;
+ state.previous = undefined;
+ state.executedCount = 0;
+ });
+ };
+
+ return handler;
}
export type ScrollInfo = {
- percentage: number;
- traversed: number;
- remaning: number;
+ percentage: number;
+ traversed: number;
+ remaning: number;
};
export const scroll: Action<
- HTMLElement,
- undefined,
- {
- 'on:aw-scroll': (e: CustomEvent) => void;
- 'on:aw-resize': (e: CustomEvent) => void;
- }
+ HTMLElement,
+ undefined,
+ {
+ 'on:aw-scroll': (e: CustomEvent) => void;
+ 'on:aw-resize': (e: CustomEvent) => void;
+ }
> = (node) => {
- function getScrollInfo(): ScrollInfo {
- const { top, height } = node.getBoundingClientRect();
- const { innerHeight } = window;
-
- const scrollHeight = height - innerHeight;
- const scrollPercentage = (-1 * top) / scrollHeight;
-
- const traversed = scrollPercentage * scrollHeight;
- const remaning = scrollHeight - traversed;
-
- return {
- percentage: scrollPercentage,
- traversed,
- remaning
- };
- }
-
- const handleScroll = () => {
- node.dispatchEvent(
- new CustomEvent('aw-scroll', {
- detail: getScrollInfo()
- })
- );
- };
-
- const handleResize = () => {
- node.dispatchEvent(
- new CustomEvent('aw-resize', {
- detail: getScrollInfo()
- })
- );
- };
-
- handleScroll();
- handleResize();
-
- window.addEventListener('scroll', handleScroll);
- window.addEventListener('resize', handleResize);
-
- return {
- destroy() {
- window.removeEventListener('scroll', handleScroll);
- window.removeEventListener('resize', handleResize);
- }
- };
+ function getScrollInfo(): ScrollInfo {
+ const { top, height } = node.getBoundingClientRect();
+ const { innerHeight } = window;
+
+ const scrollHeight = height - innerHeight;
+ const scrollPercentage = (-1 * top) / scrollHeight;
+
+ const traversed = scrollPercentage * scrollHeight;
+ const remaning = scrollHeight - traversed;
+
+ return {
+ percentage: scrollPercentage,
+ traversed,
+ remaning
+ };
+ }
+
+ const createHandler = (eventName: 'aw-scroll' | 'aw-resize') => {
+ return () => {
+ node.dispatchEvent(
+ new CustomEvent(eventName, {
+ detail: getScrollInfo()
+ })
+ );
+ };
+ };
+
+ const handleScroll = createHandler('aw-scroll');
+ const handleResize = createHandler('aw-resize');
+
+ handleScroll();
+ handleResize();
+
+ window.addEventListener('scroll', handleScroll);
+ window.addEventListener('resize', handleResize);
+
+ return {
+ destroy() {
+ window.removeEventListener('scroll', handleScroll);
+ window.removeEventListener('resize', handleResize);
+ }
+ };
};
type TimelineEvent = {
- at: number;
- callback: () => void;
+ at: number;
+ callback: () => void;
};
export function createTimeline(events: TimelineEvent[]) {
- let timeoutIds: NodeJS.Timeout[] = [];
+ let timeoutIds: NodeJS.Timeout[] = [];
- const play = () => {
- events.forEach((event) => {
- const timeoutId = setTimeout(event.callback, event.at);
- timeoutIds.push(timeoutId);
- });
- };
+ const play = () => {
+ events.forEach((event) => {
+ const timeoutId = setTimeout(event.callback, event.at);
+ timeoutIds.push(timeoutId);
+ });
+ };
- const cancel = () => {
- timeoutIds.forEach(clearTimeout);
- timeoutIds = [];
- };
+ const cancel = () => {
+ timeoutIds.forEach(clearTimeout);
+ timeoutIds = [];
+ };
- return { play, cancel };
+ return { play, cancel };
}
type ProgressEvent = {
- percentage: number;
- callback: () => void;
+ percentage: number;
+ callback: () => void;
};
/**
@@ -194,54 +191,54 @@ type ProgressEvent = {
* handler(0.45) // will execute the event with percentage 0.4.
*/
export function createProgressSequence(events: ProgressEvent[]) {
- // Sort from highest to lowest percentage
- const sortedEvents = [...events].sort((a, b) => b.percentage - a.percentage);
-
- let lastEventIdx = -1;
-
- const handler = (percentage: number) => {
- const idx = sortedEvents.findIndex((event) => event.percentage <= percentage);
- if (idx === lastEventIdx) {
- return;
- }
- const event = sortedEvents[idx];
- event?.callback();
- lastEventIdx = idx;
- };
-
- handler.resetLastEventIdx = () => {
- lastEventIdx = -1;
- };
-
- return handler;
+ // Sort from highest to lowest percentage
+ const sortedEvents = [...events].sort((a, b) => b.percentage - a.percentage);
+
+ let lastEventIdx = -1;
+
+ const handler = (percentage: number) => {
+ const idx = sortedEvents.findIndex((event) => event.percentage <= percentage);
+ if (idx === lastEventIdx) {
+ return;
+ }
+ const event = sortedEvents[idx];
+ event?.callback();
+ lastEventIdx = idx;
+ };
+
+ handler.resetLastEventIdx = () => {
+ lastEventIdx = -1;
+ };
+
+ return handler;
}
export type ProgressSequence = ReturnType;
export function write(text: string, cb: (v: string) => void, duration = 500) {
- const step = duration / text.length;
- let i = 0;
- return new Promise((resolve) => {
- const interval = setInterval(() => {
- cb(text.slice(0, ++i));
- if (i === text.length) {
- clearInterval(interval);
- resolve(undefined);
- }
- }, step);
- });
+ const step = duration / text.length;
+ let i = 0;
+ return new Promise((resolve) => {
+ const interval = setInterval(() => {
+ cb(text.slice(0, ++i));
+ if (i === text.length) {
+ clearInterval(interval);
+ resolve(undefined);
+ }
+ }, step);
+ });
}
export function sleep(duration: number) {
- return new Promise((resolve) => {
- setTimeout(resolve, duration);
- });
+ return new Promise((resolve) => {
+ setTimeout(resolve, duration);
+ });
}
export function getInitials(name: string) {
- return name
- .split(' ')
- .map((word) => word?.[0]?.toUpperCase() ?? '')
- .join('')
- .slice(0, 2);
+ return name
+ .split(' ')
+ .map((word) => word?.[0]?.toUpperCase() ?? '')
+ .join('')
+ .slice(0, 2);
}
diff --git a/src/lib/components/Article.svelte b/src/lib/components/Article.svelte
index 0dc3284772..7b59e0bb52 100644
--- a/src/lib/components/Article.svelte
+++ b/src/lib/components/Article.svelte
@@ -9,7 +9,7 @@
-
+
diff --git a/src/lib/components/FloatingHead.svelte b/src/lib/components/FloatingHead.svelte
index 975e0fb833..05bde99494 100644
--- a/src/lib/components/FloatingHead.svelte
+++ b/src/lib/components/FloatingHead.svelte
@@ -22,7 +22,7 @@
);
display: inline-block;
- position: absolute;
+ position: var(--position, absolute);
top: var(--top);
left: var(--left);
bottom: var(--bottom);
@@ -34,6 +34,10 @@
rgba(255, 255, 255, 0) 161.63%
);
box-shadow: 0px 5.35px 10.7px 0px rgba(0, 0, 0, 0.02);
+
+ &.isRelative {
+ position: relative;
+ }
}
img {
diff --git a/src/lib/components/MobileNav.svelte b/src/lib/components/MobileNav.svelte
index 0d03ee2908..8ce7fd4504 100644
--- a/src/lib/components/MobileNav.svelte
+++ b/src/lib/components/MobileNav.svelte
@@ -1,50 +1,50 @@
open && (open = false)} />
diff --git a/src/lib/components/PreFooter.svelte b/src/lib/components/PreFooter.svelte
index 8c240b776b..c53668fdca 100644
--- a/src/lib/components/PreFooter.svelte
+++ b/src/lib/components/PreFooter.svelte
@@ -1,139 +1,97 @@
-
+
-
-
- Start building today
-
-
- Start building today
-
-
-
-
-
-
-
- -
-
-
- -
-
-
-
Pro
-
$15
-
per org member/month
-
-
- For pro developers and teams that need to scale their products.
-
-
-
-
- -
-
-
-
Scale
-
$685
-
per org/month
-
-
- For pro developers and production projects that need the ability to scale.
-
-
-
-
-
-
-
-
-
+
+
+ Start building today
+
+
+ Start building today
+
+
+
+
+
+
+ -
+
+
+ -
+
+
+
Pro
+
$15
+
per org member/month
+
+
+ For pro developers and teams that need to scale their products.
+
+
+
+
+ -
+
+
+
Scale
+
$685
+
per org/month
+
+
+ For pro developers and production projects that need the ability to scale.
+
+
+
+
+
+
diff --git a/src/lib/components/Search.svelte b/src/lib/components/Search.svelte
index 2d397c2987..722ea9dbe3 100644
--- a/src/lib/components/Search.svelte
+++ b/src/lib/components/Search.svelte
@@ -1,8 +1,9 @@
- {#each platforms as platform}
-
- -
-
-
-
-
- {platform.name}
-
- {/each}
+ {#each platforms as platform}
+
+ -
+
+
+
+
+ {platform.name}
+
+ {/each}
diff --git a/src/lib/components/ThemeSelect.svelte b/src/lib/components/ThemeSelect.svelte
index d5aba092d8..090dc46914 100644
--- a/src/lib/components/ThemeSelect.svelte
+++ b/src/lib/components/ThemeSelect.svelte
@@ -17,7 +17,7 @@
{
value: 'system',
label: 'System',
- icon: 'icon-server'
+ icon: 'aw-icon-system'
}
];
diff --git a/src/lib/layouts/Docs.svelte b/src/lib/layouts/Docs.svelte
index 2b7a3d2d05..523f23e348 100644
--- a/src/lib/layouts/Docs.svelte
+++ b/src/lib/layouts/Docs.svelte
@@ -33,8 +33,9 @@
-
- {seoTitle}
-
-
-
-
-
-
-
-
-
-
-
-
+
+ {seoTitle}
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
+
+
+
+
-
-
-
- {#if avatar}
-
-

-
- {/if}
-
{name}
- {#if role}
-
{role}
- {/if}
- {#if bio}
-
- {bio}
-
- {/if}
-
- {#if github}
- -
-
-
-
-
- {/if}
- {#if twitter}
- -
-
-
-
-
- {/if}
- {#if linkedin}
- -
-
-
-
-
- {/if}
-
-
-
-
-
+
+
+
+ {#if avatar}
+
+ {/if}
+
{name}
+ {#if role}
+
{role}
+ {/if}
+ {#if bio}
+
+ {bio}
+
+ {/if}
+
+ {#if github}
+ -
+
+
+
+
+ {/if}
+ {#if twitter}
+ -
+
+
+
+
+ {/if}
+ {#if linkedin}
+ -
+
+
+
+
+ {/if}
+
+
+
+
+
-
-
-
-
Articles
+
+
+
+
Articles
-
-
-
-
-
- {#each posts.filter((p) => p.author === author?.slug) as post}
-
- {/each}
-
-
-
-
-
-
+
+
+ {#each posts.filter((p) => p.author === author?.slug) as post}
+
+ {/each}
+
+
+
+
+
+
diff --git a/src/routes/+layout.svelte b/src/routes/+layout.svelte
index ba3a9ae1b0..80489e1589 100644
--- a/src/routes/+layout.svelte
+++ b/src/routes/+layout.svelte
@@ -13,6 +13,10 @@
return { ...store, set };
})();
+ export const themeInUse = derived(currentTheme, (theme) => {
+ return theme === 'system' ? getSystemTheme() : theme;
+ });
+
function isTheme(theme: unknown): theme is Theme {
return ['dark', 'light', 'system'].includes(theme as Theme);
}
@@ -41,7 +45,7 @@
import '$scss/index.scss';
import { browser, dev } from '$app/environment';
- import { writable } from 'svelte/store';
+ import { derived, writable } from 'svelte/store';
import { navigating, page } from '$app/stores';
import { onMount } from 'svelte';
diff --git a/src/routes/blog/+page.svelte b/src/routes/blog/+page.svelte
index c55b548aa9..17a8c1120b 100644
--- a/src/routes/blog/+page.svelte
+++ b/src/routes/blog/+page.svelte
@@ -1,280 +1,205 @@
-
- {title}
-
-
-
-
-
-
-
-
-
-
-
-
+
+ {title}
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
+
+
+
+
-
-
-
Blog
- {#if featured}
- {@const author = data.authors.find((author) => author.slug === featured.author)}
-
-
-
-
-
-
-
- {featured.description}
-
-
-
-

-
-
-
-
-
- Read article
-
-
-
- {/if}
-
-
-
-
-
-
-
Articles
-
+
+
+
Blog
+ {#if featured}
+ {@const author = data.authors.find((author) => author.slug === featured.author)}
+
+
+
+
+
+
+
+ {featured.description}
+
+
+
+

+
+
+
+
+
+ Read article
+
+
+
+ {/if}
+
+
+
+
+
+
+
Articles
-
-
- {#each data.posts as post}
- {@const author = data.authors.find((author) => author.slug === post.author)}
- {#if author}
-
- {/if}
- {/each}
-
-
-
-
-
-
+
+
+ {#each data.posts as post}
+ {@const author = data.authors.find(
+ (author) => author.slug === post.author
+ )}
+ {#if author}
+
+ {/if}
+ {/each}
+
+
+
+
+
+
diff --git a/src/routes/community/+page.svelte b/src/routes/community/+page.svelte
index e786929c32..631da2bb6b 100644
--- a/src/routes/community/+page.svelte
+++ b/src/routes/community/+page.svelte
@@ -9,6 +9,8 @@
import FloatingHeads from '$lib/components/FloatingHeads.svelte';
import type { EventCardProps } from './EventCard.svelte';
import EventCard from './EventCard.svelte';
+ import type { ProjectCardProps } from './ProjectCard.svelte';
+ import ProjectCard from './ProjectCard.svelte';
const events: EventCardProps[] = [
{
@@ -62,6 +64,37 @@
}
];
+ const projects: ProjectCardProps[] = [
+ {
+ title: 'Auth UI',
+ description: 'Appwirte-powered authentication screens generator for any application.',
+ image: {
+ src: 'https://cloud.appwrite.io/v1/storage/buckets/thumbnails/files/64803bb4f34eb4b05ee3/preview?width=800&output=webp&project=builtWithAppwrite',
+ alt: 'Auth UI: Fully customizable login flow for your applications'
+ },
+ href: 'https://builtwith.appwrite.io/projects/6467cedd4502d0e29205/'
+ },
+ {
+ title: 'Glitch',
+ description: 'Appwrite-powered collaboration Tool for streamlined team communication.',
+ image: {
+ src: '/images/community/projects/glitch.png',
+ alt: 'A screenshot of the Glitch dashboard. There\'s a sidebar, and a headline that reads: "Welcome to Glitch, powered by Appwrite"'
+ },
+ href: 'https://builtwith.appwrite.io/projects/648bfe0c1d8d70602b0b/'
+ },
+ {
+ title: 'uCanEarn',
+ description:
+ 'Appwrite-powered platform where you can sell your digital products online.',
+ image: {
+ src: '/images/community/projects/ucanearn.png',
+ alt: "A screenshot of uCanEarn's website"
+ },
+ href: 'https://builtwith.appwrite.io/projects/648606ad9cd179190b28/'
+ }
+ ];
+
const title = 'Community' + TITLE_SUFFIX;
const description = DEFAULT_DESCRIPTION;
const ogImage = DEFAULT_HOST + '/images/open-graph/website.png';
@@ -85,7 +118,7 @@
-