mirror of
https://github.com/LukeHagar/website.git
synced 2025-12-10 12:57:49 +00:00
update table of contents
This commit is contained in:
@@ -45,8 +45,7 @@
|
|||||||
"@sveltejs/enhanced-img": "^0.1.9",
|
"@sveltejs/enhanced-img": "^0.1.9",
|
||||||
"@sveltejs/kit": "^2.16.1",
|
"@sveltejs/kit": "^2.16.1",
|
||||||
"@sveltejs/vite-plugin-svelte": "^3.1.2",
|
"@sveltejs/vite-plugin-svelte": "^3.1.2",
|
||||||
"@tailwindcss/postcss": "^4.0.9",
|
"@tailwindcss/postcss": "4.0.0-alpha.17",
|
||||||
"@tailwindcss/typography": "^0.5.16",
|
|
||||||
"@types/compression": "^1.7.5",
|
"@types/compression": "^1.7.5",
|
||||||
"@types/glob": "^8.1.0",
|
"@types/glob": "^8.1.0",
|
||||||
"@types/markdown-it": "^13.0.9",
|
"@types/markdown-it": "^13.0.9",
|
||||||
@@ -87,7 +86,7 @@
|
|||||||
"svelte-markdown": "^0.4.1",
|
"svelte-markdown": "^0.4.1",
|
||||||
"svgtofont": "^4.2.3",
|
"svgtofont": "^4.2.3",
|
||||||
"tailwind-merge": "^2.6.0",
|
"tailwind-merge": "^2.6.0",
|
||||||
"tailwindcss": "^4.0.9",
|
"tailwindcss": "4.0.0-alpha.17",
|
||||||
"tslib": "^2.8.1",
|
"tslib": "^2.8.1",
|
||||||
"typescript": "^5.7.3",
|
"typescript": "^5.7.3",
|
||||||
"typescript-eslint": "^8.21.0",
|
"typescript-eslint": "^8.21.0",
|
||||||
|
|||||||
225
pnpm-lock.yaml
generated
225
pnpm-lock.yaml
generated
@@ -64,11 +64,8 @@ importers:
|
|||||||
specifier: ^3.1.2
|
specifier: ^3.1.2
|
||||||
version: 3.1.2(svelte@4.2.19)(vite@5.4.14(@types/node@22.10.10)(lightningcss@1.29.1)(sass@1.83.4))
|
version: 3.1.2(svelte@4.2.19)(vite@5.4.14(@types/node@22.10.10)(lightningcss@1.29.1)(sass@1.83.4))
|
||||||
'@tailwindcss/postcss':
|
'@tailwindcss/postcss':
|
||||||
specifier: ^4.0.9
|
specifier: 4.0.0-alpha.17
|
||||||
version: 4.0.9
|
version: 4.0.0-alpha.17(postcss@8.5.1)
|
||||||
'@tailwindcss/typography':
|
|
||||||
specifier: ^0.5.16
|
|
||||||
version: 0.5.16(tailwindcss@4.0.9)
|
|
||||||
'@types/compression':
|
'@types/compression':
|
||||||
specifier: ^1.7.5
|
specifier: ^1.7.5
|
||||||
version: 1.7.5
|
version: 1.7.5
|
||||||
@@ -187,8 +184,8 @@ importers:
|
|||||||
specifier: ^2.6.0
|
specifier: ^2.6.0
|
||||||
version: 2.6.0
|
version: 2.6.0
|
||||||
tailwindcss:
|
tailwindcss:
|
||||||
specifier: ^4.0.9
|
specifier: 4.0.0-alpha.17
|
||||||
version: 4.0.9
|
version: 4.0.0-alpha.17
|
||||||
tslib:
|
tslib:
|
||||||
specifier: ^2.8.1
|
specifier: ^2.8.1
|
||||||
version: 2.8.1
|
version: 2.8.1
|
||||||
@@ -216,10 +213,6 @@ importers:
|
|||||||
|
|
||||||
packages:
|
packages:
|
||||||
|
|
||||||
'@alloc/quick-lru@5.2.0':
|
|
||||||
resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==}
|
|
||||||
engines: {node: '>=10'}
|
|
||||||
|
|
||||||
'@ampproject/remapping@2.3.0':
|
'@ampproject/remapping@2.3.0':
|
||||||
resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==}
|
resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==}
|
||||||
engines: {node: '>=6.0.0'}
|
engines: {node: '>=6.0.0'}
|
||||||
@@ -1671,86 +1664,72 @@ packages:
|
|||||||
'@swc/helpers@0.5.15':
|
'@swc/helpers@0.5.15':
|
||||||
resolution: {integrity: sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==}
|
resolution: {integrity: sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==}
|
||||||
|
|
||||||
'@tailwindcss/node@4.0.9':
|
'@tailwindcss/oxide-android-arm64@4.0.0-alpha.17':
|
||||||
resolution: {integrity: sha512-tOJvdI7XfJbARYhxX+0RArAhmuDcczTC46DGCEziqxzzbIaPnfYaIyRT31n4u8lROrsO7Q6u/K9bmQHL2uL1bQ==}
|
resolution: {integrity: sha512-IBOd4/iQW8tq8YJJgoEECy+wVPnJcAx/kwS45uKTbq5GVK9l8siBEnTiJ7VPnuoo2vQfLlJjshA7ar8nMX589w==}
|
||||||
|
|
||||||
'@tailwindcss/oxide-android-arm64@4.0.9':
|
|
||||||
resolution: {integrity: sha512-YBgy6+2flE/8dbtrdotVInhMVIxnHJPbAwa7U1gX4l2ThUIaPUp18LjB9wEH8wAGMBZUb//SzLtdXXNBHPUl6Q==}
|
|
||||||
engines: {node: '>= 10'}
|
engines: {node: '>= 10'}
|
||||||
cpu: [arm64]
|
cpu: [arm64]
|
||||||
os: [android]
|
os: [android]
|
||||||
|
|
||||||
'@tailwindcss/oxide-darwin-arm64@4.0.9':
|
'@tailwindcss/oxide-darwin-arm64@4.0.0-alpha.17':
|
||||||
resolution: {integrity: sha512-pWdl4J2dIHXALgy2jVkwKBmtEb73kqIfMpYmcgESr7oPQ+lbcQ4+tlPeVXaSAmang+vglAfFpXQCOvs/aGSqlw==}
|
resolution: {integrity: sha512-JiV0oe6QmeL/6dDQkk12H+sa/BmH4p7KbaW2/PPOTfFVZjIbM9Qj3drsFwWRuwPTI9mSpJQFxWtdbMYarLVK1w==}
|
||||||
engines: {node: '>= 10'}
|
engines: {node: '>= 10'}
|
||||||
cpu: [arm64]
|
cpu: [arm64]
|
||||||
os: [darwin]
|
os: [darwin]
|
||||||
|
|
||||||
'@tailwindcss/oxide-darwin-x64@4.0.9':
|
'@tailwindcss/oxide-darwin-x64@4.0.0-alpha.17':
|
||||||
resolution: {integrity: sha512-4Dq3lKp0/C7vrRSkNPtBGVebEyWt9QPPlQctxJ0H3MDyiQYvzVYf8jKow7h5QkWNe8hbatEqljMj/Y0M+ERYJg==}
|
resolution: {integrity: sha512-39zvOSxFfiVcQQp1/4dD5kMH6bwKagRO2PLLmlH6EAM7LuIyVsKJwFK5Z+ZYTLoG3hUGUxvCPOjgbqMYvRLJ3w==}
|
||||||
engines: {node: '>= 10'}
|
engines: {node: '>= 10'}
|
||||||
cpu: [x64]
|
cpu: [x64]
|
||||||
os: [darwin]
|
os: [darwin]
|
||||||
|
|
||||||
'@tailwindcss/oxide-freebsd-x64@4.0.9':
|
'@tailwindcss/oxide-freebsd-x64@4.0.0-alpha.17':
|
||||||
resolution: {integrity: sha512-k7U1RwRODta8x0uealtVt3RoWAWqA+D5FAOsvVGpYoI6ObgmnzqWW6pnVwz70tL8UZ/QXjeMyiICXyjzB6OGtQ==}
|
resolution: {integrity: sha512-KplmR3Md+B5W0ocH4N3ArLowABlKHKqV6mImURrGriqDhwfVeJyarugx+Uo811D2qSYTqLkQXW7u0esIxBM69w==}
|
||||||
engines: {node: '>= 10'}
|
engines: {node: '>= 10'}
|
||||||
cpu: [x64]
|
cpu: [x64]
|
||||||
os: [freebsd]
|
os: [freebsd]
|
||||||
|
|
||||||
'@tailwindcss/oxide-linux-arm-gnueabihf@4.0.9':
|
'@tailwindcss/oxide-linux-arm-gnueabihf@4.0.0-alpha.17':
|
||||||
resolution: {integrity: sha512-NDDjVweHz2zo4j+oS8y3KwKL5wGCZoXGA9ruJM982uVJLdsF8/1AeKvUwKRlMBpxHt1EdWJSAh8a0Mfhl28GlQ==}
|
resolution: {integrity: sha512-2GZ91U2fkqY9ohaPiQr1UJt0yAaZq7/5tFXvtRUY72PDYfz1PlnvxyDlQ16roepxi+Si52svLmzm7E9g4kVz/g==}
|
||||||
engines: {node: '>= 10'}
|
engines: {node: '>= 10'}
|
||||||
cpu: [arm]
|
cpu: [arm]
|
||||||
os: [linux]
|
os: [linux]
|
||||||
|
|
||||||
'@tailwindcss/oxide-linux-arm64-gnu@4.0.9':
|
'@tailwindcss/oxide-linux-arm64-gnu@4.0.0-alpha.17':
|
||||||
resolution: {integrity: sha512-jk90UZ0jzJl3Dy1BhuFfRZ2KP9wVKMXPjmCtY4U6fF2LvrjP5gWFJj5VHzfzHonJexjrGe1lMzgtjriuZkxagg==}
|
resolution: {integrity: sha512-11do1KeInnJo7vVJgI2bTJ3YHQ6jirbJB4KcfHS1sn9ArKUFJrgk+32QQGj+Gv39krgzSReNb84Xr+Oi6iCcyA==}
|
||||||
engines: {node: '>= 10'}
|
engines: {node: '>= 10'}
|
||||||
cpu: [arm64]
|
cpu: [arm64]
|
||||||
os: [linux]
|
os: [linux]
|
||||||
|
|
||||||
'@tailwindcss/oxide-linux-arm64-musl@4.0.9':
|
'@tailwindcss/oxide-linux-arm64-musl@4.0.0-alpha.17':
|
||||||
resolution: {integrity: sha512-3eMjyTC6HBxh9nRgOHzrc96PYh1/jWOwHZ3Kk0JN0Kl25BJ80Lj9HEvvwVDNTgPg154LdICwuFLuhfgH9DULmg==}
|
resolution: {integrity: sha512-qB0XX8iGafq7IJa7yDPVaDLQC2QhjtMgXgKggpgxjtLaSQDVJ53hHmmjglgLSghlHpZ0+mNfQDT8EOzRdhvj7Q==}
|
||||||
engines: {node: '>= 10'}
|
engines: {node: '>= 10'}
|
||||||
cpu: [arm64]
|
cpu: [arm64]
|
||||||
os: [linux]
|
os: [linux]
|
||||||
|
|
||||||
'@tailwindcss/oxide-linux-x64-gnu@4.0.9':
|
'@tailwindcss/oxide-linux-x64-gnu@4.0.0-alpha.17':
|
||||||
resolution: {integrity: sha512-v0D8WqI/c3WpWH1kq/HP0J899ATLdGZmENa2/emmNjubT0sWtEke9W9+wXeEoACuGAhF9i3PO5MeyditpDCiWQ==}
|
resolution: {integrity: sha512-iTsqmqxdcrLf77SagBIygip656YLEtl2wO5VMoeK3omYviM/ipNH2Vu5HZ6fB/qotX9gVzyz4iQovFAWvp6Azg==}
|
||||||
engines: {node: '>= 10'}
|
engines: {node: '>= 10'}
|
||||||
cpu: [x64]
|
cpu: [x64]
|
||||||
os: [linux]
|
os: [linux]
|
||||||
|
|
||||||
'@tailwindcss/oxide-linux-x64-musl@4.0.9':
|
'@tailwindcss/oxide-linux-x64-musl@4.0.0-alpha.17':
|
||||||
resolution: {integrity: sha512-Kvp0TCkfeXyeehqLJr7otsc4hd/BUPfcIGrQiwsTVCfaMfjQZCG7DjI+9/QqPZha8YapLA9UoIcUILRYO7NE1Q==}
|
resolution: {integrity: sha512-2bHxD8yXy36dpIFUbDW7LRDKYpZXRcOC0PTVukobmkp+F0p8rEnTcI36DPLGEA8W3+FDIKbGQM4aMb1r/BbGZg==}
|
||||||
engines: {node: '>= 10'}
|
engines: {node: '>= 10'}
|
||||||
cpu: [x64]
|
cpu: [x64]
|
||||||
os: [linux]
|
os: [linux]
|
||||||
|
|
||||||
'@tailwindcss/oxide-win32-arm64-msvc@4.0.9':
|
'@tailwindcss/oxide-win32-x64-msvc@4.0.0-alpha.17':
|
||||||
resolution: {integrity: sha512-m3+60T/7YvWekajNq/eexjhV8z10rswcz4BC9bioJ7YaN+7K8W2AmLmG0B79H14m6UHE571qB0XsPus4n0QVgQ==}
|
resolution: {integrity: sha512-qNFwdHYQoJDfObko0WyutVrFPoaZB5pVkJ6FlR7M/0ylLvx/BR7kfyWZYmivi3DGXZmm4eMFLLYZjBjLHWbvUg==}
|
||||||
engines: {node: '>= 10'}
|
|
||||||
cpu: [arm64]
|
|
||||||
os: [win32]
|
|
||||||
|
|
||||||
'@tailwindcss/oxide-win32-x64-msvc@4.0.9':
|
|
||||||
resolution: {integrity: sha512-dpc05mSlqkwVNOUjGu/ZXd5U1XNch1kHFJ4/cHkZFvaW1RzbHmRt24gvM8/HC6IirMxNarzVw4IXVtvrOoZtxA==}
|
|
||||||
engines: {node: '>= 10'}
|
engines: {node: '>= 10'}
|
||||||
cpu: [x64]
|
cpu: [x64]
|
||||||
os: [win32]
|
os: [win32]
|
||||||
|
|
||||||
'@tailwindcss/oxide@4.0.9':
|
'@tailwindcss/oxide@4.0.0-alpha.17':
|
||||||
resolution: {integrity: sha512-eLizHmXFqHswJONwfqi/WZjtmWZpIalpvMlNhTM99/bkHtUs6IqgI1XQ0/W5eO2HiRQcIlXUogI2ycvKhVLNcA==}
|
resolution: {integrity: sha512-5FciVkCRpYRsVRyu8+ldiiOxGgXDJQLMzd5fjPCt7JZWhSZjS/QkXQdBc41Bcice3sgxTtKpKA4ef3sEcOfG/A==}
|
||||||
engines: {node: '>= 10'}
|
engines: {node: '>= 10'}
|
||||||
|
|
||||||
'@tailwindcss/postcss@4.0.9':
|
'@tailwindcss/postcss@4.0.0-alpha.17':
|
||||||
resolution: {integrity: sha512-BT/E+pdMqulavEAVM5NCpxmGEwHiLDPpkmg/c/X25ZBW+izTe+aZ+v1gf/HXTrihRoCxrUp5U4YyHsBTzspQKQ==}
|
resolution: {integrity: sha512-N0DQOSy+5c1/JkKt1yPja5Kb0QqpkYFFEcV5SK+Cnko+ncsDYOesEfIm00qAtb/9S9SWy5PGNHP7s0U21pWGyA==}
|
||||||
|
|
||||||
'@tailwindcss/typography@0.5.16':
|
|
||||||
resolution: {integrity: sha512-0wDLwCVF5V3x3b1SGXPCDcdsbDHMBe+lkFzBRaHeLvNi+nrrnZ1lA18u+OTWO8iSWU2GxUOCvlXtDuqftc1oiA==}
|
|
||||||
peerDependencies:
|
|
||||||
tailwindcss: '>=3.0.0 || insiders || >=4.0.0-alpha.20 || >=4.0.0-beta.1'
|
|
||||||
|
|
||||||
'@tokenizer/token@0.3.0':
|
'@tokenizer/token@0.3.0':
|
||||||
resolution: {integrity: sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A==}
|
resolution: {integrity: sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A==}
|
||||||
@@ -2445,10 +2424,6 @@ packages:
|
|||||||
end-of-stream@1.4.4:
|
end-of-stream@1.4.4:
|
||||||
resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==}
|
resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==}
|
||||||
|
|
||||||
enhanced-resolve@5.18.1:
|
|
||||||
resolution: {integrity: sha512-ZSW3ma5GkcQBIpwZTSRAI8N71Uuwgs93IezB7mf7R60tC8ZbJideoDNKjHn2O9KIlx6rkGTTEk1xUCK2E1Y2Yg==}
|
|
||||||
engines: {node: '>=10.13.0'}
|
|
||||||
|
|
||||||
entities@4.5.0:
|
entities@4.5.0:
|
||||||
resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==}
|
resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==}
|
||||||
engines: {node: '>=0.12'}
|
engines: {node: '>=0.12'}
|
||||||
@@ -3088,12 +3063,6 @@ packages:
|
|||||||
resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==}
|
resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==}
|
||||||
engines: {node: '>=10'}
|
engines: {node: '>=10'}
|
||||||
|
|
||||||
lodash.castarray@4.4.0:
|
|
||||||
resolution: {integrity: sha512-aVx8ztPv7/2ULbArGJ2Y42bG1mEQ5mGjpdvrbJcJFU3TbYybe+QlLS4pst9zV52ymy2in1KpFPiZnAOATxD4+Q==}
|
|
||||||
|
|
||||||
lodash.isplainobject@4.0.6:
|
|
||||||
resolution: {integrity: sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==}
|
|
||||||
|
|
||||||
lodash.merge@4.6.2:
|
lodash.merge@4.6.2:
|
||||||
resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==}
|
resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==}
|
||||||
|
|
||||||
@@ -3533,6 +3502,10 @@ packages:
|
|||||||
resolution: {integrity: sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==}
|
resolution: {integrity: sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==}
|
||||||
engines: {node: '>=12'}
|
engines: {node: '>=12'}
|
||||||
|
|
||||||
|
pify@2.3.0:
|
||||||
|
resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==}
|
||||||
|
engines: {node: '>=0.10.0'}
|
||||||
|
|
||||||
pirates@4.0.6:
|
pirates@4.0.6:
|
||||||
resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==}
|
resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==}
|
||||||
engines: {node: '>= 6'}
|
engines: {node: '>= 6'}
|
||||||
@@ -3565,6 +3538,12 @@ packages:
|
|||||||
resolution: {integrity: sha512-NCrCHhWmnQklfH4MtJMRjZ2a8c80qXeMlQMv2uVp9ISJMTt562SbGd6n2oq0PaPgKm7Z6pL9E2UlLIhC+SHL3w==}
|
resolution: {integrity: sha512-NCrCHhWmnQklfH4MtJMRjZ2a8c80qXeMlQMv2uVp9ISJMTt562SbGd6n2oq0PaPgKm7Z6pL9E2UlLIhC+SHL3w==}
|
||||||
engines: {node: '>=4.0.0'}
|
engines: {node: '>=4.0.0'}
|
||||||
|
|
||||||
|
postcss-import@16.1.0:
|
||||||
|
resolution: {integrity: sha512-7hsAZ4xGXl4MW+OKEWCnF6T5jqBw80/EE9aXg1r2yyn1RsVEU8EtKXbijEODa+rg7iih4bKf7vlvTGYR4CnPNg==}
|
||||||
|
engines: {node: '>=18.0.0'}
|
||||||
|
peerDependencies:
|
||||||
|
postcss: ^8.0.0
|
||||||
|
|
||||||
postcss-load-config@3.1.4:
|
postcss-load-config@3.1.4:
|
||||||
resolution: {integrity: sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==}
|
resolution: {integrity: sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==}
|
||||||
engines: {node: '>= 10'}
|
engines: {node: '>= 10'}
|
||||||
@@ -3589,14 +3568,13 @@ packages:
|
|||||||
peerDependencies:
|
peerDependencies:
|
||||||
postcss: ^8.4.29
|
postcss: ^8.4.29
|
||||||
|
|
||||||
postcss-selector-parser@6.0.10:
|
|
||||||
resolution: {integrity: sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==}
|
|
||||||
engines: {node: '>=4'}
|
|
||||||
|
|
||||||
postcss-selector-parser@6.1.2:
|
postcss-selector-parser@6.1.2:
|
||||||
resolution: {integrity: sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==}
|
resolution: {integrity: sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==}
|
||||||
engines: {node: '>=4'}
|
engines: {node: '>=4'}
|
||||||
|
|
||||||
|
postcss-value-parser@4.2.0:
|
||||||
|
resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==}
|
||||||
|
|
||||||
postcss@8.5.1:
|
postcss@8.5.1:
|
||||||
resolution: {integrity: sha512-6oz2beyjc5VMn/KV1pPw8fliQkhBXrVn1Z3TVyqZxU8kZpzEKhBdmCFqI6ZbmGtamQvQGuU1sgPTk8ZrXDD7jQ==}
|
resolution: {integrity: sha512-6oz2beyjc5VMn/KV1pPw8fliQkhBXrVn1Z3TVyqZxU8kZpzEKhBdmCFqI6ZbmGtamQvQGuU1sgPTk8ZrXDD7jQ==}
|
||||||
engines: {node: ^10 || ^12 || >=14}
|
engines: {node: ^10 || ^12 || >=14}
|
||||||
@@ -3747,6 +3725,9 @@ packages:
|
|||||||
react-is@18.3.1:
|
react-is@18.3.1:
|
||||||
resolution: {integrity: sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==}
|
resolution: {integrity: sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==}
|
||||||
|
|
||||||
|
read-cache@1.0.0:
|
||||||
|
resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==}
|
||||||
|
|
||||||
readable-stream@2.3.8:
|
readable-stream@2.3.8:
|
||||||
resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==}
|
resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==}
|
||||||
|
|
||||||
@@ -4110,12 +4091,8 @@ packages:
|
|||||||
tailwind-merge@2.6.0:
|
tailwind-merge@2.6.0:
|
||||||
resolution: {integrity: sha512-P+Vu1qXfzediirmHOC3xKGAYeZtPcV9g76X+xg2FD4tYgR71ewMA35Y3sCz3zhiN/dwefRpJX0yBcgwi1fXNQA==}
|
resolution: {integrity: sha512-P+Vu1qXfzediirmHOC3xKGAYeZtPcV9g76X+xg2FD4tYgR71ewMA35Y3sCz3zhiN/dwefRpJX0yBcgwi1fXNQA==}
|
||||||
|
|
||||||
tailwindcss@4.0.9:
|
tailwindcss@4.0.0-alpha.17:
|
||||||
resolution: {integrity: sha512-12laZu+fv1ONDRoNR9ipTOpUD7RN9essRVkX36sjxuRUInpN7hIiHN4lBd/SIFjbISvnXzp8h/hXzmU8SQQYhw==}
|
resolution: {integrity: sha512-wWr6kvH40Hp1LQVcD738ojwU6+muJnpIUZw3J2EqjOdqHpg3iUIkrrQszP5HP4nwi4qBsoCoHPWVJ3Qw4f1IZw==}
|
||||||
|
|
||||||
tapable@2.2.1:
|
|
||||||
resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==}
|
|
||||||
engines: {node: '>=6'}
|
|
||||||
|
|
||||||
tar@6.2.1:
|
tar@6.2.1:
|
||||||
resolution: {integrity: sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==}
|
resolution: {integrity: sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==}
|
||||||
@@ -4486,8 +4463,6 @@ packages:
|
|||||||
|
|
||||||
snapshots:
|
snapshots:
|
||||||
|
|
||||||
'@alloc/quick-lru@5.2.0': {}
|
|
||||||
|
|
||||||
'@ampproject/remapping@2.3.0':
|
'@ampproject/remapping@2.3.0':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@jridgewell/gen-mapping': 0.3.8
|
'@jridgewell/gen-mapping': 0.3.8
|
||||||
@@ -6033,75 +6008,57 @@ snapshots:
|
|||||||
dependencies:
|
dependencies:
|
||||||
tslib: 2.8.1
|
tslib: 2.8.1
|
||||||
|
|
||||||
'@tailwindcss/node@4.0.9':
|
'@tailwindcss/oxide-android-arm64@4.0.0-alpha.17':
|
||||||
dependencies:
|
|
||||||
enhanced-resolve: 5.18.1
|
|
||||||
jiti: 2.4.2
|
|
||||||
tailwindcss: 4.0.9
|
|
||||||
|
|
||||||
'@tailwindcss/oxide-android-arm64@4.0.9':
|
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
'@tailwindcss/oxide-darwin-arm64@4.0.9':
|
'@tailwindcss/oxide-darwin-arm64@4.0.0-alpha.17':
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
'@tailwindcss/oxide-darwin-x64@4.0.9':
|
'@tailwindcss/oxide-darwin-x64@4.0.0-alpha.17':
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
'@tailwindcss/oxide-freebsd-x64@4.0.9':
|
'@tailwindcss/oxide-freebsd-x64@4.0.0-alpha.17':
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
'@tailwindcss/oxide-linux-arm-gnueabihf@4.0.9':
|
'@tailwindcss/oxide-linux-arm-gnueabihf@4.0.0-alpha.17':
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
'@tailwindcss/oxide-linux-arm64-gnu@4.0.9':
|
'@tailwindcss/oxide-linux-arm64-gnu@4.0.0-alpha.17':
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
'@tailwindcss/oxide-linux-arm64-musl@4.0.9':
|
'@tailwindcss/oxide-linux-arm64-musl@4.0.0-alpha.17':
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
'@tailwindcss/oxide-linux-x64-gnu@4.0.9':
|
'@tailwindcss/oxide-linux-x64-gnu@4.0.0-alpha.17':
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
'@tailwindcss/oxide-linux-x64-musl@4.0.9':
|
'@tailwindcss/oxide-linux-x64-musl@4.0.0-alpha.17':
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
'@tailwindcss/oxide-win32-arm64-msvc@4.0.9':
|
'@tailwindcss/oxide-win32-x64-msvc@4.0.0-alpha.17':
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
'@tailwindcss/oxide-win32-x64-msvc@4.0.9':
|
'@tailwindcss/oxide@4.0.0-alpha.17':
|
||||||
optional: true
|
|
||||||
|
|
||||||
'@tailwindcss/oxide@4.0.9':
|
|
||||||
optionalDependencies:
|
optionalDependencies:
|
||||||
'@tailwindcss/oxide-android-arm64': 4.0.9
|
'@tailwindcss/oxide-android-arm64': 4.0.0-alpha.17
|
||||||
'@tailwindcss/oxide-darwin-arm64': 4.0.9
|
'@tailwindcss/oxide-darwin-arm64': 4.0.0-alpha.17
|
||||||
'@tailwindcss/oxide-darwin-x64': 4.0.9
|
'@tailwindcss/oxide-darwin-x64': 4.0.0-alpha.17
|
||||||
'@tailwindcss/oxide-freebsd-x64': 4.0.9
|
'@tailwindcss/oxide-freebsd-x64': 4.0.0-alpha.17
|
||||||
'@tailwindcss/oxide-linux-arm-gnueabihf': 4.0.9
|
'@tailwindcss/oxide-linux-arm-gnueabihf': 4.0.0-alpha.17
|
||||||
'@tailwindcss/oxide-linux-arm64-gnu': 4.0.9
|
'@tailwindcss/oxide-linux-arm64-gnu': 4.0.0-alpha.17
|
||||||
'@tailwindcss/oxide-linux-arm64-musl': 4.0.9
|
'@tailwindcss/oxide-linux-arm64-musl': 4.0.0-alpha.17
|
||||||
'@tailwindcss/oxide-linux-x64-gnu': 4.0.9
|
'@tailwindcss/oxide-linux-x64-gnu': 4.0.0-alpha.17
|
||||||
'@tailwindcss/oxide-linux-x64-musl': 4.0.9
|
'@tailwindcss/oxide-linux-x64-musl': 4.0.0-alpha.17
|
||||||
'@tailwindcss/oxide-win32-arm64-msvc': 4.0.9
|
'@tailwindcss/oxide-win32-x64-msvc': 4.0.0-alpha.17
|
||||||
'@tailwindcss/oxide-win32-x64-msvc': 4.0.9
|
|
||||||
|
|
||||||
'@tailwindcss/postcss@4.0.9':
|
'@tailwindcss/postcss@4.0.0-alpha.17(postcss@8.5.1)':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@alloc/quick-lru': 5.2.0
|
'@tailwindcss/oxide': 4.0.0-alpha.17
|
||||||
'@tailwindcss/node': 4.0.9
|
|
||||||
'@tailwindcss/oxide': 4.0.9
|
|
||||||
lightningcss: 1.29.1
|
lightningcss: 1.29.1
|
||||||
postcss: 8.5.1
|
postcss-import: 16.1.0(postcss@8.5.1)
|
||||||
tailwindcss: 4.0.9
|
tailwindcss: 4.0.0-alpha.17
|
||||||
|
transitivePeerDependencies:
|
||||||
'@tailwindcss/typography@0.5.16(tailwindcss@4.0.9)':
|
- postcss
|
||||||
dependencies:
|
|
||||||
lodash.castarray: 4.4.0
|
|
||||||
lodash.isplainobject: 4.0.6
|
|
||||||
lodash.merge: 4.6.2
|
|
||||||
postcss-selector-parser: 6.0.10
|
|
||||||
tailwindcss: 4.0.9
|
|
||||||
|
|
||||||
'@tokenizer/token@0.3.0': {}
|
'@tokenizer/token@0.3.0': {}
|
||||||
|
|
||||||
@@ -6872,11 +6829,6 @@ snapshots:
|
|||||||
dependencies:
|
dependencies:
|
||||||
once: 1.4.0
|
once: 1.4.0
|
||||||
|
|
||||||
enhanced-resolve@5.18.1:
|
|
||||||
dependencies:
|
|
||||||
graceful-fs: 4.2.11
|
|
||||||
tapable: 2.2.1
|
|
||||||
|
|
||||||
entities@4.5.0: {}
|
entities@4.5.0: {}
|
||||||
|
|
||||||
env-paths@2.2.1: {}
|
env-paths@2.2.1: {}
|
||||||
@@ -7420,7 +7372,8 @@ snapshots:
|
|||||||
|
|
||||||
jiti@1.21.7: {}
|
jiti@1.21.7: {}
|
||||||
|
|
||||||
jiti@2.4.2: {}
|
jiti@2.4.2:
|
||||||
|
optional: true
|
||||||
|
|
||||||
jpeg-js@0.4.4: {}
|
jpeg-js@0.4.4: {}
|
||||||
|
|
||||||
@@ -7547,10 +7500,6 @@ snapshots:
|
|||||||
dependencies:
|
dependencies:
|
||||||
p-locate: 5.0.0
|
p-locate: 5.0.0
|
||||||
|
|
||||||
lodash.castarray@4.4.0: {}
|
|
||||||
|
|
||||||
lodash.isplainobject@4.0.6: {}
|
|
||||||
|
|
||||||
lodash.merge@4.6.2: {}
|
lodash.merge@4.6.2: {}
|
||||||
|
|
||||||
lodash@4.17.21: {}
|
lodash@4.17.21: {}
|
||||||
@@ -8002,6 +7951,8 @@ snapshots:
|
|||||||
|
|
||||||
picomatch@4.0.2: {}
|
picomatch@4.0.2: {}
|
||||||
|
|
||||||
|
pify@2.3.0: {}
|
||||||
|
|
||||||
pirates@4.0.6: {}
|
pirates@4.0.6: {}
|
||||||
|
|
||||||
piscina@4.8.0:
|
piscina@4.8.0:
|
||||||
@@ -8030,6 +7981,13 @@ snapshots:
|
|||||||
|
|
||||||
pngjs@3.4.0: {}
|
pngjs@3.4.0: {}
|
||||||
|
|
||||||
|
postcss-import@16.1.0(postcss@8.5.1):
|
||||||
|
dependencies:
|
||||||
|
postcss: 8.5.1
|
||||||
|
postcss-value-parser: 4.2.0
|
||||||
|
read-cache: 1.0.0
|
||||||
|
resolve: 1.22.10
|
||||||
|
|
||||||
postcss-load-config@3.1.4(postcss@8.5.1):
|
postcss-load-config@3.1.4(postcss@8.5.1):
|
||||||
dependencies:
|
dependencies:
|
||||||
lilconfig: 2.1.0
|
lilconfig: 2.1.0
|
||||||
@@ -8045,16 +8003,13 @@ snapshots:
|
|||||||
dependencies:
|
dependencies:
|
||||||
postcss: 8.5.1
|
postcss: 8.5.1
|
||||||
|
|
||||||
postcss-selector-parser@6.0.10:
|
|
||||||
dependencies:
|
|
||||||
cssesc: 3.0.0
|
|
||||||
util-deprecate: 1.0.2
|
|
||||||
|
|
||||||
postcss-selector-parser@6.1.2:
|
postcss-selector-parser@6.1.2:
|
||||||
dependencies:
|
dependencies:
|
||||||
cssesc: 3.0.0
|
cssesc: 3.0.0
|
||||||
util-deprecate: 1.0.2
|
util-deprecate: 1.0.2
|
||||||
|
|
||||||
|
postcss-value-parser@4.2.0: {}
|
||||||
|
|
||||||
postcss@8.5.1:
|
postcss@8.5.1:
|
||||||
dependencies:
|
dependencies:
|
||||||
nanoid: 3.3.8
|
nanoid: 3.3.8
|
||||||
@@ -8137,6 +8092,10 @@ snapshots:
|
|||||||
|
|
||||||
react-is@18.3.1: {}
|
react-is@18.3.1: {}
|
||||||
|
|
||||||
|
read-cache@1.0.0:
|
||||||
|
dependencies:
|
||||||
|
pify: 2.3.0
|
||||||
|
|
||||||
readable-stream@2.3.8:
|
readable-stream@2.3.8:
|
||||||
dependencies:
|
dependencies:
|
||||||
core-util-is: 1.0.3
|
core-util-is: 1.0.3
|
||||||
@@ -8576,9 +8535,7 @@ snapshots:
|
|||||||
|
|
||||||
tailwind-merge@2.6.0: {}
|
tailwind-merge@2.6.0: {}
|
||||||
|
|
||||||
tailwindcss@4.0.9: {}
|
tailwindcss@4.0.0-alpha.17: {}
|
||||||
|
|
||||||
tapable@2.2.1: {}
|
|
||||||
|
|
||||||
tar@6.2.1:
|
tar@6.2.1:
|
||||||
dependencies:
|
dependencies:
|
||||||
|
|||||||
108
src/app.css
108
src/app.css
@@ -1,6 +1,5 @@
|
|||||||
@import 'tailwindcss';
|
@import 'tailwindcss';
|
||||||
@variant dark (&:is(.dark *));
|
@variant dark (&:is(.dark *));
|
||||||
@config "../tailwind.config.ts";
|
|
||||||
|
|
||||||
@theme {
|
@theme {
|
||||||
/* colors */
|
/* colors */
|
||||||
@@ -82,8 +81,27 @@
|
|||||||
--color-badge-border-dark: hsl(240, 2.6%, 22.9%);
|
--color-badge-border-dark: hsl(240, 2.6%, 22.9%);
|
||||||
|
|
||||||
/* Easings */
|
/* Easings */
|
||||||
--ease-bounce: linear(0, 0.063, 0.25 18.2%, 1 36.4%, 0.813, 0.75, 0.813, 1, 0.938, 1, 1);
|
--transition-timing-function-bounce: linear(
|
||||||
--ease-spring: linear(0, 0.938 16.7%, 1.149 24.3%, 1.154 29.9%, 0.977 51%, 1);
|
0,
|
||||||
|
0.063,
|
||||||
|
0.25 18.2%,
|
||||||
|
1 36.4%,
|
||||||
|
0.813,
|
||||||
|
0.75,
|
||||||
|
0.813,
|
||||||
|
1,
|
||||||
|
0.938,
|
||||||
|
1,
|
||||||
|
1
|
||||||
|
);
|
||||||
|
--transition-timing-function-spring: linear(
|
||||||
|
0,
|
||||||
|
0.938 16.7%,
|
||||||
|
1.149 24.3%,
|
||||||
|
1.154 29.9%,
|
||||||
|
0.977 51%,
|
||||||
|
1
|
||||||
|
);
|
||||||
|
|
||||||
/* Animations */
|
/* Animations */
|
||||||
--animate-scale-in: scale-in 200ms ease-out forwards;
|
--animate-scale-in: scale-in 200ms ease-out forwards;
|
||||||
@@ -169,50 +187,50 @@
|
|||||||
--font-family-archia: 'Archia', arial, sans-serif;
|
--font-family-archia: 'Archia', arial, sans-serif;
|
||||||
|
|
||||||
/* Font sizes */
|
/* Font sizes */
|
||||||
--text-x-micro: 0.625rem;
|
--font-size-x-micro: 0.625rem;
|
||||||
--text-x-micro--line-height: 0.875rem;
|
--font-size-x-micro--line-height: 0.875rem;
|
||||||
--text-x-micro--tracking: var(--tracking-tighter);
|
--font-size-x-micro--letter-spacing: var(--letter-spacing-tighter);
|
||||||
--text-micro: 0.75rem;
|
--font-size-micro: 0.75rem;
|
||||||
--text-micro--line-height: 1rem;
|
--font-size-micro--line-height: 1rem;
|
||||||
--text-micro--tracking: var(--tracking-tighter);
|
--font-size-micro--letter-spacing: var(--letter-spacing-tighter);
|
||||||
--text-caption: 0.875rem;
|
--font-size-caption: 0.875rem;
|
||||||
--text-caption--line-height: 1.375rem;
|
--font-size-caption--line-height: 1.375rem;
|
||||||
--text-caption--tracking: var(--tracking-tight);
|
--font-size-caption--letter-spacing: var(--letter-spacing-tight);
|
||||||
--text-sub-body: clamp(0.875rem, 2vw, 1rem);
|
--font-size-sub-body: clamp(0.875rem, 2vw, 1rem);
|
||||||
--text-sub-body--line-height: 1.375rem;
|
--font-size-sub-body--line-height: 1.375rem;
|
||||||
--text-sub-body--tracking: var(--tracking-tight);
|
--font-size-sub-body--letter-spacing: var(--letter-spacing-tight);
|
||||||
--text-body: clamp(1rem, 2.5vw, 1.125rem);
|
--font-size-body: clamp(1rem, 2.5vw, 1.125rem);
|
||||||
--text-body--line-height: clamp(1.375rem, 3vw, 1.625rem);
|
--font-size-body--line-height: clamp(1.375rem, 3vw, 1.625rem);
|
||||||
--text-body--tracking: var(--tracking-tight);
|
--font-size-body--letter-spacing: var(--letter-spacing-tight);
|
||||||
--text-paragraph-md: 1rem;
|
--font-size-paragraph-md: 1rem;
|
||||||
--text-paragraph-md--line-height: 1.625rem;
|
--font-size-paragraph-md--line-height: 1.625rem;
|
||||||
--text-paragraph-md--tracking: var(--tracking-tight);
|
--font-size-paragraph-md--letter-spacing: var(--letter-spacing-tight);
|
||||||
--text-paragraph-lg: 1.125rem;
|
--font-size-paragraph-lg: 1.125rem;
|
||||||
--text-paragraph-lg--line-height: 1.75rem;
|
--font-size-paragraph-lg--line-height: 1.75rem;
|
||||||
--text-paragraph-lg--tracking: var(--tracking-tight);
|
--font-size-paragraph-lg--letter-spacing: var(--letter-spacing-tight);
|
||||||
--text-description: clamp(1.125rem, 3vw, 1.25rem);
|
--font-size-description: clamp(1.125rem, 3vw, 1.25rem);
|
||||||
--text-description--line-height: clamp(1.625rem, 3.5vw, 1.75rem);
|
--font-size-description--line-height: clamp(1.625rem, 3.5vw, 1.75rem);
|
||||||
--text-description--tracking: var(--tracking-tighter);
|
--font-size-description--letter-spacing: var(--letter-spacing-tighter);
|
||||||
--text-label: 1.5rem;
|
--font-size-label: 1.5rem;
|
||||||
--text-label--line-height: 1.75rem;
|
--font-size-label--line-height: 1.75rem;
|
||||||
--text-title: clamp(2rem, 5vw, 2.5rem);
|
--font-size-title: clamp(2rem, 5vw, 2.5rem);
|
||||||
--text-title--line-height: clamp(2.125rem, 5.5vw, 2.75rem);
|
--font-size-title--line-height: clamp(2.125rem, 5.5vw, 2.75rem);
|
||||||
--text-title--tracking: var(--tracking-squeezed);
|
--font-size-title--letter-spacing: var(--letter-spacing-squeezed);
|
||||||
--text-display: clamp(3rem, 7vw, 4rem);
|
--font-size-display: clamp(3rem, 7vw, 4rem);
|
||||||
--text-display--line-height: clamp(3.125rem, 7.5vw, 4.25rem);
|
--font-size-display--line-height: clamp(3.125rem, 7.5vw, 4.25rem);
|
||||||
--text-display--tracking: var(--tracking-compressed);
|
--font-size-display--letter-spacing: var(--letter-spacing-compressed);
|
||||||
--text-headline: clamp(3.5rem, 8vw, 5.5rem);
|
--font-size-headline: clamp(3.5rem, 8vw, 5.5rem);
|
||||||
--text-headline--line-height: clamp(3.5rem, 8.5vw, 5.75rem);
|
--font-size-headline--line-height: clamp(3.5rem, 8.5vw, 5.75rem);
|
||||||
--text-headline--tracking: var(--tracking-compressed);
|
--font-size-headline--letter-spacing: var(--letter-spacing-compressed);
|
||||||
|
|
||||||
/* letter spacing */
|
/* letter spacing */
|
||||||
--tracking-*: initial;
|
--letter-spacing-*: initial;
|
||||||
--tracking-compressed: -0.022em;
|
--letter-spacing-compressed: -0.022em;
|
||||||
--tracking-squeezed: -0.01em;
|
--letter-spacing-squeezed: -0.01em;
|
||||||
--tracking-tighter: -0.018em;
|
--letter-spacing-tighter: -0.018em;
|
||||||
--tracking-tight: -0.0045em;
|
--letter-spacing-tight: -0.0045em;
|
||||||
--tracking-none: 0em;
|
--letter-spacing-none: 0em;
|
||||||
--tracking-loose: 0.08em;
|
--letter-spacing-loose: 0.08em;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* light & dark mode */
|
/* light & dark mode */
|
||||||
|
|||||||
@@ -1,33 +1,61 @@
|
|||||||
<script lang="ts" context="module">
|
|
||||||
export const extractHeadings = () => {
|
|
||||||
let headings: Array<string> = [];
|
|
||||||
headings.push('Accessibility in design systems');
|
|
||||||
headings.push('Use high color contrast');
|
|
||||||
headings.push('Not relying on color');
|
|
||||||
return headings;
|
|
||||||
};
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
|
import type { TocItem } from '$lib/layouts/DocsArticle.svelte';
|
||||||
import { classNames } from '$lib/utils/classnames';
|
import { classNames } from '$lib/utils/classnames';
|
||||||
|
import { onMount } from 'svelte';
|
||||||
|
|
||||||
const backToTop = () => {
|
const backToTop = () => {
|
||||||
window.scrollTo({ top: 0, behavior: 'smooth' });
|
window.scrollTo({ top: 0, behavior: 'smooth' });
|
||||||
};
|
};
|
||||||
|
|
||||||
let activeIndex: number = 0;
|
export let toc: Array<TocItem> = [];
|
||||||
|
|
||||||
const headings = extractHeadings();
|
$: activeIndex = 0;
|
||||||
|
|
||||||
|
onMount(() => {
|
||||||
|
const observer = new IntersectionObserver(
|
||||||
|
(entries) => {
|
||||||
|
entries.forEach((entry) => {
|
||||||
|
if (entry.isIntersecting) {
|
||||||
|
const index = toc.findIndex((item) => item.href === `#${entry.target.id}`);
|
||||||
|
if (index !== -1) {
|
||||||
|
activeIndex = index;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
},
|
||||||
|
{
|
||||||
|
rootMargin: '0px',
|
||||||
|
threshold: 0.5
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
toc.forEach((item) => {
|
||||||
|
const target = document.querySelector(item.href);
|
||||||
|
if (target) {
|
||||||
|
observer.observe(target);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
return () => {
|
||||||
|
observer.disconnect();
|
||||||
|
};
|
||||||
|
});
|
||||||
|
|
||||||
|
$: console.log({ activeIndex });
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<nav class="border-smooth col-span-3 ml-4 hidden border-l lg:block">
|
<nav class="sticky top-32 col-span-3 -ml-4 hidden h-[600px] lg:block">
|
||||||
<span class="text-micro tracking-loose text-primary pl-8 uppercase">Table of Contents</span>
|
<span class="text-micro tracking-loose text-primary pl-8 uppercase">Table of Contents</span>
|
||||||
<div class="relative">
|
<div class="relative">
|
||||||
<ul class="border-smooth mt-11 ml-7 flex flex-col gap-7 border-b pb-11">
|
<ul class="border-smooth mt-11 ml-7 flex flex-col gap-7 border-b pb-11">
|
||||||
{#each headings as heading, i}
|
{#each toc as item}
|
||||||
{@const isActive = i === 0}
|
<li
|
||||||
<li class={classNames(isActive ? 'text-primary' : 'text-secondary', 'relative')}>
|
class={classNames(
|
||||||
{heading}
|
item.selected ? 'text-primary' : 'text-secondary',
|
||||||
|
'relative transition-colors'
|
||||||
|
)}
|
||||||
|
>
|
||||||
|
<a href={item.href}> {item.title}</a>
|
||||||
</li>
|
</li>
|
||||||
{/each}
|
{/each}
|
||||||
</ul>
|
</ul>
|
||||||
|
|||||||
6
src/lib/utils/slugify.ts
Normal file
6
src/lib/utils/slugify.ts
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
export const slugify = (string: string) => {
|
||||||
|
return string
|
||||||
|
.toLowerCase()
|
||||||
|
.replace(/[^a-z0-9]+/g, '-')
|
||||||
|
.replace(/(^-|-$)+/g, '');
|
||||||
|
};
|
||||||
@@ -11,7 +11,7 @@
|
|||||||
} from '$lib/utils/metadata';
|
} from '$lib/utils/metadata';
|
||||||
import type { AuthorData, PostsData } from '$routes/blog/content';
|
import type { AuthorData, PostsData } from '$routes/blog/content';
|
||||||
import { TITLE_SUFFIX } from '$routes/titles';
|
import { TITLE_SUFFIX } from '$routes/titles';
|
||||||
import { getContext } from 'svelte';
|
import { getContext, setContext } from 'svelte';
|
||||||
import { page } from '$app/state';
|
import { page } from '$app/state';
|
||||||
import CTA from '$lib/components/BlogCta.svelte';
|
import CTA from '$lib/components/BlogCta.svelte';
|
||||||
import PostMeta from '$lib/components/blog/post-meta.svelte';
|
import PostMeta from '$lib/components/blog/post-meta.svelte';
|
||||||
@@ -19,6 +19,9 @@
|
|||||||
import Newsletter from '$lib/components/blog/newsletter.svelte';
|
import Newsletter from '$lib/components/blog/newsletter.svelte';
|
||||||
import TableOfContents from '$lib/components/blog/table-of-contents.svelte';
|
import TableOfContents from '$lib/components/blog/table-of-contents.svelte';
|
||||||
import Article from '$lib/components/blog/article.svelte';
|
import Article from '$lib/components/blog/article.svelte';
|
||||||
|
import type { TocItem } from '$lib/layouts/DocsArticle.svelte';
|
||||||
|
import { writable } from 'svelte/store';
|
||||||
|
import type { LayoutContext } from './Article.svelte';
|
||||||
|
|
||||||
export let title: string;
|
export let title: string;
|
||||||
export let description: string;
|
export let description: string;
|
||||||
@@ -40,6 +43,35 @@
|
|||||||
const authors = getContext<AuthorData[]>('authors');
|
const authors = getContext<AuthorData[]>('authors');
|
||||||
const authorData = authors.find((a) => a.slug === author);
|
const authorData = authors.find((a) => a.slug === author);
|
||||||
|
|
||||||
|
setContext<LayoutContext>('headings', writable({}));
|
||||||
|
|
||||||
|
const headings = getContext<LayoutContext>('headings');
|
||||||
|
|
||||||
|
let selected: string | undefined = undefined;
|
||||||
|
headings.subscribe((n) => {
|
||||||
|
const noVisible = Object.values(n).every((n) => !n.visible);
|
||||||
|
if (selected && noVisible) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
for (const key in n) {
|
||||||
|
if (n[key].visible) {
|
||||||
|
selected = key;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
$: entries = Object.entries($headings);
|
||||||
|
$: toc = entries.reduce<Array<TocItem>>((carry, [id, heading]) => {
|
||||||
|
carry.push({
|
||||||
|
title: heading.title,
|
||||||
|
href: `#${id}`,
|
||||||
|
step: heading.step,
|
||||||
|
selected: selected === id
|
||||||
|
});
|
||||||
|
return carry;
|
||||||
|
}, []);
|
||||||
|
|
||||||
callToAction ??= true;
|
callToAction ??= true;
|
||||||
|
|
||||||
const currentURL = `https://appwrite.io${page.url.pathname}`;
|
const currentURL = `https://appwrite.io${page.url.pathname}`;
|
||||||
@@ -91,7 +123,7 @@
|
|||||||
<div class="container">
|
<div class="container">
|
||||||
<Breadcrumbs {title} />
|
<Breadcrumbs {title} />
|
||||||
<article class="grid grid-cols-1 gap-4 lg:grid-cols-12">
|
<article class="grid grid-cols-1 gap-4 lg:grid-cols-12">
|
||||||
<div class="lg:col-span-9">
|
<div class="border-smooth border-r pr-12 lg:col-span-9">
|
||||||
<PostMeta {authorData} {title} {timeToRead} {currentURL} {date} {description} />
|
<PostMeta {authorData} {title} {timeToRead} {currentURL} {date} {description} />
|
||||||
{#if cover}
|
{#if cover}
|
||||||
<div>
|
<div>
|
||||||
@@ -113,7 +145,7 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<TableOfContents />
|
<TableOfContents {toc} />
|
||||||
</article>
|
</article>
|
||||||
</div>
|
</div>
|
||||||
{#if typeof callToAction === 'boolean'}
|
{#if typeof callToAction === 'boolean'}
|
||||||
|
|||||||
@@ -2,6 +2,7 @@
|
|||||||
import { getContext, hasContext, onMount } from 'svelte';
|
import { getContext, hasContext, onMount } from 'svelte';
|
||||||
import type { LayoutContext } from '../layouts/Article.svelte';
|
import type { LayoutContext } from '../layouts/Article.svelte';
|
||||||
import { isInPolicy } from '$markdoc/layouts/Policy.svelte';
|
import { isInPolicy } from '$markdoc/layouts/Policy.svelte';
|
||||||
|
import { slugify } from '$lib/utils/slugify';
|
||||||
|
|
||||||
export let level: number;
|
export let level: number;
|
||||||
export let id: string | undefined = undefined;
|
export let id: string | undefined = undefined;
|
||||||
@@ -10,6 +11,7 @@
|
|||||||
|
|
||||||
const tag = `h${level + 1}`;
|
const tag = `h${level + 1}`;
|
||||||
const ctx = hasContext('headings') ? getContext<LayoutContext>('headings') : undefined;
|
const ctx = hasContext('headings') ? getContext<LayoutContext>('headings') : undefined;
|
||||||
|
|
||||||
const classList: Record<typeof level, string> = {
|
const classList: Record<typeof level, string> = {
|
||||||
1: 'text-description mb-4',
|
1: 'text-description mb-4',
|
||||||
2: 'text-description text-primary mb-4',
|
2: 'text-description text-primary mb-4',
|
||||||
@@ -20,13 +22,15 @@
|
|||||||
let element: HTMLElement | undefined;
|
let element: HTMLElement | undefined;
|
||||||
|
|
||||||
onMount(() => {
|
onMount(() => {
|
||||||
if (!element || !$ctx || !id) {
|
if (!element || !$ctx) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const slug = id ?? slugify(element.innerText);
|
||||||
|
|
||||||
$ctx = {
|
$ctx = {
|
||||||
...$ctx,
|
...$ctx,
|
||||||
[id]: {
|
[slug]: {
|
||||||
step,
|
step,
|
||||||
title: element?.textContent ?? '',
|
title: element?.textContent ?? '',
|
||||||
visible: false
|
visible: false
|
||||||
@@ -35,8 +39,8 @@
|
|||||||
|
|
||||||
const callback = (entries: IntersectionObserverEntry[]) => {
|
const callback = (entries: IntersectionObserverEntry[]) => {
|
||||||
entries.forEach((entry) => {
|
entries.forEach((entry) => {
|
||||||
if (id && $ctx && id in $ctx) {
|
if (slug && $ctx && slug in $ctx) {
|
||||||
$ctx[id].visible = entry.isIntersecting;
|
$ctx[slug].visible = entry.isIntersecting;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
@@ -52,26 +56,17 @@
|
|||||||
const inPolicy = isInPolicy();
|
const inPolicy = isInPolicy();
|
||||||
$: headingClass =
|
$: headingClass =
|
||||||
inPolicy && level === 1 ? 'text-title font-aeonik-pro mb-4 mt-8' : classList[level];
|
inPolicy && level === 1 ? 'text-title font-aeonik-pro mb-4 mt-8' : classList[level];
|
||||||
|
|
||||||
|
$: console.log({ ctx: $ctx });
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
{#if id}
|
|
||||||
<svelte:element
|
<svelte:element
|
||||||
this={tag}
|
this={tag}
|
||||||
{id}
|
id={id ?? slugify(element?.innerText ?? '')}
|
||||||
bind:this={element}
|
bind:this={element}
|
||||||
class:web-snap-location={id && !inReferences}
|
class:web-snap-location={id && !inReferences}
|
||||||
class:web-snap-location-references={id && inReferences}
|
class:web-snap-location-references={id && inReferences}
|
||||||
class="{headingClass} text-primary font-medium"
|
class="{headingClass} text-primary scroll-m-32 font-medium"
|
||||||
>
|
>
|
||||||
<a href={`#${id}`} class=""><slot /></a>
|
<a href={`#${id}`} class=""><slot /></a>
|
||||||
</svelte:element>
|
</svelte:element>
|
||||||
{:else}
|
|
||||||
<svelte:element
|
|
||||||
this={tag}
|
|
||||||
bind:this={element}
|
|
||||||
class="{headingClass} text-primary font-medium"
|
|
||||||
class:in-policy={inPolicy}
|
|
||||||
>
|
|
||||||
<slot />
|
|
||||||
</svelte:element>
|
|
||||||
{/if}
|
|
||||||
|
|||||||
@@ -95,10 +95,10 @@
|
|||||||
>
|
>
|
||||||
{#if submitted}
|
{#if submitted}
|
||||||
<section class="flex flex-col gap-5">
|
<section class="flex flex-col gap-5">
|
||||||
<h1 class="web-display web-u-color-text-primary">
|
<h1 class="text-display font-aeonik-pro text-primary">
|
||||||
Thank you for your submission
|
Thank you for your submission
|
||||||
</h1>
|
</h1>
|
||||||
<p class="web-description web-u-padding-block-end-32">
|
<p class="text-description pb-8">
|
||||||
Your details for the enterprise plan have been sent
|
Your details for the enterprise plan have been sent
|
||||||
successfully. Our team will get back to you as soon
|
successfully. Our team will get back to you as soon
|
||||||
as possible.
|
as possible.
|
||||||
|
|||||||
Reference in New Issue
Block a user