Compare commits

..

No commits in common. "main" and "v3.1.9-dev01" have entirely different histories.

383 changed files with 11950 additions and 10591 deletions

View File

@ -1,11 +0,0 @@
{
"$schema": "https://unpkg.com/@changesets/config@3.0.0/schema.json",
"changelog": "@changesets/cli/changelog",
"commit": false,
"fixed": [],
"linked": [],
"access": "public",
"baseBranch": "main",
"updateInternalDependencies": "patch",
"ignore": ["astro-playground", "starlight-playground"]
}

10
.github/FUNDING.yml vendored
View File

@ -1,3 +1,13 @@
# These are supported funding model platforms
github: #[adammatthiesen]
patreon: # Replace with a single Patreon username
open_collective: # Replace with a single Open Collective username
ko_fi: # Replace with a single Ko-fi username
tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel
community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry
liberapay: # Replace with a single Liberapay username
issuehunt: # Replace with a single IssueHunt username
otechie: # Replace with a single Otechie username
lfx_crowdfunding: # Replace with a single LFX Crowdfunding project-name e.g., cloud-foundry
custom: ['https://www.buymeacoffee.com/adammatthiesen/membership']

View File

@ -1,18 +0,0 @@
---
name: New Chore
about: Used to create a new Chore for a needed task
title: "Chore: [NAME]"
labels: chore
---
**Is your chore related to a problem? Please describe.**
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
**Describe the solution you'd like**
A clear and concise description of what you want to happen.
**Describe alternatives you've considered**
A clear and concise description of any alternative solutions or features you've considered.
**Additional context**
Add any other context or screenshots about the feature request here.

View File

@ -9,10 +9,6 @@ updates:
directory: "/" # Location of package manifests
schedule:
interval: "weekly"
groups:
prod-dependencies:
dependency-type: "production"
dev-dependencies:
dependency-type: "development"
labels:
- "npm"
- "dependencies"

View File

@ -1,38 +0,0 @@
branchName: 'issue-${issue.number}-${issue.title[0,32]}'
gitReplaceChars: '/<>'
autoLinkIssue: true
openDraftPR: true
prSkipCI: true
copyIssueDescriptionToPR: true
copyIssueLabelsToPR: true
copyIssueAssigneeToPR: true
copyIssueProjectsToPR: true
copyIssueMilestoneToPR: true
conventionalPrTitles: true
conventionalLabels:
fix:
bug: '🐛'
dependencies: '⬆️'
security: '🔒'
feat:
enhancement: '✨'
new-stuff: '🚀'
build:
build: '🔧'
chore:
chore: '♻️'
ci:
ci: '👷'
docs:
documentation: '📝'
style:
style: '💎'
refactor:
refactor: '♻️'
perf:
performance: '⚡️'
test:
test: '✅'
breaking:
breaking-change: '💥'
breaking change: '💥'

View File

@ -1,18 +0,0 @@
name: Auto Issue Branch
on:
issues:
types: [ opened, assigned ]
issue_comment:
types: [ created ]
pull_request:
types: [ opened, closed ]
jobs:
create_issue_branch_job:
runs-on: ubuntu-latest
steps:
- name: Create Issue Branch
uses: robvanderleek/create-issue-branch@main
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

View File

@ -1,16 +0,0 @@
name: "Changesets: Build Changesets for Dependabot"
on: pull_request
permissions:
contents: write
pull-requests: write
jobs:
changesets:
runs-on: ubuntu-latest
if: ${{ github.actor == 'dependabot[bot]' }}
steps:
- name: Dependabot Changesets
uses: feelepxyz/dependabot-changesets@v1

View File

@ -1,38 +0,0 @@
name: "Changesets: Publish Packages from main"
on:
push:
branches:
- main
permissions:
pull-requests: write
contents: write
env:
CI: true
jobs:
version:
timeout-minutes: 15
runs-on: ubuntu-latest
steps:
- name: checkout code repository
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: setup node.js
uses: actions/setup-node@v4
with:
node-version: 20
- name: install pnpm
run: npm i pnpm@latest -g
- name: Setup npmrc
run: echo "//registry.npmjs.org/:_authToken=${{ secrets.NPM_TOKEN }}" > .npmrc
- name: install dependencies
run: pnpm install --no-frozen-lockfile
- name: create and publish versions
uses: matthiesenxyz/changeset@v1
with:
version: pnpm ci:version
commit: "chore: update versions"
title: "👷 [ci]: Ready for Release"
publish: pnpm ci:publish
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

View File

@ -1,17 +0,0 @@
name: Write coauthors to a pull request
permissions:
pull-requests: write
on:
issue_comment:
types:
- created
jobs:
generate-coauthors:
name: Generate Coauthor
if: ${{ github.event.issue.pull_request }}
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: kevinzunigacuellar/coauthor-action@v0.1.2

View File

@ -1,22 +0,0 @@
name: "Sync: GitHub => GitLab"
on:
- push
- delete
jobs:
sync:
runs-on: ubuntu-latest
name: Git Repo Sync
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- uses: MatthiesenXYZ/git-sync-action@v1.1
with:
# Such as https://github.com/wangchucheng/git-repo-sync.git
target-url: ${{ secrets.GITLAB_URL }}
# Such as wangchucheng
target-username: ${{ secrets.GITLAB_USERNAME }}
# You can store token in your project's 'Setting > Secrets' and reference the name here. Such as ${{ secrets.ACCESS\_TOKEN }}
target-token: ${{ secrets.GITLAB_ACCESS }}

27
.github/workflows/lighthouse.yml vendored Normal file
View File

@ -0,0 +1,27 @@
name: Unlighthouse - Demo Site
on:
workflow_dispatch:
jobs:
Unlighthouse-demo:
runs-on: ubuntu-latest
defaults:
run:
working-directory: ./unlighthouse
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Install Dependencies
run: npm install -g @unlighthouse/cli puppeteer netlify-cli
- name: Unlighthouse assertions and client
run: unlighthouse-ci --site demo.astro-ghostcms.xyz --budget 75 --build-static
- name: Deploy
run: netlify deploy --dir=.unlighthouse --prod --message="New Release Deploy from GitHub Actions"
env:
NETLIFY_AUTH_TOKEN: ${{ secrets.NETLIFY_AUTH_TOKEN }}
NETLIFY_SITE_ID: ${{ secrets.NETLIFY_SITE_ID }}

View File

@ -0,0 +1,53 @@
name: NPM-Astro-GhostCMS
on:
release:
types: [published]
jobs:
publishnpm:
runs-on: ubuntu-latest
defaults:
run:
working-directory: ./packages/astro-ghostcms
steps:
- name: checkout
uses: actions/checkout@v4
- name: node
uses: actions/setup-node@v4
with:
node-version: 20
registry-url: https://registry.npmjs.org/
- name: publish-npm
run: |
# Change publish registry
echo "$(jq '.publishConfig.registry = "https://registry.npmjs.org"' package.json)" > package.json
# Publish package
npm publish
env:
NODE_AUTH_TOKEN: ${{secrets.NPM_TOKEN}}
githubpackage:
permissions:
contents: read
packages: write
runs-on: ubuntu-latest
defaults:
run:
working-directory: ./packages/astro-ghostcms
steps:
- name: checkout
uses: actions/checkout@v4
- name: node
uses: actions/setup-node@v4
with:
node-version: 20
registry-url: https://npm.pkg.github.com
- name: publish-github
run: |
# Change publish registry
echo "$(jq '.publishConfig.registry = "https://npm.pkg.github.com"' package.json)" > package.json
# Publish package
npm publish
env:
NODE_AUTH_TOKEN: ${{secrets.ACTION_TOKEN}}

52
.github/workflows/npm-create.yml vendored Normal file
View File

@ -0,0 +1,52 @@
name: NPM-Create
on:
workflow_dispatch:
jobs:
publishnpm:
runs-on: ubuntu-latest
defaults:
run:
working-directory: ./packages/create-astro-ghostcms
steps:
- name: checkout
uses: actions/checkout@v4
- name: node
uses: actions/setup-node@v4
with:
node-version: 20
registry-url: https://registry.npmjs.org/
- name: publish-npm
run: |
# Change publish registry
echo "$(jq '.publishConfig.registry = "https://registry.npmjs.org"' package.json)" > package.json
# Publish package
npm publish
env:
NODE_AUTH_TOKEN: ${{secrets.NPM_TOKEN}}
githubpackage:
permissions:
contents: read
packages: write
runs-on: ubuntu-latest
defaults:
run:
working-directory: ./packages/create-astro-ghostcms
steps:
- name: checkout
uses: actions/checkout@v4
- name: node
uses: actions/setup-node@v4
with:
node-version: 20
registry-url: https://npm.pkg.github.com
- name: publish-github
run: |
# Change publish registry
echo "$(jq '.publishConfig.registry = "https://npm.pkg.github.com"' package.json)" > package.json
# Publish package
npm publish
env:
NODE_AUTH_TOKEN: ${{secrets.ACTION_TOKEN}}

View File

@ -0,0 +1,52 @@
name: NPM-Theme (Catppuccin)
on:
workflow_dispatch:
jobs:
publishnpm:
runs-on: ubuntu-latest
defaults:
run:
working-directory: ./packages/astro-ghostcms-catppuccin
steps:
- name: checkout
uses: actions/checkout@v4
- name: node
uses: actions/setup-node@v4
with:
node-version: 20
registry-url: https://registry.npmjs.org/
- name: publish-npm
run: |
# Change publish registry
echo "$(jq '.publishConfig.registry = "https://registry.npmjs.org"' package.json)" > package.json
# Publish package
npm publish
env:
NODE_AUTH_TOKEN: ${{secrets.NPM_TOKEN}}
githubpackage:
permissions:
contents: read
packages: write
runs-on: ubuntu-latest
defaults:
run:
working-directory: ./packages/astro-ghostcms-catppuccin
steps:
- name: checkout
uses: actions/checkout@v4
- name: node
uses: actions/setup-node@v4
with:
node-version: 20
registry-url: https://npm.pkg.github.com
- name: publish-github
run: |
# Change publish registry
echo "$(jq '.publishConfig.registry = "https://npm.pkg.github.com"' package.json)" > package.json
# Publish package
npm publish
env:
NODE_AUTH_TOKEN: ${{secrets.ACTION_TOKEN}}

52
.github/workflows/npm-theme-default.yml vendored Normal file
View File

@ -0,0 +1,52 @@
name: NPM-Theme (Default)
on:
workflow_dispatch:
jobs:
publishnpm:
runs-on: ubuntu-latest
defaults:
run:
working-directory: ./packages/astro-ghostcms-theme-default
steps:
- name: checkout
uses: actions/checkout@v4
- name: node
uses: actions/setup-node@v4
with:
node-version: 20
registry-url: https://registry.npmjs.org/
- name: publish-npm
run: |
# Change publish registry
echo "$(jq '.publishConfig.registry = "https://registry.npmjs.org"' package.json)" > package.json
# Publish package
npm publish
env:
NODE_AUTH_TOKEN: ${{secrets.NPM_TOKEN}}
githubpackage:
permissions:
contents: read
packages: write
runs-on: ubuntu-latest
defaults:
run:
working-directory: ./packages/astro-ghostcms-theme-default
steps:
- name: checkout
uses: actions/checkout@v4
- name: node
uses: actions/setup-node@v4
with:
node-version: 20
registry-url: https://npm.pkg.github.com
- name: publish-github
run: |
# Change publish registry
echo "$(jq '.publishConfig.registry = "https://npm.pkg.github.com"' package.json)" > package.json
# Publish package
npm publish
env:
NODE_AUTH_TOKEN: ${{secrets.ACTION_TOKEN}}

2
.gitignore vendored
View File

@ -1,3 +1 @@
node_modules
.archive
.npmrc

View File

@ -7,13 +7,8 @@ We love your input! We want to make contributing to this project as easy and tra
- Proposing new features
- Becoming a maintainer
## We Develop with Github & Sync our Code to GitLab
We use github to host code, to track issues and feature requests, as well as accept pull requests. Then All of our Code is Mirrored to GitLab.
## We Use Changesets to aid with Development!
This repo uses [changesets](https://github.com/changesets/changesets) to make releasing updates easier. For you, the contributor, this means you should run `pnpm changeset` when you've got your changes ready.
For more details, see this short document on [adding a changeset](https://github.com/changesets/changesets/blob/main/docs/adding-a-changeset.md#i-am-in-a-single-package-repository).
## We Develop with Github
We use github to host code, to track issues and feature requests, as well as accept pull requests.
## We Use Github, So All Code Changes Happen Through Pull Requests and Commits
Pull requests are the best way to propose changes to the codebase. We actively welcome your pull requests:

View File

@ -1,6 +1,6 @@
MIT License
Copyright (c) 2024 MatthiesenXYZ - Astro-GhostCMS
Copyright (c) 2024 Adam Matthiesen
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal

View File

@ -4,14 +4,8 @@ Want to Chat? Join our [Discord](https://discord.gg/u7NZqUyeAR)
For a full always up to date documentation please checkout [Our Website](https://astro-ghostcms.xyz)
Don't like GitHub, and prefer GitLab? This Repo is Auto Cloned to Gitlab! Check it out here: [GitLab: Astro-GhostCMS](https://gitlab.com/matthiesenxyz/astro-ghostcms)
## Demos
- [Default Theme](https://demo.astro-ghostcms.xyz) - ( [Github Repo](https://github.com/MatthiesenXYZ/demo-astroghostcms-themedefault) )
- [Catppuccin Theme](https://catppuccindark-demo.astro-ghostcms.xyz/) - ( [Github Repo](https://github.com/MatthiesenXYZ/demo-astroghostcms-catppuccin) )
- [Brutal by Elian Theme](https://brutal-demo.astro-ghostcms.xyz) - ( [Github Repo](https://github.com/MatthiesenXYZ/demo-astroghostcms-brutalbyelian) )
- [Starlight GhostCMS](https://starlightdemo.astro-ghostcms.xyz/) - ( [Github Repo](https://github.com/MatthiesenXYZ/demo-starlightghostcms) )
- [Default Theme Demo](https://demo.astro-ghostcms.xyz)
- [Catppuccin Dark Demo](https://catppuccindark-demo.astro-ghostcms.xyz/)
## Quick Start
@ -30,27 +24,32 @@ This repo is structured as a `pnpm` monorepo. All of our packages can be found
In this Repo you will find the Following:
- `playgrounds/`:
- [`astro-playground`](./playgrounds/astro-playground/): Playground for Astro-GhostCMS development and testing.
- [`starlight-playground`](./playgrounds/starlight-playground/): Playground of Starlight-GhostCMS development and testing.
- `demo`: [Demo Site](https://demo.astro-ghostcms.xyz)
- `www`: [Public Site](https://astro-ghostcms.xyz)
- `playground`: Development and Testing
- `packages/`:
- [`create-astro-ghostcms`](./packages/create-astro-ghostcms/): CLI Utility to quickly deploy new Astro-GhostCMS projects.
- [`astro-ghostcms`](./packages/astro-ghostcms/): The main Integration!
- [`astro-ghostcms-theme-default`](./packages/astro-ghostcms-theme-default/): The Default theme in integration mode.
- [`astro-ghostcms-catppuccin`](./packages/astro-ghostcms-catppuccin/): A dark theme made with Catppuccin and TailwindCSS for Astro-GhostCMS Integration Mode.
- [`astro-ghostcms-brutalbyelian`](./packages/astro-ghostcms-brutalbyelian/): [ElianCodes](https://www.elian.codes/) Brutal theme modified to work with Astro-GhostCMS
- [`starlight-ghostcms`](./packages/starlight-ghostcms/) A [Starlight Plugin](https://starlight.astro.build/resources/plugins/) to integrate your GhostCMS into your documentation website
- `create-astro-ghostcms`: CLI Utility to quickly deploy new Astro-GhostCMS projects.
- `astro-ghostcms`: The main Integration!
- `astro-ghostcms-theme-default`: The Default theme in integration mode.
- `astro-ghostcms-catppuccin`: A dark theme made with Catppuccin and TailwindCSS for Astro-GhostCMS Integration Mode.
- `tsconfig`: *LOCAL* Development package for `@ts-ghost/core-api`.
## Contributing
- [Contributing Doc](./CONTRIBUTING.md)
This is a `pnpm` workspace and requires `pnpm` to function properly
### Acknowledgments
To setup this workspace clone this repo and run the following command:
```sh
pnpm install
```
Then you can run the playground:
```sh
pnpm playground:dev
```
### Notices
*Ghost is a trademark of [The Ghost Foundation](https://ghost.org/trademark/). This project is not directly related to or provided by The Ghost Foundation and is intended to help create a easier method to utilize their provided JavaScript tools to link a Headless GhostCMS install in to your Astro project.*
[![Built with Astro](https://astro.badg.es/v2/built-with-astro/medium.svg)](https://astro.build)
Maintained with [GitKraken](https://www.gitkraken.com/invite/hirocQWn)
<img width="300" alt="gitkraken-logo-stencil-color" src="https://github.com/MatthiesenXYZ/astro-ghostcms/assets/30383579/751e20a9-8f7e-4a74-9fec-665e17f8715a">

View File

@ -8,7 +8,7 @@
"rules": {
"recommended": true,
"suspicious": {
"noExplicitAny": "off"
"noExplicitAny": "warn"
}
}
},

View File

@ -0,0 +1,2 @@
CONTENT_API_KEY=a33da3965a3a9fb2c6b3f63b48
CONTENT_API_URL=https://ghostdemo.matthiesen.xyz

View File

@ -0,0 +1,4 @@
{
"recommendations": ["astro-build.astro-vscode"],
"unwantedRecommendations": []
}

View File

@ -0,0 +1,11 @@
{
"version": "0.2.0",
"configurations": [
{
"command": "./node_modules/.bin/astro dev",
"name": "Development server",
"request": "launch",
"type": "node-terminal"
}
]
}

View File

@ -1,6 +1,6 @@
MIT License
Copyright (c) 2024 MatthiesenXYZ - Astro-GhostCMS
Copyright (c) 2024 Matthiesen XYZ
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal

View File

@ -1,6 +1,6 @@
# Astro-GhostCMS Demo Template
[Demo](https://brutal-demo.astro-ghostcms.xyz/)
[Demo](https://catppuccindark-demo.astro-ghostcms.xyz/)
This Repo is a Demo Website for the [@matthiesenxyz/astro-ghostcms](https://github.com/MatthiesenXYZ/astro-ghostcms) integraion.

View File

@ -0,0 +1,14 @@
import { defineConfig } from "astro/config";
import ghostcms from "@matthiesenxyz/astro-ghostcms";
import tailwind from "@astrojs/tailwind";
// https://astro.build/config
export default defineConfig({
site: "https://catppuccindark-demo.astro-ghostcms.xyz/",
integrations: [tailwind(),
ghostcms({
theme: "@matthiesenxyz/astro-ghostcms-catppuccin",
ghostURL: "https://ghostdemo.matthiesen.xyz",
})
],
});

View File

@ -0,0 +1,23 @@
{
"name": "catppuccin-dark-demo",
"type": "module",
"version": "0.0.1",
"scripts": {
"dev": "astro dev",
"start": "astro dev",
"build": "astro check && astro build",
"preview": "astro preview",
"astro": "astro"
},
"dependencies": {
"astro": "^4.3.2",
"@matthiesenxyz/astro-ghostcms": "^3.1.9",
"@matthiesenxyz/astro-ghostcms-catppuccin": "0.0.3",
"@astrojs/tailwind": "^5.1.0",
"tailwindcss": "^3.3.5"
},
"devDependencies": {
"@astrojs/check": "^0.4.1",
"typescript": "^5.3.3"
}
}

View File

Before

Width:  |  Height:  |  Size: 749 B

After

Width:  |  Height:  |  Size: 749 B

9
catppuccin-dark-demo/src/env.d.ts vendored Normal file
View File

@ -0,0 +1,9 @@
/// <reference types="astro/client" />
interface ImportMetaEnv {
readonly CONTENT_API_KEY: string
readonly CONTENT_API_URL: string
}
interface ImportMeta {
readonly env: ImportMetaEnv;
}

View File

@ -0,0 +1,4 @@
/** @type {import('tailwindcss').Config} */
module.exports = {
presets: [require('@matthiesenxyz/astro-ghostcms-catppuccin/macchiato')]
};

2
demo/.env Normal file
View File

@ -0,0 +1,2 @@
CONTENT_API_KEY=a33da3965a3a9fb2c6b3f63b48
CONTENT_API_URL=https://ghostdemo.matthiesen.xyz

2
demo/.env.demo Normal file
View File

@ -0,0 +1,2 @@
CONTENT_API_KEY=a33da3965a3a9fb2c6b3f63b48
CONTENT_API_URL=https://ghostdemo.matthiesen.xyz

4
demo/.vscode/extensions.json vendored Normal file
View File

@ -0,0 +1,4 @@
{
"recommendations": ["astro-build.astro-vscode"],
"unwantedRecommendations": []
}

11
demo/.vscode/launch.json vendored Normal file
View File

@ -0,0 +1,11 @@
{
"version": "0.2.0",
"configurations": [
{
"command": "./node_modules/.bin/astro dev",
"name": "Development server",
"request": "launch",
"type": "node-terminal"
}
]
}

View File

@ -1,6 +1,6 @@
MIT License
Copyright (c) 2024 MatthiesenXYZ - Astro-GhostCMS
Copyright (c) 2024 Matthiesen XYZ
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal

13
demo/README.md Normal file
View File

@ -0,0 +1,13 @@
# Astro-GhostCMS Demo Template
![Vercel](https://vercelbadge.vercel.app/api/matthiesenxyz/astro-ghostcms)
This Repo is a Demo Website for the [@matthiesenxyz/astro-ghostcms](https://github.com/MatthiesenXYZ/astro-ghostcms) integraion.
- For a live preview goto [Demo.Astro-GhostCMS.xyz](https://demo.astro-ghostcms.xyz)
- To see the Current Lighthouse test that is ran every deployment goto [Test.Demo.Astro-GhostCMS.xyz](https://test.demo.astro-ghostcms.xyz)
### For more information Check our website
[Astro-GhostCMS.xyz](https://astro-ghostcms.xyz)

10
demo/astro.config.mjs Normal file
View File

@ -0,0 +1,10 @@
import { defineConfig } from 'astro/config';
import GhostCMS from "@matthiesenxyz/astro-ghostcms";
// https://astro.build/config
export default defineConfig({
site: "https://demo.astro-ghostcms.xyz/",
integrations: [GhostCMS({
ghostURL: 'https://ghostdemo.matthiesen.xyz'
})]
});

21
demo/package.json Normal file
View File

@ -0,0 +1,21 @@
{
"name": "demo",
"type": "module",
"version": "0.0.2",
"scripts": {
"dev": "astro dev",
"start": "astro dev",
"build": "astro check && astro build",
"preview": "astro preview",
"astro": "astro"
},
"dependencies": {
"astro": "^4.3.2",
"@matthiesenxyz/astro-ghostcms": "3.1.9",
"@matthiesenxyz/astro-ghostcms-theme-default": "0.1.8"
},
"devDependencies": {
"@astrojs/check": "^0.4.1",
"typescript": "^5.3.3"
}
}

View File

Before

Width:  |  Height:  |  Size: 749 B

After

Width:  |  Height:  |  Size: 749 B

9
demo/src/env.d.ts vendored Normal file
View File

@ -0,0 +1,9 @@
/// <reference types="astro/client" />
interface ImportMetaEnv {
readonly CONTENT_API_KEY: string
readonly CONTENT_API_URL: string
}
interface ImportMeta {
readonly env: ImportMetaEnv;
}

3
demo/tsconfig.json Normal file
View File

@ -0,0 +1,3 @@
{
"extends": "astro/tsconfigs/strict"
}

View File

@ -6,26 +6,21 @@
"node": ">=18.19.0"
},
"scripts": {
"astro:dev": "pnpm --filter astro-playground dev",
"starlight:dev": "pnpm --filter starlight-playground dev",
"lint": "biome check .",
"lint:fix": "biome check --apply .",
"ci:version": "pnpm changeset version",
"ci:publish": "pnpm changeset publish",
"ci:test:integration": "pnpm --filter astro-ghostcms test:ci",
"test:integration": "pnpm --filter astro-ghostcms test",
"test:integration:watch": "pnpm --filter astro-ghostcms test:watch",
"test:integration:coverage": "pnpm --filter astro-ghostcms test:coverage",
"test:create-utility": "pnpm --filter create-astro-ghostcms test",
"test:starlight": "pnpm --filter starlight-ghostcms test",
"test:starlight:watch": "pnpm --filter starlight-ghostcms test:watch",
"test:starlight:coverage": "pnpm --filter starlight-ghostcms test:coverage"
"playground:dev": "pnpm --filter playground dev",
"www:dev": "pnpm --filter www dev",
"demo:dev": "pnpm --filter demo dev",
"cat:dev": "pnpm --filter catppuccin-dark-demo dev",
"api:test": "pnpm --filter astro-ghostcms test",
"api:test:watch": "pnpm --filter astro-ghostcms test:watch",
"api:test:coverage": "pnpm --filter astro-ghostcms test:coverage",
"api:test:ci": "pnpm --filter astro-ghostcms test:ci"
},
"devDependencies": {
"@biomejs/biome": "1.6.1",
"@biomejs/biome": "1.5.3",
"@changesets/cli": "^2.27.1",
"@vitest/ui": "^1.4.0",
"vitest": "^1.4.0",
"vitest": "^1.1.0",
"vitest-fetch-mock": "^0.2.2"
}
}

View File

@ -1,142 +0,0 @@
# @matthiesenxyz/astro-ghostcms-brutalbyelian
## 0.0.18
### Patch Changes
- f82035b: Bump dependencies:
- astro-integration-kit from to
- @unocss/astro from to
- @unocss/reset from to
- astro-font from to
- unocss from to
- sass from to
- @matthiesenxyz/astro-gists from to
- vite-tsconfig-paths from to
- astro from to
- Updated dependencies [f82035b]
- @matthiesenxyz/astro-ghostcms@3.3.5
## 0.0.17
### Patch Changes
- f097c6a: Adds a toggleswitch to allow users to disable astro-remote usage for rendering ghost-content
- Updated dependencies [f097c6a]
- @matthiesenxyz/astro-ghostcms@3.3.4
## 0.0.16
### Patch Changes
- b0218e1: fix:
- Removed CodeSlot Component that sometimes would break with some <pre> components
- Will be adding at a latter time a custom component to replace this, but at this time this is now fixed.
## 0.0.15
### Patch Changes
- 4c1002a: fix getAllTags bug for themes and bump other packages deps
- Updated dependencies [4c1002a]
- @matthiesenxyz/astro-ghostcms@3.3.2
## 0.0.14
### Patch Changes
- 746fcc5: Fix html rendering to allow custom components
## 0.0.13
### Patch Changes
- 2724119: Migrate from `astro-ghostcms-rendercontent` to `astro-remote` for internal processing of GhostCMS HTML. no user changes required.
## 0.0.12
### Patch Changes
- f921005: Bump dependencies:
- vite from to
- @eliancodes/brutal-ui from to
- typescript from to
- ultrahtml from to
- @fontsource-variable/inter from to
- astro-seo from to
- astro from to
- sass from to
- @astrojs/starlight from to
- sharp from to
- Updated dependencies [f921005]
- Updated dependencies [f921005]
- @matthiesenxyz/astro-ghostcms@3.3.1
- @matthiesenxyz/astro-ghostcms-rendercontent@0.0.8
## 0.0.11
### Patch Changes
- Updated dependencies [1f850db]
- Updated dependencies [1f850db]
- @matthiesenxyz/astro-ghostcms@3.2.9
- @matthiesenxyz/astro-ghostcms-rendercontent@0.0.7
## 0.0.10
### Patch Changes
- 3a5aea9: Updated Tests and Linted packages
- Updated dependencies [3a5aea9]
- @matthiesenxyz/astro-ghostcms-rendercontent@0.0.6
- @matthiesenxyz/astro-ghostcms@3.2.7
## 0.0.9
### Patch Changes
- e235ad0: Bump dependencies:
- @astrojs/rss from to
- vite from to
- unocss from to
- astro-font from to
- Updated dependencies [e235ad0]
- @matthiesenxyz/astro-ghostcms@3.2.6
## 0.0.8
### Patch Changes
- 0f3d47f: Bump @unocss/reset from 0.57.7 to 0.58.5
- 12be739: Depencency updates
- a358b7d: Bump @unocss/astro from 0.57.7 to 0.58.5
- Updated dependencies [455ad3f]
- Updated dependencies [12be739]
- Updated dependencies [455ad3f]
- @matthiesenxyz/astro-ghostcms-rendercontent@0.0.5
- @matthiesenxyz/astro-ghostcms@3.2.5
## 0.0.7
### Patch Changes
- Fix License File
- Updated dependencies
- @matthiesenxyz/astro-ghostcms-rendercontent@0.0.4
- @matthiesenxyz/astro-ghostcms@3.2.4
## 0.0.6
### Patch Changes
- Initialization of changeset cli
- Updated dependencies
- @matthiesenxyz/astro-ghostcms@3.2.3
- @matthiesenxyz/astro-ghostcms-rendercontent@0.0.3

View File

@ -1,21 +0,0 @@
MIT License
Copyright (c) 2024 MatthiesenXYZ - Astro-GhostCMS & Elian Van Cutsem
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

View File

@ -1,25 +0,0 @@
import {
definePreset,
presetIcons,
presetTypography,
presetWind,
} from "unocss";
export default definePreset(() => {
return {
name: "brutalTheme",
presets: [
presetWind(),
presetIcons({
collections: {
//@ts-expect-error
logos: () =>
import("@iconify-json/logos/icons.json").then((i) => i.default),
uil: () =>
import("@iconify-json/uil/icons.json").then((l) => l.default),
},
}),
presetTypography(),
],
};
});

View File

@ -1,68 +0,0 @@
{
"name": "@matthiesenxyz/astro-ghostcms-brutalbyelian",
"description": "ElianCodes Brutal theme modified to work with Astro-GhostCMS",
"version": "0.0.18",
"homepage": "https://astro-ghostcms.xyz/",
"type": "module",
"license": "MIT",
"publishConfig": {
"access": "public"
},
"sideEffects": false,
"author": {
"email": "adam@matthiesen.xyz",
"name": "Adam Matthiesen - MatthiesenXYZ",
"url": "https://matthiesen.xyz"
},
"keywords": [
"astro-ghostcms"
],
"repository": {
"type": "git",
"url": "git+https://github.com/MatthiesenXYZ/astro-ghostcms.git"
},
"bugs": {
"url": "https://github.com/MatthiesenXYZ/astro-ghostcms/issues",
"email": "issues@astro-ghostcms.xyz"
},
"main": "./brutalunocss-preset.ts",
"files": [
"src",
"brutalunocss-preset.ts"
],
"exports": {
".": "./brutalunocss-preset.ts",
"./index.astro": "./src/routes/index.astro",
"./[slug].astro": "./src/routes/[slug].astro",
"./tags.astro": "./src/routes/tags.astro",
"./authors.astro": "./src/routes/authors.astro",
"./tag/[slug].astro": "./src/routes/tag/[slug].astro",
"./author/[slug].astro": "./src/routes/author/[slug].astro",
"./archives/[...page].astro": "./src/routes/archives/[...page].astro"
},
"scripts": {},
"peerDependencies": {
"@matthiesenxyz/astro-ghostcms": ">=3.3.5",
"astro": ">=4.4.1"
},
"devDependencies": {
"@typescript-eslint/parser": "^7.2.0",
"eslint": "^8.57.0",
"eslint-plugin-astro": "^0.31.4",
"eslint-plugin-jsx-a11y": "^6.8.0",
"prettier-plugin-astro": "^0.13.0",
"prettier": "^3.2.5"
},
"dependencies": {
"@eliancodes/brutal-ui": "^0.2.6",
"@iconify-json/logos": "^1.1.41",
"@iconify-json/uil": "^1.1.8",
"@unocss/astro": "^0.58.6",
"@unocss/reset": "^0.58.6",
"astro-font": "^0.0.78",
"astro-remote": "0.3.2",
"typescript": "^5.4.2",
"ultrahtml": "^1.5.3",
"unocss": "^0.58.6"
}
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 24 KiB

View File

@ -1,23 +0,0 @@
---
import AuthorList from './AuthorList.astro';
import { Card } from '@eliancodes/brutal-ui';
import type { Settings, Post, Author } from "@matthiesenxyz/astro-ghostcms/api";
export type Props = {
authors: Author[];
settings: Settings;
isHome?: boolean;
};
const { authors, settings } = Astro.props as Props;
---
<section class='mt-8'>
<Card>
<div class='flex justify-between items-start'>
<h2 class='text-2xl md:text-4xl lg:text-6xl mb-8 dm-serif'>
Our Authors
</h2>
</div>
<AuthorList authors={authors} settings={settings}/>
</Card>
</section>

View File

@ -1,95 +0,0 @@
---
export type Props = {
name: string,
image?: string | null,
count: number,
bio: string | null,
location: string | null,
website: string | null,
twitter: string | null,
facebook: string | null
};
const {
name, image, bio, location, website, twitter, facebook, count
} = Astro.props as Props;
---
<header class="author-card">
{ image ? <img src={image} alt="Author Image" class="author-image"> : (
<span class="author-image">
<svg viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
<g fill="none" fill-rule="evenodd">
<path
d="M3.513 18.998C4.749 15.504 8.082 13 12 13s7.251 2.504 8.487 5.998C18.47 21.442 15.417 23 12 23s-6.47-1.558-8.487-4.002zM12 12c2.21 0 4-2.79 4-5s-1.79-4-4-4-4 1.79-4 4 1.79 5 4 5z"
fill="#FFF"
/>
</g>
</svg>
</span>
)}
<div class="author-info">
<div class="author-name text-ctp-teal">{name}</div>
<div class="author-bio text-ctp-blue">
{bio ? bio : count > 0? count + " Posts" : "No Posts"}
</div>
{location && (
<div class="author-location text-ctp-sapphire">
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-pin-map-fill text-ctp-flamingo inline" viewBox="0 0 16 16"> <path fill-rule="evenodd" d="M3.1 11.2a.5.5 0 0 1 .4-.2H6a.5.5 0 0 1 0 1H3.75L1.5 15h13l-2.25-3H10a.5.5 0 0 1 0-1h2.5a.5.5 0 0 1 .4.2l3 4a.5.5 0 0 1-.4.8H.5a.5.5 0 0 1-.4-.8z"/> <path fill-rule="evenodd" d="M4 4a4 4 0 1 1 4.5 3.969V13.5a.5.5 0 0 1-1 0V7.97A4 4 0 0 1 4 3.999z"/> </svg> {location}
</div>
)}
<div class="author-links">
{website && (<a href={website} target="_blank" rel="noopener">Website</a>)}
{twitter && (<a href={twitter} target="_blank" rel="noopener">Twitter</a>)}
{facebook && (<a href={facebook} target="_blank" rel="noopener">Facebook</a>)}
</div>
</div>
</header>
<style>
.author-card {
display: flex;
margin-top: 8vmin;
margin-bottom: 6vmin;
overflow: hidden;
}
.author-image {
width: 180px;
height: 180px;
object-fit: cover;
border-radius: 3px;
}
.author-info {
flex: 1;
padding: 20px;
text-align: left;
}
.author-name {
font-size: 1.5em;
font-weight: bold;
margin-bottom: 10px;
}
.author-bio {
line-height: 1.4;
}
.author-location {
margin-top: 10px;
}
.author-links {
margin-top: 10px;
}
.author-links a {
text-decoration: none;
color: #FFFFFF;
margin-right: 10px;
}
</style>

View File

@ -1,21 +0,0 @@
---
import AuthorSummaryCard from './AuthorSummaryCard.astro';
import type { Settings, Post, Author } from "@matthiesenxyz/astro-ghostcms/api";
export type Props = {
authors: Author[];
settings: Settings;
};
const { authors, settings } = Astro.props as Props;
---
<ul class='grid md:grid-cols-2 lg:grid-cols-3 gap-8'>
{
authors.map((author: Author) => {
return (
<li>
<AuthorSummaryCard author={author}, settings={settings} />
</li>
);
})
}
</ul>

View File

@ -1,38 +0,0 @@
---
import SummaryCard from './AuthorSummaryCardHeader.astro';
import type { Settings, Author } from "@matthiesenxyz/astro-ghostcms/api";
import { getGhostImgPath, formatDate } from "../../utils";
import { Pill } from '@eliancodes/brutal-ui';
import Button from "../generic/button.astro"
interface Props {
author: Author;
settings: Settings;
};
const { author, settings } = Astro.props;
---
<SummaryCard
title={author.name}
imgAlt={author.name}
imgSrc={getGhostImgPath(settings.url, author.profile_image || "", 100)}
description={author.bio?author.bio:""}
>
<div class='flex justify-end my-4'>
<Button href={`/author/${author.slug}/`}>More Info &rarr;</Button>
</div>
<div class='hidden sm:inline-block'>
<div class='flex justify-between items-center'>
<ul class='flex gap-4 mt-2'>
{author.count && author.count.posts && (
<div class="sanchez">
<Pill>{author.count.posts > 0 ? `${author.count.posts} posts` : "No posts"}</Pill>
</div>
)}
</ul>
</div>
</div>
</SummaryCard>

View File

@ -1,28 +0,0 @@
---
import { Card } from '@eliancodes/brutal-ui';
import { Image } from 'astro:assets';
interface Props {
title: string;
imgSrc: string | null;
imgAlt: string;
description: string;
}
const { title, imgAlt, imgSrc, description } = Astro.props;
---
<Card color='white'>
<div class='rounded-lg'>
{imgSrc && (<Image
src={imgSrc}
alt={imgAlt}
width={100}
height={100}
class='rounded h-54 w-56'
/>)}
</div>
<h3 class='poppins text-lg font-bold md:text-xl'>{title}</h3>
<p class='poppins line-clamp-4'>{description}</p>
<slot />
</Card>

View File

@ -1,17 +0,0 @@
---
interface Props {
content: any;
}
const { content } = Astro.props;
---
<article class='prose-slate w-sm md:w-prose md:prose poppins'>
<a href='/blog/' title='Back to blog'>&larr; Back to blog</a>
<p class='text-slate text-sm md:text-base'>
Published on {content.pubDate} by {content.author}
</p>
<slot />
<p class='text-slate'>Written by {content.author}</p>
<a href='/blog/' title='Back to blog'>&larr; Back to blog</a>
</article>

View File

@ -1,21 +0,0 @@
---
import BlogSummaryCard from './BlogSummaryCard.astro';
import type { Settings, Post } from "@matthiesenxyz/astro-ghostcms/api";
export type Props = {
posts: Post[];
settings: Settings;
};
const { posts, settings } = Astro.props as Props;
---
<ul class='grid md:grid-cols-2 lg:grid-cols-3 gap-8'>
{
posts.map((post: Post) => {
return (
<li>
<BlogSummaryCard post={post}, settings={settings} />
</li>
);
})
}
</ul>

View File

@ -1,44 +0,0 @@
---
import type { Settings, Post } from "@matthiesenxyz/astro-ghostcms/api";
import { formatDate } from "../../utils";
import FeatureImage from "./FeatureImage.astro";
export type Props = {
post: Post;
settings: Settings;
};
const { post, settings } = Astro.props as Props;
---
<header class="article-header gh-canvas">
<div class="flex justify-between">
<section class="flex flex-grow align-middle">
<div class="text-ctp-overlay2">
{ post.primary_author && (
<h4 class="text-ctp-teal">Author:
<a href={`/author/${post.primary_author.slug}`}>{post.primary_author.name}</a>
</h4>
)}
<div class="text-ctp-overlay2">
<time class="text-ctp-sapphire" datetime={formatDate(post.created_at)}
>{formatDate(post.created_at)}
</time>
<span class="text-ctp-peach"
><span class="text-ctp-overlay2">&bull;</span>
{post.reading_time} min read
</span>
</div>
</div>
</section>
</div>
<center><h1 class="text-5xl righteous pb-5">{post.title}</h1></center>
{post.feature_image && (
<FeatureImage
image={post.feature_image}
alt={post.feature_image_alt ? post.feature_image_alt : post.title}
caption={post.feature_image_caption || "" }
settings={settings}
transitionName={`img-${post.title}`}
/>
)}
</header>

View File

@ -1,29 +0,0 @@
---
interface Props {
headings: Array<Object>;
}
const { headings } = Astro.props;
---
<aside>
<nav class='hidden lg:block sticky top-6'>
<ul>
{
headings.map((heading: any) => (
<li class='py-1'>
{[...Array(heading.depth - 1)].map((_, _i) => (
<span class='inline-block w-4' />
))}
<a
class='hover:text-stone transition-all duration-150 ease-in-out text-dark poppins'
href={`#${heading.slug}`}
>
{heading.text}
</a>
</li>
))
}
</ul>
</nav>
</aside>

View File

@ -1,46 +0,0 @@
---
import SummaryCard from '../generic/SummaryCard.astro';
import type { Settings, Post, Tag } from "@matthiesenxyz/astro-ghostcms/api";
import { getGhostImgPath, formatDate } from "../../utils";
import { Pill } from '@eliancodes/brutal-ui';
import Button from "../generic/button.astro"
interface Props {
post: Post;
settings: Settings;
};
const { post, settings } = Astro.props;
---
<SummaryCard
title={post.title}
imgAlt={post.feature_image_alt
? post.feature_image_alt : post.feature_image_caption
? post.feature_image_caption : post.title}
imgSrc={getGhostImgPath(settings.url, post.feature_image || "", 800)}
description={post.excerpt}
>
<div class='flex justify-end my-4'>
<Button href={`/${post.slug}/`}>Read post &rarr;</Button>
</div>
<div class='hidden sm:inline-block'>
<p class='poppins mt-2'>tags:</p>
<div class='flex justify-between items-center'>
<ul class='flex gap-4 mt-2'>
{
post.tags && post.tags.map((tag) => {
return (
<li>
<a class="sanchez" href={`/tag/${tag.slug}/`}>
<Pill>{tag.name}</Pill>
</a>
</li>
);
})
}
</ul>
</div>
</div>
</SummaryCard>

View File

@ -1,34 +0,0 @@
---
import { getGhostImgPath } from "../../utils";
import type { Settings } from "@matthiesenxyz/astro-ghostcms/api";
import { Markup } from 'astro-remote';
import config from "virtual:@matthiesenxyz/astro-ghostcms/config";
const useRemote = config.ThemeProvider.astroRemote.enable;
export type Props = {
image: string;
alt?: string;
caption?: string;
settings: Settings;
transitionName?: string;
};
const { image, alt, caption = "", settings, transitionName } = Astro.props as Props;
---
<figure class="article-image">
<img
srcset={`
${getGhostImgPath(settings.url, image, 300)} 300w,
${getGhostImgPath(settings.url, image, 600)} 600w,
`}
sizes="(min-width: 300px) 600px, 92vw"
src={getGhostImgPath(settings.url, image, 2000)}
alt={alt}
transition:name={transitionName}
/>
{caption && (
<figcaption class="text-ctp-overlay2">
{useRemote ? <Markup content={caption} /> : <Fragment set:html={caption} />}
</figcaption>)}
</figure>

View File

@ -1,16 +0,0 @@
---
---
<section class='flex flex-col gap-8 justify-between'>
<p class='text-9xl font-bold dm-serif'>404</p>
<h2 class='text-4xl outfit'>Page Not Found</h2>
<p class='text-xl sm:text-3xl sanchez'>
Sorry, we couldn't find the page you were looking for.
</p>
<a
href='/'
title='Go back home'
class='px-4 py-2 border-2 border-black hover:bg-red transition-colors duration-150 ease-in-out w-48 text-center poppins'
>&larr; Go Home</a
>
</section>

View File

@ -1,26 +0,0 @@
---
import { getGhostImgPath } from "../../utils";
import type { Settings } from "@matthiesenxyz/astro-ghostcms/api";
export type Props = {
image: string;
alt?: string;
caption?: string;
settings: Settings;
transitionName?: string;
};
const { image, alt, caption = "", settings, transitionName } = Astro.props as Props;
---
<figure class="article-image">
<img
srcset={`
${getGhostImgPath(settings.url, image, 300)} 300w,
${getGhostImgPath(settings.url, image, 600)} 600w,
`}
sizes="(min-width: 300px) 600px, 92vw"
src={getGhostImgPath(settings.url, image, 2000)}
alt={alt}
transition:name={transitionName}
/>
{caption && <figcaption class="text-ctp-overlay2"><Fragment set:html={caption}></figcaption>}
</figure>

View File

@ -1,50 +0,0 @@
---
import { AstroFont } from "astro-font";
---
<AstroFont
config={[
{
name: "Outfit",
googleFontsURL: 'https://fonts.googleapis.com/css2?family=Outfit&display=swap',
display: "swap",
selector: ".outfit",
fallback: "sans-serif",
src: [],
},
{
display: "swap",
name: "Poppins",
googleFontsURL: 'https://fonts.googleapis.com/css2?family=Poppins&display=swap',
selector: ".poppins",
fallback: "sans-serif",
preload: true,
src: [],
},
{
display: "swap",
name: "Righteous",
googleFontsURL: 'https://fonts.googleapis.com/css2?family=Righteous&display=swap',
fallback: "sans-serif",
selector: ".righteous",
preload: true,
src: [],
},
{
display: "swap",
name: "Sanchez",
googleFontsURL: 'https://fonts.googleapis.com/css2?family=Sanchez&display=swap',
fallback: "serif",
selector: ".sanchez",
preload: true,
src: [],
},
{
display: "swap",
fallback: "serif",
selector: ".dm-serif",
name: "DM Serif Text",
googleFontsURL: 'https://fonts.googleapis.com/css2?family=DM+Serif+Text&display=swap',
src: [],
},
]}
/>

View File

@ -1,26 +0,0 @@
---
import type { Page } from 'astro';
const { page } = Astro.props as {page: Page};
---
<div class="page__actions">
{page.url.prev && (
<a class="action__go-to-x" href={page.url.prev} title="Go to Previous">
&larr; Prev
</a>
)}
{page.url.next && (
<a class="action__go-to-x" href={page.url.next} title="Go to Next">
Next &rarr;
</a>
)}
</div>
<style>
/* .page__actions {
@apply flex justify-center md:justify-end py-6 gap-2;
}
.action__go-to-x {
@apply text-base uppercase text-gray-500 dark:text-gray-400 hover:underline;
} */
</style>

View File

@ -1,23 +0,0 @@
---
import BlogList from '../blog/BlogList.astro';
import { Card } from '@eliancodes/brutal-ui';
import type { Settings, Post } from "@matthiesenxyz/astro-ghostcms/api";
export type Props = {
posts: Post[];
settings: Settings;
isHome?: boolean;
};
const { posts, settings } = Astro.props as Props;
---
<section class='mt-8'>
<Card>
<div class='flex justify-between items-start'>
<h2 class='text-2xl md:text-4xl lg:text-6xl mb-8 dm-serif'>
Recent Blogposts
</h2>
</div>
<BlogList posts={posts} settings={settings}/>
</Card>
</section>

View File

@ -1,18 +0,0 @@
---
import { Card } from '@eliancodes/brutal-ui';
interface Props {
title: string;
description: string;
}
const { title, description } = Astro.props;
---
<Card color='white'>
<center>
<h3 class='poppins text-lg md:text-xl'>{title}</h3>
<p class='poppins line-clamp-4'>{description}</p>
<slot />
</center>
</Card>

View File

@ -1,28 +0,0 @@
---
import { Card } from '@eliancodes/brutal-ui';
import { Image } from 'astro:assets';
interface Props {
title: string;
imgSrc: string | null;
imgAlt: string;
description: string;
}
const { title, imgAlt, imgSrc, description } = Astro.props;
---
<Card color='white'>
<h3 class='poppins text-lg md:text-xl'>{title}</h3>
<div class='rounded-lg border-3 border-black my-4 h-56'>
{imgSrc && (<Image
src={imgSrc}
alt={imgAlt}
width={800}
height={400}
class='rounded h-full w-full object-cover'
/>)}
</div>
<p class='poppins line-clamp-4'>{description}</p>
<slot />
</Card>

View File

@ -1,22 +0,0 @@
---
import SummaryCard from './SummaryCard-tag.astro';
import type { Settings, Tag } from "@matthiesenxyz/astro-ghostcms/api";
import Button from "./button.astro"
interface Props {
tag: Tag;
settings: Settings;
};
const { tag } = Astro.props;
---
<SummaryCard
title={tag.name}
description={tag.description?tag.description:""}
>
<div class='flex justify-end my-4'>
<Button href={`/${tag.slug}/`}>See Posts &rarr;</Button>
</div>
</SummaryCard>

View File

@ -1,47 +0,0 @@
---
interface Props {
href: string;
target?: '_blank' | '_self';
color?: string | undefined;
}
import colors from './colors.json';
if (Astro.props.target === undefined) {
Astro.props.target = '_self';
}
if (Astro.props.color === undefined) {
Astro.props.color =
colors[Math.floor(Math.random() * colors.length)];
}
const { href, target, color } = Astro.props;
---
<style define:vars={{ color: color }}>
a.brutal-btn {
filter: drop-shadow(5px 5px 0 rgb(0 0 0 / 1));
background-color: white;
display: inline-block;
padding: 0.5rem 1rem;
border: 2px solid black;
transition: all;
transition-duration: 0.5s;
animation: ease-in-out;
font-family: 'Sanchez', serif;
}
a.brutal-btn:hover {
filter: drop-shadow(3px 3px 0 rgb(0 0 0 / 1));
background-color: var(--color);
}
</style>
<a
href={href}
target={target}
class='brutal-btn'
data-astro-reload
>
<slot />
</a>

View File

@ -1,18 +0,0 @@
[
"#c084fc",
"#f472b6",
"#fb7185",
"#e879f9",
"#a78bfa",
"#818cf8",
"#60a5fa",
"#38bdf8",
"#22d3ee",
"#2dd4bf",
"#34d399",
"#4ade80",
"#a3e635",
"#facc15",
"#fb923c",
"#f87171"
]

View File

@ -1,5 +0,0 @@
---
---
<h1 class="righteous text-4xl">
<slot />
</h1>

View File

@ -1,5 +0,0 @@
---
---
<h2 class="righteous text-3xl">
<slot />
</h2>

View File

@ -1,5 +0,0 @@
---
---
<h3 class="righteous text-2xl">
<slot />
</h3>

View File

@ -1,5 +0,0 @@
---
---
<h4 class="righteous text-1xl">
<slot />
</h4>

View File

@ -1,5 +0,0 @@
---
---
<h5 class="righteous text-xl">
<slot />
</h5>

View File

@ -1,5 +0,0 @@
---
---
<h6 class="righteous text-lg">
<slot />
</h6>

View File

@ -1,21 +0,0 @@
---
---
<p class="my-5 text-base"><slot /></p>
<style is:inline>
#ghost p a {
color: rgb(0, 123, 247);
}
#ghost ul li a {
color: rgb(0, 123, 247);
}
#ghost ul li {
padding-top: 0.5rem;
margin-left: 2rem;
list-style: circle;
}
#ghost ul {
margin-top: 1rem;
margin-bottom: 1rem;
}
</style>

View File

@ -1,9 +0,0 @@
---
import { Card } from "@eliancodes/brutal-ui";
---
<div class="my-10">
<Card>
<slot />
</Card>
</div>

View File

@ -1,8 +0,0 @@
export { default as H1 } from "./H1.astro";
export { default as H2 } from "./H2.astro";
export { default as H3 } from "./H3.astro";
export { default as H4 } from "./H4.astro";
export { default as H5 } from "./H5.astro";
export { default as H6 } from "./H6.astro";
export { default as Paragraph } from "./Paragraph.astro";
export { default as astrocard } from "./astrocard.astro";

View File

@ -1,33 +0,0 @@
---
import { facebook, getSettings, invariant, twitter } from "@matthiesenxyz/astro-ghostcms/api";
const settings = await getSettings();
invariant(settings, 'Settings not found');
---
<section class='md:hidden'>
<h2 class='hidden'>Socials section</h2>
<ul class='flex justify-between'>
{ settings.facebook && (
<li class='bg-white px-4 py-2 text-green border-black border-2 rounded card-shadow'>
<a href={facebook(settings.facebook)} target='_blank' title={`Go to Facebook`}>
<div class:list={['i-uil-facebook', 'p-6']} />
</a>
</li>
)
}
{ settings.twitter && (
<li class='bg-white px-4 py-2 text-green border-black border-2 rounded card-shadow'>
<a href={twitter(settings.twitter)} target='_blank' title={`Go to Twitter "X"`}>
<div class:list={['i-uil-twitter', 'p-6']} />
</a>
</li>
)
}
<li class='bg-white px-4 py-2 text-green border-black border-2 rounded card-shadow'>
<a href='/rss.xml' target='_blank' title={`See our RSS Feed`}>
<div class:list={['i-uil-rss', 'p-6']} />
</a>
</li>
</ul>
</section>

View File

@ -1,85 +0,0 @@
---
import { getSettings, invariant } from "@matthiesenxyz/astro-ghostcms/api";
const settings = await getSettings();
invariant(settings, 'Settings not found');
export interface Props {
backToTop?: boolean;
}
const { backToTop = false } = Astro.props;
---
{
backToTop && (
<button
class:list={[
backToTop ? `backToTop` : null,
'transition-300 z-50 opacity-0 fixed flex bottom-[10px] right-[30px] w-10 h-10 bg-white border border-black card-shadow',
]}
>
<svg
xmlns='http://www.w3.org/2000/svg'
fill='none'
viewBox='0 0 24 24'
height='100%'
width='100%'
stroke-width='1.5'
stroke='currentColor'
>
<path
stroke-linecap='round'
stroke-linejoin='round'
d='m4.5 15.75 7.5-7.5 7.5 7.5'
/>
</svg>
</button>
)
}
<footer class='bg-black text-white p-6'>
<h2 class='hidden'>Footer</h2>
<p class="text-center text-sm text-slate-500">
Copyright © {new Date().getFullYear()} - {settings.title}. All rights reserved.
</p>
<p class='outfit opacity-50%'>
Brutal theme for Astro - by <a
href='https://www.elian.codes/'
target='_blank'
class='text-blue'>ElianCodes</a
>
<p class='outfit opacity-50%'>
Powered By Ghost
</p>
</p>
</footer>
<style>
.backToTop.active {
opacity: 1;
}
</style>
<script>
document.addEventListener('astro:page-load', () => {
const backToTop = document.querySelector('.backToTop');
const toggleBackToTopButton = () => {
if (window.scrollY > 250) {
backToTop?.classList.add('active');
} else {
backToTop?.classList.remove('active');
}
};
backToTop?.addEventListener('click', () => {
window.scrollTo({
top: 0,
behavior: 'smooth',
});
});
window.addEventListener('scroll', toggleBackToTopButton);
});
</script>

View File

@ -1,54 +0,0 @@
---
import LocalFont from '../generic/LocalFont.astro';
import { ViewTransitions } from 'astro:transitions';
import { getSettings, invariant } from "@matthiesenxyz/astro-ghostcms/api";
import { getOgImagePath } from "@matthiesenxyz/astro-ghostcms/satoriOG";
const settings = await getSettings();
invariant(settings, 'Settings not found');
const Ghosttitle = settings.title;
const favicon = await settings.icon;
interface Props {
title: string;
description: string;
}
const ogI = new URL(getOgImagePath(Astro.url.pathname), Astro.url.origin).href;
const canonicalURL = new URL(Astro.url.pathname, Astro.site);
const { title, description } = Astro.props;
---
<head>
<LocalFont />
<meta charset='utf-8' />
<meta name='viewport' content='width=device-width, initial-scale=1' />
<meta name='generator' content={Astro.generator} />
<meta name='title' content={`${Ghosttitle} | ${title}`} />
<meta name='description' content={description} />
<meta property='og:type' content='website' />
<meta property='og:url' content={canonicalURL} />
<meta property='og:title' content={title} />
<meta property='og:description' content={description} />
<meta property='og:image' content={ogI} />
<meta property='twitter:card' content='summary_large_image' />
<meta property='twitter:url' content={canonicalURL} />
<meta property='twitter:title' content={title} />
<meta property='twitter:description' content={description} />
<meta property='twitter:image' content={ogI} />
<link rel='canonical' href={canonicalURL} />
<link rel='icon' type='image/svg' href={favicon} />
<title>{Ghosttitle} | {title}</title>
<ViewTransitions />
<slot />
</head>

View File

@ -1,90 +0,0 @@
---
import { facebook, getSettings, invariant, twitter } from "@matthiesenxyz/astro-ghostcms/api";
const settings = await getSettings();
invariant(settings, 'Settings not found');
interface Props {
pageTitle?: string;
}
const { pageTitle } = Astro.props;
---
<header class='border-b-4 border-black flex justify-between p-6 items-center'>
{pageTitle && <h1 class='hidden'>{pageTitle}</h1>}
<a href='/' title='Back to Home'>
<p class='righteous md:text-4xl'>{settings.icon && <img src={settings.icon} width="48" class="inline">}{settings.title}</p>
</a>
<nav class='hidden md:inline-block'>
<h2 class='hidden'>Navigation</h2>
<ul class='flex gap-8 poppins'>
{
settings.navigation.map(({label, url}) => (
<li>
<a
class='font-medium hover:text-green hover:underline transition-all duration-150 ease-in-out'
href={url}
title={`Go to ${label}`}
>
{label}
</a>
</li>
))
}
{ settings.facebook && (
<li>
<a
href={facebook(settings.facebook)}
class='hover:text-green hover:underline transition-all duration-150 ease-in-out'
target='_blank'
title={`See @${settings.facebook} on Facebook`}
>
<div class:list={['i-uil-facebook', 'w-6 h-6']} />
</a>
</li>
)
}
{ settings.twitter && (
<li>
<a
href={twitter(settings.twitter)}
class='hover:text-green hover:underline transition-all duration-150 ease-in-out'
target='_blank'
title={`See @${settings.twitter} on Twitter "X"`}
>
<div class:list={['i-uil-twitter', 'w-6 h-6']} />
</a>
</li>
)
}
<li>
<a
href='/rss.xml'
class='hover:text-green hover:underline transition-all duration-150 ease-in-out'
target='_blank'
title={`See our RSS Feed`}
>
<div class:list={['i-uil-rss', 'w-6 h-6']} />
</a>
</li>
</ul>
</nav>
<nav class='md:hidden flex'>
<h2 class='hidden'>Mobile Navigation</h2>
<ul>
{
settings.navigation.map(({label, url}) => (
<li>
<a
class='font-medium hover:text-green hover:underline transition-all duration-150 ease-in-out'
href={url}
title={`Go to ${label}`}
>
{label}
</a>
</li>
))
}
</ul>
</nav>
</header>

View File

@ -1,25 +0,0 @@
---
import BaseNavigation from '../components/layout/BaseNavigation.astro';
import BaseFooter from '../components/layout/BaseFooter.astro';
import BaseHead from '../components/layout/BaseHead.astro';
import '../styles/global.css';
interface Props {
title: string;
description: string;
classList?: string;
pageTitle?: string;
}
const { title, description, classList, pageTitle } = Astro.props;
---
<html lang='en' class='h-full'>
<BaseHead title={title} description={description} />
<body class:list={[classList]}>
<BaseNavigation {pageTitle} />
<slot />
<BaseFooter />
</body>
</html>

View File

@ -1,59 +0,0 @@
---
import BlogPost from "../layouts/Default.astro"
import { getAllPosts, getAllPages, getSettings, invariant } from "@matthiesenxyz/astro-ghostcms/api";
import type { InferGetStaticPropsType } from "astro";
import RecentBlogPosts from "../components/generic/RecentBlogPosts.astro";
import BlogPostHeader from "../components/blog/BlogPostHeader.astro";
import { Markup } from 'astro-remote';
import * as C from "../components/ghostrender";
import { Card } from "@eliancodes/brutal-ui";
import config from "virtual:@matthiesenxyz/astro-ghostcms/config";
const useRemote = config.ThemeProvider.astroRemote.enable;
export async function getStaticPaths() {
const [posts, pages, settings] = await Promise.all([getAllPosts(), await getAllPages(), await getSettings()]);
const allPosts = [...posts, ...pages];
return allPosts.map((post) => ({
params: { slug: post.slug },
props: { post, posts, settings },
}));
}
export type Props = InferGetStaticPropsType<typeof getStaticPaths>;
const {post, posts, settings} = Astro.props as Props;
invariant(settings, "Settings are required");
---
<BlogPost title={post.title} description={post.excerpt}>
<article class='w-auto md:w-vmax p-10 poppins'>
<Card>
<BlogPostHeader post={post} settings={settings} />
</Card>
<div class="my-5"/>
<div id="ghost">
{useRemote ? <Markup
content={post.html}
sanitize={{
allowComponents: true,
allowElements: ['a', 'p', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'img', 'figure', 'figcaption', 'ul', 'ol', 'li', 'blockquote', 'pre', 'code', 'em', 'strong', 'del', 'hr', 'br', 'table', 'thead', 'tbody', 'tr', 'th', 'td', 'caption', 'div', 'span', 'script', 'astrocard'],
}}
components={{
h1: C.H1,
h2: C.H2,
h3: C.H3,
h4: C.H4,
h5: C.H5,
h6: C.H6,
p: C.Paragraph,
astrocard: C.astrocard,
}}
/> : <Fragment set:html={post.html} />}
</div>
</article>
<section class='p-6'>
<RecentBlogPosts posts={posts} settings={settings} />
</section>
</BlogPost>

View File

@ -1,36 +0,0 @@
---
import Layout from '../../layouts/Default.astro';
import BlogList from '../../components/blog/BlogList.astro';
import { getAllPosts, getSettings, invariant, type Post } from "@matthiesenxyz/astro-ghostcms/api";
import type { GetStaticPathsOptions, Page } from "astro";
import Paginator from "../../components/generic/Paginator.astro";
export async function getStaticPaths({ paginate }:GetStaticPathsOptions) {
const posts = await getAllPosts();
return paginate(posts, {
pageSize: 5,
});
}
export type Props = {
page: Page<Post>
};
const settings = await getSettings();
invariant(settings, "Settings are required");
const title = settings.title;
const description = settings.description;
const { page } = Astro.props as Props;
---
<Layout
title='Archives'
description=`${title} | On this page you can find a collection of blogposts`
pageTitle=`${title} | Archives`
>
<main class='bg-green p-6'>
<BlogList posts={page.data} settings={settings} />
<Paginator {page} />
</main>
</Layout>

View File

@ -1,55 +0,0 @@
---
import Layout from '../../layouts/Default.astro';
import AuthorDetailCard from '../../components/authors/AuthorDetailCard.astro';
import { Card } from '@eliancodes/brutal-ui';
import { getAllPosts, getAllAuthors, getSettings, invariant, type Post, type Author } from "@matthiesenxyz/astro-ghostcms/api";
import type { InferGetStaticParamsType, InferGetStaticPropsType } from 'astro';
import BlogList from "../../components/blog/BlogList.astro"
export async function getStaticPaths() {
const posts = await getAllPosts();
const { authors } = await getAllAuthors();
const settings = await getSettings();
return authors.map((author: Author) => {
const filteredPosts = posts.filter((post: Post) =>
post.authors?.map((author) => author.slug).includes(author.slug)
);
return {
params: { slug: author.slug },
props: {
posts: filteredPosts,
settings,
author,
},
};
});
}
export type Params = InferGetStaticParamsType<typeof getStaticPaths>;
export type Props = InferGetStaticPropsType<typeof getStaticPaths>;
const { posts, settings, author } = Astro.props;
invariant(settings, "Settings are required");
const title = `Posts by author: ${author.name}`;
const description = `All of the articles we've posted and linked so far under the author: ${author.name}`;
---
<Layout
title={title}
pageTitle=`${settings.title} | ${title}`
description={description}
>
<main class='bg-pink p-6'>
<section id='about' class='col mt-4'>
<h2 class='hidden'>{title}</h2>
<div class='flex'>
<Card>
<AuthorDetailCard name={author.name} count={author.count?.posts || 0} image={author.profile_image} bio={author.bio} location={author.location} website={author.website} twitter={author.twitter} facebook={author.facebook}/>
</Card>
</div>
</section>
<br />
<BlogList posts={posts} settings={settings} />
</main>
</Layout>

View File

@ -1,21 +0,0 @@
---
import Layout from '../layouts/Default.astro';
import AuthorCollection from '../components/authors/AuthorCollection.astro';
import { getAllAuthors, getSettings, invariant } from "@matthiesenxyz/astro-ghostcms/api";
const { authors } = await getAllAuthors();
const settings = await getSettings();
invariant(settings, 'Settings not found');
const title = settings.title;
const description = settings.description;
---
<Layout
title='Authors'
pageTitle=`${title} | Authors`
description={description}
>
<main class='bg-pink p-6'>
<AuthorCollection authors={authors} settings={settings} />
</main>
</Layout>

View File

@ -1,39 +0,0 @@
---
import Layout from '../layouts/Default.astro';
import RecentBlogPosts from '../components/generic/RecentBlogPosts.astro';
import MobileSocials from '../components/home/MobileSocials.astro';
import { Card } from '@eliancodes/brutal-ui';
import { getPosts, getSettings, invariant } from "@matthiesenxyz/astro-ghostcms/api";
const { posts } = await getPosts();
const settings = await getSettings();
invariant(settings, 'Settings not found');
const title = settings.title;
const description = settings.description;
---
<Layout
title='Home'
pageTitle=`${title} | Home`
description={description}
>
<main class='bg-pink p-6'>
<MobileSocials />
<section id='about' class='col mt-4'>
<h2 class='hidden'>{title}</h2>
<div class='flex'>
<Card>
<div class='flex flex-col justify-between items-start gap-4'>
<p class='mt-4 outfit text-2xl md:text-5xl lg:text-7xl'>
{title}
</p>
<p class='mt-2 outfit text-xl md:text-3xl lg:text-5xl'>
{description}
</p>
</div>
</Card>
</div>
</section>
<RecentBlogPosts posts={posts} settings={settings} />
</main>
</Layout>

View File

@ -1,47 +0,0 @@
---
import type { InferGetStaticParamsType, InferGetStaticPropsType } from 'astro';
import Layout from '../../layouts/Default.astro';
import BlogList from '../../components/blog/BlogList.astro';
import { Button } from '@eliancodes/brutal-ui';
import { getAllPosts, getAllTags, getSettings, invariant } from "@matthiesenxyz/astro-ghostcms/api";
export async function getStaticPaths() {
const posts = await getAllPosts();
const tags = await getAllTags();
const settings = await getSettings();
return tags.map((tag) => {
const filteredPosts = posts.filter((post) =>
post.tags?.map((tag) => tag.slug).includes(tag.slug)
);
return {
params: { slug: tag.slug },
props: {
posts: filteredPosts,
settings,
tag,
},
};
});
}
export type Params = InferGetStaticParamsType<typeof getStaticPaths>;
export type Props = InferGetStaticPropsType<typeof getStaticPaths>;
const { posts, settings, tag } = Astro.props;
invariant(settings, "Settings are required");
---
<Layout
title={`Blog: ${tag.name}`}
description={`${settings.title} | All posts tagged with ${tag}`}
pageTitle={`${settings.title} | Blogposts tagged with ${tag}`}
>
<main class='p-6 bg-purple grid gap-4'>
<div>
<Button href='/'>&larr; Back</Button>
</div>
<BlogList posts={posts} settings={settings} />
</main>
</Layout>

View File

@ -1,28 +0,0 @@
---
import Layout from '../layouts/Default.astro';
import { getAllTags, getSettings, invariant } from "@matthiesenxyz/astro-ghostcms/api";
import TagSummaryCard from '../components/generic/TagSummaryCard.astro';
const tags = await getAllTags();
const settings = await getSettings();
invariant(settings, 'Settings not found');
const title = settings.title;
const description = settings.description;
---
<Layout
title='Tags'
pageTitle=`${title} | Tags`
description={description}
>
<main class='bg-pink p-6'>
{
tags
.filter((tag) => tag.slug && !tag.slug.startsWith("hash-"))
.map((tag) => (
<TagSummaryCard tag={tag}, settings={settings} />
<br />
))
}
</main>
</Layout>

View File

@ -1,288 +0,0 @@
@tailwind base;
@tailwind components;
@tailwind utilities;
.card-shadow {
filter: drop-shadow(7px 7px 0 rgb(0 0 0 / 1));
transition: all;
transition-duration: 0.5s;
animation: ease-in-out;
}
.card-shadow:hover {
filter: drop-shadow(5px 5px 0 rgb(0 0 0 / 1));
}
:root
{ /* ---- ⚫️ Colors ⚪️ ---- */
/* Base Tokens */
--sys-color-white: #FFFFFF;
--sys-color-black: #000000;
/* Theme Tokens */
--primary: var(--sys-color-white);
--secondary: var(--sys-color-black);
}
html {
scroll-behavior: smooth;
}
::-webkit-scrollbar {
width: 22px;
background-color: var(--primary);
}
::-webkit-scrollbar-track {
background: linear-gradient(45deg, var(--secondary) 25%, transparent 25%, transparent 75%, var(--secondary) 75%, var(--secondary)), linear-gradient(45deg, var(--secondary) 25%, transparent 25%, transparent 75%, var(--secondary) 75%, var(--secondary));
background-color: var(--primary);
background-size: 4px 4px;
background-position: 0 0, 2px 2px;
width: 10px;
border-left: 3px solid var(--secondary);
}
::-webkit-scrollbar-thumb {
width: 20px;
box-sizing: content-box;
background-color: var(--primary);
border: 2px solid var(--secondary);
border-right: none;
}
::-webkit-scrollbar-button:horizontal:start:decrement,
::-webkit-scrollbar-button:horizontal:end:increment,
::-webkit-scrollbar-button:vertical:start:decrement,
::-webkit-scrollbar-button:vertical:end:increment {
display: block;
}
::-webkit-scrollbar-button:vertical:start {
background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg width='22' height='24' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill='%23fff' stroke='%23000' d='M.5.5h21v22.375H.5z'/%3E%3Cpath fill='%23000' d='M1 23h20v-2H1zM1.375 12.375h5.5V11h-5.5zM6.875 17.875h6.875V16.5H6.875zM6.875 17.875v-5.5H5.5v5.5zM9.625 5.5V4.125H8.25V5.5zM11 4.125V2.75H9.625v1.375zM19.25 12.375V11h-1.375v1.375zM17.875 11V9.625H16.5V11zM16.5 9.625V8.25h-1.375v1.375zM15.125 8.25V6.875H13.75V8.25zM13.75 6.875V5.5h-1.375v1.375zM12.375 5.5V4.125H11V5.5zM8.25 6.875V5.5H6.875v1.375zM6.875 8.25V6.875H5.5V8.25zM5.5 9.625V8.25H4.125v1.375zM4.125 11V9.625H2.75V11z'/%3E%3Cpath fill='%23000' d='M2.75 12.375V11H1.375v1.375zM15.125 17.875v-5.5H13.75v5.5zM13.75 12.375h5.5V11h-5.5z'/%3E%3C/svg%3E");
background-repeat: no-repeat;
height: 23.38px;
}
::-webkit-scrollbar-button:vertical:start:active {
background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg width='22' height='24' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill='%23fff' stroke='%23000' d='M.5.5h21v22.38H.5z'/%3E%3Cpath fill='%23000' d='M1 23.005h20v-2H1zM1.375 12.378h5.5v-1.375h-5.5zM6.875 17.879h6.875V6.877H6.875zM6.875 17.879v-5.501H5.5v5.5zM9.625 5.501V4.126H8.25v1.375zM11 4.126V2.75H9.625v1.375zM19.25 12.378v-1.375h-1.375v1.375zM17.875 11.002V9.627H13.75v1.375zM16.5 9.627V8.252h-2.75v1.375zM15.125 8.252V6.877H13.75v1.375zM13.75 6.876V5.501h-1.375v1.375zM12.375 5.501V4.126h-2.75v1.375zM12.375 6.876V5.501h-5.5v1.375zM6.875 8.252V6.877H5.5v1.375zM6.875 9.627V8.252h-2.75v1.375zM6.875 11.002V9.627H2.75v1.375z'/%3E%3Cpath fill='%23000' d='M2.75 12.378v-1.375H1.375v1.375zM15.125 17.879v-5.501H13.75v5.5zM13.75 12.378h5.5v-1.375h-5.5z'/%3E%3C/svg%3E");
background-repeat: no-repeat;
height: 23.38px;
}
::-webkit-scrollbar-button:vertical:end {
background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg width='22' height='24' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill='%23fff' stroke='%23000' d='M.5 22.875h21V.5H.5z'/%3E%3Cpath fill='%23000' d='M1 .375h20v2H1zM1.375 11h5.5v1.375h-5.5zM6.875 5.5h6.875v1.375H6.875zM6.875 5.5V11H5.5V5.5zM9.625 17.875v1.375H8.25v-1.375zM11 19.25v1.375H9.625V19.25zM19.25 11v1.375h-1.375V11zM17.875 12.375v1.375H16.5v-1.375zM16.5 13.75v1.375h-1.375V13.75zM15.125 15.125V16.5H13.75v-1.375zM13.75 16.5v1.375h-1.375V16.5zM12.375 17.875v1.375H11v-1.375zM8.25 16.5v1.375H6.875V16.5zM6.875 15.125V16.5H5.5v-1.375zM5.5 13.75v1.375H4.125V13.75zM4.125 12.375v1.375H2.75v-1.375z'/%3E%3Cpath fill='%23000' d='M2.75 11v1.375H1.375V11zM15.125 5.5V11H13.75V5.5zM13.75 11h5.5v1.375h-5.5z'/%3E%3C/svg%3E");
height: 23.38px;
}
::-webkit-scrollbar-button:vertical:end:active {
background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg width='22' height='24' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill='%23fff' stroke='%23000' d='M.5 22.88h21V.5H.5z'/%3E%3Cpath fill='%23000' d='M1 .375h20v2H1zM1.375 11.002h5.5v1.375h-5.5zM6.875 5.501h6.875v11.002H6.875zM6.875 5.501v5.501H5.5v-5.5zM9.625 17.879v1.375H8.25v-1.375zM11 19.254v1.375H9.625v-1.375zM19.25 11.002v1.375h-1.375v-1.375zM17.875 12.378v1.375H13.75v-1.375zM16.5 13.753v1.375h-2.75v-1.375zM15.125 15.128v1.375H13.75v-1.375zM13.75 16.503v1.375h-1.375v-1.375zM12.375 17.879v1.375h-2.75v-1.375zM12.375 16.503v1.375h-5.5v-1.375zM6.875 15.128v1.375H5.5v-1.375zM6.875 13.753v1.375h-2.75v-1.375zM6.875 12.378v1.375H2.75v-1.375z'/%3E%3Cpath fill='%23000' d='M2.75 11.002v1.375H1.375v-1.375zM15.125 5.501v5.501H13.75v-5.5zM13.75 11.002h5.5v1.375h-5.5z'/%3E%3C/svg%3E");
background-repeat: no-repeat;
height: 23.38px;
}
::-webkit-scrollbar-button:horizontal:start {
background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg width='24' height='23' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill='%23fff' stroke='%23000' d='M.813 22.187v-21h22.375v21z'/%3E%3Cpath fill='%23000' d='M23.313 21.688v-20h-2v20zM12.688 21.313v-5.5h-1.376v5.5zM18.188 15.813V8.936h-1.375v6.876z'/%3E%3Cpath fill='%23000' d='M18.188 15.813h-5.5v1.374h5.5zM5.813 13.063H4.438v1.374h1.375zM4.438 11.688H3.063v1.374h1.374zM12.688 3.438h-1.376v1.374h1.376zM11.313 4.813H9.937v1.375h1.376zM9.938 6.188H8.562v1.375h1.376zM8.563 7.563H7.187v1.375h1.375zM7.188 8.938H5.813v1.374h1.375zM5.813 10.313H4.438v1.374h1.375zM7.188 14.438H5.813v1.374h1.375zM8.563 15.813H7.187v1.374h1.375zM9.938 17.188H8.562v1.375h1.376zM11.313 18.563H9.937v1.375h1.376zM12.688 19.938h-1.376v1.375h1.376zM18.188 7.563h-5.5v1.375h5.5z'/%3E%3Cpath fill='%23000' d='M12.688 8.938v-5.5h-1.376v5.5z'/%3E%3C/svg%3E");
background-repeat: no-repeat;
height: 23.38px;
}
::-webkit-scrollbar-button:horizontal:start:active {
background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg width='24' height='23' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill='%23fff' stroke='%23000' d='M.81 22.19v-21h22.38v21z'/%3E%3Cpath fill='%23000' d='M23.315 21.69v-20h-2v20zM12.688 21.315v-5.5h-1.375v5.5zM18.189 15.815V8.94H7.187v6.875z'/%3E%3Cpath fill='%23000' d='M18.189 15.815h-5.501v1.375h5.5zM5.811 13.065H4.436v1.375h1.375zM4.436 11.69H3.06v1.375h1.375zM12.688 3.44h-1.375v1.375h1.375zM11.312 4.815H9.937V8.94h1.375zM9.937 6.19H8.562v2.75h1.375z'/%3E%3Cpath fill='%23000' d='M8.562 7.565H7.187V8.94h1.375zM7.186 8.94H5.811v1.375h1.375zM5.811 10.315H4.436v2.75h1.375zM7.186 10.315H5.811v5.5h1.375zM8.562 15.815H7.187v1.375h1.375z'/%3E%3Cpath fill='%23000' d='M9.937 15.815H8.562v2.75h1.375zM11.312 15.815H9.937v4.125h1.375zM12.688 19.94h-1.375v1.375h1.375zM18.189 7.565h-5.501V8.94h5.5z'/%3E%3Cpath fill='%23000' d='M12.688 8.94v-5.5h-1.375v5.5z'/%3E%3C/svg%3E");
background-repeat: no-repeat;
height: 23.38px;
}
::-webkit-scrollbar-button:horizontal:end {
background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg width='24' height='23' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill='%23fff' stroke='%23000' d='M23.188 22.188v-21H.813v21z'/%3E%3Cpath fill='%23000' d='M.688 21.687v-20h2v20zM11.313 21.312v-5.5h1.375v5.5zM5.813 15.812V8.937h1.375v6.875zM5.813 15.813h5.5v1.375h-5.5zM18.188 13.063h1.375v1.375h-1.375zM19.563 11.688h1.375v1.375h-1.375zM11.313 3.438h1.375v1.375h-1.375zM12.688 4.813h1.375v1.375h-1.375zM14.063 6.188h1.375v1.375h-1.375zM15.438 7.563h1.375v1.375h-1.375zM16.813 8.938h1.375v1.375h-1.375zM18.188 10.313h1.375v1.375h-1.375zM16.813 14.438h1.375v1.375h-1.375zM15.438 15.813h1.375v1.375h-1.375zM14.063 17.188h1.375v1.375h-1.375zM12.688 18.563h1.375v1.375h-1.375z'/%3E%3Cpath fill='%23000' d='M11.313 19.938h1.375v1.375h-1.375zM5.813 7.563h5.5v1.375h-5.5zM11.313 8.937v-5.5h1.375v5.5z'/%3E%3C/svg%3E");
height: 23.38px;
}
::-webkit-scrollbar-button:horizontal:end:active {
background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg width='24' height='23' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill='%23fff' stroke='%23000' d='M23.19 22.19v-21H.81v21z'/%3E%3Cpath fill='%23000' d='M.685 21.69v-20h2v20zM11.312 21.315v-5.5h1.375v5.5zM5.811 15.815V8.94h11.002v6.875z'/%3E%3Cpath fill='%23000' d='M5.811 15.815h5.501v1.375H5.811zM18.189 13.065h1.375v1.375h-1.375zM19.564 11.69h1.375v1.375h-1.375zM11.312 3.44h1.375v1.375h-1.375zM12.688 4.815h1.375V8.94h-1.375zM14.063 6.19h1.375v2.75h-1.375zM15.438 7.565h1.375V8.94h-1.375zM16.814 8.94h1.375v1.375h-1.375zM18.189 10.315h1.375v2.75h-1.375zM16.814 10.315h1.375v5.5h-1.375zM15.438 15.815h1.375v1.375h-1.375zM14.063 15.815h1.375v2.75h-1.375zM12.688 15.815h1.375v4.125h-1.375zM11.312 19.94h1.375v1.375h-1.375zM5.811 7.565h5.501V8.94H5.811z'/%3E%3Cpath fill='%23000' d='M11.312 8.94v-5.5h1.375v5.5z'/%3E%3C/svg%3E");
background-repeat: no-repeat;
height: 23.38px;
}
.window-pane::-webkit-scrollbar {
width: 22px;
background-color: var(--primary);
}
.window-pane::-webkit-scrollbar-track {
background: linear-gradient(45deg, var(--secondary) 25%, transparent 25%, transparent 75%, var(--secondary) 75%, var(--secondary)), linear-gradient(45deg, var(--secondary) 25%, transparent 25%, transparent 75%, var(--secondary) 75%, var(--secondary));
background-color: var(--primary);
background-size: 4px 4px;
background-position: 0 0, 2px 2px;
width: 10px;
border-left: 4px solid var(--secondary);
}
.window-pane::-webkit-scrollbar-thumb {
width: 20px;
box-sizing: content-box;
background-color: var(--primary);
border: 2px solid var(--secondary);
border-right: none;
}
::selection
{
background-color: aliceblue;
}
/** GITHUB - Gists */
body .gist .highlight {
background: #272822;
}
body .gist .blob-num,
body .gist .blob-code-inner,
body .gist .pl-s2,
body .gist .pl-stj {
color: #f8f8f2;
}
body .gist .pl-c1 {
color: #ae81ff;
}
body .gist .pl-enti {
color: #a6e22e;
font-weight: 700;
}
body .gist .pl-st {
color: #66d9ef;
}
body .gist .pl-mdr {
color: #66d9ef;
font-weight: 400;
}
body .gist .pl-ms1 {
background: #fd971f;
}
body .gist .pl-c,
body .gist .pl-c span,
body .gist .pl-pdc {
color: #75715e;
font-style: italic;
}
body .gist .pl-cce,
body .gist .pl-cn,
body .gist .pl-coc,
body .gist .pl-enc,
body .gist .pl-ens,
body .gist .pl-kos,
body .gist .pl-kou,
body .gist .pl-mh .pl-pdh,
body .gist .pl-mp,
body .gist .pl-mp1 .pl-sf,
body .gist .pl-mq,
body .gist .pl-pde,
body .gist .pl-pse,
body .gist .pl-pse .pl-s2,
body .gist .pl-mp .pl-s3,
body .gist .pl-smi,
body .gist .pl-stp,
body .gist .pl-sv,
body .gist .pl-v,
body .gist .pl-vi,
body .gist .pl-vpf,
body .gist .pl-mri,
body .gist .pl-va,
body .gist .pl-vpu {
color: #66d9ef;
}
body .gist .pl-cos,
body .gist .pl-ml,
body .gist .pl-pds,
body .gist .pl-s,
body .gist .pl-s1,
body .gist .pl-sol {
color: #e6db74;
}
body .gist .pl-e,
body .gist .pl-ef,
body .gist .pl-en,
body .gist .pl-enf,
body .gist .pl-enm,
body .gist .pl-entc,
body .gist .pl-entm,
body .gist .pl-eoac,
body .gist .pl-eoac .pl-pde,
body .gist .pl-eoi,
body .gist .pl-mai .pl-sf,
body .gist .pl-mm,
body .gist .pl-pdv,
body .gist .pl-som,
body .gist .pl-sr,
body .gist .pl-vo {
color: #a6e22e;
}
body .gist .pl-ent,
body .gist .pl-eoa,
body .gist .pl-eoai,
body .gist .pl-eoai .pl-pde,
body .gist .pl-k,
body .gist .pl-ko,
body .gist .pl-kolp,
body .gist .pl-mc,
body .gist .pl-mr,
body .gist .pl-ms,
body .gist .pl-s3,
body .gist .pl-smc,
body .gist .pl-smp,
body .gist .pl-sok,
body .gist .pl-sra,
body .gist .pl-src,
body .gist .pl-sre {
color: #f92672;
}
body .gist .pl-mb,
body .gist .pl-pdb {
color: #e6db74;
font-weight: 700;
}
body .gist .pl-mi,
body .gist .pl-pdi {
color: #f92672;
font-style: italic;
}
body .gist .pl-pdc1,
body .gist .pl-scp {
color: #ae81ff;
}
body .gist .pl-sc,
body .gist .pl-sf,
body .gist .pl-mo,
body .gist .pl-entl {
color: #fd971f;
}
body .gist .pl-mi1,
body .gist .pl-mdht {
color: #a6e22e;
background: rgba(0, 64, 0, .5);
}
body .gist .pl-md,
body .gist .pl-mdhf {
color: #f92672;
background: rgba(64, 0, 0, .5);
}
body .gist .pl-mdh,
body .gist .pl-mdi {
color: #a6e22e;
font-weight: 400;
}
body .gist .pl-ib,
body .gist .pl-id,
body .gist .pl-ii,
body .gist .pl-iu {
background: #a6e22e;
color: #272822;
}
body .gist .gist-meta {
display: block;
background: #272727;
color: cyan;
}
body .gist .gist-meta a {
color: rgb(109, 172, 235);
}
body .gist .gist-file {
border-width: 0px;
border-radius: 0px;
border-bottom: 0px;
border: 0px;
}
body .gist .gist-file .gist-data td{
padding: 5px;
margin: 5px;
border: 0px;
border-width: 0px;
}

View File

@ -1,32 +0,0 @@
export const getGhostImgPath = (
baseUrl: string,
imgUrl: string,
width = 0,
): string => {
if (!imgUrl) return "";
if (!imgUrl.startsWith(baseUrl)) {
return imgUrl;
}
const relativePath = imgUrl.substring(`${baseUrl}content/images`.length);
const cleanedBaseUrl = baseUrl.replace(/\/~/, "");
if (width && width > 0) {
return `${cleanedBaseUrl}content/images/size/w${width}/${relativePath}`;
}
return `${cleanedBaseUrl}content/images/${width}${relativePath}`;
};
export const truncate = (input: string, size: number): string =>
input.length > size ? `${input.substring(0, size)}...` : input;
export const formatDate = (dateInput: string): string => {
const dateObject = new Date(dateInput);
return dateObject.toDateString();
};
export const uniqWith = <T>(
arr: Array<T>,
fn: (element: T, step: T) => number,
): Array<T> =>
arr.filter(
(element, index) => arr.findIndex((step) => fn(element, step)) === index,
);

View File

@ -1,106 +0,0 @@
# @matthiesenxyz/astro-ghostcms-catppuccin
## 0.0.14
### Patch Changes
- f097c6a: Adds a toggleswitch to allow users to disable astro-remote usage for rendering ghost-content
- Updated dependencies [f097c6a]
- @matthiesenxyz/astro-ghostcms@3.3.4
## 0.0.13
### Patch Changes
- b0218e1: fix:
- Removed CodeSlot Component that sometimes would break with some <pre> components
- Will be adding at a latter time a custom component to replace this, but at this time this is now fixed.
## 0.0.12
### Patch Changes
- 4c1002a: fix getAllTags bug for themes and bump other packages deps
- Updated dependencies [4c1002a]
- @matthiesenxyz/astro-ghostcms@3.3.2
## 0.0.11
### Patch Changes
- 746fcc5: Fix html rendering to allow custom components
## 0.0.10
### Patch Changes
- 2724119: Migrate to `astro-remote` for internal processing of GhostCMS HTML. No user changes required.
## 0.0.9
### Patch Changes
- f921005: Bump dependencies:
- vite from to
- @eliancodes/brutal-ui from to
- typescript from to
- ultrahtml from to
- @fontsource-variable/inter from to
- astro-seo from to
- astro from to
- sass from to
- @astrojs/starlight from to
- sharp from to
- Updated dependencies [f921005]
- @matthiesenxyz/astro-ghostcms@3.3.1
## 0.0.8
### Patch Changes
- 1f850db: Bump dependencies:
- astro from to
- vite from to
- astro-seo from to
- sass from to
- Updated dependencies [1f850db]
- @matthiesenxyz/astro-ghostcms@3.2.9
## 0.0.7
### Patch Changes
- 3a5aea9: Updated Tests and Linted packages
- Updated dependencies [3a5aea9]
- @matthiesenxyz/astro-ghostcms@3.2.7
## 0.0.6
### Patch Changes
- 12be739: Depencency updates
- 754d08a: Bump astro-navbar from 2.3.0 to 2.3.1
- Updated dependencies [12be739]
- Updated dependencies [455ad3f]
- @matthiesenxyz/astro-ghostcms@3.2.5
## 0.0.5
### Patch Changes
- Fix License File
- Updated dependencies
- @matthiesenxyz/astro-ghostcms@3.2.4
## 0.0.4
### Patch Changes
- Initialization of changeset cli
- Updated dependencies
- @matthiesenxyz/astro-ghostcms@3.2.3

View File

@ -1,6 +1,6 @@
MIT License
Copyright (c) 2024 MatthiesenXYZ - Astro-GhostCMS
Copyright (c) 2024 Adam Matthiesen
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal

View File

@ -1,19 +1,16 @@
/** @type {import('tailwindcss').Config} */
import { fontFamily as _fontFamily } from "tailwindcss/defaultTheme";
export const content = [
"./node_modules/@matthiesenxyz/astro-ghostcms-catppuccin/src/**/*.{astro,js,css,ts}",
'./node_modules/@matthiesenxyz/astro-ghostcms-catppuccin/src/**/*.{astro,js,css,ts}'
];
export const theme = {
extend: {
fontFamily: {
sans: ["Inter Variable", "Inter", ..._fontFamily.sans],
},
},
extend: {
fontFamily: {
sans: ["Inter Variable", "Inter", ..._fontFamily.sans],
},
},
};
export const plugins = [
require("@tailwindcss/typography"),
require("@catppuccin/tailwindcss")({
prefix: "ctp",
defaultFlavour: "frappe",
}),
require("@tailwindcss/typography"),
require("@catppuccin/tailwindcss")({ prefix: 'ctp', defaultFlavour: "frappe" })
];

View File

@ -1,19 +1,16 @@
/** @type {import('tailwindcss').Config} */
import { fontFamily as _fontFamily } from "tailwindcss/defaultTheme";
export const content = [
"./node_modules/@matthiesenxyz/astro-ghostcms-catppuccin/src/**/*.{astro,js,css,ts}",
'./node_modules/@matthiesenxyz/astro-ghostcms-catppuccin/src/**/*.{astro,js,css,ts}'
];
export const theme = {
extend: {
fontFamily: {
sans: ["Inter Variable", "Inter", ..._fontFamily.sans],
},
},
extend: {
fontFamily: {
sans: ["Inter Variable", "Inter", ..._fontFamily.sans],
},
},
};
export const plugins = [
require("@tailwindcss/typography"),
require("@catppuccin/tailwindcss")({
prefix: "ctp",
defaultFlavour: "latte",
}),
require("@tailwindcss/typography"),
require("@catppuccin/tailwindcss")({ prefix: 'ctp', defaultFlavour: "latte" })
];

View File

@ -1,19 +1,16 @@
/** @type {import('tailwindcss').Config} */
import { fontFamily as _fontFamily } from "tailwindcss/defaultTheme";
export const content = [
"./node_modules/@matthiesenxyz/astro-ghostcms-catppuccin/src/**/*.{astro,js,css,ts}",
'./node_modules/@matthiesenxyz/astro-ghostcms-catppuccin/src/**/*.{astro,js,css,ts}'
];
export const theme = {
extend: {
fontFamily: {
sans: ["Inter Variable", "Inter", ..._fontFamily.sans],
},
},
extend: {
fontFamily: {
sans: ["Inter Variable", "Inter", ..._fontFamily.sans],
},
},
};
export const plugins = [
require("@tailwindcss/typography"),
require("@catppuccin/tailwindcss")({
prefix: "ctp",
defaultFlavour: "macchiato",
}),
require("@tailwindcss/typography"),
require("@catppuccin/tailwindcss")({ prefix: 'ctp', defaultFlavour: "macchiato" })
];

View File

@ -1,19 +1,16 @@
/** @type {import('tailwindcss').Config} */
import { fontFamily as _fontFamily } from "tailwindcss/defaultTheme";
export const content = [
"./node_modules/@matthiesenxyz/astro-ghostcms-catppuccin/src/**/*.{astro,js,css,ts}",
'./node_modules/@matthiesenxyz/astro-ghostcms-catppuccin/src/**/*.{astro,js,css,ts}'
];
export const theme = {
extend: {
fontFamily: {
sans: ["Inter Variable", "Inter", ..._fontFamily.sans],
},
},
extend: {
fontFamily: {
sans: ["Inter Variable", "Inter", ..._fontFamily.sans],
},
},
};
export const plugins = [
require("@tailwindcss/typography"),
require("@catppuccin/tailwindcss")({
prefix: "ctp",
defaultFlavour: "mocha",
}),
require("@tailwindcss/typography"),
require("@catppuccin/tailwindcss")({ prefix: 'ctp', defaultFlavour: "mocha" })
];

View File

@ -1,7 +1,7 @@
{
"name": "@matthiesenxyz/astro-ghostcms-catppuccin",
"description": "A dark theme made with Catppuccin and TailwindCSS for Astro-GhostCMS",
"version": "0.0.14",
"version": "0.0.3",
"homepage": "https://astro-ghostcms.xyz/",
"type": "module",
"license": "MIT",
@ -13,10 +13,10 @@
"email": "adam@matthiesen.xyz",
"name": "Adam Matthiesen - MatthiesenXYZ",
"url": "https://matthiesen.xyz"
},
"keywords": [
"astro-ghostcms"
],
},
"keywords": [
"astro-ghostcms"
],
"repository": {
"type": "git",
"url": "git+https://github.com/MatthiesenXYZ/astro-ghostcms.git"
@ -48,10 +48,9 @@
"./author/[slug].astro": "./src/routes/author/[slug].astro",
"./archives/[...page].astro": "./src/routes/archives/[...page].astro"
},
"scripts": {},
"scripts": { },
"peerDependencies": {
"@matthiesenxyz/astro-ghostcms": ">=3.3.5",
"astro": ">=4.4.0"
"astro": "^4.2.1"
},
"devDependencies": {
"@matthiesenxyz/astro-ghostcms": "workspace:*"
@ -59,13 +58,11 @@
"dependencies": {
"@astrojs/tailwind": "^5.1.0",
"@catppuccin/tailwindcss": "0.1.6",
"@fontsource-variable/inter": "^5.0.17",
"@matthiesenxyz/astro-ghostcms": "^3.3.5",
"@fontsource-variable/inter": "^5.0.16",
"@matthiesenxyz/astro-ghostcms": "^3.1.8",
"@tailwindcss/typography": "^0.5.10",
"astro-navbar": "^2.3.1",
"astro-remote": "^0.3.2",
"astro-seo": "^0.8.3",
"tailwindcss": "^3.3.5",
"ultrahtml": "1.5.3"
"astro-navbar": "^2.3.0",
"astro-seo": "^0.8.0"
}
}

View File

@ -3,11 +3,6 @@ import type { Settings, Post } from "@matthiesenxyz/astro-ghostcms/api";
import FeatureImage from "./FeatureImage.astro";
import AuthorList from "./AuthorList.astro";
import { formatDate } from "../utils";
import { Markup } from 'astro-remote';
import config from "virtual:@matthiesenxyz/astro-ghostcms/config";
const useRemote = config.ThemeProvider.astroRemote.enable;
export type Props = {
posts: Post[];
settings: Settings;
@ -64,15 +59,7 @@ const latestFeatured = posts[0]
</div>
<div class="divider my-4"/>
<section id="ghostimport" class="text-ctp-subtext1">
{useRemote ? (latestFeatured && <Markup
content={latestFeatured.html}
sanitize={{
allowComponents: true,
allowElements: ['a', 'p', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'img', 'figure', 'figcaption', 'ul', 'ol', 'li', 'blockquote', 'pre', 'code', 'em', 'strong', 'del', 'hr', 'br', 'table', 'thead', 'tbody', 'tr', 'th', 'td', 'caption', 'div', 'span', 'script', 'astrocard'],
}}
/>) : (latestFeatured && <Fragment set:html={latestFeatured.html} />) }
{latestFeatured && <Fragment set:html={latestFeatured.html} />}
</section>
</div>
</main>

Some files were not shown because too many files have changed in this diff Show More