Compare commits
10 Commits
91c9a4bb91
...
3.7.0
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
505f8d6a36 | ||
| 26a2a9dc96 | |||
|
|
3e2e9196a2 | ||
| 338accdd22 | |||
|
|
e165c5fea0 | ||
| 8e32c5aaff | |||
|
|
420b971044 | ||
| 2c86390c7f | |||
| 4bcd542e7b | |||
| b09e2dc849 |
@@ -8,7 +8,44 @@ on:
|
|||||||
workflow_dispatch:
|
workflow_dispatch:
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
|
semantic-release:
|
||||||
|
runs-on: ubuntu-js
|
||||||
|
outputs:
|
||||||
|
new-release-published: ${{ steps.semantic.outputs.new-release-published }}
|
||||||
|
new-release-version: ${{ steps.semantic.outputs.new-release-version }}
|
||||||
|
new-release-git-tag: ${{ steps.semantic.outputs.new-release-git-tag }}
|
||||||
|
steps:
|
||||||
|
- name: Checkout
|
||||||
|
uses: actions/checkout@v6
|
||||||
|
with:
|
||||||
|
fetch-depth: 0
|
||||||
|
token: ${{ secrets.BOT_TOKEN }}
|
||||||
|
|
||||||
|
- name: Set up Node
|
||||||
|
uses: actions/setup-node@v6
|
||||||
|
with:
|
||||||
|
node-version: 24.14.0
|
||||||
|
|
||||||
|
- name: Set up Bun
|
||||||
|
uses: oven-sh/setup-bun@v2
|
||||||
|
with:
|
||||||
|
bun-version: 1.3.10
|
||||||
|
|
||||||
|
- name: Install Dependencies
|
||||||
|
run: bun install --frozen-lockfile
|
||||||
|
|
||||||
|
- name: Run Semantic Release
|
||||||
|
id: semantic
|
||||||
|
env:
|
||||||
|
GITEA_TOKEN: ${{ secrets.BOT_TOKEN }}
|
||||||
|
GITHUB_TOKEN: ${{ secrets.BOT_TOKEN }}
|
||||||
|
NODE_PATH: ${{ github.workspace }}/node_modules
|
||||||
|
run: |
|
||||||
|
bun run semantic-release
|
||||||
|
|
||||||
build:
|
build:
|
||||||
|
needs: semantic-release
|
||||||
|
if: ${{ needs.semantic-release.outputs.new-release-published == 'true' }}
|
||||||
runs-on: ubuntu-js
|
runs-on: ubuntu-js
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
@@ -61,6 +98,8 @@ jobs:
|
|||||||
image: true
|
image: true
|
||||||
|
|
||||||
guarddog:
|
guarddog:
|
||||||
|
needs: semantic-release
|
||||||
|
if: ${{ needs.semantic-release.outputs.new-release-published == 'true' }}
|
||||||
runs-on: ubuntu-js
|
runs-on: ubuntu-js
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
@@ -97,45 +136,9 @@ jobs:
|
|||||||
actions: '[{"action": "view", "label": "Open Gitea", "url": "https://gitea.alexlebens.dev/alexlebens/site-profile/actions?workflow=release-image.yaml", "clear": true}]'
|
actions: '[{"action": "view", "label": "Open Gitea", "url": "https://gitea.alexlebens.dev/alexlebens/site-profile/actions?workflow=release-image.yaml", "clear": true}]'
|
||||||
image: true
|
image: true
|
||||||
|
|
||||||
semantic-release:
|
|
||||||
needs: [ build, guarddog ]
|
|
||||||
runs-on: ubuntu-js
|
|
||||||
outputs:
|
|
||||||
new-release-published: ${{ steps.semantic.outputs.new-release-published }}
|
|
||||||
new-release-version: ${{ steps.semantic.outputs.new-release-version }}
|
|
||||||
new-release-git-tag: ${{ steps.semantic.outputs.new-release-git-tag }}
|
|
||||||
steps:
|
|
||||||
- name: Checkout
|
|
||||||
uses: actions/checkout@v6
|
|
||||||
with:
|
|
||||||
fetch-depth: 0
|
|
||||||
token: ${{ secrets.BOT_TOKEN }}
|
|
||||||
|
|
||||||
- name: Set up Node
|
|
||||||
uses: actions/setup-node@v6
|
|
||||||
with:
|
|
||||||
node-version: 24.14.0
|
|
||||||
|
|
||||||
- name: Set up Bun
|
|
||||||
uses: oven-sh/setup-bun@v2
|
|
||||||
with:
|
|
||||||
bun-version: 1.3.10
|
|
||||||
|
|
||||||
- name: Install Dependencies
|
|
||||||
run: bun install --frozen-lockfile
|
|
||||||
|
|
||||||
- name: Run Semantic Release
|
|
||||||
id: semantic
|
|
||||||
env:
|
|
||||||
GITEA_TOKEN: ${{ secrets.BOT_TOKEN }}
|
|
||||||
GITHUB_TOKEN: ${{ secrets.BOT_TOKEN }}
|
|
||||||
NODE_PATH: ${{ github.workspace }}/node_modules
|
|
||||||
run: |
|
|
||||||
bun run semantic-release
|
|
||||||
|
|
||||||
release-harbor:
|
release-harbor:
|
||||||
runs-on: ubuntu-js
|
runs-on: ubuntu-js
|
||||||
needs: semantic-release
|
needs: [semantic-release, build, guarddog, ]
|
||||||
if: ${{ needs.semantic-release.outputs.new-release-published == 'true' }}
|
if: ${{ needs.semantic-release.outputs.new-release-published == 'true' }}
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
@@ -237,10 +240,13 @@ jobs:
|
|||||||
|
|
||||||
release-gitea:
|
release-gitea:
|
||||||
runs-on: ubuntu-js
|
runs-on: ubuntu-js
|
||||||
needs: [ semantic-release, release-harbor ]
|
needs: [ semantic-release, build, guarddog, release-harbor ]
|
||||||
if: |
|
if: |
|
||||||
always() &&
|
always() &&
|
||||||
needs.semantic-release.outputs.new-release-published == 'true'
|
needs.semantic-release.result == 'success' &&
|
||||||
|
needs.semantic-release.outputs.new-release-published == 'true' &&
|
||||||
|
needs.build.result == 'success' &&
|
||||||
|
needs.guarddog.result == 'success'
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v6
|
uses: actions/checkout@v6
|
||||||
|
|||||||
@@ -1,17 +0,0 @@
|
|||||||
repos:
|
|
||||||
- repo: https://github.com/pre-commit/pre-commit-hooks
|
|
||||||
rev: v6.0.0
|
|
||||||
hooks:
|
|
||||||
- id: end-of-file-fixer
|
|
||||||
- id: trailing-whitespace
|
|
||||||
- id: check-merge-conflict
|
|
||||||
- id: check-json
|
|
||||||
- repo: https://github.com/pre-commit/mirrors-prettier
|
|
||||||
rev: v4.0.0-alpha.11
|
|
||||||
hooks:
|
|
||||||
- id: prettier
|
|
||||||
types_or: [javascript, typescript, css, scss, html, json, yaml, markdown]
|
|
||||||
additional_dependencies:
|
|
||||||
- prettier
|
|
||||||
- prettier-plugin-astro
|
|
||||||
- prettier-plugin-tailwindcss
|
|
||||||
277
CHANGELOG.md
277
CHANGELOG.md
@@ -0,0 +1,277 @@
|
|||||||
|
# [3.7.0](https://gitea.alexlebens.dev/alexlebens/site-profile/compare/3.6.0...3.7.0) (2026-03-12)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* incorrect name of step ([db79f91](https://gitea.alexlebens.dev/alexlebens/site-profile/commit/db79f912eeb4f3741945c95d42508451e9558c1e))
|
||||||
|
* use semantic release outputs ([578e166](https://gitea.alexlebens.dev/alexlebens/site-profile/commit/578e1661cd3966b9886c952dbb564d1a2290f5dc))
|
||||||
|
|
||||||
|
|
||||||
|
### Features
|
||||||
|
|
||||||
|
* add automation to release using release-please in workflows ([99032f7](https://gitea.alexlebens.dev/alexlebens/site-profile/commit/99032f7a62a88bd8310a0eacfa2ab03c17ed9685))
|
||||||
|
* add if to ignore harbor release result ([ce75e7c](https://gitea.alexlebens.dev/alexlebens/site-profile/commit/ce75e7ca5ec723c6a30f760f930d027012da6de9))
|
||||||
|
* add outputs of semantic release ([36eaa0c](https://gitea.alexlebens.dev/alexlebens/site-profile/commit/36eaa0c13264cfc9acfb311d4e9fba35ced95d39))
|
||||||
|
* add release branch, update and merge release workflow ([68f2080](https://gitea.alexlebens.dev/alexlebens/site-profile/commit/68f2080bdaa4b5a10a0d72657d511d287288e68c))
|
||||||
|
* add semantic release ([620b496](https://gitea.alexlebens.dev/alexlebens/site-profile/commit/620b496957e49aa5615c043dbebb31367df38aaf))
|
||||||
|
* add token ([e0a3d39](https://gitea.alexlebens.dev/alexlebens/site-profile/commit/e0a3d391b314717402b9577899c37c131a73c71d))
|
||||||
|
* change release format ([24c837c](https://gitea.alexlebens.dev/alexlebens/site-profile/commit/24c837cf84a2bffb2a9b44a6905f2cbdb58facc6))
|
||||||
|
* ignore on docs updates ([4b58117](https://gitea.alexlebens.dev/alexlebens/site-profile/commit/4b58117454109cbc3f40df0d1edc5185ca6415f0))
|
||||||
|
* install deps ([f32b75e](https://gitea.alexlebens.dev/alexlebens/site-profile/commit/f32b75e31d8ac4a3e55f86812bfa0790bfaede57))
|
||||||
|
* remove old release workflows ([7882c3e](https://gitea.alexlebens.dev/alexlebens/site-profile/commit/7882c3ecc763b2fe396e412d2ba81d7a0629bb11))
|
||||||
|
* remove release-please ([07fa86b](https://gitea.alexlebens.dev/alexlebens/site-profile/commit/07fa86b17cab585088e299aab081b122db386ade))
|
||||||
|
* setup node for semantic release ([bf3a7ef](https://gitea.alexlebens.dev/alexlebens/site-profile/commit/bf3a7ef261b437e877fd7c9d1a477dfac1ee0400))
|
||||||
|
* use different workflow for gitea ([1577ee4](https://gitea.alexlebens.dev/alexlebens/site-profile/commit/1577ee4c2791cb40d2af4b891e37c6c3f4db459a))
|
||||||
|
|
||||||
|
# [3.7.0](https://gitea.alexlebens.dev/alexlebens/site-profile/compare/3.6.0...3.7.0) (2026-03-12)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* incorrect name of step ([db79f91](https://gitea.alexlebens.dev/alexlebens/site-profile/commit/db79f912eeb4f3741945c95d42508451e9558c1e))
|
||||||
|
|
||||||
|
|
||||||
|
### Features
|
||||||
|
|
||||||
|
* add automation to release using release-please in workflows ([99032f7](https://gitea.alexlebens.dev/alexlebens/site-profile/commit/99032f7a62a88bd8310a0eacfa2ab03c17ed9685))
|
||||||
|
* add if to ignore harbor release result ([ce75e7c](https://gitea.alexlebens.dev/alexlebens/site-profile/commit/ce75e7ca5ec723c6a30f760f930d027012da6de9))
|
||||||
|
* add outputs of semantic release ([36eaa0c](https://gitea.alexlebens.dev/alexlebens/site-profile/commit/36eaa0c13264cfc9acfb311d4e9fba35ced95d39))
|
||||||
|
* add release branch, update and merge release workflow ([68f2080](https://gitea.alexlebens.dev/alexlebens/site-profile/commit/68f2080bdaa4b5a10a0d72657d511d287288e68c))
|
||||||
|
* add semantic release ([620b496](https://gitea.alexlebens.dev/alexlebens/site-profile/commit/620b496957e49aa5615c043dbebb31367df38aaf))
|
||||||
|
* add token ([e0a3d39](https://gitea.alexlebens.dev/alexlebens/site-profile/commit/e0a3d391b314717402b9577899c37c131a73c71d))
|
||||||
|
* change release format ([24c837c](https://gitea.alexlebens.dev/alexlebens/site-profile/commit/24c837cf84a2bffb2a9b44a6905f2cbdb58facc6))
|
||||||
|
* ignore on docs updates ([4b58117](https://gitea.alexlebens.dev/alexlebens/site-profile/commit/4b58117454109cbc3f40df0d1edc5185ca6415f0))
|
||||||
|
* install deps ([f32b75e](https://gitea.alexlebens.dev/alexlebens/site-profile/commit/f32b75e31d8ac4a3e55f86812bfa0790bfaede57))
|
||||||
|
* remove old release workflows ([7882c3e](https://gitea.alexlebens.dev/alexlebens/site-profile/commit/7882c3ecc763b2fe396e412d2ba81d7a0629bb11))
|
||||||
|
* remove release-please ([07fa86b](https://gitea.alexlebens.dev/alexlebens/site-profile/commit/07fa86b17cab585088e299aab081b122db386ade))
|
||||||
|
* setup node for semantic release ([bf3a7ef](https://gitea.alexlebens.dev/alexlebens/site-profile/commit/bf3a7ef261b437e877fd7c9d1a477dfac1ee0400))
|
||||||
|
* use different workflow for gitea ([1577ee4](https://gitea.alexlebens.dev/alexlebens/site-profile/commit/1577ee4c2791cb40d2af4b891e37c6c3f4db459a))
|
||||||
|
|
||||||
|
# [3.7.0](https://gitea.alexlebens.dev/alexlebens/site-profile/compare/3.6.0...3.7.0) (2026-03-12)
|
||||||
|
|
||||||
|
|
||||||
|
### Features
|
||||||
|
|
||||||
|
* add automation to release using release-please in workflows ([99032f7](https://gitea.alexlebens.dev/alexlebens/site-profile/commit/99032f7a62a88bd8310a0eacfa2ab03c17ed9685))
|
||||||
|
* add if to ignore harbor release result ([ce75e7c](https://gitea.alexlebens.dev/alexlebens/site-profile/commit/ce75e7ca5ec723c6a30f760f930d027012da6de9))
|
||||||
|
* add outputs of semantic release ([36eaa0c](https://gitea.alexlebens.dev/alexlebens/site-profile/commit/36eaa0c13264cfc9acfb311d4e9fba35ced95d39))
|
||||||
|
* add release branch, update and merge release workflow ([68f2080](https://gitea.alexlebens.dev/alexlebens/site-profile/commit/68f2080bdaa4b5a10a0d72657d511d287288e68c))
|
||||||
|
* add semantic release ([620b496](https://gitea.alexlebens.dev/alexlebens/site-profile/commit/620b496957e49aa5615c043dbebb31367df38aaf))
|
||||||
|
* add token ([e0a3d39](https://gitea.alexlebens.dev/alexlebens/site-profile/commit/e0a3d391b314717402b9577899c37c131a73c71d))
|
||||||
|
* change release format ([24c837c](https://gitea.alexlebens.dev/alexlebens/site-profile/commit/24c837cf84a2bffb2a9b44a6905f2cbdb58facc6))
|
||||||
|
* ignore on docs updates ([4b58117](https://gitea.alexlebens.dev/alexlebens/site-profile/commit/4b58117454109cbc3f40df0d1edc5185ca6415f0))
|
||||||
|
* install deps ([f32b75e](https://gitea.alexlebens.dev/alexlebens/site-profile/commit/f32b75e31d8ac4a3e55f86812bfa0790bfaede57))
|
||||||
|
* remove release-please ([07fa86b](https://gitea.alexlebens.dev/alexlebens/site-profile/commit/07fa86b17cab585088e299aab081b122db386ade))
|
||||||
|
* setup node for semantic release ([bf3a7ef](https://gitea.alexlebens.dev/alexlebens/site-profile/commit/bf3a7ef261b437e877fd7c9d1a477dfac1ee0400))
|
||||||
|
* use different workflow for gitea ([1577ee4](https://gitea.alexlebens.dev/alexlebens/site-profile/commit/1577ee4c2791cb40d2af4b891e37c6c3f4db459a))
|
||||||
|
|
||||||
|
# 1.0.0 (2026-03-12)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* add comments ([a0f83c8](https://gitea.alexlebens.dev/alexlebens/site-profile/commit/a0f83c874c8b4d66168ed54f93919ffaafe2250b))
|
||||||
|
* add env ([ea9ae01](https://gitea.alexlebens.dev/alexlebens/site-profile/commit/ea9ae016d706b03793a1f4218c9d407ed45e26a4))
|
||||||
|
* add paths ([976bc0c](https://gitea.alexlebens.dev/alexlebens/site-profile/commit/976bc0c413904bc5b8772a8e5674c1c92ae09eb4))
|
||||||
|
* add remote patterns for images ([ba73c1b](https://gitea.alexlebens.dev/alexlebens/site-profile/commit/ba73c1b24ff48acc2589b3e7ad1a104a9c813a9d))
|
||||||
|
* change selected count ([fe38992](https://gitea.alexlebens.dev/alexlebens/site-profile/commit/fe3899242a0e2c951371f42561705ec8d2fa1093))
|
||||||
|
* clean up comments ([4d7886b](https://gitea.alexlebens.dev/alexlebens/site-profile/commit/4d7886b93c78e89e3fa49d122573fc1a2d4feb39))
|
||||||
|
* command order ([0a2979e](https://gitea.alexlebens.dev/alexlebens/site-profile/commit/0a2979ecfef952826138c0095ff917ac8926aedb))
|
||||||
|
* correct credentials ([1a34b93](https://gitea.alexlebens.dev/alexlebens/site-profile/commit/1a34b932b06b410e47653eb98e03cca06385bd14))
|
||||||
|
* correct matchhost ([882063e](https://gitea.alexlebens.dev/alexlebens/site-profile/commit/882063ea43004d26ccb6b6ccc706d99e4ef7f4be))
|
||||||
|
* create new Date to compare posts ([01ee8fa](https://gitea.alexlebens.dev/alexlebens/site-profile/commit/01ee8fac98b5bb110670860cf87b1aa3e1b52a9a))
|
||||||
|
* debug logs ([8d5c02e](https://gitea.alexlebens.dev/alexlebens/site-profile/commit/8d5c02e2d124d7b9c82e03f01b93ac5f8074335d))
|
||||||
|
* **deps:** update astro monorepo ([ef810ef](https://gitea.alexlebens.dev/alexlebens/site-profile/commit/ef810efd24a3bfb09ab0dd82fdd144ff92e9e7ef))
|
||||||
|
* **deps:** update dependency shiki to v4 ([da28e5b](https://gitea.alexlebens.dev/alexlebens/site-profile/commit/da28e5b50e60b4e01a7c9ec98297d272945cb1ce))
|
||||||
|
* downgrade python ([7a77f0d](https://gitea.alexlebens.dev/alexlebens/site-profile/commit/7a77f0d2d2489707bbf5cc815a531282393fa5eb))
|
||||||
|
* fix footer accent color ([9eb0f37](https://gitea.alexlebens.dev/alexlebens/site-profile/commit/9eb0f37cb2c8dce3602616e490a6214adb6f2f10))
|
||||||
|
* fix lint error ([4c4421c](https://gitea.alexlebens.dev/alexlebens/site-profile/commit/4c4421c8a897ea54472c3dd1696bcf0dc0ec4e3b))
|
||||||
|
* force 3d scaling for button transform ([959d3bd](https://gitea.alexlebens.dev/alexlebens/site-profile/commit/959d3bd71d3c6ed3fc34196ff2edaee0441a36c5))
|
||||||
|
* hidden button background color on light mode, darken ([0d87af3](https://gitea.alexlebens.dev/alexlebens/site-profile/commit/0d87af3aca5e10f13358e480aa56f860ff0ae211))
|
||||||
|
* info logs ([c927235](https://gitea.alexlebens.dev/alexlebens/site-profile/commit/c927235a5aeb6e6d600eb4de78d4144dd7853d21))
|
||||||
|
* install and run ([e29631c](https://gitea.alexlebens.dev/alexlebens/site-profile/commit/e29631c4af2d87d0e3518751d0e6327006d4e38d))
|
||||||
|
* move host rules to workflow ([ba2477e](https://gitea.alexlebens.dev/alexlebens/site-profile/commit/ba2477e7af9ab97045c836634de57384e199f881))
|
||||||
|
* only binary ([31aad55](https://gitea.alexlebens.dev/alexlebens/site-profile/commit/31aad5511fbf288991e5eab1551204fc9513e253))
|
||||||
|
* padding, margin, and width issues ([6d3f3a4](https://gitea.alexlebens.dev/alexlebens/site-profile/commit/6d3f3a49ab80c7c49c0552fc18c09cff2a34be57))
|
||||||
|
* path ([d9833e1](https://gitea.alexlebens.dev/alexlebens/site-profile/commit/d9833e1c27c5b60d4dd1e180e4108623639d6681))
|
||||||
|
* remove argument ([093e1e2](https://gitea.alexlebens.dev/alexlebens/site-profile/commit/093e1e2ccb55085f34595ffccecf322f9bba4199))
|
||||||
|
* remove border from blog cards ([875b8a7](https://gitea.alexlebens.dev/alexlebens/site-profile/commit/875b8a7f47698cb397992dbedf48b1d1a35c0cfa))
|
||||||
|
* remove description ([c2bf64c](https://gitea.alexlebens.dev/alexlebens/site-profile/commit/c2bf64c6ccdf52345f3eecf52b59d472fde372da))
|
||||||
|
* remove errant semicolon ([1ddc76a](https://gitea.alexlebens.dev/alexlebens/site-profile/commit/1ddc76ae693d6903226ae6ffef635d9ed3adad4f))
|
||||||
|
* remove unused property ([3d9120c](https://gitea.alexlebens.dev/alexlebens/site-profile/commit/3d9120c5700244137427b929c360920e7227ad6d))
|
||||||
|
* run theme on page swap ([c4be465](https://gitea.alexlebens.dev/alexlebens/site-profile/commit/c4be4653bea0b4101cfbe20c082b3268c01ddba8))
|
||||||
|
* update lock ([fb8f642](https://gitea.alexlebens.dev/alexlebens/site-profile/commit/fb8f642c52fe82469e4bc3b41f8b62ca5ca80e46))
|
||||||
|
* use uvx ([c3e4519](https://gitea.alexlebens.dev/alexlebens/site-profile/commit/c3e4519682599bafe0c9857be90937542be31fd8))
|
||||||
|
|
||||||
|
|
||||||
|
### Features
|
||||||
|
|
||||||
|
* add additional layout for small screens ([890dbdf](https://gitea.alexlebens.dev/alexlebens/site-profile/commit/890dbdf313c4596e73734fdca5376c86d4cdc852))
|
||||||
|
* add an all page with cards to link to it ([7327795](https://gitea.alexlebens.dev/alexlebens/site-profile/commit/7327795d394f05039a3e0fe0e6615453138bcd6a))
|
||||||
|
* add applications page ([9678b3c](https://gitea.alexlebens.dev/alexlebens/site-profile/commit/9678b3c7185b166d710ab7e0a83cdbdc89cc0ff6))
|
||||||
|
* add automation to release using release-please in workflows ([99032f7](https://gitea.alexlebens.dev/alexlebens/site-profile/commit/99032f7a62a88bd8310a0eacfa2ab03c17ed9685))
|
||||||
|
* add background shimmer effect, use mask for content scroll fade ([5e37e2b](https://gitea.alexlebens.dev/alexlebens/site-profile/commit/5e37e2bb539a8d35bd3de3c47f0b2c5d227197c5))
|
||||||
|
* add category logo to blog page ([5b94283](https://gitea.alexlebens.dev/alexlebens/site-profile/commit/5b94283498131c4265b7f5bb364d81e8ff642a88))
|
||||||
|
* add client:load ([ceb70c7](https://gitea.alexlebens.dev/alexlebens/site-profile/commit/ceb70c70491d7075cd744a12158bf6a9bf7da367))
|
||||||
|
* add creds for dhi ([8797864](https://gitea.alexlebens.dev/alexlebens/site-profile/commit/879786484d10a6be14e1cb7a5a6d28ebb6b1a95f))
|
||||||
|
* add dark mode logo ([f984a1f](https://gitea.alexlebens.dev/alexlebens/site-profile/commit/f984a1f759b14e11c9d9ccd3d389ee3b4cd94d67))
|
||||||
|
* add dark mode swap to logo ([97b1fa0](https://gitea.alexlebens.dev/alexlebens/site-profile/commit/97b1fa0316dff19bbfc8e34041826fb95b71f2d8))
|
||||||
|
* add dates to selected ([091af90](https://gitea.alexlebens.dev/alexlebens/site-profile/commit/091af909d49c31568edd00b195c10f4b45c843db))
|
||||||
|
* add docker login ([a8d6446](https://gitea.alexlebens.dev/alexlebens/site-profile/commit/a8d6446674d872456952146f0b31562f41a873f8))
|
||||||
|
* add docs link to footer ([22860c4](https://gitea.alexlebens.dev/alexlebens/site-profile/commit/22860c4714c353f407ad0e2383976819a059c232))
|
||||||
|
* add gap to distinguish ([f030da5](https://gitea.alexlebens.dev/alexlebens/site-profile/commit/f030da549ead68a2334ed70ae32b6c19ef686a93))
|
||||||
|
* add gap to header above md ([d3b2b40](https://gitea.alexlebens.dev/alexlebens/site-profile/commit/d3b2b40ccbbac494a02cddc1944d698627abcc6f))
|
||||||
|
* add guarddog scan to workflow ([14f7bdc](https://gitea.alexlebens.dev/alexlebens/site-profile/commit/14f7bdc024868a02566b00bf2a3b52c74a210788))
|
||||||
|
* add if to ignore harbor release result ([ce75e7c](https://gitea.alexlebens.dev/alexlebens/site-profile/commit/ce75e7ca5ec723c6a30f760f930d027012da6de9))
|
||||||
|
* add logos to category cards ([4c1da43](https://gitea.alexlebens.dev/alexlebens/site-profile/commit/4c1da43c6833a5e36e52a39fcbe93d2a2422418e))
|
||||||
|
* add logos to category header pages ([d7d4336](https://gitea.alexlebens.dev/alexlebens/site-profile/commit/d7d43369dc239af1775d99b631fb86368bcac102))
|
||||||
|
* add margin to bring in the content ([fa618b0](https://gitea.alexlebens.dev/alexlebens/site-profile/commit/fa618b0524912eab62a670b926d70c1d29968780))
|
||||||
|
* add photoswipe to view images embeded in posts ([ae57c60](https://gitea.alexlebens.dev/alexlebens/site-profile/commit/ae57c6093599f3bb0b6bc6b0856a96fab997e1f6))
|
||||||
|
* add release branch, update and merge release workflow ([68f2080](https://gitea.alexlebens.dev/alexlebens/site-profile/commit/68f2080bdaa4b5a10a0d72657d511d287288e68c))
|
||||||
|
* add rounded option to hero component and use it for about page ([95432d9](https://gitea.alexlebens.dev/alexlebens/site-profile/commit/95432d9059cc05afc1a97033e42d7a4322c27a54))
|
||||||
|
* add rybbit tracking ([efad6c3](https://gitea.alexlebens.dev/alexlebens/site-profile/commit/efad6c30d1387d97b74286d1dec158998b90c047))
|
||||||
|
* add scroll reset on navigation ([07c7ede](https://gitea.alexlebens.dev/alexlebens/site-profile/commit/07c7edeb0f49fd082d109f85f3407c41ee1924ca))
|
||||||
|
* add security feature ([a7e7e5b](https://gitea.alexlebens.dev/alexlebens/site-profile/commit/a7e7e5b0e803b604801ed7aee0bdcd81781c612f))
|
||||||
|
* add semantic release ([620b496](https://gitea.alexlebens.dev/alexlebens/site-profile/commit/620b496957e49aa5615c043dbebb31367df38aaf))
|
||||||
|
* add shiki to markdown rendering for code highlighting ([b7f76c5](https://gitea.alexlebens.dev/alexlebens/site-profile/commit/b7f76c584752942d0beaec5f8d815dbe139dd1c1))
|
||||||
|
* add thanks for Icons8 ([6cddae6](https://gitea.alexlebens.dev/alexlebens/site-profile/commit/6cddae61ed40a4f30d121d8f054749c09ee4be59))
|
||||||
|
* add token ([e0a3d39](https://gitea.alexlebens.dev/alexlebens/site-profile/commit/e0a3d391b314717402b9577899c37c131a73c71d))
|
||||||
|
* add weather widget ([b6dfc73](https://gitea.alexlebens.dev/alexlebens/site-profile/commit/b6dfc738f15737937fbc6dd438d173c0f4b1e526))
|
||||||
|
* adjust height of fade effect ([7498870](https://gitea.alexlebens.dev/alexlebens/site-profile/commit/7498870d9221e8f2e403596cfdcb916a59e6bd4f))
|
||||||
|
* adjust layout of recent posts ([568220d](https://gitea.alexlebens.dev/alexlebens/site-profile/commit/568220d39c4ede230b512b18eb28dc46d941dcca))
|
||||||
|
* adjustment pass on spacing between sections ([b3c377f](https://gitea.alexlebens.dev/alexlebens/site-profile/commit/b3c377f62dbaf2f6f5e38dc5f023023db42e8baf))
|
||||||
|
* better reactive layout for small screen sizes ([56d841a](https://gitea.alexlebens.dev/alexlebens/site-profile/commit/56d841a3358df55b59b310247a4b862827ca116c))
|
||||||
|
* change cache path ([30b2e98](https://gitea.alexlebens.dev/alexlebens/site-profile/commit/30b2e980c0c6d13e8b66de99ee7f811110999360))
|
||||||
|
* change responsive height of image ([e25a3d0](https://gitea.alexlebens.dev/alexlebens/site-profile/commit/e25a3d0189941cb640c18d423d2b168975a7fd38))
|
||||||
|
* change selected blogs to switch to card form on small screens ([44bd1e4](https://gitea.alexlebens.dev/alexlebens/site-profile/commit/44bd1e48100dbeecdeecad1c2111cfdb3fd144e7))
|
||||||
|
* consistent gaps and margins ([05d7ad6](https://gitea.alexlebens.dev/alexlebens/site-profile/commit/05d7ad6557da8aa190396361c57e6534bf02cc2d))
|
||||||
|
* convert hero section to use randomly selected images stored in directus ([c9cb15f](https://gitea.alexlebens.dev/alexlebens/site-profile/commit/c9cb15f201136c0579bf44106e70efafbda2e0a6))
|
||||||
|
* convert to bun ([1f2820e](https://gitea.alexlebens.dev/alexlebens/site-profile/commit/1f2820e4b49f827018a2cc1624cc9921a0a48241))
|
||||||
|
* disable ([1573331](https://gitea.alexlebens.dev/alexlebens/site-profile/commit/1573331f8775aebff7aa9fee896bdc0dd468c16b))
|
||||||
|
* disable security feature ([04dfecc](https://gitea.alexlebens.dev/alexlebens/site-profile/commit/04dfecc099f4e319e6a673bcb1e774bdd07bc73e))
|
||||||
|
* enable cache ([16e14f6](https://gitea.alexlebens.dev/alexlebens/site-profile/commit/16e14f63efdfabbca6a31e66495761eb53bb755d))
|
||||||
|
* enable guarddog ([19e8080](https://gitea.alexlebens.dev/alexlebens/site-profile/commit/19e80809c16f6d30653d1e181fffa84bf4a4ffa1))
|
||||||
|
* enable security feature ([0434480](https://gitea.alexlebens.dev/alexlebens/site-profile/commit/04344808bdd9a22f3c8ac4c21dec16e71b398b59))
|
||||||
|
* final refactor of sections ([a74cc77](https://gitea.alexlebens.dev/alexlebens/site-profile/commit/a74cc775d027c95dd989355126d74a3bc2502ef5))
|
||||||
|
* hide cards on small screens ([e2f5bbb](https://gitea.alexlebens.dev/alexlebens/site-profile/commit/e2f5bbbe9cefd893a40cbd9f14ce819da8ab1c0e))
|
||||||
|
* ignore on docs updates ([4b58117](https://gitea.alexlebens.dev/alexlebens/site-profile/commit/4b58117454109cbc3f40df0d1edc5185ca6415f0))
|
||||||
|
* imporve theme toggle button ([a09a4ee](https://gitea.alexlebens.dev/alexlebens/site-profile/commit/a09a4ee2404a5621568e141d32929353a78e750c))
|
||||||
|
* imporvement pass over sections ([8a649b7](https://gitea.alexlebens.dev/alexlebens/site-profile/commit/8a649b7647804a63013bc9a44485f36e60dfdb7f))
|
||||||
|
* improve behavior of showmore, fix alignment ([7f2a272](https://gitea.alexlebens.dev/alexlebens/site-profile/commit/7f2a27248a986a1e8921269862220d82d75f89cf))
|
||||||
|
* improve layout for single and two images ([e6d4e34](https://gitea.alexlebens.dev/alexlebens/site-profile/commit/e6d4e34a0a55260c0f2ee1d166cb6eabcf8f1f61))
|
||||||
|
* improve logos and clickability of cards on about and apps ([63cbcdf](https://gitea.alexlebens.dev/alexlebens/site-profile/commit/63cbcdf39b1e07a6307c6ab27d75f8edd4902e5b))
|
||||||
|
* improve navbar, add opacity fade beneath, layout, and refactor ([5ac23f0](https://gitea.alexlebens.dev/alexlebens/site-profile/commit/5ac23f08a4e4519ac7179ec916fdc91abca5883a))
|
||||||
|
* install deps ([f32b75e](https://gitea.alexlebens.dev/alexlebens/site-profile/commit/f32b75e31d8ac4a3e55f86812bfa0790bfaede57))
|
||||||
|
* major refactor of cards to standardize styles ([104fe35](https://gitea.alexlebens.dev/alexlebens/site-profile/commit/104fe35ee8d6801d4cf1e6cfe4ad5bb9ff42d2a0))
|
||||||
|
* make cards fixed height ([9dfcf6f](https://gitea.alexlebens.dev/alexlebens/site-profile/commit/9dfcf6f00698b472753b96117c59a5f8e1c536ea))
|
||||||
|
* make weather fetching dynamic ([7f7f710](https://gitea.alexlebens.dev/alexlebens/site-profile/commit/7f7f710fe84eca8fbcadc9566f56942f63224d36))
|
||||||
|
* markdown support for rss ([6156012](https://gitea.alexlebens.dev/alexlebens/site-profile/commit/6156012c0068cb26ee5aad1045b7f8da04412092))
|
||||||
|
* minor tweaks ([d42ba08](https://gitea.alexlebens.dev/alexlebens/site-profile/commit/d42ba0804197e0f1813aff9178e001a4c5deded1))
|
||||||
|
* move all categories card to bottom of category section ([2fbc9a7](https://gitea.alexlebens.dev/alexlebens/site-profile/commit/2fbc9a764f6b93a088c46b88d6cbd9a0ad9a1152))
|
||||||
|
* move all posts to bottom of recent section ([940342c](https://gitea.alexlebens.dev/alexlebens/site-profile/commit/940342cc3f07a0002da4596d7f7047010faf0f96))
|
||||||
|
* move categories to directus ([93bf44f](https://gitea.alexlebens.dev/alexlebens/site-profile/commit/93bf44f89ab093563c58c5ce1f9bec530c852a87))
|
||||||
|
* move directus to local endpoint ([197ad63](https://gitea.alexlebens.dev/alexlebens/site-profile/commit/197ad63ada2e5a2335b4e0984bbdf8ee96d07b2f))
|
||||||
|
* move improved components out of ui folder ([47a6373](https://gitea.alexlebens.dev/alexlebens/site-profile/commit/47a637353cfe34d95558490474968e40c9d779c3))
|
||||||
|
* move post metadata to snippet component ([cc8bade](https://gitea.alexlebens.dev/alexlebens/site-profile/commit/cc8bade886fee861f9ab7ad1d54fd5415ab2ec7b))
|
||||||
|
* move url configuration to support file ([6f1728a](https://gitea.alexlebens.dev/alexlebens/site-profile/commit/6f1728a909c4b33a52a31677aeff29c9b5a83261))
|
||||||
|
* organize footer to consistency ([c6f3179](https://gitea.alexlebens.dev/alexlebens/site-profile/commit/c6f3179efba8920efed80e03eca09a3016d2ac16))
|
||||||
|
* organize layout to consistency ([8270728](https://gitea.alexlebens.dev/alexlebens/site-profile/commit/8270728e8fbf51b429617fbb6f14369791f58de5))
|
||||||
|
* organize to consistency ([21085a1](https://gitea.alexlebens.dev/alexlebens/site-profile/commit/21085a1620687f60006cabcb9eef233768e286ea))
|
||||||
|
* organize to consistency ([62dd636](https://gitea.alexlebens.dev/alexlebens/site-profile/commit/62dd636d4ee0b4a4fb0d4e8f10b50171aa694f15))
|
||||||
|
* organize to consistency ([0497731](https://gitea.alexlebens.dev/alexlebens/site-profile/commit/0497731c455158e09e7bd876fb8237910ce47826))
|
||||||
|
* organize to consistency ([6c2c6da](https://gitea.alexlebens.dev/alexlebens/site-profile/commit/6c2c6da91d94b04448f2b744414adeabdd6bec1c))
|
||||||
|
* organize to consistency pass on sections ([429cf94](https://gitea.alexlebens.dev/alexlebens/site-profile/commit/429cf9402313d97feb486a91729fbf33f10160ca))
|
||||||
|
* redo how images, icons, and logos are handled ([76dfef4](https://gitea.alexlebens.dev/alexlebens/site-profile/commit/76dfef41774182ca4a3ec8ae36542c786a2a08b2))
|
||||||
|
* redo layout, smaller and with logo ([3414535](https://gitea.alexlebens.dev/alexlebens/site-profile/commit/341453510fe707ecd2892a34e3af1eb295630d4d))
|
||||||
|
* reduce scale effect ([b8379bb](https://gitea.alexlebens.dev/alexlebens/site-profile/commit/b8379bbc38dae300e25caab2c1e77b993744cc20))
|
||||||
|
* refactor blog components ([6423ffb](https://gitea.alexlebens.dev/alexlebens/site-profile/commit/6423ffba639130cafd9d7d526588a6b707f81687))
|
||||||
|
* refactor buttons, except for theme ([342ae89](https://gitea.alexlebens.dev/alexlebens/site-profile/commit/342ae8900af878b9ae77f82cf95eca62ad67a1d5))
|
||||||
|
* refactor how blog cards layout, add metadata, better responsiveness ([265fd4f](https://gitea.alexlebens.dev/alexlebens/site-profile/commit/265fd4f2cbe064c2d4a4f7b063b65b1ec623fa95))
|
||||||
|
* refactor pass along pages ([e52d85f](https://gitea.alexlebens.dev/alexlebens/site-profile/commit/e52d85f9314fbb8b6aeb0667bcec8e475c1b2c5d))
|
||||||
|
* release 2.10.0 ([fcd3057](https://gitea.alexlebens.dev/alexlebens/site-profile/commit/fcd3057f40d1198012fba2754d95fb2109b2bcd4))
|
||||||
|
* release 2.10.1 ([2cdef1a](https://gitea.alexlebens.dev/alexlebens/site-profile/commit/2cdef1a5533da355daf4934d3e2a383ae65bfa4a))
|
||||||
|
* release 2.11.0 ([440c952](https://gitea.alexlebens.dev/alexlebens/site-profile/commit/440c95224d9f5c6e9fdaff7e7d663ca87aa358fc))
|
||||||
|
* release 2.12.0 ([1a8473b](https://gitea.alexlebens.dev/alexlebens/site-profile/commit/1a8473b96483bbac6ad26904916ecb2226e8243c))
|
||||||
|
* release 2.13.0 ([2c9486f](https://gitea.alexlebens.dev/alexlebens/site-profile/commit/2c9486f6872a1b2126661a0c5a44c1f1e68bf6c2))
|
||||||
|
* release 2.13.1 ([db2711d](https://gitea.alexlebens.dev/alexlebens/site-profile/commit/db2711d8782977c639f031ac24213c356d05de57))
|
||||||
|
* release 2.14.0 ([0416ab7](https://gitea.alexlebens.dev/alexlebens/site-profile/commit/0416ab7f9e299cbcaede6372f396a3f25bde12aa))
|
||||||
|
* release 2.14.1 ([d415dda](https://gitea.alexlebens.dev/alexlebens/site-profile/commit/d415dda6615cfc6b79e27212846e9b176a016ed9))
|
||||||
|
* release 2.15.0 ([f3b8d10](https://gitea.alexlebens.dev/alexlebens/site-profile/commit/f3b8d101064ebe4b6cf1adb17145156dbe2a209b))
|
||||||
|
* release 2.15.1 ([c5cda00](https://gitea.alexlebens.dev/alexlebens/site-profile/commit/c5cda006bb24b326e1d18a650689ba0590afd5db))
|
||||||
|
* release 2.16.0 ([c69eb58](https://gitea.alexlebens.dev/alexlebens/site-profile/commit/c69eb58a49bf99a8063b8d33118ac2a77febf9dc))
|
||||||
|
* release 2.17.0 ([d19433a](https://gitea.alexlebens.dev/alexlebens/site-profile/commit/d19433ae4eedaa2fec3dcc0e839e6b08035d6f5d))
|
||||||
|
* release 2.17.1 ([cc5e975](https://gitea.alexlebens.dev/alexlebens/site-profile/commit/cc5e975ea6adaa8acb8625de91091eb914ec67ce))
|
||||||
|
* release 2.17.2 ([469d9ba](https://gitea.alexlebens.dev/alexlebens/site-profile/commit/469d9ba3f723c2d085dd3bda829291ef59c5a879))
|
||||||
|
* release 2.18.0 ([ddbcb33](https://gitea.alexlebens.dev/alexlebens/site-profile/commit/ddbcb338123ada672c90610ad40f9df578acbab6))
|
||||||
|
* release 2.18.1 ([62066c6](https://gitea.alexlebens.dev/alexlebens/site-profile/commit/62066c6f3bdc7c0d9fa9cf9bf636310a60b6f045))
|
||||||
|
* release 2.19.0 ([6ddc382](https://gitea.alexlebens.dev/alexlebens/site-profile/commit/6ddc382dac0647231a60a976d351563368d0ffdc))
|
||||||
|
* release 2.19.1 ([f4676d1](https://gitea.alexlebens.dev/alexlebens/site-profile/commit/f4676d151fa288175db792288bbdb86bc044a822))
|
||||||
|
* release 2.20.0 ([2c20770](https://gitea.alexlebens.dev/alexlebens/site-profile/commit/2c2077053bb6bff438d312c4e9df1a9764e30c90))
|
||||||
|
* release 2.20.1 ([95ea235](https://gitea.alexlebens.dev/alexlebens/site-profile/commit/95ea235f9f4dd1bbdcb0c6b95c437c4703c77726))
|
||||||
|
* release 2.21.0 ([89fd0eb](https://gitea.alexlebens.dev/alexlebens/site-profile/commit/89fd0eb7ce5cfc3b433c9a6ef11299976c94640c))
|
||||||
|
* release 2.22.0 ([8b07837](https://gitea.alexlebens.dev/alexlebens/site-profile/commit/8b07837c0d2ce15cf0243564dc51e863faa6cb9c))
|
||||||
|
* release 2.23.0 ([50f050c](https://gitea.alexlebens.dev/alexlebens/site-profile/commit/50f050c0b6db2affc331178b1a5e84fb74346635))
|
||||||
|
* release 2.24.0 ([ce9c9c3](https://gitea.alexlebens.dev/alexlebens/site-profile/commit/ce9c9c38574d907ea4c72f90e68d705c1f2f507f))
|
||||||
|
* release 2.25.0 ([e91ffd8](https://gitea.alexlebens.dev/alexlebens/site-profile/commit/e91ffd8686381c4e0ea39c13b4d05b3644f90799))
|
||||||
|
* release 2.3.0 ([bf73905](https://gitea.alexlebens.dev/alexlebens/site-profile/commit/bf7390565846c3629edf4dc3a2daa00509478d15))
|
||||||
|
* release 2.3.2 ([49969e2](https://gitea.alexlebens.dev/alexlebens/site-profile/commit/49969e27b0884b166f521e1b44d461551eebcdfd))
|
||||||
|
* release 2.4.0 ([d0ff16c](https://gitea.alexlebens.dev/alexlebens/site-profile/commit/d0ff16c8dc13aaa4ca390684bea495f95914de04))
|
||||||
|
* release 2.5.0 ([880bafd](https://gitea.alexlebens.dev/alexlebens/site-profile/commit/880bafd41ec25223c770148cb32e4b651c3997d2))
|
||||||
|
* release 2.6.0 ([3f5682f](https://gitea.alexlebens.dev/alexlebens/site-profile/commit/3f5682f80ca4ee0c857bc335d8729f7c28d4c038))
|
||||||
|
* release 2.7.0 ([00ef91b](https://gitea.alexlebens.dev/alexlebens/site-profile/commit/00ef91b644fbc96a0fc76ab7460c3619c5db76ae))
|
||||||
|
* release 2.8.0 ([a57f43e](https://gitea.alexlebens.dev/alexlebens/site-profile/commit/a57f43e082fb43d438c058990bd245b62cd11bba))
|
||||||
|
* release 2.9.0 ([0f403fa](https://gitea.alexlebens.dev/alexlebens/site-profile/commit/0f403fa274566ad0e08b04d6566f2f922134e92a))
|
||||||
|
* release 3.0.0, major astro update to 6.0 ([962f354](https://gitea.alexlebens.dev/alexlebens/site-profile/commit/962f3542089a96ffaf583c716d21ca9ccc0e26e4))
|
||||||
|
* release 3.2.0 ([ec10d45](https://gitea.alexlebens.dev/alexlebens/site-profile/commit/ec10d45fd0d73affd240eaea8b87c74c5e262bb6))
|
||||||
|
* release 3.3.0 ([8184d42](https://gitea.alexlebens.dev/alexlebens/site-profile/commit/8184d429421462d9e991129874293ed86e30a49a))
|
||||||
|
* release 3.5.0 ([6ec2734](https://gitea.alexlebens.dev/alexlebens/site-profile/commit/6ec27345c3e920be11e055e2eb370cecd4a6e651))
|
||||||
|
* release 3.6.0 ([03f74a8](https://gitea.alexlebens.dev/alexlebens/site-profile/commit/03f74a8181c429eeb69ebdcec6bc23ad11c6bd00))
|
||||||
|
* remove emoji ([734e9ca](https://gitea.alexlebens.dev/alexlebens/site-profile/commit/734e9cacaefad037c059decc41a7576315096a61))
|
||||||
|
* remove extra spacing ([5877086](https://gitea.alexlebens.dev/alexlebens/site-profile/commit/5877086cc3935378681035920138a708a919d374))
|
||||||
|
* remove hardcoded descriptions ([754f6a2](https://gitea.alexlebens.dev/alexlebens/site-profile/commit/754f6a22f00a9e19cfdc5ace2632977530be8a57))
|
||||||
|
* remove hardcoded descriptions ([c7d3ca7](https://gitea.alexlebens.dev/alexlebens/site-profile/commit/c7d3ca725248cf5faf9c3f2b8c92816b892e02e9))
|
||||||
|
* remove mdx ([4203b63](https://gitea.alexlebens.dev/alexlebens/site-profile/commit/4203b638930daa3fce44de0d81c8e01bea601c01))
|
||||||
|
* remove option ([19e17ea](https://gitea.alexlebens.dev/alexlebens/site-profile/commit/19e17ea94713b017f392eab90a982c29debf2eae))
|
||||||
|
* remove partytown int ([b55c3a0](https://gitea.alexlebens.dev/alexlebens/site-profile/commit/b55c3a0e3151614cd400194922f1ac506202377d))
|
||||||
|
* remove partytown int ([e63abf0](https://gitea.alexlebens.dev/alexlebens/site-profile/commit/e63abf03ef1d8dbc2f81fade07bd7058bd8777dd))
|
||||||
|
* remove release-please ([07fa86b](https://gitea.alexlebens.dev/alexlebens/site-profile/commit/07fa86b17cab585088e299aab081b122db386ade))
|
||||||
|
* remove security feature ([5e02443](https://gitea.alexlebens.dev/alexlebens/site-profile/commit/5e02443409996b763f8dd4bc5c4e96ed38cc9083))
|
||||||
|
* remove static robots ([4dbc5d1](https://gitea.alexlebens.dev/alexlebens/site-profile/commit/4dbc5d12a3c5bf60e4efe4d33ab9d9c8baa62b87))
|
||||||
|
* remove text-justify from content ([a45a4d7](https://gitea.alexlebens.dev/alexlebens/site-profile/commit/a45a4d7dd7535ea67e738b028d87d7854165b8b3))
|
||||||
|
* remove unused files ([00a86b1](https://gitea.alexlebens.dev/alexlebens/site-profile/commit/00a86b120624f81d4f4b4cff9aa89510f7fa90eb))
|
||||||
|
* remove unused packages ([505670d](https://gitea.alexlebens.dev/alexlebens/site-profile/commit/505670dbf81bbf4b8306520e0df0683cfaea44db))
|
||||||
|
* remove unused properties ([0a17e3b](https://gitea.alexlebens.dev/alexlebens/site-profile/commit/0a17e3b8af679df1624118bf7dea95e5fd877123))
|
||||||
|
* rename button components to include button in name for consistency ([5271be5](https://gitea.alexlebens.dev/alexlebens/site-profile/commit/5271be52a22d536f7b6662d4ebab98413f9e4dcd))
|
||||||
|
* reorganize blog layout ([1f3fed9](https://gitea.alexlebens.dev/alexlebens/site-profile/commit/1f3fed93a15101e26e766b34d906ddb7853b2a90))
|
||||||
|
* replace timeago with dayjs ([405fdf2](https://gitea.alexlebens.dev/alexlebens/site-profile/commit/405fdf297cf5d57e499a600253741bfdd891cdd2))
|
||||||
|
* responsive for small screen ([5b6b6e4](https://gitea.alexlebens.dev/alexlebens/site-profile/commit/5b6b6e479f0c164ccc365587c669ea02850743a8))
|
||||||
|
* reword titles and descriptions ([68f1794](https://gitea.alexlebens.dev/alexlebens/site-profile/commit/68f179456a6c677f5a900db984a58c6b0422ea3e))
|
||||||
|
* scale logos ([0fc359a](https://gitea.alexlebens.dev/alexlebens/site-profile/commit/0fc359a973e0d7b2de191b76d828f89f3e6fe694))
|
||||||
|
* setup node ([113f42c](https://gitea.alexlebens.dev/alexlebens/site-profile/commit/113f42ca21d2a917b527e65d61934e34d5628b1a))
|
||||||
|
* setup node for semantic release ([bf3a7ef](https://gitea.alexlebens.dev/alexlebens/site-profile/commit/bf3a7ef261b437e877fd7c9d1a477dfac1ee0400))
|
||||||
|
* shorten transition time ([3eae720](https://gitea.alexlebens.dev/alexlebens/site-profile/commit/3eae720221fb5b895942589e3ac5b1cd9825b426))
|
||||||
|
* simplify layout of the features cards ([31621e4](https://gitea.alexlebens.dev/alexlebens/site-profile/commit/31621e4f7efe5f0bfe394453f24d8120ff6f2ade))
|
||||||
|
* slight optimization ([fe6604a](https://gitea.alexlebens.dev/alexlebens/site-profile/commit/fe6604a5d993c516d542a5988b78f78e123241ea))
|
||||||
|
* tweak to gradient ([20d8c73](https://gitea.alexlebens.dev/alexlebens/site-profile/commit/20d8c7323f81a6801b7fc77b10351d3f4a24d8de))
|
||||||
|
* tweaks to background to be more pastel ([ea15224](https://gitea.alexlebens.dev/alexlebens/site-profile/commit/ea15224eae8b3771f8d5cd5eb68809b12336d016))
|
||||||
|
* update BaseHead ([18211ad](https://gitea.alexlebens.dev/alexlebens/site-profile/commit/18211ad4852ac0a0cb25d82309f91746f27ba0a1))
|
||||||
|
* update features ([7fafa5c](https://gitea.alexlebens.dev/alexlebens/site-profile/commit/7fafa5c4cf0d708dd750a46f207ac13c92cba0f3))
|
||||||
|
* update layout's width ([6fca640](https://gitea.alexlebens.dev/alexlebens/site-profile/commit/6fca640fd8bca269e9295618175f62639b31053f))
|
||||||
|
* update robots.txt ([744e72e](https://gitea.alexlebens.dev/alexlebens/site-profile/commit/744e72efc9e405ee86ab962fdfa5a8a99a5cb162))
|
||||||
|
* update workflow to major version ([dc08830](https://gitea.alexlebens.dev/alexlebens/site-profile/commit/dc088306ceee7fc8ddbe0279e836511541350a90))
|
||||||
|
* use different workflow for gitea ([1577ee4](https://gitea.alexlebens.dev/alexlebens/site-profile/commit/1577ee4c2791cb40d2af4b891e37c6c3f4db459a))
|
||||||
|
* use hardened image ([d464f0f](https://gitea.alexlebens.dev/alexlebens/site-profile/commit/d464f0fe43417e0965158ef5a99d3fb912fe0382))
|
||||||
|
* use latest alpine ([e476efb](https://gitea.alexlebens.dev/alexlebens/site-profile/commit/e476efb96b14b5bdd1a10e31a676e55f4222ffab))
|
||||||
|
* use many to one relationship for categories in directus ([e7c660c](https://gitea.alexlebens.dev/alexlebens/site-profile/commit/e7c660c142010fd45d8fcf4027aad9f191ea394e))
|
||||||
|
* use mask to blend content to background ([0c63c6b](https://gitea.alexlebens.dev/alexlebens/site-profile/commit/0c63c6bef4472dc078323c937ca516d42ff0b91e))
|
||||||
|
* use masonary style layout ([8a7b6b9](https://gitea.alexlebens.dev/alexlebens/site-profile/commit/8a7b6b97b79a1eafc525bd25e0132af0d36a551b))
|
||||||
|
* use metadata snippet for blog cards ([18c2b54](https://gitea.alexlebens.dev/alexlebens/site-profile/commit/18c2b54f658e029f99e608fdfe5eb15d61fbe04a))
|
||||||
|
* use slate for accent ([8c5488f](https://gitea.alexlebens.dev/alexlebens/site-profile/commit/8c5488fad58710074669d1ef7618110dd724447d))
|
||||||
|
|
||||||
|
|
||||||
|
### Reverts
|
||||||
|
|
||||||
|
* release 2.2.2 ([f34f4b2](https://gitea.alexlebens.dev/alexlebens/site-profile/commit/f34f4b25324c2effae642ae96a8a88aed0028435))
|
||||||
|
* release 2.2.3 ([b3bb769](https://gitea.alexlebens.dev/alexlebens/site-profile/commit/b3bb769c477fbc5b07256a8e16b376672633228b))
|
||||||
|
* release 2.2.4 ([fde3973](https://gitea.alexlebens.dev/alexlebens/site-profile/commit/fde397386ce5eacc347812c8a1c6620ef387dd08))
|
||||||
|
* release 2.2.5 ([00b63a5](https://gitea.alexlebens.dev/alexlebens/site-profile/commit/00b63a5bea3969b5c587b330a4125e876093dcd8))
|
||||||
|
|||||||
@@ -1,6 +1,4 @@
|
|||||||
ARG REGISTRY=dhi.io
|
FROM dhi.io/bun:1.3.10-debian13-dev AS builder
|
||||||
FROM ${REGISTRY}/bun:1.3.10-alpine3.22-dev AS builder
|
|
||||||
|
|
||||||
WORKDIR /app
|
WORKDIR /app
|
||||||
|
|
||||||
COPY package.json bun.lock ./
|
COPY package.json bun.lock ./
|
||||||
@@ -17,14 +15,14 @@ FROM build-deps AS build
|
|||||||
COPY . .
|
COPY . .
|
||||||
RUN bun run build
|
RUN bun run build
|
||||||
|
|
||||||
FROM ${REGISTRY}/bun:1.3.10-alpine3.22 AS runtime
|
FROM dhi.io/bun:1.3.10-alpine3.22 AS runtime
|
||||||
WORKDIR /app
|
WORKDIR /app
|
||||||
COPY --from=prod-deps /app/node_modules /app/node_modules
|
COPY --from=prod-deps /app/node_modules /app/node_modules
|
||||||
COPY --from=build /app/dist /app/dist
|
COPY --from=build /app/dist /app/dist
|
||||||
|
|
||||||
ARG APP_VERSION=latest
|
ARG APP_VERSION=latest
|
||||||
|
ARG APP_VERSION
|
||||||
|
|
||||||
ENV NODE_ENV=production
|
|
||||||
ENV HOST=0.0.0.0
|
ENV HOST=0.0.0.0
|
||||||
ENV PORT=4321
|
ENV PORT=4321
|
||||||
|
|
||||||
|
|||||||
@@ -8,11 +8,13 @@ import tailwindcss from '@tailwindcss/vite';
|
|||||||
import icon from 'astro-icon';
|
import icon from 'astro-icon';
|
||||||
import swup from '@swup/astro';
|
import swup from '@swup/astro';
|
||||||
|
|
||||||
import { getSiteURL } from './src/scripts/url';
|
import { getSiteURL } from './src/support/url';
|
||||||
|
|
||||||
export default defineConfig({
|
export default defineConfig({
|
||||||
site: getSiteURL(),
|
site: getSiteURL(),
|
||||||
|
|
||||||
|
security: { csp: true },
|
||||||
|
|
||||||
image: {
|
image: {
|
||||||
remotePatterns: [
|
remotePatterns: [
|
||||||
{ protocol: 'https', hostname: '*.alexlebens.net' },
|
{ protocol: 'https', hostname: '*.alexlebens.net' },
|
||||||
@@ -24,6 +26,8 @@ export default defineConfig({
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
prefetch: true,
|
||||||
|
|
||||||
integrations: [
|
integrations: [
|
||||||
react(),
|
react(),
|
||||||
sitemap(),
|
sitemap(),
|
||||||
|
|||||||
98
bun.lock
98
bun.lock
@@ -45,12 +45,10 @@
|
|||||||
"@semantic-release/changelog": "^6.0.3",
|
"@semantic-release/changelog": "^6.0.3",
|
||||||
"@semantic-release/commit-analyzer": "^13.0.1",
|
"@semantic-release/commit-analyzer": "^13.0.1",
|
||||||
"@semantic-release/git": "^10.0.1",
|
"@semantic-release/git": "^10.0.1",
|
||||||
"@semantic-release/npm": "^13.1.5",
|
|
||||||
"@semantic-release/release-notes-generator": "^14.1.0",
|
"@semantic-release/release-notes-generator": "^14.1.0",
|
||||||
"@tailwindcss/forms": "^0.5.11",
|
"@tailwindcss/forms": "^0.5.11",
|
||||||
"@tailwindcss/typography": "^0.5.19",
|
"@tailwindcss/typography": "^0.5.19",
|
||||||
"@types/markdown-it": "^14.1.2",
|
"@types/markdown-it": "^14.1.2",
|
||||||
"@types/photoswipe": "^5.2.5",
|
|
||||||
"eslint": "^10.0.3",
|
"eslint": "^10.0.3",
|
||||||
"eslint-config-prettier": "^10.1.8",
|
"eslint-config-prettier": "^10.1.8",
|
||||||
"eslint-plugin-astro": "^1.6.0",
|
"eslint-plugin-astro": "^1.6.0",
|
||||||
@@ -851,8 +849,6 @@
|
|||||||
|
|
||||||
"@types/parse-json": ["@types/parse-json@4.0.2", "", {}, "sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw=="],
|
"@types/parse-json": ["@types/parse-json@4.0.2", "", {}, "sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw=="],
|
||||||
|
|
||||||
"@types/photoswipe": ["@types/photoswipe@5.2.5", "", { "dependencies": { "photoswipe": "*" } }, "sha512-1x8LpPy/a9cMdy8AgSQZOgVN4b1BEAGGLFjkg20RAUbv2vzovH8U2iSZmjlM6Gd6oY/BI+Thdph0kOlxEZHskQ=="],
|
|
||||||
|
|
||||||
"@types/react": ["@types/react@19.2.14", "", { "dependencies": { "csstype": "3.2.3" } }, "sha512-ilcTH/UniCkMdtexkoCN0bI7pMcJDvmQFPvuPvmEaYA/NSfFTAgdUSLAoVjaRJm7+6PvcM+q1zYOwS4wTYMF9w=="],
|
"@types/react": ["@types/react@19.2.14", "", { "dependencies": { "csstype": "3.2.3" } }, "sha512-ilcTH/UniCkMdtexkoCN0bI7pMcJDvmQFPvuPvmEaYA/NSfFTAgdUSLAoVjaRJm7+6PvcM+q1zYOwS4wTYMF9w=="],
|
||||||
|
|
||||||
"@types/react-dom": ["@types/react-dom@19.1.7", "", { "peerDependencies": { "@types/react": "19.2.14" } }, "sha512-i5ZzwYpqjmrKenzkoLM2Ibzt6mAsM7pxB6BCIouEVVmgiqaMj1TjaK7hnA36hbW5aZv20kx7Lw6hWzPWg0Rurw=="],
|
"@types/react-dom": ["@types/react-dom@19.1.7", "", { "peerDependencies": { "@types/react": "19.2.14" } }, "sha512-i5ZzwYpqjmrKenzkoLM2Ibzt6mAsM7pxB6BCIouEVVmgiqaMj1TjaK7hnA36hbW5aZv20kx7Lw6hWzPWg0Rurw=="],
|
||||||
@@ -1987,7 +1983,7 @@
|
|||||||
|
|
||||||
"node-releases": ["node-releases@2.0.36", "", {}, "sha512-TdC8FSgHz8Mwtw9g5L4gR/Sh9XhSP/0DEkQxfEFXOpiul5IiHgHan2VhYYb6agDSfp4KuvltmGApc8HMgUrIkA=="],
|
"node-releases": ["node-releases@2.0.36", "", {}, "sha512-TdC8FSgHz8Mwtw9g5L4gR/Sh9XhSP/0DEkQxfEFXOpiul5IiHgHan2VhYYb6agDSfp4KuvltmGApc8HMgUrIkA=="],
|
||||||
|
|
||||||
"normalize-package-data": ["normalize-package-data@8.0.0", "", { "dependencies": { "hosted-git-info": "^9.0.0", "semver": "^7.3.5", "validate-npm-package-license": "^3.0.4" } }, "sha512-RWk+PI433eESQ7ounYxIp67CYuVsS1uYSonX3kA6ps/3LWfjVQa/ptEg6Y3T6uAMq1mWpX9PQ+qx+QaHpsc7gQ=="],
|
"normalize-package-data": ["normalize-package-data@6.0.2", "", { "dependencies": { "hosted-git-info": "^7.0.0", "semver": "^7.3.5", "validate-npm-package-license": "^3.0.4" } }, "sha512-V6gygoYb/5EmNI+MEGrWkC+e6+Rr7mTmfHrxDbLzxQogBkgzo76rkok0Am6thgSF7Mv2nLOajAJj5vDJZEFn7g=="],
|
||||||
|
|
||||||
"normalize-path": ["normalize-path@3.0.0", "", {}, "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA=="],
|
"normalize-path": ["normalize-path@3.0.0", "", {}, "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA=="],
|
||||||
|
|
||||||
@@ -2075,7 +2071,7 @@
|
|||||||
|
|
||||||
"parent-module": ["parent-module@1.0.1", "", { "dependencies": { "callsites": "3.1.0" } }, "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g=="],
|
"parent-module": ["parent-module@1.0.1", "", { "dependencies": { "callsites": "3.1.0" } }, "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g=="],
|
||||||
|
|
||||||
"parse-json": ["parse-json@8.3.0", "", { "dependencies": { "@babel/code-frame": "^7.26.2", "index-to-position": "^1.1.0", "type-fest": "^4.39.1" } }, "sha512-ybiGyvspI+fAoRQbIPRddCcSTV9/LsJbf0e/S85VLowVGzRmokfneg2kwVW/KU5rOXrPSbF1qAKPMgNTqqROQQ=="],
|
"parse-json": ["parse-json@5.2.0", "", { "dependencies": { "@babel/code-frame": "7.29.0", "error-ex": "1.3.4", "json-parse-even-better-errors": "2.3.1", "lines-and-columns": "1.2.4" } }, "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg=="],
|
||||||
|
|
||||||
"parse-latin": ["parse-latin@7.0.0", "", { "dependencies": { "@types/nlcst": "2.0.3", "@types/unist": "3.0.3", "nlcst-to-string": "4.0.0", "unist-util-modify-children": "4.0.0", "unist-util-visit-children": "3.0.0", "vfile": "6.0.3" } }, "sha512-mhHgobPPua5kZ98EF4HWiH167JWBfl4pvAIXXdbaVohtK7a6YBOy56kvhCqduqyo/f3yrHFWmqmiMg/BkBkYYQ=="],
|
"parse-latin": ["parse-latin@7.0.0", "", { "dependencies": { "@types/nlcst": "2.0.3", "@types/unist": "3.0.3", "nlcst-to-string": "4.0.0", "unist-util-modify-children": "4.0.0", "unist-util-visit-children": "3.0.0", "vfile": "6.0.3" } }, "sha512-mhHgobPPua5kZ98EF4HWiH167JWBfl4pvAIXXdbaVohtK7a6YBOy56kvhCqduqyo/f3yrHFWmqmiMg/BkBkYYQ=="],
|
||||||
|
|
||||||
@@ -2259,7 +2255,7 @@
|
|||||||
|
|
||||||
"read-package-up": ["read-package-up@11.0.0", "", { "dependencies": { "find-up-simple": "^1.0.0", "read-pkg": "^9.0.0", "type-fest": "^4.6.0" } }, "sha512-MbgfoNPANMdb4oRBNg5eqLbB2t2r+o5Ua1pNt8BqGp4I0FJZhuVSOj3PaBPni4azWuSzEdNn2evevzVmEk1ohQ=="],
|
"read-package-up": ["read-package-up@11.0.0", "", { "dependencies": { "find-up-simple": "^1.0.0", "read-pkg": "^9.0.0", "type-fest": "^4.6.0" } }, "sha512-MbgfoNPANMdb4oRBNg5eqLbB2t2r+o5Ua1pNt8BqGp4I0FJZhuVSOj3PaBPni4azWuSzEdNn2evevzVmEk1ohQ=="],
|
||||||
|
|
||||||
"read-pkg": ["read-pkg@10.1.0", "", { "dependencies": { "@types/normalize-package-data": "^2.4.4", "normalize-package-data": "^8.0.0", "parse-json": "^8.3.0", "type-fest": "^5.4.4", "unicorn-magic": "^0.4.0" } }, "sha512-I8g2lArQiP78ll51UeMZojewtYgIRCKCWqZEgOO8c/uefTI+XDXvCSXu3+YNUaTNvZzobrL5+SqHjBrByRRTdg=="],
|
"read-pkg": ["read-pkg@9.0.1", "", { "dependencies": { "@types/normalize-package-data": "^2.4.3", "normalize-package-data": "^6.0.0", "parse-json": "^8.0.0", "type-fest": "^4.6.0", "unicorn-magic": "^0.1.0" } }, "sha512-9viLL4/n1BJUCT1NXVTdS1jtm80yDEgR5T4yCelII49Mbj0v1rZdKqj7zCiYdbB0CuCgdrvHcNogAKTFPBocFA=="],
|
||||||
|
|
||||||
"readable-stream": ["readable-stream@2.3.8", "", { "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", "isarray": "~1.0.0", "process-nextick-args": "~2.0.0", "safe-buffer": "~5.1.1", "string_decoder": "~1.1.1", "util-deprecate": "~1.0.1" } }, "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA=="],
|
"readable-stream": ["readable-stream@2.3.8", "", { "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", "isarray": "~1.0.0", "process-nextick-args": "~2.0.0", "safe-buffer": "~5.1.1", "string_decoder": "~1.1.1", "util-deprecate": "~1.0.1" } }, "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA=="],
|
||||||
|
|
||||||
@@ -2377,7 +2373,7 @@
|
|||||||
|
|
||||||
"semantic-release-export-data": ["semantic-release-export-data@1.2.0", "", { "peerDependencies": { "semantic-release": ">=20" } }, "sha512-/9+yQWFieiN0KB7YA0TTCXHml7d2tlNLkprLjUOKf8XDQlJ6ZK9gkw0dJJ/8/kBzeuUPq8aZR2n0rYmuYCz7Xg=="],
|
"semantic-release-export-data": ["semantic-release-export-data@1.2.0", "", { "peerDependencies": { "semantic-release": ">=20" } }, "sha512-/9+yQWFieiN0KB7YA0TTCXHml7d2tlNLkprLjUOKf8XDQlJ6ZK9gkw0dJJ/8/kBzeuUPq8aZR2n0rYmuYCz7Xg=="],
|
||||||
|
|
||||||
"semver": ["semver@7.7.4", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA=="],
|
"semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="],
|
||||||
|
|
||||||
"semver-regex": ["semver-regex@4.0.5", "", {}, "sha512-hunMQrEy1T6Jr2uEVjrAIqjwWcQTgOAcIM52C8MY1EZSD3DDNft04XzvYKPqjED65bNVVko0YI38nYeEHCX3yw=="],
|
"semver-regex": ["semver-regex@4.0.5", "", {}, "sha512-hunMQrEy1T6Jr2uEVjrAIqjwWcQTgOAcIM52C8MY1EZSD3DDNft04XzvYKPqjED65bNVVko0YI38nYeEHCX3yw=="],
|
||||||
|
|
||||||
@@ -2623,7 +2619,7 @@
|
|||||||
|
|
||||||
"unicode-property-aliases-ecmascript": ["unicode-property-aliases-ecmascript@2.2.0", "", {}, "sha512-hpbDzxUY9BFwX+UeBnxv3Sh1q7HFxj48DTmXchNgRa46lO8uj3/1iEn3MiNUYTg1g9ctIqXCCERn8gYZhHC5lQ=="],
|
"unicode-property-aliases-ecmascript": ["unicode-property-aliases-ecmascript@2.2.0", "", {}, "sha512-hpbDzxUY9BFwX+UeBnxv3Sh1q7HFxj48DTmXchNgRa46lO8uj3/1iEn3MiNUYTg1g9ctIqXCCERn8gYZhHC5lQ=="],
|
||||||
|
|
||||||
"unicorn-magic": ["unicorn-magic@0.4.0", "", {}, "sha512-wH590V9VNgYH9g3lH9wWjTrUoKsjLF6sGLjhR4sH1LWpLmCOH0Zf7PukhDA8BiS7KHe4oPNkcTHqYkj7SOGUOw=="],
|
"unicorn-magic": ["unicorn-magic@0.1.0", "", {}, "sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ=="],
|
||||||
|
|
||||||
"unified": ["unified@11.0.5", "", { "dependencies": { "@types/unist": "3.0.3", "bail": "2.0.2", "devlop": "1.1.0", "extend": "3.0.2", "is-plain-obj": "4.1.0", "trough": "2.2.0", "vfile": "6.0.3" } }, "sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA=="],
|
"unified": ["unified@11.0.5", "", { "dependencies": { "@types/unist": "3.0.3", "bail": "2.0.2", "devlop": "1.1.0", "extend": "3.0.2", "is-plain-obj": "4.1.0", "trough": "2.2.0", "vfile": "6.0.3" } }, "sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA=="],
|
||||||
|
|
||||||
@@ -2779,20 +2775,10 @@
|
|||||||
|
|
||||||
"@astrojs/check/yargs": ["yargs@17.7.2", "", { "dependencies": { "cliui": "8.0.1", "escalade": "3.2.0", "get-caller-file": "2.0.5", "require-directory": "2.1.1", "string-width": "4.2.3", "y18n": "5.0.8", "yargs-parser": "21.1.1" } }, "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w=="],
|
"@astrojs/check/yargs": ["yargs@17.7.2", "", { "dependencies": { "cliui": "8.0.1", "escalade": "3.2.0", "get-caller-file": "2.0.5", "require-directory": "2.1.1", "string-width": "4.2.3", "y18n": "5.0.8", "yargs-parser": "21.1.1" } }, "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w=="],
|
||||||
|
|
||||||
"@babel/core/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="],
|
|
||||||
|
|
||||||
"@babel/helper-compilation-targets/lru-cache": ["lru-cache@5.1.1", "", { "dependencies": { "yallist": "3.1.1" } }, "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w=="],
|
"@babel/helper-compilation-targets/lru-cache": ["lru-cache@5.1.1", "", { "dependencies": { "yallist": "3.1.1" } }, "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w=="],
|
||||||
|
|
||||||
"@babel/helper-compilation-targets/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="],
|
|
||||||
|
|
||||||
"@babel/helper-create-class-features-plugin/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="],
|
|
||||||
|
|
||||||
"@babel/helper-create-regexp-features-plugin/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="],
|
|
||||||
|
|
||||||
"@babel/helper-define-polyfill-provider/resolve": ["resolve@1.22.11", "", { "dependencies": { "is-core-module": "2.16.1", "path-parse": "1.0.7", "supports-preserve-symlinks-flag": "1.0.0" }, "bin": { "resolve": "bin/resolve" } }, "sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ=="],
|
"@babel/helper-define-polyfill-provider/resolve": ["resolve@1.22.11", "", { "dependencies": { "is-core-module": "2.16.1", "path-parse": "1.0.7", "supports-preserve-symlinks-flag": "1.0.0" }, "bin": { "resolve": "bin/resolve" } }, "sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ=="],
|
||||||
|
|
||||||
"@babel/preset-env/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="],
|
|
||||||
|
|
||||||
"@eslint-community/eslint-utils/eslint-visitor-keys": ["eslint-visitor-keys@3.4.3", "", {}, "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag=="],
|
"@eslint-community/eslint-utils/eslint-visitor-keys": ["eslint-visitor-keys@3.4.3", "", {}, "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag=="],
|
||||||
|
|
||||||
"@iconify/tools/svgo": ["svgo@3.3.3", "", { "dependencies": { "commander": "7.2.0", "css-select": "5.2.2", "css-tree": "2.3.1", "css-what": "6.2.2", "csso": "5.0.5", "picocolors": "1.1.1", "sax": "1.5.0" }, "bin": "./bin/svgo" }, "sha512-+wn7I4p7YgJhHs38k2TNjy1vCfPIfLIJWR5MnCStsN8WuuTcBnRKcMHQLMM2ijxGZmDoZwNv8ipl5aTTen62ng=="],
|
"@iconify/tools/svgo": ["svgo@3.3.3", "", { "dependencies": { "commander": "7.2.0", "css-select": "5.2.2", "css-tree": "2.3.1", "css-what": "6.2.2", "csso": "5.0.5", "picocolors": "1.1.1", "sax": "1.5.0" }, "bin": "./bin/svgo" }, "sha512-+wn7I4p7YgJhHs38k2TNjy1vCfPIfLIJWR5MnCStsN8WuuTcBnRKcMHQLMM2ijxGZmDoZwNv8ipl5aTTen62ng=="],
|
||||||
@@ -2855,6 +2841,10 @@
|
|||||||
|
|
||||||
"@semantic-release/npm/fs-extra": ["fs-extra@11.3.4", "", { "dependencies": { "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", "universalify": "^2.0.0" } }, "sha512-CTXd6rk/M3/ULNQj8FBqBWHYBVYybQ3VPBw0xGKFe3tuH7ytT6ACnvzpIQ3UZtB8yvUKC2cXn1a+x+5EVQLovA=="],
|
"@semantic-release/npm/fs-extra": ["fs-extra@11.3.4", "", { "dependencies": { "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", "universalify": "^2.0.0" } }, "sha512-CTXd6rk/M3/ULNQj8FBqBWHYBVYybQ3VPBw0xGKFe3tuH7ytT6ACnvzpIQ3UZtB8yvUKC2cXn1a+x+5EVQLovA=="],
|
||||||
|
|
||||||
|
"@semantic-release/npm/read-pkg": ["read-pkg@10.1.0", "", { "dependencies": { "@types/normalize-package-data": "^2.4.4", "normalize-package-data": "^8.0.0", "parse-json": "^8.3.0", "type-fest": "^5.4.4", "unicorn-magic": "^0.4.0" } }, "sha512-I8g2lArQiP78ll51UeMZojewtYgIRCKCWqZEgOO8c/uefTI+XDXvCSXu3+YNUaTNvZzobrL5+SqHjBrByRRTdg=="],
|
||||||
|
|
||||||
|
"@semantic-release/npm/semver": ["semver@7.7.4", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA=="],
|
||||||
|
|
||||||
"@surma/rollup-plugin-off-main-thread/magic-string": ["magic-string@0.25.9", "", { "dependencies": { "sourcemap-codec": "1.4.8" } }, "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ=="],
|
"@surma/rollup-plugin-off-main-thread/magic-string": ["magic-string@0.25.9", "", { "dependencies": { "sourcemap-codec": "1.4.8" } }, "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ=="],
|
||||||
|
|
||||||
"@swup/parallel-plugin/@swup/plugin": ["@swup/plugin@3.0.1", "", { "dependencies": { "@swup/browserslist-config": "1.0.1", "@swup/prettier-config": "1.1.0", "chalk": "5.6.2", "microbundle": "0.15.1", "prettier": "2.8.8", "shelljs": "0.8.5", "shelljs-live": "0.0.5", "swup": "4.8.3" }, "bin": { "swup-plugin": "bin/swup-plugin.js" } }, "sha512-A9yiJeKTmQ9kac2Eo3MbMWW+Tiw23W5OSzAHVTCfW6n5zze6dexY3FLEUSDTcvRgciknvXfMZ9JTnebbvCKKWw=="],
|
"@swup/parallel-plugin/@swup/plugin": ["@swup/plugin@3.0.1", "", { "dependencies": { "@swup/browserslist-config": "1.0.1", "@swup/prettier-config": "1.1.0", "chalk": "5.6.2", "microbundle": "0.15.1", "prettier": "2.8.8", "shelljs": "0.8.5", "shelljs-live": "0.0.5", "swup": "4.8.3" }, "bin": { "swup-plugin": "bin/swup-plugin.js" } }, "sha512-A9yiJeKTmQ9kac2Eo3MbMWW+Tiw23W5OSzAHVTCfW6n5zze6dexY3FLEUSDTcvRgciknvXfMZ9JTnebbvCKKWw=="],
|
||||||
@@ -2867,6 +2857,8 @@
|
|||||||
|
|
||||||
"@typescript-eslint/eslint-plugin/ignore": ["ignore@7.0.5", "", {}, "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg=="],
|
"@typescript-eslint/eslint-plugin/ignore": ["ignore@7.0.5", "", {}, "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg=="],
|
||||||
|
|
||||||
|
"@typescript-eslint/typescript-estree/semver": ["semver@7.7.4", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA=="],
|
||||||
|
|
||||||
"ajv-draft-04/ajv": ["ajv@8.18.0", "", { "dependencies": { "fast-deep-equal": "3.1.3", "fast-uri": "3.1.0", "json-schema-traverse": "1.0.0", "require-from-string": "2.0.2" } }, "sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A=="],
|
"ajv-draft-04/ajv": ["ajv@8.18.0", "", { "dependencies": { "fast-deep-equal": "3.1.3", "fast-uri": "3.1.0", "json-schema-traverse": "1.0.0", "require-from-string": "2.0.2" } }, "sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A=="],
|
||||||
|
|
||||||
"ansi-align/string-width": ["string-width@4.2.3", "", { "dependencies": { "emoji-regex": "8.0.0", "is-fullwidth-code-point": "3.0.0", "strip-ansi": "6.0.1" } }, "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g=="],
|
"ansi-align/string-width": ["string-width@4.2.3", "", { "dependencies": { "emoji-regex": "8.0.0", "is-fullwidth-code-point": "3.0.0", "strip-ansi": "6.0.1" } }, "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g=="],
|
||||||
@@ -2875,6 +2867,8 @@
|
|||||||
|
|
||||||
"astro/@astrojs/compiler": ["@astrojs/compiler@3.0.0", "", {}, "sha512-MwAbDE5mawZ1SS+D8qWiHdprdME5Tlj2e0YjxnEICvcOpbSukNS7Sa7hA5PK+6RrmUr/t6Gi5YgrdZKjbO/WPQ=="],
|
"astro/@astrojs/compiler": ["@astrojs/compiler@3.0.0", "", {}, "sha512-MwAbDE5mawZ1SS+D8qWiHdprdME5Tlj2e0YjxnEICvcOpbSukNS7Sa7hA5PK+6RrmUr/t6Gi5YgrdZKjbO/WPQ=="],
|
||||||
|
|
||||||
|
"astro/semver": ["semver@7.7.4", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA=="],
|
||||||
|
|
||||||
"astro/svgo": ["svgo@4.0.1", "", { "dependencies": { "commander": "11.1.0", "css-select": "5.2.2", "css-tree": "3.2.1", "css-what": "6.2.2", "csso": "5.0.5", "picocolors": "1.1.1", "sax": "1.5.0" }, "bin": "./bin/svgo.js" }, "sha512-XDpWUOPC6FEibaLzjfe0ucaV0YrOjYotGJO1WpF0Zd+n6ZGEQUsSugaoLq9QkEZtAfQIxT42UChcssDVPP3+/w=="],
|
"astro/svgo": ["svgo@4.0.1", "", { "dependencies": { "commander": "11.1.0", "css-select": "5.2.2", "css-tree": "3.2.1", "css-what": "6.2.2", "csso": "5.0.5", "picocolors": "1.1.1", "sax": "1.5.0" }, "bin": "./bin/svgo.js" }, "sha512-XDpWUOPC6FEibaLzjfe0ucaV0YrOjYotGJO1WpF0Zd+n6ZGEQUsSugaoLq9QkEZtAfQIxT42UChcssDVPP3+/w=="],
|
||||||
|
|
||||||
"astro-eslint-parser/entities": ["entities@6.0.1", "", {}, "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g=="],
|
"astro-eslint-parser/entities": ["entities@6.0.1", "", {}, "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g=="],
|
||||||
@@ -2885,12 +2879,12 @@
|
|||||||
|
|
||||||
"astro-eslint-parser/espree": ["espree@10.4.0", "", { "dependencies": { "acorn": "8.16.0", "acorn-jsx": "5.3.2", "eslint-visitor-keys": "4.2.1" } }, "sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ=="],
|
"astro-eslint-parser/espree": ["espree@10.4.0", "", { "dependencies": { "acorn": "8.16.0", "acorn-jsx": "5.3.2", "eslint-visitor-keys": "4.2.1" } }, "sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ=="],
|
||||||
|
|
||||||
|
"astro-eslint-parser/semver": ["semver@7.7.4", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA=="],
|
||||||
|
|
||||||
"babel-plugin-macros/cosmiconfig": ["cosmiconfig@7.1.0", "", { "dependencies": { "@types/parse-json": "4.0.2", "import-fresh": "3.3.1", "parse-json": "5.2.0", "path-type": "4.0.0", "yaml": "1.10.2" } }, "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA=="],
|
"babel-plugin-macros/cosmiconfig": ["cosmiconfig@7.1.0", "", { "dependencies": { "@types/parse-json": "4.0.2", "import-fresh": "3.3.1", "parse-json": "5.2.0", "path-type": "4.0.0", "yaml": "1.10.2" } }, "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA=="],
|
||||||
|
|
||||||
"babel-plugin-macros/resolve": ["resolve@1.22.11", "", { "dependencies": { "is-core-module": "2.16.1", "path-parse": "1.0.7", "supports-preserve-symlinks-flag": "1.0.0" }, "bin": { "resolve": "bin/resolve" } }, "sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ=="],
|
"babel-plugin-macros/resolve": ["resolve@1.22.11", "", { "dependencies": { "is-core-module": "2.16.1", "path-parse": "1.0.7", "supports-preserve-symlinks-flag": "1.0.0" }, "bin": { "resolve": "bin/resolve" } }, "sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ=="],
|
||||||
|
|
||||||
"babel-plugin-polyfill-corejs2/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="],
|
|
||||||
|
|
||||||
"boxen/type-fest": ["type-fest@4.41.0", "", {}, "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA=="],
|
"boxen/type-fest": ["type-fest@4.41.0", "", {}, "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA=="],
|
||||||
|
|
||||||
"cacheable-request/get-stream": ["get-stream@5.2.0", "", { "dependencies": { "pump": "3.0.4" } }, "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA=="],
|
"cacheable-request/get-stream": ["get-stream@5.2.0", "", { "dependencies": { "pump": "3.0.4" } }, "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA=="],
|
||||||
@@ -2909,7 +2903,7 @@
|
|||||||
|
|
||||||
"clone-response/mimic-response": ["mimic-response@1.0.1", "", {}, "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ=="],
|
"clone-response/mimic-response": ["mimic-response@1.0.1", "", {}, "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ=="],
|
||||||
|
|
||||||
"cosmiconfig/parse-json": ["parse-json@5.2.0", "", { "dependencies": { "@babel/code-frame": "7.29.0", "error-ex": "1.3.4", "json-parse-even-better-errors": "2.3.1", "lines-and-columns": "1.2.4" } }, "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg=="],
|
"conventional-changelog-writer/semver": ["semver@7.7.4", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA=="],
|
||||||
|
|
||||||
"crypto-random-string/type-fest": ["type-fest@1.4.0", "", {}, "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA=="],
|
"crypto-random-string/type-fest": ["type-fest@1.4.0", "", {}, "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA=="],
|
||||||
|
|
||||||
@@ -2917,12 +2911,12 @@
|
|||||||
|
|
||||||
"env-ci/execa": ["execa@8.0.1", "", { "dependencies": { "cross-spawn": "^7.0.3", "get-stream": "^8.0.1", "human-signals": "^5.0.0", "is-stream": "^3.0.0", "merge-stream": "^2.0.0", "npm-run-path": "^5.1.0", "onetime": "^6.0.0", "signal-exit": "^4.1.0", "strip-final-newline": "^3.0.0" } }, "sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg=="],
|
"env-ci/execa": ["execa@8.0.1", "", { "dependencies": { "cross-spawn": "^7.0.3", "get-stream": "^8.0.1", "human-signals": "^5.0.0", "is-stream": "^3.0.0", "merge-stream": "^2.0.0", "npm-run-path": "^5.1.0", "onetime": "^6.0.0", "signal-exit": "^4.1.0", "strip-final-newline": "^3.0.0" } }, "sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg=="],
|
||||||
|
|
||||||
|
"eslint-compat-utils/semver": ["semver@7.7.4", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA=="],
|
||||||
|
|
||||||
"eslint-plugin-astro/postcss-selector-parser": ["postcss-selector-parser@7.1.1", "", { "dependencies": { "cssesc": "3.0.0", "util-deprecate": "1.0.2" } }, "sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg=="],
|
"eslint-plugin-astro/postcss-selector-parser": ["postcss-selector-parser@7.1.1", "", { "dependencies": { "cssesc": "3.0.0", "util-deprecate": "1.0.2" } }, "sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg=="],
|
||||||
|
|
||||||
"eslint-plugin-react/minimatch": ["minimatch@3.1.5", "", { "dependencies": { "brace-expansion": "1.1.12" } }, "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w=="],
|
"eslint-plugin-react/minimatch": ["minimatch@3.1.5", "", { "dependencies": { "brace-expansion": "1.1.12" } }, "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w=="],
|
||||||
|
|
||||||
"eslint-plugin-react/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="],
|
|
||||||
|
|
||||||
"execa/get-stream": ["get-stream@6.0.1", "", {}, "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg=="],
|
"execa/get-stream": ["get-stream@6.0.1", "", {}, "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg=="],
|
||||||
|
|
||||||
"extract-zip/get-stream": ["get-stream@5.2.0", "", { "dependencies": { "pump": "3.0.4" } }, "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA=="],
|
"extract-zip/get-stream": ["get-stream@5.2.0", "", { "dependencies": { "pump": "3.0.4" } }, "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA=="],
|
||||||
@@ -2955,8 +2949,6 @@
|
|||||||
|
|
||||||
"make-asynchronous/type-fest": ["type-fest@4.41.0", "", {}, "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA=="],
|
"make-asynchronous/type-fest": ["type-fest@4.41.0", "", {}, "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA=="],
|
||||||
|
|
||||||
"make-dir/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="],
|
|
||||||
|
|
||||||
"maxmin/chalk": ["chalk@1.1.3", "", { "dependencies": { "ansi-styles": "2.2.1", "escape-string-regexp": "1.0.5", "has-ansi": "2.0.0", "strip-ansi": "3.0.1", "supports-color": "2.0.0" } }, "sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A=="],
|
"maxmin/chalk": ["chalk@1.1.3", "", { "dependencies": { "ansi-styles": "2.2.1", "escape-string-regexp": "1.0.5", "has-ansi": "2.0.0", "strip-ansi": "3.0.1", "supports-color": "2.0.0" } }, "sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A=="],
|
||||||
|
|
||||||
"maxmin/figures": ["figures@1.7.0", "", { "dependencies": { "escape-string-regexp": "1.0.5", "object-assign": "4.1.1" } }, "sha512-UxKlfCRuCBxSXU4C6t9scbDyWZ4VlaFFdojKtzJuSkuOBQ5CNFum+zZXFwHjo+CxBC1t6zlYPgHIgFjL8ggoEQ=="],
|
"maxmin/figures": ["figures@1.7.0", "", { "dependencies": { "escape-string-regexp": "1.0.5", "object-assign": "4.1.1" } }, "sha512-UxKlfCRuCBxSXU4C6t9scbDyWZ4VlaFFdojKtzJuSkuOBQ5CNFum+zZXFwHjo+CxBC1t6zlYPgHIgFjL8ggoEQ=="],
|
||||||
@@ -2981,7 +2973,9 @@
|
|||||||
|
|
||||||
"node-emoji/@sindresorhus/is": ["@sindresorhus/is@4.6.0", "", {}, "sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw=="],
|
"node-emoji/@sindresorhus/is": ["@sindresorhus/is@4.6.0", "", {}, "sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw=="],
|
||||||
|
|
||||||
"node-exports-info/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="],
|
"normalize-package-data/hosted-git-info": ["hosted-git-info@7.0.2", "", { "dependencies": { "lru-cache": "^10.0.1" } }, "sha512-puUZAUKT5m8Zzvs72XWy3HtvVbTWljRE66cP60bxJzAqf2DgICo7lYTY2IHUmLnNpjYvw5bvmoHvPc0QO2a62w=="],
|
||||||
|
|
||||||
|
"normalize-package-data/semver": ["semver@7.7.4", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA=="],
|
||||||
|
|
||||||
"npm/@gar/promise-retry": ["@gar/promise-retry@1.0.2", "", { "dependencies": { "retry": "^0.13.1" } }, "sha512-Lm/ZLhDZcBECta3TmCQSngiQykFdfw+QtI1/GYMsZd4l3nG+P8WLB16XuS7WaBGLQ+9E+cOcWQsth9cayuGt8g=="],
|
"npm/@gar/promise-retry": ["@gar/promise-retry@1.0.2", "", { "dependencies": { "retry": "^0.13.1" } }, "sha512-Lm/ZLhDZcBECta3TmCQSngiQykFdfw+QtI1/GYMsZd4l3nG+P8WLB16XuS7WaBGLQ+9E+cOcWQsth9cayuGt8g=="],
|
||||||
|
|
||||||
@@ -3283,8 +3277,6 @@
|
|||||||
|
|
||||||
"p-locate/p-limit": ["p-limit@3.1.0", "", { "dependencies": { "yocto-queue": "0.1.0" } }, "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ=="],
|
"p-locate/p-limit": ["p-limit@3.1.0", "", { "dependencies": { "yocto-queue": "0.1.0" } }, "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ=="],
|
||||||
|
|
||||||
"parse-json/type-fest": ["type-fest@4.41.0", "", {}, "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA=="],
|
|
||||||
|
|
||||||
"parse5-htmlparser2-tree-adapter/parse5": ["parse5@6.0.1", "", {}, "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw=="],
|
"parse5-htmlparser2-tree-adapter/parse5": ["parse5@6.0.1", "", {}, "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw=="],
|
||||||
|
|
||||||
"parse5-parser-stream/parse5": ["parse5@7.3.0", "", { "dependencies": { "entities": "6.0.1" } }, "sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw=="],
|
"parse5-parser-stream/parse5": ["parse5@7.3.0", "", { "dependencies": { "entities": "6.0.1" } }, "sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw=="],
|
||||||
@@ -3315,11 +3307,11 @@
|
|||||||
|
|
||||||
"randombytes/safe-buffer": ["safe-buffer@5.2.1", "", {}, "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="],
|
"randombytes/safe-buffer": ["safe-buffer@5.2.1", "", {}, "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="],
|
||||||
|
|
||||||
"read-package-up/read-pkg": ["read-pkg@9.0.1", "", { "dependencies": { "@types/normalize-package-data": "^2.4.3", "normalize-package-data": "^6.0.0", "parse-json": "^8.0.0", "type-fest": "^4.6.0", "unicorn-magic": "^0.1.0" } }, "sha512-9viLL4/n1BJUCT1NXVTdS1jtm80yDEgR5T4yCelII49Mbj0v1rZdKqj7zCiYdbB0CuCgdrvHcNogAKTFPBocFA=="],
|
|
||||||
|
|
||||||
"read-package-up/type-fest": ["type-fest@4.41.0", "", {}, "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA=="],
|
"read-package-up/type-fest": ["type-fest@4.41.0", "", {}, "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA=="],
|
||||||
|
|
||||||
"read-pkg/type-fest": ["type-fest@5.4.4", "", { "dependencies": { "tagged-tag": "^1.0.0" } }, "sha512-JnTrzGu+zPV3aXIUhnyWJj4z/wigMsdYajGLIYakqyOW1nPllzXEJee0QQbHj+CTIQtXGlAjuK0UY+2xTyjVAw=="],
|
"read-pkg/parse-json": ["parse-json@8.3.0", "", { "dependencies": { "@babel/code-frame": "^7.26.2", "index-to-position": "^1.1.0", "type-fest": "^4.39.1" } }, "sha512-ybiGyvspI+fAoRQbIPRddCcSTV9/LsJbf0e/S85VLowVGzRmokfneg2kwVW/KU5rOXrPSbF1qAKPMgNTqqROQQ=="],
|
||||||
|
|
||||||
|
"read-pkg/type-fest": ["type-fest@4.41.0", "", {}, "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA=="],
|
||||||
|
|
||||||
"readable-stream/isarray": ["isarray@1.0.0", "", {}, "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ=="],
|
"readable-stream/isarray": ["isarray@1.0.0", "", {}, "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ=="],
|
||||||
|
|
||||||
@@ -3369,8 +3361,12 @@
|
|||||||
|
|
||||||
"semantic-release/read-package-up": ["read-package-up@12.0.0", "", { "dependencies": { "find-up-simple": "^1.0.1", "read-pkg": "^10.0.0", "type-fest": "^5.2.0" } }, "sha512-Q5hMVBYur/eQNWDdbF4/Wqqr9Bjvtrw2kjGxxBbKLbx8bVCL8gcArjTy8zDUuLGQicftpMuU0riQNcAsbtOVsw=="],
|
"semantic-release/read-package-up": ["read-package-up@12.0.0", "", { "dependencies": { "find-up-simple": "^1.0.1", "read-pkg": "^10.0.0", "type-fest": "^5.2.0" } }, "sha512-Q5hMVBYur/eQNWDdbF4/Wqqr9Bjvtrw2kjGxxBbKLbx8bVCL8gcArjTy8zDUuLGQicftpMuU0riQNcAsbtOVsw=="],
|
||||||
|
|
||||||
|
"semantic-release/semver": ["semver@7.7.4", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA=="],
|
||||||
|
|
||||||
"send/mime-types": ["mime-types@3.0.2", "", { "dependencies": { "mime-db": "1.54.0" } }, "sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A=="],
|
"send/mime-types": ["mime-types@3.0.2", "", { "dependencies": { "mime-db": "1.54.0" } }, "sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A=="],
|
||||||
|
|
||||||
|
"sharp/semver": ["semver@7.7.4", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA=="],
|
||||||
|
|
||||||
"signale/chalk": ["chalk@2.4.2", "", { "dependencies": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", "supports-color": "^5.3.0" } }, "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ=="],
|
"signale/chalk": ["chalk@2.4.2", "", { "dependencies": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", "supports-color": "^5.3.0" } }, "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ=="],
|
||||||
|
|
||||||
"signale/figures": ["figures@2.0.0", "", { "dependencies": { "escape-string-regexp": "^1.0.5" } }, "sha512-Oa2M9atig69ZkfwiApY8F2Yy+tzMbazyvqv21R0NsSC8floSOC09BbT1ITWAdoMGQvJ/aZnR1KMwdx9tvHnTNA=="],
|
"signale/figures": ["figures@2.0.0", "", { "dependencies": { "escape-string-regexp": "^1.0.5" } }, "sha512-Oa2M9atig69ZkfwiApY8F2Yy+tzMbazyvqv21R0NsSC8floSOC09BbT1ITWAdoMGQvJ/aZnR1KMwdx9tvHnTNA=="],
|
||||||
@@ -3389,12 +3385,16 @@
|
|||||||
|
|
||||||
"terser/commander": ["commander@2.20.3", "", {}, "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ=="],
|
"terser/commander": ["commander@2.20.3", "", {}, "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ=="],
|
||||||
|
|
||||||
|
"typescript-auto-import-cache/semver": ["semver@7.7.4", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA=="],
|
||||||
|
|
||||||
"unifont/css-tree": ["css-tree@3.2.1", "", { "dependencies": { "mdn-data": "2.27.1", "source-map-js": "1.2.1" } }, "sha512-X7sjQzceUhu1u7Y/ylrRZFU2FS6LRiFVp6rKLPg23y3x3c3DOKAwuXGDp+PAGjh6CSnCjYeAul8pcT8bAl+lSA=="],
|
"unifont/css-tree": ["css-tree@3.2.1", "", { "dependencies": { "mdn-data": "2.27.1", "source-map-js": "1.2.1" } }, "sha512-X7sjQzceUhu1u7Y/ylrRZFU2FS6LRiFVp6rKLPg23y3x3c3DOKAwuXGDp+PAGjh6CSnCjYeAul8pcT8bAl+lSA=="],
|
||||||
|
|
||||||
"unstorage/chokidar": ["chokidar@5.0.0", "", { "dependencies": { "readdirp": "5.0.0" } }, "sha512-TQMmc3w+5AxjpL8iIiwebF73dRDF4fBIieAqGn9RGCWaEVwQ6Fb2cGe31Yns0RRIzii5goJ1Y7xbMwo1TxMplw=="],
|
"unstorage/chokidar": ["chokidar@5.0.0", "", { "dependencies": { "readdirp": "5.0.0" } }, "sha512-TQMmc3w+5AxjpL8iIiwebF73dRDF4fBIieAqGn9RGCWaEVwQ6Fb2cGe31Yns0RRIzii5goJ1Y7xbMwo1TxMplw=="],
|
||||||
|
|
||||||
"vitefu/vite": ["vite@6.4.1", "", { "dependencies": { "esbuild": "0.25.12", "fdir": "6.5.0", "picomatch": "4.0.3", "postcss": "8.5.8", "rollup": "4.59.0", "tinyglobby": "0.2.15" }, "optionalDependencies": { "@types/node": "25.4.0", "fsevents": "2.3.3", "jiti": "2.6.1", "lightningcss": "1.30.2", "terser": "5.44.1", "yaml": "2.8.2" }, "bin": { "vite": "bin/vite.js" } }, "sha512-+Oxm7q9hDoLMyJOYfUYBuHQo+dkAloi33apOPP56pzj+vsdJDzr+j1NISE5pyaAuKL4A3UD34qd0lx5+kfKp2g=="],
|
"vitefu/vite": ["vite@6.4.1", "", { "dependencies": { "esbuild": "0.25.12", "fdir": "6.5.0", "picomatch": "4.0.3", "postcss": "8.5.8", "rollup": "4.59.0", "tinyglobby": "0.2.15" }, "optionalDependencies": { "@types/node": "25.4.0", "fsevents": "2.3.3", "jiti": "2.6.1", "lightningcss": "1.30.2", "terser": "5.44.1", "yaml": "2.8.2" }, "bin": { "vite": "bin/vite.js" } }, "sha512-+Oxm7q9hDoLMyJOYfUYBuHQo+dkAloi33apOPP56pzj+vsdJDzr+j1NISE5pyaAuKL4A3UD34qd0lx5+kfKp2g=="],
|
||||||
|
|
||||||
|
"volar-service-typescript/semver": ["semver@7.7.4", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA=="],
|
||||||
|
|
||||||
"vscode-json-languageservice/jsonc-parser": ["jsonc-parser@3.3.1", "", {}, "sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ=="],
|
"vscode-json-languageservice/jsonc-parser": ["jsonc-parser@3.3.1", "", {}, "sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ=="],
|
||||||
|
|
||||||
"wrap-ansi/ansi-styles": ["ansi-styles@6.2.3", "", {}, "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg=="],
|
"wrap-ansi/ansi-styles": ["ansi-styles@6.2.3", "", {}, "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg=="],
|
||||||
@@ -3437,6 +3437,8 @@
|
|||||||
|
|
||||||
"@playform/compress/astro/p-queue": ["p-queue@8.1.1", "", { "dependencies": { "eventemitter3": "5.0.4", "p-timeout": "6.1.4" } }, "sha512-aNZ+VfjobsWryoiPnEApGGmf5WmNsCo9xu8dfaYamG5qaLP7ClhLN6NgsFe6SwJ2UbLEBK5dv9x8Mn5+RVhMWQ=="],
|
"@playform/compress/astro/p-queue": ["p-queue@8.1.1", "", { "dependencies": { "eventemitter3": "5.0.4", "p-timeout": "6.1.4" } }, "sha512-aNZ+VfjobsWryoiPnEApGGmf5WmNsCo9xu8dfaYamG5qaLP7ClhLN6NgsFe6SwJ2UbLEBK5dv9x8Mn5+RVhMWQ=="],
|
||||||
|
|
||||||
|
"@playform/compress/astro/semver": ["semver@7.7.4", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA=="],
|
||||||
|
|
||||||
"@playform/compress/astro/shiki": ["shiki@3.23.0", "", { "dependencies": { "@shikijs/core": "3.23.0", "@shikijs/engine-javascript": "3.23.0", "@shikijs/engine-oniguruma": "3.23.0", "@shikijs/langs": "3.23.0", "@shikijs/themes": "3.23.0", "@shikijs/types": "3.23.0", "@shikijs/vscode-textmate": "10.0.2", "@types/hast": "3.0.4" } }, "sha512-55Dj73uq9ZXL5zyeRPzHQsK7Nbyt6Y10k5s7OjuFZGMhpp4r/rsLBH0o/0fstIzX1Lep9VxefWljK/SKCzygIA=="],
|
"@playform/compress/astro/shiki": ["shiki@3.23.0", "", { "dependencies": { "@shikijs/core": "3.23.0", "@shikijs/engine-javascript": "3.23.0", "@shikijs/engine-oniguruma": "3.23.0", "@shikijs/langs": "3.23.0", "@shikijs/themes": "3.23.0", "@shikijs/types": "3.23.0", "@shikijs/vscode-textmate": "10.0.2", "@types/hast": "3.0.4" } }, "sha512-55Dj73uq9ZXL5zyeRPzHQsK7Nbyt6Y10k5s7OjuFZGMhpp4r/rsLBH0o/0fstIzX1Lep9VxefWljK/SKCzygIA=="],
|
||||||
|
|
||||||
"@playform/compress/astro/vite": ["vite@6.4.1", "", { "dependencies": { "esbuild": "0.25.12", "fdir": "6.5.0", "picomatch": "4.0.3", "postcss": "8.5.8", "rollup": "4.59.0", "tinyglobby": "0.2.15" }, "optionalDependencies": { "@types/node": "25.4.0", "fsevents": "2.3.3", "jiti": "2.6.1", "lightningcss": "1.30.2", "terser": "5.44.1", "yaml": "2.8.2" }, "bin": { "vite": "bin/vite.js" } }, "sha512-+Oxm7q9hDoLMyJOYfUYBuHQo+dkAloi33apOPP56pzj+vsdJDzr+j1NISE5pyaAuKL4A3UD34qd0lx5+kfKp2g=="],
|
"@playform/compress/astro/vite": ["vite@6.4.1", "", { "dependencies": { "esbuild": "0.25.12", "fdir": "6.5.0", "picomatch": "4.0.3", "postcss": "8.5.8", "rollup": "4.59.0", "tinyglobby": "0.2.15" }, "optionalDependencies": { "@types/node": "25.4.0", "fsevents": "2.3.3", "jiti": "2.6.1", "lightningcss": "1.30.2", "terser": "5.44.1", "yaml": "2.8.2" }, "bin": { "vite": "bin/vite.js" } }, "sha512-+Oxm7q9hDoLMyJOYfUYBuHQo+dkAloi33apOPP56pzj+vsdJDzr+j1NISE5pyaAuKL4A3UD34qd0lx5+kfKp2g=="],
|
||||||
@@ -3499,6 +3501,14 @@
|
|||||||
|
|
||||||
"@semantic-release/npm/fs-extra/universalify": ["universalify@2.0.1", "", {}, "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw=="],
|
"@semantic-release/npm/fs-extra/universalify": ["universalify@2.0.1", "", {}, "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw=="],
|
||||||
|
|
||||||
|
"@semantic-release/npm/read-pkg/normalize-package-data": ["normalize-package-data@8.0.0", "", { "dependencies": { "hosted-git-info": "^9.0.0", "semver": "^7.3.5", "validate-npm-package-license": "^3.0.4" } }, "sha512-RWk+PI433eESQ7ounYxIp67CYuVsS1uYSonX3kA6ps/3LWfjVQa/ptEg6Y3T6uAMq1mWpX9PQ+qx+QaHpsc7gQ=="],
|
||||||
|
|
||||||
|
"@semantic-release/npm/read-pkg/parse-json": ["parse-json@8.3.0", "", { "dependencies": { "@babel/code-frame": "^7.26.2", "index-to-position": "^1.1.0", "type-fest": "^4.39.1" } }, "sha512-ybiGyvspI+fAoRQbIPRddCcSTV9/LsJbf0e/S85VLowVGzRmokfneg2kwVW/KU5rOXrPSbF1qAKPMgNTqqROQQ=="],
|
||||||
|
|
||||||
|
"@semantic-release/npm/read-pkg/type-fest": ["type-fest@5.4.4", "", { "dependencies": { "tagged-tag": "^1.0.0" } }, "sha512-JnTrzGu+zPV3aXIUhnyWJj4z/wigMsdYajGLIYakqyOW1nPllzXEJee0QQbHj+CTIQtXGlAjuK0UY+2xTyjVAw=="],
|
||||||
|
|
||||||
|
"@semantic-release/npm/read-pkg/unicorn-magic": ["unicorn-magic@0.4.0", "", {}, "sha512-wH590V9VNgYH9g3lH9wWjTrUoKsjLF6sGLjhR4sH1LWpLmCOH0Zf7PukhDA8BiS7KHe4oPNkcTHqYkj7SOGUOw=="],
|
||||||
|
|
||||||
"@swup/parallel-plugin/@swup/plugin/prettier": ["prettier@2.8.8", "", { "bin": { "prettier": "bin-prettier.js" } }, "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q=="],
|
"@swup/parallel-plugin/@swup/plugin/prettier": ["prettier@2.8.8", "", { "bin": { "prettier": "bin-prettier.js" } }, "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q=="],
|
||||||
|
|
||||||
"@swup/route-name-plugin/@swup/plugin/prettier": ["prettier@2.8.8", "", { "bin": { "prettier": "bin-prettier.js" } }, "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q=="],
|
"@swup/route-name-plugin/@swup/plugin/prettier": ["prettier@2.8.8", "", { "bin": { "prettier": "bin-prettier.js" } }, "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q=="],
|
||||||
@@ -3537,8 +3547,6 @@
|
|||||||
|
|
||||||
"astro/svgo/css-tree": ["css-tree@3.2.1", "", { "dependencies": { "mdn-data": "2.27.1", "source-map-js": "1.2.1" } }, "sha512-X7sjQzceUhu1u7Y/ylrRZFU2FS6LRiFVp6rKLPg23y3x3c3DOKAwuXGDp+PAGjh6CSnCjYeAul8pcT8bAl+lSA=="],
|
"astro/svgo/css-tree": ["css-tree@3.2.1", "", { "dependencies": { "mdn-data": "2.27.1", "source-map-js": "1.2.1" } }, "sha512-X7sjQzceUhu1u7Y/ylrRZFU2FS6LRiFVp6rKLPg23y3x3c3DOKAwuXGDp+PAGjh6CSnCjYeAul8pcT8bAl+lSA=="],
|
||||||
|
|
||||||
"babel-plugin-macros/cosmiconfig/parse-json": ["parse-json@5.2.0", "", { "dependencies": { "@babel/code-frame": "7.29.0", "error-ex": "1.3.4", "json-parse-even-better-errors": "2.3.1", "lines-and-columns": "1.2.4" } }, "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg=="],
|
|
||||||
|
|
||||||
"babel-plugin-macros/cosmiconfig/yaml": ["yaml@1.10.2", "", {}, "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg=="],
|
"babel-plugin-macros/cosmiconfig/yaml": ["yaml@1.10.2", "", {}, "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg=="],
|
||||||
|
|
||||||
"cheerio/parse5/entities": ["entities@6.0.1", "", {}, "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g=="],
|
"cheerio/parse5/entities": ["entities@6.0.1", "", {}, "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g=="],
|
||||||
@@ -3597,6 +3605,8 @@
|
|||||||
|
|
||||||
"mlly/pkg-types/confbox": ["confbox@0.1.8", "", {}, "sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w=="],
|
"mlly/pkg-types/confbox": ["confbox@0.1.8", "", {}, "sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w=="],
|
||||||
|
|
||||||
|
"normalize-package-data/hosted-git-info/lru-cache": ["lru-cache@10.4.3", "", {}, "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ=="],
|
||||||
|
|
||||||
"npm/minipass-flush/minipass": ["minipass@3.3.6", "", { "dependencies": { "yallist": "^4.0.0" } }, "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw=="],
|
"npm/minipass-flush/minipass": ["minipass@3.3.6", "", { "dependencies": { "yallist": "^4.0.0" } }, "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw=="],
|
||||||
|
|
||||||
"npm/minipass-pipeline/minipass": ["minipass@3.3.6", "", { "dependencies": { "yallist": "^4.0.0" } }, "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw=="],
|
"npm/minipass-pipeline/minipass": ["minipass@3.3.6", "", { "dependencies": { "yallist": "^4.0.0" } }, "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw=="],
|
||||||
@@ -3619,10 +3629,6 @@
|
|||||||
|
|
||||||
"postcss-svgo/svgo/csso": ["csso@4.2.0", "", { "dependencies": { "css-tree": "1.1.3" } }, "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA=="],
|
"postcss-svgo/svgo/csso": ["csso@4.2.0", "", { "dependencies": { "css-tree": "1.1.3" } }, "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA=="],
|
||||||
|
|
||||||
"read-package-up/read-pkg/normalize-package-data": ["normalize-package-data@6.0.2", "", { "dependencies": { "hosted-git-info": "^7.0.0", "semver": "^7.3.5", "validate-npm-package-license": "^3.0.4" } }, "sha512-V6gygoYb/5EmNI+MEGrWkC+e6+Rr7mTmfHrxDbLzxQogBkgzo76rkok0Am6thgSF7Mv2nLOajAJj5vDJZEFn7g=="],
|
|
||||||
|
|
||||||
"read-package-up/read-pkg/unicorn-magic": ["unicorn-magic@0.1.0", "", {}, "sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ=="],
|
|
||||||
|
|
||||||
"rollup-plugin-bundle-size/chalk/ansi-styles": ["ansi-styles@2.2.1", "", {}, "sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA=="],
|
"rollup-plugin-bundle-size/chalk/ansi-styles": ["ansi-styles@2.2.1", "", {}, "sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA=="],
|
||||||
|
|
||||||
"rollup-plugin-bundle-size/chalk/escape-string-regexp": ["escape-string-regexp@1.0.5", "", {}, "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg=="],
|
"rollup-plugin-bundle-size/chalk/escape-string-regexp": ["escape-string-regexp@1.0.5", "", {}, "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg=="],
|
||||||
@@ -3669,6 +3675,8 @@
|
|||||||
|
|
||||||
"semantic-release/execa/strip-final-newline": ["strip-final-newline@4.0.0", "", {}, "sha512-aulFJcD6YK8V1G7iRB5tigAP4TsHBZZrOV8pjV++zdUwmeV8uzbY7yn6h9MswN62adStNZFuCIx4haBnRuMDaw=="],
|
"semantic-release/execa/strip-final-newline": ["strip-final-newline@4.0.0", "", {}, "sha512-aulFJcD6YK8V1G7iRB5tigAP4TsHBZZrOV8pjV++zdUwmeV8uzbY7yn6h9MswN62adStNZFuCIx4haBnRuMDaw=="],
|
||||||
|
|
||||||
|
"semantic-release/read-package-up/read-pkg": ["read-pkg@10.1.0", "", { "dependencies": { "@types/normalize-package-data": "^2.4.4", "normalize-package-data": "^8.0.0", "parse-json": "^8.3.0", "type-fest": "^5.4.4", "unicorn-magic": "^0.4.0" } }, "sha512-I8g2lArQiP78ll51UeMZojewtYgIRCKCWqZEgOO8c/uefTI+XDXvCSXu3+YNUaTNvZzobrL5+SqHjBrByRRTdg=="],
|
||||||
|
|
||||||
"semantic-release/read-package-up/type-fest": ["type-fest@5.4.4", "", { "dependencies": { "tagged-tag": "^1.0.0" } }, "sha512-JnTrzGu+zPV3aXIUhnyWJj4z/wigMsdYajGLIYakqyOW1nPllzXEJee0QQbHj+CTIQtXGlAjuK0UY+2xTyjVAw=="],
|
"semantic-release/read-package-up/type-fest": ["type-fest@5.4.4", "", { "dependencies": { "tagged-tag": "^1.0.0" } }, "sha512-JnTrzGu+zPV3aXIUhnyWJj4z/wigMsdYajGLIYakqyOW1nPllzXEJee0QQbHj+CTIQtXGlAjuK0UY+2xTyjVAw=="],
|
||||||
|
|
||||||
"send/mime-types/mime-db": ["mime-db@1.54.0", "", {}, "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ=="],
|
"send/mime-types/mime-db": ["mime-db@1.54.0", "", {}, "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ=="],
|
||||||
@@ -3777,6 +3785,8 @@
|
|||||||
|
|
||||||
"@semantic-release/npm/execa/npm-run-path/unicorn-magic": ["unicorn-magic@0.3.0", "", {}, "sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA=="],
|
"@semantic-release/npm/execa/npm-run-path/unicorn-magic": ["unicorn-magic@0.3.0", "", {}, "sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA=="],
|
||||||
|
|
||||||
|
"@semantic-release/npm/read-pkg/parse-json/type-fest": ["type-fest@4.41.0", "", {}, "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA=="],
|
||||||
|
|
||||||
"ansi-align/string-width/strip-ansi/ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="],
|
"ansi-align/string-width/strip-ansi/ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="],
|
||||||
|
|
||||||
"astro/svgo/css-tree/mdn-data": ["mdn-data@2.27.1", "", {}, "sha512-9Yubnt3e8A0OKwxYSXyhLymGW4sCufcLG6VdiDdUGVkPhpqLxlvP5vl1983gQjJl3tqbrM731mjaZaP68AgosQ=="],
|
"astro/svgo/css-tree/mdn-data": ["mdn-data@2.27.1", "", {}, "sha512-9Yubnt3e8A0OKwxYSXyhLymGW4sCufcLG6VdiDdUGVkPhpqLxlvP5vl1983gQjJl3tqbrM731mjaZaP68AgosQ=="],
|
||||||
@@ -3821,8 +3831,6 @@
|
|||||||
|
|
||||||
"postcss-svgo/svgo/css-tree/mdn-data": ["mdn-data@2.0.14", "", {}, "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow=="],
|
"postcss-svgo/svgo/css-tree/mdn-data": ["mdn-data@2.0.14", "", {}, "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow=="],
|
||||||
|
|
||||||
"read-package-up/read-pkg/normalize-package-data/hosted-git-info": ["hosted-git-info@7.0.2", "", { "dependencies": { "lru-cache": "^10.0.1" } }, "sha512-puUZAUKT5m8Zzvs72XWy3HtvVbTWljRE66cP60bxJzAqf2DgICo7lYTY2IHUmLnNpjYvw5bvmoHvPc0QO2a62w=="],
|
|
||||||
|
|
||||||
"rollup-plugin-bundle-size/chalk/strip-ansi/ansi-regex": ["ansi-regex@2.1.1", "", {}, "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA=="],
|
"rollup-plugin-bundle-size/chalk/strip-ansi/ansi-regex": ["ansi-regex@2.1.1", "", {}, "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA=="],
|
||||||
|
|
||||||
"rollup-plugin-postcss/chalk/ansi-styles/color-convert": ["color-convert@2.0.1", "", { "dependencies": { "color-name": "1.1.4" } }, "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ=="],
|
"rollup-plugin-postcss/chalk/ansi-styles/color-convert": ["color-convert@2.0.1", "", { "dependencies": { "color-name": "1.1.4" } }, "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ=="],
|
||||||
@@ -3841,6 +3849,12 @@
|
|||||||
|
|
||||||
"semantic-release/execa/npm-run-path/unicorn-magic": ["unicorn-magic@0.3.0", "", {}, "sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA=="],
|
"semantic-release/execa/npm-run-path/unicorn-magic": ["unicorn-magic@0.3.0", "", {}, "sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA=="],
|
||||||
|
|
||||||
|
"semantic-release/read-package-up/read-pkg/normalize-package-data": ["normalize-package-data@8.0.0", "", { "dependencies": { "hosted-git-info": "^9.0.0", "semver": "^7.3.5", "validate-npm-package-license": "^3.0.4" } }, "sha512-RWk+PI433eESQ7ounYxIp67CYuVsS1uYSonX3kA6ps/3LWfjVQa/ptEg6Y3T6uAMq1mWpX9PQ+qx+QaHpsc7gQ=="],
|
||||||
|
|
||||||
|
"semantic-release/read-package-up/read-pkg/parse-json": ["parse-json@8.3.0", "", { "dependencies": { "@babel/code-frame": "^7.26.2", "index-to-position": "^1.1.0", "type-fest": "^4.39.1" } }, "sha512-ybiGyvspI+fAoRQbIPRddCcSTV9/LsJbf0e/S85VLowVGzRmokfneg2kwVW/KU5rOXrPSbF1qAKPMgNTqqROQQ=="],
|
||||||
|
|
||||||
|
"semantic-release/read-package-up/read-pkg/unicorn-magic": ["unicorn-magic@0.4.0", "", {}, "sha512-wH590V9VNgYH9g3lH9wWjTrUoKsjLF6sGLjhR4sH1LWpLmCOH0Zf7PukhDA8BiS7KHe4oPNkcTHqYkj7SOGUOw=="],
|
||||||
|
|
||||||
"signale/chalk/supports-color/has-flag": ["has-flag@3.0.0", "", {}, "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw=="],
|
"signale/chalk/supports-color/has-flag": ["has-flag@3.0.0", "", {}, "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw=="],
|
||||||
|
|
||||||
"vitefu/vite/esbuild/@esbuild/aix-ppc64": ["@esbuild/aix-ppc64@0.25.12", "", { "os": "aix", "cpu": "ppc64" }, "sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA=="],
|
"vitefu/vite/esbuild/@esbuild/aix-ppc64": ["@esbuild/aix-ppc64@0.25.12", "", { "os": "aix", "cpu": "ppc64" }, "sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA=="],
|
||||||
@@ -3915,8 +3929,6 @@
|
|||||||
|
|
||||||
"postcss-svgo/svgo/css-select/domutils/dom-serializer": ["dom-serializer@1.4.1", "", { "dependencies": { "domelementtype": "2.3.0", "domhandler": "4.3.1", "entities": "2.2.0" } }, "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag=="],
|
"postcss-svgo/svgo/css-select/domutils/dom-serializer": ["dom-serializer@1.4.1", "", { "dependencies": { "domelementtype": "2.3.0", "domhandler": "4.3.1", "entities": "2.2.0" } }, "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag=="],
|
||||||
|
|
||||||
"read-package-up/read-pkg/normalize-package-data/hosted-git-info/lru-cache": ["lru-cache@10.4.3", "", {}, "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ=="],
|
|
||||||
|
|
||||||
"rollup-plugin-postcss/chalk/ansi-styles/color-convert/color-name": ["color-name@1.1.4", "", {}, "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="],
|
"rollup-plugin-postcss/chalk/ansi-styles/color-convert/color-name": ["color-name@1.1.4", "", {}, "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="],
|
||||||
|
|
||||||
"rollup-plugin-visualizer/yargs/cliui/strip-ansi/ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="],
|
"rollup-plugin-visualizer/yargs/cliui/strip-ansi/ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="],
|
||||||
@@ -3925,6 +3937,8 @@
|
|||||||
|
|
||||||
"rollup-plugin-visualizer/yargs/string-width/strip-ansi/ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="],
|
"rollup-plugin-visualizer/yargs/string-width/strip-ansi/ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="],
|
||||||
|
|
||||||
|
"semantic-release/read-package-up/read-pkg/parse-json/type-fest": ["type-fest@4.41.0", "", {}, "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA=="],
|
||||||
|
|
||||||
"@astrojs/check/yargs/cliui/wrap-ansi/ansi-styles/color-convert": ["color-convert@2.0.1", "", { "dependencies": { "color-name": "1.1.4" } }, "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ=="],
|
"@astrojs/check/yargs/cliui/wrap-ansi/ansi-styles/color-convert": ["color-convert@2.0.1", "", { "dependencies": { "color-name": "1.1.4" } }, "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ=="],
|
||||||
|
|
||||||
"cli-highlight/yargs/cliui/wrap-ansi/ansi-styles/color-convert": ["color-convert@2.0.1", "", { "dependencies": { "color-name": "1.1.4" } }, "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ=="],
|
"cli-highlight/yargs/cliui/wrap-ansi/ansi-styles/color-convert": ["color-convert@2.0.1", "", { "dependencies": { "color-name": "1.1.4" } }, "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ=="],
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"name": "site-profile",
|
"name": "site-profile",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"version": "3.6.0",
|
"version": "3.7.0",
|
||||||
"homepage": "https://www.alexlebens.dev",
|
"homepage": "https://www.alexlebens.dev",
|
||||||
"bugs": {
|
"bugs": {
|
||||||
"url": "https://gitea.alexlebens.dev/alexlebens/site-profile/issues",
|
"url": "https://gitea.alexlebens.dev/alexlebens/site-profile/issues",
|
||||||
@@ -19,10 +19,8 @@
|
|||||||
},
|
},
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"dev": "astro dev",
|
"dev": "astro dev",
|
||||||
"full-dev": "rm -rf dist node_modules .astro && bun install && astro build && astro dev",
|
|
||||||
"build": "astro build",
|
"build": "astro build",
|
||||||
"preview": "astro preview",
|
"preview": "astro preview",
|
||||||
"full-preview": "rm -rf dist node_modules .astro && bun install && astro build && astro preview",
|
|
||||||
"astro": "astro",
|
"astro": "astro",
|
||||||
"format": "prettier --write \"**/*.{js,jsx,ts,tsx,md,mdx,astro}\"",
|
"format": "prettier --write \"**/*.{js,jsx,ts,tsx,md,mdx,astro}\"",
|
||||||
"lint": "eslint \"src/**/*.{js,ts,jsx,tsx,astro}\"",
|
"lint": "eslint \"src/**/*.{js,ts,jsx,tsx,astro}\"",
|
||||||
@@ -69,12 +67,10 @@
|
|||||||
"@semantic-release/changelog": "^6.0.3",
|
"@semantic-release/changelog": "^6.0.3",
|
||||||
"@semantic-release/commit-analyzer": "^13.0.1",
|
"@semantic-release/commit-analyzer": "^13.0.1",
|
||||||
"@semantic-release/git": "^10.0.1",
|
"@semantic-release/git": "^10.0.1",
|
||||||
"@semantic-release/npm": "^13.1.5",
|
|
||||||
"@semantic-release/release-notes-generator": "^14.1.0",
|
"@semantic-release/release-notes-generator": "^14.1.0",
|
||||||
"@tailwindcss/forms": "^0.5.11",
|
"@tailwindcss/forms": "^0.5.11",
|
||||||
"@tailwindcss/typography": "^0.5.19",
|
"@tailwindcss/typography": "^0.5.19",
|
||||||
"@types/markdown-it": "^14.1.2",
|
"@types/markdown-it": "^14.1.2",
|
||||||
"@types/photoswipe": "^5.2.5",
|
|
||||||
"eslint": "^10.0.3",
|
"eslint": "^10.0.3",
|
||||||
"eslint-config-prettier": "^10.1.8",
|
"eslint-config-prettier": "^10.1.8",
|
||||||
"eslint-plugin-astro": "^1.6.0",
|
"eslint-plugin-astro": "^1.6.0",
|
||||||
|
|||||||
@@ -95,3 +95,5 @@ const currentPath = pathname.slice(1);
|
|||||||
</div>
|
</div>
|
||||||
</nav>
|
</nav>
|
||||||
</header>
|
</header>
|
||||||
|
|
||||||
|
<script is:inline src="/vendor/preline/collapse2.1.0.min.js"></script>
|
||||||
|
|||||||
@@ -43,93 +43,106 @@
|
|||||||
</button>
|
</button>
|
||||||
|
|
||||||
<script is:inline>
|
<script is:inline>
|
||||||
(() => {
|
const applyTheme = () => {
|
||||||
const isDark =
|
const isDark =
|
||||||
localStorage.theme === 'dark' ||
|
localStorage.theme === 'dark' ||
|
||||||
(!('theme' in localStorage) && window.matchMedia('(prefers-color-scheme: dark)').matches);
|
(!('theme' in localStorage) && window.matchMedia('(prefers-color-scheme: dark)').matches);
|
||||||
document.documentElement.classList.toggle('dark', isDark);
|
document.documentElement.classList.toggle('dark', isDark);
|
||||||
})();
|
};
|
||||||
|
|
||||||
|
applyTheme();
|
||||||
|
|
||||||
|
document.addEventListener('astro:after-swap', applyTheme);
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
if (!document.querySelector('.theme-switch-overlay')) {
|
function setupThemeToggle() {
|
||||||
const overlay = document.createElement('div');
|
const themeToggles = document.querySelectorAll('[data-theme-toggle]');
|
||||||
overlay.className = 'theme-switch-overlay fixed inset-0 pointer-events-none z-50';
|
|
||||||
overlay.style.opacity = '0';
|
|
||||||
overlay.style.transition = 'opacity 0.15s ease-out';
|
|
||||||
document.body.appendChild(overlay);
|
|
||||||
}
|
|
||||||
['click', 'touchend'].forEach((eventType) => {
|
|
||||||
document.addEventListener(
|
|
||||||
eventType,
|
|
||||||
(e) => {
|
|
||||||
const target = e.target as HTMLElement;
|
|
||||||
const toggle = target.closest('[data-theme-toggle]');
|
|
||||||
|
|
||||||
if (!toggle) return;
|
// Create theme switch overlay element
|
||||||
|
if (!document.querySelector('.theme-switch-overlay')) {
|
||||||
|
const overlay = document.createElement('div');
|
||||||
|
overlay.className = 'theme-switch-overlay fixed inset-0 pointer-events-none z-50';
|
||||||
|
overlay.style.opacity = '0';
|
||||||
|
overlay.style.transition = 'opacity 0.15s ease-out';
|
||||||
|
document.body.appendChild(overlay);
|
||||||
|
}
|
||||||
|
|
||||||
e.preventDefault();
|
themeToggles.forEach((toggle) => {
|
||||||
|
['click', 'touchend'].forEach((eventType) => {
|
||||||
|
toggle.addEventListener(
|
||||||
|
eventType,
|
||||||
|
(e) => {
|
||||||
|
e.preventDefault();
|
||||||
|
e.stopPropagation();
|
||||||
|
|
||||||
let x, y;
|
// Get click/touch position for radial animation
|
||||||
const rect = toggle.getBoundingClientRect();
|
let x, y;
|
||||||
|
if (e.type === 'touchend' && e.changedTouches && e.changedTouches[0]) {
|
||||||
if (eventType === 'touchend') {
|
const rect = toggle.getBoundingClientRect();
|
||||||
const touchEvent = e as TouchEvent;
|
x = e.changedTouches[0].clientX - rect.left;
|
||||||
if (touchEvent.changedTouches && touchEvent.changedTouches[0]) {
|
y = e.changedTouches[0].clientY - rect.top;
|
||||||
x = touchEvent.changedTouches[0].clientX - rect.left;
|
} else {
|
||||||
y = touchEvent.changedTouches[0].clientY - rect.top;
|
const rect = toggle.getBoundingClientRect();
|
||||||
}
|
x = e.clientX - rect.left;
|
||||||
} else {
|
y = e.clientY - rect.top;
|
||||||
const mouseEvent = e as MouseEvent;
|
|
||||||
x = mouseEvent.clientX - rect.left;
|
|
||||||
y = mouseEvent.clientY - rect.top;
|
|
||||||
}
|
|
||||||
|
|
||||||
document.documentElement.style.setProperty('--x', `${x}px`);
|
|
||||||
document.documentElement.style.setProperty('--y', `${y}px`);
|
|
||||||
|
|
||||||
const overlay = document.querySelector('.theme-switch-overlay') as HTMLElement;
|
|
||||||
const isDark = document.documentElement.classList.contains('dark');
|
|
||||||
const newTheme = isDark ? 'light' : 'dark';
|
|
||||||
|
|
||||||
if (overlay) {
|
|
||||||
overlay.style.backgroundColor =
|
|
||||||
newTheme === 'dark' ? 'rgba(24, 24, 27, 0.3)' : 'rgba(255, 255, 255, 0.3)';
|
|
||||||
overlay.style.opacity = '1';
|
|
||||||
}
|
|
||||||
|
|
||||||
document.documentElement.classList.add('theme-switching');
|
|
||||||
|
|
||||||
document.body.offsetHeight;
|
|
||||||
|
|
||||||
setTimeout(() => {
|
|
||||||
if (isDark) {
|
|
||||||
document.documentElement.classList.remove('dark');
|
|
||||||
} else {
|
|
||||||
document.documentElement.classList.add('dark');
|
|
||||||
}
|
|
||||||
|
|
||||||
localStorage.setItem('theme', newTheme);
|
|
||||||
document.dispatchEvent(
|
|
||||||
new CustomEvent('themeChanged', {
|
|
||||||
detail: { isDark: newTheme === 'dark' },
|
|
||||||
})
|
|
||||||
);
|
|
||||||
|
|
||||||
document.body.offsetHeight;
|
|
||||||
|
|
||||||
setTimeout(() => {
|
|
||||||
if (overlay) {
|
|
||||||
overlay.style.opacity = '0';
|
|
||||||
}
|
}
|
||||||
document.documentElement.classList.remove('theme-switching');
|
|
||||||
}, 150);
|
|
||||||
}, 50);
|
|
||||||
},
|
|
||||||
{ passive: false }
|
|
||||||
);
|
|
||||||
});
|
|
||||||
|
|
||||||
|
document.documentElement.style.setProperty('--x', `${x}px`);
|
||||||
|
document.documentElement.style.setProperty('--y', `${y}px`);
|
||||||
|
|
||||||
|
const overlay = document.querySelector('.theme-switch-overlay');
|
||||||
|
const isDark = document.documentElement.classList.contains('dark');
|
||||||
|
const newTheme = isDark ? 'light' : 'dark';
|
||||||
|
|
||||||
|
// Show overlay during transition
|
||||||
|
if (overlay) {
|
||||||
|
overlay.style.backgroundColor =
|
||||||
|
newTheme === 'dark' ? 'rgba(24, 24, 27, 0.3)' : 'rgba(255, 255, 255, 0.3)';
|
||||||
|
overlay.style.opacity = '1';
|
||||||
|
}
|
||||||
|
|
||||||
|
document.documentElement.classList.add('theme-switching');
|
||||||
|
|
||||||
|
// Force a reflow to ensure all elements update
|
||||||
|
document.body.offsetHeight;
|
||||||
|
|
||||||
|
// Toggle dark mode with a slight delay to allow overlay to appear
|
||||||
|
setTimeout(() => {
|
||||||
|
if (isDark) {
|
||||||
|
document.documentElement.classList.remove('dark');
|
||||||
|
} else {
|
||||||
|
document.documentElement.classList.add('dark');
|
||||||
|
}
|
||||||
|
|
||||||
|
localStorage.setItem('theme', newTheme);
|
||||||
|
document.dispatchEvent(
|
||||||
|
new CustomEvent('themeChanged', {
|
||||||
|
detail: { isDark: newTheme === 'dark' },
|
||||||
|
})
|
||||||
|
);
|
||||||
|
|
||||||
|
// Force another reflow to ensure all elements update
|
||||||
|
document.body.offsetHeight;
|
||||||
|
|
||||||
|
setTimeout(() => {
|
||||||
|
if (overlay) {
|
||||||
|
overlay.style.opacity = '0';
|
||||||
|
}
|
||||||
|
document.documentElement.classList.remove('theme-switching');
|
||||||
|
}, 150);
|
||||||
|
}, 50);
|
||||||
|
},
|
||||||
|
{ passive: false }
|
||||||
|
);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
// Run setup on load
|
||||||
|
document.addEventListener('astro:page-load', setupThemeToggle);
|
||||||
|
|
||||||
|
// Also run on page visibility change to ensure theme is consistent
|
||||||
document.addEventListener('visibilitychange', () => {
|
document.addEventListener('visibilitychange', () => {
|
||||||
if (document.visibilityState === 'visible') {
|
if (document.visibilityState === 'visible') {
|
||||||
const currentTheme = localStorage.getItem('theme');
|
const currentTheme = localStorage.getItem('theme');
|
||||||
@@ -141,6 +154,7 @@
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// Listen for system preference changes
|
||||||
window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', ({ matches }) => {
|
window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', ({ matches }) => {
|
||||||
if (!localStorage.getItem('theme')) {
|
if (!localStorage.getItem('theme')) {
|
||||||
if (matches) {
|
if (matches) {
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ import { Image } from 'astro:assets';
|
|||||||
import type { Post } from '@lib/directusTypes';
|
import type { Post } from '@lib/directusTypes';
|
||||||
|
|
||||||
import PostMetadataSnippet from '@/components/snippets/PostMetadataSnippet.astro';
|
import PostMetadataSnippet from '@/components/snippets/PostMetadataSnippet.astro';
|
||||||
import { getDirectusImageURL } from '@/scripts/url';
|
import { getDirectusImageURL } from '@/support/url';
|
||||||
|
|
||||||
interface Props {
|
interface Props {
|
||||||
post: Post;
|
post: Post;
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
---
|
---
|
||||||
import Logo from '@components/images/Logo.astro';
|
import Logo from '@components/images/Logo.astro';
|
||||||
import { getDirectusImageURL } from '@/scripts/url';
|
import { getDirectusImageURL } from '@/support/url';
|
||||||
|
|
||||||
interface Props {
|
interface Props {
|
||||||
slug: string;
|
slug: string;
|
||||||
@@ -22,8 +22,8 @@ const { slug, title, description, logoLight, logoDark, count, publishDate } = As
|
|||||||
data-astro-prefetch
|
data-astro-prefetch
|
||||||
>
|
>
|
||||||
<div class="relative grow overflow-hidden">
|
<div class="relative grow overflow-hidden">
|
||||||
<div class="mask-fade-edges absolute inset-1 flex flex-col p-3 md:p-4 lg:p-5">
|
<div class="absolute inset-1 flex flex-col p-3 md:p-4 lg:p-5">
|
||||||
<div class="flex flex-row items-center mb-4 shrink-0">
|
<div class="flex flex-row items-center mb-4">
|
||||||
<div class="card-hover-icon-scale shrink-0 mr-3">
|
<div class="card-hover-icon-scale shrink-0 mr-3">
|
||||||
<Logo
|
<Logo
|
||||||
srcLight={getDirectusImageURL(logoLight)}
|
srcLight={getDirectusImageURL(logoLight)}
|
||||||
@@ -35,12 +35,12 @@ const { slug, title, description, logoLight, logoDark, count, publishDate } = As
|
|||||||
{title}
|
{title}
|
||||||
</h3>
|
</h3>
|
||||||
</div>
|
</div>
|
||||||
<div class="overflow-hidden">
|
<div>
|
||||||
<p class="card-text-description line-clamp-3">
|
<p class="card-text-description mb-4">
|
||||||
{description}
|
{description}
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="card-text-description flex shrink-0 items-center justify-between text-xs mt-auto pt-1 md:pt-2">
|
<div class="card-text-description flex items-center justify-between text-xs mt-auto pt-1 md:pt-2">
|
||||||
<span class="inline-flex items-center">
|
<span class="inline-flex items-center">
|
||||||
<svg
|
<svg
|
||||||
xmlns="http://www.w3.org/2000/svg"
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
import { Icon } from 'astro-icon/components';
|
import { Icon } from 'astro-icon/components';
|
||||||
|
|
||||||
import Logo from '@components/images/Logo.astro';
|
import Logo from '@components/images/Logo.astro';
|
||||||
import { getDirectusImageURL } from '@/scripts/url';
|
import { getDirectusImageURL } from '@/support/url';
|
||||||
|
|
||||||
interface Props {
|
interface Props {
|
||||||
topic: string;
|
topic: string;
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ import type { Post } from '@lib/directusTypes';
|
|||||||
|
|
||||||
import ReadMoreButton from '@components/buttons/ReadMoreButton.astro';
|
import ReadMoreButton from '@components/buttons/ReadMoreButton.astro';
|
||||||
import PostMetadataSnippet from '@/components/snippets/PostMetadataSnippet.astro';
|
import PostMetadataSnippet from '@/components/snippets/PostMetadataSnippet.astro';
|
||||||
import { getDirectusImageURL } from '@/scripts/url';
|
import { getDirectusImageURL } from '@/support/url';
|
||||||
|
|
||||||
interface Props {
|
interface Props {
|
||||||
post: Post;
|
post: Post;
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ import type { Post } from '@lib/directusTypes';
|
|||||||
|
|
||||||
import ReadMoreButton from '@components/buttons/ReadMoreButton.astro';
|
import ReadMoreButton from '@components/buttons/ReadMoreButton.astro';
|
||||||
import PostMetadataSnippet from '@/components/snippets/PostMetadataSnippet.astro';
|
import PostMetadataSnippet from '@/components/snippets/PostMetadataSnippet.astro';
|
||||||
import { getDirectusImageURL } from '@/scripts/url';
|
import { getDirectusImageURL } from '@/support/url';
|
||||||
|
|
||||||
interface Props {
|
interface Props {
|
||||||
post: Post;
|
post: Post;
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
---
|
---
|
||||||
import Logo from '@components/images/Logo.astro';
|
import Logo from '@components/images/Logo.astro';
|
||||||
import { getDirectusImageURL } from '@/scripts/url';
|
import { getDirectusImageURL } from '@/support/url';
|
||||||
|
|
||||||
interface Props {
|
interface Props {
|
||||||
url: string;
|
url: string;
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
import { Icon } from 'astro-icon/components';
|
import { Icon } from 'astro-icon/components';
|
||||||
import { Image } from 'astro:assets';
|
import { Image } from 'astro:assets';
|
||||||
|
|
||||||
import { getDirectusImageURL } from '@/scripts/url';
|
import { getDirectusImageURL } from '@/support/url';
|
||||||
|
|
||||||
interface Props {
|
interface Props {
|
||||||
title: string;
|
title: string;
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
---
|
---
|
||||||
import ReadMoreButton from '@components/buttons/ReadMoreButton.astro';
|
import ReadMoreButton from '@components/buttons/ReadMoreButton.astro';
|
||||||
import Logo from '@components/images/Logo.astro';
|
import Logo from '@components/images/Logo.astro';
|
||||||
import { getDirectusImageURL } from '@/scripts/url';
|
import { getDirectusImageURL } from '@/support/url';
|
||||||
|
|
||||||
interface Props {
|
interface Props {
|
||||||
title: string;
|
title: string;
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ import type { Post } from '@lib/directusTypes';
|
|||||||
import CategoryCard from '@components/cards/CategoryCard.astro';
|
import CategoryCard from '@components/cards/CategoryCard.astro';
|
||||||
import LargeCategoryCard from '@components/cards/LargeCategoryCard.astro';
|
import LargeCategoryCard from '@components/cards/LargeCategoryCard.astro';
|
||||||
import directus from '@lib/directus';
|
import directus from '@lib/directus';
|
||||||
import { formatFromNow } from '@/scripts/time';
|
import { formatFromNow } from '@support/time';
|
||||||
|
|
||||||
const global = await directus.request(readSingleton('site_global'));
|
const global = await directus.request(readSingleton('site_global'));
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
---
|
---
|
||||||
import GoLinkPrimaryButton from '@components/buttons/GoLinkPrimaryButton.astro';
|
import GoLinkPrimaryButton from '@components/buttons/GoLinkPrimaryButton.astro';
|
||||||
import Logo from '@components/images/Logo.astro';
|
import Logo from '@components/images/Logo.astro';
|
||||||
import { getDirectusImageURL } from '@/scripts/url';
|
import { getDirectusImageURL } from '@/support/url';
|
||||||
|
|
||||||
interface Props {
|
interface Props {
|
||||||
title: string;
|
title: string;
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ import type { HeaderImage } from '@lib/directusTypes';
|
|||||||
import GoLinkPrimaryButton from '@components/buttons/GoLinkPrimaryButton.astro';
|
import GoLinkPrimaryButton from '@components/buttons/GoLinkPrimaryButton.astro';
|
||||||
import GoLinkSecondaryButton from '@components/buttons/GoLinkSecondaryButton.astro';
|
import GoLinkSecondaryButton from '@components/buttons/GoLinkSecondaryButton.astro';
|
||||||
import directus from '@lib/directus';
|
import directus from '@lib/directus';
|
||||||
import { getDirectusImageURL } from '@/scripts/url';
|
import { getDirectusImageURL } from '@/support/url';
|
||||||
|
|
||||||
interface Props {
|
interface Props {
|
||||||
title: string;
|
title: string;
|
||||||
@@ -82,7 +82,7 @@ const images = await Promise.all(imagesData.map(async (img) => ({
|
|||||||
</section>
|
</section>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
function initHeroImage() {
|
document.addEventListener('astro:page-load', () => {
|
||||||
const container = document.getElementById('hero-image-container');
|
const container = document.getElementById('hero-image-container');
|
||||||
if (container) {
|
if (container) {
|
||||||
const images = container.querySelectorAll('.hero-image');
|
const images = container.querySelectorAll('.hero-image');
|
||||||
@@ -96,13 +96,5 @@ const images = await Promise.all(imagesData.map(async (img) => ({
|
|||||||
images[randomIndex].classList.add('flex');
|
images[randomIndex].classList.add('flex');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
});
|
||||||
if (document.readyState === 'loading') {
|
|
||||||
document.addEventListener('DOMContentLoaded', initHeroImage);
|
|
||||||
} else {
|
|
||||||
initHeroImage();
|
|
||||||
}
|
|
||||||
if ((window as any).swup) {
|
|
||||||
(window as any).swup.hooks.on('page:view', initHeroImage);
|
|
||||||
}
|
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ const global = await directus.request(readSingleton('site_global'));
|
|||||||
const { posts, title, subTitle } = Astro.props;
|
const { posts, title, subTitle } = Astro.props;
|
||||||
---
|
---
|
||||||
|
|
||||||
<section class="max-w-340 2xl:max-w-full px-4 sm:px-6 lg:px-8 py-10 lg:py-14 mx-auto mb-2 md:mb-4">
|
<section class="max-w-340 2xl:max-w-full px-4 sm:px-6 lg:px-8 py-10 lg:py-14 mx-auto mb-2 md:mb-8">
|
||||||
<div class="text-center max-w-2xl mx-auto mb-10 lg:mb-14">
|
<div class="text-center max-w-2xl mx-auto mb-10 lg:mb-14">
|
||||||
<h1 class="smooth-reveal card-text-header block">
|
<h1 class="smooth-reveal card-text-header block">
|
||||||
{title}
|
{title}
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ interface Props {
|
|||||||
const { posts } = Astro.props;
|
const { posts } = Astro.props;
|
||||||
---
|
---
|
||||||
|
|
||||||
<section class="smooth-reveal-cards flex flex-col gap-4 md:mb-20">
|
<section class="smooth-reveal flex flex-col gap-4 md:mb-20">
|
||||||
{posts.map((post, index) => index % 2 === 0 ? (
|
{posts.map((post, index) => index % 2 === 0 ? (
|
||||||
<LargeBlogLeftCard post={post}/>
|
<LargeBlogLeftCard post={post}/>
|
||||||
) : (
|
) : (
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
---
|
---
|
||||||
import WeatherCard from '@components/cards/WeatherCard.astro';
|
import WeatherCard from '@components/cards/WeatherCard.astro';
|
||||||
import { getFiveDayForecast } from '@/scripts/weather';
|
import { getFiveDayForecast } from '@support/weather';
|
||||||
|
|
||||||
const { latitude = "44.95", longitude = "-93.09", cityName = "St. Paul, Minnesota", timezone = "America/Chicago" } = Astro.props;
|
const { latitude = "44.95", longitude = "-93.09", cityName = "St. Paul, Minnesota", timezone = "America/Chicago" } = Astro.props;
|
||||||
|
|
||||||
@@ -20,7 +20,7 @@ const { forecastDays, error } = await getFiveDayForecast(latitude, longitude, ti
|
|||||||
</div>
|
</div>
|
||||||
{error ? (
|
{error ? (
|
||||||
<div class="card-base p-10 text-accent text-center">
|
<div class="card-base p-10 text-accent text-center">
|
||||||
Sorry, {error.toLowerCase()}
|
Sorry, {error.toLowerCase}
|
||||||
</div>
|
</div>
|
||||||
) : (
|
) : (
|
||||||
<div class="flex flex-wrap justify-center gap-4 lg:gap-6">
|
<div class="flex flex-wrap justify-center gap-4 lg:gap-6">
|
||||||
|
|||||||
@@ -4,8 +4,8 @@ import getReadingTime from 'reading-time';
|
|||||||
import type { Post } from '@lib/directusTypes';
|
import type { Post } from '@lib/directusTypes';
|
||||||
|
|
||||||
import Logo from '@components/images/Logo.astro';
|
import Logo from '@components/images/Logo.astro';
|
||||||
import { formatShortDate, formatDate } from '@/scripts/time';
|
import { formatShortDate, formatDate } from '@support/time';
|
||||||
import { getDirectusImageURL } from '@/scripts/url';
|
import { getDirectusImageURL } from '@/support/url';
|
||||||
|
|
||||||
interface Props {
|
interface Props {
|
||||||
post: Post;
|
post: Post;
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
---
|
---
|
||||||
|
import { ClientRouter } from 'astro:transitions';
|
||||||
import { readSingleton } from '@directus/sdk';
|
import { readSingleton } from '@directus/sdk';
|
||||||
|
|
||||||
import BaseHead from '@components/BaseHead.astro';
|
import BaseHead from '@components/BaseHead.astro';
|
||||||
@@ -38,7 +39,8 @@ const normalizeTitle = !title ? global.name : `${title} | ${global.name}`;
|
|||||||
structuredData={structuredData}
|
structuredData={structuredData}
|
||||||
/>
|
/>
|
||||||
|
|
||||||
<!-- Set Theme -->
|
<ClientRouter fallback="swap" />
|
||||||
|
|
||||||
<script is:inline>
|
<script is:inline>
|
||||||
const theme = (() => {
|
const theme = (() => {
|
||||||
if (typeof localStorage !== 'undefined' && localStorage.getItem('theme')) {
|
if (typeof localStorage !== 'undefined' && localStorage.getItem('theme')) {
|
||||||
@@ -58,12 +60,6 @@ const normalizeTitle = !title ? global.name : `${title} | ${global.name}`;
|
|||||||
window.localStorage.setItem('theme', theme);
|
window.localStorage.setItem('theme', theme);
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<!-- Preline -->
|
|
||||||
<script
|
|
||||||
src="/vendor/preline/collapse2.1.0.min.js"
|
|
||||||
is:inline
|
|
||||||
/>
|
|
||||||
|
|
||||||
<!-- Rybbit Tracking Snippet -->
|
<!-- Rybbit Tracking Snippet -->
|
||||||
<script
|
<script
|
||||||
src="https://rybbit.alexlebens.dev/api/script.js"
|
src="https://rybbit.alexlebens.dev/api/script.js"
|
||||||
@@ -101,29 +97,14 @@ const normalizeTitle = !title ? global.name : `${title} | ${global.name}`;
|
|||||||
</html>
|
</html>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
import { initPhotoSwipe } from '@/scripts/photoswipe';
|
|
||||||
import { animateContent } from '@/scripts/animations';
|
|
||||||
|
|
||||||
const resetScroll = () => {
|
const resetScroll = () => {
|
||||||
const scrollContainer = document.getElementById('reset-scroll');
|
const scrollContainer = document.getElementById('reset-scroll');
|
||||||
if (scrollContainer) scrollContainer.scrollTop = 0;
|
if (scrollContainer) {
|
||||||
|
scrollContainer.scrollTop = 0;
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
resetScroll();
|
resetScroll();
|
||||||
initPhotoSwipe();
|
document.addEventListener('astro:after-swap', resetScroll);
|
||||||
animateContent();
|
|
||||||
|
|
||||||
document.addEventListener('swup:page:view', () => {
|
|
||||||
resetScroll();
|
|
||||||
initPhotoSwipe();
|
|
||||||
animateContent();
|
|
||||||
if (typeof (window as any).HSStaticMethods !== 'undefined') {
|
|
||||||
(window as any).HSStaticMethods.autoInit();
|
|
||||||
}
|
|
||||||
if (typeof (window as any).rybbit === 'function') {
|
|
||||||
(window as any).rybbit('trackPageview');
|
|
||||||
}
|
|
||||||
});
|
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style>
|
<style>
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ import type {
|
|||||||
Skill,
|
Skill,
|
||||||
} from '@lib/directusTypes';
|
} from '@lib/directusTypes';
|
||||||
|
|
||||||
import { getDirectusURL } from '@/scripts/url';
|
import { getDirectusURL } from '@/support/url';
|
||||||
|
|
||||||
type Schema = {
|
type Schema = {
|
||||||
site_global: Global;
|
site_global: Global;
|
||||||
|
|||||||
@@ -86,6 +86,24 @@ const global = await directus.request(readSingleton('site_global'));
|
|||||||
const randomFact = funFacts[Math.floor(Math.random() * funFacts.length)];
|
const randomFact = funFacts[Math.floor(Math.random() * funFacts.length)];
|
||||||
funFactElement.textContent = randomFact;
|
funFactElement.textContent = randomFact;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Add smooth reveal animations for content after loading
|
||||||
|
document.addEventListener('astro:page-load', () => {
|
||||||
|
const animateContent = () => {
|
||||||
|
// Animate group 1
|
||||||
|
const smoothReveal = document.querySelectorAll('.smooth-reveal');
|
||||||
|
smoothReveal.forEach((el, index) => {
|
||||||
|
setTimeout(
|
||||||
|
() => {
|
||||||
|
el.classList.add('animate-reveal');
|
||||||
|
},
|
||||||
|
100 + index * 150
|
||||||
|
);
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
animateContent();
|
||||||
|
});
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style>
|
<style>
|
||||||
|
|||||||
@@ -47,3 +47,33 @@ const global = await directus.request(readSingleton('site_global'));
|
|||||||
</section>
|
</section>
|
||||||
|
|
||||||
</BaseLayout>
|
</BaseLayout>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
// Add smooth reveal animations for content after loading
|
||||||
|
document.addEventListener('astro:page-load', () => {
|
||||||
|
const animateContent = () => {
|
||||||
|
const smoothReveal = document.querySelectorAll('.smooth-reveal');
|
||||||
|
smoothReveal.forEach((el, index) => {
|
||||||
|
setTimeout(
|
||||||
|
() => {
|
||||||
|
el.classList.add('animate-reveal');
|
||||||
|
},
|
||||||
|
50 + index * 100
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
// Animate with just fade in with staggered delay
|
||||||
|
const smoothRevealFade = document.querySelectorAll('.smooth-reveal-fade');
|
||||||
|
smoothRevealFade.forEach((el, index) => {
|
||||||
|
setTimeout(
|
||||||
|
() => {
|
||||||
|
el.classList.add('animate-reveal-fade');
|
||||||
|
},
|
||||||
|
100 + index * 250
|
||||||
|
);
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
animateContent();
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|||||||
@@ -52,3 +52,56 @@ const posts = await directus.request(
|
|||||||
</section>
|
</section>
|
||||||
|
|
||||||
</BaseLayout>
|
</BaseLayout>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
// Add smooth reveal animations for content after loading
|
||||||
|
document.addEventListener('astro:page-load', () => {
|
||||||
|
const animateContent = () => {
|
||||||
|
// Animate group 1
|
||||||
|
const smoothReveal = document.querySelectorAll('.smooth-reveal');
|
||||||
|
smoothReveal.forEach((el, index) => {
|
||||||
|
setTimeout(
|
||||||
|
() => {
|
||||||
|
el.classList.add('animate-reveal');
|
||||||
|
},
|
||||||
|
50 + index * 100
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
// Animate group 2
|
||||||
|
const smoothReveal2 = document.querySelectorAll('.smooth-reveal-2');
|
||||||
|
smoothReveal2.forEach((el, index) => {
|
||||||
|
setTimeout(
|
||||||
|
() => {
|
||||||
|
el.classList.add('animate-reveal');
|
||||||
|
},
|
||||||
|
200 + index * 150
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
// Animate topic cards with staggered delay
|
||||||
|
const smoothRevealCards = document.querySelectorAll('.smooth-reveal-cards');
|
||||||
|
smoothRevealCards.forEach((el, index) => {
|
||||||
|
setTimeout(
|
||||||
|
() => {
|
||||||
|
el.classList.add('animate-reveal');
|
||||||
|
},
|
||||||
|
500 + index * 100
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
// Animate with just fade in with staggered delay
|
||||||
|
const smoothRevealFade = document.querySelectorAll('.smooth-reveal-fade');
|
||||||
|
smoothRevealFade.forEach((el, index) => {
|
||||||
|
setTimeout(
|
||||||
|
() => {
|
||||||
|
el.classList.add('animate-reveal-fade');
|
||||||
|
},
|
||||||
|
100 + index * 250
|
||||||
|
);
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
animateContent();
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|||||||
@@ -37,3 +37,23 @@ const global = await directus.request(readSingleton('site_global'));
|
|||||||
<ApplicationSection className="smooth-reveal-2" />
|
<ApplicationSection className="smooth-reveal-2" />
|
||||||
|
|
||||||
</BaseLayout>
|
</BaseLayout>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
// Add smooth reveal animations for content after loading
|
||||||
|
document.addEventListener('astro:page-load', () => {
|
||||||
|
const animateContent = () => {
|
||||||
|
// Animate group 1
|
||||||
|
const smoothReveal = document.querySelectorAll('.smooth-reveal');
|
||||||
|
smoothReveal.forEach((el, index) => {
|
||||||
|
setTimeout(
|
||||||
|
() => {
|
||||||
|
el.classList.add('animate-reveal');
|
||||||
|
},
|
||||||
|
50 + index * 100
|
||||||
|
);
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
animateContent();
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|||||||
@@ -1,64 +1,51 @@
|
|||||||
---
|
---
|
||||||
|
|
||||||
import { Image } from 'astro:assets';
|
import { Image } from 'astro:assets';
|
||||||
import { marked } from 'marked';
|
import { marked } from 'marked';
|
||||||
import markedShiki from 'marked-shiki';
|
import markedShiki from 'marked-shiki';
|
||||||
import { createHighlighter } from 'shiki';
|
import { createHighlighter } from 'shiki';
|
||||||
import { readItems, readSingleton } from '@directus/sdk';
|
import { readItems, readSingleton } from '@directus/sdk';
|
||||||
import "photoswipe/style.css";
|
import 'photoswipe/style.css';
|
||||||
|
|
||||||
import type { Post } from '@/lib/directusTypes'
|
|
||||||
|
|
||||||
import SocialShareButton from '@components/buttons/SocialShareButton.astro';
|
import SocialShareButton from '@components/buttons/SocialShareButton.astro';
|
||||||
import PostMetadataSnippet from '@/components/snippets/PostMetadataSnippet.astro';
|
import PostMetadataSnippet from '@/components/snippets/PostMetadataSnippet.astro';
|
||||||
import BaseLayout from '@layouts/BaseLayout.astro';
|
import BaseLayout from '@layouts/BaseLayout.astro';
|
||||||
import directus from '@lib/directus';
|
import directus from '@lib/directus';
|
||||||
import { getDirectusImageURL } from '@/scripts/url';
|
import { getDirectusImageURL } from '@/support/url';
|
||||||
|
|
||||||
|
const post = Astro.props;
|
||||||
|
|
||||||
export async function getStaticPaths() {
|
export async function getStaticPaths() {
|
||||||
const posts = await directus.request(readItems('posts', {
|
const posts = await directus.request(readItems('posts', {
|
||||||
fields: ['*', { category: ['*'] }],
|
fields: ['*', { category: ['*'] }],
|
||||||
}));
|
}));
|
||||||
const globalData = await directus.request(readSingleton('site_global'));
|
return posts.map((post) => ({
|
||||||
const highlighter = await createHighlighter({
|
|
||||||
themes: ['github-light', 'github-dark'],
|
|
||||||
langs: ['typescript', 'python', 'css', 'html', 'yaml', 'bash', 'json'],
|
|
||||||
});
|
|
||||||
const renderer = {
|
|
||||||
image({ href, title, text }: { href: string; title: string | null; text: string }) {
|
|
||||||
return `
|
|
||||||
<a
|
|
||||||
href="${href}"
|
|
||||||
class="pswp-link"
|
|
||||||
data-pswp-src="${href}"
|
|
||||||
target="_blank"
|
|
||||||
>
|
|
||||||
<img src="${href}" alt="${text}" title="${title || ''}" loading="lazy" />
|
|
||||||
</a>
|
|
||||||
`;
|
|
||||||
},
|
|
||||||
};
|
|
||||||
marked.use({ renderer });
|
|
||||||
marked.use(markedShiki({
|
|
||||||
highlight(code, lang) {
|
|
||||||
return highlighter.codeToHtml(code, {
|
|
||||||
lang: lang || 'plaintext',
|
|
||||||
themes: { light: 'github-light', dark: 'github-dark' },
|
|
||||||
defaultColor: false,
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}));
|
|
||||||
|
|
||||||
return posts.map((post: Post) => ({
|
|
||||||
params: { slug: post.slug },
|
params: { slug: post.slug },
|
||||||
props: {
|
props: post,
|
||||||
post,
|
|
||||||
global: globalData,
|
|
||||||
content: marked.parse(post.content || ''),
|
|
||||||
},
|
|
||||||
}));
|
}));
|
||||||
}
|
}
|
||||||
|
|
||||||
const { post, global, content } = Astro.props;
|
const global = await directus.request(readSingleton('site_global'));
|
||||||
|
|
||||||
|
const highlighter = await createHighlighter({
|
||||||
|
themes: ['github-light', 'github-dark'],
|
||||||
|
langs: ['typescript', 'python', 'css', 'html', 'yaml', 'bash', 'json'],
|
||||||
|
});
|
||||||
|
|
||||||
|
marked.use(markedShiki({
|
||||||
|
highlight(code, lang) {
|
||||||
|
return highlighter.codeToHtml(code, {
|
||||||
|
lang: lang || 'plaintext',
|
||||||
|
themes: {
|
||||||
|
light: 'github-light',
|
||||||
|
dark: 'github-dark',
|
||||||
|
},
|
||||||
|
defaultColor: false,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}));
|
||||||
|
|
||||||
|
const content = marked.parse(post.content || '');
|
||||||
---
|
---
|
||||||
|
|
||||||
<BaseLayout
|
<BaseLayout
|
||||||
@@ -78,7 +65,7 @@ const { post, global, content } = Astro.props;
|
|||||||
name: global.name,
|
name: global.name,
|
||||||
description: global.about,
|
description: global.about,
|
||||||
},
|
},
|
||||||
image: [getDirectusImageURL(post.image)],
|
image: [],
|
||||||
headline: post.title,
|
headline: post.title,
|
||||||
datePublished: post.published_date,
|
datePublished: post.published_date,
|
||||||
dateModified: post.updated_date,
|
dateModified: post.updated_date,
|
||||||
@@ -98,7 +85,7 @@ const { post, global, content } = Astro.props;
|
|||||||
<Image
|
<Image
|
||||||
class="rounded-2xl sm:rounded-b-none w-full max-h-150 object-cover"
|
class="rounded-2xl sm:rounded-b-none w-full max-h-150 object-cover"
|
||||||
src={getDirectusImageURL(post.image)}
|
src={getDirectusImageURL(post.image)}
|
||||||
alt={post.image_alt || post.title}
|
alt={post.image_alt}
|
||||||
draggable="false"
|
draggable="false"
|
||||||
format="webp"
|
format="webp"
|
||||||
loading="lazy"
|
loading="lazy"
|
||||||
@@ -123,15 +110,13 @@ const { post, global, content } = Astro.props;
|
|||||||
</article>
|
</article>
|
||||||
|
|
||||||
<div class="grid sm:flex sm:items-center sm:justify-between gap-y-5 sm:gap-y-0 max-w-5xl mx-auto mt-10 md:mt-14">
|
<div class="grid sm:flex sm:items-center sm:justify-between gap-y-5 sm:gap-y-0 max-w-5xl mx-auto mt-10 md:mt-14">
|
||||||
{post.tags && post.tags.length > 0 && (
|
<div class="flex flex-wrap sm:flex-nowrap sm:items-center gap-x-2 gap-y-1 sm:gap-y-0">
|
||||||
<div class="flex flex-wrap sm:flex-nowrap sm:items-center gap-x-2 gap-y-1 sm:gap-y-0">
|
{post.tags.map((tag: string) => (
|
||||||
{post.tags.map((tag: string) => (
|
<span class="inline-flex items-center button-base bg-cobalt dark:bg-turquoise text-neutral-100 text-xs font-bold rounded-lg gap-x-1.5 px-3 py-1.5">
|
||||||
<span class="inline-flex items-center button-base bg-cobalt dark:bg-turquoise text-neutral-100 text-xs font-bold rounded-lg gap-x-1.5 px-3 py-1.5">
|
{tag}
|
||||||
{tag}
|
</span>
|
||||||
</span>
|
))}
|
||||||
))}
|
</div>
|
||||||
</div>
|
|
||||||
)}
|
|
||||||
<SocialShareButton pageTitle={post.title}/>
|
<SocialShareButton pageTitle={post.title}/>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -154,3 +139,56 @@ const { post, global, content } = Astro.props;
|
|||||||
</style>
|
</style>
|
||||||
|
|
||||||
</BaseLayout>
|
</BaseLayout>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import PhotoSwipeLightbox from 'photoswipe/lightbox';
|
||||||
|
const prose = document.querySelector('.prose');
|
||||||
|
if (prose) {
|
||||||
|
const images = prose.querySelectorAll('img');
|
||||||
|
images.forEach((img) => {
|
||||||
|
if (img.closest('a')) return;
|
||||||
|
const link = document.createElement('a');
|
||||||
|
link.href = img.src;
|
||||||
|
link.dataset.pswpSrc = img.src;
|
||||||
|
link.dataset.pswpWidth = img.naturalWidth.toString();
|
||||||
|
link.dataset.pswpHeight = img.naturalHeight.toString();
|
||||||
|
link.target = '_blank';
|
||||||
|
link.classList.add('pswp-link');
|
||||||
|
|
||||||
|
img.parentNode?.insertBefore(link, img);
|
||||||
|
link.appendChild(img);
|
||||||
|
|
||||||
|
if (!img.complete) {
|
||||||
|
img.onload = () => {
|
||||||
|
link.dataset.pswpWidth = img.naturalWidth.toString();
|
||||||
|
link.dataset.pswpHeight = img.naturalHeight.toString();
|
||||||
|
};
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
const lightbox = new PhotoSwipeLightbox({
|
||||||
|
gallery: prose,
|
||||||
|
children: 'a.pswp-link',
|
||||||
|
pswpModule: () => import('photoswipe'),
|
||||||
|
});
|
||||||
|
|
||||||
|
lightbox.init();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Add smooth reveal animations for content after loading
|
||||||
|
document.addEventListener('astro:page-load', () => {
|
||||||
|
const animateContent = () => {
|
||||||
|
const smoothReveal = document.querySelectorAll('.smooth-reveal');
|
||||||
|
smoothReveal.forEach((el, index) => {
|
||||||
|
setTimeout(
|
||||||
|
() => {
|
||||||
|
el.classList.add('animate-reveal');
|
||||||
|
},
|
||||||
|
100 + index * 100
|
||||||
|
);
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
animateContent();
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|||||||
@@ -57,3 +57,56 @@ const recentPosts: Post[] = posts.filter(
|
|||||||
/>
|
/>
|
||||||
|
|
||||||
</BaseLayout>
|
</BaseLayout>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
// Add smooth reveal animations for content after loading
|
||||||
|
document.addEventListener('astro:page-load', () => {
|
||||||
|
const animateContent = () => {
|
||||||
|
// Animate group 1
|
||||||
|
const smoothReveal = document.querySelectorAll('.smooth-reveal');
|
||||||
|
smoothReveal.forEach((el, index) => {
|
||||||
|
setTimeout(
|
||||||
|
() => {
|
||||||
|
el.classList.add('animate-reveal');
|
||||||
|
},
|
||||||
|
200 + index * 300
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
// Animate group 2
|
||||||
|
const smoothReveal2 = document.querySelectorAll('.smooth-reveal-2');
|
||||||
|
smoothReveal2.forEach((el, index) => {
|
||||||
|
setTimeout(
|
||||||
|
() => {
|
||||||
|
el.classList.add('animate-reveal');
|
||||||
|
},
|
||||||
|
500 + index * 100
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
// Animate topic cards with staggered delay
|
||||||
|
const smoothRevealCards = document.querySelectorAll('.smooth-reveal-cards');
|
||||||
|
smoothRevealCards.forEach((el, index) => {
|
||||||
|
setTimeout(
|
||||||
|
() => {
|
||||||
|
el.classList.add('animate-reveal');
|
||||||
|
},
|
||||||
|
1000 + index * 250
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
// Animate with just fade in with staggered delay
|
||||||
|
const smoothRevealFade = document.querySelectorAll('.smooth-reveal-fade');
|
||||||
|
smoothRevealFade.forEach((el, index) => {
|
||||||
|
setTimeout(
|
||||||
|
() => {
|
||||||
|
el.classList.add('animate-reveal-fade');
|
||||||
|
},
|
||||||
|
100 + index * 250
|
||||||
|
);
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
animateContent();
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|||||||
@@ -75,3 +75,56 @@ const categoriesPosts = posts
|
|||||||
</section>
|
</section>
|
||||||
|
|
||||||
</BaseLayout>
|
</BaseLayout>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
// Add smooth reveal animations for content after loading
|
||||||
|
document.addEventListener('astro:page-load', () => {
|
||||||
|
const animateContent = () => {
|
||||||
|
// Animate group 1
|
||||||
|
const smoothReveal = document.querySelectorAll('.smooth-reveal');
|
||||||
|
smoothReveal.forEach((el, index) => {
|
||||||
|
setTimeout(
|
||||||
|
() => {
|
||||||
|
el.classList.add('animate-reveal');
|
||||||
|
},
|
||||||
|
50 + index * 100
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
// Animate group 2
|
||||||
|
const smoothReveal2 = document.querySelectorAll('.smooth-reveal-2');
|
||||||
|
smoothReveal2.forEach((el, index) => {
|
||||||
|
setTimeout(
|
||||||
|
() => {
|
||||||
|
el.classList.add('animate-reveal');
|
||||||
|
},
|
||||||
|
200 + index * 150
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
// Animate topic cards with staggered delay
|
||||||
|
const smoothRevealCards = document.querySelectorAll('.smooth-reveal-cards');
|
||||||
|
smoothRevealCards.forEach((el, index) => {
|
||||||
|
setTimeout(
|
||||||
|
() => {
|
||||||
|
el.classList.add('animate-reveal');
|
||||||
|
},
|
||||||
|
500 + index * 100
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
// Animate with just fade in with staggered delay
|
||||||
|
const smoothRevealFade = document.querySelectorAll('.smooth-reveal-fade');
|
||||||
|
smoothRevealFade.forEach((el, index) => {
|
||||||
|
setTimeout(
|
||||||
|
() => {
|
||||||
|
el.classList.add('animate-reveal-fade');
|
||||||
|
},
|
||||||
|
100 + index * 250
|
||||||
|
);
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
animateContent();
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|||||||
@@ -37,3 +37,56 @@ const global = await directus.request(readSingleton('site_global'));
|
|||||||
<CategorySection />
|
<CategorySection />
|
||||||
|
|
||||||
</BaseLayout>
|
</BaseLayout>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
// Add smooth reveal animations for content after loading
|
||||||
|
document.addEventListener('astro:page-load', () => {
|
||||||
|
const animateContent = () => {
|
||||||
|
// Animate group 1
|
||||||
|
const smoothReveal = document.querySelectorAll('.smooth-reveal');
|
||||||
|
smoothReveal.forEach((el, index) => {
|
||||||
|
setTimeout(
|
||||||
|
() => {
|
||||||
|
el.classList.add('animate-reveal');
|
||||||
|
},
|
||||||
|
50 + index * 100
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
// Animate group 2
|
||||||
|
const smoothReveal2 = document.querySelectorAll('.smooth-reveal-2');
|
||||||
|
smoothReveal2.forEach((el, index) => {
|
||||||
|
setTimeout(
|
||||||
|
() => {
|
||||||
|
el.classList.add('animate-reveal');
|
||||||
|
},
|
||||||
|
200 + index * 150
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
// Animate topic cards with staggered delay
|
||||||
|
const smoothRevealCards = document.querySelectorAll('.smooth-reveal-cards');
|
||||||
|
smoothRevealCards.forEach((el, index) => {
|
||||||
|
setTimeout(
|
||||||
|
() => {
|
||||||
|
el.classList.add('animate-reveal');
|
||||||
|
},
|
||||||
|
500 + index * 100
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
// Animate with just fade in with staggered delay
|
||||||
|
const smoothRevealFade = document.querySelectorAll('.smooth-reveal-fade');
|
||||||
|
smoothRevealFade.forEach((el, index) => {
|
||||||
|
setTimeout(
|
||||||
|
() => {
|
||||||
|
el.classList.add('animate-reveal-fade');
|
||||||
|
},
|
||||||
|
100 + index * 250
|
||||||
|
);
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
animateContent();
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|||||||
@@ -55,25 +55,19 @@ const recentPosts = posts
|
|||||||
|
|
||||||
<FeatureSection />
|
<FeatureSection />
|
||||||
|
|
||||||
<RecentPostsSection
|
|
||||||
posts={recentPosts}
|
|
||||||
title="Latest Posts"
|
|
||||||
subTitle="Checkout my most recent thoughts here"
|
|
||||||
/>
|
|
||||||
|
|
||||||
<WeatherSection
|
<WeatherSection
|
||||||
server:defer
|
server:defer
|
||||||
latitude={weather.latitude}
|
latitude={weather.latitude}
|
||||||
longitude={weather.longitude}
|
longitude={weather.longitude}
|
||||||
cityName={weather.location}
|
cityName={weather.location}
|
||||||
timezone={weather.timezone}
|
timezone={weather.timezone}
|
||||||
>
|
/>
|
||||||
<div slot="fallback" class="flex items-center justify-center py-10 lg:py-14">
|
|
||||||
<p class="smooth-reveal card-text-header block">
|
<RecentPostsSection
|
||||||
Loading weather...
|
posts={recentPosts}
|
||||||
</p>
|
title="Latest Posts"
|
||||||
</div>
|
subTitle="Checkout my most recent thoughts here"
|
||||||
</WeatherSection>
|
/>
|
||||||
|
|
||||||
<GiteaSection
|
<GiteaSection
|
||||||
title="Follow me on Gitea"
|
title="Follow me on Gitea"
|
||||||
@@ -82,3 +76,62 @@ const recentPosts = posts
|
|||||||
/>
|
/>
|
||||||
|
|
||||||
</BaseLayout>
|
</BaseLayout>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
// Add smooth reveal animations for content after loading
|
||||||
|
document.addEventListener('astro:page-load', () => {
|
||||||
|
const animateContent = () => {
|
||||||
|
// Animate group 1
|
||||||
|
const smoothReveal = document.querySelectorAll('.smooth-reveal');
|
||||||
|
smoothReveal.forEach((el, index) => {
|
||||||
|
setTimeout(
|
||||||
|
() => {
|
||||||
|
el.classList.add('animate-reveal');
|
||||||
|
},
|
||||||
|
50 + index * 100
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
// Animate group 2
|
||||||
|
const smoothReveal2 = document.querySelectorAll('.smooth-reveal-2');
|
||||||
|
smoothReveal2.forEach((el, index) => {
|
||||||
|
setTimeout(
|
||||||
|
() => {
|
||||||
|
el.classList.add('animate-reveal');
|
||||||
|
},
|
||||||
|
200 + index * 250
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
// Animate topic cards with staggered delay
|
||||||
|
const smoothRevealCards = document.querySelectorAll('.smooth-reveal-cards');
|
||||||
|
smoothRevealCards.forEach((el, index) => {
|
||||||
|
setTimeout(
|
||||||
|
() => {
|
||||||
|
el.classList.add('animate-reveal');
|
||||||
|
},
|
||||||
|
400 + index * 250
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
// Animate with just fade in with staggered delay
|
||||||
|
const smoothRevealFade = document.querySelectorAll('.smooth-reveal-fade');
|
||||||
|
smoothRevealFade.forEach((el, index) => {
|
||||||
|
setTimeout(
|
||||||
|
() => {
|
||||||
|
el.classList.add('animate-reveal-fade');
|
||||||
|
},
|
||||||
|
100 + index * 250
|
||||||
|
);
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
animateContent();
|
||||||
|
|
||||||
|
const observer = new MutationObserver(() => {
|
||||||
|
animateContent();
|
||||||
|
});
|
||||||
|
|
||||||
|
observer.observe(document.body, { childList: true, subtree: true });
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|||||||
@@ -1,31 +0,0 @@
|
|||||||
const animateContent = () => {
|
|
||||||
const smoothReveal = document.querySelectorAll('.smooth-reveal');
|
|
||||||
smoothReveal.forEach((el, index) => {
|
|
||||||
setTimeout(() => {
|
|
||||||
el.classList.add('animate-reveal');
|
|
||||||
}, 50 + index * 100);
|
|
||||||
});
|
|
||||||
|
|
||||||
const smoothReveal2 = document.querySelectorAll('.smooth-reveal-2');
|
|
||||||
smoothReveal2.forEach((el, index) => {
|
|
||||||
setTimeout(() => {
|
|
||||||
el.classList.add('animate-reveal');
|
|
||||||
}, 200 + index * 250);
|
|
||||||
});
|
|
||||||
|
|
||||||
const smoothRevealCards = document.querySelectorAll('.smooth-reveal-cards');
|
|
||||||
smoothRevealCards.forEach((el, index) => {
|
|
||||||
setTimeout(() => {
|
|
||||||
el.classList.add('animate-reveal');
|
|
||||||
}, 400 + index * 250);
|
|
||||||
});
|
|
||||||
|
|
||||||
const smoothRevealFade = document.querySelectorAll('.smooth-reveal-fade');
|
|
||||||
smoothRevealFade.forEach((el, index) => {
|
|
||||||
setTimeout(() => {
|
|
||||||
el.classList.add('animate-reveal-fade');
|
|
||||||
}, 100 + index * 250);
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
export { animateContent };
|
|
||||||
@@ -1,38 +0,0 @@
|
|||||||
import PhotoSwipeLightbox from 'photoswipe/lightbox';
|
|
||||||
import PhotoSwipe from "photoswipe";
|
|
||||||
|
|
||||||
let lightbox: PhotoSwipeLightbox | null = null;
|
|
||||||
|
|
||||||
function initPhotoSwipe() {
|
|
||||||
const links = document.querySelectorAll<HTMLAnchorElement>('a.pswp-link');
|
|
||||||
|
|
||||||
links.forEach((link) => {
|
|
||||||
const img = link.querySelector('img');
|
|
||||||
if (img) {
|
|
||||||
const applyDimensions = () => {
|
|
||||||
link.dataset.pswpWidth = (img.naturalWidth || 1920).toString();
|
|
||||||
link.dataset.pswpHeight = (img.naturalHeight || 1080).toString();
|
|
||||||
};
|
|
||||||
if (img.complete) {
|
|
||||||
applyDimensions();
|
|
||||||
} else {
|
|
||||||
img.addEventListener('load', applyDimensions);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
if (lightbox) {
|
|
||||||
lightbox.destroy();
|
|
||||||
}
|
|
||||||
|
|
||||||
lightbox = new PhotoSwipeLightbox({
|
|
||||||
gallery: '.prose',
|
|
||||||
children: 'a.pswp-link',
|
|
||||||
pswpModule: PhotoSwipe,
|
|
||||||
allowPanToNext: true,
|
|
||||||
});
|
|
||||||
|
|
||||||
lightbox.init();
|
|
||||||
}
|
|
||||||
|
|
||||||
export { initPhotoSwipe };
|
|
||||||
@@ -1,7 +1,5 @@
|
|||||||
@import 'tailwindcss';
|
@import 'tailwindcss';
|
||||||
@import './utilities-buttons.css';
|
@import './utilities.css';
|
||||||
@import './utilities-cards.css';
|
|
||||||
@import './utilities-misc.css';
|
|
||||||
|
|
||||||
@plugin '@tailwindcss/typography';
|
@plugin '@tailwindcss/typography';
|
||||||
@plugin '@tailwindcss/forms';
|
@plugin '@tailwindcss/forms';
|
||||||
@@ -45,33 +43,6 @@
|
|||||||
--color-background-card: light-dark(color-mix(in srgb, var(--color-neutral-100) 80%, transparent), color-mix(in srgb, var(--color-neutral-800) 60%, transparent));
|
--color-background-card: light-dark(color-mix(in srgb, var(--color-neutral-100) 80%, transparent), color-mix(in srgb, var(--color-neutral-800) 60%, transparent));
|
||||||
|
|
||||||
--color-divider: light-dark(color-mix(in srgb, var(--color-slate-400) 40%, transparent), color-mix(in srgb, var(--color-neutral-500) 50%, transparent));
|
--color-divider: light-dark(color-mix(in srgb, var(--color-slate-400) 40%, transparent), color-mix(in srgb, var(--color-neutral-500) 50%, transparent));
|
||||||
|
|
||||||
/* Typography */
|
|
||||||
--color-prose-blog-body: var(--color-neutral-700);
|
|
||||||
--color-prose-blog-headings: var(--color-neutral-900);
|
|
||||||
--color-prose-blog-links: var(--color-orange-300);
|
|
||||||
|
|
||||||
--color-prose-blog-invert-body: var(--color-neutral-400);
|
|
||||||
--color-prose-blog-invert-headings: var(--color-neutral-200);
|
|
||||||
|
|
||||||
--radius-markdown-img: 0.5rem;
|
|
||||||
|
|
||||||
/* Shiki */
|
|
||||||
--color-shiki-bg: light-dark(var(--color-neutral-200), var(--color-neutral-800));
|
|
||||||
--color-shiki-text: light-dark(var(--shiki-light), var(--shiki-dark));
|
|
||||||
|
|
||||||
/* Reveal Animations */
|
|
||||||
--animate-reveal: reveal 0.8s ease forwards;
|
|
||||||
--animate-reveal-fade: reveal-fade 1.8s ease forwards;
|
|
||||||
|
|
||||||
@keyframes reveal {
|
|
||||||
from { opacity: 0; transform: translateY(20px); }
|
|
||||||
to { opacity: 1; transform: translateY(0); }
|
|
||||||
}
|
|
||||||
@keyframes reveal-fade {
|
|
||||||
from { opacity: 0; }
|
|
||||||
to { opacity: 1; }
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@layer base {
|
@layer base {
|
||||||
@@ -80,6 +51,7 @@
|
|||||||
-moz-osx-font-smoothing: grayscale;
|
-moz-osx-font-smoothing: grayscale;
|
||||||
|
|
||||||
--theme-transition: 0.3s ease;
|
--theme-transition: 0.3s ease;
|
||||||
|
--scroll-offset: 0px;
|
||||||
}
|
}
|
||||||
|
|
||||||
:root:where(.dark, .dark *) {
|
:root:where(.dark, .dark *) {
|
||||||
@@ -118,56 +90,56 @@
|
|||||||
border-color var(--theme-transition);
|
border-color var(--theme-transition);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Typography */
|
/* Shiki syntax highlighting */
|
||||||
.prose blockquote {
|
:root {
|
||||||
font-style: normal;
|
--shiki-fg: var(--shiki-light);
|
||||||
quotes: none;
|
--shiki-bg: var(--color-neutral-200);
|
||||||
}
|
}
|
||||||
|
|
||||||
.prose img {
|
.dark {
|
||||||
@apply rounded-lg;
|
--shiki-fg: var(--shiki-dark);
|
||||||
|
--shiki-bg: var(--color-neutral-800);
|
||||||
}
|
}
|
||||||
|
|
||||||
.prose-blog {
|
|
||||||
--tw-prose-body: var(--color-neutral-700);
|
|
||||||
--tw-prose-headings: var(--color-neutral-900);
|
|
||||||
--tw-prose-lead: var(--color-neutral-700);
|
|
||||||
--tw-prose-links: var(--color-orange-300);
|
|
||||||
--tw-prose-bold: var(--color-neutral-900);
|
|
||||||
--tw-prose-counters: var(--color-neutral-600);
|
|
||||||
--tw-prose-bullets: var(--color-neutral-400);
|
|
||||||
--tw-prose-hr: var(--color-neutral-300);
|
|
||||||
--tw-prose-quotes: var(--color-neutral-500);
|
|
||||||
--tw-prose-quote-borders: var(--color-neutral-300);
|
|
||||||
--tw-prose-captions: var(--color-neutral-700);
|
|
||||||
--tw-prose-code: var(--color-neutral-700);
|
|
||||||
--tw-prose-pre-code: var(--color-neutral-900);
|
|
||||||
--tw-prose-pre-bg: var(--color-white);
|
|
||||||
--tw-prose-th-borders: var(--color-neutral-300);
|
|
||||||
--tw-prose-td-borders: var(--color-neutral-200);
|
|
||||||
|
|
||||||
&:where(.dark, .dark *) {
|
|
||||||
--tw-prose-body: var(--color-neutral-400);
|
|
||||||
--tw-prose-headings: var(--color-neutral-200);
|
|
||||||
--tw-prose-lead: var(--color-neutral-300);
|
|
||||||
--tw-prose-links: var(--color-orange-300);
|
|
||||||
--tw-prose-bold: var(--color-neutral-300);
|
|
||||||
--tw-prose-counters: var(--color-neutral-400);
|
|
||||||
--tw-prose-bullets: var(--color-neutral-600);
|
|
||||||
--tw-prose-hr: var(--color-neutral-700);
|
|
||||||
--tw-prose-quotes: var(--color-neutral-500);
|
|
||||||
--tw-prose-quote-borders: var(--color-neutral-500);
|
|
||||||
--tw-prose-captions: var(--color-neutral-400);
|
|
||||||
--tw-prose-code: var(--color-neutral-350);
|
|
||||||
--tw-prose-pre-code: var(--color-neutral-300);
|
|
||||||
--tw-prose-th-borders: var(--color-neutral-600);
|
|
||||||
--tw-prose-td-borders: var(--color-neutral-700);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Shiki */
|
|
||||||
pre.shiki {
|
pre.shiki {
|
||||||
background-color: var(--shiki-bg) !important;
|
background-color: var(--shiki-bg) !important;
|
||||||
color: var(--shiki-fg) !important;
|
color: var(--shiki-fg) !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pre.shiki span {
|
||||||
|
color: var(--shiki-light);
|
||||||
|
}
|
||||||
|
|
||||||
|
.dark pre.shiki span {
|
||||||
|
color: var(--shiki-dark) !important;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Content reveal animations */
|
||||||
|
.smooth-reveal,
|
||||||
|
.smooth-reveal-2,
|
||||||
|
.smooth-reveal-cards {
|
||||||
|
opacity: 0;
|
||||||
|
transform: translateY(20px);
|
||||||
|
transition:
|
||||||
|
opacity 0.8s ease,
|
||||||
|
transform 0.8s ease;
|
||||||
|
}
|
||||||
|
|
||||||
|
.animate-reveal {
|
||||||
|
opacity: 1 !important;
|
||||||
|
transform: translateY(0) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.smooth-reveal-fade {
|
||||||
|
opacity: 0;
|
||||||
|
transform: translateY(0px);
|
||||||
|
transition:
|
||||||
|
opacity 1.8s ease,
|
||||||
|
transform 0.8s ease;
|
||||||
|
}
|
||||||
|
|
||||||
|
.animate-reveal-fade {
|
||||||
|
opacity: 1 !important;
|
||||||
|
transform: translateY(0) !important;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,51 +0,0 @@
|
|||||||
@utility button-base {
|
|
||||||
@apply transition-all duration-300
|
|
||||||
border border-transparent
|
|
||||||
shadow-sm hover:shadow-md dark:shadow-md dark:hover:shadow-lg
|
|
||||||
px-4 py-3
|
|
||||||
}
|
|
||||||
|
|
||||||
@utility button-base-hidden {
|
|
||||||
@apply transition-all duration-300
|
|
||||||
border border-transparent
|
|
||||||
hover:bg-neutral-200 dark:hover:bg-neutral-700
|
|
||||||
p-2
|
|
||||||
}
|
|
||||||
|
|
||||||
@utility button-hover-arrow {
|
|
||||||
@apply translate-y-px transition duration-300
|
|
||||||
group-hover:translate-x-1
|
|
||||||
h-3 w-3 md:h-5 md:w-5
|
|
||||||
}
|
|
||||||
|
|
||||||
@utility button-text-title {
|
|
||||||
@apply text-neutral-200 2xl:text-base
|
|
||||||
text-sm font-bold
|
|
||||||
}
|
|
||||||
|
|
||||||
@utility button-text-title-hidden {
|
|
||||||
@apply transition-all duration-300
|
|
||||||
text-neutral-600 group-hover:text-neutral-700 dark:text-neutral-400 dark:group-hover:text-neutral-300 2xl:text-base
|
|
||||||
text-sm font-medium
|
|
||||||
}
|
|
||||||
|
|
||||||
@utility button-bg-blue {
|
|
||||||
@apply transition-all duration-300
|
|
||||||
bg-cobalt hover:bg-steel dark:bg-steel dark:hover:bg-cobalt
|
|
||||||
}
|
|
||||||
|
|
||||||
@utility button-bg-teal {
|
|
||||||
@apply transition-all duration-300
|
|
||||||
bg-bermuda hover:bg-turquoise group-hover:bg-turquoise dark:bg-turquoise dark:hover:bg-bermuda dark:group-hover:bg-bermuda
|
|
||||||
}
|
|
||||||
|
|
||||||
@utility button-bg-neutral {
|
|
||||||
@apply transition-all duration-300
|
|
||||||
border border-neutral-100 dark:border-stone-500/20
|
|
||||||
bg-background-card hover:bg-neutral-100 dark:hover:bg-neutral-800/90
|
|
||||||
}
|
|
||||||
|
|
||||||
@utility button-bg-gitea {
|
|
||||||
@apply transition-all duration-300
|
|
||||||
bg-gitea-primary hover:bg-gitea-secondary dark:bg-gitea-secondary dark:hover:bg-gitea-primary
|
|
||||||
}
|
|
||||||
@@ -1,44 +0,0 @@
|
|||||||
/* Nav */
|
|
||||||
@utility nav-base {
|
|
||||||
@apply border border-neutral-100 dark:border-stone-500/20
|
|
||||||
bg-neutral-100 dark:bg-neutral-800
|
|
||||||
shadow-xs dark:shadow-md
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Fade edges of a div */
|
|
||||||
@utility mask-fade-edges {
|
|
||||||
-webkit-mask-image:
|
|
||||||
linear-gradient(to right, transparent, black var(--fade-dist, 1rem), black calc(100% - var(--fade-dist, 1rem)), transparent),
|
|
||||||
linear-gradient(to bottom, transparent, black var(--fade-dist, 1rem), black calc(100% - var(--fade-dist, 1rem)), transparent);
|
|
||||||
mask-image:
|
|
||||||
linear-gradient(to right, transparent, black var(--fade-dist, 1rem), black calc(100% - var(--fade-dist, 1rem)), transparent),
|
|
||||||
linear-gradient(to bottom, transparent, black var(--fade-dist, 1rem), black calc(100% - var(--fade-dist, 1rem)), transparent);
|
|
||||||
|
|
||||||
-webkit-mask-composite: source-in;
|
|
||||||
mask-composite: intersect;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Animations */
|
|
||||||
@utility smooth-reveal {
|
|
||||||
opacity: 0;
|
|
||||||
transform: translateY(20px);
|
|
||||||
transition: opacity 0.8s ease, transform 0.8s ease;
|
|
||||||
}
|
|
||||||
|
|
||||||
@utility smooth-reveal-2 {
|
|
||||||
opacity: 0;
|
|
||||||
transform: translateY(20px);
|
|
||||||
transition: opacity 0.8s ease, transform 0.8s ease;
|
|
||||||
}
|
|
||||||
|
|
||||||
@utility smooth-reveal-cards {
|
|
||||||
opacity: 0;
|
|
||||||
transform: translateY(20px);
|
|
||||||
transition: opacity 0.8s ease, transform 0.8s ease;
|
|
||||||
}
|
|
||||||
|
|
||||||
@utility smooth-reveal-fade {
|
|
||||||
opacity: 0;
|
|
||||||
transform: translateY(0px);
|
|
||||||
transition: opacity 1.8s ease, transform 0.8s ease;
|
|
||||||
}
|
|
||||||
@@ -1,3 +1,57 @@
|
|||||||
|
/* Button classes */
|
||||||
|
@utility button-base {
|
||||||
|
@apply transition-all duration-300
|
||||||
|
border border-transparent
|
||||||
|
shadow-sm hover:shadow-md dark:shadow-md dark:hover:shadow-lg
|
||||||
|
px-4 py-3
|
||||||
|
}
|
||||||
|
|
||||||
|
@utility button-base-hidden {
|
||||||
|
@apply transition-all duration-300
|
||||||
|
border border-transparent
|
||||||
|
hover:bg-neutral-200 dark:hover:bg-neutral-700
|
||||||
|
p-2
|
||||||
|
}
|
||||||
|
|
||||||
|
@utility button-hover-arrow {
|
||||||
|
@apply translate-y-px transition duration-300
|
||||||
|
group-hover:translate-x-1
|
||||||
|
h-3 w-3 md:h-5 md:w-5
|
||||||
|
}
|
||||||
|
|
||||||
|
@utility button-text-title {
|
||||||
|
@apply text-neutral-200 2xl:text-base
|
||||||
|
text-sm font-bold
|
||||||
|
}
|
||||||
|
|
||||||
|
@utility button-text-title-hidden {
|
||||||
|
@apply transition-all duration-300
|
||||||
|
text-neutral-600 group-hover:text-neutral-700 dark:text-neutral-400 dark:group-hover:text-neutral-300 2xl:text-base
|
||||||
|
text-sm font-medium
|
||||||
|
}
|
||||||
|
|
||||||
|
@utility button-bg-blue {
|
||||||
|
@apply transition-all duration-300
|
||||||
|
bg-cobalt hover:bg-steel dark:bg-steel dark:hover:bg-cobalt
|
||||||
|
}
|
||||||
|
|
||||||
|
@utility button-bg-teal {
|
||||||
|
@apply transition-all duration-300
|
||||||
|
bg-bermuda hover:bg-turquoise group-hover:bg-turquoise dark:bg-turquoise dark:hover:bg-bermuda dark:group-hover:bg-bermuda
|
||||||
|
}
|
||||||
|
|
||||||
|
@utility button-bg-neutral {
|
||||||
|
@apply transition-all duration-300
|
||||||
|
border border-neutral-100 dark:border-stone-500/20
|
||||||
|
bg-background-card hover:bg-neutral-100 dark:hover:bg-neutral-800/90
|
||||||
|
}
|
||||||
|
|
||||||
|
@utility button-bg-gitea {
|
||||||
|
@apply transition-all duration-300
|
||||||
|
bg-gitea-primary hover:bg-gitea-secondary dark:bg-gitea-secondary dark:hover:bg-gitea-primary
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Card classes */
|
||||||
@utility card-base {
|
@utility card-base {
|
||||||
@apply transition-all duration-300
|
@apply transition-all duration-300
|
||||||
rounded-xl
|
rounded-xl
|
||||||
@@ -77,3 +131,10 @@
|
|||||||
@apply transition-all duration-300
|
@apply transition-all duration-300
|
||||||
text-secondary-hover
|
text-secondary-hover
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Misc */
|
||||||
|
@utility nav-base {
|
||||||
|
@apply border border-neutral-100 dark:border-stone-500/20
|
||||||
|
bg-neutral-100 dark:bg-neutral-800
|
||||||
|
shadow-xs dark:shadow-md
|
||||||
|
}
|
||||||
50
src/support/animation.ts
Normal file
50
src/support/animation.ts
Normal file
@@ -0,0 +1,50 @@
|
|||||||
|
// Add smooth reveal animations for content after loading
|
||||||
|
document.addEventListener('astro:page-load', () => {
|
||||||
|
const animateContent = () => {
|
||||||
|
// Animate group 1
|
||||||
|
const smoothReveal = document.querySelectorAll('.smooth-reveal');
|
||||||
|
smoothReveal.forEach((el, index) => {
|
||||||
|
setTimeout(
|
||||||
|
() => {
|
||||||
|
el.classList.add('animate-reveal');
|
||||||
|
},
|
||||||
|
50 + index * 100
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
// Animate group 2
|
||||||
|
const smoothReveal2 = document.querySelectorAll('.smooth-reveal-2');
|
||||||
|
smoothReveal2.forEach((el, index) => {
|
||||||
|
setTimeout(
|
||||||
|
() => {
|
||||||
|
el.classList.add('animate-reveal');
|
||||||
|
},
|
||||||
|
200 + index * 250
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
// Animate topic cards with staggered delay
|
||||||
|
const smoothRevealCards = document.querySelectorAll('.smooth-reveal-cards');
|
||||||
|
smoothRevealCards.forEach((el, index) => {
|
||||||
|
setTimeout(
|
||||||
|
() => {
|
||||||
|
el.classList.add('animate-reveal');
|
||||||
|
},
|
||||||
|
400 + index * 250
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
// Animate with just fade in with staggered delay
|
||||||
|
const smoothRevealFade = document.querySelectorAll('.smooth-reveal-fade');
|
||||||
|
smoothRevealFade.forEach((el, index) => {
|
||||||
|
setTimeout(
|
||||||
|
() => {
|
||||||
|
el.classList.add('animate-reveal-fade');
|
||||||
|
},
|
||||||
|
100 + index * 250
|
||||||
|
);
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
animateContent();
|
||||||
|
});
|
||||||
@@ -1,6 +1,64 @@
|
|||||||
/** @type {import('tailwindcss').Config} */
|
/** @type {import('tailwindcss').Config} */
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
content: ['./node_modules/preline/preline.js'],
|
content: [
|
||||||
plugins: [require('preline/plugin')],
|
'./src/**/*.{astro,html,js,jsx,md,mdx,svelte,ts,tsx,vue}',
|
||||||
|
'./node_modules/preline/preline.js',
|
||||||
|
],
|
||||||
|
darkMode: 'class',
|
||||||
|
theme: {
|
||||||
|
extend: {
|
||||||
|
typography: ({ theme }) => ({
|
||||||
|
blog: {
|
||||||
|
css: {
|
||||||
|
'--tw-prose-body': theme('colors.neutral[700]'),
|
||||||
|
'--tw-prose-headings': theme('colors.neutral[900]'),
|
||||||
|
'--tw-prose-lead': theme('colors.neutral[700]'),
|
||||||
|
'--tw-prose-links': theme('colors.orange[300]'),
|
||||||
|
'--tw-prose-bold': theme('colors.neutral[900]'),
|
||||||
|
'--tw-prose-counters': theme('colors.neutral[600]'),
|
||||||
|
'--tw-prose-bullets': theme('colors.neutral[400]'),
|
||||||
|
'--tw-prose-hr': theme('colors.neutral[300]'),
|
||||||
|
'--tw-prose-quotes': theme('colors.neutral[500]'),
|
||||||
|
'--tw-prose-quote-borders': theme('colors.neutral[300]'),
|
||||||
|
'--tw-prose-captions': theme('colors.neutral[700]'),
|
||||||
|
'--tw-prose-code': theme('colors.neutral[700]'),
|
||||||
|
'--tw-prose-pre-code': theme('colors.neutral[900]'),
|
||||||
|
'--tw-prose-pre-bg': theme('colors.white'),
|
||||||
|
'--tw-prose-th-borders': theme('colors.neutral[300]'),
|
||||||
|
'--tw-prose-td-borders': theme('colors.neutral[200]'),
|
||||||
|
|
||||||
|
'--tw-prose-invert-body': theme('colors.neutral[400]'),
|
||||||
|
'--tw-prose-invert-headings': theme('colors.neutral[200]'),
|
||||||
|
'--tw-prose-invert-lead': theme('colors.neutral[300]'),
|
||||||
|
'--tw-prose-invert-links': theme('colors.orange[300]'),
|
||||||
|
'--tw-prose-invert-bold': theme('colors.neutral[300]'),
|
||||||
|
'--tw-prose-invert-counters': theme('colors.neutral[400]'),
|
||||||
|
'--tw-prose-invert-bullets': theme('colors.neutral[600]'),
|
||||||
|
'--tw-prose-invert-hr': theme('colors.neutral[700]'),
|
||||||
|
'--tw-prose-invert-quotes': theme('colors.neutral[500]'),
|
||||||
|
'--tw-prose-invert-quote-borders': theme('colors.neutral[500]'),
|
||||||
|
'--tw-prose-invert-captions': theme('colors.neutral[400]'),
|
||||||
|
'--tw-prose-invert-code': theme('colors.neutral[350]'),
|
||||||
|
'--tw-prose-invert-pre-code': theme('colors.neutral[300]'),
|
||||||
|
'--tw-prose-invert-th-borders': theme('colors.neutral[600]'),
|
||||||
|
'--tw-prose-invert-td-borders': theme('colors.neutral[700]'),
|
||||||
|
},
|
||||||
|
},
|
||||||
|
DEFAULT: {
|
||||||
|
css: {
|
||||||
|
blockquote: {
|
||||||
|
fontStyle: 'normal',
|
||||||
|
quotes: 'none',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}),
|
||||||
|
},
|
||||||
|
},
|
||||||
|
plugins: [
|
||||||
|
require('tailwindcss/nesting'),
|
||||||
|
require('preline/plugin'),
|
||||||
|
require('@tailwindcss/typography'),
|
||||||
|
],
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -4,21 +4,20 @@
|
|||||||
"exclude": ["dist"],
|
"exclude": ["dist"],
|
||||||
"compilerOptions": {
|
"compilerOptions": {
|
||||||
"strictNullChecks": true,
|
"strictNullChecks": true,
|
||||||
"baseUrl": ".",
|
"baseUrl": "src",
|
||||||
"jsx": "react-jsx",
|
"jsx": "react-jsx",
|
||||||
"jsxImportSource": "react",
|
|
||||||
"types": ["astro/client"],
|
"types": ["astro/client"],
|
||||||
"paths": {
|
"paths": {
|
||||||
"@/*": ["src/*"],
|
"@/*": ["*"],
|
||||||
"@src/*": ["src/*"],
|
"@src/*": ["src/*"],
|
||||||
"@lib/*": ["src/lib/*"],
|
"@lib/*": ["lib/*"],
|
||||||
"@components/*": ["src/components/*"],
|
"@components/*": ["components/*"],
|
||||||
"@content/*": ["src/content/*"],
|
"@content/*": ["content/*"],
|
||||||
"@layouts/*": ["src/layouts/*"],
|
"@layouts/*": ["layouts/*"],
|
||||||
"@styles/*": ["src/styles/*"],
|
"@styles/*": ["styles/*"],
|
||||||
"@pages/*": ["src/pages/*"],
|
"@pages/*": ["pages/*"],
|
||||||
"@support/*": ["src/scripts/*"],
|
"@support/*": ["support/*"],
|
||||||
"@images/*": ["src/images/*"]
|
"@images/*": ["images/*"]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user