Compare commits
25 commits
112462e5a1
...
d758bb3b3f
| Author | SHA1 | Date | |
|---|---|---|---|
| d758bb3b3f | |||
| 68149616b6 | |||
| 3d41ce538f | |||
| 9bf0c14d1f | |||
| 6e6a927f76 | |||
| f0a361c56d | |||
| f79762b1e0 | |||
| 13c341d4ff | |||
| 86dff5272e | |||
| 2d010fdcce | |||
| b9e309b52f | |||
| efd41dce7c | |||
| 7db1d5ef4e | |||
| 772444e384 | |||
| 0a60d80167 | |||
| 3190a5b61d | |||
| 8e09b8f0d9 | |||
| 6a60ce55e5 | |||
| d455aeb957 | |||
| 06c371db53 | |||
| db06b79cf4 | |||
| 9dc1fabdf1 | |||
| b6cf05b0af | |||
| 51c4c024a8 | |||
| a3db23bceb |
32 changed files with 541 additions and 160 deletions
211
package-lock.json
generated
211
package-lock.json
generated
|
|
@ -21,7 +21,7 @@
|
||||||
"eslint": "^9.21.0",
|
"eslint": "^9.21.0",
|
||||||
"eslint-config-prettier": "^10.0.1",
|
"eslint-config-prettier": "^10.0.1",
|
||||||
"eslint-plugin-svelte": "^3.0.0",
|
"eslint-plugin-svelte": "^3.0.0",
|
||||||
"mdsvex": "^0.12.3",
|
"mdsvex": "^0.12.6",
|
||||||
"mdsvex-relative-images": "^1.0.3",
|
"mdsvex-relative-images": "^1.0.3",
|
||||||
"postcss": "^8.5.3",
|
"postcss": "^8.5.3",
|
||||||
"prettier": "^3.5.2",
|
"prettier": "^3.5.2",
|
||||||
|
|
@ -521,9 +521,9 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@eslint/config-array": {
|
"node_modules/@eslint/config-array": {
|
||||||
"version": "0.19.2",
|
"version": "0.21.0",
|
||||||
"resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.19.2.tgz",
|
"resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.21.0.tgz",
|
||||||
"integrity": "sha512-GNKqxfHG2ySmJOBSHg7LxeUx4xpuCoFjacmlCoYWEbaPXLwvfIjixRI12xCQZeULksQb23uiA8F40w5TojpV7w==",
|
"integrity": "sha512-ENIdc4iLu0d93HeYirvKmrzshzofPw6VkZRKQGe9Nv46ZnWUzcF1xV01dcvEg/1wXUR61OmmlSfyeyO7EvjLxQ==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "Apache-2.0",
|
"license": "Apache-2.0",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
|
@ -535,10 +535,20 @@
|
||||||
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
|
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/@eslint/config-helpers": {
|
||||||
|
"version": "0.3.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.3.0.tgz",
|
||||||
|
"integrity": "sha512-ViuymvFmcJi04qdZeDc2whTHryouGcDlaxPqarTD0ZE10ISpxGUVZGZDx4w01upyIynL3iu6IXH2bS1NhclQMw==",
|
||||||
|
"dev": true,
|
||||||
|
"license": "Apache-2.0",
|
||||||
|
"engines": {
|
||||||
|
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/@eslint/core": {
|
"node_modules/@eslint/core": {
|
||||||
"version": "0.12.0",
|
"version": "0.15.2",
|
||||||
"resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.12.0.tgz",
|
"resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.15.2.tgz",
|
||||||
"integrity": "sha512-cmrR6pytBuSMTaBweKoGMwu3EiHiEC+DoyupPmlZ0HxBJBtIxwe+j/E4XPIKNx+Q74c8lXKPwYawBf5glsTkHg==",
|
"integrity": "sha512-78Md3/Rrxh83gCxoUc0EiciuOHsIITzLy53m3d9UyiW8y9Dj2D29FeETqyKA+BRK76tnTp6RXWb3pCay8Oyomg==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "Apache-2.0",
|
"license": "Apache-2.0",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
|
@ -549,9 +559,9 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@eslint/eslintrc": {
|
"node_modules/@eslint/eslintrc": {
|
||||||
"version": "3.3.0",
|
"version": "3.3.1",
|
||||||
"resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.0.tgz",
|
"resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.1.tgz",
|
||||||
"integrity": "sha512-yaVPAiNAalnCZedKLdR21GOGILMLKPyqSLWaAjQFvYA2i/ciDi8ArYVr69Anohb6cH2Ukhqti4aFnYyPm8wdwQ==",
|
"integrity": "sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
|
@ -573,13 +583,16 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@eslint/js": {
|
"node_modules/@eslint/js": {
|
||||||
"version": "9.21.0",
|
"version": "9.31.0",
|
||||||
"resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.21.0.tgz",
|
"resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.31.0.tgz",
|
||||||
"integrity": "sha512-BqStZ3HX8Yz6LvsF5ByXYrtigrV5AXADWLAGc7PH/1SxOb7/FIYYMszZZWiUou/GB9P2lXWk2SV4d+Z8h0nknw==",
|
"integrity": "sha512-LOm5OVt7D4qiKCqoiPbA7LWmI+tbw1VbTUowBcUMgQSuM6poJufkFkYDcQpo5KfgD39TnNySV26QjOh7VFpSyw==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
|
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
|
||||||
|
},
|
||||||
|
"funding": {
|
||||||
|
"url": "https://eslint.org/donate"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@eslint/object-schema": {
|
"node_modules/@eslint/object-schema": {
|
||||||
|
|
@ -593,13 +606,13 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@eslint/plugin-kit": {
|
"node_modules/@eslint/plugin-kit": {
|
||||||
"version": "0.2.7",
|
"version": "0.3.5",
|
||||||
"resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.2.7.tgz",
|
"resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.3.5.tgz",
|
||||||
"integrity": "sha512-JubJ5B2pJ4k4yGxaNLdbjrnk9d/iDz6/q8wOilpIowd6PJPgaxCuHBnBszq7Ce2TyMrywm5r4PnKm6V3iiZF+g==",
|
"integrity": "sha512-Z5kJ+wU3oA7MMIqVR9tyZRtjYPr4OC004Q4Rw7pgOKUOKkJfZ3O24nz3WYfGRpMDNmcOi3TwQOmgm7B7Tpii0w==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "Apache-2.0",
|
"license": "Apache-2.0",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@eslint/core": "^0.12.0",
|
"@eslint/core": "^0.15.2",
|
||||||
"levn": "^0.4.1"
|
"levn": "^0.4.1"
|
||||||
},
|
},
|
||||||
"engines": {
|
"engines": {
|
||||||
|
|
@ -1159,6 +1172,13 @@
|
||||||
"win32"
|
"win32"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
"node_modules/@standard-schema/spec": {
|
||||||
|
"version": "1.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/@standard-schema/spec/-/spec-1.0.0.tgz",
|
||||||
|
"integrity": "sha512-m2bOd0f2RT9k8QJx1JN85cZYyH1RqFBdlwtkSlf4tBDYLCiiZnv1fIIwacK6cqwXavOydf0NPToMQgpKq+dVlA==",
|
||||||
|
"dev": true,
|
||||||
|
"license": "MIT"
|
||||||
|
},
|
||||||
"node_modules/@svelte-put/dragscroll": {
|
"node_modules/@svelte-put/dragscroll": {
|
||||||
"version": "4.0.0",
|
"version": "4.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/@svelte-put/dragscroll/-/dragscroll-4.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/@svelte-put/dragscroll/-/dragscroll-4.0.0.tgz",
|
||||||
|
|
@ -1193,9 +1213,9 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@sveltejs/adapter-static": {
|
"node_modules/@sveltejs/adapter-static": {
|
||||||
"version": "3.0.8",
|
"version": "3.0.9",
|
||||||
"resolved": "https://registry.npmjs.org/@sveltejs/adapter-static/-/adapter-static-3.0.8.tgz",
|
"resolved": "https://registry.npmjs.org/@sveltejs/adapter-static/-/adapter-static-3.0.9.tgz",
|
||||||
"integrity": "sha512-YaDrquRpZwfcXbnlDsSrBQNCChVOT9MGuSg+dMAyfsAa1SmiAhrA5jUYUiIMC59G92kIbY/AaQOWcBdq+lh+zg==",
|
"integrity": "sha512-aytHXcMi7lb9ljsWUzXYQ0p5X1z9oWud2olu/EpmH7aCu4m84h7QLvb5Wp+CFirKcwoNnYvYWhyP/L8Vh1ztdw==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"peerDependencies": {
|
"peerDependencies": {
|
||||||
|
|
@ -1203,25 +1223,25 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@sveltejs/kit": {
|
"node_modules/@sveltejs/kit": {
|
||||||
"version": "2.22.2",
|
"version": "2.43.5",
|
||||||
"resolved": "https://registry.npmjs.org/@sveltejs/kit/-/kit-2.22.2.tgz",
|
"resolved": "https://registry.npmjs.org/@sveltejs/kit/-/kit-2.43.5.tgz",
|
||||||
"integrity": "sha512-2MvEpSYabUrsJAoq5qCOBGAlkICjfjunrnLcx3YAk2XV7TvAIhomlKsAgR4H/4uns5rAfYmj7Wet5KRtc8dPIg==",
|
"integrity": "sha512-44Mm5csR4mesKx2Eyhtk8UVrLJ4c04BT2wMTfYGKJMOkUqpHP5KLL2DPV0hXUA4t4+T3ZYe0aBygd42lVYv2cA==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
"@standard-schema/spec": "^1.0.0",
|
||||||
"@sveltejs/acorn-typescript": "^1.0.5",
|
"@sveltejs/acorn-typescript": "^1.0.5",
|
||||||
"@types/cookie": "^0.6.0",
|
"@types/cookie": "^0.6.0",
|
||||||
"acorn": "^8.14.1",
|
"acorn": "^8.14.1",
|
||||||
"cookie": "^0.6.0",
|
"cookie": "^0.6.0",
|
||||||
"devalue": "^5.1.0",
|
"devalue": "^5.3.2",
|
||||||
"esm-env": "^1.2.2",
|
"esm-env": "^1.2.2",
|
||||||
"kleur": "^4.1.5",
|
"kleur": "^4.1.5",
|
||||||
"magic-string": "^0.30.5",
|
"magic-string": "^0.30.5",
|
||||||
"mrmime": "^2.0.0",
|
"mrmime": "^2.0.0",
|
||||||
"sade": "^1.8.1",
|
"sade": "^1.8.1",
|
||||||
"set-cookie-parser": "^2.6.0",
|
"set-cookie-parser": "^2.6.0",
|
||||||
"sirv": "^3.0.0",
|
"sirv": "^3.0.0"
|
||||||
"vitefu": "^1.0.6"
|
|
||||||
},
|
},
|
||||||
"bin": {
|
"bin": {
|
||||||
"svelte-kit": "svelte-kit.js"
|
"svelte-kit": "svelte-kit.js"
|
||||||
|
|
@ -1230,9 +1250,15 @@
|
||||||
"node": ">=18.13"
|
"node": ">=18.13"
|
||||||
},
|
},
|
||||||
"peerDependencies": {
|
"peerDependencies": {
|
||||||
|
"@opentelemetry/api": "^1.0.0",
|
||||||
"@sveltejs/vite-plugin-svelte": "^3.0.0 || ^4.0.0-next.1 || ^5.0.0 || ^6.0.0-next.0",
|
"@sveltejs/vite-plugin-svelte": "^3.0.0 || ^4.0.0-next.1 || ^5.0.0 || ^6.0.0-next.0",
|
||||||
"svelte": "^4.0.0 || ^5.0.0-next.0",
|
"svelte": "^4.0.0 || ^5.0.0-next.0",
|
||||||
"vite": "^5.0.3 || ^6.0.0 || ^7.0.0-beta.0"
|
"vite": "^5.0.3 || ^6.0.0 || ^7.0.0-beta.0"
|
||||||
|
},
|
||||||
|
"peerDependenciesMeta": {
|
||||||
|
"@opentelemetry/api": {
|
||||||
|
"optional": true
|
||||||
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@sveltejs/vite-plugin-svelte": {
|
"node_modules/@sveltejs/vite-plugin-svelte": {
|
||||||
|
|
@ -1552,6 +1578,16 @@
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT"
|
"license": "MIT"
|
||||||
},
|
},
|
||||||
|
"node_modules/@types/mdast": {
|
||||||
|
"version": "4.0.4",
|
||||||
|
"resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz",
|
||||||
|
"integrity": "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==",
|
||||||
|
"dev": true,
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"@types/unist": "*"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/@types/node": {
|
"node_modules/@types/node": {
|
||||||
"version": "22.13.5",
|
"version": "22.13.5",
|
||||||
"resolved": "https://registry.npmjs.org/@types/node/-/node-22.13.5.tgz",
|
"resolved": "https://registry.npmjs.org/@types/node/-/node-22.13.5.tgz",
|
||||||
|
|
@ -1953,9 +1989,9 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/devalue": {
|
"node_modules/devalue": {
|
||||||
"version": "5.1.1",
|
"version": "5.3.2",
|
||||||
"resolved": "https://registry.npmjs.org/devalue/-/devalue-5.1.1.tgz",
|
"resolved": "https://registry.npmjs.org/devalue/-/devalue-5.3.2.tgz",
|
||||||
"integrity": "sha512-maua5KUiapvEwiEAe+XnlZ3Rh0GD+qI1J/nb9vrJc3muPXvcF/8gXYTWF76+5DAqHyDUtOIImEuo0YKE9mshVw==",
|
"integrity": "sha512-UDsjUbpQn9kvm68slnrs+mfxwFkIflOhkanmyabZ8zOYk8SMEIbJ3TK+88g70hSIeytu4y18f0z/hYHMTrXIWw==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT"
|
"license": "MIT"
|
||||||
},
|
},
|
||||||
|
|
@ -2045,19 +2081,20 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/eslint": {
|
"node_modules/eslint": {
|
||||||
"version": "9.21.0",
|
"version": "9.31.0",
|
||||||
"resolved": "https://registry.npmjs.org/eslint/-/eslint-9.21.0.tgz",
|
"resolved": "https://registry.npmjs.org/eslint/-/eslint-9.31.0.tgz",
|
||||||
"integrity": "sha512-KjeihdFqTPhOMXTt7StsDxriV4n66ueuF/jfPNC3j/lduHwr/ijDwJMsF+wyMJethgiKi5wniIE243vi07d3pg==",
|
"integrity": "sha512-QldCVh/ztyKJJZLr4jXNUByx3gR+TDYZCRXEktiZoUR3PGy4qCmSbkxcIle8GEwGpb5JBZazlaJ/CxLidXdEbQ==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@eslint-community/eslint-utils": "^4.2.0",
|
"@eslint-community/eslint-utils": "^4.2.0",
|
||||||
"@eslint-community/regexpp": "^4.12.1",
|
"@eslint-community/regexpp": "^4.12.1",
|
||||||
"@eslint/config-array": "^0.19.2",
|
"@eslint/config-array": "^0.21.0",
|
||||||
"@eslint/core": "^0.12.0",
|
"@eslint/config-helpers": "^0.3.0",
|
||||||
"@eslint/eslintrc": "^3.3.0",
|
"@eslint/core": "^0.15.0",
|
||||||
"@eslint/js": "9.21.0",
|
"@eslint/eslintrc": "^3.3.1",
|
||||||
"@eslint/plugin-kit": "^0.2.7",
|
"@eslint/js": "9.31.0",
|
||||||
|
"@eslint/plugin-kit": "^0.3.1",
|
||||||
"@humanfs/node": "^0.16.6",
|
"@humanfs/node": "^0.16.6",
|
||||||
"@humanwhocodes/module-importer": "^1.0.1",
|
"@humanwhocodes/module-importer": "^1.0.1",
|
||||||
"@humanwhocodes/retry": "^0.4.2",
|
"@humanwhocodes/retry": "^0.4.2",
|
||||||
|
|
@ -2068,9 +2105,9 @@
|
||||||
"cross-spawn": "^7.0.6",
|
"cross-spawn": "^7.0.6",
|
||||||
"debug": "^4.3.2",
|
"debug": "^4.3.2",
|
||||||
"escape-string-regexp": "^4.0.0",
|
"escape-string-regexp": "^4.0.0",
|
||||||
"eslint-scope": "^8.2.0",
|
"eslint-scope": "^8.4.0",
|
||||||
"eslint-visitor-keys": "^4.2.0",
|
"eslint-visitor-keys": "^4.2.1",
|
||||||
"espree": "^10.3.0",
|
"espree": "^10.4.0",
|
||||||
"esquery": "^1.5.0",
|
"esquery": "^1.5.0",
|
||||||
"esutils": "^2.0.2",
|
"esutils": "^2.0.2",
|
||||||
"fast-deep-equal": "^3.1.3",
|
"fast-deep-equal": "^3.1.3",
|
||||||
|
|
@ -2168,9 +2205,9 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/eslint-scope": {
|
"node_modules/eslint-scope": {
|
||||||
"version": "8.2.0",
|
"version": "8.4.0",
|
||||||
"resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.2.0.tgz",
|
"resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.4.0.tgz",
|
||||||
"integrity": "sha512-PHlWUfG6lvPc3yvP5A4PNyBL1W8fkDUccmI21JUu/+GKZBoH/W5u6usENXUrWFRsyoW5ACUjFGgAFQp5gUlb/A==",
|
"integrity": "sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "BSD-2-Clause",
|
"license": "BSD-2-Clause",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
|
@ -2185,9 +2222,9 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/eslint-visitor-keys": {
|
"node_modules/eslint-visitor-keys": {
|
||||||
"version": "4.2.0",
|
"version": "4.2.1",
|
||||||
"resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz",
|
"resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz",
|
||||||
"integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==",
|
"integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "Apache-2.0",
|
"license": "Apache-2.0",
|
||||||
"engines": {
|
"engines": {
|
||||||
|
|
@ -2205,15 +2242,15 @@
|
||||||
"license": "MIT"
|
"license": "MIT"
|
||||||
},
|
},
|
||||||
"node_modules/espree": {
|
"node_modules/espree": {
|
||||||
"version": "10.3.0",
|
"version": "10.4.0",
|
||||||
"resolved": "https://registry.npmjs.org/espree/-/espree-10.3.0.tgz",
|
"resolved": "https://registry.npmjs.org/espree/-/espree-10.4.0.tgz",
|
||||||
"integrity": "sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==",
|
"integrity": "sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "BSD-2-Clause",
|
"license": "BSD-2-Clause",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"acorn": "^8.14.0",
|
"acorn": "^8.15.0",
|
||||||
"acorn-jsx": "^5.3.2",
|
"acorn-jsx": "^5.3.2",
|
||||||
"eslint-visitor-keys": "^4.2.0"
|
"eslint-visitor-keys": "^4.2.1"
|
||||||
},
|
},
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
|
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
|
||||||
|
|
@ -3005,15 +3042,17 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/mdsvex": {
|
"node_modules/mdsvex": {
|
||||||
"version": "0.12.3",
|
"version": "0.12.6",
|
||||||
"resolved": "https://registry.npmjs.org/mdsvex/-/mdsvex-0.12.3.tgz",
|
"resolved": "https://registry.npmjs.org/mdsvex/-/mdsvex-0.12.6.tgz",
|
||||||
"integrity": "sha512-C/uIJamjNo5PHHnR3JHqsBPoLcfUBpzRmAEB6FLMXI/s7XHOceswjDMKqSPEW2WHmYpKm0taZ3U20GSyhMridA==",
|
"integrity": "sha512-pupx2gzWh3hDtm/iDW4WuCpljmyHbHi34r7ktOqpPGvyiM4MyfNgdJ3qMizXdgCErmvYC9Nn/qyjePy+4ss9Wg==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
"@types/mdast": "^4.0.4",
|
||||||
"@types/unist": "^2.0.3",
|
"@types/unist": "^2.0.3",
|
||||||
"prism-svelte": "^0.4.7",
|
"prism-svelte": "^0.4.7",
|
||||||
"prismjs": "^1.17.1",
|
"prismjs": "^1.17.1",
|
||||||
|
"unist-util-visit": "^2.0.1",
|
||||||
"vfile-message": "^2.0.4"
|
"vfile-message": "^2.0.4"
|
||||||
},
|
},
|
||||||
"peerDependencies": {
|
"peerDependencies": {
|
||||||
|
|
@ -3031,6 +3070,48 @@
|
||||||
"unist-util-visit": "^3.1.0"
|
"unist-util-visit": "^3.1.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/mdsvex/node_modules/unist-util-is": {
|
||||||
|
"version": "4.1.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.1.0.tgz",
|
||||||
|
"integrity": "sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg==",
|
||||||
|
"dev": true,
|
||||||
|
"license": "MIT",
|
||||||
|
"funding": {
|
||||||
|
"type": "opencollective",
|
||||||
|
"url": "https://opencollective.com/unified"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/mdsvex/node_modules/unist-util-visit": {
|
||||||
|
"version": "2.0.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-2.0.3.tgz",
|
||||||
|
"integrity": "sha512-iJ4/RczbJMkD0712mGktuGpm/U4By4FfDonL7N/9tATGIF4imikjOuagyMY53tnZq3NP6BcmlrHhEKAfGWjh7Q==",
|
||||||
|
"dev": true,
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"@types/unist": "^2.0.0",
|
||||||
|
"unist-util-is": "^4.0.0",
|
||||||
|
"unist-util-visit-parents": "^3.0.0"
|
||||||
|
},
|
||||||
|
"funding": {
|
||||||
|
"type": "opencollective",
|
||||||
|
"url": "https://opencollective.com/unified"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/mdsvex/node_modules/unist-util-visit-parents": {
|
||||||
|
"version": "3.1.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-3.1.1.tgz",
|
||||||
|
"integrity": "sha512-1KROIZWo6bcMrZEwiH2UrXDyalAa0uqzWCxCJj6lPOvTve2WkfgCytoDTPaMnodXh1WrXOq0haVYHj99ynJlsg==",
|
||||||
|
"dev": true,
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"@types/unist": "^2.0.0",
|
||||||
|
"unist-util-is": "^4.0.0"
|
||||||
|
},
|
||||||
|
"funding": {
|
||||||
|
"type": "opencollective",
|
||||||
|
"url": "https://opencollective.com/unified"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/merge2": {
|
"node_modules/merge2": {
|
||||||
"version": "1.4.1",
|
"version": "1.4.1",
|
||||||
"resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
|
"resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
|
||||||
|
|
@ -4167,9 +4248,9 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/vite": {
|
"node_modules/vite": {
|
||||||
"version": "6.3.5",
|
"version": "6.3.6",
|
||||||
"resolved": "https://registry.npmjs.org/vite/-/vite-6.3.5.tgz",
|
"resolved": "https://registry.npmjs.org/vite/-/vite-6.3.6.tgz",
|
||||||
"integrity": "sha512-cZn6NDFE7wdTpINgs++ZJ4N49W2vRp8LCKrn3Ob1kYNtOo21vfDoaV5GzBfLU4MovSAB8uNRm4jgzVQZ+mBzPQ==",
|
"integrity": "sha512-0msEVHJEScQbhkbVTb/4iHZdJ6SXp/AvxL2sjwYQFfBqleHtnCqv1J3sa9zbWz/6kW1m9Tfzn92vW+kZ1WV6QA==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
|
@ -4247,6 +4328,7 @@
|
||||||
"integrity": "sha512-+Rex1GlappUyNN6UfwbVZne/9cYC4+R2XDk9xkNXBKMw6HQagdX9PgZ8V2v1WUSK1wfBLp7qbI1+XSNIlB1xmA==",
|
"integrity": "sha512-+Rex1GlappUyNN6UfwbVZne/9cYC4+R2XDk9xkNXBKMw6HQagdX9PgZ8V2v1WUSK1wfBLp7qbI1+XSNIlB1xmA==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
|
"peer": true,
|
||||||
"workspaces": [
|
"workspaces": [
|
||||||
"tests/deps/*",
|
"tests/deps/*",
|
||||||
"tests/projects/*"
|
"tests/projects/*"
|
||||||
|
|
@ -4326,21 +4408,6 @@
|
||||||
"js-yaml": "bin/js-yaml.js"
|
"js-yaml": "bin/js-yaml.js"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/yaml": {
|
|
||||||
"version": "2.7.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/yaml/-/yaml-2.7.0.tgz",
|
|
||||||
"integrity": "sha512-+hSoy/QHluxmC9kCIJyL/uyFmLmc+e5CFR5Wa+bpIhIj85LVb9ZH2nVnqrHoSvKogwODv0ClqZkmiSSaIH5LTA==",
|
|
||||||
"dev": true,
|
|
||||||
"license": "ISC",
|
|
||||||
"optional": true,
|
|
||||||
"peer": true,
|
|
||||||
"bin": {
|
|
||||||
"yaml": "bin.mjs"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": ">= 14"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/yocto-queue": {
|
"node_modules/yocto-queue": {
|
||||||
"version": "0.1.0",
|
"version": "0.1.0",
|
||||||
"resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
|
"resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
|
||||||
|
|
|
||||||
|
|
@ -24,7 +24,7 @@
|
||||||
"eslint": "^9.21.0",
|
"eslint": "^9.21.0",
|
||||||
"eslint-config-prettier": "^10.0.1",
|
"eslint-config-prettier": "^10.0.1",
|
||||||
"eslint-plugin-svelte": "^3.0.0",
|
"eslint-plugin-svelte": "^3.0.0",
|
||||||
"mdsvex": "^0.12.3",
|
"mdsvex": "^0.12.6",
|
||||||
"mdsvex-relative-images": "^1.0.3",
|
"mdsvex-relative-images": "^1.0.3",
|
||||||
"postcss": "^8.5.3",
|
"postcss": "^8.5.3",
|
||||||
"prettier": "^3.5.2",
|
"prettier": "^3.5.2",
|
||||||
|
|
|
||||||
16
src/app.css
16
src/app.css
|
|
@ -26,11 +26,15 @@
|
||||||
src: url('/fonts/Disket-Mono-Bold.ttf');
|
src: url('/fonts/Disket-Mono-Bold.ttf');
|
||||||
}
|
}
|
||||||
|
|
||||||
.no-x-scroll {
|
.hero {
|
||||||
max-width: 100%;
|
@apply bg-[url('/common/background-day.webp')] dark:bg-[url('/common/background-night.webp')] bg-cover bg-fixed text-slate-50;
|
||||||
overflow-x: hidden;
|
text-shadow: 0 0 15px rgba(0, 0, 0, 0.25);
|
||||||
}
|
|
||||||
|
|
||||||
.hero-background {
|
h1 {
|
||||||
@apply bg-[url('/common/background-day.webp')] dark:bg-[url('/common/background-night.webp')] bg-cover bg-fixed;
|
@apply font-disket text-4xl font-bold sm:text-6xl md:text-8xl;
|
||||||
|
}
|
||||||
|
|
||||||
|
h2 {
|
||||||
|
@apply font-sans text-xl font-bold sm:text-2xl md:text-4xl;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
9
src/app.d.ts
vendored
9
src/app.d.ts
vendored
|
|
@ -1,5 +1,3 @@
|
||||||
import type { Member } from '$lib/types/Member';
|
|
||||||
|
|
||||||
declare global {
|
declare global {
|
||||||
namespace App {
|
namespace App {
|
||||||
// interface Error {}
|
// interface Error {}
|
||||||
|
|
@ -23,12 +21,13 @@ declare global {
|
||||||
interface BlogPost {
|
interface BlogPost {
|
||||||
slug: string;
|
slug: string;
|
||||||
title: string;
|
title: string;
|
||||||
thumbnail: string;
|
thumbnail?: string;
|
||||||
date: string;
|
date?: string;
|
||||||
|
dateChanged?: string;
|
||||||
description: string;
|
description: string;
|
||||||
publisher: string;
|
publisher: string;
|
||||||
published?: boolean;
|
published?: boolean;
|
||||||
member?: Member;
|
projects?: string[];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,7 @@
|
||||||
|
|
||||||
<meta property="og:type" content="website" />
|
<meta property="og:type" content="website" />
|
||||||
<meta property="og:url" content="https://teasanctuary.ru" />
|
<meta property="og:url" content="https://teasanctuary.ru" />
|
||||||
<meta name="theme-color" content="#63A002" />
|
<meta name="theme-color" content="#319668" />
|
||||||
|
|
||||||
<link rel="icon" type="image/png" sizes="32x32" href="%sveltekit.assets%/favicon-32x32.png">
|
<link rel="icon" type="image/png" sizes="32x32" href="%sveltekit.assets%/favicon-32x32.png">
|
||||||
<link rel="icon" type="image/png" sizes="16x16" href="%sveltekit.assets%/favicon-16x16.png">
|
<link rel="icon" type="image/png" sizes="16x16" href="%sveltekit.assets%/favicon-16x16.png">
|
||||||
|
|
|
||||||
10
src/blogs/hello_world.md
Normal file
10
src/blogs/hello_world.md
Normal file
|
|
@ -0,0 +1,10 @@
|
||||||
|
---
|
||||||
|
title: 'Наш первый блог'
|
||||||
|
thumbnail: 'wasd_perelesoq_game_jam_2025.png'
|
||||||
|
date: '2025-09-19'
|
||||||
|
description: 'Немного о самом сайте'
|
||||||
|
---
|
||||||
|
|
||||||
|
# ПРИВЕТ !
|
||||||
|
|
||||||
|
Добро пожаловать на наш первый блог-пост!
|
||||||
13
src/blogs/test_unpublished.md
Normal file
13
src/blogs/test_unpublished.md
Normal file
|
|
@ -0,0 +1,13 @@
|
||||||
|
---
|
||||||
|
title: 'Тестовый блог'
|
||||||
|
date:
|
||||||
|
dateChanged: '2025-09-29'
|
||||||
|
description: 'Немного о самом сайте'
|
||||||
|
projects: ['ts-hldm']
|
||||||
|
---
|
||||||
|
|
||||||
|
# ПРИВЕТ !
|
||||||
|
|
||||||
|
Добро пожаловать на наш первый блог-пост!
|
||||||
|
|
||||||
|
<Img src="wasd_perelesoq_game_jam_2025.png" />
|
||||||
20
src/lib/components/Img.svelte
Normal file
20
src/lib/components/Img.svelte
Normal file
|
|
@ -0,0 +1,20 @@
|
||||||
|
<script lang="ts">
|
||||||
|
import { page } from '$app/state';
|
||||||
|
import { resolveBlogPath } from '$lib/util/Blogs';
|
||||||
|
|
||||||
|
export let src: string;
|
||||||
|
export let caption: string;
|
||||||
|
export let alt: string = '';
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<div class="text-center">
|
||||||
|
<img
|
||||||
|
class="mx-auto mb-0 flex justify-center rounded-lg"
|
||||||
|
class:caption-img={caption}
|
||||||
|
src={resolveBlogPath(page.params.slug, src)}
|
||||||
|
alt={alt ? alt : src}
|
||||||
|
/>
|
||||||
|
{#if caption}
|
||||||
|
<p style="margin-top: 0px;">{caption}</p>
|
||||||
|
{/if}
|
||||||
|
</div>
|
||||||
13
src/lib/components/InfoBlock.svelte
Normal file
13
src/lib/components/InfoBlock.svelte
Normal file
|
|
@ -0,0 +1,13 @@
|
||||||
|
<script lang="ts">
|
||||||
|
import Icon from '@iconify/svelte';
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<section class="flex flex-col sm:flex-row">
|
||||||
|
<div class="flex flex-row items-center gap-2 bg-blue-500 p-2 text-slate-50">
|
||||||
|
<Icon width={32} height={32} icon={'material-symbols:info'} color={'#f8fafc'} />
|
||||||
|
<span class="sm:hidden">Обратите внимание</span>
|
||||||
|
</div>
|
||||||
|
<div class="bg-blue-50 p-4 sm:grow">
|
||||||
|
<slot />
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
|
@ -12,7 +12,7 @@
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<nav
|
<nav
|
||||||
class="flex flex-row gap-2 bg-slate-100 not-landscape:justify-around not-landscape:px-2 landscape:flex-col landscape:py-2"
|
class="flex shrink-0 flex-row gap-2 bg-slate-100 not-landscape:justify-around not-landscape:overflow-x-auto not-landscape:px-2 landscape:flex-col landscape:overflow-y-auto landscape:py-2"
|
||||||
>
|
>
|
||||||
{#each routes as route (route.href)}
|
{#each routes as route (route.href)}
|
||||||
<a class="nav-button {isActive(route.href) ? 'active' : ''}" href={route.href}>
|
<a class="nav-button {isActive(route.href) ? 'active' : ''}" href={route.href}>
|
||||||
|
|
@ -36,7 +36,7 @@
|
||||||
@import '$src/app.css';
|
@import '$src/app.css';
|
||||||
|
|
||||||
.nav-button {
|
.nav-button {
|
||||||
@apply flex aspect-square flex-col items-center justify-center gap-0.5 p-2 text-slate-950 not-landscape:h-24 hover:bg-emerald-400 landscape:w-24;
|
@apply flex aspect-square shrink-0 flex-col items-center justify-center gap-0.5 p-2 text-slate-950 not-landscape:h-24 hover:bg-emerald-400 landscape:w-24;
|
||||||
|
|
||||||
> .contour {
|
> .contour {
|
||||||
@apply rounded-full px-1.5 py-0.5 text-center;
|
@apply rounded-full px-1.5 py-0.5 text-center;
|
||||||
|
|
|
||||||
43
src/lib/util/Blogs.ts
Normal file
43
src/lib/util/Blogs.ts
Normal file
|
|
@ -0,0 +1,43 @@
|
||||||
|
import path from 'path';
|
||||||
|
|
||||||
|
export const THUMBNAIL_DEFAULT = "https://teasanctuary.ru/common/background-day.webp";
|
||||||
|
|
||||||
|
export async function fetchPostsSorted() {
|
||||||
|
const allPosts = await fetchPosts();
|
||||||
|
|
||||||
|
const sortedPosts = allPosts
|
||||||
|
// Для списка постов оставляем только те, у которых объявлена дата публикации
|
||||||
|
.filter((a) => !!a.date)
|
||||||
|
.sort((a, b) => {
|
||||||
|
return new Date(b.date!).valueOf() - new Date(a.date!).valueOf();
|
||||||
|
});
|
||||||
|
|
||||||
|
return sortedPosts;
|
||||||
|
};
|
||||||
|
|
||||||
|
export async function fetchPosts() {
|
||||||
|
const allPostFiles = import.meta.glob('/src/blogs/*.md');
|
||||||
|
const iterablePostFiles = Object.entries(allPostFiles);
|
||||||
|
|
||||||
|
const allPosts: App.BlogPost[] = await Promise.all(
|
||||||
|
iterablePostFiles.map(async ([filePath, resolver]) => {
|
||||||
|
const { metadata }: any = await resolver();
|
||||||
|
const { name } = path.parse(filePath);
|
||||||
|
|
||||||
|
return {
|
||||||
|
slug: name,
|
||||||
|
...metadata
|
||||||
|
};
|
||||||
|
})
|
||||||
|
);
|
||||||
|
|
||||||
|
return allPosts;
|
||||||
|
};
|
||||||
|
|
||||||
|
export function resolveBlogPath(slug?: string, src?: string) {
|
||||||
|
if (!src) return null;
|
||||||
|
|
||||||
|
return src.startsWith('http://') || src.startsWith('https://')
|
||||||
|
? src
|
||||||
|
: `/blog/${slug}/${src}`;
|
||||||
|
}
|
||||||
|
|
@ -16,7 +16,8 @@ const icons: Record<string, string> = {
|
||||||
'hl.teasanctuary.ru': '/icons/half-life.svg',
|
'hl.teasanctuary.ru': '/icons/half-life.svg',
|
||||||
'git.teasanctuary.ru': 'devicon-plain:git',
|
'git.teasanctuary.ru': 'devicon-plain:git',
|
||||||
localhost: '/icons/tea-sanctuary-white.svg',
|
localhost: '/icons/tea-sanctuary-white.svg',
|
||||||
email: 'material-symbols:alternate-email'
|
email: 'material-symbols:alternate-email',
|
||||||
|
rss: 'material-symbols:rss-feed'
|
||||||
};
|
};
|
||||||
|
|
||||||
// Особые случаи, когда одним доменом второго уровня не ограничишься (например, randomtrash.itch.io)
|
// Особые случаи, когда одним доменом второго уровня не ограничишься (например, randomtrash.itch.io)
|
||||||
|
|
@ -44,24 +45,26 @@ function getIconFromUrl(url: URL): string | undefined {
|
||||||
const href = url.href;
|
const href = url.href;
|
||||||
if (href.startsWith('mailto:'))
|
if (href.startsWith('mailto:'))
|
||||||
return 'email';
|
return 'email';
|
||||||
|
if (href.endsWith('/rss.xml') || href.endsWith('/atom.rss') || href.endsWith('.atom'))
|
||||||
|
return 'rss';
|
||||||
|
|
||||||
const hostname = url.hostname;
|
const hostname = url.hostname;
|
||||||
const secondLevel = hostname.match(/(([A-Za-z0-9\-])+\.([A-Za-z0-9\-])+)$/)?.at(0) ?? '';
|
const secondLevel = hostname.match(/(([A-Za-z0-9\-])+\.([A-Za-z0-9\-])+)$/)?.at(0) ?? '';
|
||||||
if (specialResolvers[secondLevel])
|
if (specialResolvers[secondLevel])
|
||||||
return icons[specialResolvers[secondLevel](url)];
|
return specialResolvers[secondLevel](url);
|
||||||
|
|
||||||
return icons[hostname];
|
return hostname;
|
||||||
}
|
}
|
||||||
|
|
||||||
export function tryGetIcon(link: string): string {
|
export function tryGetIcon(link: string): string {
|
||||||
let url: URL;
|
let url: URL;
|
||||||
try {
|
try {
|
||||||
url = new URL(link);
|
url = new URL(link, document.baseURI);
|
||||||
} catch {
|
} catch {
|
||||||
return icons['none'];
|
return icons['none'];
|
||||||
}
|
}
|
||||||
|
|
||||||
return getIconFromUrl(url) ?? icons['none'];
|
return icons[getIconFromUrl(url) ?? ''] ?? icons['none'];
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
||||||
|
|
@ -7,7 +7,7 @@
|
||||||
</svelte:head>
|
</svelte:head>
|
||||||
|
|
||||||
<section
|
<section
|
||||||
class="hero-background flex h-screen shrink-0 flex-col items-center justify-center gap-12 overflow-hidden p-4"
|
class="hero flex h-screen shrink-0 flex-col items-center justify-center gap-12 overflow-hidden p-4"
|
||||||
>
|
>
|
||||||
<div class="flex flex-nowrap flex-col gap-5">
|
<div class="flex flex-nowrap flex-col gap-5">
|
||||||
<div class="flex flex-nowrap flex-col gap-3 items-center justify-center lg:flex-row lg:flex-nowrap">
|
<div class="flex flex-nowrap flex-col gap-3 items-center justify-center lg:flex-row lg:flex-nowrap">
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,6 @@
|
||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import '$src/app.css';
|
import '$src/app.css';
|
||||||
|
import { page } from '$app/state';
|
||||||
// import '../syntax-highlight.css'; // https://github.com/PrismJS/prism-themes
|
// import '../syntax-highlight.css'; // https://github.com/PrismJS/prism-themes
|
||||||
import NavBar from '$lib/components/NavBar.svelte';
|
import NavBar from '$lib/components/NavBar.svelte';
|
||||||
|
|
||||||
|
|
@ -13,14 +14,21 @@
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<svelte:head>
|
<svelte:head>
|
||||||
<meta property="og:title" content="Tea Sanctuary" />
|
{#if page.data.title !== undefined}
|
||||||
<meta property="og:image" content="https://teasanctuary.ru/common/logo.png" />
|
<title>{page.data.title} — Tea Sanctuary</title>
|
||||||
<meta property="og:description" content="Делаем вещи как можем." />
|
<meta property="og:title" content="{page.data.title} — Tea Sanctuary" />
|
||||||
|
{:else}
|
||||||
<title>Tea Sanctuary</title>
|
<title>Tea Sanctuary</title>
|
||||||
|
<meta property="og:title" content="Tea Sanctuary" />
|
||||||
|
{/if}
|
||||||
|
<meta
|
||||||
|
property="og:image"
|
||||||
|
content={page.data.thumbnail ?? 'https://teasanctuary.ru/common/logo.png'}
|
||||||
|
/>
|
||||||
|
<meta property="og:description" content={page.data.description ?? 'Делаем вещи как можем.'} />
|
||||||
</svelte:head>
|
</svelte:head>
|
||||||
|
|
||||||
<div class="flex h-screen w-screen flex-row portrait:flex-col-reverse">
|
<div class="flex h-dvh w-dvw flex-row portrait:flex-col-reverse">
|
||||||
<NavBar {routes} />
|
<NavBar {routes} />
|
||||||
<div class="flex grow-1 flex-col overflow-auto">
|
<div class="flex grow-1 flex-col overflow-auto">
|
||||||
<div class="relative grow-1">
|
<div class="relative grow-1">
|
||||||
|
|
|
||||||
|
|
@ -9,7 +9,7 @@
|
||||||
</svelte:head>
|
</svelte:head>
|
||||||
|
|
||||||
<section
|
<section
|
||||||
class="flex shrink-0 flex-col items-center justify-center gap-5 overflow-hidden p-4 hero-background"
|
class="flex shrink-0 flex-col items-center justify-center gap-5 overflow-hidden p-4 hero"
|
||||||
>
|
>
|
||||||
<div
|
<div
|
||||||
class="flex flex-col flex-nowrap items-center justify-center gap-3 lg:flex-row lg:flex-nowrap"
|
class="flex flex-col flex-nowrap items-center justify-center gap-3 lg:flex-row lg:flex-nowrap"
|
||||||
|
|
@ -58,7 +58,7 @@
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div
|
<div
|
||||||
class="font-disket text-center text-4xl font-bold text-slate-50 [text-shadow:_0_0_15px_rgba(0,0,0,0.25)] sm:text-6xl md:text-8xl lg:text-left"
|
class="text-center font-bold lg:text-left"
|
||||||
>
|
>
|
||||||
<h1>TEA</h1>
|
<h1>TEA</h1>
|
||||||
<h1>SANCTUARY</h1>
|
<h1>SANCTUARY</h1>
|
||||||
|
|
@ -140,7 +140,12 @@
|
||||||
<section id="how-can-you-contact-us">
|
<section id="how-can-you-contact-us">
|
||||||
<h1>Как с вами связаться?</h1>
|
<h1>Как с вами связаться?</h1>
|
||||||
<div class="text-justify">
|
<div class="text-justify">
|
||||||
TODO: <SocialHyperlink href="/contact">контакты</SocialHyperlink>.
|
Общие вопросы можно задавать в <SocialHyperlink href={PUBLIC_TS_DISCORD}>сообществе Tea Sanctuary</SocialHyperlink>.
|
||||||
|
Там же можете написать личное сообщение администраторам.
|
||||||
|
</div>
|
||||||
|
<br />
|
||||||
|
<div class="text-justify">
|
||||||
|
Наши соцсети и почту для более важных обращений можно найти на странице <SocialHyperlink href="/contact">Контакты</SocialHyperlink>.
|
||||||
</div>
|
</div>
|
||||||
</section>
|
</section>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
3
src/routes/+page.ts
Normal file
3
src/routes/+page.ts
Normal file
|
|
@ -0,0 +1,3 @@
|
||||||
|
export async function load() {
|
||||||
|
return { title: undefined };
|
||||||
|
}
|
||||||
5
src/routes/blog/+page.server.ts
Normal file
5
src/routes/blog/+page.server.ts
Normal file
|
|
@ -0,0 +1,5 @@
|
||||||
|
import { fetchPostsSorted } from "$src/lib/util/Blogs";
|
||||||
|
|
||||||
|
export async function load() {
|
||||||
|
return { title: "Блог", description: "Новости и заметки проектов Tea Sanctuary", posts: await fetchPostsSorted() };
|
||||||
|
}
|
||||||
|
|
@ -1,14 +1,28 @@
|
||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import SocialButton from '$lib/components/SocialButton.svelte';
|
import { page } from '$app/state';
|
||||||
|
import Icon from '@iconify/svelte';
|
||||||
|
import SocialHyperlink from '$src/lib/components/SocialHyperlink.svelte';
|
||||||
|
import InfoBlock from '$src/lib/components/InfoBlock.svelte';
|
||||||
|
|
||||||
|
function groupPostsByMonthYear(posts: App.BlogPost[]) {
|
||||||
|
const groupedPosts = new Map<string, App.BlogPost[]>();
|
||||||
|
|
||||||
|
posts.forEach((post) => {
|
||||||
|
const key = new Date(post.date!).toLocaleString('default', {
|
||||||
|
month: 'long',
|
||||||
|
year: 'numeric'
|
||||||
|
});
|
||||||
|
if (!groupedPosts.has(key)) groupedPosts.set(key, []);
|
||||||
|
groupedPosts.get(key)?.push(post);
|
||||||
|
});
|
||||||
|
|
||||||
|
return groupedPosts;
|
||||||
|
}
|
||||||
|
|
||||||
|
const groupedPosts = groupPostsByMonthYear(page.data.posts);
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<svelte:head>
|
<section class="hero flex shrink-0 flex-col items-center justify-center gap-5 overflow-hidden p-4">
|
||||||
<title>Блог — Tea Sanctuary</title>
|
|
||||||
</svelte:head>
|
|
||||||
|
|
||||||
<section
|
|
||||||
class="flex shrink-0 flex-col items-center justify-center gap-5 overflow-hidden p-4 hero-background"
|
|
||||||
>
|
|
||||||
<div
|
<div
|
||||||
class="flex flex-col flex-nowrap items-center justify-center gap-3 lg:flex-row lg:flex-nowrap"
|
class="flex flex-col flex-nowrap items-center justify-center gap-3 lg:flex-row lg:flex-nowrap"
|
||||||
>
|
>
|
||||||
|
|
@ -20,6 +34,63 @@
|
||||||
</div>
|
</div>
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
|
<InfoBlock>
|
||||||
|
Подпишитесь на нашу <SocialHyperlink href="/blog/rss.xml">RSS ленту</SocialHyperlink>, чтобы не
|
||||||
|
пропускать новые посты!
|
||||||
|
</InfoBlock>
|
||||||
|
|
||||||
|
<section class="flex flex-col items-stretch p-2 pb-8 md:p-4">
|
||||||
|
{#each groupedPosts.entries() as [monthYear, postsInMonthYear]}
|
||||||
|
<h1
|
||||||
|
class="mt-10 mb-4 text-left text-2xl font-bold underline decoration-4 md:text-center md:text-4xl md:decoration-8"
|
||||||
|
>
|
||||||
|
{monthYear}
|
||||||
|
</h1>
|
||||||
|
<div class="flex flex-col flex-wrap items-stretch gap-4 md:flex-row md:justify-center">
|
||||||
|
{#each postsInMonthYear as post, i}
|
||||||
|
<a
|
||||||
|
href="/blog/{post.slug}"
|
||||||
|
class="flex flex-row justify-stretch overflow-hidden rounded-lg bg-slate-100 text-slate-950 drop-shadow-xl transition-all hover:drop-shadow-2xl md:flex-col md:justify-baseline"
|
||||||
|
>
|
||||||
|
<div class="relative h-auto w-full basis-1/3 md:h-48 md:basis-auto">
|
||||||
|
{#if post.thumbnail}
|
||||||
|
<img
|
||||||
|
class="absolute h-full w-full object-cover"
|
||||||
|
src={`/blog/${post.slug}/${post.thumbnail}`}
|
||||||
|
alt="thumbnail"
|
||||||
|
/>
|
||||||
|
{/if}
|
||||||
|
</div>
|
||||||
|
<div class="flex w-full flex-col justify-center p-4 break-words md:p-8">
|
||||||
|
<div class="flex flex-row flex-wrap justify-between gap-4 pb-4">
|
||||||
|
<div class="flex items-center text-lg font-bold">
|
||||||
|
<Icon
|
||||||
|
icon="material-symbols:calendar-today"
|
||||||
|
class="mr-3"
|
||||||
|
style="transform: scale( 1.3 )"
|
||||||
|
/>
|
||||||
|
<p>
|
||||||
|
{new Date(post.date!).toLocaleString('default', {
|
||||||
|
month: 'short',
|
||||||
|
day: 'numeric',
|
||||||
|
year: 'numeric'
|
||||||
|
})}
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<h2 class="text-3xl font-bold">{post.title}</h2>
|
||||||
|
|
||||||
|
{#if post.description}
|
||||||
|
<p>{post.description}</p>
|
||||||
|
{/if}
|
||||||
|
</div>
|
||||||
|
</a>
|
||||||
|
{/each}
|
||||||
|
</div>
|
||||||
|
{/each}
|
||||||
|
</section>
|
||||||
|
|
||||||
<style>
|
<style>
|
||||||
@import "$src/app.css";
|
@import '$src/app.css';
|
||||||
</style>
|
</style>
|
||||||
|
|
|
||||||
90
src/routes/blog/[slug]/+page.svelte
Normal file
90
src/routes/blog/[slug]/+page.svelte
Normal file
|
|
@ -0,0 +1,90 @@
|
||||||
|
<script lang="ts">
|
||||||
|
import { page } from '$app/state';
|
||||||
|
import InfoBlock from '$src/lib/components/InfoBlock.svelte';
|
||||||
|
import type { PageData } from './$types';
|
||||||
|
import Icon from '@iconify/svelte';
|
||||||
|
|
||||||
|
export let data: PageData;
|
||||||
|
|
||||||
|
const isPublic = !!data.blogPost.date;
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<base target="_blank" />
|
||||||
|
|
||||||
|
<svelte:head>
|
||||||
|
<meta name="twitter:card" content="summary_large_image" />
|
||||||
|
</svelte:head>
|
||||||
|
|
||||||
|
<section class="hero flex shrink-0 flex-col items-center justify-center gap-5 overflow-hidden p-4">
|
||||||
|
<div
|
||||||
|
class="flex flex-col flex-nowrap items-center justify-center gap-3 lg:flex-row lg:flex-nowrap"
|
||||||
|
>
|
||||||
|
<div class="text-left">
|
||||||
|
<h1>{data.blogPost.title}</h1>
|
||||||
|
{#if data.blogPost.description}
|
||||||
|
<h2 class="text-gray">{data.blogPost.description}</h2>
|
||||||
|
{/if}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
<section
|
||||||
|
class="flex shrink-0 flex-col items-center justify-center p-4 font-bold {isPublic
|
||||||
|
? 'bg-amber-50 text-slate-950'
|
||||||
|
: 'bg-red-500 text-slate-50'} sm:flex-row sm:flex-nowrap sm:gap-5"
|
||||||
|
>
|
||||||
|
<div class="flex items-center">
|
||||||
|
<Icon icon="material-symbols:calendar-today" class="mr-3" style="transform: scale( 1.4 )" />
|
||||||
|
<p>
|
||||||
|
{data.blogPost.date
|
||||||
|
? new Date(data.blogPost.date).toLocaleString(undefined, {
|
||||||
|
month: 'short',
|
||||||
|
day: 'numeric',
|
||||||
|
year: 'numeric'
|
||||||
|
})
|
||||||
|
: 'Не опубликован!'}
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
{#if data.blogPost.dateChanged}
|
||||||
|
<div class="flex items-center font-bold">
|
||||||
|
<Icon icon="material-symbols:update" class="mr-3" style="transform: scale( 1.4 )" />
|
||||||
|
<p>
|
||||||
|
{new Date(data.blogPost.dateChanged).toLocaleString(undefined, {
|
||||||
|
month: 'short',
|
||||||
|
day: 'numeric',
|
||||||
|
year: 'numeric'
|
||||||
|
})}
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
{/if}
|
||||||
|
</section>
|
||||||
|
|
||||||
|
{#if page.data.blogPost.projects?.length > 0}
|
||||||
|
<InfoBlock>
|
||||||
|
<p>В данной заметке упоминаются наши проекты:</p>
|
||||||
|
<ul>
|
||||||
|
{#each page.data.blogPost.projects as project}
|
||||||
|
<li>{project}</li>
|
||||||
|
{/each}
|
||||||
|
</ul>
|
||||||
|
</InfoBlock>
|
||||||
|
{/if}
|
||||||
|
|
||||||
|
<article
|
||||||
|
class="prose
|
||||||
|
lg:prose-lg
|
||||||
|
prose-a:text-blue
|
||||||
|
prose-a:decoration-2
|
||||||
|
prose-a:underline-offset-2
|
||||||
|
hover:prose-a:text-lightblue
|
||||||
|
hover:prose-a:transition-all
|
||||||
|
prose-code:break-words
|
||||||
|
prose-pre:drop-shadow-md
|
||||||
|
bg-white
|
||||||
|
p-4 lg:p-8"
|
||||||
|
>
|
||||||
|
<svelte:component this={data.content} />
|
||||||
|
</article>
|
||||||
|
|
||||||
|
<style>
|
||||||
|
@import '$src/app.css';
|
||||||
|
</style>
|
||||||
23
src/routes/blog/[slug]/+page.ts
Normal file
23
src/routes/blog/[slug]/+page.ts
Normal file
|
|
@ -0,0 +1,23 @@
|
||||||
|
import { resolveBlogPath, THUMBNAIL_DEFAULT } from "$src/lib/util/Blogs.js";
|
||||||
|
import { error } from "@sveltejs/kit";
|
||||||
|
|
||||||
|
export async function load({ params }) {
|
||||||
|
let post: any
|
||||||
|
try {
|
||||||
|
post = await import(`$src/blogs/${params.slug}.md`);
|
||||||
|
} catch (ex) {
|
||||||
|
error(404);
|
||||||
|
}
|
||||||
|
const blogPost: App.BlogPost = post.metadata;
|
||||||
|
const thumbnail = resolveBlogPath(params.slug, blogPost.thumbnail ?? THUMBNAIL_DEFAULT);
|
||||||
|
|
||||||
|
return {
|
||||||
|
title: `${blogPost.title} — Блог`,
|
||||||
|
description: blogPost.description,
|
||||||
|
thumbnail: thumbnail,
|
||||||
|
content: post.default,
|
||||||
|
blogPost: {
|
||||||
|
...blogPost
|
||||||
|
}
|
||||||
|
};
|
||||||
|
};
|
||||||
38
src/routes/blog/rss.xml/+server.ts
Normal file
38
src/routes/blog/rss.xml/+server.ts
Normal file
|
|
@ -0,0 +1,38 @@
|
||||||
|
import { fetchPostsSorted } from "$src/lib/util/Blogs";
|
||||||
|
|
||||||
|
export const prerender = true;
|
||||||
|
|
||||||
|
const feedUpdated = new Date();
|
||||||
|
|
||||||
|
function escapeXml(unsafe: string): string {
|
||||||
|
return unsafe
|
||||||
|
.replace(/&/g, "&")
|
||||||
|
.replace(/</g, "<")
|
||||||
|
.replace(/>/g, ">")
|
||||||
|
.replace(/"/g, """)
|
||||||
|
.replace(/'/g, "'");
|
||||||
|
}
|
||||||
|
|
||||||
|
export async function GET({ setHeaders }) {
|
||||||
|
setHeaders({
|
||||||
|
'Cache-Control': 'max-age=0, s-maxage=3600',
|
||||||
|
'Content-Type': 'application/rss+xml',
|
||||||
|
});
|
||||||
|
const posts = await fetchPostsSorted();
|
||||||
|
return new Response(String(`<?xml version="1.0" encoding="UTF-8" ?>
|
||||||
|
<rss xmlns:dc="https://purl.org/dc/elements/1.1/" xmlns:content="https://purl.org/rss/1.0/modules/content/" xmlns:atom="https://www.w3.org/2005/Atom" version="2.0">
|
||||||
|
<channel>
|
||||||
|
<title>Блог Tea Sanctuary</title>
|
||||||
|
<link>https://teasanctuary.ru/blog</link>
|
||||||
|
<ttl>1800</ttl>
|
||||||
|
<updated>${feedUpdated.toUTCString()}</updated>
|
||||||
|
${posts.map((post) => `<item>
|
||||||
|
<title>${escapeXml(post.title)}</title>
|
||||||
|
<description>${escapeXml(post.description)}</description>
|
||||||
|
<guid isPermaLink="true">https://teasanctuary.ru/blog/${post.slug}</guid>
|
||||||
|
<link>https://teasanctuary.ru/blog/${post.slug}</link>
|
||||||
|
<pubDate>${(new Date(post.date!)).toUTCString()}</pubDate>
|
||||||
|
</item>`).join("\n")}
|
||||||
|
</channel>
|
||||||
|
</rss>`))
|
||||||
|
}
|
||||||
|
|
@ -2,12 +2,8 @@
|
||||||
import SocialButton from '$lib/components/SocialButton.svelte';
|
import SocialButton from '$lib/components/SocialButton.svelte';
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<svelte:head>
|
|
||||||
<title>Контакты — Tea Sanctuary</title>
|
|
||||||
</svelte:head>
|
|
||||||
|
|
||||||
<section
|
<section
|
||||||
class="flex shrink-0 flex-col items-center justify-center gap-5 overflow-hidden p-4 hero-background"
|
class="flex shrink-0 flex-col items-center justify-center gap-5 overflow-hidden p-4 hero"
|
||||||
>
|
>
|
||||||
<div
|
<div
|
||||||
class="flex flex-col flex-nowrap items-center justify-center gap-3 lg:flex-row lg:flex-nowrap"
|
class="flex flex-col flex-nowrap items-center justify-center gap-3 lg:flex-row lg:flex-nowrap"
|
||||||
|
|
|
||||||
3
src/routes/contact/+page.ts
Normal file
3
src/routes/contact/+page.ts
Normal file
|
|
@ -0,0 +1,3 @@
|
||||||
|
export async function load() {
|
||||||
|
return { title: "Контакты" };
|
||||||
|
}
|
||||||
|
|
@ -2,12 +2,8 @@
|
||||||
import SocialButton from '$lib/components/SocialButton.svelte';
|
import SocialButton from '$lib/components/SocialButton.svelte';
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<svelte:head>
|
|
||||||
<title>Проекты — Tea Sanctuary</title>
|
|
||||||
</svelte:head>
|
|
||||||
|
|
||||||
<section
|
<section
|
||||||
class="flex shrink-0 flex-col items-center justify-center gap-5 overflow-hidden p-4 hero-background"
|
class="flex shrink-0 flex-col items-center justify-center gap-5 overflow-hidden p-4 hero"
|
||||||
>
|
>
|
||||||
<div
|
<div
|
||||||
class="flex flex-col flex-nowrap items-center justify-center gap-3 lg:flex-row lg:flex-nowrap"
|
class="flex flex-col flex-nowrap items-center justify-center gap-3 lg:flex-row lg:flex-nowrap"
|
||||||
|
|
|
||||||
3
src/routes/projects/+page.ts
Normal file
3
src/routes/projects/+page.ts
Normal file
|
|
@ -0,0 +1,3 @@
|
||||||
|
export async function load() {
|
||||||
|
return { title: "Проекты" };
|
||||||
|
}
|
||||||
|
|
@ -2,12 +2,8 @@
|
||||||
import SocialButton from '$lib/components/SocialButton.svelte';
|
import SocialButton from '$lib/components/SocialButton.svelte';
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<svelte:head>
|
|
||||||
<title>Команда — Tea Sanctuary</title>
|
|
||||||
</svelte:head>
|
|
||||||
|
|
||||||
<section
|
<section
|
||||||
class="flex shrink-0 flex-col items-center justify-center gap-5 overflow-hidden p-4 hero-background"
|
class="flex shrink-0 flex-col items-center justify-center gap-5 overflow-hidden p-4 hero"
|
||||||
>
|
>
|
||||||
<div
|
<div
|
||||||
class="flex flex-col flex-nowrap items-center justify-center gap-3 lg:flex-row lg:flex-nowrap"
|
class="flex flex-col flex-nowrap items-center justify-center gap-3 lg:flex-row lg:flex-nowrap"
|
||||||
|
|
|
||||||
3
src/routes/team/+page.ts
Normal file
3
src/routes/team/+page.ts
Normal file
|
|
@ -0,0 +1,3 @@
|
||||||
|
export async function load() {
|
||||||
|
return { title: "Команда" };
|
||||||
|
}
|
||||||
BIN
static/blog/hello_world/wasd_perelesoq_game_jam_2025.png
Normal file
BIN
static/blog/hello_world/wasd_perelesoq_game_jam_2025.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 449 KiB |
BIN
static/blog/test_unpublished/wasd_perelesoq_game_jam_2025.png
Normal file
BIN
static/blog/test_unpublished/wasd_perelesoq_game_jam_2025.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 449 KiB |
BIN
static/favicon.ico
Normal file
BIN
static/favicon.ico
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 1.1 KiB |
|
|
@ -6,6 +6,8 @@ User-agent: AhrefsBot
|
||||||
Disallow: /
|
Disallow: /
|
||||||
User-agent: MJ12bot
|
User-agent: MJ12bot
|
||||||
Disallow: /
|
Disallow: /
|
||||||
|
User-agent: GPTBot
|
||||||
|
Disallow: /
|
||||||
User-agent: *
|
User-agent: *
|
||||||
Allow: /
|
Allow: /
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,45 +1,12 @@
|
||||||
import plugin from 'tailwindcss/plugin';
|
|
||||||
|
|
||||||
/** @type {import('tailwindcss').Config} */
|
/** @type {import('tailwindcss').Config} */
|
||||||
export default {
|
export default {
|
||||||
content: ['./src/**/*.{html,js,svelte,ts}'],
|
content: ['./src/**/*.{html,js,svelte,ts}'],
|
||||||
theme: {
|
theme: {
|
||||||
// colors: {
|
|
||||||
// white: '#FFFFFF',
|
|
||||||
// transparentblue: '#2447f779',
|
|
||||||
// blue: '#2446f7',
|
|
||||||
// black: '#000000',
|
|
||||||
// transparentblack1: '#000000BB',
|
|
||||||
// transparentblack0: '#00000011',
|
|
||||||
// darkblue: '#091856',
|
|
||||||
// navyblue: '#0f2898',
|
|
||||||
// gray: '#e2e2e2',
|
|
||||||
// lightblue: '#0092ff',
|
|
||||||
// transparent: 'transparent'
|
|
||||||
// },
|
|
||||||
extend: {
|
extend: {
|
||||||
fontFamily: {
|
fontFamily: {
|
||||||
sans: ['Lineyka', 'sans-serif'],
|
sans: ['Lineyka', 'sans-serif'],
|
||||||
disket: ['Disket Mono', 'monospace'],
|
disket: ['Disket Mono', 'monospace'],
|
||||||
},
|
},
|
||||||
// height: {
|
|
||||||
// // 64 px for navbar
|
|
||||||
// screen: 'calc(100vh - 64px)'
|
|
||||||
// },
|
|
||||||
// dropShadow: {
|
|
||||||
// md: '0px 0px 2px #091856',
|
|
||||||
// hover: '0px 6px 2px #091856'
|
|
||||||
// },
|
|
||||||
// backgroundImage: {
|
|
||||||
// pixel: "url('/common/pixel-overlay.png')",
|
|
||||||
// 'pixel-dark': "url('/common/pixel-overlay-dark.png')",
|
|
||||||
// 'pixel-white': "url('/common/pixel-overlay-white.png')",
|
|
||||||
// 'pixel-large': "url('/common/pixel-overlay-large.png')"
|
|
||||||
// },
|
|
||||||
// backgroundSize: {
|
|
||||||
// pixel: '7px',
|
|
||||||
// 'pixel-lg': '14px'
|
|
||||||
// },
|
|
||||||
typography: {
|
typography: {
|
||||||
DEFAULT: {
|
DEFAULT: {
|
||||||
css: {
|
css: {
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue