Compare commits
15 Commits
8db9fde31b
...
10839c6339
Author | SHA1 | Date | |
---|---|---|---|
|
10839c6339 | ||
1296a34657 | |||
1717c0859d | |||
dc89db4eed | |||
40b799e280 | |||
71c24bd6cc | |||
c4f7d4bf7e | |||
54230367e1 | |||
68fae2e29e | |||
be319a4d7b | |||
325891663b | |||
36af41cbe4 | |||
fbde7667bc | |||
cdcee387b5 | |||
|
901f7706d4 |
@ -1,7 +0,0 @@
|
|||||||
---
|
|
||||||
title: 'Hello'
|
|
||||||
published: '2024-10-06'
|
|
||||||
summary: 'petentium usu tota noluisse errem elaboraret auctor.'
|
|
||||||
---
|
|
||||||
|
|
||||||
# hello
|
|
@ -1,7 +0,0 @@
|
|||||||
---
|
|
||||||
title: 'Hey'
|
|
||||||
published: '2024-10-06'
|
|
||||||
summary: 'petentium usu tota noluisse errem elaboraret auctor.'
|
|
||||||
---
|
|
||||||
|
|
||||||
# hey
|
|
@ -1,7 +0,0 @@
|
|||||||
---
|
|
||||||
title: 'Hi'
|
|
||||||
published: '2024-10-06'
|
|
||||||
summary: 'petentium usu tota noluisse errem elaboraret auctor.'
|
|
||||||
---
|
|
||||||
|
|
||||||
# hi
|
|
293
docs/intro.md
293
docs/intro.md
@ -1,293 +0,0 @@
|
|||||||
---
|
|
||||||
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.
|
|
24
docs/intro.mdx
Normal file
24
docs/intro.mdx
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
---
|
||||||
|
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)!
|
9
docs/👨🏼💻 Self Hosting/docker.mdx
Normal file
9
docs/👨🏼💻 Self Hosting/docker.mdx
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
---
|
||||||
|
title: '🐋 Docker'
|
||||||
|
published: '2024-10-07'
|
||||||
|
summary: 'petentium usu tota noluisse errem elaboraret auctor.'
|
||||||
|
order: 4
|
||||||
|
---
|
||||||
|
|
||||||
|
# 🐋 Deploying on Docker
|
||||||
|
...
|
9
docs/🖥️ Service Monitoring/components.mdx
Normal file
9
docs/🖥️ Service Monitoring/components.mdx
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
---
|
||||||
|
title: '🧩 Components'
|
||||||
|
published: '2024-10-07'
|
||||||
|
summary: 'petentium usu tota noluisse errem elaboraret auctor.'
|
||||||
|
order: 2
|
||||||
|
---
|
||||||
|
|
||||||
|
# 🧩 Components
|
||||||
|
...
|
9
docs/🖥️ Service Monitoring/supported-services.mdx
Normal file
9
docs/🖥️ Service Monitoring/supported-services.mdx
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
---
|
||||||
|
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": "^18",
|
||||||
"@types/react-dom": "^18",
|
"@types/react-dom": "^18",
|
||||||
"eslint": "^9.0.0",
|
"eslint": "^9.0.0",
|
||||||
"eslint-config-next": "14.2.8",
|
"eslint-config-next": "14.2.14",
|
||||||
"postcss": "^8",
|
"postcss": "^8",
|
||||||
"tailwindcss": "^3.4.1",
|
"tailwindcss": "^3.4.1",
|
||||||
"typescript": "^5"
|
"typescript": "^5"
|
||||||
|
@ -13,7 +13,6 @@ import { capitalizeWords } from "@/lib/string";
|
|||||||
import { Metadata } from "next";
|
import { Metadata } from "next";
|
||||||
import Embed from "@/components/embed";
|
import Embed from "@/components/embed";
|
||||||
import DocsFooter from "@/components/docs-footer";
|
import DocsFooter from "@/components/docs-footer";
|
||||||
import { cn } from "@/lib/utils";
|
|
||||||
import OnThisPage from "@/components/on-this-page";
|
import OnThisPage from "@/components/on-this-page";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -32,9 +31,10 @@ const DocsPage = async ({
|
|||||||
|
|
||||||
// Get the content to display based on the provided slug
|
// Get the content to display based on the provided slug
|
||||||
const pages: DocsContentMetadata[] = getDocsContent();
|
const pages: DocsContentMetadata[] = getDocsContent();
|
||||||
|
const decodedSlug: string = decodeURIComponent(slug || "");
|
||||||
const page: DocsContentMetadata | undefined = pages.find(
|
const page: DocsContentMetadata | undefined = pages.find(
|
||||||
(metadata: DocsContentMetadata): boolean =>
|
(metadata: DocsContentMetadata): boolean =>
|
||||||
metadata.slug === (slug || "intro")
|
metadata.slug === (decodedSlug || "intro")
|
||||||
);
|
);
|
||||||
if (!page) {
|
if (!page) {
|
||||||
notFound();
|
notFound();
|
||||||
@ -44,20 +44,17 @@ const DocsPage = async ({
|
|||||||
return (
|
return (
|
||||||
<main className="w-full flex flex-col">
|
<main className="w-full flex flex-col">
|
||||||
{/* Breadcrumb */}
|
{/* Breadcrumb */}
|
||||||
<Breadcrumb className="pt-4 select-none">
|
<Breadcrumb className="pt-4 pb-3 select-none">
|
||||||
<BreadcrumbList>
|
<BreadcrumbList>
|
||||||
{splitSlug.map(
|
{splitSlug
|
||||||
(part: string, index: number): ReactElement => {
|
.slice(0, -1)
|
||||||
const active: boolean =
|
.map((part: string, index: number): ReactElement => {
|
||||||
index === splitSlug.length - 1;
|
|
||||||
const slug: string = splitSlug
|
const slug: string = splitSlug
|
||||||
.slice(1, index + 1)
|
.slice(1, index + 2) // Include one more to account for the index shift
|
||||||
.join("/");
|
.join("/");
|
||||||
return (
|
return (
|
||||||
<div className="flex items-center" key={part}>
|
<div className="flex items-center" key={part}>
|
||||||
<BreadcrumbItem
|
<BreadcrumbItem>
|
||||||
className={cn(active && "text-primary")}
|
|
||||||
>
|
|
||||||
<BreadcrumbLink
|
<BreadcrumbLink
|
||||||
href={slug}
|
href={slug}
|
||||||
draggable={false}
|
draggable={false}
|
||||||
@ -65,13 +62,17 @@ const DocsPage = async ({
|
|||||||
{capitalizeWords(part)}
|
{capitalizeWords(part)}
|
||||||
</BreadcrumbLink>
|
</BreadcrumbLink>
|
||||||
</BreadcrumbItem>
|
</BreadcrumbItem>
|
||||||
{index < splitSlug.length - 1 && (
|
{index < splitSlug.length - 1 && ( // Adjusted to avoid separator after the last breadcrumb
|
||||||
<BreadcrumbSeparator className="pl-1.5" />
|
<BreadcrumbSeparator className="pl-1.5" />
|
||||||
)}
|
)}
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
}
|
})}
|
||||||
)}
|
<BreadcrumbItem className="text-primary">
|
||||||
|
<BreadcrumbLink href="#" draggable={false}>
|
||||||
|
{page.title}{" "}
|
||||||
|
</BreadcrumbLink>
|
||||||
|
</BreadcrumbItem>
|
||||||
</BreadcrumbList>
|
</BreadcrumbList>
|
||||||
</Breadcrumb>
|
</Breadcrumb>
|
||||||
|
|
||||||
|
@ -51,7 +51,7 @@ const RootLayout = ({
|
|||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
<TooltipProvider delayDuration={100}>
|
<TooltipProvider delayDuration={100}>
|
||||||
<div className="px-3 sm:px-7 max-w-screen-2xl min-h-screen mx-auto flex flex-col transition-all">
|
<div className="px-3 md:px-7 max-w-screen-2xl min-h-screen mx-auto flex flex-col transition-all">
|
||||||
<Navbar />
|
<Navbar />
|
||||||
<div className="pt-[4.5rem] w-full h-full flex flex-grow gap-5">
|
<div className="pt-[4.5rem] w-full h-full flex flex-grow gap-5">
|
||||||
<div className="relative hidden xs:flex">
|
<div className="relative hidden xs:flex">
|
||||||
|
@ -16,6 +16,11 @@ type DocsContentMetadata = MDXMetadata & {
|
|||||||
* The summary of this content.
|
* The summary of this content.
|
||||||
*/
|
*/
|
||||||
summary: string;
|
summary: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The order of this content.
|
||||||
|
*/
|
||||||
|
order: number;
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -13,7 +13,7 @@ const DocsFooter = ({
|
|||||||
}: {
|
}: {
|
||||||
pages: DocsContentMetadata[];
|
pages: DocsContentMetadata[];
|
||||||
}): ReactElement => {
|
}): ReactElement => {
|
||||||
const path: string = usePathname();
|
const path: string = decodeURIComponent(usePathname());
|
||||||
|
|
||||||
const current: number = pages.findIndex(
|
const current: number = pages.findIndex(
|
||||||
(page: DocsContentMetadata) =>
|
(page: DocsContentMetadata) =>
|
||||||
@ -46,15 +46,17 @@ const DocsFooter = ({
|
|||||||
pages[current]?.published
|
pages[current]?.published
|
||||||
).toLocaleString(DateTime.DATETIME_MED)}
|
).toLocaleString(DateTime.DATETIME_MED)}
|
||||||
>
|
>
|
||||||
<span className="text-sm opacity-75">
|
<span className="text-xs sm:text-sm opacity-75 transition-all transform-gpu">
|
||||||
Published {publicationDate}
|
Published {publicationDate}
|
||||||
</span>
|
</span>
|
||||||
</SimpleTooltip>
|
</SimpleTooltip>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{/* Pages */}
|
{/* Pages */}
|
||||||
<Separator className="my-4 bg-separator-gradient" />
|
{previous || next ? (
|
||||||
<div className="flex justify-between">
|
<Separator className="my-4 bg-separator-gradient" />
|
||||||
|
) : undefined}
|
||||||
|
<div className="flex justify-between text-xs sm:text-base">
|
||||||
{/* Previous */}
|
{/* Previous */}
|
||||||
{previous && (
|
{previous && (
|
||||||
<Link
|
<Link
|
||||||
|
32
src/components/image-viewer.tsx
Normal file
32
src/components/image-viewer.tsx
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
"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,12 +1,47 @@
|
|||||||
import { ReactElement, ReactNode } from "react";
|
import { isValidElement, ReactElement, ReactNode } from "react";
|
||||||
import { MDXRemote } from "remote-mdx/rsc";
|
import { MDXRemote } from "remote-mdx/rsc";
|
||||||
import { cn } from "@/lib/utils";
|
import { cn } from "@/lib/utils";
|
||||||
import remarkGfm from "remark-gfm";
|
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.
|
* The MDX components to style.
|
||||||
*/
|
*/
|
||||||
const components = {
|
const components = {
|
||||||
|
// Headings
|
||||||
h1: ({ children }: { children: ReactNode }): ReactElement => (
|
h1: ({ children }: { children: ReactNode }): ReactElement => (
|
||||||
<Heading as="h1" size={1} className="text-4xl">
|
<Heading as="h1" size={1} className="text-4xl">
|
||||||
{children}
|
{children}
|
||||||
@ -37,6 +72,8 @@ const components = {
|
|||||||
{children}
|
{children}
|
||||||
</Heading>
|
</Heading>
|
||||||
),
|
),
|
||||||
|
|
||||||
|
// Text
|
||||||
a: ({
|
a: ({
|
||||||
href,
|
href,
|
||||||
children,
|
children,
|
||||||
@ -44,19 +81,59 @@ const components = {
|
|||||||
href: string;
|
href: string;
|
||||||
children: ReactNode;
|
children: ReactNode;
|
||||||
}): ReactElement => (
|
}): ReactElement => (
|
||||||
<a
|
<Link
|
||||||
className="text-minecraft-green-4 cursor-pointer hover:opacity-85 transition-all transform-gpu"
|
className="text-primary cursor-pointer hover:opacity-75 transition-all transform-gpu"
|
||||||
href={href}
|
href={href}
|
||||||
|
draggable={false}
|
||||||
>
|
>
|
||||||
{children}
|
{children}
|
||||||
</a>
|
</Link>
|
||||||
),
|
),
|
||||||
p: ({ children }: { children: ReactNode }): ReactElement => (
|
p: ({ children }: { children: ReactNode }): ReactElement => (
|
||||||
<p className="leading-4 text-zinc-300/80">{children}</p>
|
<p className="leading-5 select-none">{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: ({ children }: { children: ReactNode }): ReactElement => (
|
||||||
<ul className="px-3 list-disc list-inside">{children}</ul>
|
<ul className="px-3 list-disc list-inside select-none">{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>
|
||||||
|
);
|
||||||
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -71,6 +148,8 @@ export const CustomMDX = (props: any): ReactElement => (
|
|||||||
components={{
|
components={{
|
||||||
...components,
|
...components,
|
||||||
...(props.components || {}),
|
...(props.components || {}),
|
||||||
|
Link,
|
||||||
|
Activity,
|
||||||
}}
|
}}
|
||||||
options={{
|
options={{
|
||||||
mdxOptions: {
|
mdxOptions: {
|
||||||
@ -83,6 +162,7 @@ export const CustomMDX = (props: any): ReactElement => (
|
|||||||
/**
|
/**
|
||||||
* A heading component.
|
* A heading component.
|
||||||
*
|
*
|
||||||
|
* @param as the type of heading
|
||||||
* @param className the class name of the heading
|
* @param className the class name of the heading
|
||||||
* @param size the size of the heading
|
* @param size the size of the heading
|
||||||
* @param children the children within the heading
|
* @param children the children within the heading
|
||||||
@ -104,7 +184,11 @@ const Heading = ({
|
|||||||
return (
|
return (
|
||||||
<Component
|
<Component
|
||||||
id={id}
|
id={id}
|
||||||
className={cn("pt-2.5 font-bold", size >= 2 && "pt-7", className)}
|
className={cn(
|
||||||
|
"py-3 font-bold select-none",
|
||||||
|
size >= 2 && "pt-7",
|
||||||
|
className
|
||||||
|
)}
|
||||||
>
|
>
|
||||||
{children}
|
{children}
|
||||||
</Component>
|
</Component>
|
||||||
@ -117,3 +201,16 @@ const slugify = (text: string): string =>
|
|||||||
.replace(/[^\w\s-]/g, "")
|
.replace(/[^\w\s-]/g, "")
|
||||||
.replace(/[\s_-]+/g, "-")
|
.replace(/[\s_-]+/g, "-")
|
||||||
.trim();
|
.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();
|
const pages: DocsContentMetadata[] = getDocsContent();
|
||||||
return (
|
return (
|
||||||
<nav className="fixed left-0 inset-x-0 bg-white/[0.007] backdrop-saturate-100 backdrop-blur-xl border-b z-50">
|
<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 sm:px-7 max-w-screen-2xl mx-auto py-4 flex justify-between items-center transition-all transform-gpu">
|
<div className="px-3 md:px-7 max-w-screen-2xl mx-auto py-4 flex justify-between items-center transition-all transform-gpu">
|
||||||
{/* Branding */}
|
{/* Branding */}
|
||||||
<Link
|
<Link
|
||||||
className="flex gap-1 items-end hover:opacity-75 transition-all transform-gpu select-none"
|
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 */}
|
{/* Footer */}
|
||||||
<div>
|
<div>
|
||||||
<Separator className="mt-1 mb-3.5" />
|
<Separator className="mt-1 mb-3.5 bg-separator-gradient" />
|
||||||
<Footer page={page} />
|
<Footer page={page} />
|
||||||
</div>
|
</div>
|
||||||
</motion.div>
|
</motion.div>
|
||||||
@ -148,7 +148,7 @@ const Footer = ({ page }: { page: DocsContentMetadata }): ReactElement => {
|
|||||||
{/* Edit on Git */}
|
{/* Edit on Git */}
|
||||||
<Link
|
<Link
|
||||||
className="flex gap-1.5 items-center text-xs hover:opacity-75 transition-all transform-gpu group"
|
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}.md`}
|
href={`https://git.rainnny.club/PulseApp/docs/src/branch/master/docs/${page.slug}${page.extension}`}
|
||||||
target="_blank"
|
target="_blank"
|
||||||
draggable={false}
|
draggable={false}
|
||||||
>
|
>
|
||||||
|
@ -20,11 +20,11 @@ const SidebarLinks = ({
|
|||||||
}): ReactElement => {
|
}): ReactElement => {
|
||||||
const tree = useMemo(() => buildTree(pages), [pages]);
|
const tree = useMemo(() => buildTree(pages), [pages]);
|
||||||
return (
|
return (
|
||||||
<>
|
<div className="flex flex-col gap-1">
|
||||||
{Object.values(tree).map((node: TreeNode) => (
|
{Object.values(tree).map((node: TreeNode) => (
|
||||||
<CategoryItem key={node.slug} node={node} />
|
<CategoryItem key={node.slug} node={node} />
|
||||||
))}
|
))}
|
||||||
</>
|
</div>
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -44,14 +44,14 @@ const CategoryItem = ({
|
|||||||
depth?: number;
|
depth?: number;
|
||||||
isLast?: boolean;
|
isLast?: boolean;
|
||||||
}) => {
|
}) => {
|
||||||
const path = usePathname();
|
const path = decodeURIComponent(usePathname());
|
||||||
const active =
|
const active =
|
||||||
(path === "/" && node.slug === "intro") || path === `/${node.slug}`;
|
(path === "/" && node.slug === "intro") || path === `/${node.slug}`;
|
||||||
const [isOpen, setIsOpen] = useState(true);
|
const [isOpen, setIsOpen] = useState(true);
|
||||||
const hasChildren = Object.keys(node.children).length > 0;
|
const hasChildren = Object.keys(node.children).length > 0;
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className={cn(`relative select-none`, depth > 0 && "ml-2.5")}>
|
<div className={cn(`relative select-none`, depth > 0 && "ml-4")}>
|
||||||
{/* Indentation */}
|
{/* Indentation */}
|
||||||
{depth > 0 && (
|
{depth > 0 && (
|
||||||
<div
|
<div
|
||||||
@ -72,7 +72,7 @@ const CategoryItem = ({
|
|||||||
>
|
>
|
||||||
<Button
|
<Button
|
||||||
className={cn(
|
className={cn(
|
||||||
`relative w-full px-1.5 h-8 text-base justify-between hover:bg-accent/20`,
|
`relative w-full px-1.5 h-8 lg:text-base justify-between hover:bg-accent/20`,
|
||||||
depth > 0 && "pl-4",
|
depth > 0 && "pl-4",
|
||||||
active &&
|
active &&
|
||||||
"text-primary/95 font-bold hover:text-primary"
|
"text-primary/95 font-bold hover:text-primary"
|
||||||
@ -83,7 +83,7 @@ const CategoryItem = ({
|
|||||||
{hasChildren && (
|
{hasChildren && (
|
||||||
<motion.div
|
<motion.div
|
||||||
initial={false}
|
initial={false}
|
||||||
animate={{ rotate: isOpen ? 90 : 180 }}
|
animate={{ rotate: isOpen ? 90 : 0 }}
|
||||||
transition={{ duration: 0.2 }}
|
transition={{ duration: 0.2 }}
|
||||||
>
|
>
|
||||||
<ChevronRight className="w-4 h-4" />
|
<ChevronRight className="w-4 h-4" />
|
||||||
|
@ -6,6 +6,8 @@ import { UseThemeProps } from "next-themes/dist/types";
|
|||||||
import { Monitor, MoonStar, Sun } from "lucide-react";
|
import { Monitor, MoonStar, Sun } from "lucide-react";
|
||||||
import { cn } from "@/lib/utils";
|
import { cn } from "@/lib/utils";
|
||||||
import { Button } from "@/components/ui/button";
|
import { Button } from "@/components/ui/button";
|
||||||
|
import SimpleTooltip from "@/components/simple-tooltip";
|
||||||
|
import { capitalizeWords } from "@/lib/string";
|
||||||
|
|
||||||
const themes = {
|
const themes = {
|
||||||
dark: <MoonStar className="w-4 h-4" />,
|
dark: <MoonStar className="w-4 h-4" />,
|
||||||
@ -31,18 +33,22 @@ const ThemeSwitcher = (): ReactElement => {
|
|||||||
{Object.entries(themes).map(([theme, icon]) => {
|
{Object.entries(themes).map(([theme, icon]) => {
|
||||||
const active: boolean = mounted && theme === activeTheme;
|
const active: boolean = mounted && theme === activeTheme;
|
||||||
return (
|
return (
|
||||||
<Button
|
<SimpleTooltip
|
||||||
key={theme}
|
key={theme}
|
||||||
className={cn(
|
content={`${capitalizeWords(theme)} Theme`}
|
||||||
"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
|
||||||
</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>
|
||||||
);
|
);
|
||||||
})}
|
})}
|
||||||
</div>
|
</div>
|
||||||
|
@ -21,7 +21,11 @@ export const getDocsContent = (): DocsContentMetadata[] => {
|
|||||||
for (const directory of getRecursiveDirectories(DOCS_DIR)) {
|
for (const directory of getRecursiveDirectories(DOCS_DIR)) {
|
||||||
content.push(...getMetadata<DocsContentMetadata>(DOCS_DIR, directory));
|
content.push(...getMetadata<DocsContentMetadata>(DOCS_DIR, directory));
|
||||||
}
|
}
|
||||||
return content;
|
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;
|
||||||
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
Reference in New Issue
Block a user