coyotte508 HF staff commited on
Commit
65b4f03
1 Parent(s): 2c16eda

✨ Add home + workshop pages

Browse files
.env.example ADDED
@@ -0,0 +1 @@
 
 
1
+ MONGODB_URL=mongodb://localhost:27017/admin
package.json CHANGED
@@ -16,6 +16,8 @@
16
  "@iconify-json/il": "^1.1.2",
17
  "@sveltejs/adapter-node": "next",
18
  "@sveltejs/kit": "next",
 
 
19
  "@typescript-eslint/eslint-plugin": "^5.27.0",
20
  "@typescript-eslint/parser": "^5.27.0",
21
  "@unocss/preset-icons": "^0.46.3",
@@ -29,10 +31,16 @@
29
  "svelte": "^3.44.0",
30
  "svelte-check": "^2.7.1",
31
  "svelte-preprocess": "^4.10.6",
 
32
  "tslib": "^2.3.1",
33
  "typescript": "^4.7.4",
34
  "unocss": "^0.46.3",
35
  "vite": "^3.1.0"
36
  },
37
- "type": "module"
 
 
 
 
 
38
  }
 
16
  "@iconify-json/il": "^1.1.2",
17
  "@sveltejs/adapter-node": "next",
18
  "@sveltejs/kit": "next",
19
+ "@types/lodash": "^4.14.188",
20
+ "@types/marked": "^4.0.7",
21
  "@typescript-eslint/eslint-plugin": "^5.27.0",
22
  "@typescript-eslint/parser": "^5.27.0",
23
  "@unocss/preset-icons": "^0.46.3",
 
31
  "svelte": "^3.44.0",
32
  "svelte-check": "^2.7.1",
33
  "svelte-preprocess": "^4.10.6",
34
+ "tinygesture": "^2.0.0",
35
  "tslib": "^2.3.1",
36
  "typescript": "^4.7.4",
37
  "unocss": "^0.46.3",
38
  "vite": "^3.1.0"
39
  },
40
+ "type": "module",
41
+ "dependencies": {
42
+ "lodash": "^4.17.21",
43
+ "marked": "^4.2.2",
44
+ "mongodb": "^4.11.0"
45
+ }
46
  }
pnpm-lock.yaml CHANGED
@@ -5,6 +5,8 @@ specifiers:
5
  '@iconify-json/il': ^1.1.2
6
  '@sveltejs/adapter-node': next
7
  '@sveltejs/kit': next
 
 
8
  '@typescript-eslint/eslint-plugin': ^5.27.0
9
  '@typescript-eslint/parser': ^5.27.0
10
  '@unocss/preset-icons': ^0.46.3
@@ -13,21 +15,32 @@ specifiers:
13
  eslint: ^8.16.0
14
  eslint-config-prettier: ^8.3.0
15
  eslint-plugin-svelte3: ^4.0.0
 
 
 
16
  prettier: ^2.6.2
17
  prettier-plugin-svelte: ^2.7.0
18
  svelte: ^3.44.0
19
  svelte-check: ^2.7.1
20
  svelte-preprocess: ^4.10.6
 
21
  tslib: ^2.3.1
22
  typescript: ^4.7.4
23
  unocss: ^0.46.3
24
  vite: ^3.1.0
25
 
 
 
 
 
 
26
  devDependencies:
27
  '@iconify-json/ant-design': 1.1.3
28
  '@iconify-json/il': 1.1.2
29
  '@sveltejs/adapter-node': 1.0.0-next.100
30
- '@sveltejs/kit': 1.0.0-next.535_svelte@3.52.0+vite@3.2.2
 
 
31
  '@typescript-eslint/eslint-plugin': 5.42.0_6xw5wg2354iw4zujk2f3vyfrzu
32
  '@typescript-eslint/parser': 5.42.0_wyqvi574yv7oiwfeinomdzmc3m
33
  '@unocss/preset-icons': 0.46.3
@@ -41,6 +54,7 @@ devDependencies:
41
  svelte: 3.52.0
42
  svelte-check: 2.9.2_svelte@3.52.0
43
  svelte-preprocess: 4.10.7_besnmoibwkhwtentvwuriss7pa
 
44
  tslib: 2.4.1
45
  typescript: 4.8.4
46
  unocss: 0.46.3_vite@3.2.2
@@ -67,6 +81,772 @@ packages:
67
  resolution: {integrity: sha512-CQkeV+oJxUazwjlHD0/3ZD08QWKuGQkhnrKo3e6ly5pd48VUpXbb77q0xMU4+vc2CkJnDS02Eq/M9ugyX20XZA==}
68
  dev: true
69
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
70
  /@esbuild/android-arm/0.15.13:
71
  resolution: {integrity: sha512-RY2fVI8O0iFUNvZirXaQ1vMvK0xhCcl0gqRj74Z6yEiO1zAUa7hbsdwZM1kzqbxHK7LFyMizipfXT3JME+12Hw==}
72
  engines: {node: '>=12'}
@@ -292,8 +1072,8 @@ packages:
292
  rollup: 2.79.1
293
  dev: true
294
 
295
- /@sveltejs/kit/1.0.0-next.535_svelte@3.52.0+vite@3.2.2:
296
- resolution: {integrity: sha512-sbVFeidRGYKqahVWATuvl9PVnIDA/DvXUuq3LAV7eLXf9LWsdMt+9OhXmz8Ltxv8ov3+Ph6gcVSBvisF4BEvBQ==}
297
  engines: {node: '>=16.14'}
298
  hasBin: true
299
  requiresBuild: true
@@ -354,9 +1134,16 @@ packages:
354
  resolution: {integrity: sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==}
355
  dev: true
356
 
 
 
 
 
 
 
 
 
357
  /@types/node/18.11.9:
358
  resolution: {integrity: sha512-CRpX21/kGdzjOpFsZSkcrXMGIBWMGNIHXXBVFSH+ggkftxg+XYP20TESbh+zFvFj3EQOl5byk0HTRn1IL6hbqg==}
359
- dev: true
360
 
361
  /@types/pug/2.0.6:
362
  resolution: {integrity: sha512-SnHmG9wN1UVmagJOnyo/qkk0Z7gejYxOYYmaAwr5u2yFYfsupN3sg10kyzN8Hep/2zbHxCnsumxOoRIRMBwKCg==}
@@ -376,6 +1163,17 @@ packages:
376
  resolution: {integrity: sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw==}
377
  dev: true
378
 
 
 
 
 
 
 
 
 
 
 
 
379
  /@typescript-eslint/eslint-plugin/5.42.0_6xw5wg2354iw4zujk2f3vyfrzu:
380
  resolution: {integrity: sha512-5TJh2AgL6+wpL8H/GTSjNb4WrjKoR2rqvFxR/DDTqYNk6uXn8BJMEcncLSpMbf/XV1aS0jAjYwn98uvVCiAywQ==}
381
  engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
@@ -720,11 +1518,20 @@ packages:
720
  resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
721
  dev: true
722
 
 
 
 
 
723
  /binary-extensions/2.2.0:
724
  resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==}
725
  engines: {node: '>=8'}
726
  dev: true
727
 
 
 
 
 
 
728
  /brace-expansion/1.1.11:
729
  resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==}
730
  dependencies:
@@ -745,10 +1552,24 @@ packages:
745
  fill-range: 7.0.1
746
  dev: true
747
 
 
 
 
 
 
 
 
748
  /buffer-crc32/0.2.13:
749
  resolution: {integrity: sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==}
750
  dev: true
751
 
 
 
 
 
 
 
 
752
  /builtin-modules/3.3.0:
753
  resolution: {integrity: sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==}
754
  engines: {node: '>=6'}
@@ -868,6 +1689,11 @@ packages:
868
  resolution: {integrity: sha512-pOFYRTIhoKujrmbTRhcW5lYQLBXw/dlTwfI8IguF1QCDJOcJzNH1w+YFjxqy6BAuJrClTy6MUE8q+oKJ2FLsIw==}
869
  dev: true
870
 
 
 
 
 
 
871
  /destr/1.2.0:
872
  resolution: {integrity: sha512-JG+cG4ZPB1L27sl2C2URg8MIOmIUtTbE5wEx02BpmrTCqg/hXxFKXsYsnODl5PdpqNRaS1KQGUQ56V8jk8XpYQ==}
873
  dev: true
@@ -1301,6 +2127,14 @@ packages:
1301
  resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==}
1302
  dev: true
1303
 
 
 
 
 
 
 
 
 
1304
  /fastq/1.13.0:
1305
  resolution: {integrity: sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==}
1306
  dependencies:
@@ -1457,6 +2291,10 @@ packages:
1457
  engines: {node: '>=10.17.0'}
1458
  dev: true
1459
 
 
 
 
 
1460
  /ignore/5.2.0:
1461
  resolution: {integrity: sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==}
1462
  engines: {node: '>= 4'}
@@ -1486,6 +2324,10 @@ packages:
1486
  resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
1487
  dev: true
1488
 
 
 
 
 
1489
  /is-binary-path/2.1.0:
1490
  resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==}
1491
  engines: {node: '>=8'}
@@ -1604,6 +2446,10 @@ packages:
1604
  resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==}
1605
  dev: true
1606
 
 
 
 
 
1607
  /lru-cache/6.0.0:
1608
  resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==}
1609
  engines: {node: '>=10'}
@@ -1624,10 +2470,21 @@ packages:
1624
  sourcemap-codec: 1.4.8
1625
  dev: true
1626
 
 
 
 
 
 
 
1627
  /mdn-data/2.0.28:
1628
  resolution: {integrity: sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==}
1629
  dev: true
1630
 
 
 
 
 
 
1631
  /merge-stream/2.0.0:
1632
  resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==}
1633
  dev: true
@@ -1685,6 +2542,28 @@ packages:
1685
  minimist: 1.2.7
1686
  dev: true
1687
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1688
  /mri/1.2.0:
1689
  resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==}
1690
  engines: {node: '>=4'}
@@ -1858,7 +2737,6 @@ packages:
1858
  /punycode/2.1.1:
1859
  resolution: {integrity: sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==}
1860
  engines: {node: '>=6'}
1861
- dev: true
1862
 
1863
  /queue-microtask/1.2.3:
1864
  resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==}
@@ -1939,6 +2817,15 @@ packages:
1939
  rimraf: 2.7.1
1940
  dev: true
1941
 
 
 
 
 
 
 
 
 
 
1942
  /semver/7.3.8:
1943
  resolution: {integrity: sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==}
1944
  engines: {node: '>=10'}
@@ -1981,6 +2868,19 @@ packages:
1981
  engines: {node: '>=8'}
1982
  dev: true
1983
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1984
  /sorcery/0.10.0:
1985
  resolution: {integrity: sha512-R5ocFmKZQFfSTstfOtHjJuAwbpGyf9qjQa1egyhvXSbM7emjrtLXtGdZsDJDABC85YBfVvrOiGWKSYXPKdvP1g==}
1986
  hasBin: true
@@ -2000,6 +2900,13 @@ packages:
2000
  resolution: {integrity: sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==}
2001
  dev: true
2002
 
 
 
 
 
 
 
 
2003
  /streamsearch/1.1.0:
2004
  resolution: {integrity: sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==}
2005
  engines: {node: '>=10.0.0'}
@@ -2029,6 +2936,11 @@ packages:
2029
  engines: {node: '>=8'}
2030
  dev: true
2031
 
 
 
 
 
 
2032
  /supports-color/7.2.0:
2033
  resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==}
2034
  engines: {node: '>=8'}
@@ -2145,6 +3057,10 @@ packages:
2145
  globrex: 0.1.2
2146
  dev: true
2147
 
 
 
 
 
2148
  /to-regex-range/5.0.1:
2149
  resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
2150
  engines: {node: '>=8.0'}
@@ -2157,13 +3073,18 @@ packages:
2157
  engines: {node: '>=6'}
2158
  dev: true
2159
 
 
 
 
 
 
 
 
2160
  /tslib/1.14.1:
2161
  resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==}
2162
- dev: true
2163
 
2164
  /tslib/2.4.1:
2165
  resolution: {integrity: sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==}
2166
- dev: true
2167
 
2168
  /tsutils/3.21.0_typescript@4.8.4:
2169
  resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==}
@@ -2250,6 +3171,12 @@ packages:
2250
  punycode: 2.1.1
2251
  dev: true
2252
 
 
 
 
 
 
 
2253
  /vite/3.2.2:
2254
  resolution: {integrity: sha512-pLrhatFFOWO9kS19bQ658CnRYzv0WLbsPih6R+iFeEEhDOuYgYCX2rztUViMz/uy/V8cLCJvLFeiOK7RJEzHcw==}
2255
  engines: {node: ^14.18.0 || >=16.0.0}
@@ -2280,6 +3207,19 @@ packages:
2280
  fsevents: 2.3.2
2281
  dev: true
2282
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2283
  /which/2.0.2:
2284
  resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==}
2285
  engines: {node: '>= 8'}
 
5
  '@iconify-json/il': ^1.1.2
6
  '@sveltejs/adapter-node': next
7
  '@sveltejs/kit': next
8
+ '@types/lodash': ^4.14.188
9
+ '@types/marked': ^4.0.7
10
  '@typescript-eslint/eslint-plugin': ^5.27.0
11
  '@typescript-eslint/parser': ^5.27.0
12
  '@unocss/preset-icons': ^0.46.3
 
15
  eslint: ^8.16.0
16
  eslint-config-prettier: ^8.3.0
17
  eslint-plugin-svelte3: ^4.0.0
18
+ lodash: ^4.17.21
19
+ marked: ^4.2.2
20
+ mongodb: ^4.11.0
21
  prettier: ^2.6.2
22
  prettier-plugin-svelte: ^2.7.0
23
  svelte: ^3.44.0
24
  svelte-check: ^2.7.1
25
  svelte-preprocess: ^4.10.6
26
+ tinygesture: ^2.0.0
27
  tslib: ^2.3.1
28
  typescript: ^4.7.4
29
  unocss: ^0.46.3
30
  vite: ^3.1.0
31
 
32
+ dependencies:
33
+ lodash: 4.17.21
34
+ marked: 4.2.2
35
+ mongodb: 4.11.0
36
+
37
  devDependencies:
38
  '@iconify-json/ant-design': 1.1.3
39
  '@iconify-json/il': 1.1.2
40
  '@sveltejs/adapter-node': 1.0.0-next.100
41
+ '@sveltejs/kit': 1.0.0-next.538_svelte@3.52.0+vite@3.2.2
42
+ '@types/lodash': 4.14.188
43
+ '@types/marked': 4.0.7
44
  '@typescript-eslint/eslint-plugin': 5.42.0_6xw5wg2354iw4zujk2f3vyfrzu
45
  '@typescript-eslint/parser': 5.42.0_wyqvi574yv7oiwfeinomdzmc3m
46
  '@unocss/preset-icons': 0.46.3
 
54
  svelte: 3.52.0
55
  svelte-check: 2.9.2_svelte@3.52.0
56
  svelte-preprocess: 4.10.7_besnmoibwkhwtentvwuriss7pa
57
+ tinygesture: 2.0.0
58
  tslib: 2.4.1
59
  typescript: 4.8.4
60
  unocss: 0.46.3_vite@3.2.2
 
81
  resolution: {integrity: sha512-CQkeV+oJxUazwjlHD0/3ZD08QWKuGQkhnrKo3e6ly5pd48VUpXbb77q0xMU4+vc2CkJnDS02Eq/M9ugyX20XZA==}
82
  dev: true
83
 
84
+ /@aws-crypto/ie11-detection/2.0.2:
85
+ resolution: {integrity: sha512-5XDMQY98gMAf/WRTic5G++jfmS/VLM0rwpiOpaainKi4L0nqWMSB1SzsrEG5rjFZGYN6ZAefO+/Yta2dFM0kMw==}
86
+ dependencies:
87
+ tslib: 1.14.1
88
+ dev: false
89
+ optional: true
90
+
91
+ /@aws-crypto/sha256-browser/2.0.0:
92
+ resolution: {integrity: sha512-rYXOQ8BFOaqMEHJrLHul/25ckWH6GTJtdLSajhlqGMx0PmSueAuvboCuZCTqEKlxR8CQOwRarxYMZZSYlhRA1A==}
93
+ dependencies:
94
+ '@aws-crypto/ie11-detection': 2.0.2
95
+ '@aws-crypto/sha256-js': 2.0.0
96
+ '@aws-crypto/supports-web-crypto': 2.0.2
97
+ '@aws-crypto/util': 2.0.2
98
+ '@aws-sdk/types': 3.201.0
99
+ '@aws-sdk/util-locate-window': 3.201.0
100
+ '@aws-sdk/util-utf8-browser': 3.188.0
101
+ tslib: 1.14.1
102
+ dev: false
103
+ optional: true
104
+
105
+ /@aws-crypto/sha256-js/2.0.0:
106
+ resolution: {integrity: sha512-VZY+mCY4Nmrs5WGfitmNqXzaE873fcIZDu54cbaDaaamsaTOP1DBImV9F4pICc3EHjQXujyE8jig+PFCaew9ig==}
107
+ dependencies:
108
+ '@aws-crypto/util': 2.0.2
109
+ '@aws-sdk/types': 3.201.0
110
+ tslib: 1.14.1
111
+ dev: false
112
+ optional: true
113
+
114
+ /@aws-crypto/supports-web-crypto/2.0.2:
115
+ resolution: {integrity: sha512-6mbSsLHwZ99CTOOswvCRP3C+VCWnzBf+1SnbWxzzJ9lR0mA0JnY2JEAhp8rqmTE0GPFy88rrM27ffgp62oErMQ==}
116
+ dependencies:
117
+ tslib: 1.14.1
118
+ dev: false
119
+ optional: true
120
+
121
+ /@aws-crypto/util/2.0.2:
122
+ resolution: {integrity: sha512-Lgu5v/0e/BcrZ5m/IWqzPUf3UYFTy/PpeED+uc9SWUR1iZQL8XXbGQg10UfllwwBryO3hFF5dizK+78aoXC1eA==}
123
+ dependencies:
124
+ '@aws-sdk/types': 3.201.0
125
+ '@aws-sdk/util-utf8-browser': 3.188.0
126
+ tslib: 1.14.1
127
+ dev: false
128
+ optional: true
129
+
130
+ /@aws-sdk/abort-controller/3.201.0:
131
+ resolution: {integrity: sha512-xJ984k+CKlGjBmvNarzM8Y+b6X4L1Zt0TycQmVBJq7fAr/ju9l13pQIoXR5WlDIW1FkGeVczF5Nu6fN46SCORQ==}
132
+ engines: {node: '>=14.0.0'}
133
+ dependencies:
134
+ '@aws-sdk/types': 3.201.0
135
+ tslib: 2.4.1
136
+ dev: false
137
+ optional: true
138
+
139
+ /@aws-sdk/client-cognito-identity/3.204.0:
140
+ resolution: {integrity: sha512-uftJkNKYcZ8bXVwcpOn5ZUjUX0IRto0ZrTO8DBdS9b7PJu2Y84eSy46LsAYuRDC0PZreQxy8nOH5HmI86/W8xQ==}
141
+ engines: {node: '>=14.0.0'}
142
+ dependencies:
143
+ '@aws-crypto/sha256-browser': 2.0.0
144
+ '@aws-crypto/sha256-js': 2.0.0
145
+ '@aws-sdk/client-sts': 3.204.0
146
+ '@aws-sdk/config-resolver': 3.201.0
147
+ '@aws-sdk/credential-provider-node': 3.204.0
148
+ '@aws-sdk/fetch-http-handler': 3.204.0
149
+ '@aws-sdk/hash-node': 3.201.0
150
+ '@aws-sdk/invalid-dependency': 3.201.0
151
+ '@aws-sdk/middleware-content-length': 3.201.0
152
+ '@aws-sdk/middleware-endpoint': 3.201.0
153
+ '@aws-sdk/middleware-host-header': 3.201.0
154
+ '@aws-sdk/middleware-logger': 3.201.0
155
+ '@aws-sdk/middleware-recursion-detection': 3.201.0
156
+ '@aws-sdk/middleware-retry': 3.201.0
157
+ '@aws-sdk/middleware-serde': 3.201.0
158
+ '@aws-sdk/middleware-signing': 3.201.0
159
+ '@aws-sdk/middleware-stack': 3.201.0
160
+ '@aws-sdk/middleware-user-agent': 3.201.0
161
+ '@aws-sdk/node-config-provider': 3.201.0
162
+ '@aws-sdk/node-http-handler': 3.201.0
163
+ '@aws-sdk/protocol-http': 3.201.0
164
+ '@aws-sdk/smithy-client': 3.201.0
165
+ '@aws-sdk/types': 3.201.0
166
+ '@aws-sdk/url-parser': 3.201.0
167
+ '@aws-sdk/util-base64': 3.202.0
168
+ '@aws-sdk/util-base64-browser': 3.188.0
169
+ '@aws-sdk/util-base64-node': 3.201.0
170
+ '@aws-sdk/util-body-length-browser': 3.188.0
171
+ '@aws-sdk/util-body-length-node': 3.201.0
172
+ '@aws-sdk/util-defaults-mode-browser': 3.201.0
173
+ '@aws-sdk/util-defaults-mode-node': 3.201.0
174
+ '@aws-sdk/util-endpoints': 3.202.0
175
+ '@aws-sdk/util-user-agent-browser': 3.201.0
176
+ '@aws-sdk/util-user-agent-node': 3.201.0
177
+ '@aws-sdk/util-utf8-browser': 3.188.0
178
+ '@aws-sdk/util-utf8-node': 3.201.0
179
+ tslib: 2.4.1
180
+ transitivePeerDependencies:
181
+ - aws-crt
182
+ dev: false
183
+ optional: true
184
+
185
+ /@aws-sdk/client-sso/3.204.0:
186
+ resolution: {integrity: sha512-AECcNrcAQxV/Jlu8ogshRaYwt2jayx0omQJs/SXj70mWxmbk4MQnb+DqJIpPpOKBHaza/xlC2TKS1RzkiuZxyw==}
187
+ engines: {node: '>=14.0.0'}
188
+ dependencies:
189
+ '@aws-crypto/sha256-browser': 2.0.0
190
+ '@aws-crypto/sha256-js': 2.0.0
191
+ '@aws-sdk/config-resolver': 3.201.0
192
+ '@aws-sdk/fetch-http-handler': 3.204.0
193
+ '@aws-sdk/hash-node': 3.201.0
194
+ '@aws-sdk/invalid-dependency': 3.201.0
195
+ '@aws-sdk/middleware-content-length': 3.201.0
196
+ '@aws-sdk/middleware-endpoint': 3.201.0
197
+ '@aws-sdk/middleware-host-header': 3.201.0
198
+ '@aws-sdk/middleware-logger': 3.201.0
199
+ '@aws-sdk/middleware-recursion-detection': 3.201.0
200
+ '@aws-sdk/middleware-retry': 3.201.0
201
+ '@aws-sdk/middleware-serde': 3.201.0
202
+ '@aws-sdk/middleware-stack': 3.201.0
203
+ '@aws-sdk/middleware-user-agent': 3.201.0
204
+ '@aws-sdk/node-config-provider': 3.201.0
205
+ '@aws-sdk/node-http-handler': 3.201.0
206
+ '@aws-sdk/protocol-http': 3.201.0
207
+ '@aws-sdk/smithy-client': 3.201.0
208
+ '@aws-sdk/types': 3.201.0
209
+ '@aws-sdk/url-parser': 3.201.0
210
+ '@aws-sdk/util-base64': 3.202.0
211
+ '@aws-sdk/util-base64-browser': 3.188.0
212
+ '@aws-sdk/util-base64-node': 3.201.0
213
+ '@aws-sdk/util-body-length-browser': 3.188.0
214
+ '@aws-sdk/util-body-length-node': 3.201.0
215
+ '@aws-sdk/util-defaults-mode-browser': 3.201.0
216
+ '@aws-sdk/util-defaults-mode-node': 3.201.0
217
+ '@aws-sdk/util-endpoints': 3.202.0
218
+ '@aws-sdk/util-user-agent-browser': 3.201.0
219
+ '@aws-sdk/util-user-agent-node': 3.201.0
220
+ '@aws-sdk/util-utf8-browser': 3.188.0
221
+ '@aws-sdk/util-utf8-node': 3.201.0
222
+ tslib: 2.4.1
223
+ transitivePeerDependencies:
224
+ - aws-crt
225
+ dev: false
226
+ optional: true
227
+
228
+ /@aws-sdk/client-sts/3.204.0:
229
+ resolution: {integrity: sha512-Tp6FqENRw31XK5r5hul1JXnQgHBhbbXhoMebyFih6/zjpATaqg0bnV6tpww4yPi3uc+yDGXKw2/tDroSsyTsRA==}
230
+ engines: {node: '>=14.0.0'}
231
+ dependencies:
232
+ '@aws-crypto/sha256-browser': 2.0.0
233
+ '@aws-crypto/sha256-js': 2.0.0
234
+ '@aws-sdk/config-resolver': 3.201.0
235
+ '@aws-sdk/credential-provider-node': 3.204.0
236
+ '@aws-sdk/fetch-http-handler': 3.204.0
237
+ '@aws-sdk/hash-node': 3.201.0
238
+ '@aws-sdk/invalid-dependency': 3.201.0
239
+ '@aws-sdk/middleware-content-length': 3.201.0
240
+ '@aws-sdk/middleware-endpoint': 3.201.0
241
+ '@aws-sdk/middleware-host-header': 3.201.0
242
+ '@aws-sdk/middleware-logger': 3.201.0
243
+ '@aws-sdk/middleware-recursion-detection': 3.201.0
244
+ '@aws-sdk/middleware-retry': 3.201.0
245
+ '@aws-sdk/middleware-sdk-sts': 3.201.0
246
+ '@aws-sdk/middleware-serde': 3.201.0
247
+ '@aws-sdk/middleware-signing': 3.201.0
248
+ '@aws-sdk/middleware-stack': 3.201.0
249
+ '@aws-sdk/middleware-user-agent': 3.201.0
250
+ '@aws-sdk/node-config-provider': 3.201.0
251
+ '@aws-sdk/node-http-handler': 3.201.0
252
+ '@aws-sdk/protocol-http': 3.201.0
253
+ '@aws-sdk/smithy-client': 3.201.0
254
+ '@aws-sdk/types': 3.201.0
255
+ '@aws-sdk/url-parser': 3.201.0
256
+ '@aws-sdk/util-base64': 3.202.0
257
+ '@aws-sdk/util-base64-browser': 3.188.0
258
+ '@aws-sdk/util-base64-node': 3.201.0
259
+ '@aws-sdk/util-body-length-browser': 3.188.0
260
+ '@aws-sdk/util-body-length-node': 3.201.0
261
+ '@aws-sdk/util-defaults-mode-browser': 3.201.0
262
+ '@aws-sdk/util-defaults-mode-node': 3.201.0
263
+ '@aws-sdk/util-endpoints': 3.202.0
264
+ '@aws-sdk/util-user-agent-browser': 3.201.0
265
+ '@aws-sdk/util-user-agent-node': 3.201.0
266
+ '@aws-sdk/util-utf8-browser': 3.188.0
267
+ '@aws-sdk/util-utf8-node': 3.201.0
268
+ fast-xml-parser: 4.0.11
269
+ tslib: 2.4.1
270
+ transitivePeerDependencies:
271
+ - aws-crt
272
+ dev: false
273
+ optional: true
274
+
275
+ /@aws-sdk/config-resolver/3.201.0:
276
+ resolution: {integrity: sha512-6YLIel7OGMGi+r8XC1A54cQJRIpx/NJ4fBALy44zFpQ+fdJUEmw4daUf1LECmAQiPA2Pr/hD0nBtX+wiiTf5/g==}
277
+ engines: {node: '>=14.0.0'}
278
+ dependencies:
279
+ '@aws-sdk/signature-v4': 3.201.0
280
+ '@aws-sdk/types': 3.201.0
281
+ '@aws-sdk/util-config-provider': 3.201.0
282
+ '@aws-sdk/util-middleware': 3.201.0
283
+ tslib: 2.4.1
284
+ dev: false
285
+ optional: true
286
+
287
+ /@aws-sdk/credential-provider-cognito-identity/3.204.0:
288
+ resolution: {integrity: sha512-DmiGXe7pXWuJiAGphzY5cRaphRiU5DJ6Tcg/88Td3wnj22As5DCELetb7E2YC9DfwmKiWcGAKQaYQqWe5AzSqw==}
289
+ engines: {node: '>=14.0.0'}
290
+ dependencies:
291
+ '@aws-sdk/client-cognito-identity': 3.204.0
292
+ '@aws-sdk/property-provider': 3.201.0
293
+ '@aws-sdk/types': 3.201.0
294
+ tslib: 2.4.1
295
+ transitivePeerDependencies:
296
+ - aws-crt
297
+ dev: false
298
+ optional: true
299
+
300
+ /@aws-sdk/credential-provider-env/3.201.0:
301
+ resolution: {integrity: sha512-g2MJsowzFhSsIOITUjYp7EzWFeHINjEP526Uf+5z2/p2kxQVwYYWZQK7j+tPE2Bk3MEjGOCmVHbbE7IFj0rNHw==}
302
+ engines: {node: '>=14.0.0'}
303
+ dependencies:
304
+ '@aws-sdk/property-provider': 3.201.0
305
+ '@aws-sdk/types': 3.201.0
306
+ tslib: 2.4.1
307
+ dev: false
308
+ optional: true
309
+
310
+ /@aws-sdk/credential-provider-imds/3.201.0:
311
+ resolution: {integrity: sha512-i8U2k3/L3iUWJJ1GSlwVBMfLQ2OTUT97E8yJi/xz5GavYuPOsUQWQe4fp7WGQivxh+AqybXAGFUCYub6zfUqag==}
312
+ engines: {node: '>=14.0.0'}
313
+ dependencies:
314
+ '@aws-sdk/node-config-provider': 3.201.0
315
+ '@aws-sdk/property-provider': 3.201.0
316
+ '@aws-sdk/types': 3.201.0
317
+ '@aws-sdk/url-parser': 3.201.0
318
+ tslib: 2.4.1
319
+ dev: false
320
+ optional: true
321
+
322
+ /@aws-sdk/credential-provider-ini/3.204.0:
323
+ resolution: {integrity: sha512-ddtaS0ya5lgZZwfuJ/FuniroreLJ6yDgPAasol/rla9U5EU0qUEK1+6PX463exghUGjYfTqxdrKXhGYZfuEoIw==}
324
+ engines: {node: '>=14.0.0'}
325
+ dependencies:
326
+ '@aws-sdk/credential-provider-env': 3.201.0
327
+ '@aws-sdk/credential-provider-imds': 3.201.0
328
+ '@aws-sdk/credential-provider-sso': 3.204.0
329
+ '@aws-sdk/credential-provider-web-identity': 3.201.0
330
+ '@aws-sdk/property-provider': 3.201.0
331
+ '@aws-sdk/shared-ini-file-loader': 3.201.0
332
+ '@aws-sdk/types': 3.201.0
333
+ tslib: 2.4.1
334
+ transitivePeerDependencies:
335
+ - aws-crt
336
+ dev: false
337
+ optional: true
338
+
339
+ /@aws-sdk/credential-provider-node/3.204.0:
340
+ resolution: {integrity: sha512-kGbR5JE90zBGDS4cIz7tlUklMMeOm5oc5ES74YStLUacpQKwzVcHmDG8aT2DCONS/wEYysOIs5LygHurOJ/+Ww==}
341
+ engines: {node: '>=14.0.0'}
342
+ dependencies:
343
+ '@aws-sdk/credential-provider-env': 3.201.0
344
+ '@aws-sdk/credential-provider-imds': 3.201.0
345
+ '@aws-sdk/credential-provider-ini': 3.204.0
346
+ '@aws-sdk/credential-provider-process': 3.201.0
347
+ '@aws-sdk/credential-provider-sso': 3.204.0
348
+ '@aws-sdk/credential-provider-web-identity': 3.201.0
349
+ '@aws-sdk/property-provider': 3.201.0
350
+ '@aws-sdk/shared-ini-file-loader': 3.201.0
351
+ '@aws-sdk/types': 3.201.0
352
+ tslib: 2.4.1
353
+ transitivePeerDependencies:
354
+ - aws-crt
355
+ dev: false
356
+ optional: true
357
+
358
+ /@aws-sdk/credential-provider-process/3.201.0:
359
+ resolution: {integrity: sha512-jTK3HSZgNj/hVrWb0wuF/cPUWSJYoRI/80fnN55o6QLS8WWIgOI8o2PNeVTAT5OrKioSoN4fgKTeUm3DZy3npQ==}
360
+ engines: {node: '>=14.0.0'}
361
+ dependencies:
362
+ '@aws-sdk/property-provider': 3.201.0
363
+ '@aws-sdk/shared-ini-file-loader': 3.201.0
364
+ '@aws-sdk/types': 3.201.0
365
+ tslib: 2.4.1
366
+ dev: false
367
+ optional: true
368
+
369
+ /@aws-sdk/credential-provider-sso/3.204.0:
370
+ resolution: {integrity: sha512-iS884Gda99x4zmdCK3XxFcceve4wB+wudpeTUm2wwX9AGrSzoUnLWqNXv/R8UAMAsKANaWMBkqv/bsHpsEitZw==}
371
+ engines: {node: '>=14.0.0'}
372
+ dependencies:
373
+ '@aws-sdk/client-sso': 3.204.0
374
+ '@aws-sdk/property-provider': 3.201.0
375
+ '@aws-sdk/shared-ini-file-loader': 3.201.0
376
+ '@aws-sdk/types': 3.201.0
377
+ tslib: 2.4.1
378
+ transitivePeerDependencies:
379
+ - aws-crt
380
+ dev: false
381
+ optional: true
382
+
383
+ /@aws-sdk/credential-provider-web-identity/3.201.0:
384
+ resolution: {integrity: sha512-U54bqhYaClPVZfswgknhlICp3BAtKXpOgHQCUF8cko5xUgbL4lVgd1rC3lWviGFMQAaTIF3QOXyEouemxr3VXw==}
385
+ engines: {node: '>=14.0.0'}
386
+ dependencies:
387
+ '@aws-sdk/property-provider': 3.201.0
388
+ '@aws-sdk/types': 3.201.0
389
+ tslib: 2.4.1
390
+ dev: false
391
+ optional: true
392
+
393
+ /@aws-sdk/credential-providers/3.204.0:
394
+ resolution: {integrity: sha512-XlVfSWoXAiuQb5Q053McnmqSvllojKAc8ecQiLgLXstXXcHrI36E4XH7VkMaNV8JPPdLQhmLxrj01vzUyoT47Q==}
395
+ engines: {node: '>=14.0.0'}
396
+ requiresBuild: true
397
+ dependencies:
398
+ '@aws-sdk/client-cognito-identity': 3.204.0
399
+ '@aws-sdk/client-sso': 3.204.0
400
+ '@aws-sdk/client-sts': 3.204.0
401
+ '@aws-sdk/credential-provider-cognito-identity': 3.204.0
402
+ '@aws-sdk/credential-provider-env': 3.201.0
403
+ '@aws-sdk/credential-provider-imds': 3.201.0
404
+ '@aws-sdk/credential-provider-ini': 3.204.0
405
+ '@aws-sdk/credential-provider-node': 3.204.0
406
+ '@aws-sdk/credential-provider-process': 3.201.0
407
+ '@aws-sdk/credential-provider-sso': 3.204.0
408
+ '@aws-sdk/credential-provider-web-identity': 3.201.0
409
+ '@aws-sdk/property-provider': 3.201.0
410
+ '@aws-sdk/shared-ini-file-loader': 3.201.0
411
+ '@aws-sdk/types': 3.201.0
412
+ tslib: 2.4.1
413
+ transitivePeerDependencies:
414
+ - aws-crt
415
+ dev: false
416
+ optional: true
417
+
418
+ /@aws-sdk/fetch-http-handler/3.204.0:
419
+ resolution: {integrity: sha512-TfIhWYQ4CTjrD+FSuBcKMSVrqq8GCwqCfUyalWmSKo4JIFhN5OxUnOFb1/ecE/TJX+YgZ65w4qhVJVHHmh229Q==}
420
+ dependencies:
421
+ '@aws-sdk/protocol-http': 3.201.0
422
+ '@aws-sdk/querystring-builder': 3.201.0
423
+ '@aws-sdk/types': 3.201.0
424
+ '@aws-sdk/util-base64': 3.202.0
425
+ tslib: 2.4.1
426
+ dev: false
427
+ optional: true
428
+
429
+ /@aws-sdk/hash-node/3.201.0:
430
+ resolution: {integrity: sha512-WJsMZg5/TMoWnLM+0NuwLwFzHsi89Bi9J1Dt7JdJHXFLoEZV54FEz1PK/Sq5NOldhVljpXQwWOB2dHA2wxFztg==}
431
+ engines: {node: '>=14.0.0'}
432
+ dependencies:
433
+ '@aws-sdk/types': 3.201.0
434
+ '@aws-sdk/util-buffer-from': 3.201.0
435
+ tslib: 2.4.1
436
+ dev: false
437
+ optional: true
438
+
439
+ /@aws-sdk/invalid-dependency/3.201.0:
440
+ resolution: {integrity: sha512-f/zgntOfIozNyKSaG9dvHjjBaR3y20kYNswMYkSuCM2NIT5LpyHiiq5I11TwaocatUFcDztWpcsv7vHpIgI5Ig==}
441
+ dependencies:
442
+ '@aws-sdk/types': 3.201.0
443
+ tslib: 2.4.1
444
+ dev: false
445
+ optional: true
446
+
447
+ /@aws-sdk/is-array-buffer/3.201.0:
448
+ resolution: {integrity: sha512-UPez5qLh3dNgt0DYnPD/q0mVJY84rA17QE26hVNOW3fAji8W2wrwrxdacWOxyXvlxWsVRcKmr+lay1MDqpAMfg==}
449
+ engines: {node: '>=14.0.0'}
450
+ dependencies:
451
+ tslib: 2.4.1
452
+ dev: false
453
+ optional: true
454
+
455
+ /@aws-sdk/middleware-content-length/3.201.0:
456
+ resolution: {integrity: sha512-p4G9AtdrKO8A3Z4RyZiy0isEYwuge7bQRBS7UzcGkcIOhJONq2pcM+gRZYz+NWvfYYNWUg5uODsFQfU8342yKg==}
457
+ engines: {node: '>=14.0.0'}
458
+ dependencies:
459
+ '@aws-sdk/protocol-http': 3.201.0
460
+ '@aws-sdk/types': 3.201.0
461
+ tslib: 2.4.1
462
+ dev: false
463
+ optional: true
464
+
465
+ /@aws-sdk/middleware-endpoint/3.201.0:
466
+ resolution: {integrity: sha512-F3JlXo5GusbeZR956hA9VxmDxUeg77Xh6o8fveAE2+G4Bjcb1iq9jPNlw6A14vDj3oTKenv2LLnjL2OIfl6hRA==}
467
+ engines: {node: '>=14.0.0'}
468
+ dependencies:
469
+ '@aws-sdk/middleware-serde': 3.201.0
470
+ '@aws-sdk/protocol-http': 3.201.0
471
+ '@aws-sdk/signature-v4': 3.201.0
472
+ '@aws-sdk/types': 3.201.0
473
+ '@aws-sdk/url-parser': 3.201.0
474
+ '@aws-sdk/util-config-provider': 3.201.0
475
+ '@aws-sdk/util-middleware': 3.201.0
476
+ tslib: 2.4.1
477
+ dev: false
478
+ optional: true
479
+
480
+ /@aws-sdk/middleware-host-header/3.201.0:
481
+ resolution: {integrity: sha512-7KNzdV7nFcKAoahvgGAlzsOq9FFDsU5h3w2iPtVdJhz6ZRDH/2v6WFeUCji+UNZip36gFfMPivoO8Y5smb5r/A==}
482
+ engines: {node: '>=14.0.0'}
483
+ dependencies:
484
+ '@aws-sdk/protocol-http': 3.201.0
485
+ '@aws-sdk/types': 3.201.0
486
+ tslib: 2.4.1
487
+ dev: false
488
+ optional: true
489
+
490
+ /@aws-sdk/middleware-logger/3.201.0:
491
+ resolution: {integrity: sha512-kYLsa9x3oUJxYU7V5KOO50Kl7b0kk+I4ltkrdarLvvXcVI7ZXmWHzHLT2dkUhj8S0ceVdi0FYHVPJ3GoE8re4A==}
492
+ engines: {node: '>=14.0.0'}
493
+ dependencies:
494
+ '@aws-sdk/types': 3.201.0
495
+ tslib: 2.4.1
496
+ dev: false
497
+ optional: true
498
+
499
+ /@aws-sdk/middleware-recursion-detection/3.201.0:
500
+ resolution: {integrity: sha512-NGOr+n559ZcJLdFoJR8LNGdrOJFIp2BTuWEDYeicNdNb0bETTXrkzcfT1BRhV9CWqCDmjFvjdrzbhS0cw/UUGA==}
501
+ engines: {node: '>=14.0.0'}
502
+ dependencies:
503
+ '@aws-sdk/protocol-http': 3.201.0
504
+ '@aws-sdk/types': 3.201.0
505
+ tslib: 2.4.1
506
+ dev: false
507
+ optional: true
508
+
509
+ /@aws-sdk/middleware-retry/3.201.0:
510
+ resolution: {integrity: sha512-4jQjSKCpSc4oB1X9nNq4FbIAwQrr+mvmUSmg/oe2Llf42Ak1G9gg3rNTtQdfzA/wNMlL4ZFfF5Br+uz06e1hnQ==}
511
+ engines: {node: '>=14.0.0'}
512
+ dependencies:
513
+ '@aws-sdk/protocol-http': 3.201.0
514
+ '@aws-sdk/service-error-classification': 3.201.0
515
+ '@aws-sdk/types': 3.201.0
516
+ '@aws-sdk/util-middleware': 3.201.0
517
+ tslib: 2.4.1
518
+ uuid: 8.3.2
519
+ dev: false
520
+ optional: true
521
+
522
+ /@aws-sdk/middleware-sdk-sts/3.201.0:
523
+ resolution: {integrity: sha512-clZuXcoN0mAP4JH5C6pW5+0tdF25+fpFJqE7GNRjjH/NYNk6ImVI0Kq2espEWwVBuaS0/chTDK3b+pK8YOWdhw==}
524
+ engines: {node: '>=14.0.0'}
525
+ dependencies:
526
+ '@aws-sdk/middleware-signing': 3.201.0
527
+ '@aws-sdk/property-provider': 3.201.0
528
+ '@aws-sdk/protocol-http': 3.201.0
529
+ '@aws-sdk/signature-v4': 3.201.0
530
+ '@aws-sdk/types': 3.201.0
531
+ tslib: 2.4.1
532
+ dev: false
533
+ optional: true
534
+
535
+ /@aws-sdk/middleware-serde/3.201.0:
536
+ resolution: {integrity: sha512-Z7AzIuqEDvsZmp80zeT1oYxsoB8uQZby20Z8kF6/vNoq3sIzaGf/wHeNn0p+Vgo2auGSbZcVUZKoDptQLSLwIQ==}
537
+ engines: {node: '>=14.0.0'}
538
+ dependencies:
539
+ '@aws-sdk/types': 3.201.0
540
+ tslib: 2.4.1
541
+ dev: false
542
+ optional: true
543
+
544
+ /@aws-sdk/middleware-signing/3.201.0:
545
+ resolution: {integrity: sha512-08ri5+mB28tva9RjVIXFcUP5lRTx+Pj8C2HYqF2GL5H3uAo+h3RQ++fEG1uwUMLf7tCEFivcw6SHA1KmCnB7+w==}
546
+ engines: {node: '>=14.0.0'}
547
+ dependencies:
548
+ '@aws-sdk/property-provider': 3.201.0
549
+ '@aws-sdk/protocol-http': 3.201.0
550
+ '@aws-sdk/signature-v4': 3.201.0
551
+ '@aws-sdk/types': 3.201.0
552
+ '@aws-sdk/util-middleware': 3.201.0
553
+ tslib: 2.4.1
554
+ dev: false
555
+ optional: true
556
+
557
+ /@aws-sdk/middleware-stack/3.201.0:
558
+ resolution: {integrity: sha512-lqHYSBP5FBxzA5w5XiYYYpfXabFzleXonqRkqZts1tapNJ4sOd+itiKG8JoNP7LDOwJ8qxNW/a33/gQeh3wkwQ==}
559
+ engines: {node: '>=14.0.0'}
560
+ dependencies:
561
+ tslib: 2.4.1
562
+ dev: false
563
+ optional: true
564
+
565
+ /@aws-sdk/middleware-user-agent/3.201.0:
566
+ resolution: {integrity: sha512-/rYZ93WN1gDJudXis/0382CEoTqRa4qZJA608u2EPWs5aiMocUrm7pjH5XvKm2OYX8K/lyaMSBvL2OTIMzXGaQ==}
567
+ engines: {node: '>=14.0.0'}
568
+ dependencies:
569
+ '@aws-sdk/protocol-http': 3.201.0
570
+ '@aws-sdk/types': 3.201.0
571
+ tslib: 2.4.1
572
+ dev: false
573
+ optional: true
574
+
575
+ /@aws-sdk/node-config-provider/3.201.0:
576
+ resolution: {integrity: sha512-JO0K2qPTYn+pPC7g8rWr1oueg9CqGCkYbINuAuz79vjToOLUQnZT9GiFm7QADe6J6RT1oGEKRQabNaJnp8cFpQ==}
577
+ engines: {node: '>=14.0.0'}
578
+ dependencies:
579
+ '@aws-sdk/property-provider': 3.201.0
580
+ '@aws-sdk/shared-ini-file-loader': 3.201.0
581
+ '@aws-sdk/types': 3.201.0
582
+ tslib: 2.4.1
583
+ dev: false
584
+ optional: true
585
+
586
+ /@aws-sdk/node-http-handler/3.201.0:
587
+ resolution: {integrity: sha512-bWjXBd4WCiQcV4PwY+eFnlz9tZ4UiqfiJteav4MDt8YWkVlsVnR8RutmVSm3KZZjO2tJNSrla0ZWBebkNnI/Xg==}
588
+ engines: {node: '>=14.0.0'}
589
+ dependencies:
590
+ '@aws-sdk/abort-controller': 3.201.0
591
+ '@aws-sdk/protocol-http': 3.201.0
592
+ '@aws-sdk/querystring-builder': 3.201.0
593
+ '@aws-sdk/types': 3.201.0
594
+ tslib: 2.4.1
595
+ dev: false
596
+ optional: true
597
+
598
+ /@aws-sdk/property-provider/3.201.0:
599
+ resolution: {integrity: sha512-lVMP75VsYHIW04uYbkjA0I8Bb7b+aEj6PBBLdFoA22S0uCeJOD42OSr2Gtg2fToDGO7LQJw/K2D+LMCYKfZ3vQ==}
600
+ engines: {node: '>=14.0.0'}
601
+ dependencies:
602
+ '@aws-sdk/types': 3.201.0
603
+ tslib: 2.4.1
604
+ dev: false
605
+ optional: true
606
+
607
+ /@aws-sdk/protocol-http/3.201.0:
608
+ resolution: {integrity: sha512-RdOc1elWFpj8MogxG87nkhtylw0a+OD7W8WFM+Gw4yJMkl7cwW42VIBFfb0+KCGZfIQltIeSLRvfe3WvVPyo7Q==}
609
+ engines: {node: '>=14.0.0'}
610
+ dependencies:
611
+ '@aws-sdk/types': 3.201.0
612
+ tslib: 2.4.1
613
+ dev: false
614
+ optional: true
615
+
616
+ /@aws-sdk/querystring-builder/3.201.0:
617
+ resolution: {integrity: sha512-FgQnVHpYR19w/HmHEgWpykCn9tdogW0n45Ins6LBCo2aImDf9kBATD4xgN/F2rtogGuLGgu5LIIMHIOj1Tzs/w==}
618
+ engines: {node: '>=14.0.0'}
619
+ dependencies:
620
+ '@aws-sdk/types': 3.201.0
621
+ '@aws-sdk/util-uri-escape': 3.201.0
622
+ tslib: 2.4.1
623
+ dev: false
624
+ optional: true
625
+
626
+ /@aws-sdk/querystring-parser/3.201.0:
627
+ resolution: {integrity: sha512-vS9Ljbqrwi0sIKYxgyZYJUN1AcE291hvuqwty9etgD2w/26SbWiMhjIW/fXJUOZjUvGKkYCpbivJYSzAGAuWfQ==}
628
+ engines: {node: '>=14.0.0'}
629
+ dependencies:
630
+ '@aws-sdk/types': 3.201.0
631
+ tslib: 2.4.1
632
+ dev: false
633
+ optional: true
634
+
635
+ /@aws-sdk/service-error-classification/3.201.0:
636
+ resolution: {integrity: sha512-Pfcfmurgq8UpM0rXco6FVblcruqN4Mo3TW8/yaXrbctWpmdNT/8v19fffQIIgk94TU8Vf/nPJ7E5DXL7MZr4Fw==}
637
+ engines: {node: '>=14.0.0'}
638
+ dev: false
639
+ optional: true
640
+
641
+ /@aws-sdk/shared-ini-file-loader/3.201.0:
642
+ resolution: {integrity: sha512-Pbxk0TXep0yI8MnK7Prly6JuBm5Me9AITav8/zPEgTZ3fMhXhQhhiuQcuTCI9GeosSzoiu8VvK53oPtBZZFnXQ==}
643
+ engines: {node: '>=14.0.0'}
644
+ dependencies:
645
+ '@aws-sdk/types': 3.201.0
646
+ tslib: 2.4.1
647
+ dev: false
648
+ optional: true
649
+
650
+ /@aws-sdk/signature-v4/3.201.0:
651
+ resolution: {integrity: sha512-zEHoG1/hzJq169slggkPy1SN9YPWI78Bbe/MvHGYmCmQDspblu60JSBIbAatNqAxAmcWKc2HqpyGKjCkMG94ZA==}
652
+ engines: {node: '>=14.0.0'}
653
+ dependencies:
654
+ '@aws-sdk/is-array-buffer': 3.201.0
655
+ '@aws-sdk/types': 3.201.0
656
+ '@aws-sdk/util-hex-encoding': 3.201.0
657
+ '@aws-sdk/util-middleware': 3.201.0
658
+ '@aws-sdk/util-uri-escape': 3.201.0
659
+ tslib: 2.4.1
660
+ dev: false
661
+ optional: true
662
+
663
+ /@aws-sdk/smithy-client/3.201.0:
664
+ resolution: {integrity: sha512-cL87Jgxczee8YFkWGWKQ2Ze0vjn4+eCa1kDvEYMCOQvNujTuFgatXLgije5a7nVkSnL9WLoIP7Y7fsBGrKfMnQ==}
665
+ engines: {node: '>=14.0.0'}
666
+ dependencies:
667
+ '@aws-sdk/middleware-stack': 3.201.0
668
+ '@aws-sdk/types': 3.201.0
669
+ tslib: 2.4.1
670
+ dev: false
671
+ optional: true
672
+
673
+ /@aws-sdk/types/3.201.0:
674
+ resolution: {integrity: sha512-RCQj2pQyHD330Jd4c5CHJ87k2ZqC3Mmtl6nhwH1dy3vbnGUpc3q+3yinOKoTAY934kIa7ia32Y/2EjuyHxaj1A==}
675
+ engines: {node: '>=14.0.0'}
676
+ dev: false
677
+ optional: true
678
+
679
+ /@aws-sdk/url-parser/3.201.0:
680
+ resolution: {integrity: sha512-V15aqj0tj4Y79VpuIdHUvX4Nvn4hYPB0RAn/qg5CCComIl0doLOirAQtW1MOBOyctdRlD9Uv7d1QdPLzJZMHjQ==}
681
+ dependencies:
682
+ '@aws-sdk/querystring-parser': 3.201.0
683
+ '@aws-sdk/types': 3.201.0
684
+ tslib: 2.4.1
685
+ dev: false
686
+ optional: true
687
+
688
+ /@aws-sdk/util-base64-browser/3.188.0:
689
+ resolution: {integrity: sha512-qlH+5NZBLiyKziL335BEPedYxX6j+p7KFRWXvDQox9S+s+gLCayednpK+fteOhBenCcR9fUZOVuAPScy1I8qCg==}
690
+ dependencies:
691
+ tslib: 2.4.1
692
+ dev: false
693
+ optional: true
694
+
695
+ /@aws-sdk/util-base64-node/3.201.0:
696
+ resolution: {integrity: sha512-ydZqNpB3l5kiicInpPDExPb5xHI7uyVIa1vMupnuIrJ412iNb0F2+K8LlFynzw6fSJShVKnqFcWOYRA96z1iIw==}
697
+ engines: {node: '>=14.0.0'}
698
+ dependencies:
699
+ '@aws-sdk/util-buffer-from': 3.201.0
700
+ tslib: 2.4.1
701
+ dev: false
702
+ optional: true
703
+
704
+ /@aws-sdk/util-base64/3.202.0:
705
+ resolution: {integrity: sha512-0QlvxCSU2CITeR/x87zls9ma+CkN3EXRGM3M5XnHWaneDI9K+O2uPpAbDfLh0SBJyO0AfIMn7Vh/BvnNNPEDpg==}
706
+ engines: {node: '>=14.0.0'}
707
+ dependencies:
708
+ '@aws-sdk/util-buffer-from': 3.201.0
709
+ tslib: 2.4.1
710
+ dev: false
711
+ optional: true
712
+
713
+ /@aws-sdk/util-body-length-browser/3.188.0:
714
+ resolution: {integrity: sha512-8VpnwFWXhnZ/iRSl9mTf+VKOX9wDE8QtN4bj9pBfxwf90H1X7E8T6NkiZD3k+HubYf2J94e7DbeHs7fuCPW5Qg==}
715
+ dependencies:
716
+ tslib: 2.4.1
717
+ dev: false
718
+ optional: true
719
+
720
+ /@aws-sdk/util-body-length-node/3.201.0:
721
+ resolution: {integrity: sha512-q+gwQoLn/DOwirb2hgZJeEwo1D3vLhoD6FfSV42Ecfvtb4jHnWReWMHguujfCubuDgZCrMEvYQzuocS75HHsbA==}
722
+ engines: {node: '>=14.0.0'}
723
+ dependencies:
724
+ tslib: 2.4.1
725
+ dev: false
726
+ optional: true
727
+
728
+ /@aws-sdk/util-buffer-from/3.201.0:
729
+ resolution: {integrity: sha512-s6Wjltd9vU+vR3n0pqSPmNDcrrkrVTdV4t7x2zz3nDsFKTI77iVNafDmuaUlOA/bIlpjCJqaWecoVrZmEKeR7A==}
730
+ engines: {node: '>=14.0.0'}
731
+ dependencies:
732
+ '@aws-sdk/is-array-buffer': 3.201.0
733
+ tslib: 2.4.1
734
+ dev: false
735
+ optional: true
736
+
737
+ /@aws-sdk/util-config-provider/3.201.0:
738
+ resolution: {integrity: sha512-cCRJlnRRP8vrLJomzJRBIyiyohsjJKmnIaQ9t0tAhGCywZbyjx6TlpYRZYfVWo+MwdF1Pi8ZScTrFPW0JuBOIQ==}
739
+ engines: {node: '>=14.0.0'}
740
+ dependencies:
741
+ tslib: 2.4.1
742
+ dev: false
743
+ optional: true
744
+
745
+ /@aws-sdk/util-defaults-mode-browser/3.201.0:
746
+ resolution: {integrity: sha512-skRMAM+xrV/sDvvtHC81ExEKQEiZFaRrRdUT39fBX1SpGnFTo2wpv7XK+rAW2XopGgnLPytXLQD97Kub79o4zA==}
747
+ engines: {node: '>= 10.0.0'}
748
+ dependencies:
749
+ '@aws-sdk/property-provider': 3.201.0
750
+ '@aws-sdk/types': 3.201.0
751
+ bowser: 2.11.0
752
+ tslib: 2.4.1
753
+ dev: false
754
+ optional: true
755
+
756
+ /@aws-sdk/util-defaults-mode-node/3.201.0:
757
+ resolution: {integrity: sha512-9N5LXRhxigbkbEcjQ4nNXHuQxp0VFlbc2/5wbcuPjIKX/OROiQI4mYQ6nuSKk7eku5sNFb9FtEHeD/RZo8od6Q==}
758
+ engines: {node: '>= 10.0.0'}
759
+ dependencies:
760
+ '@aws-sdk/config-resolver': 3.201.0
761
+ '@aws-sdk/credential-provider-imds': 3.201.0
762
+ '@aws-sdk/node-config-provider': 3.201.0
763
+ '@aws-sdk/property-provider': 3.201.0
764
+ '@aws-sdk/types': 3.201.0
765
+ tslib: 2.4.1
766
+ dev: false
767
+ optional: true
768
+
769
+ /@aws-sdk/util-endpoints/3.202.0:
770
+ resolution: {integrity: sha512-sNees5uDp7nfEbvzaA1DAHqoEvEb9ZOkdNH5gcj/FMBETbr00YtsuXsTZogTHQsX/otRTiudZBE3iH7R4SLSAQ==}
771
+ engines: {node: '>=14.0.0'}
772
+ dependencies:
773
+ '@aws-sdk/types': 3.201.0
774
+ tslib: 2.4.1
775
+ dev: false
776
+ optional: true
777
+
778
+ /@aws-sdk/util-hex-encoding/3.201.0:
779
+ resolution: {integrity: sha512-7t1vR1pVxKx0motd3X9rI3m/xNp78p3sHtP5yo4NP4ARpxyJ0fokBomY8ScaH2D/B+U5o9ARxldJUdMqyBlJcA==}
780
+ engines: {node: '>=14.0.0'}
781
+ dependencies:
782
+ tslib: 2.4.1
783
+ dev: false
784
+ optional: true
785
+
786
+ /@aws-sdk/util-locate-window/3.201.0:
787
+ resolution: {integrity: sha512-hPJgifWh/rADabLAk1C9xXA2B3O4NUmbU58KgBRgC1HksiiHGFVZObB5fkBH8US/XV2jwORkpSf4OhretXQuKg==}
788
+ engines: {node: '>=14.0.0'}
789
+ dependencies:
790
+ tslib: 2.4.1
791
+ dev: false
792
+ optional: true
793
+
794
+ /@aws-sdk/util-middleware/3.201.0:
795
+ resolution: {integrity: sha512-iAitcEZo17IyKn4ku1IBgtomr25esu5OuSRjw5Or4bNOeqXB0w50cItf/9qft8LIhbvBEAUtNAYXvqNzvhTZdQ==}
796
+ engines: {node: '>=14.0.0'}
797
+ dependencies:
798
+ tslib: 2.4.1
799
+ dev: false
800
+ optional: true
801
+
802
+ /@aws-sdk/util-uri-escape/3.201.0:
803
+ resolution: {integrity: sha512-TeTWbGx4LU2c5rx0obHeDFeO9HvwYwQtMh1yniBz00pQb6Qt6YVOETVQikRZ+XRQwEyCg/dA375UplIpiy54mA==}
804
+ engines: {node: '>=14.0.0'}
805
+ dependencies:
806
+ tslib: 2.4.1
807
+ dev: false
808
+ optional: true
809
+
810
+ /@aws-sdk/util-user-agent-browser/3.201.0:
811
+ resolution: {integrity: sha512-iL2gyz7GuUVtZcMZpqvfxdFrl9hc28qpagymmJ/w2yhN86YNPHdK8Sx1Yo6VxNGVDCCWGb7tHXf7VP+U4Yv/Lg==}
812
+ dependencies:
813
+ '@aws-sdk/types': 3.201.0
814
+ bowser: 2.11.0
815
+ tslib: 2.4.1
816
+ dev: false
817
+ optional: true
818
+
819
+ /@aws-sdk/util-user-agent-node/3.201.0:
820
+ resolution: {integrity: sha512-6lhhvwB3AZSISnYQpDGdlyTrzfYK2P9QYjy7vZEBRd9TSOaggiFICXe03ZvZfVOSeg0EInlMKn1fIHzPUHRuHQ==}
821
+ engines: {node: '>=14.0.0'}
822
+ peerDependencies:
823
+ aws-crt: '>=1.0.0'
824
+ peerDependenciesMeta:
825
+ aws-crt:
826
+ optional: true
827
+ dependencies:
828
+ '@aws-sdk/node-config-provider': 3.201.0
829
+ '@aws-sdk/types': 3.201.0
830
+ tslib: 2.4.1
831
+ dev: false
832
+ optional: true
833
+
834
+ /@aws-sdk/util-utf8-browser/3.188.0:
835
+ resolution: {integrity: sha512-jt627x0+jE+Ydr9NwkFstg3cUvgWh56qdaqAMDsqgRlKD21md/6G226z/Qxl7lb1VEW2LlmCx43ai/37Qwcj2Q==}
836
+ dependencies:
837
+ tslib: 2.4.1
838
+ dev: false
839
+ optional: true
840
+
841
+ /@aws-sdk/util-utf8-node/3.201.0:
842
+ resolution: {integrity: sha512-A+bJFR/1rHYOJg137E69L1sX0I+LH+xf9ZjMXG9BVO0hSo7yDPoJVpHrzTJyOc3tuRITjIGBv9Qi4TKcoOSi1A==}
843
+ engines: {node: '>=14.0.0'}
844
+ dependencies:
845
+ '@aws-sdk/util-buffer-from': 3.201.0
846
+ tslib: 2.4.1
847
+ dev: false
848
+ optional: true
849
+
850
  /@esbuild/android-arm/0.15.13:
851
  resolution: {integrity: sha512-RY2fVI8O0iFUNvZirXaQ1vMvK0xhCcl0gqRj74Z6yEiO1zAUa7hbsdwZM1kzqbxHK7LFyMizipfXT3JME+12Hw==}
852
  engines: {node: '>=12'}
 
1072
  rollup: 2.79.1
1073
  dev: true
1074
 
1075
+ /@sveltejs/kit/1.0.0-next.538_svelte@3.52.0+vite@3.2.2:
1076
+ resolution: {integrity: sha512-NRu6+j1Lc0daE2OirlbDCbT/yMf5l5nFln2o1asMA3HL7A244SG+uGGFea4DZ1bdetZ3IhO5xa1MWIGY5Ybb3g==}
1077
  engines: {node: '>=16.14'}
1078
  hasBin: true
1079
  requiresBuild: true
 
1134
  resolution: {integrity: sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==}
1135
  dev: true
1136
 
1137
+ /@types/lodash/4.14.188:
1138
+ resolution: {integrity: sha512-zmEmF5OIM3rb7SbLCFYoQhO4dGt2FRM9AMkxvA3LaADOF1n8in/zGJlWji9fmafLoNyz+FoL6FE0SLtGIArD7w==}
1139
+ dev: true
1140
+
1141
+ /@types/marked/4.0.7:
1142
+ resolution: {integrity: sha512-eEAhnz21CwvKVW+YvRvcTuFKNU9CV1qH+opcgVK3pIMI6YZzDm6gc8o2vHjldFk6MGKt5pueSB7IOpvpx5Qekw==}
1143
+ dev: true
1144
+
1145
  /@types/node/18.11.9:
1146
  resolution: {integrity: sha512-CRpX21/kGdzjOpFsZSkcrXMGIBWMGNIHXXBVFSH+ggkftxg+XYP20TESbh+zFvFj3EQOl5byk0HTRn1IL6hbqg==}
 
1147
 
1148
  /@types/pug/2.0.6:
1149
  resolution: {integrity: sha512-SnHmG9wN1UVmagJOnyo/qkk0Z7gejYxOYYmaAwr5u2yFYfsupN3sg10kyzN8Hep/2zbHxCnsumxOoRIRMBwKCg==}
 
1163
  resolution: {integrity: sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw==}
1164
  dev: true
1165
 
1166
+ /@types/webidl-conversions/7.0.0:
1167
+ resolution: {integrity: sha512-xTE1E+YF4aWPJJeUzaZI5DRntlkY3+BCVJi0axFptnjGmAoWxkyREIh/XMrfxVLejwQxMCfDXdICo0VLxThrog==}
1168
+ dev: false
1169
+
1170
+ /@types/whatwg-url/8.2.2:
1171
+ resolution: {integrity: sha512-FtQu10RWgn3D9U4aazdwIE2yzphmTJREDqNdODHrbrZmmMqI0vMheC/6NE/J1Yveaj8H+ela+YwWTjq5PGmuhA==}
1172
+ dependencies:
1173
+ '@types/node': 18.11.9
1174
+ '@types/webidl-conversions': 7.0.0
1175
+ dev: false
1176
+
1177
  /@typescript-eslint/eslint-plugin/5.42.0_6xw5wg2354iw4zujk2f3vyfrzu:
1178
  resolution: {integrity: sha512-5TJh2AgL6+wpL8H/GTSjNb4WrjKoR2rqvFxR/DDTqYNk6uXn8BJMEcncLSpMbf/XV1aS0jAjYwn98uvVCiAywQ==}
1179
  engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
 
1518
  resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
1519
  dev: true
1520
 
1521
+ /base64-js/1.5.1:
1522
+ resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==}
1523
+ dev: false
1524
+
1525
  /binary-extensions/2.2.0:
1526
  resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==}
1527
  engines: {node: '>=8'}
1528
  dev: true
1529
 
1530
+ /bowser/2.11.0:
1531
+ resolution: {integrity: sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA==}
1532
+ dev: false
1533
+ optional: true
1534
+
1535
  /brace-expansion/1.1.11:
1536
  resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==}
1537
  dependencies:
 
1552
  fill-range: 7.0.1
1553
  dev: true
1554
 
1555
+ /bson/4.7.0:
1556
+ resolution: {integrity: sha512-VrlEE4vuiO1WTpfof4VmaVolCVYkYTgB9iWgYNOrVlnifpME/06fhFRmONgBhClD5pFC1t9ZWqFUQEQAzY43bA==}
1557
+ engines: {node: '>=6.9.0'}
1558
+ dependencies:
1559
+ buffer: 5.7.1
1560
+ dev: false
1561
+
1562
  /buffer-crc32/0.2.13:
1563
  resolution: {integrity: sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==}
1564
  dev: true
1565
 
1566
+ /buffer/5.7.1:
1567
+ resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==}
1568
+ dependencies:
1569
+ base64-js: 1.5.1
1570
+ ieee754: 1.2.1
1571
+ dev: false
1572
+
1573
  /builtin-modules/3.3.0:
1574
  resolution: {integrity: sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==}
1575
  engines: {node: '>=6'}
 
1689
  resolution: {integrity: sha512-pOFYRTIhoKujrmbTRhcW5lYQLBXw/dlTwfI8IguF1QCDJOcJzNH1w+YFjxqy6BAuJrClTy6MUE8q+oKJ2FLsIw==}
1690
  dev: true
1691
 
1692
+ /denque/2.1.0:
1693
+ resolution: {integrity: sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw==}
1694
+ engines: {node: '>=0.10'}
1695
+ dev: false
1696
+
1697
  /destr/1.2.0:
1698
  resolution: {integrity: sha512-JG+cG4ZPB1L27sl2C2URg8MIOmIUtTbE5wEx02BpmrTCqg/hXxFKXsYsnODl5PdpqNRaS1KQGUQ56V8jk8XpYQ==}
1699
  dev: true
 
2127
  resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==}
2128
  dev: true
2129
 
2130
+ /fast-xml-parser/4.0.11:
2131
+ resolution: {integrity: sha512-4aUg3aNRR/WjQAcpceODG1C3x3lFANXRo8+1biqfieHmg9pyMt7qB4lQV/Ta6sJCTbA5vfD8fnA8S54JATiFUA==}
2132
+ hasBin: true
2133
+ dependencies:
2134
+ strnum: 1.0.5
2135
+ dev: false
2136
+ optional: true
2137
+
2138
  /fastq/1.13.0:
2139
  resolution: {integrity: sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==}
2140
  dependencies:
 
2291
  engines: {node: '>=10.17.0'}
2292
  dev: true
2293
 
2294
+ /ieee754/1.2.1:
2295
+ resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==}
2296
+ dev: false
2297
+
2298
  /ignore/5.2.0:
2299
  resolution: {integrity: sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==}
2300
  engines: {node: '>= 4'}
 
2324
  resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
2325
  dev: true
2326
 
2327
+ /ip/2.0.0:
2328
+ resolution: {integrity: sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==}
2329
+ dev: false
2330
+
2331
  /is-binary-path/2.1.0:
2332
  resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==}
2333
  engines: {node: '>=8'}
 
2446
  resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==}
2447
  dev: true
2448
 
2449
+ /lodash/4.17.21:
2450
+ resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==}
2451
+ dev: false
2452
+
2453
  /lru-cache/6.0.0:
2454
  resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==}
2455
  engines: {node: '>=10'}
 
2470
  sourcemap-codec: 1.4.8
2471
  dev: true
2472
 
2473
+ /marked/4.2.2:
2474
+ resolution: {integrity: sha512-JjBTFTAvuTgANXx82a5vzK9JLSMoV6V3LBVn4Uhdso6t7vXrGx7g1Cd2r6NYSsxrYbQGFCMqBDhFHyK5q2UvcQ==}
2475
+ engines: {node: '>= 12'}
2476
+ hasBin: true
2477
+ dev: false
2478
+
2479
  /mdn-data/2.0.28:
2480
  resolution: {integrity: sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==}
2481
  dev: true
2482
 
2483
+ /memory-pager/1.5.0:
2484
+ resolution: {integrity: sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==}
2485
+ dev: false
2486
+ optional: true
2487
+
2488
  /merge-stream/2.0.0:
2489
  resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==}
2490
  dev: true
 
2542
  minimist: 1.2.7
2543
  dev: true
2544
 
2545
+ /mongodb-connection-string-url/2.5.4:
2546
+ resolution: {integrity: sha512-SeAxuWs0ez3iI3vvmLk/j2y+zHwigTDKQhtdxTgt5ZCOQQS5+HW4g45/Xw5vzzbn7oQXCNQ24Z40AkJsizEy7w==}
2547
+ dependencies:
2548
+ '@types/whatwg-url': 8.2.2
2549
+ whatwg-url: 11.0.0
2550
+ dev: false
2551
+
2552
+ /mongodb/4.11.0:
2553
+ resolution: {integrity: sha512-9l9n4Nk2BYZzljW3vHah3Z0rfS5npKw6ktnkmFgTcnzaXH1DRm3pDl6VMHu84EVb1lzmSaJC4OzWZqTkB5i2wg==}
2554
+ engines: {node: '>=12.9.0'}
2555
+ dependencies:
2556
+ bson: 4.7.0
2557
+ denque: 2.1.0
2558
+ mongodb-connection-string-url: 2.5.4
2559
+ socks: 2.7.1
2560
+ optionalDependencies:
2561
+ '@aws-sdk/credential-providers': 3.204.0
2562
+ saslprep: 1.0.3
2563
+ transitivePeerDependencies:
2564
+ - aws-crt
2565
+ dev: false
2566
+
2567
  /mri/1.2.0:
2568
  resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==}
2569
  engines: {node: '>=4'}
 
2737
  /punycode/2.1.1:
2738
  resolution: {integrity: sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==}
2739
  engines: {node: '>=6'}
 
2740
 
2741
  /queue-microtask/1.2.3:
2742
  resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==}
 
2817
  rimraf: 2.7.1
2818
  dev: true
2819
 
2820
+ /saslprep/1.0.3:
2821
+ resolution: {integrity: sha512-/MY/PEMbk2SuY5sScONwhUDsV2p77Znkb/q3nSVstq/yQzYJOH/Azh29p9oJLsl3LnQwSvZDKagDGBsBwSooag==}
2822
+ engines: {node: '>=6'}
2823
+ requiresBuild: true
2824
+ dependencies:
2825
+ sparse-bitfield: 3.0.3
2826
+ dev: false
2827
+ optional: true
2828
+
2829
  /semver/7.3.8:
2830
  resolution: {integrity: sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==}
2831
  engines: {node: '>=10'}
 
2868
  engines: {node: '>=8'}
2869
  dev: true
2870
 
2871
+ /smart-buffer/4.2.0:
2872
+ resolution: {integrity: sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==}
2873
+ engines: {node: '>= 6.0.0', npm: '>= 3.0.0'}
2874
+ dev: false
2875
+
2876
+ /socks/2.7.1:
2877
+ resolution: {integrity: sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ==}
2878
+ engines: {node: '>= 10.13.0', npm: '>= 3.0.0'}
2879
+ dependencies:
2880
+ ip: 2.0.0
2881
+ smart-buffer: 4.2.0
2882
+ dev: false
2883
+
2884
  /sorcery/0.10.0:
2885
  resolution: {integrity: sha512-R5ocFmKZQFfSTstfOtHjJuAwbpGyf9qjQa1egyhvXSbM7emjrtLXtGdZsDJDABC85YBfVvrOiGWKSYXPKdvP1g==}
2886
  hasBin: true
 
2900
  resolution: {integrity: sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==}
2901
  dev: true
2902
 
2903
+ /sparse-bitfield/3.0.3:
2904
+ resolution: {integrity: sha512-kvzhi7vqKTfkh0PZU+2D2PIllw2ymqJKujUcyPMd9Y75Nv4nPbGJZXNhxsgdQab2BmlDct1YnfQCguEvHr7VsQ==}
2905
+ dependencies:
2906
+ memory-pager: 1.5.0
2907
+ dev: false
2908
+ optional: true
2909
+
2910
  /streamsearch/1.1.0:
2911
  resolution: {integrity: sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==}
2912
  engines: {node: '>=10.0.0'}
 
2936
  engines: {node: '>=8'}
2937
  dev: true
2938
 
2939
+ /strnum/1.0.5:
2940
+ resolution: {integrity: sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==}
2941
+ dev: false
2942
+ optional: true
2943
+
2944
  /supports-color/7.2.0:
2945
  resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==}
2946
  engines: {node: '>=8'}
 
3057
  globrex: 0.1.2
3058
  dev: true
3059
 
3060
+ /tinygesture/2.0.0:
3061
+ resolution: {integrity: sha512-Xhpo6tCvUOyVq7BmJh/WDi+9qFh5AtuUqbKoMG5vpG+PT6JLPGE9D5hl9kZlj1ZqsgHuGb1OrNAXoHh8qIDpjA==}
3062
+ dev: true
3063
+
3064
  /to-regex-range/5.0.1:
3065
  resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
3066
  engines: {node: '>=8.0'}
 
3073
  engines: {node: '>=6'}
3074
  dev: true
3075
 
3076
+ /tr46/3.0.0:
3077
+ resolution: {integrity: sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==}
3078
+ engines: {node: '>=12'}
3079
+ dependencies:
3080
+ punycode: 2.1.1
3081
+ dev: false
3082
+
3083
  /tslib/1.14.1:
3084
  resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==}
 
3085
 
3086
  /tslib/2.4.1:
3087
  resolution: {integrity: sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==}
 
3088
 
3089
  /tsutils/3.21.0_typescript@4.8.4:
3090
  resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==}
 
3171
  punycode: 2.1.1
3172
  dev: true
3173
 
3174
+ /uuid/8.3.2:
3175
+ resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==}
3176
+ hasBin: true
3177
+ dev: false
3178
+ optional: true
3179
+
3180
  /vite/3.2.2:
3181
  resolution: {integrity: sha512-pLrhatFFOWO9kS19bQ658CnRYzv0WLbsPih6R+iFeEEhDOuYgYCX2rztUViMz/uy/V8cLCJvLFeiOK7RJEzHcw==}
3182
  engines: {node: ^14.18.0 || >=16.0.0}
 
3207
  fsevents: 2.3.2
3208
  dev: true
3209
 
3210
+ /webidl-conversions/7.0.0:
3211
+ resolution: {integrity: sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==}
3212
+ engines: {node: '>=12'}
3213
+ dev: false
3214
+
3215
+ /whatwg-url/11.0.0:
3216
+ resolution: {integrity: sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==}
3217
+ engines: {node: '>=12'}
3218
+ dependencies:
3219
+ tr46: 3.0.0
3220
+ webidl-conversions: 7.0.0
3221
+ dev: false
3222
+
3223
  /which/2.0.2:
3224
  resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==}
3225
  engines: {node: '>= 8'}
src/lib/components/Carousel.svelte ADDED
@@ -0,0 +1,137 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <script lang="ts">
2
+ import { onDestroy, onMount } from 'svelte';
3
+
4
+ let carousel: HTMLDivElement;
5
+ let carouselContent: HTMLDivElement;
6
+ let carouselDots: HTMLDivElement;
7
+ let currentIndex = 0;
8
+ let dots = 0;
9
+ let trigger = 1;
10
+ let className = '';
11
+ export { className as class };
12
+
13
+ let destroyCb = () => {};
14
+
15
+ onDestroy(() => destroyCb());
16
+
17
+ onMount(async () => {
18
+ dots = carouselContent.children.length;
19
+
20
+ for (let i = 0; i < dots; i++) {
21
+ carouselContent.children.item(i)?.addEventListener('click', (item) => (currentIndex = i));
22
+ }
23
+
24
+ // So the dots have time to populate
25
+ setTimeout(() => trigger++);
26
+
27
+ window.addEventListener('keydown', (key) => {
28
+ switch (key.code) {
29
+ case 'ArrowRight':
30
+ currentIndex = (currentIndex + 1) % dots;
31
+ key.stopPropagation();
32
+ break;
33
+ case 'ArrowLeft':
34
+ currentIndex = (currentIndex + dots - 1) % dots;
35
+ key.stopPropagation();
36
+ break;
37
+ }
38
+ });
39
+
40
+ const TinyGesture = (await import('tinygesture')).default;
41
+
42
+ const gesture = new TinyGesture(carousel);
43
+ gesture.on('swipeleft', () => (currentIndex = (currentIndex + 1) % dots));
44
+ gesture.on('swiperight', () => (currentIndex = (currentIndex + dots - 1) % dots));
45
+
46
+ destroyCb = () => {
47
+ gesture.off('swiperight');
48
+ gesture.off('swipeleft');
49
+ gesture.destroy();
50
+ };
51
+ });
52
+
53
+ $: if (carouselContent && dots && trigger) {
54
+ if (window.innerWidth >= 640) {
55
+ carouselContent.style.marginLeft = `${25 - currentIndex * 50}%`;
56
+ } else {
57
+ carouselContent.style.marginLeft = `${5 - currentIndex * 90}%`;
58
+ }
59
+
60
+ for (let i = 0; i < dots; i++) {
61
+ if (i === currentIndex) {
62
+ carouselDots.children.item(i)?.classList.add('carousel-dot-active');
63
+ carouselContent.children.item(i)?.classList.add('carousel-item-active');
64
+ } else {
65
+ carouselDots.children.item(i)?.classList.remove('carousel-dot-active');
66
+ carouselContent.children.item(i)?.classList.remove('carousel-item-active');
67
+ }
68
+ }
69
+ }
70
+ </script>
71
+
72
+ <div class="flex flex-col overflow-x-hidden {className}" {...$$restProps} bind:this={carousel}>
73
+ <div
74
+ class="flex flex-row w-full carousel-content"
75
+ style="height: calc(100% - 3rem)"
76
+ bind:this={carouselContent}
77
+ >
78
+ <slot />
79
+ </div>
80
+
81
+ <div
82
+ style="height: 1rem; margin-top: 2rem"
83
+ class="flex justify-center carousel-dots"
84
+ bind:this={carouselDots}
85
+ >
86
+ {#each Array(dots) as dot, i}
87
+ <button
88
+ style="width: 1rem; height: 1rem"
89
+ class="rounded-full mx-1 bg-sunray"
90
+ on:click={() => (currentIndex = i)}
91
+ />
92
+ {/each}
93
+ </div>
94
+ </div>
95
+
96
+ <style>
97
+ .carousel-content {
98
+ margin-left: -25%;
99
+ transition-property: margin-left;
100
+ transition-duration: 400ms;
101
+ }
102
+
103
+ :global(.carousel-content > *) {
104
+ width: 50%;
105
+ min-width: 50%;
106
+ max-height: 100%;
107
+ transition-property: transform, opacity;
108
+ transition-duration: 400ms;
109
+ }
110
+
111
+ @media (max-width: 639.9px) {
112
+ :global(.carousel-content > *) {
113
+ width: 90%;
114
+ min-width: 90%;
115
+ max-height: 100%;
116
+ transition-property: transform, opacity;
117
+ transition-duration: 400ms;
118
+ }
119
+ }
120
+
121
+ :global(.carousel-content > :not(.carousel-item-active)) {
122
+ transform: scale(0.7);
123
+ opacity: 0.8;
124
+ cursor: pointer;
125
+ }
126
+
127
+ .carousel-dots > * {
128
+ transition-property: transform, opacity;
129
+ transition-duration: 400ms;
130
+ }
131
+
132
+ .carousel-dots > :not(.carousel-dot-active) {
133
+ transform: scale(0.7);
134
+ opacity: 0.8;
135
+ cursor: pointer;
136
+ }
137
+ </style>
src/lib/components/Container.svelte ADDED
@@ -0,0 +1,11 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <script lang="ts">
2
+ export let noPadding = false;
3
+ let className = '';
4
+ export { className as class };
5
+
6
+ $: classes = noPadding ? className : className + ' pa-3 ';
7
+ </script>
8
+
9
+ <div class="max-w-6xl w-full mx-auto overflow-hidden box-border {classes}" {...$$restProps}>
10
+ <slot />
11
+ </div>
src/lib/components/Picture.svelte ADDED
@@ -0,0 +1,19 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <script lang="ts">
2
+ import type { Picture } from '$lib/types/Picture';
3
+
4
+ export let picture: Picture | undefined;
5
+ export let minStorage = 0;
6
+ </script>
7
+
8
+ {#if picture}
9
+ <img
10
+ alt={picture.name}
11
+ srcset={picture.storage
12
+ .slice(minStorage)
13
+ .map((format) => `/photos/raw/${format._id} ${format.width}w`)
14
+ .join(', ')}
15
+ {...$$restProps}
16
+ on:click
17
+ on:load
18
+ />
19
+ {/if}
src/lib/server/db/index.ts ADDED
@@ -0,0 +1,21 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import { MONGODB_URL } from '$env/static/private';
2
+ import { MongoClient } from 'mongodb';
3
+ import { createPageCollection } from './page';
4
+ // import { createPictureCollections } from './picture';
5
+ // import { createProductCollection } from './product';
6
+ // import { createUserCollection } from './user';
7
+
8
+ const client = new MongoClient(MONGODB_URL, {
9
+ directConnection: true
10
+ });
11
+
12
+ export const connectPromise = client.connect().catch(console.error);
13
+
14
+ const db = client.db('bergere');
15
+
16
+ const pages = createPageCollection(db, client);
17
+ // const users = createUserCollection(db, client);
18
+ // const Products = createProductCollection(db);
19
+ // const { Pictures, PicturesFs } = createPictureCollections(db, client);
20
+
21
+ export { client, db, pages /* users, Pictures, PicturesFs, Products */ };
src/lib/server/db/page.ts ADDED
@@ -0,0 +1,169 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import type {
2
+ ContactPage,
3
+ CreationsPage,
4
+ EshopPage,
5
+ FabricsPage,
6
+ HomePage,
7
+ Page
8
+ } from '$lib/types/Page';
9
+ import _ from 'lodash';
10
+ import type { Collection, Db, MongoClient } from 'mongodb';
11
+
12
+ export const defaultPages = {
13
+ '/': {
14
+ _id: '/',
15
+ name: "Bergère Enchantée - Tapisserie d'ameublement",
16
+ text: {
17
+ presentation: `C'est dans son univers enchanteur que Daphné le Couls, tapissière d'ameublement qualifiée depuis 2019, vous propose la réfection de vos assises dans son atelier situé en Finistère, à logonna Daoulas (entre l'axe Brest Quimper).
18
+
19
+ Daphné se déplace à votre domicile afin de déterminer avec vous vos besoins, qu'il s'agisse d'une réfection de siège complète, ou bien de la création de coussins décoratifs.
20
+
21
+ À l'atelier, nous vous proposons la réfection traditionnelle ou moderne de vos assises (crin ou mousse) selon vos besoins.
22
+
23
+ Nous vous proposons un service en ligne afin de concevoir à distance des coussins, et de vous les livrer n'importe où en France.
24
+
25
+ Nous proposons à la vente également des assises déjà refectionnées dans la partie E-shop.
26
+
27
+ Des tissus rigoureusement sélectionnés vous seront proposés pour habiller vos sièges/coussins. Mais vous êtes libre de commander du tissus pour vos projets personnels également. n'hésitez pas à regarder notre onglet tissus.
28
+
29
+ Daphné ne travaille que sur rendez vous, alors n'hésitez pas à la contacter, par téléphone ou par mail pour toute demande.`,
30
+ 'eshop-description': "description de l'eshop",
31
+ description: `C'est dans son univers enchanteur que Daphné le Couls, tapissière d'ameublement qualifiée depuis 2019, vous propose la réfection de vos assises dans son atelier situé en Finistère, à logonna Daoulas (entre l'axe Brest Quimper).
32
+
33
+ Daphné se déplace à votre domicile afin de déterminer avec vous vos besoins, qu'il s'agisse d'une réfection de siège complète, ou bien de la création de coussins décoratifs.`
34
+ },
35
+ pictures: {
36
+ discover: null,
37
+ move: null,
38
+ 'e-shop': null,
39
+ 'realisation-1': null,
40
+ 'realisation-2': null,
41
+ 'realisation-3': null,
42
+ 'realisation-4': null,
43
+ 'realisation-5': null,
44
+ 'realisation-6': null,
45
+ 'realisation-7': null,
46
+ 'realisation-8': null,
47
+ 'realisation-9': null,
48
+ 'realisation-10': null
49
+ }
50
+ } as HomePage,
51
+ '/contact': {
52
+ _id: '/contact',
53
+ name: 'Contact',
54
+ text: {
55
+ description: 'Je me déplace à votre domicile dans le Finistère sur rendez-vous.'
56
+ },
57
+ pictures: {
58
+ 'photo-garde': null
59
+ }
60
+ } as ContactPage,
61
+ '/atelier': {
62
+ _id: '/atelier',
63
+ name: "L'Atelier",
64
+ text: {
65
+ 'texte-1': `C'est dans son univers enchanteur que Daphné le Couls, tapissière d'ameublement qualifiée depuis 2019, vous propose la réfection de vos assises dans son atelier situé en Finistère, à logonna Daoulas (entre l'axe Brest Quimper).
66
+
67
+ Daphné se déplace à votre domicile afin de déterminer avec vous vos besoins, qu'il s'agisse d'une réfection de siège complète, ou bien de la création de coussins décoratifs.
68
+
69
+ À l'atelier, nous vous proposons la réfection traditionnelle ou moderne de vos assises (crin ou mousse) selon vos besoins.`,
70
+ 'texte-2': `Nous vous proposons un service en ligne afin de concevoir à distance des coussins, et de vous les livrer n'importe où en France.
71
+
72
+ Nous proposons à la vente également des assises déjà refectionnées dans la partie E-shop.`,
73
+ description:
74
+ "À l'atelier, nous vous proposons la réfection traditionnelle ou moderne de vos assises (crin ou mousse) selon vos besoins."
75
+ },
76
+ pictures: {
77
+ 'photo-1': null,
78
+ 'photo-2': null,
79
+ 'photo-3': null
80
+ }
81
+ },
82
+ '/realisations': {
83
+ _id: '/realisations',
84
+ name: 'Réalisations',
85
+ text: {
86
+ description:
87
+ "Découvrez les sièges, fauteuils et coussins réalisés par Daphné, tapissière d'ameublement de la Bergère Enchantée",
88
+ 'realisation-1': '',
89
+ 'realisation-2': '',
90
+ 'realisation-3': '',
91
+ 'realisation-4': '',
92
+ 'realisation-5': '',
93
+ 'realisation-6': '',
94
+ 'realisation-7': '',
95
+ 'realisation-8': '',
96
+ 'realisation-9': '',
97
+ 'realisation-10': ''
98
+ },
99
+ pictures: {
100
+ 'realisation-1': null,
101
+ 'realisation-2': null,
102
+ 'realisation-3': null,
103
+ 'realisation-4': null,
104
+ 'realisation-5': null,
105
+ 'realisation-6': null,
106
+ 'realisation-7': null,
107
+ 'realisation-8': null,
108
+ 'realisation-9': null,
109
+ 'realisation-10': null
110
+ }
111
+ } as CreationsPage,
112
+ '/tissus-et-finitions': {
113
+ _id: '/tissus-et-finitions',
114
+ name: 'Tissus et finitions',
115
+ pictures: {
116
+ 'photo-1': null,
117
+ 'photo-2': null,
118
+ 'photo-3': null,
119
+ 'photo-4': null,
120
+ 'photo-5': null,
121
+ 'photo-6': null,
122
+ 'photo-7': null,
123
+ 'photo-8': null,
124
+ 'photo-9': null,
125
+ 'photo-10': null,
126
+ 'photo-11': null,
127
+ 'photo-12': null,
128
+ 'photo-13': null,
129
+ 'photo-14': null,
130
+ 'photo-15': null
131
+ },
132
+ text: {
133
+ description:
134
+ "Découvrez les finitions et tissus utilisés par Daphné, tapissière d'ameublement de la Bergère Enchantée"
135
+ }
136
+ } as FabricsPage,
137
+ '/vente': {
138
+ _id: '/vente',
139
+ name: 'E-shop',
140
+ text: {
141
+ description:
142
+ 'Liste des fauteuils, chaises, coussins... réalisés par Daphné et disponibles à la vente'
143
+ },
144
+ pictures: {
145
+ background: null
146
+ }
147
+ } as EshopPage
148
+ };
149
+
150
+ export let pages = defaultPages;
151
+
152
+ async function refreshPages(coll: Collection<Page>) {
153
+ const dbPages = _.keyBy(await coll.find({}).toArray(), '_id');
154
+ pages = _.merge({}, defaultPages, dbPages);
155
+ }
156
+
157
+ export function createPageCollection(db: Db, client: MongoClient): Collection<Page> {
158
+ const coll = db.collection<Page>('pages');
159
+
160
+ client.on('open', () => {
161
+ refreshPages(coll).catch(console.error);
162
+
163
+ coll.watch().on('change', () => {
164
+ refreshPages(coll).catch(console.error);
165
+ });
166
+ });
167
+
168
+ return coll;
169
+ }
src/lib/types/Page.ts ADDED
@@ -0,0 +1,125 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import type { Timestamps } from './Timestamps';
2
+
3
+ export interface Page extends Timestamps {
4
+ _id: string;
5
+ name: string;
6
+ text: Record<string, string>;
7
+ pictures: Record<string, string | null>;
8
+ }
9
+
10
+ export interface HomePage extends Page {
11
+ _id: '/';
12
+ name: "Bergère Enchantée - Tapisserie d'ameublement";
13
+ text: {
14
+ presentation: string;
15
+ 'eshop-description': string;
16
+ description: string;
17
+ };
18
+ pictures: {
19
+ discover: string | null;
20
+ move: string | null;
21
+ 'e-shop': string | null;
22
+ 'realisation-1': string | null;
23
+ 'realisation-2': string | null;
24
+ 'realisation-3': string | null;
25
+ 'realisation-4': string | null;
26
+ 'realisation-5': string | null;
27
+ 'realisation-6': string | null;
28
+ 'realisation-7': string | null;
29
+ 'realisation-8': string | null;
30
+ 'realisation-9': string | null;
31
+ 'realisation-10': string | null;
32
+ };
33
+ }
34
+
35
+ export interface CreationsPage extends Page {
36
+ _id: '/realisations';
37
+ name: 'Réalisations';
38
+ text: {
39
+ description: string;
40
+ 'realisation-1': string;
41
+ 'realisation-2': string;
42
+ 'realisation-3': string;
43
+ 'realisation-4': string;
44
+ 'realisation-5': string;
45
+ 'realisation-6': string;
46
+ 'realisation-7': string;
47
+ 'realisation-8': string;
48
+ 'realisation-9': string;
49
+ 'realisation-10': string;
50
+ };
51
+ pictures: {
52
+ 'realisation-1': string | null;
53
+ 'realisation-2': string | null;
54
+ 'realisation-3': string | null;
55
+ 'realisation-4': string | null;
56
+ 'realisation-5': string | null;
57
+ 'realisation-6': string | null;
58
+ 'realisation-7': string | null;
59
+ 'realisation-8': string | null;
60
+ 'realisation-9': string | null;
61
+ 'realisation-10': string | null;
62
+ };
63
+ }
64
+
65
+ export interface FabricsPage {
66
+ _id: '/tissus-et-finitions';
67
+ name: 'Tissus et finitions';
68
+ text: {
69
+ description: string;
70
+ };
71
+ pictures: {
72
+ 'photo-1': string | null;
73
+ 'photo-2': string | null;
74
+ 'photo-3': string | null;
75
+ 'photo-4': string | null;
76
+ 'photo-5': string | null;
77
+ 'photo-6': string | null;
78
+ 'photo-7': string | null;
79
+ 'photo-8': string | null;
80
+ 'photo-9': string | null;
81
+ 'photo-10': string | null;
82
+ 'photo-11': string | null;
83
+ 'photo-12': string | null;
84
+ 'photo-13': string | null;
85
+ 'photo-14': string | null;
86
+ 'photo-15': string | null;
87
+ };
88
+ }
89
+
90
+ export interface ContactPage extends Page {
91
+ _id: '/contact';
92
+ name: 'Contact';
93
+ text: {
94
+ description: string;
95
+ };
96
+ pictures: {
97
+ 'photo-garde': string | null;
98
+ };
99
+ }
100
+
101
+ export interface WorkshopPage extends Page {
102
+ _id: '/atelier';
103
+ name: "L'Atelier";
104
+ text: {
105
+ description: string;
106
+ 'texte-1': string;
107
+ 'texte-2': string;
108
+ };
109
+ pictures: {
110
+ 'photo-1': string | null;
111
+ 'photo-2': string | null;
112
+ 'photo-3': string | null;
113
+ };
114
+ }
115
+
116
+ export interface EshopPage extends Page {
117
+ _id: '/vente';
118
+ name: 'E-shop';
119
+ text: {
120
+ description: string;
121
+ };
122
+ pictures: {
123
+ background: string | null;
124
+ };
125
+ }
src/lib/types/Picture.ts ADDED
@@ -0,0 +1,21 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import type { Timestamps } from './Timestamps';
2
+
3
+ export interface Picture extends Timestamps {
4
+ _id: string;
5
+ productId?: string;
6
+ name: string;
7
+
8
+ storage: Array<{
9
+ _id: string;
10
+ width: number;
11
+ height: number;
12
+ size: number;
13
+ }>;
14
+ }
15
+
16
+ export interface PictureFs extends Timestamps {
17
+ _id: string;
18
+ data: Buffer;
19
+ size: number;
20
+ picture: string;
21
+ }
src/lib/types/Timestamps.ts ADDED
@@ -0,0 +1,4 @@
 
 
 
 
 
1
+ export interface Timestamps {
2
+ createdAt: Date;
3
+ updatedAt: Date;
4
+ }
src/routes/+layout.server.ts ADDED
@@ -0,0 +1,20 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import type { LayoutServerLoad } from './$types';
2
+ import '$lib/server/db';
3
+ import { pages } from '$lib/server/db/page';
4
+ import type { Picture } from '$lib/types/Picture';
5
+
6
+ export const load: LayoutServerLoad = async (input) => {
7
+ const pageId = input.url.pathname;
8
+
9
+ if (pageId in pages) {
10
+ return {
11
+ pageData: pages[pageId as keyof typeof pages],
12
+ pictures: [] as Picture[]
13
+ };
14
+ }
15
+
16
+ return {
17
+ pageData: null,
18
+ pictures: [] as Picture[]
19
+ };
20
+ };
src/routes/+page.svelte CHANGED
@@ -1,2 +1,115 @@
1
- <h1>Welcome to SvelteKit</h1>
2
- <p>Visit <a href="https://kit.svelte.dev">kit.svelte.dev</a> to read the documentation</p>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <script lang="ts">
2
+ import Carousel from '$lib/components/Carousel.svelte';
3
+ import Container from '$lib/components/Container.svelte';
4
+ import Picture from '$lib/components/Picture.svelte';
5
+ import type { HomePage } from '$lib/types/Page';
6
+ import { marked } from 'marked';
7
+ import type { PageData } from './$types';
8
+
9
+ export let data: PageData;
10
+
11
+ const pageData = data.pageData as HomePage;
12
+ const pictures = data.pictures;
13
+
14
+ type PictureKey = keyof typeof pageData.pictures;
15
+
16
+ const showcasePics = Object.keys(pageData.pictures)
17
+ .filter((key) => key.startsWith('realisation-') && pageData.pictures[key as PictureKey])
18
+ .map((key) => pictures.find((pic) => pic._id === pageData.pictures[key as PictureKey]))
19
+ .filter(Boolean);
20
+ </script>
21
+
22
+ <Container>
23
+ <section class="h-xl relative mt-12">
24
+ <img
25
+ src="/triangles.svg"
26
+ alt="Triangles"
27
+ class="pointer-events-none select-none absolute h-5/6"
28
+ style="left: 38%; top: 50%; transform: translate(-50%, -50%)"
29
+ />
30
+ <Picture
31
+ picture={pictures.find((p) => p._id === pageData.pictures.discover)}
32
+ sizes="(max-width: 1200px) 50vw, 600px"
33
+ class="absolute top-0 bottom-0 rounded-3xl right-0 w-full sm:w-3/6 h-full object-cover"
34
+ />
35
+ <h2
36
+ class="drop-white absolute text-oxford text-center sm:text-left text-7xl"
37
+ style="left: 0; top: 50%; transform: translate(0, -50%)"
38
+ >
39
+ Découvrez <br class="hidden sm:inline" /> nos fauteuils
40
+ </h2>
41
+ <a
42
+ href="/realisations"
43
+ class="btn absolute"
44
+ style="left: 25%; top: 75%; transform: translate(-50%, -50%)">cliquez ici</a
45
+ >
46
+ </section>
47
+
48
+ <section class="h-sm mt-16 flex mb-16">
49
+ <div class="grow basis-0 h-full">
50
+ <div class="pr-12 h-full">
51
+ <div class="w-full h-full relative">
52
+ <div
53
+ class="rounded-3xl w-full h-full bg-sunray absolute left-4 top-4"
54
+ style="z-index: -1"
55
+ />
56
+ <Picture
57
+ picture={pictures.find((p) => p._id === pageData.pictures.move)}
58
+ sizes="(max-width: 1024px) 50vw, 512px"
59
+ class="rounded-3xl w-full h-full object-cover"
60
+ />
61
+ </div>
62
+ </div>
63
+ </div>
64
+ <div class="grow basis-0 flex flex-col relative">
65
+ <h2 class="text-oxford text-4xl mt-6">
66
+ Je me déplace dans le <span class="text-sunray">Finistère</span> sur rendez-vous.
67
+ </h2>
68
+ <a
69
+ href="/contact"
70
+ class="text-white bg-oxford px-4 py-2 rounded-3xl font-bold absolute bottom-0 right-0"
71
+ >en savoir plus</a
72
+ >
73
+ </div>
74
+ </section>
75
+
76
+ <section style="text-shadow: 0px 4px 4px rgba(0, 0, 0, 0.25);">
77
+ {@html marked(pageData.text['presentation'])}
78
+ </section>
79
+ </Container>
80
+
81
+ <section class="bg-oxford my-12 py-12 w-full text-center flex flex-col items-center">
82
+ <h2 class="text-4xl text-white">Mes <span class="text-sunray">réalisations</span></h2>
83
+ <a href="/realisations" class="text-white bg-sunray px-4 py-2 rounded-3xl font-bold mt-4"
84
+ >voir plus</a
85
+ >
86
+ <Carousel class="w-full mt-12 h-xl sm:h-2xl">
87
+ {#each showcasePics as pic}
88
+ <div class="w-full h-full flex items-center justify-around">
89
+ <Picture
90
+ picture={pic}
91
+ class="rounded-3xl object-contain"
92
+ style="max-width: 100%; max-height: 100%"
93
+ />
94
+ </div>
95
+ {/each}
96
+ </Carousel>
97
+ </section>
98
+
99
+ <Container>
100
+ <section class="h-xl rounded-3xl bg-oxford overflow-hidden flex mb-12">
101
+ <Picture
102
+ class="w-2/6 h-full object-cover"
103
+ picture={pictures.find((p) => p._id === pageData.pictures['e-shop'])}
104
+ />
105
+ <div class="w-4/6 h-full px-6 py-12 text-white flex flex-col box-border">
106
+ <h2 class="text-4xl mb-10">
107
+ Notre <span class="text-sunray">e-shop</span> n'attend plus que vous
108
+ </h2>
109
+ {@html marked(pageData.text['eshop-description'])}
110
+ <div class="mt-auto text-center">
111
+ <a href="/vente" class="text-white bg-sunray px-4 py-2 rounded-3xl font-bold">e-shop</a>
112
+ </div>
113
+ </div>
114
+ </section>
115
+ </Container>
src/routes/atelier/+page.svelte ADDED
@@ -0,0 +1,86 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <script lang="ts">
2
+ import Container from '$lib/components/Container.svelte';
3
+ import type { Picture } from '$lib/types/Picture';
4
+ import PictureComponent from '$lib/components/Picture.svelte';
5
+ import { marked } from 'marked';
6
+ import type { PageData } from './$types';
7
+ import type { WorkshopPage } from '$lib/types/Page';
8
+
9
+ export let data: PageData;
10
+
11
+ const pageData = data.pageData as WorkshopPage;
12
+ const pictures: Picture[] = data.pictures;
13
+ </script>
14
+
15
+ <Container>
16
+ <section class="relative h-xl mt-12 flex">
17
+ <img
18
+ src="/triangles.svg"
19
+ alt="Triangles"
20
+ class="pointer-events-none select-none absolute h-5/6"
21
+ style="left: 38%; top: 50%; transform: translate(-50%, -50%); z-index: -1"
22
+ />
23
+ <div class="w-3/6 h-full flex flex-col justify-evenly">
24
+ <h2 class="text-oxford text-7xl" style="mix-blend-mode: color-burn;">L'atelier</h2>
25
+ <ul class="text-oxford">
26
+ <li class="flex items-center">
27
+ <div class="i-il-pin inline-block mr-2" />
28
+ <div class="inline-block">39 route de l'Argoat, <br />29460 Logonna Daoulas</div>
29
+ </li>
30
+ <li class="flex items-center mt-1">
31
+ <div class="i-ant-design-inbox-outlined inline-block mr-2" />
32
+ (dépôt et retrait uniquement)
33
+ </li>
34
+ </ul>
35
+ </div>
36
+ <PictureComponent
37
+ picture={pictures.find((p) => p._id === pageData.pictures['photo-1'])}
38
+ sizes="(max-width: 1200px) 50vw, 600px"
39
+ grow
40
+ basis-0
41
+ class="rounded-3xl h-full object-cover w-3/6"
42
+ />
43
+ </section>
44
+
45
+ <section class="md:min-h-[24rem] md:max-h-[40rem] mt-16 flex flex-wrap md:mb-16">
46
+ <div class="w-full md:w-3/6 h-sm md:h-auto md:max-h-[40rem]">
47
+ <div class="md:pr-12 h-full">
48
+ <div class="w-full h-full relative">
49
+ <div
50
+ class="rounded-3xl w-full h-full bg-sunray absolute left-4 top-4"
51
+ style="z-index: -1"
52
+ />
53
+ <PictureComponent
54
+ picture={pictures.find((p) => p._id === pageData.pictures['photo-2'])}
55
+ sizes="(max-width: 1024px) 50vw, 512px"
56
+ class="rounded-3xl w-full h-full object-cover"
57
+ />
58
+ </div>
59
+ </div>
60
+ </div>
61
+ <div class="w-full md:w-3/6 flex flex-col relative">
62
+ <h2 class="text-oxford text-4xl mt-16 md:mt-6 lg:mt-12">
63
+ L'atelier, mon endroit de <span class="text-sunray">création</span>
64
+ </h2>
65
+ <div class="grow flex flex-col justify-center marked">
66
+ {@html marked(pageData.text['texte-1'])}
67
+ </div>
68
+ </div>
69
+ </section>
70
+ </Container>
71
+
72
+ <section class="my-12 w-full text-center flex flex-col items-center">
73
+ <h2 class="text-4xl text-oxford mb-12"><span class="text-sunray">Mon</span> atelier</h2>
74
+ <PictureComponent
75
+ picture={pictures.find((p) => p._id === pageData.pictures['photo-3'])}
76
+ class="h-lg w-full object-cover"
77
+ />
78
+ </section>
79
+
80
+ <Container class="marked">
81
+ {@html marked(pageData.text['texte-2'])}
82
+
83
+ <div class="my-12 mb-20 text-center">
84
+ <a href="/vente" class="btn-sunray">e-shop</a>
85
+ </div>
86
+ </Container>