From 4162281b4a7a5007bd89013fec529b4de202b2e0 Mon Sep 17 00:00:00 2001 From: dethan3 Date: Sun, 16 Nov 2025 18:09:53 +0800 Subject: [PATCH 1/6] feat: Add finance MVP with AkShare data service and landing page --- components/Finance/FundCard.tsx | 171 +++++++ constants/finance.ts | 13 + finance_PRD.md | 174 +++++++ lib/akshare.ts | 56 +++ lib/finance.ts | 66 +++ models/Finance.ts | 48 ++ pages/api/finance/index-funds.ts | 300 ++++++++++++ pages/finance/index.tsx | 246 ++++++++++ pnpm-lock.yaml | 798 +++++++++++++++++++++++++++---- styles/Finance.module.scss | 163 +++++++ types/finance.ts | 42 ++ 11 files changed, 1994 insertions(+), 83 deletions(-) create mode 100644 components/Finance/FundCard.tsx create mode 100644 constants/finance.ts create mode 100644 finance_PRD.md create mode 100644 lib/akshare.ts create mode 100644 lib/finance.ts create mode 100644 models/Finance.ts create mode 100644 pages/api/finance/index-funds.ts create mode 100644 pages/finance/index.tsx create mode 100644 styles/Finance.module.scss create mode 100644 types/finance.ts diff --git a/components/Finance/FundCard.tsx b/components/Finance/FundCard.tsx new file mode 100644 index 0000000..9b0ea5e --- /dev/null +++ b/components/Finance/FundCard.tsx @@ -0,0 +1,171 @@ +import { FC, useMemo } from 'react'; +import { Badge, Card } from 'react-bootstrap'; + +import { INDEX_CATEGORY_LABELS, INDEX_RISK_LABELS } from '../../constants/finance'; +import styles from '../../styles/Finance.module.scss'; +import { IndexFundSnapshot, IndexHistoryPoint } from '../../types/finance'; + +export interface FundCardProps { + data: IndexFundSnapshot; +} + +const formatNumber = (value: number | null | undefined) => + value == null ? '--' : value.toLocaleString('zh-CN', { maximumFractionDigits: 2 }); + +const formatPercent = (value: number | null | undefined) => + value == null ? '--' : `${(value * 100).toFixed(2)}%`; + +const valueTone = (value: number | null | undefined) => + value == null ? styles.mutedText : value >= 0 ? styles.positiveText : styles.negativeText; + +const Sparkline: FC<{ points: IndexHistoryPoint[]; chartId: string }> = ({ points, chartId }) => { + const { polyline, gradientStops } = useMemo(() => { + if (!points.length) return { polyline: '', gradientStops: [] as number[] }; + + const values = points.map(point => point.value); + const min = Math.min(...values); + const max = Math.max(...values); + const delta = max - min || 1; + + const polylinePoints = points + .map((point, index) => { + const x = (index / Math.max(points.length - 1, 1)) * 100; + const y = ((max - point.value) / delta) * 40; + + return `${x.toFixed(2)},${y.toFixed(2)}`; + }) + .join(' '); + + const gradientOffsets = [0, 50, 100]; + + return { polyline: polylinePoints, gradientStops: gradientOffsets }; + }, [points]); + + if (!points.length) return
数据准备中
; + + const gradientId = `${chartId}-gradient`; + + return ( +
+ + + + {gradientStops.map(offset => ( + + ))} + + + + +
+ ); +}; + +export const FundCard: FC = ({ data }) => { + const { + displayName, + category, + riskLevel, + latestValue, + dailyChangePct, + oneYearReturnPct, + maxDrawdownPct, + tags, + sparkline, + updatedAt, + fallback, + description, + } = data; + const sparklineId = useMemo(() => `fund-${data.symbol}`, [data.symbol]); + + return ( + + +
+
+

{displayName}

+
+ + {INDEX_CATEGORY_LABELS[category]} + + + {INDEX_RISK_LABELS[riskLevel]} + + {fallback && ( + + 离线数据 + + )} +
+
+ + 数据源
+ {data.source.historyEndpoint} +
+
+ +

{description}

+ +
+
+

最新点位

+ {formatNumber(latestValue)} +
+
+

日涨跌

+ {formatPercent(dailyChangePct)} +
+
+

近 1 年收益

+ + {formatPercent(oneYearReturnPct)} + +
+
+

最大回撤

+ {formatPercent(maxDrawdownPct)} +
+
+ + + +
+ {tags?.map(tag => ( + + {tag} + + ))} +
+ +
+ 更新于 {updatedAt || '--'} + + 查看详情 → + +
+
+
+ ); +}; diff --git a/constants/finance.ts b/constants/finance.ts new file mode 100644 index 0000000..8fa5e7b --- /dev/null +++ b/constants/finance.ts @@ -0,0 +1,13 @@ +import { IndexFundCategory, IndexRiskLevel } from '../types/finance'; + +export const INDEX_CATEGORY_LABELS: Record = { + broad: '宽基', + sector: '行业', + theme: '主题', +}; + +export const INDEX_RISK_LABELS: Record = { + conservative: '保守', + balanced: '稳健', + aggressive: '进取', +}; diff --git a/finance_PRD.md b/finance_PRD.md new file mode 100644 index 0000000..74543fb --- /dev/null +++ b/finance_PRD.md @@ -0,0 +1,174 @@ +# 理财产品页面 PRD(国内指数基金精选) + +## 1. 背景与目标 + +- 平台当前缺少针对理财小白的落地页面,用户难以理解「指数基金」这一资产类别并做出选择。 +- 国内指数基金数量众多,缺乏以风险/波动友好视角进行筛选的工具。 +- 目标:推出一个一屏解释、一屏筛选的理财产品页面,帮助用户基于客观数据挑选国内主流指数基金,并引导至基金详情或购买渠道。 + +## 2. 用户画像 + +| 用户类型 | 需求 | 痛点 | +| ----------------------------- | -------------------------------- | ------------------------------- | +| 新手理财用户(25-35 岁白领) | 想开始定投,但不了解指数基金差异 | 术语过多、没有直观风险提示 | +| 进阶用户(有 1-3 年基金经验) | 需要快速对比指数基金表现 | 需要最新净值/回撤数据和多维排序 | +| 内容消费用户 | 想要理解指数基金逻辑 | 缺乏简单的知识卡片和案例 | + +## 3. 使用场景 + +- **首次进入:** 通过首页 Banner/文章跳转到理财产品页,先阅读指数基金为何适合长期定投,再挑选产品。 +- **每日查看:** 用户关注 2-3 只指数基金,查看实时涨跌、近期表现及风险信号。 +- **策略对比:** 用户在页面内对比宽基 vs 行业指数,组合不同风险等级产品。 + +## 4. 信息架构与模块 + +1. **Hero 讲解区**:一句话卖点 + 国内指数基金长期收益对比图 + CTA(开始挑选)。 +2. **筛选器**:分类(宽基/行业/主题)、风险级别、跟踪误差、成立年限、基金规模、费率。 +3. **指数基金卡片列表**:每张卡片包含基金简称、跟踪指数、近 1/3/5 年年化、最大回撤、规模、费率、风险标签、趋势小图。 +4. **精选组合推荐**:根据风险偏好自动推荐 3 套组合(保守/平衡/进取)。 +5. **教育内容区**:FAQ、指数基金 vs 主动基金、定投策略提示。 +6. **CTA 区**:跳转到基金详情页、模拟组合或第三方购买链接。 + +## 5. MVP 范围 + +- 覆盖 30-50 个国内核心指数基金(宽基 + 主要行业指数)。 +- 筛选功能支持「风险等级」「年化收益」「最大回撤」排序与多条件过滤。 +- 每只基金提供历史净值曲线(近 5 年)、实时涨跌幅及跟踪指数概览。 +- 集成 AKShare 指数数据 API,支持每日自动更新和历史回测展示。 + +## 6. 数据源与技术方案 + +### 6.1 数据来源:AKShare 指数数据 API + +| 功能 | AKShare 接口 | 关键字段 | 使用说明 | +| ------------------------- | ------------------------------ | ---------------------------------------------- | ---------------------------------------------------------------------------------------- | +| 实时指数行情(宽基/行业) | `stock_zh_index_spot_em` | 代码、名称、最新价、涨跌幅、成交额、振幅、量比 | 传入 `symbol="上证系列指数"` / `"深证系列指数"` 获取国内指数实时行情;用于列表实时价格。 | +| 新浪实时指数补充 | `stock_zh_index_spot_sina` | 名称、最新价、涨跌额、成交量 | 兜底数据源,避免单一供应商不可用。 | +| 历史日线 | `stock_zh_index_daily_em` | 日期、开收高低、成交量、成交额、换手率 | 用于绘制近 1/3/5 年走势图、计算年化收益/回撤。 | +| 深度历史(中证指数) | `stock_zh_index_hist_csindex` | 日期、收盘、涨跌幅、换手率、PE、PB | 适配 2005 年前/稀有指数历史,支持长周期回测。 | +| 指数估值 | `stock_zh_index_value_csindex` | PE、PB、股息率、ROE | 用于显示估值温度计,作为风险提示。 | + +> 若需要关联具体基金,可与「公募基金数据」章节中的 `fund_etf_spot_em`、`fund_open_fund_daily_em` 结合,建立「基金 ↔ 跟踪指数」映射表。 + +### 6.2 数据流程 + +1. 数据同步服务(CRON 或 serverless job)调用 AKShare 接口,存入 `index_snapshots`(实时)和 `index_history`(日线)表。 +2. 数据层计算指标:近 n 年年化收益、最大/最近回撤、波动率、夏普比率、跟踪误差(需要基金净值数据)。 +3. API 层提供 `/api/finance/index-funds`(列表 + 筛选)和 `/api/finance/index-funds/{id}`(详情)两个端点,前端页面直接消费。 +4. 数据更新频率:实时行情每 1 分钟刷新、历史日线每日收盘后更新、估值数据每日 23:00 同步。 + +### 6.3 数据字段映射(示例) + +| 页面字段 | 计算逻辑 | 数据来源 | +| --------------- | ------------------------------------------------------- | ------------------------------ | +| 最新净值/点位 | `最新价` | `stock_zh_index_spot_em` | +| 近 1/3/5 年年化 | CAGR(`stock_zh_index_daily_em` 收盘价) | 历史日线 | +| 最大回撤 | 以 `stock_zh_index_daily_em` 收盘价计算 | 历史日线 | +| 风险等级 | 基于波动率、最大回撤阈值映射(例:波动率 < 15% → 保守) | 数据计算层 | +| 估值温度计 | 当前 PE/PB vs 历史百分位 | `stock_zh_index_value_csindex` | + +## 7. 功能需求 + +### 7.1 Hero/教育区 + +- 文案:「长期定投指数基金,抓住经济增长红利」。 +- 可切换两张图表(沪深 300 vs 中证 500 累计收益)。 + +### 7.2 筛选器 + +- **类别**:宽基(沪深300、中证500、创业板指)、行业(消费、科技、医药等)、主题。 +- **风险等级**:保守(年化波动<12%)、稳健(12%-20%)、进取(>20%)。 +- **更多条件**:成立年限、基金规模、管理费、跟踪误差、近一年回撤。 +- 支持「预设组合」快速按钮(保守定投/成长定投)。 + +### 7.3 基金卡片 + +- 顶部显示基金简称 + 基金代码 + 「指数/ETF」标签。 +- 中部展示:最新价、日涨跌、近 1/3/5 年年化(可切换)、最大回撤、估值温度条。 +- 底部 CTA:「查看详情」「加入对比」「加入定投计划」。 +- 卡片右侧 Mini Chart:7D/30D 走势,使用日线数据。 + +### 7.4 对比与收藏 + +- 用户可勾选最多 3 支基金进入对比抽屉,展示指标雷达图和关键表格。 +- 收藏逻辑存储在本地(未登录)或账号(已登录)。 + +### 7.5 精选组合 + +- 基于推荐算法(见 §8)输出三套组合,显示资产占比、预期波动、历史最大回撤。 +- CTA 引导至组合策略文章/模拟盘。 + +### 7.6 教育与风险提示 + +- FAQ 包含:「什么是指数基金」「如何判断适合自己的风险等级」「定投 vs 一次性买入」。 +- 风险提示固定展示在页面底部:指数基金存在市场风险,过往表现不代表未来等。 + +## 8. 推荐/评分逻辑 + +- **评分维度**:长期收益(40%)、波动/回撤(25%)、规模与流动性(20%)、费用(10%)、估值合理性(5%)。 +- **输入数据**:年化收益、最大回撤、日均成交额、管理费率、估值百分位。 +- **输出**:综合得分 0-100,映射为「入门优选/稳健优选/进取优选」标签。 +- **组合建议**:使用现代投资组合理论(MPT)或经验权重(保守 70% 宽基债、30% 宽基股;进取 80% 行业/主题 + 20% 宽基)。 + +## 9. UX / UI 细节 + +- 色彩:Hero 区使用品牌主色,数据卡片背景浅灰,风险等级使用信号色(绿/黄/橙)。 + |- 表格滚动:列表默认展示 10 条,滚动加载。 +- Skeleton/loading:使用骨架屏 + 最近一次缓存数据,避免白屏。 +- 响应式:移动端以纵向卡片排列,筛选器折叠为 Drawer;桌面端使用并排布局。 + +## 10. 指标与验证 + +- PV/UV:页面独立访客、回访率。 +- 转化:点击「查看详情」/「加入定投」人数。 +- 互动:筛选器使用率、对比抽屉打开率、收藏数。 +- 数据准确度:定时监控接口失败率、数据延迟。 + +## 11. 非功能要求 + +- 数据接口需具备重试/降级策略:主源(东方财富)失败时切换新浪接口。 +- 缓存策略:实时行情 60 秒缓存,历史数据 CDN 缓存 24h。 +- SEO:页面提供中文 meta、OG 信息,结构化 FAQ(JSON-LD)。 +- 可访问性:颜色对比度符合 WCAG AA,图表提供数值读屏。 + +## 12. 交付里程碑(建议) + +| 阶段 | 时间 | 主要输出 | +| -------- | ------- | ------------------------------ | +| 需求冻结 | T+3 天 | PRD、API 合同、指标口径 | +| 设计交付 | T+10 天 | 低保真 + 高保真、响应式规格 | +| 开发联调 | T+20 天 | 前后端开发、数据同步、冒烟测试 | +| Beta | T+26 天 | 小流量灰度,监控数据准确性 | +| 全量上线 | T+30 天 | 对外发布,监控指标 | + +## 13. 风险与对策 + +- **数据接口变动**:AKShare 接口参数或字段变化 → 对接版本监控,配置化字段映射。 +- **指数/基金映射不全**:补充人工维护的白名单表,并根据用户搜索行为动态扩充。 +- **用户认知不足**:教育内容区加入短视频/图解链接、常见问题提示。 +- **性能压力**:列表分页 + 懒加载 mini chart;历史数据预计算。 + +## 14. Open Points + +1. 是否需要在页面内直接引导交易?如果需要,需确认合规与合作渠道。 +2. 推荐算法是否可以接入已有的智能投顾引擎?抑或仅基于规则。 +3. 是否支持用户登录后的个性化提醒(价格提醒、定投日推送)。 + +## 15. MVP 实施计划 + +1. **数据与服务** + - 新增 `/pages/api/finance/index-funds.ts`,封装调用 `stock_zh_index_spot_em`、`stock_zh_index_daily_em` 的逻辑,返回基础字段(名称、代码、最新价、涨跌幅、近 1 年收益、最大回撤占位)。 + - 设计 `types/finance.ts`(或类似文件)统一前端字段定义,方便后续扩展估值、回测指标。 + - 加入简单内存缓存(60s)避免接口过度调用。 +2. **前端页面结构** + - 新建 `pages/finance/index.tsx`,沿用全局布局,包含 Hero、筛选器占位、基金列表三大模块。 + - 创建 `components/finance/FundCard.tsx` 复用卡片 UI,展示名称、指数、最新价、日涨跌、近 1 年收益、风险标签。 + - 筛选器 MVP 仅支持「类别」和「风险」两个条件,下钻逻辑后续扩展。 + - 数据请求通过 `SWR` 或自定义 hook(`models` 目录)调用 `/api/finance/index-funds`,支持 loading/skeleton。 +3. **交互与样式** + - 使用 Bootstrap 栅格 + 自定义 SCSS(`styles/finance.module.scss`)完成响应式布局。 + - 提供空数据与错误兜底提示,保留 CTA 占位。 +4. **测试与验收** + - `pnpm lint` 通过。 + - 本地 `next dev` 打开 `/finance` 页面验证数据渲染。 + - 文档更新:在 `README` 或导航处加入入口说明(若需要)。 diff --git a/lib/akshare.ts b/lib/akshare.ts new file mode 100644 index 0000000..862ea94 --- /dev/null +++ b/lib/akshare.ts @@ -0,0 +1,56 @@ +const DEFAULT_HOSTS = [ + process.env.AKSHARE_API_BASE, + 'https://akshare.xyz/api/public', + 'https://akshare.akfamily.xyz/api/public', +].filter((value): value is string => !!value); + +export async function requestAkShareJSON( + endpoint: string, + params?: Record, +): Promise { + if (!DEFAULT_HOSTS.length) throw new Error('No AkShare host configured'); + + let lastError: Error | null = null; + + for (const host of DEFAULT_HOSTS) { + try { + const url = new URL(endpoint.replace(/^\//, ''), host.endsWith('/') ? host : `${host}/`); + + if (params) { + const searchParams = new URLSearchParams(); + + Object.entries(params).forEach(([key, value]) => { + if (value !== undefined) searchParams.append(key, String(value)); + }); + + const serialized = searchParams.toString(); + + if (serialized) url.search = serialized; + } + + const response = await fetch(url.toString(), { + headers: { accept: 'application/json' }, + cache: 'no-store', + }); + + if (!response.ok) + throw new Error( + `AkShare responded with ${response.status} ${response.statusText} for ${url}`, + ); + + const contentType = response.headers.get('content-type'); + + if (!contentType?.includes('application/json')) { + const preview = (await response.text()).slice(0, 200); + + throw new Error(`Unexpected content-type ${contentType} for ${url}: ${preview}`); + } + + return (await response.json()) as T; + } catch (error) { + lastError = error as Error; + console.warn(`[AkShare] Falling back after error on host ${host}:`, lastError.message); + } + } + throw lastError ?? new Error('AkShare request failed without specific error'); +} diff --git a/lib/finance.ts b/lib/finance.ts new file mode 100644 index 0000000..49f2e48 --- /dev/null +++ b/lib/finance.ts @@ -0,0 +1,66 @@ +import { IndexHistoryPoint } from '../types/finance'; + +export const TRADING_DAYS_PER_YEAR = 252; + +export function computeChangePct(current?: number | null, base?: number | null) { + if (current == null || base == null || base === 0) return null; + + return (current - base) / base; +} + +export function computeOneYearReturn(series: IndexHistoryPoint[]) { + if (series.length < 2) return null; + + const sorted = [...series].sort((a, b) => a.date.localeCompare(b.date)); + const recent = sorted.slice(-TRADING_DAYS_PER_YEAR); + + if (recent.length < 2) return null; + + const first = recent[0].value; + const last = recent[recent.length - 1].value; + + if (!first) return null; + + return (last - first) / first; +} + +export function computeMaxDrawdown(series: IndexHistoryPoint[]) { + if (!series.length) return null; + + const sorted = [...series].sort((a, b) => a.date.localeCompare(b.date)); + + let peak = sorted[0].value; + let maxDrawdown = 0; + + sorted.forEach(point => { + const { value } = point; + + if (value > peak) peak = value; + + if (!peak) return; + + const drawdown = (value - peak) / peak; + + if (drawdown < maxDrawdown) maxDrawdown = drawdown; + }); + + return maxDrawdown || null; +} + +export function computeDailyChange(series: IndexHistoryPoint[]) { + if (series.length < 2) return null; + + const sorted = [...series].sort((a, b) => a.date.localeCompare(b.date)); + const latest = sorted[sorted.length - 1].value; + const previous = sorted[sorted.length - 2].value; + + return computeChangePct(latest, previous); +} + +export function buildSparkline(series: IndexHistoryPoint[], limit = 30) { + if (!series.length) return []; + + const sorted = [...series].sort((a, b) => a.date.localeCompare(b.date)); + + return sorted.slice(-limit); +} diff --git a/models/Finance.ts b/models/Finance.ts new file mode 100644 index 0000000..9225203 --- /dev/null +++ b/models/Finance.ts @@ -0,0 +1,48 @@ +import { ListModel } from 'mobx-restful'; + +import { ownClient } from './Base'; +import { IndexFundSnapshot, IndexFundCategory, IndexRiskLevel } from '../types/finance'; + +export interface IndexFundFilter { + category?: IndexFundCategory; + riskLevel?: IndexRiskLevel; +} + +interface IndexFundAPIResponse { + data: IndexFundSnapshot[]; + meta?: { total?: number }; +} + +export class IndexFundModel extends ListModel { + client = ownClient; + baseURI = 'finance/index-funds'; + + constructor() { + super(); + this.pageSize = 8; + } + + async loadPage(page = this.pageIndex, perPage = this.pageSize, filter: IndexFundFilter = {}) { + const search = new URLSearchParams(); + + if (filter.category) search.set('category', filter.category); + if (filter.riskLevel) search.set('riskLevel', filter.riskLevel); + + search.set('limit', String(perPage)); + + const query = search.toString(); + const path = query ? `${this.baseURI}?${query}` : this.baseURI; + + const { body } = await this.client.get(path); + + const data = body?.data || []; + const totalCount = body?.meta?.total ?? data.length; + + return { + pageData: data, + totalCount, + }; + } +} + +export const indexFundStore = new IndexFundModel(); diff --git a/pages/api/finance/index-funds.ts b/pages/api/finance/index-funds.ts new file mode 100644 index 0000000..6211164 --- /dev/null +++ b/pages/api/finance/index-funds.ts @@ -0,0 +1,300 @@ +import type { NextApiRequest, NextApiResponse } from 'next'; + +import { requestAkShareJSON } from '../../../lib/akshare'; +import { + buildSparkline, + computeDailyChange, + computeMaxDrawdown, + computeOneYearReturn, +} from '../../../lib/finance'; +import type { + IndexFundDefinition, + IndexFundSnapshot, + IndexHistoryPoint, +} from '../../../types/finance'; + +const CACHE_TTL_MS = 60_000; +const HISTORY_ENDPOINT = 'stock_zh_index_daily_em'; +const HISTORY_SPARKLINE_POINTS = 60; +const FALLBACK_HISTORY_POINTS = 180; + +const PRESETS: IndexFundDefinition[] = [ + { + symbol: 'sh000300', + displayName: '沪深 300', + description: '覆盖沪深两市 300 家大型蓝筹企业,代表 A 股核心资产。', + category: 'broad', + riskLevel: 'balanced', + tags: ['宽基', '蓝筹'], + }, + { + symbol: 'sh000905', + displayName: '中证 500', + description: '中盘成长代表指数,覆盖 500 家中型企业,波动略高。', + category: 'broad', + riskLevel: 'balanced', + tags: ['宽基', '成长'], + }, + { + symbol: 'sh000852', + displayName: '中证 1000', + description: '中小盘指数,覆盖 1000 家公司,适合进取型定投。', + category: 'broad', + riskLevel: 'aggressive', + tags: ['宽基', '中小盘'], + }, + { + symbol: 'sh000016', + displayName: '上证 50', + description: '上海证券交易所市值前 50 大蓝筹股,偏防御。', + category: 'broad', + riskLevel: 'conservative', + tags: ['宽基', '大盘'], + }, + { + symbol: 'sz399006', + displayName: '创业板指', + description: '创业板代表指数,成长性与波动并存。', + category: 'theme', + riskLevel: 'aggressive', + tags: ['成长', '科技'], + }, + { + symbol: 'sz399330', + displayName: '深证 100', + description: '深交所龙头企业代表,兼具成长与稳健。', + category: 'broad', + riskLevel: 'balanced', + tags: ['宽基', '成长'], + }, + { + symbol: 'sz399997', + displayName: '中证白酒', + description: '消费龙头行业指数,收益弹性大,行业集中度高。', + category: 'sector', + riskLevel: 'aggressive', + tags: ['消费', '行业'], + }, + { + symbol: 'sh000932', + displayName: '中证消费', + description: '覆盖食品饮料、家电等消费龙头,稳健增长属性明显。', + category: 'sector', + riskLevel: 'balanced', + tags: ['消费', '行业'], + }, +]; + +interface AkShareDailyRecord { + date?: string; + 日期?: string; + close?: number; + 收盘?: number; +} + +interface AkShareListPayload { + data?: T[]; + result?: T[]; +} + +let cache: { timestamp: number; data: IndexFundSnapshot[] } | null = null; + +const fallbackBasePrice: Record = { + sh000300: 3500, + sh000905: 5000, + sh000852: 6200, + sh000016: 2900, + sz399006: 1800, + sz399330: 1900, + sz399997: 8000, + sh000932: 7000, +}; + +function unwrapAkShareRecords(payload: unknown): AkShareDailyRecord[] { + if (Array.isArray(payload)) return payload as AkShareDailyRecord[]; + + if (payload && typeof payload === 'object') { + const { data, result } = payload as AkShareListPayload; + + if (Array.isArray(data)) return data; + if (Array.isArray(result)) return result; + } + throw new Error('Unexpected AkShare payload format'); +} + +function normalizeHistory(records: AkShareDailyRecord[]): IndexHistoryPoint[] { + return records + .map(({ date, 日期, close, 收盘 }) => { + const normalizedDate = (date || 日期 || '').slice(0, 10); + const value = Number(close ?? 收盘); + + if (!normalizedDate || Number.isNaN(value)) return undefined; + + return { date: normalizedDate, value }; + }) + .filter((item): item is IndexHistoryPoint => !!item) + .sort((a, b) => a.date.localeCompare(b.date)); +} + +function formatAkShareDate(input: Date) { + return input.toISOString().slice(0, 10).replace(/-/g, ''); +} + +async function fetchHistorySeries(symbol: string) { + const end = new Date(); + const start = new Date(); + + start.setFullYear(start.getFullYear() - 5); + + const payload = await requestAkShareJSON(HISTORY_ENDPOINT, { + symbol, + start_date: formatAkShareDate(start), + end_date: formatAkShareDate(end), + }); + + const history = normalizeHistory(unwrapAkShareRecords(payload)); + + return history.slice(-720); +} + +function seededRandom(symbol: string) { + let seed = Array.from(symbol).reduce((sum, char) => sum + char.charCodeAt(0), 0); + + return () => { + seed = (seed * 9301 + 49297) % 233280; + + return seed / 233280; + }; +} + +function buildSyntheticSparkline(symbol: string, points = FALLBACK_HISTORY_POINTS) { + const random = seededRandom(symbol); + const today = new Date(); + const base = fallbackBasePrice[symbol] ?? 3000 + random() * 2000; + + let value = base; + + const series: IndexHistoryPoint[] = []; + + for (let offset = points - 1; offset >= 0; offset -= 1) { + const date = new Date(today); + date.setDate(today.getDate() - (points - 1 - offset)); + + const noise = (random() - 0.5) * 0.04; // +/- 2% + value = Math.max(0, value * (1 + noise)); + + series.push({ + date: date.toISOString().slice(0, 10), + value: Number(value.toFixed(2)), + }); + } + + return series; +} + +function buildSyntheticSnapshot(preset: IndexFundDefinition): IndexFundSnapshot { + const sparkline = buildSyntheticSparkline(preset.symbol); + + const latestValue = sparkline.at(-1)?.value ?? null; + + return { + ...preset, + latestValue, + dailyChangePct: computeDailyChange(sparkline), + oneYearReturnPct: computeOneYearReturn(sparkline), + maxDrawdownPct: computeMaxDrawdown(sparkline), + sparkline: buildSparkline(sparkline, HISTORY_SPARKLINE_POINTS), + updatedAt: sparkline.at(-1)?.date ?? null, + source: { historyEndpoint: `${HISTORY_ENDPOINT} (fallback)` }, + fallback: true, + }; +} + +async function buildSnapshot(preset: IndexFundDefinition): Promise { + try { + const history = await fetchHistorySeries(preset.symbol); + const latestValue = history.at(-1)?.value ?? null; + + return { + ...preset, + latestValue, + dailyChangePct: computeDailyChange(history), + oneYearReturnPct: computeOneYearReturn(history), + maxDrawdownPct: computeMaxDrawdown(history), + sparkline: buildSparkline(history, HISTORY_SPARKLINE_POINTS), + updatedAt: history.at(-1)?.date ?? null, + source: { historyEndpoint: HISTORY_ENDPOINT }, + }; + } catch (error) { + console.warn(`[Finance] Using synthetic data for ${preset.symbol}:`, (error as Error).message); + + return buildSyntheticSnapshot(preset); + } +} + +async function loadSnapshots() { + const snapshots = await Promise.all(PRESETS.map(buildSnapshot)); + + cache = { + timestamp: Date.now(), + data: snapshots, + }; + + return snapshots; +} + +async function getCachedSnapshots() { + if (cache && Date.now() - cache.timestamp < CACHE_TTL_MS) return cache.data; + + return loadSnapshots(); +} + +function applyFilters( + data: IndexFundSnapshot[], + { + category, + riskLevel, + limit, + }: { category?: string | string[]; riskLevel?: string | string[]; limit?: string | string[] }, +) { + const parsedCategory = Array.isArray(category) ? category[0] : category; + const parsedRisk = Array.isArray(riskLevel) ? riskLevel[0] : riskLevel; + const parsedLimit = Number(Array.isArray(limit) ? limit[0] : limit); + + let filtered = data; + + if (parsedCategory) filtered = filtered.filter(item => item.category === parsedCategory); + if (parsedRisk) filtered = filtered.filter(item => item.riskLevel === parsedRisk); + if (!Number.isNaN(parsedLimit) && parsedLimit > 0) filtered = filtered.slice(0, parsedLimit); + + return filtered; +} + +export default async function handler(request: NextApiRequest, response: NextApiResponse) { + if (request.method !== 'GET') + return response.status(405).json({ message: 'Method Not Allowed, only GET supported' }); + + try { + const snapshots = await getCachedSnapshots(); + const filtered = applyFilters(snapshots, request.query); + + response.setHeader('Cache-Control', 's-maxage=60, stale-while-revalidate=300'); + + return response.status(200).json({ + data: filtered, + meta: { + total: snapshots.length, + returned: filtered.length, + cached: + cache != null && + Date.now() - cache.timestamp < CACHE_TTL_MS && + filtered.length === snapshots.length, + source: HISTORY_ENDPOINT, + }, + }); + } catch (error) { + console.error('[Finance] Failed to build index snapshot:', error); + + return response.status(500).json({ message: (error as Error).message }); + } +} diff --git a/pages/finance/index.tsx b/pages/finance/index.tsx new file mode 100644 index 0000000..4058e82 --- /dev/null +++ b/pages/finance/index.tsx @@ -0,0 +1,246 @@ +import { Loading } from 'idea-react'; +import { observer } from 'mobx-react'; +import { ScrollList } from 'mobx-restful-table'; +import { FC, useContext, useMemo, useState } from 'react'; +import { Badge, Button, Col, Container, Row } from 'react-bootstrap'; + +import { FundCard } from '../../components/Finance/FundCard'; +import { PageHead } from '../../components/Layout/PageHead'; +import { INDEX_CATEGORY_LABELS, INDEX_RISK_LABELS } from '../../constants/finance'; +import { IndexFundFilter, indexFundStore } from '../../models/Finance'; +import { I18nContext } from '../../models/Translation'; +import styles from '../../styles/Finance.module.scss'; +import { IndexFundCategory, IndexRiskLevel } from '../../types/finance'; + +const categoryOptions: { label: string; value?: IndexFundCategory }[] = [ + { label: '全部', value: undefined }, + { label: '宽基', value: 'broad' }, + { label: '行业', value: 'sector' }, + { label: '主题', value: 'theme' }, +]; + +const riskOptions: { label: string; value?: IndexRiskLevel; description: string }[] = [ + { label: '全部', value: undefined, description: '不限风险偏好' }, + { label: '保守', value: 'conservative', description: '波动小于 12%' }, + { label: '稳健', value: 'balanced', description: '波动 12%-20%' }, + { label: '进取', value: 'aggressive', description: '波动大于 20%' }, +]; + +const FinanceLandingPage: FC = observer(() => { + const i18n = useContext(I18nContext); + const { t } = i18n; + const [category, setCategory] = useState(); + const [riskLevel, setRiskLevel] = useState(); + + const filterSummary = useMemo(() => { + const categoryText = category ? `${INDEX_CATEGORY_LABELS[category]}指数` : '全部类别'; + const riskText = riskLevel ? `${INDEX_RISK_LABELS[riskLevel]}风险` : '全部风险'; + + return `${categoryText} · ${riskText}`; + }, [category, riskLevel]); + + const resetFilters = () => { + setCategory(undefined); + setRiskLevel(undefined); + }; + + const filter: IndexFundFilter = { category, riskLevel }; + + return ( + + + +
+ + + + Beta + +

指数基金理财 · 国内优选

+

+ 基于 AKShare + 指数数据构建的国内指数基金精选,帮助小白用户快速理解风险、收益与波动,挑选适合自己的定投组合。 +

+
+ AKShare 指数数据 + 实时行情 & 历史回测 + 风险等级分层 +
+
+ + +
+ + +
+
+

覆盖指数

+ + {Math.max(indexFundStore.totalCount || 0, 8)}+ + + 宽基 + 行业核心指数 +
+
+

数据刷新

+ 60s + 实时行情自动更新 +
+
+

风险提示

+ 3 + 保守 · 稳健 · 进取 +
+
+ +
+
+ +
+
+
+

快速筛选

+

+ 根据风险与类别筛选适合的指数基金,所选条件:{filterSummary} +

+
+ +
+ +
+
+

指数类别

+
+ {categoryOptions.map(({ label, value }) => { + const active = value === undefined ? !category : category === value; + + return ( + + ); + })} +
+
+ +
+

风险等级

+
+ {riskOptions.map(({ label, value, description }) => { + const active = value === undefined ? !riskLevel : riskLevel === value; + + return ( + + ); + })} +
+
+
+
+ +
+
+
+

指数基金精选

+

展示指数:{filterSummary},数据源 AkShare

+
+
+ + +
+
+ + {indexFundStore.downloading > 0 && ( +
+ +
+ )} + + + funds.length ? ( + + {funds.map(fund => ( + + + + ))} + + ) : ( +
+

暂无符合条件的指数

+

尝试放宽筛选条件,或稍后再试。

+ +
+ ) + } + /> +
+ +
+ + +
+

指数基金三句话

+
    +
  • 跟踪一篮子股票,成本低、透明度高。
  • +
  • 长期定投平滑风险,优先关注宽基指数。
  • +
  • 用数据衡量风险:波动、回撤、估值百分位。
  • +
+
+ + +
+

下一步

+
    +
  1. 挑选 2-3 支指数,加入收藏/关注列表。
  2. +
  3. 了解对应的 ETF 或联接基金,关注费率与规模。
  4. +
  5. 设定定投计划并持续跟踪估值、回撤。
  6. +
+
+ +
+
+
+ ); +}); + +export default FinanceLandingPage; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 12e8de0..7017071 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1,7 +1,7 @@ lockfileVersion: '9.0' settings: - autoInstallPeers: false + autoInstallPeers: true excludeLinksFromLockfile: false overrides: @@ -17,31 +17,31 @@ importers: version: 14.0.0 '@mdx-js/loader': specifier: ^3.1.1 - version: 3.1.1 + version: 3.1.1(webpack@5.102.1) '@mdx-js/react': specifier: ^3.1.1 version: 3.1.1(@types/react@19.2.2)(react@19.2.0) '@next/mdx': specifier: ^15.5.4 - version: 15.5.4(@mdx-js/loader@3.1.1)(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@19.2.0)) + version: 15.5.4(@mdx-js/loader@3.1.1(webpack@5.102.1))(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@19.2.0)) core-js: specifier: ^3.46.0 version: 3.46.0 echarts-jsx: specifier: ^0.5.4 - version: 0.5.4(react@19.2.0)(typescript@5.9.3) + version: 0.5.4(element-internals-polyfill@3.0.2)(react@19.2.0)(typescript@5.9.3) file-type: specifier: ^21.0.0 version: 21.0.0 idea-react: specifier: ^2.0.0-rc.13 - version: 2.0.0-rc.13(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react-is@16.13.1)(react@19.2.0)(typescript@5.9.3) + version: 2.0.0-rc.13(@types/react@19.2.2)(element-internals-polyfill@3.0.2)(react-dom@19.2.0(react@19.2.0))(react-is@16.13.1)(react@19.2.0)(typescript@5.9.3) koa: specifier: ^3.0.1 version: 3.0.1 koajax: specifier: ^3.1.2 - version: 3.1.2(core-js@3.46.0)(typescript@5.9.3) + version: 3.1.2(core-js@3.46.0)(element-internals-polyfill@3.0.2)(jsdom@27.2.0)(typescript@5.9.3) license-filter: specifier: ^0.2.5 version: 0.2.5 @@ -56,40 +56,40 @@ importers: version: 6.15.0 mobx-github: specifier: ^0.6.0 - version: 0.6.0(core-js@3.46.0)(typescript@5.9.3) + version: 0.6.0(core-js@3.46.0)(element-internals-polyfill@3.0.2)(jsdom@27.2.0)(typescript@5.9.3) mobx-i18n: specifier: ^0.7.2 - version: 0.7.2(mobx@6.15.0)(typescript@5.9.3) + version: 0.7.2(element-internals-polyfill@3.0.2)(mobx@6.15.0)(typescript@5.9.3) mobx-lark: specifier: ^2.4.2 - version: 2.4.2(core-js@3.46.0)(react@19.2.0)(typescript@5.9.3) + version: 2.4.2(core-js@3.46.0)(element-internals-polyfill@3.0.2)(jsdom@27.2.0)(react@19.2.0)(typescript@5.9.3) mobx-react: specifier: ^9.2.1 version: 9.2.1(mobx@6.15.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) mobx-react-helper: specifier: ^0.5.1 - version: 0.5.1(mobx@6.15.0)(react@19.2.0)(typescript@5.9.3) + version: 0.5.1(element-internals-polyfill@3.0.2)(mobx@6.15.0)(react@19.2.0)(typescript@5.9.3) mobx-restful: specifier: ^2.1.3 - version: 2.1.3(core-js@3.46.0)(mobx@6.15.0)(typescript@5.9.3) + version: 2.1.3(core-js@3.46.0)(element-internals-polyfill@3.0.2)(jsdom@27.2.0)(mobx@6.15.0)(typescript@5.9.3) mobx-restful-table: specifier: ^2.5.4 - version: 2.5.4(@types/react@19.2.2)(core-js@3.46.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3) + version: 2.5.4(@types/react@19.2.2)(core-js@3.46.0)(element-internals-polyfill@3.0.2)(jsdom@27.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3) mobx-strapi: specifier: ^0.8.1 - version: 0.8.1(core-js@3.46.0)(typescript@5.9.3) + version: 0.8.1(core-js@3.46.0)(element-internals-polyfill@3.0.2)(jsdom@27.2.0)(typescript@5.9.3) next: specifier: ^15.5.4 version: 15.5.4(@babel/core@7.28.4)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(sass@1.93.2) next-pwa: specifier: ^5.6.0 - version: 5.6.0(@babel/core@7.28.4)(next@15.5.4(@babel/core@7.28.4)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(sass@1.93.2)) + version: 5.6.0(@babel/core@7.28.4)(next@15.5.4(@babel/core@7.28.4)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(sass@1.93.2))(webpack@5.102.1) next-ssr-middleware: specifier: ^1.0.3 - version: 1.0.3(next@15.5.4(@babel/core@7.28.4)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(sass@1.93.2))(react@19.2.0)(typescript@5.9.3) + version: 1.0.3(element-internals-polyfill@3.0.2)(next@15.5.4(@babel/core@7.28.4)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(sass@1.93.2))(react@19.2.0)(typescript@5.9.3) open-react-map: specifier: ^0.9.1 - version: 0.9.1(core-js@3.46.0)(mobx-react@9.2.1(mobx@6.15.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(mobx@6.15.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3) + version: 0.9.1(core-js@3.46.0)(element-internals-polyfill@3.0.2)(jsdom@27.2.0)(mobx-react@9.2.1(mobx@6.15.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(mobx@6.15.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3) react: specifier: ^19.2.0 version: 19.2.0 @@ -113,7 +113,7 @@ importers: version: 7.16.0 web-utility: specifier: ^4.6.2 - version: 4.6.2(typescript@5.9.3) + version: 4.6.2(element-internals-polyfill@3.0.2)(typescript@5.9.3) yaml: specifier: ^2.8.1 version: 2.8.1 @@ -192,13 +192,13 @@ importers: version: 4.4.2 less-loader: specifier: ^12.3.0 - version: 12.3.0(less@4.4.2) + version: 12.3.0(less@4.4.2)(webpack@5.102.1) lint-staged: specifier: ^16.2.4 version: 16.2.4 next-with-less: specifier: ^3.0.1 - version: 3.0.1(less-loader@12.3.0(less@4.4.2))(less@4.4.2)(next@15.5.4(@babel/core@7.28.4)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(sass@1.93.2)) + version: 3.0.1(less-loader@12.3.0(less@4.4.2)(webpack@5.102.1))(less@4.4.2)(next@15.5.4(@babel/core@7.28.4)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(sass@1.93.2)) prettier: specifier: ^3.6.2 version: 3.6.2 @@ -217,12 +217,24 @@ importers: packages: + '@acemir/cssom@0.9.23': + resolution: {integrity: sha512-2kJ1HxBKzPLbmhZpxBiTZggjtgCwKg1ma5RHShxvd6zgqhDEdEkzpiwe7jLkI2p2BrZvFCXIihdoMkl1H39VnA==} + '@apideck/better-ajv-errors@0.3.6': resolution: {integrity: sha512-P+ZygBLZtkp0qqOAJJVX4oX/sFo5JR3eBWwwuqHHhK0GIgQOKWrAfiAaWX0aArHkRWHMuggFEgAZNxVPwPZYaA==} engines: {node: '>=10'} peerDependencies: ajv: '>=8' + '@asamuzakjp/css-color@4.0.5': + resolution: {integrity: sha512-lMrXidNhPGsDjytDy11Vwlb6OIGrT3CmLg3VWNFyWkLWtijKl7xjvForlh8vuj0SHGjgl4qZEQzUmYTeQA2JFQ==} + + '@asamuzakjp/dom-selector@6.7.4': + resolution: {integrity: sha512-buQDjkm+wDPXd6c13534URWZqbz0RP5PAhXZ+LIoa5LgwInT9HVJvGIJivg75vi8I13CxDGdTnz+aY5YUJlIAA==} + + '@asamuzakjp/nwsapi@2.3.9': + resolution: {integrity: sha512-n8GuYSrI9bF7FFZ/SjhwevlHc8xaVlb/7HmHelnc/PZXBD2ZR49NnN9sMMuDdEGPeeRQ5d0hqlSlEpgCX3Wl0Q==} + '@babel/code-frame@7.27.1': resolution: {integrity: sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==} engines: {node: '>=6.9.0'} @@ -1008,6 +1020,38 @@ packages: resolution: {integrity: sha512-9EHCoGKtisPNsEdBQ28tKxKeBmiVS3D4j+AN8Yjr+Dmtu+YACKGWiMOddNZG2VejQNIdFx7FwzU00BGX68ELhA==} engines: {node: '>=20'} + '@csstools/color-helpers@5.1.0': + resolution: {integrity: sha512-S11EXWJyy0Mz5SYvRmY8nJYTFFd1LCNV+7cXyAgQtOOuzb4EsgfqDufL+9esx72/eLhsRdGZwaldu/h+E4t4BA==} + engines: {node: '>=18'} + + '@csstools/css-calc@2.1.4': + resolution: {integrity: sha512-3N8oaj+0juUw/1H3YwmDDJXCgTB1gKU6Hc/bB502u9zR0q2vd786XJH9QfrKIEgFlZmhZiq6epXl4rHqhzsIgQ==} + engines: {node: '>=18'} + peerDependencies: + '@csstools/css-parser-algorithms': ^3.0.5 + '@csstools/css-tokenizer': ^3.0.4 + + '@csstools/css-color-parser@3.1.0': + resolution: {integrity: sha512-nbtKwh3a6xNVIp/VRuXV64yTKnb1IjTAEEh3irzS+HkKjAOYLTGNb9pmVNntZ8iVBHcWDA2Dof0QtPgFI1BaTA==} + engines: {node: '>=18'} + peerDependencies: + '@csstools/css-parser-algorithms': ^3.0.5 + '@csstools/css-tokenizer': ^3.0.4 + + '@csstools/css-parser-algorithms@3.0.5': + resolution: {integrity: sha512-DaDeUkXZKjdGhgYaHNJTV9pV7Y9B3b644jCLs9Upc3VeNGg6LWARAT6O+Q+/COo+2gg/bM5rhpMAtf70WqfBdQ==} + engines: {node: '>=18'} + peerDependencies: + '@csstools/css-tokenizer': ^3.0.4 + + '@csstools/css-syntax-patches-for-csstree@1.0.16': + resolution: {integrity: sha512-2SpS4/UaWQaGpBINyG5ZuCHnUDeVByOhvbkARwfmnfxDvTaj80yOI1cD8Tw93ICV5Fx4fnyDKWQZI1CDtcWyUg==} + engines: {node: '>=18'} + + '@csstools/css-tokenizer@3.0.4': + resolution: {integrity: sha512-Vd/9EVDiu6PPJt9yAh6roZP6El1xHrdvIVGjyBsHR0RYwNHgL7FJPyIIW4fANJNG6FtyZfvlRPpFI4ZM/lubvw==} + engines: {node: '>=18'} + '@editorjs/caret@1.0.3': resolution: {integrity: sha512-VmgwQJZgL/LQjk049JunzRV1YCa0vDi+BNEpbDmr5cp3lGZllq9QQFO1eI71ZPzvFVn3vvhb+eOif4sAEyGgbw==} @@ -1586,6 +1630,12 @@ packages: '@types/eslint-config-prettier@6.11.3': resolution: {integrity: sha512-3wXCiM8croUnhg9LdtZUJQwNcQYGWxxdOWDjPe1ykCqJFPVpzAKfs/2dgSoCtAvdPeaponcWPI7mPcGGp9dkKQ==} + '@types/eslint-scope@3.7.7': + resolution: {integrity: sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==} + + '@types/eslint@9.6.1': + resolution: {integrity: sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==} + '@types/estree-jsx@1.0.5': resolution: {integrity: sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg==} @@ -1871,10 +1921,67 @@ packages: cpu: [x64] os: [win32] + '@webassemblyjs/ast@1.14.1': + resolution: {integrity: sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==} + + '@webassemblyjs/floating-point-hex-parser@1.13.2': + resolution: {integrity: sha512-6oXyTOzbKxGH4steLbLNOu71Oj+C8Lg34n6CqRvqfS2O71BxY6ByfMDRhBytzknj9yGUPVJ1qIKhRlAwO1AovA==} + + '@webassemblyjs/helper-api-error@1.13.2': + resolution: {integrity: sha512-U56GMYxy4ZQCbDZd6JuvvNV/WFildOjsaWD3Tzzvmw/mas3cXzRJPMjP83JqEsgSbyrmaGjBfDtV7KDXV9UzFQ==} + + '@webassemblyjs/helper-buffer@1.14.1': + resolution: {integrity: sha512-jyH7wtcHiKssDtFPRB+iQdxlDf96m0E39yb0k5uJVhFGleZFoNw1c4aeIcVUPPbXUVJ94wwnMOAqUHyzoEPVMA==} + + '@webassemblyjs/helper-numbers@1.13.2': + resolution: {integrity: sha512-FE8aCmS5Q6eQYcV3gI35O4J789wlQA+7JrqTTpJqn5emA4U2hvwJmvFRC0HODS+3Ye6WioDklgd6scJ3+PLnEA==} + + '@webassemblyjs/helper-wasm-bytecode@1.13.2': + resolution: {integrity: sha512-3QbLKy93F0EAIXLh0ogEVR6rOubA9AoZ+WRYhNbFyuB70j3dRdwH9g+qXhLAO0kiYGlg3TxDV+I4rQTr/YNXkA==} + + '@webassemblyjs/helper-wasm-section@1.14.1': + resolution: {integrity: sha512-ds5mXEqTJ6oxRoqjhWDU83OgzAYjwsCV8Lo/N+oRsNDmx/ZDpqalmrtgOMkHwxsG0iI//3BwWAErYRHtgn0dZw==} + + '@webassemblyjs/ieee754@1.13.2': + resolution: {integrity: sha512-4LtOzh58S/5lX4ITKxnAK2USuNEvpdVV9AlgGQb8rJDHaLeHciwG4zlGr0j/SNWlr7x3vO1lDEsuePvtcDNCkw==} + + '@webassemblyjs/leb128@1.13.2': + resolution: {integrity: sha512-Lde1oNoIdzVzdkNEAWZ1dZ5orIbff80YPdHx20mrHwHrVNNTjNr8E3xz9BdpcGqRQbAEa+fkrCb+fRFTl/6sQw==} + + '@webassemblyjs/utf8@1.13.2': + resolution: {integrity: sha512-3NQWGjKTASY1xV5m7Hr0iPeXD9+RDobLll3T9d2AO+g3my8xy5peVyjSag4I50mR1bBSN/Ct12lo+R9tJk0NZQ==} + + '@webassemblyjs/wasm-edit@1.14.1': + resolution: {integrity: sha512-RNJUIQH/J8iA/1NzlE4N7KtyZNHi3w7at7hDjvRNm5rcUXa00z1vRz3glZoULfJ5mpvYhLybmVcwcjGrC1pRrQ==} + + '@webassemblyjs/wasm-gen@1.14.1': + resolution: {integrity: sha512-AmomSIjP8ZbfGQhumkNvgC33AY7qtMCXnN6bL2u2Js4gVCg8fp735aEiMSBbDR7UQIj90n4wKAFUSEd0QN2Ukg==} + + '@webassemblyjs/wasm-opt@1.14.1': + resolution: {integrity: sha512-PTcKLUNvBqnY2U6E5bdOQcSM+oVP/PmrDY9NzowJjislEjwP/C4an2303MCVS2Mg9d3AJpIGdUFIQQWbPds0Sw==} + + '@webassemblyjs/wasm-parser@1.14.1': + resolution: {integrity: sha512-JLBl+KZ0R5qB7mCnud/yyX08jWFw5MsoalJ1pQ4EdFlgj9VdXKGuENGsiCIjegI1W7p91rUlcB/LB5yRJKNTcQ==} + + '@webassemblyjs/wast-printer@1.14.1': + resolution: {integrity: sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw==} + + '@xtuc/ieee754@1.2.0': + resolution: {integrity: sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==} + + '@xtuc/long@4.2.2': + resolution: {integrity: sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==} + accepts@1.3.8: resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==} engines: {node: '>= 0.6'} + acorn-import-phases@1.0.4: + resolution: {integrity: sha512-wKmbr/DDiIXzEOiWrTTUcDm24kQ2vGfZQvM2fwg2vXqR5uW6aapr7ObPtj1th32b9u90/Pf4AItvdTh42fBmVQ==} + engines: {node: '>=10.13.0'} + peerDependencies: + acorn: ^8.14.0 + acorn-jsx@5.3.2: resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} peerDependencies: @@ -1885,8 +1992,17 @@ packages: engines: {node: '>=0.4.0'} hasBin: true + agent-base@7.1.4: + resolution: {integrity: sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==} + engines: {node: '>= 14'} + ajv-formats@2.1.1: resolution: {integrity: sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==} + peerDependencies: + ajv: ^8.0.0 + peerDependenciesMeta: + ajv: + optional: true ajv-keywords@3.5.2: resolution: {integrity: sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==} @@ -2040,6 +2156,9 @@ packages: resolution: {integrity: sha512-OMu3BGQ4E7P1ErFsIPpbJh0qvDudM/UuJeHgkAvfWe+0HFJCXh+t/l8L6fVLR55RI/UbKrVLnAXZSVwd9ysWYw==} hasBin: true + bidi-js@1.0.3: + resolution: {integrity: sha512-RKshQI1R3YQ+n9YJz2QQ147P66ELpa1FQEg20Dk8oW9t2KgLbpDLLp9aGZ7y8WHSshDknG0bknqGw5/tyCs5tw==} + big.js@5.2.2: resolution: {integrity: sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==} @@ -2117,6 +2236,10 @@ packages: resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==} engines: {node: '>= 14.16.0'} + chrome-trace-event@1.0.4: + resolution: {integrity: sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==} + engines: {node: '>=6.0'} + classnames@2.5.1: resolution: {integrity: sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow==} @@ -2265,12 +2388,24 @@ packages: css-line-break@2.1.0: resolution: {integrity: sha512-FHcKFCZcAha3LwfVBhCQbW2nCNbkZXn7KVUJcsT5/P8YmfsVja0FMPJr0B903j/E69HUphKiV9iQArX8SDYA4w==} + css-tree@3.1.0: + resolution: {integrity: sha512-0eW44TGN5SQXU1mWSkKwFstI/22X2bG1nYzZTYMAWjylYURhse752YgbE4Cx46AC+bAvI+/dYTPRk1LqSUnu6w==} + engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0} + + cssstyle@5.3.3: + resolution: {integrity: sha512-OytmFH+13/QXONJcC75QNdMtKpceNk3u8ThBjyyYjkEcy/ekBwR1mMAuNvi3gdBPW3N5TlCzQ0WZw8H0lN/bDw==} + engines: {node: '>=20'} + csstype@3.1.3: resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} damerau-levenshtein@1.0.8: resolution: {integrity: sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==} + data-urls@6.0.0: + resolution: {integrity: sha512-BnBS08aLUM+DKamupXs3w2tJJoqU+AkaE/+6vQxi/G/DPmIZFJJp9Dkb1kM03AZx8ADehDUZgsNxju3mPXZYIA==} + engines: {node: '>=20'} + data-view-buffer@1.0.2: resolution: {integrity: sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==} engines: {node: '>= 0.4'} @@ -2300,6 +2435,9 @@ packages: supports-color: optional: true + decimal.js@10.6.0: + resolution: {integrity: sha512-YpgQiITW3JXGntzdUmyUR1V812Hn8T1YVXhCu+wO3OpS4eU9l4YdD3qjyiKdV6mvV29zapkMeD390UVEf2lkUg==} + decode-named-character-reference@1.2.0: resolution: {integrity: sha512-c6fcElNV6ShtZXmsgNgFFV5tVX2PaV4g+MOAkb8eXHvn6sryJBrZa9r0zV6+dtTyoCKxtDy5tyQ5ZwQuidtd+Q==} @@ -2399,6 +2537,9 @@ packages: electron-to-chromium@1.5.234: resolution: {integrity: sha512-RXfEp2x+VRYn8jbKfQlRImzoJU01kyDvVPBmG39eU2iuRVhuS6vQNocB8J0/8GrIMLnPzgz4eW6WiRnJkTuNWg==} + element-internals-polyfill@3.0.2: + resolution: {integrity: sha512-uB0/Qube3lkwh8SmkTnGIyUgJ9YdqVSzIoHMRCEQjAbD4Y5UzsVbch1tIxjTgUe5k3gy1U0ZMKMJ90A81lqwig==} + emoji-regex@10.5.0: resolution: {integrity: sha512-lb49vf1Xzfx080OKA0o6l8DQQpV+6Vg95zyCJX9VB/BqKYlhG7N4wgROUUHRA+ZPUefLnteQOad7z1kT2bV7bg==} @@ -2413,6 +2554,14 @@ packages: resolution: {integrity: sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==} engines: {node: '>= 0.8'} + enhanced-resolve@5.18.3: + resolution: {integrity: sha512-d4lC8xfavMeBjzGr2vECC3fsGXziXZQyJxD868h2M/mBI3PwAuODxAkLkq5HYuvrPYcUtiLzsTo8U3PgX3Ocww==} + engines: {node: '>=10.13.0'} + + entities@6.0.1: + resolution: {integrity: sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==} + engines: {node: '>=0.12'} + env-paths@3.0.0: resolution: {integrity: sha512-dtJUTepzMW3Lm/NPxRf3wP4642UWhjL2sQxc+ym2YMj1m/H2zDNQOlezafzkHwn6sMstjHTwG6iQQsctDW/b1A==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -2441,6 +2590,9 @@ packages: resolution: {integrity: sha512-uDn+FE1yrDzyC0pCo961B2IHbdM8y/ACZsKD4dG6WqrjV53BADjwa7D+1aom2rsNVfLyDgU/eigvlJGJ08OQ4w==} engines: {node: '>= 0.4'} + es-module-lexer@1.7.0: + resolution: {integrity: sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==} + es-object-atoms@1.1.1: resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==} engines: {node: '>= 0.4'} @@ -2563,6 +2715,10 @@ packages: peerDependencies: eslint: '>=5.0.0' + eslint-scope@5.1.1: + resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} + engines: {node: '>=8.0.0'} + eslint-scope@8.4.0: resolution: {integrity: sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -2602,6 +2758,10 @@ packages: resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} engines: {node: '>=4.0'} + estraverse@4.3.0: + resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==} + engines: {node: '>=4.0'} + estraverse@5.3.0: resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} engines: {node: '>=4.0'} @@ -2640,6 +2800,10 @@ packages: eventemitter3@5.0.1: resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==} + events@3.3.0: + resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} + engines: {node: '>=0.8.x'} + extend@3.0.2: resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==} @@ -2795,6 +2959,9 @@ packages: resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} engines: {node: '>=10.13.0'} + glob-to-regexp@0.4.1: + resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==} + glob@7.2.3: resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} deprecated: Glob versions prior to v9 are no longer supported @@ -2869,6 +3036,10 @@ packages: hast-util-whitespace@3.0.0: resolution: {integrity: sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==} + html-encoding-sniffer@4.0.0: + resolution: {integrity: sha512-Y22oTqIU4uuPgEemfz7NDJz6OeKf12Lsu+QC+s3BVpda64lTiMYCyGwg5ki4vFxkMwQdeZDl2adZoqUgdFuTgQ==} + engines: {node: '>=18'} + html2canvas@1.4.1: resolution: {integrity: sha512-fPU6BHNpsyIhr8yyMpTLLxAbkaK8ArIBcmZIRiBLiDhjeqvXolaEmDGmELFuX9I4xDcaKKcJl+TKZLqruBbmWA==} engines: {node: '>=8.0.0'} @@ -2885,6 +3056,14 @@ packages: resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==} engines: {node: '>= 0.8'} + http-proxy-agent@7.0.2: + resolution: {integrity: sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==} + engines: {node: '>= 14'} + + https-proxy-agent@7.0.6: + resolution: {integrity: sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==} + engines: {node: '>= 14'} + husky@9.1.7: resolution: {integrity: sha512-5gs5ytaNjBrh5Ow3zrvdUUY+0VxIuWVL4i9irt6friV+BqdCfmV11CQTWMiBYWHbXhco+J1kHfTOUkePhCDvMA==} engines: {node: '>=18'} @@ -3079,6 +3258,9 @@ packages: resolution: {integrity: sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==} engines: {node: '>=0.10.0'} + is-potential-custom-element-name@1.0.1: + resolution: {integrity: sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==} + is-regex@1.2.1: resolution: {integrity: sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==} engines: {node: '>= 0.4'} @@ -3167,6 +3349,15 @@ packages: resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} hasBin: true + jsdom@27.2.0: + resolution: {integrity: sha512-454TI39PeRDW1LgpyLPyURtB4Zx1tklSr6+OFOipsxGUH1WMTvk6C65JQdrj455+DP2uJ1+veBEHTGFKWVLFoA==} + engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0} + peerDependencies: + canvas: ^3.0.0 + peerDependenciesMeta: + canvas: + optional: true + jsesc@3.1.0: resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==} engines: {node: '>=6'} @@ -3175,6 +3366,9 @@ packages: json-buffer@3.0.1: resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} + json-parse-even-better-errors@2.3.1: + resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} + json-schema-traverse@0.4.1: resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} @@ -3289,6 +3483,10 @@ packages: resolution: {integrity: sha512-1wd/kpAdKRLwv7/3OKC8zZ5U8e/fajCfWMxacUvB79S5nLrYGPtUI/8chMQhn3LQjsRVErTb9i1ECAwW0ZIHnQ==} engines: {node: '>=20.0.0'} + loader-runner@4.3.1: + resolution: {integrity: sha512-IWqP2SCPhyVFTBtRcgMHdzlf9ul25NwaFx4wCEH/KjAXuuHY4yNjvPXsBokp8jCB936PyWRaPKUNh8NvylLp2Q==} + engines: {node: '>=6.11.5'} + loader-utils@2.0.4: resolution: {integrity: sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==} engines: {node: '>=8.9.0'} @@ -3351,6 +3549,10 @@ packages: resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} hasBin: true + lru-cache@11.2.2: + resolution: {integrity: sha512-F9ODfyqML2coTIsQpSkRHnLSZMtkU8Q+mSfcaIyKwy58u+8k5nvAYeiNhsyMARvzNcXJ9QfWVrcPsC9e9rAxtg==} + engines: {node: 20 || >=22} + lru-cache@5.1.1: resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} @@ -3413,6 +3615,9 @@ packages: mdast-util-to-string@4.0.0: resolution: {integrity: sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==} + mdn-data@2.12.2: + resolution: {integrity: sha512-IEn+pegP1aManZuckezWCO+XZQDplx1366JoVhTpMpBB1sPey/SbveZQUosKiKiGYjg1wH4pMlNgXbCiYgihQA==} + media-typer@0.3.0: resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==} engines: {node: '>= 0.6'} @@ -3657,6 +3862,9 @@ packages: resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==} engines: {node: '>= 0.6'} + neo-async@2.6.2: + resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} + next-pwa@5.6.0: resolution: {integrity: sha512-XV8g8C6B7UmViXU8askMEYhWwQ4qc/XqJGnexbLV68hzKaGHZDMtHsm2TNxFcbR7+ypVuth/wwpiIlMwpRJJ5A==} peerDependencies: @@ -3800,6 +4008,9 @@ packages: resolution: {integrity: sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==} engines: {node: '>= 0.10'} + parse5@8.0.0: + resolution: {integrity: sha512-9m4m5GSgXjL4AjumKzq1Fgfp3Z8rsvjRNbnkVwfu2ImRqE5D0LnY2QfDen18FSY9C573YU5XxSapdHZTZ2WolA==} + parseurl@1.3.3: resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==} engines: {node: '>= 0.8'} @@ -4145,6 +4356,10 @@ packages: sax@1.4.1: resolution: {integrity: sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==} + saxes@6.0.0: + resolution: {integrity: sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==} + engines: {node: '>=v12.22.7'} + scheduler@0.27.0: resolution: {integrity: sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==} @@ -4380,10 +4595,17 @@ packages: resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} engines: {node: '>= 0.4'} + symbol-tree@3.2.4: + resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==} + synckit@0.11.11: resolution: {integrity: sha512-MeQTA1r0litLUf0Rp/iisCaL8761lKAZHaimlbGK4j0HysC4PLfqygQj9srcs0m2RdtDYnF8UuYyKpbjHYp7Jw==} engines: {node: ^14.18.0 || >=16.0.0} + tapable@2.3.0: + resolution: {integrity: sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg==} + engines: {node: '>=6'} + temp-dir@2.0.0: resolution: {integrity: sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg==} engines: {node: '>=8'} @@ -4420,6 +4642,13 @@ packages: resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==} engines: {node: '>=12.0.0'} + tldts-core@7.0.17: + resolution: {integrity: sha512-DieYoGrP78PWKsrXr8MZwtQ7GLCUeLxihtjC1jZsW1DnvSMdKPitJSe8OSYDM2u5H6g3kWJZpePqkp43TfLh0g==} + + tldts@7.0.17: + resolution: {integrity: sha512-Y1KQBgDd/NUc+LfOtKS6mNsC9CCaH+m2P1RoIZy7RAPo3C3/t8X45+zgut31cRZtZ3xKPjfn3TkGTrctC2TQIQ==} + hasBin: true + to-regex-range@5.0.1: resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} engines: {node: '>=8.0'} @@ -4435,9 +4664,17 @@ packages: toml@3.0.0: resolution: {integrity: sha512-y/mWCZinnvxjTKYhJ+pYxwD0mRLVvOtdS2Awbgxln6iEnt4rk0yBxeSBHkGJcPucRiG0e55mwWp+g/05rsrd6w==} + tough-cookie@6.0.0: + resolution: {integrity: sha512-kXuRi1mtaKMrsLUxz3sQYvVl37B0Ns6MzfrtV5DvJceE9bPyspOqk9xxv7XbZWcfLWbFmm997vl83qUWVJA64w==} + engines: {node: '>=16'} + tr46@1.0.1: resolution: {integrity: sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==} + tr46@6.0.0: + resolution: {integrity: sha512-bLVMLPtstlZ4iMQHpFHTR7GAGj2jxi8Dg0s2h2MafAE4uSWF98FC/3MomU51iQAMf8/qDUbKWf5GxuvvVcXEhw==} + engines: {node: '>=20'} + trim-lines@3.0.1: resolution: {integrity: sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==} @@ -4633,9 +4870,17 @@ packages: vscode-uri@3.1.0: resolution: {integrity: sha512-/BpdSx+yCQGnCvecbyXdxHDkuk55/G3xwnC0GqY4gmQ3j+A+g8kzzgB4Nk/SINjqn6+waqw3EgbVF2QKExkRxQ==} + w3c-xmlserializer@5.0.0: + resolution: {integrity: sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==} + engines: {node: '>=18'} + warning@4.0.3: resolution: {integrity: sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w==} + watchpack@2.4.4: + resolution: {integrity: sha512-c5EGNOiyxxV5qmTtAB7rbiXxi1ooX1pQKMLX/MIabJjRA0SJBQOjKF+KSVfHkr9U1cADPon0mRiVe/riyaiDUA==} + engines: {node: '>=10.13.0'} + web-streams-polyfill@4.2.0: resolution: {integrity: sha512-0rYDzGOh9EZpig92umN5g5D/9A1Kff7k0/mzPSSCY8jEQeYkgRMoY7LhbXtUCWzLCMX0TUE9aoHkjFNB7D9pfA==} engines: {node: '>= 8'} @@ -4649,9 +4894,39 @@ packages: webidl-conversions@4.0.2: resolution: {integrity: sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==} + webidl-conversions@8.0.0: + resolution: {integrity: sha512-n4W4YFyz5JzOfQeA8oN7dUYpR+MBP3PIUsn2jLjWXwK5ASUzt0Jc/A5sAUZoCYFJRGF0FBKJ+1JjN43rNdsQzA==} + engines: {node: '>=20'} + webpack-sources@1.4.3: resolution: {integrity: sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==} + webpack-sources@3.3.3: + resolution: {integrity: sha512-yd1RBzSGanHkitROoPFd6qsrxt+oFhg/129YzheDGqeustzX0vTZJZsSsQjVQC4yzBQ56K55XU8gaNCtIzOnTg==} + engines: {node: '>=10.13.0'} + + webpack@5.102.1: + resolution: {integrity: sha512-7h/weGm9d/ywQ6qzJ+Xy+r9n/3qgp/thalBbpOi5i223dPXKi04IBtqPN9nTd+jBc7QKfvDbaBnFipYp4sJAUQ==} + engines: {node: '>=10.13.0'} + hasBin: true + peerDependencies: + webpack-cli: '*' + peerDependenciesMeta: + webpack-cli: + optional: true + + whatwg-encoding@3.1.1: + resolution: {integrity: sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==} + engines: {node: '>=18'} + + whatwg-mimetype@4.0.0: + resolution: {integrity: sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==} + engines: {node: '>=18'} + + whatwg-url@15.1.0: + resolution: {integrity: sha512-2ytDk0kiEj/yu90JOAp44PVPUkO9+jVhyf+SybKlRHSDlvOOZhdPIrr7xTH64l4WixO2cP+wQIcgujkGBPPz6g==} + engines: {node: '>=20'} + whatwg-url@7.1.0: resolution: {integrity: sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==} @@ -4744,10 +5019,29 @@ packages: wrappy@1.0.2: resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + ws@8.18.3: + resolution: {integrity: sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==} + engines: {node: '>=10.0.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: '>=5.0.2' + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + xdg-basedir@5.1.0: resolution: {integrity: sha512-GCPAHLvrIH13+c0SuacwvRYj2SxJXQ4kaVTT5xgL3kPrz56XxkF21IGhjSE1+W0aw7gpBWRGXLCPnPby6lSpmQ==} engines: {node: '>=12'} + xml-name-validator@5.0.0: + resolution: {integrity: sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg==} + engines: {node: '>=18'} + + xmlchars@2.2.0: + resolution: {integrity: sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==} + yallist@3.1.1: resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} @@ -4768,6 +5062,8 @@ packages: snapshots: + '@acemir/cssom@0.9.23': {} + '@apideck/better-ajv-errors@0.3.6(ajv@8.17.1)': dependencies: ajv: 8.17.1 @@ -4775,6 +5071,24 @@ snapshots: jsonpointer: 5.0.1 leven: 3.1.0 + '@asamuzakjp/css-color@4.0.5': + dependencies: + '@csstools/css-calc': 2.1.4(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4) + '@csstools/css-color-parser': 3.1.0(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4) + '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4) + '@csstools/css-tokenizer': 3.0.4 + lru-cache: 11.2.2 + + '@asamuzakjp/dom-selector@6.7.4': + dependencies: + '@asamuzakjp/nwsapi': 2.3.9 + bidi-js: 1.0.3 + css-tree: 3.1.0 + is-potential-custom-element-name: 1.0.1 + lru-cache: 11.2.2 + + '@asamuzakjp/nwsapi@2.3.9': {} + '@babel/code-frame@7.27.1': dependencies: '@babel/helper-validator-identifier': 7.27.1 @@ -5726,6 +6040,28 @@ snapshots: '@cspell/url@9.2.1': {} + '@csstools/color-helpers@5.1.0': {} + + '@csstools/css-calc@2.1.4(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4)': + dependencies: + '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4) + '@csstools/css-tokenizer': 3.0.4 + + '@csstools/css-color-parser@3.1.0(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4)': + dependencies: + '@csstools/color-helpers': 5.1.0 + '@csstools/css-calc': 2.1.4(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4) + '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4) + '@csstools/css-tokenizer': 3.0.4 + + '@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4)': + dependencies: + '@csstools/css-tokenizer': 3.0.4 + + '@csstools/css-syntax-patches-for-csstree@1.0.16': {} + + '@csstools/css-tokenizer@3.0.4': {} + '@editorjs/caret@1.0.3': dependencies: '@editorjs/dom': 1.0.1 @@ -5957,10 +6293,12 @@ snapshots: transitivePeerDependencies: - supports-color - '@mdx-js/loader@3.1.1': + '@mdx-js/loader@3.1.1(webpack@5.102.1)': dependencies: '@mdx-js/mdx': 3.1.1 source-map: 0.7.6 + optionalDependencies: + webpack: 5.102.1 transitivePeerDependencies: - supports-color @@ -6015,11 +6353,11 @@ snapshots: dependencies: fast-glob: 3.3.1 - '@next/mdx@15.5.4(@mdx-js/loader@3.1.1)(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@19.2.0))': + '@next/mdx@15.5.4(@mdx-js/loader@3.1.1(webpack@5.102.1))(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@19.2.0))': dependencies: source-map: 0.7.6 optionalDependencies: - '@mdx-js/loader': 3.1.1 + '@mdx-js/loader': 3.1.1(webpack@5.102.1) '@mdx-js/react': 3.1.1(@types/react@19.2.2)(react@19.2.0) '@next/swc-darwin-arm64@15.5.4': @@ -6294,6 +6632,16 @@ snapshots: '@types/eslint-config-prettier@6.11.3': {} + '@types/eslint-scope@3.7.7': + dependencies: + '@types/eslint': 9.6.1 + '@types/estree': 1.0.8 + + '@types/eslint@9.6.1': + dependencies: + '@types/estree': 1.0.8 + '@types/json-schema': 7.0.15 + '@types/estree-jsx@1.0.5': dependencies: '@types/estree': 1.0.8 @@ -6604,19 +6952,105 @@ snapshots: '@unrs/resolver-binding-win32-x64-msvc@1.11.1': optional: true + '@webassemblyjs/ast@1.14.1': + dependencies: + '@webassemblyjs/helper-numbers': 1.13.2 + '@webassemblyjs/helper-wasm-bytecode': 1.13.2 + + '@webassemblyjs/floating-point-hex-parser@1.13.2': {} + + '@webassemblyjs/helper-api-error@1.13.2': {} + + '@webassemblyjs/helper-buffer@1.14.1': {} + + '@webassemblyjs/helper-numbers@1.13.2': + dependencies: + '@webassemblyjs/floating-point-hex-parser': 1.13.2 + '@webassemblyjs/helper-api-error': 1.13.2 + '@xtuc/long': 4.2.2 + + '@webassemblyjs/helper-wasm-bytecode@1.13.2': {} + + '@webassemblyjs/helper-wasm-section@1.14.1': + dependencies: + '@webassemblyjs/ast': 1.14.1 + '@webassemblyjs/helper-buffer': 1.14.1 + '@webassemblyjs/helper-wasm-bytecode': 1.13.2 + '@webassemblyjs/wasm-gen': 1.14.1 + + '@webassemblyjs/ieee754@1.13.2': + dependencies: + '@xtuc/ieee754': 1.2.0 + + '@webassemblyjs/leb128@1.13.2': + dependencies: + '@xtuc/long': 4.2.2 + + '@webassemblyjs/utf8@1.13.2': {} + + '@webassemblyjs/wasm-edit@1.14.1': + dependencies: + '@webassemblyjs/ast': 1.14.1 + '@webassemblyjs/helper-buffer': 1.14.1 + '@webassemblyjs/helper-wasm-bytecode': 1.13.2 + '@webassemblyjs/helper-wasm-section': 1.14.1 + '@webassemblyjs/wasm-gen': 1.14.1 + '@webassemblyjs/wasm-opt': 1.14.1 + '@webassemblyjs/wasm-parser': 1.14.1 + '@webassemblyjs/wast-printer': 1.14.1 + + '@webassemblyjs/wasm-gen@1.14.1': + dependencies: + '@webassemblyjs/ast': 1.14.1 + '@webassemblyjs/helper-wasm-bytecode': 1.13.2 + '@webassemblyjs/ieee754': 1.13.2 + '@webassemblyjs/leb128': 1.13.2 + '@webassemblyjs/utf8': 1.13.2 + + '@webassemblyjs/wasm-opt@1.14.1': + dependencies: + '@webassemblyjs/ast': 1.14.1 + '@webassemblyjs/helper-buffer': 1.14.1 + '@webassemblyjs/wasm-gen': 1.14.1 + '@webassemblyjs/wasm-parser': 1.14.1 + + '@webassemblyjs/wasm-parser@1.14.1': + dependencies: + '@webassemblyjs/ast': 1.14.1 + '@webassemblyjs/helper-api-error': 1.13.2 + '@webassemblyjs/helper-wasm-bytecode': 1.13.2 + '@webassemblyjs/ieee754': 1.13.2 + '@webassemblyjs/leb128': 1.13.2 + '@webassemblyjs/utf8': 1.13.2 + + '@webassemblyjs/wast-printer@1.14.1': + dependencies: + '@webassemblyjs/ast': 1.14.1 + '@xtuc/long': 4.2.2 + + '@xtuc/ieee754@1.2.0': {} + + '@xtuc/long@4.2.2': {} + accepts@1.3.8: dependencies: mime-types: 2.1.35 negotiator: 0.6.3 + acorn-import-phases@1.0.4(acorn@8.15.0): + dependencies: + acorn: 8.15.0 + acorn-jsx@5.3.2(acorn@8.15.0): dependencies: acorn: 8.15.0 acorn@8.15.0: {} - ajv-formats@2.1.1: - dependencies: + agent-base@7.1.4: {} + + ajv-formats@2.1.1(ajv@8.17.1): + optionalDependencies: ajv: 8.17.1 ajv-keywords@3.5.2(ajv@6.12.6): @@ -6753,13 +7187,14 @@ snapshots: axobject-query@4.1.0: {} - babel-loader@8.4.1(@babel/core@7.28.4): + babel-loader@8.4.1(@babel/core@7.28.4)(webpack@5.102.1): dependencies: '@babel/core': 7.28.4 find-cache-dir: 3.3.2 loader-utils: 2.0.4 make-dir: 3.1.0 schema-utils: 2.7.1 + webpack: 5.102.1 babel-plugin-polyfill-corejs2@0.4.14(@babel/core@7.28.4): dependencies: @@ -6793,6 +7228,10 @@ snapshots: baseline-browser-mapping@2.8.16: {} + bidi-js@1.0.3: + dependencies: + require-from-string: 2.0.2 + big.js@5.2.2: {} brace-expansion@1.1.12: @@ -6866,11 +7305,14 @@ snapshots: dependencies: readdirp: 4.1.2 + chrome-trace-event@1.0.4: {} + classnames@2.5.1: {} - clean-webpack-plugin@4.0.0: + clean-webpack-plugin@4.0.0(webpack@5.102.1): dependencies: del: 4.1.1 + webpack: 5.102.1 clear-module@4.1.2: dependencies: @@ -7037,10 +7479,26 @@ snapshots: dependencies: utrie: 1.0.2 + css-tree@3.1.0: + dependencies: + mdn-data: 2.12.2 + source-map-js: 1.2.1 + + cssstyle@5.3.3: + dependencies: + '@asamuzakjp/css-color': 4.0.5 + '@csstools/css-syntax-patches-for-csstree': 1.0.16 + css-tree: 3.1.0 + csstype@3.1.3: {} damerau-levenshtein@1.0.8: {} + data-urls@6.0.0: + dependencies: + whatwg-mimetype: 4.0.0 + whatwg-url: 15.1.0 + data-view-buffer@1.0.2: dependencies: call-bound: 1.0.4 @@ -7067,6 +7525,8 @@ snapshots: dependencies: ms: 2.1.3 + decimal.js@10.6.0: {} + decode-named-character-reference@1.2.0: dependencies: character-entities: 2.0.2 @@ -7142,12 +7602,12 @@ snapshots: dependencies: safe-buffer: 5.2.1 - echarts-jsx@0.5.4(react@19.2.0)(typescript@5.9.3): + echarts-jsx@0.5.4(element-internals-polyfill@3.0.2)(react@19.2.0)(typescript@5.9.3): dependencies: echarts: 5.6.0 lodash: 4.17.21 react: 19.2.0 - web-utility: 4.6.2(typescript@5.9.3) + web-utility: 4.6.2(element-internals-polyfill@3.0.2)(typescript@5.9.3) transitivePeerDependencies: - element-internals-polyfill - typescript @@ -7159,7 +7619,7 @@ snapshots: editorjs-html@4.0.5: {} - edkit@1.2.7(typescript@5.9.3): + edkit@1.2.7(element-internals-polyfill@3.0.2)(typescript@5.9.3): dependencies: '@swc/helpers': 0.5.17 '@types/turndown': 5.0.5 @@ -7168,7 +7628,7 @@ snapshots: regenerator-runtime: 0.14.1 turndown: 7.2.1 turndown-plugin-gfm: 1.0.2 - web-utility: 4.6.2(typescript@5.9.3) + web-utility: 4.6.2(element-internals-polyfill@3.0.2)(typescript@5.9.3) transitivePeerDependencies: - element-internals-polyfill - typescript @@ -7181,6 +7641,8 @@ snapshots: electron-to-chromium@1.5.234: {} + element-internals-polyfill@3.0.2: {} + emoji-regex@10.5.0: {} emoji-regex@9.2.2: {} @@ -7189,6 +7651,13 @@ snapshots: encodeurl@2.0.0: {} + enhanced-resolve@5.18.3: + dependencies: + graceful-fs: 4.2.11 + tapable: 2.3.0 + + entities@6.0.1: {} + env-paths@3.0.0: {} environment@1.1.0: {} @@ -7278,6 +7747,8 @@ snapshots: iterator.prototype: 1.1.5 safe-array-concat: 1.1.3 + es-module-lexer@1.7.0: {} + es-object-atoms@1.1.1: dependencies: es-errors: 1.3.0 @@ -7457,6 +7928,11 @@ snapshots: dependencies: eslint: 9.37.0(jiti@2.6.1) + eslint-scope@5.1.1: + dependencies: + esrecurse: 4.3.0 + estraverse: 4.3.0 + eslint-scope@8.4.0: dependencies: esrecurse: 4.3.0 @@ -7524,6 +8000,8 @@ snapshots: dependencies: estraverse: 5.3.0 + estraverse@4.3.0: {} + estraverse@5.3.0: {} estree-util-attach-comments@3.0.0: @@ -7569,6 +8047,8 @@ snapshots: eventemitter3@5.0.1: {} + events@3.3.0: {} + extend@3.0.2: {} fast-deep-equal@3.1.3: {} @@ -7734,6 +8214,8 @@ snapshots: dependencies: is-glob: 4.0.3 + glob-to-regexp@0.4.1: {} + glob@7.2.3: dependencies: fs.realpath: 1.0.0 @@ -7846,6 +8328,10 @@ snapshots: dependencies: '@types/hast': 3.0.4 + html-encoding-sniffer@4.0.0: + dependencies: + whatwg-encoding: 3.1.1 + html2canvas@1.4.1: dependencies: css-line-break: 2.1.0 @@ -7872,6 +8358,20 @@ snapshots: statuses: 2.0.1 toidentifier: 1.0.1 + http-proxy-agent@7.0.2: + dependencies: + agent-base: 7.1.4 + debug: 4.4.3 + transitivePeerDependencies: + - supports-color + + https-proxy-agent@7.0.6: + dependencies: + agent-base: 7.1.4 + debug: 4.4.3 + transitivePeerDependencies: + - supports-color + husky@9.1.7: {} iconv-lite@0.4.24: @@ -7881,13 +8381,12 @@ snapshots: iconv-lite@0.6.3: dependencies: safer-buffer: 2.1.2 - optional: true idb-keyval@6.2.2: {} idb@7.1.1: {} - idea-react@2.0.0-rc.13(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react-is@16.13.1)(react@19.2.0)(typescript@5.9.3): + idea-react@2.0.0-rc.13(@types/react@19.2.2)(element-internals-polyfill@3.0.2)(react-dom@19.2.0(react@19.2.0))(react-is@16.13.1)(react@19.2.0)(typescript@5.9.3): dependencies: '@editorjs/editorjs': 2.31.0 '@editorjs/paragraph': 2.11.7 @@ -7900,14 +8399,14 @@ snapshots: lodash: 4.17.21 mobx: 6.15.0 mobx-react: 9.2.1(mobx@6.15.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - mobx-react-helper: 0.5.1(mobx@6.15.0)(react@19.2.0)(typescript@5.9.3) + mobx-react-helper: 0.5.1(element-internals-polyfill@3.0.2)(mobx@6.15.0)(react@19.2.0)(typescript@5.9.3) prismjs: 1.30.0 react: 19.2.0 react-bootstrap: 2.10.10(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) react-dom: 19.2.0(react@19.2.0) react-editor-js: 2.1.0(@editorjs/editorjs@2.31.0)(@editorjs/paragraph@2.11.7)(react@19.2.0) react-element-to-jsx-string: 17.0.1(react-dom@19.2.0(react@19.2.0))(react-is@16.13.1)(react@19.2.0) - web-utility: 4.6.2(typescript@5.9.3) + web-utility: 4.6.2(element-internals-polyfill@3.0.2)(typescript@5.9.3) transitivePeerDependencies: - '@types/react' - element-internals-polyfill @@ -8068,6 +8567,8 @@ snapshots: is-plain-object@5.0.0: {} + is-potential-custom-element-name@1.0.1: {} + is-regex@1.2.1: dependencies: call-bound: 1.0.4 @@ -8158,10 +8659,39 @@ snapshots: dependencies: argparse: 2.0.1 + jsdom@27.2.0: + dependencies: + '@acemir/cssom': 0.9.23 + '@asamuzakjp/dom-selector': 6.7.4 + cssstyle: 5.3.3 + data-urls: 6.0.0 + decimal.js: 10.6.0 + html-encoding-sniffer: 4.0.0 + http-proxy-agent: 7.0.2 + https-proxy-agent: 7.0.6 + is-potential-custom-element-name: 1.0.1 + parse5: 8.0.0 + saxes: 6.0.0 + symbol-tree: 3.2.4 + tough-cookie: 6.0.0 + w3c-xmlserializer: 5.0.0 + webidl-conversions: 8.0.0 + whatwg-encoding: 3.1.1 + whatwg-mimetype: 4.0.0 + whatwg-url: 15.1.0 + ws: 8.18.3 + xml-name-validator: 5.0.0 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + jsesc@3.1.0: {} json-buffer@3.0.1: {} + json-parse-even-better-errors@2.3.1: {} + json-schema-traverse@0.4.1: {} json-schema-traverse@1.0.0: {} @@ -8248,13 +8778,14 @@ snapshots: type-is: 2.0.1 vary: 1.1.2 - koajax@3.1.2(core-js@3.46.0)(typescript@5.9.3): + koajax@3.1.2(core-js@3.46.0)(element-internals-polyfill@3.0.2)(jsdom@27.2.0)(typescript@5.9.3): dependencies: '@swc/helpers': 0.5.17 core-js: 3.46.0 + jsdom: 27.2.0 regenerator-runtime: 0.14.1 web-streams-polyfill: 4.2.0 - web-utility: 4.6.2(typescript@5.9.3) + web-utility: 4.6.2(element-internals-polyfill@3.0.2)(typescript@5.9.3) transitivePeerDependencies: - element-internals-polyfill - typescript @@ -8267,9 +8798,11 @@ snapshots: leaflet@1.9.4: {} - less-loader@12.3.0(less@4.4.2): + less-loader@12.3.0(less@4.4.2)(webpack@5.102.1): dependencies: less: 4.4.2 + optionalDependencies: + webpack: 5.102.1 less@4.4.2: dependencies: @@ -8315,6 +8848,8 @@ snapshots: rfdc: 1.4.1 wrap-ansi: 9.0.2 + loader-runner@4.3.1: {} + loader-utils@2.0.4: dependencies: big.js: 5.2.2 @@ -8369,6 +8904,8 @@ snapshots: dependencies: js-tokens: 4.0.0 + lru-cache@11.2.2: {} + lru-cache@5.1.1: dependencies: yallist: 3.1.1 @@ -8505,6 +9042,8 @@ snapshots: dependencies: '@types/mdast': 4.0.4 + mdn-data@2.12.2: {} + media-typer@0.3.0: {} media-typer@1.1.0: {} @@ -8768,57 +9307,57 @@ snapshots: minimist@1.2.8: {} - mobx-github@0.6.0(core-js@3.46.0)(typescript@5.9.3): + mobx-github@0.6.0(core-js@3.46.0)(element-internals-polyfill@3.0.2)(jsdom@27.2.0)(typescript@5.9.3): dependencies: '@octokit/openapi-types': 26.0.0 '@swc/helpers': 0.5.17 '@types/lodash': 4.17.20 - koajax: 3.1.2(core-js@3.46.0)(typescript@5.9.3) + koajax: 3.1.2(core-js@3.46.0)(element-internals-polyfill@3.0.2)(jsdom@27.2.0)(typescript@5.9.3) lodash: 4.17.21 mobx: 6.15.0 - mobx-restful: 2.1.3(core-js@3.46.0)(mobx@6.15.0)(typescript@5.9.3) - web-utility: 4.6.2(typescript@5.9.3) + mobx-restful: 2.1.3(core-js@3.46.0)(element-internals-polyfill@3.0.2)(jsdom@27.2.0)(mobx@6.15.0)(typescript@5.9.3) + web-utility: 4.6.2(element-internals-polyfill@3.0.2)(typescript@5.9.3) transitivePeerDependencies: - core-js - element-internals-polyfill - jsdom - typescript - mobx-i18n@0.7.2(mobx@6.15.0)(typescript@5.9.3): + mobx-i18n@0.7.2(element-internals-polyfill@3.0.2)(mobx@6.15.0)(typescript@5.9.3): dependencies: '@swc/helpers': 0.5.17 '@types/node': 22.18.10 mobx: 6.15.0 regenerator-runtime: 0.14.1 - web-utility: 4.6.2(typescript@5.9.3) + web-utility: 4.6.2(element-internals-polyfill@3.0.2)(typescript@5.9.3) transitivePeerDependencies: - element-internals-polyfill - typescript - mobx-lark@2.4.2(core-js@3.46.0)(react@19.2.0)(typescript@5.9.3): + mobx-lark@2.4.2(core-js@3.46.0)(element-internals-polyfill@3.0.2)(jsdom@27.2.0)(react@19.2.0)(typescript@5.9.3): dependencies: '@swc/helpers': 0.5.17 '@types/react': 19.2.2 - koajax: 3.1.2(core-js@3.46.0)(typescript@5.9.3) + koajax: 3.1.2(core-js@3.46.0)(element-internals-polyfill@3.0.2)(jsdom@27.2.0)(typescript@5.9.3) lodash.memoize: 4.1.2 mobx: 6.15.0 - mobx-restful: 2.1.3(core-js@3.46.0)(mobx@6.15.0)(typescript@5.9.3) + mobx-restful: 2.1.3(core-js@3.46.0)(element-internals-polyfill@3.0.2)(jsdom@27.2.0)(mobx@6.15.0)(typescript@5.9.3) react: 19.2.0 regenerator-runtime: 0.14.1 - web-utility: 4.6.2(typescript@5.9.3) + web-utility: 4.6.2(element-internals-polyfill@3.0.2)(typescript@5.9.3) transitivePeerDependencies: - core-js - element-internals-polyfill - jsdom - typescript - mobx-react-helper@0.5.1(mobx@6.15.0)(react@19.2.0)(typescript@5.9.3): + mobx-react-helper@0.5.1(element-internals-polyfill@3.0.2)(mobx@6.15.0)(react@19.2.0)(typescript@5.9.3): dependencies: '@swc/helpers': 0.5.17 lodash.isequalwith: 4.4.0 mobx: 6.15.0 react: 19.2.0 - web-utility: 4.6.2(typescript@5.9.3) + web-utility: 4.6.2(element-internals-polyfill@3.0.2)(typescript@5.9.3) transitivePeerDependencies: - element-internals-polyfill - typescript @@ -8839,21 +9378,21 @@ snapshots: optionalDependencies: react-dom: 19.2.0(react@19.2.0) - mobx-restful-table@2.5.4(@types/react@19.2.2)(core-js@3.46.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3): + mobx-restful-table@2.5.4(@types/react@19.2.2)(core-js@3.46.0)(element-internals-polyfill@3.0.2)(jsdom@27.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3): dependencies: '@swc/helpers': 0.5.17 classnames: 2.5.1 lodash: 4.17.21 mobx: 6.15.0 - mobx-i18n: 0.7.2(mobx@6.15.0)(typescript@5.9.3) + mobx-i18n: 0.7.2(element-internals-polyfill@3.0.2)(mobx@6.15.0)(typescript@5.9.3) mobx-react: 9.2.1(mobx@6.15.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - mobx-react-helper: 0.5.1(mobx@6.15.0)(react@19.2.0)(typescript@5.9.3) - mobx-restful: 2.1.3(core-js@3.46.0)(mobx@6.15.0)(typescript@5.9.3) + mobx-react-helper: 0.5.1(element-internals-polyfill@3.0.2)(mobx@6.15.0)(react@19.2.0)(typescript@5.9.3) + mobx-restful: 2.1.3(core-js@3.46.0)(element-internals-polyfill@3.0.2)(jsdom@27.2.0)(mobx@6.15.0)(typescript@5.9.3) react: 19.2.0 react-bootstrap: 2.10.10(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - react-bootstrap-editor: 2.1.1(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3) + react-bootstrap-editor: 2.1.1(element-internals-polyfill@3.0.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3) regenerator-runtime: 0.14.1 - web-utility: 4.6.2(typescript@5.9.3) + web-utility: 4.6.2(element-internals-polyfill@3.0.2)(typescript@5.9.3) transitivePeerDependencies: - '@types/react' - core-js @@ -8863,30 +9402,30 @@ snapshots: - react-native - typescript - mobx-restful@2.1.3(core-js@3.46.0)(mobx@6.15.0)(typescript@5.9.3): + mobx-restful@2.1.3(core-js@3.46.0)(element-internals-polyfill@3.0.2)(jsdom@27.2.0)(mobx@6.15.0)(typescript@5.9.3): dependencies: '@swc/helpers': 0.5.17 idb-keyval: 6.2.2 - koajax: 3.1.2(core-js@3.46.0)(typescript@5.9.3) + koajax: 3.1.2(core-js@3.46.0)(element-internals-polyfill@3.0.2)(jsdom@27.2.0)(typescript@5.9.3) mobx: 6.15.0 regenerator-runtime: 0.14.1 - web-utility: 4.6.2(typescript@5.9.3) + web-utility: 4.6.2(element-internals-polyfill@3.0.2)(typescript@5.9.3) transitivePeerDependencies: - core-js - element-internals-polyfill - jsdom - typescript - mobx-strapi@0.8.1(core-js@3.46.0)(typescript@5.9.3): + mobx-strapi@0.8.1(core-js@3.46.0)(element-internals-polyfill@3.0.2)(jsdom@27.2.0)(typescript@5.9.3): dependencies: '@swc/helpers': 0.5.17 idb-keyval: 6.2.2 - koajax: 3.1.2(core-js@3.46.0)(typescript@5.9.3) + koajax: 3.1.2(core-js@3.46.0)(element-internals-polyfill@3.0.2)(jsdom@27.2.0)(typescript@5.9.3) mobx: 6.15.0 - mobx-restful: 2.1.3(core-js@3.46.0)(mobx@6.15.0)(typescript@5.9.3) + mobx-restful: 2.1.3(core-js@3.46.0)(element-internals-polyfill@3.0.2)(jsdom@27.2.0)(mobx@6.15.0)(typescript@5.9.3) qs: 6.14.0 regenerator-runtime: 0.14.1 - web-utility: 4.6.2(typescript@5.9.3) + web-utility: 4.6.2(element-internals-polyfill@3.0.2)(typescript@5.9.3) transitivePeerDependencies: - core-js - element-internals-polyfill @@ -8913,14 +9452,16 @@ snapshots: negotiator@0.6.3: {} - next-pwa@5.6.0(@babel/core@7.28.4)(next@15.5.4(@babel/core@7.28.4)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(sass@1.93.2)): + neo-async@2.6.2: {} + + next-pwa@5.6.0(@babel/core@7.28.4)(next@15.5.4(@babel/core@7.28.4)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(sass@1.93.2))(webpack@5.102.1): dependencies: - babel-loader: 8.4.1(@babel/core@7.28.4) - clean-webpack-plugin: 4.0.0 + babel-loader: 8.4.1(@babel/core@7.28.4)(webpack@5.102.1) + clean-webpack-plugin: 4.0.0(webpack@5.102.1) globby: 11.1.0 next: 15.5.4(@babel/core@7.28.4)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(sass@1.93.2) - terser-webpack-plugin: 5.3.14 - workbox-webpack-plugin: 6.6.0 + terser-webpack-plugin: 5.3.14(webpack@5.102.1) + workbox-webpack-plugin: 6.6.0(webpack@5.102.1) workbox-window: 6.6.0 transitivePeerDependencies: - '@babel/core' @@ -8931,7 +9472,7 @@ snapshots: - uglify-js - webpack - next-ssr-middleware@1.0.3(next@15.5.4(@babel/core@7.28.4)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(sass@1.93.2))(react@19.2.0)(typescript@5.9.3): + next-ssr-middleware@1.0.3(element-internals-polyfill@3.0.2)(next@15.5.4(@babel/core@7.28.4)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(sass@1.93.2))(react@19.2.0)(typescript@5.9.3): dependencies: '@koa/bodyparser': 6.0.0(koa@3.0.1) '@koa/router': 14.0.0 @@ -8944,17 +9485,17 @@ snapshots: next: 15.5.4(@babel/core@7.28.4)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(sass@1.93.2) react: 19.2.0 tslib: 2.8.1 - web-utility: 4.6.2(typescript@5.9.3) + web-utility: 4.6.2(element-internals-polyfill@3.0.2)(typescript@5.9.3) transitivePeerDependencies: - element-internals-polyfill - supports-color - typescript - next-with-less@3.0.1(less-loader@12.3.0(less@4.4.2))(less@4.4.2)(next@15.5.4(@babel/core@7.28.4)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(sass@1.93.2)): + next-with-less@3.0.1(less-loader@12.3.0(less@4.4.2)(webpack@5.102.1))(less@4.4.2)(next@15.5.4(@babel/core@7.28.4)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(sass@1.93.2)): dependencies: clone-deep: 4.0.1 less: 4.4.2 - less-loader: 12.3.0(less@4.4.2) + less-loader: 12.3.0(less@4.4.2)(webpack@5.102.1) next: 15.5.4(@babel/core@7.28.4)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(sass@1.93.2) next@15.5.4(@babel/core@7.28.4)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(sass@1.93.2): @@ -9040,19 +9581,19 @@ snapshots: dependencies: mimic-function: 5.0.1 - open-react-map@0.9.1(core-js@3.46.0)(mobx-react@9.2.1(mobx@6.15.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(mobx@6.15.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3): + open-react-map@0.9.1(core-js@3.46.0)(element-internals-polyfill@3.0.2)(jsdom@27.2.0)(mobx-react@9.2.1(mobx@6.15.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(mobx@6.15.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3): dependencies: '@swc/helpers': 0.5.17 '@types/leaflet': 1.9.21 - koajax: 3.1.2(core-js@3.46.0)(typescript@5.9.3) + koajax: 3.1.2(core-js@3.46.0)(element-internals-polyfill@3.0.2)(jsdom@27.2.0)(typescript@5.9.3) leaflet: 1.9.4 mobx: 6.15.0 mobx-react: 9.2.1(mobx@6.15.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - mobx-react-helper: 0.5.1(mobx@6.15.0)(react@19.2.0)(typescript@5.9.3) + mobx-react-helper: 0.5.1(element-internals-polyfill@3.0.2)(mobx@6.15.0)(react@19.2.0)(typescript@5.9.3) react: 19.2.0 react-dom: 19.2.0(react@19.2.0) react-leaflet: 5.0.0(leaflet@1.9.4)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - web-utility: 4.6.2(typescript@5.9.3) + web-utility: 4.6.2(element-internals-polyfill@3.0.2)(typescript@5.9.3) transitivePeerDependencies: - core-js - element-internals-polyfill @@ -9114,6 +9655,10 @@ snapshots: parse-node-version@1.0.1: {} + parse5@8.0.0: + dependencies: + entities: 6.0.1 + parseurl@1.3.3: {} path-exists@4.0.0: {} @@ -9221,16 +9766,16 @@ snapshots: iconv-lite: 0.4.24 unpipe: 1.0.0 - react-bootstrap-editor@2.1.1(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3): + react-bootstrap-editor@2.1.1(element-internals-polyfill@3.0.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3): dependencies: '@swc/helpers': 0.5.17 - edkit: 1.2.7(typescript@5.9.3) + edkit: 1.2.7(element-internals-polyfill@3.0.2)(typescript@5.9.3) mobx: 6.15.0 mobx-react: 9.2.1(mobx@6.15.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - mobx-react-helper: 0.5.1(mobx@6.15.0)(react@19.2.0)(typescript@5.9.3) + mobx-react-helper: 0.5.1(element-internals-polyfill@3.0.2)(mobx@6.15.0)(react@19.2.0)(typescript@5.9.3) react: 19.2.0 react-dom: 19.2.0(react@19.2.0) - web-utility: 4.6.2(typescript@5.9.3) + web-utility: 4.6.2(element-internals-polyfill@3.0.2)(typescript@5.9.3) transitivePeerDependencies: - element-internals-polyfill - react-native @@ -9515,6 +10060,10 @@ snapshots: sax@1.4.1: optional: true + saxes@6.0.0: + dependencies: + xmlchars: 2.2.0 + scheduler@0.27.0: {} schema-utils@2.7.1: @@ -9527,7 +10076,7 @@ snapshots: dependencies: '@types/json-schema': 7.0.15 ajv: 8.17.1 - ajv-formats: 2.1.1 + ajv-formats: 2.1.1(ajv@8.17.1) ajv-keywords: 5.1.0(ajv@8.17.1) semver@5.7.2: @@ -9795,10 +10344,14 @@ snapshots: supports-preserve-symlinks-flag@1.0.0: {} + symbol-tree@3.2.4: {} + synckit@0.11.11: dependencies: '@pkgr/core': 0.2.9 + tapable@2.3.0: {} + temp-dir@2.0.0: {} tempy@0.6.0: @@ -9808,13 +10361,14 @@ snapshots: type-fest: 0.16.0 unique-string: 2.0.0 - terser-webpack-plugin@5.3.14: + terser-webpack-plugin@5.3.14(webpack@5.102.1): dependencies: '@jridgewell/trace-mapping': 0.3.31 jest-worker: 27.5.1 schema-utils: 4.3.3 serialize-javascript: 6.0.2 terser: 5.44.0 + webpack: 5.102.1 terser@5.44.0: dependencies: @@ -9832,6 +10386,12 @@ snapshots: fdir: 6.5.0(picomatch@4.0.3) picomatch: 4.0.3 + tldts-core@7.0.17: {} + + tldts@7.0.17: + dependencies: + tldts-core: 7.0.17 + to-regex-range@5.0.1: dependencies: is-number: 7.0.0 @@ -9846,10 +10406,18 @@ snapshots: toml@3.0.0: {} + tough-cookie@6.0.0: + dependencies: + tldts: 7.0.17 + tr46@1.0.1: dependencies: punycode: 2.3.1 + tr46@6.0.0: + dependencies: + punycode: 2.3.1 + trim-lines@3.0.1: {} trough@2.2.0: {} @@ -10093,25 +10661,82 @@ snapshots: vscode-uri@3.1.0: {} + w3c-xmlserializer@5.0.0: + dependencies: + xml-name-validator: 5.0.0 + warning@4.0.3: dependencies: loose-envify: 1.4.0 + watchpack@2.4.4: + dependencies: + glob-to-regexp: 0.4.1 + graceful-fs: 4.2.11 + web-streams-polyfill@4.2.0: {} - web-utility@4.6.2(typescript@5.9.3): + web-utility@4.6.2(element-internals-polyfill@3.0.2)(typescript@5.9.3): dependencies: '@swc/helpers': 0.5.17 + element-internals-polyfill: 3.0.2 regenerator-runtime: 0.14.1 typescript: 5.9.3 webidl-conversions@4.0.2: {} + webidl-conversions@8.0.0: {} + webpack-sources@1.4.3: dependencies: source-list-map: 2.0.1 source-map: 0.6.1 + webpack-sources@3.3.3: {} + + webpack@5.102.1: + dependencies: + '@types/eslint-scope': 3.7.7 + '@types/estree': 1.0.8 + '@types/json-schema': 7.0.15 + '@webassemblyjs/ast': 1.14.1 + '@webassemblyjs/wasm-edit': 1.14.1 + '@webassemblyjs/wasm-parser': 1.14.1 + acorn: 8.15.0 + acorn-import-phases: 1.0.4(acorn@8.15.0) + browserslist: 4.26.3 + chrome-trace-event: 1.0.4 + enhanced-resolve: 5.18.3 + es-module-lexer: 1.7.0 + eslint-scope: 5.1.1 + events: 3.3.0 + glob-to-regexp: 0.4.1 + graceful-fs: 4.2.11 + json-parse-even-better-errors: 2.3.1 + loader-runner: 4.3.1 + mime-types: 2.1.35 + neo-async: 2.6.2 + schema-utils: 4.3.3 + tapable: 2.3.0 + terser-webpack-plugin: 5.3.14(webpack@5.102.1) + watchpack: 2.4.4 + webpack-sources: 3.3.3 + transitivePeerDependencies: + - '@swc/core' + - esbuild + - uglify-js + + whatwg-encoding@3.1.1: + dependencies: + iconv-lite: 0.6.3 + + whatwg-mimetype@4.0.0: {} + + whatwg-url@15.1.0: + dependencies: + tr46: 6.0.0 + webidl-conversions: 8.0.0 + whatwg-url@7.1.0: dependencies: lodash.sortby: 4.7.0 @@ -10273,11 +10898,12 @@ snapshots: workbox-sw@6.6.0: {} - workbox-webpack-plugin@6.6.0: + workbox-webpack-plugin@6.6.0(webpack@5.102.1): dependencies: fast-json-stable-stringify: 2.1.0 pretty-bytes: 5.6.0 upath: 1.2.0 + webpack: 5.102.1 webpack-sources: 1.4.3 workbox-build: 6.6.0 transitivePeerDependencies: @@ -10297,8 +10923,14 @@ snapshots: wrappy@1.0.2: {} + ws@8.18.3: {} + xdg-basedir@5.1.0: {} + xml-name-validator@5.0.0: {} + + xmlchars@2.2.0: {} + yallist@3.1.1: {} yaml@2.8.1: {} diff --git a/styles/Finance.module.scss b/styles/Finance.module.scss new file mode 100644 index 0000000..68fc1d2 --- /dev/null +++ b/styles/Finance.module.scss @@ -0,0 +1,163 @@ +.financePage { + padding-bottom: 4rem; +} + +.hero { + border: 1px solid rgba(0, 0, 0, 0.05); + border-radius: 32px; + background: linear-gradient(135deg, rgba(13, 110, 253, 0.08), rgba(25, 135, 84, 0.08)); + padding-right: clamp(1.5rem, 4vw, 3rem); + padding-left: clamp(1.5rem, 4vw, 3rem); +} + +.heroBadge { + letter-spacing: 0.2em; + text-transform: uppercase; +} + +.heroChip { + border-radius: 999px; + background: rgba(13, 110, 253, 0.08); + padding: 0.35rem 0.9rem; + font-weight: 600; + font-size: 0.9rem; +} + +.heroStats { + display: grid; + grid-template-columns: repeat(auto-fit, minmax(180px, 1fr)); + gap: 1rem; +} + +.heroStatCard { + box-shadow: 0 10px 30px rgba(15, 23, 42, 0.1); + border: 1px solid rgba(15, 23, 42, 0.05); + border-radius: 20px; + background: #fff; + padding: 1.5rem; +} + +.filterPanel { + box-shadow: 0 20px 60px rgba(15, 23, 42, 0.08); + border: 1px solid rgba(15, 23, 42, 0.05); + border-radius: 24px; + background: #fff; + padding: 2rem; +} + +.segmentedControl { + display: grid; + grid-template-columns: repeat(auto-fit, minmax(160px, 1fr)); + gap: 0.75rem; +} + +.segmentedButton { + transition: all 0.2s ease; + border: 1px solid rgba(15, 23, 42, 0.15); + border-radius: 16px; + background: #f5f7fb; + padding: 0.75rem 1rem; + font-weight: 600; + text-align: left; +} + +.segmentedButtonActive { + box-shadow: 0 10px 30px rgba(13, 110, 253, 0.15); + border-color: rgba(13, 110, 253, 0.5); + background: linear-gradient(135deg, rgba(13, 110, 253, 0.12), rgba(25, 135, 84, 0.12)); + color: #0d6efd; +} + +.listSection { + box-shadow: 0 20px 60px rgba(15, 23, 42, 0.08); + border: 1px solid rgba(15, 23, 42, 0.05); + border-radius: 24px; + background: #fff; + padding: 2rem; +} + +.emptyState { + border: 1px dashed rgba(15, 23, 42, 0.2); + border-radius: 20px; + background: rgba(248, 249, 250, 0.7); + padding: 2.5rem; + text-align: center; +} + +.educationSection { + border-radius: 28px; + background: rgba(13, 110, 253, 0.05); + padding: 2rem; +} + +.educationCard { + box-shadow: 0 10px 30px rgba(15, 23, 42, 0.06); + border: 1px solid rgba(15, 23, 42, 0.05); + border-radius: 20px; + background: #fff; + padding: 1.75rem; + height: 100%; +} + +.fundCard { + transition: + transform 0.2s ease, + box-shadow 0.2s ease; + box-shadow: 0 16px 40px rgba(15, 23, 42, 0.08); + border: 1px solid rgba(15, 23, 42, 0.08); + border-radius: 20px; +} + +.fundCard:hover { + transform: translateY(-4px); + box-shadow: 0 24px 60px rgba(15, 23, 42, 0.12); +} + +.fundCardHeader small { + line-height: 1.3; +} + +.metricRow { + gap: 1.5rem; +} + +.metricValue { + font-weight: 700; + font-size: 2rem; +} + +.sparkline { + width: 100%; + height: 80px; +} + +.sparkline svg { + width: 100%; + height: 100%; +} + +.sparklinePlaceholder { + border: 1px dashed rgba(15, 23, 42, 0.2); + border-radius: 12px; + padding: 1rem; + color: rgba(15, 23, 42, 0.6); + text-align: center; +} + +.tagBadge { + border: 1px solid rgba(15, 23, 42, 0.15); + border-radius: 999px; + font-weight: 500; +} + +.mutedText { + color: rgba(15, 23, 42, 0.6); +} + +.positiveText { + color: #198754; +} + +.negativeText { + color: #dc3545; +} diff --git a/types/finance.ts b/types/finance.ts new file mode 100644 index 0000000..1c1464a --- /dev/null +++ b/types/finance.ts @@ -0,0 +1,42 @@ +export type IndexFundCategory = 'broad' | 'sector' | 'theme'; + +export type IndexRiskLevel = 'conservative' | 'balanced' | 'aggressive'; + +export interface IndexFundDefinition { + /** + * AkShare 指数代码,形如 sh000300 / sz399006 + */ + symbol: string; + /** + * 页面展示名称,如「沪深 300」 + */ + displayName: string; + /** + * 页面描述/卖点 + */ + description?: string; + category: IndexFundCategory; + riskLevel: IndexRiskLevel; + tags?: string[]; +} + +export interface IndexHistoryPoint { + date: string; + value: number; +} + +export interface IndexFundSnapshot extends IndexFundDefinition { + latestValue: number | null; + dailyChangePct: number | null; + oneYearReturnPct: number | null; + maxDrawdownPct: number | null; + updatedAt: string | null; + /** + * 最近 N 天的点位序列,用于 sparkline + */ + sparkline: IndexHistoryPoint[]; + source: { + historyEndpoint: string; + }; + fallback?: boolean; +} From f8ca608e847bc689a1efb4d51730b1f645f3cf32 Mon Sep 17 00:00:00 2001 From: TechQuery Date: Mon, 17 Nov 2025 02:07:44 +0800 Subject: [PATCH 2/6] [fix] PNPM lock dismatch --- pnpm-lock.yaml | 798 +++++-------------------------------------------- 1 file changed, 83 insertions(+), 715 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 7017071..12e8de0 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1,7 +1,7 @@ lockfileVersion: '9.0' settings: - autoInstallPeers: true + autoInstallPeers: false excludeLinksFromLockfile: false overrides: @@ -17,31 +17,31 @@ importers: version: 14.0.0 '@mdx-js/loader': specifier: ^3.1.1 - version: 3.1.1(webpack@5.102.1) + version: 3.1.1 '@mdx-js/react': specifier: ^3.1.1 version: 3.1.1(@types/react@19.2.2)(react@19.2.0) '@next/mdx': specifier: ^15.5.4 - version: 15.5.4(@mdx-js/loader@3.1.1(webpack@5.102.1))(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@19.2.0)) + version: 15.5.4(@mdx-js/loader@3.1.1)(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@19.2.0)) core-js: specifier: ^3.46.0 version: 3.46.0 echarts-jsx: specifier: ^0.5.4 - version: 0.5.4(element-internals-polyfill@3.0.2)(react@19.2.0)(typescript@5.9.3) + version: 0.5.4(react@19.2.0)(typescript@5.9.3) file-type: specifier: ^21.0.0 version: 21.0.0 idea-react: specifier: ^2.0.0-rc.13 - version: 2.0.0-rc.13(@types/react@19.2.2)(element-internals-polyfill@3.0.2)(react-dom@19.2.0(react@19.2.0))(react-is@16.13.1)(react@19.2.0)(typescript@5.9.3) + version: 2.0.0-rc.13(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react-is@16.13.1)(react@19.2.0)(typescript@5.9.3) koa: specifier: ^3.0.1 version: 3.0.1 koajax: specifier: ^3.1.2 - version: 3.1.2(core-js@3.46.0)(element-internals-polyfill@3.0.2)(jsdom@27.2.0)(typescript@5.9.3) + version: 3.1.2(core-js@3.46.0)(typescript@5.9.3) license-filter: specifier: ^0.2.5 version: 0.2.5 @@ -56,40 +56,40 @@ importers: version: 6.15.0 mobx-github: specifier: ^0.6.0 - version: 0.6.0(core-js@3.46.0)(element-internals-polyfill@3.0.2)(jsdom@27.2.0)(typescript@5.9.3) + version: 0.6.0(core-js@3.46.0)(typescript@5.9.3) mobx-i18n: specifier: ^0.7.2 - version: 0.7.2(element-internals-polyfill@3.0.2)(mobx@6.15.0)(typescript@5.9.3) + version: 0.7.2(mobx@6.15.0)(typescript@5.9.3) mobx-lark: specifier: ^2.4.2 - version: 2.4.2(core-js@3.46.0)(element-internals-polyfill@3.0.2)(jsdom@27.2.0)(react@19.2.0)(typescript@5.9.3) + version: 2.4.2(core-js@3.46.0)(react@19.2.0)(typescript@5.9.3) mobx-react: specifier: ^9.2.1 version: 9.2.1(mobx@6.15.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) mobx-react-helper: specifier: ^0.5.1 - version: 0.5.1(element-internals-polyfill@3.0.2)(mobx@6.15.0)(react@19.2.0)(typescript@5.9.3) + version: 0.5.1(mobx@6.15.0)(react@19.2.0)(typescript@5.9.3) mobx-restful: specifier: ^2.1.3 - version: 2.1.3(core-js@3.46.0)(element-internals-polyfill@3.0.2)(jsdom@27.2.0)(mobx@6.15.0)(typescript@5.9.3) + version: 2.1.3(core-js@3.46.0)(mobx@6.15.0)(typescript@5.9.3) mobx-restful-table: specifier: ^2.5.4 - version: 2.5.4(@types/react@19.2.2)(core-js@3.46.0)(element-internals-polyfill@3.0.2)(jsdom@27.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3) + version: 2.5.4(@types/react@19.2.2)(core-js@3.46.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3) mobx-strapi: specifier: ^0.8.1 - version: 0.8.1(core-js@3.46.0)(element-internals-polyfill@3.0.2)(jsdom@27.2.0)(typescript@5.9.3) + version: 0.8.1(core-js@3.46.0)(typescript@5.9.3) next: specifier: ^15.5.4 version: 15.5.4(@babel/core@7.28.4)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(sass@1.93.2) next-pwa: specifier: ^5.6.0 - version: 5.6.0(@babel/core@7.28.4)(next@15.5.4(@babel/core@7.28.4)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(sass@1.93.2))(webpack@5.102.1) + version: 5.6.0(@babel/core@7.28.4)(next@15.5.4(@babel/core@7.28.4)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(sass@1.93.2)) next-ssr-middleware: specifier: ^1.0.3 - version: 1.0.3(element-internals-polyfill@3.0.2)(next@15.5.4(@babel/core@7.28.4)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(sass@1.93.2))(react@19.2.0)(typescript@5.9.3) + version: 1.0.3(next@15.5.4(@babel/core@7.28.4)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(sass@1.93.2))(react@19.2.0)(typescript@5.9.3) open-react-map: specifier: ^0.9.1 - version: 0.9.1(core-js@3.46.0)(element-internals-polyfill@3.0.2)(jsdom@27.2.0)(mobx-react@9.2.1(mobx@6.15.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(mobx@6.15.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3) + version: 0.9.1(core-js@3.46.0)(mobx-react@9.2.1(mobx@6.15.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(mobx@6.15.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3) react: specifier: ^19.2.0 version: 19.2.0 @@ -113,7 +113,7 @@ importers: version: 7.16.0 web-utility: specifier: ^4.6.2 - version: 4.6.2(element-internals-polyfill@3.0.2)(typescript@5.9.3) + version: 4.6.2(typescript@5.9.3) yaml: specifier: ^2.8.1 version: 2.8.1 @@ -192,13 +192,13 @@ importers: version: 4.4.2 less-loader: specifier: ^12.3.0 - version: 12.3.0(less@4.4.2)(webpack@5.102.1) + version: 12.3.0(less@4.4.2) lint-staged: specifier: ^16.2.4 version: 16.2.4 next-with-less: specifier: ^3.0.1 - version: 3.0.1(less-loader@12.3.0(less@4.4.2)(webpack@5.102.1))(less@4.4.2)(next@15.5.4(@babel/core@7.28.4)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(sass@1.93.2)) + version: 3.0.1(less-loader@12.3.0(less@4.4.2))(less@4.4.2)(next@15.5.4(@babel/core@7.28.4)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(sass@1.93.2)) prettier: specifier: ^3.6.2 version: 3.6.2 @@ -217,24 +217,12 @@ importers: packages: - '@acemir/cssom@0.9.23': - resolution: {integrity: sha512-2kJ1HxBKzPLbmhZpxBiTZggjtgCwKg1ma5RHShxvd6zgqhDEdEkzpiwe7jLkI2p2BrZvFCXIihdoMkl1H39VnA==} - '@apideck/better-ajv-errors@0.3.6': resolution: {integrity: sha512-P+ZygBLZtkp0qqOAJJVX4oX/sFo5JR3eBWwwuqHHhK0GIgQOKWrAfiAaWX0aArHkRWHMuggFEgAZNxVPwPZYaA==} engines: {node: '>=10'} peerDependencies: ajv: '>=8' - '@asamuzakjp/css-color@4.0.5': - resolution: {integrity: sha512-lMrXidNhPGsDjytDy11Vwlb6OIGrT3CmLg3VWNFyWkLWtijKl7xjvForlh8vuj0SHGjgl4qZEQzUmYTeQA2JFQ==} - - '@asamuzakjp/dom-selector@6.7.4': - resolution: {integrity: sha512-buQDjkm+wDPXd6c13534URWZqbz0RP5PAhXZ+LIoa5LgwInT9HVJvGIJivg75vi8I13CxDGdTnz+aY5YUJlIAA==} - - '@asamuzakjp/nwsapi@2.3.9': - resolution: {integrity: sha512-n8GuYSrI9bF7FFZ/SjhwevlHc8xaVlb/7HmHelnc/PZXBD2ZR49NnN9sMMuDdEGPeeRQ5d0hqlSlEpgCX3Wl0Q==} - '@babel/code-frame@7.27.1': resolution: {integrity: sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==} engines: {node: '>=6.9.0'} @@ -1020,38 +1008,6 @@ packages: resolution: {integrity: sha512-9EHCoGKtisPNsEdBQ28tKxKeBmiVS3D4j+AN8Yjr+Dmtu+YACKGWiMOddNZG2VejQNIdFx7FwzU00BGX68ELhA==} engines: {node: '>=20'} - '@csstools/color-helpers@5.1.0': - resolution: {integrity: sha512-S11EXWJyy0Mz5SYvRmY8nJYTFFd1LCNV+7cXyAgQtOOuzb4EsgfqDufL+9esx72/eLhsRdGZwaldu/h+E4t4BA==} - engines: {node: '>=18'} - - '@csstools/css-calc@2.1.4': - resolution: {integrity: sha512-3N8oaj+0juUw/1H3YwmDDJXCgTB1gKU6Hc/bB502u9zR0q2vd786XJH9QfrKIEgFlZmhZiq6epXl4rHqhzsIgQ==} - engines: {node: '>=18'} - peerDependencies: - '@csstools/css-parser-algorithms': ^3.0.5 - '@csstools/css-tokenizer': ^3.0.4 - - '@csstools/css-color-parser@3.1.0': - resolution: {integrity: sha512-nbtKwh3a6xNVIp/VRuXV64yTKnb1IjTAEEh3irzS+HkKjAOYLTGNb9pmVNntZ8iVBHcWDA2Dof0QtPgFI1BaTA==} - engines: {node: '>=18'} - peerDependencies: - '@csstools/css-parser-algorithms': ^3.0.5 - '@csstools/css-tokenizer': ^3.0.4 - - '@csstools/css-parser-algorithms@3.0.5': - resolution: {integrity: sha512-DaDeUkXZKjdGhgYaHNJTV9pV7Y9B3b644jCLs9Upc3VeNGg6LWARAT6O+Q+/COo+2gg/bM5rhpMAtf70WqfBdQ==} - engines: {node: '>=18'} - peerDependencies: - '@csstools/css-tokenizer': ^3.0.4 - - '@csstools/css-syntax-patches-for-csstree@1.0.16': - resolution: {integrity: sha512-2SpS4/UaWQaGpBINyG5ZuCHnUDeVByOhvbkARwfmnfxDvTaj80yOI1cD8Tw93ICV5Fx4fnyDKWQZI1CDtcWyUg==} - engines: {node: '>=18'} - - '@csstools/css-tokenizer@3.0.4': - resolution: {integrity: sha512-Vd/9EVDiu6PPJt9yAh6roZP6El1xHrdvIVGjyBsHR0RYwNHgL7FJPyIIW4fANJNG6FtyZfvlRPpFI4ZM/lubvw==} - engines: {node: '>=18'} - '@editorjs/caret@1.0.3': resolution: {integrity: sha512-VmgwQJZgL/LQjk049JunzRV1YCa0vDi+BNEpbDmr5cp3lGZllq9QQFO1eI71ZPzvFVn3vvhb+eOif4sAEyGgbw==} @@ -1630,12 +1586,6 @@ packages: '@types/eslint-config-prettier@6.11.3': resolution: {integrity: sha512-3wXCiM8croUnhg9LdtZUJQwNcQYGWxxdOWDjPe1ykCqJFPVpzAKfs/2dgSoCtAvdPeaponcWPI7mPcGGp9dkKQ==} - '@types/eslint-scope@3.7.7': - resolution: {integrity: sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==} - - '@types/eslint@9.6.1': - resolution: {integrity: sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==} - '@types/estree-jsx@1.0.5': resolution: {integrity: sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg==} @@ -1921,67 +1871,10 @@ packages: cpu: [x64] os: [win32] - '@webassemblyjs/ast@1.14.1': - resolution: {integrity: sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==} - - '@webassemblyjs/floating-point-hex-parser@1.13.2': - resolution: {integrity: sha512-6oXyTOzbKxGH4steLbLNOu71Oj+C8Lg34n6CqRvqfS2O71BxY6ByfMDRhBytzknj9yGUPVJ1qIKhRlAwO1AovA==} - - '@webassemblyjs/helper-api-error@1.13.2': - resolution: {integrity: sha512-U56GMYxy4ZQCbDZd6JuvvNV/WFildOjsaWD3Tzzvmw/mas3cXzRJPMjP83JqEsgSbyrmaGjBfDtV7KDXV9UzFQ==} - - '@webassemblyjs/helper-buffer@1.14.1': - resolution: {integrity: sha512-jyH7wtcHiKssDtFPRB+iQdxlDf96m0E39yb0k5uJVhFGleZFoNw1c4aeIcVUPPbXUVJ94wwnMOAqUHyzoEPVMA==} - - '@webassemblyjs/helper-numbers@1.13.2': - resolution: {integrity: sha512-FE8aCmS5Q6eQYcV3gI35O4J789wlQA+7JrqTTpJqn5emA4U2hvwJmvFRC0HODS+3Ye6WioDklgd6scJ3+PLnEA==} - - '@webassemblyjs/helper-wasm-bytecode@1.13.2': - resolution: {integrity: sha512-3QbLKy93F0EAIXLh0ogEVR6rOubA9AoZ+WRYhNbFyuB70j3dRdwH9g+qXhLAO0kiYGlg3TxDV+I4rQTr/YNXkA==} - - '@webassemblyjs/helper-wasm-section@1.14.1': - resolution: {integrity: sha512-ds5mXEqTJ6oxRoqjhWDU83OgzAYjwsCV8Lo/N+oRsNDmx/ZDpqalmrtgOMkHwxsG0iI//3BwWAErYRHtgn0dZw==} - - '@webassemblyjs/ieee754@1.13.2': - resolution: {integrity: sha512-4LtOzh58S/5lX4ITKxnAK2USuNEvpdVV9AlgGQb8rJDHaLeHciwG4zlGr0j/SNWlr7x3vO1lDEsuePvtcDNCkw==} - - '@webassemblyjs/leb128@1.13.2': - resolution: {integrity: sha512-Lde1oNoIdzVzdkNEAWZ1dZ5orIbff80YPdHx20mrHwHrVNNTjNr8E3xz9BdpcGqRQbAEa+fkrCb+fRFTl/6sQw==} - - '@webassemblyjs/utf8@1.13.2': - resolution: {integrity: sha512-3NQWGjKTASY1xV5m7Hr0iPeXD9+RDobLll3T9d2AO+g3my8xy5peVyjSag4I50mR1bBSN/Ct12lo+R9tJk0NZQ==} - - '@webassemblyjs/wasm-edit@1.14.1': - resolution: {integrity: sha512-RNJUIQH/J8iA/1NzlE4N7KtyZNHi3w7at7hDjvRNm5rcUXa00z1vRz3glZoULfJ5mpvYhLybmVcwcjGrC1pRrQ==} - - '@webassemblyjs/wasm-gen@1.14.1': - resolution: {integrity: sha512-AmomSIjP8ZbfGQhumkNvgC33AY7qtMCXnN6bL2u2Js4gVCg8fp735aEiMSBbDR7UQIj90n4wKAFUSEd0QN2Ukg==} - - '@webassemblyjs/wasm-opt@1.14.1': - resolution: {integrity: sha512-PTcKLUNvBqnY2U6E5bdOQcSM+oVP/PmrDY9NzowJjislEjwP/C4an2303MCVS2Mg9d3AJpIGdUFIQQWbPds0Sw==} - - '@webassemblyjs/wasm-parser@1.14.1': - resolution: {integrity: sha512-JLBl+KZ0R5qB7mCnud/yyX08jWFw5MsoalJ1pQ4EdFlgj9VdXKGuENGsiCIjegI1W7p91rUlcB/LB5yRJKNTcQ==} - - '@webassemblyjs/wast-printer@1.14.1': - resolution: {integrity: sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw==} - - '@xtuc/ieee754@1.2.0': - resolution: {integrity: sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==} - - '@xtuc/long@4.2.2': - resolution: {integrity: sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==} - accepts@1.3.8: resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==} engines: {node: '>= 0.6'} - acorn-import-phases@1.0.4: - resolution: {integrity: sha512-wKmbr/DDiIXzEOiWrTTUcDm24kQ2vGfZQvM2fwg2vXqR5uW6aapr7ObPtj1th32b9u90/Pf4AItvdTh42fBmVQ==} - engines: {node: '>=10.13.0'} - peerDependencies: - acorn: ^8.14.0 - acorn-jsx@5.3.2: resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} peerDependencies: @@ -1992,17 +1885,8 @@ packages: engines: {node: '>=0.4.0'} hasBin: true - agent-base@7.1.4: - resolution: {integrity: sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==} - engines: {node: '>= 14'} - ajv-formats@2.1.1: resolution: {integrity: sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==} - peerDependencies: - ajv: ^8.0.0 - peerDependenciesMeta: - ajv: - optional: true ajv-keywords@3.5.2: resolution: {integrity: sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==} @@ -2156,9 +2040,6 @@ packages: resolution: {integrity: sha512-OMu3BGQ4E7P1ErFsIPpbJh0qvDudM/UuJeHgkAvfWe+0HFJCXh+t/l8L6fVLR55RI/UbKrVLnAXZSVwd9ysWYw==} hasBin: true - bidi-js@1.0.3: - resolution: {integrity: sha512-RKshQI1R3YQ+n9YJz2QQ147P66ELpa1FQEg20Dk8oW9t2KgLbpDLLp9aGZ7y8WHSshDknG0bknqGw5/tyCs5tw==} - big.js@5.2.2: resolution: {integrity: sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==} @@ -2236,10 +2117,6 @@ packages: resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==} engines: {node: '>= 14.16.0'} - chrome-trace-event@1.0.4: - resolution: {integrity: sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==} - engines: {node: '>=6.0'} - classnames@2.5.1: resolution: {integrity: sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow==} @@ -2388,24 +2265,12 @@ packages: css-line-break@2.1.0: resolution: {integrity: sha512-FHcKFCZcAha3LwfVBhCQbW2nCNbkZXn7KVUJcsT5/P8YmfsVja0FMPJr0B903j/E69HUphKiV9iQArX8SDYA4w==} - css-tree@3.1.0: - resolution: {integrity: sha512-0eW44TGN5SQXU1mWSkKwFstI/22X2bG1nYzZTYMAWjylYURhse752YgbE4Cx46AC+bAvI+/dYTPRk1LqSUnu6w==} - engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0} - - cssstyle@5.3.3: - resolution: {integrity: sha512-OytmFH+13/QXONJcC75QNdMtKpceNk3u8ThBjyyYjkEcy/ekBwR1mMAuNvi3gdBPW3N5TlCzQ0WZw8H0lN/bDw==} - engines: {node: '>=20'} - csstype@3.1.3: resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} damerau-levenshtein@1.0.8: resolution: {integrity: sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==} - data-urls@6.0.0: - resolution: {integrity: sha512-BnBS08aLUM+DKamupXs3w2tJJoqU+AkaE/+6vQxi/G/DPmIZFJJp9Dkb1kM03AZx8ADehDUZgsNxju3mPXZYIA==} - engines: {node: '>=20'} - data-view-buffer@1.0.2: resolution: {integrity: sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==} engines: {node: '>= 0.4'} @@ -2435,9 +2300,6 @@ packages: supports-color: optional: true - decimal.js@10.6.0: - resolution: {integrity: sha512-YpgQiITW3JXGntzdUmyUR1V812Hn8T1YVXhCu+wO3OpS4eU9l4YdD3qjyiKdV6mvV29zapkMeD390UVEf2lkUg==} - decode-named-character-reference@1.2.0: resolution: {integrity: sha512-c6fcElNV6ShtZXmsgNgFFV5tVX2PaV4g+MOAkb8eXHvn6sryJBrZa9r0zV6+dtTyoCKxtDy5tyQ5ZwQuidtd+Q==} @@ -2537,9 +2399,6 @@ packages: electron-to-chromium@1.5.234: resolution: {integrity: sha512-RXfEp2x+VRYn8jbKfQlRImzoJU01kyDvVPBmG39eU2iuRVhuS6vQNocB8J0/8GrIMLnPzgz4eW6WiRnJkTuNWg==} - element-internals-polyfill@3.0.2: - resolution: {integrity: sha512-uB0/Qube3lkwh8SmkTnGIyUgJ9YdqVSzIoHMRCEQjAbD4Y5UzsVbch1tIxjTgUe5k3gy1U0ZMKMJ90A81lqwig==} - emoji-regex@10.5.0: resolution: {integrity: sha512-lb49vf1Xzfx080OKA0o6l8DQQpV+6Vg95zyCJX9VB/BqKYlhG7N4wgROUUHRA+ZPUefLnteQOad7z1kT2bV7bg==} @@ -2554,14 +2413,6 @@ packages: resolution: {integrity: sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==} engines: {node: '>= 0.8'} - enhanced-resolve@5.18.3: - resolution: {integrity: sha512-d4lC8xfavMeBjzGr2vECC3fsGXziXZQyJxD868h2M/mBI3PwAuODxAkLkq5HYuvrPYcUtiLzsTo8U3PgX3Ocww==} - engines: {node: '>=10.13.0'} - - entities@6.0.1: - resolution: {integrity: sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==} - engines: {node: '>=0.12'} - env-paths@3.0.0: resolution: {integrity: sha512-dtJUTepzMW3Lm/NPxRf3wP4642UWhjL2sQxc+ym2YMj1m/H2zDNQOlezafzkHwn6sMstjHTwG6iQQsctDW/b1A==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -2590,9 +2441,6 @@ packages: resolution: {integrity: sha512-uDn+FE1yrDzyC0pCo961B2IHbdM8y/ACZsKD4dG6WqrjV53BADjwa7D+1aom2rsNVfLyDgU/eigvlJGJ08OQ4w==} engines: {node: '>= 0.4'} - es-module-lexer@1.7.0: - resolution: {integrity: sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==} - es-object-atoms@1.1.1: resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==} engines: {node: '>= 0.4'} @@ -2715,10 +2563,6 @@ packages: peerDependencies: eslint: '>=5.0.0' - eslint-scope@5.1.1: - resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} - engines: {node: '>=8.0.0'} - eslint-scope@8.4.0: resolution: {integrity: sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -2758,10 +2602,6 @@ packages: resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} engines: {node: '>=4.0'} - estraverse@4.3.0: - resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==} - engines: {node: '>=4.0'} - estraverse@5.3.0: resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} engines: {node: '>=4.0'} @@ -2800,10 +2640,6 @@ packages: eventemitter3@5.0.1: resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==} - events@3.3.0: - resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} - engines: {node: '>=0.8.x'} - extend@3.0.2: resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==} @@ -2959,9 +2795,6 @@ packages: resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} engines: {node: '>=10.13.0'} - glob-to-regexp@0.4.1: - resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==} - glob@7.2.3: resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} deprecated: Glob versions prior to v9 are no longer supported @@ -3036,10 +2869,6 @@ packages: hast-util-whitespace@3.0.0: resolution: {integrity: sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==} - html-encoding-sniffer@4.0.0: - resolution: {integrity: sha512-Y22oTqIU4uuPgEemfz7NDJz6OeKf12Lsu+QC+s3BVpda64lTiMYCyGwg5ki4vFxkMwQdeZDl2adZoqUgdFuTgQ==} - engines: {node: '>=18'} - html2canvas@1.4.1: resolution: {integrity: sha512-fPU6BHNpsyIhr8yyMpTLLxAbkaK8ArIBcmZIRiBLiDhjeqvXolaEmDGmELFuX9I4xDcaKKcJl+TKZLqruBbmWA==} engines: {node: '>=8.0.0'} @@ -3056,14 +2885,6 @@ packages: resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==} engines: {node: '>= 0.8'} - http-proxy-agent@7.0.2: - resolution: {integrity: sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==} - engines: {node: '>= 14'} - - https-proxy-agent@7.0.6: - resolution: {integrity: sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==} - engines: {node: '>= 14'} - husky@9.1.7: resolution: {integrity: sha512-5gs5ytaNjBrh5Ow3zrvdUUY+0VxIuWVL4i9irt6friV+BqdCfmV11CQTWMiBYWHbXhco+J1kHfTOUkePhCDvMA==} engines: {node: '>=18'} @@ -3258,9 +3079,6 @@ packages: resolution: {integrity: sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==} engines: {node: '>=0.10.0'} - is-potential-custom-element-name@1.0.1: - resolution: {integrity: sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==} - is-regex@1.2.1: resolution: {integrity: sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==} engines: {node: '>= 0.4'} @@ -3349,15 +3167,6 @@ packages: resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} hasBin: true - jsdom@27.2.0: - resolution: {integrity: sha512-454TI39PeRDW1LgpyLPyURtB4Zx1tklSr6+OFOipsxGUH1WMTvk6C65JQdrj455+DP2uJ1+veBEHTGFKWVLFoA==} - engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0} - peerDependencies: - canvas: ^3.0.0 - peerDependenciesMeta: - canvas: - optional: true - jsesc@3.1.0: resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==} engines: {node: '>=6'} @@ -3366,9 +3175,6 @@ packages: json-buffer@3.0.1: resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} - json-parse-even-better-errors@2.3.1: - resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} - json-schema-traverse@0.4.1: resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} @@ -3483,10 +3289,6 @@ packages: resolution: {integrity: sha512-1wd/kpAdKRLwv7/3OKC8zZ5U8e/fajCfWMxacUvB79S5nLrYGPtUI/8chMQhn3LQjsRVErTb9i1ECAwW0ZIHnQ==} engines: {node: '>=20.0.0'} - loader-runner@4.3.1: - resolution: {integrity: sha512-IWqP2SCPhyVFTBtRcgMHdzlf9ul25NwaFx4wCEH/KjAXuuHY4yNjvPXsBokp8jCB936PyWRaPKUNh8NvylLp2Q==} - engines: {node: '>=6.11.5'} - loader-utils@2.0.4: resolution: {integrity: sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==} engines: {node: '>=8.9.0'} @@ -3549,10 +3351,6 @@ packages: resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} hasBin: true - lru-cache@11.2.2: - resolution: {integrity: sha512-F9ODfyqML2coTIsQpSkRHnLSZMtkU8Q+mSfcaIyKwy58u+8k5nvAYeiNhsyMARvzNcXJ9QfWVrcPsC9e9rAxtg==} - engines: {node: 20 || >=22} - lru-cache@5.1.1: resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} @@ -3615,9 +3413,6 @@ packages: mdast-util-to-string@4.0.0: resolution: {integrity: sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==} - mdn-data@2.12.2: - resolution: {integrity: sha512-IEn+pegP1aManZuckezWCO+XZQDplx1366JoVhTpMpBB1sPey/SbveZQUosKiKiGYjg1wH4pMlNgXbCiYgihQA==} - media-typer@0.3.0: resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==} engines: {node: '>= 0.6'} @@ -3862,9 +3657,6 @@ packages: resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==} engines: {node: '>= 0.6'} - neo-async@2.6.2: - resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} - next-pwa@5.6.0: resolution: {integrity: sha512-XV8g8C6B7UmViXU8askMEYhWwQ4qc/XqJGnexbLV68hzKaGHZDMtHsm2TNxFcbR7+ypVuth/wwpiIlMwpRJJ5A==} peerDependencies: @@ -4008,9 +3800,6 @@ packages: resolution: {integrity: sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==} engines: {node: '>= 0.10'} - parse5@8.0.0: - resolution: {integrity: sha512-9m4m5GSgXjL4AjumKzq1Fgfp3Z8rsvjRNbnkVwfu2ImRqE5D0LnY2QfDen18FSY9C573YU5XxSapdHZTZ2WolA==} - parseurl@1.3.3: resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==} engines: {node: '>= 0.8'} @@ -4356,10 +4145,6 @@ packages: sax@1.4.1: resolution: {integrity: sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==} - saxes@6.0.0: - resolution: {integrity: sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==} - engines: {node: '>=v12.22.7'} - scheduler@0.27.0: resolution: {integrity: sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==} @@ -4595,17 +4380,10 @@ packages: resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} engines: {node: '>= 0.4'} - symbol-tree@3.2.4: - resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==} - synckit@0.11.11: resolution: {integrity: sha512-MeQTA1r0litLUf0Rp/iisCaL8761lKAZHaimlbGK4j0HysC4PLfqygQj9srcs0m2RdtDYnF8UuYyKpbjHYp7Jw==} engines: {node: ^14.18.0 || >=16.0.0} - tapable@2.3.0: - resolution: {integrity: sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg==} - engines: {node: '>=6'} - temp-dir@2.0.0: resolution: {integrity: sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg==} engines: {node: '>=8'} @@ -4642,13 +4420,6 @@ packages: resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==} engines: {node: '>=12.0.0'} - tldts-core@7.0.17: - resolution: {integrity: sha512-DieYoGrP78PWKsrXr8MZwtQ7GLCUeLxihtjC1jZsW1DnvSMdKPitJSe8OSYDM2u5H6g3kWJZpePqkp43TfLh0g==} - - tldts@7.0.17: - resolution: {integrity: sha512-Y1KQBgDd/NUc+LfOtKS6mNsC9CCaH+m2P1RoIZy7RAPo3C3/t8X45+zgut31cRZtZ3xKPjfn3TkGTrctC2TQIQ==} - hasBin: true - to-regex-range@5.0.1: resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} engines: {node: '>=8.0'} @@ -4664,17 +4435,9 @@ packages: toml@3.0.0: resolution: {integrity: sha512-y/mWCZinnvxjTKYhJ+pYxwD0mRLVvOtdS2Awbgxln6iEnt4rk0yBxeSBHkGJcPucRiG0e55mwWp+g/05rsrd6w==} - tough-cookie@6.0.0: - resolution: {integrity: sha512-kXuRi1mtaKMrsLUxz3sQYvVl37B0Ns6MzfrtV5DvJceE9bPyspOqk9xxv7XbZWcfLWbFmm997vl83qUWVJA64w==} - engines: {node: '>=16'} - tr46@1.0.1: resolution: {integrity: sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==} - tr46@6.0.0: - resolution: {integrity: sha512-bLVMLPtstlZ4iMQHpFHTR7GAGj2jxi8Dg0s2h2MafAE4uSWF98FC/3MomU51iQAMf8/qDUbKWf5GxuvvVcXEhw==} - engines: {node: '>=20'} - trim-lines@3.0.1: resolution: {integrity: sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==} @@ -4870,17 +4633,9 @@ packages: vscode-uri@3.1.0: resolution: {integrity: sha512-/BpdSx+yCQGnCvecbyXdxHDkuk55/G3xwnC0GqY4gmQ3j+A+g8kzzgB4Nk/SINjqn6+waqw3EgbVF2QKExkRxQ==} - w3c-xmlserializer@5.0.0: - resolution: {integrity: sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==} - engines: {node: '>=18'} - warning@4.0.3: resolution: {integrity: sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w==} - watchpack@2.4.4: - resolution: {integrity: sha512-c5EGNOiyxxV5qmTtAB7rbiXxi1ooX1pQKMLX/MIabJjRA0SJBQOjKF+KSVfHkr9U1cADPon0mRiVe/riyaiDUA==} - engines: {node: '>=10.13.0'} - web-streams-polyfill@4.2.0: resolution: {integrity: sha512-0rYDzGOh9EZpig92umN5g5D/9A1Kff7k0/mzPSSCY8jEQeYkgRMoY7LhbXtUCWzLCMX0TUE9aoHkjFNB7D9pfA==} engines: {node: '>= 8'} @@ -4894,39 +4649,9 @@ packages: webidl-conversions@4.0.2: resolution: {integrity: sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==} - webidl-conversions@8.0.0: - resolution: {integrity: sha512-n4W4YFyz5JzOfQeA8oN7dUYpR+MBP3PIUsn2jLjWXwK5ASUzt0Jc/A5sAUZoCYFJRGF0FBKJ+1JjN43rNdsQzA==} - engines: {node: '>=20'} - webpack-sources@1.4.3: resolution: {integrity: sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==} - webpack-sources@3.3.3: - resolution: {integrity: sha512-yd1RBzSGanHkitROoPFd6qsrxt+oFhg/129YzheDGqeustzX0vTZJZsSsQjVQC4yzBQ56K55XU8gaNCtIzOnTg==} - engines: {node: '>=10.13.0'} - - webpack@5.102.1: - resolution: {integrity: sha512-7h/weGm9d/ywQ6qzJ+Xy+r9n/3qgp/thalBbpOi5i223dPXKi04IBtqPN9nTd+jBc7QKfvDbaBnFipYp4sJAUQ==} - engines: {node: '>=10.13.0'} - hasBin: true - peerDependencies: - webpack-cli: '*' - peerDependenciesMeta: - webpack-cli: - optional: true - - whatwg-encoding@3.1.1: - resolution: {integrity: sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==} - engines: {node: '>=18'} - - whatwg-mimetype@4.0.0: - resolution: {integrity: sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==} - engines: {node: '>=18'} - - whatwg-url@15.1.0: - resolution: {integrity: sha512-2ytDk0kiEj/yu90JOAp44PVPUkO9+jVhyf+SybKlRHSDlvOOZhdPIrr7xTH64l4WixO2cP+wQIcgujkGBPPz6g==} - engines: {node: '>=20'} - whatwg-url@7.1.0: resolution: {integrity: sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==} @@ -5019,29 +4744,10 @@ packages: wrappy@1.0.2: resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} - ws@8.18.3: - resolution: {integrity: sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==} - engines: {node: '>=10.0.0'} - peerDependencies: - bufferutil: ^4.0.1 - utf-8-validate: '>=5.0.2' - peerDependenciesMeta: - bufferutil: - optional: true - utf-8-validate: - optional: true - xdg-basedir@5.1.0: resolution: {integrity: sha512-GCPAHLvrIH13+c0SuacwvRYj2SxJXQ4kaVTT5xgL3kPrz56XxkF21IGhjSE1+W0aw7gpBWRGXLCPnPby6lSpmQ==} engines: {node: '>=12'} - xml-name-validator@5.0.0: - resolution: {integrity: sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg==} - engines: {node: '>=18'} - - xmlchars@2.2.0: - resolution: {integrity: sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==} - yallist@3.1.1: resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} @@ -5062,8 +4768,6 @@ packages: snapshots: - '@acemir/cssom@0.9.23': {} - '@apideck/better-ajv-errors@0.3.6(ajv@8.17.1)': dependencies: ajv: 8.17.1 @@ -5071,24 +4775,6 @@ snapshots: jsonpointer: 5.0.1 leven: 3.1.0 - '@asamuzakjp/css-color@4.0.5': - dependencies: - '@csstools/css-calc': 2.1.4(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4) - '@csstools/css-color-parser': 3.1.0(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4) - '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4) - '@csstools/css-tokenizer': 3.0.4 - lru-cache: 11.2.2 - - '@asamuzakjp/dom-selector@6.7.4': - dependencies: - '@asamuzakjp/nwsapi': 2.3.9 - bidi-js: 1.0.3 - css-tree: 3.1.0 - is-potential-custom-element-name: 1.0.1 - lru-cache: 11.2.2 - - '@asamuzakjp/nwsapi@2.3.9': {} - '@babel/code-frame@7.27.1': dependencies: '@babel/helper-validator-identifier': 7.27.1 @@ -6040,28 +5726,6 @@ snapshots: '@cspell/url@9.2.1': {} - '@csstools/color-helpers@5.1.0': {} - - '@csstools/css-calc@2.1.4(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4)': - dependencies: - '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4) - '@csstools/css-tokenizer': 3.0.4 - - '@csstools/css-color-parser@3.1.0(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4)': - dependencies: - '@csstools/color-helpers': 5.1.0 - '@csstools/css-calc': 2.1.4(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4) - '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4) - '@csstools/css-tokenizer': 3.0.4 - - '@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4)': - dependencies: - '@csstools/css-tokenizer': 3.0.4 - - '@csstools/css-syntax-patches-for-csstree@1.0.16': {} - - '@csstools/css-tokenizer@3.0.4': {} - '@editorjs/caret@1.0.3': dependencies: '@editorjs/dom': 1.0.1 @@ -6293,12 +5957,10 @@ snapshots: transitivePeerDependencies: - supports-color - '@mdx-js/loader@3.1.1(webpack@5.102.1)': + '@mdx-js/loader@3.1.1': dependencies: '@mdx-js/mdx': 3.1.1 source-map: 0.7.6 - optionalDependencies: - webpack: 5.102.1 transitivePeerDependencies: - supports-color @@ -6353,11 +6015,11 @@ snapshots: dependencies: fast-glob: 3.3.1 - '@next/mdx@15.5.4(@mdx-js/loader@3.1.1(webpack@5.102.1))(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@19.2.0))': + '@next/mdx@15.5.4(@mdx-js/loader@3.1.1)(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@19.2.0))': dependencies: source-map: 0.7.6 optionalDependencies: - '@mdx-js/loader': 3.1.1(webpack@5.102.1) + '@mdx-js/loader': 3.1.1 '@mdx-js/react': 3.1.1(@types/react@19.2.2)(react@19.2.0) '@next/swc-darwin-arm64@15.5.4': @@ -6632,16 +6294,6 @@ snapshots: '@types/eslint-config-prettier@6.11.3': {} - '@types/eslint-scope@3.7.7': - dependencies: - '@types/eslint': 9.6.1 - '@types/estree': 1.0.8 - - '@types/eslint@9.6.1': - dependencies: - '@types/estree': 1.0.8 - '@types/json-schema': 7.0.15 - '@types/estree-jsx@1.0.5': dependencies: '@types/estree': 1.0.8 @@ -6952,105 +6604,19 @@ snapshots: '@unrs/resolver-binding-win32-x64-msvc@1.11.1': optional: true - '@webassemblyjs/ast@1.14.1': - dependencies: - '@webassemblyjs/helper-numbers': 1.13.2 - '@webassemblyjs/helper-wasm-bytecode': 1.13.2 - - '@webassemblyjs/floating-point-hex-parser@1.13.2': {} - - '@webassemblyjs/helper-api-error@1.13.2': {} - - '@webassemblyjs/helper-buffer@1.14.1': {} - - '@webassemblyjs/helper-numbers@1.13.2': - dependencies: - '@webassemblyjs/floating-point-hex-parser': 1.13.2 - '@webassemblyjs/helper-api-error': 1.13.2 - '@xtuc/long': 4.2.2 - - '@webassemblyjs/helper-wasm-bytecode@1.13.2': {} - - '@webassemblyjs/helper-wasm-section@1.14.1': - dependencies: - '@webassemblyjs/ast': 1.14.1 - '@webassemblyjs/helper-buffer': 1.14.1 - '@webassemblyjs/helper-wasm-bytecode': 1.13.2 - '@webassemblyjs/wasm-gen': 1.14.1 - - '@webassemblyjs/ieee754@1.13.2': - dependencies: - '@xtuc/ieee754': 1.2.0 - - '@webassemblyjs/leb128@1.13.2': - dependencies: - '@xtuc/long': 4.2.2 - - '@webassemblyjs/utf8@1.13.2': {} - - '@webassemblyjs/wasm-edit@1.14.1': - dependencies: - '@webassemblyjs/ast': 1.14.1 - '@webassemblyjs/helper-buffer': 1.14.1 - '@webassemblyjs/helper-wasm-bytecode': 1.13.2 - '@webassemblyjs/helper-wasm-section': 1.14.1 - '@webassemblyjs/wasm-gen': 1.14.1 - '@webassemblyjs/wasm-opt': 1.14.1 - '@webassemblyjs/wasm-parser': 1.14.1 - '@webassemblyjs/wast-printer': 1.14.1 - - '@webassemblyjs/wasm-gen@1.14.1': - dependencies: - '@webassemblyjs/ast': 1.14.1 - '@webassemblyjs/helper-wasm-bytecode': 1.13.2 - '@webassemblyjs/ieee754': 1.13.2 - '@webassemblyjs/leb128': 1.13.2 - '@webassemblyjs/utf8': 1.13.2 - - '@webassemblyjs/wasm-opt@1.14.1': - dependencies: - '@webassemblyjs/ast': 1.14.1 - '@webassemblyjs/helper-buffer': 1.14.1 - '@webassemblyjs/wasm-gen': 1.14.1 - '@webassemblyjs/wasm-parser': 1.14.1 - - '@webassemblyjs/wasm-parser@1.14.1': - dependencies: - '@webassemblyjs/ast': 1.14.1 - '@webassemblyjs/helper-api-error': 1.13.2 - '@webassemblyjs/helper-wasm-bytecode': 1.13.2 - '@webassemblyjs/ieee754': 1.13.2 - '@webassemblyjs/leb128': 1.13.2 - '@webassemblyjs/utf8': 1.13.2 - - '@webassemblyjs/wast-printer@1.14.1': - dependencies: - '@webassemblyjs/ast': 1.14.1 - '@xtuc/long': 4.2.2 - - '@xtuc/ieee754@1.2.0': {} - - '@xtuc/long@4.2.2': {} - accepts@1.3.8: dependencies: mime-types: 2.1.35 negotiator: 0.6.3 - acorn-import-phases@1.0.4(acorn@8.15.0): - dependencies: - acorn: 8.15.0 - acorn-jsx@5.3.2(acorn@8.15.0): dependencies: acorn: 8.15.0 acorn@8.15.0: {} - agent-base@7.1.4: {} - - ajv-formats@2.1.1(ajv@8.17.1): - optionalDependencies: + ajv-formats@2.1.1: + dependencies: ajv: 8.17.1 ajv-keywords@3.5.2(ajv@6.12.6): @@ -7187,14 +6753,13 @@ snapshots: axobject-query@4.1.0: {} - babel-loader@8.4.1(@babel/core@7.28.4)(webpack@5.102.1): + babel-loader@8.4.1(@babel/core@7.28.4): dependencies: '@babel/core': 7.28.4 find-cache-dir: 3.3.2 loader-utils: 2.0.4 make-dir: 3.1.0 schema-utils: 2.7.1 - webpack: 5.102.1 babel-plugin-polyfill-corejs2@0.4.14(@babel/core@7.28.4): dependencies: @@ -7228,10 +6793,6 @@ snapshots: baseline-browser-mapping@2.8.16: {} - bidi-js@1.0.3: - dependencies: - require-from-string: 2.0.2 - big.js@5.2.2: {} brace-expansion@1.1.12: @@ -7305,14 +6866,11 @@ snapshots: dependencies: readdirp: 4.1.2 - chrome-trace-event@1.0.4: {} - classnames@2.5.1: {} - clean-webpack-plugin@4.0.0(webpack@5.102.1): + clean-webpack-plugin@4.0.0: dependencies: del: 4.1.1 - webpack: 5.102.1 clear-module@4.1.2: dependencies: @@ -7479,26 +7037,10 @@ snapshots: dependencies: utrie: 1.0.2 - css-tree@3.1.0: - dependencies: - mdn-data: 2.12.2 - source-map-js: 1.2.1 - - cssstyle@5.3.3: - dependencies: - '@asamuzakjp/css-color': 4.0.5 - '@csstools/css-syntax-patches-for-csstree': 1.0.16 - css-tree: 3.1.0 - csstype@3.1.3: {} damerau-levenshtein@1.0.8: {} - data-urls@6.0.0: - dependencies: - whatwg-mimetype: 4.0.0 - whatwg-url: 15.1.0 - data-view-buffer@1.0.2: dependencies: call-bound: 1.0.4 @@ -7525,8 +7067,6 @@ snapshots: dependencies: ms: 2.1.3 - decimal.js@10.6.0: {} - decode-named-character-reference@1.2.0: dependencies: character-entities: 2.0.2 @@ -7602,12 +7142,12 @@ snapshots: dependencies: safe-buffer: 5.2.1 - echarts-jsx@0.5.4(element-internals-polyfill@3.0.2)(react@19.2.0)(typescript@5.9.3): + echarts-jsx@0.5.4(react@19.2.0)(typescript@5.9.3): dependencies: echarts: 5.6.0 lodash: 4.17.21 react: 19.2.0 - web-utility: 4.6.2(element-internals-polyfill@3.0.2)(typescript@5.9.3) + web-utility: 4.6.2(typescript@5.9.3) transitivePeerDependencies: - element-internals-polyfill - typescript @@ -7619,7 +7159,7 @@ snapshots: editorjs-html@4.0.5: {} - edkit@1.2.7(element-internals-polyfill@3.0.2)(typescript@5.9.3): + edkit@1.2.7(typescript@5.9.3): dependencies: '@swc/helpers': 0.5.17 '@types/turndown': 5.0.5 @@ -7628,7 +7168,7 @@ snapshots: regenerator-runtime: 0.14.1 turndown: 7.2.1 turndown-plugin-gfm: 1.0.2 - web-utility: 4.6.2(element-internals-polyfill@3.0.2)(typescript@5.9.3) + web-utility: 4.6.2(typescript@5.9.3) transitivePeerDependencies: - element-internals-polyfill - typescript @@ -7641,8 +7181,6 @@ snapshots: electron-to-chromium@1.5.234: {} - element-internals-polyfill@3.0.2: {} - emoji-regex@10.5.0: {} emoji-regex@9.2.2: {} @@ -7651,13 +7189,6 @@ snapshots: encodeurl@2.0.0: {} - enhanced-resolve@5.18.3: - dependencies: - graceful-fs: 4.2.11 - tapable: 2.3.0 - - entities@6.0.1: {} - env-paths@3.0.0: {} environment@1.1.0: {} @@ -7747,8 +7278,6 @@ snapshots: iterator.prototype: 1.1.5 safe-array-concat: 1.1.3 - es-module-lexer@1.7.0: {} - es-object-atoms@1.1.1: dependencies: es-errors: 1.3.0 @@ -7928,11 +7457,6 @@ snapshots: dependencies: eslint: 9.37.0(jiti@2.6.1) - eslint-scope@5.1.1: - dependencies: - esrecurse: 4.3.0 - estraverse: 4.3.0 - eslint-scope@8.4.0: dependencies: esrecurse: 4.3.0 @@ -8000,8 +7524,6 @@ snapshots: dependencies: estraverse: 5.3.0 - estraverse@4.3.0: {} - estraverse@5.3.0: {} estree-util-attach-comments@3.0.0: @@ -8047,8 +7569,6 @@ snapshots: eventemitter3@5.0.1: {} - events@3.3.0: {} - extend@3.0.2: {} fast-deep-equal@3.1.3: {} @@ -8214,8 +7734,6 @@ snapshots: dependencies: is-glob: 4.0.3 - glob-to-regexp@0.4.1: {} - glob@7.2.3: dependencies: fs.realpath: 1.0.0 @@ -8328,10 +7846,6 @@ snapshots: dependencies: '@types/hast': 3.0.4 - html-encoding-sniffer@4.0.0: - dependencies: - whatwg-encoding: 3.1.1 - html2canvas@1.4.1: dependencies: css-line-break: 2.1.0 @@ -8358,20 +7872,6 @@ snapshots: statuses: 2.0.1 toidentifier: 1.0.1 - http-proxy-agent@7.0.2: - dependencies: - agent-base: 7.1.4 - debug: 4.4.3 - transitivePeerDependencies: - - supports-color - - https-proxy-agent@7.0.6: - dependencies: - agent-base: 7.1.4 - debug: 4.4.3 - transitivePeerDependencies: - - supports-color - husky@9.1.7: {} iconv-lite@0.4.24: @@ -8381,12 +7881,13 @@ snapshots: iconv-lite@0.6.3: dependencies: safer-buffer: 2.1.2 + optional: true idb-keyval@6.2.2: {} idb@7.1.1: {} - idea-react@2.0.0-rc.13(@types/react@19.2.2)(element-internals-polyfill@3.0.2)(react-dom@19.2.0(react@19.2.0))(react-is@16.13.1)(react@19.2.0)(typescript@5.9.3): + idea-react@2.0.0-rc.13(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react-is@16.13.1)(react@19.2.0)(typescript@5.9.3): dependencies: '@editorjs/editorjs': 2.31.0 '@editorjs/paragraph': 2.11.7 @@ -8399,14 +7900,14 @@ snapshots: lodash: 4.17.21 mobx: 6.15.0 mobx-react: 9.2.1(mobx@6.15.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - mobx-react-helper: 0.5.1(element-internals-polyfill@3.0.2)(mobx@6.15.0)(react@19.2.0)(typescript@5.9.3) + mobx-react-helper: 0.5.1(mobx@6.15.0)(react@19.2.0)(typescript@5.9.3) prismjs: 1.30.0 react: 19.2.0 react-bootstrap: 2.10.10(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) react-dom: 19.2.0(react@19.2.0) react-editor-js: 2.1.0(@editorjs/editorjs@2.31.0)(@editorjs/paragraph@2.11.7)(react@19.2.0) react-element-to-jsx-string: 17.0.1(react-dom@19.2.0(react@19.2.0))(react-is@16.13.1)(react@19.2.0) - web-utility: 4.6.2(element-internals-polyfill@3.0.2)(typescript@5.9.3) + web-utility: 4.6.2(typescript@5.9.3) transitivePeerDependencies: - '@types/react' - element-internals-polyfill @@ -8567,8 +8068,6 @@ snapshots: is-plain-object@5.0.0: {} - is-potential-custom-element-name@1.0.1: {} - is-regex@1.2.1: dependencies: call-bound: 1.0.4 @@ -8659,39 +8158,10 @@ snapshots: dependencies: argparse: 2.0.1 - jsdom@27.2.0: - dependencies: - '@acemir/cssom': 0.9.23 - '@asamuzakjp/dom-selector': 6.7.4 - cssstyle: 5.3.3 - data-urls: 6.0.0 - decimal.js: 10.6.0 - html-encoding-sniffer: 4.0.0 - http-proxy-agent: 7.0.2 - https-proxy-agent: 7.0.6 - is-potential-custom-element-name: 1.0.1 - parse5: 8.0.0 - saxes: 6.0.0 - symbol-tree: 3.2.4 - tough-cookie: 6.0.0 - w3c-xmlserializer: 5.0.0 - webidl-conversions: 8.0.0 - whatwg-encoding: 3.1.1 - whatwg-mimetype: 4.0.0 - whatwg-url: 15.1.0 - ws: 8.18.3 - xml-name-validator: 5.0.0 - transitivePeerDependencies: - - bufferutil - - supports-color - - utf-8-validate - jsesc@3.1.0: {} json-buffer@3.0.1: {} - json-parse-even-better-errors@2.3.1: {} - json-schema-traverse@0.4.1: {} json-schema-traverse@1.0.0: {} @@ -8778,14 +8248,13 @@ snapshots: type-is: 2.0.1 vary: 1.1.2 - koajax@3.1.2(core-js@3.46.0)(element-internals-polyfill@3.0.2)(jsdom@27.2.0)(typescript@5.9.3): + koajax@3.1.2(core-js@3.46.0)(typescript@5.9.3): dependencies: '@swc/helpers': 0.5.17 core-js: 3.46.0 - jsdom: 27.2.0 regenerator-runtime: 0.14.1 web-streams-polyfill: 4.2.0 - web-utility: 4.6.2(element-internals-polyfill@3.0.2)(typescript@5.9.3) + web-utility: 4.6.2(typescript@5.9.3) transitivePeerDependencies: - element-internals-polyfill - typescript @@ -8798,11 +8267,9 @@ snapshots: leaflet@1.9.4: {} - less-loader@12.3.0(less@4.4.2)(webpack@5.102.1): + less-loader@12.3.0(less@4.4.2): dependencies: less: 4.4.2 - optionalDependencies: - webpack: 5.102.1 less@4.4.2: dependencies: @@ -8848,8 +8315,6 @@ snapshots: rfdc: 1.4.1 wrap-ansi: 9.0.2 - loader-runner@4.3.1: {} - loader-utils@2.0.4: dependencies: big.js: 5.2.2 @@ -8904,8 +8369,6 @@ snapshots: dependencies: js-tokens: 4.0.0 - lru-cache@11.2.2: {} - lru-cache@5.1.1: dependencies: yallist: 3.1.1 @@ -9042,8 +8505,6 @@ snapshots: dependencies: '@types/mdast': 4.0.4 - mdn-data@2.12.2: {} - media-typer@0.3.0: {} media-typer@1.1.0: {} @@ -9307,57 +8768,57 @@ snapshots: minimist@1.2.8: {} - mobx-github@0.6.0(core-js@3.46.0)(element-internals-polyfill@3.0.2)(jsdom@27.2.0)(typescript@5.9.3): + mobx-github@0.6.0(core-js@3.46.0)(typescript@5.9.3): dependencies: '@octokit/openapi-types': 26.0.0 '@swc/helpers': 0.5.17 '@types/lodash': 4.17.20 - koajax: 3.1.2(core-js@3.46.0)(element-internals-polyfill@3.0.2)(jsdom@27.2.0)(typescript@5.9.3) + koajax: 3.1.2(core-js@3.46.0)(typescript@5.9.3) lodash: 4.17.21 mobx: 6.15.0 - mobx-restful: 2.1.3(core-js@3.46.0)(element-internals-polyfill@3.0.2)(jsdom@27.2.0)(mobx@6.15.0)(typescript@5.9.3) - web-utility: 4.6.2(element-internals-polyfill@3.0.2)(typescript@5.9.3) + mobx-restful: 2.1.3(core-js@3.46.0)(mobx@6.15.0)(typescript@5.9.3) + web-utility: 4.6.2(typescript@5.9.3) transitivePeerDependencies: - core-js - element-internals-polyfill - jsdom - typescript - mobx-i18n@0.7.2(element-internals-polyfill@3.0.2)(mobx@6.15.0)(typescript@5.9.3): + mobx-i18n@0.7.2(mobx@6.15.0)(typescript@5.9.3): dependencies: '@swc/helpers': 0.5.17 '@types/node': 22.18.10 mobx: 6.15.0 regenerator-runtime: 0.14.1 - web-utility: 4.6.2(element-internals-polyfill@3.0.2)(typescript@5.9.3) + web-utility: 4.6.2(typescript@5.9.3) transitivePeerDependencies: - element-internals-polyfill - typescript - mobx-lark@2.4.2(core-js@3.46.0)(element-internals-polyfill@3.0.2)(jsdom@27.2.0)(react@19.2.0)(typescript@5.9.3): + mobx-lark@2.4.2(core-js@3.46.0)(react@19.2.0)(typescript@5.9.3): dependencies: '@swc/helpers': 0.5.17 '@types/react': 19.2.2 - koajax: 3.1.2(core-js@3.46.0)(element-internals-polyfill@3.0.2)(jsdom@27.2.0)(typescript@5.9.3) + koajax: 3.1.2(core-js@3.46.0)(typescript@5.9.3) lodash.memoize: 4.1.2 mobx: 6.15.0 - mobx-restful: 2.1.3(core-js@3.46.0)(element-internals-polyfill@3.0.2)(jsdom@27.2.0)(mobx@6.15.0)(typescript@5.9.3) + mobx-restful: 2.1.3(core-js@3.46.0)(mobx@6.15.0)(typescript@5.9.3) react: 19.2.0 regenerator-runtime: 0.14.1 - web-utility: 4.6.2(element-internals-polyfill@3.0.2)(typescript@5.9.3) + web-utility: 4.6.2(typescript@5.9.3) transitivePeerDependencies: - core-js - element-internals-polyfill - jsdom - typescript - mobx-react-helper@0.5.1(element-internals-polyfill@3.0.2)(mobx@6.15.0)(react@19.2.0)(typescript@5.9.3): + mobx-react-helper@0.5.1(mobx@6.15.0)(react@19.2.0)(typescript@5.9.3): dependencies: '@swc/helpers': 0.5.17 lodash.isequalwith: 4.4.0 mobx: 6.15.0 react: 19.2.0 - web-utility: 4.6.2(element-internals-polyfill@3.0.2)(typescript@5.9.3) + web-utility: 4.6.2(typescript@5.9.3) transitivePeerDependencies: - element-internals-polyfill - typescript @@ -9378,21 +8839,21 @@ snapshots: optionalDependencies: react-dom: 19.2.0(react@19.2.0) - mobx-restful-table@2.5.4(@types/react@19.2.2)(core-js@3.46.0)(element-internals-polyfill@3.0.2)(jsdom@27.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3): + mobx-restful-table@2.5.4(@types/react@19.2.2)(core-js@3.46.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3): dependencies: '@swc/helpers': 0.5.17 classnames: 2.5.1 lodash: 4.17.21 mobx: 6.15.0 - mobx-i18n: 0.7.2(element-internals-polyfill@3.0.2)(mobx@6.15.0)(typescript@5.9.3) + mobx-i18n: 0.7.2(mobx@6.15.0)(typescript@5.9.3) mobx-react: 9.2.1(mobx@6.15.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - mobx-react-helper: 0.5.1(element-internals-polyfill@3.0.2)(mobx@6.15.0)(react@19.2.0)(typescript@5.9.3) - mobx-restful: 2.1.3(core-js@3.46.0)(element-internals-polyfill@3.0.2)(jsdom@27.2.0)(mobx@6.15.0)(typescript@5.9.3) + mobx-react-helper: 0.5.1(mobx@6.15.0)(react@19.2.0)(typescript@5.9.3) + mobx-restful: 2.1.3(core-js@3.46.0)(mobx@6.15.0)(typescript@5.9.3) react: 19.2.0 react-bootstrap: 2.10.10(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - react-bootstrap-editor: 2.1.1(element-internals-polyfill@3.0.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3) + react-bootstrap-editor: 2.1.1(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3) regenerator-runtime: 0.14.1 - web-utility: 4.6.2(element-internals-polyfill@3.0.2)(typescript@5.9.3) + web-utility: 4.6.2(typescript@5.9.3) transitivePeerDependencies: - '@types/react' - core-js @@ -9402,30 +8863,30 @@ snapshots: - react-native - typescript - mobx-restful@2.1.3(core-js@3.46.0)(element-internals-polyfill@3.0.2)(jsdom@27.2.0)(mobx@6.15.0)(typescript@5.9.3): + mobx-restful@2.1.3(core-js@3.46.0)(mobx@6.15.0)(typescript@5.9.3): dependencies: '@swc/helpers': 0.5.17 idb-keyval: 6.2.2 - koajax: 3.1.2(core-js@3.46.0)(element-internals-polyfill@3.0.2)(jsdom@27.2.0)(typescript@5.9.3) + koajax: 3.1.2(core-js@3.46.0)(typescript@5.9.3) mobx: 6.15.0 regenerator-runtime: 0.14.1 - web-utility: 4.6.2(element-internals-polyfill@3.0.2)(typescript@5.9.3) + web-utility: 4.6.2(typescript@5.9.3) transitivePeerDependencies: - core-js - element-internals-polyfill - jsdom - typescript - mobx-strapi@0.8.1(core-js@3.46.0)(element-internals-polyfill@3.0.2)(jsdom@27.2.0)(typescript@5.9.3): + mobx-strapi@0.8.1(core-js@3.46.0)(typescript@5.9.3): dependencies: '@swc/helpers': 0.5.17 idb-keyval: 6.2.2 - koajax: 3.1.2(core-js@3.46.0)(element-internals-polyfill@3.0.2)(jsdom@27.2.0)(typescript@5.9.3) + koajax: 3.1.2(core-js@3.46.0)(typescript@5.9.3) mobx: 6.15.0 - mobx-restful: 2.1.3(core-js@3.46.0)(element-internals-polyfill@3.0.2)(jsdom@27.2.0)(mobx@6.15.0)(typescript@5.9.3) + mobx-restful: 2.1.3(core-js@3.46.0)(mobx@6.15.0)(typescript@5.9.3) qs: 6.14.0 regenerator-runtime: 0.14.1 - web-utility: 4.6.2(element-internals-polyfill@3.0.2)(typescript@5.9.3) + web-utility: 4.6.2(typescript@5.9.3) transitivePeerDependencies: - core-js - element-internals-polyfill @@ -9452,16 +8913,14 @@ snapshots: negotiator@0.6.3: {} - neo-async@2.6.2: {} - - next-pwa@5.6.0(@babel/core@7.28.4)(next@15.5.4(@babel/core@7.28.4)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(sass@1.93.2))(webpack@5.102.1): + next-pwa@5.6.0(@babel/core@7.28.4)(next@15.5.4(@babel/core@7.28.4)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(sass@1.93.2)): dependencies: - babel-loader: 8.4.1(@babel/core@7.28.4)(webpack@5.102.1) - clean-webpack-plugin: 4.0.0(webpack@5.102.1) + babel-loader: 8.4.1(@babel/core@7.28.4) + clean-webpack-plugin: 4.0.0 globby: 11.1.0 next: 15.5.4(@babel/core@7.28.4)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(sass@1.93.2) - terser-webpack-plugin: 5.3.14(webpack@5.102.1) - workbox-webpack-plugin: 6.6.0(webpack@5.102.1) + terser-webpack-plugin: 5.3.14 + workbox-webpack-plugin: 6.6.0 workbox-window: 6.6.0 transitivePeerDependencies: - '@babel/core' @@ -9472,7 +8931,7 @@ snapshots: - uglify-js - webpack - next-ssr-middleware@1.0.3(element-internals-polyfill@3.0.2)(next@15.5.4(@babel/core@7.28.4)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(sass@1.93.2))(react@19.2.0)(typescript@5.9.3): + next-ssr-middleware@1.0.3(next@15.5.4(@babel/core@7.28.4)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(sass@1.93.2))(react@19.2.0)(typescript@5.9.3): dependencies: '@koa/bodyparser': 6.0.0(koa@3.0.1) '@koa/router': 14.0.0 @@ -9485,17 +8944,17 @@ snapshots: next: 15.5.4(@babel/core@7.28.4)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(sass@1.93.2) react: 19.2.0 tslib: 2.8.1 - web-utility: 4.6.2(element-internals-polyfill@3.0.2)(typescript@5.9.3) + web-utility: 4.6.2(typescript@5.9.3) transitivePeerDependencies: - element-internals-polyfill - supports-color - typescript - next-with-less@3.0.1(less-loader@12.3.0(less@4.4.2)(webpack@5.102.1))(less@4.4.2)(next@15.5.4(@babel/core@7.28.4)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(sass@1.93.2)): + next-with-less@3.0.1(less-loader@12.3.0(less@4.4.2))(less@4.4.2)(next@15.5.4(@babel/core@7.28.4)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(sass@1.93.2)): dependencies: clone-deep: 4.0.1 less: 4.4.2 - less-loader: 12.3.0(less@4.4.2)(webpack@5.102.1) + less-loader: 12.3.0(less@4.4.2) next: 15.5.4(@babel/core@7.28.4)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(sass@1.93.2) next@15.5.4(@babel/core@7.28.4)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(sass@1.93.2): @@ -9581,19 +9040,19 @@ snapshots: dependencies: mimic-function: 5.0.1 - open-react-map@0.9.1(core-js@3.46.0)(element-internals-polyfill@3.0.2)(jsdom@27.2.0)(mobx-react@9.2.1(mobx@6.15.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(mobx@6.15.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3): + open-react-map@0.9.1(core-js@3.46.0)(mobx-react@9.2.1(mobx@6.15.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(mobx@6.15.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3): dependencies: '@swc/helpers': 0.5.17 '@types/leaflet': 1.9.21 - koajax: 3.1.2(core-js@3.46.0)(element-internals-polyfill@3.0.2)(jsdom@27.2.0)(typescript@5.9.3) + koajax: 3.1.2(core-js@3.46.0)(typescript@5.9.3) leaflet: 1.9.4 mobx: 6.15.0 mobx-react: 9.2.1(mobx@6.15.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - mobx-react-helper: 0.5.1(element-internals-polyfill@3.0.2)(mobx@6.15.0)(react@19.2.0)(typescript@5.9.3) + mobx-react-helper: 0.5.1(mobx@6.15.0)(react@19.2.0)(typescript@5.9.3) react: 19.2.0 react-dom: 19.2.0(react@19.2.0) react-leaflet: 5.0.0(leaflet@1.9.4)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - web-utility: 4.6.2(element-internals-polyfill@3.0.2)(typescript@5.9.3) + web-utility: 4.6.2(typescript@5.9.3) transitivePeerDependencies: - core-js - element-internals-polyfill @@ -9655,10 +9114,6 @@ snapshots: parse-node-version@1.0.1: {} - parse5@8.0.0: - dependencies: - entities: 6.0.1 - parseurl@1.3.3: {} path-exists@4.0.0: {} @@ -9766,16 +9221,16 @@ snapshots: iconv-lite: 0.4.24 unpipe: 1.0.0 - react-bootstrap-editor@2.1.1(element-internals-polyfill@3.0.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3): + react-bootstrap-editor@2.1.1(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3): dependencies: '@swc/helpers': 0.5.17 - edkit: 1.2.7(element-internals-polyfill@3.0.2)(typescript@5.9.3) + edkit: 1.2.7(typescript@5.9.3) mobx: 6.15.0 mobx-react: 9.2.1(mobx@6.15.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - mobx-react-helper: 0.5.1(element-internals-polyfill@3.0.2)(mobx@6.15.0)(react@19.2.0)(typescript@5.9.3) + mobx-react-helper: 0.5.1(mobx@6.15.0)(react@19.2.0)(typescript@5.9.3) react: 19.2.0 react-dom: 19.2.0(react@19.2.0) - web-utility: 4.6.2(element-internals-polyfill@3.0.2)(typescript@5.9.3) + web-utility: 4.6.2(typescript@5.9.3) transitivePeerDependencies: - element-internals-polyfill - react-native @@ -10060,10 +9515,6 @@ snapshots: sax@1.4.1: optional: true - saxes@6.0.0: - dependencies: - xmlchars: 2.2.0 - scheduler@0.27.0: {} schema-utils@2.7.1: @@ -10076,7 +9527,7 @@ snapshots: dependencies: '@types/json-schema': 7.0.15 ajv: 8.17.1 - ajv-formats: 2.1.1(ajv@8.17.1) + ajv-formats: 2.1.1 ajv-keywords: 5.1.0(ajv@8.17.1) semver@5.7.2: @@ -10344,14 +9795,10 @@ snapshots: supports-preserve-symlinks-flag@1.0.0: {} - symbol-tree@3.2.4: {} - synckit@0.11.11: dependencies: '@pkgr/core': 0.2.9 - tapable@2.3.0: {} - temp-dir@2.0.0: {} tempy@0.6.0: @@ -10361,14 +9808,13 @@ snapshots: type-fest: 0.16.0 unique-string: 2.0.0 - terser-webpack-plugin@5.3.14(webpack@5.102.1): + terser-webpack-plugin@5.3.14: dependencies: '@jridgewell/trace-mapping': 0.3.31 jest-worker: 27.5.1 schema-utils: 4.3.3 serialize-javascript: 6.0.2 terser: 5.44.0 - webpack: 5.102.1 terser@5.44.0: dependencies: @@ -10386,12 +9832,6 @@ snapshots: fdir: 6.5.0(picomatch@4.0.3) picomatch: 4.0.3 - tldts-core@7.0.17: {} - - tldts@7.0.17: - dependencies: - tldts-core: 7.0.17 - to-regex-range@5.0.1: dependencies: is-number: 7.0.0 @@ -10406,18 +9846,10 @@ snapshots: toml@3.0.0: {} - tough-cookie@6.0.0: - dependencies: - tldts: 7.0.17 - tr46@1.0.1: dependencies: punycode: 2.3.1 - tr46@6.0.0: - dependencies: - punycode: 2.3.1 - trim-lines@3.0.1: {} trough@2.2.0: {} @@ -10661,82 +10093,25 @@ snapshots: vscode-uri@3.1.0: {} - w3c-xmlserializer@5.0.0: - dependencies: - xml-name-validator: 5.0.0 - warning@4.0.3: dependencies: loose-envify: 1.4.0 - watchpack@2.4.4: - dependencies: - glob-to-regexp: 0.4.1 - graceful-fs: 4.2.11 - web-streams-polyfill@4.2.0: {} - web-utility@4.6.2(element-internals-polyfill@3.0.2)(typescript@5.9.3): + web-utility@4.6.2(typescript@5.9.3): dependencies: '@swc/helpers': 0.5.17 - element-internals-polyfill: 3.0.2 regenerator-runtime: 0.14.1 typescript: 5.9.3 webidl-conversions@4.0.2: {} - webidl-conversions@8.0.0: {} - webpack-sources@1.4.3: dependencies: source-list-map: 2.0.1 source-map: 0.6.1 - webpack-sources@3.3.3: {} - - webpack@5.102.1: - dependencies: - '@types/eslint-scope': 3.7.7 - '@types/estree': 1.0.8 - '@types/json-schema': 7.0.15 - '@webassemblyjs/ast': 1.14.1 - '@webassemblyjs/wasm-edit': 1.14.1 - '@webassemblyjs/wasm-parser': 1.14.1 - acorn: 8.15.0 - acorn-import-phases: 1.0.4(acorn@8.15.0) - browserslist: 4.26.3 - chrome-trace-event: 1.0.4 - enhanced-resolve: 5.18.3 - es-module-lexer: 1.7.0 - eslint-scope: 5.1.1 - events: 3.3.0 - glob-to-regexp: 0.4.1 - graceful-fs: 4.2.11 - json-parse-even-better-errors: 2.3.1 - loader-runner: 4.3.1 - mime-types: 2.1.35 - neo-async: 2.6.2 - schema-utils: 4.3.3 - tapable: 2.3.0 - terser-webpack-plugin: 5.3.14(webpack@5.102.1) - watchpack: 2.4.4 - webpack-sources: 3.3.3 - transitivePeerDependencies: - - '@swc/core' - - esbuild - - uglify-js - - whatwg-encoding@3.1.1: - dependencies: - iconv-lite: 0.6.3 - - whatwg-mimetype@4.0.0: {} - - whatwg-url@15.1.0: - dependencies: - tr46: 6.0.0 - webidl-conversions: 8.0.0 - whatwg-url@7.1.0: dependencies: lodash.sortby: 4.7.0 @@ -10898,12 +10273,11 @@ snapshots: workbox-sw@6.6.0: {} - workbox-webpack-plugin@6.6.0(webpack@5.102.1): + workbox-webpack-plugin@6.6.0: dependencies: fast-json-stable-stringify: 2.1.0 pretty-bytes: 5.6.0 upath: 1.2.0 - webpack: 5.102.1 webpack-sources: 1.4.3 workbox-build: 6.6.0 transitivePeerDependencies: @@ -10923,14 +10297,8 @@ snapshots: wrappy@1.0.2: {} - ws@8.18.3: {} - xdg-basedir@5.1.0: {} - xml-name-validator@5.0.0: {} - - xmlchars@2.2.0: {} - yallist@3.1.1: {} yaml@2.8.1: {} From 3a1f9644bdec02e49fa9b8d3e5268c09d327d35e Mon Sep 17 00:00:00 2001 From: dethan3 Date: Sat, 6 Dec 2025 13:22:25 +0800 Subject: [PATCH 3/6] feat(finance): internationalize finance page and fund cards - Replace hardcoded Chinese copy in /pages/finance and FundCard with i18n t() calls - Refactor finance constants to export i18n label keys instead of raw strings - Add finance-related translation entries for zh-CN, en-US, and zh-TW - Move Finance styles from global SCSS to co-located Finance.module.less - Tweak AkShare/finance data utilities and API handler to align with new flow --- .../Finance/Finance.module.less | 0 components/Finance/FundCard.tsx | 137 +++++------ constants/finance.ts | 19 +- lib/akshare.ts | 12 +- lib/finance.ts | 42 ++-- models/Finance.ts | 27 +-- pages/api/finance/index-funds.ts | 83 +++---- pages/finance/index.tsx | 215 ++++++++++-------- translation/en-US.ts | 67 ++++++ translation/zh-CN.ts | 65 ++++++ translation/zh-TW.ts | 65 ++++++ 11 files changed, 460 insertions(+), 272 deletions(-) rename styles/Finance.module.scss => components/Finance/Finance.module.less (100%) diff --git a/styles/Finance.module.scss b/components/Finance/Finance.module.less similarity index 100% rename from styles/Finance.module.scss rename to components/Finance/Finance.module.less diff --git a/components/Finance/FundCard.tsx b/components/Finance/FundCard.tsx index 9b0ea5e..9ada846 100644 --- a/components/Finance/FundCard.tsx +++ b/components/Finance/FundCard.tsx @@ -1,36 +1,39 @@ -import { FC, useMemo } from 'react'; +import { FC, useContext, useMemo } from 'react'; import { Badge, Card } from 'react-bootstrap'; -import { INDEX_CATEGORY_LABELS, INDEX_RISK_LABELS } from '../../constants/finance'; -import styles from '../../styles/Finance.module.scss'; +import { INDEX_CATEGORY_LABEL_KEYS, INDEX_RISK_LABEL_KEYS } from '../../constants/finance'; +import { I18nContext } from '../../models/Translation'; import { IndexFundSnapshot, IndexHistoryPoint } from '../../types/finance'; +import styles from './Finance.module.less'; export interface FundCardProps { data: IndexFundSnapshot; } -const formatNumber = (value: number | null | undefined) => - value == null ? '--' : value.toLocaleString('zh-CN', { maximumFractionDigits: 2 }); +const formatNumber = (value?: number | null) => + value != null ? value.toLocaleString('zh-CN', { maximumFractionDigits: 2 }) : '--'; -const formatPercent = (value: number | null | undefined) => - value == null ? '--' : `${(value * 100).toFixed(2)}%`; +const formatPercent = (value?: number | null) => + value != null ? `${(value * 100).toFixed(2)}%` : '--'; -const valueTone = (value: number | null | undefined) => - value == null ? styles.mutedText : value >= 0 ? styles.positiveText : styles.negativeText; +const valueTone = (value?: number | null) => + value != null ? (value >= 0 ? styles.positiveText : styles.negativeText) : styles.mutedText; const Sparkline: FC<{ points: IndexHistoryPoint[]; chartId: string }> = ({ points, chartId }) => { + const { t } = useContext(I18nContext); + const { polyline, gradientStops } = useMemo(() => { if (!points.length) return { polyline: '', gradientStops: [] as number[] }; - const values = points.map(point => point.value); + const values = points.map(({ value }) => value); const min = Math.min(...values); const max = Math.max(...values); const delta = max - min || 1; const polylinePoints = points - .map((point, index) => { - const x = (index / Math.max(points.length - 1, 1)) * 100; - const y = ((max - point.value) / delta) * 40; + .map(({ value }, index, { length }) => { + const x = (index / Math.max(length - 1, 1)) * 100; + const y = ((max - value) / delta) * 40; return `${x.toFixed(2)},${y.toFixed(2)}`; }) @@ -40,14 +43,11 @@ const Sparkline: FC<{ points: IndexHistoryPoint[]; chartId: string }> = ({ point return { polyline: polylinePoints, gradientStops: gradientOffsets }; }, [points]); - - if (!points.length) return
数据准备中
; - const gradientId = `${chartId}-gradient`; return (
- + {gradientStops.map(offset => ( @@ -73,22 +73,25 @@ const Sparkline: FC<{ points: IndexHistoryPoint[]; chartId: string }> = ({ point ); }; -export const FundCard: FC = ({ data }) => { - const { - displayName, - category, - riskLevel, - latestValue, - dailyChangePct, - oneYearReturnPct, - maxDrawdownPct, - tags, - sparkline, - updatedAt, - fallback, - description, - } = data; - const sparklineId = useMemo(() => `fund-${data.symbol}`, [data.symbol]); +export const FundCard: FC = ({ + symbol, + displayName, + category, + riskLevel, + latestValue, + dailyChangePct, + oneYearReturnPct, + maxDrawdownPct, + tags, + sparkline, + updatedAt, + fallback, + description, + source, +}) => { + const { t } = useContext(I18nContext); + const sparklineId = useMemo(() => `fund-${symbol}`, [symbol]); + const updatedAtISO = updatedAt ? new Date(updatedAt).toJSON() : undefined; return ( @@ -100,7 +103,7 @@ export const FundCard: FC = ({ data }) => {

{displayName}

- {INDEX_CATEGORY_LABELS[category]} + {t(INDEX_CATEGORY_LABEL_KEYS[category])} = ({ data }) => { : 'success' } > - {INDEX_RISK_LABELS[riskLevel]} + {t(INDEX_RISK_LABEL_KEYS[riskLevel])} {fallback && ( - 离线数据 + {t('offline_data')} )}
- 数据源
- {data.source.historyEndpoint} + {t('data_source')}
+ {source.historyEndpoint}

{description}

-
-
-

最新点位

- {formatNumber(latestValue)} -
-
-

日涨跌

- {formatPercent(dailyChangePct)} -
-
-

近 1 年收益

- - {formatPercent(oneYearReturnPct)} - -
-
-

最大回撤

- {formatPercent(maxDrawdownPct)} -
-
+
+
{t('index_metric_latest_value')}
+
{formatNumber(latestValue)}
+ +
{t('index_metric_daily_change')}
+
{formatPercent(dailyChangePct)}
+ +
{t('index_metric_one_year_return')}
+
{formatPercent(oneYearReturnPct)}
- +
{t('index_metric_max_drawdown')}
+
{formatPercent(maxDrawdownPct)}
+
-
+ {sparkline.length ? ( + + ) : ( +
{t('data_preparing')}
+ )} + +
    {tags?.map(tag => ( - + {tag} ))} -
+ -
- 更新于 {updatedAt || '--'} - - 查看详情 → - -
+ + + + {t('view_details')} + ); diff --git a/constants/finance.ts b/constants/finance.ts index 8fa5e7b..3fb8bc3 100644 --- a/constants/finance.ts +++ b/constants/finance.ts @@ -1,13 +1,16 @@ import { IndexFundCategory, IndexRiskLevel } from '../types/finance'; +import zhCN from '../translation/zh-CN'; -export const INDEX_CATEGORY_LABELS: Record = { - broad: '宽基', - sector: '行业', - theme: '主题', +export type FinanceLabelKey = keyof typeof zhCN; + +export const INDEX_CATEGORY_LABEL_KEYS: Record = { + broad: 'index_category_broad', + sector: 'index_category_sector', + theme: 'index_category_theme', }; -export const INDEX_RISK_LABELS: Record = { - conservative: '保守', - balanced: '稳健', - aggressive: '进取', +export const INDEX_RISK_LABEL_KEYS: Record = { + conservative: 'index_risk_conservative', + balanced: 'index_risk_balanced', + aggressive: 'index_risk_aggressive', }; diff --git a/lib/akshare.ts b/lib/akshare.ts index 862ea94..040965f 100644 --- a/lib/akshare.ts +++ b/lib/akshare.ts @@ -1,3 +1,5 @@ +import { buildURLData } from 'web-utility'; + const DEFAULT_HOSTS = [ process.env.AKSHARE_API_BASE, 'https://akshare.xyz/api/public', @@ -8,8 +10,6 @@ export async function requestAkShareJSON( endpoint: string, params?: Record, ): Promise { - if (!DEFAULT_HOSTS.length) throw new Error('No AkShare host configured'); - let lastError: Error | null = null; for (const host of DEFAULT_HOSTS) { @@ -17,13 +17,7 @@ export async function requestAkShareJSON( const url = new URL(endpoint.replace(/^\//, ''), host.endsWith('/') ? host : `${host}/`); if (params) { - const searchParams = new URLSearchParams(); - - Object.entries(params).forEach(([key, value]) => { - if (value !== undefined) searchParams.append(key, String(value)); - }); - - const serialized = searchParams.toString(); + const serialized = buildURLData(params).toString(); if (serialized) url.search = serialized; } diff --git a/lib/finance.ts b/lib/finance.ts index 49f2e48..b4ebda2 100644 --- a/lib/finance.ts +++ b/lib/finance.ts @@ -2,11 +2,8 @@ import { IndexHistoryPoint } from '../types/finance'; export const TRADING_DAYS_PER_YEAR = 252; -export function computeChangePct(current?: number | null, base?: number | null) { - if (current == null || base == null || base === 0) return null; - - return (current - base) / base; -} +export const computeChangePct = (current?: number | null, base?: number | null): number | null => + current == null || base == null || base === 0 ? null : (current - base) / base; export function computeOneYearReturn(series: IndexHistoryPoint[]) { if (series.length < 2) return null; @@ -16,12 +13,10 @@ export function computeOneYearReturn(series: IndexHistoryPoint[]) { if (recent.length < 2) return null; - const first = recent[0].value; - const last = recent[recent.length - 1].value; - - if (!first) return null; + const [{ value: first }] = recent; + const { value: last } = recent.at(-1)!; - return (last - first) / first; + return computeChangePct(last, first); } export function computeMaxDrawdown(series: IndexHistoryPoint[]) { @@ -32,35 +27,26 @@ export function computeMaxDrawdown(series: IndexHistoryPoint[]) { let peak = sorted[0].value; let maxDrawdown = 0; - sorted.forEach(point => { - const { value } = point; - + for (const { value } of sorted) { if (value > peak) peak = value; - if (!peak) return; + if (!peak) break; - const drawdown = (value - peak) / peak; + const drawdown = computeChangePct(value, peak); - if (drawdown < maxDrawdown) maxDrawdown = drawdown; - }); + if (drawdown != null && drawdown < maxDrawdown) maxDrawdown = drawdown; + } - return maxDrawdown || null; + return maxDrawdown; } export function computeDailyChange(series: IndexHistoryPoint[]) { if (series.length < 2) return null; - const sorted = [...series].sort((a, b) => a.date.localeCompare(b.date)); - const latest = sorted[sorted.length - 1].value; - const previous = sorted[sorted.length - 2].value; + const [{ value: previous }, { value: latest }] = series.slice(-2); return computeChangePct(latest, previous); } -export function buildSparkline(series: IndexHistoryPoint[], limit = 30) { - if (!series.length) return []; - - const sorted = [...series].sort((a, b) => a.date.localeCompare(b.date)); - - return sorted.slice(-limit); -} +export const buildSparkline = (series: IndexHistoryPoint[], limit = 30) => + [...series].sort((a, b) => a.date.localeCompare(b.date)).slice(-limit); diff --git a/models/Finance.ts b/models/Finance.ts index 9225203..d2bab1a 100644 --- a/models/Finance.ts +++ b/models/Finance.ts @@ -1,4 +1,6 @@ +import { observable } from 'mobx'; import { ListModel } from 'mobx-restful'; +import { buildURLData } from 'web-utility'; import { ownClient } from './Base'; import { IndexFundSnapshot, IndexFundCategory, IndexRiskLevel } from '../types/finance'; @@ -17,31 +19,18 @@ export class IndexFundModel extends ListModel(path); - const data = body?.data || []; - const totalCount = body?.meta?.total ?? data.length; + const pageData = body?.data || []; + const totalCount = body?.meta?.total ?? pageData.length; - return { - pageData: data, - totalCount, - }; + return { pageData, totalCount }; } } diff --git a/pages/api/finance/index-funds.ts b/pages/api/finance/index-funds.ts index 6211164..968a9cd 100644 --- a/pages/api/finance/index-funds.ts +++ b/pages/api/finance/index-funds.ts @@ -1,4 +1,6 @@ -import type { NextApiRequest, NextApiResponse } from 'next'; +import { Context } from 'koa'; +import { createKoaRouter, withKoaRouter } from 'next-ssr-middleware'; +import { formatDate } from 'web-utility'; import { requestAkShareJSON } from '../../../lib/akshare'; import { @@ -12,6 +14,7 @@ import type { IndexFundSnapshot, IndexHistoryPoint, } from '../../../types/finance'; +import { safeAPI } from '../core'; const CACHE_TTL_MS = 60_000; const HISTORY_ENDPOINT = 'stock_zh_index_daily_em'; @@ -122,23 +125,17 @@ function unwrapAkShareRecords(payload: unknown): AkShareDailyRecord[] { throw new Error('Unexpected AkShare payload format'); } -function normalizeHistory(records: AkShareDailyRecord[]): IndexHistoryPoint[] { - return records +const normalizeHistory = (records: AkShareDailyRecord[]): IndexHistoryPoint[] => + records .map(({ date, 日期, close, 收盘 }) => { const normalizedDate = (date || 日期 || '').slice(0, 10); const value = Number(close ?? 收盘); - - if (!normalizedDate || Number.isNaN(value)) return undefined; - - return { date: normalizedDate, value }; + if (normalizedDate && !Number.isNaN(value)) return { date: normalizedDate, value }; }) .filter((item): item is IndexHistoryPoint => !!item) .sort((a, b) => a.date.localeCompare(b.date)); -} -function formatAkShareDate(input: Date) { - return input.toISOString().slice(0, 10).replace(/-/g, ''); -} +const formatAkShareDate = (input: Date) => formatDate(input, 'YYYYMMDD'); async function fetchHistorySeries(symbol: string) { const end = new Date(); @@ -195,7 +192,8 @@ function buildSyntheticSparkline(symbol: string, points = FALLBACK_HISTORY_POINT function buildSyntheticSnapshot(preset: IndexFundDefinition): IndexFundSnapshot { const sparkline = buildSyntheticSparkline(preset.symbol); - const latestValue = sparkline.at(-1)?.value ?? null; + const { value: latestValue = null, date: updatedAt = null } = (sparkline.at(-1) || + {}) as Partial; return { ...preset, @@ -204,7 +202,7 @@ function buildSyntheticSnapshot(preset: IndexFundDefinition): IndexFundSnapshot oneYearReturnPct: computeOneYearReturn(sparkline), maxDrawdownPct: computeMaxDrawdown(sparkline), sparkline: buildSparkline(sparkline, HISTORY_SPARKLINE_POINTS), - updatedAt: sparkline.at(-1)?.date ?? null, + updatedAt, source: { historyEndpoint: `${HISTORY_ENDPOINT} (fallback)` }, fallback: true, }; @@ -270,31 +268,36 @@ function applyFilters( return filtered; } -export default async function handler(request: NextApiRequest, response: NextApiResponse) { - if (request.method !== 'GET') - return response.status(405).json({ message: 'Method Not Allowed, only GET supported' }); - - try { - const snapshots = await getCachedSnapshots(); - const filtered = applyFilters(snapshots, request.query); - - response.setHeader('Cache-Control', 's-maxage=60, stale-while-revalidate=300'); - - return response.status(200).json({ - data: filtered, - meta: { - total: snapshots.length, - returned: filtered.length, - cached: - cache != null && - Date.now() - cache.timestamp < CACHE_TTL_MS && - filtered.length === snapshots.length, - source: HISTORY_ENDPOINT, - }, - }); - } catch (error) { - console.error('[Finance] Failed to build index snapshot:', error); +export const config = { api: { bodyParser: false } }; + +const router = createKoaRouter(import.meta.url); + +router.get('/', safeAPI, async (context: Context) => { + const snapshots = await getCachedSnapshots(); + const filtered = applyFilters( + snapshots, + context.query as { + category?: string | string[]; + riskLevel?: string | string[]; + limit?: string | string[]; + }, + ); + + const cached = + cache != null && + Date.now() - cache.timestamp < CACHE_TTL_MS && + filtered.length === snapshots.length; + + context.set('Cache-Control', 's-maxage=60, stale-while-revalidate=300'); + context.body = { + data: filtered, + meta: { + total: snapshots.length, + returned: filtered.length, + cached, + source: HISTORY_ENDPOINT, + }, + }; +}); - return response.status(500).json({ message: (error as Error).message }); - } -} +export default withKoaRouter(router); diff --git a/pages/finance/index.tsx b/pages/finance/index.tsx index 4058e82..423af98 100644 --- a/pages/finance/index.tsx +++ b/pages/finance/index.tsx @@ -4,26 +4,46 @@ import { ScrollList } from 'mobx-restful-table'; import { FC, useContext, useMemo, useState } from 'react'; import { Badge, Button, Col, Container, Row } from 'react-bootstrap'; +import styles from '../../components/Finance/Finance.module.less'; import { FundCard } from '../../components/Finance/FundCard'; import { PageHead } from '../../components/Layout/PageHead'; -import { INDEX_CATEGORY_LABELS, INDEX_RISK_LABELS } from '../../constants/finance'; +import { + type FinanceLabelKey, + INDEX_CATEGORY_LABEL_KEYS, + INDEX_RISK_LABEL_KEYS, +} from '../../constants/finance'; import { IndexFundFilter, indexFundStore } from '../../models/Finance'; import { I18nContext } from '../../models/Translation'; -import styles from '../../styles/Finance.module.scss'; import { IndexFundCategory, IndexRiskLevel } from '../../types/finance'; -const categoryOptions: { label: string; value?: IndexFundCategory }[] = [ - { label: '全部', value: undefined }, - { label: '宽基', value: 'broad' }, - { label: '行业', value: 'sector' }, - { label: '主题', value: 'theme' }, +const categoryOptions: { labelKey: FinanceLabelKey; value?: IndexFundCategory }[] = [ + { labelKey: 'finance_all', value: undefined }, + { labelKey: 'index_category_broad', value: 'broad' }, + { labelKey: 'index_category_sector', value: 'sector' }, + { labelKey: 'index_category_theme', value: 'theme' }, ]; -const riskOptions: { label: string; value?: IndexRiskLevel; description: string }[] = [ - { label: '全部', value: undefined, description: '不限风险偏好' }, - { label: '保守', value: 'conservative', description: '波动小于 12%' }, - { label: '稳健', value: 'balanced', description: '波动 12%-20%' }, - { label: '进取', value: 'aggressive', description: '波动大于 20%' }, +const riskOptions: { + labelKey: FinanceLabelKey; + value?: IndexRiskLevel; + descriptionKey: FinanceLabelKey; +}[] = [ + { labelKey: 'finance_all', value: undefined, descriptionKey: 'finance_filter_risk_all_desc' }, + { + labelKey: 'index_risk_conservative', + value: 'conservative', + descriptionKey: 'finance_filter_risk_conservative_desc', + }, + { + labelKey: 'index_risk_balanced', + value: 'balanced', + descriptionKey: 'finance_filter_risk_balanced_desc', + }, + { + labelKey: 'index_risk_aggressive', + value: 'aggressive', + descriptionKey: 'finance_filter_risk_aggressive_desc', + }, ]; const FinanceLandingPage: FC = observer(() => { @@ -33,11 +53,15 @@ const FinanceLandingPage: FC = observer(() => { const [riskLevel, setRiskLevel] = useState(); const filterSummary = useMemo(() => { - const categoryText = category ? `${INDEX_CATEGORY_LABELS[category]}指数` : '全部类别'; - const riskText = riskLevel ? `${INDEX_RISK_LABELS[riskLevel]}风险` : '全部风险'; + const categoryText = category + ? `${t(INDEX_CATEGORY_LABEL_KEYS[category])}${t('finance_filter_category_suffix')}` + : t('finance_filter_category_all'); + const riskText = riskLevel + ? `${t(INDEX_RISK_LABEL_KEYS[riskLevel])}${t('finance_filter_risk_suffix')}` + : t('finance_filter_risk_all'); return `${categoryText} · ${riskText}`; - }, [category, riskLevel]); + }, [category, riskLevel, t]); const resetFilters = () => { setCategory(undefined); @@ -48,83 +72,74 @@ const FinanceLandingPage: FC = observer(() => { return ( - + -
- - - - Beta - -

指数基金理财 · 国内优选

-

- 基于 AKShare - 指数数据构建的国内指数基金精选,帮助小白用户快速理解风险、收益与波动,挑选适合自己的定投组合。 -

-
- AKShare 指数数据 - 实时行情 & 历史回测 - 风险等级分层 -
-
- - -
- - -
-
-

覆盖指数

- - {Math.max(indexFundStore.totalCount || 0, 8)}+ - - 宽基 + 行业核心指数 -
-
-

数据刷新

- 60s - 实时行情自动更新 -
-
-

风险提示

- 3 - 保守 · 稳健 · 进取 -
-
- -
-
+ + + + {t('beta')} + +

{t('finance_hero_title')}

+

{t('finance_hero_intro')}

+
    +
  • {t('finance_hero_chip_akshare_data')}
  • +
  • {t('finance_hero_chip_realtime_backtest')}
  • +
  • {t('finance_hero_chip_risk_layers')}
  • +
+
+ + +
+ + +
    +
  • +

    {t('finance_hero_stat_coverage_label')}

    + {Math.max(indexFundStore.totalCount || 0, 8)}+ + {t('finance_hero_stat_coverage_sub')} +
  • +
  • +

    {t('finance_hero_stat_refresh_label')}

    + {t('finance_hero_stat_refresh_value')} + {t('finance_hero_stat_refresh_sub')} +
  • +
  • +

    {t('finance_hero_stat_risk_label')}

    + {t('finance_hero_stat_risk_value')} + {t('finance_hero_stat_risk_sub')} +
  • +
+ +
-

快速筛选

+

{t('finance_filter_title')}

- 根据风险与类别筛选适合的指数基金,所选条件:{filterSummary} + {t('finance_filter_summary_prefix')} + {filterSummary}

-

指数类别

+

{t('finance_filter_category_label')}

- {categoryOptions.map(({ label, value }) => { + {categoryOptions.map(({ labelKey, value }) => { const active = value === undefined ? !category : category === value; return ( ); })} @@ -141,14 +156,14 @@ const FinanceLandingPage: FC = observer(() => {
-

风险等级

+

{t('finance_filter_risk_label')}

- {riskOptions.map(({ label, value, description }) => { + {riskOptions.map(({ labelKey, value, descriptionKey }) => { const active = value === undefined ? !riskLevel : riskLevel === value; return ( ); })} @@ -170,24 +185,24 @@ const FinanceLandingPage: FC = observer(() => {
-

指数基金精选

-

展示指数:{filterSummary},数据源 AkShare

+

{t('finance_list_title')}

+

+ {t('finance_list_subtitle_prefix')} + {filterSummary} + {t('finance_list_subtitle_suffix')} +

- {indexFundStore.downloading > 0 && ( -
- -
- )} + {indexFundStore.downloading > 0 && } { {funds.map(fund => ( - + ))} ) : (
-

暂无符合条件的指数

-

尝试放宽筛选条件,或稍后再试。

+

{t('finance_empty_title')}

+

{t('finance_empty_subtitle')}

) @@ -219,21 +234,21 @@ const FinanceLandingPage: FC = observer(() => {
-

指数基金三句话

+

{t('finance_edu_title')}

    -
  • 跟踪一篮子股票,成本低、透明度高。
  • -
  • 长期定投平滑风险,优先关注宽基指数。
  • -
  • 用数据衡量风险:波动、回撤、估值百分位。
  • +
  • {t('finance_edu_point_1')}
  • +
  • {t('finance_edu_point_2')}
  • +
  • {t('finance_edu_point_3')}
-

下一步

+

{t('finance_edu_next_steps')}

    -
  1. 挑选 2-3 支指数,加入收藏/关注列表。
  2. -
  3. 了解对应的 ETF 或联接基金,关注费率与规模。
  4. -
  5. 设定定投计划并持续跟踪估值、回撤。
  6. +
  7. {t('finance_edu_next_1')}
  8. +
  9. {t('finance_edu_next_2')}
  10. +
  11. {t('finance_edu_next_3')}
diff --git a/translation/en-US.ts b/translation/en-US.ts index 846ea9e..b7fc156 100644 --- a/translation/en-US.ts +++ b/translation/en-US.ts @@ -119,4 +119,71 @@ export default { NGO_area_distribution: 'NGO Area Distribution', NGO_service_distribution: 'NGO Service Distribution', NGO_type_distribution: 'NGO Type Distribution', + index_category_broad: 'Broad-based', + index_category_sector: 'Sector', + index_category_theme: 'Thematic', + index_risk_conservative: 'Conservative', + index_risk_balanced: 'Balanced', + index_risk_aggressive: 'Aggressive', + index_sparkline_60d_label: 'Last 60 days trend', + data_preparing: 'Data preparing', + offline_data: 'Offline data', + data_source: 'Data source', + index_metric_latest_value: 'Latest value', + index_metric_daily_change: 'Daily change', + index_metric_one_year_return: '1-year return', + index_metric_max_drawdown: 'Max drawdown', + updated_at: 'Updated at', + view_details: 'View details →', + beta: 'Beta', + finance_page_title: 'Index Fund Picks', + finance_page_description: + 'A curated index fund page for beginner investors in China, powered by AKShare real-time data.', + finance_hero_title: 'Index Fund Investing · China Selection', + finance_hero_intro: + 'A curated set of Chinese index funds based on AKShare data, helping beginners understand risk, return and volatility to build a suitable portfolio.', + finance_hero_chip_akshare_data: 'AKShare index data', + finance_hero_chip_realtime_backtest: 'Real-time prices & backtest', + finance_hero_chip_risk_layers: 'Risk level tiers', + finance_hero_cta_pick: 'Start choosing', + finance_hero_cta_guide: 'Beginner guide', + finance_hero_stat_coverage_label: 'Index coverage', + finance_hero_stat_coverage_sub: 'Broad + sector core indices', + finance_hero_stat_refresh_label: 'Data refresh', + finance_hero_stat_refresh_value: '60s', + finance_hero_stat_refresh_sub: 'Auto-updating real-time prices', + finance_hero_stat_risk_label: 'Risk tips', + finance_hero_stat_risk_value: '3', + finance_hero_stat_risk_sub: 'Conservative · Balanced · Aggressive', + finance_filter_title: 'Quick filter', + finance_filter_summary_prefix: 'Filter by risk and category, current selection: ', + finance_filter_reset: 'Clear filters', + finance_filter_category_label: 'Index category', + finance_filter_risk_label: 'Risk level', + finance_filter_category_suffix: ' index', + finance_filter_risk_suffix: ' risk', + finance_filter_category_all: 'All categories', + finance_filter_risk_all: 'All risk levels', + finance_all: 'All', + finance_filter_risk_all_desc: 'No risk preference', + finance_filter_risk_conservative_desc: 'Volatility < 12%', + finance_filter_risk_balanced_desc: 'Volatility 12%-20%', + finance_filter_risk_aggressive_desc: 'Volatility > 20%', + finance_list_title: 'Selected index funds', + finance_list_subtitle_prefix: 'Showing indices: ', + finance_list_subtitle_suffix: ', data source: AKShare', + finance_list_export_soon: 'Data export (coming soon)', + finance_list_strategy_suggestion: 'Strategy suggestions', + finance_empty_title: 'No matching indices', + finance_empty_subtitle: 'Try relaxing the filters or come back later.', + finance_empty_reset_button: 'Reset filters', + finance_edu_title: 'Three key points about index funds', + finance_edu_point_1: 'Track a basket of stocks with low cost and high transparency.', + finance_edu_point_2: 'Use long-term periodic investing, prioritize broad-based indices.', + finance_edu_point_3: 'Measure risk with volatility, drawdown and valuation percentiles.', + finance_edu_next_steps: 'Next steps', + finance_edu_next_1: 'Pick 2-3 indices and add them to your watchlist.', + finance_edu_next_2: + 'Find corresponding ETFs or index funds, paying attention to fees and fund size.', + finance_edu_next_3: 'Set up a recurring investment plan and track valuation and drawdown.', }; diff --git a/translation/zh-CN.ts b/translation/zh-CN.ts index 9885bc1..7fe7629 100644 --- a/translation/zh-CN.ts +++ b/translation/zh-CN.ts @@ -117,4 +117,69 @@ export default { NGO_area_distribution: 'NGO 地区分布', NGO_service_distribution: 'NGO 服务分布', NGO_type_distribution: 'NGO 类型分布', + index_category_broad: '宽基', + index_category_sector: '行业', + index_category_theme: '主题', + index_risk_conservative: '保守', + index_risk_balanced: '稳健', + index_risk_aggressive: '进取', + index_sparkline_60d_label: '近 60 日走势', + data_preparing: '数据准备中', + offline_data: '离线数据', + data_source: '数据源', + index_metric_latest_value: '最新点位', + index_metric_daily_change: '日涨跌', + index_metric_one_year_return: '近 1 年收益', + index_metric_max_drawdown: '最大回撤', + updated_at: '更新于', + view_details: '查看详情 →', + beta: 'Beta', + finance_page_title: '指数基金理财精选', + finance_page_description: '面向小白用户的国内指数基金精选页面,基于 AKShare 数据实时刷新。', + finance_hero_title: '指数基金理财 · 国内优选', + finance_hero_intro: + '基于 AKShare 指数数据构建的国内指数基金精选,帮助小白用户快速理解风险、收益与波动,挑选适合自己的定投组合。', + finance_hero_chip_akshare_data: 'AKShare 指数数据', + finance_hero_chip_realtime_backtest: '实时行情 & 历史回测', + finance_hero_chip_risk_layers: '风险等级分层', + finance_hero_cta_pick: '开始挑选', + finance_hero_cta_guide: '理财小白指南', + finance_hero_stat_coverage_label: '覆盖指数', + finance_hero_stat_coverage_sub: '宽基 + 行业核心指数', + finance_hero_stat_refresh_label: '数据刷新', + finance_hero_stat_refresh_value: '60s', + finance_hero_stat_refresh_sub: '实时行情自动更新', + finance_hero_stat_risk_label: '风险提示', + finance_hero_stat_risk_value: '3', + finance_hero_stat_risk_sub: '保守 · 稳健 · 进取', + finance_filter_title: '快速筛选', + finance_filter_summary_prefix: '根据风险与类别筛选适合的指数基金,所选条件:', + finance_filter_reset: '清空条件', + finance_filter_category_label: '指数类别', + finance_filter_risk_label: '风险等级', + finance_filter_category_suffix: '指数', + finance_filter_risk_suffix: '风险', + finance_filter_category_all: '全部类别', + finance_filter_risk_all: '全部风险', + finance_all: '全部', + finance_filter_risk_all_desc: '不限风险偏好', + finance_filter_risk_conservative_desc: '波动小于 12%', + finance_filter_risk_balanced_desc: '波动 12%-20%', + finance_filter_risk_aggressive_desc: '波动大于 20%', + finance_list_title: '指数基金精选', + finance_list_subtitle_prefix: '展示指数:', + finance_list_subtitle_suffix: ',数据源 AkShare', + finance_list_export_soon: '数据导出(即将上线)', + finance_list_strategy_suggestion: '策略组合建议', + finance_empty_title: '暂无符合条件的指数', + finance_empty_subtitle: '尝试放宽筛选条件,或稍后再试。', + finance_empty_reset_button: '重置筛选', + finance_edu_title: '指数基金三句话', + finance_edu_point_1: '跟踪一篮子股票,成本低、透明度高。', + finance_edu_point_2: '长期定投平滑风险,优先关注宽基指数。', + finance_edu_point_3: '用数据衡量风险:波动、回撤、估值百分位。', + finance_edu_next_steps: '下一步', + finance_edu_next_1: '挑选 2-3 支指数,加入收藏/关注列表。', + finance_edu_next_2: '了解对应的 ETF 或联接基金,关注费率与规模。', + finance_edu_next_3: '设定定投计划并持续跟踪估值、回撤。', }; diff --git a/translation/zh-TW.ts b/translation/zh-TW.ts index 073657d..bfabbad 100644 --- a/translation/zh-TW.ts +++ b/translation/zh-TW.ts @@ -117,4 +117,69 @@ export default { NGO_area_distribution: 'NGO 地區分佈', NGO_service_distribution: 'NGO 服務分佈', NGO_type_distribution: 'NGO 類型分佈', + index_category_broad: '寬基', + index_category_sector: '行業', + index_category_theme: '主題', + index_risk_conservative: '保守', + index_risk_balanced: '穩健', + index_risk_aggressive: '進取', + index_sparkline_60d_label: '近 60 日走勢', + data_preparing: '數據準備中', + offline_data: '離線數據', + data_source: '數據源', + index_metric_latest_value: '最新點位', + index_metric_daily_change: '日漲跌', + index_metric_one_year_return: '近 1 年收益', + index_metric_max_drawdown: '最大回撤', + updated_at: '更新於', + view_details: '查看詳情 →', + beta: 'Beta', + finance_page_title: '指數基金理財精選', + finance_page_description: '面向新手用戶的國內指數基金精選頁面,基於 AKShare 數據即時更新。', + finance_hero_title: '指數基金理財 · 國內優選', + finance_hero_intro: + '基於 AKShare 指數數據構建的國內容指數基金精選,幫助新手用戶快速理解風險、收益與波動,挑選適合自己的定投組合。', + finance_hero_chip_akshare_data: 'AKShare 指數數據', + finance_hero_chip_realtime_backtest: '即時行情 & 歷史回測', + finance_hero_chip_risk_layers: '風險等級分層', + finance_hero_cta_pick: '開始挑選', + finance_hero_cta_guide: '理財新手指南', + finance_hero_stat_coverage_label: '覆蓋指數', + finance_hero_stat_coverage_sub: '寬基 + 行業核心指數', + finance_hero_stat_refresh_label: '數據刷新', + finance_hero_stat_refresh_value: '60s', + finance_hero_stat_refresh_sub: '即時行情自動更新', + finance_hero_stat_risk_label: '風險提示', + finance_hero_stat_risk_value: '3', + finance_hero_stat_risk_sub: '保守 · 穩健 · 進取', + finance_filter_title: '快速篩選', + finance_filter_summary_prefix: '根據風險與類別篩選合適的指數基金,目前條件:', + finance_filter_reset: '清空條件', + finance_filter_category_label: '指數類別', + finance_filter_risk_label: '風險等級', + finance_filter_category_suffix: '指數', + finance_filter_risk_suffix: '風險', + finance_filter_category_all: '全部類別', + finance_filter_risk_all: '全部風險', + finance_all: '全部', + finance_filter_risk_all_desc: '不限風險偏好', + finance_filter_risk_conservative_desc: '波動小於 12%', + finance_filter_risk_balanced_desc: '波動 12%-20%', + finance_filter_risk_aggressive_desc: '波動大於 20%', + finance_list_title: '指數基金精選', + finance_list_subtitle_prefix: '展示指數:', + finance_list_subtitle_suffix: ',數據源 AkShare', + finance_list_export_soon: '數據導出(即將上線)', + finance_list_strategy_suggestion: '策略組合建議', + finance_empty_title: '暫無符合條件的指數', + finance_empty_subtitle: '嘗試放寬篩選條件,或稍後再試。', + finance_empty_reset_button: '重置篩選', + finance_edu_title: '指數基金三句話', + finance_edu_point_1: '跟蹤一籃子股票,成本低、透明度高。', + finance_edu_point_2: '長期定投平滑風險,優先關注寬基指數。', + finance_edu_point_3: '用數據衡量風險:波動、回撤、估值百分位。', + finance_edu_next_steps: '下一步', + finance_edu_next_1: '挑選 2-3 支指數,加入收藏/關注列表。', + finance_edu_next_2: '了解對應的 ETF 或聯接基金,關注費率與規模。', + finance_edu_next_3: '設定定投計畫並持續跟蹤估值、回撤。', }; From 4d8946327698b504eac2c68f083468a26323b824 Mon Sep 17 00:00:00 2001 From: TechQuery Date: Sat, 6 Dec 2025 18:21:33 +0800 Subject: [PATCH 4/6] [refactor] split Spark Line component into an independent module [optimize] simplify CSS modules & Finance page [migrate] upgrade to Next.js 16, Koa Router 15, Marked 17, ECharts-JSX 0.6 & other latest Upstream packages --- README.md | 2 +- components/Finance/Finance.module.less | 146 +- components/Finance/FundCard.tsx | 81 +- components/Finance/SparkLine.module.less | 17 + components/Finance/SparkLine.tsx | 89 + constants/finance.ts | 8 +- eslint.config.ts | 4 +- lib/akshare.ts | 6 +- models/Finance.ts | 8 +- models/Translation.ts | 2 + package.json | 73 +- pages/api/finance/index-funds.ts | 11 +- pages/finance/index.module.less | 100 + pages/finance/index.tsx | 412 ++-- pnpm-lock.yaml | 2852 +++++++++++----------- 15 files changed, 1931 insertions(+), 1880 deletions(-) create mode 100644 components/Finance/SparkLine.module.less create mode 100644 components/Finance/SparkLine.tsx create mode 100644 pages/finance/index.module.less diff --git a/README.md b/README.md index d78ecd2..e3da907 100644 --- a/README.md +++ b/README.md @@ -11,7 +11,7 @@ ## 技术栈 - Language: [TypeScript v5][2] -- Component engine: [Nextjs v15][3] +- Component engine: [Nextjs v16][3] - Component suite: [Bootstrap v5][4] - CI / CD: GitHub [Actions][10] + [Vercel][11] diff --git a/components/Finance/Finance.module.less b/components/Finance/Finance.module.less index 68fc1d2..511aae4 100644 --- a/components/Finance/Finance.module.less +++ b/components/Finance/Finance.module.less @@ -1,104 +1,3 @@ -.financePage { - padding-bottom: 4rem; -} - -.hero { - border: 1px solid rgba(0, 0, 0, 0.05); - border-radius: 32px; - background: linear-gradient(135deg, rgba(13, 110, 253, 0.08), rgba(25, 135, 84, 0.08)); - padding-right: clamp(1.5rem, 4vw, 3rem); - padding-left: clamp(1.5rem, 4vw, 3rem); -} - -.heroBadge { - letter-spacing: 0.2em; - text-transform: uppercase; -} - -.heroChip { - border-radius: 999px; - background: rgba(13, 110, 253, 0.08); - padding: 0.35rem 0.9rem; - font-weight: 600; - font-size: 0.9rem; -} - -.heroStats { - display: grid; - grid-template-columns: repeat(auto-fit, minmax(180px, 1fr)); - gap: 1rem; -} - -.heroStatCard { - box-shadow: 0 10px 30px rgba(15, 23, 42, 0.1); - border: 1px solid rgba(15, 23, 42, 0.05); - border-radius: 20px; - background: #fff; - padding: 1.5rem; -} - -.filterPanel { - box-shadow: 0 20px 60px rgba(15, 23, 42, 0.08); - border: 1px solid rgba(15, 23, 42, 0.05); - border-radius: 24px; - background: #fff; - padding: 2rem; -} - -.segmentedControl { - display: grid; - grid-template-columns: repeat(auto-fit, minmax(160px, 1fr)); - gap: 0.75rem; -} - -.segmentedButton { - transition: all 0.2s ease; - border: 1px solid rgba(15, 23, 42, 0.15); - border-radius: 16px; - background: #f5f7fb; - padding: 0.75rem 1rem; - font-weight: 600; - text-align: left; -} - -.segmentedButtonActive { - box-shadow: 0 10px 30px rgba(13, 110, 253, 0.15); - border-color: rgba(13, 110, 253, 0.5); - background: linear-gradient(135deg, rgba(13, 110, 253, 0.12), rgba(25, 135, 84, 0.12)); - color: #0d6efd; -} - -.listSection { - box-shadow: 0 20px 60px rgba(15, 23, 42, 0.08); - border: 1px solid rgba(15, 23, 42, 0.05); - border-radius: 24px; - background: #fff; - padding: 2rem; -} - -.emptyState { - border: 1px dashed rgba(15, 23, 42, 0.2); - border-radius: 20px; - background: rgba(248, 249, 250, 0.7); - padding: 2.5rem; - text-align: center; -} - -.educationSection { - border-radius: 28px; - background: rgba(13, 110, 253, 0.05); - padding: 2rem; -} - -.educationCard { - box-shadow: 0 10px 30px rgba(15, 23, 42, 0.06); - border: 1px solid rgba(15, 23, 42, 0.05); - border-radius: 20px; - background: #fff; - padding: 1.75rem; - height: 100%; -} - .fundCard { transition: transform 0.2s ease, @@ -106,44 +5,23 @@ box-shadow: 0 16px 40px rgba(15, 23, 42, 0.08); border: 1px solid rgba(15, 23, 42, 0.08); border-radius: 20px; -} + &:hover { + transform: translateY(-4px); + box-shadow: 0 24px 60px rgba(15, 23, 42, 0.12); + } -.fundCard:hover { - transform: translateY(-4px); - box-shadow: 0 24px 60px rgba(15, 23, 42, 0.12); + .header small { + line-height: 1.3; + } } -.fundCardHeader small { - line-height: 1.3; -} - -.metricRow { +.metric { gap: 1.5rem; + .value { + font-weight: 700; + font-size: 2rem; + } } - -.metricValue { - font-weight: 700; - font-size: 2rem; -} - -.sparkline { - width: 100%; - height: 80px; -} - -.sparkline svg { - width: 100%; - height: 100%; -} - -.sparklinePlaceholder { - border: 1px dashed rgba(15, 23, 42, 0.2); - border-radius: 12px; - padding: 1rem; - color: rgba(15, 23, 42, 0.6); - text-align: center; -} - .tagBadge { border: 1px solid rgba(15, 23, 42, 0.15); border-radius: 999px; diff --git a/components/Finance/FundCard.tsx b/components/Finance/FundCard.tsx index 9ada846..1b2b450 100644 --- a/components/Finance/FundCard.tsx +++ b/components/Finance/FundCard.tsx @@ -3,15 +3,12 @@ import { Badge, Card } from 'react-bootstrap'; import { INDEX_CATEGORY_LABEL_KEYS, INDEX_RISK_LABEL_KEYS } from '../../constants/finance'; import { I18nContext } from '../../models/Translation'; -import { IndexFundSnapshot, IndexHistoryPoint } from '../../types/finance'; +import { IndexFundSnapshot } from '../../types/finance'; import styles from './Finance.module.less'; +import { SparkLine } from './SparkLine'; -export interface FundCardProps { - data: IndexFundSnapshot; -} - -const formatNumber = (value?: number | null) => - value != null ? value.toLocaleString('zh-CN', { maximumFractionDigits: 2 }) : '--'; +const formatNumber = (value?: number | null, locale = 'zh-CN') => + value != null ? value.toLocaleString(locale, { maximumFractionDigits: 2 }) : '--'; const formatPercent = (value?: number | null) => value != null ? `${(value * 100).toFixed(2)}%` : '--'; @@ -19,60 +16,6 @@ const formatPercent = (value?: number | null) => const valueTone = (value?: number | null) => value != null ? (value >= 0 ? styles.positiveText : styles.negativeText) : styles.mutedText; -const Sparkline: FC<{ points: IndexHistoryPoint[]; chartId: string }> = ({ points, chartId }) => { - const { t } = useContext(I18nContext); - - const { polyline, gradientStops } = useMemo(() => { - if (!points.length) return { polyline: '', gradientStops: [] as number[] }; - - const values = points.map(({ value }) => value); - const min = Math.min(...values); - const max = Math.max(...values); - const delta = max - min || 1; - - const polylinePoints = points - .map(({ value }, index, { length }) => { - const x = (index / Math.max(length - 1, 1)) * 100; - const y = ((max - value) / delta) * 40; - - return `${x.toFixed(2)},${y.toFixed(2)}`; - }) - .join(' '); - - const gradientOffsets = [0, 50, 100]; - - return { polyline: polylinePoints, gradientStops: gradientOffsets }; - }, [points]); - const gradientId = `${chartId}-gradient`; - - return ( -
- - - - {gradientStops.map(offset => ( - - ))} - - - - -
- ); -}; - export const FundCard: FC = ({ symbol, displayName, @@ -89,16 +32,14 @@ export const FundCard: FC = ({ description, source, }) => { - const { t } = useContext(I18nContext); + const { currentLanguage, t } = useContext(I18nContext); const sparklineId = useMemo(() => `fund-${symbol}`, [symbol]); const updatedAtISO = updatedAt ? new Date(updatedAt).toJSON() : undefined; return ( -
+

{displayName}

@@ -131,9 +72,9 @@ export const FundCard: FC = ({

{description}

-
+
{t('index_metric_latest_value')}
-
{formatNumber(latestValue)}
+
{formatNumber(latestValue, currentLanguage)}
{t('index_metric_daily_change')}
{formatPercent(dailyChangePct)}
@@ -145,11 +86,7 @@ export const FundCard: FC = ({
{formatPercent(maxDrawdownPct)}
- {sparkline.length ? ( - - ) : ( -
{t('data_preparing')}
- )} +
    {tags?.map(tag => ( diff --git a/components/Finance/SparkLine.module.less b/components/Finance/SparkLine.module.less new file mode 100644 index 0000000..b0fa2eb --- /dev/null +++ b/components/Finance/SparkLine.module.less @@ -0,0 +1,17 @@ +.sparkline { + width: 100%; + height: 80px; + + svg { + width: 100%; + height: 100%; + } + + .placeholder { + border: 1px dashed rgba(15, 23, 42, 0.2); + border-radius: 12px; + padding: 1rem; + color: rgba(15, 23, 42, 0.6); + text-align: center; + } +} diff --git a/components/Finance/SparkLine.tsx b/components/Finance/SparkLine.tsx new file mode 100644 index 0000000..663204c --- /dev/null +++ b/components/Finance/SparkLine.tsx @@ -0,0 +1,89 @@ +import { computed } from 'mobx'; +import { observer } from 'mobx-react'; +import { ObservedComponent } from 'mobx-react-helper'; + +import { i18n, I18nContext } from '../../models/Translation'; +import { IndexHistoryPoint } from '../../types/finance'; +import styles from './SparkLine.module.less'; + +export interface SparkLineProps { + points: IndexHistoryPoint[]; + chartId: string; +} + +@observer +export class SparkLine extends ObservedComponent { + static contextType = I18nContext; + + @computed + get chartData() { + const { points } = this.observedProps; + + if (!points.length) return { polyline: '', gradientStops: [] as number[] }; + + const values = points.map(({ value }) => value); + const min = Math.min(...values); + const max = Math.max(...values); + const delta = max - min || 1; + + const polylinePoints = points + .map(({ value }, index, { length }) => { + const x = (index / Math.max(length - 1, 1)) * 100; + const y = ((max - value) / delta) * 40; + + return `${x.toFixed(2)},${y.toFixed(2)}`; + }) + .join(' '); + + const gradientOffsets = [0, 50, 100]; + + return { polyline: polylinePoints, gradientStops: gradientOffsets }; + } + + renderContent() { + const { t } = this.observedContext, + { chartId } = this.observedProps, + { polyline, gradientStops } = this.chartData; + const gradientId = `${chartId}-gradient`; + + return ( +
    + + + + {gradientStops.map(offset => ( + + ))} + + + + +
    + ); + } + + render() { + const { t } = this.observedContext, + { points } = this.props; + + return points.length ? ( + this.renderContent() + ) : ( +
    +
    {t('data_preparing')}
    +
    + ); + } +} diff --git a/constants/finance.ts b/constants/finance.ts index 3fb8bc3..db0dfba 100644 --- a/constants/finance.ts +++ b/constants/finance.ts @@ -1,15 +1,13 @@ import { IndexFundCategory, IndexRiskLevel } from '../types/finance'; -import zhCN from '../translation/zh-CN'; +import { I18nKey } from '../models/Translation'; -export type FinanceLabelKey = keyof typeof zhCN; - -export const INDEX_CATEGORY_LABEL_KEYS: Record = { +export const INDEX_CATEGORY_LABEL_KEYS: Record = { broad: 'index_category_broad', sector: 'index_category_sector', theme: 'index_category_theme', }; -export const INDEX_RISK_LABEL_KEYS: Record = { +export const INDEX_RISK_LABEL_KEYS: Record = { conservative: 'index_risk_conservative', balanced: 'index_risk_balanced', aggressive: 'index_risk_aggressive', diff --git a/eslint.config.ts b/eslint.config.ts index 2590175..ab05280 100644 --- a/eslint.config.ts +++ b/eslint.config.ts @@ -2,6 +2,7 @@ import cspellPlugin from '@cspell/eslint-plugin'; import eslint from '@eslint/js'; import nextPlugin from '@next/eslint-plugin-next'; import stylistic from '@stylistic/eslint-plugin'; +import { defineConfig } from 'eslint/config'; import eslintConfigPrettier from 'eslint-config-prettier'; import react from 'eslint-plugin-react'; import simpleImportSortPlugin from 'eslint-plugin-simple-import-sort'; @@ -16,7 +17,7 @@ import { fileURLToPath } from 'url'; const tsconfigRootDir = fileURLToPath(new URL('.', import.meta.url)); -export default tsEslint.config( +export default defineConfig( // register all of the plugins up-front { plugins: { @@ -47,7 +48,6 @@ export default tsEslint.config( warnOnUnsupportedTypeScriptVersion: false, }, }, - // @ts-expect-error https://github.com/vercel/next.js/issues/81695 rules: { // spellchecker '@cspell/spellchecker': [ diff --git a/lib/akshare.ts b/lib/akshare.ts index 040965f..268f51c 100644 --- a/lib/akshare.ts +++ b/lib/akshare.ts @@ -16,11 +16,7 @@ export async function requestAkShareJSON( try { const url = new URL(endpoint.replace(/^\//, ''), host.endsWith('/') ? host : `${host}/`); - if (params) { - const serialized = buildURLData(params).toString(); - - if (serialized) url.search = serialized; - } + if (params) url.search = buildURLData(params) + ''; const response = await fetch(url.toString(), { headers: { accept: 'application/json' }, diff --git a/models/Finance.ts b/models/Finance.ts index d2bab1a..776caf6 100644 --- a/models/Finance.ts +++ b/models/Finance.ts @@ -22,11 +22,9 @@ export class IndexFundModel extends ListModel(path); - + const { body } = await this.client.get( + `${this.baseURI}?${buildURLData({ ...filter, limit })}`, + ); const pageData = body?.data || []; const totalCount = body?.meta?.total ?? pageData.length; diff --git a/models/Translation.ts b/models/Translation.ts index 2fdc196..83a7018 100644 --- a/models/Translation.ts +++ b/models/Translation.ts @@ -18,6 +18,8 @@ export interface I18nProps { languageMap: typeof zhCN; } +export type I18nKey = keyof typeof zhCN; + export const createI18nStore = ( language?: N, data?: TranslationMap, diff --git a/package.json b/package.json index 465d304..a7d6dc2 100644 --- a/package.json +++ b/package.json @@ -7,82 +7,81 @@ "e": "pnpx @dotenvx/dotenvx run -f .env.personal.local -- pnpm", "prepare": "husky", "install": "pnpx git-utility download https://github.com/Open-Source-Bazaar/key-vault main Open-Source-Bazaar.github.io || true", - "dev": "next dev", - "build": "next build", + "dev": "next dev --webpack", + "build": "next build --webpack", "start": "next start", - "lint": "next lint --fix && git add . && tsc --noEmit", - "test": "lint-staged && npm run lint" + "test": "lint-staged && tsc --noEmit" }, "dependencies": { - "@koa/router": "^14.0.0", + "@koa/router": "^15.0.0", "@mdx-js/loader": "^3.1.1", "@mdx-js/react": "^3.1.1", - "@next/mdx": "^15.5.4", - "core-js": "^3.46.0", - "echarts-jsx": "^0.5.4", - "file-type": "^21.0.0", + "@next/mdx": "^16.0.7", + "core-js": "^3.47.0", + "echarts-jsx": "^0.6.0", + "file-type": "^21.1.1", "idea-react": "^2.0.0-rc.13", - "koa": "^3.0.1", + "koa": "^3.1.1", "koajax": "^3.1.2", "license-filter": "^0.2.5", - "marked": "^16.4.0", + "marked": "^17.0.1", "mime": "^4.1.0", "mobx": "^6.15.0", - "mobx-github": "^0.6.0", + "mobx-github": "^0.6.2", "mobx-i18n": "^0.7.2", - "mobx-lark": "^2.4.2", + "mobx-lark": "^2.5.0", "mobx-react": "^9.2.1", "mobx-react-helper": "^0.5.1", - "mobx-restful": "^2.1.3", - "mobx-restful-table": "^2.5.4", + "mobx-restful": "^2.1.4", + "mobx-restful-table": "^2.6.3", "mobx-strapi": "^0.8.1", - "next": "^15.5.4", + "next": "^16.0.7", "next-pwa": "^5.6.0", "next-ssr-middleware": "^1.0.3", "open-react-map": "^0.9.1", - "react": "^19.2.0", + "react": "^19.2.1", "react-bootstrap": "^2.10.10", - "react-dom": "^19.2.0", + "react-dom": "^19.2.1", "react-typed-component": "^1.0.6", "remark-frontmatter": "^5.0.0", "remark-mdx-frontmatter": "^5.2.0", "undici": "^7.16.0", - "web-utility": "^4.6.2", - "yaml": "^2.8.1" + "web-utility": "^4.6.4", + "yaml": "^2.8.2" }, "devDependencies": { "@babel/plugin-proposal-decorators": "^7.28.0", - "@babel/plugin-transform-typescript": "^7.28.0", - "@babel/preset-react": "^7.27.1", - "@cspell/eslint-plugin": "^9.2.1", - "@eslint/js": "^9.37.0", - "@next/eslint-plugin-next": "^15.5.4", + "@babel/plugin-transform-typescript": "^7.28.5", + "@babel/preset-react": "^7.28.5", + "@cspell/eslint-plugin": "^9.4.0", + "@eslint/js": "^9.39.1", + "@next/eslint-plugin-next": "^16.0.7", "@open-source-bazaar/china-ngo-database": "^0.6.0", "@softonus/prettier-plugin-duplicate-remover": "^1.1.2", - "@stylistic/eslint-plugin": "^5.4.0", + "@stylistic/eslint-plugin": "^5.6.1", "@types/eslint-config-prettier": "^6.11.3", - "@types/koa": "^3.0.0", + "@types/koa": "^3.0.1", "@types/next-pwa": "^5.6.9", - "@types/node": "^22.18.10", - "@types/react": "^19.2.2", - "@types/react-dom": "^19.2.1", - "eslint": "^9.37.0", - "eslint-config-next": "^15.5.4", + "@types/node": "^22.19.1", + "@types/react": "^19.2.7", + "@types/react-dom": "^19.2.3", + "eslint": "^9.39.1", + "eslint-config-next": "^16.0.7", "eslint-config-prettier": "^10.1.8", "eslint-plugin-react": "^7.37.5", "eslint-plugin-simple-import-sort": "^12.1.1", - "globals": "^16.4.0", + "globals": "^16.5.0", "husky": "^9.1.7", "jiti": "^2.6.1", "less": "^4.4.2", "less-loader": "^12.3.0", - "lint-staged": "^16.2.4", + "lint-staged": "^16.2.7", "next-with-less": "^3.0.1", - "prettier": "^3.6.2", + "prettier": "^3.7.4", "prettier-plugin-css-order": "^2.1.2", - "sass": "^1.93.2", + "sass": "^1.94.2", "typescript": "~5.9.3", - "typescript-eslint": "^8.46.0" + "typescript-eslint": "^8.48.1" }, "resolutions": { "mobx-react-helper": "$mobx-react-helper", diff --git a/pages/api/finance/index-funds.ts b/pages/api/finance/index-funds.ts index 968a9cd..59bb180 100644 --- a/pages/api/finance/index-funds.ts +++ b/pages/api/finance/index-funds.ts @@ -253,7 +253,7 @@ function applyFilters( category, riskLevel, limit, - }: { category?: string | string[]; riskLevel?: string | string[]; limit?: string | string[] }, + }: Partial>, ) { const parsedCategory = Array.isArray(category) ? category[0] : category; const parsedRisk = Array.isArray(riskLevel) ? riskLevel[0] : riskLevel; @@ -274,15 +274,8 @@ const router = createKoaRouter(import.meta.url); router.get('/', safeAPI, async (context: Context) => { const snapshots = await getCachedSnapshots(); - const filtered = applyFilters( - snapshots, - context.query as { - category?: string | string[]; - riskLevel?: string | string[]; - limit?: string | string[]; - }, - ); + const filtered = applyFilters(snapshots, context.query); const cached = cache != null && Date.now() - cache.timestamp < CACHE_TTL_MS && diff --git a/pages/finance/index.module.less b/pages/finance/index.module.less new file mode 100644 index 0000000..5a22d03 --- /dev/null +++ b/pages/finance/index.module.less @@ -0,0 +1,100 @@ +.financePage { + padding-bottom: 4rem; +} + +.hero { + border: 1px solid rgba(0, 0, 0, 0.05); + border-radius: 32px; + background: linear-gradient(135deg, rgba(13, 110, 253, 0.08), rgba(25, 135, 84, 0.08)); + padding-right: clamp(1.5rem, 4vw, 3rem); + padding-left: clamp(1.5rem, 4vw, 3rem); + + .badge { + letter-spacing: 0.2em; + text-transform: uppercase; + } + + .chip { + border-radius: 999px; + background: rgba(13, 110, 253, 0.08); + padding: 0.35rem 0.9rem; + font-weight: 600; + font-size: 0.9rem; + } + + .stats { + display: grid; + grid-template-columns: repeat(auto-fit, minmax(180px, 1fr)); + gap: 1rem; + } + + .statCard { + box-shadow: 0 10px 30px rgba(15, 23, 42, 0.1); + border: 1px solid rgba(15, 23, 42, 0.05); + border-radius: 20px; + background: #fff; + padding: 1.5rem; + } +} + +.filterPanel { + box-shadow: 0 20px 60px rgba(15, 23, 42, 0.08); + border: 1px solid rgba(15, 23, 42, 0.05); + border-radius: 24px; + background: #fff; + padding: 2rem; +} + +.segmentedControl { + display: grid; + grid-template-columns: repeat(auto-fit, minmax(160px, 1fr)); + gap: 0.75rem; + + .button { + transition: all 0.2s ease; + border: 1px solid rgba(15, 23, 42, 0.15); + border-radius: 16px; + background: #f5f7fb; + padding: 0.75rem 1rem; + font-weight: 600; + text-align: left; + } + + .active { + box-shadow: 0 10px 30px rgba(13, 110, 253, 0.15); + border-color: rgba(13, 110, 253, 0.5); + background: linear-gradient(135deg, rgba(13, 110, 253, 0.12), rgba(25, 135, 84, 0.12)); + color: #0d6efd; + } +} + +.listSection { + box-shadow: 0 20px 60px rgba(15, 23, 42, 0.08); + border: 1px solid rgba(15, 23, 42, 0.05); + border-radius: 24px; + background: #fff; + padding: 2rem; +} + +.emptyState { + border: 1px dashed rgba(15, 23, 42, 0.2); + border-radius: 20px; + background: rgba(248, 249, 250, 0.7); + padding: 2.5rem; + text-align: center; +} + +.education { + border-radius: 28px; + background: rgba(13, 110, 253, 0.05); + padding: 2rem; + + .card { + box-shadow: 0 10px 30px rgba(15, 23, 42, 0.06); + border: 1px solid rgba(15, 23, 42, 0.05); + border-radius: 20px; + background: #fff; + padding: 1.75rem; + height: 100%; + } +} diff --git a/pages/finance/index.tsx b/pages/finance/index.tsx index 423af98..21e4be0 100644 --- a/pages/finance/index.tsx +++ b/pages/finance/index.tsx @@ -1,33 +1,37 @@ import { Loading } from 'idea-react'; +import { observable } from 'mobx'; import { observer } from 'mobx-react'; +import { ObservedComponent } from 'mobx-react-helper'; import { ScrollList } from 'mobx-restful-table'; -import { FC, useContext, useMemo, useState } from 'react'; import { Badge, Button, Col, Container, Row } from 'react-bootstrap'; -import styles from '../../components/Finance/Finance.module.less'; import { FundCard } from '../../components/Finance/FundCard'; import { PageHead } from '../../components/Layout/PageHead'; -import { - type FinanceLabelKey, - INDEX_CATEGORY_LABEL_KEYS, - INDEX_RISK_LABEL_KEYS, -} from '../../constants/finance'; +import { INDEX_CATEGORY_LABEL_KEYS, INDEX_RISK_LABEL_KEYS } from '../../constants/finance'; import { IndexFundFilter, indexFundStore } from '../../models/Finance'; -import { I18nContext } from '../../models/Translation'; +import { i18n, I18nContext, I18nKey } from '../../models/Translation'; import { IndexFundCategory, IndexRiskLevel } from '../../types/finance'; +import styles from './index.module.less'; -const categoryOptions: { labelKey: FinanceLabelKey; value?: IndexFundCategory }[] = [ +interface Category { + labelKey: I18nKey; + value?: IndexFundCategory; +} + +const categoryOptions: Category[] = [ { labelKey: 'finance_all', value: undefined }, { labelKey: 'index_category_broad', value: 'broad' }, { labelKey: 'index_category_sector', value: 'sector' }, { labelKey: 'index_category_theme', value: 'theme' }, ]; -const riskOptions: { - labelKey: FinanceLabelKey; +interface Risk { + labelKey: I18nKey; value?: IndexRiskLevel; - descriptionKey: FinanceLabelKey; -}[] = [ + descriptionKey: I18nKey; +} + +const riskOptions: Risk[] = [ { labelKey: 'finance_all', value: undefined, descriptionKey: 'finance_filter_risk_all_desc' }, { labelKey: 'index_risk_conservative', @@ -46,13 +50,17 @@ const riskOptions: { }, ]; -const FinanceLandingPage: FC = observer(() => { - const i18n = useContext(I18nContext); - const { t } = i18n; - const [category, setCategory] = useState(); - const [riskLevel, setRiskLevel] = useState(); +@observer +export default class FinanceLandingPage extends ObservedComponent<{}, typeof i18n> { + static contextType = I18nContext; + + @observable + accessor filter: IndexFundFilter = {}; + + get filterSummary() { + const { t } = this.observedContext; + const { category, riskLevel } = this.filter; - const filterSummary = useMemo(() => { const categoryText = category ? `${t(INDEX_CATEGORY_LABEL_KEYS[category])}${t('finance_filter_category_suffix')}` : t('finance_filter_category_all'); @@ -61,201 +69,207 @@ const FinanceLandingPage: FC = observer(() => { : t('finance_filter_risk_all'); return `${categoryText} · ${riskText}`; - }, [category, riskLevel, t]); + } - const resetFilters = () => { - setCategory(undefined); - setRiskLevel(undefined); - }; + resetFilters = () => (this.filter = {}); - const filter: IndexFundFilter = { category, riskLevel }; + renderCategory = ({ labelKey, value }: Category) => { + const { t } = this.observedContext, + { category } = this.filter; + const active = value === undefined ? !category : category === value; - return ( - - + return ( + - -
- - -
    -
  • -

    {t('finance_hero_stat_coverage_label')}

    - {Math.max(indexFundStore.totalCount || 0, 8)}+ - {t('finance_hero_stat_coverage_sub')} -
  • -
  • -

    {t('finance_hero_stat_refresh_label')}

    - {t('finance_hero_stat_refresh_value')} - {t('finance_hero_stat_refresh_sub')} -
  • -
  • -

    {t('finance_hero_stat_risk_label')}

    - {t('finance_hero_stat_risk_value')} - {t('finance_hero_stat_risk_sub')} -
  • -
- - + this.filter = { ...this.filter, category: next }; + }} + > + {t(labelKey)} + + ); + }; -
-
-
-

{t('finance_filter_title')}

-

- {t('finance_filter_summary_prefix')} - {filterSummary} -

-
- -
+ renderRisk = ({ labelKey, value, descriptionKey }: Risk) => { + const { t } = this.observedContext, + { riskLevel } = this.filter; + const active = value === undefined ? !riskLevel : riskLevel === value; -
-
-

{t('finance_filter_category_label')}

-
- {categoryOptions.map(({ labelKey, value }) => { - const active = value === undefined ? !category : category === value; + return ( + - ); - })} -
-
+ this.filter = { ...this.filter, riskLevel: next }; + }} + > + {t(labelKey)} + {t(descriptionKey)} + + ); + }; -
-

{t('finance_filter_risk_label')}

-
- {riskOptions.map(({ labelKey, value, descriptionKey }) => { - const active = value === undefined ? !riskLevel : riskLevel === value; + render() { + const { t } = this.observedContext, + { filterSummary } = this; - return ( - - ); - })} + return ( + + + + + + + {t('beta')} + +

{t('finance_hero_title')}

+

{t('finance_hero_intro')}

+
    +
  • {t('finance_hero_chip_akshare_data')}
  • +
  • {t('finance_hero_chip_realtime_backtest')}
  • +
  • {t('finance_hero_chip_risk_layers')}
  • +
+
+ +
-
-
-
+ + +
    +
  • +

    {t('finance_hero_stat_coverage_label')}

    + + {Math.max(indexFundStore.totalCount || 0, 8)}+ + + {t('finance_hero_stat_coverage_sub')} +
  • +
  • +

    {t('finance_hero_stat_refresh_label')}

    + {t('finance_hero_stat_refresh_value')} + {t('finance_hero_stat_refresh_sub')} +
  • +
  • +

    {t('finance_hero_stat_risk_label')}

    + {t('finance_hero_stat_risk_value')} + {t('finance_hero_stat_risk_sub')} +
  • +
+ + -
-
-
-

{t('finance_list_title')}

-

- {t('finance_list_subtitle_prefix')} - {filterSummary} - {t('finance_list_subtitle_suffix')} -

-
-
- - -
-
- - {indexFundStore.downloading > 0 && } + - - funds.length ? ( - - {funds.map(fund => ( - - - - ))} - - ) : ( -
-

{t('finance_empty_title')}

-

{t('finance_empty_subtitle')}

- +
+
+

{t('finance_filter_category_label')}

+
+ {categoryOptions.map(this.renderCategory)}
- ) - } - /> -
+
-
- - -
-

{t('finance_edu_title')}

-
    -
  • {t('finance_edu_point_1')}
  • -
  • {t('finance_edu_point_2')}
  • -
  • {t('finance_edu_point_3')}
  • -
+
+

{t('finance_filter_risk_label')}

+
{riskOptions.map(this.renderRisk)}
- - -
-

{t('finance_edu_next_steps')}

-
    -
  1. {t('finance_edu_next_1')}
  2. -
  3. {t('finance_edu_next_2')}
  4. -
  5. {t('finance_edu_next_3')}
  6. -
+
+
+ +
+
+
+

{t('finance_list_title')}

+

+ {t('finance_list_subtitle_prefix')} + {filterSummary} + {t('finance_list_subtitle_suffix')} +

- - -
- - ); -}); +
+ + +
+ -export default FinanceLandingPage; + {indexFundStore.downloading > 0 && } + + + funds.length ? ( + + {funds.map(fund => ( + + + + ))} + + ) : ( +
+

{t('finance_empty_title')}

+

{t('finance_empty_subtitle')}

+ +
+ ) + } + /> +
+ +
+ + +
+

{t('finance_edu_title')}

+
    +
  • {t('finance_edu_point_1')}
  • +
  • {t('finance_edu_point_2')}
  • +
  • {t('finance_edu_point_3')}
  • +
+
+ + +
+

{t('finance_edu_next_steps')}

+
    +
  1. {t('finance_edu_next_1')}
  2. +
  3. {t('finance_edu_next_2')}
  4. +
  5. {t('finance_edu_next_3')}
  6. +
+
+ +
+
+ + ); + } +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 12e8de0..03820d5 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -6,48 +6,48 @@ settings: overrides: mobx-react-helper: ^0.5.1 - next: ^15.5.4 + next: ^16.0.7 importers: .: dependencies: '@koa/router': - specifier: ^14.0.0 - version: 14.0.0 + specifier: ^15.0.0 + version: 15.0.0 '@mdx-js/loader': specifier: ^3.1.1 version: 3.1.1 '@mdx-js/react': specifier: ^3.1.1 - version: 3.1.1(@types/react@19.2.2)(react@19.2.0) + version: 3.1.1(@types/react@19.2.7)(react@19.2.1) '@next/mdx': - specifier: ^15.5.4 - version: 15.5.4(@mdx-js/loader@3.1.1)(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@19.2.0)) + specifier: ^16.0.7 + version: 16.0.7(@mdx-js/loader@3.1.1)(@mdx-js/react@3.1.1(@types/react@19.2.7)(react@19.2.1)) core-js: - specifier: ^3.46.0 - version: 3.46.0 + specifier: ^3.47.0 + version: 3.47.0 echarts-jsx: - specifier: ^0.5.4 - version: 0.5.4(react@19.2.0)(typescript@5.9.3) + specifier: ^0.6.0 + version: 0.6.0(react@19.2.1)(typescript@5.9.3) file-type: - specifier: ^21.0.0 - version: 21.0.0 + specifier: ^21.1.1 + version: 21.1.1 idea-react: specifier: ^2.0.0-rc.13 - version: 2.0.0-rc.13(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react-is@16.13.1)(react@19.2.0)(typescript@5.9.3) + version: 2.0.0-rc.13(@types/react@19.2.7)(react-dom@19.2.1(react@19.2.1))(react-is@16.13.1)(react@19.2.1)(typescript@5.9.3) koa: - specifier: ^3.0.1 - version: 3.0.1 + specifier: ^3.1.1 + version: 3.1.1 koajax: specifier: ^3.1.2 - version: 3.1.2(core-js@3.46.0)(typescript@5.9.3) + version: 3.1.2(core-js@3.47.0)(typescript@5.9.3) license-filter: specifier: ^0.2.5 version: 0.2.5 marked: - specifier: ^16.4.0 - version: 16.4.0 + specifier: ^17.0.1 + version: 17.0.1 mime: specifier: ^4.1.0 version: 4.1.0 @@ -55,53 +55,53 @@ importers: specifier: ^6.15.0 version: 6.15.0 mobx-github: - specifier: ^0.6.0 - version: 0.6.0(core-js@3.46.0)(typescript@5.9.3) + specifier: ^0.6.2 + version: 0.6.2(core-js@3.47.0)(typescript@5.9.3) mobx-i18n: specifier: ^0.7.2 version: 0.7.2(mobx@6.15.0)(typescript@5.9.3) mobx-lark: - specifier: ^2.4.2 - version: 2.4.2(core-js@3.46.0)(react@19.2.0)(typescript@5.9.3) + specifier: ^2.5.0 + version: 2.5.0(core-js@3.47.0)(react@19.2.1)(typescript@5.9.3) mobx-react: specifier: ^9.2.1 - version: 9.2.1(mobx@6.15.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + version: 9.2.1(mobx@6.15.0)(react-dom@19.2.1(react@19.2.1))(react@19.2.1) mobx-react-helper: specifier: ^0.5.1 - version: 0.5.1(mobx@6.15.0)(react@19.2.0)(typescript@5.9.3) + version: 0.5.1(mobx@6.15.0)(react@19.2.1)(typescript@5.9.3) mobx-restful: - specifier: ^2.1.3 - version: 2.1.3(core-js@3.46.0)(mobx@6.15.0)(typescript@5.9.3) + specifier: ^2.1.4 + version: 2.1.4(core-js@3.47.0)(mobx@6.15.0)(typescript@5.9.3) mobx-restful-table: - specifier: ^2.5.4 - version: 2.5.4(@types/react@19.2.2)(core-js@3.46.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3) + specifier: ^2.6.3 + version: 2.6.3(@types/react@19.2.7)(core-js@3.47.0)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)(typescript@5.9.3) mobx-strapi: specifier: ^0.8.1 - version: 0.8.1(core-js@3.46.0)(typescript@5.9.3) + version: 0.8.1(core-js@3.47.0)(typescript@5.9.3) next: - specifier: ^15.5.4 - version: 15.5.4(@babel/core@7.28.4)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(sass@1.93.2) + specifier: ^16.0.7 + version: 16.0.7(@babel/core@7.28.5)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)(sass@1.94.2) next-pwa: specifier: ^5.6.0 - version: 5.6.0(@babel/core@7.28.4)(next@15.5.4(@babel/core@7.28.4)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(sass@1.93.2)) + version: 5.6.0(@babel/core@7.28.5)(next@16.0.7(@babel/core@7.28.5)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)(sass@1.94.2)) next-ssr-middleware: specifier: ^1.0.3 - version: 1.0.3(next@15.5.4(@babel/core@7.28.4)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(sass@1.93.2))(react@19.2.0)(typescript@5.9.3) + version: 1.0.3(next@16.0.7(@babel/core@7.28.5)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)(sass@1.94.2))(react@19.2.1)(typescript@5.9.3) open-react-map: specifier: ^0.9.1 - version: 0.9.1(core-js@3.46.0)(mobx-react@9.2.1(mobx@6.15.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(mobx@6.15.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3) + version: 0.9.1(core-js@3.47.0)(mobx-react@9.2.1(mobx@6.15.0)(react-dom@19.2.1(react@19.2.1))(react@19.2.1))(mobx@6.15.0)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)(typescript@5.9.3) react: - specifier: ^19.2.0 - version: 19.2.0 + specifier: ^19.2.1 + version: 19.2.1 react-bootstrap: specifier: ^2.10.10 - version: 2.10.10(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + version: 2.10.10(@types/react@19.2.7)(react-dom@19.2.1(react@19.2.1))(react@19.2.1) react-dom: - specifier: ^19.2.0 - version: 19.2.0(react@19.2.0) + specifier: ^19.2.1 + version: 19.2.1(react@19.2.1) react-typed-component: specifier: ^1.0.6 - version: 1.0.6(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + version: 1.0.6(react-dom@19.2.1(react@19.2.1))(react@19.2.1) remark-frontmatter: specifier: ^5.0.0 version: 5.0.0 @@ -112,30 +112,30 @@ importers: specifier: ^7.16.0 version: 7.16.0 web-utility: - specifier: ^4.6.2 - version: 4.6.2(typescript@5.9.3) + specifier: ^4.6.4 + version: 4.6.4(typescript@5.9.3) yaml: - specifier: ^2.8.1 - version: 2.8.1 + specifier: ^2.8.2 + version: 2.8.2 devDependencies: '@babel/plugin-proposal-decorators': specifier: ^7.28.0 - version: 7.28.0(@babel/core@7.28.4) + version: 7.28.0(@babel/core@7.28.5) '@babel/plugin-transform-typescript': - specifier: ^7.28.0 - version: 7.28.0(@babel/core@7.28.4) + specifier: ^7.28.5 + version: 7.28.5(@babel/core@7.28.5) '@babel/preset-react': - specifier: ^7.27.1 - version: 7.27.1(@babel/core@7.28.4) + specifier: ^7.28.5 + version: 7.28.5(@babel/core@7.28.5) '@cspell/eslint-plugin': - specifier: ^9.2.1 - version: 9.2.1(eslint@9.37.0(jiti@2.6.1)) + specifier: ^9.4.0 + version: 9.4.0(eslint@9.39.1(jiti@2.6.1)) '@eslint/js': - specifier: ^9.37.0 - version: 9.37.0 + specifier: ^9.39.1 + version: 9.39.1 '@next/eslint-plugin-next': - specifier: ^15.5.4 - version: 15.5.4 + specifier: ^16.0.7 + version: 16.0.7 '@open-source-bazaar/china-ngo-database': specifier: ^0.6.0 version: 0.6.0 @@ -143,44 +143,44 @@ importers: specifier: ^1.1.2 version: 1.1.2 '@stylistic/eslint-plugin': - specifier: ^5.4.0 - version: 5.4.0(eslint@9.37.0(jiti@2.6.1)) + specifier: ^5.6.1 + version: 5.6.1(eslint@9.39.1(jiti@2.6.1)) '@types/eslint-config-prettier': specifier: ^6.11.3 version: 6.11.3 '@types/koa': - specifier: ^3.0.0 - version: 3.0.0 + specifier: ^3.0.1 + version: 3.0.1 '@types/next-pwa': specifier: ^5.6.9 - version: 5.6.9(@babel/core@7.28.4)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(sass@1.93.2) + version: 5.6.9(@babel/core@7.28.5)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)(sass@1.94.2) '@types/node': - specifier: ^22.18.10 - version: 22.18.10 + specifier: ^22.19.1 + version: 22.19.1 '@types/react': - specifier: ^19.2.2 - version: 19.2.2 + specifier: ^19.2.7 + version: 19.2.7 '@types/react-dom': - specifier: ^19.2.1 - version: 19.2.1(@types/react@19.2.2) + specifier: ^19.2.3 + version: 19.2.3(@types/react@19.2.7) eslint: - specifier: ^9.37.0 - version: 9.37.0(jiti@2.6.1) + specifier: ^9.39.1 + version: 9.39.1(jiti@2.6.1) eslint-config-next: - specifier: ^15.5.4 - version: 15.5.4(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3) + specifier: ^16.0.7 + version: 16.0.7(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3) eslint-config-prettier: specifier: ^10.1.8 - version: 10.1.8(eslint@9.37.0(jiti@2.6.1)) + version: 10.1.8(eslint@9.39.1(jiti@2.6.1)) eslint-plugin-react: specifier: ^7.37.5 - version: 7.37.5(eslint@9.37.0(jiti@2.6.1)) + version: 7.37.5(eslint@9.39.1(jiti@2.6.1)) eslint-plugin-simple-import-sort: specifier: ^12.1.1 - version: 12.1.1(eslint@9.37.0(jiti@2.6.1)) + version: 12.1.1(eslint@9.39.1(jiti@2.6.1)) globals: - specifier: ^16.4.0 - version: 16.4.0 + specifier: ^16.5.0 + version: 16.5.0 husky: specifier: ^9.1.7 version: 9.1.7 @@ -194,26 +194,26 @@ importers: specifier: ^12.3.0 version: 12.3.0(less@4.4.2) lint-staged: - specifier: ^16.2.4 - version: 16.2.4 + specifier: ^16.2.7 + version: 16.2.7 next-with-less: specifier: ^3.0.1 - version: 3.0.1(less-loader@12.3.0(less@4.4.2))(less@4.4.2)(next@15.5.4(@babel/core@7.28.4)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(sass@1.93.2)) + version: 3.0.1(less-loader@12.3.0(less@4.4.2))(less@4.4.2)(next@16.0.7(@babel/core@7.28.5)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)(sass@1.94.2)) prettier: - specifier: ^3.6.2 - version: 3.6.2 + specifier: ^3.7.4 + version: 3.7.4 prettier-plugin-css-order: specifier: ^2.1.2 - version: 2.1.2(postcss@8.4.31)(prettier@3.6.2) + version: 2.1.2(postcss@8.4.31)(prettier@3.7.4) sass: - specifier: ^1.93.2 - version: 1.93.2 + specifier: ^1.94.2 + version: 1.94.2 typescript: specifier: ~5.9.3 version: 5.9.3 typescript-eslint: - specifier: ^8.46.0 - version: 8.46.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3) + specifier: ^8.48.1 + version: 8.48.1(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3) packages: @@ -227,16 +227,16 @@ packages: resolution: {integrity: sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==} engines: {node: '>=6.9.0'} - '@babel/compat-data@7.28.4': - resolution: {integrity: sha512-YsmSKC29MJwf0gF8Rjjrg5LQCmyh+j/nD8/eP7f+BeoQTKYqs9RoWbjGOdy0+1Ekr68RJZMUOPVQaQisnIo4Rw==} + '@babel/compat-data@7.28.5': + resolution: {integrity: sha512-6uFXyCayocRbqhZOB+6XcuZbkMNimwfVGFji8CTZnCzOHVGvDqzvitu1re2AU5LROliz7eQPhB8CpAMvnx9EjA==} engines: {node: '>=6.9.0'} - '@babel/core@7.28.4': - resolution: {integrity: sha512-2BCOP7TN8M+gVDj7/ht3hsaO/B/n5oDbiAyyvnRlNOs+u1o+JWNYTQrmpuNp1/Wq2gcFrI01JAW+paEKDMx/CA==} + '@babel/core@7.28.5': + resolution: {integrity: sha512-e7jT4DxYvIDLk1ZHmU/m/mB19rex9sv0c2ftBtjSBv+kVM/902eh0fINUzD7UwLLNR+jU585GxUJ8/EBfAM5fw==} engines: {node: '>=6.9.0'} - '@babel/generator@7.28.3': - resolution: {integrity: sha512-3lSpxGgvnmZznmBkCRnVREPUFJv2wrv9iAoFDvADJc0ypmdOxdUtcLeBgBJ6zE0PMeTKnxeQzyk0xTBq4Ep7zw==} + '@babel/generator@7.28.5': + resolution: {integrity: sha512-3EwLFhZ38J4VyIP6WNtt2kUdW9dokXA9Cr4IVIFHuCpZ3H8/YFOl5JjZHisrn1fATPBmKKqXzDFvh9fUwHz6CQ==} engines: {node: '>=6.9.0'} '@babel/helper-annotate-as-pure@7.27.3': @@ -247,14 +247,14 @@ packages: resolution: {integrity: sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==} engines: {node: '>=6.9.0'} - '@babel/helper-create-class-features-plugin@7.28.3': - resolution: {integrity: sha512-V9f6ZFIYSLNEbuGA/92uOvYsGCJNsuA8ESZ4ldc09bWk/j8H8TKiPw8Mk1eG6olpnO0ALHJmYfZvF4MEE4gajg==} + '@babel/helper-create-class-features-plugin@7.28.5': + resolution: {integrity: sha512-q3WC4JfdODypvxArsJQROfupPBq9+lMwjKq7C33GhbFYJsufD0yd/ziwD+hJucLeWsnFPWZjsU2DNFqBPE7jwQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 - '@babel/helper-create-regexp-features-plugin@7.27.1': - resolution: {integrity: sha512-uVDC72XVf8UbrH5qQTc18Agb8emwjTiZrQE11Nv3CuBEZmVvTwwE9CBUEvHku06gQCAyYf8Nv6ja1IN+6LMbxQ==} + '@babel/helper-create-regexp-features-plugin@7.28.5': + resolution: {integrity: sha512-N1EhvLtHzOvj7QQOUCCS3NrPJP8c5W6ZXCHDn7Yialuy1iu4r5EmIYkXlKNqT99Ciw+W0mDqWoR6HWMZlFP3hw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 @@ -268,8 +268,8 @@ packages: resolution: {integrity: sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==} engines: {node: '>=6.9.0'} - '@babel/helper-member-expression-to-functions@7.27.1': - resolution: {integrity: sha512-E5chM8eWjTp/aNoVpcbfM7mLxu9XGLWYise2eBKGQomAk/Mb4XoxyqXTZbuTohbsl8EKqdlMhnDI2CCLfcs9wA==} + '@babel/helper-member-expression-to-functions@7.28.5': + resolution: {integrity: sha512-cwM7SBRZcPCLgl8a7cY0soT1SptSzAlMH39vwiRpOQkJlh53r5hdHwLSCZpQdVLT39sZt+CRpNwYG4Y2v77atg==} engines: {node: '>=6.9.0'} '@babel/helper-module-imports@7.27.1': @@ -310,8 +310,8 @@ packages: resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==} engines: {node: '>=6.9.0'} - '@babel/helper-validator-identifier@7.27.1': - resolution: {integrity: sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==} + '@babel/helper-validator-identifier@7.28.5': + resolution: {integrity: sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==} engines: {node: '>=6.9.0'} '@babel/helper-validator-option@7.27.1': @@ -326,13 +326,13 @@ packages: resolution: {integrity: sha512-HFN59MmQXGHVyYadKLVumYsA9dBFun/ldYxipEjzA4196jpLZd8UjEEBLkbEkvfYreDqJhZxYAWFPtrfhNpj4w==} engines: {node: '>=6.9.0'} - '@babel/parser@7.28.4': - resolution: {integrity: sha512-yZbBqeM6TkpP9du/I2pUZnJsRMGGvOuIrhjzC1AwHwW+6he4mni6Bp/m8ijn0iOuZuPI2BfkCoSRunpyjnrQKg==} + '@babel/parser@7.28.5': + resolution: {integrity: sha512-KKBU1VGYR7ORr3At5HAtUQ+TV3SzRCXmA/8OdDZiLDBIZxVyzXuztPjfLd3BV1PRAQGCMWWSHYhL0F8d5uHBDQ==} engines: {node: '>=6.0.0'} hasBin: true - '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.27.1': - resolution: {integrity: sha512-QPG3C9cCVRQLxAVwmefEmwdTanECuUBMQZ/ym5kiw3XKCGA7qkuQLcjWWHcrD/GKbn/WmJwaezfuuAOcyKlRPA==} + '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.28.5': + resolution: {integrity: sha512-87GDMS3tsmMSi/3bWOte1UblL+YUTFMV8SZPZ2eSEL17s74Cw/l63rR6NmGVKMYW2GYi85nE+/d6Hw5N0bEk2Q==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 @@ -433,8 +433,8 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-block-scoping@7.28.4': - resolution: {integrity: sha512-1yxmvN0MJHOhPVmAsmoW5liWwoILobu/d/ShymZmj867bAdxGbehIrew1DuLpw2Ukv+qDSSPQdYW1dLNE7t11A==} + '@babel/plugin-transform-block-scoping@7.28.5': + resolution: {integrity: sha512-45DmULpySVvmq9Pj3X9B+62Xe+DJGov27QravQJU1LLcapR6/10i+gYVAucGGJpHBp5mYxIMK4nDAT/QDLr47g==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -463,8 +463,8 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-destructuring@7.28.0': - resolution: {integrity: sha512-v1nrSMBiKcodhsyJ4Gf+Z0U/yawmJDBOTpEB3mcQY52r9RIyPneGyAS/yM6seP/8I+mWI3elOMtT5dB8GJVs+A==} + '@babel/plugin-transform-destructuring@7.28.5': + resolution: {integrity: sha512-Kl9Bc6D0zTUcFUvkNuQh4eGXPKKNDOJQXVyyM4ZAQPMveniJdxi8XMJwLo+xSoW3MIq81bD33lcUe9kZpl0MCw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -499,8 +499,8 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-exponentiation-operator@7.27.1': - resolution: {integrity: sha512-uspvXnhHvGKf2r4VVtBpeFnuDWsJLQ6MF6lGJLC89jBR1uoVeqM416AZtTuhTezOfgHicpJQmoD5YUakO/YmXQ==} + '@babel/plugin-transform-exponentiation-operator@7.28.5': + resolution: {integrity: sha512-D4WIMaFtwa2NizOp+dnoFjRez/ClKiC2BqqImwKd1X28nqBtZEyCYJ2ozQrrzlxAFrcrjxo39S6khe9RNDlGzw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -535,8 +535,8 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-logical-assignment-operators@7.27.1': - resolution: {integrity: sha512-SJvDs5dXxiae4FbSL1aBJlG4wvl594N6YEVVn9e3JGulwioy6z3oPjx/sQBO3Y4NwUu5HNix6KJ3wBZoewcdbw==} + '@babel/plugin-transform-logical-assignment-operators@7.28.5': + resolution: {integrity: sha512-axUuqnUTBuXyHGcJEVVh9pORaN6wC5bYfE7FGzPiaWa3syib9m7g+/IT/4VgCOe2Upef43PHzeAvcrVek6QuuA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -559,8 +559,8 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-modules-systemjs@7.27.1': - resolution: {integrity: sha512-w5N1XzsRbc0PQStASMksmUeqECuzKuTJer7kFagK8AXgpCMkeDMO5S+aaFb7A51ZYDF7XI34qsTX+fkHiIm5yA==} + '@babel/plugin-transform-modules-systemjs@7.28.5': + resolution: {integrity: sha512-vn5Jma98LCOeBy/KpeQhXcV2WZgaRUtjwQmjoBuLNlOmkg0fB5pdvYVeWRYI69wWKwK2cD1QbMiUQnoujWvrew==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -613,8 +613,8 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-optional-chaining@7.27.1': - resolution: {integrity: sha512-BQmKPPIuc8EkZgNKsv0X4bPmOoayeu4F1YCwx2/CfmDSXDbp7GnzlUH+/ul5VGfRg1AoFPsrIThlEBj2xb4CAg==} + '@babel/plugin-transform-optional-chaining@7.28.5': + resolution: {integrity: sha512-N6fut9IZlPnjPwgiQkXNhb+cT8wQKFlJNqcZkWlcTqkcqx6/kU4ynGmLFoa4LViBSirn05YAwk+sQBbPfxtYzQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -715,8 +715,8 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-typescript@7.28.0': - resolution: {integrity: sha512-4AEiDEBPIZvLQaWlc9liCavE0xRM0dNca41WtBeM3jgFptfUOSG9z0uteLhq6+3rq+WB6jIvUwKDTpXEHPJ2Vg==} + '@babel/plugin-transform-typescript@7.28.5': + resolution: {integrity: sha512-x2Qa+v/CuEoX7Dr31iAfr0IhInrVOWZU/2vJMJ00FOR/2nM0BcBEclpaf9sWCDc+v5e9dMrhSH8/atq/kX7+bA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -745,8 +745,8 @@ packages: peerDependencies: '@babel/core': ^7.0.0 - '@babel/preset-env@7.28.3': - resolution: {integrity: sha512-ROiDcM+GbYVPYBOeCR6uBXKkQpBExLl8k9HO1ygXEyds39j+vCCsjmj7S8GOniZQlEs81QlkdJZe76IpLSiqpg==} + '@babel/preset-env@7.28.5': + resolution: {integrity: sha512-S36mOoi1Sb6Fz98fBfE+UZSpYw5mJm0NUHtIKrOuNcqeFauy1J6dIvXm2KRVKobOSaGq4t/hBXdN4HGU3wL9Wg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -756,8 +756,8 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 || ^8.0.0-0 <8.0.0 - '@babel/preset-react@7.27.1': - resolution: {integrity: sha512-oJHWh2gLhU9dW9HHr42q0cI0/iHHXTLGe39qvpAZZzagHy0MzYLCnCVV0symeRvzmjHyVU7mw2K06E6u/JwbhA==} + '@babel/preset-react@7.28.5': + resolution: {integrity: sha512-Z3J8vhRq7CeLjdC58jLv4lnZ5RKFUJWqH5emvxmv9Hv3BD1T9R/Im713R4MTKwvFaV74ejZ3sM01LyEKk4ugNQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -770,12 +770,12 @@ packages: resolution: {integrity: sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==} engines: {node: '>=6.9.0'} - '@babel/traverse@7.28.4': - resolution: {integrity: sha512-YEzuboP2qvQavAcjgQNVgsvHIDv6ZpwXvcvjmyySP2DIMuByS/6ioU5G9pYrWHM6T2YDfc7xga9iNzYOs12CFQ==} + '@babel/traverse@7.28.5': + resolution: {integrity: sha512-TCCj4t55U90khlYkVV/0TfkJkAkUg3jZFA3Neb7unZT8CPok7iiRfaX0F+WnqWqt7OxhOn0uBKXCw4lbL8W0aQ==} engines: {node: '>=6.9.0'} - '@babel/types@7.28.4': - resolution: {integrity: sha512-bkFqkLhh3pMBUQQkpVgWDWq/lqzc2678eUyDlTBhRqhCHFguYYGM0Efga7tYk4TogG/3x0EEl66/OQ+WGbWB/Q==} + '@babel/types@7.28.5': + resolution: {integrity: sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA==} engines: {node: '>=6.9.0'} '@base2/pretty-print-object@1.0.2': @@ -787,24 +787,24 @@ packages: '@codexteam/icons@0.0.4': resolution: {integrity: sha512-V8N/TY2TGyas4wLrPIFq7bcow68b3gu8DfDt1+rrHPtXxcexadKauRJL6eQgfG7Z0LCrN4boLRawR4S9gjIh/Q==} - '@cspell/cspell-bundled-dicts@9.2.1': - resolution: {integrity: sha512-85gHoZh3rgZ/EqrHIr1/I4OLO53fWNp6JZCqCdgaT7e3sMDaOOG6HoSxCvOnVspXNIf/1ZbfTCDMx9x79Xq0AQ==} + '@cspell/cspell-bundled-dicts@9.4.0': + resolution: {integrity: sha512-Hm2gpMg/lRv4fKtiO2NfBiaJdFZVVb1V1a+IVhlD9qCuObLhCt60Oze2kD1dQzhbaIX756cs/eyxa5bQ5jihhQ==} engines: {node: '>=20'} - '@cspell/cspell-pipe@9.2.1': - resolution: {integrity: sha512-2N1H63If5cezLqKToY/YSXon4m4REg/CVTFZr040wlHRbbQMh5EF3c7tEC/ue3iKAQR4sm52ihfqo1n4X6kz+g==} + '@cspell/cspell-pipe@9.4.0': + resolution: {integrity: sha512-cI0sUe7SB99hJB1T6PhH/MpSrnml1kOekTCE+VH3Eb7zkVP5/mwJXs8BlufdvwBona+Cgkx6jeWlhFpxLc39Yg==} engines: {node: '>=20'} - '@cspell/cspell-resolver@9.2.1': - resolution: {integrity: sha512-fRPQ6GWU5eyh8LN1TZblc7t24TlGhJprdjJkfZ+HjQo+6ivdeBPT7pC7pew6vuMBQPS1oHBR36hE0ZnJqqkCeg==} + '@cspell/cspell-resolver@9.4.0': + resolution: {integrity: sha512-o9gbbdXlhxG2rqtGqQ7xZ8MGDDsPLbskBnTeuA++ix4Ch/HdjrBNmKReIGAEqJPfP+JGgoEKqFISHUDKAJ/ygQ==} engines: {node: '>=20'} - '@cspell/cspell-service-bus@9.2.1': - resolution: {integrity: sha512-k4M6bqdvWbcGSbcfLD7Lf4coZVObsISDW+sm/VaWp9aZ7/uwiz1IuGUxL9WO4JIdr9CFEf7Ivmvd2txZpVOCIA==} + '@cspell/cspell-service-bus@9.4.0': + resolution: {integrity: sha512-UottRlFPN6FGUfojx5HtUPZTeYXg2rf2HvO/HLh0KicirVYO16vFxTevg9MyOvw1EXSsDRz8ECANjiE7fnzBCQ==} engines: {node: '>=20'} - '@cspell/cspell-types@9.2.1': - resolution: {integrity: sha512-FQHgQYdTHkcpxT0u1ddLIg5Cc5ePVDcLg9+b5Wgaubmc5I0tLotgYj8c/mvStWuKsuZIs6sUopjJrE91wk6Onw==} + '@cspell/cspell-types@9.4.0': + resolution: {integrity: sha512-vSpd50OfmthBH0aRFRLA2zJFtwli3ntHA0WAOJ8tIMLUCJgF3udooRXFeX3wR8ri69C9mc3864LC4inyRC/E9w==} engines: {node: '>=20'} '@cspell/dict-ada@4.1.1': @@ -813,17 +813,17 @@ packages: '@cspell/dict-al@1.1.1': resolution: {integrity: sha512-sD8GCaZetgQL4+MaJLXqbzWcRjfKVp8x+px3HuCaaiATAAtvjwUQ5/Iubiqwfd1boIh2Y1/3EgM3TLQ7Q8e0wQ==} - '@cspell/dict-aws@4.0.15': - resolution: {integrity: sha512-aPY7VVR5Os4rz36EaqXBAEy14wR4Rqv+leCJ2Ug/Gd0IglJpM30LalF3e2eJChnjje3vWoEC0Rz3+e5gpZG+Kg==} + '@cspell/dict-aws@4.0.16': + resolution: {integrity: sha512-a681zShZbtTo947NvTYGLer95ZDQw1ROKvIFydak1e0OlfFCsNdtcYTupn0nbbYs53c9AO7G2DU8AcNEAnwXPA==} - '@cspell/dict-bash@4.2.1': - resolution: {integrity: sha512-SBnzfAyEAZLI9KFS7DUG6Xc1vDFuLllY3jz0WHvmxe8/4xV3ufFE3fGxalTikc1VVeZgZmxYiABw4iGxVldYEg==} + '@cspell/dict-bash@4.2.2': + resolution: {integrity: sha512-kyWbwtX3TsCf5l49gGQIZkRLaB/P8g73GDRm41Zu8Mv51kjl2H7Au0TsEvHv7jzcsRLS6aUYaZv6Zsvk1fOz+Q==} - '@cspell/dict-companies@3.2.5': - resolution: {integrity: sha512-H51R0w7c6RwJJPqH7Gs65tzP6ouZsYDEHmmol6MIIk0kQaOIBuFP2B3vIxHLUr2EPRVFZsMW8Ni7NmVyaQlwsg==} + '@cspell/dict-companies@3.2.7': + resolution: {integrity: sha512-fEyr3LmpFKTaD0LcRhB4lfW1AmULYBqzg4gWAV0dQCv06l+TsA+JQ+3pZJbUcoaZirtgsgT3dL3RUjmGPhUH0A==} - '@cspell/dict-cpp@6.0.12': - resolution: {integrity: sha512-N4NsCTttVpMqQEYbf0VQwCj6np+pJESov0WieCN7R/0aByz4+MXEiDieWWisaiVi8LbKzs1mEj4ZTw5K/6O2UQ==} + '@cspell/dict-cpp@6.0.15': + resolution: {integrity: sha512-N7MKK3llRNoBncygvrnLaGvmjo4xzVr5FbtAc9+MFGHK6/LeSySBupr1FM72XDaVSIsmBEe7sDYCHHwlI9Jb2w==} '@cspell/dict-cryptocurrencies@5.0.5': resolution: {integrity: sha512-R68hYYF/rtlE6T/dsObStzN5QZw+0aQBinAXuWCVqwdS7YZo0X33vGMfChkHaiCo3Z2+bkegqHlqxZF4TD3rUA==} @@ -837,8 +837,8 @@ packages: '@cspell/dict-dart@2.3.1': resolution: {integrity: sha512-xoiGnULEcWdodXI6EwVyqpZmpOoh8RA2Xk9BNdR7DLamV/QMvEYn8KJ7NlRiTSauJKPNkHHQ5EVHRM6sTS7jdg==} - '@cspell/dict-data-science@2.0.9': - resolution: {integrity: sha512-wTOFMlxv06veIwKdXUwdGxrQcK44Zqs426m6JGgHIB/GqvieZQC5n0UI+tUm5OCxuNyo4OV6mylT4cRMjtKtWQ==} + '@cspell/dict-data-science@2.0.12': + resolution: {integrity: sha512-vI/mg6cI28IkFcpeINS7cm5M9HWemmXSTnxJiu3nmc4VAGx35SXIEyuLGBcsVzySvDablFYf4hsEpmg1XpVsUQ==} '@cspell/dict-django@4.1.5': resolution: {integrity: sha512-AvTWu99doU3T8ifoMYOMLW2CXKvyKLukPh1auOPwFGHzueWYvBBN+OxF8wF7XwjTBMMeRleVdLh3aWCDEX/ZWg==} @@ -852,17 +852,17 @@ packages: '@cspell/dict-elixir@4.0.8': resolution: {integrity: sha512-CyfphrbMyl4Ms55Vzuj+mNmd693HjBFr9hvU+B2YbFEZprE5AG+EXLYTMRWrXbpds4AuZcvN3deM2XVB80BN/Q==} - '@cspell/dict-en-common-misspellings@2.1.6': - resolution: {integrity: sha512-xV9yryOqZizbSqxRS7kSVRrxVEyWHUqwdY56IuT7eAWGyTCJNmitXzXa4p+AnEbhL+AB2WLynGVSbNoUC3ceFA==} + '@cspell/dict-en-common-misspellings@2.1.8': + resolution: {integrity: sha512-vDsjRFPQGuAADAiitf82z9Mz3DcqKZi6V5hPAEIFkLLKjFVBcjUsSq59SfL59ElIFb76MtBO0BLifdEbBj+DoQ==} - '@cspell/dict-en-gb-mit@3.1.9': - resolution: {integrity: sha512-1lSnphnHTOxnpNLpPLg1XXv8df3hs4oL0LJ6dkQ0IqNROl8Jzl6PD55BDTlKy4YOAA76dJlePB0wyrxB+VVKbg==} + '@cspell/dict-en-gb-mit@3.1.14': + resolution: {integrity: sha512-b+vEerlHP6rnNf30tmTJb7JZnOq4WAslYUvexOz/L3gDna9YJN3bAnwRJ3At3bdcOcMG7PTv3Pi+C73IR22lNg==} - '@cspell/dict-en_us@4.4.19': - resolution: {integrity: sha512-JYYgzhGqSGuIMNY1cTlmq3zrNpehrExMHqLmLnSM2jEGFeHydlL+KLBwBYxMy4e73w+p1+o/rmAiGsMj9g3MCw==} + '@cspell/dict-en_us@4.4.24': + resolution: {integrity: sha512-JE+/H2YicHJTneRmgH4GSI21rS+1yGZVl1jfOQgl8iHLC+yTTMtCvueNDMK94CgJACzYAoCsQB70MqiFJJfjLQ==} - '@cspell/dict-filetypes@3.0.13': - resolution: {integrity: sha512-g6rnytIpQlMNKGJT1JKzWkC+b3xCliDKpQ3ANFSq++MnR4GaLiifaC4JkVON11Oh/UTplYOR1nY3BR4X30bswA==} + '@cspell/dict-filetypes@3.0.14': + resolution: {integrity: sha512-KSXaSMYYNMLLdHEnju1DyRRH3eQWPRYRnOXpuHUdOh2jC44VgQoxyMU7oB3NAhDhZKBPCihabzECsAGFbdKfEA==} '@cspell/dict-flutter@1.1.1': resolution: {integrity: sha512-UlOzRcH2tNbFhZmHJN48Za/2/MEdRHl2BMkCWZBYs+30b91mWvBfzaN4IJQU7dUZtowKayVIF9FzvLZtZokc5A==} @@ -882,8 +882,8 @@ packages: '@cspell/dict-git@3.0.7': resolution: {integrity: sha512-odOwVKgfxCQfiSb+nblQZc4ErXmnWEnv8XwkaI4sNJ7cNmojnvogYVeMqkXPjvfrgEcizEEA4URRD2Ms5PDk1w==} - '@cspell/dict-golang@6.0.23': - resolution: {integrity: sha512-oXqUh/9dDwcmVlfUF5bn3fYFqbUzC46lXFQmi5emB0vYsyQXdNWsqi6/yH3uE7bdRE21nP7Yo0mR1jjFNyLamg==} + '@cspell/dict-golang@6.0.24': + resolution: {integrity: sha512-rY7PlC3MsHozmjrZWi0HQPUl0BVCV0+mwK0rnMT7pOIXqOe4tWCYMULDIsEk4F0gbIxb5badd2dkCPDYjLnDgA==} '@cspell/dict-google@1.0.9': resolution: {integrity: sha512-biL65POqialY0i4g6crj7pR6JnBkbsPovB2WDYkj3H4TuC/QXv7Pu5pdPxeUJA6TSCHI7T5twsO4VSVyRxD9CA==} @@ -894,8 +894,8 @@ packages: '@cspell/dict-html-symbol-entities@4.0.4': resolution: {integrity: sha512-afea+0rGPDeOV9gdO06UW183Qg6wRhWVkgCFwiO3bDupAoyXRuvupbb5nUyqSTsLXIKL8u8uXQlJ9pkz07oVXw==} - '@cspell/dict-html@4.0.12': - resolution: {integrity: sha512-JFffQ1dDVEyJq6tCDWv0r/RqkdSnV43P2F/3jJ9rwLgdsOIXwQbXrz6QDlvQLVvNSnORH9KjDtenFTGDyzfCaA==} + '@cspell/dict-html@4.0.13': + resolution: {integrity: sha512-vHzk2xfqQYPvoXtQtywa6ekIonPrUEwe2uftjry3UNRNl89TtzLJVSkiymKJ3WMb+W/DwKXKIb1tKzcIS8ccIg==} '@cspell/dict-java@5.0.12': resolution: {integrity: sha512-qPSNhTcl7LGJ5Qp6VN71H8zqvRQK04S08T67knMq9hTA8U7G1sTKzLmBaDOFhq17vNX/+rT+rbRYp+B5Nwza1A==} @@ -921,11 +921,11 @@ packages: '@cspell/dict-makefile@1.0.5': resolution: {integrity: sha512-4vrVt7bGiK8Rx98tfRbYo42Xo2IstJkAF4tLLDMNQLkQ86msDlYSKG1ZCk8Abg+EdNcFAjNhXIiNO+w4KflGAQ==} - '@cspell/dict-markdown@2.0.12': - resolution: {integrity: sha512-ufwoliPijAgWkD/ivAMC+A9QD895xKiJRF/fwwknQb7kt7NozTLKFAOBtXGPJAB4UjhGBpYEJVo2elQ0FCAH9A==} + '@cspell/dict-markdown@2.0.13': + resolution: {integrity: sha512-rFeGikf+lVlywEp7giATUfi8myFeee6jqgbUgtdIdl/OBmRBPe5m7mKNk7yMItMZe8ICrwMxFwJy5OeTnrr6QA==} peerDependencies: '@cspell/dict-css': ^4.0.18 - '@cspell/dict-html': ^4.0.12 + '@cspell/dict-html': ^4.0.13 '@cspell/dict-html-symbol-entities': ^4.0.4 '@cspell/dict-typescript': ^3.2.3 @@ -935,11 +935,11 @@ packages: '@cspell/dict-node@5.0.8': resolution: {integrity: sha512-AirZcN2i84ynev3p2/1NCPEhnNsHKMz9zciTngGoqpdItUb2bDt1nJBjwlsrFI78GZRph/VaqTVFwYikmncpXg==} - '@cspell/dict-npm@5.2.17': - resolution: {integrity: sha512-0yp7lBXtN3CtxBrpvTu/yAuPdOHR2ucKzPxdppc3VKO068waZNpKikn1NZCzBS3dIAFGVITzUPtuTXxt9cxnSg==} + '@cspell/dict-npm@5.2.25': + resolution: {integrity: sha512-jxhVxM3+ilxbum/N2ejAvVuvet1OrGeW1fD7GagAkHU/2zlzINZkJLDtXk6v1WHUjigfhiAsois3puobv/2A1A==} - '@cspell/dict-php@4.0.15': - resolution: {integrity: sha512-iepGB2gtToMWSTvybesn4/lUp4LwXcEm0s8vasJLP76WWVkq1zYjmeS+WAIzNgsuURyZ/9mGqhS0CWMuo74ODw==} + '@cspell/dict-php@4.1.0': + resolution: {integrity: sha512-dTDeabyOj7eFvn2Q4Za3uVXM2+SzeFMqX8ly2P0XTo4AzbCmI2hulFD/QIADwWmwiRrInbbf8cxwFHNIYrXl4w==} '@cspell/dict-powershell@5.0.15': resolution: {integrity: sha512-l4S5PAcvCFcVDMJShrYD0X6Huv9dcsQPlsVsBGbH38wvuN7gS7+GxZFAjTNxDmTY1wrNi1cCatSg6Pu2BW4rgg==} @@ -947,8 +947,8 @@ packages: '@cspell/dict-public-licenses@2.0.15': resolution: {integrity: sha512-cJEOs901H13Pfy0fl4dCD1U+xpWIMaEPq8MeYU83FfDZvellAuSo4GqWCripfIqlhns/L6+UZEIJSOZnjgy7Wg==} - '@cspell/dict-python@4.2.19': - resolution: {integrity: sha512-9S2gTlgILp1eb6OJcVZeC8/Od83N8EqBSg5WHVpx97eMMJhifOzePkE0kDYjyHMtAFznCQTUu0iQEJohNQ5B0A==} + '@cspell/dict-python@4.2.23': + resolution: {integrity: sha512-c0C//tmG4PZWeONtTBPXa6q0ylfz3/BgEcHAR1L0BPWjNUIzTyx9J+hEIUCPYf7eAPeYjaDuTvYlg11igXXE4Q==} '@cspell/dict-r@2.1.1': resolution: {integrity: sha512-71Ka+yKfG4ZHEMEmDxc6+blFkeTTvgKbKAbwiwQAuKl3zpqs1Y0vUtwW2N4b3LgmSPhV3ODVY0y4m5ofqDuKMw==} @@ -962,11 +962,11 @@ packages: '@cspell/dict-scala@5.0.8': resolution: {integrity: sha512-YdftVmumv8IZq9zu1gn2U7A4bfM2yj9Vaupydotyjuc+EEZZSqAafTpvW/jKLWji2TgybM1L2IhmV0s/Iv9BTw==} - '@cspell/dict-shell@1.1.1': - resolution: {integrity: sha512-T37oYxE7OV1x/1D4/13Y8JZGa1QgDCXV7AVt3HLXjn0Fe3TaNDvf5sU0fGnXKmBPqFFrHdpD3uutAQb1dlp15g==} + '@cspell/dict-shell@1.1.2': + resolution: {integrity: sha512-WqOUvnwcHK1X61wAfwyXq04cn7KYyskg90j4lLg3sGGKMW9Sq13hs91pqrjC44Q+lQLgCobrTkMDw9Wyl9nRFA==} - '@cspell/dict-software-terms@5.1.8': - resolution: {integrity: sha512-iwCHLP11OmVHEX2MzE8EPxpPw7BelvldxWe5cJ3xXIDL8TjF2dBTs2noGcrqnZi15SLYIlO8897BIOa33WHHZA==} + '@cspell/dict-software-terms@5.1.15': + resolution: {integrity: sha512-93VqazVvVtHuKY7seGxbfdtrnPBgZ/hZ/NmFFkBRhkRL6NavaQ6U2QsHpnlVEZN5km3DmaQy1X4ZcvNoSTK/ZQ==} '@cspell/dict-sql@2.2.1': resolution: {integrity: sha512-qDHF8MpAYCf4pWU8NKbnVGzkoxMNrFqBHyG/dgrlic5EQiKANCLELYtGlX5auIMDLmTf1inA0eNtv74tyRJ/vg==} @@ -986,26 +986,29 @@ packages: '@cspell/dict-vue@3.0.5': resolution: {integrity: sha512-Mqutb8jbM+kIcywuPQCCaK5qQHTdaByoEO2J9LKFy3sqAdiBogNkrplqUK0HyyRFgCfbJUgjz3N85iCMcWH0JA==} - '@cspell/dynamic-import@9.2.1': - resolution: {integrity: sha512-izYQbk7ck0ffNA1gf7Gi3PkUEjj+crbYeyNK1hxHx5A+GuR416ozs0aEyp995KI2v9HZlXscOj3SC3wrWzHZeA==} + '@cspell/dict-zig@1.0.0': + resolution: {integrity: sha512-XibBIxBlVosU06+M6uHWkFeT0/pW5WajDRYdXG2CgHnq85b0TI/Ks0FuBJykmsgi2CAD3Qtx8UHFEtl/DSFnAQ==} + + '@cspell/dynamic-import@9.4.0': + resolution: {integrity: sha512-d2fjLjzrKGUIn5hWK8gMuyAh2pqXSxBqOHpU1jR3jxbrO3MilunKNijaSstv7CZn067Jpc36VfaKQodaXNZzUA==} engines: {node: '>=20'} - '@cspell/eslint-plugin@9.2.1': - resolution: {integrity: sha512-Fs6P3yXqL11MAcoKDiqWqKMwWuvLn5JaHvjAabnHi9suaYKv1o2RKTp6DIdAYL/KL8AvWKwJbWIChmJZrAJBow==} + '@cspell/eslint-plugin@9.4.0': + resolution: {integrity: sha512-Xf8IU4IslX/EGqvz43gBTqgScLIFiDoGc4amupSUnR97IXIeiwYW9/cxfODsZsRSQdYo3XH8RBKXt1ONAI28jw==} engines: {node: '>=20'} peerDependencies: eslint: ^7 || ^8 || ^9 - '@cspell/filetypes@9.2.1': - resolution: {integrity: sha512-Dy1y1pQ+7hi2gPs+jERczVkACtYbUHcLodXDrzpipoxgOtVxMcyZuo+84WYHImfu0gtM0wU2uLObaVgMSTnytw==} + '@cspell/filetypes@9.4.0': + resolution: {integrity: sha512-RMrYHkvPF0tHVFM+T4voEhX9sfYQrd/mnNbf6+O4CWUyLCz4NQ5H9yOgEIJwEcLu4y3NESGXFef/Jn5xo0CUfg==} engines: {node: '>=20'} - '@cspell/strong-weak-map@9.2.1': - resolution: {integrity: sha512-1HsQWZexvJSjDocVnbeAWjjgqWE/0op/txxzDPvDqI2sE6pY0oO4Cinj2I8z+IP+m6/E6yjPxdb23ydbQbPpJQ==} + '@cspell/strong-weak-map@9.4.0': + resolution: {integrity: sha512-ui7mlXYmqElS/SmRubPBNWdkQVWgWbB6rjCurc+0owYXlnweItAMHTxC8mCWM/Au22SF1dB/JR8QBELFXLkTjQ==} engines: {node: '>=20'} - '@cspell/url@9.2.1': - resolution: {integrity: sha512-9EHCoGKtisPNsEdBQ28tKxKeBmiVS3D4j+AN8Yjr+Dmtu+YACKGWiMOddNZG2VejQNIdFx7FwzU00BGX68ELhA==} + '@cspell/url@9.4.0': + resolution: {integrity: sha512-nt88P6m20AaVbqMxsyPf8KqyWPaFEW2UANi0ijBxc2xTkD2KiUovxfZUYW6NMU9XBYZlovT5LztkEhst2yBcSA==} engines: {node: '>=20'} '@editorjs/caret@1.0.3': @@ -1023,11 +1026,11 @@ packages: '@editorjs/paragraph@2.11.7': resolution: {integrity: sha512-qD6bbWvRc4VvP0mXDOm+hOhzzhUYR9ZjcAvgCuKWcCbUMpCvhVF1s8NX40zdjekPi6JEnuHTamCncTrSzVsVhw==} - '@emnapi/core@1.5.0': - resolution: {integrity: sha512-sbP8GzB1WDzacS8fgNPpHlp6C9VZe+SJP3F90W9rLemaQj2PzIuTEl1qDOYQf58YIpyjViI24y9aPWCjEzY2cg==} + '@emnapi/core@1.7.1': + resolution: {integrity: sha512-o1uhUASyo921r2XtHYOHy7gdkGLge8ghBEQHMWmyJFoXlpU58kIrhhN3w26lpQb6dspetweapMn2CSNwQ8I4wg==} - '@emnapi/runtime@1.5.0': - resolution: {integrity: sha512-97/BJ3iXHww3djw6hYIfErCZFee7qCtrneuLa20UXFCOTCfBM2cvQHjWJ2EG0s0MtdNwInarqCTz35i4wWXHsQ==} + '@emnapi/runtime@1.7.1': + resolution: {integrity: sha512-PVtJr5CmLwYAU9PZDMITZoR5iAOShYREoR45EyyLrbntV50mdePTgUn4AmOw90Ifcj+x2kRjdzr1HP3RrNiHGA==} '@emnapi/wasi-threads@1.1.0': resolution: {integrity: sha512-WI0DdZ8xFSbgMjR1sFsKABJ/C5OnRrjT06JXbZKexJGrDuPTzZdDYfFlsgcCXCyf+suG5QU2e/y1Wo2V/OapLQ==} @@ -1038,36 +1041,36 @@ packages: peerDependencies: eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 - '@eslint-community/regexpp@4.12.1': - resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==} + '@eslint-community/regexpp@4.12.2': + resolution: {integrity: sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} - '@eslint/config-array@0.21.0': - resolution: {integrity: sha512-ENIdc4iLu0d93HeYirvKmrzshzofPw6VkZRKQGe9Nv46ZnWUzcF1xV01dcvEg/1wXUR61OmmlSfyeyO7EvjLxQ==} + '@eslint/config-array@0.21.1': + resolution: {integrity: sha512-aw1gNayWpdI/jSYVgzN5pL0cfzU02GT3NBpeT/DXbx1/1x7ZKxFPd9bwrzygx/qiwIQiJ1sw/zD8qY/kRvlGHA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/config-helpers@0.4.0': - resolution: {integrity: sha512-WUFvV4WoIwW8Bv0KeKCIIEgdSiFOsulyN0xrMu+7z43q/hkOLXjvb5u7UC9jDxvRzcrbEmuZBX5yJZz1741jog==} + '@eslint/config-helpers@0.4.2': + resolution: {integrity: sha512-gBrxN88gOIf3R7ja5K9slwNayVcZgK6SOUORm2uBzTeIEfeVaIhOpCtTox3P6R7o2jLFwLFTLnC7kU/RGcYEgw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/core@0.16.0': - resolution: {integrity: sha512-nmC8/totwobIiFcGkDza3GIKfAw1+hLiYVrh3I1nIomQ8PEr5cxg34jnkmGawul/ep52wGRAcyeDCNtWKSOj4Q==} + '@eslint/core@0.17.0': + resolution: {integrity: sha512-yL/sLrpmtDaFEiUj1osRP4TI2MDz1AddJL+jZ7KSqvBuliN4xqYY54IfdN8qD8Toa6g1iloph1fxQNkjOxrrpQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/eslintrc@3.3.1': - resolution: {integrity: sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==} + '@eslint/eslintrc@3.3.3': + resolution: {integrity: sha512-Kr+LPIUVKz2qkx1HAMH8q1q6azbqBAsXJUxBl/ODDuVPX45Z9DfwB8tPjTi6nNZ8BuM3nbJxC5zCAg5elnBUTQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/js@9.37.0': - resolution: {integrity: sha512-jaS+NJ+hximswBG6pjNX0uEJZkrT0zwpVi3BA3vX22aFGjJjmgSTSmPpZCRKmoBL5VY/M6p0xsSJx7rk7sy5gg==} + '@eslint/js@9.39.1': + resolution: {integrity: sha512-S26Stp4zCy88tH94QbBv3XCuzRQiZ9yXofEILmglYTh/Ug/a9/umqvgFtYBAo3Lp0nsI/5/qH1CCrbdK3AP1Tw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/object-schema@2.1.6': - resolution: {integrity: sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==} + '@eslint/object-schema@2.1.7': + resolution: {integrity: sha512-VtAOaymWVfZcmZbp6E2mympDIHvyjXs/12LqWYjVw6qjrfF+VK+fyG33kChz3nnK+SU5/NeHOqrTEHS8sXO3OA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/plugin-kit@0.4.0': - resolution: {integrity: sha512-sB5uyeq+dwCWyPi31B2gQlVlo+j5brPlWx4yZBrEaRo/nhdDE8Xke1gsGgtiBdaBTxuTkceLVuVt/pclrasb0A==} + '@eslint/plugin-kit@0.4.1': + resolution: {integrity: sha512-43/qtrDUokr7LJqoF2c3+RInu/t4zfrpYdoSDfYyhg52rwLV6TnOvdG4fXm7IkSB3wErkcmJS9iEhjVtOSEjjA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@hapi/bourne@3.0.0': @@ -1093,124 +1096,135 @@ packages: resolution: {integrity: sha512-A5P/LfWGFSl6nsckYtjw9da+19jB8hkJ6ACTGcDfEJ0aE+l2n2El7dsVM7UVHZQ9s2lmYMWlrS21YLy2IR1LUw==} engines: {node: '>=18'} - '@img/sharp-darwin-arm64@0.34.4': - resolution: {integrity: sha512-sitdlPzDVyvmINUdJle3TNHl+AG9QcwiAMsXmccqsCOMZNIdW2/7S26w0LyU8euiLVzFBL3dXPwVCq/ODnf2vA==} + '@img/sharp-darwin-arm64@0.34.5': + resolution: {integrity: sha512-imtQ3WMJXbMY4fxb/Ndp6HBTNVtWCUI0WdobyheGf5+ad6xX8VIDO8u2xE4qc/fr08CKG/7dDseFtn6M6g/r3w==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [arm64] os: [darwin] - '@img/sharp-darwin-x64@0.34.4': - resolution: {integrity: sha512-rZheupWIoa3+SOdF/IcUe1ah4ZDpKBGWcsPX6MT0lYniH9micvIU7HQkYTfrx5Xi8u+YqwLtxC/3vl8TQN6rMg==} + '@img/sharp-darwin-x64@0.34.5': + resolution: {integrity: sha512-YNEFAF/4KQ/PeW0N+r+aVVsoIY0/qxxikF2SWdp+NRkmMB7y9LBZAVqQ4yhGCm/H3H270OSykqmQMKLBhBJDEw==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [x64] os: [darwin] - '@img/sharp-libvips-darwin-arm64@1.2.3': - resolution: {integrity: sha512-QzWAKo7kpHxbuHqUC28DZ9pIKpSi2ts2OJnoIGI26+HMgq92ZZ4vk8iJd4XsxN+tYfNJxzH6W62X5eTcsBymHw==} + '@img/sharp-libvips-darwin-arm64@1.2.4': + resolution: {integrity: sha512-zqjjo7RatFfFoP0MkQ51jfuFZBnVE2pRiaydKJ1G/rHZvnsrHAOcQALIi9sA5co5xenQdTugCvtb1cuf78Vf4g==} cpu: [arm64] os: [darwin] - '@img/sharp-libvips-darwin-x64@1.2.3': - resolution: {integrity: sha512-Ju+g2xn1E2AKO6YBhxjj+ACcsPQRHT0bhpglxcEf+3uyPY+/gL8veniKoo96335ZaPo03bdDXMv0t+BBFAbmRA==} + '@img/sharp-libvips-darwin-x64@1.2.4': + resolution: {integrity: sha512-1IOd5xfVhlGwX+zXv2N93k0yMONvUlANylbJw1eTah8K/Jtpi15KC+WSiaX/nBmbm2HxRM1gZ0nSdjSsrZbGKg==} cpu: [x64] os: [darwin] - '@img/sharp-libvips-linux-arm64@1.2.3': - resolution: {integrity: sha512-I4RxkXU90cpufazhGPyVujYwfIm9Nk1QDEmiIsaPwdnm013F7RIceaCc87kAH+oUB1ezqEvC6ga4m7MSlqsJvQ==} + '@img/sharp-libvips-linux-arm64@1.2.4': + resolution: {integrity: sha512-excjX8DfsIcJ10x1Kzr4RcWe1edC9PquDRRPx3YVCvQv+U5p7Yin2s32ftzikXojb1PIFc/9Mt28/y+iRklkrw==} cpu: [arm64] os: [linux] - '@img/sharp-libvips-linux-arm@1.2.3': - resolution: {integrity: sha512-x1uE93lyP6wEwGvgAIV0gP6zmaL/a0tGzJs/BIDDG0zeBhMnuUPm7ptxGhUbcGs4okDJrk4nxgrmxpib9g6HpA==} + '@img/sharp-libvips-linux-arm@1.2.4': + resolution: {integrity: sha512-bFI7xcKFELdiNCVov8e44Ia4u2byA+l3XtsAj+Q8tfCwO6BQ8iDojYdvoPMqsKDkuoOo+X6HZA0s0q11ANMQ8A==} cpu: [arm] os: [linux] - '@img/sharp-libvips-linux-ppc64@1.2.3': - resolution: {integrity: sha512-Y2T7IsQvJLMCBM+pmPbM3bKT/yYJvVtLJGfCs4Sp95SjvnFIjynbjzsa7dY1fRJX45FTSfDksbTp6AGWudiyCg==} + '@img/sharp-libvips-linux-ppc64@1.2.4': + resolution: {integrity: sha512-FMuvGijLDYG6lW+b/UvyilUWu5Ayu+3r2d1S8notiGCIyYU/76eig1UfMmkZ7vwgOrzKzlQbFSuQfgm7GYUPpA==} cpu: [ppc64] os: [linux] - '@img/sharp-libvips-linux-s390x@1.2.3': - resolution: {integrity: sha512-RgWrs/gVU7f+K7P+KeHFaBAJlNkD1nIZuVXdQv6S+fNA6syCcoboNjsV2Pou7zNlVdNQoQUpQTk8SWDHUA3y/w==} + '@img/sharp-libvips-linux-riscv64@1.2.4': + resolution: {integrity: sha512-oVDbcR4zUC0ce82teubSm+x6ETixtKZBh/qbREIOcI3cULzDyb18Sr/Wcyx7NRQeQzOiHTNbZFF1UwPS2scyGA==} + cpu: [riscv64] + os: [linux] + + '@img/sharp-libvips-linux-s390x@1.2.4': + resolution: {integrity: sha512-qmp9VrzgPgMoGZyPvrQHqk02uyjA0/QrTO26Tqk6l4ZV0MPWIW6LTkqOIov+J1yEu7MbFQaDpwdwJKhbJvuRxQ==} cpu: [s390x] os: [linux] - '@img/sharp-libvips-linux-x64@1.2.3': - resolution: {integrity: sha512-3JU7LmR85K6bBiRzSUc/Ff9JBVIFVvq6bomKE0e63UXGeRw2HPVEjoJke1Yx+iU4rL7/7kUjES4dZ/81Qjhyxg==} + '@img/sharp-libvips-linux-x64@1.2.4': + resolution: {integrity: sha512-tJxiiLsmHc9Ax1bz3oaOYBURTXGIRDODBqhveVHonrHJ9/+k89qbLl0bcJns+e4t4rvaNBxaEZsFtSfAdquPrw==} cpu: [x64] os: [linux] - '@img/sharp-libvips-linuxmusl-arm64@1.2.3': - resolution: {integrity: sha512-F9q83RZ8yaCwENw1GieztSfj5msz7GGykG/BA+MOUefvER69K/ubgFHNeSyUu64amHIYKGDs4sRCMzXVj8sEyw==} + '@img/sharp-libvips-linuxmusl-arm64@1.2.4': + resolution: {integrity: sha512-FVQHuwx1IIuNow9QAbYUzJ+En8KcVm9Lk5+uGUQJHaZmMECZmOlix9HnH7n1TRkXMS0pGxIJokIVB9SuqZGGXw==} cpu: [arm64] os: [linux] - '@img/sharp-libvips-linuxmusl-x64@1.2.3': - resolution: {integrity: sha512-U5PUY5jbc45ANM6tSJpsgqmBF/VsL6LnxJmIf11kB7J5DctHgqm0SkuXzVWtIY90GnJxKnC/JT251TDnk1fu/g==} + '@img/sharp-libvips-linuxmusl-x64@1.2.4': + resolution: {integrity: sha512-+LpyBk7L44ZIXwz/VYfglaX/okxezESc6UxDSoyo2Ks6Jxc4Y7sGjpgU9s4PMgqgjj1gZCylTieNamqA1MF7Dg==} cpu: [x64] os: [linux] - '@img/sharp-linux-arm64@0.34.4': - resolution: {integrity: sha512-YXU1F/mN/Wu786tl72CyJjP/Ngl8mGHN1hST4BGl+hiW5jhCnV2uRVTNOcaYPs73NeT/H8Upm3y9582JVuZHrQ==} + '@img/sharp-linux-arm64@0.34.5': + resolution: {integrity: sha512-bKQzaJRY/bkPOXyKx5EVup7qkaojECG6NLYswgktOZjaXecSAeCWiZwwiFf3/Y+O1HrauiE3FVsGxFg8c24rZg==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [arm64] os: [linux] - '@img/sharp-linux-arm@0.34.4': - resolution: {integrity: sha512-Xyam4mlqM0KkTHYVSuc6wXRmM7LGN0P12li03jAnZ3EJWZqj83+hi8Y9UxZUbxsgsK1qOEwg7O0Bc0LjqQVtxA==} + '@img/sharp-linux-arm@0.34.5': + resolution: {integrity: sha512-9dLqsvwtg1uuXBGZKsxem9595+ujv0sJ6Vi8wcTANSFpwV/GONat5eCkzQo/1O6zRIkh0m/8+5BjrRr7jDUSZw==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [arm] os: [linux] - '@img/sharp-linux-ppc64@0.34.4': - resolution: {integrity: sha512-F4PDtF4Cy8L8hXA2p3TO6s4aDt93v+LKmpcYFLAVdkkD3hSxZzee0rh6/+94FpAynsuMpLX5h+LRsSG3rIciUQ==} + '@img/sharp-linux-ppc64@0.34.5': + resolution: {integrity: sha512-7zznwNaqW6YtsfrGGDA6BRkISKAAE1Jo0QdpNYXNMHu2+0dTrPflTLNkpc8l7MUP5M16ZJcUvysVWWrMefZquA==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [ppc64] os: [linux] - '@img/sharp-linux-s390x@0.34.4': - resolution: {integrity: sha512-qVrZKE9Bsnzy+myf7lFKvng6bQzhNUAYcVORq2P7bDlvmF6u2sCmK2KyEQEBdYk+u3T01pVsPrkj943T1aJAsw==} + '@img/sharp-linux-riscv64@0.34.5': + resolution: {integrity: sha512-51gJuLPTKa7piYPaVs8GmByo7/U7/7TZOq+cnXJIHZKavIRHAP77e3N2HEl3dgiqdD/w0yUfiJnII77PuDDFdw==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [riscv64] + os: [linux] + + '@img/sharp-linux-s390x@0.34.5': + resolution: {integrity: sha512-nQtCk0PdKfho3eC5MrbQoigJ2gd1CgddUMkabUj+rBevs8tZ2cULOx46E7oyX+04WGfABgIwmMC0VqieTiR4jg==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [s390x] os: [linux] - '@img/sharp-linux-x64@0.34.4': - resolution: {integrity: sha512-ZfGtcp2xS51iG79c6Vhw9CWqQC8l2Ot8dygxoDoIQPTat/Ov3qAa8qpxSrtAEAJW+UjTXc4yxCjNfxm4h6Xm2A==} + '@img/sharp-linux-x64@0.34.5': + resolution: {integrity: sha512-MEzd8HPKxVxVenwAa+JRPwEC7QFjoPWuS5NZnBt6B3pu7EG2Ge0id1oLHZpPJdn3OQK+BQDiw9zStiHBTJQQQQ==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [x64] os: [linux] - '@img/sharp-linuxmusl-arm64@0.34.4': - resolution: {integrity: sha512-8hDVvW9eu4yHWnjaOOR8kHVrew1iIX+MUgwxSuH2XyYeNRtLUe4VNioSqbNkB7ZYQJj9rUTT4PyRscyk2PXFKA==} + '@img/sharp-linuxmusl-arm64@0.34.5': + resolution: {integrity: sha512-fprJR6GtRsMt6Kyfq44IsChVZeGN97gTD331weR1ex1c1rypDEABN6Tm2xa1wE6lYb5DdEnk03NZPqA7Id21yg==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [arm64] os: [linux] - '@img/sharp-linuxmusl-x64@0.34.4': - resolution: {integrity: sha512-lU0aA5L8QTlfKjpDCEFOZsTYGn3AEiO6db8W5aQDxj0nQkVrZWmN3ZP9sYKWJdtq3PWPhUNlqehWyXpYDcI9Sg==} + '@img/sharp-linuxmusl-x64@0.34.5': + resolution: {integrity: sha512-Jg8wNT1MUzIvhBFxViqrEhWDGzqymo3sV7z7ZsaWbZNDLXRJZoRGrjulp60YYtV4wfY8VIKcWidjojlLcWrd8Q==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [x64] os: [linux] - '@img/sharp-wasm32@0.34.4': - resolution: {integrity: sha512-33QL6ZO/qpRyG7woB/HUALz28WnTMI2W1jgX3Nu2bypqLIKx/QKMILLJzJjI+SIbvXdG9fUnmrxR7vbi1sTBeA==} + '@img/sharp-wasm32@0.34.5': + resolution: {integrity: sha512-OdWTEiVkY2PHwqkbBI8frFxQQFekHaSSkUIJkwzclWZe64O1X4UlUjqqqLaPbUpMOQk6FBu/HtlGXNblIs0huw==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [wasm32] - '@img/sharp-win32-arm64@0.34.4': - resolution: {integrity: sha512-2Q250do/5WXTwxW3zjsEuMSv5sUU4Tq9VThWKlU2EYLm4MB7ZeMwF+SFJutldYODXF6jzc6YEOC+VfX0SZQPqA==} + '@img/sharp-win32-arm64@0.34.5': + resolution: {integrity: sha512-WQ3AgWCWYSb2yt+IG8mnC6Jdk9Whs7O0gxphblsLvdhSpSTtmu69ZG1Gkb6NuvxsNACwiPV6cNSZNzt0KPsw7g==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [arm64] os: [win32] - '@img/sharp-win32-ia32@0.34.4': - resolution: {integrity: sha512-3ZeLue5V82dT92CNL6rsal6I2weKw1cYu+rGKm8fOCCtJTR2gYeUfY3FqUnIJsMUPIH68oS5jmZ0NiJ508YpEw==} + '@img/sharp-win32-ia32@0.34.5': + resolution: {integrity: sha512-FV9m/7NmeCmSHDD5j4+4pNI8Cp3aW+JvLoXcTUo0IqyjSfAZJ8dIUmijx1qaJsIiU+Hosw6xM5KijAWRJCSgNg==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [ia32] os: [win32] - '@img/sharp-win32-x64@0.34.4': - resolution: {integrity: sha512-xIyj4wpYs8J18sVN3mSQjwrw7fKUqRw+Z5rnHNCy5fYTxigBz81u5mOMPmFumwjcn8+ld1ppptMBCLic1nz6ig==} + '@img/sharp-win32-x64@0.34.5': + resolution: {integrity: sha512-+29YMsqY2/9eFEiW93eqWnuLcWcufowXewwSNIT6UwZdUUCrM3oFjMWH/Z6/TMmb4hlFenmfAVbpWeup2jryCw==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [x64] os: [win32] @@ -1248,8 +1262,8 @@ packages: peerDependencies: koa: '>=2' - '@koa/router@14.0.0': - resolution: {integrity: sha512-LBSu5K0qAaaQcXX/0WIB9PGDevyCxxpnc1uq13vV/CgObaVxuis5hKl3Eboq/8gcb6ebnkAStW9NB/Em2eYyFA==} + '@koa/router@15.0.0': + resolution: {integrity: sha512-qAoA07CndM5XuBZbTbsnvUj1RNVZtwOvO9xGz7CCE/t4nSopI+xEiFGHyJS1UuSDCt8cJZ9vfCvqbAFga+0y7w==} engines: {node: '>= 20'} '@mdx-js/loader@3.1.1': @@ -1275,14 +1289,14 @@ packages: '@napi-rs/wasm-runtime@0.2.12': resolution: {integrity: sha512-ZVWUcfwY4E/yPitQJl481FjFo3K22D6qF0DuFH6Y/nbnE11GY5uguDxZMGXPQ8WQ0128MXQD7TnfHyK4oWoIJQ==} - '@next/env@15.5.4': - resolution: {integrity: sha512-27SQhYp5QryzIT5uO8hq99C69eLQ7qkzkDPsk3N+GuS2XgOgoYEeOav7Pf8Tn4drECOVDsDg8oj+/DVy8qQL2A==} + '@next/env@16.0.7': + resolution: {integrity: sha512-gpaNgUh5nftFKRkRQGnVi5dpcYSKGcZZkQffZ172OrG/XkrnS7UBTQ648YY+8ME92cC4IojpI2LqTC8sTDhAaw==} - '@next/eslint-plugin-next@15.5.4': - resolution: {integrity: sha512-SR1vhXNNg16T4zffhJ4TS7Xn7eq4NfKfcOsRwea7RIAHrjRpI9ALYbamqIJqkAhowLlERffiwk0FMvTLNdnVtw==} + '@next/eslint-plugin-next@16.0.7': + resolution: {integrity: sha512-hFrTNZcMEG+k7qxVxZJq3F32Kms130FAhG8lvw2zkKBgAcNOJIxlljNiCjGygvBshvaGBdf88q2CqWtnqezDHA==} - '@next/mdx@15.5.4': - resolution: {integrity: sha512-QUc14KkswCau2/Lul13t13v8QYRiEh3aeyUMUix5mK/Zd8c/J9NQuVvLGhxS7fxGPU+fOcv0GaXqZshkvNaX7A==} + '@next/mdx@16.0.7': + resolution: {integrity: sha512-ysX8mH24XuTwXStJLbecHO97I4EdUT9vHQymXLypLb3956cYXfVb/36nukH0C4Q2iA7RZE04yNpHs84Br77nNg==} peerDependencies: '@mdx-js/loader': '>=0.15.0' '@mdx-js/react': '>=0.15.0' @@ -1292,50 +1306,50 @@ packages: '@mdx-js/react': optional: true - '@next/swc-darwin-arm64@15.5.4': - resolution: {integrity: sha512-nopqz+Ov6uvorej8ndRX6HlxCYWCO3AHLfKK2TYvxoSB2scETOcfm/HSS3piPqc3A+MUgyHoqE6je4wnkjfrOA==} + '@next/swc-darwin-arm64@16.0.7': + resolution: {integrity: sha512-LlDtCYOEj/rfSnEn/Idi+j1QKHxY9BJFmxx7108A6D8K0SB+bNgfYQATPk/4LqOl4C0Wo3LACg2ie6s7xqMpJg==} engines: {node: '>= 10'} cpu: [arm64] os: [darwin] - '@next/swc-darwin-x64@15.5.4': - resolution: {integrity: sha512-QOTCFq8b09ghfjRJKfb68kU9k2K+2wsC4A67psOiMn849K9ZXgCSRQr0oVHfmKnoqCbEmQWG1f2h1T2vtJJ9mA==} + '@next/swc-darwin-x64@16.0.7': + resolution: {integrity: sha512-rtZ7BhnVvO1ICf3QzfW9H3aPz7GhBrnSIMZyr4Qy6boXF0b5E3QLs+cvJmg3PsTCG2M1PBoC+DANUi4wCOKXpA==} engines: {node: '>= 10'} cpu: [x64] os: [darwin] - '@next/swc-linux-arm64-gnu@15.5.4': - resolution: {integrity: sha512-eRD5zkts6jS3VfE/J0Kt1VxdFqTnMc3QgO5lFE5GKN3KDI/uUpSyK3CjQHmfEkYR4wCOl0R0XrsjpxfWEA++XA==} + '@next/swc-linux-arm64-gnu@16.0.7': + resolution: {integrity: sha512-mloD5WcPIeIeeZqAIP5c2kdaTa6StwP4/2EGy1mUw8HiexSHGK/jcM7lFuS3u3i2zn+xH9+wXJs6njO7VrAqww==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] - '@next/swc-linux-arm64-musl@15.5.4': - resolution: {integrity: sha512-TOK7iTxmXFc45UrtKqWdZ1shfxuL4tnVAOuuJK4S88rX3oyVV4ZkLjtMT85wQkfBrOOvU55aLty+MV8xmcJR8A==} + '@next/swc-linux-arm64-musl@16.0.7': + resolution: {integrity: sha512-+ksWNrZrthisXuo9gd1XnjHRowCbMtl/YgMpbRvFeDEqEBd523YHPWpBuDjomod88U8Xliw5DHhekBC3EOOd9g==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] - '@next/swc-linux-x64-gnu@15.5.4': - resolution: {integrity: sha512-7HKolaj+481FSW/5lL0BcTkA4Ueam9SPYWyN/ib/WGAFZf0DGAN8frNpNZYFHtM4ZstrHZS3LY3vrwlIQfsiMA==} + '@next/swc-linux-x64-gnu@16.0.7': + resolution: {integrity: sha512-4WtJU5cRDxpEE44Ana2Xro1284hnyVpBb62lIpU5k85D8xXxatT+rXxBgPkc7C1XwkZMWpK5rXLXTh9PFipWsA==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - '@next/swc-linux-x64-musl@15.5.4': - resolution: {integrity: sha512-nlQQ6nfgN0nCO/KuyEUwwOdwQIGjOs4WNMjEUtpIQJPR2NUfmGpW2wkJln1d4nJ7oUzd1g4GivH5GoEPBgfsdw==} + '@next/swc-linux-x64-musl@16.0.7': + resolution: {integrity: sha512-HYlhqIP6kBPXalW2dbMTSuB4+8fe+j9juyxwfMwCe9kQPPeiyFn7NMjNfoFOfJ2eXkeQsoUGXg+O2SE3m4Qg2w==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - '@next/swc-win32-arm64-msvc@15.5.4': - resolution: {integrity: sha512-PcR2bN7FlM32XM6eumklmyWLLbu2vs+D7nJX8OAIoWy69Kef8mfiN4e8TUv2KohprwifdpFKPzIP1njuCjD0YA==} + '@next/swc-win32-arm64-msvc@16.0.7': + resolution: {integrity: sha512-EviG+43iOoBRZg9deGauXExjRphhuYmIOJ12b9sAPy0eQ6iwcPxfED2asb/s2/yiLYOdm37kPaiZu8uXSYPs0Q==} engines: {node: '>= 10'} cpu: [arm64] os: [win32] - '@next/swc-win32-x64-msvc@15.5.4': - resolution: {integrity: sha512-1ur2tSHZj8Px/KMAthmuI9FMp/YFusMMGoRNJaRZMOlSkgvLjzosSdQI0cJAKogdHl3qXUQKL9MGaYvKwA7DXg==} + '@next/swc-win32-x64-msvc@16.0.7': + resolution: {integrity: sha512-gniPjy55zp5Eg0896qSrf3yB1dw4F/3s8VK1ephdsZZ129j2n6e1WqCbE2YgcKhW9hPB9TVZENugquWJD5x0ug==} engines: {node: '>= 10'} cpu: [x64] os: [win32] @@ -1531,14 +1545,11 @@ packages: '@rtsao/scc@1.1.0': resolution: {integrity: sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==} - '@rushstack/eslint-patch@1.13.0': - resolution: {integrity: sha512-2ih5qGw5SZJ+2fLZxP6Lr6Na2NTIgPRL/7Kmyuw0uIyBQnuhQ8fi8fzUTd38eIQmqp+GYLC00cI6WgtqHxBwmw==} - '@softonus/prettier-plugin-duplicate-remover@1.1.2': resolution: {integrity: sha512-2+oIZQ15zlxe+qt0vVriAfye+MCGiGE6vQ2/mG3WOsfvqv1CBEAgSmzQmFFnp0IyYYD9o5Ej+SaUYqaenL5vfQ==} - '@stylistic/eslint-plugin@5.4.0': - resolution: {integrity: sha512-UG8hdElzuBDzIbjG1QDwnYH0MQ73YLXDFHgZzB4Zh/YJfnw8XNsloVtytqzx0I2Qky9THSdpTmi8Vjn/pf/Lew==} + '@stylistic/eslint-plugin@5.6.1': + resolution: {integrity: sha512-JCs+MqoXfXrRPGbGmho/zGS/jMcn3ieKl/A8YImqib76C8kjgZwq5uUFzc30lJkMvcchuRn6/v8IApLxli3Jyw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: '>=9.0.0' @@ -1552,8 +1563,8 @@ packages: '@swc/helpers@0.5.17': resolution: {integrity: sha512-5IKx/Y13RsYd+sauPb2x+U/xZikHjolzfuDgTAl/Tdf3Q8rslRvC19NKDLgAJQ6wsqADk10ntlv08nPFw/gO/A==} - '@tokenizer/inflate@0.2.7': - resolution: {integrity: sha512-MADQgmZT1eKjp06jpI2yozxaU9uVs4GzzgSL+uEq7bVcJ9V1ZXQkeGNql1fsSI0gMy1vhvNTNbUqrx+pZfJVmg==} + '@tokenizer/inflate@0.4.1': + resolution: {integrity: sha512-2mAv+8pkG6GIZiF1kNg1jAjh27IDxEPKwdGul3snfztFerfPGI1LjDezZp3i7BElXompqEtPmoPx6c2wgtWsOA==} engines: {node: '>=18'} '@tokenizer/token@0.3.0': @@ -1577,8 +1588,8 @@ packages: '@types/content-disposition@0.5.9': resolution: {integrity: sha512-8uYXI3Gw35MhiVYhG3s295oihrxRyytcRHjSjqnqZVDDy/xcGBRny7+Xj1Wgfhv5QzRtN2hB2dVRBUX9XW3UcQ==} - '@types/cookies@0.9.1': - resolution: {integrity: sha512-E/DPgzifH4sM1UMadJMWd6mO2jOd4g1Ejwzx8/uRCDpJis1IrlyQEcGAYEomtAqRYmD5ORbNXMeI9U0RiVGZbg==} + '@types/cookies@0.9.2': + resolution: {integrity: sha512-1AvkDdZM2dbyFybL4fxpuNCaWyv//0AwsuUk2DWeXyM1/5ZKm6W3z6mQi24RZ4l2ucY+bkSHzbDVpySqPGuV8A==} '@types/debug@4.1.12': resolution: {integrity: sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==} @@ -1598,8 +1609,8 @@ packages: '@types/express-serve-static-core@5.1.0': resolution: {integrity: sha512-jnHMsrd0Mwa9Cf4IdOzbz543y4XJepXrbia2T4b6+spXC2We3t1y6K44D3mR8XMFSXMCf3/l7rCgddfx7UNVBA==} - '@types/express@5.0.3': - resolution: {integrity: sha512-wGA0NX93b19/dZC1J18tKWVIYWyyF2ZjT9vin/NRu0qzzvfVzWjs04iq2rQ3H65vCTQYlRqs3YHfY7zjdV+9Kw==} + '@types/express@5.0.6': + resolution: {integrity: sha512-sKYVuV7Sv9fbPIt/442koC7+IIwK5olP1KWeD88e/idgoJqDm3JV/YUiPwkoKK92ylff2MGxSz1CSjsXelx0YA==} '@types/geojson@7946.0.16': resolution: {integrity: sha512-6C8nqWur3j98U6+lXDfTUWIfgvZU+EumvpHKcYjujKH7woYyLj2sUmff0tRhrqM7BohUw7Pz3ZB1jj2gW9Fvmg==} @@ -1628,20 +1639,20 @@ packages: '@types/keygrip@1.0.6': resolution: {integrity: sha512-lZuNAY9xeJt7Bx4t4dx0rYCDqGPW8RXhQZK1td7d4H6E9zYbLoOtjBvfwdTKpsyxQI/2jv+armjX/RW+ZNpXOQ==} - '@types/koa-compose@3.2.8': - resolution: {integrity: sha512-4Olc63RY+MKvxMwVknCUDhRQX1pFQoBZ/lXcRLP69PQkEpze/0cr8LNqJQe5NFb/b19DWi2a5bTi2VAlQzhJuA==} + '@types/koa-compose@3.2.9': + resolution: {integrity: sha512-BroAZ9FTvPiCy0Pi8tjD1OfJ7bgU1gQf0eR6e1Vm+JJATy9eKOG3hQMFtMciMawiSOVnLMdmUOC46s7HBhSTsA==} - '@types/koa@3.0.0': - resolution: {integrity: sha512-MOcVYdVYmkSutVHZZPh8j3+dAjLyR5Tl59CN0eKgpkE1h/LBSmPAsQQuWs+bKu7WtGNn+hKfJH9Gzml+PulmDg==} + '@types/koa@3.0.1': + resolution: {integrity: sha512-VkB6WJUQSe0zBpR+Q7/YIUESGp5wPHcaXr0xueU5W0EOUWtlSbblsl+Kl31lyRQ63nIILh0e/7gXjQ09JXJIHw==} - '@types/koa__router@12.0.4': - resolution: {integrity: sha512-Y7YBbSmfXZpa/m5UGGzb7XadJIRBRnwNY9cdAojZGp65Cpe5MAP3mOZE7e3bImt8dfKS4UFcR16SLH8L/z7PBw==} + '@types/koa__router@12.0.5': + resolution: {integrity: sha512-1HeLxuDn4n5it1yZYCSyOYXo++73zT0ffoviXnPxbwbxLbvDFEvWD9ZzpRiIpK4oKR0pi+K+Mk/ZjyROjW3HSw==} '@types/leaflet@1.9.21': resolution: {integrity: sha512-TbAd9DaPGSnzp6QvtYngntMZgcRk+igFELwR2N99XZn7RXUdKgsXMR+28bUO0rPsWp8MIu/f47luLIQuSLYv/w==} - '@types/lodash@4.17.20': - resolution: {integrity: sha512-H3MHACvFUEiujabxhaI/ImO6gUrd8oOurg7LQtS7mbwIXA/cUqWrvBsaeJ23aZEPk1TAYkurjfMbSELfoCXlGA==} + '@types/lodash@4.17.21': + resolution: {integrity: sha512-FOvQ0YPD5NOfPgMzJihoT+Za5pdkDJWcbpuj1DjaKZIr/gxodQjY/uWEFlTNqW2ugXHUiL8lRQgw63dzKHZdeQ==} '@types/mdast@4.0.4': resolution: {integrity: sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==} @@ -1649,9 +1660,6 @@ packages: '@types/mdx@2.0.13': resolution: {integrity: sha512-+OWZQfAYyio6YkJb3HLxDrvnx6SWWDbC0zVPfBRzUk0/nqoDyf6dNxQi3eArPe8rJ473nobTMQ/8Zk+LxJ+Yuw==} - '@types/mime@1.3.5': - resolution: {integrity: sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==} - '@types/minimatch@6.0.0': resolution: {integrity: sha512-zmPitbQ8+6zNutpwgcQuLcsEpn/Cj54Kbn7L5pX0Os5kdWplB7xPgEh/g+SWOB/qmows2gpuCaPyduq8ZZRnxA==} deprecated: This is a stub types definition. minimatch provides its own type definitions, so you do not need this installed. @@ -1662,8 +1670,8 @@ packages: '@types/next-pwa@5.6.9': resolution: {integrity: sha512-KcymH+MtFYB5KVKIOH1DMqd0wUb8VLCxzHtsaRQQ7S8sGOaTH24Lo2vGZf6/0Ok9e+xWCKhqsSt6cgDJTk91Iw==} - '@types/node@22.18.10': - resolution: {integrity: sha512-anNG/V/Efn/YZY4pRzbACnKxNKoBng2VTFydVu8RRs5hQjikP8CQfaeAV59VFSCzKNp90mXiVXW2QzV56rwMrg==} + '@types/node@22.19.1': + resolution: {integrity: sha512-LCCV0HdSZZZb34qifBsyWlUmok6W7ouER+oQIGBScS8EsZsQbrtFTUrDX4hOl+CS6p7cnNC4td+qrSVGSCTUfQ==} '@types/prop-types@15.7.15': resolution: {integrity: sha512-F6bEyamV9jKGAFBEmlQnesRPGOQqS2+Uwi0Em15xenOxHaf2hv6L8YCVn3rPdPJOiJfPiCnLIRyvwVaqMY3MIw==} @@ -1674,8 +1682,8 @@ packages: '@types/range-parser@1.2.7': resolution: {integrity: sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==} - '@types/react-dom@19.2.1': - resolution: {integrity: sha512-/EEvYBdT3BflCWvTMO7YkYBHVE9Ci6XdqZciZANQgKpaiDRGOLIlRo91jbTNRQjgPFWVaRxcYc0luVNFitz57A==} + '@types/react-dom@19.2.3': + resolution: {integrity: sha512-jp2L/eY6fn+KgVVQAOqYItbF0VY/YApe5Mz2F0aykSO8gx31bYCZyvSeYxCHKvzHG5eZjc+zyaS5BrBWya2+kQ==} peerDependencies: '@types/react': ^19.2.0 @@ -1684,26 +1692,23 @@ packages: peerDependencies: '@types/react': '*' - '@types/react@19.2.2': - resolution: {integrity: sha512-6mDvHUFSjyT2B2yeNx2nUgMxh9LtOWvkhIU3uePn2I2oyNymUAX1NIsdgviM4CH+JSrp2D2hsMvJOkxY+0wNRA==} + '@types/react@19.2.7': + resolution: {integrity: sha512-MWtvHrGZLFttgeEj28VXHxpmwYbor/ATPYbBfSFZEIRK0ecCFLl2Qo55z52Hss+UV9CRN7trSeq1zbgx7YDWWg==} '@types/resolve@1.17.1': resolution: {integrity: sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==} - '@types/send@0.17.5': - resolution: {integrity: sha512-z6F2D3cOStZvuk2SaP6YrwkNO65iTZcwA2ZkSABegdkAh/lf+Aa/YQndZVfmEXT5vgAp6zv06VQ3ejSVjAny4w==} + '@types/send@1.2.1': + resolution: {integrity: sha512-arsCikDvlU99zl1g69TcAB3mzZPpxgw0UQnaHeC1Nwb015xp8bknZv5rIfri9xTOcMuaVgvabfIRA7PSZVuZIQ==} - '@types/send@1.2.0': - resolution: {integrity: sha512-zBF6vZJn1IaMpg3xUF25VK3gd3l8zwE0ZLRX7dsQyQi+jp4E8mMDJNGDYnYse+bQhYwWERTxVwHpi3dMOq7RKQ==} - - '@types/serve-static@1.15.9': - resolution: {integrity: sha512-dOTIuqpWLyl3BBXU3maNQsS4A3zuuoYRNIvYSxxhebPfXg2mzWQEPne/nlJ37yOse6uGgR386uTpdsx4D0QZWA==} + '@types/serve-static@2.2.0': + resolution: {integrity: sha512-8mam4H1NHLtu7nmtalF7eyBH14QyOASmcxHhSfEoRyr0nP/YdoesEtU+uSRvMe96TW/HPTtkoKqQLl53N7UXMQ==} '@types/trusted-types@2.0.7': resolution: {integrity: sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==} - '@types/turndown@5.0.5': - resolution: {integrity: sha512-TL2IgGgc7B5j78rIccBtlYAnkuv8nUQqhQc+DSYV5j9Be9XOcm/SKOVRuA47xAVI3680Tk9B1d8flK2GWT2+4w==} + '@types/turndown@5.0.6': + resolution: {integrity: sha512-ru00MoyeeouE5BX4gRL+6m/BsDfbRayOskWqUvh7CLGW+UXxHQItqALa38kKnOiZPqJrtzJUgAC2+F0rL1S4Pg==} '@types/unist@2.0.11': resolution: {integrity: sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==} @@ -1714,63 +1719,63 @@ packages: '@types/warning@3.0.3': resolution: {integrity: sha512-D1XC7WK8K+zZEveUPY+cf4+kgauk8N4eHr/XIHXGlGYkHLud6hK9lYfZk1ry1TNh798cZUCgb6MqGEG8DkJt6Q==} - '@typescript-eslint/eslint-plugin@8.46.0': - resolution: {integrity: sha512-hA8gxBq4ukonVXPy0OKhiaUh/68D0E88GSmtC1iAEnGaieuDi38LhS7jdCHRLi6ErJBNDGCzvh5EnzdPwUc0DA==} + '@typescript-eslint/eslint-plugin@8.48.1': + resolution: {integrity: sha512-X63hI1bxl5ohelzr0LY5coufyl0LJNthld+abwxpCoo6Gq+hSqhKwci7MUWkXo67mzgUK6YFByhmaHmUcuBJmA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - '@typescript-eslint/parser': ^8.46.0 + '@typescript-eslint/parser': ^8.48.1 eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/parser@8.46.0': - resolution: {integrity: sha512-n1H6IcDhmmUEG7TNVSspGmiHHutt7iVKtZwRppD7e04wha5MrkV1h3pti9xQLcCMt6YWsncpoT0HMjkH1FNwWQ==} + '@typescript-eslint/parser@8.48.1': + resolution: {integrity: sha512-PC0PDZfJg8sP7cmKe6L3QIL8GZwU5aRvUFedqSIpw3B+QjRSUZeeITC2M5XKeMXEzL6wccN196iy3JLwKNvDVA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/project-service@8.46.0': - resolution: {integrity: sha512-OEhec0mH+U5Je2NZOeK1AbVCdm0ChyapAyTeXVIYTPXDJ3F07+cu87PPXcGoYqZ7M9YJVvFnfpGg1UmCIqM+QQ==} + '@typescript-eslint/project-service@8.48.1': + resolution: {integrity: sha512-HQWSicah4s9z2/HifRPQ6b6R7G+SBx64JlFQpgSSHWPKdvCZX57XCbszg/bapbRsOEv42q5tayTYcEFpACcX1w==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/scope-manager@8.46.0': - resolution: {integrity: sha512-lWETPa9XGcBes4jqAMYD9fW0j4n6hrPtTJwWDmtqgFO/4HF4jmdH/Q6wggTw5qIT5TXjKzbt7GsZUBnWoO3dqw==} + '@typescript-eslint/scope-manager@8.48.1': + resolution: {integrity: sha512-rj4vWQsytQbLxC5Bf4XwZ0/CKd362DkWMUkviT7DCS057SK64D5lH74sSGzhI6PDD2HCEq02xAP9cX68dYyg1w==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/tsconfig-utils@8.46.0': - resolution: {integrity: sha512-WrYXKGAHY836/N7zoK/kzi6p8tXFhasHh8ocFL9VZSAkvH956gfeRfcnhs3xzRy8qQ/dq3q44v1jvQieMFg2cw==} + '@typescript-eslint/tsconfig-utils@8.48.1': + resolution: {integrity: sha512-k0Jhs4CpEffIBm6wPaCXBAD7jxBtrHjrSgtfCjUvPp9AZ78lXKdTR8fxyZO5y4vWNlOvYXRtngSZNSn+H53Jkw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/type-utils@8.46.0': - resolution: {integrity: sha512-hy+lvYV1lZpVs2jRaEYvgCblZxUoJiPyCemwbQZ+NGulWkQRy0HRPYAoef/CNSzaLt+MLvMptZsHXHlkEilaeg==} + '@typescript-eslint/type-utils@8.48.1': + resolution: {integrity: sha512-1jEop81a3LrJQLTf/1VfPQdhIY4PlGDBc/i67EVWObrtvcziysbLN3oReexHOM6N3jyXgCrkBsZpqwH0hiDOQg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/types@8.46.0': - resolution: {integrity: sha512-bHGGJyVjSE4dJJIO5yyEWt/cHyNwga/zXGJbJJ8TiO01aVREK6gCTu3L+5wrkb1FbDkQ+TKjMNe9R/QQQP9+rA==} + '@typescript-eslint/types@8.48.1': + resolution: {integrity: sha512-+fZ3LZNeiELGmimrujsDCT4CRIbq5oXdHe7chLiW8qzqyPMnn1puNstCrMNVAqwcl2FdIxkuJ4tOs/RFDBVc/Q==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/typescript-estree@8.46.0': - resolution: {integrity: sha512-ekDCUfVpAKWJbRfm8T1YRrCot1KFxZn21oV76v5Fj4tr7ELyk84OS+ouvYdcDAwZL89WpEkEj2DKQ+qg//+ucg==} + '@typescript-eslint/typescript-estree@8.48.1': + resolution: {integrity: sha512-/9wQ4PqaefTK6POVTjJaYS0bynCgzh6ClJHGSBj06XEHjkfylzB+A3qvyaXnErEZSaxhIo4YdyBgq6j4RysxDg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/utils@8.46.0': - resolution: {integrity: sha512-nD6yGWPj1xiOm4Gk0k6hLSZz2XkNXhuYmyIrOWcHoPuAhjT9i5bAG+xbWPgFeNR8HPHHtpNKdYUXJl/D3x7f5g==} + '@typescript-eslint/utils@8.48.1': + resolution: {integrity: sha512-fAnhLrDjiVfey5wwFRwrweyRlCmdz5ZxXz2G/4cLn0YDLjTapmN4gcCsTBR1N2rWnZSDeWpYtgLDsJt+FpmcwA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/visitor-keys@8.46.0': - resolution: {integrity: sha512-FrvMpAK+hTbFy7vH5j1+tMYHMSKLE6RzluFJlkFNKD0p9YsUT75JlBSmr5so3QRzvMwU5/bIEdeNrxm8du8l3Q==} + '@typescript-eslint/visitor-keys@8.48.1': + resolution: {integrity: sha512-BmxxndzEWhE4TIEEMBs8lP3MBWN3jFPs/p6gPm/wkv02o41hI6cq9AuSmGAaTTHPtA1FTi2jBre4A9rm5ZmX+Q==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@ungap/structured-clone@1.3.0': @@ -1904,8 +1909,8 @@ packages: ajv@8.17.1: resolution: {integrity: sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==} - ansi-escapes@7.1.1: - resolution: {integrity: sha512-Zhl0ErHcSRUaVfGUeUdDuLgpkEo8KIFjB4Y9uAc46ScOpdDiU1Dbyplh7qWJeJ/ZHpbyMSM26+X3BySgnIz40Q==} + ansi-escapes@7.2.0: + resolution: {integrity: sha512-g6LhBsl+GBPRWGWsBtutpzBYuIIdBkLEvad5C/va/74Db018+5TZiyA26cZJAr3Rft5lprVqOIPxf5Vid6tqAw==} engines: {node: '>=18'} ansi-regex@6.2.2: @@ -2036,8 +2041,8 @@ packages: resolution: {integrity: sha512-I3yl4r9QB5ZRY3XuJVEPfc2XhZO6YweFPI+UovAzn+8/hb3oJ6lnysaFcjVpkCPfVWFUDvoZ8kmVDP7WyRtYtQ==} engines: {node: '>= 0.6.0'} - baseline-browser-mapping@2.8.16: - resolution: {integrity: sha512-OMu3BGQ4E7P1ErFsIPpbJh0qvDudM/UuJeHgkAvfWe+0HFJCXh+t/l8L6fVLR55RI/UbKrVLnAXZSVwd9ysWYw==} + baseline-browser-mapping@2.9.3: + resolution: {integrity: sha512-8QdH6czo+G7uBsNo0GiUfouPN1lRzKdJTGnKXwe12gkFbnnOUaUKGN55dMkfy+mnxmvjwl9zcI4VncczcVXDhA==} hasBin: true big.js@5.2.2: @@ -2056,8 +2061,8 @@ packages: browser-fs-access@0.37.0: resolution: {integrity: sha512-MKpvZrKtv6pBJ2ACd+VwfS9XauBKTMVZg2UBibypuK1gfiXM7euZjbdKmvRsyxeQRhfzNVQrzCSVGXs19/LP8Q==} - browserslist@4.26.3: - resolution: {integrity: sha512-lAUU+02RFBuCKQPj/P6NgjlbCnLBMp4UtgTx7vNHd3XSIJF87s9a5rA3aH2yw3GS9DqZAUbOtZdCCiZeVRqt0w==} + browserslist@4.28.1: + resolution: {integrity: sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA==} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true @@ -2091,8 +2096,8 @@ packages: resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} engines: {node: '>=6'} - caniuse-lite@1.0.30001750: - resolution: {integrity: sha512-cuom0g5sdX6rw00qOoLNSFCJ9/mYIsuSOA+yzpDw8eopiFqcVwQvZHqov0vmEighRxX++cfC0Vg1G+1Iy/mSpQ==} + caniuse-lite@1.0.30001759: + resolution: {integrity: sha512-Pzfx9fOKoKvevQf8oCXoyNRQ5QyxJj+3O0Rqx2V5oxT61KGx8+n6hV/IUyJeifUci2clnmmKVpvtiqRzgiWjSw==} ccount@2.0.1: resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==} @@ -2134,8 +2139,8 @@ packages: resolution: {integrity: sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==} engines: {node: '>=18'} - cli-truncate@5.1.0: - resolution: {integrity: sha512-7JDGG+4Zp0CsknDCedl0DYdaeOhc46QNpXi3NLQblkZpXXgA6LncLDUUyvrjSvZeF3VRQa+KiMGomazQrC1V8g==} + cli-truncate@5.1.1: + resolution: {integrity: sha512-SroPvNHxUnk+vIW/dOSfNqdy1sPEFkrTk6TUtqLCnBlo3N7TNYYkzzN7uSD6+jVjrdO4+p8nH7JzH6cIvUem6A==} engines: {node: '>=20'} client-only@0.0.1: @@ -2171,8 +2176,8 @@ packages: comma-separated-tokens@2.0.3: resolution: {integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==} - commander@14.0.1: - resolution: {integrity: sha512-2JkV3gUZUVrbNA+1sjBOYLsMZ5cEEl8GTFP2a4AVz5hvasAMCQ1D2l2le/cX+pV4N6ZU17zjUahLpIXRrnWL8A==} + commander@14.0.2: + resolution: {integrity: sha512-TywoWNNRbhoD0BXs1P3ZEScW8W5iKrnbithIl0YH+uCmBd0QpPOA8yc82DS3BIE5Ma6FnBVUsJ7wVUDz4dvOWQ==} engines: {node: '>=20'} commander@2.20.3: @@ -2210,11 +2215,11 @@ packages: copy-anything@2.0.6: resolution: {integrity: sha512-1j20GZTsvKNkc4BY3NpMOM8tt///wY3FpIzozTOFO2ffuZcV61nojHXVKIy3WM+7ADCy5FVhdZYHYDdgTU0yJw==} - core-js-compat@3.46.0: - resolution: {integrity: sha512-p9hObIIEENxSV8xIu+V68JjSeARg6UVMG5mR+JEUguG3sI6MsiS1njz2jHmyJDvA+8jX/sytkBHup6kxhM9law==} + core-js-compat@3.47.0: + resolution: {integrity: sha512-IGfuznZ/n7Kp9+nypamBhvwdwLsW6KC8IOaURw2doAK5e98AG3acVLdh0woOnEqCfUtS+Vu882JE4k/DAm3ItQ==} - core-js@3.46.0: - resolution: {integrity: sha512-vDMm9B0xnqqZ8uSBpZ8sNtRtOdmfShrvT6h2TuQGLs0Is+cR0DYbj/KWP6ALVNbWPpqA/qPLoOuppJN07humpA==} + core-js@3.47.0: + resolution: {integrity: sha512-c3Q2VVkGAUyupsjRnaNX6u8Dq2vAdzm9iuPj5FW0fRxzlxgq9Q39MDq10IvmQSpLgHQNyQzQmOo6bgGHmH3NNg==} core-util-is@1.0.3: resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} @@ -2227,33 +2232,33 @@ packages: resolution: {integrity: sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==} engines: {node: '>=8'} - cspell-config-lib@9.2.1: - resolution: {integrity: sha512-qqhaWW+0Ilc7493lXAlXjziCyeEmQbmPMc1XSJw2EWZmzb+hDvLdFGHoX18QU67yzBtu5hgQsJDEDZKvVDTsRA==} + cspell-config-lib@9.4.0: + resolution: {integrity: sha512-CvQKSmK/DRIf3LpNx2sZth65pHW2AHngZqLkH3DTwnAPbiCAsE0XvCrVhvDfCNu/6uJIaa+NVHSs8GOf//DHBQ==} engines: {node: '>=20'} - cspell-dictionary@9.2.1: - resolution: {integrity: sha512-0hQVFySPsoJ0fONmDPwCWGSG6SGj4ERolWdx4t42fzg5zMs+VYGXpQW4BJneQ5Tfxy98Wx8kPhmh/9E8uYzLTw==} + cspell-dictionary@9.4.0: + resolution: {integrity: sha512-c2qscanRZChoHZFYI7KpvBMdy8i6wNwl2EflcNRrFiFOq67t9CgxLe54PafaqhrHGpBc8nElaZKciLvjj6Uscw==} engines: {node: '>=20'} - cspell-glob@9.2.1: - resolution: {integrity: sha512-CrT/6ld3rXhB36yWFjrx1SrMQzwDrGOLr+wYEnrWI719/LTYWWCiMFW7H+qhsJDTsR+ku8+OAmfRNBDXvh9mnQ==} + cspell-glob@9.4.0: + resolution: {integrity: sha512-Q87Suj9oXrhoKck15qWorCizBjMNxG/k3NjnhKIAMrF+PdUa1Mpl0MOD+hqV1Wvwh1UHcIMYCP3bR3XpBbNx+Q==} engines: {node: '>=20'} - cspell-grammar@9.2.1: - resolution: {integrity: sha512-10RGFG7ZTQPdwyW2vJyfmC1t8813y8QYRlVZ8jRHWzer9NV8QWrGnL83F+gTPXiKR/lqiW8WHmFlXR4/YMV+JQ==} + cspell-grammar@9.4.0: + resolution: {integrity: sha512-ie7OQ4Neflo+61bMzoLR7GtlZfMBAm2KL1U4iNqh15wUE5fDbvXeN15H5lu+gcO8BwYvC5wxZknw1x62/J8+3Q==} engines: {node: '>=20'} hasBin: true - cspell-io@9.2.1: - resolution: {integrity: sha512-v9uWXtRzB+RF/Mzg5qMzpb8/yt+1bwtTt2rZftkLDLrx5ybVvy6rhRQK05gFWHmWVtWEe0P/pIxaG2Vz92C8Ag==} + cspell-io@9.4.0: + resolution: {integrity: sha512-8w30dqlO54H9w6WGlvZhHI5kytVbF3bYPqKJAZLWKEO36L2mdpf6/abx/FA4yVLJ56wmH1x0N0ZK32wNRl5C6A==} engines: {node: '>=20'} - cspell-lib@9.2.1: - resolution: {integrity: sha512-KeB6NHcO0g1knWa7sIuDippC3gian0rC48cvO0B0B0QwhOxNxWVp8cSmkycXjk4ijBZNa++IwFjeK/iEqMdahQ==} + cspell-lib@9.4.0: + resolution: {integrity: sha512-ajjioE59IEDNUPawfaBpiMfGC32iKPkuYd4T9ftguuef8VvyKRifniiUi1nxwGgAhzSfxHvWs7qdT+29Pp5TMQ==} engines: {node: '>=20'} - cspell-trie-lib@9.2.1: - resolution: {integrity: sha512-qOtbL+/tUzGFHH0Uq2wi7sdB9iTy66QNx85P7DKeRdX9ZH53uQd7qC4nEk+/JPclx1EgXX26svxr0jTGISJhLw==} + cspell-trie-lib@9.4.0: + resolution: {integrity: sha512-bySJTm8XDiJAoC1MDo4lE/KpSNxydo13ZETC8TF7Hb3rbWI1c6o5eZ4+i/tkG3M94OvKV91+MeAvoMCe7GGgAw==} engines: {node: '>=20'} css-declaration-sorter@7.3.0: @@ -2265,8 +2270,8 @@ packages: css-line-break@2.1.0: resolution: {integrity: sha512-FHcKFCZcAha3LwfVBhCQbW2nCNbkZXn7KVUJcsT5/P8YmfsVja0FMPJr0B903j/E69HUphKiV9iQArX8SDYA4w==} - csstype@3.1.3: - resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} + csstype@3.2.3: + resolution: {integrity: sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==} damerau-levenshtein@1.0.8: resolution: {integrity: sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==} @@ -2374,13 +2379,13 @@ packages: ecdsa-sig-formatter@1.0.11: resolution: {integrity: sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==} - echarts-jsx@0.5.4: - resolution: {integrity: sha512-avK1FhC8U0SLTEWxR9nytDxfxHrfrrkzb8G0O1ByVCPTy08SVOjZMjFhPMIE0IneymqTyPJCmN+xC67ihVmHnQ==} + echarts-jsx@0.6.0: + resolution: {integrity: sha512-x+Xl+SkIlWur4GZ2nKWpsvs7s2zLSGymifvMERUlxQ2tPdr16cDB1+YlahKuv0laO2bQET7T8OaRO6tqnaLeTg==} peerDependencies: react: '>=16' - echarts@5.6.0: - resolution: {integrity: sha512-oTbVTsXfKuEhxftHqL5xprgLoc0k7uScAwtryCgWF6hPYFLRwOUHiFmHGCBKP5NPFNkDVopOieyUqYGH8Fa3kA==} + echarts@6.0.0: + resolution: {integrity: sha512-Tte/grDQRiETQP4xz3iZWSvoHrkCQtwqd6hs+mifXcjrCuo2iKWbajFObuLJVBlDIJlOzgQPd1hsaKt/3+OMkQ==} editorjs-html@4.0.5: resolution: {integrity: sha512-ImQYxB3fNCJcd+nJ+Vbne/6PxidO1cYByNpu9nBDStVabfjVrMW65BuR+IEZfOii8VKYH+CW/lYDb2GDlzZtDg==} @@ -2396,11 +2401,11 @@ packages: engines: {node: '>=0.10.0'} hasBin: true - electron-to-chromium@1.5.234: - resolution: {integrity: sha512-RXfEp2x+VRYn8jbKfQlRImzoJU01kyDvVPBmG39eU2iuRVhuS6vQNocB8J0/8GrIMLnPzgz4eW6WiRnJkTuNWg==} + electron-to-chromium@1.5.266: + resolution: {integrity: sha512-kgWEglXvkEfMH7rxP5OSZZwnaDWT7J9EoZCujhnpLbfi0bbNtRkgdX2E3gt0Uer11c61qCYktB3hwkAS325sJg==} - emoji-regex@10.5.0: - resolution: {integrity: sha512-lb49vf1Xzfx080OKA0o6l8DQQpV+6Vg95zyCJX9VB/BqKYlhG7N4wgROUUHRA+ZPUefLnteQOad7z1kT2bV7bg==} + emoji-regex@10.6.0: + resolution: {integrity: sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==} emoji-regex@9.2.2: resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} @@ -2478,10 +2483,10 @@ packages: resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==} engines: {node: '>=12'} - eslint-config-next@15.5.4: - resolution: {integrity: sha512-BzgVVuT3kfJes8i2GHenC1SRJ+W3BTML11lAOYFOOPzrk2xp66jBOAGEFRw+3LkYCln5UzvFsLhojrshb5Zfaw==} + eslint-config-next@16.0.7: + resolution: {integrity: sha512-WubFGLFHfk2KivkdRGfx6cGSFhaQqhERRfyO8BRx+qiGPGp7WLKcPvYC4mdx1z3VhVRcrfFzczjjTrbJZOpnEQ==} peerDependencies: - eslint: ^7.23.0 || ^8.0.0 || ^9.0.0 + eslint: '>=9.0.0' typescript: '>=3.3.1' peerDependenciesMeta: typescript: @@ -2546,9 +2551,9 @@ packages: peerDependencies: eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9 - eslint-plugin-react-hooks@5.2.0: - resolution: {integrity: sha512-+f15FfK64YQwZdJNELETdn5ibXEUQmW1DZL6KXhNnc2heoy/sg9VJJeT7n8TlMWouzWqSWavFkIhHyIbIAEapg==} - engines: {node: '>=10'} + eslint-plugin-react-hooks@7.0.1: + resolution: {integrity: sha512-O0d0m04evaNzEPoSW+59Mezf8Qt0InfgGIBJnpC0h3NH/WjUAR7BIKUfysC6todmtiZ/A0oUVS8Gce0WhBrHsA==} + engines: {node: '>=18'} peerDependencies: eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0 @@ -2575,8 +2580,8 @@ packages: resolution: {integrity: sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - eslint@9.37.0: - resolution: {integrity: sha512-XyLmROnACWqSxiGYArdef1fItQd47weqB7iwtfr9JHwRrqIXZdcFMvvEcL9xHCmL0SNsOvF0c42lWyM1U5dgig==} + eslint@9.39.1: + resolution: {integrity: sha512-BhHmn2yNOFA9H9JmmIVKJmd288g9hrVRDkdoIgRCRuSySRUHH7r/DI6aAXW9T1WwUuY3DFgrcaqB+deURBLR5g==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} hasBin: true peerDependencies: @@ -2621,8 +2626,8 @@ packages: estree-util-to-js@2.0.0: resolution: {integrity: sha512-WDF+xj5rRWmD5tj6bIqRi6CkLIXbbNQUcxQHzGysQzvHmdYG2G7p/Tf0J0gpxGgkeMZNTIjT/AoSvC9Xehcgdg==} - estree-util-value-to-estree@3.4.0: - resolution: {integrity: sha512-Zlp+gxis+gCfK12d3Srl2PdX2ybsEA8ZYy6vQGVQTNNYLEGRQQ56XB64bjemN8kxIKXP1nC9ip4Z+ILy9LGzvQ==} + estree-util-value-to-estree@3.5.0: + resolution: {integrity: sha512-aMV56R27Gv3QmfmF1MY12GWkGzzeAezAX+UplqHVASfjc9wNzI/X6hC0S9oxq61WT4aQesLGslWP9tKk6ghRZQ==} estree-util-visit@2.0.0: resolution: {integrity: sha512-m5KgiH85xAhhW8Wta0vShLcUvOsh3LLPI2YVwcbio1l7E09NTLL1EyMZFM1OyWowoH0skScNbhOPl4kcBgzTww==} @@ -2646,8 +2651,8 @@ packages: fast-deep-equal@3.1.3: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} - fast-equals@5.3.2: - resolution: {integrity: sha512-6rxyATwPCkaFIL3JLqw8qXqMpIZ942pTX/tbQFkRsDGblS8tNGtlUauA/+mt6RUfqn/4MoEr+WDkYoIQbibWuQ==} + fast-equals@5.3.3: + resolution: {integrity: sha512-/boTcHZeIAQ2r/tL11voclBHDeP9WPxLt+tyAbVSyyXuUFyh0Tne7gJZTqGbxnvj79TjLdCXLOY7UIPhyG5MTw==} engines: {node: '>=6.0.0'} fast-glob@3.3.1: @@ -2682,15 +2687,12 @@ packages: picomatch: optional: true - fflate@0.8.2: - resolution: {integrity: sha512-cPJU47OaAoCbg0pBvzsgpTPhmhqI5eJjh/JIu8tPj5q+T7iLvW/JAYUqmE7KOB4R1ZyEhzBaIQpQpardBF5z8A==} - file-entry-cache@8.0.0: resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} engines: {node: '>=16.0.0'} - file-type@21.0.0: - resolution: {integrity: sha512-ek5xNX2YBYlXhiUXui3D/BXa3LdqPmoLJ7rqEx2bKJ7EAUEfmXgW0Das7Dc6Nr9MvqaOnIqiPV0mZk/r/UpNAg==} + file-type@21.1.1: + resolution: {integrity: sha512-ifJXo8zUqbQ/bLbl9sFoqHNTNWbnPY1COImFfM6CCy7z+E+jC1eY9YfOKkx0fckIg+VljAy2/87T61fp0+eEkg==} engines: {node: '>=20'} filelist@1.0.4: @@ -2757,9 +2759,9 @@ packages: resolution: {integrity: sha512-SFdFmIJi+ybC0vjlHN0ZGVGHc3lgE0DxPAT0djjVg+kjOnSqclqmj0KQ7ykTOLP6YxoqOvuAODGdcHJn+43q3g==} engines: {node: '>= 0.4'} - gensequence@7.0.0: - resolution: {integrity: sha512-47Frx13aZh01afHJTB3zTtKIlFI6vWY+MYCN9Qpew6i52rfKjnhCF/l1YlC8UmEMvvntZZ6z4PiCcmyuedR2aQ==} - engines: {node: '>=18'} + gensequence@8.0.8: + resolution: {integrity: sha512-omMVniXEXpdx/vKxGnPRoO2394Otlze28TyxECbFVyoSpZ9H3EO7lemjcB12OpQJzRW4e5tt/dL1rOxry6aMHg==} + engines: {node: '>=20'} gensync@1.0.0-beta.2: resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} @@ -2784,8 +2786,8 @@ packages: resolution: {integrity: sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==} engines: {node: '>= 0.4'} - get-tsconfig@4.12.0: - resolution: {integrity: sha512-LScr2aNr2FbjAjZh2C6X6BxRx1/x+aTDExct/xyq2XKbYOiG5c0aK7pMsSuyc0brz3ibr/lbQiHD9jzt4lccJw==} + get-tsconfig@4.13.0: + resolution: {integrity: sha512-1VKTZJCwBrvbd+Wn3AOgQP/2Av+TfTCOlE4AcRJE72W1ksZXbAx8PPBR9RzgTeSPzlPMHrbANMH3LbltH73wxQ==} glob-parent@5.1.2: resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} @@ -2811,6 +2813,10 @@ packages: resolution: {integrity: sha512-ob/2LcVVaVGCYN+r14cnwnoDPUufjiYgSqRhiFD0Q1iI4Odora5RE8Iv1D24hAz5oMophRGkGz+yuvQmmUMnMw==} engines: {node: '>=18'} + globals@16.5.0: + resolution: {integrity: sha512-c/c15i26VrJ4IRt5Z89DnIzCGDn9EcebibhAOjw5ibqEHsE1wLUgkPn9RDmNcUKyU87GeaL633nyJ+pplFR2ZQ==} + engines: {node: '>=18'} + globalthis@1.0.4: resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==} engines: {node: '>= 0.4'} @@ -2869,6 +2875,12 @@ packages: hast-util-whitespace@3.0.0: resolution: {integrity: sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==} + hermes-estree@0.25.1: + resolution: {integrity: sha512-0wUoCcLp+5Ev5pDW2OriHC2MJCbwLwuRx+gAqMTOkGKJJiBCLjtrvy4PWUGn6MIVefecRpzoOZ/UV6iGdOr+Cw==} + + hermes-parser@0.25.1: + resolution: {integrity: sha512-6pEjquH3rqaI6cYAXYPcz9MS4rY6R4ngRgrgfDshRptUZIc3lw0MCIJIGDj9++mfySOuPTHB4nrSW99BCvOPIA==} + html2canvas@1.4.1: resolution: {integrity: sha512-fPU6BHNpsyIhr8yyMpTLLxAbkaK8ArIBcmZIRiBLiDhjeqvXolaEmDGmELFuX9I4xDcaKKcJl+TKZLqruBbmWA==} engines: {node: '>=8.0.0'} @@ -2881,8 +2893,8 @@ packages: resolution: {integrity: sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==} engines: {node: '>= 0.6'} - http-errors@2.0.0: - resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==} + http-errors@2.0.1: + resolution: {integrity: sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==} engines: {node: '>= 0.8'} husky@9.1.7: @@ -2926,8 +2938,8 @@ packages: engines: {node: '>=0.10.0'} hasBin: true - immutable@5.1.3: - resolution: {integrity: sha512-+chQdDfvscSF1SJqv2gn4SRO2ZyS3xL3r7IW/wWEEzrzLisnOlKiQu5ytC/BVNcS15C39WT2Hg/bjKjDMcu+zg==} + immutable@5.1.4: + resolution: {integrity: sha512-p6u1bG3YSnINT5RQmx/yRZBpenIl30kVxkTLDyHLIMk0gict704Q9n+thfDI7lTRm9vXdDYutVzXhzcThxTnXA==} import-fresh@3.3.1: resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==} @@ -2955,8 +2967,8 @@ packages: resolution: {integrity: sha512-QQnnxNyfvmHFIsj7gkPcYymR8Jdw/o7mp5ZFihxn6h8Ci6fh3Dx4E1gPjpQEpIuPo9XVNY/ZUwh4BPMjGyL01g==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - inline-style-parser@0.2.4: - resolution: {integrity: sha512-0aO8FkhNZlj/ZIbNi7Lxxr12obT7cL1moPfE4tg1LkX7LlLfC6DeX4l2ZEud1ukP9jNQyNnfzQVqwbwmAATY4Q==} + inline-style-parser@0.2.7: + resolution: {integrity: sha512-Nb2ctOyNR8DqQoR0OwRG95uNWIC0C1lCgf5Naz5H6Ji72KZ8OcFZLz2P5sNgwlyoJ8Yif11oMuYs5pBQa86csA==} internal-slot@1.1.0: resolution: {integrity: sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==} @@ -3163,8 +3175,8 @@ packages: js-tokens@4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} - js-yaml@4.1.0: - resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} + js-yaml@4.1.1: + resolution: {integrity: sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==} hasBin: true jsesc@3.1.0: @@ -3203,23 +3215,24 @@ packages: resolution: {integrity: sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==} engines: {node: '>=0.10.0'} - jsonwebtoken@9.0.2: - resolution: {integrity: sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ==} + jsonwebtoken@9.0.3: + resolution: {integrity: sha512-MT/xP0CrubFRNLNKvxJ2BYfy53Zkm++5bX9dtuPbqAeQpTVe0MQTFhao8+Cp//EmJp244xt6Drw/GVEGCUj40g==} engines: {node: '>=12', npm: '>=6'} jsx-ast-utils@3.3.5: resolution: {integrity: sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==} engines: {node: '>=4.0'} - jwa@1.4.2: - resolution: {integrity: sha512-eeH5JO+21J78qMvTIDdBXidBd6nG2kZjg5Ohz/1fpa28Z4CcsWUzJ1ZZyFq/3z3N17aZy+ZuBoHljASbL1WfOw==} + jwa@2.0.1: + resolution: {integrity: sha512-hRF04fqJIP8Abbkq5NKGN0Bbr3JxlQ+qhZufXVr0DvujKy93ZCbXZMHDL4EOtodSbCWxOqR8MS1tXA5hwqCXDg==} - jws@3.2.2: - resolution: {integrity: sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==} + jws@4.0.1: + resolution: {integrity: sha512-EKI/M/yqPncGUUh44xz0PxSidXFr/+r0pA70+gIYhjv+et7yxM+s29Y+VGDkovRofQem0fs7Uvf4+YmAdyRduA==} keygrip@1.1.0: resolution: {integrity: sha512-iYSchDJ+liQ8iwbSI2QqsQOvqv58eJCEanyJPJi+Khyu8smkcKSFUCbPwzFcL7YVtZ6eONjqRX/38caJ7QjRAQ==} engines: {node: '>= 0.6'} + deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. keyv@4.5.4: resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} @@ -3231,8 +3244,8 @@ packages: koa-compose@4.1.0: resolution: {integrity: sha512-8ODW8TrDuMYvXRwra/Kh7/rJo9BtOfPc6qO8eAfC80CnCvSjSl0bkRM24X6/XBBEyj0v1nRUQ1LyOy3dbqOWXw==} - koa@3.0.1: - resolution: {integrity: sha512-oDxVkRwPOHhGlxKIDiDB2h+/l05QPtefD7nSqRgDfZt8P+QVYFWjfeK8jANf5O2YXjk8egd7KntvXKYx82wOag==} + koa@3.1.1: + resolution: {integrity: sha512-KDDuvpfqSK0ZKEO2gCPedNjl5wYpfj+HNiuVRlbhd1A88S3M0ySkdf2V/EJ4NWt5dwh5PXCdcenrKK2IQJAxsg==} engines: {node: '>= 18'} koajax@3.1.2: @@ -3280,13 +3293,13 @@ packages: license-filter@0.2.5: resolution: {integrity: sha512-xzKCeI9ax0k6/qALLhyXoJq1sbnmGHhjAX1AHr9ItDL9LF4jv97h64Z9iDyNTBQdhdr3BTI80VsWwTp0wpM1GQ==} - lint-staged@16.2.4: - resolution: {integrity: sha512-Pkyr/wd90oAyXk98i/2KwfkIhoYQUMtss769FIT9hFM5ogYZwrk+GRE46yKXSg2ZGhcJ1p38Gf5gmI5Ohjg2yg==} + lint-staged@16.2.7: + resolution: {integrity: sha512-lDIj4RnYmK7/kXMya+qJsmkRFkGolciXjrsZ6PC25GdTfWOAWetR0ZbsNXRAj1EHHImRSalc+whZFg56F5DVow==} engines: {node: '>=20.17'} hasBin: true - listr2@9.0.4: - resolution: {integrity: sha512-1wd/kpAdKRLwv7/3OKC8zZ5U8e/fajCfWMxacUvB79S5nLrYGPtUI/8chMQhn3LQjsRVErTb9i1ECAwW0ZIHnQ==} + listr2@9.0.5: + resolution: {integrity: sha512-ME4Fb83LgEgwNw96RKNvKV4VTLuXfoKudAmm2lP8Kk87KaMK0/Xrx/aAkMWmT8mDb+3MlFDspfbCs7adjRxA2g==} engines: {node: '>=20.0.0'} loader-utils@2.0.4: @@ -3374,8 +3387,8 @@ packages: engines: {node: '>= 18'} hasBin: true - marked@16.4.0: - resolution: {integrity: sha512-CTPAcRBq57cn3R8n3hwc2REddc28hjR7RzDXQ+lXLmMJYqn20BaI2cGw6QjgZGIgVfp2Wdfw4aMzgNteQ6qJgQ==} + marked@17.0.1: + resolution: {integrity: sha512-boeBdiS0ghpWcSwoNm/jJBwdpFaMnZWRzjA6SkUMYb40SVaN1x7mmfGKp0jvexGcx+7y2La5zRZsYFZI6Qpypg==} engines: {node: '>= 20'} hasBin: true @@ -3404,8 +3417,8 @@ packages: mdast-util-phrasing@4.1.0: resolution: {integrity: sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w==} - mdast-util-to-hast@13.2.0: - resolution: {integrity: sha512-QGYKEuUsYT9ykKBCMOEDLsU5JRObWQusAolFMeko/tYPufNkRffBAQjIE+99jbA87xv6FgmjLtwjh9wBWajwAA==} + mdast-util-to-hast@13.2.1: + resolution: {integrity: sha512-cctsq2wp5vTsLIcaymblUriiTcZd0CwWtCbLvrOzYCDZoWyMNV8sZ7krj09FSnsiJi3WVsHLM4k6Dq/yaPyCXA==} mdast-util-to-markdown@2.1.2: resolution: {integrity: sha512-xj68wMTvGXVOKonmog6LwyJKrYXZPvlwabaryTjLh9LuvovB/KAH+kvi8Gjj+7rJjsFi23nkUxRQv1KqSroMqA==} @@ -3531,9 +3544,9 @@ packages: resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} engines: {node: '>= 0.6'} - mime-types@3.0.1: - resolution: {integrity: sha512-xRc4oEhT6eaBpU1XF7AjpOFD+xQmXNB5OVKwp4tqCuBpHLS/ZbBDrc07mYTDqVMg6PfxUjjNp85O6Cd2Z/5HWA==} - engines: {node: '>= 0.6'} + mime-types@3.0.2: + resolution: {integrity: sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A==} + engines: {node: '>=18'} mime@1.6.0: resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==} @@ -3549,8 +3562,8 @@ packages: resolution: {integrity: sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==} engines: {node: '>=18'} - minimatch@10.0.3: - resolution: {integrity: sha512-IPZ167aShDZZUMdRk66cyQAW3qr0WzbHkPdMYa8bzZhlHhO3jALbKdxcaak7W9FfT2rZNpQuUu4Od7ILEpXSaw==} + minimatch@10.1.1: + resolution: {integrity: sha512-enIvLvRAFZYXJzkCYG5RKmPfrFArdLv+R+lbQ53BmIMLIry74bjKzX6iHAm8WYamJkhSSEabrWN5D97XnKObjQ==} engines: {node: 20 || >=22} minimatch@3.1.2: @@ -3567,16 +3580,16 @@ packages: minimist@1.2.8: resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} - mobx-github@0.6.0: - resolution: {integrity: sha512-Md65hu+w82lJ982HlPSczb6g2Ipnrs6vBeiPEYAf93HEEzC5tBNrQyjicwXc1f908AKfhoR4mAwcYEK2fk9H4w==} + mobx-github@0.6.2: + resolution: {integrity: sha512-MlqjAKkb1DTZl8ruuOx+8GI/mFbL/C5uXxtW+D0UaCWTNutC5JCV/xzzfGBKZuBWX4Y+I9fBUzw7SVnYukNElA==} mobx-i18n@0.7.2: resolution: {integrity: sha512-W1W2/nd/0ah6hqBJqpIyAILyvqaNAVwpACH3sm0PeQ5/+0wYEY06+g4WPFQX4y5QNTCr46zgoiQnJ+l8dPXDMQ==} peerDependencies: mobx: '>=6.11' - mobx-lark@2.4.2: - resolution: {integrity: sha512-vYEl1SXss7sx9GgzJPLtjBr+sYPZdc32k+IdjQ7yOo7ZLr9gX4XWPvwaNXGw4OL+AmQBLPp4iWD93S40O3cy/A==} + mobx-lark@2.5.0: + resolution: {integrity: sha512-A9VMj+Us6M2YHIIHMkUuKjYW+Yg6hkbIlqzZs5o25FKe/aavjB31HlDvf9s1wVjgfer1t42Bw8TsG3Oo8n7RHg==} peerDependencies: react: '>=16' @@ -3612,13 +3625,13 @@ packages: react-native: optional: true - mobx-restful-table@2.5.4: - resolution: {integrity: sha512-SZ19YJZ4dDwk8pJ3d2O26C8aZ7bVcaaSCQ+66b7q2zx55DHHjpWM9MkEJZZNwLJaQGisCTcQ0OKE8HN+YGr10A==} + mobx-restful-table@2.6.3: + resolution: {integrity: sha512-yGNwWD0RVe3lLI1ZYeqy2QhwQh7oMl1FEq6fkXjOVe2kBvmua7qf5RWF5/Uq1om3FepiZpqT4nUvXPvoxc/VJA==} peerDependencies: react: '>=16.8' - mobx-restful@2.1.3: - resolution: {integrity: sha512-IGIT6X83CXmxqNkOQZnpXp6AzK9AI+/VR579ssntB/l+kgzVJP5otiX7v3eCukYsSCIkGkH2FJEe84+uIibYpg==} + mobx-restful@2.1.4: + resolution: {integrity: sha512-yIxWQTeTQCy47VuS5EEwri2bXuGlw8KiUI7yNYcQ8PqrUVSCVUGjoiaUHPPtz4wSjretAzVmIu07cP1fyHpVDg==} peerDependencies: mobx: '>=6.11' @@ -3660,12 +3673,12 @@ packages: next-pwa@5.6.0: resolution: {integrity: sha512-XV8g8C6B7UmViXU8askMEYhWwQ4qc/XqJGnexbLV68hzKaGHZDMtHsm2TNxFcbR7+ypVuth/wwpiIlMwpRJJ5A==} peerDependencies: - next: ^15.5.4 + next: ^16.0.7 next-ssr-middleware@1.0.3: resolution: {integrity: sha512-vV3W7bcNVrjPRov2N+IxMHmO9WF/fKezW25PJsm/Av3a5vGszKW6SDon07+/HZ9qsx5feIVeiXqdt20r/SMi9g==} peerDependencies: - next: ^15.5.4 + next: ^16.0.7 react: '>=18' next-with-less@3.0.1: @@ -3673,11 +3686,11 @@ packages: peerDependencies: less: '*' less-loader: '>= 7.0.0' - next: ^15.5.4 + next: ^16.0.7 - next@15.5.4: - resolution: {integrity: sha512-xH4Yjhb82sFYQfY3vbkJfgSDgXvBB6a8xPs9i35k6oZJRoQRihZH+4s9Yo2qsWpzBmZ3lPXaJ2KPXLfkvW4LnA==} - engines: {node: ^18.18.0 || ^19.8.0 || >= 20.0.0} + next@16.0.7: + resolution: {integrity: sha512-3mBRJyPxT4LOxAJI6IsXeFtKfiJUbjCLgvXO02fV8Wy/lIhPvP94Fe7dGhUgHXcQy4sSuYwQNcOLhIfOm0rL0A==} + engines: {node: '>=20.9.0'} hasBin: true peerDependencies: '@opentelemetry/api': ^1.1.0 @@ -3699,8 +3712,8 @@ packages: node-addon-api@7.1.1: resolution: {integrity: sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==} - node-releases@2.0.23: - resolution: {integrity: sha512-cCmFDMSm26S6tQSDpBCg/NR8NENrVPhAJSf+XbxBG4rPFaaonlEoE9wHQmun+cls499TQGSb7ZyPBRlzgKfpeg==} + node-releases@2.0.27: + resolution: {integrity: sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==} object-assign@4.1.1: resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} @@ -3895,8 +3908,8 @@ packages: peerDependencies: prettier: 3.x - prettier@3.6.2: - resolution: {integrity: sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ==} + prettier@3.7.4: + resolution: {integrity: sha512-v6UNi1+3hSlVvv8fSaoUbggEM5VErKmmpGA7Pl3HF8V6uKY7rvClBOJlH6yNwQtfTueNkGVpOv/mtWL9L4bgRA==} engines: {node: '>=14'} hasBin: true @@ -3936,8 +3949,8 @@ packages: randombytes@2.1.0: resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} - raw-body@2.5.2: - resolution: {integrity: sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==} + raw-body@2.5.3: + resolution: {integrity: sha512-s4VSOf6yN0rvbRZGxs8Om5CWj6seneMwK3oDb4lWDH0UPhWcxwOWw5+qk24bxq87szX1ydrwylIOp2uG1ojUpA==} engines: {node: '>= 0.8'} react-bootstrap-editor@2.1.1: @@ -3956,10 +3969,10 @@ packages: '@types/react': optional: true - react-dom@19.2.0: - resolution: {integrity: sha512-UlbRu4cAiGaIewkPyiRGJk0imDN2T3JjieT6spoL2UeSf5od4n5LB/mQ4ejmxhCFT1tYe8IvaFulzynWovsEFQ==} + react-dom@19.2.1: + resolution: {integrity: sha512-ibrK8llX2a4eOskq1mXKu/TGZj9qzomO+sNfO98M6d9zIPOEhlBkMkBUBLd1vgS0gQsLDBzA+8jJBVXDnfHmJg==} peerDependencies: - react: ^19.2.0 + react: ^19.2.1 react-editor-js@2.1.0: resolution: {integrity: sha512-unI9D2pTH/2gBenc6LgCXJm8iqnrzB71CHgfjQmaB+lGR0Njx+ZXydgUQm1VofMmvF6vcCNVDE1Eb47zQbm14g==} @@ -3996,8 +4009,8 @@ packages: react: ^16 || ^17 || ^18 react-dom: ^16 || ^17 || ^18 - react@19.2.0: - resolution: {integrity: sha512-tmbWg6W31tQLeB5cdIBOicJDJRR2KzXsV7uSK9iNfLWQ5bIZfxuPEHp7M8wiHyHnn0DD1i7w3Zmin0FtkrwoCQ==} + react@19.2.1: + resolution: {integrity: sha512-DGrYcCWK7tvYMnWh79yrPHt+vdx9tY+1gPZa7nJQtO/p8bLTDaHp4dzwEhQB7pZ4Xe3ok4XKuEPrVuc+wlpkmw==} engines: {node: '>=0.10.0'} readdirp@4.1.2: @@ -4080,8 +4093,8 @@ packages: resolve-pkg-maps@1.0.0: resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} - resolve@1.22.10: - resolution: {integrity: sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==} + resolve@1.22.11: + resolution: {integrity: sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==} engines: {node: '>= 0.4'} hasBin: true @@ -4137,13 +4150,13 @@ packages: safer-buffer@2.1.2: resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} - sass@1.93.2: - resolution: {integrity: sha512-t+YPtOQHpGW1QWsh1CHQ5cPIr9lbbGZLZnbihP/D/qZj/yuV68m8qarcV17nvkOX81BCrvzAlq2klCQFZghyTg==} + sass@1.94.2: + resolution: {integrity: sha512-N+7WK20/wOr7CzA2snJcUSSNTCzeCGUTFY3OgeQP3mZ1aj9NMQ0mSTXwlrnd89j33zzQJGqIN52GIOmYrfq46A==} engines: {node: '>=14.0.0'} hasBin: true - sax@1.4.1: - resolution: {integrity: sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==} + sax@1.4.3: + resolution: {integrity: sha512-yqYn1JhPczigF94DMS+shiDMjDowYO6y9+wB/4WgO0Y19jWYk0lQ4tuG5KI7kj4FTp1wxPj5IFfcrz/s1c3jjQ==} scheduler@0.27.0: resolution: {integrity: sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==} @@ -4194,8 +4207,8 @@ packages: resolution: {integrity: sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==} engines: {node: '>=8'} - sharp@0.34.4: - resolution: {integrity: sha512-FUH39xp3SBPnxWvd5iib1X8XY7J0K0X7d93sie9CJg2PO8/7gmg89Nve6OjItK53/MlAushNNxteBYfM6DEuoA==} + sharp@0.34.5: + resolution: {integrity: sha512-Ou9I5Ft9WNcCbXrU9cMgPBcCK8LiwLqcbywW3t4oDV37n1pzpuNLsYiAV8eODnjbtQlSDwZ2cUEeQz4E54Hltg==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} shebang-command@2.0.0: @@ -4234,8 +4247,8 @@ packages: resolution: {integrity: sha512-iOBWFgUX7caIZiuutICxVgX1SdxwAVFFKwt1EvMYYec/NWO5meOJ6K5uQxhrYBdQJne4KxiqZc+KptFOWFSI9w==} engines: {node: '>=18'} - smol-toml@1.4.2: - resolution: {integrity: sha512-rInDH6lCNiEyn3+hH8KVGFdbjc099j47+OSgbMrfDYX1CmXLfdKd7qi6IfcWj2wFxvSVkuI46M+wPGYfEOEj6g==} + smol-toml@1.5.2: + resolution: {integrity: sha512-QlaZEqcAH3/RtNyet1IPIYPsEWAaYyXXv1Krsi+1L/QHppjX4Ifm8MQsBISz9vE8cHicIq3clogsheili5vhaQ==} engines: {node: '>= 18'} source-list-map@2.0.1: @@ -4275,10 +4288,6 @@ packages: resolution: {integrity: sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==} engines: {node: '>= 0.6'} - statuses@2.0.1: - resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==} - engines: {node: '>= 0.8'} - statuses@2.0.2: resolution: {integrity: sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==} engines: {node: '>= 0.8'} @@ -4349,11 +4358,11 @@ packages: resolution: {integrity: sha512-KIy5nylvC5le1OdaaoCJ07L+8iQzJHGH6pWDuzS+d07Cu7n1MZ2x26P8ZKIWfbK02+XIL8Mp4RkWeqdUCrDMfg==} engines: {node: '>=18'} - style-to-js@1.1.18: - resolution: {integrity: sha512-JFPn62D4kJaPTnhFUI244MThx+FEGbi+9dw1b9yBBQ+1CZpV7QAT8kUtJ7b7EUNdHajjF/0x8fT+16oLJoojLg==} + style-to-js@1.1.21: + resolution: {integrity: sha512-RjQetxJrrUJLQPHbLku6U/ocGtzyjbJMP9lCNK7Ag0CNh690nSH8woqWH9u16nMjYBAok+i7JO1NP2pOy8IsPQ==} - style-to-object@1.0.11: - resolution: {integrity: sha512-5A560JmXr7wDyGLK12Nq/EYS38VkGlglVzkis1JEdbGWSnbQIEhZzTJhzURXN5/8WwwFCs/f/VVcmkTppbXLow==} + style-to-object@1.0.14: + resolution: {integrity: sha512-LIN7rULI0jBscWQYaSswptyderlarFkjQ+t79nzty8tcIAceVomEVlLzH5VP4Cmsv6MtKhs7qaAiwlcp+Mgaxw==} styled-jsx@5.1.6: resolution: {integrity: sha512-qSVyDTeMotdvQYoHWLNGwRFJHC+i+ZvdBRYosOFgC+Wg1vx4frN2/RG/NA7SYqqvKNLf39P2LSRA2pu6n0XYZA==} @@ -4392,8 +4401,8 @@ packages: resolution: {integrity: sha512-G13vtMYPT/J8A4X2SjdtBTphZlrp1gKv6hZiOjw14RCWg6GbHuQBGtjlx75xLbYV/wEc0D7G5K4rxKP/cXk8Bw==} engines: {node: '>=10'} - terser-webpack-plugin@5.3.14: - resolution: {integrity: sha512-vkZjpUjb6OMS7dhV+tILUW6BhpDR7P2L/aQSAv+Uwk+m8KATX9EccViHTJR2qDtACKPIYndLGCyl3FMo+r2LMw==} + terser-webpack-plugin@5.3.15: + resolution: {integrity: sha512-PGkOdpRFK+rb1TzVz+msVhw4YMRT9txLF4kRqvJhGhCM324xuR3REBSHALN+l+sAhKUmz0aotnjp5D+P83mLhQ==} engines: {node: '>= 10.13.0'} peerDependencies: '@swc/core': '*' @@ -4408,8 +4417,8 @@ packages: uglify-js: optional: true - terser@5.44.0: - resolution: {integrity: sha512-nIVck8DK+GM/0Frwd+nIhZ84pR/BX7rmXMfYwyg+Sri5oGVE99/E3KvXqpC2xHFxyqXyGHTKBSioxxplrO4I4w==} + terser@5.44.1: + resolution: {integrity: sha512-t/R3R/n0MSwnnazuPpPNVO60LX0SKL45pyl9YlvxIdkH0Of7D5qM2EVe+yASRIlY5pZ73nclYJfNANGWPwFDZw==} engines: {node: '>=10'} hasBin: true @@ -4466,8 +4475,8 @@ packages: turndown-plugin-gfm@1.0.2: resolution: {integrity: sha512-vwz9tfvF7XN/jE0dGoBei3FXWuvll78ohzCZQuOb+ZjWrs3a0XhQVomJEb2Qh4VHTPNRO4GPZh0V7VRbiWwkRg==} - turndown@7.2.1: - resolution: {integrity: sha512-7YiPJw6rLClQL3oUKN3KgMaXeJJ2lAyZItclgKDurqnH61so4k4IH/qwmMva0zpuJc/FhRExBBnk7EbeFANlgQ==} + turndown@7.2.2: + resolution: {integrity: sha512-1F7db8BiExOKxjSMU2b7if62D/XOyQyZbPKq/nUwopfgnHlqXHqQ0lvfUTeUIr1lZJzOPFn43dODyMSIfvWRKQ==} type-check@0.4.0: resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} @@ -4504,8 +4513,8 @@ packages: typed.js@2.1.0: resolution: {integrity: sha512-bDuXEf7YcaKN4g08NMTUM6G90XU25CK3bh6U0THC/Mod/QPKlEt9g/EjvbYB8x2Qwr2p6J6I3NrsoYaVnY6wsQ==} - typescript-eslint@8.46.0: - resolution: {integrity: sha512-6+ZrB6y2bT2DX3K+Qd9vn7OFOJR+xSLDj+Aw/N3zBwUt27uTw2sw2TE2+UcY1RiyBZkaGbTkVg9SSdPNUG6aUw==} + typescript-eslint@8.48.1: + resolution: {integrity: sha512-FbOKN1fqNoXp1hIl5KYpObVrp0mCn+CLgn479nmu2IsRMrx2vyv74MmsBLVlhg8qVwNFGbXSp8fh1zp8pEoC2A==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 @@ -4564,8 +4573,8 @@ packages: resolution: {integrity: sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==} engines: {node: '>=8'} - unist-util-is@6.0.0: - resolution: {integrity: sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==} + unist-util-is@6.0.1: + resolution: {integrity: sha512-LsiILbtBETkDz8I9p1dQ0uyRUWuaQzd/cuEeS1hoRSyW5E5XGmTzlwY1OrNzzakGowI9Dr/I8HVaw4hTtnxy8g==} unist-util-mdx-define@1.1.2: resolution: {integrity: sha512-9ncH7i7TN5Xn7/tzX5bE3rXgz1X/u877gYVAUB3mLeTKYJmQHmqKTDBi6BTGXV7AeolBCI9ErcVsOt2qryoD0g==} @@ -4579,8 +4588,8 @@ packages: unist-util-stringify-position@4.0.0: resolution: {integrity: sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==} - unist-util-visit-parents@6.0.1: - resolution: {integrity: sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==} + unist-util-visit-parents@6.0.2: + resolution: {integrity: sha512-goh1s1TBrqSqukSc8wrjwWhL0hiJxgA8m4kFxGlQ+8FYQ3C/m11FcTs4YYem7V664AhHVvgoQLk890Ssdsr2IQ==} unist-util-visit@5.0.0: resolution: {integrity: sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==} @@ -4600,8 +4609,8 @@ packages: resolution: {integrity: sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==} engines: {node: '>=4'} - update-browserslist-db@1.1.3: - resolution: {integrity: sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==} + update-browserslist-db@1.2.2: + resolution: {integrity: sha512-E85pfNzMQ9jpKkA7+TJAi4TJN+tBCuWh5rUcS/sv6cFi+1q9LYDwDI5dpUL0u/73EElyQ8d3TEaeW4sPedBqYA==} hasBin: true peerDependencies: browserslist: '>= 4.21.0' @@ -4640,8 +4649,8 @@ packages: resolution: {integrity: sha512-0rYDzGOh9EZpig92umN5g5D/9A1Kff7k0/mzPSSCY8jEQeYkgRMoY7LhbXtUCWzLCMX0TUE9aoHkjFNB7D9pfA==} engines: {node: '>= 8'} - web-utility@4.6.2: - resolution: {integrity: sha512-iyZsM2IOUHaoNJZfvrEBhfjIYsVEx3KC9bI6DHv6rXUmVTmFEW1Uq3DraWUnbI5NAp+g6+bgrtXwXtydWyuyMw==} + web-utility@4.6.4: + resolution: {integrity: sha512-nPZfFROLtQ6VJaoT0DKEtJ4YfBffg8altB7rl99XgscJPXZ5e7Mxj+ovqdLmjOTdAtEuCexKiyuxzg/m6qHcCg==} peerDependencies: element-internals-polyfill: '>=1' typescript: '>=4.1' @@ -4751,8 +4760,8 @@ packages: yallist@3.1.1: resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} - yaml@2.8.1: - resolution: {integrity: sha512-lcYcMxX2PO9XMGvAJkJ3OsNMw+/7FKes7/hgerGUYWIoWu5j/+YQqcZr5JnPZWzOsEBgMbSbiSTn/dv/69Mkpw==} + yaml@2.8.2: + resolution: {integrity: sha512-mplynKqc1C2hTVYxd0PU2xQAc22TI1vShAYGksCCfxbn/dFwnHTNi1bvYsBTkhdUNtGIf5xNOg938rrSSYvS9A==} engines: {node: '>= 14.6'} hasBin: true @@ -4760,8 +4769,17 @@ packages: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} engines: {node: '>=10'} - zrender@5.6.1: - resolution: {integrity: sha512-OFXkDJKcrlx5su2XbzJvj/34Q3m6PvyCZkVPHGYpcCJ52ek4U/ymZyfuV1nKE23AyBJ51E/6Yr0mhZ7xGTO4ag==} + zod-validation-error@4.0.2: + resolution: {integrity: sha512-Q6/nZLe6jxuU80qb/4uJ4t5v2VEZ44lzQjPDhYJNztRQ4wyWc6VF3D3Kb/fAuPetZQnhS3hnajCf9CsWesghLQ==} + engines: {node: '>=18.0.0'} + peerDependencies: + zod: ^3.25.0 || ^4.0.0 + + zod@4.1.13: + resolution: {integrity: sha512-AvvthqfqrAhNH9dnfmrfKzX5upOdjUVJYFqNSlkmGf64gRaTzlPwz99IHYnVs28qYAybvAlBV+H7pn0saFY4Ig==} + + zrender@6.0.0: + resolution: {integrity: sha512-41dFXEEXuJpNecuUQq6JlbybmnHaqqpGlbH1yxnA5V9MMP4SbohSVZsJIwz+zdjQXSSlR1Vc34EgH1zxyTDvhg==} zwitch@2.0.4: resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==} @@ -4777,23 +4795,23 @@ snapshots: '@babel/code-frame@7.27.1': dependencies: - '@babel/helper-validator-identifier': 7.27.1 + '@babel/helper-validator-identifier': 7.28.5 js-tokens: 4.0.0 picocolors: 1.1.1 - '@babel/compat-data@7.28.4': {} + '@babel/compat-data@7.28.5': {} - '@babel/core@7.28.4': + '@babel/core@7.28.5': dependencies: '@babel/code-frame': 7.27.1 - '@babel/generator': 7.28.3 + '@babel/generator': 7.28.5 '@babel/helper-compilation-targets': 7.27.2 - '@babel/helper-module-transforms': 7.28.3(@babel/core@7.28.4) + '@babel/helper-module-transforms': 7.28.3(@babel/core@7.28.5) '@babel/helpers': 7.28.4 - '@babel/parser': 7.28.4 + '@babel/parser': 7.28.5 '@babel/template': 7.27.2 - '@babel/traverse': 7.28.4 - '@babel/types': 7.28.4 + '@babel/traverse': 7.28.5 + '@babel/types': 7.28.5 '@jridgewell/remapping': 2.3.5 convert-source-map: 2.0.0 debug: 4.4.3 @@ -4803,680 +4821,680 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/generator@7.28.3': + '@babel/generator@7.28.5': dependencies: - '@babel/parser': 7.28.4 - '@babel/types': 7.28.4 + '@babel/parser': 7.28.5 + '@babel/types': 7.28.5 '@jridgewell/gen-mapping': 0.3.13 '@jridgewell/trace-mapping': 0.3.31 jsesc: 3.1.0 '@babel/helper-annotate-as-pure@7.27.3': dependencies: - '@babel/types': 7.28.4 + '@babel/types': 7.28.5 '@babel/helper-compilation-targets@7.27.2': dependencies: - '@babel/compat-data': 7.28.4 + '@babel/compat-data': 7.28.5 '@babel/helper-validator-option': 7.27.1 - browserslist: 4.26.3 + browserslist: 4.28.1 lru-cache: 5.1.1 semver: 6.3.1 - '@babel/helper-create-class-features-plugin@7.28.3(@babel/core@7.28.4)': + '@babel/helper-create-class-features-plugin@7.28.5(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 + '@babel/core': 7.28.5 '@babel/helper-annotate-as-pure': 7.27.3 - '@babel/helper-member-expression-to-functions': 7.27.1 + '@babel/helper-member-expression-to-functions': 7.28.5 '@babel/helper-optimise-call-expression': 7.27.1 - '@babel/helper-replace-supers': 7.27.1(@babel/core@7.28.4) + '@babel/helper-replace-supers': 7.27.1(@babel/core@7.28.5) '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 - '@babel/traverse': 7.28.4 + '@babel/traverse': 7.28.5 semver: 6.3.1 transitivePeerDependencies: - supports-color - '@babel/helper-create-regexp-features-plugin@7.27.1(@babel/core@7.28.4)': + '@babel/helper-create-regexp-features-plugin@7.28.5(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 + '@babel/core': 7.28.5 '@babel/helper-annotate-as-pure': 7.27.3 regexpu-core: 6.4.0 semver: 6.3.1 - '@babel/helper-define-polyfill-provider@0.6.5(@babel/core@7.28.4)': + '@babel/helper-define-polyfill-provider@0.6.5(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 + '@babel/core': 7.28.5 '@babel/helper-compilation-targets': 7.27.2 '@babel/helper-plugin-utils': 7.27.1 debug: 4.4.3 lodash.debounce: 4.0.8 - resolve: 1.22.10 + resolve: 1.22.11 transitivePeerDependencies: - supports-color '@babel/helper-globals@7.28.0': {} - '@babel/helper-member-expression-to-functions@7.27.1': + '@babel/helper-member-expression-to-functions@7.28.5': dependencies: - '@babel/traverse': 7.28.4 - '@babel/types': 7.28.4 + '@babel/traverse': 7.28.5 + '@babel/types': 7.28.5 transitivePeerDependencies: - supports-color '@babel/helper-module-imports@7.27.1': dependencies: - '@babel/traverse': 7.28.4 - '@babel/types': 7.28.4 + '@babel/traverse': 7.28.5 + '@babel/types': 7.28.5 transitivePeerDependencies: - supports-color - '@babel/helper-module-transforms@7.28.3(@babel/core@7.28.4)': + '@babel/helper-module-transforms@7.28.3(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 + '@babel/core': 7.28.5 '@babel/helper-module-imports': 7.27.1 - '@babel/helper-validator-identifier': 7.27.1 - '@babel/traverse': 7.28.4 + '@babel/helper-validator-identifier': 7.28.5 + '@babel/traverse': 7.28.5 transitivePeerDependencies: - supports-color '@babel/helper-optimise-call-expression@7.27.1': dependencies: - '@babel/types': 7.28.4 + '@babel/types': 7.28.5 '@babel/helper-plugin-utils@7.27.1': {} - '@babel/helper-remap-async-to-generator@7.27.1(@babel/core@7.28.4)': + '@babel/helper-remap-async-to-generator@7.27.1(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 + '@babel/core': 7.28.5 '@babel/helper-annotate-as-pure': 7.27.3 '@babel/helper-wrap-function': 7.28.3 - '@babel/traverse': 7.28.4 + '@babel/traverse': 7.28.5 transitivePeerDependencies: - supports-color - '@babel/helper-replace-supers@7.27.1(@babel/core@7.28.4)': + '@babel/helper-replace-supers@7.27.1(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 - '@babel/helper-member-expression-to-functions': 7.27.1 + '@babel/core': 7.28.5 + '@babel/helper-member-expression-to-functions': 7.28.5 '@babel/helper-optimise-call-expression': 7.27.1 - '@babel/traverse': 7.28.4 + '@babel/traverse': 7.28.5 transitivePeerDependencies: - supports-color '@babel/helper-skip-transparent-expression-wrappers@7.27.1': dependencies: - '@babel/traverse': 7.28.4 - '@babel/types': 7.28.4 + '@babel/traverse': 7.28.5 + '@babel/types': 7.28.5 transitivePeerDependencies: - supports-color '@babel/helper-string-parser@7.27.1': {} - '@babel/helper-validator-identifier@7.27.1': {} + '@babel/helper-validator-identifier@7.28.5': {} '@babel/helper-validator-option@7.27.1': {} '@babel/helper-wrap-function@7.28.3': dependencies: '@babel/template': 7.27.2 - '@babel/traverse': 7.28.4 - '@babel/types': 7.28.4 + '@babel/traverse': 7.28.5 + '@babel/types': 7.28.5 transitivePeerDependencies: - supports-color '@babel/helpers@7.28.4': dependencies: '@babel/template': 7.27.2 - '@babel/types': 7.28.4 + '@babel/types': 7.28.5 - '@babel/parser@7.28.4': + '@babel/parser@7.28.5': dependencies: - '@babel/types': 7.28.4 + '@babel/types': 7.28.5 - '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.27.1(@babel/core@7.28.4)': + '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.28.5(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 + '@babel/core': 7.28.5 '@babel/helper-plugin-utils': 7.27.1 - '@babel/traverse': 7.28.4 + '@babel/traverse': 7.28.5 transitivePeerDependencies: - supports-color - '@babel/plugin-bugfix-safari-class-field-initializer-scope@7.27.1(@babel/core@7.28.4)': + '@babel/plugin-bugfix-safari-class-field-initializer-scope@7.27.1(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 + '@babel/core': 7.28.5 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.27.1(@babel/core@7.28.4)': + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.27.1(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 + '@babel/core': 7.28.5 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.27.1(@babel/core@7.28.4)': + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.27.1(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 + '@babel/core': 7.28.5 '@babel/helper-plugin-utils': 7.27.1 '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 - '@babel/plugin-transform-optional-chaining': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-optional-chaining': 7.28.5(@babel/core@7.28.5) transitivePeerDependencies: - supports-color - '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.28.3(@babel/core@7.28.4)': + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.28.3(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 + '@babel/core': 7.28.5 '@babel/helper-plugin-utils': 7.27.1 - '@babel/traverse': 7.28.4 + '@babel/traverse': 7.28.5 transitivePeerDependencies: - supports-color - '@babel/plugin-proposal-decorators@7.28.0(@babel/core@7.28.4)': + '@babel/plugin-proposal-decorators@7.28.0(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 - '@babel/helper-create-class-features-plugin': 7.28.3(@babel/core@7.28.4) + '@babel/core': 7.28.5 + '@babel/helper-create-class-features-plugin': 7.28.5(@babel/core@7.28.5) '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-syntax-decorators': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-syntax-decorators': 7.27.1(@babel/core@7.28.5) transitivePeerDependencies: - supports-color - '@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.28.4)': + '@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 + '@babel/core': 7.28.5 - '@babel/plugin-syntax-decorators@7.27.1(@babel/core@7.28.4)': + '@babel/plugin-syntax-decorators@7.27.1(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 + '@babel/core': 7.28.5 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-syntax-import-assertions@7.27.1(@babel/core@7.28.4)': + '@babel/plugin-syntax-import-assertions@7.27.1(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 + '@babel/core': 7.28.5 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-syntax-import-attributes@7.27.1(@babel/core@7.28.4)': + '@babel/plugin-syntax-import-attributes@7.27.1(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 + '@babel/core': 7.28.5 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-syntax-jsx@7.27.1(@babel/core@7.28.4)': + '@babel/plugin-syntax-jsx@7.27.1(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 + '@babel/core': 7.28.5 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-syntax-typescript@7.27.1(@babel/core@7.28.4)': + '@babel/plugin-syntax-typescript@7.27.1(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 + '@babel/core': 7.28.5 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.28.4)': + '@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 - '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.28.4) + '@babel/core': 7.28.5 + '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.28.5) '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-arrow-functions@7.27.1(@babel/core@7.28.4)': + '@babel/plugin-transform-arrow-functions@7.27.1(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 + '@babel/core': 7.28.5 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-async-generator-functions@7.28.0(@babel/core@7.28.4)': + '@babel/plugin-transform-async-generator-functions@7.28.0(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 + '@babel/core': 7.28.5 '@babel/helper-plugin-utils': 7.27.1 - '@babel/helper-remap-async-to-generator': 7.27.1(@babel/core@7.28.4) - '@babel/traverse': 7.28.4 + '@babel/helper-remap-async-to-generator': 7.27.1(@babel/core@7.28.5) + '@babel/traverse': 7.28.5 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-async-to-generator@7.27.1(@babel/core@7.28.4)': + '@babel/plugin-transform-async-to-generator@7.27.1(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 + '@babel/core': 7.28.5 '@babel/helper-module-imports': 7.27.1 '@babel/helper-plugin-utils': 7.27.1 - '@babel/helper-remap-async-to-generator': 7.27.1(@babel/core@7.28.4) + '@babel/helper-remap-async-to-generator': 7.27.1(@babel/core@7.28.5) transitivePeerDependencies: - supports-color - '@babel/plugin-transform-block-scoped-functions@7.27.1(@babel/core@7.28.4)': + '@babel/plugin-transform-block-scoped-functions@7.27.1(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 + '@babel/core': 7.28.5 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-block-scoping@7.28.4(@babel/core@7.28.4)': + '@babel/plugin-transform-block-scoping@7.28.5(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 + '@babel/core': 7.28.5 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-class-properties@7.27.1(@babel/core@7.28.4)': + '@babel/plugin-transform-class-properties@7.27.1(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 - '@babel/helper-create-class-features-plugin': 7.28.3(@babel/core@7.28.4) + '@babel/core': 7.28.5 + '@babel/helper-create-class-features-plugin': 7.28.5(@babel/core@7.28.5) '@babel/helper-plugin-utils': 7.27.1 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-class-static-block@7.28.3(@babel/core@7.28.4)': + '@babel/plugin-transform-class-static-block@7.28.3(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 - '@babel/helper-create-class-features-plugin': 7.28.3(@babel/core@7.28.4) + '@babel/core': 7.28.5 + '@babel/helper-create-class-features-plugin': 7.28.5(@babel/core@7.28.5) '@babel/helper-plugin-utils': 7.27.1 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-classes@7.28.4(@babel/core@7.28.4)': + '@babel/plugin-transform-classes@7.28.4(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 + '@babel/core': 7.28.5 '@babel/helper-annotate-as-pure': 7.27.3 '@babel/helper-compilation-targets': 7.27.2 '@babel/helper-globals': 7.28.0 '@babel/helper-plugin-utils': 7.27.1 - '@babel/helper-replace-supers': 7.27.1(@babel/core@7.28.4) - '@babel/traverse': 7.28.4 + '@babel/helper-replace-supers': 7.27.1(@babel/core@7.28.5) + '@babel/traverse': 7.28.5 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-computed-properties@7.27.1(@babel/core@7.28.4)': + '@babel/plugin-transform-computed-properties@7.27.1(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 + '@babel/core': 7.28.5 '@babel/helper-plugin-utils': 7.27.1 '@babel/template': 7.27.2 - '@babel/plugin-transform-destructuring@7.28.0(@babel/core@7.28.4)': + '@babel/plugin-transform-destructuring@7.28.5(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 + '@babel/core': 7.28.5 '@babel/helper-plugin-utils': 7.27.1 - '@babel/traverse': 7.28.4 + '@babel/traverse': 7.28.5 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-dotall-regex@7.27.1(@babel/core@7.28.4)': + '@babel/plugin-transform-dotall-regex@7.27.1(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 - '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.28.4) + '@babel/core': 7.28.5 + '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.28.5) '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-duplicate-keys@7.27.1(@babel/core@7.28.4)': + '@babel/plugin-transform-duplicate-keys@7.27.1(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 + '@babel/core': 7.28.5 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.27.1(@babel/core@7.28.4)': + '@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.27.1(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 - '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.28.4) + '@babel/core': 7.28.5 + '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.28.5) '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-dynamic-import@7.27.1(@babel/core@7.28.4)': + '@babel/plugin-transform-dynamic-import@7.27.1(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 + '@babel/core': 7.28.5 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-explicit-resource-management@7.28.0(@babel/core@7.28.4)': + '@babel/plugin-transform-explicit-resource-management@7.28.0(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 + '@babel/core': 7.28.5 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-destructuring': 7.28.0(@babel/core@7.28.4) + '@babel/plugin-transform-destructuring': 7.28.5(@babel/core@7.28.5) transitivePeerDependencies: - supports-color - '@babel/plugin-transform-exponentiation-operator@7.27.1(@babel/core@7.28.4)': + '@babel/plugin-transform-exponentiation-operator@7.28.5(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 + '@babel/core': 7.28.5 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-export-namespace-from@7.27.1(@babel/core@7.28.4)': + '@babel/plugin-transform-export-namespace-from@7.27.1(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 + '@babel/core': 7.28.5 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-for-of@7.27.1(@babel/core@7.28.4)': + '@babel/plugin-transform-for-of@7.27.1(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 + '@babel/core': 7.28.5 '@babel/helper-plugin-utils': 7.27.1 '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-function-name@7.27.1(@babel/core@7.28.4)': + '@babel/plugin-transform-function-name@7.27.1(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 + '@babel/core': 7.28.5 '@babel/helper-compilation-targets': 7.27.2 '@babel/helper-plugin-utils': 7.27.1 - '@babel/traverse': 7.28.4 + '@babel/traverse': 7.28.5 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-json-strings@7.27.1(@babel/core@7.28.4)': + '@babel/plugin-transform-json-strings@7.27.1(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 + '@babel/core': 7.28.5 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-literals@7.27.1(@babel/core@7.28.4)': + '@babel/plugin-transform-literals@7.27.1(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 + '@babel/core': 7.28.5 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-logical-assignment-operators@7.27.1(@babel/core@7.28.4)': + '@babel/plugin-transform-logical-assignment-operators@7.28.5(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 + '@babel/core': 7.28.5 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-member-expression-literals@7.27.1(@babel/core@7.28.4)': + '@babel/plugin-transform-member-expression-literals@7.27.1(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 + '@babel/core': 7.28.5 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-modules-amd@7.27.1(@babel/core@7.28.4)': + '@babel/plugin-transform-modules-amd@7.27.1(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 - '@babel/helper-module-transforms': 7.28.3(@babel/core@7.28.4) + '@babel/core': 7.28.5 + '@babel/helper-module-transforms': 7.28.3(@babel/core@7.28.5) '@babel/helper-plugin-utils': 7.27.1 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-modules-commonjs@7.27.1(@babel/core@7.28.4)': + '@babel/plugin-transform-modules-commonjs@7.27.1(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 - '@babel/helper-module-transforms': 7.28.3(@babel/core@7.28.4) + '@babel/core': 7.28.5 + '@babel/helper-module-transforms': 7.28.3(@babel/core@7.28.5) '@babel/helper-plugin-utils': 7.27.1 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-modules-systemjs@7.27.1(@babel/core@7.28.4)': + '@babel/plugin-transform-modules-systemjs@7.28.5(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 - '@babel/helper-module-transforms': 7.28.3(@babel/core@7.28.4) + '@babel/core': 7.28.5 + '@babel/helper-module-transforms': 7.28.3(@babel/core@7.28.5) '@babel/helper-plugin-utils': 7.27.1 - '@babel/helper-validator-identifier': 7.27.1 - '@babel/traverse': 7.28.4 + '@babel/helper-validator-identifier': 7.28.5 + '@babel/traverse': 7.28.5 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-modules-umd@7.27.1(@babel/core@7.28.4)': + '@babel/plugin-transform-modules-umd@7.27.1(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 - '@babel/helper-module-transforms': 7.28.3(@babel/core@7.28.4) + '@babel/core': 7.28.5 + '@babel/helper-module-transforms': 7.28.3(@babel/core@7.28.5) '@babel/helper-plugin-utils': 7.27.1 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-named-capturing-groups-regex@7.27.1(@babel/core@7.28.4)': + '@babel/plugin-transform-named-capturing-groups-regex@7.27.1(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 - '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.28.4) + '@babel/core': 7.28.5 + '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.28.5) '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-new-target@7.27.1(@babel/core@7.28.4)': + '@babel/plugin-transform-new-target@7.27.1(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 + '@babel/core': 7.28.5 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-nullish-coalescing-operator@7.27.1(@babel/core@7.28.4)': + '@babel/plugin-transform-nullish-coalescing-operator@7.27.1(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 + '@babel/core': 7.28.5 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-numeric-separator@7.27.1(@babel/core@7.28.4)': + '@babel/plugin-transform-numeric-separator@7.27.1(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 + '@babel/core': 7.28.5 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-object-rest-spread@7.28.4(@babel/core@7.28.4)': + '@babel/plugin-transform-object-rest-spread@7.28.4(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 + '@babel/core': 7.28.5 '@babel/helper-compilation-targets': 7.27.2 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-destructuring': 7.28.0(@babel/core@7.28.4) - '@babel/plugin-transform-parameters': 7.27.7(@babel/core@7.28.4) - '@babel/traverse': 7.28.4 + '@babel/plugin-transform-destructuring': 7.28.5(@babel/core@7.28.5) + '@babel/plugin-transform-parameters': 7.27.7(@babel/core@7.28.5) + '@babel/traverse': 7.28.5 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-object-super@7.27.1(@babel/core@7.28.4)': + '@babel/plugin-transform-object-super@7.27.1(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 + '@babel/core': 7.28.5 '@babel/helper-plugin-utils': 7.27.1 - '@babel/helper-replace-supers': 7.27.1(@babel/core@7.28.4) + '@babel/helper-replace-supers': 7.27.1(@babel/core@7.28.5) transitivePeerDependencies: - supports-color - '@babel/plugin-transform-optional-catch-binding@7.27.1(@babel/core@7.28.4)': + '@babel/plugin-transform-optional-catch-binding@7.27.1(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 + '@babel/core': 7.28.5 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-optional-chaining@7.27.1(@babel/core@7.28.4)': + '@babel/plugin-transform-optional-chaining@7.28.5(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 + '@babel/core': 7.28.5 '@babel/helper-plugin-utils': 7.27.1 '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-parameters@7.27.7(@babel/core@7.28.4)': + '@babel/plugin-transform-parameters@7.27.7(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 + '@babel/core': 7.28.5 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-private-methods@7.27.1(@babel/core@7.28.4)': + '@babel/plugin-transform-private-methods@7.27.1(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 - '@babel/helper-create-class-features-plugin': 7.28.3(@babel/core@7.28.4) + '@babel/core': 7.28.5 + '@babel/helper-create-class-features-plugin': 7.28.5(@babel/core@7.28.5) '@babel/helper-plugin-utils': 7.27.1 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-private-property-in-object@7.27.1(@babel/core@7.28.4)': + '@babel/plugin-transform-private-property-in-object@7.27.1(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 + '@babel/core': 7.28.5 '@babel/helper-annotate-as-pure': 7.27.3 - '@babel/helper-create-class-features-plugin': 7.28.3(@babel/core@7.28.4) + '@babel/helper-create-class-features-plugin': 7.28.5(@babel/core@7.28.5) '@babel/helper-plugin-utils': 7.27.1 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-property-literals@7.27.1(@babel/core@7.28.4)': + '@babel/plugin-transform-property-literals@7.27.1(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 + '@babel/core': 7.28.5 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-react-display-name@7.28.0(@babel/core@7.28.4)': + '@babel/plugin-transform-react-display-name@7.28.0(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 + '@babel/core': 7.28.5 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-react-jsx-development@7.27.1(@babel/core@7.28.4)': + '@babel/plugin-transform-react-jsx-development@7.27.1(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 - '@babel/plugin-transform-react-jsx': 7.27.1(@babel/core@7.28.4) + '@babel/core': 7.28.5 + '@babel/plugin-transform-react-jsx': 7.27.1(@babel/core@7.28.5) transitivePeerDependencies: - supports-color - '@babel/plugin-transform-react-jsx@7.27.1(@babel/core@7.28.4)': + '@babel/plugin-transform-react-jsx@7.27.1(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 + '@babel/core': 7.28.5 '@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.4) - '@babel/types': 7.28.4 + '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.28.5) + '@babel/types': 7.28.5 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-react-pure-annotations@7.27.1(@babel/core@7.28.4)': + '@babel/plugin-transform-react-pure-annotations@7.27.1(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 + '@babel/core': 7.28.5 '@babel/helper-annotate-as-pure': 7.27.3 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-regenerator@7.28.4(@babel/core@7.28.4)': + '@babel/plugin-transform-regenerator@7.28.4(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 + '@babel/core': 7.28.5 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-regexp-modifiers@7.27.1(@babel/core@7.28.4)': + '@babel/plugin-transform-regexp-modifiers@7.27.1(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 - '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.28.4) + '@babel/core': 7.28.5 + '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.28.5) '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-reserved-words@7.27.1(@babel/core@7.28.4)': + '@babel/plugin-transform-reserved-words@7.27.1(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 + '@babel/core': 7.28.5 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-shorthand-properties@7.27.1(@babel/core@7.28.4)': + '@babel/plugin-transform-shorthand-properties@7.27.1(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 + '@babel/core': 7.28.5 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-spread@7.27.1(@babel/core@7.28.4)': + '@babel/plugin-transform-spread@7.27.1(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 + '@babel/core': 7.28.5 '@babel/helper-plugin-utils': 7.27.1 '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-sticky-regex@7.27.1(@babel/core@7.28.4)': + '@babel/plugin-transform-sticky-regex@7.27.1(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 + '@babel/core': 7.28.5 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-template-literals@7.27.1(@babel/core@7.28.4)': + '@babel/plugin-transform-template-literals@7.27.1(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 + '@babel/core': 7.28.5 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-typeof-symbol@7.27.1(@babel/core@7.28.4)': + '@babel/plugin-transform-typeof-symbol@7.27.1(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 + '@babel/core': 7.28.5 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-typescript@7.28.0(@babel/core@7.28.4)': + '@babel/plugin-transform-typescript@7.28.5(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 + '@babel/core': 7.28.5 '@babel/helper-annotate-as-pure': 7.27.3 - '@babel/helper-create-class-features-plugin': 7.28.3(@babel/core@7.28.4) + '@babel/helper-create-class-features-plugin': 7.28.5(@babel/core@7.28.5) '@babel/helper-plugin-utils': 7.27.1 '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 - '@babel/plugin-syntax-typescript': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-syntax-typescript': 7.27.1(@babel/core@7.28.5) transitivePeerDependencies: - supports-color - '@babel/plugin-transform-unicode-escapes@7.27.1(@babel/core@7.28.4)': + '@babel/plugin-transform-unicode-escapes@7.27.1(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 + '@babel/core': 7.28.5 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-unicode-property-regex@7.27.1(@babel/core@7.28.4)': + '@babel/plugin-transform-unicode-property-regex@7.27.1(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 - '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.28.4) + '@babel/core': 7.28.5 + '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.28.5) '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-unicode-regex@7.27.1(@babel/core@7.28.4)': + '@babel/plugin-transform-unicode-regex@7.27.1(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 - '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.28.4) + '@babel/core': 7.28.5 + '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.28.5) '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-unicode-sets-regex@7.27.1(@babel/core@7.28.4)': + '@babel/plugin-transform-unicode-sets-regex@7.27.1(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 - '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.28.4) + '@babel/core': 7.28.5 + '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.28.5) '@babel/helper-plugin-utils': 7.27.1 - '@babel/preset-env@7.28.3(@babel/core@7.28.4)': + '@babel/preset-env@7.28.5(@babel/core@7.28.5)': dependencies: - '@babel/compat-data': 7.28.4 - '@babel/core': 7.28.4 + '@babel/compat-data': 7.28.5 + '@babel/core': 7.28.5 '@babel/helper-compilation-targets': 7.27.2 '@babel/helper-plugin-utils': 7.27.1 '@babel/helper-validator-option': 7.27.1 - '@babel/plugin-bugfix-firefox-class-in-computed-class-key': 7.27.1(@babel/core@7.28.4) - '@babel/plugin-bugfix-safari-class-field-initializer-scope': 7.27.1(@babel/core@7.28.4) - '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.27.1(@babel/core@7.28.4) - '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.27.1(@babel/core@7.28.4) - '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly': 7.28.3(@babel/core@7.28.4) - '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.28.4) - '@babel/plugin-syntax-import-assertions': 7.27.1(@babel/core@7.28.4) - '@babel/plugin-syntax-import-attributes': 7.27.1(@babel/core@7.28.4) - '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.28.4) - '@babel/plugin-transform-arrow-functions': 7.27.1(@babel/core@7.28.4) - '@babel/plugin-transform-async-generator-functions': 7.28.0(@babel/core@7.28.4) - '@babel/plugin-transform-async-to-generator': 7.27.1(@babel/core@7.28.4) - '@babel/plugin-transform-block-scoped-functions': 7.27.1(@babel/core@7.28.4) - '@babel/plugin-transform-block-scoping': 7.28.4(@babel/core@7.28.4) - '@babel/plugin-transform-class-properties': 7.27.1(@babel/core@7.28.4) - '@babel/plugin-transform-class-static-block': 7.28.3(@babel/core@7.28.4) - '@babel/plugin-transform-classes': 7.28.4(@babel/core@7.28.4) - '@babel/plugin-transform-computed-properties': 7.27.1(@babel/core@7.28.4) - '@babel/plugin-transform-destructuring': 7.28.0(@babel/core@7.28.4) - '@babel/plugin-transform-dotall-regex': 7.27.1(@babel/core@7.28.4) - '@babel/plugin-transform-duplicate-keys': 7.27.1(@babel/core@7.28.4) - '@babel/plugin-transform-duplicate-named-capturing-groups-regex': 7.27.1(@babel/core@7.28.4) - '@babel/plugin-transform-dynamic-import': 7.27.1(@babel/core@7.28.4) - '@babel/plugin-transform-explicit-resource-management': 7.28.0(@babel/core@7.28.4) - '@babel/plugin-transform-exponentiation-operator': 7.27.1(@babel/core@7.28.4) - '@babel/plugin-transform-export-namespace-from': 7.27.1(@babel/core@7.28.4) - '@babel/plugin-transform-for-of': 7.27.1(@babel/core@7.28.4) - '@babel/plugin-transform-function-name': 7.27.1(@babel/core@7.28.4) - '@babel/plugin-transform-json-strings': 7.27.1(@babel/core@7.28.4) - '@babel/plugin-transform-literals': 7.27.1(@babel/core@7.28.4) - '@babel/plugin-transform-logical-assignment-operators': 7.27.1(@babel/core@7.28.4) - '@babel/plugin-transform-member-expression-literals': 7.27.1(@babel/core@7.28.4) - '@babel/plugin-transform-modules-amd': 7.27.1(@babel/core@7.28.4) - '@babel/plugin-transform-modules-commonjs': 7.27.1(@babel/core@7.28.4) - '@babel/plugin-transform-modules-systemjs': 7.27.1(@babel/core@7.28.4) - '@babel/plugin-transform-modules-umd': 7.27.1(@babel/core@7.28.4) - '@babel/plugin-transform-named-capturing-groups-regex': 7.27.1(@babel/core@7.28.4) - '@babel/plugin-transform-new-target': 7.27.1(@babel/core@7.28.4) - '@babel/plugin-transform-nullish-coalescing-operator': 7.27.1(@babel/core@7.28.4) - '@babel/plugin-transform-numeric-separator': 7.27.1(@babel/core@7.28.4) - '@babel/plugin-transform-object-rest-spread': 7.28.4(@babel/core@7.28.4) - '@babel/plugin-transform-object-super': 7.27.1(@babel/core@7.28.4) - '@babel/plugin-transform-optional-catch-binding': 7.27.1(@babel/core@7.28.4) - '@babel/plugin-transform-optional-chaining': 7.27.1(@babel/core@7.28.4) - '@babel/plugin-transform-parameters': 7.27.7(@babel/core@7.28.4) - '@babel/plugin-transform-private-methods': 7.27.1(@babel/core@7.28.4) - '@babel/plugin-transform-private-property-in-object': 7.27.1(@babel/core@7.28.4) - '@babel/plugin-transform-property-literals': 7.27.1(@babel/core@7.28.4) - '@babel/plugin-transform-regenerator': 7.28.4(@babel/core@7.28.4) - '@babel/plugin-transform-regexp-modifiers': 7.27.1(@babel/core@7.28.4) - '@babel/plugin-transform-reserved-words': 7.27.1(@babel/core@7.28.4) - '@babel/plugin-transform-shorthand-properties': 7.27.1(@babel/core@7.28.4) - '@babel/plugin-transform-spread': 7.27.1(@babel/core@7.28.4) - '@babel/plugin-transform-sticky-regex': 7.27.1(@babel/core@7.28.4) - '@babel/plugin-transform-template-literals': 7.27.1(@babel/core@7.28.4) - '@babel/plugin-transform-typeof-symbol': 7.27.1(@babel/core@7.28.4) - '@babel/plugin-transform-unicode-escapes': 7.27.1(@babel/core@7.28.4) - '@babel/plugin-transform-unicode-property-regex': 7.27.1(@babel/core@7.28.4) - '@babel/plugin-transform-unicode-regex': 7.27.1(@babel/core@7.28.4) - '@babel/plugin-transform-unicode-sets-regex': 7.27.1(@babel/core@7.28.4) - '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.28.4) - babel-plugin-polyfill-corejs2: 0.4.14(@babel/core@7.28.4) - babel-plugin-polyfill-corejs3: 0.13.0(@babel/core@7.28.4) - babel-plugin-polyfill-regenerator: 0.6.5(@babel/core@7.28.4) - core-js-compat: 3.46.0 + '@babel/plugin-bugfix-firefox-class-in-computed-class-key': 7.28.5(@babel/core@7.28.5) + '@babel/plugin-bugfix-safari-class-field-initializer-scope': 7.27.1(@babel/core@7.28.5) + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.27.1(@babel/core@7.28.5) + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.27.1(@babel/core@7.28.5) + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly': 7.28.3(@babel/core@7.28.5) + '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.28.5) + '@babel/plugin-syntax-import-assertions': 7.27.1(@babel/core@7.28.5) + '@babel/plugin-syntax-import-attributes': 7.27.1(@babel/core@7.28.5) + '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.28.5) + '@babel/plugin-transform-arrow-functions': 7.27.1(@babel/core@7.28.5) + '@babel/plugin-transform-async-generator-functions': 7.28.0(@babel/core@7.28.5) + '@babel/plugin-transform-async-to-generator': 7.27.1(@babel/core@7.28.5) + '@babel/plugin-transform-block-scoped-functions': 7.27.1(@babel/core@7.28.5) + '@babel/plugin-transform-block-scoping': 7.28.5(@babel/core@7.28.5) + '@babel/plugin-transform-class-properties': 7.27.1(@babel/core@7.28.5) + '@babel/plugin-transform-class-static-block': 7.28.3(@babel/core@7.28.5) + '@babel/plugin-transform-classes': 7.28.4(@babel/core@7.28.5) + '@babel/plugin-transform-computed-properties': 7.27.1(@babel/core@7.28.5) + '@babel/plugin-transform-destructuring': 7.28.5(@babel/core@7.28.5) + '@babel/plugin-transform-dotall-regex': 7.27.1(@babel/core@7.28.5) + '@babel/plugin-transform-duplicate-keys': 7.27.1(@babel/core@7.28.5) + '@babel/plugin-transform-duplicate-named-capturing-groups-regex': 7.27.1(@babel/core@7.28.5) + '@babel/plugin-transform-dynamic-import': 7.27.1(@babel/core@7.28.5) + '@babel/plugin-transform-explicit-resource-management': 7.28.0(@babel/core@7.28.5) + '@babel/plugin-transform-exponentiation-operator': 7.28.5(@babel/core@7.28.5) + '@babel/plugin-transform-export-namespace-from': 7.27.1(@babel/core@7.28.5) + '@babel/plugin-transform-for-of': 7.27.1(@babel/core@7.28.5) + '@babel/plugin-transform-function-name': 7.27.1(@babel/core@7.28.5) + '@babel/plugin-transform-json-strings': 7.27.1(@babel/core@7.28.5) + '@babel/plugin-transform-literals': 7.27.1(@babel/core@7.28.5) + '@babel/plugin-transform-logical-assignment-operators': 7.28.5(@babel/core@7.28.5) + '@babel/plugin-transform-member-expression-literals': 7.27.1(@babel/core@7.28.5) + '@babel/plugin-transform-modules-amd': 7.27.1(@babel/core@7.28.5) + '@babel/plugin-transform-modules-commonjs': 7.27.1(@babel/core@7.28.5) + '@babel/plugin-transform-modules-systemjs': 7.28.5(@babel/core@7.28.5) + '@babel/plugin-transform-modules-umd': 7.27.1(@babel/core@7.28.5) + '@babel/plugin-transform-named-capturing-groups-regex': 7.27.1(@babel/core@7.28.5) + '@babel/plugin-transform-new-target': 7.27.1(@babel/core@7.28.5) + '@babel/plugin-transform-nullish-coalescing-operator': 7.27.1(@babel/core@7.28.5) + '@babel/plugin-transform-numeric-separator': 7.27.1(@babel/core@7.28.5) + '@babel/plugin-transform-object-rest-spread': 7.28.4(@babel/core@7.28.5) + '@babel/plugin-transform-object-super': 7.27.1(@babel/core@7.28.5) + '@babel/plugin-transform-optional-catch-binding': 7.27.1(@babel/core@7.28.5) + '@babel/plugin-transform-optional-chaining': 7.28.5(@babel/core@7.28.5) + '@babel/plugin-transform-parameters': 7.27.7(@babel/core@7.28.5) + '@babel/plugin-transform-private-methods': 7.27.1(@babel/core@7.28.5) + '@babel/plugin-transform-private-property-in-object': 7.27.1(@babel/core@7.28.5) + '@babel/plugin-transform-property-literals': 7.27.1(@babel/core@7.28.5) + '@babel/plugin-transform-regenerator': 7.28.4(@babel/core@7.28.5) + '@babel/plugin-transform-regexp-modifiers': 7.27.1(@babel/core@7.28.5) + '@babel/plugin-transform-reserved-words': 7.27.1(@babel/core@7.28.5) + '@babel/plugin-transform-shorthand-properties': 7.27.1(@babel/core@7.28.5) + '@babel/plugin-transform-spread': 7.27.1(@babel/core@7.28.5) + '@babel/plugin-transform-sticky-regex': 7.27.1(@babel/core@7.28.5) + '@babel/plugin-transform-template-literals': 7.27.1(@babel/core@7.28.5) + '@babel/plugin-transform-typeof-symbol': 7.27.1(@babel/core@7.28.5) + '@babel/plugin-transform-unicode-escapes': 7.27.1(@babel/core@7.28.5) + '@babel/plugin-transform-unicode-property-regex': 7.27.1(@babel/core@7.28.5) + '@babel/plugin-transform-unicode-regex': 7.27.1(@babel/core@7.28.5) + '@babel/plugin-transform-unicode-sets-regex': 7.27.1(@babel/core@7.28.5) + '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.28.5) + babel-plugin-polyfill-corejs2: 0.4.14(@babel/core@7.28.5) + babel-plugin-polyfill-corejs3: 0.13.0(@babel/core@7.28.5) + babel-plugin-polyfill-regenerator: 0.6.5(@babel/core@7.28.5) + core-js-compat: 3.47.0 semver: 6.3.1 transitivePeerDependencies: - supports-color - '@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.28.4)': + '@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 + '@babel/core': 7.28.5 '@babel/helper-plugin-utils': 7.27.1 - '@babel/types': 7.28.4 + '@babel/types': 7.28.5 esutils: 2.0.3 - '@babel/preset-react@7.27.1(@babel/core@7.28.4)': + '@babel/preset-react@7.28.5(@babel/core@7.28.5)': dependencies: - '@babel/core': 7.28.4 + '@babel/core': 7.28.5 '@babel/helper-plugin-utils': 7.27.1 '@babel/helper-validator-option': 7.27.1 - '@babel/plugin-transform-react-display-name': 7.28.0(@babel/core@7.28.4) - '@babel/plugin-transform-react-jsx': 7.27.1(@babel/core@7.28.4) - '@babel/plugin-transform-react-jsx-development': 7.27.1(@babel/core@7.28.4) - '@babel/plugin-transform-react-pure-annotations': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-react-display-name': 7.28.0(@babel/core@7.28.5) + '@babel/plugin-transform-react-jsx': 7.27.1(@babel/core@7.28.5) + '@babel/plugin-transform-react-jsx-development': 7.27.1(@babel/core@7.28.5) + '@babel/plugin-transform-react-pure-annotations': 7.27.1(@babel/core@7.28.5) transitivePeerDependencies: - supports-color @@ -5485,25 +5503,25 @@ snapshots: '@babel/template@7.27.2': dependencies: '@babel/code-frame': 7.27.1 - '@babel/parser': 7.28.4 - '@babel/types': 7.28.4 + '@babel/parser': 7.28.5 + '@babel/types': 7.28.5 - '@babel/traverse@7.28.4': + '@babel/traverse@7.28.5': dependencies: '@babel/code-frame': 7.27.1 - '@babel/generator': 7.28.3 + '@babel/generator': 7.28.5 '@babel/helper-globals': 7.28.0 - '@babel/parser': 7.28.4 + '@babel/parser': 7.28.5 '@babel/template': 7.27.2 - '@babel/types': 7.28.4 + '@babel/types': 7.28.5 debug: 4.4.3 transitivePeerDependencies: - supports-color - '@babel/types@7.28.4': + '@babel/types@7.28.5': dependencies: '@babel/helper-string-parser': 7.27.1 - '@babel/helper-validator-identifier': 7.27.1 + '@babel/helper-validator-identifier': 7.28.5 '@base2/pretty-print-object@1.0.2': {} @@ -5511,37 +5529,37 @@ snapshots: '@codexteam/icons@0.0.4': {} - '@cspell/cspell-bundled-dicts@9.2.1': + '@cspell/cspell-bundled-dicts@9.4.0': dependencies: '@cspell/dict-ada': 4.1.1 '@cspell/dict-al': 1.1.1 - '@cspell/dict-aws': 4.0.15 - '@cspell/dict-bash': 4.2.1 - '@cspell/dict-companies': 3.2.5 - '@cspell/dict-cpp': 6.0.12 + '@cspell/dict-aws': 4.0.16 + '@cspell/dict-bash': 4.2.2 + '@cspell/dict-companies': 3.2.7 + '@cspell/dict-cpp': 6.0.15 '@cspell/dict-cryptocurrencies': 5.0.5 '@cspell/dict-csharp': 4.0.7 '@cspell/dict-css': 4.0.18 '@cspell/dict-dart': 2.3.1 - '@cspell/dict-data-science': 2.0.9 + '@cspell/dict-data-science': 2.0.12 '@cspell/dict-django': 4.1.5 '@cspell/dict-docker': 1.1.16 '@cspell/dict-dotnet': 5.0.10 '@cspell/dict-elixir': 4.0.8 - '@cspell/dict-en-common-misspellings': 2.1.6 - '@cspell/dict-en-gb-mit': 3.1.9 - '@cspell/dict-en_us': 4.4.19 - '@cspell/dict-filetypes': 3.0.13 + '@cspell/dict-en-common-misspellings': 2.1.8 + '@cspell/dict-en-gb-mit': 3.1.14 + '@cspell/dict-en_us': 4.4.24 + '@cspell/dict-filetypes': 3.0.14 '@cspell/dict-flutter': 1.1.1 '@cspell/dict-fonts': 4.0.5 '@cspell/dict-fsharp': 1.1.1 '@cspell/dict-fullstack': 3.2.7 '@cspell/dict-gaming-terms': 1.1.2 '@cspell/dict-git': 3.0.7 - '@cspell/dict-golang': 6.0.23 + '@cspell/dict-golang': 6.0.24 '@cspell/dict-google': 1.0.9 '@cspell/dict-haskell': 4.0.6 - '@cspell/dict-html': 4.0.12 + '@cspell/dict-html': 4.0.13 '@cspell/dict-html-symbol-entities': 4.0.4 '@cspell/dict-java': 5.0.12 '@cspell/dict-julia': 1.1.1 @@ -5551,50 +5569,51 @@ snapshots: '@cspell/dict-lorem-ipsum': 4.0.5 '@cspell/dict-lua': 4.0.8 '@cspell/dict-makefile': 1.0.5 - '@cspell/dict-markdown': 2.0.12(@cspell/dict-css@4.0.18)(@cspell/dict-html-symbol-entities@4.0.4)(@cspell/dict-html@4.0.12)(@cspell/dict-typescript@3.2.3) + '@cspell/dict-markdown': 2.0.13(@cspell/dict-css@4.0.18)(@cspell/dict-html-symbol-entities@4.0.4)(@cspell/dict-html@4.0.13)(@cspell/dict-typescript@3.2.3) '@cspell/dict-monkeyc': 1.0.11 '@cspell/dict-node': 5.0.8 - '@cspell/dict-npm': 5.2.17 - '@cspell/dict-php': 4.0.15 + '@cspell/dict-npm': 5.2.25 + '@cspell/dict-php': 4.1.0 '@cspell/dict-powershell': 5.0.15 '@cspell/dict-public-licenses': 2.0.15 - '@cspell/dict-python': 4.2.19 + '@cspell/dict-python': 4.2.23 '@cspell/dict-r': 2.1.1 '@cspell/dict-ruby': 5.0.9 '@cspell/dict-rust': 4.0.12 '@cspell/dict-scala': 5.0.8 - '@cspell/dict-shell': 1.1.1 - '@cspell/dict-software-terms': 5.1.8 + '@cspell/dict-shell': 1.1.2 + '@cspell/dict-software-terms': 5.1.15 '@cspell/dict-sql': 2.2.1 '@cspell/dict-svelte': 1.0.7 '@cspell/dict-swift': 2.0.6 '@cspell/dict-terraform': 1.1.3 '@cspell/dict-typescript': 3.2.3 '@cspell/dict-vue': 3.0.5 + '@cspell/dict-zig': 1.0.0 - '@cspell/cspell-pipe@9.2.1': {} + '@cspell/cspell-pipe@9.4.0': {} - '@cspell/cspell-resolver@9.2.1': + '@cspell/cspell-resolver@9.4.0': dependencies: global-directory: 4.0.1 - '@cspell/cspell-service-bus@9.2.1': {} + '@cspell/cspell-service-bus@9.4.0': {} - '@cspell/cspell-types@9.2.1': {} + '@cspell/cspell-types@9.4.0': {} '@cspell/dict-ada@4.1.1': {} '@cspell/dict-al@1.1.1': {} - '@cspell/dict-aws@4.0.15': {} + '@cspell/dict-aws@4.0.16': {} - '@cspell/dict-bash@4.2.1': + '@cspell/dict-bash@4.2.2': dependencies: - '@cspell/dict-shell': 1.1.1 + '@cspell/dict-shell': 1.1.2 - '@cspell/dict-companies@3.2.5': {} + '@cspell/dict-companies@3.2.7': {} - '@cspell/dict-cpp@6.0.12': {} + '@cspell/dict-cpp@6.0.15': {} '@cspell/dict-cryptocurrencies@5.0.5': {} @@ -5604,7 +5623,7 @@ snapshots: '@cspell/dict-dart@2.3.1': {} - '@cspell/dict-data-science@2.0.9': {} + '@cspell/dict-data-science@2.0.12': {} '@cspell/dict-django@4.1.5': {} @@ -5614,13 +5633,13 @@ snapshots: '@cspell/dict-elixir@4.0.8': {} - '@cspell/dict-en-common-misspellings@2.1.6': {} + '@cspell/dict-en-common-misspellings@2.1.8': {} - '@cspell/dict-en-gb-mit@3.1.9': {} + '@cspell/dict-en-gb-mit@3.1.14': {} - '@cspell/dict-en_us@4.4.19': {} + '@cspell/dict-en_us@4.4.24': {} - '@cspell/dict-filetypes@3.0.13': {} + '@cspell/dict-filetypes@3.0.14': {} '@cspell/dict-flutter@1.1.1': {} @@ -5634,7 +5653,7 @@ snapshots: '@cspell/dict-git@3.0.7': {} - '@cspell/dict-golang@6.0.23': {} + '@cspell/dict-golang@6.0.24': {} '@cspell/dict-google@1.0.9': {} @@ -5642,7 +5661,7 @@ snapshots: '@cspell/dict-html-symbol-entities@4.0.4': {} - '@cspell/dict-html@4.0.12': {} + '@cspell/dict-html@4.0.13': {} '@cspell/dict-java@5.0.12': {} @@ -5660,10 +5679,10 @@ snapshots: '@cspell/dict-makefile@1.0.5': {} - '@cspell/dict-markdown@2.0.12(@cspell/dict-css@4.0.18)(@cspell/dict-html-symbol-entities@4.0.4)(@cspell/dict-html@4.0.12)(@cspell/dict-typescript@3.2.3)': + '@cspell/dict-markdown@2.0.13(@cspell/dict-css@4.0.18)(@cspell/dict-html-symbol-entities@4.0.4)(@cspell/dict-html@4.0.13)(@cspell/dict-typescript@3.2.3)': dependencies: '@cspell/dict-css': 4.0.18 - '@cspell/dict-html': 4.0.12 + '@cspell/dict-html': 4.0.13 '@cspell/dict-html-symbol-entities': 4.0.4 '@cspell/dict-typescript': 3.2.3 @@ -5671,17 +5690,17 @@ snapshots: '@cspell/dict-node@5.0.8': {} - '@cspell/dict-npm@5.2.17': {} + '@cspell/dict-npm@5.2.25': {} - '@cspell/dict-php@4.0.15': {} + '@cspell/dict-php@4.1.0': {} '@cspell/dict-powershell@5.0.15': {} '@cspell/dict-public-licenses@2.0.15': {} - '@cspell/dict-python@4.2.19': + '@cspell/dict-python@4.2.23': dependencies: - '@cspell/dict-data-science': 2.0.9 + '@cspell/dict-data-science': 2.0.12 '@cspell/dict-r@2.1.1': {} @@ -5691,9 +5710,9 @@ snapshots: '@cspell/dict-scala@5.0.8': {} - '@cspell/dict-shell@1.1.1': {} + '@cspell/dict-shell@1.1.2': {} - '@cspell/dict-software-terms@5.1.8': {} + '@cspell/dict-software-terms@5.1.15': {} '@cspell/dict-sql@2.2.1': {} @@ -5707,24 +5726,26 @@ snapshots: '@cspell/dict-vue@3.0.5': {} - '@cspell/dynamic-import@9.2.1': + '@cspell/dict-zig@1.0.0': {} + + '@cspell/dynamic-import@9.4.0': dependencies: - '@cspell/url': 9.2.1 + '@cspell/url': 9.4.0 import-meta-resolve: 4.2.0 - '@cspell/eslint-plugin@9.2.1(eslint@9.37.0(jiti@2.6.1))': + '@cspell/eslint-plugin@9.4.0(eslint@9.39.1(jiti@2.6.1))': dependencies: - '@cspell/cspell-types': 9.2.1 - '@cspell/url': 9.2.1 - cspell-lib: 9.2.1 - eslint: 9.37.0(jiti@2.6.1) + '@cspell/cspell-types': 9.4.0 + '@cspell/url': 9.4.0 + cspell-lib: 9.4.0 + eslint: 9.39.1(jiti@2.6.1) synckit: 0.11.11 - '@cspell/filetypes@9.2.1': {} + '@cspell/filetypes@9.4.0': {} - '@cspell/strong-weak-map@9.2.1': {} + '@cspell/strong-weak-map@9.4.0': {} - '@cspell/url@9.2.1': {} + '@cspell/url@9.4.0': {} '@editorjs/caret@1.0.3': dependencies: @@ -5746,13 +5767,13 @@ snapshots: dependencies: '@codexteam/icons': 0.0.4 - '@emnapi/core@1.5.0': + '@emnapi/core@1.7.1': dependencies: '@emnapi/wasi-threads': 1.1.0 tslib: 2.8.1 optional: true - '@emnapi/runtime@1.5.0': + '@emnapi/runtime@1.7.1': dependencies: tslib: 2.8.1 optional: true @@ -5762,30 +5783,30 @@ snapshots: tslib: 2.8.1 optional: true - '@eslint-community/eslint-utils@4.9.0(eslint@9.37.0(jiti@2.6.1))': + '@eslint-community/eslint-utils@4.9.0(eslint@9.39.1(jiti@2.6.1))': dependencies: - eslint: 9.37.0(jiti@2.6.1) + eslint: 9.39.1(jiti@2.6.1) eslint-visitor-keys: 3.4.3 - '@eslint-community/regexpp@4.12.1': {} + '@eslint-community/regexpp@4.12.2': {} - '@eslint/config-array@0.21.0': + '@eslint/config-array@0.21.1': dependencies: - '@eslint/object-schema': 2.1.6 + '@eslint/object-schema': 2.1.7 debug: 4.4.3 minimatch: 3.1.2 transitivePeerDependencies: - supports-color - '@eslint/config-helpers@0.4.0': + '@eslint/config-helpers@0.4.2': dependencies: - '@eslint/core': 0.16.0 + '@eslint/core': 0.17.0 - '@eslint/core@0.16.0': + '@eslint/core@0.17.0': dependencies: '@types/json-schema': 7.0.15 - '@eslint/eslintrc@3.3.1': + '@eslint/eslintrc@3.3.3': dependencies: ajv: 6.12.6 debug: 4.4.3 @@ -5793,19 +5814,19 @@ snapshots: globals: 14.0.0 ignore: 5.3.2 import-fresh: 3.3.1 - js-yaml: 4.1.0 + js-yaml: 4.1.1 minimatch: 3.1.2 strip-json-comments: 3.1.1 transitivePeerDependencies: - supports-color - '@eslint/js@9.37.0': {} + '@eslint/js@9.39.1': {} - '@eslint/object-schema@2.1.6': {} + '@eslint/object-schema@2.1.7': {} - '@eslint/plugin-kit@0.4.0': + '@eslint/plugin-kit@0.4.1': dependencies: - '@eslint/core': 0.16.0 + '@eslint/core': 0.17.0 levn: 0.4.1 '@hapi/bourne@3.0.0': {} @@ -5824,90 +5845,98 @@ snapshots: '@img/colour@1.0.0': optional: true - '@img/sharp-darwin-arm64@0.34.4': + '@img/sharp-darwin-arm64@0.34.5': optionalDependencies: - '@img/sharp-libvips-darwin-arm64': 1.2.3 + '@img/sharp-libvips-darwin-arm64': 1.2.4 optional: true - '@img/sharp-darwin-x64@0.34.4': + '@img/sharp-darwin-x64@0.34.5': optionalDependencies: - '@img/sharp-libvips-darwin-x64': 1.2.3 + '@img/sharp-libvips-darwin-x64': 1.2.4 + optional: true + + '@img/sharp-libvips-darwin-arm64@1.2.4': optional: true - '@img/sharp-libvips-darwin-arm64@1.2.3': + '@img/sharp-libvips-darwin-x64@1.2.4': optional: true - '@img/sharp-libvips-darwin-x64@1.2.3': + '@img/sharp-libvips-linux-arm64@1.2.4': optional: true - '@img/sharp-libvips-linux-arm64@1.2.3': + '@img/sharp-libvips-linux-arm@1.2.4': optional: true - '@img/sharp-libvips-linux-arm@1.2.3': + '@img/sharp-libvips-linux-ppc64@1.2.4': optional: true - '@img/sharp-libvips-linux-ppc64@1.2.3': + '@img/sharp-libvips-linux-riscv64@1.2.4': optional: true - '@img/sharp-libvips-linux-s390x@1.2.3': + '@img/sharp-libvips-linux-s390x@1.2.4': optional: true - '@img/sharp-libvips-linux-x64@1.2.3': + '@img/sharp-libvips-linux-x64@1.2.4': optional: true - '@img/sharp-libvips-linuxmusl-arm64@1.2.3': + '@img/sharp-libvips-linuxmusl-arm64@1.2.4': optional: true - '@img/sharp-libvips-linuxmusl-x64@1.2.3': + '@img/sharp-libvips-linuxmusl-x64@1.2.4': optional: true - '@img/sharp-linux-arm64@0.34.4': + '@img/sharp-linux-arm64@0.34.5': optionalDependencies: - '@img/sharp-libvips-linux-arm64': 1.2.3 + '@img/sharp-libvips-linux-arm64': 1.2.4 optional: true - '@img/sharp-linux-arm@0.34.4': + '@img/sharp-linux-arm@0.34.5': optionalDependencies: - '@img/sharp-libvips-linux-arm': 1.2.3 + '@img/sharp-libvips-linux-arm': 1.2.4 optional: true - '@img/sharp-linux-ppc64@0.34.4': + '@img/sharp-linux-ppc64@0.34.5': optionalDependencies: - '@img/sharp-libvips-linux-ppc64': 1.2.3 + '@img/sharp-libvips-linux-ppc64': 1.2.4 optional: true - '@img/sharp-linux-s390x@0.34.4': + '@img/sharp-linux-riscv64@0.34.5': optionalDependencies: - '@img/sharp-libvips-linux-s390x': 1.2.3 + '@img/sharp-libvips-linux-riscv64': 1.2.4 optional: true - '@img/sharp-linux-x64@0.34.4': + '@img/sharp-linux-s390x@0.34.5': optionalDependencies: - '@img/sharp-libvips-linux-x64': 1.2.3 + '@img/sharp-libvips-linux-s390x': 1.2.4 optional: true - '@img/sharp-linuxmusl-arm64@0.34.4': + '@img/sharp-linux-x64@0.34.5': optionalDependencies: - '@img/sharp-libvips-linuxmusl-arm64': 1.2.3 + '@img/sharp-libvips-linux-x64': 1.2.4 optional: true - '@img/sharp-linuxmusl-x64@0.34.4': + '@img/sharp-linuxmusl-arm64@0.34.5': optionalDependencies: - '@img/sharp-libvips-linuxmusl-x64': 1.2.3 + '@img/sharp-libvips-linuxmusl-arm64': 1.2.4 optional: true - '@img/sharp-wasm32@0.34.4': + '@img/sharp-linuxmusl-x64@0.34.5': + optionalDependencies: + '@img/sharp-libvips-linuxmusl-x64': 1.2.4 + optional: true + + '@img/sharp-wasm32@0.34.5': dependencies: - '@emnapi/runtime': 1.5.0 + '@emnapi/runtime': 1.7.1 optional: true - '@img/sharp-win32-arm64@0.34.4': + '@img/sharp-win32-arm64@0.34.5': optional: true - '@img/sharp-win32-ia32@0.34.4': + '@img/sharp-win32-ia32@0.34.5': optional: true - '@img/sharp-win32-x64@0.34.4': + '@img/sharp-win32-x64@0.34.5': optional: true '@isaacs/balanced-match@4.0.1': {} @@ -5940,18 +5969,18 @@ snapshots: '@jridgewell/resolve-uri': 3.1.2 '@jridgewell/sourcemap-codec': 1.5.5 - '@koa/bodyparser@6.0.0(koa@3.0.1)': + '@koa/bodyparser@6.0.0(koa@3.1.1)': dependencies: '@types/co-body': 6.1.3 co-body: 6.2.0 - koa: 3.0.1 + koa: 3.1.1 lodash.merge: 4.6.2 type-is: 2.0.1 - '@koa/router@14.0.0': + '@koa/router@15.0.0': dependencies: debug: 4.4.3 - http-errors: 2.0.0 + http-errors: 2.0.1 koa-compose: 4.1.0 path-to-regexp: 8.3.0 transitivePeerDependencies: @@ -5994,56 +6023,56 @@ snapshots: transitivePeerDependencies: - supports-color - '@mdx-js/react@3.1.1(@types/react@19.2.2)(react@19.2.0)': + '@mdx-js/react@3.1.1(@types/react@19.2.7)(react@19.2.1)': dependencies: '@types/mdx': 2.0.13 - '@types/react': 19.2.2 - react: 19.2.0 + '@types/react': 19.2.7 + react: 19.2.1 '@mixmark-io/domino@2.2.0': {} '@napi-rs/wasm-runtime@0.2.12': dependencies: - '@emnapi/core': 1.5.0 - '@emnapi/runtime': 1.5.0 + '@emnapi/core': 1.7.1 + '@emnapi/runtime': 1.7.1 '@tybys/wasm-util': 0.10.1 optional: true - '@next/env@15.5.4': {} + '@next/env@16.0.7': {} - '@next/eslint-plugin-next@15.5.4': + '@next/eslint-plugin-next@16.0.7': dependencies: fast-glob: 3.3.1 - '@next/mdx@15.5.4(@mdx-js/loader@3.1.1)(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@19.2.0))': + '@next/mdx@16.0.7(@mdx-js/loader@3.1.1)(@mdx-js/react@3.1.1(@types/react@19.2.7)(react@19.2.1))': dependencies: source-map: 0.7.6 optionalDependencies: '@mdx-js/loader': 3.1.1 - '@mdx-js/react': 3.1.1(@types/react@19.2.2)(react@19.2.0) + '@mdx-js/react': 3.1.1(@types/react@19.2.7)(react@19.2.1) - '@next/swc-darwin-arm64@15.5.4': + '@next/swc-darwin-arm64@16.0.7': optional: true - '@next/swc-darwin-x64@15.5.4': + '@next/swc-darwin-x64@16.0.7': optional: true - '@next/swc-linux-arm64-gnu@15.5.4': + '@next/swc-linux-arm64-gnu@16.0.7': optional: true - '@next/swc-linux-arm64-musl@15.5.4': + '@next/swc-linux-arm64-musl@16.0.7': optional: true - '@next/swc-linux-x64-gnu@15.5.4': + '@next/swc-linux-x64-gnu@16.0.7': optional: true - '@next/swc-linux-x64-musl@15.5.4': + '@next/swc-linux-x64-musl@16.0.7': optional: true - '@next/swc-win32-arm64-msvc@15.5.4': + '@next/swc-win32-arm64-msvc@16.0.7': optional: true - '@next/swc-win32-x64-msvc@15.5.4': + '@next/swc-win32-x64-msvc@16.0.7': optional: true '@nodelib/fs.scandir@2.1.5': @@ -6129,63 +6158,63 @@ snapshots: '@popperjs/core@2.11.8': {} - '@react-aria/ssr@3.9.10(react@19.2.0)': + '@react-aria/ssr@3.9.10(react@19.2.1)': dependencies: '@swc/helpers': 0.5.17 - react: 19.2.0 + react: 19.2.1 - '@react-editor-js/client@2.1.0(@editorjs/editorjs@2.31.0)(@editorjs/paragraph@2.11.7)(react@19.2.0)': + '@react-editor-js/client@2.1.0(@editorjs/editorjs@2.31.0)(@editorjs/paragraph@2.11.7)(react@19.2.1)': dependencies: '@editorjs/editorjs': 2.31.0 '@editorjs/paragraph': 2.11.7 - '@react-editor-js/core': 2.1.0(@editorjs/editorjs@2.31.0)(react@19.2.0) - react: 19.2.0 + '@react-editor-js/core': 2.1.0(@editorjs/editorjs@2.31.0)(react@19.2.1) + react: 19.2.1 - '@react-editor-js/core@2.1.0(@editorjs/editorjs@2.31.0)(react@19.2.0)': + '@react-editor-js/core@2.1.0(@editorjs/editorjs@2.31.0)(react@19.2.1)': dependencies: '@editorjs/editorjs': 2.31.0 - react: 19.2.0 + react: 19.2.1 - '@react-editor-js/server@2.1.0(@editorjs/editorjs@2.31.0)(@editorjs/paragraph@2.11.7)(react@19.2.0)': + '@react-editor-js/server@2.1.0(@editorjs/editorjs@2.31.0)(@editorjs/paragraph@2.11.7)(react@19.2.1)': dependencies: '@editorjs/editorjs': 2.31.0 '@editorjs/paragraph': 2.11.7 - '@react-editor-js/core': 2.1.0(@editorjs/editorjs@2.31.0)(react@19.2.0) - react: 19.2.0 + '@react-editor-js/core': 2.1.0(@editorjs/editorjs@2.31.0)(react@19.2.1) + react: 19.2.1 - '@react-leaflet/core@3.0.0(leaflet@1.9.4)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + '@react-leaflet/core@3.0.0(leaflet@1.9.4)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)': dependencies: leaflet: 1.9.4 - react: 19.2.0 - react-dom: 19.2.0(react@19.2.0) + react: 19.2.1 + react-dom: 19.2.1(react@19.2.1) - '@restart/hooks@0.4.16(react@19.2.0)': + '@restart/hooks@0.4.16(react@19.2.1)': dependencies: dequal: 2.0.3 - react: 19.2.0 + react: 19.2.1 - '@restart/hooks@0.5.1(react@19.2.0)': + '@restart/hooks@0.5.1(react@19.2.1)': dependencies: dequal: 2.0.3 - react: 19.2.0 + react: 19.2.1 - '@restart/ui@1.9.4(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + '@restart/ui@1.9.4(react-dom@19.2.1(react@19.2.1))(react@19.2.1)': dependencies: '@babel/runtime': 7.28.4 '@popperjs/core': 2.11.8 - '@react-aria/ssr': 3.9.10(react@19.2.0) - '@restart/hooks': 0.5.1(react@19.2.0) + '@react-aria/ssr': 3.9.10(react@19.2.1) + '@restart/hooks': 0.5.1(react@19.2.1) '@types/warning': 3.0.3 dequal: 2.0.3 dom-helpers: 5.2.1 - react: 19.2.0 - react-dom: 19.2.0(react@19.2.0) - uncontrollable: 8.0.4(react@19.2.0) + react: 19.2.1 + react-dom: 19.2.1(react@19.2.1) + uncontrollable: 8.0.4(react@19.2.1) warning: 4.0.3 - '@rollup/plugin-babel@5.3.1(@babel/core@7.28.4)(rollup@2.79.2)': + '@rollup/plugin-babel@5.3.1(@babel/core@7.28.5)(rollup@2.79.2)': dependencies: - '@babel/core': 7.28.4 + '@babel/core': 7.28.5 '@babel/helper-module-imports': 7.27.1 '@rollup/pluginutils': 3.1.0(rollup@2.79.2) rollup: 2.79.2 @@ -6199,7 +6228,7 @@ snapshots: builtin-modules: 3.3.0 deepmerge: 4.3.1 is-module: 1.0.0 - resolve: 1.22.10 + resolve: 1.22.11 rollup: 2.79.2 '@rollup/plugin-replace@2.4.2(rollup@2.79.2)': @@ -6217,15 +6246,13 @@ snapshots: '@rtsao/scc@1.1.0': {} - '@rushstack/eslint-patch@1.13.0': {} - '@softonus/prettier-plugin-duplicate-remover@1.1.2': {} - '@stylistic/eslint-plugin@5.4.0(eslint@9.37.0(jiti@2.6.1))': + '@stylistic/eslint-plugin@5.6.1(eslint@9.39.1(jiti@2.6.1))': dependencies: - '@eslint-community/eslint-utils': 4.9.0(eslint@9.37.0(jiti@2.6.1)) - '@typescript-eslint/types': 8.46.0 - eslint: 9.37.0(jiti@2.6.1) + '@eslint-community/eslint-utils': 4.9.0(eslint@9.39.1(jiti@2.6.1)) + '@typescript-eslint/types': 8.48.1 + eslint: 9.39.1(jiti@2.6.1) eslint-visitor-keys: 4.2.1 espree: 10.4.0 estraverse: 5.3.0 @@ -6246,10 +6273,9 @@ snapshots: dependencies: tslib: 2.8.1 - '@tokenizer/inflate@0.2.7': + '@tokenizer/inflate@0.4.1': dependencies: debug: 4.4.3 - fflate: 0.8.2 token-types: 6.1.1 transitivePeerDependencies: - supports-color @@ -6263,30 +6289,30 @@ snapshots: '@types/accepts@1.3.7': dependencies: - '@types/node': 22.18.10 + '@types/node': 22.19.1 '@types/body-parser@1.19.6': dependencies: '@types/connect': 3.4.38 - '@types/node': 22.18.10 + '@types/node': 22.19.1 '@types/co-body@6.1.3': dependencies: - '@types/node': 22.18.10 + '@types/node': 22.19.1 '@types/qs': 6.14.0 '@types/connect@3.4.38': dependencies: - '@types/node': 22.18.10 + '@types/node': 22.19.1 '@types/content-disposition@0.5.9': {} - '@types/cookies@0.9.1': + '@types/cookies@0.9.2': dependencies: '@types/connect': 3.4.38 - '@types/express': 5.0.3 + '@types/express': 5.0.6 '@types/keygrip': 1.0.6 - '@types/node': 22.18.10 + '@types/node': 22.19.1 '@types/debug@4.1.12': dependencies: @@ -6304,23 +6330,23 @@ snapshots: '@types/express-serve-static-core@5.1.0': dependencies: - '@types/node': 22.18.10 + '@types/node': 22.19.1 '@types/qs': 6.14.0 '@types/range-parser': 1.2.7 - '@types/send': 1.2.0 + '@types/send': 1.2.1 - '@types/express@5.0.3': + '@types/express@5.0.6': dependencies: '@types/body-parser': 1.19.6 '@types/express-serve-static-core': 5.1.0 - '@types/serve-static': 1.15.9 + '@types/serve-static': 2.2.0 '@types/geojson@7946.0.16': {} '@types/glob@7.2.0': dependencies: '@types/minimatch': 6.0.0 - '@types/node': 22.18.10 + '@types/node': 22.19.1 '@types/hast@3.0.4': dependencies: @@ -6337,34 +6363,34 @@ snapshots: '@types/jsonwebtoken@9.0.10': dependencies: '@types/ms': 2.1.0 - '@types/node': 22.18.10 + '@types/node': 22.19.1 '@types/keygrip@1.0.6': {} - '@types/koa-compose@3.2.8': + '@types/koa-compose@3.2.9': dependencies: - '@types/koa': 3.0.0 + '@types/koa': 3.0.1 - '@types/koa@3.0.0': + '@types/koa@3.0.1': dependencies: '@types/accepts': 1.3.7 '@types/content-disposition': 0.5.9 - '@types/cookies': 0.9.1 + '@types/cookies': 0.9.2 '@types/http-assert': 1.5.6 '@types/http-errors': 2.0.5 '@types/keygrip': 1.0.6 - '@types/koa-compose': 3.2.8 - '@types/node': 22.18.10 + '@types/koa-compose': 3.2.9 + '@types/node': 22.19.1 - '@types/koa__router@12.0.4': + '@types/koa__router@12.0.5': dependencies: - '@types/koa': 3.0.0 + '@types/koa': 3.0.1 '@types/leaflet@1.9.21': dependencies: '@types/geojson': 7946.0.16 - '@types/lodash@4.17.20': {} + '@types/lodash@4.17.21': {} '@types/mdast@4.0.4': dependencies: @@ -6372,20 +6398,18 @@ snapshots: '@types/mdx@2.0.13': {} - '@types/mime@1.3.5': {} - '@types/minimatch@6.0.0': dependencies: - minimatch: 10.0.3 + minimatch: 10.1.1 '@types/ms@2.1.0': {} - '@types/next-pwa@5.6.9(@babel/core@7.28.4)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(sass@1.93.2)': + '@types/next-pwa@5.6.9(@babel/core@7.28.5)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)(sass@1.94.2)': dependencies: - '@types/node': 22.18.10 - '@types/react': 19.2.2 - '@types/react-dom': 19.2.1(@types/react@19.2.2) - next: 15.5.4(@babel/core@7.28.4)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(sass@1.93.2) + '@types/node': 22.19.1 + '@types/react': 19.2.7 + '@types/react-dom': 19.2.3(@types/react@19.2.7) + next: 16.0.7(@babel/core@7.28.5)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)(sass@1.94.2) workbox-build: 6.6.0 transitivePeerDependencies: - '@babel/core' @@ -6399,7 +6423,7 @@ snapshots: - sass - supports-color - '@types/node@22.18.10': + '@types/node@22.19.1': dependencies: undici-types: 6.21.0 @@ -6409,40 +6433,34 @@ snapshots: '@types/range-parser@1.2.7': {} - '@types/react-dom@19.2.1(@types/react@19.2.2)': + '@types/react-dom@19.2.3(@types/react@19.2.7)': dependencies: - '@types/react': 19.2.2 + '@types/react': 19.2.7 - '@types/react-transition-group@4.4.12(@types/react@19.2.2)': + '@types/react-transition-group@4.4.12(@types/react@19.2.7)': dependencies: - '@types/react': 19.2.2 + '@types/react': 19.2.7 - '@types/react@19.2.2': + '@types/react@19.2.7': dependencies: - csstype: 3.1.3 + csstype: 3.2.3 '@types/resolve@1.17.1': dependencies: - '@types/node': 22.18.10 - - '@types/send@0.17.5': - dependencies: - '@types/mime': 1.3.5 - '@types/node': 22.18.10 + '@types/node': 22.19.1 - '@types/send@1.2.0': + '@types/send@1.2.1': dependencies: - '@types/node': 22.18.10 + '@types/node': 22.19.1 - '@types/serve-static@1.15.9': + '@types/serve-static@2.2.0': dependencies: '@types/http-errors': 2.0.5 - '@types/node': 22.18.10 - '@types/send': 0.17.5 + '@types/node': 22.19.1 '@types/trusted-types@2.0.7': {} - '@types/turndown@5.0.5': {} + '@types/turndown@5.0.6': {} '@types/unist@2.0.11': {} @@ -6450,15 +6468,15 @@ snapshots: '@types/warning@3.0.3': {} - '@typescript-eslint/eslint-plugin@8.46.0(@typescript-eslint/parser@8.46.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3)': + '@typescript-eslint/eslint-plugin@8.48.1(@typescript-eslint/parser@8.48.1(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3)': dependencies: - '@eslint-community/regexpp': 4.12.1 - '@typescript-eslint/parser': 8.46.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/scope-manager': 8.46.0 - '@typescript-eslint/type-utils': 8.46.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/utils': 8.46.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/visitor-keys': 8.46.0 - eslint: 9.37.0(jiti@2.6.1) + '@eslint-community/regexpp': 4.12.2 + '@typescript-eslint/parser': 8.48.1(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/scope-manager': 8.48.1 + '@typescript-eslint/type-utils': 8.48.1(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/utils': 8.48.1(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/visitor-keys': 8.48.1 + eslint: 9.39.1(jiti@2.6.1) graphemer: 1.4.0 ignore: 7.0.5 natural-compare: 1.4.0 @@ -6467,80 +6485,79 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.46.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3)': + '@typescript-eslint/parser@8.48.1(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3)': dependencies: - '@typescript-eslint/scope-manager': 8.46.0 - '@typescript-eslint/types': 8.46.0 - '@typescript-eslint/typescript-estree': 8.46.0(typescript@5.9.3) - '@typescript-eslint/visitor-keys': 8.46.0 + '@typescript-eslint/scope-manager': 8.48.1 + '@typescript-eslint/types': 8.48.1 + '@typescript-eslint/typescript-estree': 8.48.1(typescript@5.9.3) + '@typescript-eslint/visitor-keys': 8.48.1 debug: 4.4.3 - eslint: 9.37.0(jiti@2.6.1) + eslint: 9.39.1(jiti@2.6.1) typescript: 5.9.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/project-service@8.46.0(typescript@5.9.3)': + '@typescript-eslint/project-service@8.48.1(typescript@5.9.3)': dependencies: - '@typescript-eslint/tsconfig-utils': 8.46.0(typescript@5.9.3) - '@typescript-eslint/types': 8.46.0 + '@typescript-eslint/tsconfig-utils': 8.48.1(typescript@5.9.3) + '@typescript-eslint/types': 8.48.1 debug: 4.4.3 typescript: 5.9.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/scope-manager@8.46.0': + '@typescript-eslint/scope-manager@8.48.1': dependencies: - '@typescript-eslint/types': 8.46.0 - '@typescript-eslint/visitor-keys': 8.46.0 + '@typescript-eslint/types': 8.48.1 + '@typescript-eslint/visitor-keys': 8.48.1 - '@typescript-eslint/tsconfig-utils@8.46.0(typescript@5.9.3)': + '@typescript-eslint/tsconfig-utils@8.48.1(typescript@5.9.3)': dependencies: typescript: 5.9.3 - '@typescript-eslint/type-utils@8.46.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3)': + '@typescript-eslint/type-utils@8.48.1(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3)': dependencies: - '@typescript-eslint/types': 8.46.0 - '@typescript-eslint/typescript-estree': 8.46.0(typescript@5.9.3) - '@typescript-eslint/utils': 8.46.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/types': 8.48.1 + '@typescript-eslint/typescript-estree': 8.48.1(typescript@5.9.3) + '@typescript-eslint/utils': 8.48.1(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3) debug: 4.4.3 - eslint: 9.37.0(jiti@2.6.1) + eslint: 9.39.1(jiti@2.6.1) ts-api-utils: 2.1.0(typescript@5.9.3) typescript: 5.9.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/types@8.46.0': {} + '@typescript-eslint/types@8.48.1': {} - '@typescript-eslint/typescript-estree@8.46.0(typescript@5.9.3)': + '@typescript-eslint/typescript-estree@8.48.1(typescript@5.9.3)': dependencies: - '@typescript-eslint/project-service': 8.46.0(typescript@5.9.3) - '@typescript-eslint/tsconfig-utils': 8.46.0(typescript@5.9.3) - '@typescript-eslint/types': 8.46.0 - '@typescript-eslint/visitor-keys': 8.46.0 + '@typescript-eslint/project-service': 8.48.1(typescript@5.9.3) + '@typescript-eslint/tsconfig-utils': 8.48.1(typescript@5.9.3) + '@typescript-eslint/types': 8.48.1 + '@typescript-eslint/visitor-keys': 8.48.1 debug: 4.4.3 - fast-glob: 3.3.3 - is-glob: 4.0.3 minimatch: 9.0.5 semver: 7.7.3 + tinyglobby: 0.2.15 ts-api-utils: 2.1.0(typescript@5.9.3) typescript: 5.9.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.46.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3)': + '@typescript-eslint/utils@8.48.1(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3)': dependencies: - '@eslint-community/eslint-utils': 4.9.0(eslint@9.37.0(jiti@2.6.1)) - '@typescript-eslint/scope-manager': 8.46.0 - '@typescript-eslint/types': 8.46.0 - '@typescript-eslint/typescript-estree': 8.46.0(typescript@5.9.3) - eslint: 9.37.0(jiti@2.6.1) + '@eslint-community/eslint-utils': 4.9.0(eslint@9.39.1(jiti@2.6.1)) + '@typescript-eslint/scope-manager': 8.48.1 + '@typescript-eslint/types': 8.48.1 + '@typescript-eslint/typescript-estree': 8.48.1(typescript@5.9.3) + eslint: 9.39.1(jiti@2.6.1) typescript: 5.9.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/visitor-keys@8.46.0': + '@typescript-eslint/visitor-keys@8.48.1': dependencies: - '@typescript-eslint/types': 8.46.0 + '@typescript-eslint/types': 8.48.1 eslint-visitor-keys: 4.2.1 '@ungap/structured-clone@1.3.0': {} @@ -6642,7 +6659,7 @@ snapshots: json-schema-traverse: 1.0.0 require-from-string: 2.0.2 - ansi-escapes@7.1.1: + ansi-escapes@7.2.0: dependencies: environment: 1.1.0 @@ -6753,35 +6770,35 @@ snapshots: axobject-query@4.1.0: {} - babel-loader@8.4.1(@babel/core@7.28.4): + babel-loader@8.4.1(@babel/core@7.28.5): dependencies: - '@babel/core': 7.28.4 + '@babel/core': 7.28.5 find-cache-dir: 3.3.2 loader-utils: 2.0.4 make-dir: 3.1.0 schema-utils: 2.7.1 - babel-plugin-polyfill-corejs2@0.4.14(@babel/core@7.28.4): + babel-plugin-polyfill-corejs2@0.4.14(@babel/core@7.28.5): dependencies: - '@babel/compat-data': 7.28.4 - '@babel/core': 7.28.4 - '@babel/helper-define-polyfill-provider': 0.6.5(@babel/core@7.28.4) + '@babel/compat-data': 7.28.5 + '@babel/core': 7.28.5 + '@babel/helper-define-polyfill-provider': 0.6.5(@babel/core@7.28.5) semver: 6.3.1 transitivePeerDependencies: - supports-color - babel-plugin-polyfill-corejs3@0.13.0(@babel/core@7.28.4): + babel-plugin-polyfill-corejs3@0.13.0(@babel/core@7.28.5): dependencies: - '@babel/core': 7.28.4 - '@babel/helper-define-polyfill-provider': 0.6.5(@babel/core@7.28.4) - core-js-compat: 3.46.0 + '@babel/core': 7.28.5 + '@babel/helper-define-polyfill-provider': 0.6.5(@babel/core@7.28.5) + core-js-compat: 3.47.0 transitivePeerDependencies: - supports-color - babel-plugin-polyfill-regenerator@0.6.5(@babel/core@7.28.4): + babel-plugin-polyfill-regenerator@0.6.5(@babel/core@7.28.5): dependencies: - '@babel/core': 7.28.4 - '@babel/helper-define-polyfill-provider': 0.6.5(@babel/core@7.28.4) + '@babel/core': 7.28.5 + '@babel/helper-define-polyfill-provider': 0.6.5(@babel/core@7.28.5) transitivePeerDependencies: - supports-color @@ -6791,7 +6808,7 @@ snapshots: base64-arraybuffer@1.0.2: {} - baseline-browser-mapping@2.8.16: {} + baseline-browser-mapping@2.9.3: {} big.js@5.2.2: {} @@ -6810,13 +6827,13 @@ snapshots: browser-fs-access@0.37.0: {} - browserslist@4.26.3: + browserslist@4.28.1: dependencies: - baseline-browser-mapping: 2.8.16 - caniuse-lite: 1.0.30001750 - electron-to-chromium: 1.5.234 - node-releases: 2.0.23 - update-browserslist-db: 1.1.3(browserslist@4.26.3) + baseline-browser-mapping: 2.9.3 + caniuse-lite: 1.0.30001759 + electron-to-chromium: 1.5.266 + node-releases: 2.0.27 + update-browserslist-db: 1.2.2(browserslist@4.28.1) buffer-equal-constant-time@1.0.1: {} @@ -6845,7 +6862,7 @@ snapshots: callsites@3.1.0: {} - caniuse-lite@1.0.30001750: {} + caniuse-lite@1.0.30001759: {} ccount@2.0.1: {} @@ -6881,7 +6898,7 @@ snapshots: dependencies: restore-cursor: 5.1.0 - cli-truncate@5.1.0: + cli-truncate@5.1.1: dependencies: slice-ansi: 7.1.2 string-width: 8.1.0 @@ -6899,7 +6916,7 @@ snapshots: '@hapi/bourne': 3.0.0 inflation: 2.1.0 qs: 6.14.0 - raw-body: 2.5.2 + raw-body: 2.5.3 type-is: 1.6.18 codex-notifier@1.1.2: {} @@ -6918,7 +6935,7 @@ snapshots: comma-separated-tokens@2.0.3: {} - commander@14.0.1: {} + commander@14.0.2: {} commander@2.20.3: {} @@ -6951,11 +6968,11 @@ snapshots: dependencies: is-what: 3.14.1 - core-js-compat@3.46.0: + core-js-compat@3.47.0: dependencies: - browserslist: 4.26.3 + browserslist: 4.28.1 - core-js@3.46.0: {} + core-js@3.47.0: {} core-util-is@1.0.3: {} @@ -6967,67 +6984,65 @@ snapshots: crypto-random-string@2.0.0: {} - cspell-config-lib@9.2.1: + cspell-config-lib@9.4.0: dependencies: - '@cspell/cspell-types': 9.2.1 + '@cspell/cspell-types': 9.4.0 comment-json: 4.4.1 - smol-toml: 1.4.2 - yaml: 2.8.1 + smol-toml: 1.5.2 + yaml: 2.8.2 - cspell-dictionary@9.2.1: + cspell-dictionary@9.4.0: dependencies: - '@cspell/cspell-pipe': 9.2.1 - '@cspell/cspell-types': 9.2.1 - cspell-trie-lib: 9.2.1 - fast-equals: 5.3.2 + '@cspell/cspell-pipe': 9.4.0 + '@cspell/cspell-types': 9.4.0 + cspell-trie-lib: 9.4.0 + fast-equals: 5.3.3 - cspell-glob@9.2.1: + cspell-glob@9.4.0: dependencies: - '@cspell/url': 9.2.1 + '@cspell/url': 9.4.0 picomatch: 4.0.3 - cspell-grammar@9.2.1: + cspell-grammar@9.4.0: dependencies: - '@cspell/cspell-pipe': 9.2.1 - '@cspell/cspell-types': 9.2.1 + '@cspell/cspell-pipe': 9.4.0 + '@cspell/cspell-types': 9.4.0 - cspell-io@9.2.1: + cspell-io@9.4.0: dependencies: - '@cspell/cspell-service-bus': 9.2.1 - '@cspell/url': 9.2.1 + '@cspell/cspell-service-bus': 9.4.0 + '@cspell/url': 9.4.0 - cspell-lib@9.2.1: + cspell-lib@9.4.0: dependencies: - '@cspell/cspell-bundled-dicts': 9.2.1 - '@cspell/cspell-pipe': 9.2.1 - '@cspell/cspell-resolver': 9.2.1 - '@cspell/cspell-types': 9.2.1 - '@cspell/dynamic-import': 9.2.1 - '@cspell/filetypes': 9.2.1 - '@cspell/strong-weak-map': 9.2.1 - '@cspell/url': 9.2.1 + '@cspell/cspell-bundled-dicts': 9.4.0 + '@cspell/cspell-pipe': 9.4.0 + '@cspell/cspell-resolver': 9.4.0 + '@cspell/cspell-types': 9.4.0 + '@cspell/dynamic-import': 9.4.0 + '@cspell/filetypes': 9.4.0 + '@cspell/strong-weak-map': 9.4.0 + '@cspell/url': 9.4.0 clear-module: 4.1.2 - comment-json: 4.4.1 - cspell-config-lib: 9.2.1 - cspell-dictionary: 9.2.1 - cspell-glob: 9.2.1 - cspell-grammar: 9.2.1 - cspell-io: 9.2.1 - cspell-trie-lib: 9.2.1 + cspell-config-lib: 9.4.0 + cspell-dictionary: 9.4.0 + cspell-glob: 9.4.0 + cspell-grammar: 9.4.0 + cspell-io: 9.4.0 + cspell-trie-lib: 9.4.0 env-paths: 3.0.0 - fast-equals: 5.3.2 - gensequence: 7.0.0 + gensequence: 8.0.8 import-fresh: 3.3.1 resolve-from: 5.0.0 vscode-languageserver-textdocument: 1.0.12 vscode-uri: 3.1.0 xdg-basedir: 5.1.0 - cspell-trie-lib@9.2.1: + cspell-trie-lib@9.4.0: dependencies: - '@cspell/cspell-pipe': 9.2.1 - '@cspell/cspell-types': 9.2.1 - gensequence: 7.0.0 + '@cspell/cspell-pipe': 9.4.0 + '@cspell/cspell-types': 9.4.0 + gensequence: 8.0.8 css-declaration-sorter@7.3.0(postcss@8.4.31): dependencies: @@ -7037,7 +7052,7 @@ snapshots: dependencies: utrie: 1.0.2 - csstype@3.1.3: {} + csstype@3.2.3: {} damerau-levenshtein@1.0.8: {} @@ -7130,7 +7145,7 @@ snapshots: dom-helpers@5.2.1: dependencies: '@babel/runtime': 7.28.4 - csstype: 3.1.3 + csstype: 3.2.3 dunder-proto@1.0.1: dependencies: @@ -7142,33 +7157,33 @@ snapshots: dependencies: safe-buffer: 5.2.1 - echarts-jsx@0.5.4(react@19.2.0)(typescript@5.9.3): + echarts-jsx@0.6.0(react@19.2.1)(typescript@5.9.3): dependencies: - echarts: 5.6.0 + echarts: 6.0.0 lodash: 4.17.21 - react: 19.2.0 - web-utility: 4.6.2(typescript@5.9.3) + react: 19.2.1 + web-utility: 4.6.4(typescript@5.9.3) transitivePeerDependencies: - element-internals-polyfill - typescript - echarts@5.6.0: + echarts@6.0.0: dependencies: tslib: 2.3.0 - zrender: 5.6.1 + zrender: 6.0.0 editorjs-html@4.0.5: {} edkit@1.2.7(typescript@5.9.3): dependencies: '@swc/helpers': 0.5.17 - '@types/turndown': 5.0.5 + '@types/turndown': 5.0.6 browser-fs-access: 0.37.0 marked: 15.0.12 regenerator-runtime: 0.14.1 - turndown: 7.2.1 + turndown: 7.2.2 turndown-plugin-gfm: 1.0.2 - web-utility: 4.6.2(typescript@5.9.3) + web-utility: 4.6.4(typescript@5.9.3) transitivePeerDependencies: - element-internals-polyfill - typescript @@ -7179,9 +7194,9 @@ snapshots: dependencies: jake: 10.9.4 - electron-to-chromium@1.5.234: {} + electron-to-chromium@1.5.266: {} - emoji-regex@10.5.0: {} + emoji-regex@10.6.0: {} emoji-regex@9.2.2: {} @@ -7321,65 +7336,64 @@ snapshots: escape-string-regexp@5.0.0: {} - eslint-config-next@15.5.4(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3): + eslint-config-next@16.0.7(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3): dependencies: - '@next/eslint-plugin-next': 15.5.4 - '@rushstack/eslint-patch': 1.13.0 - '@typescript-eslint/eslint-plugin': 8.46.0(@typescript-eslint/parser@8.46.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/parser': 8.46.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3) - eslint: 9.37.0(jiti@2.6.1) + '@next/eslint-plugin-next': 16.0.7 + eslint: 9.39.1(jiti@2.6.1) eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0)(eslint@9.37.0(jiti@2.6.1)) - eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.46.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-typescript@3.10.1)(eslint@9.37.0(jiti@2.6.1)) - eslint-plugin-jsx-a11y: 6.10.2(eslint@9.37.0(jiti@2.6.1)) - eslint-plugin-react: 7.37.5(eslint@9.37.0(jiti@2.6.1)) - eslint-plugin-react-hooks: 5.2.0(eslint@9.37.0(jiti@2.6.1)) + eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0)(eslint@9.39.1(jiti@2.6.1)) + eslint-plugin-import: 2.32.0(eslint-import-resolver-typescript@3.10.1)(eslint@9.39.1(jiti@2.6.1)) + eslint-plugin-jsx-a11y: 6.10.2(eslint@9.39.1(jiti@2.6.1)) + eslint-plugin-react: 7.37.5(eslint@9.39.1(jiti@2.6.1)) + eslint-plugin-react-hooks: 7.0.1(eslint@9.39.1(jiti@2.6.1)) + globals: 16.4.0 + typescript-eslint: 8.48.1(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3) optionalDependencies: typescript: 5.9.3 transitivePeerDependencies: + - '@typescript-eslint/parser' - eslint-import-resolver-webpack - eslint-plugin-import-x - supports-color - eslint-config-prettier@10.1.8(eslint@9.37.0(jiti@2.6.1)): + eslint-config-prettier@10.1.8(eslint@9.39.1(jiti@2.6.1)): dependencies: - eslint: 9.37.0(jiti@2.6.1) + eslint: 9.39.1(jiti@2.6.1) eslint-import-resolver-node@0.3.9: dependencies: debug: 3.2.7 is-core-module: 2.16.1 - resolve: 1.22.10 + resolve: 1.22.11 transitivePeerDependencies: - supports-color - eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0)(eslint@9.37.0(jiti@2.6.1)): + eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0)(eslint@9.39.1(jiti@2.6.1)): dependencies: '@nolyfill/is-core-module': 1.0.39 debug: 4.4.3 - eslint: 9.37.0(jiti@2.6.1) - get-tsconfig: 4.12.0 + eslint: 9.39.1(jiti@2.6.1) + get-tsconfig: 4.13.0 is-bun-module: 2.0.0 stable-hash: 0.0.5 tinyglobby: 0.2.15 unrs-resolver: 1.11.1 optionalDependencies: - eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.46.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-typescript@3.10.1)(eslint@9.37.0(jiti@2.6.1)) + eslint-plugin-import: 2.32.0(eslint-import-resolver-typescript@3.10.1)(eslint@9.39.1(jiti@2.6.1)) transitivePeerDependencies: - supports-color - eslint-module-utils@2.12.1(@typescript-eslint/parser@8.46.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1)(eslint@9.37.0(jiti@2.6.1)): + eslint-module-utils@2.12.1(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1)(eslint@9.39.1(jiti@2.6.1)): dependencies: debug: 3.2.7 optionalDependencies: - '@typescript-eslint/parser': 8.46.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3) - eslint: 9.37.0(jiti@2.6.1) + eslint: 9.39.1(jiti@2.6.1) eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0)(eslint@9.37.0(jiti@2.6.1)) + eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0)(eslint@9.39.1(jiti@2.6.1)) transitivePeerDependencies: - supports-color - eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.46.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-typescript@3.10.1)(eslint@9.37.0(jiti@2.6.1)): + eslint-plugin-import@2.32.0(eslint-import-resolver-typescript@3.10.1)(eslint@9.39.1(jiti@2.6.1)): dependencies: '@rtsao/scc': 1.1.0 array-includes: 3.1.9 @@ -7388,9 +7402,9 @@ snapshots: array.prototype.flatmap: 1.3.3 debug: 3.2.7 doctrine: 2.1.0 - eslint: 9.37.0(jiti@2.6.1) + eslint: 9.39.1(jiti@2.6.1) eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.46.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1)(eslint@9.37.0(jiti@2.6.1)) + eslint-module-utils: 2.12.1(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1)(eslint@9.39.1(jiti@2.6.1)) hasown: 2.0.2 is-core-module: 2.16.1 is-glob: 4.0.3 @@ -7401,14 +7415,12 @@ snapshots: semver: 6.3.1 string.prototype.trimend: 1.0.9 tsconfig-paths: 3.15.0 - optionalDependencies: - '@typescript-eslint/parser': 8.46.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3) transitivePeerDependencies: - eslint-import-resolver-typescript - eslint-import-resolver-webpack - supports-color - eslint-plugin-jsx-a11y@6.10.2(eslint@9.37.0(jiti@2.6.1)): + eslint-plugin-jsx-a11y@6.10.2(eslint@9.39.1(jiti@2.6.1)): dependencies: aria-query: 5.3.2 array-includes: 3.1.9 @@ -7418,7 +7430,7 @@ snapshots: axobject-query: 4.1.0 damerau-levenshtein: 1.0.8 emoji-regex: 9.2.2 - eslint: 9.37.0(jiti@2.6.1) + eslint: 9.39.1(jiti@2.6.1) hasown: 2.0.2 jsx-ast-utils: 3.3.5 language-tags: 1.0.9 @@ -7427,11 +7439,18 @@ snapshots: safe-regex-test: 1.1.0 string.prototype.includes: 2.0.1 - eslint-plugin-react-hooks@5.2.0(eslint@9.37.0(jiti@2.6.1)): + eslint-plugin-react-hooks@7.0.1(eslint@9.39.1(jiti@2.6.1)): dependencies: - eslint: 9.37.0(jiti@2.6.1) + '@babel/core': 7.28.5 + '@babel/parser': 7.28.5 + eslint: 9.39.1(jiti@2.6.1) + hermes-parser: 0.25.1 + zod: 4.1.13 + zod-validation-error: 4.0.2(zod@4.1.13) + transitivePeerDependencies: + - supports-color - eslint-plugin-react@7.37.5(eslint@9.37.0(jiti@2.6.1)): + eslint-plugin-react@7.37.5(eslint@9.39.1(jiti@2.6.1)): dependencies: array-includes: 3.1.9 array.prototype.findlast: 1.2.5 @@ -7439,7 +7458,7 @@ snapshots: array.prototype.tosorted: 1.1.4 doctrine: 2.1.0 es-iterator-helpers: 1.2.1 - eslint: 9.37.0(jiti@2.6.1) + eslint: 9.39.1(jiti@2.6.1) estraverse: 5.3.0 hasown: 2.0.2 jsx-ast-utils: 3.3.5 @@ -7453,9 +7472,9 @@ snapshots: string.prototype.matchall: 4.0.12 string.prototype.repeat: 1.0.0 - eslint-plugin-simple-import-sort@12.1.1(eslint@9.37.0(jiti@2.6.1)): + eslint-plugin-simple-import-sort@12.1.1(eslint@9.39.1(jiti@2.6.1)): dependencies: - eslint: 9.37.0(jiti@2.6.1) + eslint: 9.39.1(jiti@2.6.1) eslint-scope@8.4.0: dependencies: @@ -7466,21 +7485,20 @@ snapshots: eslint-visitor-keys@4.2.1: {} - eslint@9.37.0(jiti@2.6.1): + eslint@9.39.1(jiti@2.6.1): dependencies: - '@eslint-community/eslint-utils': 4.9.0(eslint@9.37.0(jiti@2.6.1)) - '@eslint-community/regexpp': 4.12.1 - '@eslint/config-array': 0.21.0 - '@eslint/config-helpers': 0.4.0 - '@eslint/core': 0.16.0 - '@eslint/eslintrc': 3.3.1 - '@eslint/js': 9.37.0 - '@eslint/plugin-kit': 0.4.0 + '@eslint-community/eslint-utils': 4.9.0(eslint@9.39.1(jiti@2.6.1)) + '@eslint-community/regexpp': 4.12.2 + '@eslint/config-array': 0.21.1 + '@eslint/config-helpers': 0.4.2 + '@eslint/core': 0.17.0 + '@eslint/eslintrc': 3.3.3 + '@eslint/js': 9.39.1 + '@eslint/plugin-kit': 0.4.1 '@humanfs/node': 0.16.7 '@humanwhocodes/module-importer': 1.0.1 '@humanwhocodes/retry': 0.4.3 '@types/estree': 1.0.8 - '@types/json-schema': 7.0.15 ajv: 6.12.6 chalk: 4.1.2 cross-spawn: 7.0.6 @@ -7550,7 +7568,7 @@ snapshots: astring: 1.9.0 source-map: 0.7.6 - estree-util-value-to-estree@3.4.0: + estree-util-value-to-estree@3.5.0: dependencies: '@types/estree': 1.0.8 @@ -7573,7 +7591,7 @@ snapshots: fast-deep-equal@3.1.3: {} - fast-equals@5.3.2: {} + fast-equals@5.3.3: {} fast-glob@3.3.1: dependencies: @@ -7609,15 +7627,13 @@ snapshots: optionalDependencies: picomatch: 4.0.3 - fflate@0.8.2: {} - file-entry-cache@8.0.0: dependencies: flat-cache: 4.0.1 - file-type@21.0.0: + file-type@21.1.1: dependencies: - '@tokenizer/inflate': 0.2.7 + '@tokenizer/inflate': 0.4.1 strtok3: 10.3.4 token-types: 6.1.1 uint8array-extras: 1.5.0 @@ -7690,7 +7706,7 @@ snapshots: generator-function@2.0.1: {} - gensequence@7.0.0: {} + gensequence@8.0.8: {} gensync@1.0.0-beta.2: {} @@ -7722,7 +7738,7 @@ snapshots: es-errors: 1.3.0 get-intrinsic: 1.3.0 - get-tsconfig@4.12.0: + get-tsconfig@4.13.0: dependencies: resolve-pkg-maps: 1.0.0 @@ -7751,6 +7767,8 @@ snapshots: globals@16.4.0: {} + globals@16.5.0: {} + globalthis@1.0.4: dependencies: define-properties: 1.2.1 @@ -7816,7 +7834,7 @@ snapshots: mdast-util-mdxjs-esm: 2.0.1 property-information: 7.1.0 space-separated-tokens: 2.0.2 - style-to-js: 1.1.18 + style-to-js: 1.1.21 unist-util-position: 5.0.0 zwitch: 2.0.4 transitivePeerDependencies: @@ -7836,7 +7854,7 @@ snapshots: mdast-util-mdxjs-esm: 2.0.1 property-information: 7.1.0 space-separated-tokens: 2.0.2 - style-to-js: 1.1.18 + style-to-js: 1.1.21 unist-util-position: 5.0.0 vfile-message: 4.0.3 transitivePeerDependencies: @@ -7846,6 +7864,12 @@ snapshots: dependencies: '@types/hast': 3.0.4 + hermes-estree@0.25.1: {} + + hermes-parser@0.25.1: + dependencies: + hermes-estree: 0.25.1 + html2canvas@1.4.1: dependencies: css-line-break: 2.1.0 @@ -7864,12 +7888,12 @@ snapshots: statuses: 1.5.0 toidentifier: 1.0.1 - http-errors@2.0.0: + http-errors@2.0.1: dependencies: depd: 2.0.0 inherits: 2.0.4 setprototypeof: 1.2.0 - statuses: 2.0.1 + statuses: 2.0.2 toidentifier: 1.0.1 husky@9.1.7: {} @@ -7887,11 +7911,11 @@ snapshots: idb@7.1.1: {} - idea-react@2.0.0-rc.13(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react-is@16.13.1)(react@19.2.0)(typescript@5.9.3): + idea-react@2.0.0-rc.13(@types/react@19.2.7)(react-dom@19.2.1(react@19.2.1))(react-is@16.13.1)(react@19.2.1)(typescript@5.9.3): dependencies: '@editorjs/editorjs': 2.31.0 '@editorjs/paragraph': 2.11.7 - '@react-editor-js/core': 2.1.0(@editorjs/editorjs@2.31.0)(react@19.2.0) + '@react-editor-js/core': 2.1.0(@editorjs/editorjs@2.31.0)(react@19.2.1) '@swc/helpers': 0.5.17 classnames: 2.5.1 editorjs-html: 4.0.5 @@ -7899,15 +7923,15 @@ snapshots: iterable-observer: 1.1.0 lodash: 4.17.21 mobx: 6.15.0 - mobx-react: 9.2.1(mobx@6.15.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - mobx-react-helper: 0.5.1(mobx@6.15.0)(react@19.2.0)(typescript@5.9.3) + mobx-react: 9.2.1(mobx@6.15.0)(react-dom@19.2.1(react@19.2.1))(react@19.2.1) + mobx-react-helper: 0.5.1(mobx@6.15.0)(react@19.2.1)(typescript@5.9.3) prismjs: 1.30.0 - react: 19.2.0 - react-bootstrap: 2.10.10(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - react-dom: 19.2.0(react@19.2.0) - react-editor-js: 2.1.0(@editorjs/editorjs@2.31.0)(@editorjs/paragraph@2.11.7)(react@19.2.0) - react-element-to-jsx-string: 17.0.1(react-dom@19.2.0(react@19.2.0))(react-is@16.13.1)(react@19.2.0) - web-utility: 4.6.2(typescript@5.9.3) + react: 19.2.1 + react-bootstrap: 2.10.10(@types/react@19.2.7)(react-dom@19.2.1(react@19.2.1))(react@19.2.1) + react-dom: 19.2.1(react@19.2.1) + react-editor-js: 2.1.0(@editorjs/editorjs@2.31.0)(@editorjs/paragraph@2.11.7)(react@19.2.1) + react-element-to-jsx-string: 17.0.1(react-dom@19.2.1(react@19.2.1))(react-is@16.13.1)(react@19.2.1) + web-utility: 4.6.4(typescript@5.9.3) transitivePeerDependencies: - '@types/react' - element-internals-polyfill @@ -7924,7 +7948,7 @@ snapshots: image-size@0.5.5: optional: true - immutable@5.1.3: {} + immutable@5.1.4: {} import-fresh@3.3.1: dependencies: @@ -7946,7 +7970,7 @@ snapshots: ini@4.1.1: {} - inline-style-parser@0.2.4: {} + inline-style-parser@0.2.7: {} internal-slot@1.1.0: dependencies: @@ -8140,13 +8164,13 @@ snapshots: jest-worker@26.6.2: dependencies: - '@types/node': 22.18.10 + '@types/node': 22.19.1 merge-stream: 2.0.0 supports-color: 7.2.0 jest-worker@27.5.1: dependencies: - '@types/node': 22.18.10 + '@types/node': 22.19.1 merge-stream: 2.0.0 supports-color: 8.1.1 @@ -8154,7 +8178,7 @@ snapshots: js-tokens@4.0.0: {} - js-yaml@4.1.0: + js-yaml@4.1.1: dependencies: argparse: 2.0.1 @@ -8184,9 +8208,9 @@ snapshots: jsonpointer@5.0.1: {} - jsonwebtoken@9.0.2: + jsonwebtoken@9.0.3: dependencies: - jws: 3.2.2 + jws: 4.0.1 lodash.includes: 4.3.0 lodash.isboolean: 3.0.3 lodash.isinteger: 4.0.4 @@ -8204,15 +8228,15 @@ snapshots: object.assign: 4.1.7 object.values: 1.2.1 - jwa@1.4.2: + jwa@2.0.1: dependencies: buffer-equal-constant-time: 1.0.1 ecdsa-sig-formatter: 1.0.11 safe-buffer: 5.2.1 - jws@3.2.2: + jws@4.0.1: dependencies: - jwa: 1.4.2 + jwa: 2.0.1 safe-buffer: 5.2.1 keygrip@1.1.0: @@ -8227,7 +8251,7 @@ snapshots: koa-compose@4.1.0: {} - koa@3.0.1: + koa@3.1.1: dependencies: accepts: 1.3.8 content-disposition: 0.5.4 @@ -8239,22 +8263,22 @@ snapshots: escape-html: 1.0.3 fresh: 0.5.2 http-assert: 1.5.0 - http-errors: 2.0.0 + http-errors: 2.0.1 koa-compose: 4.1.0 - mime-types: 3.0.1 + mime-types: 3.0.2 on-finished: 2.4.1 parseurl: 1.3.3 statuses: 2.0.2 type-is: 2.0.1 vary: 1.1.2 - koajax@3.1.2(core-js@3.46.0)(typescript@5.9.3): + koajax@3.1.2(core-js@3.47.0)(typescript@5.9.3): dependencies: '@swc/helpers': 0.5.17 - core-js: 3.46.0 + core-js: 3.47.0 regenerator-runtime: 0.14.1 web-streams-polyfill: 4.2.0 - web-utility: 4.6.2(typescript@5.9.3) + web-utility: 4.6.4(typescript@5.9.3) transitivePeerDependencies: - element-internals-polyfill - typescript @@ -8296,19 +8320,19 @@ snapshots: dependencies: '@swc/helpers': 0.5.17 - lint-staged@16.2.4: + lint-staged@16.2.7: dependencies: - commander: 14.0.1 - listr2: 9.0.4 + commander: 14.0.2 + listr2: 9.0.5 micromatch: 4.0.8 nano-spawn: 2.0.0 pidtree: 0.6.0 string-argv: 0.3.2 - yaml: 2.8.1 + yaml: 2.8.2 - listr2@9.0.4: + listr2@9.0.5: dependencies: - cli-truncate: 5.1.0 + cli-truncate: 5.1.1 colorette: 2.0.20 eventemitter3: 5.0.1 log-update: 6.1.0 @@ -8357,7 +8381,7 @@ snapshots: log-update@6.1.0: dependencies: - ansi-escapes: 7.1.1 + ansi-escapes: 7.2.0 cli-cursor: 5.0.0 slice-ansi: 7.1.2 strip-ansi: 7.1.2 @@ -8391,7 +8415,7 @@ snapshots: marked@15.0.12: {} - marked@16.4.0: {} + marked@17.0.1: {} math-intrinsics@1.1.0: {} @@ -8475,9 +8499,9 @@ snapshots: mdast-util-phrasing@4.1.0: dependencies: '@types/mdast': 4.0.4 - unist-util-is: 6.0.0 + unist-util-is: 6.0.1 - mdast-util-to-hast@13.2.0: + mdast-util-to-hast@13.2.1: dependencies: '@types/hast': 3.0.4 '@types/mdast': 4.0.4 @@ -8739,7 +8763,7 @@ snapshots: dependencies: mime-db: 1.52.0 - mime-types@3.0.1: + mime-types@3.0.2: dependencies: mime-db: 1.54.0 @@ -8750,7 +8774,7 @@ snapshots: mimic-function@5.0.1: {} - minimatch@10.0.3: + minimatch@10.1.1: dependencies: '@isaacs/brace-expansion': 5.0.0 @@ -8768,16 +8792,16 @@ snapshots: minimist@1.2.8: {} - mobx-github@0.6.0(core-js@3.46.0)(typescript@5.9.3): + mobx-github@0.6.2(core-js@3.47.0)(typescript@5.9.3): dependencies: '@octokit/openapi-types': 26.0.0 '@swc/helpers': 0.5.17 - '@types/lodash': 4.17.20 - koajax: 3.1.2(core-js@3.46.0)(typescript@5.9.3) + '@types/lodash': 4.17.21 + koajax: 3.1.2(core-js@3.47.0)(typescript@5.9.3) lodash: 4.17.21 mobx: 6.15.0 - mobx-restful: 2.1.3(core-js@3.46.0)(mobx@6.15.0)(typescript@5.9.3) - web-utility: 4.6.2(typescript@5.9.3) + mobx-restful: 2.1.4(core-js@3.47.0)(mobx@6.15.0)(typescript@5.9.3) + web-utility: 4.6.4(typescript@5.9.3) transitivePeerDependencies: - core-js - element-internals-polyfill @@ -8787,73 +8811,73 @@ snapshots: mobx-i18n@0.7.2(mobx@6.15.0)(typescript@5.9.3): dependencies: '@swc/helpers': 0.5.17 - '@types/node': 22.18.10 + '@types/node': 22.19.1 mobx: 6.15.0 regenerator-runtime: 0.14.1 - web-utility: 4.6.2(typescript@5.9.3) + web-utility: 4.6.4(typescript@5.9.3) transitivePeerDependencies: - element-internals-polyfill - typescript - mobx-lark@2.4.2(core-js@3.46.0)(react@19.2.0)(typescript@5.9.3): + mobx-lark@2.5.0(core-js@3.47.0)(react@19.2.1)(typescript@5.9.3): dependencies: '@swc/helpers': 0.5.17 - '@types/react': 19.2.2 - koajax: 3.1.2(core-js@3.46.0)(typescript@5.9.3) + '@types/react': 19.2.7 + koajax: 3.1.2(core-js@3.47.0)(typescript@5.9.3) lodash.memoize: 4.1.2 mobx: 6.15.0 - mobx-restful: 2.1.3(core-js@3.46.0)(mobx@6.15.0)(typescript@5.9.3) - react: 19.2.0 + mobx-restful: 2.1.4(core-js@3.47.0)(mobx@6.15.0)(typescript@5.9.3) + react: 19.2.1 regenerator-runtime: 0.14.1 - web-utility: 4.6.2(typescript@5.9.3) + web-utility: 4.6.4(typescript@5.9.3) transitivePeerDependencies: - core-js - element-internals-polyfill - jsdom - typescript - mobx-react-helper@0.5.1(mobx@6.15.0)(react@19.2.0)(typescript@5.9.3): + mobx-react-helper@0.5.1(mobx@6.15.0)(react@19.2.1)(typescript@5.9.3): dependencies: '@swc/helpers': 0.5.17 lodash.isequalwith: 4.4.0 mobx: 6.15.0 - react: 19.2.0 - web-utility: 4.6.2(typescript@5.9.3) + react: 19.2.1 + web-utility: 4.6.4(typescript@5.9.3) transitivePeerDependencies: - element-internals-polyfill - typescript - mobx-react-lite@4.1.1(mobx@6.15.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0): + mobx-react-lite@4.1.1(mobx@6.15.0)(react-dom@19.2.1(react@19.2.1))(react@19.2.1): dependencies: mobx: 6.15.0 - react: 19.2.0 - use-sync-external-store: 1.6.0(react@19.2.0) + react: 19.2.1 + use-sync-external-store: 1.6.0(react@19.2.1) optionalDependencies: - react-dom: 19.2.0(react@19.2.0) + react-dom: 19.2.1(react@19.2.1) - mobx-react@9.2.1(mobx@6.15.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0): + mobx-react@9.2.1(mobx@6.15.0)(react-dom@19.2.1(react@19.2.1))(react@19.2.1): dependencies: mobx: 6.15.0 - mobx-react-lite: 4.1.1(mobx@6.15.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - react: 19.2.0 + mobx-react-lite: 4.1.1(mobx@6.15.0)(react-dom@19.2.1(react@19.2.1))(react@19.2.1) + react: 19.2.1 optionalDependencies: - react-dom: 19.2.0(react@19.2.0) + react-dom: 19.2.1(react@19.2.1) - mobx-restful-table@2.5.4(@types/react@19.2.2)(core-js@3.46.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3): + mobx-restful-table@2.6.3(@types/react@19.2.7)(core-js@3.47.0)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)(typescript@5.9.3): dependencies: '@swc/helpers': 0.5.17 classnames: 2.5.1 lodash: 4.17.21 mobx: 6.15.0 mobx-i18n: 0.7.2(mobx@6.15.0)(typescript@5.9.3) - mobx-react: 9.2.1(mobx@6.15.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - mobx-react-helper: 0.5.1(mobx@6.15.0)(react@19.2.0)(typescript@5.9.3) - mobx-restful: 2.1.3(core-js@3.46.0)(mobx@6.15.0)(typescript@5.9.3) - react: 19.2.0 - react-bootstrap: 2.10.10(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - react-bootstrap-editor: 2.1.1(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3) + mobx-react: 9.2.1(mobx@6.15.0)(react-dom@19.2.1(react@19.2.1))(react@19.2.1) + mobx-react-helper: 0.5.1(mobx@6.15.0)(react@19.2.1)(typescript@5.9.3) + mobx-restful: 2.1.4(core-js@3.47.0)(mobx@6.15.0)(typescript@5.9.3) + react: 19.2.1 + react-bootstrap: 2.10.10(@types/react@19.2.7)(react-dom@19.2.1(react@19.2.1))(react@19.2.1) + react-bootstrap-editor: 2.1.1(react-dom@19.2.1(react@19.2.1))(react@19.2.1)(typescript@5.9.3) regenerator-runtime: 0.14.1 - web-utility: 4.6.2(typescript@5.9.3) + web-utility: 4.6.4(typescript@5.9.3) transitivePeerDependencies: - '@types/react' - core-js @@ -8863,30 +8887,30 @@ snapshots: - react-native - typescript - mobx-restful@2.1.3(core-js@3.46.0)(mobx@6.15.0)(typescript@5.9.3): + mobx-restful@2.1.4(core-js@3.47.0)(mobx@6.15.0)(typescript@5.9.3): dependencies: '@swc/helpers': 0.5.17 idb-keyval: 6.2.2 - koajax: 3.1.2(core-js@3.46.0)(typescript@5.9.3) + koajax: 3.1.2(core-js@3.47.0)(typescript@5.9.3) mobx: 6.15.0 regenerator-runtime: 0.14.1 - web-utility: 4.6.2(typescript@5.9.3) + web-utility: 4.6.4(typescript@5.9.3) transitivePeerDependencies: - core-js - element-internals-polyfill - jsdom - typescript - mobx-strapi@0.8.1(core-js@3.46.0)(typescript@5.9.3): + mobx-strapi@0.8.1(core-js@3.47.0)(typescript@5.9.3): dependencies: '@swc/helpers': 0.5.17 idb-keyval: 6.2.2 - koajax: 3.1.2(core-js@3.46.0)(typescript@5.9.3) + koajax: 3.1.2(core-js@3.47.0)(typescript@5.9.3) mobx: 6.15.0 - mobx-restful: 2.1.3(core-js@3.46.0)(mobx@6.15.0)(typescript@5.9.3) + mobx-restful: 2.1.4(core-js@3.47.0)(mobx@6.15.0)(typescript@5.9.3) qs: 6.14.0 regenerator-runtime: 0.14.1 - web-utility: 4.6.2(typescript@5.9.3) + web-utility: 4.6.4(typescript@5.9.3) transitivePeerDependencies: - core-js - element-internals-polyfill @@ -8908,18 +8932,18 @@ snapshots: needle@3.3.1: dependencies: iconv-lite: 0.6.3 - sax: 1.4.1 + sax: 1.4.3 optional: true negotiator@0.6.3: {} - next-pwa@5.6.0(@babel/core@7.28.4)(next@15.5.4(@babel/core@7.28.4)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(sass@1.93.2)): + next-pwa@5.6.0(@babel/core@7.28.5)(next@16.0.7(@babel/core@7.28.5)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)(sass@1.94.2)): dependencies: - babel-loader: 8.4.1(@babel/core@7.28.4) + babel-loader: 8.4.1(@babel/core@7.28.5) clean-webpack-plugin: 4.0.0 globby: 11.1.0 - next: 15.5.4(@babel/core@7.28.4)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(sass@1.93.2) - terser-webpack-plugin: 5.3.14 + next: 16.0.7(@babel/core@7.28.5)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)(sass@1.94.2) + terser-webpack-plugin: 5.3.15 workbox-webpack-plugin: 6.6.0 workbox-window: 6.6.0 transitivePeerDependencies: @@ -8931,52 +8955,52 @@ snapshots: - uglify-js - webpack - next-ssr-middleware@1.0.3(next@15.5.4(@babel/core@7.28.4)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(sass@1.93.2))(react@19.2.0)(typescript@5.9.3): + next-ssr-middleware@1.0.3(next@16.0.7(@babel/core@7.28.5)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)(sass@1.94.2))(react@19.2.1)(typescript@5.9.3): dependencies: - '@koa/bodyparser': 6.0.0(koa@3.0.1) - '@koa/router': 14.0.0 + '@koa/bodyparser': 6.0.0(koa@3.1.1) + '@koa/router': 15.0.0 '@types/jsonwebtoken': 9.0.10 - '@types/koa': 3.0.0 - '@types/koa__router': 12.0.4 - '@types/react': 19.2.2 - jsonwebtoken: 9.0.2 - koa: 3.0.1 - next: 15.5.4(@babel/core@7.28.4)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(sass@1.93.2) - react: 19.2.0 + '@types/koa': 3.0.1 + '@types/koa__router': 12.0.5 + '@types/react': 19.2.7 + jsonwebtoken: 9.0.3 + koa: 3.1.1 + next: 16.0.7(@babel/core@7.28.5)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)(sass@1.94.2) + react: 19.2.1 tslib: 2.8.1 - web-utility: 4.6.2(typescript@5.9.3) + web-utility: 4.6.4(typescript@5.9.3) transitivePeerDependencies: - element-internals-polyfill - supports-color - typescript - next-with-less@3.0.1(less-loader@12.3.0(less@4.4.2))(less@4.4.2)(next@15.5.4(@babel/core@7.28.4)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(sass@1.93.2)): + next-with-less@3.0.1(less-loader@12.3.0(less@4.4.2))(less@4.4.2)(next@16.0.7(@babel/core@7.28.5)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)(sass@1.94.2)): dependencies: clone-deep: 4.0.1 less: 4.4.2 less-loader: 12.3.0(less@4.4.2) - next: 15.5.4(@babel/core@7.28.4)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(sass@1.93.2) + next: 16.0.7(@babel/core@7.28.5)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)(sass@1.94.2) - next@15.5.4(@babel/core@7.28.4)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(sass@1.93.2): + next@16.0.7(@babel/core@7.28.5)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)(sass@1.94.2): dependencies: - '@next/env': 15.5.4 + '@next/env': 16.0.7 '@swc/helpers': 0.5.15 - caniuse-lite: 1.0.30001750 + caniuse-lite: 1.0.30001759 postcss: 8.4.31 - react: 19.2.0 - react-dom: 19.2.0(react@19.2.0) - styled-jsx: 5.1.6(@babel/core@7.28.4)(react@19.2.0) + react: 19.2.1 + react-dom: 19.2.1(react@19.2.1) + styled-jsx: 5.1.6(@babel/core@7.28.5)(react@19.2.1) optionalDependencies: - '@next/swc-darwin-arm64': 15.5.4 - '@next/swc-darwin-x64': 15.5.4 - '@next/swc-linux-arm64-gnu': 15.5.4 - '@next/swc-linux-arm64-musl': 15.5.4 - '@next/swc-linux-x64-gnu': 15.5.4 - '@next/swc-linux-x64-musl': 15.5.4 - '@next/swc-win32-arm64-msvc': 15.5.4 - '@next/swc-win32-x64-msvc': 15.5.4 - sass: 1.93.2 - sharp: 0.34.4 + '@next/swc-darwin-arm64': 16.0.7 + '@next/swc-darwin-x64': 16.0.7 + '@next/swc-linux-arm64-gnu': 16.0.7 + '@next/swc-linux-arm64-musl': 16.0.7 + '@next/swc-linux-x64-gnu': 16.0.7 + '@next/swc-linux-x64-musl': 16.0.7 + '@next/swc-win32-arm64-msvc': 16.0.7 + '@next/swc-win32-x64-msvc': 16.0.7 + sass: 1.94.2 + sharp: 0.34.5 transitivePeerDependencies: - '@babel/core' - babel-plugin-macros @@ -8984,7 +9008,7 @@ snapshots: node-addon-api@7.1.1: optional: true - node-releases@2.0.23: {} + node-releases@2.0.27: {} object-assign@4.1.1: {} @@ -9040,19 +9064,19 @@ snapshots: dependencies: mimic-function: 5.0.1 - open-react-map@0.9.1(core-js@3.46.0)(mobx-react@9.2.1(mobx@6.15.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(mobx@6.15.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3): + open-react-map@0.9.1(core-js@3.47.0)(mobx-react@9.2.1(mobx@6.15.0)(react-dom@19.2.1(react@19.2.1))(react@19.2.1))(mobx@6.15.0)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)(typescript@5.9.3): dependencies: '@swc/helpers': 0.5.17 '@types/leaflet': 1.9.21 - koajax: 3.1.2(core-js@3.46.0)(typescript@5.9.3) + koajax: 3.1.2(core-js@3.47.0)(typescript@5.9.3) leaflet: 1.9.4 mobx: 6.15.0 - mobx-react: 9.2.1(mobx@6.15.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - mobx-react-helper: 0.5.1(mobx@6.15.0)(react@19.2.0)(typescript@5.9.3) - react: 19.2.0 - react-dom: 19.2.0(react@19.2.0) - react-leaflet: 5.0.0(leaflet@1.9.4)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - web-utility: 4.6.2(typescript@5.9.3) + mobx-react: 9.2.1(mobx@6.15.0)(react-dom@19.2.1(react@19.2.1))(react@19.2.1) + mobx-react-helper: 0.5.1(mobx@6.15.0)(react@19.2.1)(typescript@5.9.3) + react: 19.2.1 + react-dom: 19.2.1(react@19.2.1) + react-leaflet: 5.0.0(leaflet@1.9.4)(react-dom@19.2.1(react@19.2.1))(react@19.2.1) + web-utility: 4.6.4(typescript@5.9.3) transitivePeerDependencies: - core-js - element-internals-polyfill @@ -9170,24 +9194,24 @@ snapshots: prelude-ls@1.2.1: {} - prettier-plugin-css-order@2.1.2(postcss@8.4.31)(prettier@3.6.2): + prettier-plugin-css-order@2.1.2(postcss@8.4.31)(prettier@3.7.4): dependencies: css-declaration-sorter: 7.3.0(postcss@8.4.31) postcss-less: 6.0.0(postcss@8.4.31) postcss-scss: 4.0.9(postcss@8.4.31) - prettier: 3.6.2 + prettier: 3.7.4 transitivePeerDependencies: - postcss - prettier@3.6.2: {} + prettier@3.7.4: {} pretty-bytes@5.6.0: {} prismjs@1.30.0: {} - prop-types-extra@1.1.1(react@19.2.0): + prop-types-extra@1.1.1(react@19.2.1): dependencies: - react: 19.2.0 + react: 19.2.1 react-is: 16.13.1 warning: 4.0.3 @@ -9214,99 +9238,99 @@ snapshots: dependencies: safe-buffer: 5.2.1 - raw-body@2.5.2: + raw-body@2.5.3: dependencies: bytes: 3.1.2 - http-errors: 2.0.0 + http-errors: 2.0.1 iconv-lite: 0.4.24 unpipe: 1.0.0 - react-bootstrap-editor@2.1.1(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3): + react-bootstrap-editor@2.1.1(react-dom@19.2.1(react@19.2.1))(react@19.2.1)(typescript@5.9.3): dependencies: '@swc/helpers': 0.5.17 edkit: 1.2.7(typescript@5.9.3) mobx: 6.15.0 - mobx-react: 9.2.1(mobx@6.15.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - mobx-react-helper: 0.5.1(mobx@6.15.0)(react@19.2.0)(typescript@5.9.3) - react: 19.2.0 - react-dom: 19.2.0(react@19.2.0) - web-utility: 4.6.2(typescript@5.9.3) + mobx-react: 9.2.1(mobx@6.15.0)(react-dom@19.2.1(react@19.2.1))(react@19.2.1) + mobx-react-helper: 0.5.1(mobx@6.15.0)(react@19.2.1)(typescript@5.9.3) + react: 19.2.1 + react-dom: 19.2.1(react@19.2.1) + web-utility: 4.6.4(typescript@5.9.3) transitivePeerDependencies: - element-internals-polyfill - react-native - typescript - react-bootstrap@2.10.10(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0): + react-bootstrap@2.10.10(@types/react@19.2.7)(react-dom@19.2.1(react@19.2.1))(react@19.2.1): dependencies: '@babel/runtime': 7.28.4 - '@restart/hooks': 0.4.16(react@19.2.0) - '@restart/ui': 1.9.4(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@restart/hooks': 0.4.16(react@19.2.1) + '@restart/ui': 1.9.4(react-dom@19.2.1(react@19.2.1))(react@19.2.1) '@types/prop-types': 15.7.15 - '@types/react-transition-group': 4.4.12(@types/react@19.2.2) + '@types/react-transition-group': 4.4.12(@types/react@19.2.7) classnames: 2.5.1 dom-helpers: 5.2.1 invariant: 2.2.4 prop-types: 15.8.1 - prop-types-extra: 1.1.1(react@19.2.0) - react: 19.2.0 - react-dom: 19.2.0(react@19.2.0) - react-transition-group: 4.4.5(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - uncontrollable: 7.2.1(react@19.2.0) + prop-types-extra: 1.1.1(react@19.2.1) + react: 19.2.1 + react-dom: 19.2.1(react@19.2.1) + react-transition-group: 4.4.5(react-dom@19.2.1(react@19.2.1))(react@19.2.1) + uncontrollable: 7.2.1(react@19.2.1) warning: 4.0.3 optionalDependencies: - '@types/react': 19.2.2 + '@types/react': 19.2.7 - react-dom@19.2.0(react@19.2.0): + react-dom@19.2.1(react@19.2.1): dependencies: - react: 19.2.0 + react: 19.2.1 scheduler: 0.27.0 - react-editor-js@2.1.0(@editorjs/editorjs@2.31.0)(@editorjs/paragraph@2.11.7)(react@19.2.0): + react-editor-js@2.1.0(@editorjs/editorjs@2.31.0)(@editorjs/paragraph@2.11.7)(react@19.2.1): dependencies: - '@react-editor-js/client': 2.1.0(@editorjs/editorjs@2.31.0)(@editorjs/paragraph@2.11.7)(react@19.2.0) - '@react-editor-js/core': 2.1.0(@editorjs/editorjs@2.31.0)(react@19.2.0) - '@react-editor-js/server': 2.1.0(@editorjs/editorjs@2.31.0)(@editorjs/paragraph@2.11.7)(react@19.2.0) + '@react-editor-js/client': 2.1.0(@editorjs/editorjs@2.31.0)(@editorjs/paragraph@2.11.7)(react@19.2.1) + '@react-editor-js/core': 2.1.0(@editorjs/editorjs@2.31.0)(react@19.2.1) + '@react-editor-js/server': 2.1.0(@editorjs/editorjs@2.31.0)(@editorjs/paragraph@2.11.7)(react@19.2.1) transitivePeerDependencies: - '@editorjs/editorjs' - '@editorjs/paragraph' - react - react-element-to-jsx-string@17.0.1(react-dom@19.2.0(react@19.2.0))(react-is@16.13.1)(react@19.2.0): + react-element-to-jsx-string@17.0.1(react-dom@19.2.1(react@19.2.1))(react-is@16.13.1)(react@19.2.1): dependencies: '@base2/pretty-print-object': 1.0.2 is-plain-object: 5.0.0 - react: 19.2.0 - react-dom: 19.2.0(react@19.2.0) + react: 19.2.1 + react-dom: 19.2.1(react@19.2.1) react-is: 16.13.1 react-is@16.13.1: {} - react-leaflet@5.0.0(leaflet@1.9.4)(react-dom@19.2.0(react@19.2.0))(react@19.2.0): + react-leaflet@5.0.0(leaflet@1.9.4)(react-dom@19.2.1(react@19.2.1))(react@19.2.1): dependencies: - '@react-leaflet/core': 3.0.0(leaflet@1.9.4)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@react-leaflet/core': 3.0.0(leaflet@1.9.4)(react-dom@19.2.1(react@19.2.1))(react@19.2.1) leaflet: 1.9.4 - react: 19.2.0 - react-dom: 19.2.0(react@19.2.0) + react: 19.2.1 + react-dom: 19.2.1(react@19.2.1) react-lifecycles-compat@3.0.4: {} - react-transition-group@4.4.5(react-dom@19.2.0(react@19.2.0))(react@19.2.0): + react-transition-group@4.4.5(react-dom@19.2.1(react@19.2.1))(react@19.2.1): dependencies: '@babel/runtime': 7.28.4 dom-helpers: 5.2.1 loose-envify: 1.4.0 prop-types: 15.8.1 - react: 19.2.0 - react-dom: 19.2.0(react@19.2.0) + react: 19.2.1 + react-dom: 19.2.1(react@19.2.1) - react-typed-component@1.0.6(react-dom@19.2.0(react@19.2.0))(react@19.2.0): + react-typed-component@1.0.6(react-dom@19.2.1(react@19.2.1))(react@19.2.1): dependencies: prop-types: 15.8.1 - react: 19.2.0 - react-dom: 19.2.0(react@19.2.0) + react: 19.2.1 + react-dom: 19.2.1(react@19.2.1) typed.js: 2.1.0 - react@19.2.0: {} + react@19.2.1: {} readdirp@4.1.2: {} @@ -9402,11 +9426,11 @@ snapshots: remark-mdx-frontmatter@5.2.0: dependencies: '@types/mdast': 4.0.4 - estree-util-value-to-estree: 3.4.0 + estree-util-value-to-estree: 3.5.0 toml: 3.0.0 unified: 11.0.5 unist-util-mdx-define: 1.1.2 - yaml: 2.8.1 + yaml: 2.8.2 remark-mdx@3.1.1: dependencies: @@ -9428,7 +9452,7 @@ snapshots: dependencies: '@types/hast': 3.0.4 '@types/mdast': 4.0.4 - mdast-util-to-hast: 13.2.0 + mdast-util-to-hast: 13.2.1 unified: 11.0.5 vfile: 6.0.3 @@ -9440,7 +9464,7 @@ snapshots: resolve-pkg-maps@1.0.0: {} - resolve@1.22.10: + resolve@1.22.11: dependencies: is-core-module: 2.16.1 path-parse: 1.0.7 @@ -9471,7 +9495,7 @@ snapshots: jest-worker: 26.6.2 rollup: 2.79.2 serialize-javascript: 4.0.0 - terser: 5.44.0 + terser: 5.44.1 rollup@2.79.2: optionalDependencies: @@ -9504,15 +9528,15 @@ snapshots: safer-buffer@2.1.2: {} - sass@1.93.2: + sass@1.94.2: dependencies: chokidar: 4.0.3 - immutable: 5.1.3 + immutable: 5.1.4 source-map-js: 1.2.1 optionalDependencies: '@parcel/watcher': 2.5.1 - sax@1.4.1: + sax@1.4.3: optional: true scheduler@0.27.0: {} @@ -9573,34 +9597,36 @@ snapshots: dependencies: kind-of: 6.0.3 - sharp@0.34.4: + sharp@0.34.5: dependencies: '@img/colour': 1.0.0 detect-libc: 2.1.2 semver: 7.7.3 optionalDependencies: - '@img/sharp-darwin-arm64': 0.34.4 - '@img/sharp-darwin-x64': 0.34.4 - '@img/sharp-libvips-darwin-arm64': 1.2.3 - '@img/sharp-libvips-darwin-x64': 1.2.3 - '@img/sharp-libvips-linux-arm': 1.2.3 - '@img/sharp-libvips-linux-arm64': 1.2.3 - '@img/sharp-libvips-linux-ppc64': 1.2.3 - '@img/sharp-libvips-linux-s390x': 1.2.3 - '@img/sharp-libvips-linux-x64': 1.2.3 - '@img/sharp-libvips-linuxmusl-arm64': 1.2.3 - '@img/sharp-libvips-linuxmusl-x64': 1.2.3 - '@img/sharp-linux-arm': 0.34.4 - '@img/sharp-linux-arm64': 0.34.4 - '@img/sharp-linux-ppc64': 0.34.4 - '@img/sharp-linux-s390x': 0.34.4 - '@img/sharp-linux-x64': 0.34.4 - '@img/sharp-linuxmusl-arm64': 0.34.4 - '@img/sharp-linuxmusl-x64': 0.34.4 - '@img/sharp-wasm32': 0.34.4 - '@img/sharp-win32-arm64': 0.34.4 - '@img/sharp-win32-ia32': 0.34.4 - '@img/sharp-win32-x64': 0.34.4 + '@img/sharp-darwin-arm64': 0.34.5 + '@img/sharp-darwin-x64': 0.34.5 + '@img/sharp-libvips-darwin-arm64': 1.2.4 + '@img/sharp-libvips-darwin-x64': 1.2.4 + '@img/sharp-libvips-linux-arm': 1.2.4 + '@img/sharp-libvips-linux-arm64': 1.2.4 + '@img/sharp-libvips-linux-ppc64': 1.2.4 + '@img/sharp-libvips-linux-riscv64': 1.2.4 + '@img/sharp-libvips-linux-s390x': 1.2.4 + '@img/sharp-libvips-linux-x64': 1.2.4 + '@img/sharp-libvips-linuxmusl-arm64': 1.2.4 + '@img/sharp-libvips-linuxmusl-x64': 1.2.4 + '@img/sharp-linux-arm': 0.34.5 + '@img/sharp-linux-arm64': 0.34.5 + '@img/sharp-linux-ppc64': 0.34.5 + '@img/sharp-linux-riscv64': 0.34.5 + '@img/sharp-linux-s390x': 0.34.5 + '@img/sharp-linux-x64': 0.34.5 + '@img/sharp-linuxmusl-arm64': 0.34.5 + '@img/sharp-linuxmusl-x64': 0.34.5 + '@img/sharp-wasm32': 0.34.5 + '@img/sharp-win32-arm64': 0.34.5 + '@img/sharp-win32-ia32': 0.34.5 + '@img/sharp-win32-x64': 0.34.5 optional: true shebang-command@2.0.0: @@ -9646,7 +9672,7 @@ snapshots: ansi-styles: 6.2.3 is-fullwidth-code-point: 5.1.0 - smol-toml@1.4.2: {} + smol-toml@1.5.2: {} source-list-map@2.0.1: {} @@ -9673,8 +9699,6 @@ snapshots: statuses@1.5.0: {} - statuses@2.0.1: {} - statuses@2.0.2: {} stop-iteration-iterator@1.1.0: @@ -9686,7 +9710,7 @@ snapshots: string-width@7.2.0: dependencies: - emoji-regex: 10.5.0 + emoji-regex: 10.6.0 get-east-asian-width: 1.4.0 strip-ansi: 7.1.2 @@ -9770,20 +9794,20 @@ snapshots: dependencies: '@tokenizer/token': 0.3.0 - style-to-js@1.1.18: + style-to-js@1.1.21: dependencies: - style-to-object: 1.0.11 + style-to-object: 1.0.14 - style-to-object@1.0.11: + style-to-object@1.0.14: dependencies: - inline-style-parser: 0.2.4 + inline-style-parser: 0.2.7 - styled-jsx@5.1.6(@babel/core@7.28.4)(react@19.2.0): + styled-jsx@5.1.6(@babel/core@7.28.5)(react@19.2.1): dependencies: client-only: 0.0.1 - react: 19.2.0 + react: 19.2.1 optionalDependencies: - '@babel/core': 7.28.4 + '@babel/core': 7.28.5 supports-color@7.2.0: dependencies: @@ -9808,15 +9832,15 @@ snapshots: type-fest: 0.16.0 unique-string: 2.0.0 - terser-webpack-plugin@5.3.14: + terser-webpack-plugin@5.3.15: dependencies: '@jridgewell/trace-mapping': 0.3.31 jest-worker: 27.5.1 schema-utils: 4.3.3 serialize-javascript: 6.0.2 - terser: 5.44.0 + terser: 5.44.1 - terser@5.44.0: + terser@5.44.1: dependencies: '@jridgewell/source-map': 0.3.11 acorn: 8.15.0 @@ -9873,7 +9897,7 @@ snapshots: turndown-plugin-gfm@1.0.2: {} - turndown@7.2.1: + turndown@7.2.2: dependencies: '@mixmark-io/domino': 2.2.0 @@ -9892,7 +9916,7 @@ snapshots: dependencies: content-type: 1.0.5 media-typer: 1.1.0 - mime-types: 3.0.1 + mime-types: 3.0.2 typed-array-buffer@1.0.3: dependencies: @@ -9929,13 +9953,13 @@ snapshots: typed.js@2.1.0: {} - typescript-eslint@8.46.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3): + typescript-eslint@8.48.1(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3): dependencies: - '@typescript-eslint/eslint-plugin': 8.46.0(@typescript-eslint/parser@8.46.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/parser': 8.46.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/typescript-estree': 8.46.0(typescript@5.9.3) - '@typescript-eslint/utils': 8.46.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3) - eslint: 9.37.0(jiti@2.6.1) + '@typescript-eslint/eslint-plugin': 8.48.1(@typescript-eslint/parser@8.48.1(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/parser': 8.48.1(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/typescript-estree': 8.48.1(typescript@5.9.3) + '@typescript-eslint/utils': 8.48.1(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3) + eslint: 9.39.1(jiti@2.6.1) typescript: 5.9.3 transitivePeerDependencies: - supports-color @@ -9951,17 +9975,17 @@ snapshots: has-symbols: 1.1.0 which-boxed-primitive: 1.1.1 - uncontrollable@7.2.1(react@19.2.0): + uncontrollable@7.2.1(react@19.2.1): dependencies: '@babel/runtime': 7.28.4 - '@types/react': 19.2.2 + '@types/react': 19.2.7 invariant: 2.2.4 - react: 19.2.0 + react: 19.2.1 react-lifecycles-compat: 3.0.4 - uncontrollable@8.0.4(react@19.2.0): + uncontrollable@8.0.4(react@19.2.1): dependencies: - react: 19.2.0 + react: 19.2.1 undici-types@6.21.0: {} @@ -9992,7 +10016,7 @@ snapshots: dependencies: crypto-random-string: 2.0.0 - unist-util-is@6.0.0: + unist-util-is@6.0.1: dependencies: '@types/unist': 3.0.3 @@ -10018,16 +10042,16 @@ snapshots: dependencies: '@types/unist': 3.0.3 - unist-util-visit-parents@6.0.1: + unist-util-visit-parents@6.0.2: dependencies: '@types/unist': 3.0.3 - unist-util-is: 6.0.0 + unist-util-is: 6.0.1 unist-util-visit@5.0.0: dependencies: '@types/unist': 3.0.3 - unist-util-is: 6.0.0 - unist-util-visit-parents: 6.0.1 + unist-util-is: 6.0.1 + unist-util-visit-parents: 6.0.2 universalify@2.0.1: {} @@ -10059,9 +10083,9 @@ snapshots: upath@1.2.0: {} - update-browserslist-db@1.1.3(browserslist@4.26.3): + update-browserslist-db@1.2.2(browserslist@4.28.1): dependencies: - browserslist: 4.26.3 + browserslist: 4.28.1 escalade: 3.2.0 picocolors: 1.1.1 @@ -10069,9 +10093,9 @@ snapshots: dependencies: punycode: 2.3.1 - use-sync-external-store@1.6.0(react@19.2.0): + use-sync-external-store@1.6.0(react@19.2.1): dependencies: - react: 19.2.0 + react: 19.2.1 utrie@1.0.2: dependencies: @@ -10099,7 +10123,7 @@ snapshots: web-streams-polyfill@4.2.0: {} - web-utility@4.6.2(typescript@5.9.3): + web-utility@4.6.4(typescript@5.9.3): dependencies: '@swc/helpers': 0.5.17 regenerator-runtime: 0.14.1 @@ -10177,10 +10201,10 @@ snapshots: workbox-build@6.6.0: dependencies: '@apideck/better-ajv-errors': 0.3.6(ajv@8.17.1) - '@babel/core': 7.28.4 - '@babel/preset-env': 7.28.3(@babel/core@7.28.4) + '@babel/core': 7.28.5 + '@babel/preset-env': 7.28.5(@babel/core@7.28.5) '@babel/runtime': 7.28.4 - '@rollup/plugin-babel': 5.3.1(@babel/core@7.28.4)(rollup@2.79.2) + '@rollup/plugin-babel': 5.3.1(@babel/core@7.28.5)(rollup@2.79.2) '@rollup/plugin-node-resolve': 11.2.1(rollup@2.79.2) '@rollup/plugin-replace': 2.4.2(rollup@2.79.2) '@surma/rollup-plugin-off-main-thread': 2.2.3 @@ -10301,11 +10325,17 @@ snapshots: yallist@3.1.1: {} - yaml@2.8.1: {} + yaml@2.8.2: {} yocto-queue@0.1.0: {} - zrender@5.6.1: + zod-validation-error@4.0.2(zod@4.1.13): + dependencies: + zod: 4.1.13 + + zod@4.1.13: {} + + zrender@6.0.0: dependencies: tslib: 2.3.0 From 712096f73c68d48d61b3c77f05ba4deaa5964579 Mon Sep 17 00:00:00 2001 From: TechQuery Date: Sat, 6 Dec 2025 20:04:15 +0800 Subject: [PATCH 5/6] [optimize] generate Next.js types automatically --- .gitignore | 1 + next-env.d.ts | 6 ------ package.json | 1 + tsconfig.json | 2 +- 4 files changed, 3 insertions(+), 7 deletions(-) delete mode 100644 next-env.d.ts diff --git a/.gitignore b/.gitignore index d663663..76bb1ca 100644 --- a/.gitignore +++ b/.gitignore @@ -10,6 +10,7 @@ package-lock.json /coverage # next.js +next-env.d.ts /.next/ /out/ diff --git a/next-env.d.ts b/next-env.d.ts deleted file mode 100644 index 254b73c..0000000 --- a/next-env.d.ts +++ /dev/null @@ -1,6 +0,0 @@ -/// -/// -/// - -// NOTE: This file should not be edited -// see https://nextjs.org/docs/pages/api-reference/config/typescript for more information. diff --git a/package.json b/package.json index a7d6dc2..6e48138 100644 --- a/package.json +++ b/package.json @@ -7,6 +7,7 @@ "e": "pnpx @dotenvx/dotenvx run -f .env.personal.local -- pnpm", "prepare": "husky", "install": "pnpx git-utility download https://github.com/Open-Source-Bazaar/key-vault main Open-Source-Bazaar.github.io || true", + "postinstall": "next typegen", "dev": "next dev --webpack", "build": "next build --webpack", "start": "next start", diff --git a/tsconfig.json b/tsconfig.json index f3a5310..c99ac0c 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -13,7 +13,7 @@ "moduleResolution": "Node", "resolveJsonModule": true, "isolatedModules": true, - "jsx": "preserve", + "jsx": "react-jsx", "incremental": true }, "include": ["*.mjs", "next-env.d.ts", "**/*.ts", "**/*.tsx", "**/*.mdx"], From c1ca5c72a0a5d8e3f47d0b39309196b3d80e490d Mon Sep 17 00:00:00 2001 From: dethan3 Date: Sat, 6 Dec 2025 21:46:55 +0800 Subject: [PATCH 6/6] chore: document /finance page in README and remove finance PRD --- README.md | 4 ++ finance_PRD.md | 174 ------------------------------------------------- 2 files changed, 4 insertions(+), 174 deletions(-) delete mode 100644 finance_PRD.md diff --git a/README.md b/README.md index e3da907..753fbae 100644 --- a/README.md +++ b/README.md @@ -4,6 +4,10 @@ [![CI & CD](https://github.com/Open-Source-Bazaar/Open-Source-Bazaar.github.io/actions/workflows/main.yml/badge.svg)][7] +## 项目简介 + +1. **指数基金精选页 `/finance`**:面向理财新手和进阶用户,一屏解释指数基金长期定投与指数投资的核心逻辑,一屏基于 AKShare 实时与历史数据筛选 30-50 只国内核心指数基金,支持按风险等级、收益、最大回撤等维度筛选和对比,可逐步扩展组合推荐和教育内容。 + ## 上游项目 - [idea2app/Lark-Next-Bootstrap-ts][1] diff --git a/finance_PRD.md b/finance_PRD.md deleted file mode 100644 index 74543fb..0000000 --- a/finance_PRD.md +++ /dev/null @@ -1,174 +0,0 @@ -# 理财产品页面 PRD(国内指数基金精选) - -## 1. 背景与目标 - -- 平台当前缺少针对理财小白的落地页面,用户难以理解「指数基金」这一资产类别并做出选择。 -- 国内指数基金数量众多,缺乏以风险/波动友好视角进行筛选的工具。 -- 目标:推出一个一屏解释、一屏筛选的理财产品页面,帮助用户基于客观数据挑选国内主流指数基金,并引导至基金详情或购买渠道。 - -## 2. 用户画像 - -| 用户类型 | 需求 | 痛点 | -| ----------------------------- | -------------------------------- | ------------------------------- | -| 新手理财用户(25-35 岁白领) | 想开始定投,但不了解指数基金差异 | 术语过多、没有直观风险提示 | -| 进阶用户(有 1-3 年基金经验) | 需要快速对比指数基金表现 | 需要最新净值/回撤数据和多维排序 | -| 内容消费用户 | 想要理解指数基金逻辑 | 缺乏简单的知识卡片和案例 | - -## 3. 使用场景 - -- **首次进入:** 通过首页 Banner/文章跳转到理财产品页,先阅读指数基金为何适合长期定投,再挑选产品。 -- **每日查看:** 用户关注 2-3 只指数基金,查看实时涨跌、近期表现及风险信号。 -- **策略对比:** 用户在页面内对比宽基 vs 行业指数,组合不同风险等级产品。 - -## 4. 信息架构与模块 - -1. **Hero 讲解区**:一句话卖点 + 国内指数基金长期收益对比图 + CTA(开始挑选)。 -2. **筛选器**:分类(宽基/行业/主题)、风险级别、跟踪误差、成立年限、基金规模、费率。 -3. **指数基金卡片列表**:每张卡片包含基金简称、跟踪指数、近 1/3/5 年年化、最大回撤、规模、费率、风险标签、趋势小图。 -4. **精选组合推荐**:根据风险偏好自动推荐 3 套组合(保守/平衡/进取)。 -5. **教育内容区**:FAQ、指数基金 vs 主动基金、定投策略提示。 -6. **CTA 区**:跳转到基金详情页、模拟组合或第三方购买链接。 - -## 5. MVP 范围 - -- 覆盖 30-50 个国内核心指数基金(宽基 + 主要行业指数)。 -- 筛选功能支持「风险等级」「年化收益」「最大回撤」排序与多条件过滤。 -- 每只基金提供历史净值曲线(近 5 年)、实时涨跌幅及跟踪指数概览。 -- 集成 AKShare 指数数据 API,支持每日自动更新和历史回测展示。 - -## 6. 数据源与技术方案 - -### 6.1 数据来源:AKShare 指数数据 API - -| 功能 | AKShare 接口 | 关键字段 | 使用说明 | -| ------------------------- | ------------------------------ | ---------------------------------------------- | ---------------------------------------------------------------------------------------- | -| 实时指数行情(宽基/行业) | `stock_zh_index_spot_em` | 代码、名称、最新价、涨跌幅、成交额、振幅、量比 | 传入 `symbol="上证系列指数"` / `"深证系列指数"` 获取国内指数实时行情;用于列表实时价格。 | -| 新浪实时指数补充 | `stock_zh_index_spot_sina` | 名称、最新价、涨跌额、成交量 | 兜底数据源,避免单一供应商不可用。 | -| 历史日线 | `stock_zh_index_daily_em` | 日期、开收高低、成交量、成交额、换手率 | 用于绘制近 1/3/5 年走势图、计算年化收益/回撤。 | -| 深度历史(中证指数) | `stock_zh_index_hist_csindex` | 日期、收盘、涨跌幅、换手率、PE、PB | 适配 2005 年前/稀有指数历史,支持长周期回测。 | -| 指数估值 | `stock_zh_index_value_csindex` | PE、PB、股息率、ROE | 用于显示估值温度计,作为风险提示。 | - -> 若需要关联具体基金,可与「公募基金数据」章节中的 `fund_etf_spot_em`、`fund_open_fund_daily_em` 结合,建立「基金 ↔ 跟踪指数」映射表。 - -### 6.2 数据流程 - -1. 数据同步服务(CRON 或 serverless job)调用 AKShare 接口,存入 `index_snapshots`(实时)和 `index_history`(日线)表。 -2. 数据层计算指标:近 n 年年化收益、最大/最近回撤、波动率、夏普比率、跟踪误差(需要基金净值数据)。 -3. API 层提供 `/api/finance/index-funds`(列表 + 筛选)和 `/api/finance/index-funds/{id}`(详情)两个端点,前端页面直接消费。 -4. 数据更新频率:实时行情每 1 分钟刷新、历史日线每日收盘后更新、估值数据每日 23:00 同步。 - -### 6.3 数据字段映射(示例) - -| 页面字段 | 计算逻辑 | 数据来源 | -| --------------- | ------------------------------------------------------- | ------------------------------ | -| 最新净值/点位 | `最新价` | `stock_zh_index_spot_em` | -| 近 1/3/5 年年化 | CAGR(`stock_zh_index_daily_em` 收盘价) | 历史日线 | -| 最大回撤 | 以 `stock_zh_index_daily_em` 收盘价计算 | 历史日线 | -| 风险等级 | 基于波动率、最大回撤阈值映射(例:波动率 < 15% → 保守) | 数据计算层 | -| 估值温度计 | 当前 PE/PB vs 历史百分位 | `stock_zh_index_value_csindex` | - -## 7. 功能需求 - -### 7.1 Hero/教育区 - -- 文案:「长期定投指数基金,抓住经济增长红利」。 -- 可切换两张图表(沪深 300 vs 中证 500 累计收益)。 - -### 7.2 筛选器 - -- **类别**:宽基(沪深300、中证500、创业板指)、行业(消费、科技、医药等)、主题。 -- **风险等级**:保守(年化波动<12%)、稳健(12%-20%)、进取(>20%)。 -- **更多条件**:成立年限、基金规模、管理费、跟踪误差、近一年回撤。 -- 支持「预设组合」快速按钮(保守定投/成长定投)。 - -### 7.3 基金卡片 - -- 顶部显示基金简称 + 基金代码 + 「指数/ETF」标签。 -- 中部展示:最新价、日涨跌、近 1/3/5 年年化(可切换)、最大回撤、估值温度条。 -- 底部 CTA:「查看详情」「加入对比」「加入定投计划」。 -- 卡片右侧 Mini Chart:7D/30D 走势,使用日线数据。 - -### 7.4 对比与收藏 - -- 用户可勾选最多 3 支基金进入对比抽屉,展示指标雷达图和关键表格。 -- 收藏逻辑存储在本地(未登录)或账号(已登录)。 - -### 7.5 精选组合 - -- 基于推荐算法(见 §8)输出三套组合,显示资产占比、预期波动、历史最大回撤。 -- CTA 引导至组合策略文章/模拟盘。 - -### 7.6 教育与风险提示 - -- FAQ 包含:「什么是指数基金」「如何判断适合自己的风险等级」「定投 vs 一次性买入」。 -- 风险提示固定展示在页面底部:指数基金存在市场风险,过往表现不代表未来等。 - -## 8. 推荐/评分逻辑 - -- **评分维度**:长期收益(40%)、波动/回撤(25%)、规模与流动性(20%)、费用(10%)、估值合理性(5%)。 -- **输入数据**:年化收益、最大回撤、日均成交额、管理费率、估值百分位。 -- **输出**:综合得分 0-100,映射为「入门优选/稳健优选/进取优选」标签。 -- **组合建议**:使用现代投资组合理论(MPT)或经验权重(保守 70% 宽基债、30% 宽基股;进取 80% 行业/主题 + 20% 宽基)。 - -## 9. UX / UI 细节 - -- 色彩:Hero 区使用品牌主色,数据卡片背景浅灰,风险等级使用信号色(绿/黄/橙)。 - |- 表格滚动:列表默认展示 10 条,滚动加载。 -- Skeleton/loading:使用骨架屏 + 最近一次缓存数据,避免白屏。 -- 响应式:移动端以纵向卡片排列,筛选器折叠为 Drawer;桌面端使用并排布局。 - -## 10. 指标与验证 - -- PV/UV:页面独立访客、回访率。 -- 转化:点击「查看详情」/「加入定投」人数。 -- 互动:筛选器使用率、对比抽屉打开率、收藏数。 -- 数据准确度:定时监控接口失败率、数据延迟。 - -## 11. 非功能要求 - -- 数据接口需具备重试/降级策略:主源(东方财富)失败时切换新浪接口。 -- 缓存策略:实时行情 60 秒缓存,历史数据 CDN 缓存 24h。 -- SEO:页面提供中文 meta、OG 信息,结构化 FAQ(JSON-LD)。 -- 可访问性:颜色对比度符合 WCAG AA,图表提供数值读屏。 - -## 12. 交付里程碑(建议) - -| 阶段 | 时间 | 主要输出 | -| -------- | ------- | ------------------------------ | -| 需求冻结 | T+3 天 | PRD、API 合同、指标口径 | -| 设计交付 | T+10 天 | 低保真 + 高保真、响应式规格 | -| 开发联调 | T+20 天 | 前后端开发、数据同步、冒烟测试 | -| Beta | T+26 天 | 小流量灰度,监控数据准确性 | -| 全量上线 | T+30 天 | 对外发布,监控指标 | - -## 13. 风险与对策 - -- **数据接口变动**:AKShare 接口参数或字段变化 → 对接版本监控,配置化字段映射。 -- **指数/基金映射不全**:补充人工维护的白名单表,并根据用户搜索行为动态扩充。 -- **用户认知不足**:教育内容区加入短视频/图解链接、常见问题提示。 -- **性能压力**:列表分页 + 懒加载 mini chart;历史数据预计算。 - -## 14. Open Points - -1. 是否需要在页面内直接引导交易?如果需要,需确认合规与合作渠道。 -2. 推荐算法是否可以接入已有的智能投顾引擎?抑或仅基于规则。 -3. 是否支持用户登录后的个性化提醒(价格提醒、定投日推送)。 - -## 15. MVP 实施计划 - -1. **数据与服务** - - 新增 `/pages/api/finance/index-funds.ts`,封装调用 `stock_zh_index_spot_em`、`stock_zh_index_daily_em` 的逻辑,返回基础字段(名称、代码、最新价、涨跌幅、近 1 年收益、最大回撤占位)。 - - 设计 `types/finance.ts`(或类似文件)统一前端字段定义,方便后续扩展估值、回测指标。 - - 加入简单内存缓存(60s)避免接口过度调用。 -2. **前端页面结构** - - 新建 `pages/finance/index.tsx`,沿用全局布局,包含 Hero、筛选器占位、基金列表三大模块。 - - 创建 `components/finance/FundCard.tsx` 复用卡片 UI,展示名称、指数、最新价、日涨跌、近 1 年收益、风险标签。 - - 筛选器 MVP 仅支持「类别」和「风险」两个条件,下钻逻辑后续扩展。 - - 数据请求通过 `SWR` 或自定义 hook(`models` 目录)调用 `/api/finance/index-funds`,支持 loading/skeleton。 -3. **交互与样式** - - 使用 Bootstrap 栅格 + 自定义 SCSS(`styles/finance.module.scss`)完成响应式布局。 - - 提供空数据与错误兜底提示,保留 CTA 占位。 -4. **测试与验收** - - `pnpm lint` 通过。 - - 本地 `next dev` 打开 `/finance` 页面验证数据渲染。 - - 文档更新:在 `README` 或导航处加入入口说明(若需要)。