Compare commits
1 Commits
10839c6339
...
8db9fde31b
Author | SHA1 | Date | |
---|---|---|---|
|
8db9fde31b |
7
docs/bob/hello.md
Normal file
7
docs/bob/hello.md
Normal file
@ -0,0 +1,7 @@
|
||||
---
|
||||
title: 'Hello'
|
||||
published: '2024-10-06'
|
||||
summary: 'petentium usu tota noluisse errem elaboraret auctor.'
|
||||
---
|
||||
|
||||
# hello
|
7
docs/bob/hey.md
Normal file
7
docs/bob/hey.md
Normal file
@ -0,0 +1,7 @@
|
||||
---
|
||||
title: 'Hey'
|
||||
published: '2024-10-06'
|
||||
summary: 'petentium usu tota noluisse errem elaboraret auctor.'
|
||||
---
|
||||
|
||||
# hey
|
7
docs/bob/hi.md
Normal file
7
docs/bob/hi.md
Normal file
@ -0,0 +1,7 @@
|
||||
---
|
||||
title: 'Hi'
|
||||
published: '2024-10-06'
|
||||
summary: 'petentium usu tota noluisse errem elaboraret auctor.'
|
||||
---
|
||||
|
||||
# hi
|
293
docs/intro.md
Normal file
293
docs/intro.md
Normal file
@ -0,0 +1,293 @@
|
||||
---
|
||||
title: '🚀 Introduction'
|
||||
published: '2024-10-06'
|
||||
summary: 'petentium usu tota noluisse errem elaboraret auctor.'
|
||||
---
|
||||
|
||||
# Get started with Pulse App!
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
|
||||
# an mel dissentiunt ponderum eius dicant adhuc,
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
|
||||
# vim an explicari eirmod pro singulis scripta iaculis fermentum.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
|
||||
# eruditi propriae vulputate elit venenatis reprehendunt delectus.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
|
||||
# dicunt antiopam ultricies nisl egestas voluptatibus harum,
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
|
||||
# viverra senserit cursus theophrastus elaboraret iudicabit ligula.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
|
||||
# posidonium dicat eum nostra auctor quaeque harum
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
|
||||
# doctus primis disputationi atqui magnis himenaeos fastidii
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
|
||||
# ligula cras prodesset litora ridens docendi euripidis
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
|
||||
# efficitur detraxit detraxit fames appareat mutat elit
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
|
||||
# donec nominavi qui dolorum adversarium eum eleifend
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
|
||||
# nunc contentiones numquam pharetra his vero solum
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
||||
petentium usu tota noluisse errem elaboraret auctor.
|
@ -1,24 +0,0 @@
|
||||
---
|
||||
title: '🚀 Introduction'
|
||||
published: '2024-10-06'
|
||||
summary: 'petentium usu tota noluisse errem elaboraret auctor.'
|
||||
order: 1
|
||||
---
|
||||
|
||||
> [!IMPORTANT]
|
||||
> These docs are currently a work in progress and are subject to change.
|
||||
|
||||
# Pulse App
|
||||
<span className="flex gap-2 items-center select-none">
|
||||
<Activity className="w-4 h-4 text-primary" /> <span>A lightweight service monitoring solution for tracking the availability of whatever service your heart desires!</span>
|
||||
</span>
|
||||
|
||||
## Getting Started
|
||||
Let's get you up and running—this will only take a few minutes! Start by [creating your account](#creating-your-account) and
|
||||
making your first status page. You can do this on our cloud or on your [own instance](/self-hosting). Once done, you can add
|
||||
your services and start monitoring them. See [Next Steps](#next-steps) for more.
|
||||
|
||||
### Creating your Account
|
||||
- First, head to our [Dashboard](https://pulseapp.cc/dashboard) and fill out the form. ![Registering](https://cdn.rainnny.club/auhNOjrcYz6u.png)
|
||||
- Next, complete the onboarding process and set up your first organization, and status page. ![Onboarding](https://cdn.rainnny.club/AfDgjHG5QTpZ.png)
|
||||
- Finally, you can [start monitoring your services](#next-steps)!
|
@ -1,9 +0,0 @@
|
||||
---
|
||||
title: '🐋 Docker'
|
||||
published: '2024-10-07'
|
||||
summary: 'petentium usu tota noluisse errem elaboraret auctor.'
|
||||
order: 4
|
||||
---
|
||||
|
||||
# 🐋 Deploying on Docker
|
||||
...
|
@ -1,9 +0,0 @@
|
||||
---
|
||||
title: '🧩 Components'
|
||||
published: '2024-10-07'
|
||||
summary: 'petentium usu tota noluisse errem elaboraret auctor.'
|
||||
order: 2
|
||||
---
|
||||
|
||||
# 🧩 Components
|
||||
...
|
@ -1,9 +0,0 @@
|
||||
---
|
||||
title: '✔️ Supported Services'
|
||||
published: '2024-10-07'
|
||||
summary: 'petentium usu tota noluisse errem elaboraret auctor.'
|
||||
order: 3
|
||||
---
|
||||
|
||||
# ✔️ Supported Services
|
||||
Below is a list of all the services that are currently supported by Pulse App. Are we missing a service? Please [open an issue](https://git.rainnny.club/PulseApp/API/issues)!
|
@ -41,7 +41,7 @@
|
||||
"@types/react": "^18",
|
||||
"@types/react-dom": "^18",
|
||||
"eslint": "^9.0.0",
|
||||
"eslint-config-next": "14.2.14",
|
||||
"eslint-config-next": "14.2.8",
|
||||
"postcss": "^8",
|
||||
"tailwindcss": "^3.4.1",
|
||||
"typescript": "^5"
|
||||
|
@ -13,6 +13,7 @@ import { capitalizeWords } from "@/lib/string";
|
||||
import { Metadata } from "next";
|
||||
import Embed from "@/components/embed";
|
||||
import DocsFooter from "@/components/docs-footer";
|
||||
import { cn } from "@/lib/utils";
|
||||
import OnThisPage from "@/components/on-this-page";
|
||||
|
||||
/**
|
||||
@ -31,10 +32,9 @@ const DocsPage = async ({
|
||||
|
||||
// Get the content to display based on the provided slug
|
||||
const pages: DocsContentMetadata[] = getDocsContent();
|
||||
const decodedSlug: string = decodeURIComponent(slug || "");
|
||||
const page: DocsContentMetadata | undefined = pages.find(
|
||||
(metadata: DocsContentMetadata): boolean =>
|
||||
metadata.slug === (decodedSlug || "intro")
|
||||
metadata.slug === (slug || "intro")
|
||||
);
|
||||
if (!page) {
|
||||
notFound();
|
||||
@ -44,17 +44,20 @@ const DocsPage = async ({
|
||||
return (
|
||||
<main className="w-full flex flex-col">
|
||||
{/* Breadcrumb */}
|
||||
<Breadcrumb className="pt-4 pb-3 select-none">
|
||||
<Breadcrumb className="pt-4 select-none">
|
||||
<BreadcrumbList>
|
||||
{splitSlug
|
||||
.slice(0, -1)
|
||||
.map((part: string, index: number): ReactElement => {
|
||||
{splitSlug.map(
|
||||
(part: string, index: number): ReactElement => {
|
||||
const active: boolean =
|
||||
index === splitSlug.length - 1;
|
||||
const slug: string = splitSlug
|
||||
.slice(1, index + 2) // Include one more to account for the index shift
|
||||
.slice(1, index + 1)
|
||||
.join("/");
|
||||
return (
|
||||
<div className="flex items-center" key={part}>
|
||||
<BreadcrumbItem>
|
||||
<BreadcrumbItem
|
||||
className={cn(active && "text-primary")}
|
||||
>
|
||||
<BreadcrumbLink
|
||||
href={slug}
|
||||
draggable={false}
|
||||
@ -62,17 +65,13 @@ const DocsPage = async ({
|
||||
{capitalizeWords(part)}
|
||||
</BreadcrumbLink>
|
||||
</BreadcrumbItem>
|
||||
{index < splitSlug.length - 1 && ( // Adjusted to avoid separator after the last breadcrumb
|
||||
{index < splitSlug.length - 1 && (
|
||||
<BreadcrumbSeparator className="pl-1.5" />
|
||||
)}
|
||||
</div>
|
||||
);
|
||||
})}
|
||||
<BreadcrumbItem className="text-primary">
|
||||
<BreadcrumbLink href="#" draggable={false}>
|
||||
{page.title}{" "}
|
||||
</BreadcrumbLink>
|
||||
</BreadcrumbItem>
|
||||
}
|
||||
)}
|
||||
</BreadcrumbList>
|
||||
</Breadcrumb>
|
||||
|
||||
|
@ -51,7 +51,7 @@ const RootLayout = ({
|
||||
}}
|
||||
>
|
||||
<TooltipProvider delayDuration={100}>
|
||||
<div className="px-3 md:px-7 max-w-screen-2xl min-h-screen mx-auto flex flex-col transition-all">
|
||||
<div className="px-3 sm:px-7 max-w-screen-2xl min-h-screen mx-auto flex flex-col transition-all">
|
||||
<Navbar />
|
||||
<div className="pt-[4.5rem] w-full h-full flex flex-grow gap-5">
|
||||
<div className="relative hidden xs:flex">
|
||||
|
@ -16,11 +16,6 @@ type DocsContentMetadata = MDXMetadata & {
|
||||
* The summary of this content.
|
||||
*/
|
||||
summary: string;
|
||||
|
||||
/**
|
||||
* The order of this content.
|
||||
*/
|
||||
order: number;
|
||||
};
|
||||
|
||||
/**
|
||||
|
@ -13,7 +13,7 @@ const DocsFooter = ({
|
||||
}: {
|
||||
pages: DocsContentMetadata[];
|
||||
}): ReactElement => {
|
||||
const path: string = decodeURIComponent(usePathname());
|
||||
const path: string = usePathname();
|
||||
|
||||
const current: number = pages.findIndex(
|
||||
(page: DocsContentMetadata) =>
|
||||
@ -46,17 +46,15 @@ const DocsFooter = ({
|
||||
pages[current]?.published
|
||||
).toLocaleString(DateTime.DATETIME_MED)}
|
||||
>
|
||||
<span className="text-xs sm:text-sm opacity-75 transition-all transform-gpu">
|
||||
<span className="text-sm opacity-75">
|
||||
Published {publicationDate}
|
||||
</span>
|
||||
</SimpleTooltip>
|
||||
</div>
|
||||
|
||||
{/* Pages */}
|
||||
{previous || next ? (
|
||||
<Separator className="my-4 bg-separator-gradient" />
|
||||
) : undefined}
|
||||
<div className="flex justify-between text-xs sm:text-base">
|
||||
<Separator className="my-4 bg-separator-gradient" />
|
||||
<div className="flex justify-between">
|
||||
{/* Previous */}
|
||||
{previous && (
|
||||
<Link
|
||||
|
@ -1,32 +0,0 @@
|
||||
"use client";
|
||||
|
||||
import { ReactElement, ReactNode } from "react";
|
||||
import { Dialog, DialogContent, DialogTrigger } from "@/components/ui/dialog";
|
||||
import { cn } from "@/lib/utils";
|
||||
|
||||
type ImageViewerProps = {
|
||||
className?: string | undefined;
|
||||
children: ReactNode;
|
||||
};
|
||||
|
||||
const ImageViewer = ({
|
||||
className,
|
||||
children,
|
||||
}: ImageViewerProps): ReactElement => {
|
||||
return (
|
||||
<Dialog>
|
||||
<DialogTrigger
|
||||
className={cn(
|
||||
"hover:scale-[1.005] transition-all transform-gpu",
|
||||
className
|
||||
)}
|
||||
>
|
||||
{children}
|
||||
</DialogTrigger>
|
||||
<DialogContent className="p-0 min-w-[20rem] max-w-screen-xl">
|
||||
{children}
|
||||
</DialogContent>
|
||||
</Dialog>
|
||||
);
|
||||
};
|
||||
export default ImageViewer;
|
@ -1,47 +1,12 @@
|
||||
import { isValidElement, ReactElement, ReactNode } from "react";
|
||||
import { ReactElement, ReactNode } from "react";
|
||||
import { MDXRemote } from "remote-mdx/rsc";
|
||||
import { cn } from "@/lib/utils";
|
||||
import remarkGfm from "remark-gfm";
|
||||
import {
|
||||
Activity,
|
||||
CircleAlert,
|
||||
Lightbulb,
|
||||
MessageSquareWarning,
|
||||
OctagonAlert,
|
||||
TriangleAlert,
|
||||
} from "lucide-react";
|
||||
import Link from "next/link";
|
||||
import { capitalizeWords } from "@/lib/string";
|
||||
import ImageViewer from "@/components/image-viewer";
|
||||
|
||||
const blockquoteStyles: { [key: string]: any } = {
|
||||
NOTE: {
|
||||
icon: <CircleAlert className="w-4 h-4" />,
|
||||
style: "text-[#1F6FEB] border-[#1F6FEB]",
|
||||
},
|
||||
TIP: {
|
||||
icon: <Lightbulb className="w-4 h-4" />,
|
||||
style: "text-[#4A8BD5] border-[#4A8BD5]",
|
||||
},
|
||||
IMPORTANT: {
|
||||
icon: <MessageSquareWarning className="w-4 h-4" />,
|
||||
style: "text-[#8957E5] border-[#8957E5]",
|
||||
},
|
||||
WARNING: {
|
||||
icon: <TriangleAlert className="w-4 h-4" />,
|
||||
style: "text-[#9E6A03] border-[#9E6A03]",
|
||||
},
|
||||
CAUTION: {
|
||||
icon: <OctagonAlert className="w-4 h-4" />,
|
||||
style: "text-[#DA3633] border-[#DA3633]",
|
||||
},
|
||||
};
|
||||
|
||||
/**
|
||||
* The MDX components to style.
|
||||
*/
|
||||
const components = {
|
||||
// Headings
|
||||
h1: ({ children }: { children: ReactNode }): ReactElement => (
|
||||
<Heading as="h1" size={1} className="text-4xl">
|
||||
{children}
|
||||
@ -72,8 +37,6 @@ const components = {
|
||||
{children}
|
||||
</Heading>
|
||||
),
|
||||
|
||||
// Text
|
||||
a: ({
|
||||
href,
|
||||
children,
|
||||
@ -81,59 +44,19 @@ const components = {
|
||||
href: string;
|
||||
children: ReactNode;
|
||||
}): ReactElement => (
|
||||
<Link
|
||||
className="text-primary cursor-pointer hover:opacity-75 transition-all transform-gpu"
|
||||
<a
|
||||
className="text-minecraft-green-4 cursor-pointer hover:opacity-85 transition-all transform-gpu"
|
||||
href={href}
|
||||
draggable={false}
|
||||
>
|
||||
{children}
|
||||
</Link>
|
||||
</a>
|
||||
),
|
||||
p: ({ children }: { children: ReactNode }): ReactElement => (
|
||||
<p className="leading-5 select-none">{children}</p>
|
||||
<p className="leading-4 text-zinc-300/80">{children}</p>
|
||||
),
|
||||
|
||||
// Media
|
||||
img: ({ src, alt }: { src: string; alt: string }): ReactElement => (
|
||||
<ImageViewer className="m-2 my-2.5">
|
||||
<img
|
||||
className="ring-1 ring-muted/45 rounded-2xl select-none"
|
||||
src={src}
|
||||
alt={alt}
|
||||
draggable={false}
|
||||
/>
|
||||
</ImageViewer>
|
||||
),
|
||||
|
||||
// Lists
|
||||
ul: ({ children }: { children: ReactNode }): ReactElement => (
|
||||
<ul className="px-3 list-disc list-inside select-none">{children}</ul>
|
||||
<ul className="px-3 list-disc list-inside">{children}</ul>
|
||||
),
|
||||
|
||||
// Blockquotes
|
||||
blockquote: ({ children }: { children: ReactNode }): ReactElement => {
|
||||
const match = extractBlockQuoteText(children).match(
|
||||
/^\s*\[!(NOTE|TIP|IMPORTANT|WARNING|CAUTION)]\s*(.*)/i
|
||||
);
|
||||
let style: any;
|
||||
if (!match || !(style = blockquoteStyles[match[1]])) {
|
||||
return <blockquote>{children}</blockquote>;
|
||||
}
|
||||
return (
|
||||
<blockquote
|
||||
className={cn(
|
||||
"my-2 pl-3 py-1.5 flex flex-col gap-2 border-l-[3px] select-none",
|
||||
style.style
|
||||
)}
|
||||
>
|
||||
<h1 className="flex gap-2 items-center">
|
||||
{style.icon}
|
||||
{capitalizeWords(match[1])}
|
||||
</h1>
|
||||
<p className="text-foreground opacity-85">{match[2]}</p>
|
||||
</blockquote>
|
||||
);
|
||||
},
|
||||
};
|
||||
|
||||
/**
|
||||
@ -148,8 +71,6 @@ export const CustomMDX = (props: any): ReactElement => (
|
||||
components={{
|
||||
...components,
|
||||
...(props.components || {}),
|
||||
Link,
|
||||
Activity,
|
||||
}}
|
||||
options={{
|
||||
mdxOptions: {
|
||||
@ -162,7 +83,6 @@ export const CustomMDX = (props: any): ReactElement => (
|
||||
/**
|
||||
* A heading component.
|
||||
*
|
||||
* @param as the type of heading
|
||||
* @param className the class name of the heading
|
||||
* @param size the size of the heading
|
||||
* @param children the children within the heading
|
||||
@ -184,11 +104,7 @@ const Heading = ({
|
||||
return (
|
||||
<Component
|
||||
id={id}
|
||||
className={cn(
|
||||
"py-3 font-bold select-none",
|
||||
size >= 2 && "pt-7",
|
||||
className
|
||||
)}
|
||||
className={cn("pt-2.5 font-bold", size >= 2 && "pt-7", className)}
|
||||
>
|
||||
{children}
|
||||
</Component>
|
||||
@ -201,16 +117,3 @@ const slugify = (text: string): string =>
|
||||
.replace(/[^\w\s-]/g, "")
|
||||
.replace(/[\s_-]+/g, "-")
|
||||
.trim();
|
||||
|
||||
const extractBlockQuoteText = (node: ReactNode): string => {
|
||||
if (typeof node === "string") {
|
||||
return node;
|
||||
}
|
||||
if (Array.isArray(node)) {
|
||||
return node.map(extractBlockQuoteText).join("");
|
||||
}
|
||||
if (isValidElement(node)) {
|
||||
return extractBlockQuoteText(node.props.children);
|
||||
}
|
||||
return "";
|
||||
};
|
||||
|
@ -9,7 +9,7 @@ const Navbar = (): ReactElement => {
|
||||
const pages: DocsContentMetadata[] = getDocsContent();
|
||||
return (
|
||||
<nav className="fixed left-0 inset-x-0 bg-white/[0.007] backdrop-saturate-100 backdrop-blur-xl border-b z-50">
|
||||
<div className="px-3 md:px-7 max-w-screen-2xl mx-auto py-4 flex justify-between items-center transition-all transform-gpu">
|
||||
<div className="px-3 sm:px-7 max-w-screen-2xl mx-auto py-4 flex justify-between items-center transition-all transform-gpu">
|
||||
{/* Branding */}
|
||||
<Link
|
||||
className="flex gap-1 items-end hover:opacity-75 transition-all transform-gpu select-none"
|
||||
|
@ -127,7 +127,7 @@ const OnThisPage = ({ page }: { page: DocsContentMetadata }): ReactElement => {
|
||||
|
||||
{/* Footer */}
|
||||
<div>
|
||||
<Separator className="mt-1 mb-3.5 bg-separator-gradient" />
|
||||
<Separator className="mt-1 mb-3.5" />
|
||||
<Footer page={page} />
|
||||
</div>
|
||||
</motion.div>
|
||||
@ -148,7 +148,7 @@ const Footer = ({ page }: { page: DocsContentMetadata }): ReactElement => {
|
||||
{/* Edit on Git */}
|
||||
<Link
|
||||
className="flex gap-1.5 items-center text-xs hover:opacity-75 transition-all transform-gpu group"
|
||||
href={`https://git.rainnny.club/PulseApp/docs/src/branch/master/docs/${page.slug}${page.extension}`}
|
||||
href={`https://git.rainnny.club/PulseApp/docs/src/branch/master/docs/${page.slug}.md`}
|
||||
target="_blank"
|
||||
draggable={false}
|
||||
>
|
||||
|
@ -20,11 +20,11 @@ const SidebarLinks = ({
|
||||
}): ReactElement => {
|
||||
const tree = useMemo(() => buildTree(pages), [pages]);
|
||||
return (
|
||||
<div className="flex flex-col gap-1">
|
||||
<>
|
||||
{Object.values(tree).map((node: TreeNode) => (
|
||||
<CategoryItem key={node.slug} node={node} />
|
||||
))}
|
||||
</div>
|
||||
</>
|
||||
);
|
||||
};
|
||||
|
||||
@ -44,14 +44,14 @@ const CategoryItem = ({
|
||||
depth?: number;
|
||||
isLast?: boolean;
|
||||
}) => {
|
||||
const path = decodeURIComponent(usePathname());
|
||||
const path = usePathname();
|
||||
const active =
|
||||
(path === "/" && node.slug === "intro") || path === `/${node.slug}`;
|
||||
const [isOpen, setIsOpen] = useState(true);
|
||||
const hasChildren = Object.keys(node.children).length > 0;
|
||||
|
||||
return (
|
||||
<div className={cn(`relative select-none`, depth > 0 && "ml-4")}>
|
||||
<div className={cn(`relative select-none`, depth > 0 && "ml-2.5")}>
|
||||
{/* Indentation */}
|
||||
{depth > 0 && (
|
||||
<div
|
||||
@ -72,7 +72,7 @@ const CategoryItem = ({
|
||||
>
|
||||
<Button
|
||||
className={cn(
|
||||
`relative w-full px-1.5 h-8 lg:text-base justify-between hover:bg-accent/20`,
|
||||
`relative w-full px-1.5 h-8 text-base justify-between hover:bg-accent/20`,
|
||||
depth > 0 && "pl-4",
|
||||
active &&
|
||||
"text-primary/95 font-bold hover:text-primary"
|
||||
@ -83,7 +83,7 @@ const CategoryItem = ({
|
||||
{hasChildren && (
|
||||
<motion.div
|
||||
initial={false}
|
||||
animate={{ rotate: isOpen ? 90 : 0 }}
|
||||
animate={{ rotate: isOpen ? 90 : 180 }}
|
||||
transition={{ duration: 0.2 }}
|
||||
>
|
||||
<ChevronRight className="w-4 h-4" />
|
||||
|
@ -6,8 +6,6 @@ import { UseThemeProps } from "next-themes/dist/types";
|
||||
import { Monitor, MoonStar, Sun } from "lucide-react";
|
||||
import { cn } from "@/lib/utils";
|
||||
import { Button } from "@/components/ui/button";
|
||||
import SimpleTooltip from "@/components/simple-tooltip";
|
||||
import { capitalizeWords } from "@/lib/string";
|
||||
|
||||
const themes = {
|
||||
dark: <MoonStar className="w-4 h-4" />,
|
||||
@ -33,22 +31,18 @@ const ThemeSwitcher = (): ReactElement => {
|
||||
{Object.entries(themes).map(([theme, icon]) => {
|
||||
const active: boolean = mounted && theme === activeTheme;
|
||||
return (
|
||||
<SimpleTooltip
|
||||
<Button
|
||||
key={theme}
|
||||
content={`${capitalizeWords(theme)} Theme`}
|
||||
className={cn(
|
||||
"p-1 h-6 opacity-80 rounded-full",
|
||||
active &&
|
||||
"ring-1 bg-zinc-900 ring-white/15 opacity-100"
|
||||
)}
|
||||
variant="ghost"
|
||||
onClick={() => setTheme(theme)}
|
||||
>
|
||||
<Button
|
||||
className={cn(
|
||||
"p-1 h-6 opacity-80 rounded-full",
|
||||
active &&
|
||||
"ring-1 bg-zinc-900 ring-white/15 opacity-100"
|
||||
)}
|
||||
variant="ghost"
|
||||
onClick={() => setTheme(theme)}
|
||||
>
|
||||
{icon}
|
||||
</Button>
|
||||
</SimpleTooltip>
|
||||
{icon}
|
||||
</Button>
|
||||
);
|
||||
})}
|
||||
</div>
|
||||
|
@ -21,11 +21,7 @@ export const getDocsContent = (): DocsContentMetadata[] => {
|
||||
for (const directory of getRecursiveDirectories(DOCS_DIR)) {
|
||||
content.push(...getMetadata<DocsContentMetadata>(DOCS_DIR, directory));
|
||||
}
|
||||
return content.sort((a: DocsContentMetadata, b: DocsContentMetadata) => {
|
||||
const orderA = a.order ?? Number.MAX_SAFE_INTEGER;
|
||||
const orderB = b.order ?? Number.MAX_SAFE_INTEGER;
|
||||
return orderA - orderB;
|
||||
});
|
||||
return content;
|
||||
};
|
||||
|
||||
/**
|
||||
|
Reference in New Issue
Block a user