@ansidev-oss/vitepress-theme-ansidev 1.2.0 → 1.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/dist/client/{Donation-BBPb8v5p.js → Donation-BJ2fj2Gs.js} +35 -13
- package/dist/client/{GoogleAnalytics-34XEM7eO.js → GoogleAnalytics-DwvjYPU_.js} +7 -1
- package/dist/client/index.js +108 -106
- package/dist/client/plugins/donation/index.d.ts +8 -0
- package/dist/client/styles.css +1 -1
- package/dist/node/composables/excerpt.d.ts +9 -0
- package/dist/node/composables/excerpt.test.d.ts +1 -0
- package/dist/node/composables/index.d.ts +4 -0
- package/dist/node/composables/markdown.d.ts +2 -0
- package/dist/node/composables/route.d.ts +15 -0
- package/dist/node/composables/slug.d.ts +7 -0
- package/dist/node/composables/types.d.ts +7 -0
- package/dist/node/config.d.mts +8 -0
- package/dist/node/config.d.ts +45 -0
- package/package.json +1 -3
- package/src/client/components/Footer.vue +1 -1
- package/src/client/components/LocaleSwitcher.vue +15 -2
- package/src/client/components/TermLink.vue +11 -1
- package/src/client/index.ts +1 -1
- package/src/client/layouts/Layout.vue +1 -1
- package/src/client/plugins/donation/components/DonationButton.vue +8 -0
- package/src/client/plugins/donation/index.ts +11 -3
- package/src/client/plugins/google-analytics/components/GoogleAnalytics.vue +19 -1
|
@@ -1,44 +1,66 @@
|
|
|
1
|
-
import { Fragment as e, computed as t, createBlock as n, createElementBlock as r, createElementVNode as i, defineComponent as a, mergeProps as o, normalizeStyle as s, openBlock as c, renderList as l } from "vue";
|
|
1
|
+
import { Fragment as e, computed as t, createBlock as n, createElementBlock as r, createElementVNode as i, defineComponent as a, mergeProps as o, normalizeStyle as s, openBlock as c, renderList as l, unref as u } from "vue";
|
|
2
2
|
// src/client/plugins/donation/index.ts
|
|
3
|
-
var
|
|
3
|
+
var d = {
|
|
4
4
|
buymeacoffee: {
|
|
5
5
|
donationBaseUrl: "https://buymeacoffee.com",
|
|
6
6
|
donationButtonImage: "https://cdn.buymeacoffee.com/buttons/v2/default-yellow.png",
|
|
7
7
|
donationButtonStyle: {
|
|
8
8
|
height: "60px !important",
|
|
9
9
|
width: "217px !important"
|
|
10
|
+
},
|
|
11
|
+
donationButtonSize: {
|
|
12
|
+
width: 545,
|
|
13
|
+
height: 153
|
|
10
14
|
}
|
|
11
15
|
},
|
|
12
16
|
kofi: {
|
|
13
17
|
donationBaseUrl: "https://ko-fi.com",
|
|
14
18
|
donationButtonImage: "https://storage.ko-fi.com/cdn/brandasset/kofi_bg_tag_white.png",
|
|
15
|
-
donationButtonStyle: { height: "60px !important" }
|
|
19
|
+
donationButtonStyle: { height: "60px !important" },
|
|
20
|
+
donationButtonSize: {
|
|
21
|
+
width: 341,
|
|
22
|
+
height: 129
|
|
23
|
+
}
|
|
16
24
|
},
|
|
17
25
|
paypal: {
|
|
18
26
|
donationBaseUrl: "https://paypal.me",
|
|
19
|
-
donationButtonImage: "https://paypalobjects.com/en_US/i/btn/btn_donateCC_LG.gif"
|
|
27
|
+
donationButtonImage: "https://paypalobjects.com/en_US/i/btn/btn_donateCC_LG.gif",
|
|
28
|
+
donationButtonSize: {
|
|
29
|
+
width: 147,
|
|
30
|
+
height: 47
|
|
31
|
+
}
|
|
20
32
|
}
|
|
21
|
-
},
|
|
33
|
+
}, f = ["href"], p = [
|
|
34
|
+
"src",
|
|
35
|
+
"alt",
|
|
36
|
+
"width",
|
|
37
|
+
"height"
|
|
38
|
+
], m = /* @__PURE__ */ a({
|
|
22
39
|
__name: "DonationButton",
|
|
23
40
|
props: {
|
|
24
41
|
donationPlatform: {},
|
|
25
42
|
donationId: {},
|
|
26
43
|
donationBaseUrl: {},
|
|
27
44
|
donationButtonImage: {},
|
|
28
|
-
donationButtonStyle: {}
|
|
45
|
+
donationButtonStyle: {},
|
|
46
|
+
donationButtonSize: {}
|
|
29
47
|
},
|
|
30
48
|
setup(e) {
|
|
31
|
-
let n = e, a = t(() => new URL(n.donationId, n.donationBaseUrl).toString());
|
|
49
|
+
let n = e, a = t(() => new URL(n.donationId, n.donationBaseUrl).toString()), o = n.donationButtonSize;
|
|
32
50
|
return (t, n) => (c(), r("a", {
|
|
33
51
|
href: a.value,
|
|
34
52
|
target: "_blank"
|
|
35
53
|
}, [i("img", {
|
|
36
54
|
src: e.donationButtonImage,
|
|
37
55
|
alt: e.donationPlatform,
|
|
38
|
-
style: s(e.donationButtonStyle)
|
|
39
|
-
|
|
56
|
+
style: s(e.donationButtonStyle),
|
|
57
|
+
width: u(o)?.width,
|
|
58
|
+
height: u(o)?.height,
|
|
59
|
+
loading: "lazy",
|
|
60
|
+
decoding: "async"
|
|
61
|
+
}, null, 12, p)], 8, f));
|
|
40
62
|
}
|
|
41
|
-
}),
|
|
63
|
+
}), h = /* @__PURE__ */ a({
|
|
42
64
|
__name: "Donation",
|
|
43
65
|
props: { donation: {} },
|
|
44
66
|
setup(i) {
|
|
@@ -48,7 +70,7 @@ var u = {
|
|
|
48
70
|
if (t === "custom") continue;
|
|
49
71
|
let n = a[t];
|
|
50
72
|
e[t] = {
|
|
51
|
-
...
|
|
73
|
+
...d[t],
|
|
52
74
|
donationId: n
|
|
53
75
|
};
|
|
54
76
|
}
|
|
@@ -57,10 +79,10 @@ var u = {
|
|
|
57
79
|
...a.custom
|
|
58
80
|
};
|
|
59
81
|
});
|
|
60
|
-
return (t, i) => (c(!0), r(e, null, l(s.value, (e, t) => (c(), n(
|
|
82
|
+
return (t, i) => (c(!0), r(e, null, l(s.value, (e, t) => (c(), n(m, o({
|
|
61
83
|
key: e?.name,
|
|
62
84
|
ref_for: !0
|
|
63
85
|
}, e, { "donation-platform": t }), null, 16, ["donation-platform"]))), 128));
|
|
64
86
|
}
|
|
65
87
|
});
|
|
66
|
-
export {
|
|
88
|
+
export { h as default };
|
|
@@ -19,7 +19,13 @@ var n = /* @__PURE__ */ e({
|
|
|
19
19
|
`, document.head.appendChild(t);
|
|
20
20
|
}
|
|
21
21
|
}
|
|
22
|
-
|
|
22
|
+
function a() {
|
|
23
|
+
let e = () => {
|
|
24
|
+
typeof window.requestIdleCallback == "function" ? window.requestIdleCallback(() => i(), { timeout: 5e3 }) : setTimeout(i, 3e3);
|
|
25
|
+
};
|
|
26
|
+
document.readyState === "complete" ? e() : window.addEventListener("load", e, { once: !0 });
|
|
27
|
+
}
|
|
28
|
+
return n && t(a), (e, t) => null;
|
|
23
29
|
}
|
|
24
30
|
});
|
|
25
31
|
export { n as default };
|
package/dist/client/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Icon as e } from "@iconify/vue";
|
|
2
|
-
import t, { useLayout as n } from "vitepress/theme";
|
|
2
|
+
import t, { useLayout as n } from "vitepress/theme-without-fonts";
|
|
3
3
|
import { useData as r, useRoute as i, useRouter as a } from "vitepress";
|
|
4
4
|
import { Fragment as o, Text as s, computed as c, createBlock as l, createCommentVNode as u, createElementBlock as d, createElementVNode as f, createTextVNode as p, createVNode as m, defineAsyncComponent as h, defineComponent as g, effectScope as _, getCurrentInstance as v, getCurrentScope as y, guardReactiveProps as b, h as x, inject as ee, isRef as te, mergeProps as S, normalizeClass as C, normalizeProps as ne, onMounted as re, onScopeDispose as w, onUnmounted as ie, openBlock as T, ref as ae, renderList as oe, renderSlot as se, resolveComponent as ce, shallowRef as le, toDisplayString as E, unref as D, watch as ue, watchEffect as de, withCtx as O } from "vue";
|
|
5
5
|
// src/client/composables/lang.ts
|
|
@@ -29,13 +29,13 @@ var k = () => {
|
|
|
29
29
|
__name: "DonationWidget",
|
|
30
30
|
props: { direction: {} },
|
|
31
31
|
setup(e) {
|
|
32
|
-
let { theme: t } = r(), n = e.direction === "vertical" ? "space-y-4" : "space-x-4", i = t.value.donation ? h(() => import("./Donation-
|
|
32
|
+
let { theme: t } = r(), n = e.direction === "vertical" ? "space-y-4" : "space-x-4", i = t.value.donation ? h(() => import("./Donation-BJ2fj2Gs.js")) : () => null;
|
|
33
33
|
return (e, r) => (T(), d("div", { class: C(["flex flex-wrap py-4 items-center justify-center", D(n)]) }, [m(D(i), { donation: D(t).donation }, null, 8, ["donation"])], 2));
|
|
34
34
|
}
|
|
35
35
|
}), ge = { class: "container" }, _e = ["innerHTML"], ve = ["innerHTML"], ye = /*@__PURE__*/ g({
|
|
36
36
|
__name: "Footer",
|
|
37
37
|
setup(e) {
|
|
38
|
-
let { theme: t, frontmatter: i } = r(), { hasSidebar: a, hasAside: s } = n(), p = c(() => typeof t.value.themeFooter.copyright == "string" ? t.value.themeFooter.copyright.replace(/#\{present\}/g, (/* @__PURE__ */ new Date()).getFullYear().toString()) : t.value.themeFooter.copyright), g = t.value.googleAnalytics ? h(() => import("./GoogleAnalytics-
|
|
38
|
+
let { theme: t, frontmatter: i } = r(), { hasSidebar: a, hasAside: s } = n(), p = c(() => typeof t.value.themeFooter.copyright == "string" ? t.value.themeFooter.copyright.replace(/#\{present\}/g, (/* @__PURE__ */ new Date()).getFullYear().toString()) : t.value.themeFooter.copyright), g = t.value.googleAnalytics ? h(() => import("./GoogleAnalytics-DwvjYPU_.js")) : () => null, _ = t.value.swetrix ? h(() => import("./Swetrix-GKEyGNrV.js")) : () => null;
|
|
39
39
|
return (e, n) => (T(), d(o, null, [
|
|
40
40
|
D(s) ? u("", !0) : (T(), l(he, {
|
|
41
41
|
key: 0,
|
|
@@ -61,7 +61,7 @@ var k = () => {
|
|
|
61
61
|
let n = e.__vccOpts || e;
|
|
62
62
|
for (let [e, r] of t) n[e] = r;
|
|
63
63
|
return n;
|
|
64
|
-
}, xe = /*#__PURE__*/ be(ye, [["__scopeId", "data-v-
|
|
64
|
+
}, xe = /*#__PURE__*/ be(ye, [["__scopeId", "data-v-6216a7be"]]), A = typeof window < "u", j, Se;
|
|
65
65
|
if (process.env.NODE_ENV !== "production") {
|
|
66
66
|
let e = A && window.performance;
|
|
67
67
|
e && e.mark && e.measure && e.clearMarks && e.clearMeasures && (j = (t) => {
|
|
@@ -3136,7 +3136,7 @@ process.env.NODE_ENV;
|
|
|
3136
3136
|
var Ba = (e, t) => {
|
|
3137
3137
|
let n = e;
|
|
3138
3138
|
t.value = n[(n.indexOf(t.value) + 1) % n.length];
|
|
3139
|
-
}, Va = ["aria-label"], Ha = /*#__PURE__*/ be(/* @__PURE__ */ g({
|
|
3139
|
+
}, Va = ["aria-label"], Ha = ["width", "height"], Ua = "<g fill=\"currentColor\"><path d=\"M4.545 6.714L4.11 8H3l1.862-5h1.284L8 8H6.833l-.435-1.286zm1.634-.736L5.5 3.956h-.049l-.679 2.022z\"/><path d=\"M0 2a2 2 0 0 1 2-2h7a2 2 0 0 1 2 2v3h3a2 2 0 0 1 2 2v7a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2v-3H2a2 2 0 0 1-2-2zm2-1a1 1 0 0 0-1 1v7a1 1 0 0 0 1 1h7a1 1 0 0 0 1-1V2a1 1 0 0 0-1-1zm7.138 9.995q.289.451.63.846c-.748.575-1.673 1.001-2.768 1.292c.178.217.451.635.555.867c1.125-.359 2.08-.844 2.886-1.494c.777.665 1.739 1.165 2.93 1.472c.133-.254.414-.673.629-.89c-1.125-.253-2.057-.694-2.82-1.284c.681-.747 1.222-1.651 1.621-2.757H14V8h-3v1.047h.765c-.318.844-.74 1.546-1.272 2.13a6 6 0 0 1-.415-.492a2 2 0 0 1-.94.31\"/></g>", Wa = /*#__PURE__*/ be(/* @__PURE__ */ g({
|
|
3140
3140
|
__name: "LocaleSwitcher",
|
|
3141
3141
|
props: { size: {
|
|
3142
3142
|
type: Number,
|
|
@@ -3145,21 +3145,22 @@ var Ba = (e, t) => {
|
|
|
3145
3145
|
} },
|
|
3146
3146
|
setup(e) {
|
|
3147
3147
|
let { t, availableLocales: n, locale: r } = $(), i = () => Ba(n, r);
|
|
3148
|
-
return (n, r) => {
|
|
3149
|
-
|
|
3150
|
-
|
|
3151
|
-
|
|
3152
|
-
|
|
3153
|
-
|
|
3154
|
-
|
|
3155
|
-
|
|
3156
|
-
|
|
3157
|
-
|
|
3158
|
-
|
|
3159
|
-
|
|
3160
|
-
|
|
3161
|
-
|
|
3162
|
-
}
|
|
3148
|
+
return (n, r) => (T(), d(o, null, [r[0] ||= f("div", { class: "divider" }, null, -1), f("button", {
|
|
3149
|
+
"aria-label": D(t)("button.toggle_locale"),
|
|
3150
|
+
type: "button",
|
|
3151
|
+
class: "VPLocaleSwitcher",
|
|
3152
|
+
onClick: i
|
|
3153
|
+
}, [(T(), d("svg", {
|
|
3154
|
+
xmlns: "http://www.w3.org/2000/svg",
|
|
3155
|
+
"aria-hidden": "true",
|
|
3156
|
+
role: "img",
|
|
3157
|
+
width: e.size,
|
|
3158
|
+
height: e.size,
|
|
3159
|
+
viewBox: "0 0 16 16",
|
|
3160
|
+
innerHTML: Ua
|
|
3161
|
+
}, null, 8, Ha))], 8, Va)], 64));
|
|
3162
|
+
}
|
|
3163
|
+
}), [["__scopeId", "data-v-871d7d08"]]), Ga = /* @__PURE__ */ g({
|
|
3163
3164
|
__name: "SharingWidget",
|
|
3164
3165
|
setup(e) {
|
|
3165
3166
|
let t = i(), { theme: n, frontmatter: a, page: o } = r(), s = n.value.sharing ? h(() => import("./Sharing-CpagX9oy.js")) : () => null, c = new URL(t.path, n.value.siteURL).href, u = a.value.title || o.value.title;
|
|
@@ -3168,7 +3169,7 @@ var Ba = (e, t) => {
|
|
|
3168
3169
|
text: D(u)
|
|
3169
3170
|
}, null, 8, ["url", "text"]));
|
|
3170
3171
|
}
|
|
3171
|
-
}),
|
|
3172
|
+
}), Ka = { class: "vp-doc" }, qa = /* @__PURE__ */ g({
|
|
3172
3173
|
__name: "Layout",
|
|
3173
3174
|
setup(e) {
|
|
3174
3175
|
let { Layout: n } = t, { frontmatter: a, theme: o } = r(), s = i(), c = null;
|
|
@@ -3182,15 +3183,15 @@ var Ba = (e, t) => {
|
|
|
3182
3183
|
return re(u), ue(() => s.path, (e, t) => {
|
|
3183
3184
|
e !== t && u();
|
|
3184
3185
|
}), (e, t) => (T(), l(D(n), null, {
|
|
3185
|
-
"doc-before": O(() => [f("div",
|
|
3186
|
-
"nav-bar-content-after": O(() => [m(
|
|
3187
|
-
"aside-outline-after": O(() => [m(
|
|
3186
|
+
"doc-before": O(() => [f("div", Ka, [f("h1", null, E(D(a).title), 1)])]),
|
|
3187
|
+
"nav-bar-content-after": O(() => [m(Wa)]),
|
|
3188
|
+
"aside-outline-after": O(() => [m(Ga)]),
|
|
3188
3189
|
"aside-ads-before": O(() => [m(he, { direction: "vertical" })]),
|
|
3189
3190
|
"layout-bottom": O(() => [m(xe)]),
|
|
3190
3191
|
_: 1
|
|
3191
3192
|
}));
|
|
3192
3193
|
}
|
|
3193
|
-
}),
|
|
3194
|
+
}), Ja = ["href"], Ya = /* @__PURE__ */ g({
|
|
3194
3195
|
__name: "RouterLink",
|
|
3195
3196
|
props: { to: {
|
|
3196
3197
|
type: String,
|
|
@@ -3202,9 +3203,9 @@ var Ba = (e, t) => {
|
|
|
3202
3203
|
return (n, r) => (T(), d("a", S({
|
|
3203
3204
|
href: e.to,
|
|
3204
3205
|
onClick: r[0] ||= (n) => D(t).go(e.to)
|
|
3205
|
-
}, n.$attrs), [se(n.$slots, "default")], 16,
|
|
3206
|
+
}, n.$attrs), [se(n.$slots, "default")], 16, Ja));
|
|
3206
3207
|
}
|
|
3207
|
-
}),
|
|
3208
|
+
}), Xa = ["href"], Za = ["href"], Qa = /* @__PURE__ */ g({
|
|
3208
3209
|
__name: "Link",
|
|
3209
3210
|
props: {
|
|
3210
3211
|
href: {
|
|
@@ -3220,7 +3221,7 @@ var Ba = (e, t) => {
|
|
|
3220
3221
|
},
|
|
3221
3222
|
setup(e) {
|
|
3222
3223
|
let t = e, n = t.href?.startsWith("/") && !t.disableRouterLink, r = t.href?.startsWith("#");
|
|
3223
|
-
return (t, i) => D(n) || D(r) ? (T(), l(
|
|
3224
|
+
return (t, i) => D(n) || D(r) ? (T(), l(Ya, S({
|
|
3224
3225
|
key: 0,
|
|
3225
3226
|
to: e.href
|
|
3226
3227
|
}, t.$attrs), {
|
|
@@ -3230,14 +3231,14 @@ var Ba = (e, t) => {
|
|
|
3230
3231
|
key: 1,
|
|
3231
3232
|
target: "_self",
|
|
3232
3233
|
href: e.href
|
|
3233
|
-
}, t.$attrs), [se(t.$slots, "default")], 16,
|
|
3234
|
+
}, t.$attrs), [se(t.$slots, "default")], 16, Xa)) : (T(), d("a", S({
|
|
3234
3235
|
key: 2,
|
|
3235
3236
|
target: "_blank",
|
|
3236
3237
|
rel: "noopener noreferrer",
|
|
3237
3238
|
href: e.href
|
|
3238
|
-
}, t.$attrs), [se(t.$slots, "default")], 16,
|
|
3239
|
+
}, t.$attrs), [se(t.$slots, "default")], 16, Za));
|
|
3239
3240
|
}
|
|
3240
|
-
}),
|
|
3241
|
+
}), $a = { class: "inline-flex items-center justify-center w-4 h-4 ms-2 text-xs font-semibold text-gray-900 dark:text-white bg-gray-300 dark:bg-gray-700 p-2.5 rounded" }, eo = /* @__PURE__ */ g({
|
|
3241
3242
|
__name: "TermBadge",
|
|
3242
3243
|
props: {
|
|
3243
3244
|
title: {
|
|
@@ -3254,16 +3255,16 @@ var Ba = (e, t) => {
|
|
|
3254
3255
|
}
|
|
3255
3256
|
},
|
|
3256
3257
|
setup(e) {
|
|
3257
|
-
return (t, n) => (T(), l(
|
|
3258
|
+
return (t, n) => (T(), l(Qa, {
|
|
3258
3259
|
key: e.title,
|
|
3259
3260
|
href: e.href,
|
|
3260
3261
|
class: "inline-flex items-center mt-2 mb-2 mr-2 px-5 py-2.5 text-sm font-medium text-center text-white component-border"
|
|
3261
3262
|
}, {
|
|
3262
|
-
default: O(() => [p(E(e.title) + " ", 1), f("span",
|
|
3263
|
+
default: O(() => [p(E(e.title) + " ", 1), f("span", $a, E(e.count), 1)]),
|
|
3263
3264
|
_: 1
|
|
3264
3265
|
}, 8, ["href"]));
|
|
3265
3266
|
}
|
|
3266
|
-
}),
|
|
3267
|
+
}), to = (e) => e.replace(/#/, "-sharp-").replace(/\./, "-dot-").replace(/-$/, "").toLowerCase().normalize("NFD").replace(/[\u0300-\u036f]/g, "").replace(/đ/g, "d").replace(/[^a-z0-9]+/g, "-").replace(/^-+|-+$/g, ""), no = (e) => (t) => to(t) === e, ro = (e) => {
|
|
3267
3268
|
let t = e instanceof Date ? e : new Date(e);
|
|
3268
3269
|
return t.setUTCHours(12), {
|
|
3269
3270
|
time: +t,
|
|
@@ -3271,7 +3272,7 @@ var Ba = (e, t) => {
|
|
|
3271
3272
|
month: t.toLocaleDateString("en-US", { month: "short" }),
|
|
3272
3273
|
year: t.toLocaleDateString("en-US", { year: "numeric" })
|
|
3273
3274
|
};
|
|
3274
|
-
},
|
|
3275
|
+
}, io = (e) => {
|
|
3275
3276
|
switch (e) {
|
|
3276
3277
|
case "active": return {
|
|
3277
3278
|
fontSize: "text-sm",
|
|
@@ -3296,13 +3297,13 @@ var Ba = (e, t) => {
|
|
|
3296
3297
|
};
|
|
3297
3298
|
default: return {};
|
|
3298
3299
|
}
|
|
3299
|
-
},
|
|
3300
|
+
}, ao = (e) => {
|
|
3300
3301
|
let t = e.reduce((e, t) => (e[t] = (e[t] || 0) + 1, e), {}), n = Object.entries(t);
|
|
3301
3302
|
return Object.fromEntries(n.sort(([, e], [, t]) => t - e));
|
|
3302
|
-
},
|
|
3303
|
+
}, oo = { class: "flex flex-wrap pt-4" }, so = {
|
|
3303
3304
|
key: 0,
|
|
3304
3305
|
class: "mt-2 mb-2 mr-5"
|
|
3305
|
-
},
|
|
3306
|
+
}, co = /* @__PURE__ */ g({
|
|
3306
3307
|
__name: "ArchivesPage",
|
|
3307
3308
|
props: { posts: {
|
|
3308
3309
|
type: Object,
|
|
@@ -3310,11 +3311,11 @@ var Ba = (e, t) => {
|
|
|
3310
3311
|
default: []
|
|
3311
3312
|
} },
|
|
3312
3313
|
setup(e) {
|
|
3313
|
-
let t = e, { t: n } = $(), r = c(() =>
|
|
3314
|
+
let t = e, { t: n } = $(), r = c(() => ao(t.posts.flatMap((e) => new Date(e.date).getFullYear().toString()))), i = c(() => Object.keys(r.value).map((e) => Number(e)).reverse());
|
|
3314
3315
|
return (e, t) => {
|
|
3315
3316
|
let a = ce("Page");
|
|
3316
3317
|
return T(), l(a, { title: D(n)("archives") }, {
|
|
3317
|
-
default: O(() => [f("div",
|
|
3318
|
+
default: O(() => [f("div", oo, [Object.keys(i.value).length === 0 ? (T(), d("div", so, E(D(n)("no_archive")), 1)) : u("", !0), (T(!0), d(o, null, oe(i.value, (e) => (T(), l(eo, {
|
|
3318
3319
|
key: e,
|
|
3319
3320
|
title: `${e}`,
|
|
3320
3321
|
count: r.value[e],
|
|
@@ -3328,10 +3329,10 @@ var Ba = (e, t) => {
|
|
|
3328
3329
|
}, 8, ["title"]);
|
|
3329
3330
|
};
|
|
3330
3331
|
}
|
|
3331
|
-
}),
|
|
3332
|
+
}), lo = { class: "flex flex-wrap pt-4" }, uo = {
|
|
3332
3333
|
key: 0,
|
|
3333
3334
|
class: "mt-2 mb-2 mr-5"
|
|
3334
|
-
},
|
|
3335
|
+
}, fo = /* @__PURE__ */ g({
|
|
3335
3336
|
__name: "CategoriesPage",
|
|
3336
3337
|
props: { posts: {
|
|
3337
3338
|
type: Object,
|
|
@@ -3339,15 +3340,15 @@ var Ba = (e, t) => {
|
|
|
3339
3340
|
default: []
|
|
3340
3341
|
} },
|
|
3341
3342
|
setup(e) {
|
|
3342
|
-
let t = e, { t: n } = $(), r = c(() =>
|
|
3343
|
+
let t = e, { t: n } = $(), r = c(() => ao(t.posts.flatMap((e) => e.categories)));
|
|
3343
3344
|
return (e, t) => {
|
|
3344
3345
|
let i = ce("Page");
|
|
3345
3346
|
return T(), l(i, { title: D(n)("categories") }, {
|
|
3346
|
-
default: O(() => [f("div",
|
|
3347
|
+
default: O(() => [f("div", lo, [Object.keys(r.value).length === 0 ? (T(), d("div", uo, E(D(n)("no_category")), 1)) : u("", !0), (T(!0), d(o, null, oe(r.value, (e, t) => (T(), l(eo, {
|
|
3347
3348
|
key: t,
|
|
3348
3349
|
title: t,
|
|
3349
3350
|
count: e,
|
|
3350
|
-
href: `/categories/${D(
|
|
3351
|
+
href: `/categories/${D(to)(t)}`
|
|
3351
3352
|
}, null, 8, [
|
|
3352
3353
|
"title",
|
|
3353
3354
|
"count",
|
|
@@ -3357,7 +3358,7 @@ var Ba = (e, t) => {
|
|
|
3357
3358
|
}, 8, ["title"]);
|
|
3358
3359
|
};
|
|
3359
3360
|
}
|
|
3360
|
-
}),
|
|
3361
|
+
}), po = /* @__PURE__ */ g({
|
|
3361
3362
|
__name: "HomePage",
|
|
3362
3363
|
props: { posts: {
|
|
3363
3364
|
type: Object,
|
|
@@ -3374,7 +3375,7 @@ var Ba = (e, t) => {
|
|
|
3374
3375
|
}, null, 8, ["title", "posts"]);
|
|
3375
3376
|
};
|
|
3376
3377
|
}
|
|
3377
|
-
}),
|
|
3378
|
+
}), mo = { class: "main" }, ho = { class: "pt-6 pb-8 space-y-2 md:space-y-5" }, go = { class: "mb-6 text-3xl font-extrabold leading-9 tracking-tight text-gray-900 dark:text-gray-100 sm:text-4xl sm:leading-10 md:text-6xl md:leading-14" }, _o = /* @__PURE__ */ g({
|
|
3378
3379
|
__name: "Page",
|
|
3379
3380
|
props: { title: {
|
|
3380
3381
|
type: String,
|
|
@@ -3382,9 +3383,9 @@ var Ba = (e, t) => {
|
|
|
3382
3383
|
default: ""
|
|
3383
3384
|
} },
|
|
3384
3385
|
setup(e) {
|
|
3385
|
-
return (t, n) => (T(), d("main",
|
|
3386
|
+
return (t, n) => (T(), d("main", mo, [f("div", ho, [f("h1", go, E(e.title), 1)]), se(t.$slots, "default")]));
|
|
3386
3387
|
}
|
|
3387
|
-
}),
|
|
3388
|
+
}), vo = /* @__PURE__ */ g({
|
|
3388
3389
|
__name: "TermLink",
|
|
3389
3390
|
props: {
|
|
3390
3391
|
text: {
|
|
@@ -3397,44 +3398,45 @@ var Ba = (e, t) => {
|
|
|
3397
3398
|
}
|
|
3398
3399
|
},
|
|
3399
3400
|
setup(e) {
|
|
3400
|
-
let t = e, n = c(() =>
|
|
3401
|
-
return (t, n) => (T(), l(
|
|
3401
|
+
let t = e, n = c(() => to(t.text)), r = c(() => `${t.basePath}${n.value}`), i = c(() => t.basePath === "/categories/" ? `View all posts in category ${t.text}` : `View all projects using ${t.text}`);
|
|
3402
|
+
return (t, n) => (T(), l(Ya, {
|
|
3402
3403
|
to: r.value,
|
|
3404
|
+
"aria-label": i.value,
|
|
3403
3405
|
class: "mr-2 text-sm font-medium uppercase link-alt"
|
|
3404
3406
|
}, {
|
|
3405
3407
|
default: O(() => [p(E(e.text), 1)]),
|
|
3406
3408
|
_: 1
|
|
3407
|
-
}, 8, ["to"]));
|
|
3409
|
+
}, 8, ["to", "aria-label"]));
|
|
3408
3410
|
}
|
|
3409
|
-
}),
|
|
3411
|
+
}), yo = { class: "flex p-4 component-border" }, bo = {
|
|
3410
3412
|
class: "text-center",
|
|
3411
3413
|
style: { "min-width": "80px" }
|
|
3412
|
-
},
|
|
3414
|
+
}, xo = { class: "text-6xl font-bold" }, So = { class: "pl-8" }, Co = { class: "flex flex-wrap mb-3" }, wo = ["href", "title"], To = { class: "flex flex-wrap mb-3" }, Eo = ["innerHTML"], Do = /* @__PURE__ */ g({
|
|
3413
3415
|
__name: "PostItem",
|
|
3414
3416
|
props: { post: {
|
|
3415
3417
|
type: Object,
|
|
3416
3418
|
required: !0
|
|
3417
3419
|
} },
|
|
3418
3420
|
setup(e) {
|
|
3419
|
-
let t = e, n = c(() =>
|
|
3420
|
-
return (t, r) => (T(), d("div",
|
|
3421
|
-
f("div",
|
|
3421
|
+
let t = e, n = c(() => ro(t.post.date));
|
|
3422
|
+
return (t, r) => (T(), d("div", yo, [f("div", bo, [f("div", xo, E(n.value?.day), 1), f("div", null, E(n.value?.month) + ", " + E(n.value?.year), 1)]), f("div", So, [
|
|
3423
|
+
f("div", Co, [f("a", {
|
|
3422
3424
|
class: "text-2xl font-bold leading-8 tracking-tight",
|
|
3423
3425
|
href: e.post?.url,
|
|
3424
3426
|
title: e.post.title
|
|
3425
|
-
}, E(e.post.title), 9,
|
|
3426
|
-
f("div",
|
|
3427
|
+
}, E(e.post.title), 9, wo)]),
|
|
3428
|
+
f("div", To, [(T(!0), d(o, null, oe(e.post.categories, (e) => (T(), l(vo, {
|
|
3427
3429
|
key: e,
|
|
3428
3430
|
text: e,
|
|
3429
3431
|
basePath: "/categories/"
|
|
3430
3432
|
}, null, 8, ["text"]))), 128))]),
|
|
3431
|
-
f("div", { innerHTML: e.post?.excerpt }, null, 8,
|
|
3433
|
+
f("div", { innerHTML: e.post?.excerpt }, null, 8, Eo)
|
|
3432
3434
|
])]));
|
|
3433
3435
|
}
|
|
3434
|
-
}),
|
|
3436
|
+
}), Oo = {
|
|
3435
3437
|
key: 0,
|
|
3436
3438
|
class: "grid grid-cols-1 lg:grid-cols-2 gap-4 mt-4"
|
|
3437
|
-
},
|
|
3439
|
+
}, ko = { key: 1 }, Ao = /* @__PURE__ */ g({
|
|
3438
3440
|
__name: "PostList",
|
|
3439
3441
|
props: { posts: {
|
|
3440
3442
|
type: Object,
|
|
@@ -3443,12 +3445,12 @@ var Ba = (e, t) => {
|
|
|
3443
3445
|
} },
|
|
3444
3446
|
setup(e) {
|
|
3445
3447
|
let { t } = $();
|
|
3446
|
-
return (n, r) => (T(), d(o, null, [e.posts.length > 0 ? (T(), d("div",
|
|
3448
|
+
return (n, r) => (T(), d(o, null, [e.posts.length > 0 ? (T(), d("div", Oo, [(T(!0), d(o, null, oe(e.posts, (e) => (T(), l(Do, {
|
|
3447
3449
|
key: e?.url,
|
|
3448
3450
|
post: e
|
|
3449
|
-
}, null, 8, ["post"]))), 128))])) : u("", !0), e.posts.length === 0 ? (T(), d("p",
|
|
3451
|
+
}, null, 8, ["post"]))), 128))])) : u("", !0), e.posts.length === 0 ? (T(), d("p", ko, E(D(t)("no_post")), 1)) : u("", !0)], 64));
|
|
3450
3452
|
}
|
|
3451
|
-
}),
|
|
3453
|
+
}), jo = /* @__PURE__ */ g({
|
|
3452
3454
|
__name: "PostsPage",
|
|
3453
3455
|
props: {
|
|
3454
3456
|
title: {
|
|
@@ -3465,12 +3467,12 @@ var Ba = (e, t) => {
|
|
|
3465
3467
|
return (t, n) => {
|
|
3466
3468
|
let r = ce("Page");
|
|
3467
3469
|
return T(), l(r, { title: e.title }, {
|
|
3468
|
-
default: O(() => [m(
|
|
3470
|
+
default: O(() => [m(Ao, { posts: e.posts }, null, 8, ["posts"])]),
|
|
3469
3471
|
_: 1
|
|
3470
3472
|
}, 8, ["title"]);
|
|
3471
3473
|
};
|
|
3472
3474
|
}
|
|
3473
|
-
}),
|
|
3475
|
+
}), Mo = { class: "sr-only" }, No = ["datetime"], Po = /* @__PURE__ */ g({
|
|
3474
3476
|
__name: "PostDate",
|
|
3475
3477
|
props: {
|
|
3476
3478
|
date: [Date, String],
|
|
@@ -3500,9 +3502,9 @@ var Ba = (e, t) => {
|
|
|
3500
3502
|
string: i(e, r.value)
|
|
3501
3503
|
};
|
|
3502
3504
|
});
|
|
3503
|
-
return (t, r) => (T(), d("dl", null, [f("dt",
|
|
3505
|
+
return (t, r) => (T(), d("dl", null, [f("dt", Mo, E(D(n)("posted_on")), 1), f("dd", { class: C(["font-medium leading-6", [e.textSize ? `text-${e.textSize}` : "text-base"]]) }, [f("time", { datetime: a.value.iso }, E(a.value.string), 9, No)], 2)]));
|
|
3504
3506
|
}
|
|
3505
|
-
}),
|
|
3507
|
+
}), Fo = /* @__PURE__ */ g({
|
|
3506
3508
|
__name: "StatusBadge",
|
|
3507
3509
|
props: {
|
|
3508
3510
|
backgroundColor: {
|
|
@@ -3552,24 +3554,24 @@ var Ba = (e, t) => {
|
|
|
3552
3554
|
e.rounded ? "rounded" : ""
|
|
3553
3555
|
]]) }, [se(t.$slots, "default")], 2));
|
|
3554
3556
|
}
|
|
3555
|
-
}),
|
|
3557
|
+
}), Io = { class: "flex flex-col p-4 component-border" }, Lo = { class: "flex flex-row justify-between items-center mb-4" }, Ro = ["href"], zo = { class: "flex flex-row" }, Bo = ["href"], Vo = ["href"], Ho = { class: "project-info" }, Uo = ["innerHTML"], Wo = { class: "flex flex-col justify-between" }, Go = {
|
|
3556
3558
|
key: 0,
|
|
3557
3559
|
class: "mb-3"
|
|
3558
|
-
},
|
|
3560
|
+
}, Ko = { key: 1 }, qo = { class: "mb-3" }, Jo = { class: "flex flex-wrap mb-3" }, Yo = { class: "text-end" }, Xo = ["href", "aria-label"], Zo = /* @__PURE__ */ g({
|
|
3559
3561
|
__name: "ProjectCard",
|
|
3560
3562
|
props: { project: {
|
|
3561
3563
|
type: Object,
|
|
3562
3564
|
required: !0
|
|
3563
3565
|
} },
|
|
3564
3566
|
setup(e) {
|
|
3565
|
-
let t = e, { t: n } = $(), r = c(() =>
|
|
3567
|
+
let t = e, { t: n } = $(), r = c(() => io(t.project.developmentStatus));
|
|
3566
3568
|
return (t, i) => {
|
|
3567
3569
|
let a = ce("Icon");
|
|
3568
|
-
return T(), d("div",
|
|
3569
|
-
f("div",
|
|
3570
|
+
return T(), d("div", Io, [
|
|
3571
|
+
f("div", Lo, [f("a", {
|
|
3570
3572
|
href: e.project.url,
|
|
3571
3573
|
class: "text-2xl font-bold leading-8 tracking-tight"
|
|
3572
|
-
}, E(e.project.title), 9,
|
|
3574
|
+
}, E(e.project.title), 9, Ro), f("div", zo, [e.project.showcaseUrl ? (T(), d("a", {
|
|
3573
3575
|
key: 0,
|
|
3574
3576
|
class: "mx-1 text-gray-500 hover:text-gray-600",
|
|
3575
3577
|
target: "_blank",
|
|
@@ -3578,7 +3580,7 @@ var Ba = (e, t) => {
|
|
|
3578
3580
|
}, [i[0] ||= f("span", { class: "sr-only" }, "external-link", -1), m(a, {
|
|
3579
3581
|
icon: "bi:box-arrow-up-right",
|
|
3580
3582
|
class: "text-dark dark:text-white ml-2"
|
|
3581
|
-
})], 8,
|
|
3583
|
+
})], 8, Bo)) : u("", !0), e.project.repositoryUrl ? (T(), d("a", {
|
|
3582
3584
|
key: 1,
|
|
3583
3585
|
class: "mx-1 text-gray-500 hover:text-gray-600",
|
|
3584
3586
|
target: "_blank",
|
|
@@ -3587,41 +3589,41 @@ var Ba = (e, t) => {
|
|
|
3587
3589
|
}, [i[1] ||= f("span", { class: "sr-only" }, "github", -1), m(a, {
|
|
3588
3590
|
icon: "bi:github",
|
|
3589
3591
|
class: "text-dark dark:text-white ml-2"
|
|
3590
|
-
})], 8,
|
|
3591
|
-
f("div",
|
|
3592
|
-
e.project.license ? (T(), d("div",
|
|
3592
|
+
})], 8, Vo)) : u("", !0)])]),
|
|
3593
|
+
f("div", Ho, [f("div", { innerHTML: e.project.excerpt }, null, 8, Uo), f("div", Wo, [
|
|
3594
|
+
e.project.license ? (T(), d("div", Go, [p(E(D(n)("license")) + ": ", 1), e.project.licenseUrl ? (T(), l(Qa, {
|
|
3593
3595
|
key: 0,
|
|
3594
3596
|
href: e.project.licenseUrl,
|
|
3595
3597
|
class: "link-alt"
|
|
3596
3598
|
}, {
|
|
3597
3599
|
default: O(() => [p(E(e.project.license), 1)]),
|
|
3598
3600
|
_: 1
|
|
3599
|
-
}, 8, ["href"])) : (T(), d("span",
|
|
3600
|
-
f("div",
|
|
3601
|
+
}, 8, ["href"])) : (T(), d("span", Ko, E(e.project.license), 1))])) : u("", !0),
|
|
3602
|
+
f("div", qo, [p(E(D(n)("development_status.title")) + ": ", 1), m(Fo, ne(b(r.value)), {
|
|
3601
3603
|
default: O(() => [p(E(t.$t(`development_status.${e.project.developmentStatus}`)), 1)]),
|
|
3602
3604
|
_: 1
|
|
3603
3605
|
}, 16)]),
|
|
3604
|
-
f("div",
|
|
3606
|
+
f("div", Jo, [(T(!0), d(o, null, oe(e.project.techs, (e) => (T(), l(vo, {
|
|
3605
3607
|
key: e,
|
|
3606
3608
|
text: e,
|
|
3607
3609
|
basePath: "/projects?tech="
|
|
3608
3610
|
}, null, 8, ["text"]))), 128))]),
|
|
3609
|
-
m(
|
|
3611
|
+
m(Po, {
|
|
3610
3612
|
date: e.project.date,
|
|
3611
3613
|
"text-size": "sm"
|
|
3612
3614
|
}, null, 8, ["date"])
|
|
3613
3615
|
])]),
|
|
3614
|
-
f("div",
|
|
3616
|
+
f("div", Yo, [f("a", {
|
|
3615
3617
|
href: e.project.url,
|
|
3616
3618
|
"aria-label": `Read ${e.project.title}`
|
|
3617
|
-
}, E(D(n)("button.read_more")) + " → ", 9,
|
|
3619
|
+
}, E(D(n)("button.read_more")) + " → ", 9, Xo)])
|
|
3618
3620
|
]);
|
|
3619
3621
|
};
|
|
3620
3622
|
}
|
|
3621
|
-
}),
|
|
3623
|
+
}), Qo = {
|
|
3622
3624
|
key: 0,
|
|
3623
3625
|
class: "grid grid-cols-1 lg:grid-cols-2 gap-4 mt-4"
|
|
3624
|
-
},
|
|
3626
|
+
}, $o = { key: 1 }, es = /* @__PURE__ */ g({
|
|
3625
3627
|
__name: "ProjectList",
|
|
3626
3628
|
props: { projects: {
|
|
3627
3629
|
type: Object,
|
|
@@ -3630,12 +3632,12 @@ var Ba = (e, t) => {
|
|
|
3630
3632
|
} },
|
|
3631
3633
|
setup(e) {
|
|
3632
3634
|
let { t } = $();
|
|
3633
|
-
return (n, r) => (T(), d(o, null, [e.projects.length > 0 ? (T(), d("div",
|
|
3635
|
+
return (n, r) => (T(), d(o, null, [e.projects.length > 0 ? (T(), d("div", Qo, [(T(!0), d(o, null, oe(e.projects, (e) => (T(), l(Zo, {
|
|
3634
3636
|
key: e?.url,
|
|
3635
3637
|
project: e
|
|
3636
|
-
}, null, 8, ["project"]))), 128))])) : u("", !0), e.projects.length === 0 ? (T(), d("p",
|
|
3638
|
+
}, null, 8, ["project"]))), 128))])) : u("", !0), e.projects.length === 0 ? (T(), d("p", $o, E(D(t)("no_post")), 1)) : u("", !0)], 64));
|
|
3637
3639
|
}
|
|
3638
|
-
}),
|
|
3640
|
+
}), ts = ["href"], ns = { class: "flex flex-row flex-wrap" }, rs = ["href"], is = /* @__PURE__ */ g({
|
|
3639
3641
|
__name: "ProjectsPage",
|
|
3640
3642
|
props: {
|
|
3641
3643
|
projectPage: {
|
|
@@ -3654,10 +3656,10 @@ var Ba = (e, t) => {
|
|
|
3654
3656
|
}
|
|
3655
3657
|
},
|
|
3656
3658
|
setup(e) {
|
|
3657
|
-
let t = e, { t: n } = $(), r = t.technology, i = typeof r == "string" && r.length > 0, a = (e) => !i || e.techs.some(
|
|
3659
|
+
let t = e, { t: n } = $(), r = t.technology, i = typeof r == "string" && r.length > 0, a = (e) => !i || e.techs.some(no(r)), s = c(() => t.projects.filter(a)), p = c(() => [...new Set(t.projects.flatMap((e) => e.techs))].map((e) => ({
|
|
3658
3660
|
name: e,
|
|
3659
|
-
slug:
|
|
3660
|
-
selected: i &&
|
|
3661
|
+
slug: to(e),
|
|
3662
|
+
selected: i && to(e) === r
|
|
3661
3663
|
})).sort((e, t) => t.selected === e.selected ? 0 : t.selected ? 1 : -1));
|
|
3662
3664
|
return (t, r) => {
|
|
3663
3665
|
let a = ce("Page");
|
|
@@ -3665,18 +3667,18 @@ var Ba = (e, t) => {
|
|
|
3665
3667
|
default: O(() => [f("div", null, [f("p", null, [r[0] ||= f("span", { class: "mr-2" }, "Technologies", -1), D(i) ? (T(), d("a", {
|
|
3666
3668
|
key: 0,
|
|
3667
3669
|
href: e.projectPage
|
|
3668
|
-
}, "Reset", 8,
|
|
3670
|
+
}, "Reset", 8, ts)) : u("", !0)]), f("p", ns, [(T(!0), d(o, null, oe(p.value, (e) => (T(), d("a", {
|
|
3669
3671
|
class: C(["border rounded-md m-1 p-1", e.selected ? "bg-primary text-white! border-primary" : ""]),
|
|
3670
3672
|
href: `/projects-by-tech/${e.slug}`
|
|
3671
|
-
}, E(e.name), 11,
|
|
3673
|
+
}, E(e.name), 11, rs))), 256))])]), m(es, { projects: s.value }, null, 8, ["projects"])]),
|
|
3672
3674
|
_: 1
|
|
3673
3675
|
}, 8, ["title"]);
|
|
3674
3676
|
};
|
|
3675
3677
|
}
|
|
3676
|
-
}),
|
|
3678
|
+
}), as = { class: "flex flex-wrap pt-4" }, os = {
|
|
3677
3679
|
key: 0,
|
|
3678
3680
|
class: "mt-2 mb-2 mr-5"
|
|
3679
|
-
},
|
|
3681
|
+
}, ss = /* @__PURE__ */ g({
|
|
3680
3682
|
__name: "TagsPage",
|
|
3681
3683
|
props: { posts: {
|
|
3682
3684
|
type: Object,
|
|
@@ -3684,15 +3686,15 @@ var Ba = (e, t) => {
|
|
|
3684
3686
|
default: []
|
|
3685
3687
|
} },
|
|
3686
3688
|
setup(e) {
|
|
3687
|
-
let t = e, { t: n } = $(), r = c(() =>
|
|
3689
|
+
let t = e, { t: n } = $(), r = c(() => ao(t.posts.flatMap((e) => e.tags)));
|
|
3688
3690
|
return (e, t) => {
|
|
3689
3691
|
let i = ce("Page");
|
|
3690
3692
|
return T(), l(i, { title: D(n)("tags") }, {
|
|
3691
|
-
default: O(() => [f("div",
|
|
3693
|
+
default: O(() => [f("div", as, [Object.keys(r.value).length === 0 ? (T(), d("div", os, E(D(n)("no_tag")), 1)) : u("", !0), (T(!0), d(o, null, oe(r.value, (e, t) => (T(), l(eo, {
|
|
3692
3694
|
key: t,
|
|
3693
3695
|
title: t,
|
|
3694
3696
|
count: e,
|
|
3695
|
-
href: `/tags/${D(
|
|
3697
|
+
href: `/tags/${D(to)(t)}`
|
|
3696
3698
|
}, null, 8, [
|
|
3697
3699
|
"title",
|
|
3698
3700
|
"count",
|
|
@@ -3702,7 +3704,7 @@ var Ba = (e, t) => {
|
|
|
3702
3704
|
}, 8, ["title"]);
|
|
3703
3705
|
};
|
|
3704
3706
|
}
|
|
3705
|
-
}),
|
|
3707
|
+
}), cs = Oa({
|
|
3706
3708
|
legacy: !1,
|
|
3707
3709
|
locale: "en",
|
|
3708
3710
|
messages: {
|
|
@@ -3757,14 +3759,14 @@ var Ba = (e, t) => {
|
|
|
3757
3759
|
}
|
|
3758
3760
|
}
|
|
3759
3761
|
}
|
|
3760
|
-
}),
|
|
3762
|
+
}), ls = {
|
|
3761
3763
|
extends: t,
|
|
3762
|
-
Layout:
|
|
3764
|
+
Layout: qa,
|
|
3763
3765
|
enhanceApp({ app: t }) {
|
|
3764
|
-
t.component("Icon", e), t.component("Page",
|
|
3766
|
+
t.component("Icon", e), t.component("Page", _o), t.component("PostsPage", jo), t.component("HomePage", po), t.component("ProjectsPage", is), t.component("CategoriesPage", fo), t.component("TagsPage", ss), t.component("ArchivesPage", co), t.use(cs);
|
|
3765
3767
|
},
|
|
3766
3768
|
setup() {
|
|
3767
|
-
fe(), me(
|
|
3769
|
+
fe(), me(cs);
|
|
3768
3770
|
}
|
|
3769
3771
|
};
|
|
3770
|
-
export {
|
|
3772
|
+
export { ls as default, pe as matchLocale, fe as useHtmlLang, k as usePageLang, me as usePageLocale, ro as usePostDate, io as useProjectStatusStyle, ao as useRank, to as useSlug, no as useSlugFilter };
|
|
@@ -10,6 +10,14 @@ export declare interface CustomDonationBaseConfig {
|
|
|
10
10
|
donationBaseUrl: string;
|
|
11
11
|
donationButtonImage: string;
|
|
12
12
|
donationButtonStyle?: Record<string, string>;
|
|
13
|
+
/**
|
|
14
|
+
* Intrinsic image dimensions, used for width/height attributes so the
|
|
15
|
+
* browser can reserve layout space before the image loads.
|
|
16
|
+
*/
|
|
17
|
+
donationButtonSize?: {
|
|
18
|
+
width: number;
|
|
19
|
+
height: number;
|
|
20
|
+
};
|
|
13
21
|
}
|
|
14
22
|
export declare interface CustomDonationConfig extends CustomDonationBaseConfig {
|
|
15
23
|
donationId: string;
|
package/dist/client/styles.css
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
.VPFooter[data-v-84ab49a2]{z-index:var(--vp-z-index-footer);border-top:1px solid var(--vp-c-gutter);background-color:var(--vp-c-bg);padding:32px 24px;position:relative}.VPFooter.has-sidebar[data-v-84ab49a2]{display:none}.VPFooter[data-v-84ab49a2] a{text-underline-offset:2px;text-decoration-line:underline;transition:none}.VPFooter[data-v-84ab49a2] a:hover{color:var(--vp-c-text-1)}@media (width>=768px){.VPFooter[data-v-84ab49a2]{padding:32px}}.container[data-v-84ab49a2]{max-width:var(--vp-layout-max-width);text-align:center;margin:0 auto}.message[data-v-84ab49a2],.copyright[data-v-84ab49a2]{color:var(--vp-c-text-2);font-size:14px;font-weight:500;line-height:24px}.divider[data-v-6a2933ea]{background-color:var(--vp-c-divider);content:"";width:1px;height:24px;margin-left:16px;margin-right:8px}.VPLocaleSwitcher[data-v-6a2933ea]{width:36px;height:36px;color:var(--vp-c-text-2);justify-content:center;align-items:center;transition:none;display:flex}.VPLocaleSwitcher[data-v-6a2933ea]:hover{color:var(--vp-c-text-1);transition:none}.VPLocaleSwitcher[data-v-6a2933ea]>svg{fill:currentColor;width:20px;height:20px}:root{--vp-z-index-aside:25}.VPDoc.has-aside .aside-container{z-index:var(--vp-z-index-aside)}.medium-zoom--opened .medium-zoom-overlay{z-index:calc(var(--vp-z-index-aside) + 1)}.medium-zoom-image--opened{z-index:calc(var(--vp-z-index-aside) + 2)}@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-space-y-reverse:0;--tw-space-x-reverse:0;--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial}}}@layer theme{:root,:host{--font-sans:-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--font-mono:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--color-red-100:oklch(93.6% .032 17.717);--color-red-800:oklch(44.4% .177 26.899);--color-yellow-100:oklch(97.3% .071 103.193);--color-yellow-800:oklch(47.6% .114 61.907);--color-green-100:oklch(96.2% .044 156.743);--color-green-800:oklch(44.8% .119 151.328);--color-blue-100:oklch(93.2% .032 255.585);--color-blue-400:oklch(70.7% .165 254.624);--color-blue-500:oklch(62.3% .214 259.815);--color-blue-800:oklch(42.4% .199 265.638);--color-gray-100:oklch(96.7% .003 264.542);--color-gray-200:oklch(92.8% .006 264.531);--color-gray-300:oklch(87.2% .01 258.338);--color-gray-500:oklch(55.1% .027 264.364);--color-gray-600:oklch(44.6% .03 256.802);--color-gray-700:oklch(37.3% .034 259.733);--color-gray-900:oklch(21% .034 264.665);--color-white:#fff;--spacing:.25rem;--text-xs:.75rem;--text-xs--line-height:calc(1 / .75);--text-sm:.875rem;--text-sm--line-height:calc(1.25 / .875);--text-base:1rem;--text-base--line-height:calc(1.5 / 1);--text-2xl:1.5rem;--text-2xl--line-height:calc(2 / 1.5);--text-3xl:1.875rem;--text-3xl--line-height:calc(2.25 / 1.875);--text-4xl:2.25rem;--text-4xl--line-height:calc(2.5 / 2.25);--text-6xl:3.75rem;--text-6xl--line-height:1;--font-weight-normal:400;--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--font-weight-extrabold:800;--tracking-tight:-.025em;--radius-md:.375rem;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono);--color-primary:#3b82f6;--color-primary-alt:#1d4ed8;--color-primary-alt-dark:#93c5fd;--color-secondary:#ef4444;--color-secondary-dark:#eab308}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring:where(:not(iframe)){outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab, red, red)){::placeholder{color:color-mix(in oklab, currentcolor 50%, transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components;@layer utilities{.sr-only{clip-path:inset(50%);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.container{width:100%}@media (width>=40rem){.container{max-width:40rem}}@media (width>=48rem){.container{max-width:48rem}}@media (width>=64rem){.container{max-width:64rem}}@media (width>=80rem){.container{max-width:80rem}}@media (width>=96rem){.container{max-width:96rem}}.m-1{margin:var(--spacing)}.mx-1{margin-inline:var(--spacing)}.ms-2{margin-inline-start:calc(var(--spacing) * 2)}.mt-2{margin-top:calc(var(--spacing) * 2)}.mt-4{margin-top:calc(var(--spacing) * 4)}.mr-2{margin-right:calc(var(--spacing) * 2)}.mr-5{margin-right:calc(var(--spacing) * 5)}.mb-2{margin-bottom:calc(var(--spacing) * 2)}.mb-3{margin-bottom:calc(var(--spacing) * 3)}.mb-4{margin-bottom:calc(var(--spacing) * 4)}.mb-6{margin-bottom:calc(var(--spacing) * 6)}.ml-2{margin-left:calc(var(--spacing) * 2)}.block{display:block}.flex{display:flex}.grid{display:grid}.inline{display:inline}.inline-flex{display:inline-flex}.h-4{height:calc(var(--spacing) * 4)}.w-4{width:calc(var(--spacing) * 4)}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.flex-col{flex-direction:column}.flex-row{flex-direction:row}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.gap-4{gap:calc(var(--spacing) * 4)}:where(.space-y-2>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 2) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 2) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-4>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 4) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 4) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-x-1>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(var(--spacing) * var(--tw-space-x-reverse));margin-inline-end:calc(var(--spacing) * calc(1 - var(--tw-space-x-reverse)))}:where(.space-x-4>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing) * 4) * var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing) * 4) * calc(1 - var(--tw-space-x-reverse)))}.component-border{border-radius:var(--radius-md);border-style:var(--tw-border-style);border-width:1px;border-color:var(--color-gray-500)}@media (hover:hover){.component-border:hover{border-color:var(--color-secondary)}.component-border:where(.dark,.dark *):hover{border-color:var(--color-secondary-dark)}}.rounded{border-radius:.25rem}.rounded-md{border-radius:var(--radius-md)}.border{border-style:var(--tw-border-style);border-width:1px}.border-primary{border-color:var(--color-primary)}.bg-blue-100{background-color:var(--color-blue-100)}.bg-gray-300{background-color:var(--color-gray-300)}.bg-green-100{background-color:var(--color-green-100)}.bg-primary{background-color:var(--color-primary)}.bg-red-100{background-color:var(--color-red-100)}.bg-yellow-100{background-color:var(--color-yellow-100)}.fill-current{fill:currentColor}.p-1{padding:var(--spacing)}.p-2\.5{padding:calc(var(--spacing) * 2.5)}.p-4{padding:calc(var(--spacing) * 4)}.px-2\.5{padding-inline:calc(var(--spacing) * 2.5)}.px-5{padding-inline:calc(var(--spacing) * 5)}.py-0\.5{padding-block:calc(var(--spacing) * .5)}.py-2\.5{padding-block:calc(var(--spacing) * 2.5)}.py-4{padding-block:calc(var(--spacing) * 4)}.pt-4{padding-top:calc(var(--spacing) * 4)}.pt-6{padding-top:calc(var(--spacing) * 6)}.pb-8{padding-bottom:calc(var(--spacing) * 8)}.pl-4{padding-left:calc(var(--spacing) * 4)}.pl-8{padding-left:calc(var(--spacing) * 8)}.text-center{text-align:center}.text-end{text-align:end}.text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.text-3xl{font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height))}.text-6xl{font-size:var(--text-6xl);line-height:var(--tw-leading,var(--text-6xl--line-height))}.text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-sm\/\[32px\]{font-size:var(--text-sm);line-height:32px}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.leading-6{--tw-leading:calc(var(--spacing) * 6);line-height:calc(var(--spacing) * 6)}.leading-8{--tw-leading:calc(var(--spacing) * 8);line-height:calc(var(--spacing) * 8)}.leading-9{--tw-leading:calc(var(--spacing) * 9);line-height:calc(var(--spacing) * 9)}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.font-extrabold{--tw-font-weight:var(--font-weight-extrabold);font-weight:var(--font-weight-extrabold)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-normal{--tw-font-weight:var(--font-weight-normal);font-weight:var(--font-weight-normal)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-tight{--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.link-alt{text-decoration-line:none!important}@media (hover:hover){.link-alt:hover{color:var(--color-secondary)!important}.link-alt:where(.dark,.dark *):hover{color:var(--color-secondary-dark)!important}}.link-alt{color:var(--color-primary-alt)!important}.link-alt:where(.dark,.dark *){color:var(--color-primary-alt-dark)!important}.link{text-decoration-line:none}@media (hover:hover){.link:hover{color:var(--color-secondary)}.link:where(.dark,.dark *):hover{color:var(--color-secondary-dark)}}.text-blue-800{color:var(--color-blue-800)}.text-gray-500{color:var(--color-gray-500)}.text-gray-700{color:var(--color-gray-700)}.text-gray-900{color:var(--color-gray-900)}.text-green-800{color:var(--color-green-800)}.text-red-800{color:var(--color-red-800)}.text-white{color:var(--color-white)}.text-white\!{color:var(--color-white)!important}.text-yellow-800{color:var(--color-yellow-800)}.uppercase{text-transform:uppercase}.transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}@media (hover:hover){.hover\:text-blue-500:hover{color:var(--color-blue-500)}.hover\:text-gray-600:hover{color:var(--color-gray-600)}}@media (width>=40rem){.sm\:text-4xl{font-size:var(--text-4xl);line-height:var(--tw-leading,var(--text-4xl--line-height))}.sm\:leading-10{--tw-leading:calc(var(--spacing) * 10);line-height:calc(var(--spacing) * 10)}}@media (width>=48rem){:where(.md\:space-y-5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 5) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 5) * calc(1 - var(--tw-space-y-reverse)))}.md\:text-6xl{font-size:var(--text-6xl);line-height:var(--tw-leading,var(--text-6xl--line-height))}.md\:leading-14{--tw-leading:calc(var(--spacing) * 14);line-height:calc(var(--spacing) * 14)}}@media (width>=64rem){.lg\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}}.dark\:bg-blue-800:where(.dark,.dark *){background-color:var(--color-blue-800)}.dark\:bg-gray-700:where(.dark,.dark *){background-color:var(--color-gray-700)}.dark\:bg-green-800:where(.dark,.dark *){background-color:var(--color-green-800)}.dark\:bg-red-800:where(.dark,.dark *){background-color:var(--color-red-800)}.dark\:bg-yellow-800:where(.dark,.dark *){background-color:var(--color-yellow-800)}.dark\:text-blue-100:where(.dark,.dark *){color:var(--color-blue-100)}.dark\:text-gray-100:where(.dark,.dark *){color:var(--color-gray-100)}.dark\:text-gray-200:where(.dark,.dark *){color:var(--color-gray-200)}.dark\:text-green-100:where(.dark,.dark *){color:var(--color-green-100)}.dark\:text-red-100:where(.dark,.dark *){color:var(--color-red-100)}.dark\:text-white:where(.dark,.dark *){color:var(--color-white)}.dark\:text-yellow-100:where(.dark,.dark *){color:var(--color-yellow-100)}@media (hover:hover){.dark\:hover\:text-blue-400:where(.dark,.dark *):hover{color:var(--color-blue-400)}}}:root{--vp-c-brand-1:var(--color-primary)}.vp-doc a{text-decoration-line:none}@media (hover:hover){.vp-doc a:hover{color:var(--color-secondary)}.vp-doc a:where(.dark,.dark *):hover{color:var(--color-secondary-dark)}}:root{--vp-font-family-base:"Inter", ui-sans-serif, system-ui, sans-serif;--vp-font-family-mono:"JetBrains Mono", ui-monospace, SFMono-Regular, Menlo, monospace;--accent:#644ac9;--accent-soft:#8668e0;--green:#14710a;--vp-c-bg:#fffbeb;--vp-c-bg-alt:#f5f1df;--vp-c-bg-elv:#ece8d3;--vp-c-bg-soft:#f7f3e1;--vp-c-divider:#d9d4bb;--vp-c-gutter:#f5f1df;--vp-c-text-1:#1f1f1f;--vp-c-text-2:#4b4b52;--vp-c-text-3:#6c664b;--vp-c-brand-1:#644ac9;--vp-c-brand-2:#7459d8;--vp-c-brand-3:#644ac9;--vp-c-brand-soft:#644ac91f;--color-primary:#644ac9;--color-primary-alt:#4f39a8;--color-primary-alt-dark:#8668e0;--color-secondary:#3b2a8a;--color-secondary-dark:#3b2a8a;--color-green-100:#d4f2cf;--color-green-800:#14710a}.dark{--accent:#bd93f9;--accent-soft:#d6bcfa;--green:#50fa7b;--color-primary:#9d6ff0;--color-primary-alt:#8a5cd8;--color-primary-alt-dark:#d6bcfa;--color-secondary:#f8f8f2;--color-secondary-dark:#f8f8f2;--color-green-100:#50fa7b;--color-green-800:#1f4d33;--vp-c-bg:#282a36;--vp-c-bg-alt:#21222c;--vp-c-bg-elv:#343746;--vp-c-bg-soft:#2f3241;--vp-c-divider:#44475a;--vp-c-gutter:#21222c;--vp-c-text-1:#f8f8f2;--vp-c-text-2:#b6b8c9;--vp-c-text-3:#8e94b3;--vp-c-brand-1:var(--accent);--vp-c-brand-2:var(--accent);--vp-c-brand-3:#9d6ff0;--vp-c-brand-soft:#bd93f929}body{letter-spacing:-.005em}.VPNav .VPNavBar,.VPNavBar .content-body{-webkit-backdrop-filter:saturate(180%)blur(12px);backdrop-filter:saturate(180%)blur(12px)}.VPNavBar:not(.has-sidebar):not(.home.top){background-color:#fffbebd9}.dark .VPNavBar:not(.has-sidebar):not(.home.top){background-color:#282a36cc}.component-border{background:var(--vp-c-bg-soft);border:1px solid var(--vp-c-divider);border-radius:0;transition:none}.component-border:hover,.component-border:focus-within{border-color:var(--accent)}@supports (color:color-mix(in lab, red, red)){.component-border:hover,.component-border:focus-within{border-color:color-mix(in srgb, var(--accent) 55%, transparent)}}.component-border:hover,.component-border:focus-within{background:linear-gradient(180deg, var(--accent), var(--vp-c-bg-soft))}@supports (color:color-mix(in lab, red, red)){.component-border:hover,.component-border:focus-within{background:linear-gradient(180deg, color-mix(in srgb, var(--accent) 7%, var(--vp-c-bg-soft)), var(--vp-c-bg-soft))}}.component-border:hover,.component-border:focus-within{box-shadow:0 0 0 1px var(--accent), 0 8px 30px -12px var(--accent)}@supports (color:color-mix(in lab, red, red)){.component-border:hover,.component-border:focus-within{box-shadow:0 0 0 1px color-mix(in srgb, var(--accent) 18%, transparent), 0 8px 30px -12px color-mix(in srgb, var(--accent) 45%, transparent)}}.component-border>.pl-8 a.text-2xl,.component-border a.text-2xl{color:var(--vp-c-text-1);letter-spacing:-.02em;font-weight:600}.component-border a.text-2xl{transition:none}.component-border a.text-2xl:hover{color:var(--accent);text-shadow:0 0 18px var(--accent)}@supports (color:color-mix(in lab, red, red)){.component-border a.text-2xl:hover{text-shadow:0 0 18px color-mix(in srgb, var(--accent) 45%, transparent)}}.component-border a.text-2xl:active{color:var(--accent-soft);text-shadow:none}.component-border .text-6xl{font-family:var(--vp-font-family-mono);color:var(--vp-c-text-1);font-size:2.5rem;font-weight:500;line-height:1}a.link-alt.uppercase,.component-border a.uppercase{border:1px solid var(--vp-c-divider);background:var(--vp-c-bg-elv);letter-spacing:.04em;border-radius:0;margin-bottom:4px;padding:2px 10px;font-size:.7rem;font-weight:500;transition:none;display:inline-block}a.link-alt.uppercase:hover{border-color:var(--accent);background:var(--accent)}@supports (color:color-mix(in lab, red, red)){a.link-alt.uppercase:hover{background:color-mix(in srgb, var(--accent) 16%, var(--vp-c-bg-elv))}}a.link-alt.uppercase:active{background:var(--accent)}@supports (color:color-mix(in lab, red, red)){a.link-alt.uppercase:active{background:color-mix(in srgb, var(--accent) 30%, var(--vp-c-bg-elv))}}a.link-alt.uppercase:active{transform:translateY(1px)}a.component-border{border-radius:0}.vp-doc a,.vp-doc a:hover{color:var(--vp-c-brand-1);font-weight:500;text-decoration:none}.vp-doc a:hover{color:var(--vp-c-brand-2)}a,a:hover,.vp-doc a,.vp-doc a:hover,.vp-doc .header-anchor{text-decoration:none!important}.vp-doc h1{letter-spacing:-.03em;font-weight:700}.vp-doc h2{letter-spacing:-.02em;border-top-color:var(--vp-c-divider)}.vp-doc p,.vp-doc li{line-height:1.75}.vp-doc :not(pre)>code{color:var(--green);font-family:var(--vp-font-family-mono);border:1px solid var(--vp-c-divider);border-radius:0;font-size:.85em}.vp-doc div[class*=language-]{border:1px solid var(--vp-c-divider);border-radius:0}a:focus-visible,button:focus-visible{outline:2px solid var(--accent);outline-offset:2px;border-radius:0}.home-hero{padding:56px 0 8px}.home-hero h1{letter-spacing:-.04em;margin:0;font-size:clamp(2rem,5vw,3.25rem);font-weight:700;line-height:1.1}.home-hero h1 span{background:linear-gradient(90deg, var(--vp-c-text-1), var(--accent-soft) 70%, var(--accent));color:#0000;-webkit-background-clip:text;background-clip:text}.home-hero p{max-width:36rem;color:var(--vp-c-text-2);margin:16px 0 0;font-size:1.1rem;line-height:1.6}@media (prefers-reduced-motion:reduce){.component-border,a.link-alt.uppercase{transition:none}}[class*=rounded],.VPNavBarSearchButton,.vp-doc [class*=language-],.vp-doc :not(pre)>code,.vp-doc img,.vp-doc table,.custom-block,.VPLocalSearchBox .results .result,.VPSkipLink,.keys,button.copy,.VPSwitch,.VPSwitch .check{border-radius:0!important}p.flex.flex-wrap>a.border.m-1{margin:.25rem;padding:.25rem .875rem;transition:none}p.flex.flex-wrap>a.border.m-1:hover{border-color:var(--accent);background-color:var(--accent)}@supports (color:color-mix(in lab, red, red)){p.flex.flex-wrap>a.border.m-1:hover{background-color:color-mix(in srgb, var(--accent) 14%, transparent)}}@media (width<=639px){.component-border.flex:has(>.text-center){flex-direction:column}.component-border>.text-center{text-align:left;align-items:baseline;gap:.5rem;margin-bottom:.5rem;display:flex;min-width:0!important}.component-border>.text-center .text-6xl{font-size:1.75rem}.component-border>.pl-8{padding-left:0}p.flex.flex-wrap:has(>a.border.m-1){-webkit-overflow-scrolling:touch;scrollbar-width:none;flex-wrap:nowrap;margin-inline:-.25rem;padding-bottom:.25rem;overflow-x:auto}p.flex.flex-wrap:has(>a.border.m-1)::-webkit-scrollbar{display:none}p.flex.flex-wrap>a.border.m-1{white-space:nowrap;flex:none;align-items:center;min-height:2.25rem;display:inline-flex}div.pt-6.pb-8{padding-top:.75rem;padding-bottom:.5rem}div.pt-6.pb-8>h1.mb-6{margin-bottom:.75rem}a.link-alt.uppercase,.component-border a.uppercase{margin-bottom:6px;padding:6px 12px}}div.flex.flex-wrap.py-4.items-center.justify-center:has(>a[href*=ko-fi\.com]){gap:12px}div.flex.flex-wrap.py-4.items-center.justify-center:has(>a[href*=ko-fi\.com])>a{justify-content:center;align-items:center;width:200px;height:56px;display:flex;margin:0!important}div.flex.flex-wrap.py-4.items-center.justify-center:has(>a[href*=ko-fi\.com])>a img{-o-object-fit:contain;object-fit:contain;max-width:100%;max-height:100%}div.flex.flex-wrap.py-4.items-center.justify-center.space-y-4:has(>a[href*=ko-fi\.com]){flex-flow:column}div.flex.flex-wrap.py-4.items-center.justify-center.space-x-4:has(>a[href*=ko-fi\.com]){grid-template-columns:repeat(2,168px);justify-content:center;gap:12px;display:grid}div.flex.flex-wrap.py-4.items-center.justify-center.space-x-4:has(>a[href*=ko-fi\.com])>a{width:168px;height:52px}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-space-x-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}
|
|
1
|
+
.VPFooter[data-v-6216a7be]{z-index:var(--vp-z-index-footer);border-top:1px solid var(--vp-c-gutter);background-color:var(--vp-c-bg);padding:32px 24px;position:relative}.VPFooter.has-sidebar[data-v-6216a7be]{display:none}.VPFooter[data-v-6216a7be] a{text-underline-offset:2px;text-decoration-line:underline;transition:none}.VPFooter[data-v-6216a7be] a:hover{color:var(--vp-c-text-1)}@media (width>=768px){.VPFooter[data-v-6216a7be]{padding:32px}}.container[data-v-6216a7be]{max-width:var(--vp-layout-max-width);text-align:center;margin:0 auto}.message[data-v-6216a7be],.copyright[data-v-6216a7be]{color:var(--vp-c-text-2);font-size:14px;font-weight:500;line-height:24px}.divider[data-v-871d7d08]{background-color:var(--vp-c-divider);content:"";width:1px;height:24px;margin-left:16px;margin-right:8px}.VPLocaleSwitcher[data-v-871d7d08]{width:36px;height:36px;color:var(--vp-c-text-2);justify-content:center;align-items:center;transition:none;display:flex}.VPLocaleSwitcher[data-v-871d7d08]:hover{color:var(--vp-c-text-1);transition:none}.VPLocaleSwitcher[data-v-871d7d08]>svg{fill:currentColor;width:20px;height:20px}:root{--vp-z-index-aside:25}.VPDoc.has-aside .aside-container{z-index:var(--vp-z-index-aside)}.medium-zoom--opened .medium-zoom-overlay{z-index:calc(var(--vp-z-index-aside) + 1)}.medium-zoom-image--opened{z-index:calc(var(--vp-z-index-aside) + 2)}@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-space-y-reverse:0;--tw-space-x-reverse:0;--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial}}}@layer theme{:root,:host{--font-sans:-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--font-mono:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--color-red-100:oklch(93.6% .032 17.717);--color-red-800:oklch(44.4% .177 26.899);--color-yellow-100:oklch(97.3% .071 103.193);--color-yellow-800:oklch(47.6% .114 61.907);--color-green-100:oklch(96.2% .044 156.743);--color-green-800:oklch(44.8% .119 151.328);--color-blue-100:oklch(93.2% .032 255.585);--color-blue-400:oklch(70.7% .165 254.624);--color-blue-500:oklch(62.3% .214 259.815);--color-blue-800:oklch(42.4% .199 265.638);--color-gray-100:oklch(96.7% .003 264.542);--color-gray-200:oklch(92.8% .006 264.531);--color-gray-300:oklch(87.2% .01 258.338);--color-gray-500:oklch(55.1% .027 264.364);--color-gray-600:oklch(44.6% .03 256.802);--color-gray-700:oklch(37.3% .034 259.733);--color-gray-900:oklch(21% .034 264.665);--color-white:#fff;--spacing:.25rem;--text-xs:.75rem;--text-xs--line-height:calc(1 / .75);--text-sm:.875rem;--text-sm--line-height:calc(1.25 / .875);--text-base:1rem;--text-base--line-height:calc(1.5 / 1);--text-2xl:1.5rem;--text-2xl--line-height:calc(2 / 1.5);--text-3xl:1.875rem;--text-3xl--line-height:calc(2.25 / 1.875);--text-4xl:2.25rem;--text-4xl--line-height:calc(2.5 / 2.25);--text-6xl:3.75rem;--text-6xl--line-height:1;--font-weight-normal:400;--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--font-weight-extrabold:800;--tracking-tight:-.025em;--radius-md:.375rem;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono);--color-primary:#3b82f6;--color-primary-alt:#1d4ed8;--color-primary-alt-dark:#93c5fd;--color-secondary:#ef4444;--color-secondary-dark:#eab308}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring:where(:not(iframe)){outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab, red, red)){::placeholder{color:color-mix(in oklab, currentcolor 50%, transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components;@layer utilities{.sr-only{clip-path:inset(50%);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.container{width:100%}@media (width>=40rem){.container{max-width:40rem}}@media (width>=48rem){.container{max-width:48rem}}@media (width>=64rem){.container{max-width:64rem}}@media (width>=80rem){.container{max-width:80rem}}@media (width>=96rem){.container{max-width:96rem}}.m-1{margin:var(--spacing)}.mx-1{margin-inline:var(--spacing)}.ms-2{margin-inline-start:calc(var(--spacing) * 2)}.mt-2{margin-top:calc(var(--spacing) * 2)}.mt-4{margin-top:calc(var(--spacing) * 4)}.mr-2{margin-right:calc(var(--spacing) * 2)}.mr-5{margin-right:calc(var(--spacing) * 5)}.mb-2{margin-bottom:calc(var(--spacing) * 2)}.mb-3{margin-bottom:calc(var(--spacing) * 3)}.mb-4{margin-bottom:calc(var(--spacing) * 4)}.mb-6{margin-bottom:calc(var(--spacing) * 6)}.ml-2{margin-left:calc(var(--spacing) * 2)}.block{display:block}.flex{display:flex}.grid{display:grid}.inline{display:inline}.inline-flex{display:inline-flex}.h-4{height:calc(var(--spacing) * 4)}.w-4{width:calc(var(--spacing) * 4)}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.flex-col{flex-direction:column}.flex-row{flex-direction:row}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.gap-4{gap:calc(var(--spacing) * 4)}:where(.space-y-2>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 2) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 2) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-4>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 4) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 4) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-x-1>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(var(--spacing) * var(--tw-space-x-reverse));margin-inline-end:calc(var(--spacing) * calc(1 - var(--tw-space-x-reverse)))}:where(.space-x-4>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing) * 4) * var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing) * 4) * calc(1 - var(--tw-space-x-reverse)))}.component-border{border-radius:var(--radius-md);border-style:var(--tw-border-style);border-width:1px;border-color:var(--color-gray-500)}@media (hover:hover){.component-border:hover{border-color:var(--color-secondary)}.component-border:where(.dark,.dark *):hover{border-color:var(--color-secondary-dark)}}.rounded{border-radius:.25rem}.rounded-md{border-radius:var(--radius-md)}.border{border-style:var(--tw-border-style);border-width:1px}.border-primary{border-color:var(--color-primary)}.bg-blue-100{background-color:var(--color-blue-100)}.bg-gray-300{background-color:var(--color-gray-300)}.bg-green-100{background-color:var(--color-green-100)}.bg-primary{background-color:var(--color-primary)}.bg-red-100{background-color:var(--color-red-100)}.bg-yellow-100{background-color:var(--color-yellow-100)}.fill-current{fill:currentColor}.p-1{padding:var(--spacing)}.p-2\.5{padding:calc(var(--spacing) * 2.5)}.p-4{padding:calc(var(--spacing) * 4)}.px-2\.5{padding-inline:calc(var(--spacing) * 2.5)}.px-5{padding-inline:calc(var(--spacing) * 5)}.py-0\.5{padding-block:calc(var(--spacing) * .5)}.py-2\.5{padding-block:calc(var(--spacing) * 2.5)}.py-4{padding-block:calc(var(--spacing) * 4)}.pt-4{padding-top:calc(var(--spacing) * 4)}.pt-6{padding-top:calc(var(--spacing) * 6)}.pb-8{padding-bottom:calc(var(--spacing) * 8)}.pl-4{padding-left:calc(var(--spacing) * 4)}.pl-8{padding-left:calc(var(--spacing) * 8)}.text-center{text-align:center}.text-end{text-align:end}.text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.text-3xl{font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height))}.text-6xl{font-size:var(--text-6xl);line-height:var(--tw-leading,var(--text-6xl--line-height))}.text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-sm\/\[32px\]{font-size:var(--text-sm);line-height:32px}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.leading-6{--tw-leading:calc(var(--spacing) * 6);line-height:calc(var(--spacing) * 6)}.leading-8{--tw-leading:calc(var(--spacing) * 8);line-height:calc(var(--spacing) * 8)}.leading-9{--tw-leading:calc(var(--spacing) * 9);line-height:calc(var(--spacing) * 9)}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.font-extrabold{--tw-font-weight:var(--font-weight-extrabold);font-weight:var(--font-weight-extrabold)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-normal{--tw-font-weight:var(--font-weight-normal);font-weight:var(--font-weight-normal)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-tight{--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.link-alt{text-decoration-line:none!important}@media (hover:hover){.link-alt:hover{color:var(--color-secondary)!important}.link-alt:where(.dark,.dark *):hover{color:var(--color-secondary-dark)!important}}.link-alt{color:var(--color-primary-alt)!important}.link-alt:where(.dark,.dark *){color:var(--color-primary-alt-dark)!important}.link{text-decoration-line:none}@media (hover:hover){.link:hover{color:var(--color-secondary)}.link:where(.dark,.dark *):hover{color:var(--color-secondary-dark)}}.text-blue-800{color:var(--color-blue-800)}.text-gray-500{color:var(--color-gray-500)}.text-gray-700{color:var(--color-gray-700)}.text-gray-900{color:var(--color-gray-900)}.text-green-800{color:var(--color-green-800)}.text-red-800{color:var(--color-red-800)}.text-white{color:var(--color-white)}.text-white\!{color:var(--color-white)!important}.text-yellow-800{color:var(--color-yellow-800)}.uppercase{text-transform:uppercase}.transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}@media (hover:hover){.hover\:text-blue-500:hover{color:var(--color-blue-500)}.hover\:text-gray-600:hover{color:var(--color-gray-600)}}@media (width>=40rem){.sm\:text-4xl{font-size:var(--text-4xl);line-height:var(--tw-leading,var(--text-4xl--line-height))}.sm\:leading-10{--tw-leading:calc(var(--spacing) * 10);line-height:calc(var(--spacing) * 10)}}@media (width>=48rem){:where(.md\:space-y-5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 5) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 5) * calc(1 - var(--tw-space-y-reverse)))}.md\:text-6xl{font-size:var(--text-6xl);line-height:var(--tw-leading,var(--text-6xl--line-height))}.md\:leading-14{--tw-leading:calc(var(--spacing) * 14);line-height:calc(var(--spacing) * 14)}}@media (width>=64rem){.lg\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}}.dark\:bg-blue-800:where(.dark,.dark *){background-color:var(--color-blue-800)}.dark\:bg-gray-700:where(.dark,.dark *){background-color:var(--color-gray-700)}.dark\:bg-green-800:where(.dark,.dark *){background-color:var(--color-green-800)}.dark\:bg-red-800:where(.dark,.dark *){background-color:var(--color-red-800)}.dark\:bg-yellow-800:where(.dark,.dark *){background-color:var(--color-yellow-800)}.dark\:text-blue-100:where(.dark,.dark *){color:var(--color-blue-100)}.dark\:text-gray-100:where(.dark,.dark *){color:var(--color-gray-100)}.dark\:text-gray-200:where(.dark,.dark *){color:var(--color-gray-200)}.dark\:text-green-100:where(.dark,.dark *){color:var(--color-green-100)}.dark\:text-red-100:where(.dark,.dark *){color:var(--color-red-100)}.dark\:text-white:where(.dark,.dark *){color:var(--color-white)}.dark\:text-yellow-100:where(.dark,.dark *){color:var(--color-yellow-100)}@media (hover:hover){.dark\:hover\:text-blue-400:where(.dark,.dark *):hover{color:var(--color-blue-400)}}}:root{--vp-c-brand-1:var(--color-primary)}.vp-doc a{text-decoration-line:none}@media (hover:hover){.vp-doc a:hover{color:var(--color-secondary)}.vp-doc a:where(.dark,.dark *):hover{color:var(--color-secondary-dark)}}:root{--vp-font-family-base:"Inter", ui-sans-serif, system-ui, sans-serif;--vp-font-family-mono:"JetBrains Mono", ui-monospace, SFMono-Regular, Menlo, monospace;--accent:#644ac9;--accent-soft:#8668e0;--green:#14710a;--vp-c-bg:#fffbeb;--vp-c-bg-alt:#f5f1df;--vp-c-bg-elv:#ece8d3;--vp-c-bg-soft:#f7f3e1;--vp-c-divider:#d9d4bb;--vp-c-gutter:#f5f1df;--vp-c-text-1:#1f1f1f;--vp-c-text-2:#4b4b52;--vp-c-text-3:#6c664b;--vp-c-brand-1:#644ac9;--vp-c-brand-2:#7459d8;--vp-c-brand-3:#644ac9;--vp-c-brand-soft:#644ac91f;--color-primary:#644ac9;--color-primary-alt:#4f39a8;--color-primary-alt-dark:#8668e0;--color-secondary:#3b2a8a;--color-secondary-dark:#3b2a8a;--color-green-100:#d4f2cf;--color-green-800:#14710a}.dark{--accent:#bd93f9;--accent-soft:#d6bcfa;--green:#50fa7b;--color-primary:#9d6ff0;--color-primary-alt:#8a5cd8;--color-primary-alt-dark:#d6bcfa;--color-secondary:#f8f8f2;--color-secondary-dark:#f8f8f2;--color-green-100:#50fa7b;--color-green-800:#1f4d33;--vp-c-bg:#282a36;--vp-c-bg-alt:#21222c;--vp-c-bg-elv:#343746;--vp-c-bg-soft:#2f3241;--vp-c-divider:#44475a;--vp-c-gutter:#21222c;--vp-c-text-1:#f8f8f2;--vp-c-text-2:#b6b8c9;--vp-c-text-3:#8e94b3;--vp-c-brand-1:var(--accent);--vp-c-brand-2:var(--accent);--vp-c-brand-3:#9d6ff0;--vp-c-brand-soft:#bd93f929}body{letter-spacing:-.005em}.VPNav .VPNavBar,.VPNavBar .content-body{-webkit-backdrop-filter:saturate(180%)blur(12px);backdrop-filter:saturate(180%)blur(12px)}.VPNavBar:not(.has-sidebar):not(.home.top){background-color:#fffbebd9}.dark .VPNavBar:not(.has-sidebar):not(.home.top){background-color:#282a36cc}.component-border{background:var(--vp-c-bg-soft);border:1px solid var(--vp-c-divider);border-radius:0;transition:none}.component-border:hover,.component-border:focus-within{border-color:var(--accent)}@supports (color:color-mix(in lab, red, red)){.component-border:hover,.component-border:focus-within{border-color:color-mix(in srgb, var(--accent) 55%, transparent)}}.component-border:hover,.component-border:focus-within{background:linear-gradient(180deg, var(--accent), var(--vp-c-bg-soft))}@supports (color:color-mix(in lab, red, red)){.component-border:hover,.component-border:focus-within{background:linear-gradient(180deg, color-mix(in srgb, var(--accent) 7%, var(--vp-c-bg-soft)), var(--vp-c-bg-soft))}}.component-border:hover,.component-border:focus-within{box-shadow:0 0 0 1px var(--accent), 0 8px 30px -12px var(--accent)}@supports (color:color-mix(in lab, red, red)){.component-border:hover,.component-border:focus-within{box-shadow:0 0 0 1px color-mix(in srgb, var(--accent) 18%, transparent), 0 8px 30px -12px color-mix(in srgb, var(--accent) 45%, transparent)}}.component-border>.pl-8 a.text-2xl,.component-border a.text-2xl{color:var(--vp-c-text-1);letter-spacing:-.02em;font-weight:600}.component-border a.text-2xl{transition:none}.component-border a.text-2xl:hover{color:var(--accent);text-shadow:0 0 18px var(--accent)}@supports (color:color-mix(in lab, red, red)){.component-border a.text-2xl:hover{text-shadow:0 0 18px color-mix(in srgb, var(--accent) 45%, transparent)}}.component-border a.text-2xl:active{color:var(--accent-soft);text-shadow:none}.component-border .text-6xl{font-family:var(--vp-font-family-mono);color:var(--vp-c-text-1);font-size:2.5rem;font-weight:500;line-height:1}a.link-alt.uppercase,.component-border a.uppercase{border:1px solid var(--vp-c-divider);background:var(--vp-c-bg-elv);letter-spacing:.04em;border-radius:0;margin-bottom:4px;padding:2px 10px;font-size:.7rem;font-weight:500;transition:none;display:inline-block}a.link-alt.uppercase:hover{border-color:var(--accent);background:var(--accent)}@supports (color:color-mix(in lab, red, red)){a.link-alt.uppercase:hover{background:color-mix(in srgb, var(--accent) 16%, var(--vp-c-bg-elv))}}a.link-alt.uppercase:active{background:var(--accent)}@supports (color:color-mix(in lab, red, red)){a.link-alt.uppercase:active{background:color-mix(in srgb, var(--accent) 30%, var(--vp-c-bg-elv))}}a.link-alt.uppercase:active{transform:translateY(1px)}a.component-border{border-radius:0}.vp-doc a,.vp-doc a:hover{color:var(--vp-c-brand-1);font-weight:500;text-decoration:none}.vp-doc a:hover{color:var(--vp-c-brand-2)}a,a:hover,.vp-doc a,.vp-doc a:hover,.vp-doc .header-anchor{text-decoration:none!important}.vp-doc h1{letter-spacing:-.03em;font-weight:700}.vp-doc h2{letter-spacing:-.02em;border-top-color:var(--vp-c-divider)}.vp-doc p,.vp-doc li{line-height:1.75}.vp-doc :not(pre)>code{color:var(--green);font-family:var(--vp-font-family-mono);border:1px solid var(--vp-c-divider);border-radius:0;font-size:.85em}.vp-doc div[class*=language-]{border:1px solid var(--vp-c-divider);border-radius:0}a:focus-visible,button:focus-visible{outline:2px solid var(--accent);outline-offset:2px;border-radius:0}.home-hero{padding:56px 0 8px}.home-hero h1{letter-spacing:-.04em;margin:0;font-size:clamp(2rem,5vw,3.25rem);font-weight:700;line-height:1.1}.home-hero h1 span{background:linear-gradient(90deg, var(--vp-c-text-1), var(--accent-soft) 70%, var(--accent));color:#0000;-webkit-background-clip:text;background-clip:text}.home-hero p{max-width:36rem;color:var(--vp-c-text-2);margin:16px 0 0;font-size:1.1rem;line-height:1.6}@media (prefers-reduced-motion:reduce){.component-border,a.link-alt.uppercase{transition:none}}[class*=rounded],.VPNavBarSearchButton,.vp-doc [class*=language-],.vp-doc :not(pre)>code,.vp-doc img,.vp-doc table,.custom-block,.VPLocalSearchBox .results .result,.VPSkipLink,.keys,button.copy,.VPSwitch,.VPSwitch .check{border-radius:0!important}p.flex.flex-wrap>a.border.m-1{margin:.25rem;padding:.25rem .875rem;transition:none}p.flex.flex-wrap>a.border.m-1:hover{border-color:var(--accent);background-color:var(--accent)}@supports (color:color-mix(in lab, red, red)){p.flex.flex-wrap>a.border.m-1:hover{background-color:color-mix(in srgb, var(--accent) 14%, transparent)}}@media (width<=639px){.component-border.flex:has(>.text-center){flex-direction:column}.component-border>.text-center{text-align:left;align-items:baseline;gap:.5rem;margin-bottom:.5rem;display:flex;min-width:0!important}.component-border>.text-center .text-6xl{font-size:1.75rem}.component-border>.pl-8{padding-left:0}p.flex.flex-wrap:has(>a.border.m-1){-webkit-overflow-scrolling:touch;scrollbar-width:none;flex-wrap:nowrap;margin-inline:-.25rem;padding-bottom:.25rem;overflow-x:auto}p.flex.flex-wrap:has(>a.border.m-1)::-webkit-scrollbar{display:none}p.flex.flex-wrap>a.border.m-1{white-space:nowrap;flex:none;align-items:center;min-height:2.25rem;display:inline-flex}div.pt-6.pb-8{padding-top:.75rem;padding-bottom:.5rem}div.pt-6.pb-8>h1.mb-6{margin-bottom:.75rem}a.link-alt.uppercase,.component-border a.uppercase{margin-bottom:6px;padding:6px 12px}}div.flex.flex-wrap.py-4.items-center.justify-center:has(>a[href*=ko-fi\.com]){gap:12px}div.flex.flex-wrap.py-4.items-center.justify-center:has(>a[href*=ko-fi\.com])>a{justify-content:center;align-items:center;width:200px;height:56px;display:flex;margin:0!important}div.flex.flex-wrap.py-4.items-center.justify-center:has(>a[href*=ko-fi\.com])>a img{-o-object-fit:contain;object-fit:contain;max-width:100%;max-height:100%}div.flex.flex-wrap.py-4.items-center.justify-center.space-y-4:has(>a[href*=ko-fi\.com]){flex-flow:column}div.flex.flex-wrap.py-4.items-center.justify-center.space-x-4:has(>a[href*=ko-fi\.com]){grid-template-columns:repeat(2,168px);justify-content:center;gap:12px;display:grid}div.flex.flex-wrap.py-4.items-center.justify-center.space-x-4:has(>a[href*=ko-fi\.com])>a{width:168px;height:52px}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-space-x-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}
|
|
2
2
|
/*$vite$:1*/
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Normalizes a post/project excerpt into safe HTML suitable for v-html.
|
|
3
|
+
*
|
|
4
|
+
* Excerpts may originate raw (gray-matter) or pre-rendered (createContentLoader).
|
|
5
|
+
* Raw input is rendered with markdown-it with html disabled, so inline markdown
|
|
6
|
+
* (links, emphasis, inline code) works and source HTML is escaped (no injection).
|
|
7
|
+
* Excess `undefined`/empty input yields undefined.
|
|
8
|
+
*/
|
|
9
|
+
export declare const useExcerptHtml: (excerpt?: string) => string | undefined;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { Pattern } from './types';
|
|
2
|
+
export declare const useMarkdownFrontmatterRoute: (pattern: Pattern, frontmatterKey: string, excerptSeparator?: string) => {
|
|
3
|
+
paths(): {
|
|
4
|
+
params: {
|
|
5
|
+
slug: string;
|
|
6
|
+
};
|
|
7
|
+
}[];
|
|
8
|
+
};
|
|
9
|
+
export declare const useArchiveRoute: (pattern: Pattern, excerptSeparator?: string) => {
|
|
10
|
+
paths(): {
|
|
11
|
+
params: {
|
|
12
|
+
slug: string;
|
|
13
|
+
};
|
|
14
|
+
}[];
|
|
15
|
+
};
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { Pattern, StringOrFrontmatterToString } from './types';
|
|
2
|
+
export declare const useSlugFromMarkdownFrontMatter: (pattern: Pattern, frontmatterKeyOrMappingFn: StringOrFrontmatterToString, excerptSeparator?: string) => {
|
|
3
|
+
params: {
|
|
4
|
+
slug: string;
|
|
5
|
+
};
|
|
6
|
+
}[];
|
|
7
|
+
export { useSlug, useSlugFilter } from '../../shared/composables';
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export type Pattern = string | string[];
|
|
2
|
+
export type Frontmatter = Record<string, unknown> & {
|
|
3
|
+
date?: string;
|
|
4
|
+
excerpt?: string;
|
|
5
|
+
};
|
|
6
|
+
export type FrontmatterToString = (frontmatter: Frontmatter) => string;
|
|
7
|
+
export type StringOrFrontmatterToString = string | FrontmatterToString;
|
package/dist/node/config.d.mts
CHANGED
|
@@ -13,6 +13,14 @@ declare interface CustomDonationBaseConfig {
|
|
|
13
13
|
donationBaseUrl: string;
|
|
14
14
|
donationButtonImage: string;
|
|
15
15
|
donationButtonStyle?: Record<string, string>;
|
|
16
|
+
/**
|
|
17
|
+
* Intrinsic image dimensions, used for width/height attributes so the
|
|
18
|
+
* browser can reserve layout space before the image loads.
|
|
19
|
+
*/
|
|
20
|
+
donationButtonSize?: {
|
|
21
|
+
width: number;
|
|
22
|
+
height: number;
|
|
23
|
+
};
|
|
16
24
|
}
|
|
17
25
|
declare interface CustomDonationConfig extends CustomDonationBaseConfig {
|
|
18
26
|
donationId: string;
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import type { UserConfig } from 'vitepress';
|
|
2
|
+
import type { ThemeConfig } from '../client/types';
|
|
3
|
+
/**
|
|
4
|
+
* @type {import('vitepress').UserConfig}
|
|
5
|
+
*/
|
|
6
|
+
declare const baseConfig: {
|
|
7
|
+
themeConfig: {
|
|
8
|
+
siteURL: string;
|
|
9
|
+
googleAnalytics: {
|
|
10
|
+
id: string;
|
|
11
|
+
};
|
|
12
|
+
search: {
|
|
13
|
+
provider: string;
|
|
14
|
+
options: {
|
|
15
|
+
/**
|
|
16
|
+
* @param {string} src
|
|
17
|
+
* @param {import('vitepress').MarkdownEnv} env
|
|
18
|
+
* @param {import('markdown-it')} md
|
|
19
|
+
*/
|
|
20
|
+
_render(src: any, env: any, md: any): Promise<string>;
|
|
21
|
+
};
|
|
22
|
+
};
|
|
23
|
+
};
|
|
24
|
+
vite: {
|
|
25
|
+
ssr: {
|
|
26
|
+
noExternal: string[];
|
|
27
|
+
};
|
|
28
|
+
optimizeDeps: {
|
|
29
|
+
exclude: string[];
|
|
30
|
+
};
|
|
31
|
+
css: {
|
|
32
|
+
preprocessorOptions: {
|
|
33
|
+
scss: {
|
|
34
|
+
api: string;
|
|
35
|
+
};
|
|
36
|
+
};
|
|
37
|
+
};
|
|
38
|
+
};
|
|
39
|
+
};
|
|
40
|
+
/**
|
|
41
|
+
* Helper function to define theme configuration with proper typing
|
|
42
|
+
* Note: TailwindCSS plugin should be added in vite.config.ts, not here
|
|
43
|
+
*/
|
|
44
|
+
export declare function defineWithDefaultThemeConfig(config?: UserConfig<ThemeConfig>): UserConfig<ThemeConfig>;
|
|
45
|
+
export default baseConfig;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ansidev-oss/vitepress-theme-ansidev",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.4.0",
|
|
4
4
|
"description": "The VitePress theme for ansidev's blog",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/node/index.js",
|
|
@@ -69,7 +69,6 @@
|
|
|
69
69
|
"rimraf": "^6.1.3",
|
|
70
70
|
"swetrix": "^4.1.0",
|
|
71
71
|
"tailwindcss": "^4.2.0",
|
|
72
|
-
"ts-node": "^10.9.2",
|
|
73
72
|
"typescript": "^6.0.0",
|
|
74
73
|
"vite": "npm:@voidzero-dev/vite-plus-core@1.4.0",
|
|
75
74
|
"vitepress": "^2.0.0-alpha.16",
|
|
@@ -83,7 +82,6 @@
|
|
|
83
82
|
"gray-matter": "^4.0.3",
|
|
84
83
|
"medium-zoom": "^1.1.0",
|
|
85
84
|
"swetrix": "^4.1.0",
|
|
86
|
-
"ts-node": "^10.9.2",
|
|
87
85
|
"typescript": "^5.9.3",
|
|
88
86
|
"vitepress": "^2.0.0-alpha.16",
|
|
89
87
|
"vue": "^3.5.28"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
<script setup lang="ts">
|
|
2
2
|
import { useData } from 'vitepress'
|
|
3
|
-
import { useLayout } from 'vitepress/theme'
|
|
3
|
+
import { useLayout } from 'vitepress/theme-without-fonts'
|
|
4
4
|
import { computed, defineAsyncComponent } from 'vue'
|
|
5
5
|
import DonationWidget from './DonationWidget.vue'
|
|
6
6
|
|
|
@@ -2,6 +2,12 @@
|
|
|
2
2
|
import { useI18n } from 'vue-i18n'
|
|
3
3
|
import { switchLocale } from '../composables/locale'
|
|
4
4
|
|
|
5
|
+
// Inline SVG instead of @iconify/vue's <Icon>: that component renders an
|
|
6
|
+
// empty svg during SSR and fills it in after hydration, which shows up as a
|
|
7
|
+
// late navbar visual change (Speed Index). This renders on the server.
|
|
8
|
+
const translateIconBody =
|
|
9
|
+
'<g fill="currentColor"><path d="M4.545 6.714L4.11 8H3l1.862-5h1.284L8 8H6.833l-.435-1.286zm1.634-.736L5.5 3.956h-.049l-.679 2.022z"/><path d="M0 2a2 2 0 0 1 2-2h7a2 2 0 0 1 2 2v3h3a2 2 0 0 1 2 2v7a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2v-3H2a2 2 0 0 1-2-2zm2-1a1 1 0 0 0-1 1v7a1 1 0 0 0 1 1h7a1 1 0 0 0 1-1V2a1 1 0 0 0-1-1zm7.138 9.995q.289.451.63.846c-.748.575-1.673 1.001-2.768 1.292c.178.217.451.635.555.867c1.125-.359 2.08-.844 2.886-1.494c.777.665 1.739 1.165 2.93 1.472c.133-.254.414-.673.629-.89c-1.125-.253-2.057-.694-2.82-1.284c.681-.747 1.222-1.651 1.621-2.757H14V8h-3v1.047h.765c-.318.844-.74 1.546-1.272 2.13a6 6 0 0 1-.415-.492a2 2 0 0 1-.94.31"/></g>'
|
|
10
|
+
|
|
5
11
|
defineProps({
|
|
6
12
|
size: {
|
|
7
13
|
type: Number,
|
|
@@ -22,10 +28,17 @@ const toggleLocale = () => switchLocale(availableLocales, locale)
|
|
|
22
28
|
class="VPLocaleSwitcher"
|
|
23
29
|
@click="toggleLocale"
|
|
24
30
|
>
|
|
25
|
-
<
|
|
31
|
+
<svg
|
|
32
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
33
|
+
aria-hidden="true"
|
|
34
|
+
role="img"
|
|
35
|
+
:width="size"
|
|
36
|
+
:height="size"
|
|
37
|
+
viewBox="0 0 16 16"
|
|
38
|
+
v-html="translateIconBody"
|
|
39
|
+
></svg>
|
|
26
40
|
</button>
|
|
27
41
|
</template>
|
|
28
|
-
|
|
29
42
|
<style scoped>
|
|
30
43
|
.divider {
|
|
31
44
|
margin-right: 8px;
|
|
@@ -16,10 +16,20 @@ const props = defineProps({
|
|
|
16
16
|
|
|
17
17
|
const slug = computed(() => useSlug(props.text))
|
|
18
18
|
const link = computed(() => `${props.basePath}${slug.value}`)
|
|
19
|
+
const label = computed(() => {
|
|
20
|
+
if (props.basePath === '/categories/') {
|
|
21
|
+
return `View all posts in category ${props.text}`
|
|
22
|
+
}
|
|
23
|
+
return `View all projects using ${props.text}`
|
|
24
|
+
})
|
|
19
25
|
</script>
|
|
20
26
|
|
|
21
27
|
<template>
|
|
22
|
-
<RouterLink
|
|
28
|
+
<RouterLink
|
|
29
|
+
:to="link"
|
|
30
|
+
:aria-label="label"
|
|
31
|
+
class="mr-2 text-sm font-medium uppercase link-alt"
|
|
32
|
+
>
|
|
23
33
|
{{ text }}
|
|
24
34
|
</RouterLink>
|
|
25
35
|
</template>
|
package/src/client/index.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Icon } from '@iconify/vue'
|
|
2
2
|
import type { Theme } from 'vitepress'
|
|
3
|
-
import DefaultTheme from 'vitepress/theme'
|
|
3
|
+
import DefaultTheme from 'vitepress/theme-without-fonts'
|
|
4
4
|
import { useHtmlLang, usePageLocale } from './composables/lang'
|
|
5
5
|
import Layout from './layouts/Layout.vue'
|
|
6
6
|
import ArchivesPage from './pages/ArchivesPage.vue'
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
<script setup lang="ts">
|
|
2
2
|
import { useData, useRoute } from 'vitepress'
|
|
3
|
-
import DefaultTheme from 'vitepress/theme'
|
|
3
|
+
import DefaultTheme from 'vitepress/theme-without-fonts'
|
|
4
4
|
import { onMounted, watch } from 'vue'
|
|
5
5
|
import DonationWidget from '../components/DonationWidget.vue'
|
|
6
6
|
import Footer from '../components/Footer.vue'
|
|
@@ -11,6 +11,10 @@ const props = defineProps<DonationButtonProps>()
|
|
|
11
11
|
const donationUrl = computed(() =>
|
|
12
12
|
new URL(props.donationId, props.donationBaseUrl).toString()
|
|
13
13
|
)
|
|
14
|
+
|
|
15
|
+
// Intrinsic sizes of the platform button images so the browser can reserve
|
|
16
|
+
// space before they load (avoids unsized-image CLS risk).
|
|
17
|
+
const size = props.donationButtonSize
|
|
14
18
|
</script>
|
|
15
19
|
|
|
16
20
|
<template>
|
|
@@ -19,6 +23,10 @@ const donationUrl = computed(() =>
|
|
|
19
23
|
:src="donationButtonImage"
|
|
20
24
|
:alt="donationPlatform"
|
|
21
25
|
:style="donationButtonStyle"
|
|
26
|
+
:width="size?.width"
|
|
27
|
+
:height="size?.height"
|
|
28
|
+
loading="lazy"
|
|
29
|
+
decoding="async"
|
|
22
30
|
/>
|
|
23
31
|
</a>
|
|
24
32
|
</template>
|
|
@@ -11,6 +11,11 @@ export declare interface CustomDonationBaseConfig {
|
|
|
11
11
|
donationBaseUrl: string
|
|
12
12
|
donationButtonImage: string
|
|
13
13
|
donationButtonStyle?: Record<string, string>
|
|
14
|
+
/**
|
|
15
|
+
* Intrinsic image dimensions, used for width/height attributes so the
|
|
16
|
+
* browser can reserve layout space before the image loads.
|
|
17
|
+
*/
|
|
18
|
+
donationButtonSize?: { width: number; height: number }
|
|
14
19
|
}
|
|
15
20
|
|
|
16
21
|
export declare interface CustomDonationConfig extends CustomDonationBaseConfig {
|
|
@@ -27,7 +32,8 @@ export const supportedDonationPlatforms: {
|
|
|
27
32
|
donationButtonStyle: {
|
|
28
33
|
height: '60px !important',
|
|
29
34
|
width: '217px !important'
|
|
30
|
-
}
|
|
35
|
+
},
|
|
36
|
+
donationButtonSize: { width: 545, height: 153 }
|
|
31
37
|
},
|
|
32
38
|
kofi: {
|
|
33
39
|
donationBaseUrl: 'https://ko-fi.com',
|
|
@@ -35,11 +41,13 @@ export const supportedDonationPlatforms: {
|
|
|
35
41
|
'https://storage.ko-fi.com/cdn/brandasset/kofi_bg_tag_white.png',
|
|
36
42
|
donationButtonStyle: {
|
|
37
43
|
height: '60px !important'
|
|
38
|
-
}
|
|
44
|
+
},
|
|
45
|
+
donationButtonSize: { width: 341, height: 129 }
|
|
39
46
|
},
|
|
40
47
|
paypal: {
|
|
41
48
|
donationBaseUrl: 'https://paypal.me',
|
|
42
49
|
donationButtonImage:
|
|
43
|
-
'https://paypalobjects.com/en_US/i/btn/btn_donateCC_LG.gif'
|
|
50
|
+
'https://paypalobjects.com/en_US/i/btn/btn_donateCC_LG.gif',
|
|
51
|
+
donationButtonSize: { width: 147, height: 47 }
|
|
44
52
|
}
|
|
45
53
|
}
|
|
@@ -44,8 +44,26 @@ function init() {
|
|
|
44
44
|
}
|
|
45
45
|
}
|
|
46
46
|
|
|
47
|
+
function scheduleInit() {
|
|
48
|
+
const start = () => {
|
|
49
|
+
// Defer loading until the browser is idle so analytics never competes
|
|
50
|
+
// with critical rendering / interaction on the initial navigation.
|
|
51
|
+
if (typeof (window as any).requestIdleCallback === 'function') {
|
|
52
|
+
;(window as any).requestIdleCallback(() => init(), { timeout: 5000 })
|
|
53
|
+
} else {
|
|
54
|
+
setTimeout(init, 3000)
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
if (document.readyState === 'complete') {
|
|
59
|
+
start()
|
|
60
|
+
} else {
|
|
61
|
+
window.addEventListener('load', start, { once: true })
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
|
|
47
65
|
if (googleAnalyticsOptions) {
|
|
48
|
-
onMounted(
|
|
66
|
+
onMounted(scheduleInit)
|
|
49
67
|
}
|
|
50
68
|
</script>
|
|
51
69
|
|