From 7a33a00ab611c06ef7cd8f00f7a8215383242697 Mon Sep 17 00:00:00 2001 From: Clas Wen Date: Fri, 23 May 2025 23:18:03 +0800 Subject: [PATCH 01/18] save --- .vscode/settings.json | 5 +- astro.config.mts | 15 +++-- cspell.json | 8 ++- package.json | 3 +- pnpm-lock.yaml | 31 +++++---- src/pages/calendar/Schedule.tsx | 114 ++++++++++++++++++++++++++++++++ src/pages/calendar/index.astro | 4 +- 7 files changed, 154 insertions(+), 26 deletions(-) create mode 100644 src/pages/calendar/Schedule.tsx diff --git a/.vscode/settings.json b/.vscode/settings.json index b0d60c1..ca847d7 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -8,7 +8,10 @@ ], "eslint.experimental.useFlatConfig": true, "cSpell.words": [ + "ical", "Logto", - "qrcode" + "qrcode", + "Subcomponents", + "vevent" ], } diff --git a/astro.config.mts b/astro.config.mts index 38a9ef1..3ab3327 100644 --- a/astro.config.mts +++ b/astro.config.mts @@ -14,10 +14,10 @@ export default defineConfig({ syntaxHighlight: "shiki", shikiConfig: { themes: { - light: 'github-light', - dark: 'github-dark', + light: "github-light", + dark: "github-dark", }, - } + }, }, integrations: [ vue(), @@ -39,7 +39,10 @@ export default defineConfig({ target: "http://localhost:4000", rewrite: path => path.replace(/^\/saturday/, ""), }, - } - } - } + }, + }, + // optimizeDeps: { + // exclude: ["dayjs"], + // }, + }, }) diff --git a/cspell.json b/cspell.json index d16f8f1..efe88c3 100644 --- a/cspell.json +++ b/cspell.json @@ -21,6 +21,10 @@ "Rehype", "rehypePlugins", "shiki", - "tseslint" + "tseslint", + "ical", + "ICAL", + "vevents", + "getAllSubcomponents" ] -} +} \ No newline at end of file diff --git a/package.json b/package.json index 1f11ac5..45a6bf2 100644 --- a/package.json +++ b/package.json @@ -24,12 +24,13 @@ "@fullcalendar/react": "^6.1.17", "@headlessui/vue": "^1.7.23", "@heroui/react": "2.7.6", + "@internationalized/date": "^3.8.0", "@logto/browser": "^2.2.18", "@stylistic/eslint-plugin": "^2.13.0", "astro": "^4.16.18", "dayjs": "^1.11.13", "framer-motion": "^11.18.2", - "ical.js": "^1.5.0", + "ical.js": "^2.1.0", "md5": "^2.3.0", "openapi-fetch": "^0.12.5", "qrcode": "^1.5.4", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 456a3bb..51883db 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -28,7 +28,7 @@ importers: version: 6.1.17(@fullcalendar/core@6.1.17) '@fullcalendar/icalendar': specifier: ^6.1.17 - version: 6.1.17(@fullcalendar/core@6.1.17)(ical.js@1.5.0) + version: 6.1.17(@fullcalendar/core@6.1.17)(ical.js@2.1.0) '@fullcalendar/react': specifier: ^6.1.17 version: 6.1.17(@fullcalendar/core@6.1.17)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) @@ -38,6 +38,9 @@ importers: '@heroui/react': specifier: 2.7.6 version: 2.7.6(@types/react@18.3.20)(framer-motion@11.18.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(tailwindcss@3.4.17) + '@internationalized/date': + specifier: ^3.8.0 + version: 3.8.0 '@logto/browser': specifier: ^2.2.18 version: 2.2.18 @@ -54,8 +57,8 @@ importers: specifier: ^11.18.2 version: 11.18.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) ical.js: - specifier: ^1.5.0 - version: 1.5.0 + specifier: ^2.1.0 + version: 2.1.0 md5: specifier: ^2.3.0 version: 2.3.0 @@ -3748,8 +3751,8 @@ packages: engines: {node: '>=18'} hasBin: true - ical.js@1.5.0: - resolution: {integrity: sha512-7ZxMkogUkkaCx810yp0ZGKvq1ZpRgJeornPttpoxe6nYZ3NLesZe1wWMXDdwTkj/b5NtXT+Y16Aakph/ao98ZQ==} + ical.js@2.1.0: + resolution: {integrity: sha512-BOVfrH55xQ6kpS3muGvIXIg2l7p+eoe12/oS7R5yrO3TL/j/bLsR0PR+tYQESFbyTbvGgPHn9zQ6tI4FWyuSaQ==} ignore@5.3.2: resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} @@ -6190,10 +6193,10 @@ snapshots: dependencies: '@fullcalendar/core': 6.1.17 - '@fullcalendar/icalendar@6.1.17(@fullcalendar/core@6.1.17)(ical.js@1.5.0)': + '@fullcalendar/icalendar@6.1.17(@fullcalendar/core@6.1.17)(ical.js@2.1.0)': dependencies: '@fullcalendar/core': 6.1.17 - ical.js: 1.5.0 + ical.js: 2.1.0 '@fullcalendar/react@6.1.17(@fullcalendar/core@6.1.17)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: @@ -7509,7 +7512,7 @@ snapshots: '@react-aria/calendar@3.7.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@internationalized/date': 3.7.0 + '@internationalized/date': 3.8.0 '@react-aria/i18n': 3.12.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@react-aria/interactions': 3.24.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@react-aria/live-announcer': 3.4.2 @@ -7561,7 +7564,7 @@ snapshots: '@react-aria/datepicker@3.14.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@internationalized/date': 3.7.0 + '@internationalized/date': 3.8.0 '@internationalized/number': 3.6.1 '@internationalized/string': 3.2.6 '@react-aria/focus': 3.20.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) @@ -8102,7 +8105,7 @@ snapshots: '@react-stately/calendar@3.7.1(react@18.3.1)': dependencies: - '@internationalized/date': 3.7.0 + '@internationalized/date': 3.8.0 '@react-stately/utils': 3.10.5(react@18.3.1) '@react-types/calendar': 3.6.1(react@18.3.1) '@react-types/shared': 3.28.0(react@18.3.1) @@ -8145,7 +8148,7 @@ snapshots: '@react-stately/datepicker@3.13.0(react@18.3.1)': dependencies: - '@internationalized/date': 3.7.0 + '@internationalized/date': 3.8.0 '@internationalized/string': 3.2.6 '@react-stately/form': 3.1.3(react@18.3.1) '@react-stately/overlays': 3.6.15(react@18.3.1) @@ -8381,7 +8384,7 @@ snapshots: '@react-types/calendar@3.6.1(react@18.3.1)': dependencies: - '@internationalized/date': 3.7.0 + '@internationalized/date': 3.8.0 '@react-types/shared': 3.28.0(react@18.3.1) react: 18.3.1 @@ -8408,7 +8411,7 @@ snapshots: '@react-types/datepicker@3.11.0(react@18.3.1)': dependencies: - '@internationalized/date': 3.7.0 + '@internationalized/date': 3.8.0 '@react-types/calendar': 3.7.0(react@18.3.1) '@react-types/overlays': 3.8.14(react@18.3.1) '@react-types/shared': 3.29.0(react@18.3.1) @@ -10447,7 +10450,7 @@ snapshots: husky@9.1.7: {} - ical.js@1.5.0: {} + ical.js@2.1.0: {} ignore@5.3.2: {} diff --git a/src/pages/calendar/Schedule.tsx b/src/pages/calendar/Schedule.tsx new file mode 100644 index 0000000..d4ec55d --- /dev/null +++ b/src/pages/calendar/Schedule.tsx @@ -0,0 +1,114 @@ +import ICAL from "ical.js" +import dayjs from "dayjs" +import { useEffect, useState } from "react" +import { Calendar } from "@heroui/react" +import { today, getLocalTimeZone } from "@internationalized/date" + +type ScheduleEvent = { + start: Date + end: Date + summary: string + description: string + recurrenceId?: string +} + +const parseCal = async (): Promise => { + const res = await fetch("https://ical.nbtca.space/").then(res => res.text()) + const jcalData = ICAL.parse(res) + return new ICAL.Component(jcalData) +} + +const expandEventOccurrences = ( + event: ICAL.Event, + rangeEnd: ICAL.Time, +): ScheduleEvent[] => { + const occurrences: ScheduleEvent[] = [] + const iterator = event.iterator() + let next: ICAL.Time | null = null + + while ((next = iterator.next())) { + if (next.compare(event.startDate) < 0) continue + if (next.compare(rangeEnd) > 0) break + const details = event.getOccurrenceDetails(next) + occurrences.push({ + start: details.startDate.toJSDate(), + end: details.endDate.toJSDate(), + summary: event.summary, + description: event.description, + recurrenceId: event.recurrenceId, + }) + } + + return occurrences +} + +const extractScheduleEvents = (icalComp: ICAL.Component): ScheduleEvent[] => { + const vevents = icalComp.getAllSubcomponents("vevent") + const rangeEnd = ICAL.Time.fromDateString("2026-01-01") + + return vevents + .flatMap((vevent) => { + const event = new ICAL.Event(vevent) + if (event.iterator().complete) { + return [{ + start: event.startDate.toJSDate(), + end: event.endDate.toJSDate(), + summary: event.summary, + description: event.description, + recurrenceId: "123", + }] + } + return expandEventOccurrences(event, rangeEnd) + }) + .sort((a, b) => b.start.getTime() - a.start.getTime()) +} + +const formatTimePair = (s: Date, e: Date): string => { + const start = dayjs(s) + const end = dayjs(e) + if (start.isSame(end, "day")) { + return `${start.format("YYYY-MM-DD HH:mm")} - ${end.format("HH:mm")}` + } + return `${start.format("YYYY-MM-DD")} - ${end.format("YYYY-MM-DD")}` +} + +export default function Schedule() { + const [scheduledEvents, setScheduledEvents] = useState([]) + + const defaultDate = today(getLocalTimeZone()) + const [focusedDate, setFocusedDate] = useState(defaultDate) + + useEffect(() => { + parseCal().then((icalComp) => { + setScheduledEvents(extractScheduleEvents(icalComp)) + }) + }, []) + + return ( +
+
日程
+
+
+ {scheduledEvents.map((event, index) => ( +
+
+
{event.summary}
+ { formatTimePair(event.start, event.end) } +
+

{event.description}

+

{event.recurrenceId}

+
+ ))} +
+
+ +
+
+
+ ) +} diff --git a/src/pages/calendar/index.astro b/src/pages/calendar/index.astro index 9716dd6..78e7fe8 100644 --- a/src/pages/calendar/index.astro +++ b/src/pages/calendar/index.astro @@ -1,8 +1,8 @@ --- -import FullCalendar from "./Calendar" +import Schedule from "./Schedule" import BaseLayout from "../../layouts/BaseLayout.astro" --- - + From c1467ef24da7986bdfe008f8b9e597d42fad8725 Mon Sep 17 00:00:00 2001 From: Clas Wen Date: Fri, 30 May 2025 22:27:40 +0800 Subject: [PATCH 02/18] save --- src/pages/calendar/Schedule.tsx | 230 +++++++++++++++++++++++++++----- src/pages/join-us.astro | 2 +- src/styles/global.css | 4 +- 3 files changed, 202 insertions(+), 34 deletions(-) diff --git a/src/pages/calendar/Schedule.tsx b/src/pages/calendar/Schedule.tsx index d4ec55d..ed674ac 100644 --- a/src/pages/calendar/Schedule.tsx +++ b/src/pages/calendar/Schedule.tsx @@ -1,9 +1,13 @@ import ICAL from "ical.js" import dayjs from "dayjs" -import { useEffect, useState } from "react" -import { Calendar } from "@heroui/react" +import { useEffect, useMemo, useRef, useState } from "react" +import { Alert, Button, Calendar, Link, Spinner } from "@heroui/react" import { today, getLocalTimeZone } from "@internationalized/date" +import "dayjs/locale/zh-cn" + +dayjs.locale("zh-cn") + type ScheduleEvent = { start: Date end: Date @@ -18,27 +22,51 @@ const parseCal = async (): Promise => { return new ICAL.Component(jcalData) } +const extractScheduleEventsInRange = ( + icalComp: ICAL.Component, + rangeStart: ICAL.Time, + rangeEnd: ICAL.Time, +): ScheduleEvent[] => { + const vevents = icalComp.getAllSubcomponents("vevent") + return vevents + .flatMap((vevent) => { + const event = new ICAL.Event(vevent) + if (!event.isRecurring()) { + if (event.startDate.compare(rangeEnd) > 0 || event.endDate.compare(rangeStart) < 0) return [] + return [{ + start: event.startDate.toJSDate(), + end: event.endDate.toJSDate(), + summary: event.summary, + description: event.description, + recurrenceId: undefined, + }] + } + return expandEventOccurrences(event, rangeStart, rangeEnd) + }) + .sort((a, b) => b.start.getTime() - a.start.getTime()) +} + const expandEventOccurrences = ( event: ICAL.Event, + rangeStart: ICAL.Time, rangeEnd: ICAL.Time, ): ScheduleEvent[] => { const occurrences: ScheduleEvent[] = [] const iterator = event.iterator() let next: ICAL.Time | null = null - while ((next = iterator.next())) { - if (next.compare(event.startDate) < 0) continue + if (!next) break if (next.compare(rangeEnd) > 0) break + if (next.compare(rangeStart) < 0) continue const details = event.getOccurrenceDetails(next) occurrences.push({ start: details.startDate.toJSDate(), end: details.endDate.toJSDate(), summary: event.summary, description: event.description, - recurrenceId: event.recurrenceId, + recurrenceId: next.toString(), }) } - return occurrences } @@ -67,9 +95,9 @@ const formatTimePair = (s: Date, e: Date): string => { const start = dayjs(s) const end = dayjs(e) if (start.isSame(end, "day")) { - return `${start.format("YYYY-MM-DD HH:mm")} - ${end.format("HH:mm")}` + return `${start.format("HH:mm")} - ${end.format("HH:mm")}` } - return `${start.format("YYYY-MM-DD")} - ${end.format("YYYY-MM-DD")}` + return `${start.format("MM.DD")} - ${end.format("MM.DD")}` } export default function Schedule() { @@ -77,38 +105,178 @@ export default function Schedule() { const defaultDate = today(getLocalTimeZone()) const [focusedDate, setFocusedDate] = useState(defaultDate) + const dateRefs = useRef>({}) + const calendarRef = useRef(null) + const [loading, setLoading] = useState(true) useEffect(() => { + const rangeStart = ICAL.Time.fromJSDate(dayjs(focusedDate.toDate(getLocalTimeZone())).startOf("month").toDate()) + const rangeEnd = ICAL.Time.fromJSDate(dayjs(focusedDate.toDate(getLocalTimeZone())).endOf("month").toDate()) + if (!calendarRef.current) { + setLoading(true) + parseCal().then((icalComp) => { + calendarRef.current = icalComp + const events = extractScheduleEventsInRange( + icalComp, + rangeStart, + rangeEnd, + ) + setScheduledEvents(events) + setLoading(false) + }) + } + else { + const events = extractScheduleEventsInRange( + calendarRef.current, + rangeStart, + rangeEnd, + ) + setScheduledEvents(events) + } + }, [focusedDate]) + + useEffect(() => { + setLoading(true) parseCal().then((icalComp) => { setScheduledEvents(extractScheduleEvents(icalComp)) + setLoading(false) }) }, []) + const groupedEvents = useMemo(() => { + const grouped = new Map() + scheduledEvents.forEach((event) => { + const dateKey = dayjs(event.start).format("YYYY-MM-DD") + if (!grouped.has(dateKey)) { + grouped.set(dateKey, []) + } + grouped.get(dateKey)!.push(event) + }) + + // 可选:对每个日期内部事件排序(按开始时间升序) + for (const events of grouped.values()) { + events.sort((a, b) => a.start.getTime() - b.start.getTime()) + } + + // 可选:按照日期从早到晚排序 + return Array.from(grouped.entries()).sort(([a], [b]) => a.localeCompare(b)) + }, [scheduledEvents]) + + const isUserChangeRef = useRef(false) + + useEffect(() => { + if (!isUserChangeRef.current) return + isUserChangeRef.current = false + + const dateKey = dayjs(focusedDate.toDate(getLocalTimeZone())).format("YYYY-MM-DD") + const target = dateRefs.current[dateKey] + if (target) { + target.scrollIntoView({ behavior: "smooth", block: "start" }) + } + else { + // to nearest date if not found + const dates = Object.keys(dateRefs.current).map(d => dayjs(d)) + const closestDate = dates.reduce((prev, curr) => { + return Math.abs(curr.diff(focusedDate.toDate(getLocalTimeZone()), "day")) < Math.abs(prev.diff(focusedDate.toDate(getLocalTimeZone()), "day")) ? curr : prev + }, dates[0]) + const closestKey = closestDate.format("YYYY-MM-DD") + const closestTarget = dateRefs.current[closestKey] + if (closestTarget) { + closestTarget.scrollIntoView({ behavior: "smooth", block: "start" }) + } + } + }, [focusedDate, groupedEvents]) + return ( -
-
日程
-
-
- {scheduledEvents.map((event, index) => ( -
-
-
{event.summary}
- { formatTimePair(event.start, event.end) } -
-

{event.description}

-

{event.recurrenceId}

-
- ))} -
-
- +
+
+
日程
+ console.log(e)} + href="webcal://ical.nbtca.space" + target="_blank" + > + 订阅 + + )} /> +
+
+
+ { + dayjs(focusedDate.toDate()).format("MMMM YYYY") + } +
+
+ {loading && ( +
+ +
+ )} + {groupedEvents.length === 0 && !loading && ( +
本月暂无日程
+ )} + { + groupedEvents.map(([date, events]) => ( +
dateRefs.current[date] = el} + className="mb-6" + > +
+ { dayjs(date).format("MM.DD") } + { dayjs(date).format("ddd") } +
+ {events.map((event, index) => ( +
+
+
{event.summary}
+ {event.recurrenceId && ( + // 重复 + + + + + )} +
+ {formatTimePair(event.start, event.end)} + { + event.description && ( +

{event.description}

+ ) + } +
+ ))} +
+ )) + } +
+
+
+ { + isUserChangeRef.current = true + setFocusedDate(v) + }} + /> +
+
+
-
-
+
+ ) } diff --git a/src/pages/join-us.astro b/src/pages/join-us.astro index 41f13da..148c13f 100644 --- a/src/pages/join-us.astro +++ b/src/pages/join-us.astro @@ -121,7 +121,7 @@ import logoAnimated from "./_assets/nbtca.gif"; -webkit-font-smoothing: antialiased; direction: ltr; font-weight: 400; - font-size: 17px; + font-size: 16px; line-height: 1.82353; --body-container-width: 645px; text-align: center; diff --git a/src/styles/global.css b/src/styles/global.css index e05d037..c89fa63 100644 --- a/src/styles/global.css +++ b/src/styles/global.css @@ -149,12 +149,12 @@ button:disabled { html { font-family: system-ui, -apple-system, BlinkMacSystemFont, "SF Pro Text", "SF Pro Icons", "Helvetica Neue", "Helvetica", "Arial", sans-serif; - font-size: 106.25%; + /* font-size: 106.25%; */ quotes: "“" "”"; } body { - font-size: 17px; + /* font-size: 17px; */ line-height: 1.47059; font-weight: 400; letter-spacing: -0.022em; From 2a7e5bf861c2b1b4b79a86777e35e5349817493d Mon Sep 17 00:00:00 2001 From: Clas Wen Date: Fri, 30 May 2025 22:47:12 +0800 Subject: [PATCH 03/18] change menu name --- src/components/header/HeaderNavigation.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/header/HeaderNavigation.tsx b/src/components/header/HeaderNavigation.tsx index 079f728..2df2dc1 100644 --- a/src/components/header/HeaderNavigation.tsx +++ b/src/components/header/HeaderNavigation.tsx @@ -13,7 +13,7 @@ export default function App() { }, { link: "/calendar", - name: "日历", + name: "日程", }, { link: "/about", From 1bd9d9551b4c41d878e00732b42f51561c4df893 Mon Sep 17 00:00:00 2001 From: Clas Wen Date: Sat, 31 May 2025 10:38:32 +0800 Subject: [PATCH 04/18] fix overflow --- src/pages/calendar/Schedule.tsx | 160 ++++++++++++++++---------------- 1 file changed, 79 insertions(+), 81 deletions(-) diff --git a/src/pages/calendar/Schedule.tsx b/src/pages/calendar/Schedule.tsx index ed674ac..dfba7fc 100644 --- a/src/pages/calendar/Schedule.tsx +++ b/src/pages/calendar/Schedule.tsx @@ -188,91 +188,89 @@ export default function Schedule() { }, [focusedDate, groupedEvents]) return ( -
-
-
-
日程
- console.log(e)} - href="webcal://ical.nbtca.space" - target="_blank" - > - 订阅 - - )} - /> -
-
-
- { - dayjs(focusedDate.toDate()).format("MMMM YYYY") - } -
-
- {loading && ( -
- -
- )} - {groupedEvents.length === 0 && !loading && ( -
本月暂无日程
- )} +
+
+
日程
+ console.log(e)} + href="webcal://ical.nbtca.space" + target="_blank" + > + 订阅 + + )} + /> +
+
+
{ - groupedEvents.map(([date, events]) => ( -
dateRefs.current[date] = el} - className="mb-6" - > -
- { dayjs(date).format("MM.DD") } - { dayjs(date).format("ddd") } -
- {events.map((event, index) => ( -
-
-
{event.summary}
- {event.recurrenceId && ( - // 重复 - - - - - )} -
- {formatTimePair(event.start, event.end)} - { - event.description && ( -

{event.description}

- ) - } -
- ))} -
- )) + dayjs(focusedDate.toDate()).format("MMMM YYYY") }
-
-
- { - isUserChangeRef.current = true - setFocusedDate(v) - }} - /> +
+ {loading && ( +
+
+ )} + {groupedEvents.length === 0 && !loading && ( +
本月暂无日程
+ )} + { + groupedEvents.map(([date, events]) => ( +
dateRefs.current[date] = el} + className="mb-6" + > +
+ { dayjs(date).format("MM.DD") } + { dayjs(date).format("ddd") } +
+ {events.map((event, index) => ( +
+
+
{event.summary}
+ {event.recurrenceId && ( + // 重复 + + + + + )} +
+ {formatTimePair(event.start, event.end)} + { + event.description && ( +

{event.description}

+ ) + } +
+ ))} +
+ )) + } +
+
+
+ { + isUserChangeRef.current = true + setFocusedDate(v) + }} + />
From 5d33c4040027acef9241964a97892b1ffece6822 Mon Sep 17 00:00:00 2001 From: Clas Wen Date: Sat, 31 May 2025 10:41:45 +0800 Subject: [PATCH 05/18] fix style --- src/pages/calendar/Schedule.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pages/calendar/Schedule.tsx b/src/pages/calendar/Schedule.tsx index dfba7fc..85be941 100644 --- a/src/pages/calendar/Schedule.tsx +++ b/src/pages/calendar/Schedule.tsx @@ -238,7 +238,7 @@ export default function Schedule() {
{events.map((event, index) => (
-
+
{event.summary}
{event.recurrenceId && ( // 重复 From f34a83bd52d658cefffc5514b0e8d838c1807301 Mon Sep 17 00:00:00 2001 From: m1ngsama Date: Tue, 10 Jun 2025 09:17:39 +0800 Subject: [PATCH 06/18] add remark-toc support & chinese ver & add minecraftMac.md --- src/pages/posts/minecraftMac.md | 37 +++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 src/pages/posts/minecraftMac.md diff --git a/src/pages/posts/minecraftMac.md b/src/pages/posts/minecraftMac.md new file mode 100644 index 0000000..cac7148 --- /dev/null +++ b/src/pages/posts/minecraftMac.md @@ -0,0 +1,37 @@ +--- +layout: "../../layouts/MarkdownPost.astro" +title: "在Apple Silicon Mac上使用Minecraft光影和模组" +pubDate: 2025-06-10 +description: "🤪" +author: + name: "小明" + link: "https://m1ng.space/" +cover: + url: "https://i.pinimg.com/736x/6f/00/d7/6f00d73e426549d0f5b1bb873bf2015f.jpg" + alt: "cover" +tags: ["指南"] +--- + +# 简介 + +> 在本指南中,我们将向您展示如何使用Iris Shaders模组在Mac上为Minecraft添加光影和模组。这种方法可以增强Mac上Minecraft的视觉效果和游戏体验,包括使用Apple Silicon芯片的Mac。我们将介绍安装过程,确保您能获得视觉效果出众且运行流畅的Minecraft体验。无论您是刚接触模组和光影,还是想要升级您的Minecraft设置,这个简明的指南都能满足您的需求。 +> +> **您需要的所有链接都在这里:** + +- Minecraft Java: +- Fabric: +- Fabric API: +- Sodium: +- Iris: + +## 目录 + +## 1. 安装Fabric + +第一步是安装Fabric加载器。前往 并点击Download installer (Universal/.JAR)下载fabric。 + +双击.jar包安装Fabric加载器。根据您的情况安装特定版本或最新版本。 + +## 2. 安装必要的模组 + +🖥 [小明](https://m1ng.space/) 写于2025年06月10日 From 8fbae689d69c177cda9708e00c2eb8f30f9b5591 Mon Sep 17 00:00:00 2001 From: m1ngsama Date: Tue, 10 Jun 2025 09:23:30 +0800 Subject: [PATCH 07/18] add author url support in layout --- astro.config.mts | 37 +++++++++++---------- package.json | 2 ++ pnpm-lock.yaml | 57 +++++++++++++++++++++++++++++++++ src/layouts/MarkdownPost.astro | 8 ++++- src/pages/posts/minecraftMac.md | 2 +- 5 files changed, 87 insertions(+), 19 deletions(-) diff --git a/astro.config.mts b/astro.config.mts index 38a9ef1..5b23eda 100644 --- a/astro.config.mts +++ b/astro.config.mts @@ -1,23 +1,26 @@ -import { defineConfig } from "astro/config" -import { SITE_URL } from "./src/consts" -import vue from "@astrojs/vue" -import tailwind from "@astrojs/tailwind" -import react from "@astrojs/react" -import { handleLocalCoverPlugin } from "./src/plugins/cover" -import { themePipeline } from "./src/plugins/theme" +import { defineConfig } from "astro/config"; +import { SITE_URL } from "./src/consts"; +import vue from "@astrojs/vue"; +import tailwind from "@astrojs/tailwind"; +import react from "@astrojs/react"; +import { handleLocalCoverPlugin } from "./src/plugins/cover"; +import { themePipeline } from "./src/plugins/theme"; +import remarkToc from "remark-toc"; +import rehypeSlug from "rehype-slug"; // https://astro.build/config export default defineConfig({ site: SITE_URL, markdown: { - rehypePlugins: [handleLocalCoverPlugin, ...themePipeline], + remarkPlugins: [[remarkToc, { heading: "目录", tight: true }]], + rehypePlugins: [rehypeSlug, handleLocalCoverPlugin, ...themePipeline], syntaxHighlight: "shiki", shikiConfig: { themes: { - light: 'github-light', - dark: 'github-dark', + light: "github-light", + dark: "github-dark", }, - } + }, }, integrations: [ vue(), @@ -33,13 +36,13 @@ export default defineConfig({ "/active": { target: "https://active.nbtca.space", changeOrigin: true, - rewrite: path => path.replace(/^\/active/, ""), + rewrite: (path) => path.replace(/^\/active/, ""), }, "/saturday": { target: "http://localhost:4000", - rewrite: path => path.replace(/^\/saturday/, ""), + rewrite: (path) => path.replace(/^\/saturday/, ""), }, - } - } - } -}) + }, + }, + }, +}); diff --git a/package.json b/package.json index 3a9f32e..564798c 100644 --- a/package.json +++ b/package.json @@ -38,6 +38,8 @@ "react": "^18.3.1", "react-dom": "^18.3.1", "rehype": "^13.0.2", + "rehype-slug": "^6.0.0", + "remark-toc": "^9.0.0", "sharp": "^0.33.5", "tailwindcss": "^3.4.17", "unist-util-visit": "^5.0.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 0197441..165c5f1 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -80,6 +80,12 @@ importers: rehype: specifier: ^13.0.2 version: 13.0.2 + rehype-slug: + specifier: ^6.0.0 + version: 6.0.0 + remark-toc: + specifier: ^9.0.0 + version: 9.0.0 sharp: specifier: ^0.33.5 version: 0.33.5 @@ -2462,6 +2468,9 @@ packages: '@types/react@18.3.23': resolution: {integrity: sha512-/LDXMQh55EzZQ0uVAZmKKhfENivEvWz6E+EYzh+/MCjMhNsotd+ZHhBGIjFDTi6+fz0OhQQQLbTgdQIxxCsC0w==} + '@types/ungap__structured-clone@1.2.0': + resolution: {integrity: sha512-ZoaihZNLeZSxESbk9PUAPZOlSpcKx81I1+4emtULDVmBLkYutTcMlCj2K9VNlf9EWODxdO6gkAqEaLorXwZQVA==} + '@types/unist@3.0.3': resolution: {integrity: sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==} @@ -3752,6 +3761,9 @@ packages: hast-util-from-parse5@8.0.3: resolution: {integrity: sha512-3kxEVkEKt0zvcZ3hCRYI8rqrgwtlIOFMWkbclACvjlDw8Li9S2hk/d51OI0nr/gIpdMHNepwgOKqZ/sy0Clpyg==} + hast-util-heading-rank@3.0.0: + resolution: {integrity: sha512-EJKb8oMUXVHcWZTDepnr+WNbfnXKFNf9duMesmr4S8SXTJBJ9M4Yok08pu9vxdJwdlGRhVumk9mEhkEvKGifwA==} + hast-util-is-element@3.0.0: resolution: {integrity: sha512-Val9mnv2IWpLbNPqc/pUem+a7Ipj2aHacCwgNfTiK0vJKl0LF+4Ba4+v1oPHFpf3bLYmreq0/l3Gud9S5OH42g==} @@ -3767,6 +3779,9 @@ packages: hast-util-to-parse5@8.0.0: resolution: {integrity: sha512-3KKrV5ZVI8if87DVSi1vDeByYrkGzg4mEfeu4alwgmmIeARiBLKCZS2uw5Gb6nU9x9Yufyj3iudm6i7nl52PFw==} + hast-util-to-string@3.0.1: + resolution: {integrity: sha512-XelQVTDWvqcl3axRfI0xSeoVKzyIFPwsAGSLIsKdJKQMXDYJS4WYrBNF/8J7RdhIcFI2BOHgAifggsvsxp/3+A==} + hast-util-to-text@4.0.2: resolution: {integrity: sha512-KK6y/BN8lbaq654j7JgBydev7wuNMcID54lkRav1P0CaE1e47P72AWWPiGKXTJU271ooYzcvTAn/Zt0REnvc7A==} @@ -4222,6 +4237,9 @@ packages: mdast-util-to-string@4.0.0: resolution: {integrity: sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==} + mdast-util-toc@7.1.0: + resolution: {integrity: sha512-2TVKotOQzqdY7THOdn2gGzS9d1Sdd66bvxUyw3aNpWfcPXCLYSJCCgfPy30sEtuzkDraJgqF35dzgmz6xlvH/w==} + merge-stream@2.0.0: resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} @@ -4799,6 +4817,9 @@ packages: rehype-raw@7.0.0: resolution: {integrity: sha512-/aE8hCfKlQeA8LmyeyQvQF3eBiLRGNlfBJEvWH7ivp9sBqs7TNqBL5X3v157rM4IFETqDnIOO+z5M/biZbo9Ww==} + rehype-slug@6.0.0: + resolution: {integrity: sha512-lWyvf/jwu+oS5+hL5eClVd3hNdmwM1kAC0BUvEGD19pajQMIzcNUd/k9GsfQ+FfECvX+JE+e9/btsKH0EjJT6A==} + rehype-stringify@10.0.1: resolution: {integrity: sha512-k9ecfXHmIPuFVI61B9DeLPN0qFHfawM6RsuX48hoqlaKSF61RskNjSm1lI8PhBEM0MRdLxVVm4WmTqJQccH9mA==} @@ -4821,6 +4842,9 @@ packages: remark-stringify@11.0.0: resolution: {integrity: sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw==} + remark-toc@9.0.0: + resolution: {integrity: sha512-KJ9txbo33GjDAV1baHFze7ij4G8c7SGYoY8Kzsm2gzFpbhL/bSoVpMMzGa3vrNDSWASNd/3ppAqL7cP2zD6JIA==} + repeat-string@1.6.1: resolution: {integrity: sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==} engines: {node: '>=0.10'} @@ -8875,6 +8899,8 @@ snapshots: '@types/prop-types': 15.7.14 csstype: 3.1.3 + '@types/ungap__structured-clone@1.2.0': {} + '@types/unist@3.0.3': {} '@types/uuid@10.0.0': {} @@ -10475,6 +10501,10 @@ snapshots: vfile-location: 5.0.3 web-namespaces: 2.0.1 + hast-util-heading-rank@3.0.0: + dependencies: + '@types/hast': 3.0.4 + hast-util-is-element@3.0.0: dependencies: '@types/hast': 3.0.4 @@ -10523,6 +10553,10 @@ snapshots: web-namespaces: 2.0.1 zwitch: 2.0.4 + hast-util-to-string@3.0.1: + dependencies: + '@types/hast': 3.0.4 + hast-util-to-text@4.0.2: dependencies: '@types/hast': 3.0.4 @@ -11040,6 +11074,16 @@ snapshots: dependencies: '@types/mdast': 4.0.4 + mdast-util-toc@7.1.0: + dependencies: + '@types/mdast': 4.0.4 + '@types/ungap__structured-clone': 1.2.0 + '@ungap/structured-clone': 1.3.0 + github-slugger: 2.0.0 + mdast-util-to-string: 4.0.0 + unist-util-is: 6.0.0 + unist-util-visit: 5.0.0 + merge-stream@2.0.0: {} merge2@1.4.1: {} @@ -11718,6 +11762,14 @@ snapshots: hast-util-raw: 9.1.0 vfile: 6.0.3 + rehype-slug@6.0.0: + dependencies: + '@types/hast': 3.0.4 + github-slugger: 2.0.0 + hast-util-heading-rank: 3.0.0 + hast-util-to-string: 3.0.1 + unist-util-visit: 5.0.0 + rehype-stringify@10.0.1: dependencies: '@types/hast': 3.0.4 @@ -11772,6 +11824,11 @@ snapshots: mdast-util-to-markdown: 2.1.2 unified: 11.0.5 + remark-toc@9.0.0: + dependencies: + '@types/mdast': 4.0.4 + mdast-util-toc: 7.1.0 + repeat-string@1.6.1: {} require-directory@2.1.1: {} diff --git a/src/layouts/MarkdownPost.astro b/src/layouts/MarkdownPost.astro index 581a364..2b2ef9b 100644 --- a/src/layouts/MarkdownPost.astro +++ b/src/layouts/MarkdownPost.astro @@ -88,7 +88,13 @@ const dateFormatted = formatDate(pubDate)

- 作者: {frontmatter.author} 发表日期:{dateFormatted} + 作者: + { + typeof frontmatter.author === "object" + ? {frontmatter.author.name} + : frontmatter.author + } + ,发表日期:{dateFormatted}

diff --git a/src/pages/posts/minecraftMac.md b/src/pages/posts/minecraftMac.md index cac7148..901e3da 100644 --- a/src/pages/posts/minecraftMac.md +++ b/src/pages/posts/minecraftMac.md @@ -5,7 +5,7 @@ pubDate: 2025-06-10 description: "🤪" author: name: "小明" - link: "https://m1ng.space/" + url: "https://m1ng.space/" cover: url: "https://i.pinimg.com/736x/6f/00/d7/6f00d73e426549d0f5b1bb873bf2015f.jpg" alt: "cover" From eee2bf7f954333e1093da6c3715983c311c3d581 Mon Sep 17 00:00:00 2001 From: m1ngsama Date: Tue, 10 Jun 2025 09:42:17 +0800 Subject: [PATCH 08/18] add typography and fix blockquote in markdown --- package.json | 1 + pnpm-lock.yaml | 35 +++++++++++++++++++++++++++++++++ src/layouts/MarkdownPost.astro | 4 +++- src/pages/posts/minecraftMac.md | 34 +++++++++++++++++++++++++++++++- tailwind.config.mjs | 9 +++++++-- 5 files changed, 79 insertions(+), 4 deletions(-) diff --git a/package.json b/package.json index 564798c..b37903b 100644 --- a/package.json +++ b/package.json @@ -51,6 +51,7 @@ "@cspell/eslint-plugin": "^8.19.2", "@eslint/js": "^9.25.1", "@hey-api/openapi-ts": "^0.53.12", + "@tailwindcss/typography": "^0.5.16", "@types/eslint__js": "^8.42.3", "@types/md5": "^2.3.5", "@types/qrcode": "^1.5.5", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 165c5f1..481ed2d 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -114,6 +114,9 @@ importers: '@hey-api/openapi-ts': specifier: ^0.53.12 version: 0.53.12(magicast@0.3.5)(typescript@5.8.3) + '@tailwindcss/typography': + specifier: ^0.5.16 + version: 0.5.16(tailwindcss@3.4.17) '@types/eslint__js': specifier: ^8.42.3 version: 8.42.3 @@ -2377,6 +2380,11 @@ packages: '@swc/helpers@0.5.17': resolution: {integrity: sha512-5IKx/Y13RsYd+sauPb2x+U/xZikHjolzfuDgTAl/Tdf3Q8rslRvC19NKDLgAJQ6wsqADk10ntlv08nPFw/gO/A==} + '@tailwindcss/typography@0.5.16': + resolution: {integrity: sha512-0wDLwCVF5V3x3b1SGXPCDcdsbDHMBe+lkFzBRaHeLvNi+nrrnZ1lA18u+OTWO8iSWU2GxUOCvlXtDuqftc1oiA==} + peerDependencies: + tailwindcss: '>=3.0.0 || insiders || >=4.0.0-alpha.20 || >=4.0.0-beta.1' + '@tanstack/react-virtual@3.11.3': resolution: {integrity: sha512-vCU+OTylXN3hdC8RKg68tPlBPjjxtzon7Ys46MgrSLE+JhSjSTPvoQifV6DQJeJmA8Q3KT6CphJbejupx85vFw==} peerDependencies: @@ -4154,6 +4162,12 @@ packages: resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} engines: {node: '>=10'} + lodash.castarray@4.4.0: + resolution: {integrity: sha512-aVx8ztPv7/2ULbArGJ2Y42bG1mEQ5mGjpdvrbJcJFU3TbYybe+QlLS4pst9zV52ymy2in1KpFPiZnAOATxD4+Q==} + + lodash.isplainobject@4.0.6: + resolution: {integrity: sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==} + lodash.merge@4.6.2: resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} @@ -4698,6 +4712,10 @@ packages: peerDependencies: postcss: ^8.2.14 + postcss-selector-parser@6.0.10: + resolution: {integrity: sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==} + engines: {node: '>=4'} + postcss-selector-parser@6.1.2: resolution: {integrity: sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==} engines: {node: '>=4'} @@ -8796,6 +8814,14 @@ snapshots: dependencies: tslib: 2.8.1 + '@tailwindcss/typography@0.5.16(tailwindcss@3.4.17)': + dependencies: + lodash.castarray: 4.4.0 + lodash.isplainobject: 4.0.6 + lodash.merge: 4.6.2 + postcss-selector-parser: 6.0.10 + tailwindcss: 3.4.17 + '@tanstack/react-virtual@3.11.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@tanstack/virtual-core': 3.11.3 @@ -10905,6 +10931,10 @@ snapshots: dependencies: p-locate: 5.0.0 + lodash.castarray@4.4.0: {} + + lodash.isplainobject@4.0.6: {} + lodash.merge@4.6.2: {} log-symbols@6.0.0: @@ -11626,6 +11656,11 @@ snapshots: postcss: 8.5.3 postcss-selector-parser: 6.1.2 + postcss-selector-parser@6.0.10: + dependencies: + cssesc: 3.0.0 + util-deprecate: 1.0.2 + postcss-selector-parser@6.1.2: dependencies: cssesc: 3.0.0 diff --git a/src/layouts/MarkdownPost.astro b/src/layouts/MarkdownPost.astro index 2b2ef9b..c211a25 100644 --- a/src/layouts/MarkdownPost.astro +++ b/src/layouts/MarkdownPost.astro @@ -76,7 +76,9 @@ const dateFormatted = formatDate(pubDate)
- +
+ +
diff --git a/src/pages/posts/minecraftMac.md b/src/pages/posts/minecraftMac.md index 901e3da..070eb9e 100644 --- a/src/pages/posts/minecraftMac.md +++ b/src/pages/posts/minecraftMac.md @@ -34,4 +34,36 @@ tags: ["指南"] ## 2. 安装必要的模组 -🖥 [小明](https://m1ng.space/) 写于2025年06月10日 +安装Fabric加载器后,打开Minecraft启动器。您会发现有一个fabri-loader-1.XX. +X,只需点击开始游戏下载一些必要的包。如果一切正确,您就会进入游戏。现在关闭游戏并前往**/Library/Application Support/minecraft**。您需要创建两个新文件夹,一个叫mods(在这里放模组)和一个叫shaderpacks(在这里放光影)。 + +现在您需要下载: + +- Fabric API + + +> Fabric API是一个极简的Minecraft模组工具链,提供了一个灵活的框架来创建模组。以其快速更新和与新Minecraft版本的兼容性而闻名,它支持客户端和服务器端模组,使其成为模组社区中的热门选择。 + +- Sodium + + + > Sodium是一个Minecraft性能优化模组,可以显著提高游戏的帧率并减少延迟。它设计用于与Fabric模组加载器一起工作,专注于优化游戏的渲染引擎。通过重写游戏图形引擎的关键部分,Sodium提供了更流畅的游戏体验,特别是在低端硬件上。它以能够在不影响游戏视觉质量的情况下提升性能而备受好评,是希望改善Minecraft体验的玩家的热门选择。 + +- Iris + + Iris是一个用于在Fabric上使用光影的Minecraft模组,提供与Sodium的兼容性以增强性能和视觉效果。它简化了光影管理,允许高级照明和效果。 + 将下载的文件放入`mods`文件夹。 + +```bash +➜ mods tree +. +├── fabric-api-0.102.0+1.21.jar +├── iris-fabric-1.8.8+mc1.21.1.jar +├── litematica-fabric-1.21-0.19.58.jar +├── malilib-fabric-1.21-0.21.8.jar +├── reeses-sodium-options-fabric-1.8.3+mc1.21.4.jar +├── sodium-extra-fabric-0.6.0+mc1.21.1.jar +└── sodium-fabric-0.6.13+mc1.21.1.jar + +1 directory, 7 files +``` diff --git a/tailwind.config.mjs b/tailwind.config.mjs index 2258176..459e532 100644 --- a/tailwind.config.mjs +++ b/tailwind.config.mjs @@ -1,7 +1,12 @@ import { heroui } from "@heroui/react" +import typography from "@tailwindcss/typography" + /** @type {import('tailwindcss').Config} */ export default { - content: ["./src/**/*.{astro,html,js,jsx,md,mdx,svelte,ts,tsx,vue}", "./node_modules/@heroui/theme/dist/**/*.{js,ts,jsx,tsx}"], + content: [ + "./src/**/*.{astro,html,js,jsx,md,mdx,svelte,ts,tsx,vue}", + "./node_modules/@heroui/theme/dist/**/*.{js,ts,jsx,tsx}", + ], theme: { screens: { xs: "416px", @@ -16,5 +21,5 @@ export default { }, }, darkMode: ["selector", "body.theme-dark"], - plugins: [heroui()], + plugins: [heroui(), typography()], } From a0bed1c4cabaef8a1e3c4907dcad6633e66daf54 Mon Sep 17 00:00:00 2001 From: m1ngsama Date: Tue, 10 Jun 2025 09:53:56 +0800 Subject: [PATCH 09/18] finished the minecraftMac.md --- src/pages/posts/minecraftMac.md | 55 ++++++++++++++++++++++----------- 1 file changed, 37 insertions(+), 18 deletions(-) diff --git a/src/pages/posts/minecraftMac.md b/src/pages/posts/minecraftMac.md index 070eb9e..4da0047 100644 --- a/src/pages/posts/minecraftMac.md +++ b/src/pages/posts/minecraftMac.md @@ -15,44 +15,49 @@ tags: ["指南"] # 简介 > 在本指南中,我们将向您展示如何使用Iris Shaders模组在Mac上为Minecraft添加光影和模组。这种方法可以增强Mac上Minecraft的视觉效果和游戏体验,包括使用Apple Silicon芯片的Mac。我们将介绍安装过程,确保您能获得视觉效果出众且运行流畅的Minecraft体验。无论您是刚接触模组和光影,还是想要升级您的Minecraft设置,这个简明的指南都能满足您的需求。 -> -> **您需要的所有链接都在这里:** -- Minecraft Java: -- Fabric: -- Fabric API: -- Sodium: -- Iris: +您需要的所有链接都在这里: + +| content | link | +| :------------: | :------------------------------------: | +| Minecraft Java | | +| Fabric | | +| Fabric API | | +| Sodium | | +| Iris | | ## 目录 ## 1. 安装Fabric -第一步是安装Fabric加载器。前往 并点击Download installer (Universal/.JAR)下载fabric。 +第一步是安装Fabric加载器。前往 + +并点击Download installer (Universal/.JAR)下载fabric。 双击.jar包安装Fabric加载器。根据您的情况安装特定版本或最新版本。 ## 2. 安装必要的模组 安装Fabric加载器后,打开Minecraft启动器。您会发现有一个fabri-loader-1.XX. -X,只需点击开始游戏下载一些必要的包。如果一切正确,您就会进入游戏。现在关闭游戏并前往**/Library/Application Support/minecraft**。您需要创建两个新文件夹,一个叫mods(在这里放模组)和一个叫shaderpacks(在这里放光影)。 +X,只需点击开始游戏下载一些必要的包。 + +如果一切正确,您就会进入游戏。现在关闭游戏并前往**/Library/Application Support/minecraft**。 + +您需要创建两个新文件夹,一个叫mods(在这里放模组)和一个叫shaderpacks(在这里放光影)。 现在您需要下载: -- Fabric API - +- [Fabric API](https://modrinth.com/mod/fabric-api/) -> Fabric API是一个极简的Minecraft模组工具链,提供了一个灵活的框架来创建模组。以其快速更新和与新Minecraft版本的兼容性而闻名,它支持客户端和服务器端模组,使其成为模组社区中的热门选择。 + > Fabric API是一个极简的Minecraft模组工具链,提供了一个灵活的框架来创建模组。以其快速更新和与新Minecraft版本的兼容性而闻名,它支持客户端和服务器端模组,使其成为模组社区中的热门选择。 -- Sodium - +- [Sodium](https://modrinth.com/mod/sodium) > Sodium是一个Minecraft性能优化模组,可以显著提高游戏的帧率并减少延迟。它设计用于与Fabric模组加载器一起工作,专注于优化游戏的渲染引擎。通过重写游戏图形引擎的关键部分,Sodium提供了更流畅的游戏体验,特别是在低端硬件上。它以能够在不影响游戏视觉质量的情况下提升性能而备受好评,是希望改善Minecraft体验的玩家的热门选择。 -- Iris - - Iris是一个用于在Fabric上使用光影的Minecraft模组,提供与Sodium的兼容性以增强性能和视觉效果。它简化了光影管理,允许高级照明和效果。 - 将下载的文件放入`mods`文件夹。 +- [Iris](https://modrinth.com/mod/iris) + > Iris是一个用于在Fabric上使用光影的Minecraft模组,提供与Sodium的兼容性以增强性能和视觉效果。它简化了光影管理,允许高级照明和效果。 + > 将下载的文件放入`mods`文件夹。 ```bash ➜ mods tree @@ -67,3 +72,17 @@ X,只需点击开始游戏下载一些必要的包。如果一切正确,您 1 directory, 7 files ``` + +下载这些模组后,打开游戏检查是否一切正常。如果有错误,可能是因为Mac击支持或版本不兼容。选择正确的版本下载。 + +## 3. 下载您的光影包 + +前往 下载光影。您需要注意这些光影是否支持Mac。 + +将下载的光影放入shaderpacks。打开游戏并点击选项–>视频设置–>光影包,现在您可以看到您的光影了。 + +然后在列表中点击您想要的光影包,点击应用,然后完成。 + +## 4. 享受游戏 + +恭喜您,尽情享受游戏吧。 From ae53a05c9964a8c2b0b129495375bb0544c0d66c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 12 Jun 2025 05:56:59 +0000 Subject: [PATCH 10/18] Bump brace-expansion in the npm_and_yarn group across 1 directory Bumps the npm_and_yarn group with 1 update in the / directory: [brace-expansion](https://github.com/juliangruber/brace-expansion). Updates `brace-expansion` from 1.1.11 to 1.1.12 - [Release notes](https://github.com/juliangruber/brace-expansion/releases) - [Commits](https://github.com/juliangruber/brace-expansion/compare/1.1.11...v1.1.12) --- updated-dependencies: - dependency-name: brace-expansion dependency-version: 1.1.12 dependency-type: indirect dependency-group: npm_and_yarn ... Signed-off-by: dependabot[bot] --- pnpm-lock.yaml | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 481ed2d..d75f95e 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -2894,11 +2894,11 @@ packages: resolution: {integrity: sha512-F3PH5k5juxom4xktynS7MoFY+NUWH5LC4CnH11YB8NPew+HLpmBLCybSAEyb2F+4pRXhuhWqFesoQd6DAyc2hw==} engines: {node: '>=18'} - brace-expansion@1.1.11: - resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} + brace-expansion@1.1.12: + resolution: {integrity: sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==} - brace-expansion@2.0.1: - resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} + brace-expansion@2.0.2: + resolution: {integrity: sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==} braces@3.0.3: resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} @@ -9515,12 +9515,12 @@ snapshots: widest-line: 5.0.0 wrap-ansi: 9.0.0 - brace-expansion@1.1.11: + brace-expansion@1.1.12: dependencies: balanced-match: 1.0.2 concat-map: 0.0.1 - brace-expansion@2.0.1: + brace-expansion@2.0.2: dependencies: balanced-match: 1.0.2 @@ -11320,15 +11320,15 @@ snapshots: minimatch@3.1.2: dependencies: - brace-expansion: 1.1.11 + brace-expansion: 1.1.12 minimatch@5.1.6: dependencies: - brace-expansion: 2.0.1 + brace-expansion: 2.0.2 minimatch@9.0.5: dependencies: - brace-expansion: 2.0.1 + brace-expansion: 2.0.2 minimist@1.2.8: {} From 1329a2792d2056c60ebaa09525fcebade253b9ec Mon Sep 17 00:00:00 2001 From: Clas Wen Date: Sat, 12 Jul 2025 15:02:10 +0800 Subject: [PATCH 11/18] Add mobile date selector for calendar page MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Add sticky mobile date selector with year and month dropdowns - Hide existing calendar on mobile screens - Display selected values with 年/月 suffixes - Improve mobile user experience for date navigation 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude --- src/pages/calendar/Schedule.tsx | 59 +++++++++++++++++++++++++++++++-- 1 file changed, 57 insertions(+), 2 deletions(-) diff --git a/src/pages/calendar/Schedule.tsx b/src/pages/calendar/Schedule.tsx index 85be941..52d758d 100644 --- a/src/pages/calendar/Schedule.tsx +++ b/src/pages/calendar/Schedule.tsx @@ -1,7 +1,7 @@ import ICAL from "ical.js" import dayjs from "dayjs" import { useEffect, useMemo, useRef, useState } from "react" -import { Alert, Button, Calendar, Link, Spinner } from "@heroui/react" +import { Alert, Button, Calendar, Link, Spinner, Select, SelectItem } from "@heroui/react" import { today, getLocalTimeZone } from "@internationalized/date" import "dayjs/locale/zh-cn" @@ -83,7 +83,8 @@ const extractScheduleEvents = (icalComp: ICAL.Component): ScheduleEvent[] => { end: event.endDate.toJSDate(), summary: event.summary, description: event.description, - recurrenceId: "123", + recurrenceId: event.uid || event.startDate.toString(), + }] } return expandEventOccurrences(event, rangeEnd) @@ -109,6 +110,12 @@ export default function Schedule() { const calendarRef = useRef(null) const [loading, setLoading] = useState(true) + const currentYear = focusedDate.year + const currentMonth = focusedDate.month + + const years = Array.from({ length: 10 }, (_, i) => currentYear - 5 + i) + const months = Array.from({ length: 12 }, (_, i) => i + 1) + useEffect(() => { const rangeStart = ICAL.Time.fromJSDate(dayjs(focusedDate.toDate(getLocalTimeZone())).startOf("month").toDate()) const rangeEnd = ICAL.Time.fromJSDate(dayjs(focusedDate.toDate(getLocalTimeZone())).endOf("month").toDate()) @@ -191,6 +198,54 @@ export default function Schedule() {
日程
+ + {/* Mobile Date Selector */} +
+
+ + +
+
Date: Wed, 20 Aug 2025 14:09:00 +0000 Subject: [PATCH 12/18] Bump astro in the npm_and_yarn group across 1 directory Bumps the npm_and_yarn group with 1 update in the / directory: [astro](https://github.com/withastro/astro/tree/HEAD/packages/astro). Updates `astro` from 4.16.18 to 4.16.19 - [Release notes](https://github.com/withastro/astro/releases) - [Changelog](https://github.com/withastro/astro/blob/astro@4.16.19/packages/astro/CHANGELOG.md) - [Commits](https://github.com/withastro/astro/commits/astro@4.16.19/packages/astro) --- updated-dependencies: - dependency-name: astro dependency-version: 4.16.19 dependency-type: direct:production dependency-group: npm_and_yarn ... Signed-off-by: dependabot[bot] --- package.json | 2 +- pnpm-lock.yaml | 860 +++++++++++++++++++++++++++---------------------- 2 files changed, 474 insertions(+), 388 deletions(-) diff --git a/package.json b/package.json index 60b6338..55f7488 100644 --- a/package.json +++ b/package.json @@ -28,7 +28,7 @@ "@logto/browser": "^2.2.18", "@react-stately/data": "^3.13.0", "@stylistic/eslint-plugin": "^2.13.0", - "astro": "^4.16.18", + "astro": "^4.16.19", "dayjs": "^1.11.13", "framer-motion": "^11.18.2", "ical.js": "^2.1.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index e26975f..3f6ad20 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -16,10 +16,10 @@ importers: version: 4.0.11 '@astrojs/tailwind': specifier: ^5.1.5 - version: 5.1.5(astro@4.16.18(@types/node@22.14.1)(rollup@4.40.0)(typescript@5.8.3))(tailwindcss@3.4.17) + version: 5.1.5(astro@4.16.19(@types/node@22.14.1)(rollup@4.46.3)(typescript@5.8.3))(tailwindcss@3.4.17) '@astrojs/vue': specifier: ^4.5.3 - version: 4.5.3(@types/node@22.14.1)(astro@4.16.18(@types/node@22.14.1)(rollup@4.40.0)(typescript@5.8.3))(rollup@4.40.0)(vue@3.5.15(typescript@5.8.3)) + version: 4.5.3(@types/node@22.14.1)(astro@4.16.19(@types/node@22.14.1)(rollup@4.46.3)(typescript@5.8.3))(rollup@4.46.3)(vue@3.5.15(typescript@5.8.3)) '@fullcalendar/core': specifier: ^6.1.17 version: 6.1.17 @@ -51,8 +51,8 @@ importers: specifier: ^2.13.0 version: 2.13.0(eslint@8.57.1)(typescript@5.8.3) astro: - specifier: ^4.16.18 - version: 4.16.18(@types/node@22.14.1)(rollup@4.40.0)(typescript@5.8.3) + specifier: ^4.16.19 + version: 4.16.19(@types/node@22.14.1)(rollup@4.46.3)(typescript@5.8.3) dayjs: specifier: ^1.11.13 version: 1.11.13 @@ -183,8 +183,8 @@ packages: resolution: {integrity: sha512-4gY54eEGEstClvEkGnwVkTkrx0sqwemEFG5OSRRn3tD91XH0+Q8XIkYIfo7IwEWPpJZwILb9GUXeShtplRc/eA==} engines: {node: '>= 16'} - '@astrojs/compiler@2.11.0': - resolution: {integrity: sha512-zZOO7i+JhojO8qmlyR/URui6LyfHJY6m+L9nwyX5GiKD78YoRaZ5tzz6X0fkl+5bD3uwlDHayf6Oe8Fu36RKNg==} + '@astrojs/compiler@2.12.2': + resolution: {integrity: sha512-w2zfvhjNCkNMmMMOn5b0J8+OmUaBL1o40ipMvqcG6NRpdC+lKxmTi48DT8Xw0SzJ3AfmeFLB45zXZXtmbsjcgw==} '@astrojs/internal-helpers@0.4.1': resolution: {integrity: sha512-bMf9jFihO8YP940uD70SI/RDzIhUHJAolWVcO1v5PUivxGKvfLZTLTVVxEYzGYyPsA3ivdLNqMnL5VgmQySa+g==} @@ -229,24 +229,28 @@ packages: resolution: {integrity: sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==} engines: {node: '>=6.9.0'} - '@babel/compat-data@7.26.8': - resolution: {integrity: sha512-oH5UPLMWR3L2wEFLnFJ1TZXqHufiTKAiLfqw5zkhS4dKXLJ10yVztfil/twG8EDTA4F/tvVNw9nOl4ZMslB8rQ==} + '@babel/code-frame@7.27.1': + resolution: {integrity: sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==} engines: {node: '>=6.9.0'} - '@babel/core@7.26.10': - resolution: {integrity: sha512-vMqyb7XCDMPvJFFOaT9kxtiRh42GwlZEg1/uIgtZshS5a/8OaduUfCi7kynKgc3Tw/6Uo2D+db9qBttghhmxwQ==} + '@babel/compat-data@7.28.0': + resolution: {integrity: sha512-60X7qkglvrap8mn1lh2ebxXdZYtUcpd7gsmy9kLaBJ4i/WdY8PqTSdxyA8qraikqKQK5C1KRBKXqznrVapyNaw==} engines: {node: '>=6.9.0'} - '@babel/generator@7.27.0': - resolution: {integrity: sha512-VybsKvpiN1gU1sdMZIp7FcqphVVKEwcuj02x73uvcHE0PTihx1nlBcowYWhDwjpoAXRv43+gDzyggGnn1XZhVw==} + '@babel/core@7.28.3': + resolution: {integrity: sha512-yDBHV9kQNcr2/sUr9jghVyz9C3Y5G2zUM2H2lo+9mKv4sFgbA8s8Z9t8D1jiTkGoO/NoIfKMyKWr4s6CN23ZwQ==} engines: {node: '>=6.9.0'} - '@babel/helper-annotate-as-pure@7.25.9': - resolution: {integrity: sha512-gv7320KBUFJz1RnylIg5WWYPRXKZ884AGkYpgpWW02TH66Dl+HaC1t1CKd0z3R4b6hdYEcmrNZHUmfCP+1u3/g==} + '@babel/generator@7.28.3': + resolution: {integrity: sha512-3lSpxGgvnmZznmBkCRnVREPUFJv2wrv9iAoFDvADJc0ypmdOxdUtcLeBgBJ6zE0PMeTKnxeQzyk0xTBq4Ep7zw==} engines: {node: '>=6.9.0'} - '@babel/helper-compilation-targets@7.27.0': - resolution: {integrity: sha512-LVk7fbXml0H2xH34dFzKQ7TDZ2G4/rVTOrq9V+icbbadjbVxxeFeDsNHv2SrZeWoA+6ZiTyWYWtScEIW07EAcA==} + '@babel/helper-annotate-as-pure@7.27.3': + resolution: {integrity: sha512-fXSwMQqitTGeHLBC08Eq5yXz2m37E4pJX1qAU1+2cNedz/ifv/bVXft90VeSav5nFO61EcNgwr0aJxbyPaWBPg==} + engines: {node: '>=6.9.0'} + + '@babel/helper-compilation-targets@7.27.2': + resolution: {integrity: sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==} engines: {node: '>=6.9.0'} '@babel/helper-create-class-features-plugin@7.27.0': @@ -255,16 +259,20 @@ packages: peerDependencies: '@babel/core': ^7.0.0 + '@babel/helper-globals@7.28.0': + resolution: {integrity: sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==} + engines: {node: '>=6.9.0'} + '@babel/helper-member-expression-to-functions@7.25.9': resolution: {integrity: sha512-wbfdZ9w5vk0C0oyHqAJbc62+vet5prjj01jjJ8sKn3j9h3MQQlflEdXYvuqRWjHnM12coDEqiC1IRCi0U/EKwQ==} engines: {node: '>=6.9.0'} - '@babel/helper-module-imports@7.25.9': - resolution: {integrity: sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==} + '@babel/helper-module-imports@7.27.1': + resolution: {integrity: sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==} engines: {node: '>=6.9.0'} - '@babel/helper-module-transforms@7.26.0': - resolution: {integrity: sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==} + '@babel/helper-module-transforms@7.28.3': + resolution: {integrity: sha512-gytXUbs8k2sXS9PnQptz5o0QnpLL51SwASIORY6XaBKF88nsOT0Zw9szLqlSGQDP/4TljBAD5y98p2U1fqkdsw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 @@ -273,8 +281,8 @@ packages: resolution: {integrity: sha512-FIpuNaz5ow8VyrYcnXQTDRGvV6tTjkNtCK/RYNDXGSLlUD6cBuQTSw43CShGxjvfBTfcUA/r6UhUCbtYqkhcuQ==} engines: {node: '>=6.9.0'} - '@babel/helper-plugin-utils@7.26.5': - resolution: {integrity: sha512-RS+jZcRdZdRFzMyr+wcsaqOmld1/EqTghfaBGQQd/WnRdzdlvSZ//kF7U8VQTxf1ynZ4cjUcYgjVGx13ewNPMg==} + '@babel/helper-plugin-utils@7.27.1': + resolution: {integrity: sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==} engines: {node: '>=6.9.0'} '@babel/helper-replace-supers@7.26.5': @@ -287,28 +295,20 @@ packages: resolution: {integrity: sha512-K4Du3BFa3gvyhzgPcntrkDgZzQaq6uozzcpGbOO1OEJaI+EJdqWIMTLgFgQf6lrfiDFo5FU+BxKepI9RmZqahA==} engines: {node: '>=6.9.0'} - '@babel/helper-string-parser@7.25.9': - resolution: {integrity: sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==} - engines: {node: '>=6.9.0'} - '@babel/helper-string-parser@7.27.1': resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==} engines: {node: '>=6.9.0'} - '@babel/helper-validator-identifier@7.25.9': - resolution: {integrity: sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==} - engines: {node: '>=6.9.0'} - '@babel/helper-validator-identifier@7.27.1': resolution: {integrity: sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==} engines: {node: '>=6.9.0'} - '@babel/helper-validator-option@7.25.9': - resolution: {integrity: sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==} + '@babel/helper-validator-option@7.27.1': + resolution: {integrity: sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==} engines: {node: '>=6.9.0'} - '@babel/helpers@7.27.0': - resolution: {integrity: sha512-U5eyP/CTFPuNE3qk+WZMxFkp/4zUzdceQlfzf7DdGdhp+Fezd7HD+i8Y24ZuTMKX3wQBld449jijbGq6OdGNQg==} + '@babel/helpers@7.28.3': + resolution: {integrity: sha512-PTNtvUQihsAsDHMOP5pfobP8C6CM4JWXmP8DrEIt46c3r2bf87Ua1zoqevsMo9g+tWDwgWrFP5EIxuBx5RudAw==} engines: {node: '>=6.9.0'} '@babel/parser@7.27.0': @@ -316,8 +316,8 @@ packages: engines: {node: '>=6.0.0'} hasBin: true - '@babel/parser@7.27.3': - resolution: {integrity: sha512-xyYxRj6+tLNDTWi0KCBcZ9V7yg3/lwL9DWh9Uwh/RIVlIfFidggcgxKX3GCXwCiswwcGRawBKbEg2LG/Y8eJhw==} + '@babel/parser@7.28.3': + resolution: {integrity: sha512-7+Ey1mAgYqFAx2h0RuoxcQT5+MlG3GTV0TQrgr7/ZliKsm/MNDxVVutlWaziMq7wJNAz8MTqz55XLpWvva6StA==} engines: {node: '>=6.0.0'} hasBin: true @@ -344,8 +344,8 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-syntax-jsx@7.25.9': - resolution: {integrity: sha512-ld6oezHQMZsZfp6pWtbjaNDF2tiiCYYDqQszHt5VV437lewP9aSi2Of99CK0D0XB21k7FLgnLcmQKyKzynfeAA==} + '@babel/plugin-syntax-jsx@7.27.1': + resolution: {integrity: sha512-y8YTNIeKoyhGd9O0Jiyzyyqk8gdjnumGTQPsz0xOZOQ2RmkVJeZ1vmmfIvFEKqucBG6axJGBZDE/7iI5suUI/w==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -368,8 +368,8 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-react-jsx@7.25.9': - resolution: {integrity: sha512-s5XwpQYCqGerXl+Pu6VDL3x0j2d82eiV77UJ8a2mDHAW7j9SWRqQ2y1fNo1Z74CdcYipl5Z41zvjj4Nfzq36rw==} + '@babel/plugin-transform-react-jsx@7.27.1': + resolution: {integrity: sha512-2KH4LWGSrJIkVf5tSiBFYuXDAoWRq2MMwgivCf+93dd0GQi8RXLjKA/0EvRnVV5G0hrHczsquXuD01L8s6dmBw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -384,20 +384,16 @@ packages: resolution: {integrity: sha512-VtPOkrdPHZsKc/clNqyi9WUA8TINkZ4cGk63UUE3u4pmB2k+ZMQRDuIOagv8UVd6j7k0T3+RRIb7beKTebNbcw==} engines: {node: '>=6.9.0'} - '@babel/template@7.27.0': - resolution: {integrity: sha512-2ncevenBqXI6qRMukPlXwHKHchC7RyMuu4xv5JBXRfOGVcTy1mXCD12qrp7Jsoxll1EV3+9sE4GugBVRjT2jFA==} + '@babel/template@7.27.2': + resolution: {integrity: sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==} engines: {node: '>=6.9.0'} - '@babel/traverse@7.27.0': - resolution: {integrity: sha512-19lYZFzYVQkkHkl4Cy4WrAVcqBkgvV2YM2TU3xG6DIwO7O3ecbDPfW3yM3bjAGcqcQHi+CCtjMR3dIEHxsd6bA==} + '@babel/traverse@7.28.3': + resolution: {integrity: sha512-7w4kZYHneL3A6NP2nxzHvT3HCZ7puDZZjFMqDpBPECub79sTtSO5CGXDkKrTQq8ksAwfD/XI2MRFX23njdDaIQ==} engines: {node: '>=6.9.0'} - '@babel/types@7.27.0': - resolution: {integrity: sha512-H45s8fVLYjbhFH62dIJ3WtmJ6RSPt/3DRO0ZcT2SUiYiQyz3BLVb9ADEnLl91m74aQPS3AzzeajZHYOalWe3bg==} - engines: {node: '>=6.9.0'} - - '@babel/types@7.27.3': - resolution: {integrity: sha512-Y1GkI4ktrtvmawoSq+4FCVHNryea6uR+qUQy0AGxLSsjCX0nVmkYQMBLHDkXZuo5hGx7eYdnIaslsdBFm7zbUw==} + '@babel/types@7.28.2': + resolution: {integrity: sha512-ruv7Ae4J5dUYULmeXw1gmb7rYRz57OWCPM57pHojnLq/3Z1CK2lNSLTCVjxVk1F/TZHwOZZrOWi0ur95BbLxNQ==} engines: {node: '>=6.9.0'} '@cspell/cspell-bundled-dicts@8.19.4': @@ -1513,6 +1509,9 @@ packages: resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} engines: {node: '>=12'} + '@jridgewell/gen-mapping@0.3.13': + resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==} + '@jridgewell/gen-mapping@0.3.8': resolution: {integrity: sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==} engines: {node: '>=6.0.0'} @@ -1528,9 +1527,15 @@ packages: '@jridgewell/sourcemap-codec@1.5.0': resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} + '@jridgewell/sourcemap-codec@1.5.5': + resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==} + '@jridgewell/trace-mapping@0.3.25': resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} + '@jridgewell/trace-mapping@0.3.30': + resolution: {integrity: sha512-GQ7Nw5G2lTu/BtHTKfXhKHok2WGetd4XYcVKGx00SjAk8GMwgJM3zr6zORiPGuOE+/vkc90KtTosSSvaCjKb2Q==} + '@jsdevtools/ono@7.1.3': resolution: {integrity: sha512-4JQNk+3mVzK3xh2rqd6RB4J46qUR19azEHBneZyTZM+c456qOrbbM/5xcR8huNCCcbVt7+UmizG6GuUvPvKUYg==} @@ -2227,8 +2232,8 @@ packages: resolution: {integrity: sha512-3arRdUp1fNx55itnjKiUhO6t4Mf91TsrTIYINDNLAZPS0TPd5YpiXRctwjel0qqWoOOhjA34cZ3m4dksLDFUYg==} engines: {node: '>=18.17.0', npm: '>=9.5.0'} - '@rollup/pluginutils@5.1.4': - resolution: {integrity: sha512-USm05zrsFxYLPdWWq+K3STlWiT/3ELn3RcV5hJMghpeAIhxfsUIg6mt12CBJBInWMV4VneoV7SfGv8xIwo2qNQ==} + '@rollup/pluginutils@5.2.0': + resolution: {integrity: sha512-qWJ2ZTbmumwiLFomfzTyt5Kng4hwPi9rwCYN4SHb6eaRU1KNO4ccxINHr/VhH4GgPlt1XfSTLX2LBTme8ne4Zw==} engines: {node: '>=14.0.0'} peerDependencies: rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 @@ -2236,103 +2241,103 @@ packages: rollup: optional: true - '@rollup/rollup-android-arm-eabi@4.40.0': - resolution: {integrity: sha512-+Fbls/diZ0RDerhE8kyC6hjADCXA1K4yVNlH0EYfd2XjyH0UGgzaQ8MlT0pCXAThfxv3QUAczHaL+qSv1E4/Cg==} + '@rollup/rollup-android-arm-eabi@4.46.3': + resolution: {integrity: sha512-UmTdvXnLlqQNOCJnyksjPs1G4GqXNGW1LrzCe8+8QoaLhhDeTXYBgJ3k6x61WIhlHX2U+VzEJ55TtIjR/HTySA==} cpu: [arm] os: [android] - '@rollup/rollup-android-arm64@4.40.0': - resolution: {integrity: sha512-PPA6aEEsTPRz+/4xxAmaoWDqh67N7wFbgFUJGMnanCFs0TV99M0M8QhhaSCks+n6EbQoFvLQgYOGXxlMGQe/6w==} + '@rollup/rollup-android-arm64@4.46.3': + resolution: {integrity: sha512-8NoxqLpXm7VyeI0ocidh335D6OKT0UJ6fHdnIxf3+6oOerZZc+O7r+UhvROji6OspyPm+rrIdb1gTXtVIqn+Sg==} cpu: [arm64] os: [android] - '@rollup/rollup-darwin-arm64@4.40.0': - resolution: {integrity: sha512-GwYOcOakYHdfnjjKwqpTGgn5a6cUX7+Ra2HeNj/GdXvO2VJOOXCiYYlRFU4CubFM67EhbmzLOmACKEfvp3J1kQ==} + '@rollup/rollup-darwin-arm64@4.46.3': + resolution: {integrity: sha512-csnNavqZVs1+7/hUKtgjMECsNG2cdB8F7XBHP6FfQjqhjF8rzMzb3SLyy/1BG7YSfQ+bG75Ph7DyedbUqwq1rA==} cpu: [arm64] os: [darwin] - '@rollup/rollup-darwin-x64@4.40.0': - resolution: {integrity: sha512-CoLEGJ+2eheqD9KBSxmma6ld01czS52Iw0e2qMZNpPDlf7Z9mj8xmMemxEucinev4LgHalDPczMyxzbq+Q+EtA==} + '@rollup/rollup-darwin-x64@4.46.3': + resolution: {integrity: sha512-r2MXNjbuYabSIX5yQqnT8SGSQ26XQc8fmp6UhlYJd95PZJkQD1u82fWP7HqvGUf33IsOC6qsiV+vcuD4SDP6iw==} cpu: [x64] os: [darwin] - '@rollup/rollup-freebsd-arm64@4.40.0': - resolution: {integrity: sha512-r7yGiS4HN/kibvESzmrOB/PxKMhPTlz+FcGvoUIKYoTyGd5toHp48g1uZy1o1xQvybwwpqpe010JrcGG2s5nkg==} + '@rollup/rollup-freebsd-arm64@4.46.3': + resolution: {integrity: sha512-uluObTmgPJDuJh9xqxyr7MV61Imq+0IvVsAlWyvxAaBSNzCcmZlhfYcRhCdMaCsy46ccZa7vtDDripgs9Jkqsw==} cpu: [arm64] os: [freebsd] - '@rollup/rollup-freebsd-x64@4.40.0': - resolution: {integrity: sha512-mVDxzlf0oLzV3oZOr0SMJ0lSDd3xC4CmnWJ8Val8isp9jRGl5Dq//LLDSPFrasS7pSm6m5xAcKaw3sHXhBjoRw==} + '@rollup/rollup-freebsd-x64@4.46.3': + resolution: {integrity: sha512-AVJXEq9RVHQnejdbFvh1eWEoobohUYN3nqJIPI4mNTMpsyYN01VvcAClxflyk2HIxvLpRcRggpX1m9hkXkpC/A==} cpu: [x64] os: [freebsd] - '@rollup/rollup-linux-arm-gnueabihf@4.40.0': - resolution: {integrity: sha512-y/qUMOpJxBMy8xCXD++jeu8t7kzjlOCkoxxajL58G62PJGBZVl/Gwpm7JK9+YvlB701rcQTzjUZ1JgUoPTnoQA==} + '@rollup/rollup-linux-arm-gnueabihf@4.46.3': + resolution: {integrity: sha512-byyflM+huiwHlKi7VHLAYTKr67X199+V+mt1iRgJenAI594vcmGGddWlu6eHujmcdl6TqSNnvqaXJqZdnEWRGA==} cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm-musleabihf@4.40.0': - resolution: {integrity: sha512-GoCsPibtVdJFPv/BOIvBKO/XmwZLwaNWdyD8TKlXuqp0veo2sHE+A/vpMQ5iSArRUz/uaoj4h5S6Pn0+PdhRjg==} + '@rollup/rollup-linux-arm-musleabihf@4.46.3': + resolution: {integrity: sha512-aLm3NMIjr4Y9LklrH5cu7yybBqoVCdr4Nvnm8WB7PKCn34fMCGypVNpGK0JQWdPAzR/FnoEoFtlRqZbBBLhVoQ==} cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm64-gnu@4.40.0': - resolution: {integrity: sha512-L5ZLphTjjAD9leJzSLI7rr8fNqJMlGDKlazW2tX4IUF9P7R5TMQPElpH82Q7eNIDQnQlAyiNVfRPfP2vM5Avvg==} + '@rollup/rollup-linux-arm64-gnu@4.46.3': + resolution: {integrity: sha512-VtilE6eznJRDIoFOzaagQodUksTEfLIsvXymS+UdJiSXrPW7Ai+WG4uapAc3F7Hgs791TwdGh4xyOzbuzIZrnw==} cpu: [arm64] os: [linux] - '@rollup/rollup-linux-arm64-musl@4.40.0': - resolution: {integrity: sha512-ATZvCRGCDtv1Y4gpDIXsS+wfFeFuLwVxyUBSLawjgXK2tRE6fnsQEkE4csQQYWlBlsFztRzCnBvWVfcae/1qxQ==} + '@rollup/rollup-linux-arm64-musl@4.46.3': + resolution: {integrity: sha512-dG3JuS6+cRAL0GQ925Vppafi0qwZnkHdPeuZIxIPXqkCLP02l7ka+OCyBoDEv8S+nKHxfjvjW4OZ7hTdHkx8/w==} cpu: [arm64] os: [linux] - '@rollup/rollup-linux-loongarch64-gnu@4.40.0': - resolution: {integrity: sha512-wG9e2XtIhd++QugU5MD9i7OnpaVb08ji3P1y/hNbxrQ3sYEelKJOq1UJ5dXczeo6Hj2rfDEL5GdtkMSVLa/AOg==} + '@rollup/rollup-linux-loongarch64-gnu@4.46.3': + resolution: {integrity: sha512-iU8DxnxEKJptf8Vcx4XvAUdpkZfaz0KWfRrnIRrOndL0SvzEte+MTM7nDH4A2Now4FvTZ01yFAgj6TX/mZl8hQ==} cpu: [loong64] os: [linux] - '@rollup/rollup-linux-powerpc64le-gnu@4.40.0': - resolution: {integrity: sha512-vgXfWmj0f3jAUvC7TZSU/m/cOE558ILWDzS7jBhiCAFpY2WEBn5jqgbqvmzlMjtp8KlLcBlXVD2mkTSEQE6Ixw==} + '@rollup/rollup-linux-ppc64-gnu@4.46.3': + resolution: {integrity: sha512-VrQZp9tkk0yozJoQvQcqlWiqaPnLM6uY1qPYXvukKePb0fqaiQtOdMJSxNFUZFsGw5oA5vvVokjHrx8a9Qsz2A==} cpu: [ppc64] os: [linux] - '@rollup/rollup-linux-riscv64-gnu@4.40.0': - resolution: {integrity: sha512-uJkYTugqtPZBS3Z136arevt/FsKTF/J9dEMTX/cwR7lsAW4bShzI2R0pJVw+hcBTWF4dxVckYh72Hk3/hWNKvA==} + '@rollup/rollup-linux-riscv64-gnu@4.46.3': + resolution: {integrity: sha512-uf2eucWSUb+M7b0poZ/08LsbcRgaDYL8NCGjUeFMwCWFwOuFcZ8D9ayPl25P3pl+D2FH45EbHdfyUesQ2Lt9wA==} cpu: [riscv64] os: [linux] - '@rollup/rollup-linux-riscv64-musl@4.40.0': - resolution: {integrity: sha512-rKmSj6EXQRnhSkE22+WvrqOqRtk733x3p5sWpZilhmjnkHkpeCgWsFFo0dGnUGeA+OZjRl3+VYq+HyCOEuwcxQ==} + '@rollup/rollup-linux-riscv64-musl@4.46.3': + resolution: {integrity: sha512-7tnUcDvN8DHm/9ra+/nF7lLzYHDeODKKKrh6JmZejbh1FnCNZS8zMkZY5J4sEipy2OW1d1Ncc4gNHUd0DLqkSg==} cpu: [riscv64] os: [linux] - '@rollup/rollup-linux-s390x-gnu@4.40.0': - resolution: {integrity: sha512-SpnYlAfKPOoVsQqmTFJ0usx0z84bzGOS9anAC0AZ3rdSo3snecihbhFTlJZ8XMwzqAcodjFU4+/SM311dqE5Sw==} + '@rollup/rollup-linux-s390x-gnu@4.46.3': + resolution: {integrity: sha512-MUpAOallJim8CsJK+4Lc9tQzlfPbHxWDrGXZm2z6biaadNpvh3a5ewcdat478W+tXDoUiHwErX/dOql7ETcLqg==} cpu: [s390x] os: [linux] - '@rollup/rollup-linux-x64-gnu@4.40.0': - resolution: {integrity: sha512-RcDGMtqF9EFN8i2RYN2W+64CdHruJ5rPqrlYw+cgM3uOVPSsnAQps7cpjXe9be/yDp8UC7VLoCoKC8J3Kn2FkQ==} + '@rollup/rollup-linux-x64-gnu@4.46.3': + resolution: {integrity: sha512-F42IgZI4JicE2vM2PWCe0N5mR5vR0gIdORPqhGQ32/u1S1v3kLtbZ0C/mi9FFk7C5T0PgdeyWEPajPjaUpyoKg==} cpu: [x64] os: [linux] - '@rollup/rollup-linux-x64-musl@4.40.0': - resolution: {integrity: sha512-HZvjpiUmSNx5zFgwtQAV1GaGazT2RWvqeDi0hV+AtC8unqqDSsaFjPxfsO6qPtKRRg25SisACWnJ37Yio8ttaw==} + '@rollup/rollup-linux-x64-musl@4.46.3': + resolution: {integrity: sha512-oLc+JrwwvbimJUInzx56Q3ujL3Kkhxehg7O1gWAYzm8hImCd5ld1F2Gry5YDjR21MNb5WCKhC9hXgU7rRlyegQ==} cpu: [x64] os: [linux] - '@rollup/rollup-win32-arm64-msvc@4.40.0': - resolution: {integrity: sha512-UtZQQI5k/b8d7d3i9AZmA/t+Q4tk3hOC0tMOMSq2GlMYOfxbesxG4mJSeDp0EHs30N9bsfwUvs3zF4v/RzOeTQ==} + '@rollup/rollup-win32-arm64-msvc@4.46.3': + resolution: {integrity: sha512-lOrQ+BVRstruD1fkWg9yjmumhowR0oLAAzavB7yFSaGltY8klttmZtCLvOXCmGE9mLIn8IBV/IFrQOWz5xbFPg==} cpu: [arm64] os: [win32] - '@rollup/rollup-win32-ia32-msvc@4.40.0': - resolution: {integrity: sha512-+m03kvI2f5syIqHXCZLPVYplP8pQch9JHyXKZ3AGMKlg8dCyr2PKHjwRLiW53LTrN/Nc3EqHOKxUxzoSPdKddA==} + '@rollup/rollup-win32-ia32-msvc@4.46.3': + resolution: {integrity: sha512-vvrVKPRS4GduGR7VMH8EylCBqsDcw6U+/0nPDuIjXQRbHJc6xOBj+frx8ksfZAh6+Fptw5wHrN7etlMmQnPQVg==} cpu: [ia32] os: [win32] - '@rollup/rollup-win32-x64-msvc@4.40.0': - resolution: {integrity: sha512-lpPE1cLfP5oPzVjKMx10pgBmKELQnFJXHgvtHCtuJWOv8MxqdEIMNtgHgBFf7Ea2/7EuVwa9fodWUfXAlXZLZQ==} + '@rollup/rollup-win32-x64-msvc@4.46.3': + resolution: {integrity: sha512-fi3cPxCnu3ZeM3EwKZPgXbWoGzm2XHgB/WShKI81uj8wG0+laobmqy5wbgEwzstlbLu4MyO8C19FyhhWseYKNQ==} cpu: [x64] os: [win32] @@ -2414,8 +2419,8 @@ packages: '@types/babel__template@7.4.4': resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==} - '@types/babel__traverse@7.20.7': - resolution: {integrity: sha512-dkO5fhS7+/oos4ciWxyEyjWe48zmG6wbCheo/G2ZnHx4fs3EU6YC6UM8rk56gAjNJ9P3MTH2jo5jb92/K6wbng==} + '@types/babel__traverse@7.28.0': + resolution: {integrity: sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==} '@types/cookie@0.6.0': resolution: {integrity: sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==} @@ -2432,6 +2437,9 @@ packages: '@types/estree@1.0.7': resolution: {integrity: sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==} + '@types/estree@1.0.8': + resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} + '@types/hast@3.0.4': resolution: {integrity: sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==} @@ -2751,8 +2759,8 @@ packages: peerDependencies: acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 - acorn@8.14.1: - resolution: {integrity: sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==} + acorn@8.15.0: + resolution: {integrity: sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==} engines: {node: '>=0.4.0'} hasBin: true @@ -2778,8 +2786,8 @@ packages: resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} engines: {node: '>=8'} - ansi-regex@6.1.0: - resolution: {integrity: sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==} + ansi-regex@6.2.0: + resolution: {integrity: sha512-TKY5pyBkHyADOPYlRT9Lx6F544mPl0vS5Ew7BJ45hA08Q+t3GjbueLliBWN3sMICk6+y7HdyxSzC4bWS8baBdg==} engines: {node: '>=12'} ansi-styles@4.3.0: @@ -2844,8 +2852,8 @@ packages: resolution: {integrity: sha512-JepyLROIad6f44uyqMF6HKE2QbunNzp3mYKRcPoDGt0QkxXmH222FAFC64WTyQu2Kg8NNEXHTN/sWuUId9sSxw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - astro@4.16.18: - resolution: {integrity: sha512-G7zfwJt9BDHEZwlaLNvjbInIw2hPryyD654314KV/XT34pJU6SfN1S+mWa8RAkALcZNJnJXCJmT3JXLQStD3Lw==} + astro@4.16.19: + resolution: {integrity: sha512-baeSswPC5ZYvhGDoj25L2FuzKRWMgx105FetOPQVJFMCAp0o08OonYC7AhwsFdhvp7GapqjnC1Fe3lKb2lupYw==} engines: {node: ^18.17.1 || ^20.3.0 || >=21.0.0, npm: '>=9.6.5', pnpm: '>=7.1.0'} hasBin: true @@ -2909,6 +2917,11 @@ packages: engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true + browserslist@4.25.3: + resolution: {integrity: sha512-cDGv1kkDI4/0e5yON9yM5G/0A5u8sf5TnmdX5C9qHzI9PPu++sQ9zjm1k9NiOrf3riY4OkK0zSGqfvJyJsgCBQ==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true + bundle-name@4.1.0: resolution: {integrity: sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==} engines: {node: '>=18'} @@ -2960,6 +2973,9 @@ packages: caniuse-lite@1.0.30001715: resolution: {integrity: sha512-7ptkFGMm2OAOgvZpwgA4yjQ5SQbrNVGdRjzH0pBdy1Fasvcr+KAeECmbCAECzTuDuoX0FCY8KzUxjf9+9kfZEw==} + caniuse-lite@1.0.30001735: + resolution: {integrity: sha512-EV/laoX7Wq2J9TQlyIXRxTJqIw4sxfXS4OYgudGxBYRuTv0q7AM6yMEpU/Vo1I94thg9U6EZ2NfZx9GJq83u7w==} + ccount@2.0.1: resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==} @@ -2971,6 +2987,10 @@ packages: resolution: {integrity: sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w==} engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} + chalk@5.6.0: + resolution: {integrity: sha512-46QrSQFyVSEyYAgQ22hQ+zDa60YHA4fBstHmtSApj1Y5vKtG27fWowW03jCk5KcbXEWPZUIR894aARCA/G1kfQ==} + engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} + change-case@5.4.4: resolution: {integrity: sha512-HRQyTk2/YPEkt9TnUPbOpr64Uw3KOicFWPVBb+xiHvd6eBx/qPr9xqfBFDT8P2vWsvvz4jbEkfDe71W3VyNu2w==} @@ -2998,8 +3018,8 @@ packages: resolution: {integrity: sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==} engines: {node: '>=10'} - ci-info@4.2.0: - resolution: {integrity: sha512-cYY9mypksY8NRqgDB1XD1RiJL338v/551niynFTGkZOO2LHuB2OmOYxDIe/ttN9AHwrqdum1360G3ald0W9kCg==} + ci-info@4.3.0: + resolution: {integrity: sha512-l+2bNRMiQgcfILUi33labAZYIWlH1kWDp+ecNo5iisRKrbm0xcRyCww71/YU0Fkw0mAFpz9bJayXPjey6vkmaQ==} engines: {node: '>=8'} citty@0.1.6: @@ -3293,6 +3313,9 @@ packages: electron-to-chromium@1.5.141: resolution: {integrity: sha512-qS+qH9oqVYc1ooubTiB9l904WVyM6qNYxtOEEGReoZXw3xlqeYdFr5GclNzbkAufWgwWLEPoDi3d9MoRwwIjGw==} + electron-to-chromium@1.5.207: + resolution: {integrity: sha512-mryFrrL/GXDTmAtIVMVf+eIXM09BBPlO5IQ7lUyKmK8d+A4VpRGG+M3ofoVef6qyF8s60rJei8ymlJxjUA8Faw==} + emoji-regex-xs@1.0.0: resolution: {integrity: sha512-LRlerrMYoIDrT6jgpeZ2YYl/L8EulRTt5hQcYjy5AInh7HWXKimpqx68aknBFpGL2+/IcogTcaydJEgaTmOpDg==} @@ -3697,10 +3720,6 @@ packages: resolution: {integrity: sha512-wHTUcDUoZ1H5/0iVqEudYW4/kAlN5cZ3j/bXn0Dpbizl9iaUVeWSHqiOjsgk6OW2bkLclbBjzewBz6weQ1zA2Q==} engines: {node: '>=18'} - globals@11.12.0: - resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} - engines: {node: '>=4'} - globals@13.24.0: resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==} engines: {node: '>=8'} @@ -3808,8 +3827,8 @@ packages: html-void-elements@3.0.0: resolution: {integrity: sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==} - http-cache-semantics@4.1.1: - resolution: {integrity: sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==} + http-cache-semantics@4.2.0: + resolution: {integrity: sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ==} https-proxy-agent@7.0.6: resolution: {integrity: sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==} @@ -4646,6 +4665,10 @@ packages: resolution: {integrity: sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==} engines: {node: '>=12'} + picomatch@4.0.3: + resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==} + engines: {node: '>=12'} + pidtree@0.6.0: resolution: {integrity: sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==} engines: {node: '>=0.10'} @@ -4731,6 +4754,10 @@ packages: resolution: {integrity: sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==} engines: {node: ^10 || ^12 || >=14} + postcss@8.5.6: + resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==} + engines: {node: ^10 || ^12 || >=14} + preact@10.12.1: resolution: {integrity: sha512-l8386ixSsBdbreOAkqtrwqHwdvR35ID8c3rKPa8lCWuO86dBi32QWHV4vfsZK1utLLFMvw+Z5Ad4XLkZzchscg==} @@ -4922,8 +4949,8 @@ packages: deprecated: Rimraf versions prior to v4 are no longer supported hasBin: true - rollup@4.40.0: - resolution: {integrity: sha512-Noe455xmA96nnqH5piFtLobsGbCij7Tu+tb3c1vYjNbTkfzGqXqQXG3wJaYXkRZuQ0vEYN4bhwg7QnIrqB5B+w==} + rollup@4.46.3: + resolution: {integrity: sha512-RZn2XTjXb8t5g13f5YclGoilU/kwT696DIkY3sywjdZidNSi3+vseaQov7D7BZXVJCPv3pDWUN69C78GGbXsKw==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true @@ -4965,6 +4992,11 @@ packages: engines: {node: '>=10'} hasBin: true + semver@7.7.2: + resolution: {integrity: sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==} + engines: {node: '>=10'} + hasBin: true + set-blocking@2.0.0: resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==} @@ -5209,8 +5241,8 @@ packages: ts-interface-checker@0.1.13: resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} - tsconfck@3.1.5: - resolution: {integrity: sha512-CLDfGgUp7XPswWnezWwsCRxNmgQjhYq3VXHM0/XIRxhVrKw0M1if9agzryh1QS3nxjCROvV+xWxoJO1YctzzWg==} + tsconfck@3.1.6: + resolution: {integrity: sha512-ks6Vjr/jEw0P1gmOVwutM3B7fWxoWBL2KRDb1JfqGVawBmO5UsvmWOQFGHBPl5yxYz4eERr19E6L7NMv+Fej4w==} engines: {node: ^18 || >=20} hasBin: true peerDependencies: @@ -5241,6 +5273,10 @@ packages: resolution: {integrity: sha512-ABHZ2/tS2JkvH1PEjxFDTUWC8dB5OsIGZP4IFLhR293GqT5Y5qB1WwL2kMPYhQW9DVgVD8Hd7I8gjwPIf5GFkw==} engines: {node: '>=16'} + type-fest@4.41.0: + resolution: {integrity: sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==} + engines: {node: '>=16'} + typed-array-buffer@1.0.3: resolution: {integrity: sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==} engines: {node: '>= 0.4'} @@ -5387,6 +5423,9 @@ packages: vfile-message@4.0.2: resolution: {integrity: sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==} + vfile-message@4.0.3: + resolution: {integrity: sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw==} + vfile@6.0.3: resolution: {integrity: sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==} @@ -5447,10 +5486,10 @@ packages: terser: optional: true - vitefu@1.0.6: - resolution: {integrity: sha512-+Rex1GlappUyNN6UfwbVZne/9cYC4+R2XDk9xkNXBKMw6HQagdX9PgZ8V2v1WUSK1wfBLp7qbI1+XSNIlB1xmA==} + vitefu@1.1.1: + resolution: {integrity: sha512-B/Fegf3i8zh0yFbpzZ21amWzHmuNlLlmJT6n7bu5e+pCHUKQIfXSYokrqOBGEMMe9UG2sostKQF9mml/vYaWJQ==} peerDependencies: - vite: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 + vite: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0-beta.0 peerDependenciesMeta: vite: optional: true @@ -5582,8 +5621,8 @@ packages: resolution: {integrity: sha512-GQHQqAopRhwU8Kt1DDM8NjibDXHC8eoh1erhGAJPEyveY9qqVeXvVikNKrDz69sHowPMorbPUrH/mx8c50eiBQ==} engines: {node: '>=18'} - zod-to-json-schema@3.24.5: - resolution: {integrity: sha512-/AuWwMP+YqiPbsJx5D6TfgRTc4kTLjsh5SOcd4bLsfUg2RcEXrFMJl1DGgdHy2aCfsIA/cr/1JM0xcB2GZji8g==} + zod-to-json-schema@3.24.6: + resolution: {integrity: sha512-h/z3PKvcTcTetyjl1fkj79MHNEjm+HpD6NXheWjzOekY7kV+lwDYnHw+ivHkijnCSMz1yJaWBD9vu/Fcmk+vEg==} peerDependencies: zod: ^3.24.1 @@ -5593,8 +5632,8 @@ packages: typescript: ^4.9.4 || ^5.0.2 zod: ^3 - zod@3.24.3: - resolution: {integrity: sha512-HhY1oqzWCQWuUqvBFnsyrtZRhyPeR7SUGv+C4+MsisMuVfSPx8HpwWqH8tRahSlt6M3PiFAcoeFhZAqIXTxoSg==} + zod@3.25.76: + resolution: {integrity: sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==} zwitch@2.0.4: resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==} @@ -5605,8 +5644,8 @@ snapshots: '@ampproject/remapping@2.3.0': dependencies: - '@jridgewell/gen-mapping': 0.3.8 - '@jridgewell/trace-mapping': 0.3.25 + '@jridgewell/gen-mapping': 0.3.13 + '@jridgewell/trace-mapping': 0.3.30 '@antfu/utils@0.7.10': {} @@ -5616,7 +5655,7 @@ snapshots: '@types/json-schema': 7.0.15 js-yaml: 4.1.0 - '@astrojs/compiler@2.11.0': {} + '@astrojs/compiler@2.12.2': {} '@astrojs/internal-helpers@0.4.1': {} @@ -5672,9 +5711,9 @@ snapshots: fast-xml-parser: 4.5.3 kleur: 4.1.5 - '@astrojs/tailwind@5.1.5(astro@4.16.18(@types/node@22.14.1)(rollup@4.40.0)(typescript@5.8.3))(tailwindcss@3.4.17)': + '@astrojs/tailwind@5.1.5(astro@4.16.19(@types/node@22.14.1)(rollup@4.46.3)(typescript@5.8.3))(tailwindcss@3.4.17)': dependencies: - astro: 4.16.18(@types/node@22.14.1)(rollup@4.40.0)(typescript@5.8.3) + astro: 4.16.19(@types/node@22.14.1)(rollup@4.46.3)(typescript@5.8.3) autoprefixer: 10.4.21(postcss@8.5.3) postcss: 8.5.3 postcss-load-config: 4.0.2(postcss@8.5.3) @@ -5684,7 +5723,7 @@ snapshots: '@astrojs/telemetry@3.1.0': dependencies: - ci-info: 4.2.0 + ci-info: 4.3.0 debug: 4.4.1(supports-color@10.0.0) dlv: 1.1.3 dset: 3.1.4 @@ -5694,14 +5733,14 @@ snapshots: transitivePeerDependencies: - supports-color - '@astrojs/vue@4.5.3(@types/node@22.14.1)(astro@4.16.18(@types/node@22.14.1)(rollup@4.40.0)(typescript@5.8.3))(rollup@4.40.0)(vue@3.5.15(typescript@5.8.3))': + '@astrojs/vue@4.5.3(@types/node@22.14.1)(astro@4.16.19(@types/node@22.14.1)(rollup@4.46.3)(typescript@5.8.3))(rollup@4.46.3)(vue@3.5.15(typescript@5.8.3))': dependencies: '@vitejs/plugin-vue': 5.2.3(vite@5.4.19(@types/node@22.14.1))(vue@3.5.15(typescript@5.8.3)) '@vitejs/plugin-vue-jsx': 4.1.2(vite@5.4.19(@types/node@22.14.1))(vue@3.5.15(typescript@5.8.3)) '@vue/compiler-sfc': 3.5.13 - astro: 4.16.18(@types/node@22.14.1)(rollup@4.40.0)(typescript@5.8.3) + astro: 4.16.19(@types/node@22.14.1)(rollup@4.46.3)(typescript@5.8.3) vite: 5.4.19(@types/node@22.14.1) - vite-plugin-vue-devtools: 7.7.5(rollup@4.40.0)(vite@5.4.19(@types/node@22.14.1))(vue@3.5.15(typescript@5.8.3)) + vite-plugin-vue-devtools: 7.7.5(rollup@4.46.3)(vite@5.4.19(@types/node@22.14.1))(vue@3.5.15(typescript@5.8.3)) vue: 3.5.15(typescript@5.8.3) transitivePeerDependencies: - '@nuxt/kit' @@ -5722,20 +5761,26 @@ snapshots: js-tokens: 4.0.0 picocolors: 1.1.1 - '@babel/compat-data@7.26.8': {} + '@babel/code-frame@7.27.1': + dependencies: + '@babel/helper-validator-identifier': 7.27.1 + js-tokens: 4.0.0 + picocolors: 1.1.1 - '@babel/core@7.26.10': + '@babel/compat-data@7.28.0': {} + + '@babel/core@7.28.3': dependencies: '@ampproject/remapping': 2.3.0 - '@babel/code-frame': 7.26.2 - '@babel/generator': 7.27.0 - '@babel/helper-compilation-targets': 7.27.0 - '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.10) - '@babel/helpers': 7.27.0 - '@babel/parser': 7.27.0 - '@babel/template': 7.27.0 - '@babel/traverse': 7.27.0 - '@babel/types': 7.27.0 + '@babel/code-frame': 7.27.1 + '@babel/generator': 7.28.3 + '@babel/helper-compilation-targets': 7.27.2 + '@babel/helper-module-transforms': 7.28.3(@babel/core@7.28.3) + '@babel/helpers': 7.28.3 + '@babel/parser': 7.28.3 + '@babel/template': 7.27.2 + '@babel/traverse': 7.28.3 + '@babel/types': 7.28.2 convert-source-map: 2.0.0 debug: 4.4.1(supports-color@10.0.0) gensync: 1.0.0-beta.2 @@ -5744,170 +5789,168 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/generator@7.27.0': + '@babel/generator@7.28.3': dependencies: - '@babel/parser': 7.27.0 - '@babel/types': 7.27.0 - '@jridgewell/gen-mapping': 0.3.8 - '@jridgewell/trace-mapping': 0.3.25 + '@babel/parser': 7.28.3 + '@babel/types': 7.28.2 + '@jridgewell/gen-mapping': 0.3.13 + '@jridgewell/trace-mapping': 0.3.30 jsesc: 3.1.0 - '@babel/helper-annotate-as-pure@7.25.9': + '@babel/helper-annotate-as-pure@7.27.3': dependencies: - '@babel/types': 7.27.0 + '@babel/types': 7.28.2 - '@babel/helper-compilation-targets@7.27.0': + '@babel/helper-compilation-targets@7.27.2': dependencies: - '@babel/compat-data': 7.26.8 - '@babel/helper-validator-option': 7.25.9 - browserslist: 4.24.4 + '@babel/compat-data': 7.28.0 + '@babel/helper-validator-option': 7.27.1 + browserslist: 4.25.3 lru-cache: 5.1.1 semver: 6.3.1 - '@babel/helper-create-class-features-plugin@7.27.0(@babel/core@7.26.10)': + '@babel/helper-create-class-features-plugin@7.27.0(@babel/core@7.28.3)': dependencies: - '@babel/core': 7.26.10 - '@babel/helper-annotate-as-pure': 7.25.9 + '@babel/core': 7.28.3 + '@babel/helper-annotate-as-pure': 7.27.3 '@babel/helper-member-expression-to-functions': 7.25.9 '@babel/helper-optimise-call-expression': 7.25.9 - '@babel/helper-replace-supers': 7.26.5(@babel/core@7.26.10) + '@babel/helper-replace-supers': 7.26.5(@babel/core@7.28.3) '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 - '@babel/traverse': 7.27.0 + '@babel/traverse': 7.28.3 semver: 6.3.1 transitivePeerDependencies: - supports-color + '@babel/helper-globals@7.28.0': {} + '@babel/helper-member-expression-to-functions@7.25.9': dependencies: - '@babel/traverse': 7.27.0 - '@babel/types': 7.27.3 + '@babel/traverse': 7.28.3 + '@babel/types': 7.28.2 transitivePeerDependencies: - supports-color - '@babel/helper-module-imports@7.25.9': + '@babel/helper-module-imports@7.27.1': dependencies: - '@babel/traverse': 7.27.0 - '@babel/types': 7.27.0 + '@babel/traverse': 7.28.3 + '@babel/types': 7.28.2 transitivePeerDependencies: - supports-color - '@babel/helper-module-transforms@7.26.0(@babel/core@7.26.10)': + '@babel/helper-module-transforms@7.28.3(@babel/core@7.28.3)': dependencies: - '@babel/core': 7.26.10 - '@babel/helper-module-imports': 7.25.9 - '@babel/helper-validator-identifier': 7.25.9 - '@babel/traverse': 7.27.0 + '@babel/core': 7.28.3 + '@babel/helper-module-imports': 7.27.1 + '@babel/helper-validator-identifier': 7.27.1 + '@babel/traverse': 7.28.3 transitivePeerDependencies: - supports-color '@babel/helper-optimise-call-expression@7.25.9': dependencies: - '@babel/types': 7.27.3 + '@babel/types': 7.28.2 - '@babel/helper-plugin-utils@7.26.5': {} + '@babel/helper-plugin-utils@7.27.1': {} - '@babel/helper-replace-supers@7.26.5(@babel/core@7.26.10)': + '@babel/helper-replace-supers@7.26.5(@babel/core@7.28.3)': dependencies: - '@babel/core': 7.26.10 + '@babel/core': 7.28.3 '@babel/helper-member-expression-to-functions': 7.25.9 '@babel/helper-optimise-call-expression': 7.25.9 - '@babel/traverse': 7.27.0 + '@babel/traverse': 7.28.3 transitivePeerDependencies: - supports-color '@babel/helper-skip-transparent-expression-wrappers@7.25.9': dependencies: - '@babel/traverse': 7.27.0 - '@babel/types': 7.27.0 + '@babel/traverse': 7.28.3 + '@babel/types': 7.28.2 transitivePeerDependencies: - supports-color - '@babel/helper-string-parser@7.25.9': {} - '@babel/helper-string-parser@7.27.1': {} - '@babel/helper-validator-identifier@7.25.9': {} - '@babel/helper-validator-identifier@7.27.1': {} - '@babel/helper-validator-option@7.25.9': {} + '@babel/helper-validator-option@7.27.1': {} - '@babel/helpers@7.27.0': + '@babel/helpers@7.28.3': dependencies: - '@babel/template': 7.27.0 - '@babel/types': 7.27.0 + '@babel/template': 7.27.2 + '@babel/types': 7.28.2 '@babel/parser@7.27.0': dependencies: - '@babel/types': 7.27.0 + '@babel/types': 7.28.2 - '@babel/parser@7.27.3': + '@babel/parser@7.28.3': dependencies: - '@babel/types': 7.27.3 + '@babel/types': 7.28.2 - '@babel/plugin-proposal-decorators@7.25.9(@babel/core@7.26.10)': + '@babel/plugin-proposal-decorators@7.25.9(@babel/core@7.28.3)': dependencies: - '@babel/core': 7.26.10 - '@babel/helper-create-class-features-plugin': 7.27.0(@babel/core@7.26.10) - '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-syntax-decorators': 7.25.9(@babel/core@7.26.10) + '@babel/core': 7.28.3 + '@babel/helper-create-class-features-plugin': 7.27.0(@babel/core@7.28.3) + '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-syntax-decorators': 7.25.9(@babel/core@7.28.3) transitivePeerDependencies: - supports-color - '@babel/plugin-syntax-decorators@7.25.9(@babel/core@7.26.10)': + '@babel/plugin-syntax-decorators@7.25.9(@babel/core@7.28.3)': dependencies: - '@babel/core': 7.26.10 - '@babel/helper-plugin-utils': 7.26.5 + '@babel/core': 7.28.3 + '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-syntax-import-attributes@7.26.0(@babel/core@7.26.10)': + '@babel/plugin-syntax-import-attributes@7.26.0(@babel/core@7.28.3)': dependencies: - '@babel/core': 7.26.10 - '@babel/helper-plugin-utils': 7.26.5 + '@babel/core': 7.28.3 + '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.26.10)': + '@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.28.3)': dependencies: - '@babel/core': 7.26.10 - '@babel/helper-plugin-utils': 7.26.5 + '@babel/core': 7.28.3 + '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-syntax-jsx@7.25.9(@babel/core@7.26.10)': + '@babel/plugin-syntax-jsx@7.27.1(@babel/core@7.28.3)': dependencies: - '@babel/core': 7.26.10 - '@babel/helper-plugin-utils': 7.26.5 + '@babel/core': 7.28.3 + '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-syntax-typescript@7.25.9(@babel/core@7.26.10)': + '@babel/plugin-syntax-typescript@7.25.9(@babel/core@7.28.3)': dependencies: - '@babel/core': 7.26.10 - '@babel/helper-plugin-utils': 7.26.5 + '@babel/core': 7.28.3 + '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-react-jsx-self@7.25.9(@babel/core@7.26.10)': + '@babel/plugin-transform-react-jsx-self@7.25.9(@babel/core@7.28.3)': dependencies: - '@babel/core': 7.26.10 - '@babel/helper-plugin-utils': 7.26.5 + '@babel/core': 7.28.3 + '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-react-jsx-source@7.25.9(@babel/core@7.26.10)': + '@babel/plugin-transform-react-jsx-source@7.25.9(@babel/core@7.28.3)': dependencies: - '@babel/core': 7.26.10 - '@babel/helper-plugin-utils': 7.26.5 + '@babel/core': 7.28.3 + '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-react-jsx@7.25.9(@babel/core@7.26.10)': + '@babel/plugin-transform-react-jsx@7.27.1(@babel/core@7.28.3)': dependencies: - '@babel/core': 7.26.10 - '@babel/helper-annotate-as-pure': 7.25.9 - '@babel/helper-module-imports': 7.25.9 - '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-syntax-jsx': 7.25.9(@babel/core@7.26.10) - '@babel/types': 7.27.0 + '@babel/core': 7.28.3 + '@babel/helper-annotate-as-pure': 7.27.3 + '@babel/helper-module-imports': 7.27.1 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.28.3) + '@babel/types': 7.28.2 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-typescript@7.27.0(@babel/core@7.26.10)': + '@babel/plugin-transform-typescript@7.27.0(@babel/core@7.28.3)': dependencies: - '@babel/core': 7.26.10 - '@babel/helper-annotate-as-pure': 7.25.9 - '@babel/helper-create-class-features-plugin': 7.27.0(@babel/core@7.26.10) - '@babel/helper-plugin-utils': 7.26.5 + '@babel/core': 7.28.3 + '@babel/helper-annotate-as-pure': 7.27.3 + '@babel/helper-create-class-features-plugin': 7.27.0(@babel/core@7.28.3) + '@babel/helper-plugin-utils': 7.27.1 '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 - '@babel/plugin-syntax-typescript': 7.25.9(@babel/core@7.26.10) + '@babel/plugin-syntax-typescript': 7.25.9(@babel/core@7.28.3) transitivePeerDependencies: - supports-color @@ -5915,30 +5958,25 @@ snapshots: dependencies: regenerator-runtime: 0.14.1 - '@babel/template@7.27.0': + '@babel/template@7.27.2': dependencies: - '@babel/code-frame': 7.26.2 - '@babel/parser': 7.27.0 - '@babel/types': 7.27.0 + '@babel/code-frame': 7.27.1 + '@babel/parser': 7.28.3 + '@babel/types': 7.28.2 - '@babel/traverse@7.27.0': + '@babel/traverse@7.28.3': dependencies: - '@babel/code-frame': 7.26.2 - '@babel/generator': 7.27.0 - '@babel/parser': 7.27.0 - '@babel/template': 7.27.0 - '@babel/types': 7.27.0 + '@babel/code-frame': 7.27.1 + '@babel/generator': 7.28.3 + '@babel/helper-globals': 7.28.0 + '@babel/parser': 7.28.3 + '@babel/template': 7.27.2 + '@babel/types': 7.28.2 debug: 4.4.1(supports-color@10.0.0) - globals: 11.12.0 transitivePeerDependencies: - supports-color - '@babel/types@7.27.0': - dependencies: - '@babel/helper-string-parser': 7.25.9 - '@babel/helper-validator-identifier': 7.25.9 - - '@babel/types@7.27.3': + '@babel/types@7.28.2': dependencies: '@babel/helper-string-parser': 7.27.1 '@babel/helper-validator-identifier': 7.27.1 @@ -7529,10 +7567,15 @@ snapshots: wrap-ansi: 8.1.0 wrap-ansi-cjs: wrap-ansi@7.0.0 + '@jridgewell/gen-mapping@0.3.13': + dependencies: + '@jridgewell/sourcemap-codec': 1.5.5 + '@jridgewell/trace-mapping': 0.3.30 + '@jridgewell/gen-mapping@0.3.8': dependencies: '@jridgewell/set-array': 1.2.1 - '@jridgewell/sourcemap-codec': 1.5.0 + '@jridgewell/sourcemap-codec': 1.5.5 '@jridgewell/trace-mapping': 0.3.25 '@jridgewell/resolve-uri@3.1.2': {} @@ -7541,10 +7584,17 @@ snapshots: '@jridgewell/sourcemap-codec@1.5.0': {} + '@jridgewell/sourcemap-codec@1.5.5': {} + '@jridgewell/trace-mapping@0.3.25': dependencies: '@jridgewell/resolve-uri': 3.1.2 - '@jridgewell/sourcemap-codec': 1.5.0 + '@jridgewell/sourcemap-codec': 1.5.5 + + '@jridgewell/trace-mapping@0.3.30': + dependencies: + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.5.5 '@jsdevtools/ono@7.1.3': {} @@ -8687,72 +8737,72 @@ snapshots: transitivePeerDependencies: - supports-color - '@rollup/pluginutils@5.1.4(rollup@4.40.0)': + '@rollup/pluginutils@5.2.0(rollup@4.46.3)': dependencies: - '@types/estree': 1.0.7 + '@types/estree': 1.0.8 estree-walker: 2.0.2 - picomatch: 4.0.2 + picomatch: 4.0.3 optionalDependencies: - rollup: 4.40.0 + rollup: 4.46.3 - '@rollup/rollup-android-arm-eabi@4.40.0': + '@rollup/rollup-android-arm-eabi@4.46.3': optional: true - '@rollup/rollup-android-arm64@4.40.0': + '@rollup/rollup-android-arm64@4.46.3': optional: true - '@rollup/rollup-darwin-arm64@4.40.0': + '@rollup/rollup-darwin-arm64@4.46.3': optional: true - '@rollup/rollup-darwin-x64@4.40.0': + '@rollup/rollup-darwin-x64@4.46.3': optional: true - '@rollup/rollup-freebsd-arm64@4.40.0': + '@rollup/rollup-freebsd-arm64@4.46.3': optional: true - '@rollup/rollup-freebsd-x64@4.40.0': + '@rollup/rollup-freebsd-x64@4.46.3': optional: true - '@rollup/rollup-linux-arm-gnueabihf@4.40.0': + '@rollup/rollup-linux-arm-gnueabihf@4.46.3': optional: true - '@rollup/rollup-linux-arm-musleabihf@4.40.0': + '@rollup/rollup-linux-arm-musleabihf@4.46.3': optional: true - '@rollup/rollup-linux-arm64-gnu@4.40.0': + '@rollup/rollup-linux-arm64-gnu@4.46.3': optional: true - '@rollup/rollup-linux-arm64-musl@4.40.0': + '@rollup/rollup-linux-arm64-musl@4.46.3': optional: true - '@rollup/rollup-linux-loongarch64-gnu@4.40.0': + '@rollup/rollup-linux-loongarch64-gnu@4.46.3': optional: true - '@rollup/rollup-linux-powerpc64le-gnu@4.40.0': + '@rollup/rollup-linux-ppc64-gnu@4.46.3': optional: true - '@rollup/rollup-linux-riscv64-gnu@4.40.0': + '@rollup/rollup-linux-riscv64-gnu@4.46.3': optional: true - '@rollup/rollup-linux-riscv64-musl@4.40.0': + '@rollup/rollup-linux-riscv64-musl@4.46.3': optional: true - '@rollup/rollup-linux-s390x-gnu@4.40.0': + '@rollup/rollup-linux-s390x-gnu@4.46.3': optional: true - '@rollup/rollup-linux-x64-gnu@4.40.0': + '@rollup/rollup-linux-x64-gnu@4.46.3': optional: true - '@rollup/rollup-linux-x64-musl@4.40.0': + '@rollup/rollup-linux-x64-musl@4.46.3': optional: true - '@rollup/rollup-win32-arm64-msvc@4.40.0': + '@rollup/rollup-win32-arm64-msvc@4.46.3': optional: true - '@rollup/rollup-win32-ia32-msvc@4.40.0': + '@rollup/rollup-win32-ia32-msvc@4.46.3': optional: true - '@rollup/rollup-win32-x64-msvc@4.40.0': + '@rollup/rollup-win32-x64-msvc@4.46.3': optional: true '@rtsao/scc@1.1.0': {} @@ -8844,24 +8894,24 @@ snapshots: '@types/babel__core@7.20.5': dependencies: - '@babel/parser': 7.27.0 - '@babel/types': 7.27.0 + '@babel/parser': 7.28.3 + '@babel/types': 7.28.2 '@types/babel__generator': 7.27.0 '@types/babel__template': 7.4.4 - '@types/babel__traverse': 7.20.7 + '@types/babel__traverse': 7.28.0 '@types/babel__generator@7.27.0': dependencies: - '@babel/types': 7.27.0 + '@babel/types': 7.28.2 '@types/babel__template@7.4.4': dependencies: - '@babel/parser': 7.27.0 - '@babel/types': 7.27.0 + '@babel/parser': 7.28.3 + '@babel/types': 7.28.2 - '@types/babel__traverse@7.20.7': + '@types/babel__traverse@7.28.0': dependencies: - '@babel/types': 7.27.0 + '@babel/types': 7.28.2 '@types/cookie@0.6.0': {} @@ -8880,6 +8930,8 @@ snapshots: '@types/estree@1.0.7': {} + '@types/estree@1.0.8': {} + '@types/hast@3.0.4': dependencies: '@types/unist': 3.0.3 @@ -8996,7 +9048,7 @@ snapshots: fast-glob: 3.3.3 is-glob: 4.0.3 minimatch: 9.0.5 - semver: 7.7.1 + semver: 7.7.2 ts-api-utils: 2.1.0(typescript@5.8.3) typescript: 5.8.3 transitivePeerDependencies: @@ -9010,7 +9062,7 @@ snapshots: fast-glob: 3.3.3 is-glob: 4.0.3 minimatch: 9.0.5 - semver: 7.7.1 + semver: 7.7.2 ts-api-utils: 1.4.3(typescript@5.8.3) optionalDependencies: typescript: 5.8.3 @@ -9106,9 +9158,9 @@ snapshots: '@vitejs/plugin-react@4.4.1(vite@5.4.19(@types/node@22.14.1))': dependencies: - '@babel/core': 7.26.10 - '@babel/plugin-transform-react-jsx-self': 7.25.9(@babel/core@7.26.10) - '@babel/plugin-transform-react-jsx-source': 7.25.9(@babel/core@7.26.10) + '@babel/core': 7.28.3 + '@babel/plugin-transform-react-jsx-self': 7.25.9(@babel/core@7.28.3) + '@babel/plugin-transform-react-jsx-source': 7.25.9(@babel/core@7.28.3) '@types/babel__core': 7.20.5 react-refresh: 0.17.0 vite: 5.4.19(@types/node@22.14.1) @@ -9117,9 +9169,9 @@ snapshots: '@vitejs/plugin-vue-jsx@4.1.2(vite@5.4.19(@types/node@22.14.1))(vue@3.5.15(typescript@5.8.3))': dependencies: - '@babel/core': 7.26.10 - '@babel/plugin-transform-typescript': 7.27.0(@babel/core@7.26.10) - '@vue/babel-plugin-jsx': 1.4.0(@babel/core@7.26.10) + '@babel/core': 7.28.3 + '@babel/plugin-transform-typescript': 7.27.0(@babel/core@7.28.3) + '@vue/babel-plugin-jsx': 1.4.0(@babel/core@7.28.3) vite: 5.4.19(@types/node@22.14.1) vue: 3.5.15(typescript@5.8.3) transitivePeerDependencies: @@ -9132,29 +9184,29 @@ snapshots: '@vue/babel-helper-vue-transform-on@1.4.0': {} - '@vue/babel-plugin-jsx@1.4.0(@babel/core@7.26.10)': + '@vue/babel-plugin-jsx@1.4.0(@babel/core@7.28.3)': dependencies: - '@babel/helper-module-imports': 7.25.9 - '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-syntax-jsx': 7.25.9(@babel/core@7.26.10) - '@babel/template': 7.27.0 - '@babel/traverse': 7.27.0 - '@babel/types': 7.27.0 + '@babel/helper-module-imports': 7.27.1 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.28.3) + '@babel/template': 7.27.2 + '@babel/traverse': 7.28.3 + '@babel/types': 7.28.2 '@vue/babel-helper-vue-transform-on': 1.4.0 - '@vue/babel-plugin-resolve-type': 1.4.0(@babel/core@7.26.10) + '@vue/babel-plugin-resolve-type': 1.4.0(@babel/core@7.28.3) '@vue/shared': 3.5.15 optionalDependencies: - '@babel/core': 7.26.10 + '@babel/core': 7.28.3 transitivePeerDependencies: - supports-color - '@vue/babel-plugin-resolve-type@1.4.0(@babel/core@7.26.10)': + '@vue/babel-plugin-resolve-type@1.4.0(@babel/core@7.28.3)': dependencies: - '@babel/code-frame': 7.26.2 - '@babel/core': 7.26.10 - '@babel/helper-module-imports': 7.25.9 - '@babel/helper-plugin-utils': 7.26.5 - '@babel/parser': 7.27.3 + '@babel/code-frame': 7.27.1 + '@babel/core': 7.28.3 + '@babel/helper-module-imports': 7.27.1 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/parser': 7.28.3 '@vue/compiler-sfc': 3.5.15 transitivePeerDependencies: - supports-color @@ -9169,7 +9221,7 @@ snapshots: '@vue/compiler-core@3.5.15': dependencies: - '@babel/parser': 7.27.3 + '@babel/parser': 7.28.3 '@vue/shared': 3.5.15 entities: 4.5.0 estree-walker: 2.0.2 @@ -9199,7 +9251,7 @@ snapshots: '@vue/compiler-sfc@3.5.15': dependencies: - '@babel/parser': 7.27.3 + '@babel/parser': 7.28.3 '@vue/compiler-core': 3.5.15 '@vue/compiler-dom': 3.5.15 '@vue/compiler-ssr': 3.5.15 @@ -9271,11 +9323,11 @@ snapshots: '@vue/shared@3.5.15': {} - acorn-jsx@5.3.2(acorn@8.14.1): + acorn-jsx@5.3.2(acorn@8.15.0): dependencies: - acorn: 8.14.1 + acorn: 8.15.0 - acorn@8.14.1: {} + acorn@8.15.0: {} agent-base@7.1.3: {} @@ -9298,7 +9350,7 @@ snapshots: ansi-regex@5.0.1: {} - ansi-regex@6.1.0: {} + ansi-regex@6.2.0: {} ansi-styles@4.3.0: dependencies: @@ -9377,44 +9429,44 @@ snapshots: astro-eslint-parser@1.2.2: dependencies: - '@astrojs/compiler': 2.11.0 + '@astrojs/compiler': 2.12.2 '@typescript-eslint/scope-manager': 8.31.0 '@typescript-eslint/types': 8.31.0 - astrojs-compiler-sync: 1.1.1(@astrojs/compiler@2.11.0) - debug: 4.4.0 + astrojs-compiler-sync: 1.1.1(@astrojs/compiler@2.12.2) + debug: 4.4.1(supports-color@10.0.0) entities: 6.0.0 eslint-scope: 8.3.0 eslint-visitor-keys: 4.2.0 espree: 10.3.0 fast-glob: 3.3.3 is-glob: 4.0.3 - semver: 7.7.1 + semver: 7.7.2 transitivePeerDependencies: - supports-color - astro@4.16.18(@types/node@22.14.1)(rollup@4.40.0)(typescript@5.8.3): + astro@4.16.19(@types/node@22.14.1)(rollup@4.46.3)(typescript@5.8.3): dependencies: - '@astrojs/compiler': 2.11.0 + '@astrojs/compiler': 2.12.2 '@astrojs/internal-helpers': 0.4.1 '@astrojs/markdown-remark': 5.3.0 '@astrojs/telemetry': 3.1.0 - '@babel/core': 7.26.10 - '@babel/plugin-transform-react-jsx': 7.25.9(@babel/core@7.26.10) - '@babel/types': 7.27.0 + '@babel/core': 7.28.3 + '@babel/plugin-transform-react-jsx': 7.27.1(@babel/core@7.28.3) + '@babel/types': 7.28.2 '@oslojs/encoding': 1.1.0 - '@rollup/pluginutils': 5.1.4(rollup@4.40.0) + '@rollup/pluginutils': 5.2.0(rollup@4.46.3) '@types/babel__core': 7.20.5 '@types/cookie': 0.6.0 - acorn: 8.14.1 + acorn: 8.15.0 aria-query: 5.3.2 axobject-query: 4.1.0 boxen: 8.0.1 - ci-info: 4.2.0 + ci-info: 4.3.0 clsx: 2.1.1 common-ancestor-path: 1.0.1 cookie: 0.7.2 cssesc: 3.0.0 - debug: 4.4.0 + debug: 4.4.1(supports-color@10.0.0) deterministic-object-hash: 2.0.2 devalue: 5.1.1 diff: 5.2.0 @@ -9428,7 +9480,7 @@ snapshots: github-slugger: 2.0.0 gray-matter: 4.0.3 html-escaper: 3.0.3 - http-cache-semantics: 4.1.1 + http-cache-semantics: 4.2.0 js-yaml: 4.1.0 kleur: 4.1.5 magic-string: 0.30.17 @@ -9442,20 +9494,20 @@ snapshots: preferred-pm: 4.1.1 prompts: 2.4.2 rehype: 13.0.2 - semver: 7.7.1 + semver: 7.7.2 shiki: 1.29.2 tinyexec: 0.3.2 - tsconfck: 3.1.5(typescript@5.8.3) + tsconfck: 3.1.6(typescript@5.8.3) unist-util-visit: 5.0.0 vfile: 6.0.3 vite: 5.4.19(@types/node@22.14.1) - vitefu: 1.0.6(vite@5.4.19(@types/node@22.14.1)) + vitefu: 1.1.1(vite@5.4.19(@types/node@22.14.1)) which-pm: 3.0.1 xxhash-wasm: 1.1.0 yargs-parser: 21.1.1 - zod: 3.24.3 - zod-to-json-schema: 3.24.5(zod@3.24.3) - zod-to-ts: 1.2.0(typescript@5.8.3)(zod@3.24.3) + zod: 3.25.76 + zod-to-json-schema: 3.24.6(zod@3.25.76) + zod-to-ts: 1.2.0(typescript@5.8.3)(zod@3.25.76) optionalDependencies: sharp: 0.33.5 transitivePeerDependencies: @@ -9471,9 +9523,9 @@ snapshots: - terser - typescript - astrojs-compiler-sync@1.1.1(@astrojs/compiler@2.11.0): + astrojs-compiler-sync@1.1.1(@astrojs/compiler@2.12.2): dependencies: - '@astrojs/compiler': 2.11.0 + '@astrojs/compiler': 2.12.2 synckit: 0.11.4 async-function@1.0.0: {} @@ -9508,10 +9560,10 @@ snapshots: dependencies: ansi-align: 3.0.1 camelcase: 8.0.0 - chalk: 5.4.1 + chalk: 5.6.0 cli-boxes: 3.0.0 string-width: 7.2.0 - type-fest: 4.40.0 + type-fest: 4.41.0 widest-line: 5.0.0 wrap-ansi: 9.0.0 @@ -9535,6 +9587,13 @@ snapshots: node-releases: 2.0.19 update-browserslist-db: 1.1.3(browserslist@4.24.4) + browserslist@4.25.3: + dependencies: + caniuse-lite: 1.0.30001735 + electron-to-chromium: 1.5.207 + node-releases: 2.0.19 + update-browserslist-db: 1.1.3(browserslist@4.25.3) + bundle-name@4.1.0: dependencies: run-applescript: 7.0.0 @@ -9592,6 +9651,8 @@ snapshots: caniuse-lite@1.0.30001715: {} + caniuse-lite@1.0.30001735: {} + ccount@2.0.1: {} chalk@4.1.2: @@ -9601,6 +9662,8 @@ snapshots: chalk@5.4.1: {} + chalk@5.6.0: {} + change-case@5.4.4: {} character-entities-html4@2.1.0: {} @@ -9629,7 +9692,7 @@ snapshots: chownr@2.0.0: {} - ci-info@4.2.0: {} + ci-info@4.3.0: {} citty@0.1.6: dependencies: @@ -9745,7 +9808,7 @@ snapshots: cspell-glob@8.19.4: dependencies: '@cspell/url': 8.19.4 - picomatch: 4.0.2 + picomatch: 4.0.3 cspell-grammar@8.19.4: dependencies: @@ -9909,6 +9972,8 @@ snapshots: electron-to-chromium@1.5.141: {} + electron-to-chromium@1.5.207: {} + emoji-regex-xs@1.0.0: {} emoji-regex@10.4.0: {} @@ -10043,7 +10108,7 @@ snapshots: eslint-compat-utils@0.6.5(eslint@8.57.1): dependencies: eslint: 8.57.1 - semver: 7.7.1 + semver: 7.7.2 eslint-import-resolver-node@0.3.9: dependencies: @@ -10181,14 +10246,14 @@ snapshots: espree@10.3.0: dependencies: - acorn: 8.14.1 - acorn-jsx: 5.3.2(acorn@8.14.1) + acorn: 8.15.0 + acorn-jsx: 5.3.2(acorn@8.15.0) eslint-visitor-keys: 4.2.0 espree@9.6.1: dependencies: - acorn: 8.14.1 - acorn-jsx: 5.3.2(acorn@8.14.1) + acorn: 8.15.0 + acorn-jsx: 5.3.2(acorn@8.15.0) eslint-visitor-keys: 3.4.3 esprima@4.0.1: {} @@ -10207,7 +10272,7 @@ snapshots: estree-walker@3.0.3: dependencies: - '@types/estree': 1.0.7 + '@types/estree': 1.0.8 esutils@2.0.3: {} @@ -10448,8 +10513,6 @@ snapshots: dependencies: ini: 4.1.1 - globals@11.12.0: {} - globals@13.24.0: dependencies: type-fest: 0.20.2 @@ -10608,7 +10671,7 @@ snapshots: html-void-elements@3.0.0: {} - http-cache-semantics@4.1.1: {} + http-cache-semantics@4.2.0: {} https-proxy-agent@7.0.6(supports-color@10.0.0): dependencies: @@ -10698,7 +10761,7 @@ snapshots: is-bun-module@2.0.0: dependencies: - semver: 7.7.1 + semver: 7.7.2 is-callable@1.2.7: {} @@ -10939,7 +11002,7 @@ snapshots: log-symbols@6.0.0: dependencies: - chalk: 5.4.1 + chalk: 5.6.0 is-unicode-supported: 1.3.0 log-update@6.1.0: @@ -10964,12 +11027,12 @@ snapshots: magic-string@0.30.17: dependencies: - '@jridgewell/sourcemap-codec': 1.5.0 + '@jridgewell/sourcemap-codec': 1.5.5 magicast@0.3.5: dependencies: - '@babel/parser': 7.27.0 - '@babel/types': 7.27.0 + '@babel/parser': 7.28.3 + '@babel/types': 7.28.2 source-map-js: 1.2.1 map-obj@4.3.0: {} @@ -11351,7 +11414,7 @@ snapshots: mlly@1.7.4: dependencies: - acorn: 8.14.1 + acorn: 8.15.0 pathe: 2.0.3 pkg-types: 1.3.1 ufo: 1.6.1 @@ -11505,7 +11568,7 @@ snapshots: ora@8.2.0: dependencies: - chalk: 5.4.1 + chalk: 5.6.0 cli-cursor: 5.0.0 cli-spinners: 2.9.2 is-interactive: 2.0.0 @@ -11608,6 +11671,8 @@ snapshots: picomatch@4.0.2: {} + picomatch@4.0.3: {} + pidtree@0.6.0: {} pify@2.3.0: {} @@ -11679,6 +11744,12 @@ snapshots: picocolors: 1.1.1 source-map-js: 1.2.1 + postcss@8.5.6: + dependencies: + nanoid: 3.3.11 + picocolors: 1.1.1 + source-map-js: 1.2.1 + preact@10.12.1: {} preferred-pm@4.1.1: @@ -11922,30 +11993,30 @@ snapshots: dependencies: glob: 7.2.3 - rollup@4.40.0: + rollup@4.46.3: dependencies: - '@types/estree': 1.0.7 + '@types/estree': 1.0.8 optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.40.0 - '@rollup/rollup-android-arm64': 4.40.0 - '@rollup/rollup-darwin-arm64': 4.40.0 - '@rollup/rollup-darwin-x64': 4.40.0 - '@rollup/rollup-freebsd-arm64': 4.40.0 - '@rollup/rollup-freebsd-x64': 4.40.0 - '@rollup/rollup-linux-arm-gnueabihf': 4.40.0 - '@rollup/rollup-linux-arm-musleabihf': 4.40.0 - '@rollup/rollup-linux-arm64-gnu': 4.40.0 - '@rollup/rollup-linux-arm64-musl': 4.40.0 - '@rollup/rollup-linux-loongarch64-gnu': 4.40.0 - '@rollup/rollup-linux-powerpc64le-gnu': 4.40.0 - '@rollup/rollup-linux-riscv64-gnu': 4.40.0 - '@rollup/rollup-linux-riscv64-musl': 4.40.0 - '@rollup/rollup-linux-s390x-gnu': 4.40.0 - '@rollup/rollup-linux-x64-gnu': 4.40.0 - '@rollup/rollup-linux-x64-musl': 4.40.0 - '@rollup/rollup-win32-arm64-msvc': 4.40.0 - '@rollup/rollup-win32-ia32-msvc': 4.40.0 - '@rollup/rollup-win32-x64-msvc': 4.40.0 + '@rollup/rollup-android-arm-eabi': 4.46.3 + '@rollup/rollup-android-arm64': 4.46.3 + '@rollup/rollup-darwin-arm64': 4.46.3 + '@rollup/rollup-darwin-x64': 4.46.3 + '@rollup/rollup-freebsd-arm64': 4.46.3 + '@rollup/rollup-freebsd-x64': 4.46.3 + '@rollup/rollup-linux-arm-gnueabihf': 4.46.3 + '@rollup/rollup-linux-arm-musleabihf': 4.46.3 + '@rollup/rollup-linux-arm64-gnu': 4.46.3 + '@rollup/rollup-linux-arm64-musl': 4.46.3 + '@rollup/rollup-linux-loongarch64-gnu': 4.46.3 + '@rollup/rollup-linux-ppc64-gnu': 4.46.3 + '@rollup/rollup-linux-riscv64-gnu': 4.46.3 + '@rollup/rollup-linux-riscv64-musl': 4.46.3 + '@rollup/rollup-linux-s390x-gnu': 4.46.3 + '@rollup/rollup-linux-x64-gnu': 4.46.3 + '@rollup/rollup-linux-x64-musl': 4.46.3 + '@rollup/rollup-win32-arm64-msvc': 4.46.3 + '@rollup/rollup-win32-ia32-msvc': 4.46.3 + '@rollup/rollup-win32-x64-msvc': 4.46.3 fsevents: 2.3.3 run-applescript@7.0.0: {} @@ -11990,6 +12061,8 @@ snapshots: semver@7.7.1: {} + semver@7.7.2: {} + set-blocking@2.0.0: {} set-function-length@1.2.2: @@ -12177,7 +12250,7 @@ snapshots: strip-ansi@7.1.0: dependencies: - ansi-regex: 6.1.0 + ansi-regex: 6.2.0 strip-bom-string@1.0.0: {} @@ -12298,7 +12371,7 @@ snapshots: ts-interface-checker@0.1.13: {} - tsconfck@3.1.5(typescript@5.8.3): + tsconfck@3.1.6(typescript@5.8.3): optionalDependencies: typescript: 5.8.3 @@ -12321,6 +12394,8 @@ snapshots: type-fest@4.40.0: {} + type-fest@4.41.0: {} + typed-array-buffer@1.0.3: dependencies: call-bound: 1.0.4 @@ -12467,6 +12542,12 @@ snapshots: escalade: 3.2.0 picocolors: 1.1.1 + update-browserslist-db@1.1.3(browserslist@4.25.3): + dependencies: + browserslist: 4.25.3 + escalade: 3.2.0 + picocolors: 1.1.1 + uri-js-replace@1.0.1: {} uri-js@4.4.1: @@ -12510,19 +12591,24 @@ snapshots: '@types/unist': 3.0.3 unist-util-stringify-position: 4.0.0 + vfile-message@4.0.3: + dependencies: + '@types/unist': 3.0.3 + unist-util-stringify-position: 4.0.0 + vfile@6.0.3: dependencies: '@types/unist': 3.0.3 - vfile-message: 4.0.2 + vfile-message: 4.0.3 vite-hot-client@2.0.4(vite@5.4.19(@types/node@22.14.1)): dependencies: vite: 5.4.19(@types/node@22.14.1) - vite-plugin-inspect@0.8.9(rollup@4.40.0)(vite@5.4.19(@types/node@22.14.1)): + vite-plugin-inspect@0.8.9(rollup@4.46.3)(vite@5.4.19(@types/node@22.14.1)): dependencies: '@antfu/utils': 0.7.10 - '@rollup/pluginutils': 5.1.4(rollup@4.40.0) + '@rollup/pluginutils': 5.2.0(rollup@4.46.3) debug: 4.4.1(supports-color@10.0.0) error-stack-parser-es: 0.1.5 fs-extra: 11.3.0 @@ -12535,7 +12621,7 @@ snapshots: - rollup - supports-color - vite-plugin-vue-devtools@7.7.5(rollup@4.40.0)(vite@5.4.19(@types/node@22.14.1))(vue@3.5.15(typescript@5.8.3)): + vite-plugin-vue-devtools@7.7.5(rollup@4.46.3)(vite@5.4.19(@types/node@22.14.1))(vue@3.5.15(typescript@5.8.3)): dependencies: '@vue/devtools-core': 7.7.5(vite@5.4.19(@types/node@22.14.1))(vue@3.5.15(typescript@5.8.3)) '@vue/devtools-kit': 7.7.5 @@ -12543,7 +12629,7 @@ snapshots: execa: 9.5.2 sirv: 3.0.1 vite: 5.4.19(@types/node@22.14.1) - vite-plugin-inspect: 0.8.9(rollup@4.40.0)(vite@5.4.19(@types/node@22.14.1)) + vite-plugin-inspect: 0.8.9(rollup@4.46.3)(vite@5.4.19(@types/node@22.14.1)) vite-plugin-vue-inspector: 5.3.1(vite@5.4.19(@types/node@22.14.1)) transitivePeerDependencies: - '@nuxt/kit' @@ -12553,12 +12639,12 @@ snapshots: vite-plugin-vue-inspector@5.3.1(vite@5.4.19(@types/node@22.14.1)): dependencies: - '@babel/core': 7.26.10 - '@babel/plugin-proposal-decorators': 7.25.9(@babel/core@7.26.10) - '@babel/plugin-syntax-import-attributes': 7.26.0(@babel/core@7.26.10) - '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.26.10) - '@babel/plugin-transform-typescript': 7.27.0(@babel/core@7.26.10) - '@vue/babel-plugin-jsx': 1.4.0(@babel/core@7.26.10) + '@babel/core': 7.28.3 + '@babel/plugin-proposal-decorators': 7.25.9(@babel/core@7.28.3) + '@babel/plugin-syntax-import-attributes': 7.26.0(@babel/core@7.28.3) + '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.28.3) + '@babel/plugin-transform-typescript': 7.27.0(@babel/core@7.28.3) + '@vue/babel-plugin-jsx': 1.4.0(@babel/core@7.28.3) '@vue/compiler-dom': 3.5.15 kolorist: 1.8.0 magic-string: 0.30.17 @@ -12569,13 +12655,13 @@ snapshots: vite@5.4.19(@types/node@22.14.1): dependencies: esbuild: 0.21.5 - postcss: 8.5.3 - rollup: 4.40.0 + postcss: 8.5.6 + rollup: 4.46.3 optionalDependencies: '@types/node': 22.14.1 fsevents: 2.3.3 - vitefu@1.0.6(vite@5.4.19(@types/node@22.14.1)): + vitefu@1.1.1(vite@5.4.19(@types/node@22.14.1)): optionalDependencies: vite: 5.4.19(@types/node@22.14.1) @@ -12723,15 +12809,15 @@ snapshots: yoctocolors@2.1.1: {} - zod-to-json-schema@3.24.5(zod@3.24.3): + zod-to-json-schema@3.24.6(zod@3.25.76): dependencies: - zod: 3.24.3 + zod: 3.25.76 - zod-to-ts@1.2.0(typescript@5.8.3)(zod@3.24.3): + zod-to-ts@1.2.0(typescript@5.8.3)(zod@3.25.76): dependencies: typescript: 5.8.3 - zod: 3.24.3 + zod: 3.25.76 - zod@3.24.3: {} + zod@3.25.76: {} zwitch@2.0.4: {} From 49fccffa8b1ddffbc3f90807004b6a42024c33f5 Mon Sep 17 00:00:00 2001 From: Clas Wen Date: Thu, 18 Sep 2025 22:53:30 +0800 Subject: [PATCH 13/18] add clarity --- src/layouts/BaseLayout.astro | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/src/layouts/BaseLayout.astro b/src/layouts/BaseLayout.astro index 49ee25a..874f5ef 100644 --- a/src/layouts/BaseLayout.astro +++ b/src/layouts/BaseLayout.astro @@ -6,10 +6,21 @@ import { SITE_TITLE, SITE_DESCRIPTION } from "../consts" const { primaryTitle } = Astro.props const title = primaryTitle ? `${primaryTitle} - ${SITE_TITLE}` : SITE_TITLE; --- - +
From 2cd425a8886b306704a11f48424edbc932aed888 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 18 Sep 2025 14:57:16 +0000 Subject: [PATCH 14/18] Bump the npm_and_yarn group across 1 directory with 2 updates Bumps the npm_and_yarn group with 2 updates in the / directory: [devalue](https://github.com/sveltejs/devalue) and [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite). Updates `devalue` from 5.1.1 to 5.3.2 - [Release notes](https://github.com/sveltejs/devalue/releases) - [Changelog](https://github.com/sveltejs/devalue/blob/main/CHANGELOG.md) - [Commits](https://github.com/sveltejs/devalue/compare/v5.1.1...v5.3.2) Updates `vite` from 5.4.19 to 5.4.20 - [Release notes](https://github.com/vitejs/vite/releases) - [Changelog](https://github.com/vitejs/vite/blob/v5.4.20/packages/vite/CHANGELOG.md) - [Commits](https://github.com/vitejs/vite/commits/v5.4.20/packages/vite) --- updated-dependencies: - dependency-name: devalue dependency-version: 5.3.2 dependency-type: indirect dependency-group: npm_and_yarn - dependency-name: vite dependency-version: 5.4.20 dependency-type: indirect dependency-group: npm_and_yarn ... Signed-off-by: dependabot[bot] --- pnpm-lock.yaml | 102 +++++++++++++++++++------------------------------ 1 file changed, 40 insertions(+), 62 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 3f6ad20..1d50e08 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -225,10 +225,6 @@ packages: astro: ^4.0.0 vue: ^3.2.30 - '@babel/code-frame@7.26.2': - resolution: {integrity: sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==} - engines: {node: '>=6.9.0'} - '@babel/code-frame@7.27.1': resolution: {integrity: sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==} engines: {node: '>=6.9.0'} @@ -2983,10 +2979,6 @@ packages: resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} engines: {node: '>=10'} - chalk@5.4.1: - resolution: {integrity: sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w==} - engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} - chalk@5.6.0: resolution: {integrity: sha512-46QrSQFyVSEyYAgQ22hQ+zDa60YHA4fBstHmtSApj1Y5vKtG27fWowW03jCk5KcbXEWPZUIR894aARCA/G1kfQ==} engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} @@ -3268,8 +3260,8 @@ packages: resolution: {integrity: sha512-KxektNH63SrbfUyDiwXqRb1rLwKt33AmMv+5Nhsw1kqZ13SJBRTgZHtGbE+hH3a1mVW1cz+4pqSWVPAtLVXTzQ==} engines: {node: '>=18'} - devalue@5.1.1: - resolution: {integrity: sha512-maua5KUiapvEwiEAe+XnlZ3Rh0GD+qI1J/nb9vrJc3muPXvcF/8gXYTWF76+5DAqHyDUtOIImEuo0YKE9mshVw==} + devalue@5.3.2: + resolution: {integrity: sha512-UDsjUbpQn9kvm68slnrs+mfxwFkIflOhkanmyabZ8zOYk8SMEIbJ3TK+88g70hSIeytu4y18f0z/hYHMTrXIWw==} devlop@1.1.0: resolution: {integrity: sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==} @@ -5269,10 +5261,6 @@ packages: resolution: {integrity: sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==} engines: {node: '>=10'} - type-fest@4.40.0: - resolution: {integrity: sha512-ABHZ2/tS2JkvH1PEjxFDTUWC8dB5OsIGZP4IFLhR293GqT5Y5qB1WwL2kMPYhQW9DVgVD8Hd7I8gjwPIf5GFkw==} - engines: {node: '>=16'} - type-fest@4.41.0: resolution: {integrity: sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==} engines: {node: '>=16'} @@ -5455,8 +5443,8 @@ packages: peerDependencies: vite: ^3.0.0-0 || ^4.0.0-0 || ^5.0.0-0 || ^6.0.0-0 - vite@5.4.19: - resolution: {integrity: sha512-qO3aKv3HoQC8QKiNSTuUM1l9o/XX3+c+VTgLHbJWHZGeTPVAg2XwazI9UWzoxjIJCGCV2zU60uqMzjeLZuULqA==} + vite@5.4.20: + resolution: {integrity: sha512-j3lYzGC3P+B5Yfy/pfKNgVEg4+UtcIJcVRt2cDjIOmhLourAqPqf8P7acgxeiSgUB7E3p2P8/3gNIgDLpwzs4g==} engines: {node: ^18.0.0 || >=20.0.0} hasBin: true peerDependencies: @@ -5690,11 +5678,11 @@ snapshots: dependencies: '@types/react': 18.3.23 '@types/react-dom': 18.3.7(@types/react@18.3.23) - '@vitejs/plugin-react': 4.4.1(vite@5.4.19(@types/node@22.14.1)) + '@vitejs/plugin-react': 4.4.1(vite@5.4.20(@types/node@22.14.1)) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) ultrahtml: 1.6.0 - vite: 5.4.19(@types/node@22.14.1) + vite: 5.4.20(@types/node@22.14.1) transitivePeerDependencies: - '@types/node' - less @@ -5735,12 +5723,12 @@ snapshots: '@astrojs/vue@4.5.3(@types/node@22.14.1)(astro@4.16.19(@types/node@22.14.1)(rollup@4.46.3)(typescript@5.8.3))(rollup@4.46.3)(vue@3.5.15(typescript@5.8.3))': dependencies: - '@vitejs/plugin-vue': 5.2.3(vite@5.4.19(@types/node@22.14.1))(vue@3.5.15(typescript@5.8.3)) - '@vitejs/plugin-vue-jsx': 4.1.2(vite@5.4.19(@types/node@22.14.1))(vue@3.5.15(typescript@5.8.3)) + '@vitejs/plugin-vue': 5.2.3(vite@5.4.20(@types/node@22.14.1))(vue@3.5.15(typescript@5.8.3)) + '@vitejs/plugin-vue-jsx': 4.1.2(vite@5.4.20(@types/node@22.14.1))(vue@3.5.15(typescript@5.8.3)) '@vue/compiler-sfc': 3.5.13 astro: 4.16.19(@types/node@22.14.1)(rollup@4.46.3)(typescript@5.8.3) - vite: 5.4.19(@types/node@22.14.1) - vite-plugin-vue-devtools: 7.7.5(rollup@4.46.3)(vite@5.4.19(@types/node@22.14.1))(vue@3.5.15(typescript@5.8.3)) + vite: 5.4.20(@types/node@22.14.1) + vite-plugin-vue-devtools: 7.7.5(rollup@4.46.3)(vite@5.4.20(@types/node@22.14.1))(vue@3.5.15(typescript@5.8.3)) vue: 3.5.15(typescript@5.8.3) transitivePeerDependencies: - '@nuxt/kit' @@ -5755,12 +5743,6 @@ snapshots: - supports-color - terser - '@babel/code-frame@7.26.2': - dependencies: - '@babel/helper-validator-identifier': 7.27.1 - js-tokens: 4.0.0 - picocolors: 1.1.1 - '@babel/code-frame@7.27.1': dependencies: '@babel/helper-validator-identifier': 7.27.1 @@ -9156,30 +9138,30 @@ snapshots: '@unrs/resolver-binding-win32-x64-msvc@1.7.0': optional: true - '@vitejs/plugin-react@4.4.1(vite@5.4.19(@types/node@22.14.1))': + '@vitejs/plugin-react@4.4.1(vite@5.4.20(@types/node@22.14.1))': dependencies: '@babel/core': 7.28.3 '@babel/plugin-transform-react-jsx-self': 7.25.9(@babel/core@7.28.3) '@babel/plugin-transform-react-jsx-source': 7.25.9(@babel/core@7.28.3) '@types/babel__core': 7.20.5 react-refresh: 0.17.0 - vite: 5.4.19(@types/node@22.14.1) + vite: 5.4.20(@types/node@22.14.1) transitivePeerDependencies: - supports-color - '@vitejs/plugin-vue-jsx@4.1.2(vite@5.4.19(@types/node@22.14.1))(vue@3.5.15(typescript@5.8.3))': + '@vitejs/plugin-vue-jsx@4.1.2(vite@5.4.20(@types/node@22.14.1))(vue@3.5.15(typescript@5.8.3))': dependencies: '@babel/core': 7.28.3 '@babel/plugin-transform-typescript': 7.27.0(@babel/core@7.28.3) '@vue/babel-plugin-jsx': 1.4.0(@babel/core@7.28.3) - vite: 5.4.19(@types/node@22.14.1) + vite: 5.4.20(@types/node@22.14.1) vue: 3.5.15(typescript@5.8.3) transitivePeerDependencies: - supports-color - '@vitejs/plugin-vue@5.2.3(vite@5.4.19(@types/node@22.14.1))(vue@3.5.15(typescript@5.8.3))': + '@vitejs/plugin-vue@5.2.3(vite@5.4.20(@types/node@22.14.1))(vue@3.5.15(typescript@5.8.3))': dependencies: - vite: 5.4.19(@types/node@22.14.1) + vite: 5.4.20(@types/node@22.14.1) vue: 3.5.15(typescript@5.8.3) '@vue/babel-helper-vue-transform-on@1.4.0': {} @@ -9258,7 +9240,7 @@ snapshots: '@vue/shared': 3.5.15 estree-walker: 2.0.2 magic-string: 0.30.17 - postcss: 8.5.3 + postcss: 8.5.6 source-map-js: 1.2.1 '@vue/compiler-ssr@3.5.13': @@ -9271,14 +9253,14 @@ snapshots: '@vue/compiler-dom': 3.5.15 '@vue/shared': 3.5.15 - '@vue/devtools-core@7.7.5(vite@5.4.19(@types/node@22.14.1))(vue@3.5.15(typescript@5.8.3))': + '@vue/devtools-core@7.7.5(vite@5.4.20(@types/node@22.14.1))(vue@3.5.15(typescript@5.8.3))': dependencies: '@vue/devtools-kit': 7.7.5 '@vue/devtools-shared': 7.7.5 mitt: 3.0.1 nanoid: 5.1.5 pathe: 2.0.3 - vite-hot-client: 2.0.4(vite@5.4.19(@types/node@22.14.1)) + vite-hot-client: 2.0.4(vite@5.4.20(@types/node@22.14.1)) vue: 3.5.15(typescript@5.8.3) transitivePeerDependencies: - vite @@ -9468,7 +9450,7 @@ snapshots: cssesc: 3.0.0 debug: 4.4.1(supports-color@10.0.0) deterministic-object-hash: 2.0.2 - devalue: 5.1.1 + devalue: 5.3.2 diff: 5.2.0 dlv: 1.1.3 dset: 3.1.4 @@ -9500,8 +9482,8 @@ snapshots: tsconfck: 3.1.6(typescript@5.8.3) unist-util-visit: 5.0.0 vfile: 6.0.3 - vite: 5.4.19(@types/node@22.14.1) - vitefu: 1.1.1(vite@5.4.19(@types/node@22.14.1)) + vite: 5.4.20(@types/node@22.14.1) + vitefu: 1.1.1(vite@5.4.20(@types/node@22.14.1)) which-pm: 3.0.1 xxhash-wasm: 1.1.0 yargs-parser: 21.1.1 @@ -9660,8 +9642,6 @@ snapshots: ansi-styles: 4.3.0 supports-color: 7.2.0 - chalk@5.4.1: {} - chalk@5.6.0: {} change-case@5.4.4: {} @@ -9936,7 +9916,7 @@ snapshots: dependencies: base-64: 1.0.0 - devalue@5.1.1: {} + devalue@5.3.2: {} devlop@1.1.0: dependencies: @@ -10957,7 +10937,7 @@ snapshots: lint-staged@15.5.2: dependencies: - chalk: 5.4.1 + chalk: 5.6.0 commander: 13.1.0 debug: 4.4.1(supports-color@10.0.0) execa: 8.0.1 @@ -11625,9 +11605,9 @@ snapshots: parse-json@8.3.0: dependencies: - '@babel/code-frame': 7.26.2 + '@babel/code-frame': 7.27.1 index-to-position: 1.1.0 - type-fest: 4.40.0 + type-fest: 4.41.0 parse-latin@7.0.0: dependencies: @@ -12392,8 +12372,6 @@ snapshots: type-fest@1.4.0: {} - type-fest@4.40.0: {} - type-fest@4.41.0: {} typed-array-buffer@1.0.3: @@ -12601,11 +12579,11 @@ snapshots: '@types/unist': 3.0.3 vfile-message: 4.0.3 - vite-hot-client@2.0.4(vite@5.4.19(@types/node@22.14.1)): + vite-hot-client@2.0.4(vite@5.4.20(@types/node@22.14.1)): dependencies: - vite: 5.4.19(@types/node@22.14.1) + vite: 5.4.20(@types/node@22.14.1) - vite-plugin-inspect@0.8.9(rollup@4.46.3)(vite@5.4.19(@types/node@22.14.1)): + vite-plugin-inspect@0.8.9(rollup@4.46.3)(vite@5.4.20(@types/node@22.14.1)): dependencies: '@antfu/utils': 0.7.10 '@rollup/pluginutils': 5.2.0(rollup@4.46.3) @@ -12616,28 +12594,28 @@ snapshots: perfect-debounce: 1.0.0 picocolors: 1.1.1 sirv: 3.0.1 - vite: 5.4.19(@types/node@22.14.1) + vite: 5.4.20(@types/node@22.14.1) transitivePeerDependencies: - rollup - supports-color - vite-plugin-vue-devtools@7.7.5(rollup@4.46.3)(vite@5.4.19(@types/node@22.14.1))(vue@3.5.15(typescript@5.8.3)): + vite-plugin-vue-devtools@7.7.5(rollup@4.46.3)(vite@5.4.20(@types/node@22.14.1))(vue@3.5.15(typescript@5.8.3)): dependencies: - '@vue/devtools-core': 7.7.5(vite@5.4.19(@types/node@22.14.1))(vue@3.5.15(typescript@5.8.3)) + '@vue/devtools-core': 7.7.5(vite@5.4.20(@types/node@22.14.1))(vue@3.5.15(typescript@5.8.3)) '@vue/devtools-kit': 7.7.5 '@vue/devtools-shared': 7.7.5 execa: 9.5.2 sirv: 3.0.1 - vite: 5.4.19(@types/node@22.14.1) - vite-plugin-inspect: 0.8.9(rollup@4.46.3)(vite@5.4.19(@types/node@22.14.1)) - vite-plugin-vue-inspector: 5.3.1(vite@5.4.19(@types/node@22.14.1)) + vite: 5.4.20(@types/node@22.14.1) + vite-plugin-inspect: 0.8.9(rollup@4.46.3)(vite@5.4.20(@types/node@22.14.1)) + vite-plugin-vue-inspector: 5.3.1(vite@5.4.20(@types/node@22.14.1)) transitivePeerDependencies: - '@nuxt/kit' - rollup - supports-color - vue - vite-plugin-vue-inspector@5.3.1(vite@5.4.19(@types/node@22.14.1)): + vite-plugin-vue-inspector@5.3.1(vite@5.4.20(@types/node@22.14.1)): dependencies: '@babel/core': 7.28.3 '@babel/plugin-proposal-decorators': 7.25.9(@babel/core@7.28.3) @@ -12648,11 +12626,11 @@ snapshots: '@vue/compiler-dom': 3.5.15 kolorist: 1.8.0 magic-string: 0.30.17 - vite: 5.4.19(@types/node@22.14.1) + vite: 5.4.20(@types/node@22.14.1) transitivePeerDependencies: - supports-color - vite@5.4.19(@types/node@22.14.1): + vite@5.4.20(@types/node@22.14.1): dependencies: esbuild: 0.21.5 postcss: 8.5.6 @@ -12661,9 +12639,9 @@ snapshots: '@types/node': 22.14.1 fsevents: 2.3.3 - vitefu@1.1.1(vite@5.4.19(@types/node@22.14.1)): + vitefu@1.1.1(vite@5.4.20(@types/node@22.14.1)): optionalDependencies: - vite: 5.4.19(@types/node@22.14.1) + vite: 5.4.20(@types/node@22.14.1) vscode-languageserver-textdocument@1.0.12: {} From 59428e19e347e530e78b6701468651deedda1c72 Mon Sep 17 00:00:00 2001 From: clas Date: Thu, 18 Sep 2025 23:09:13 +0800 Subject: [PATCH 15/18] Potential fix for code scanning alert no. 3: Workflow does not contain permissions Co-authored-by: Copilot Autofix powered by AI <62310815+github-advanced-security[bot]@users.noreply.github.com> --- .github/workflows/main.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 0f57261..a15adaa 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -1,4 +1,6 @@ name: main +permissions: + contents: read on: push: From 09d88dc7ba520cc3327c6ae5bf7dc4afbd9f1897 Mon Sep 17 00:00:00 2001 From: clas Date: Fri, 19 Sep 2025 22:15:48 +0800 Subject: [PATCH 16/18] Update main.yml --- .github/workflows/main.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index a15adaa..c7e5001 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -1,6 +1,7 @@ name: main permissions: contents: read + packages: write on: push: From 3ef9cc2ebeaffc525568df70252204585d796a5b Mon Sep 17 00:00:00 2001 From: Clas Wen Date: Thu, 25 Sep 2025 19:37:34 +0800 Subject: [PATCH 17/18] Make RepairAdmin page responsive with mobile card layout MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Add responsive container layout with mobile-first approach - Implement mobile card component for better touch interaction - Switch between table (desktop) and cards (mobile) at sm breakpoint - Make header section responsive with stacked layout on mobile - Enhance drawer with full-screen mobile support - Add mobile-optimized filter controls - Improve touch targets and spacing for mobile devices - Fix global CSS button border issue for card styling 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude --- src/pages/repair/RepairAdmin.tsx | 168 ++++++++++++++++++++++++------- src/styles/global.css | 1 - 2 files changed, 129 insertions(+), 40 deletions(-) diff --git a/src/pages/repair/RepairAdmin.tsx b/src/pages/repair/RepairAdmin.tsx index b8f9d00..7b5c30e 100644 --- a/src/pages/repair/RepairAdmin.tsx +++ b/src/pages/repair/RepairAdmin.tsx @@ -140,15 +140,15 @@ function TicketDetailDrawer(props: { return ( - -

维修详情

- {isLoading} + +

维修详情

+ {isLoading && {isLoading}}
- + { event => ( -
+
{ availableActions?.map((action) => { return ( @@ -171,8 +171,8 @@ function TicketDetailDrawer(props: { } - - @@ -336,6 +336,52 @@ export default function App() { onOpen() } + const MobileEventCard = ({ event }: { event: PublicEvent }) => ( + + ) + const renderCell = useCallback((event: PublicEvent, columnKey: string | number) => { const cellValue = event[columnKey] @@ -389,45 +435,89 @@ export default function App() { } }, []) return ( -
-
-
维修管理
+
+
+
维修管理
{ userInfo?.roles?.find(v => v.toLowerCase() == "repair admin") - ? + ?
: <> }
- - setPage(page)} - /> - - )} - > - - {column => {column.label}}>} - - }> - {item => ( - - {columnKey => {renderCell(item, columnKey)}} - + {/* Mobile Cards Layout */} +
+ {/* Filter Section for Mobile */} +
+ 筛选状态: + +
+ + {isLoading + ? ( +
+ +
+ ) + : ( +
+ {items.map(event => ( + + ))} + {items.length === 0 && ( +
+ 暂无维修记录 +
+ )} +
+ )} + + {/* Mobile Pagination */} +
+ setPage(page)} + /> +
+
+ + {/* Desktop Table Layout */} +
+
+ setPage(page)} + /> + )} - -
+ > + + {column => {column.label}
}>} + + }> + {item => ( + + {columnKey => {renderCell(item, columnKey)}} + + )} + + +
Date: Thu, 25 Sep 2025 22:47:05 +0800 Subject: [PATCH 18/18] Fix recurring event duplication bug MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit When a recurring event has a modified occurrence, the calendar was showing both the original and modified versions. This happened because the code didn't properly handle RECURRENCE-ID exceptions in iCal data. Changes: - Modified extractScheduleEventsInRange() to collect exception events first and filter them from recurring patterns - Updated expandEventOccurrences() to skip dates that have exceptions - Applied same fix to extractScheduleEvents() for proper date range filtering Fixes issue where modified recurring events appeared twice in the UI. 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude --- src/pages/calendar/Schedule.tsx | 84 +++++++++++++++++++++++++++++++-- 1 file changed, 79 insertions(+), 5 deletions(-) diff --git a/src/pages/calendar/Schedule.tsx b/src/pages/calendar/Schedule.tsx index 52d758d..e7fc3a3 100644 --- a/src/pages/calendar/Schedule.tsx +++ b/src/pages/calendar/Schedule.tsx @@ -28,7 +28,39 @@ const extractScheduleEventsInRange = ( rangeEnd: ICAL.Time, ): ScheduleEvent[] => { const vevents = icalComp.getAllSubcomponents("vevent") - return vevents + + // First, collect all exception events (events with RECURRENCE-ID) + const exceptions = new Map>() // uid -> set of recurrence-id strings + const exceptionEvents: ScheduleEvent[] = [] + + vevents.forEach((vevent) => { + const recurrenceId = vevent.getFirstPropertyValue("recurrence-id") + if (recurrenceId) { + const uid = vevent.getFirstPropertyValue("uid") + const event = new ICAL.Event(vevent) + + // Check if exception is in range + if (event.startDate.compare(rangeEnd) <= 0 && event.endDate.compare(rangeStart) >= 0) { + exceptionEvents.push({ + start: event.startDate.toJSDate(), + end: event.endDate.toJSDate(), + summary: event.summary, + description: event.description, + recurrenceId: recurrenceId.toString(), + }) + } + + // Track exception for filtering recurring events + if (!exceptions.has(uid)) { + exceptions.set(uid, new Set()) + } + exceptions.get(uid)!.add(recurrenceId.toString()) + } + }) + + // Process regular and recurring events + const regularEvents = vevents + .filter(vevent => !vevent.getFirstPropertyValue("recurrence-id")) .flatMap((vevent) => { const event = new ICAL.Event(vevent) if (!event.isRecurring()) { @@ -41,8 +73,11 @@ const extractScheduleEventsInRange = ( recurrenceId: undefined, }] } - return expandEventOccurrences(event, rangeStart, rangeEnd) + const eventExceptions = exceptions.get(event.uid) || new Set() + return expandEventOccurrences(event, rangeStart, rangeEnd, eventExceptions) }) + + return [...regularEvents, ...exceptionEvents] .sort((a, b) => b.start.getTime() - a.start.getTime()) } @@ -50,6 +85,7 @@ const expandEventOccurrences = ( event: ICAL.Event, rangeStart: ICAL.Time, rangeEnd: ICAL.Time, + exceptions?: Set, ): ScheduleEvent[] => { const occurrences: ScheduleEvent[] = [] const iterator = event.iterator() @@ -58,6 +94,10 @@ const expandEventOccurrences = ( if (!next) break if (next.compare(rangeEnd) > 0) break if (next.compare(rangeStart) < 0) continue + + // Skip this occurrence if it has an exception + if (exceptions && exceptions.has(next.toString())) continue + const details = event.getOccurrenceDetails(next) occurrences.push({ start: details.startDate.toJSDate(), @@ -73,8 +113,40 @@ const expandEventOccurrences = ( const extractScheduleEvents = (icalComp: ICAL.Component): ScheduleEvent[] => { const vevents = icalComp.getAllSubcomponents("vevent") const rangeEnd = ICAL.Time.fromDateString("2026-01-01") + const rangeStart = ICAL.Time.fromDateString("2020-01-01") - return vevents + // First, collect all exception events (events with RECURRENCE-ID) + const exceptions = new Map>() // uid -> set of recurrence-id strings + const exceptionEvents: ScheduleEvent[] = [] + + vevents.forEach((vevent) => { + const recurrenceId = vevent.getFirstPropertyValue("recurrence-id") + if (recurrenceId) { + const uid = vevent.getFirstPropertyValue("uid") + const event = new ICAL.Event(vevent) + + // Check if exception is in range + if (event.startDate.compare(rangeEnd) <= 0 && event.endDate.compare(rangeStart) >= 0) { + exceptionEvents.push({ + start: event.startDate.toJSDate(), + end: event.endDate.toJSDate(), + summary: event.summary, + description: event.description, + recurrenceId: recurrenceId.toString(), + }) + } + + // Track exception for filtering recurring events + if (!exceptions.has(uid)) { + exceptions.set(uid, new Set()) + } + exceptions.get(uid)!.add(recurrenceId.toString()) + } + }) + + // Process regular and recurring events + const regularEvents = vevents + .filter(vevent => !vevent.getFirstPropertyValue("recurrence-id")) .flatMap((vevent) => { const event = new ICAL.Event(vevent) if (event.iterator().complete) { @@ -84,11 +156,13 @@ const extractScheduleEvents = (icalComp: ICAL.Component): ScheduleEvent[] => { summary: event.summary, description: event.description, recurrenceId: event.uid || event.startDate.toString(), - }] } - return expandEventOccurrences(event, rangeEnd) + const eventExceptions = exceptions.get(event.uid) || new Set() + return expandEventOccurrences(event, rangeStart, rangeEnd, eventExceptions) }) + + return [...regularEvents, ...exceptionEvents] .sort((a, b) => b.start.getTime() - a.start.getTime()) }