@adaptive-sm/astro-ui 0.2.1 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +7 -7
- package/lib/badge/Badge.astro +27 -0
- package/lib/badge/classesBadge.ts +67 -0
- package/lib/button/Button.astro +17 -27
- package/lib/button/buttonCva.ts +4 -2
- package/lib/button/buttonIconCva.ts +2 -2
- package/lib/button/classesButtonClickAnimation.ts +1 -1
- package/lib/button/classesButtonClickAnimationPush.ts +1 -1
- package/lib/button/classesButtonClickAnimationSquish.ts +1 -1
- package/lib/card/CardWrapper.astro +6 -5
- package/lib/card/classesBorderWrapper.ts +1 -0
- package/lib/card/classesCardWrapper.ts +21 -9
- package/lib/card/classesShadow.ts +5 -0
- package/lib/details/Details.astro +13 -8
- package/lib/dev/TailwindIndicator.astro +2 -2
- package/lib/form/Fieldset.astro +8 -5
- package/lib/generate_demo_list/DemoList.astro +3 -3
- package/lib/generate_demo_list/generateDemoList.ts +2 -2
- package/lib/generate_image_list/generateImageList.ts +3 -3
- package/lib/grid/FeatureGridSection.astro +28 -35
- package/lib/grid/classesGridCols.ts +27 -2
- package/lib/header/PageHeader.astro +25 -0
- package/lib/header/SectionHeader.astro +37 -0
- package/lib/icon/Icon.astro +26 -0
- package/lib/icons/iconApple.ts +1 -0
- package/lib/icons/iconGithub.ts +4 -0
- package/lib/icons/iconGoogle.ts +4 -0
- package/lib/icons/iconGooglePlay.ts +2 -0
- package/lib/icons/iconLinkedin.ts +2 -0
- package/lib/icons/iconNpm.ts +2 -0
- package/lib/icons/iconTelegram.ts +2 -0
- package/lib/icons/iconTrello.ts +2 -0
- package/lib/icons/iconXcom.ts +1 -0
- package/lib/img/Img.astro +10 -5
- package/lib/img/TypedImg.astro +11 -10
- package/lib/img/TypedImgB2.astro +25 -0
- package/lib/layouts/MarkdownPageWrapper.astro +19 -0
- package/lib/layouts/MinimalLayout.astro +23 -16
- package/lib/layouts/parts/ThemeToggle.astro +9 -9
- package/lib/link/LinkButton.astro +18 -19
- package/lib/link/LinkText.astro +10 -7
- package/lib/link/classesTextLink.ts +1 -1
- package/lib/list/BlackBulletPoint.astro +1 -1
- package/lib/list/BlackBulletPoints.astro +7 -7
- package/lib/list/CheckPoint.astro +3 -3
- package/lib/list/CheckPoints.astro +3 -3
- package/lib/list/NumberedList.astro +1 -1
- package/lib/list/Ps.astro +8 -5
- package/lib/list/TextOrLink.astro +3 -9
- package/lib/md/MarkdownDiv.astro +18 -0
- package/lib/modal/Modal.astro +28 -12
- package/lib/modal/ModalButton.astro +35 -12
- package/lib/page/PageCentered.astro +5 -3
- package/lib/page/PageCenteredCard.astro +7 -5
- package/lib/page/classesPageCentered.ts +1 -1
- package/lib/popover/Popover1.astro +4 -4
- package/lib/select/Select.astro +14 -10
- package/lib/table/Table.astro +2 -2
- package/lib/table/TableD.astro +2 -2
- package/lib/table/TableM.astro +2 -2
- package/lib/table/TableMEntry.astro +2 -2
- package/lib/table/tableVisibilityClasses.ts +3 -3
- package/lib/utils/HasId.ts +3 -0
- package/lib/utils/HasSubtitle.ts +4 -0
- package/lib/utils/HasTitle.ts +4 -0
- package/lib/utils/MayHaveButtonVariant.ts +5 -0
- package/lib/utils/MayHaveClass.ts +3 -0
- package/lib/utils/MayHaveIcon.ts +4 -0
- package/lib/utils/MayHaveId.ts +3 -0
- package/lib/utils/MayHaveInnerClass.ts +3 -0
- package/lib/utils/MayHaveSubtitle.ts +4 -0
- package/lib/utils/MayHaveTitle.ts +4 -0
- package/package.json +13 -12
- package/lib/icon/Icon1.astro +0 -21
- package/lib/layouts/MarkdownWrapper.astro +0 -17
- package/lib/utils/bun/BunCmd.ts +0 -7
- package/lib/utils/bun/cryAndTryAgainLater.ts +0 -6
- package/lib/utils/bun/logBunCmd.ts +0 -1
- package/lib/utils/bun/runCmdAsync.ts +0 -44
- package/lib/utils/bun/runCmdLocally.ts +0 -13
- package/lib/utils/obj/objectKeys.ts +0 -21
- package/lib/utils/ran/generateId12.ts +0 -7
- package/lib/utils/ran/generateId3.ts +0 -7
- package/lib/utils/ran/generateId4.ts +0 -7
- package/lib/utils/ran/generateId5.ts +0 -7
- package/lib/utils/ran/generateId6.ts +0 -7
- package/lib/utils/ran/generateId7.ts +0 -7
- package/lib/utils/ran/generateReadableId.ts +0 -35
- package/lib/utils/ran/urlAlphabet32.ts +0 -8
- /package/lib/{layouts/parts → md}/markdown.css +0 -0
- /package/lib/utils/{ui/classArr.ts → classArr.ts} +0 -0
- /package/lib/utils/{ui/classMerge.ts → classMerge.ts} +0 -0
- /package/lib/utils/{ui/isDevEnv.ts → isDevEnv.ts} +0 -0
- /package/lib/utils/{ui/tailwindBreakpoint.ts → tailwindBreakpoint.ts} +0 -0
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
---
|
|
2
|
+
import type { HTMLAttributes } from "astro/types"
|
|
3
|
+
import { classMerge } from "~ui/utils/classMerge"
|
|
4
|
+
|
|
5
|
+
interface Props {
|
|
6
|
+
title: string
|
|
7
|
+
subtitle?: string
|
|
8
|
+
titleClass?: string
|
|
9
|
+
subtitleClass?: string
|
|
10
|
+
innerClass?: string
|
|
11
|
+
class?: string
|
|
12
|
+
restProps?: HTMLAttributes<"header">
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
const p = Astro.props
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
<header class={p.class}>
|
|
19
|
+
<div class={classMerge("flex flex-wrap justify-between items-center gap-4", p.innerClass)} {...p.restProps}>
|
|
20
|
+
<h1 class={classMerge("text-2xl font-semibold", p.titleClass)}>{p.title}</h1>
|
|
21
|
+
<slot />
|
|
22
|
+
</div>
|
|
23
|
+
{p.subtitle && <p class={classMerge("text-lg", p.subtitleClass)}>{p.subtitle}</p>}
|
|
24
|
+
<slot name="subtitle" />
|
|
25
|
+
</header>
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
---
|
|
2
|
+
import type { HTMLAttributes } from "astro/types"
|
|
3
|
+
import { buttonVariant } from "~ui/button/buttonCva"
|
|
4
|
+
import LinkButton from "~ui/link/LinkButton.astro"
|
|
5
|
+
import type { MayHaveClass } from "~ui/utils/MayHaveClass"
|
|
6
|
+
import { classMerge } from "~ui/utils/classMerge"
|
|
7
|
+
|
|
8
|
+
interface Props extends MayHaveClass {
|
|
9
|
+
icon: string
|
|
10
|
+
href?: string
|
|
11
|
+
title: string
|
|
12
|
+
titleClass?: string
|
|
13
|
+
subtitle?: string
|
|
14
|
+
subtitleClass?: string
|
|
15
|
+
innerClass?: string
|
|
16
|
+
class?: string
|
|
17
|
+
restProps?: HTMLAttributes<"header">
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
const p = Astro.props
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
<div class={classMerge("flex flex-wrap items-center justify-between gap-4", p.class)} {...p.restProps}>
|
|
24
|
+
<h2 class={classMerge("text-2xl font-semibold", p.titleClass)}>
|
|
25
|
+
{
|
|
26
|
+
p.href ? (
|
|
27
|
+
<LinkButton href={p.href} icon={p.icon} variant={buttonVariant.link} class="pl-0">
|
|
28
|
+
{p.title}
|
|
29
|
+
</LinkButton>
|
|
30
|
+
) : (
|
|
31
|
+
p.title
|
|
32
|
+
)
|
|
33
|
+
}
|
|
34
|
+
</h2>
|
|
35
|
+
{p.subtitle && <p class={classMerge("text-lg", p.subtitleClass)}>{p.subtitle}</p>}
|
|
36
|
+
<slot />
|
|
37
|
+
</div>
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
---
|
|
2
|
+
import type { HTMLAttributes } from "astro/types"
|
|
3
|
+
import { classMerge } from "~ui/utils/classMerge"
|
|
4
|
+
|
|
5
|
+
interface Props {
|
|
6
|
+
id?: string
|
|
7
|
+
pathId?: string
|
|
8
|
+
path: string
|
|
9
|
+
class?: string
|
|
10
|
+
title?: string
|
|
11
|
+
ariaHidden?: boolean
|
|
12
|
+
restProps?: HTMLAttributes<"svg">
|
|
13
|
+
}
|
|
14
|
+
const p = Astro.props
|
|
15
|
+
const ariaHidden = p.ariaHidden ?? !p.title
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
<svg
|
|
19
|
+
id={p.id}
|
|
20
|
+
viewBox={"0 0 24 24"}
|
|
21
|
+
aria-hidden={ariaHidden}
|
|
22
|
+
class={classMerge("size-6 flex-shrink-0 align-middle dark:fill-white", p.class)}
|
|
23
|
+
{...p.restProps}
|
|
24
|
+
>
|
|
25
|
+
<path id={p.pathId} d={p.path}></path>
|
|
26
|
+
</svg>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export const iconApple = "M 12.1267 7.74663 C 11.3367 7.74663 10.1142 6.8483 8.82669 6.87997 C 7.1267 6.90247 5.56838 7.8658 4.69255 9.39162 C 2.9284 12.4541 4.23756 16.9774 5.95838 19.4666 C 6.80254 20.6782 7.79837 22.0415 9.11836 21.999 C 10.385 21.9449 10.86 21.1765 12.3975 21.1765 C 13.9233 21.1765 14.3558 21.999 15.6975 21.9665 C 17.0616 21.9449 17.9275 20.7332 18.7608 19.5099 C 19.7241 18.1032 20.1241 16.7391 20.1458 16.6641 C 20.1133 16.6532 17.4941 15.6466 17.4625 12.6166 C 17.4408 10.0833 19.5291 8.87162 19.6266 8.81746 C 18.4358 7.0758 16.6075 6.8808 15.9683 6.83747 C 14.3017 6.70747 12.9058 7.7458 12.1267 7.7458 Z M 14.9417 5.19165 C 15.6441 4.34832 16.1083 3.16916 15.9791 2 C 14.9733 2.04333 13.7608 2.67083 13.0358 3.51499 C 12.3858 4.26165 11.8242 5.46331 11.975 6.60997 C 13.09 6.69664 14.2375 6.03664 14.9408 5.19248"
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* https://authjs.dev/img/providers/github.svg
|
|
3
|
+
*/
|
|
4
|
+
export const iconGithub = "M12,2A10,10 0 0,0 2,12C2,16.42 4.87,20.17 8.84,21.5C9.34,21.58 9.5,21.27 9.5,21C9.5,20.77 9.5,20.14 9.5,19.31C6.73,19.91 6.14,17.97 6.14,17.97C5.68,16.81 5.03,16.5 5.03,16.5C4.12,15.88 5.1,15.9 5.1,15.9C6.1,15.97 6.63,16.93 6.63,16.93C7.5,18.45 8.97,18 9.54,17.76C9.63,17.11 9.89,16.67 10.17,16.42C7.95,16.17 5.62,15.31 5.62,11.5C5.62,10.39 6,9.5 6.65,8.79C6.55,8.54 6.2,7.5 6.75,6.15C6.75,6.15 7.59,5.88 9.5,7.17C10.29,6.95 11.15,6.84 12,6.84C12.85,6.84 13.71,6.95 14.5,7.17C16.41,5.88 17.25,6.15 17.25,6.15C17.8,7.5 17.45,8.54 17.35,8.79C18,9.5 18.38,10.39 18.38,11.5C18.38,15.32 16.04,16.16 13.81,16.41C14.17,16.72 14.5,17.33 14.5,18.26C14.5,19.6 14.5,20.68 14.5,21C14.5,21.27 14.66,21.59 15.17,21.5C19.14,20.16 22,16.42 22,12A10,10 0 0,0 12,2Z"
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* https://authjs.dev/img/providers/google.svg
|
|
3
|
+
*/
|
|
4
|
+
export const iconGoogle = "M21.35,11.1H12.18V13.83H18.69C18.36,17.64 15.19,19.27 12.19,19.27C8.36,19.27 5,16.25 5,12C5,7.9 8.2,4.73 12.2,4.73C15.29,4.73 17.1,6.7 17.1,6.7L19,4.72C19,4.72 16.56,2 12.1,2C6.42,2 2.03,6.8 2.03,12C2.03,17.05 6.16,22 12.25,22C17.6,22 21.5,18.33 21.5,12.91C21.5,11.76 21.35,11.1 21.35,11.1V11.1Z"
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export const iconGooglePlay =
|
|
2
|
+
"m20.35 13.08-3.266 1.848-2.929-2.911 2.953-2.934 3.242 1.835c.3896.2204.6305.6333.6305 1.081s-.2409.8605-.6305 1.081zm-17.23-10.31c-.06184.1501-.09356.311-.09334.4733v17.51c0 .1809.0375.3492.1033.5001l9.296-9.239zm10.17 8.388 2.715-2.698-11.13-6.297c-.2385-.137-.5163-.1896-.7883-.1492zm0 1.723-9.167 9.111c.2483.03.51-.0133.755-.1525l11.1-6.283z"
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export const iconLinkedin =
|
|
2
|
+
"m3 4.29c0-.712.592-1.29 1.32-1.29h15.4c.73 0 1.32.577 1.32 1.29v15.4c0 .712-.592 1.29-1.32 1.29h-15.4c-.73 0-1.32-.577-1.32-1.29zm5.56 13.8v-8.13h-2.7v8.13zm-1.35-9.24c.942 0 1.53-.623 1.53-1.4-.0169-.798-.585-1.4-1.51-1.4-.925 0-1.53.608-1.53 1.4 0 .781.586 1.4 1.49 1.4zm5.52 9.24v-4.54c0-.243.018-.486.09-.659.195-.485.639-.988 1.39-.988.978 0 1.37.745 1.37 1.84v4.35h2.7v-4.66c0-2.5-1.33-3.66-3.11-3.66-1.43 0-2.08.788-2.44 1.34v.0281h-.018l.018-.0281v-1.15h-2.7c.0337.763 0 8.13 0 8.13z"
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export const iconTelegram =
|
|
2
|
+
"M11.944 0A12 12 0 0 0 0 12a12 12 0 0 0 12 12 12 12 0 0 0 12-12A12 12 0 0 0 12 0a12 12 0 0 0-.056 0zm4.962 7.224c.1-.002.321.023.465.14a.506.506 0 0 1 .171.325c.016.093.036.306.02.472-.18 1.898-.962 6.502-1.36 8.627-.168.9-.499 1.201-.82 1.23-.696.065-1.225-.46-1.9-.902-1.056-.693-1.653-1.124-2.678-1.8-1.185-.78-.417-1.21.258-1.91.177-.184 3.247-2.977 3.307-3.23.007-.032.014-.15-.056-.212s-.174-.041-.249-.024c-.106.024-1.793 1.14-5.061 3.345-.48.33-.913.49-1.302.48-.428-.008-1.252-.241-1.865-.44-.752-.245-1.349-.374-1.297-.789.027-.216.325-.437.893-.663 3.498-1.524 5.83-2.529 6.998-3.014 3.332-1.386 4.025-1.627 4.476-1.635z"
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export const iconTrello =
|
|
2
|
+
"m18.9 3h-13.7c-1.18.00289-2.14.959-2.14 2.14v13.7c.00289 1.18.959 2.14 2.14 2.14h13.7c1.18-.0029 2.14-.959 2.14-2.14v-13.7c-.0029-1.18-.959-2.14-2.14-2.14zm-8.11 13c0 .19-.0753.371-.209.506-.134.134-.316.209-.505.209h-3c-.395 0-.715-.32-.716-.715v-8.93c0-.19.0754-.372.21-.506s.316-.209.506-.209h3c.395.00041.714.32.715.715zm6.92-4.1c7e-4.189-.0746.371-.209.504s-.316.208-.506.206h-3c-.189.0011-.371-.0732-.505-.206-.134-.133-.21-.315-.21-.504v-4.83c1e-4-.395.32-.715.715-.715h3c.395.00041.714.32.715.715z"
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export const iconXcom = "m13.9 10.4 7.45-8.65h-1.76l-6.46 7.51-5.16-7.51h-5.96l7.81 11.4-7.81 9.08h1.76l6.83-7.94 5.45 7.94h5.96zm-2.42 2.81-7.09-10.1h2.71l12.5 17.8h-2.71z"
|
package/lib/img/Img.astro
CHANGED
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
---
|
|
2
|
+
import type { HTMLAttributes } from "astro/types"
|
|
2
3
|
import { classesImgZoomInOnHover10 } from "./classesImgZoomInOnHover10"
|
|
3
|
-
import { classMerge } from "
|
|
4
|
+
import { classMerge } from "~ui/utils/classMerge"
|
|
4
5
|
|
|
5
6
|
interface Props {
|
|
7
|
+
id?: string
|
|
6
8
|
alt: string
|
|
7
9
|
src: string
|
|
8
10
|
zoomIn?: boolean
|
|
@@ -10,18 +12,21 @@ interface Props {
|
|
|
10
12
|
size?: number
|
|
11
13
|
width?: number | null | undefined
|
|
12
14
|
height?: number | null | undefined
|
|
13
|
-
loadingLazy?:boolean
|
|
14
|
-
decodeAsync?:boolean
|
|
15
|
+
loadingLazy?: boolean
|
|
16
|
+
decodeAsync?: boolean
|
|
17
|
+
restProps?: HTMLAttributes<"img">
|
|
15
18
|
}
|
|
16
19
|
const p = Astro.props
|
|
17
20
|
---
|
|
18
21
|
|
|
19
22
|
<img
|
|
23
|
+
id={p.id}
|
|
20
24
|
src={p.src}
|
|
21
25
|
alt={p.alt}
|
|
22
26
|
class={classMerge(p.zoomIn && classesImgZoomInOnHover10, p.class)}
|
|
23
|
-
loading={p.loadingLazy ?? true ? "lazy" : undefined}
|
|
24
|
-
decoding={p.decodeAsync ?? true ? "async" : undefined}
|
|
27
|
+
loading={(p.loadingLazy ?? true) ? "lazy" : undefined}
|
|
28
|
+
decoding={(p.decodeAsync ?? true) ? "async" : undefined}
|
|
25
29
|
width={p.size ?? p.width}
|
|
26
30
|
height={p.size ?? p.height}
|
|
31
|
+
{...p.restProps}
|
|
27
32
|
/>
|
package/lib/img/TypedImg.astro
CHANGED
|
@@ -1,29 +1,30 @@
|
|
|
1
1
|
---
|
|
2
|
-
import {
|
|
2
|
+
import type { HTMLAttributes } from "astro/types"
|
|
3
|
+
import { classInvertBlack } from "~ui/img/classInvertBlack"
|
|
4
|
+
import { classArr } from "~ui/utils/classArr"
|
|
3
5
|
import type { ImageType } from "./ImageType"
|
|
4
6
|
import Img from "./Img.astro"
|
|
5
|
-
import { classInvertBlack } from "~/img/classInvertBlack"
|
|
6
7
|
|
|
7
8
|
interface Props {
|
|
9
|
+
id?: string
|
|
8
10
|
img: ImageType
|
|
9
11
|
zoomIn?: boolean
|
|
10
12
|
invertColorsInDarkMode?: boolean
|
|
11
13
|
class?: string
|
|
14
|
+
srcPrefix?: string
|
|
15
|
+
restProps?: HTMLAttributes<"img">
|
|
12
16
|
}
|
|
13
17
|
const p = Astro.props
|
|
14
18
|
const isSvg = p.img.path.endsWith(".svg")
|
|
15
|
-
|
|
16
|
-
const invert = p.invertColorsInDarkMode
|
|
17
|
-
|
|
18
|
-
function imageUrl(p: string) {
|
|
19
|
-
return "/media-b2/" + p
|
|
20
|
-
}
|
|
19
|
+
const imageUrl = (p.srcPrefix ? p.srcPrefix : "") + p.img.path
|
|
21
20
|
---
|
|
22
21
|
|
|
23
22
|
<Img
|
|
24
|
-
|
|
23
|
+
id={p.id}
|
|
24
|
+
src={imageUrl}
|
|
25
25
|
alt={p.img.alt}
|
|
26
|
-
class={classArr(
|
|
26
|
+
class={classArr(p.invertColorsInDarkMode ? classInvertBlack : "", p.class)}
|
|
27
27
|
width={isSvg ? null : p.img.width}
|
|
28
28
|
height={isSvg ? null : p.img.height}
|
|
29
|
+
restProps={p.restProps}
|
|
29
30
|
/>
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
---
|
|
2
|
+
import type { HTMLAttributes } from "astro/types"
|
|
3
|
+
import type { ImageType } from "./ImageType"
|
|
4
|
+
import TypedImg from "~ui/img/TypedImg.astro"
|
|
5
|
+
|
|
6
|
+
interface Props {
|
|
7
|
+
id?: string
|
|
8
|
+
img: ImageType
|
|
9
|
+
zoomIn?: boolean
|
|
10
|
+
invertColorsInDarkMode?: boolean
|
|
11
|
+
class?: string
|
|
12
|
+
restProps?: HTMLAttributes<"img">
|
|
13
|
+
}
|
|
14
|
+
const p = Astro.props
|
|
15
|
+
---
|
|
16
|
+
|
|
17
|
+
<TypedImg
|
|
18
|
+
id={p.id}
|
|
19
|
+
img={p.img}
|
|
20
|
+
srcPrefix="/media-b2/"
|
|
21
|
+
zoomIn={p.zoomIn}
|
|
22
|
+
invertColorsInDarkMode={p.invertColorsInDarkMode}
|
|
23
|
+
class={p.class}
|
|
24
|
+
restProps={p.restProps}
|
|
25
|
+
/>
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
---
|
|
2
|
+
import { classMerge } from "~ui/utils/classMerge"
|
|
3
|
+
import { classesCardWrapperPage } from "~ui/card/classesCardWrapper"
|
|
4
|
+
import MarkdownDiv from "~ui/md/MarkdownDiv.astro"
|
|
5
|
+
import PageCentered from "~ui/page/PageCentered.astro"
|
|
6
|
+
|
|
7
|
+
interface Props {
|
|
8
|
+
class?: string
|
|
9
|
+
innerClass?: string
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
const p = Astro.props
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
<PageCentered class={classMerge("max-w-5xl my-12", p.class)}>
|
|
16
|
+
<MarkdownDiv class={classMerge(classesCardWrapperPage, p.innerClass)}>
|
|
17
|
+
<slot />
|
|
18
|
+
</MarkdownDiv>
|
|
19
|
+
</PageCentered>
|
|
@@ -1,20 +1,23 @@
|
|
|
1
1
|
---
|
|
2
|
-
import
|
|
3
|
-
|
|
4
|
-
import
|
|
2
|
+
import TailwindIndicator from "~ui/dev/TailwindIndicator.astro"
|
|
3
|
+
|
|
4
|
+
import { classMerge } from "~ui/utils/classMerge"
|
|
5
|
+
import { classArr } from "../utils/classArr"
|
|
5
6
|
|
|
6
7
|
export interface Props {
|
|
8
|
+
lang?: string
|
|
7
9
|
title: string
|
|
8
10
|
description?: string
|
|
9
11
|
meta?: Record<string, string>
|
|
10
12
|
class?: string
|
|
13
|
+
bodyClass?: string
|
|
11
14
|
}
|
|
12
15
|
|
|
13
|
-
const
|
|
16
|
+
const p = Astro.props
|
|
14
17
|
---
|
|
15
18
|
|
|
16
19
|
<!doctype html>
|
|
17
|
-
<html lang="en">
|
|
20
|
+
<html lang={p.lang ?? "en"}>
|
|
18
21
|
<head>
|
|
19
22
|
<!-- Base -->
|
|
20
23
|
<meta charset="UTF-8" />
|
|
@@ -22,8 +25,8 @@ const props = Astro.props
|
|
|
22
25
|
<meta name="generator" content={Astro.generator} />
|
|
23
26
|
|
|
24
27
|
<!-- Site -->
|
|
25
|
-
<title>{
|
|
26
|
-
{
|
|
28
|
+
<title>{p.title}</title>
|
|
29
|
+
{p.description && <meta name="description" content={p.description} />}
|
|
27
30
|
|
|
28
31
|
<link rel="icon" type="image/svg+xml" href="/favicon.ico" />
|
|
29
32
|
|
|
@@ -38,25 +41,29 @@ const props = Astro.props
|
|
|
38
41
|
<meta name="googlebot" content="index, follow" />
|
|
39
42
|
|
|
40
43
|
{
|
|
41
|
-
|
|
44
|
+
p.meta && (
|
|
42
45
|
<Fragment>
|
|
43
|
-
{
|
|
44
|
-
<meta property={k} content={
|
|
46
|
+
{Object.entries(p.meta).map(([k, v]) => (
|
|
47
|
+
<meta property={k} content={v} />
|
|
45
48
|
))}
|
|
46
49
|
</Fragment>
|
|
47
50
|
)
|
|
48
51
|
}
|
|
52
|
+
<slot name="head" />
|
|
49
53
|
</head>
|
|
50
|
-
<body
|
|
54
|
+
<body
|
|
55
|
+
class={classMerge(
|
|
56
|
+
"min-h-dvh w-full", // full screen
|
|
57
|
+
"font-sans antialiased text-foreground", // text
|
|
58
|
+
p.bodyClass,
|
|
59
|
+
)}
|
|
60
|
+
>
|
|
51
61
|
<slot name="navbar" />
|
|
52
62
|
<main
|
|
53
63
|
id="main"
|
|
54
64
|
class={classArr(
|
|
55
|
-
"relative min-h-dvh",
|
|
56
|
-
|
|
57
|
-
"flex flex-col items-center",
|
|
58
|
-
props.class,
|
|
59
|
-
//
|
|
65
|
+
"relative min-h-dvh w-full", // full screen
|
|
66
|
+
p.class,
|
|
60
67
|
)}
|
|
61
68
|
>
|
|
62
69
|
<slot />
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
---
|
|
2
2
|
import { mdiMoonWaxingCrescent, mdiWhiteBalanceSunny } from "@mdi/js"
|
|
3
|
-
import { buttonVariant, type ButtonVariant } from "
|
|
4
|
-
import Button from "
|
|
5
|
-
import
|
|
6
|
-
import { classArr } from "
|
|
7
|
-
import { astroElementId } from "
|
|
3
|
+
import { buttonVariant, type ButtonVariant } from "~ui/button/buttonCva"
|
|
4
|
+
import Button from "~ui/button/Button.astro"
|
|
5
|
+
import Icon from "~ui/icon/Icon.astro"
|
|
6
|
+
import { classArr } from "~ui/utils/classArr"
|
|
7
|
+
import { astroElementId } from "~ui/layouts/parts/astroElementId"
|
|
8
8
|
|
|
9
9
|
/*
|
|
10
10
|
* have to use "is:inline" script to run/apply theme before page render -> white flash on page reload otherwise
|
|
@@ -40,10 +40,10 @@ const textDark = p.textDark ?? "Dark"
|
|
|
40
40
|
class={classArr(p.class)}
|
|
41
41
|
contentClass={classArr("flex flex-row gap-1")}
|
|
42
42
|
>
|
|
43
|
-
<
|
|
44
|
-
<
|
|
45
|
-
<
|
|
46
|
-
<
|
|
43
|
+
<Icon path={mdiWhiteBalanceSunny} class={classArr("size-6 dark:hidden mr-2", p.iconClass, p.iconLightClass)} />
|
|
44
|
+
<Icon path={mdiMoonWaxingCrescent} class={classArr("hidden size-6 dark:block mr-2", p.iconClass, p.iconDarkClass)} />
|
|
45
|
+
<span id="theme-toggle-text-light" class={classArr("dark:hidden", p.textClass, p.textLightClass)}>{textLight}</span>
|
|
46
|
+
<span id="theme-toggle-text-dark" class={classArr("hidden dark:block", p.textClass, p.textDarkClass)}>{textDark}</span>
|
|
47
47
|
</Button>
|
|
48
48
|
|
|
49
49
|
<script is:inline>
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
---
|
|
2
|
-
import
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import
|
|
2
|
+
import type { HTMLAttributes } from "astro/types"
|
|
3
|
+
import { buttonCva2, buttonVariant, type ButtonSize, type ButtonVariant } from "~ui/button/buttonCva"
|
|
4
|
+
import { buttonIconCva } from "~ui/button/buttonIconCva"
|
|
5
|
+
import { classesButtonClickAnimation } from "~ui/button/classesButtonClickAnimation"
|
|
6
|
+
import Icon from "~ui/icon/Icon.astro"
|
|
6
7
|
|
|
7
8
|
interface Props {
|
|
8
9
|
title?: string
|
|
@@ -16,32 +17,30 @@ interface Props {
|
|
|
16
17
|
class?: string
|
|
17
18
|
id?: string
|
|
18
19
|
clickAnimation?: boolean
|
|
20
|
+
restProps?: HTMLAttributes<"a">
|
|
19
21
|
}
|
|
20
|
-
const
|
|
22
|
+
const p = Astro.props
|
|
21
23
|
const hasChildren = Astro.slots.has("default")
|
|
22
24
|
const classes = buttonCva2(
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
25
|
+
p.variant ?? buttonVariant.link,
|
|
26
|
+
p.size,
|
|
27
|
+
p.clickAnimation ?? classesButtonClickAnimation,
|
|
28
|
+
p.class,
|
|
27
29
|
)
|
|
28
30
|
---
|
|
29
31
|
|
|
30
|
-
<a href={
|
|
32
|
+
<a href={p.href} class={classes} target={p.newTab ? "_blank" : undefined} id={p.id} title={p.title} {...p.restProps}>
|
|
31
33
|
{
|
|
32
|
-
|
|
33
|
-
<
|
|
34
|
-
path={props.icon}
|
|
35
|
-
class={buttonIconCva(props.variant ?? "link", (props.title || hasChildren) && "mr-2", props.iconClass)}
|
|
36
|
-
/>
|
|
34
|
+
p.icon && (
|
|
35
|
+
<Icon path={p.icon} class={buttonIconCva(p.variant ?? "link", (p.title || hasChildren) && "mr-2", p.iconClass)} />
|
|
37
36
|
)
|
|
38
37
|
}
|
|
39
38
|
<slot />
|
|
40
39
|
{
|
|
41
|
-
|
|
42
|
-
<
|
|
43
|
-
path={
|
|
44
|
-
class={buttonIconCva(
|
|
40
|
+
p.iconRight && (
|
|
41
|
+
<Icon
|
|
42
|
+
path={p.iconRight}
|
|
43
|
+
class={buttonIconCva(p.variant ?? "link", (p.title || hasChildren) && "ml-2", p.iconClass)}
|
|
45
44
|
/>
|
|
46
45
|
)
|
|
47
46
|
}
|
package/lib/link/LinkText.astro
CHANGED
|
@@ -1,23 +1,26 @@
|
|
|
1
1
|
---
|
|
2
|
-
import {
|
|
2
|
+
import type { HTMLAttributes } from "astro/types"
|
|
3
|
+
import { classMerge } from "~ui/utils/classMerge"
|
|
3
4
|
|
|
4
5
|
interface Props {
|
|
5
6
|
title?: string
|
|
6
7
|
href: string
|
|
7
8
|
newTab?: boolean
|
|
8
9
|
class?: string
|
|
10
|
+
restProps?: HTMLAttributes<"a">
|
|
9
11
|
}
|
|
10
|
-
const
|
|
11
|
-
const title =
|
|
12
|
-
const href =
|
|
13
|
-
const newTab =
|
|
12
|
+
const p = Astro.props
|
|
13
|
+
const title = p.title
|
|
14
|
+
const href = p.href
|
|
15
|
+
const newTab = p.newTab
|
|
14
16
|
---
|
|
15
17
|
|
|
16
18
|
<a
|
|
17
19
|
href={href}
|
|
18
|
-
class={classMerge("text-blue-500 no-underline hover:underline",
|
|
20
|
+
class={classMerge("text-blue-500 no-underline hover:underline", p.class)}
|
|
19
21
|
target={newTab ? "_blank" : undefined}
|
|
20
22
|
title={title}
|
|
23
|
+
{...p.restProps}
|
|
21
24
|
>
|
|
22
|
-
<slot/>
|
|
25
|
+
<slot />
|
|
23
26
|
</a>
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
---
|
|
2
2
|
import { mdiCircle } from "@mdi/js"
|
|
3
|
-
import
|
|
3
|
+
import Icon from "~ui/icon/Icon.astro"
|
|
4
|
+
import { classMerge } from "~ui/utils/classMerge"
|
|
4
5
|
import TextOrLink from "./TextOrLink.astro"
|
|
5
|
-
import Icon1 from "~/icon/Icon1.astro"
|
|
6
6
|
|
|
7
7
|
interface Props {
|
|
8
8
|
points: string[] | Readonly<string[]>
|
|
@@ -10,14 +10,14 @@ interface Props {
|
|
|
10
10
|
classText?: string
|
|
11
11
|
classBullet?: string
|
|
12
12
|
}
|
|
13
|
-
const
|
|
13
|
+
const p = Astro.props
|
|
14
14
|
---
|
|
15
15
|
|
|
16
16
|
{
|
|
17
|
-
|
|
18
|
-
<div class={classMerge("flex
|
|
19
|
-
<
|
|
20
|
-
<TextOrLink text={
|
|
17
|
+
p.points.map((point) => (
|
|
18
|
+
<div class={classMerge("flex gap-1", p.class)}>
|
|
19
|
+
<Icon path={mdiCircle} class={classMerge("size-1.5 mt-2.5 shrink-0", p.classBullet)} />
|
|
20
|
+
<TextOrLink text={point} class={p.classText} />
|
|
21
21
|
</div>
|
|
22
22
|
))
|
|
23
23
|
}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
---
|
|
2
2
|
import { mdiCheck } from "@mdi/js"
|
|
3
|
-
import { classMerge } from "
|
|
3
|
+
import { classMerge } from "~ui/utils/classMerge"
|
|
4
4
|
import TextOrLink from "./TextOrLink.astro"
|
|
5
|
-
import
|
|
5
|
+
import Icon from "~ui/icon/Icon.astro"
|
|
6
6
|
|
|
7
7
|
interface Props {
|
|
8
8
|
point: string
|
|
@@ -14,7 +14,7 @@ const p = Astro.props
|
|
|
14
14
|
---
|
|
15
15
|
|
|
16
16
|
<div class={classMerge("flex flex-row flex-nowrap", p.class)}>
|
|
17
|
-
<
|
|
17
|
+
<Icon path={mdiCheck} class={classMerge("fill-green-600 dark:fill-green-600 mr-1 flex-none", p.classBullet)} />
|
|
18
18
|
<TextOrLink text={p.point} class={p.classText} />
|
|
19
19
|
<slot />
|
|
20
20
|
</div>
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
import { mdiCheck } from "@mdi/js"
|
|
3
|
-
import { classMerge } from "
|
|
4
|
-
import
|
|
3
|
+
import { classMerge } from "~ui/utils/classMerge"
|
|
4
|
+
import Icon from "~ui/icon/Icon.astro"
|
|
5
5
|
import TextOrLink from "./TextOrLink.astro"
|
|
6
6
|
|
|
7
7
|
interface Props {
|
|
@@ -16,7 +16,7 @@ const props = Astro.props
|
|
|
16
16
|
{
|
|
17
17
|
props.points.map((p) => (
|
|
18
18
|
<div class={classMerge("flex flex-row flex-nowrap", props.class)}>
|
|
19
|
-
<
|
|
19
|
+
<Icon path={mdiCheck} class={classMerge("fill-green-600 dark:fill-green-600 mr-1 flex-none", props.classBullet)} />
|
|
20
20
|
<TextOrLink text={p} class={props.classText} />
|
|
21
21
|
</div>
|
|
22
22
|
))
|
package/lib/list/Ps.astro
CHANGED
|
@@ -1,12 +1,15 @@
|
|
|
1
1
|
---
|
|
2
|
-
|
|
3
|
-
|
|
2
|
+
import type { MayHaveClass } from "~ui/utils/MayHaveClass"
|
|
3
|
+
|
|
4
|
+
interface Props extends MayHaveClass {
|
|
5
|
+
text?: string
|
|
6
|
+
lines?: string[]
|
|
4
7
|
class?: string
|
|
5
8
|
}
|
|
6
|
-
const
|
|
7
|
-
const lines =
|
|
9
|
+
const p = Astro.props
|
|
10
|
+
const lines = p.lines ?? (p.text ? p.text.split("\n") : [])
|
|
8
11
|
---
|
|
9
12
|
|
|
10
13
|
<>
|
|
11
|
-
{lines.map((line) => <p class={
|
|
14
|
+
{lines.map((line) => <p class={p.class}>{line}</p>)}
|
|
12
15
|
</>
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
|
-
import LinkText from "
|
|
3
|
-
import { classMerge } from "
|
|
2
|
+
import LinkText from "~ui/link/LinkText.astro"
|
|
3
|
+
import { classMerge } from "~ui/utils/classMerge"
|
|
4
4
|
|
|
5
5
|
interface Props {
|
|
6
6
|
text: string
|
|
@@ -10,10 +10,4 @@ const props = Astro.props
|
|
|
10
10
|
const text = props.text
|
|
11
11
|
---
|
|
12
12
|
|
|
13
|
-
{
|
|
14
|
-
text.startsWith("http") ? (
|
|
15
|
-
<LinkText href={text}>{text}</LinkText>
|
|
16
|
-
) : (
|
|
17
|
-
<p class={classMerge("leading-relaxed", props.class)}>{text}</p>
|
|
18
|
-
)
|
|
19
|
-
}
|
|
13
|
+
{text.startsWith("http") ? <LinkText href={text}>{text}</LinkText> : <p class={classMerge(props.class)}>{text}</p>}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
---
|
|
2
|
+
import { classArr } from "~ui/utils/classArr"
|
|
3
|
+
|
|
4
|
+
import type { HTMLAttributes } from "astro/types"
|
|
5
|
+
import "./markdown.css"
|
|
6
|
+
|
|
7
|
+
interface Props {
|
|
8
|
+
id?: string
|
|
9
|
+
class?: string
|
|
10
|
+
restProps?: HTMLAttributes<"div">
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
const p = Astro.props
|
|
14
|
+
---
|
|
15
|
+
|
|
16
|
+
<div id={p.id} class={classArr("markdown-body", p.class)} {...p.restProps}>
|
|
17
|
+
<slot />
|
|
18
|
+
</div>
|