feat: |UI| Optimized minimalist mode homepage, added all email page f… (#708)

feat: |UI| Optimized minimalist mode homepage, added all email page functions (delete/download/attachments/...)
This commit is contained in:
Dream Hunter
2025-08-23 00:23:47 +08:00
committed by GitHub
parent 840496c48f
commit 4084771621
13 changed files with 1713 additions and 1520 deletions

1
.gitignore vendored
View File

@@ -1,3 +1,4 @@
.DS_Store
dist/
test/
.vscode/

View File

@@ -1,6 +1,10 @@
<!-- markdownlint-disable-file MD004 MD024 MD034 MD036 -->
# CHANGE LOG
## main(v1.0.4)
- feat: |UI| 优化极简模式主页, 增加全部邮件页面功能(删除/下载/附件/...), 可在 `外观` 中切换
## v1.0.3
- fix: 修复 github actions 部署问题

View File

@@ -1,6 +1,6 @@
{
"name": "cloudflare_temp_email",
"version": "1.0.3",
"version": "1.0.4",
"private": true,
"type": "module",
"scripts": {
@@ -30,7 +30,7 @@
"naive-ui": "^2.42.0",
"postal-mime": "^2.4.4",
"vooks": "^0.2.12",
"vue": "^3.5.18",
"vue": "^3.5.19",
"vue-clipboard3": "^2.0.0",
"vue-i18n": "^11.1.11",
"vue-router": "^4.5.1"
@@ -42,12 +42,12 @@
"unplugin-auto-import": "^19.3.0",
"unplugin-vue-components": "^28.8.0",
"vite": "^6.3.5",
"vite-plugin-pwa": "^1.0.2",
"vite-plugin-pwa": "^1.0.3",
"vite-plugin-top-level-await": "^1.6.0",
"vite-plugin-wasm": "^3.5.0",
"workbox-build": "^7.3.0",
"workbox-window": "^7.3.0",
"wrangler": "^4.28.1"
"wrangler": "^4.32.0"
},
"packageManager": "pnpm@10.10.0+sha512.d615db246fe70f25dcfea6d8d73dee782ce23e2245e3c4f6f888249fb568149318637dca73c2c5c8ef2a4ca0d5657fb9567188bfab47f566d1ee6ce987815c39"
}

1568
frontend/pnpm-lock.yaml generated

File diff suppressed because it is too large Load Diff

View File

@@ -3,11 +3,11 @@ import { watch, onMounted, ref, onBeforeUnmount } from "vue";
import { useMessage } from 'naive-ui'
import { useI18n } from 'vue-i18n'
import { useGlobalState } from '../store'
import { CloudDownloadRound, ReplyFilled, ForwardFilled } from '@vicons/material'
import { CloudDownloadRound } from '@vicons/material'
import { useIsMobile } from '../utils/composables'
import { processItem, getDownloadEmlUrl } from '../utils/email-parser'
import { processItem } from '../utils/email-parser'
import { utcToLocalDate } from '../utils';
import ShadowHtmlComponent from "./ShadowHtmlComponent.vue";
import MailContentRenderer from "./MailContentRenderer.vue";
const message = useMessage()
const isMobile = useIsMobile()
@@ -51,8 +51,8 @@ const props = defineProps({
})
const {
isDark, mailboxSplitSize, indexTab, loading, useUTCDate, autoRefresh, configAutoRefreshInterval,
useIframeShowMail, sendMailModel, preferShowTextMail
isDark, mailboxSplitSize, indexTab, loading, useUTCDate,
autoRefresh, configAutoRefreshInterval, sendMailModel
} = useGlobalState()
const autoRefreshInterval = ref(configAutoRefreshInterval.value)
const data = ref([])
@@ -62,10 +62,7 @@ const count = ref(0)
const page = ref(1)
const pageSize = ref(20)
const showAttachments = ref(false)
const curAttachments = ref([])
const curMail = ref(null);
const showTextMail = ref(preferShowTextMail.value)
const multiActionMode = ref(false)
const showMultiActionDownload = ref(false)
@@ -185,10 +182,6 @@ const clickRow = async (row) => {
curMail.value = row;
};
const getAttachments = (attachments) => {
curAttachments.value = attachments;
showAttachments.value = true;
};
const mailItemClass = (row) => {
return curMail.value && row.id == curMail.value.id ? (isDark.value ? 'overlay overlay-dark-backgroud' : 'overlay overlay-light-backgroud') : '';
@@ -237,14 +230,8 @@ const onSpiltSizeChange = (size) => {
mailboxSplitSize.value = size;
}
const attachmentLoding = ref(false)
const saveToS3Proxy = async (filename, blob) => {
attachmentLoding.value = true
try {
await props.saveToS3(curMail.value.id, filename, blob);
} finally {
attachmentLoding.value = false
}
await props.saveToS3(curMail.value.id, filename, blob);
}
const multiActionModeClick = (enableMulti) => {
@@ -415,57 +402,10 @@ onBeforeUnmount(() => {
<template #2>
<n-card :bordered="false" embedded v-if="curMail" class="mail-item" :title="curMail.subject"
style="overflow: auto; max-height: 100vh;">
<n-space>
<n-tag type="info">
ID: {{ curMail.id }}
</n-tag>
<n-tag type="info">
{{ utcToLocalDate(curMail.created_at, useUTCDate) }}
</n-tag>
<n-tag type="info">
FROM: {{ curMail.source }}
</n-tag>
<n-tag v-if="showEMailTo" type="info">
TO: {{ curMail.address }}
</n-tag>
<n-popconfirm v-if="enableUserDeleteEmail" @positive-click="deleteMail">
<template #trigger>
<n-button tertiary type="error" size="small">{{ t('delete') }}</n-button>
</template>
{{ t('deleteMailTip') }}
</n-popconfirm>
<n-button v-if="curMail.attachments && curMail.attachments.length > 0" size="small" tertiary type="info"
@click="getAttachments(curMail.attachments)">
{{ t('attachments') }}
</n-button>
<n-button tag="a" target="_blank" tertiary type="info" size="small" :download="curMail.id + '.eml'"
:href="getDownloadEmlUrl(curMail.raw)">
<template #icon>
<n-icon :component="CloudDownloadRound" />
</template>
{{ t('downloadMail') }}
</n-button>
<n-button v-if="showReply" size="small" tertiary type="info" @click="replyMail">
<template #icon>
<n-icon :component="ReplyFilled" />
</template>
{{ t('reply') }}
</n-button>
<n-button v-if="showReply" size="small" tertiary type="info" @click="forwardMail">
<template #icon>
<n-icon :component="ForwardFilled" />
</template>
{{ t('forwardMail') }}
</n-button>
<n-button size="small" tertiary type="info" @click="showTextMail = !showTextMail">
{{ showTextMail ? t('showHtmlMail') : t('showTextMail') }}
</n-button>
</n-space>
<pre v-if="showTextMail" style="margin-top: 10px;">{{ curMail.text }}</pre>
<iframe v-else-if="useIframeShowMail" :srcdoc="curMail.message"
style="margin-top: 10px;width: 100%; height: 100%;">
</iframe>
<ShadowHtmlComponent v-else :htmlContent="curMail.message" style="margin-top: 10px;" />
<MailContentRenderer :mail="curMail" :showEMailTo="showEMailTo"
:enableUserDeleteEmail="enableUserDeleteEmail" :showReply="showReply" :showSaveS3="showSaveS3"
:onDelete="deleteMail" :onReply="replyMail" :onForward="forwardMail"
:onSaveToS3="saveToS3Proxy" />
</n-card>
<n-card :bordered="false" embedded class="mail-item" v-else>
<n-result status="info" :title="t('pleaseSelectMail')">
@@ -517,89 +457,14 @@ onBeforeUnmount(() => {
style="height: 80vh;">
<n-drawer-content :title="curMail ? curMail.subject : ''" closable>
<n-card :bordered="false" embedded style="overflow: auto;">
<n-space>
<n-tag type="info">
ID: {{ curMail.id }}
</n-tag>
<n-tag type="info">
{{ utcToLocalDate(curMail.created_at, useUTCDate) }}
</n-tag>
<n-tag type="info">
FROM: {{ curMail.source }}
</n-tag>
<n-tag v-if="showEMailTo" type="info">
TO: {{ curMail.address }}
</n-tag>
<n-popconfirm v-if="enableUserDeleteEmail" @positive-click="deleteMail">
<template #trigger>
<n-button tertiary type="error" size="small">{{ t('delete') }}</n-button>
</template>
{{ t('deleteMailTip') }}
</n-popconfirm>
<n-button v-if="curMail.attachments && curMail.attachments.length > 0" size="small" tertiary type="info"
@click="getAttachments(curMail.attachments)">
{{ t('attachments') }}
</n-button>
<n-button tag="a" target="_blank" tertiary type="info" size="small" :download="curMail.id + '.eml'"
:href="getDownloadEmlUrl(curMail)">
<n-icon :component="CloudDownloadRound" />
{{ t('downloadMail') }}
</n-button>
<n-button v-if="showReply" size="small" tertiary type="info" @click="replyMail">
<template #icon>
<n-icon :component="ReplyFilled" />
</template>
{{ t('reply') }}
</n-button>
<n-button v-if="showReply" size="small" tertiary type="info" @click="forwardMail">
<template #icon>
<n-icon :component="ForwardFilled" />
</template>
{{ t('forwardMail') }}
</n-button>
<n-button size="small" tertiary type="info" @click="showTextMail = !showTextMail">
{{ showTextMail ? t('showHtmlMail') : t('showTextMail') }}
</n-button>
</n-space>
<pre v-if="showTextMail" style="margin-top: 10px;">{{ curMail.text }}</pre>
<iframe v-else-if="useIframeShowMail" :srcdoc="curMail.message"
style="margin-top: 10px;width: 100%; height: 100%;">
</iframe>
<ShadowHtmlComponent :key="curMail.id" v-else :htmlContent="curMail.message" style="margin-top: 10px;" />
<MailContentRenderer :mail="curMail" :showEMailTo="showEMailTo"
:enableUserDeleteEmail="enableUserDeleteEmail" :showReply="showReply" :showSaveS3="showSaveS3"
:useUTCDate="useUTCDate" :onDelete="deleteMail" :onReply="replyMail"
:onForward="forwardMail" :onSaveToS3="saveToS3Proxy" />
</n-card>
</n-drawer-content>
</n-drawer>
</div>
<n-modal v-model:show="showAttachments" preset="dialog" title="Dialog">
<template #header>
<div>{{ t("attachments") }}</div>
</template>
<n-spin v-model:show="attachmentLoding">
<n-list hoverable clickable>
<n-list-item v-for="row in curAttachments" v-bind:key="row.id">
<n-thing class="center" :title="row.filename">
<template #description>
<n-space>
<n-tag type="info">
Size: {{ row.size }}
</n-tag>
<n-button v-if="showSaveS3" @click="saveToS3Proxy(row.filename, row.blob)" ghost type="info"
size="small">
{{ t('saveToS3') }}
</n-button>
</n-space>
</template>
</n-thing>
<template #suffix>
<n-button tag="a" target="_blank" tertiary type="info" size="small" :download="row.filename"
:href="row.url">
<n-icon :component="CloudDownloadRound" />
</n-button>
</template>
</n-list-item>
</n-list>
</n-spin>
</n-modal>
<n-modal v-model:show="showMultiActionDownload" preset="dialog" :title="t('downloadMail')">
<n-tag type="info">
{{ multiActionDownloadZip.filename }}

View File

@@ -0,0 +1,282 @@
<script setup>
import { ref } from "vue";
import { useI18n } from 'vue-i18n'
import { CloudDownloadRound, ReplyFilled, ForwardFilled, FullscreenRound } from '@vicons/material'
import ShadowHtmlComponent from "./ShadowHtmlComponent.vue";
import { getDownloadEmlUrl } from '../utils/email-parser';
import { utcToLocalDate } from '../utils';
import { useGlobalState } from '../store';
const { preferShowTextMail, useIframeShowMail, useUTCDate } = useGlobalState();
const { t } = useI18n({
messages: {
en: {
delete: 'Delete',
deleteMailTip: 'Are you sure you want to delete mail?',
attachments: 'View Attachments',
downloadMail: 'Download Mail',
reply: 'Reply',
forward: 'Forward',
showTextMail: 'Show Text Mail',
showHtmlMail: 'Show HTML Mail',
saveToS3: 'Save to S3',
size: 'Size',
fullscreen: 'Fullscreen',
},
zh: {
delete: '删除',
deleteMailTip: '确定要删除邮件吗?',
attachments: '查看附件',
downloadMail: '下载邮件',
reply: '回复',
forward: '转发',
showTextMail: '显示纯文本邮件',
showHtmlMail: '显示HTML邮件',
saveToS3: '保存到S3',
size: '大小',
fullscreen: '全屏',
}
}
});
const props = defineProps({
mail: {
type: Object,
required: true
},
showEMailTo: {
type: Boolean,
default: true
},
enableUserDeleteEmail: {
type: Boolean,
default: false
},
showReply: {
type: Boolean,
default: false
},
showSaveS3: {
type: Boolean,
default: false
},
// 回调函数 props
onDelete: {
type: Function,
default: () => { }
},
onReply: {
type: Function,
default: () => { }
},
onForward: {
type: Function,
default: () => { }
},
onSaveToS3: {
type: Function,
default: () => { }
}
});
const showTextMail = ref(preferShowTextMail.value);
const showAttachments = ref(false);
const curAttachments = ref([]);
const attachmentLoding = ref(false);
const showFullscreen = ref(false);
const handleDelete = () => {
props.onDelete();
};
const handleViewAttachments = () => {
curAttachments.value = props.mail.attachments;
showAttachments.value = true;
};
const handleReply = () => {
props.onReply();
};
const handleForward = () => {
props.onForward();
};
const handleSaveToS3 = async (filename, blob) => {
attachmentLoding.value = true;
try {
await props.onSaveToS3(filename, blob);
} finally {
attachmentLoding.value = false;
}
};
</script>
<template>
<div class="mail-content-renderer">
<!-- 邮件信息标签 -->
<n-space>
<n-tag type="info">
ID: {{ mail.id }}
</n-tag>
<n-tag type="info">
{{ utcToLocalDate(mail.created_at, useUTCDate.value) }}
</n-tag>
<n-tag type="info">
FROM: {{ mail.source }}
</n-tag>
<n-tag v-if="showEMailTo" type="info">
TO: {{ mail.address }}
</n-tag>
<!-- 操作按钮 -->
<n-popconfirm v-if="enableUserDeleteEmail" @positive-click="handleDelete">
<template #trigger>
<n-button tertiary type="error" size="small">{{ t('delete') }}</n-button>
</template>
{{ t('deleteMailTip') }}
</n-popconfirm>
<n-button v-if="mail.attachments && mail.attachments.length > 0" size="small" tertiary type="info"
@click="handleViewAttachments">
{{ t('attachments') }}
</n-button>
<n-button tag="a" target="_blank" tertiary type="info" size="small" :download="mail.id + '.eml'"
:href="getDownloadEmlUrl(mail.raw)">
<template #icon>
<n-icon :component="CloudDownloadRound" />
</template>
{{ t('downloadMail') }}
</n-button>
<n-button v-if="showReply" size="small" tertiary type="info" @click="handleReply">
<template #icon>
<n-icon :component="ReplyFilled" />
</template>
{{ t('reply') }}
</n-button>
<n-button v-if="showReply" size="small" tertiary type="info" @click="handleForward">
<template #icon>
<n-icon :component="ForwardFilled" />
</template>
{{ t('forward') }}
</n-button>
<n-button size="small" tertiary type="info" @click="showTextMail = !showTextMail">
{{ showTextMail ? t('showHtmlMail') : t('showTextMail') }}
</n-button>
<n-button size="small" tertiary type="info" @click="showFullscreen = true">
<template #icon>
<n-icon :component="FullscreenRound" />
</template>
{{ t('fullscreen') }}
</n-button>
</n-space>
<!-- 邮件内容 -->
<div class="mail-content">
<pre v-if="showTextMail" class="mail-text">{{ mail.text }}</pre>
<iframe v-else-if="useIframeShowMail" :srcdoc="mail.message" class="mail-iframe">
</iframe>
<ShadowHtmlComponent v-else :key="mail.id" :htmlContent="mail.message" class="mail-html" />
</div>
</div>
<n-drawer v-model:show="showFullscreen" width="100%" placement="bottom" :trap-focus="false" :block-scroll="false"
style="height: 100vh;">
<n-drawer-content :title="mail.subject" closable>
<div class="fullscreen-mail-content">
<pre v-if="showTextMail" class="mail-text">{{ mail.text }}</pre>
<iframe v-else-if="useIframeShowMail" :srcdoc="mail.message" class="mail-iframe">
</iframe>
<ShadowHtmlComponent v-else :key="mail.id" :htmlContent="mail.message" class="mail-html" />
</div>
</n-drawer-content>
</n-drawer>
<!-- 附件模态框 -->
<n-modal v-model:show="showAttachments" preset="dialog" title="Dialog">
<template #header>
<div>{{ t('attachments') }}</div>
</template>
<n-spin v-model:show="attachmentLoding">
<n-list hoverable clickable>
<n-list-item v-for="row in curAttachments" v-bind:key="row.id">
<n-thing class="center" :title="row.filename">
<template #description>
<n-space>
<n-tag type="info">
Size: {{ row.size }}
</n-tag>
<n-button v-if="showSaveS3" @click="handleSaveToS3(row.filename, row.blob)" ghost type="info"
size="small">
{{ t('saveToS3') }}
</n-button>
</n-space>
</template>
</n-thing>
<template #suffix>
<n-button tag="a" target="_blank" tertiary type="info" size="small" :download="row.filename"
:href="row.url">
<n-icon :component="CloudDownloadRound" />
</n-button>
</template>
</n-list-item>
</n-list>
</n-spin>
</n-modal>
</template>
<style scoped>
.mail-content-renderer {
display: flex;
flex-direction: column;
gap: 10px;
}
.mail-content {
margin-top: 10px;
flex: 1;
}
.mail-text {
white-space: pre-wrap;
word-wrap: break-word;
margin: 0;
padding: 0;
font-family: inherit;
font-size: inherit;
line-height: inherit;
}
.mail-iframe {
width: 100%;
height: 100%;
border: none;
min-height: 400px;
}
.mail-html {
width: 100%;
height: 100%;
}
.center {
text-align: center;
}
.fullscreen-mail-content {
height: calc(100vh - 120px);
overflow: auto;
}
.fullscreen-mail-content .mail-iframe {
min-height: calc(100vh - 120px);
}
</style>

View File

@@ -1,5 +1,5 @@
<script setup>
import { ref, onMounted, computed, watch } from 'vue'
import { ref, onMounted, computed, watch, onBeforeUnmount } from 'vue'
import { useI18n } from 'vue-i18n'
import { useMessage } from 'naive-ui'
import {
@@ -16,18 +16,18 @@ import { api } from '../../api'
import Login from '../common/Login.vue'
import AccountSettings from './AccountSettings.vue'
import { processItem } from '../../utils/email-parser'
import { utcToLocalDate } from '../../utils'
import ShadowHtmlComponent from '../../components/ShadowHtmlComponent.vue'
import MailContentRenderer from '../../components/MailContentRenderer.vue'
const { jwt, settings, useSimpleIndex, useUTCDate, showAddressCredential } = useGlobalState()
const { jwt, settings, useSimpleIndex, showAddressCredential, openSettings, loading } = useGlobalState()
const message = useMessage()
// 邮件数据
const currentPage = ref(1)
const totalCount = ref(0)
const loading = ref(false)
const currentMail = ref(null)
const showAccountSettingsCard = ref(false)
const currentAutoRefreshInterval = ref(60)
const timer = ref(null)
const { t } = useI18n({
messages: {
@@ -44,6 +44,8 @@ const { t } = useI18n({
accountSettings: "Account Settings",
addressCredential: 'Mail Address Credential',
addressCredentialTip: 'Please copy the Mail Address Credential and you can use it to login',
deleteSuccess: 'Mail deleted successfully',
refreshAfter: 'Refresh After {msg} Seconds',
},
zh: {
exitSimpleIndex: '退出极简',
@@ -57,7 +59,9 @@ const { t } = useI18n({
mailCount: '{current} / {total} 封邮件',
accountSettings: "账户设置",
addressCredential: '邮箱地址凭证',
addressCredentialTip: '请复制邮箱地址凭证,你可以使用它登录你的邮箱。'
addressCredentialTip: '请复制邮箱地址凭证,你可以使用它登录你的邮箱。',
deleteSuccess: '邮件删除成功',
refreshAfter: '{msg}秒后刷新',
}
}
})
@@ -86,9 +90,26 @@ const fetchMails = async () => {
}
}
// 删除邮件
const deleteMail = async () => {
if (!currentMail.value) return;
try {
await api.fetch(`/api/mails/${currentMail.value.id}`, { method: 'DELETE' });
message.success(t('deleteSuccess'));
currentMail.value = null;
await refreshMails();
} catch (error) {
console.error('Failed to delete mail:', error);
message.error('删除邮件失败');
}
}
// 刷新邮件
const refreshMails = async () => {
if (loading.value) return
currentPage.value = 1
showAccountSettingsCard.value = false
currentAutoRefreshInterval.value = 60
await fetchMails()
message.success(t('refreshSuccess'))
}
@@ -98,6 +119,7 @@ const currentPageDisplay = computed(() => currentPage.value)
const totalPages = computed(() => Math.max(1, totalCount.value))
const canGoPrev = computed(() => currentPage.value > 1)
const canGoNext = computed(() => currentPage.value < totalPages.value)
const isFirstPage = computed(() => currentPage.value === 1)
const prevPage = async () => {
if (canGoPrev.value) {
@@ -119,6 +141,22 @@ watch(currentPage, () => {
onMounted(async () => {
await api.getSettings()
await fetchMails()
// 启动自动刷新
timer.value = setInterval(async () => {
if (!isFirstPage.value) {
currentAutoRefreshInterval.value = 60
return
}
if (--currentAutoRefreshInterval.value <= 0) {
await refreshMails()
}
}, 1000)
})
onBeforeUnmount(() => {
clearInterval(timer.value)
})
</script>
@@ -169,6 +207,11 @@ onMounted(async () => {
{{ t('accountSettings') }}
</n-button>
</n-flex>
<div v-if="isFirstPage" style="text-align: center; margin-top: 12px;">
<n-text depth="3" size="12">
{{ t('refreshAfter', { msg: Math.max(0, currentAutoRefreshInterval) }) }}
</n-text>
</div>
</n-card>
<!-- 账户设置卡片 -->
@@ -177,7 +220,7 @@ onMounted(async () => {
<AccountSettings />
</n-card>
<n-card :bordered="false" embedded style="text-align: left;">
<n-card v-else :bordered="false" embedded style="text-align: left;">
<div v-if="totalCount > 1">
<n-flex justify="space-between">
@@ -208,22 +251,10 @@ onMounted(async () => {
</div>
<div v-else>
<h3 v-if="currentMail.subject">{{ currentMail.subject }}</h3>
<n-space>
<n-tag type="info">
ID: {{ currentMail.id }}
</n-tag>
<n-tag type="info">
{{ utcToLocalDate(currentMail.created_at, useUTCDate.value) }}
</n-tag>
<n-tag type="info">
FROM: {{ currentMail.source }}
</n-tag>
</n-space>
<div style="margin-top: 16px;">
<ShadowHtmlComponent v-if="currentMail.message" :htmlContent="currentMail.message" />
<pre v-else>{{ currentMail.text }}</pre>
<MailContentRenderer :mail="currentMail" :showEMailTo="false" :showReply="false"
:enableUserDeleteEmail="openSettings.enableUserDeleteEmail" :showSaveS3="false"
:onDelete="deleteMail" />
</div>
</div>
</n-card>

View File

@@ -1,6 +1,6 @@
{
"name": "temp-email-pages",
"version": "1.0.3",
"version": "1.0.4",
"description": "",
"main": "index.js",
"scripts": {
@@ -11,7 +11,7 @@
"author": "",
"license": "ISC",
"devDependencies": {
"wrangler": "^4.28.1"
"wrangler": "^4.32.0"
},
"packageManager": "pnpm@10.10.0+sha512.d615db246fe70f25dcfea6d8d73dee782ce23e2245e3c4f6f888249fb568149318637dca73c2c5c8ef2a4ca0d5657fb9567188bfab47f566d1ee6ce987815c39"
}

View File

@@ -1,12 +1,12 @@
{
"name": "temp-mail-docs",
"private": true,
"version": "1.0.3",
"version": "1.0.4",
"type": "module",
"devDependencies": {
"@types/node": "^24.2.0",
"@types/node": "^24.3.0",
"vitepress": "^1.6.4",
"wrangler": "^4.28.1"
"wrangler": "^4.32.0"
},
"scripts": {
"dev": "vitepress dev docs",

View File

@@ -13,14 +13,14 @@ importers:
version: 3.10.1
devDependencies:
'@types/node':
specifier: ^24.2.0
version: 24.2.0
specifier: ^24.3.0
version: 24.3.0
vitepress:
specifier: ^1.6.4
version: 1.6.4(@algolia/client-search@5.35.0)(@types/node@24.2.0)(postcss@8.5.6)(search-insights@2.13.0)(typescript@5.4.5)
version: 1.6.4(@algolia/client-search@5.35.0)(@types/node@24.3.0)(postcss@8.5.6)(search-insights@2.13.0)(typescript@5.4.5)
wrangler:
specifier: ^4.28.1
version: 4.28.1
specifier: ^4.32.0
version: 4.32.0
packages:
@@ -108,8 +108,8 @@ packages:
resolution: {integrity: sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==}
engines: {node: '>=6.9.0'}
'@babel/parser@7.28.0':
resolution: {integrity: sha512-jVZGvOxOuNSsuQuLRTh13nU0AogFlw32w/MT+LV6D3sP5WdbW61E77RnkbaO2dUvmPAYrBDJXGn5gGS6tH4j8g==}
'@babel/parser@7.28.3':
resolution: {integrity: sha512-7+Ey1mAgYqFAx2h0RuoxcQT5+MlG3GTV0TQrgr7/ZliKsm/MNDxVVutlWaziMq7wJNAz8MTqz55XLpWvva6StA==}
engines: {node: '>=6.0.0'}
hasBin: true
@@ -121,8 +121,8 @@ packages:
resolution: {integrity: sha512-+tv3z+SPp+gqTIcImN9o0hqE9xyfQjI1XD9pL6NuKjua9B1y7mNYv0S9cP+QEbA4ppVgGZEmKOvHX5G5Ei1CVA==}
engines: {node: '>=18.0.0'}
'@cloudflare/unenv-preset@2.6.0':
resolution: {integrity: sha512-h7Txw0WbDuUbrvZwky6+x7ft+U/Gppfn/rWx6IdR+e9gjygozRJnV26Y2TOr3yrIFa6OsZqqR2lN+jWTrakHXg==}
'@cloudflare/unenv-preset@2.6.2':
resolution: {integrity: sha512-C7/tW7Qy+wGOCmHXu7xpP1TF3uIhRoi7zVY7dmu/SOSGjPilK+lSQ2lIRILulZsT467ZJNlI0jBxMbd8LzkGRg==}
peerDependencies:
unenv: 2.0.0-rc.19
workerd: ^1.20250802.0
@@ -130,32 +130,32 @@ packages:
workerd:
optional: true
'@cloudflare/workerd-darwin-64@1.20250803.0':
resolution: {integrity: sha512-6QciMnJp1p3F1qUiN0LaLfmw7SuZA/gfUBOe8Ft81pw16JYZ3CyiqIKPJvc1SV8jgDx8r+gz/PRi1NwOMt329A==}
'@cloudflare/workerd-darwin-64@1.20250816.0':
resolution: {integrity: sha512-yN1Rga4ufTdrJPCP4gEqfB47i1lWi3teY5IoeQbUuKnjnCtm4pZvXur526JzCmaw60Jx+AEWf5tizdwRd5hHBQ==}
engines: {node: '>=16'}
cpu: [x64]
os: [darwin]
'@cloudflare/workerd-darwin-arm64@1.20250803.0':
resolution: {integrity: sha512-DoIgghDowtqoNhL6OoN/F92SKtrk7mRQKc4YSs/Dst8IwFZq+pCShOlWfB0MXqHKPSoiz5xLSrUKR9H6gQMPvw==}
'@cloudflare/workerd-darwin-arm64@1.20250816.0':
resolution: {integrity: sha512-WyKPMQhbU+TTf4uDz3SA7ZObspg7WzyJMv/7J4grSddpdx2A4Y4SfPu3wsZleAOIMOAEVi0A1sYDhdltKM7Mxg==}
engines: {node: '>=16'}
cpu: [arm64]
os: [darwin]
'@cloudflare/workerd-linux-64@1.20250803.0':
resolution: {integrity: sha512-mYdz4vNWX3+PoqRjssepVQqgh42IBiSrl+wb7vbh7VVWUVzBnQKtW3G+UFiBF62hohCLexGIEi7L0cFfRlcKSQ==}
'@cloudflare/workerd-linux-64@1.20250816.0':
resolution: {integrity: sha512-NWHOuFnVBaPRhLHw8kjPO9GJmc2P/CTYbnNlNm0EThyi57o/oDx0ldWLJqEHlrdEPOw7zEVGBqM/6M+V9agC6w==}
engines: {node: '>=16'}
cpu: [x64]
os: [linux]
'@cloudflare/workerd-linux-arm64@1.20250803.0':
resolution: {integrity: sha512-RmrtUYLRUg6djKU7Z6yebS6YGJVnaDVY6bbXca+2s26vw4ibJDOTPLuBHFQF62Grw3fAfsNbjQh5i14vG2mqUg==}
'@cloudflare/workerd-linux-arm64@1.20250816.0':
resolution: {integrity: sha512-FR+/yhaWs7FhfC3GKsM3+usQVrGEweJ9qyh7p+R6HNwnobgKr/h5ATWvJ4obGJF6ZHHodgSe+gOSYR7fkJ1xAQ==}
engines: {node: '>=16'}
cpu: [arm64]
os: [linux]
'@cloudflare/workerd-windows-64@1.20250803.0':
resolution: {integrity: sha512-uLV8gdudz36o9sUaAKbBxxTwZwLFz1KyW7QpBvOo4+r3Ib8yVKXGiySIMWGD7A0urSMrjf3e5LlLcJKgZUOjMA==}
'@cloudflare/workerd-windows-64@1.20250816.0':
resolution: {integrity: sha512-0lqClj2UMhFa8tCBiiX7Zhd5Bjp0V+X8oNBG6V6WsR9p9/HlIHAGgwRAM7aYkyG+8KC8xlbC89O2AXUXLpHx0g==}
engines: {node: '>=16'}
cpu: [x64]
os: [win32]
@@ -478,8 +478,8 @@ packages:
cpu: [x64]
os: [win32]
'@iconify-json/simple-icons@1.2.46':
resolution: {integrity: sha512-MJfKQDhOMQD5Fc8PcTtCdFX0oBf/nKVfp69ScdEKIXW0JXELX5V2Ld45EsjShi8aJ6DNhdDtSDZvKuDnkDiKnw==}
'@iconify-json/simple-icons@1.2.48':
resolution: {integrity: sha512-EACOtZMoPJtERiAbX1De0asrrCtlwI27+03c9OJlYWsly9w1O5vcD8rTzh+kDPjo+K8FOVnq2Qy+h/CzljSKDA==}
'@iconify/types@2.0.0':
resolution: {integrity: sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==}
@@ -593,8 +593,8 @@ packages:
resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==}
engines: {node: '>=6.0.0'}
'@jridgewell/sourcemap-codec@1.5.4':
resolution: {integrity: sha512-VT2+G1VQs/9oz078bLrYbecdZKs912zQlkelYpuf+SXF+QvZDYJlbx/LSx+meSAwdDFnF8FVXW92AVjjkVmgFw==}
'@jridgewell/sourcemap-codec@1.5.5':
resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==}
'@jridgewell/trace-mapping@0.3.9':
resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==}
@@ -608,103 +608,103 @@ packages:
'@poppinss/exception@1.2.2':
resolution: {integrity: sha512-m7bpKCD4QMlFCjA/nKTs23fuvoVFoA83brRKmObCUNmi/9tVu8Ve3w4YQAnJu4q3Tjf5fr685HYIC/IA2zHRSg==}
'@rollup/rollup-android-arm-eabi@4.46.2':
resolution: {integrity: sha512-Zj3Hl6sN34xJtMv7Anwb5Gu01yujyE/cLBDB2gnHTAHaWS1Z38L7kuSG+oAh0giZMqG060f/YBStXtMH6FvPMA==}
'@rollup/rollup-android-arm-eabi@4.47.1':
resolution: {integrity: sha512-lTahKRJip0knffA/GTNFJMrToD+CM+JJ+Qt5kjzBK/sFQ0EWqfKW3AYQSlZXN98tX0lx66083U9JYIMioMMK7g==}
cpu: [arm]
os: [android]
'@rollup/rollup-android-arm64@4.46.2':
resolution: {integrity: sha512-nTeCWY83kN64oQ5MGz3CgtPx8NSOhC5lWtsjTs+8JAJNLcP3QbLCtDDgUKQc/Ro/frpMq4SHUaHN6AMltcEoLQ==}
'@rollup/rollup-android-arm64@4.47.1':
resolution: {integrity: sha512-uqxkb3RJLzlBbh/bbNQ4r7YpSZnjgMgyoEOY7Fy6GCbelkDSAzeiogxMG9TfLsBbqmGsdDObo3mzGqa8hps4MA==}
cpu: [arm64]
os: [android]
'@rollup/rollup-darwin-arm64@4.46.2':
resolution: {integrity: sha512-HV7bW2Fb/F5KPdM/9bApunQh68YVDU8sO8BvcW9OngQVN3HHHkw99wFupuUJfGR9pYLLAjcAOA6iO+evsbBaPQ==}
'@rollup/rollup-darwin-arm64@4.47.1':
resolution: {integrity: sha512-tV6reObmxBDS4DDyLzTDIpymthNlxrLBGAoQx6m2a7eifSNEZdkXQl1PE4ZjCkEDPVgNXSzND/k9AQ3mC4IOEQ==}
cpu: [arm64]
os: [darwin]
'@rollup/rollup-darwin-x64@4.46.2':
resolution: {integrity: sha512-SSj8TlYV5nJixSsm/y3QXfhspSiLYP11zpfwp6G/YDXctf3Xkdnk4woJIF5VQe0of2OjzTt8EsxnJDCdHd2xMA==}
'@rollup/rollup-darwin-x64@4.47.1':
resolution: {integrity: sha512-XuJRPTnMk1lwsSnS3vYyVMu4x/+WIw1MMSiqj5C4j3QOWsMzbJEK90zG+SWV1h0B1ABGCQ0UZUjti+TQK35uHQ==}
cpu: [x64]
os: [darwin]
'@rollup/rollup-freebsd-arm64@4.46.2':
resolution: {integrity: sha512-ZyrsG4TIT9xnOlLsSSi9w/X29tCbK1yegE49RYm3tu3wF1L/B6LVMqnEWyDB26d9Ecx9zrmXCiPmIabVuLmNSg==}
'@rollup/rollup-freebsd-arm64@4.47.1':
resolution: {integrity: sha512-79BAm8Ag/tmJ5asCqgOXsb3WY28Rdd5Lxj8ONiQzWzy9LvWORd5qVuOnjlqiWWZJw+dWewEktZb5yiM1DLLaHw==}
cpu: [arm64]
os: [freebsd]
'@rollup/rollup-freebsd-x64@4.46.2':
resolution: {integrity: sha512-pCgHFoOECwVCJ5GFq8+gR8SBKnMO+xe5UEqbemxBpCKYQddRQMgomv1104RnLSg7nNvgKy05sLsY51+OVRyiVw==}
'@rollup/rollup-freebsd-x64@4.47.1':
resolution: {integrity: sha512-OQ2/ZDGzdOOlyfqBiip0ZX/jVFekzYrGtUsqAfLDbWy0jh1PUU18+jYp8UMpqhly5ltEqotc2miLngf9FPSWIA==}
cpu: [x64]
os: [freebsd]
'@rollup/rollup-linux-arm-gnueabihf@4.46.2':
resolution: {integrity: sha512-EtP8aquZ0xQg0ETFcxUbU71MZlHaw9MChwrQzatiE8U/bvi5uv/oChExXC4mWhjiqK7azGJBqU0tt5H123SzVA==}
'@rollup/rollup-linux-arm-gnueabihf@4.47.1':
resolution: {integrity: sha512-HZZBXJL1udxlCVvoVadstgiU26seKkHbbAMLg7680gAcMnRNP9SAwTMVet02ANA94kXEI2VhBnXs4e5nf7KG2A==}
cpu: [arm]
os: [linux]
'@rollup/rollup-linux-arm-musleabihf@4.46.2':
resolution: {integrity: sha512-qO7F7U3u1nfxYRPM8HqFtLd+raev2K137dsV08q/LRKRLEc7RsiDWihUnrINdsWQxPR9jqZ8DIIZ1zJJAm5PjQ==}
'@rollup/rollup-linux-arm-musleabihf@4.47.1':
resolution: {integrity: sha512-sZ5p2I9UA7T950JmuZ3pgdKA6+RTBr+0FpK427ExW0t7n+QwYOcmDTK/aRlzoBrWyTpJNlS3kacgSlSTUg6P/Q==}
cpu: [arm]
os: [linux]
'@rollup/rollup-linux-arm64-gnu@4.46.2':
resolution: {integrity: sha512-3dRaqLfcOXYsfvw5xMrxAk9Lb1f395gkoBYzSFcc/scgRFptRXL9DOaDpMiehf9CO8ZDRJW2z45b6fpU5nwjng==}
'@rollup/rollup-linux-arm64-gnu@4.47.1':
resolution: {integrity: sha512-3hBFoqPyU89Dyf1mQRXCdpc6qC6At3LV6jbbIOZd72jcx7xNk3aAp+EjzAtN6sDlmHFzsDJN5yeUySvorWeRXA==}
cpu: [arm64]
os: [linux]
'@rollup/rollup-linux-arm64-musl@4.46.2':
resolution: {integrity: sha512-fhHFTutA7SM+IrR6lIfiHskxmpmPTJUXpWIsBXpeEwNgZzZZSg/q4i6FU4J8qOGyJ0TR+wXBwx/L7Ho9z0+uDg==}
'@rollup/rollup-linux-arm64-musl@4.47.1':
resolution: {integrity: sha512-49J4FnMHfGodJWPw73Ve+/hsPjZgcXQGkmqBGZFvltzBKRS+cvMiWNLadOMXKGnYRhs1ToTGM0sItKISoSGUNA==}
cpu: [arm64]
os: [linux]
'@rollup/rollup-linux-loongarch64-gnu@4.46.2':
resolution: {integrity: sha512-i7wfGFXu8x4+FRqPymzjD+Hyav8l95UIZ773j7J7zRYc3Xsxy2wIn4x+llpunexXe6laaO72iEjeeGyUFmjKeA==}
'@rollup/rollup-linux-loongarch64-gnu@4.47.1':
resolution: {integrity: sha512-4yYU8p7AneEpQkRX03pbpLmE21z5JNys16F1BZBZg5fP9rIlb0TkeQjn5du5w4agConCCEoYIG57sNxjryHEGg==}
cpu: [loong64]
os: [linux]
'@rollup/rollup-linux-ppc64-gnu@4.46.2':
resolution: {integrity: sha512-B/l0dFcHVUnqcGZWKcWBSV2PF01YUt0Rvlurci5P+neqY/yMKchGU8ullZvIv5e8Y1C6wOn+U03mrDylP5q9Yw==}
'@rollup/rollup-linux-ppc64-gnu@4.47.1':
resolution: {integrity: sha512-fAiq+J28l2YMWgC39jz/zPi2jqc0y3GSRo1yyxlBHt6UN0yYgnegHSRPa3pnHS5amT/efXQrm0ug5+aNEu9UuQ==}
cpu: [ppc64]
os: [linux]
'@rollup/rollup-linux-riscv64-gnu@4.46.2':
resolution: {integrity: sha512-32k4ENb5ygtkMwPMucAb8MtV8olkPT03oiTxJbgkJa7lJ7dZMr0GCFJlyvy+K8iq7F/iuOr41ZdUHaOiqyR3iQ==}
'@rollup/rollup-linux-riscv64-gnu@4.47.1':
resolution: {integrity: sha512-daoT0PMENNdjVYYU9xec30Y2prb1AbEIbb64sqkcQcSaR0zYuKkoPuhIztfxuqN82KYCKKrj+tQe4Gi7OSm1ow==}
cpu: [riscv64]
os: [linux]
'@rollup/rollup-linux-riscv64-musl@4.46.2':
resolution: {integrity: sha512-t5B2loThlFEauloaQkZg9gxV05BYeITLvLkWOkRXogP4qHXLkWSbSHKM9S6H1schf/0YGP/qNKtiISlxvfmmZw==}
'@rollup/rollup-linux-riscv64-musl@4.47.1':
resolution: {integrity: sha512-JNyXaAhWtdzfXu5pUcHAuNwGQKevR+6z/poYQKVW+pLaYOj9G1meYc57/1Xv2u4uTxfu9qEWmNTjv/H/EpAisw==}
cpu: [riscv64]
os: [linux]
'@rollup/rollup-linux-s390x-gnu@4.46.2':
resolution: {integrity: sha512-YKjekwTEKgbB7n17gmODSmJVUIvj8CX7q5442/CK80L8nqOUbMtf8b01QkG3jOqyr1rotrAnW6B/qiHwfcuWQA==}
'@rollup/rollup-linux-s390x-gnu@4.47.1':
resolution: {integrity: sha512-U/CHbqKSwEQyZXjCpY43/GLYcTVKEXeRHw0rMBJP7fP3x6WpYG4LTJWR3ic6TeYKX6ZK7mrhltP4ppolyVhLVQ==}
cpu: [s390x]
os: [linux]
'@rollup/rollup-linux-x64-gnu@4.46.2':
resolution: {integrity: sha512-Jj5a9RUoe5ra+MEyERkDKLwTXVu6s3aACP51nkfnK9wJTraCC8IMe3snOfALkrjTYd2G1ViE1hICj0fZ7ALBPA==}
'@rollup/rollup-linux-x64-gnu@4.47.1':
resolution: {integrity: sha512-uTLEakjxOTElfeZIGWkC34u2auLHB1AYS6wBjPGI00bWdxdLcCzK5awjs25YXpqB9lS8S0vbO0t9ZcBeNibA7g==}
cpu: [x64]
os: [linux]
'@rollup/rollup-linux-x64-musl@4.46.2':
resolution: {integrity: sha512-7kX69DIrBeD7yNp4A5b81izs8BqoZkCIaxQaOpumcJ1S/kmqNFjPhDu1LHeVXv0SexfHQv5cqHsxLOjETuqDuA==}
'@rollup/rollup-linux-x64-musl@4.47.1':
resolution: {integrity: sha512-Ft+d/9DXs30BK7CHCTX11FtQGHUdpNDLJW0HHLign4lgMgBcPFN3NkdIXhC5r9iwsMwYreBBc4Rho5ieOmKNVQ==}
cpu: [x64]
os: [linux]
'@rollup/rollup-win32-arm64-msvc@4.46.2':
resolution: {integrity: sha512-wiJWMIpeaak/jsbaq2HMh/rzZxHVW1rU6coyeNNpMwk5isiPjSTx0a4YLSlYDwBH/WBvLz+EtsNqQScZTLJy3g==}
'@rollup/rollup-win32-arm64-msvc@4.47.1':
resolution: {integrity: sha512-N9X5WqGYzZnjGAFsKSfYFtAShYjwOmFJoWbLg3dYixZOZqU7hdMq+/xyS14zKLhFhZDhP9VfkzQnsdk0ZDS9IA==}
cpu: [arm64]
os: [win32]
'@rollup/rollup-win32-ia32-msvc@4.46.2':
resolution: {integrity: sha512-gBgaUDESVzMgWZhcyjfs9QFK16D8K6QZpwAaVNJxYDLHWayOta4ZMjGm/vsAEy3hvlS2GosVFlBlP9/Wb85DqQ==}
'@rollup/rollup-win32-ia32-msvc@4.47.1':
resolution: {integrity: sha512-O+KcfeCORZADEY8oQJk4HK8wtEOCRE4MdOkb8qGZQNun3jzmj2nmhV/B/ZaaZOkPmJyvm/gW9n0gsB4eRa1eiQ==}
cpu: [ia32]
os: [win32]
'@rollup/rollup-win32-x64-msvc@4.46.2':
resolution: {integrity: sha512-CvUo2ixeIQGtF6WvuB87XWqPQkoFAFqW+HUo/WzHwuHDvIwZCtjdWXoYCcr06iKGydiqTclC4jU/TNObC/xKZg==}
'@rollup/rollup-win32-x64-msvc@4.47.1':
resolution: {integrity: sha512-CpKnYa8eHthJa3c+C38v/E+/KZyF1Jdh2Cz3DyKZqEWYgrM1IHFArXNWvBLPQCKUEsAqqKX27tTqVEFbDNUcOA==}
cpu: [x64]
os: [win32]
@@ -757,8 +757,8 @@ packages:
'@types/mdurl@2.0.0':
resolution: {integrity: sha512-RGdgjQUZba5p6QEFAVx2OGb8rQDL/cPRG7GiedRzMcJ1tYnUANBncjbSB1NRGwbvjcPeikRABz2nshyPk1bhWg==}
'@types/node@24.2.0':
resolution: {integrity: sha512-3xyG3pMCq3oYCNg7/ZP+E1ooTaGB4cG8JWRsqqOYQdbWNY4zbaV0Ennrd7stjiJEFZCaybcIgpTjJWHRfBSIDw==}
'@types/node@24.3.0':
resolution: {integrity: sha512-aPTXCrfwnDLj4VvXrm+UUCQjNEvJgNA8s5F1cvwQU+3KNltTOkBm1j30uNLyqqPNe7gE3KFzImYoZEfLhp4Yow==}
'@types/unist@3.0.3':
resolution: {integrity: sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==}
@@ -776,17 +776,17 @@ packages:
vite: ^5.0.0 || ^6.0.0
vue: ^3.2.25
'@vue/compiler-core@3.5.18':
resolution: {integrity: sha512-3slwjQrrV1TO8MoXgy3aynDQ7lslj5UqDxuHnrzHtpON5CBinhWjJETciPngpin/T3OuW3tXUf86tEurusnztw==}
'@vue/compiler-core@3.5.19':
resolution: {integrity: sha512-/afpyvlkrSNYbPo94Qu8GtIOWS+g5TRdOvs6XZNw6pWQQmj5pBgSZvEPOIZlqWq0YvoUhDDQaQ2TnzuJdOV4hA==}
'@vue/compiler-dom@3.5.18':
resolution: {integrity: sha512-RMbU6NTU70++B1JyVJbNbeFkK+A+Q7y9XKE2EM4NLGm2WFR8x9MbAtWxPPLdm0wUkuZv9trpwfSlL6tjdIa1+A==}
'@vue/compiler-dom@3.5.19':
resolution: {integrity: sha512-Drs6rPHQZx/pN9S6ml3Z3K/TWCIRPvzG2B/o5kFK9X0MNHt8/E+38tiRfojufrYBfA6FQUFB2qBBRXlcSXWtOA==}
'@vue/compiler-sfc@3.5.18':
resolution: {integrity: sha512-5aBjvGqsWs+MoxswZPoTB9nSDb3dhd1x30xrrltKujlCxo48j8HGDNj3QPhF4VIS0VQDUrA1xUfp2hEa+FNyXA==}
'@vue/compiler-sfc@3.5.19':
resolution: {integrity: sha512-YWCm1CYaJ+2RvNmhCwI7t3I3nU+hOrWGWMsn+Z/kmm1jy5iinnVtlmkiZwbLlbV1SRizX7vHsc0/bG5dj0zRTg==}
'@vue/compiler-ssr@3.5.18':
resolution: {integrity: sha512-xM16Ak7rSWHkM3m22NlmcdIM+K4BMyFARAfV9hYFl+SFuRzrZ3uGMNW05kA5pmeMa0X9X963Kgou7ufdbpOP9g==}
'@vue/compiler-ssr@3.5.19':
resolution: {integrity: sha512-/wx0VZtkWOPdiQLWPeQeqpHWR/LuNC7bHfSX7OayBTtUy8wur6vT6EQIX6Et86aED6J+y8tTw43qo2uoqGg5sw==}
'@vue/devtools-api@7.7.7':
resolution: {integrity: sha512-lwOnNBH2e7x1fIIbVT7yF5D+YWhqELm55/4ZKf45R9T8r9dE2AIOy8HKjfqzGsoTHFbWbr337O4E0A0QADnjBg==}
@@ -797,22 +797,22 @@ packages:
'@vue/devtools-shared@7.7.7':
resolution: {integrity: sha512-+udSj47aRl5aKb0memBvcUG9koarqnxNM5yjuREvqwK6T3ap4mn3Zqqc17QrBFTqSMjr3HK1cvStEZpMDpfdyw==}
'@vue/reactivity@3.5.18':
resolution: {integrity: sha512-x0vPO5Imw+3sChLM5Y+B6G1zPjwdOri9e8V21NnTnlEvkxatHEH5B5KEAJcjuzQ7BsjGrKtfzuQ5eQwXh8HXBg==}
'@vue/reactivity@3.5.19':
resolution: {integrity: sha512-4bueZg2qs5MSsK2dQk3sssV0cfvxb/QZntTC8v7J448GLgmfPkQ+27aDjlt40+XFqOwUq5yRxK5uQh14Fc9eVA==}
'@vue/runtime-core@3.5.18':
resolution: {integrity: sha512-DUpHa1HpeOQEt6+3nheUfqVXRog2kivkXHUhoqJiKR33SO4x+a5uNOMkV487WPerQkL0vUuRvq/7JhRgLW3S+w==}
'@vue/runtime-core@3.5.19':
resolution: {integrity: sha512-TaooCr8Hge1sWjLSyhdubnuofs3shhzZGfyD11gFolZrny76drPwBVQj28/z/4+msSFb18tOIg6VVVgf9/IbIA==}
'@vue/runtime-dom@3.5.18':
resolution: {integrity: sha512-YwDj71iV05j4RnzZnZtGaXwPoUWeRsqinblgVJwR8XTXYZ9D5PbahHQgsbmzUvCWNF6x7siQ89HgnX5eWkr3mw==}
'@vue/runtime-dom@3.5.19':
resolution: {integrity: sha512-qmahqeok6ztuUTmV8lqd7N9ymbBzctNF885n8gL3xdCC1u2RnM/coX16Via0AiONQXUoYpxPojL3U1IsDgSWUQ==}
'@vue/server-renderer@3.5.18':
resolution: {integrity: sha512-PvIHLUoWgSbDG7zLHqSqaCoZvHi6NNmfVFOqO+OnwvqMz/tqQr3FuGWS8ufluNddk7ZLBJYMrjcw1c6XzR12mA==}
'@vue/server-renderer@3.5.19':
resolution: {integrity: sha512-ZJ/zV9SQuaIO+BEEVq/2a6fipyrSYfjKMU3267bPUk+oTx/hZq3RzV7VCh0Unlppt39Bvh6+NzxeopIFv4HJNg==}
peerDependencies:
vue: 3.5.18
vue: 3.5.19
'@vue/shared@3.5.18':
resolution: {integrity: sha512-cZy8Dq+uuIXbxCZpuLd2GJdeSO/lIzIspC2WtkqIpje5QyFbvLaI5wZtdUjLHjGZrlVX6GilejatWwVYYRc8tA==}
'@vue/shared@3.5.19':
resolution: {integrity: sha512-IhXCOn08wgKrLQxRFKKlSacWg4Goi1BolrdEeLYn6tgHjJNXVrWJ5nzoxZqNwl5p88aLlQ8LOaoMa3AYvaKJ/Q==}
'@vueuse/core@12.8.2':
resolution: {integrity: sha512-HbvCmZdzAu3VGi/pWYm5Ut+Kd9mn1ZHnn4L5G8kOQTPs/IwIAmJoBrmYk2ckLArgMXZj0AW3n5CAejLUO+PhdQ==}
@@ -1016,8 +1016,8 @@ packages:
lie@3.3.0:
resolution: {integrity: sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==}
magic-string@0.30.17:
resolution: {integrity: sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==}
magic-string@0.30.18:
resolution: {integrity: sha512-yi8swmWbO17qHhwIBNeeZxTceJMeBvWJaId6dyvTSOwTipqeHhMhOrz6513r1sOKnpvQ7zkhlG8tPrpilwTxHQ==}
mark.js@8.11.1:
resolution: {integrity: sha512-1I+1qpDt4idfgLQG+BNWmrqku+7/2bi5nLf4YwF8y8zXvmfiTBY3PV3ZibfrjBueCByROpuBjLLFCajqkgYoLQ==}
@@ -1045,8 +1045,8 @@ packages:
engines: {node: '>=10.0.0'}
hasBin: true
miniflare@4.20250803.0:
resolution: {integrity: sha512-1tmCLfmMw0SqRBF9PPII9CVLQRzOrO7uIBmSng8BMSmtgs2kos7OeoM0sg6KbR9FrvP/zAniLyZuCAMAjuu4fQ==}
miniflare@4.20250816.1:
resolution: {integrity: sha512-2X8yMy5wWw0dF1pNU4kztzZgp0jWv2KMqAOOb2FeQ/b11yck4aczmYHi7UYD3uyOgtj8WFhwG/KdRWAaATTtRA==}
engines: {node: '>=18.0.0'}
hasBin: true
@@ -1086,8 +1086,8 @@ packages:
resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==}
engines: {node: ^10 || ^12 || >=14}
preact@10.27.0:
resolution: {integrity: sha512-/DTYoB6mwwgPytiqQTh/7SFRL98ZdiD8Sk8zIUVOxtwq4oWcwrcd1uno9fE/zZmUaUrFNYzbH14CPebOz9tZQw==}
preact@10.27.1:
resolution: {integrity: sha512-V79raXEWch/rbqoNc7nT9E4ep7lu+mI3+sBmfRD4i1M73R3WLYcCtdI0ibxGVf4eQL8ZIz2nFacqEC+rmnOORQ==}
process-nextick-args@2.0.1:
resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==}
@@ -1110,8 +1110,8 @@ packages:
rfdc@1.4.1:
resolution: {integrity: sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==}
rollup@4.46.2:
resolution: {integrity: sha512-WMmLFI+Boh6xbop+OAGo9cQ3OgX9MIg7xOQjn+pTCwOkk+FNDAeAemXkJ3HzDJrVXleLOFVa1ipuc1AmEx1Dwg==}
rollup@4.47.1:
resolution: {integrity: sha512-iasGAQoZ5dWDzULEUX3jiW0oB1qyFOepSyDyoU6S/OhVlDIwj5knI5QBa5RRQ0sK7OE0v+8VIi2JuV+G+3tfNg==}
engines: {node: '>=18.0.0', npm: '>=8.0.0'}
hasBin: true
@@ -1164,8 +1164,8 @@ packages:
resolution: {integrity: sha512-5JRxVqC8I8NuOUjzBbvVJAKNM8qoVuH0O77h4WInc/qC2q5IreqKxYwgkga3PfA22OayK2ikceb/B26dztPl+Q==}
engines: {node: '>=16'}
supports-color@10.1.0:
resolution: {integrity: sha512-GBuewsPrhJPftT+fqDa9oI/zc5HNsG9nREqwzoSFDOIqf0NggOZbHQj2TE1P1CDJK8ZogFnlZY9hWoUiur7I/A==}
supports-color@10.2.0:
resolution: {integrity: sha512-5eG9FQjEjDbAlI5+kdpdyPIBMRH4GfTVDGREVupaZHmVoppknhM29b/S9BkQz7cathp85BVgRi/As3Siln7e0Q==}
engines: {node: '>=18'}
tabbable@6.2.0:
@@ -1188,8 +1188,8 @@ packages:
undici-types@7.10.0:
resolution: {integrity: sha512-t5Fy/nfn+14LuOc2KNYg75vZqClpAiqscVvMygNnlsHBFpSXdJaYtXMcdNLpl/Qvc3P2cB3s6lOV51nqsFq4ag==}
undici@7.13.0:
resolution: {integrity: sha512-l+zSMssRqrzDcb3fjMkjjLGmuiiK2pMIcV++mJaAc9vhjSGpvM7h43QgP+OAMb1GImHmbPyG2tBXeuyG5iY4gA==}
undici@7.14.0:
resolution: {integrity: sha512-Vqs8HTzjpQXZeXdpsfChQTlafcMQaaIwnGwLam1wudSSjlJeQ3bw1j+TLPePgrCnCpUXx7Ba5Pdpf5OBih62NQ==}
engines: {node: '>=20.18.1'}
unenv@2.0.0-rc.19:
@@ -1262,25 +1262,25 @@ packages:
postcss:
optional: true
vue@3.5.18:
resolution: {integrity: sha512-7W4Y4ZbMiQ3SEo+m9lnoNpV9xG7QVMLa+/0RFwwiAVkeYoyGXqWE85jabU4pllJNUzqfLShJ5YLptewhCWUgNA==}
vue@3.5.19:
resolution: {integrity: sha512-ZRh0HTmw6KChRYWgN8Ox/wi7VhpuGlvMPrHjIsdRbzKNgECFLzy+dKL5z9yGaBSjCpmcfJCbh3I1tNSRmBz2tg==}
peerDependencies:
typescript: '*'
peerDependenciesMeta:
typescript:
optional: true
workerd@1.20250803.0:
resolution: {integrity: sha512-oYH29mE/wNolPc32NHHQbySaNorj6+KASUtOvQHySxB5mO1NWdGuNv49woxNCF5971UYceGQndY+OLT+24C3wQ==}
workerd@1.20250816.0:
resolution: {integrity: sha512-5gIvHPE/3QVlQR1Sc1NdBkWmqWj/TSgIbY/f/qs9lhiLBw/Da+HbNBTVYGjvwYqEb3NQ+XQM4gAm5b2+JJaUJg==}
engines: {node: '>=16'}
hasBin: true
wrangler@4.28.1:
resolution: {integrity: sha512-B1w6XS3o1q1Icyx1CyirY5GNyYhucd63Jqml/EYSbB5dgv0VT8ir7L8IkCdbICEa4yYTETIgvTTZqffM6tBulA==}
wrangler@4.32.0:
resolution: {integrity: sha512-q7TRSavBW3Eg3pp4rxqKJwSK+u/ieFOBdNvUsq1P1EMmyj3//tN/iXDokFak+dkW0vDYjsVG3PfOfHxU92OS6w==}
engines: {node: '>=18.0.0'}
hasBin: true
peerDependencies:
'@cloudflare/workers-types': ^4.20250803.0
'@cloudflare/workers-types': ^4.20250816.0
peerDependenciesMeta:
'@cloudflare/workers-types':
optional: true
@@ -1427,7 +1427,7 @@ snapshots:
'@babel/helper-validator-identifier@7.27.1': {}
'@babel/parser@7.28.0':
'@babel/parser@7.28.3':
dependencies:
'@babel/types': 7.28.2
@@ -1440,25 +1440,25 @@ snapshots:
dependencies:
mime: 3.0.0
'@cloudflare/unenv-preset@2.6.0(unenv@2.0.0-rc.19)(workerd@1.20250803.0)':
'@cloudflare/unenv-preset@2.6.2(unenv@2.0.0-rc.19)(workerd@1.20250816.0)':
dependencies:
unenv: 2.0.0-rc.19
optionalDependencies:
workerd: 1.20250803.0
workerd: 1.20250816.0
'@cloudflare/workerd-darwin-64@1.20250803.0':
'@cloudflare/workerd-darwin-64@1.20250816.0':
optional: true
'@cloudflare/workerd-darwin-arm64@1.20250803.0':
'@cloudflare/workerd-darwin-arm64@1.20250816.0':
optional: true
'@cloudflare/workerd-linux-64@1.20250803.0':
'@cloudflare/workerd-linux-64@1.20250816.0':
optional: true
'@cloudflare/workerd-linux-arm64@1.20250803.0':
'@cloudflare/workerd-linux-arm64@1.20250816.0':
optional: true
'@cloudflare/workerd-windows-64@1.20250803.0':
'@cloudflare/workerd-windows-64@1.20250816.0':
optional: true
'@cspotcode/source-map-support@0.8.1':
@@ -1470,7 +1470,7 @@ snapshots:
'@docsearch/js@3.8.2(@algolia/client-search@5.35.0)(search-insights@2.13.0)':
dependencies:
'@docsearch/react': 3.8.2(@algolia/client-search@5.35.0)(search-insights@2.13.0)
preact: 10.27.0
preact: 10.27.1
transitivePeerDependencies:
- '@algolia/client-search'
- '@types/react'
@@ -1638,7 +1638,7 @@ snapshots:
'@esbuild/win32-x64@0.25.4':
optional: true
'@iconify-json/simple-icons@1.2.46':
'@iconify-json/simple-icons@1.2.48':
dependencies:
'@iconify/types': 2.0.0
@@ -1721,12 +1721,12 @@ snapshots:
'@jridgewell/resolve-uri@3.1.2': {}
'@jridgewell/sourcemap-codec@1.5.4': {}
'@jridgewell/sourcemap-codec@1.5.5': {}
'@jridgewell/trace-mapping@0.3.9':
dependencies:
'@jridgewell/resolve-uri': 3.1.2
'@jridgewell/sourcemap-codec': 1.5.4
'@jridgewell/sourcemap-codec': 1.5.5
'@poppinss/colors@4.1.5':
dependencies:
@@ -1736,68 +1736,68 @@ snapshots:
dependencies:
'@poppinss/colors': 4.1.5
'@sindresorhus/is': 7.0.2
supports-color: 10.1.0
supports-color: 10.2.0
'@poppinss/exception@1.2.2': {}
'@rollup/rollup-android-arm-eabi@4.46.2':
'@rollup/rollup-android-arm-eabi@4.47.1':
optional: true
'@rollup/rollup-android-arm64@4.46.2':
'@rollup/rollup-android-arm64@4.47.1':
optional: true
'@rollup/rollup-darwin-arm64@4.46.2':
'@rollup/rollup-darwin-arm64@4.47.1':
optional: true
'@rollup/rollup-darwin-x64@4.46.2':
'@rollup/rollup-darwin-x64@4.47.1':
optional: true
'@rollup/rollup-freebsd-arm64@4.46.2':
'@rollup/rollup-freebsd-arm64@4.47.1':
optional: true
'@rollup/rollup-freebsd-x64@4.46.2':
'@rollup/rollup-freebsd-x64@4.47.1':
optional: true
'@rollup/rollup-linux-arm-gnueabihf@4.46.2':
'@rollup/rollup-linux-arm-gnueabihf@4.47.1':
optional: true
'@rollup/rollup-linux-arm-musleabihf@4.46.2':
'@rollup/rollup-linux-arm-musleabihf@4.47.1':
optional: true
'@rollup/rollup-linux-arm64-gnu@4.46.2':
'@rollup/rollup-linux-arm64-gnu@4.47.1':
optional: true
'@rollup/rollup-linux-arm64-musl@4.46.2':
'@rollup/rollup-linux-arm64-musl@4.47.1':
optional: true
'@rollup/rollup-linux-loongarch64-gnu@4.46.2':
'@rollup/rollup-linux-loongarch64-gnu@4.47.1':
optional: true
'@rollup/rollup-linux-ppc64-gnu@4.46.2':
'@rollup/rollup-linux-ppc64-gnu@4.47.1':
optional: true
'@rollup/rollup-linux-riscv64-gnu@4.46.2':
'@rollup/rollup-linux-riscv64-gnu@4.47.1':
optional: true
'@rollup/rollup-linux-riscv64-musl@4.46.2':
'@rollup/rollup-linux-riscv64-musl@4.47.1':
optional: true
'@rollup/rollup-linux-s390x-gnu@4.46.2':
'@rollup/rollup-linux-s390x-gnu@4.47.1':
optional: true
'@rollup/rollup-linux-x64-gnu@4.46.2':
'@rollup/rollup-linux-x64-gnu@4.47.1':
optional: true
'@rollup/rollup-linux-x64-musl@4.46.2':
'@rollup/rollup-linux-x64-musl@4.47.1':
optional: true
'@rollup/rollup-win32-arm64-msvc@4.46.2':
'@rollup/rollup-win32-arm64-msvc@4.47.1':
optional: true
'@rollup/rollup-win32-ia32-msvc@4.46.2':
'@rollup/rollup-win32-ia32-msvc@4.47.1':
optional: true
'@rollup/rollup-win32-x64-msvc@4.46.2':
'@rollup/rollup-win32-x64-msvc@4.47.1':
optional: true
'@shikijs/core@2.5.0':
@@ -1863,7 +1863,7 @@ snapshots:
'@types/mdurl@2.0.0': {}
'@types/node@24.2.0':
'@types/node@24.3.0':
dependencies:
undici-types: 7.10.0
@@ -1873,40 +1873,40 @@ snapshots:
'@ungap/structured-clone@1.3.0': {}
'@vitejs/plugin-vue@5.2.4(vite@5.4.19(@types/node@24.2.0))(vue@3.5.18(typescript@5.4.5))':
'@vitejs/plugin-vue@5.2.4(vite@5.4.19(@types/node@24.3.0))(vue@3.5.19(typescript@5.4.5))':
dependencies:
vite: 5.4.19(@types/node@24.2.0)
vue: 3.5.18(typescript@5.4.5)
vite: 5.4.19(@types/node@24.3.0)
vue: 3.5.19(typescript@5.4.5)
'@vue/compiler-core@3.5.18':
'@vue/compiler-core@3.5.19':
dependencies:
'@babel/parser': 7.28.0
'@vue/shared': 3.5.18
'@babel/parser': 7.28.3
'@vue/shared': 3.5.19
entities: 4.5.0
estree-walker: 2.0.2
source-map-js: 1.2.1
'@vue/compiler-dom@3.5.18':
'@vue/compiler-dom@3.5.19':
dependencies:
'@vue/compiler-core': 3.5.18
'@vue/shared': 3.5.18
'@vue/compiler-core': 3.5.19
'@vue/shared': 3.5.19
'@vue/compiler-sfc@3.5.18':
'@vue/compiler-sfc@3.5.19':
dependencies:
'@babel/parser': 7.28.0
'@vue/compiler-core': 3.5.18
'@vue/compiler-dom': 3.5.18
'@vue/compiler-ssr': 3.5.18
'@vue/shared': 3.5.18
'@babel/parser': 7.28.3
'@vue/compiler-core': 3.5.19
'@vue/compiler-dom': 3.5.19
'@vue/compiler-ssr': 3.5.19
'@vue/shared': 3.5.19
estree-walker: 2.0.2
magic-string: 0.30.17
magic-string: 0.30.18
postcss: 8.5.6
source-map-js: 1.2.1
'@vue/compiler-ssr@3.5.18':
'@vue/compiler-ssr@3.5.19':
dependencies:
'@vue/compiler-dom': 3.5.18
'@vue/shared': 3.5.18
'@vue/compiler-dom': 3.5.19
'@vue/shared': 3.5.19
'@vue/devtools-api@7.7.7':
dependencies:
@@ -1926,36 +1926,36 @@ snapshots:
dependencies:
rfdc: 1.4.1
'@vue/reactivity@3.5.18':
'@vue/reactivity@3.5.19':
dependencies:
'@vue/shared': 3.5.18
'@vue/shared': 3.5.19
'@vue/runtime-core@3.5.18':
'@vue/runtime-core@3.5.19':
dependencies:
'@vue/reactivity': 3.5.18
'@vue/shared': 3.5.18
'@vue/reactivity': 3.5.19
'@vue/shared': 3.5.19
'@vue/runtime-dom@3.5.18':
'@vue/runtime-dom@3.5.19':
dependencies:
'@vue/reactivity': 3.5.18
'@vue/runtime-core': 3.5.18
'@vue/shared': 3.5.18
'@vue/reactivity': 3.5.19
'@vue/runtime-core': 3.5.19
'@vue/shared': 3.5.19
csstype: 3.1.3
'@vue/server-renderer@3.5.18(vue@3.5.18(typescript@5.4.5))':
'@vue/server-renderer@3.5.19(vue@3.5.19(typescript@5.4.5))':
dependencies:
'@vue/compiler-ssr': 3.5.18
'@vue/shared': 3.5.18
vue: 3.5.18(typescript@5.4.5)
'@vue/compiler-ssr': 3.5.19
'@vue/shared': 3.5.19
vue: 3.5.19(typescript@5.4.5)
'@vue/shared@3.5.18': {}
'@vue/shared@3.5.19': {}
'@vueuse/core@12.8.2(typescript@5.4.5)':
dependencies:
'@types/web-bluetooth': 0.0.21
'@vueuse/metadata': 12.8.2
'@vueuse/shared': 12.8.2(typescript@5.4.5)
vue: 3.5.18(typescript@5.4.5)
vue: 3.5.19(typescript@5.4.5)
transitivePeerDependencies:
- typescript
@@ -1963,7 +1963,7 @@ snapshots:
dependencies:
'@vueuse/core': 12.8.2(typescript@5.4.5)
'@vueuse/shared': 12.8.2(typescript@5.4.5)
vue: 3.5.18(typescript@5.4.5)
vue: 3.5.19(typescript@5.4.5)
optionalDependencies:
focus-trap: 7.6.5
transitivePeerDependencies:
@@ -1973,7 +1973,7 @@ snapshots:
'@vueuse/shared@12.8.2(typescript@5.4.5)':
dependencies:
vue: 3.5.18(typescript@5.4.5)
vue: 3.5.19(typescript@5.4.5)
transitivePeerDependencies:
- typescript
@@ -2166,9 +2166,9 @@ snapshots:
dependencies:
immediate: 3.0.6
magic-string@0.30.17:
magic-string@0.30.18:
dependencies:
'@jridgewell/sourcemap-codec': 1.5.4
'@jridgewell/sourcemap-codec': 1.5.5
mark.js@8.11.1: {}
@@ -2203,7 +2203,7 @@ snapshots:
mime@3.0.0: {}
miniflare@4.20250803.0:
miniflare@4.20250816.1:
dependencies:
'@cspotcode/source-map-support': 0.8.1
acorn: 8.14.0
@@ -2212,8 +2212,8 @@ snapshots:
glob-to-regexp: 0.4.1
sharp: 0.33.5
stoppable: 1.1.0
undici: 7.13.0
workerd: 1.20250803.0
undici: 7.14.0
workerd: 1.20250816.0
ws: 8.18.0
youch: 4.1.0-beta.10
zod: 3.22.3
@@ -2251,7 +2251,7 @@ snapshots:
picocolors: 1.1.1
source-map-js: 1.2.1
preact@10.27.0: {}
preact@10.27.1: {}
process-nextick-args@2.0.1: {}
@@ -2279,30 +2279,30 @@ snapshots:
rfdc@1.4.1: {}
rollup@4.46.2:
rollup@4.47.1:
dependencies:
'@types/estree': 1.0.8
optionalDependencies:
'@rollup/rollup-android-arm-eabi': 4.46.2
'@rollup/rollup-android-arm64': 4.46.2
'@rollup/rollup-darwin-arm64': 4.46.2
'@rollup/rollup-darwin-x64': 4.46.2
'@rollup/rollup-freebsd-arm64': 4.46.2
'@rollup/rollup-freebsd-x64': 4.46.2
'@rollup/rollup-linux-arm-gnueabihf': 4.46.2
'@rollup/rollup-linux-arm-musleabihf': 4.46.2
'@rollup/rollup-linux-arm64-gnu': 4.46.2
'@rollup/rollup-linux-arm64-musl': 4.46.2
'@rollup/rollup-linux-loongarch64-gnu': 4.46.2
'@rollup/rollup-linux-ppc64-gnu': 4.46.2
'@rollup/rollup-linux-riscv64-gnu': 4.46.2
'@rollup/rollup-linux-riscv64-musl': 4.46.2
'@rollup/rollup-linux-s390x-gnu': 4.46.2
'@rollup/rollup-linux-x64-gnu': 4.46.2
'@rollup/rollup-linux-x64-musl': 4.46.2
'@rollup/rollup-win32-arm64-msvc': 4.46.2
'@rollup/rollup-win32-ia32-msvc': 4.46.2
'@rollup/rollup-win32-x64-msvc': 4.46.2
'@rollup/rollup-android-arm-eabi': 4.47.1
'@rollup/rollup-android-arm64': 4.47.1
'@rollup/rollup-darwin-arm64': 4.47.1
'@rollup/rollup-darwin-x64': 4.47.1
'@rollup/rollup-freebsd-arm64': 4.47.1
'@rollup/rollup-freebsd-x64': 4.47.1
'@rollup/rollup-linux-arm-gnueabihf': 4.47.1
'@rollup/rollup-linux-arm-musleabihf': 4.47.1
'@rollup/rollup-linux-arm64-gnu': 4.47.1
'@rollup/rollup-linux-arm64-musl': 4.47.1
'@rollup/rollup-linux-loongarch64-gnu': 4.47.1
'@rollup/rollup-linux-ppc64-gnu': 4.47.1
'@rollup/rollup-linux-riscv64-gnu': 4.47.1
'@rollup/rollup-linux-riscv64-musl': 4.47.1
'@rollup/rollup-linux-s390x-gnu': 4.47.1
'@rollup/rollup-linux-x64-gnu': 4.47.1
'@rollup/rollup-linux-x64-musl': 4.47.1
'@rollup/rollup-win32-arm64-msvc': 4.47.1
'@rollup/rollup-win32-ia32-msvc': 4.47.1
'@rollup/rollup-win32-x64-msvc': 4.47.1
fsevents: 2.3.3
safe-buffer@5.1.2: {}
@@ -2375,7 +2375,7 @@ snapshots:
dependencies:
copy-anything: 3.0.5
supports-color@10.1.0: {}
supports-color@10.2.0: {}
tabbable@6.2.0: {}
@@ -2391,7 +2391,7 @@ snapshots:
undici-types@7.10.0: {}
undici@7.13.0: {}
undici@7.14.0: {}
unenv@2.0.0-rc.19:
dependencies:
@@ -2436,35 +2436,35 @@ snapshots:
'@types/unist': 3.0.3
vfile-message: 4.0.3
vite@5.4.19(@types/node@24.2.0):
vite@5.4.19(@types/node@24.3.0):
dependencies:
esbuild: 0.21.5
postcss: 8.5.6
rollup: 4.46.2
rollup: 4.47.1
optionalDependencies:
'@types/node': 24.2.0
'@types/node': 24.3.0
fsevents: 2.3.3
vitepress@1.6.4(@algolia/client-search@5.35.0)(@types/node@24.2.0)(postcss@8.5.6)(search-insights@2.13.0)(typescript@5.4.5):
vitepress@1.6.4(@algolia/client-search@5.35.0)(@types/node@24.3.0)(postcss@8.5.6)(search-insights@2.13.0)(typescript@5.4.5):
dependencies:
'@docsearch/css': 3.8.2
'@docsearch/js': 3.8.2(@algolia/client-search@5.35.0)(search-insights@2.13.0)
'@iconify-json/simple-icons': 1.2.46
'@iconify-json/simple-icons': 1.2.48
'@shikijs/core': 2.5.0
'@shikijs/transformers': 2.5.0
'@shikijs/types': 2.5.0
'@types/markdown-it': 14.1.2
'@vitejs/plugin-vue': 5.2.4(vite@5.4.19(@types/node@24.2.0))(vue@3.5.18(typescript@5.4.5))
'@vitejs/plugin-vue': 5.2.4(vite@5.4.19(@types/node@24.3.0))(vue@3.5.19(typescript@5.4.5))
'@vue/devtools-api': 7.7.7
'@vue/shared': 3.5.18
'@vue/shared': 3.5.19
'@vueuse/core': 12.8.2(typescript@5.4.5)
'@vueuse/integrations': 12.8.2(focus-trap@7.6.5)(typescript@5.4.5)
focus-trap: 7.6.5
mark.js: 8.11.1
minisearch: 7.1.2
shiki: 2.5.0
vite: 5.4.19(@types/node@24.2.0)
vue: 3.5.18(typescript@5.4.5)
vite: 5.4.19(@types/node@24.3.0)
vue: 3.5.19(typescript@5.4.5)
optionalDependencies:
postcss: 8.5.6
transitivePeerDependencies:
@@ -2494,34 +2494,34 @@ snapshots:
- typescript
- universal-cookie
vue@3.5.18(typescript@5.4.5):
vue@3.5.19(typescript@5.4.5):
dependencies:
'@vue/compiler-dom': 3.5.18
'@vue/compiler-sfc': 3.5.18
'@vue/runtime-dom': 3.5.18
'@vue/server-renderer': 3.5.18(vue@3.5.18(typescript@5.4.5))
'@vue/shared': 3.5.18
'@vue/compiler-dom': 3.5.19
'@vue/compiler-sfc': 3.5.19
'@vue/runtime-dom': 3.5.19
'@vue/server-renderer': 3.5.19(vue@3.5.19(typescript@5.4.5))
'@vue/shared': 3.5.19
optionalDependencies:
typescript: 5.4.5
workerd@1.20250803.0:
workerd@1.20250816.0:
optionalDependencies:
'@cloudflare/workerd-darwin-64': 1.20250803.0
'@cloudflare/workerd-darwin-arm64': 1.20250803.0
'@cloudflare/workerd-linux-64': 1.20250803.0
'@cloudflare/workerd-linux-arm64': 1.20250803.0
'@cloudflare/workerd-windows-64': 1.20250803.0
'@cloudflare/workerd-darwin-64': 1.20250816.0
'@cloudflare/workerd-darwin-arm64': 1.20250816.0
'@cloudflare/workerd-linux-64': 1.20250816.0
'@cloudflare/workerd-linux-arm64': 1.20250816.0
'@cloudflare/workerd-windows-64': 1.20250816.0
wrangler@4.28.1:
wrangler@4.32.0:
dependencies:
'@cloudflare/kv-asset-handler': 0.4.0
'@cloudflare/unenv-preset': 2.6.0(unenv@2.0.0-rc.19)(workerd@1.20250803.0)
'@cloudflare/unenv-preset': 2.6.2(unenv@2.0.0-rc.19)(workerd@1.20250816.0)
blake3-wasm: 2.1.5
esbuild: 0.25.4
miniflare: 4.20250803.0
miniflare: 4.20250816.1
path-to-regexp: 6.3.0
unenv: 2.0.0-rc.19
workerd: 1.20250803.0
workerd: 1.20250816.0
optionalDependencies:
fsevents: 2.3.3
transitivePeerDependencies:

View File

@@ -1,6 +1,6 @@
{
"name": "cloudflare_temp_email",
"version": "1.0.3",
"version": "1.0.4",
"private": true,
"type": "module",
"scripts": {
@@ -11,20 +11,20 @@
"build": "wrangler deploy --dry-run --outdir dist --minify"
},
"devDependencies": {
"@cloudflare/workers-types": "^4.20250807.0",
"@cloudflare/workers-types": "^4.20250822.0",
"@eslint/js": "9.18.0",
"@simplewebauthn/types": "10.0.0",
"@types/node": "^22.17.0",
"@types/node": "^22.17.2",
"eslint": "9.18.0",
"globals": "^15.15.0",
"typescript-eslint": "^8.39.0",
"wrangler": "^4.28.1"
"typescript-eslint": "^8.40.0",
"wrangler": "^4.32.0"
},
"dependencies": {
"@aws-sdk/client-s3": "^3.863.0",
"@aws-sdk/s3-request-presigner": "^3.863.0",
"@aws-sdk/client-s3": "^3.873.0",
"@aws-sdk/s3-request-presigner": "^3.873.0",
"@simplewebauthn/server": "10.0.1",
"hono": "^4.9.0",
"hono": "^4.9.4",
"jsonpath-plus": "^10.3.0",
"mimetext": "^3.0.27",
"postal-mime": "^2.4.4",

650
worker/pnpm-lock.yaml generated

File diff suppressed because it is too large Load Diff

View File

@@ -1,5 +1,5 @@
export const CONSTANTS = {
VERSION: 'v' + '1.0.3',
VERSION: 'v' + '1.0.4',
// DB Version
DB_VERSION_KEY: 'db_version',