diff --git a/.github/workflows/sync-post.yml b/.github/workflows/sync-post.yml new file mode 100644 index 0000000..0370393 --- /dev/null +++ b/.github/workflows/sync-post.yml @@ -0,0 +1,65 @@ +name: Sync Post + +# Controls when the workflow will run +on: + # schedule: + # - cron: "30 1 * * *" + # https://docs.github.com/cn/developers/webhooks-and-events/events/issue-event-types + issues: + types: + - opened + - closed + - edited + - renamed + - labeled + - unlabeled + - reopened + - committed # 修改? + workflow_dispatch: +env: + GH_TOKEN: ${{ secrets.GH_TOKEN }} + GH_USER: ${{ secrets.GH_USER }} + GH_PROJECT_NAME: ${{ secrets.GH_PROJECT_NAME }} +jobs: + Publish: + runs-on: ubuntu-latest + steps: + - name: Checkout 🛎️ + uses: actions/checkout@v2 + + - name: Setup Node.js 🚀 + uses: actions/setup-node@v3 + with: + node-version: '20.11.0' # 指定具体的版本号 + + - name: Git config 🔧 + run: | + git config --global user.name "coderPerseus" + git config --global user.email "snailrun160@gmail.com" + + - name: Display runtime info ✨ + run: | + echo '当前目录:' + pwd + - name: Install pnpm + uses: pnpm/action-setup@v2 + with: + version: 9.6.0 # 或者您想要使用的 pnpm 版本 + + - name: Install 🔧 + run: pnpm install + + # - name: Build ⛏️ + # run: pnpm run build + + - name: Update blog files ⛏️ + run: | + pnpm run sync-post + git add . + git commit -m 'chore(ci): blog sync' + + - name: Pull latest changes from remote + run: git pull --rebase origin main + + - name: Push changes to remote + run: git push diff --git a/.gitignore b/.gitignore index fd3dbb5..e08446d 100644 --- a/.gitignore +++ b/.gitignore @@ -19,6 +19,7 @@ # misc .DS_Store *.pem +.idea/* # debug npm-debug.log* @@ -27,6 +28,7 @@ yarn-error.log* # local env files .env*.local +.env # vercel .vercel @@ -34,3 +36,6 @@ yarn-error.log* # typescript *.tsbuildinfo next-env.d.ts + +# contentlayer +.contentlayer diff --git a/.vscode/settings.json b/.vscode/settings.json index be264a8..9e1b8ec 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -29,5 +29,6 @@ "editor.defaultFormatter": "esbenp.prettier-vscode" }, "prettier.ignorePath": ".gitignore", - "commentTranslate.hover.enabled": true // Don't run prettier for files listed in .gitignore + "commentTranslate.hover.enabled": true, + "testing.automaticallyOpenTestResults": "neverOpen" // Don't run prettier for files listed in .gitignore } diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..9b132aa --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2024 luckySnail + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/README-zh_CN.md b/README-zh_CN.md new file mode 100644 index 0000000..bb8153b --- /dev/null +++ b/README-zh_CN.md @@ -0,0 +1,93 @@ +这是一个使用 [`create-next-app`](https://github.com/vercel/next.js/tree/canary/packages/create-next-app) 引导创建的 [Next.js](https://nextjs.org/) 项目。项目更多信息:https://blog-luckysnails-projects.vercel.app/posts/post-7 + +## 开始使用 + +首先,运行开发服务器: + +```bash +npm run dev +# 或者 +yarn dev +# 或者 +pnpm dev +# 或者 +bun dev +``` + +在浏览器中打开 [http://localhost:3000](http://localhost:3000) 查看结果。 + +你可以通过修改 `app/page.tsx` 文件来开始编辑页面。当你编辑文件时,页面会自动更新。 + +本项目使用 [`next/font`](https://nextjs.org/docs/basic-features/font-optimization) 来自动优化和加载 Inter,这是一种自定义的 Google 字体。 + +## 特性 + +- 背景使用了 https://bg.ibelick.com/ +- 使用 [`react email`](https://react.email/docs/introduction) 支持内容在邮箱中展示 +- + +## 了解更多 + +要深入了解 Next.js,可以查看以下资源: + +- [Next.js 文档](https://nextjs.org/docs) - 学习 Next.js 的特性和 API。 +- [学习 Next.js](https://nextjs.org/learn) - 一个交互式的 Next.js 教程。 + +你可以查看 [Next.js 的 GitHub 仓库](https://github.com/vercel/next.js/) - 欢迎你的反馈和贡献! + +## 部署到 Vercel + +部署 Next.js 应用的最简单方法是使用 [Vercel 平台](https://vercel.com/new?utm_medium=default-template&filter=next.js&utm_source=create-next-app&utm_campaign=create-next-app-readme),它由 Next.js 的创建者提供。 + +查看我们的 [Next.js 部署文档](https://nextjs.org/docs/deployment) 了解更多详情。 + +## 提交规范 + +参考: + +1. https://devv.ai/search?threadId=drssm68cp1j4 +2. https://www.npmjs.com/package/@commitlint/config-conventional + +## 工作流 + +这段代码定义了一个名为“Sync Post”的 GitHub Actions 工作流程,用于自动同步博客文章到代码仓库。 + +代码解析: + +name: Sync Post: 定义工作流程的名称。 +on: 定义触发工作流程的事件。 +issues: 当 GitHub 仓库中发生以下事件时,触发工作流程: +edited: 当 issue 标题或者内容被修改时触发。这个官方的文档没有写 + +env: 定义工作流程的环境变量。 +GH_TOKEN: GitHub 个人访问令牌,用于访问 GitHub API。 +GH_USER: GitHub 用户名。 +GH_PROJECT_NAME: 博客项目名称。 +jobs: 定义工作流程中的任务。 +Publish: 定义一个名为 “Publish” 的任务,用于发布博客文章。 +runs-on: 指定任务运行的环境,此处为 ubuntu-latest。 +steps: 定义任务中的步骤。 +Checkout 🛎️: 使用 actions/checkout@v2 动作将仓库代码检出到工作目录。 +Git config 🔧: 配置 Git 用户信息,以便后续提交代码。 +Display runtime info ✨: 打印当前工作目录,用于调试。 +Install 🔧: 使用 yarn 安装项目的依赖包。 +Update blog files ⛏️: 执行 yarn sync-post 命令同步博客文章到仓库,然后使用 Git 添加更改、提交更改并推送到远程仓库。 +总结: + +该工作流程通过监听 GitHub 仓库中的 issue 事件来触发博客文章同步操作。当 issue 被创建、关闭、重命名、添加或移除标签、重新打开或代码被修改时,工作流程会自动执行 yarn sync-post 命令同步博客文章到仓库,并提交更改。 + +## TODO + +- [x] sitemap.xml +- [x] rss +- [ ] 友链 +- [ ] 登录 +- [ ] 评论 +- [ ] 留言板 +- [ ] 搜索 +- [x] 头像转圈圈,仿掘金 +- [ ] 收藏夹 + +## 注意事项 + +- github 写帖子,不要纯数字标题 diff --git a/README.md b/README.md index b5c6656..a974384 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,7 @@ npx husky add .husky/pre-commit "npx lint-staged"This is a [Next.js](https://nextjs.org/) project bootstrapped with [`create-next-app`](https://github.com/vercel/next.js/tree/canary/packages/create-next-app). +[中文](./README-zh_CN.md) + ## Getting Started First, run the development server: diff --git a/contentlayer.config.ts b/contentlayer.config.ts new file mode 100644 index 0000000..06a9e68 --- /dev/null +++ b/contentlayer.config.ts @@ -0,0 +1,59 @@ +import { defineDocumentType, makeSource } from 'contentlayer/source-files'; +import readingTime from 'reading-time'; +import rehypeAutolinkHeadings from 'rehype-autolink-headings'; +import rehypePrismPlus from 'rehype-prism-plus'; +import rehypeSlug from 'rehype-slug'; +import remarkGfm from 'remark-gfm'; + +export const Post = defineDocumentType(() => ({ + name: 'Post', + filePathPattern: `**/*.mdx`, + contentType: 'mdx', + + fields: { + title: { type: 'string', required: true }, + description: { type: 'string', required: false }, + tags: { type: 'list', of: { type: 'string' }, required: true }, + slug: { type: 'string', required: true }, + author: { type: 'string', required: true }, + cover: { type: 'string', required: false }, + date: { type: 'date', required: true } + }, + computedFields: { + url: { + type: 'string', + resolve: (post) => `/posts/${post.slug}` + }, + readingTime: { + type: 'nested', + resolve: (doc) => readingTime(doc.body.code) + } + } +})); + +export default makeSource({ + // contentDirPath: 'posts', + contentDirPath: '.', + contentDirInclude: ['posts', 'data/blog'], + documentTypes: [Post], + mdx: { + remarkPlugins: [remarkGfm], + rehypePlugins: [ + // 为代码添加特殊样式 + // @ts-ignore + [rehypePrismPlus, { defaultLanguage: 'js', ignoreMissing: true }], + // 为每个 header 添加 id + rehypeSlug, + //为 header 添加链接 + [ + rehypeAutolinkHeadings, + { + behavior: 'wrap', + properties: { + className: ['anchor'] + } + } + ] + ] + } +}); diff --git a/data/blog/post-86.mdx b/data/blog/post-86.mdx new file mode 100644 index 0000000..923fbcb --- /dev/null +++ b/data/blog/post-86.mdx @@ -0,0 +1,38 @@ +--- +title: 面了几个实习生,真的挺难的现在 +date: 2025-11-12T15:36:23Z +slug: post-86 +author: coderPerseus:https://github.com/coderPerseus +tags: ["职场"] +--- + + +大家好,我是 luckySnail,最近面试了几个前端开发实习生,感觉现在的大学毕业生(即将毕业)挺难的,一方面是 AI 对编程行业的冲击比较大,基础开发岗位需求量极速缩减。另外一方面是目前的面试者看起来经历丰富,也有开发产品的经验,但你要是问的深一点就露馅了,回想到我实习那会,自己也是菜的不行,但我算是吃上了互联额行业最后的一点蛋糕,大家普遍对实习生要求不高。但现在已经是2025年了,招聘市场的要求已经高了好几个台阶。其实企业招聘也挺难的,招聘要求高了,也更难找到合适的人,毕竟没人天生就会,都是慢慢学会的 + +## 简历筛选 +面的几个人,起步都是一本,还有一个研究生,简历里面的履历都很丰富,在看简历的时候我发现了几个有意思的点: +1. 我发现大家都写自己有AI项目开发经验:RAG,prompt engineering ,function calling 等能力。我看到都倒吸一口凉气,现在真的太卷了~ +2. 有一个同学是有了很多实习经历,但里面写的都是自己的项目经历,这个很减分,后面说原因 +3. 有一个同学在专业技能里面写会使用很多AI编程工具 +4. 大家好像都不是很喜欢放项目链接 +上面其实都是我觉得不好的点,我觉得作为实习生基础和手写代码的能力才是最重要的。可以站在企业角度思考招实习生的目的,很多时候是希望自己培养好了转正的。所以你是不是潜力股很重要 +对于有实习经历的同学来说,你的项目经历应该就是在公司的项目,因为工作时间应该占据你90%的编程时间,你不展示公司的项目,偏偏展示自己剩下10%的时间做的东西。如果有想展示的,那就借着公司的项目讲出来。 +还有一点就是对于投递前端岗位,你说再多,我觉得都不如你展示你的作品,尤其是AI时代,作品代表你的实力,品味 + +## 面试感受 +每次面试完,我都会写一个面评给leader 并给出一个结论,那么我就需要在有限时间内看到面试者是不是合适我们,在计算机基础,解决问题,项目开发,团队协作,编程 等方面是不是及格。先分享一下我现在对面试的态度,我本身也很菜,不背八股的时候也是啥也不会,我就是带着我一点点的知识去向求职者学习讨教,希望是一次愉快的技术探讨,顺便把面试任务完成了。下面说一下我面试过程中的一些感受(纯主观的) +1. 不要直接说不会:面试就是一次唠嗑,我问你一个问题就是开启一个话题,我刚开启说两句,你说不会就打断了,你说说你多不礼貌啊!体感很不好,感受不好了,后面就很难了!所以呀,千万别说不会,你可以说这方面不是很了解,但是讲一下你对这个问题的看法和解题思路,这顺便展示了你的思维逻辑能力,面对没有遇到过的问题临场能力 +2. 没准备好的,不了解的不要写:有好几个同学都是,对 AI 不是很了解,随便一个问题就能问出来,这是很减分的,还有就是你如果觉得可以写可以不写,就不要写,你觉得不太好的,更不要写,不能加分的,就是减肥的(简称:简历加分相对论,手动狗头) +3. 基础真的很重要:每一场面试我都会问 Git 和让求职者实现一个todolist,但是没有一个同学做到很好,是的,一个简单的todolist 就能拦住90%的人,偷偷告诉你,有大厂的笔试题也是做todolist,这个能看出来你思考问题,解决问题方式,编码风格等等 +4. 面试官也很迷茫:其实我每次面试都是看简历里面写啥就讨论啥,所以你是有很大机会引导整个面试的流程和走向。展示你的强项,不要被发现弱项是你在这个游戏的任务之一 +5. 机会只有一次:面试过程中有一个同学很匹配,但是最后卡在了我们公司历史面试记录上,之前给的面评不好,就pass了,这真的非常可惜 +其实还有一个我觉得很加分的点,每次面试尾声的时候都会问有木有什么想要问我的,有一个同学问我他表现怎么样,有没有什么改进,我觉得这对实习生来说非常加分,并且我看到那个求职者还有在使用豆包在记录自己的面试过程,这说明他有总结反思的意识。 + +## 简单总结 + +求职找工作,看得是运气+实力。缺一个都是地狱难度,我个人的经验是需要坚持才能找到合适的工作 + +以上内容,也是写给自己看的,换个角度看问题,很多问题和困惑也就解决了,感谢你的阅读,如果对你有帮助,点赞+关注吧!谢谢,我们下期见~ + +--- +此文自动发布于:github issues diff --git a/env.mjs b/env.mjs new file mode 100644 index 0000000..4fc3d93 --- /dev/null +++ b/env.mjs @@ -0,0 +1,79 @@ +import { z } from 'zod'; + +/** + * Specify server-side environment variables schema here. + */ +const server = z.object({ + NODE_ENV: z.enum(['development', 'test', 'production']), + + VERCEL_ENV: z + .enum(['development', 'preview', 'production']) + .default('development') +}); + +const client = z.object({ + NEXT_PUBLIC_SITE_URL: z.string().min(1), + NEXT_PUBLIC_SITE_EMAIL_FROM: z.string().min(1), + NEXT_PUBLIC_SITE_LINK_PREVIEW_ENABLED: z.boolean().optional().default(false) +}); + +/** + * You can't destruct `process.env` as a regular object in the Next.js edge runtimes (e.g. + * middlewares) or client-side so we need to destruct manually. + * + * @type {Record | keyof z.infer, string | undefined>} + */ +const processEnv = { + NODE_ENV: process.env.NODE_ENV, + VERCEL_ENV: process.env.VERCEL_ENV, + NEXT_PUBLIC_SITE_URL: process.env.NEXT_PUBLIC_SITE_URL, + NEXT_PUBLIC_SITE_EMAIL_FROM: process.env.NEXT_PUBLIC_SITE_EMAIL_FROM, + SITE_NOTIFICATION_EMAIL_TO: process.env.SITE_NOTIFICATION_EMAIL_TO, + LINK_PREVIEW_API_BASE_URL: process.env.LINK_PREVIEW_API_BASE_URL +}; + +// Don't touch the part below +// -------------------------- + +const merged = server.merge(client); + +/** @typedef {z.input} MergedInput */ +/** @typedef {z.infer} MergedOutput */ +/** @typedef {z.SafeParseReturnType} MergedSafeParseReturn */ + +let env = /** @type {MergedOutput} */ (process.env); + +if (!!process.env.SKIP_ENV_VALIDATION == false) { + const isServer = typeof window === 'undefined'; + + const parsed = /** @type {MergedSafeParseReturn} */ ( + isServer + ? merged.safeParse(processEnv) // on server we can validate all env vars + : client.safeParse(processEnv) // on client we can only validate the ones that are exposed + ); + + if (parsed.success === false) { + console.error( + '❌ Invalid environment variables:', + parsed.error.flatten().fieldErrors + ); + throw new Error('Invalid environment variables'); + } + + env = new Proxy(parsed.data, { + get(target, prop) { + if (typeof prop !== 'string') return undefined; + // Throw a descriptive error if a server-side env var is accessed on the client + // Otherwise it would just be returning `undefined` and be annoying to debug + if (!isServer && !prop.startsWith('NEXT_PUBLIC_')) + throw new Error( + process.env.NODE_ENV === 'production' + ? '❌ Attempted to access a server-side environment variable on the client' + : `❌ Attempted to access server-side environment variable '${prop}' on the client` + ); + return target[/** @type {keyof typeof target} */ (prop)]; + } + }); +} + +export { env }; diff --git a/next.config.mjs b/next.config.mjs index 4678774..1bdf6c6 100644 --- a/next.config.mjs +++ b/next.config.mjs @@ -1,4 +1,22 @@ +import { withContentlayer } from 'next-contentlayer'; +import generate from './scripts/generate-rss.js'; /** @type {import('next').NextConfig} */ -const nextConfig = {}; +const nextConfig = { + // 静态导出 + output: 'export', + reactStrictMode: true, + swcMinify: true, + images: { + domains: ['blog-1304565468.cos.ap-shanghai.myqcloud.com', 'github.com'] + }, + webpack: (config, { isServer }) => { + // if (isServer) { + // require('./scripts/generate-sitemap'); // eslint-disable-line + // require('./scripts/generate-rss'); // eslint-disable-line + // } + generate(); + return config; + } +}; -export default nextConfig; +export default withContentlayer(nextConfig); diff --git a/package.json b/package.json index 530e0ff..d4ef6e5 100644 --- a/package.json +++ b/package.json @@ -1,5 +1,16 @@ { - "name": "nextjs-boilerplate", + "name": "lucky-snail-blog", + "description": "基于 Next.js + tailwindcss + framer motion + contentlayer + github actions + github issues 的个人博客", + "keywords": [ + "luckySnail", + "nextjs", + "tailwindcss", + "framer motion", + "contentlayer", + "github actions", + "github issues", + "blog" + ], "version": "0.1.0", "private": true, "scripts": { @@ -7,42 +18,92 @@ "pre-commit": "lint-staged", "dev": "next dev", "build": "next build", - "start": "next start", + "start": "next start -p 3003", + "start:static": "serve -s out -l 3003", "lint": "eslint --ext .ts,.js,.jsx,.tsx --fix . ", - "lint-staged": "lint-staged" + "lint-staged": "lint-staged", + "sync-post": "node ./scripts/sync-post.js", + "generate-rss": "node ./scripts/generate-rss.js", + "serve": "serve -s out" }, "dependencies": { + "@emotion/is-prop-valid": "^1.3.1", + "@radix-ui/react-aspect-ratio": "^1.1.0", + "@radix-ui/react-dialog": "^1.1.1", "@radix-ui/react-dropdown-menu": "^2.1.1", + "@radix-ui/react-hover-card": "^1.1.1", "@radix-ui/react-icons": "^1.3.0", + "@radix-ui/react-navigation-menu": "^1.2.0", + "@radix-ui/react-popover": "^1.1.1", + "@radix-ui/react-separator": "^1.1.0", "@radix-ui/react-slot": "^1.1.0", + "@radix-ui/react-switch": "^1.1.0", + "@radix-ui/react-toast": "^1.2.1", + "@radix-ui/react-tooltip": "^1.1.2", + "@splinetool/react-spline": "^4.0.0", "class-variance-authority": "^0.7.0", + "client-only": "^0.0.1", "clsx": "^2.1.1", + "contentlayer": "^0.3.4", + "dayjs": "^1.11.12", + "dotenv": "^16.4.5", + "framer-motion": "^11.3.2", + "fs-extra": "^11.2.0", + "github-api": "^3.4.0", + "gray-matter": "^4.0.3", "lucide-react": "^0.408.0", "next": "14.2.4", + "next-contentlayer": "^0.3.4", "next-themes": "^0.3.0", + "next-view-transitions": "^0.3.0", + "node-cron": "^3.0.3", "react": "^18", "react-dom": "^18", + "react-medium-image-zoom": "^5.2.8", + "react-wrap-balancer": "^1.1.1", + "reading-time": "^1.5.0", + "rehype-autolink-headings": "^7.1.0", + "rehype-prism-plus": "^2.0.0", + "rehype-slug": "^6.0.0", + "remark-gfm": "3.0.1", + "rss": "^1.2.2", + "server-only": "^0.0.1", + "sharp": "^0.33.4", + "sonner": "^1.5.0", "tailwind-merge": "^2.4.0", - "tailwindcss-animate": "^1.0.7" + "tailwindcss-animate": "^1.0.7", + "tocbot": "^4.28.2", + "zod": "^3.23.8" }, "devDependencies": { "@commitlint/cli": "^19.3.0", "@commitlint/config-conventional": "^19.2.2", - "@types/node": "^20", - "@types/react": "^18", - "@types/react-dom": "^18", + "@tailwindcss/forms": "^0.5.7", + "@tailwindcss/typography": "^0.5.13", + "@types/node": "^20.11.26", + "@types/react": "18.2.65", + "@types/react-dom": "^18.2.21", + "@types/rss": "^0.0.32", "@typescript-eslint/eslint-plugin": "^7.15.0", "@typescript-eslint/parser": "^7.15.0", "eslint": "^8.57.0", "eslint-config-next": "14.2.4", "eslint-config-prettier": "^9.1.0", "eslint-plugin-prettier": "^5.1.3", + "globby": "^14.0.2", "husky": "^8.0.3", "lint-staged": "^15.2.7", "postcss": "^8", "prettier": "^3.3.2", + "remark-rehype": "^11.1.0", "tailwindcss": "^3.4.1", - "typescript": "^5" + "typescript": "^5", + "unified": "^11.0.5" + }, + "overrides": { + "next-contentlayer": { + "next": "$next" + } }, "lint-staged": { "*.{js,jsx,ts,tsx}": [ diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 92d3bb4..298ade1 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -8,94 +8,217 @@ importers: .: dependencies: + '@emotion/is-prop-valid': + specifier: ^1.3.1 + version: 1.3.1 + '@radix-ui/react-aspect-ratio': + specifier: ^1.1.0 + version: 1.1.2(@types/react-dom@18.3.5)(@types/react@18.2.65)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-dialog': + specifier: ^1.1.1 + version: 1.1.6(@types/react-dom@18.3.5)(@types/react@18.2.65)(react-dom@18.3.1)(react@18.3.1) '@radix-ui/react-dropdown-menu': specifier: ^2.1.1 - version: 2.1.1(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) + version: 2.1.6(@types/react-dom@18.3.5)(@types/react@18.2.65)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-hover-card': + specifier: ^1.1.1 + version: 1.1.6(@types/react-dom@18.3.5)(@types/react@18.2.65)(react-dom@18.3.1)(react@18.3.1) '@radix-ui/react-icons': specifier: ^1.3.0 - version: 1.3.0(react@18.3.1) + version: 1.3.2(react@18.3.1) + '@radix-ui/react-navigation-menu': + specifier: ^1.2.0 + version: 1.2.5(@types/react-dom@18.3.5)(@types/react@18.2.65)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-popover': + specifier: ^1.1.1 + version: 1.1.6(@types/react-dom@18.3.5)(@types/react@18.2.65)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-separator': + specifier: ^1.1.0 + version: 1.1.2(@types/react-dom@18.3.5)(@types/react@18.2.65)(react-dom@18.3.1)(react@18.3.1) '@radix-ui/react-slot': specifier: ^1.1.0 - version: 1.1.0(@types/react@18.3.3)(react@18.3.1) + version: 1.1.2(@types/react@18.2.65)(react@18.3.1) + '@radix-ui/react-switch': + specifier: ^1.1.0 + version: 1.1.3(@types/react-dom@18.3.5)(@types/react@18.2.65)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-toast': + specifier: ^1.2.1 + version: 1.2.6(@types/react-dom@18.3.5)(@types/react@18.2.65)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-tooltip': + specifier: ^1.1.2 + version: 1.1.8(@types/react-dom@18.3.5)(@types/react@18.2.65)(react-dom@18.3.1)(react@18.3.1) + '@splinetool/react-spline': + specifier: ^4.0.0 + version: 4.0.0(@splinetool/runtime@1.9.63)(next@14.2.4)(react-dom@18.3.1)(react@18.3.1) class-variance-authority: specifier: ^0.7.0 - version: 0.7.0 + version: 0.7.1 + client-only: + specifier: ^0.0.1 + version: 0.0.1 clsx: specifier: ^2.1.1 version: 2.1.1 + contentlayer: + specifier: ^0.3.4 + version: 0.3.4(esbuild@0.25.0) + dayjs: + specifier: ^1.11.12 + version: 1.11.13 + dotenv: + specifier: ^16.4.5 + version: 16.4.7 + framer-motion: + specifier: ^11.3.2 + version: 11.18.2(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1)(react@18.3.1) + fs-extra: + specifier: ^11.2.0 + version: 11.3.0 + github-api: + specifier: ^3.4.0 + version: 3.4.0 + gray-matter: + specifier: ^4.0.3 + version: 4.0.3 lucide-react: specifier: ^0.408.0 version: 0.408.0(react@18.3.1) next: specifier: 14.2.4 - version: 14.2.4(react-dom@18.3.1)(react@18.3.1) + version: 14.2.4(@opentelemetry/api@1.9.0)(react-dom@18.3.1)(react@18.3.1) + next-contentlayer: + specifier: ^0.3.4 + version: 0.3.4(contentlayer@0.3.4)(esbuild@0.25.0)(next@14.2.4)(react-dom@18.3.1)(react@18.3.1) next-themes: specifier: ^0.3.0 version: 0.3.0(react-dom@18.3.1)(react@18.3.1) + next-view-transitions: + specifier: ^0.3.0 + version: 0.3.4(next@14.2.4)(react-dom@18.3.1)(react@18.3.1) + node-cron: + specifier: ^3.0.3 + version: 3.0.3 react: specifier: ^18 version: 18.3.1 react-dom: specifier: ^18 version: 18.3.1(react@18.3.1) + react-medium-image-zoom: + specifier: ^5.2.8 + version: 5.2.13(react-dom@18.3.1)(react@18.3.1) + react-wrap-balancer: + specifier: ^1.1.1 + version: 1.1.1(react@18.3.1) + reading-time: + specifier: ^1.5.0 + version: 1.5.0 + rehype-autolink-headings: + specifier: ^7.1.0 + version: 7.1.0 + rehype-prism-plus: + specifier: ^2.0.0 + version: 2.0.0 + rehype-slug: + specifier: ^6.0.0 + version: 6.0.0 + remark-gfm: + specifier: 3.0.1 + version: 3.0.1 + rss: + specifier: ^1.2.2 + version: 1.2.2 + server-only: + specifier: ^0.0.1 + version: 0.0.1 + sharp: + specifier: ^0.33.4 + version: 0.33.5 + sonner: + specifier: ^1.5.0 + version: 1.7.4(react-dom@18.3.1)(react@18.3.1) tailwind-merge: specifier: ^2.4.0 - version: 2.4.0 + version: 2.6.0 tailwindcss-animate: specifier: ^1.0.7 - version: 1.0.7(tailwindcss@3.4.4) + version: 1.0.7(tailwindcss@3.4.17) + tocbot: + specifier: ^4.28.2 + version: 4.33.0 + zod: + specifier: ^3.23.8 + version: 3.24.1 devDependencies: '@commitlint/cli': specifier: ^19.3.0 - version: 19.3.0(@types/node@20.14.10)(typescript@5.5.3) + version: 19.7.1(@types/node@20.17.17)(typescript@5.7.3) '@commitlint/config-conventional': specifier: ^19.2.2 - version: 19.2.2 + version: 19.7.1 + '@tailwindcss/forms': + specifier: ^0.5.7 + version: 0.5.10(tailwindcss@3.4.17) + '@tailwindcss/typography': + specifier: ^0.5.13 + version: 0.5.16(tailwindcss@3.4.17) '@types/node': - specifier: ^20 - version: 20.14.10 + specifier: ^20.11.26 + version: 20.17.17 '@types/react': - specifier: ^18 - version: 18.3.3 + specifier: 18.2.65 + version: 18.2.65 '@types/react-dom': - specifier: ^18 - version: 18.3.0 + specifier: ^18.2.21 + version: 18.3.5(@types/react@18.2.65) + '@types/rss': + specifier: ^0.0.32 + version: 0.0.32 '@typescript-eslint/eslint-plugin': specifier: ^7.15.0 - version: 7.15.0(@typescript-eslint/parser@7.15.0)(eslint@8.57.0)(typescript@5.5.3) + version: 7.18.0(@typescript-eslint/parser@7.18.0)(eslint@8.57.1)(typescript@5.7.3) '@typescript-eslint/parser': specifier: ^7.15.0 - version: 7.15.0(eslint@8.57.0)(typescript@5.5.3) + version: 7.18.0(eslint@8.57.1)(typescript@5.7.3) eslint: specifier: ^8.57.0 - version: 8.57.0 + version: 8.57.1 eslint-config-next: specifier: 14.2.4 - version: 14.2.4(eslint@8.57.0)(typescript@5.5.3) + version: 14.2.4(eslint@8.57.1)(typescript@5.7.3) eslint-config-prettier: specifier: ^9.1.0 - version: 9.1.0(eslint@8.57.0) + version: 9.1.0(eslint@8.57.1) eslint-plugin-prettier: specifier: ^5.1.3 - version: 5.1.3(eslint-config-prettier@9.1.0)(eslint@8.57.0)(prettier@3.3.2) + version: 5.2.3(eslint-config-prettier@9.1.0)(eslint@8.57.1)(prettier@3.5.0) + globby: + specifier: ^14.0.2 + version: 14.1.0 husky: specifier: ^8.0.3 version: 8.0.3 lint-staged: specifier: ^15.2.7 - version: 15.2.7 + version: 15.4.3 postcss: specifier: ^8 - version: 8.4.39 + version: 8.5.1 prettier: specifier: ^3.3.2 - version: 3.3.2 + version: 3.5.0 + remark-rehype: + specifier: ^11.1.0 + version: 11.1.1 tailwindcss: specifier: ^3.4.1 - version: 3.4.4 + version: 3.4.17 typescript: specifier: ^5 - version: 5.5.3 + version: 5.7.3 + unified: + specifier: ^11.0.5 + version: 11.0.5 packages: @@ -103,122 +226,365 @@ packages: resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==} engines: {node: '>=10'} - '@babel/code-frame@7.24.7': - resolution: {integrity: sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==} + '@babel/code-frame@7.26.2': + resolution: {integrity: sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==} engines: {node: '>=6.9.0'} - '@babel/helper-validator-identifier@7.24.7': - resolution: {integrity: sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==} + '@babel/helper-validator-identifier@7.25.9': + resolution: {integrity: sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==} engines: {node: '>=6.9.0'} - '@babel/highlight@7.24.7': - resolution: {integrity: sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==} + '@babel/runtime@7.26.7': + resolution: {integrity: sha512-AOPI3D+a8dXnja+iwsUqGRjr1BbZIe771sXdapOtYI531gSqpi92vXivKcq2asu/DFpdl1ceFAKZyRzK2PCVcQ==} engines: {node: '>=6.9.0'} - '@commitlint/cli@19.3.0': - resolution: {integrity: sha512-LgYWOwuDR7BSTQ9OLZ12m7F/qhNY+NpAyPBgo4YNMkACE7lGuUnuQq1yi9hz1KA4+3VqpOYl8H1rY/LYK43v7g==} + '@commitlint/cli@19.7.1': + resolution: {integrity: sha512-iObGjR1tE/PfDtDTEfd+tnRkB3/HJzpQqRTyofS2MPPkDn1mp3DBC8SoPDayokfAy+xKhF8+bwRCJO25Nea0YQ==} engines: {node: '>=v18'} hasBin: true - '@commitlint/config-conventional@19.2.2': - resolution: {integrity: sha512-mLXjsxUVLYEGgzbxbxicGPggDuyWNkf25Ht23owXIH+zV2pv1eJuzLK3t1gDY5Gp6pxdE60jZnWUY5cvgL3ufw==} + '@commitlint/config-conventional@19.7.1': + resolution: {integrity: sha512-fsEIF8zgiI/FIWSnykdQNj/0JE4av08MudLTyYHm4FlLWemKoQvPNUYU2M/3tktWcCEyq7aOkDDgtjrmgWFbvg==} engines: {node: '>=v18'} - '@commitlint/config-validator@19.0.3': - resolution: {integrity: sha512-2D3r4PKjoo59zBc2auodrSCaUnCSALCx54yveOFwwP/i2kfEAQrygwOleFWswLqK0UL/F9r07MFi5ev2ohyM4Q==} + '@commitlint/config-validator@19.5.0': + resolution: {integrity: sha512-CHtj92H5rdhKt17RmgALhfQt95VayrUo2tSqY9g2w+laAXyk7K/Ef6uPm9tn5qSIwSmrLjKaXK9eiNuxmQrDBw==} engines: {node: '>=v18'} - '@commitlint/ensure@19.0.3': - resolution: {integrity: sha512-SZEpa/VvBLoT+EFZVb91YWbmaZ/9rPH3ESrINOl0HD2kMYsjvl0tF7nMHh0EpTcv4+gTtZBAe1y/SS6/OhfZzQ==} + '@commitlint/ensure@19.5.0': + resolution: {integrity: sha512-Kv0pYZeMrdg48bHFEU5KKcccRfKmISSm9MvgIgkpI6m+ohFTB55qZlBW6eYqh/XDfRuIO0x4zSmvBjmOwWTwkg==} engines: {node: '>=v18'} - '@commitlint/execute-rule@19.0.0': - resolution: {integrity: sha512-mtsdpY1qyWgAO/iOK0L6gSGeR7GFcdW7tIjcNFxcWkfLDF5qVbPHKuGATFqRMsxcO8OUKNj0+3WOHB7EHm4Jdw==} + '@commitlint/execute-rule@19.5.0': + resolution: {integrity: sha512-aqyGgytXhl2ejlk+/rfgtwpPexYyri4t8/n4ku6rRJoRhGZpLFMqrZ+YaubeGysCP6oz4mMA34YSTaSOKEeNrg==} engines: {node: '>=v18'} - '@commitlint/format@19.3.0': - resolution: {integrity: sha512-luguk5/aF68HiF4H23ACAfk8qS8AHxl4LLN5oxPc24H+2+JRPsNr1OS3Gaea0CrH7PKhArBMKBz5RX9sA5NtTg==} + '@commitlint/format@19.5.0': + resolution: {integrity: sha512-yNy088miE52stCI3dhG/vvxFo9e4jFkU1Mj3xECfzp/bIS/JUay4491huAlVcffOoMK1cd296q0W92NlER6r3A==} engines: {node: '>=v18'} - '@commitlint/is-ignored@19.2.2': - resolution: {integrity: sha512-eNX54oXMVxncORywF4ZPFtJoBm3Tvp111tg1xf4zWXGfhBPKpfKG6R+G3G4v5CPlRROXpAOpQ3HMhA9n1Tck1g==} + '@commitlint/is-ignored@19.7.1': + resolution: {integrity: sha512-3IaOc6HVg2hAoGleRK3r9vL9zZ3XY0rf1RsUf6jdQLuaD46ZHnXBiOPTyQ004C4IvYjSWqJwlh0/u2P73aIE3g==} engines: {node: '>=v18'} - '@commitlint/lint@19.2.2': - resolution: {integrity: sha512-xrzMmz4JqwGyKQKTpFzlN0dx0TAiT7Ran1fqEBgEmEj+PU98crOFtysJgY+QdeSagx6EDRigQIXJVnfrI0ratA==} + '@commitlint/lint@19.7.1': + resolution: {integrity: sha512-LhcPfVjcOcOZA7LEuBBeO00o3MeZa+tWrX9Xyl1r9PMd5FWsEoZI9IgnGqTKZ0lZt5pO3ZlstgnRyY1CJJc9Xg==} engines: {node: '>=v18'} - '@commitlint/load@19.2.0': - resolution: {integrity: sha512-XvxxLJTKqZojCxaBQ7u92qQLFMMZc4+p9qrIq/9kJDy8DOrEa7P1yx7Tjdc2u2JxIalqT4KOGraVgCE7eCYJyQ==} + '@commitlint/load@19.6.1': + resolution: {integrity: sha512-kE4mRKWWNju2QpsCWt428XBvUH55OET2N4QKQ0bF85qS/XbsRGG1MiTByDNlEVpEPceMkDr46LNH95DtRwcsfA==} engines: {node: '>=v18'} - '@commitlint/message@19.0.0': - resolution: {integrity: sha512-c9czf6lU+9oF9gVVa2lmKaOARJvt4soRsVmbR7Njwp9FpbBgste5i7l/2l5o8MmbwGh4yE1snfnsy2qyA2r/Fw==} + '@commitlint/message@19.5.0': + resolution: {integrity: sha512-R7AM4YnbxN1Joj1tMfCyBryOC5aNJBdxadTZkuqtWi3Xj0kMdutq16XQwuoGbIzL2Pk62TALV1fZDCv36+JhTQ==} engines: {node: '>=v18'} - '@commitlint/parse@19.0.3': - resolution: {integrity: sha512-Il+tNyOb8VDxN3P6XoBBwWJtKKGzHlitEuXA5BP6ir/3loWlsSqDr5aecl6hZcC/spjq4pHqNh0qPlfeWu38QA==} + '@commitlint/parse@19.5.0': + resolution: {integrity: sha512-cZ/IxfAlfWYhAQV0TwcbdR1Oc0/r0Ik1GEessDJ3Lbuma/MRO8FRQX76eurcXtmhJC//rj52ZSZuXUg0oIX0Fw==} engines: {node: '>=v18'} - '@commitlint/read@19.2.1': - resolution: {integrity: sha512-qETc4+PL0EUv7Q36lJbPG+NJiBOGg7SSC7B5BsPWOmei+Dyif80ErfWQ0qXoW9oCh7GTpTNRoaVhiI8RbhuaNw==} + '@commitlint/read@19.5.0': + resolution: {integrity: sha512-TjS3HLPsLsxFPQj6jou8/CZFAmOP2y+6V4PGYt3ihbQKTY1Jnv0QG28WRKl/d1ha6zLODPZqsxLEov52dhR9BQ==} engines: {node: '>=v18'} - '@commitlint/resolve-extends@19.1.0': - resolution: {integrity: sha512-z2riI+8G3CET5CPgXJPlzftH+RiWYLMYv4C9tSLdLXdr6pBNimSKukYP9MS27ejmscqCTVA4almdLh0ODD2KYg==} + '@commitlint/resolve-extends@19.5.0': + resolution: {integrity: sha512-CU/GscZhCUsJwcKTJS9Ndh3AKGZTNFIOoQB2n8CmFnizE0VnEuJoum+COW+C1lNABEeqk6ssfc1Kkalm4bDklA==} engines: {node: '>=v18'} - '@commitlint/rules@19.0.3': - resolution: {integrity: sha512-TspKb9VB6svklxNCKKwxhELn7qhtY1rFF8ls58DcFd0F97XoG07xugPjjbVnLqmMkRjZDbDIwBKt9bddOfLaPw==} + '@commitlint/rules@19.6.0': + resolution: {integrity: sha512-1f2reW7lbrI0X0ozZMesS/WZxgPa4/wi56vFuJENBmed6mWq5KsheN/nxqnl/C23ioxpPO/PL6tXpiiFy5Bhjw==} engines: {node: '>=v18'} - '@commitlint/to-lines@19.0.0': - resolution: {integrity: sha512-vkxWo+VQU5wFhiP9Ub9Sre0FYe019JxFikrALVoD5UGa8/t3yOJEpEhxC5xKiENKKhUkTpEItMTRAjHw2SCpZw==} + '@commitlint/to-lines@19.5.0': + resolution: {integrity: sha512-R772oj3NHPkodOSRZ9bBVNq224DOxQtNef5Pl8l2M8ZnkkzQfeSTr4uxawV2Sd3ui05dUVzvLNnzenDBO1KBeQ==} engines: {node: '>=v18'} - '@commitlint/top-level@19.0.0': - resolution: {integrity: sha512-KKjShd6u1aMGNkCkaX4aG1jOGdn7f8ZI8TR1VEuNqUOjWTOdcDSsmglinglJ18JTjuBX5I1PtjrhQCRcixRVFQ==} + '@commitlint/top-level@19.5.0': + resolution: {integrity: sha512-IP1YLmGAk0yWrImPRRc578I3dDUI5A2UBJx9FbSOjxe9sTlzFiwVJ+zeMLgAtHMtGZsC8LUnzmW1qRemkFU4ng==} engines: {node: '>=v18'} - '@commitlint/types@19.0.3': - resolution: {integrity: sha512-tpyc+7i6bPG9mvaBbtKUeghfyZSDgWquIDfMgqYtTbmZ9Y9VzEm2je9EYcQ0aoz5o7NvGS+rcDec93yO08MHYA==} + '@commitlint/types@19.5.0': + resolution: {integrity: sha512-DSHae2obMSMkAtTBSOulg5X7/z+rGLxcXQIkg3OmWvY6wifojge5uVMydfhUvs7yQj+V7jNmRZ2Xzl8GJyqRgg==} engines: {node: '>=v18'} - '@eslint-community/eslint-utils@4.4.0': - resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} + '@contentlayer/cli@0.3.4': + resolution: {integrity: sha512-vNDwgLuhYNu+m70NZ3XK9kexKNguuxPXg7Yvzj3B34cEilQjjzSrcTY/i+AIQm9V7uT5GGshx9ukzPf+SmoszQ==} + + '@contentlayer/client@0.3.4': + resolution: {integrity: sha512-QSlLyc3y4PtdC5lFw0L4wTZUH8BQnv2nk37hNCsPAqGf+dRO7TLAzdc+2/mVIRgK+vSH+pSOzjLsQpFxxXRTZA==} + + '@contentlayer/core@0.3.4': + resolution: {integrity: sha512-o68oBLwfYZ+2vtgfk1lgHxOl3LoxvRNiUfeQ8IWFWy/L4wnIkKIqLZX01zlRE5IzYM+ZMMN5V0cKQlO7DsyR9g==} + peerDependencies: + esbuild: 0.17.x || 0.18.x + markdown-wasm: 1.x + peerDependenciesMeta: + esbuild: + optional: true + markdown-wasm: + optional: true + + '@contentlayer/source-files@0.3.4': + resolution: {integrity: sha512-4njyn0OFPu7WY4tAjMxiJgWOKeiHuBOGdQ36EYE03iij/pPPRbiWbL+cmLccYXUFEW58mDwpqROZZm6pnxjRDQ==} + + '@contentlayer/source-remote-files@0.3.4': + resolution: {integrity: sha512-cyiv4sNUySZvR0uAKlM+kSAELzNd2h2QT1R2e41dRKbwOUVxeLfmGiLugr0aVac6Q3xYcD99dbHyR1xWPV+w9w==} + + '@contentlayer/utils@0.3.4': + resolution: {integrity: sha512-ZWWOhbUWYQ2QHoLIlcUnEo7X4ZbwcyFPuzVQWWMkK43BxCveyQtZwBIzfyx54sqVzi0GUmKP8bHzsLQT0QxaLQ==} + peerDependencies: + '@effect-ts/otel-node': '*' + peerDependenciesMeta: + '@effect-ts/core': + optional: true + '@effect-ts/otel': + optional: true + '@effect-ts/otel-node': + optional: true + + '@effect-ts/core@0.60.5': + resolution: {integrity: sha512-qi1WrtJA90XLMnj2hnUszW9Sx4dXP03ZJtCc5DiUBIOhF4Vw7plfb65/bdBySPoC9s7zy995TdUX1XBSxUkl5w==} + + '@effect-ts/otel-exporter-trace-otlp-grpc@0.15.1': + resolution: {integrity: sha512-47gAg0O2pW5Jlo86jfzjdkwL5a7Bzb+Kj5WTmdu4CxYRfWn9ytKjuuYIfsNDW8neuhdKzn+P5wCddgEh0glYyQ==} + peerDependencies: + '@effect-ts/core': ^0.60.2 + '@opentelemetry/api': ^1.4.0 + '@opentelemetry/core': ^1.13.0 + '@opentelemetry/exporter-trace-otlp-grpc': ^0.39.0 + '@opentelemetry/sdk-trace-base': ^1.13.0 + + '@effect-ts/otel-sdk-trace-node@0.15.1': + resolution: {integrity: sha512-a2sF0ylmn8xOJs8fNeT/spJ1gUcsksAJCALxo9WOfuTCMtTwMVtVhCKEPEeQoL7wFqU+JgPkVdP91+FJ/Rkeow==} + peerDependencies: + '@effect-ts/core': ^0.60.2 + '@opentelemetry/api': ^1.4.0 + '@opentelemetry/core': ^1.13.0 + '@opentelemetry/sdk-trace-base': ^1.13.0 + '@opentelemetry/sdk-trace-node': ^1.13.0 + + '@effect-ts/otel@0.15.1': + resolution: {integrity: sha512-AmZJHl7t0+Peh7Yb2+hqn6r9+rd9/UfeA4AMV9h0YGTdOyouyFfD3wzWlxnAUzAQ4Lrod4kC7Noruret4EpqpA==} + peerDependencies: + '@effect-ts/core': ^0.60.2 + '@opentelemetry/api': ^1.4.0 + '@opentelemetry/core': ^1.13.0 + '@opentelemetry/sdk-trace-base': ^1.13.0 + + '@effect-ts/system@0.57.5': + resolution: {integrity: sha512-/crHGujo0xnuHIYNc1VgP0HGJGFSoSqq88JFXe6FmFyXPpWt8Xu39LyLg7rchsxfXFeEdA9CrIZvLV5eswXV5g==} + + '@emnapi/runtime@1.3.1': + resolution: {integrity: sha512-kEBmG8KyqtxJZv+ygbEim+KCGtIq1fC22Ms3S4ziXmYKm8uyoLX0MHONVKwp+9opg390VaKRNt4a7A9NwmpNhw==} + + '@emotion/is-prop-valid@1.3.1': + resolution: {integrity: sha512-/ACwoqx7XQi9knQs/G0qKvv5teDMhD7bXYns9N/wM8ah8iNb8jZ2uNO0YOgiq2o2poIvVtJS2YALasQuMSQ7Kw==} + + '@emotion/memoize@0.9.0': + resolution: {integrity: sha512-30FAj7/EoJ5mwVPOWhAyCX+FPfMDrVecJAM+Iw9NRoSl4BBAQeqj4cApHHUXOVvIPgLVDsCFoz/hGD+5QQD1GQ==} + + '@esbuild-plugins/node-resolve@0.1.4': + resolution: {integrity: sha512-haFQ0qhxEpqtWWY0kx1Y5oE3sMyO1PcoSiWEPrAw6tm/ZOOLXjSs6Q+v1v9eyuVF0nNt50YEvrcrvENmyoMv5g==} + peerDependencies: + esbuild: '*' + + '@esbuild/aix-ppc64@0.25.0': + resolution: {integrity: sha512-O7vun9Sf8DFjH2UtqK8Ku3LkquL9SZL8OLY1T5NZkA34+wG3OQF7cl4Ql8vdNzM6fzBbYfLaiRLIOZ+2FOCgBQ==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [aix] + + '@esbuild/android-arm64@0.25.0': + resolution: {integrity: sha512-grvv8WncGjDSyUBjN9yHXNt+cq0snxXbDxy5pJtzMKGmmpPxeAmAhWxXI+01lU5rwZomDgD3kJwulEnhTRUd6g==} + engines: {node: '>=18'} + cpu: [arm64] + os: [android] + + '@esbuild/android-arm@0.25.0': + resolution: {integrity: sha512-PTyWCYYiU0+1eJKmw21lWtC+d08JDZPQ5g+kFyxP0V+es6VPPSUhM6zk8iImp2jbV6GwjX4pap0JFbUQN65X1g==} + engines: {node: '>=18'} + cpu: [arm] + os: [android] + + '@esbuild/android-x64@0.25.0': + resolution: {integrity: sha512-m/ix7SfKG5buCnxasr52+LI78SQ+wgdENi9CqyCXwjVR2X4Jkz+BpC3le3AoBPYTC9NHklwngVXvbJ9/Akhrfg==} + engines: {node: '>=18'} + cpu: [x64] + os: [android] + + '@esbuild/darwin-arm64@0.25.0': + resolution: {integrity: sha512-mVwdUb5SRkPayVadIOI78K7aAnPamoeFR2bT5nszFUZ9P8UpK4ratOdYbZZXYSqPKMHfS1wdHCJk1P1EZpRdvw==} + engines: {node: '>=18'} + cpu: [arm64] + os: [darwin] + + '@esbuild/darwin-x64@0.25.0': + resolution: {integrity: sha512-DgDaYsPWFTS4S3nWpFcMn/33ZZwAAeAFKNHNa1QN0rI4pUjgqf0f7ONmXf6d22tqTY+H9FNdgeaAa+YIFUn2Rg==} + engines: {node: '>=18'} + cpu: [x64] + os: [darwin] + + '@esbuild/freebsd-arm64@0.25.0': + resolution: {integrity: sha512-VN4ocxy6dxefN1MepBx/iD1dH5K8qNtNe227I0mnTRjry8tj5MRk4zprLEdG8WPyAPb93/e4pSgi1SoHdgOa4w==} + engines: {node: '>=18'} + cpu: [arm64] + os: [freebsd] + + '@esbuild/freebsd-x64@0.25.0': + resolution: {integrity: sha512-mrSgt7lCh07FY+hDD1TxiTyIHyttn6vnjesnPoVDNmDfOmggTLXRv8Id5fNZey1gl/V2dyVK1VXXqVsQIiAk+A==} + engines: {node: '>=18'} + cpu: [x64] + os: [freebsd] + + '@esbuild/linux-arm64@0.25.0': + resolution: {integrity: sha512-9QAQjTWNDM/Vk2bgBl17yWuZxZNQIF0OUUuPZRKoDtqF2k4EtYbpyiG5/Dk7nqeK6kIJWPYldkOcBqjXjrUlmg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [linux] + + '@esbuild/linux-arm@0.25.0': + resolution: {integrity: sha512-vkB3IYj2IDo3g9xX7HqhPYxVkNQe8qTK55fraQyTzTX/fxaDtXiEnavv9geOsonh2Fd2RMB+i5cbhu2zMNWJwg==} + engines: {node: '>=18'} + cpu: [arm] + os: [linux] + + '@esbuild/linux-ia32@0.25.0': + resolution: {integrity: sha512-43ET5bHbphBegyeqLb7I1eYn2P/JYGNmzzdidq/w0T8E2SsYL1U6un2NFROFRg1JZLTzdCoRomg8Rvf9M6W6Gg==} + engines: {node: '>=18'} + cpu: [ia32] + os: [linux] + + '@esbuild/linux-loong64@0.25.0': + resolution: {integrity: sha512-fC95c/xyNFueMhClxJmeRIj2yrSMdDfmqJnyOY4ZqsALkDrrKJfIg5NTMSzVBr5YW1jf+l7/cndBfP3MSDpoHw==} + engines: {node: '>=18'} + cpu: [loong64] + os: [linux] + + '@esbuild/linux-mips64el@0.25.0': + resolution: {integrity: sha512-nkAMFju7KDW73T1DdH7glcyIptm95a7Le8irTQNO/qtkoyypZAnjchQgooFUDQhNAy4iu08N79W4T4pMBwhPwQ==} + engines: {node: '>=18'} + cpu: [mips64el] + os: [linux] + + '@esbuild/linux-ppc64@0.25.0': + resolution: {integrity: sha512-NhyOejdhRGS8Iwv+KKR2zTq2PpysF9XqY+Zk77vQHqNbo/PwZCzB5/h7VGuREZm1fixhs4Q/qWRSi5zmAiO4Fw==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [linux] + + '@esbuild/linux-riscv64@0.25.0': + resolution: {integrity: sha512-5S/rbP5OY+GHLC5qXp1y/Mx//e92L1YDqkiBbO9TQOvuFXM+iDqUNG5XopAnXoRH3FjIUDkeGcY1cgNvnXp/kA==} + engines: {node: '>=18'} + cpu: [riscv64] + os: [linux] + + '@esbuild/linux-s390x@0.25.0': + resolution: {integrity: sha512-XM2BFsEBz0Fw37V0zU4CXfcfuACMrppsMFKdYY2WuTS3yi8O1nFOhil/xhKTmE1nPmVyvQJjJivgDT+xh8pXJA==} + engines: {node: '>=18'} + cpu: [s390x] + os: [linux] + + '@esbuild/linux-x64@0.25.0': + resolution: {integrity: sha512-9yl91rHw/cpwMCNytUDxwj2XjFpxML0y9HAOH9pNVQDpQrBxHy01Dx+vaMu0N1CKa/RzBD2hB4u//nfc+Sd3Cw==} + engines: {node: '>=18'} + cpu: [x64] + os: [linux] + + '@esbuild/netbsd-arm64@0.25.0': + resolution: {integrity: sha512-RuG4PSMPFfrkH6UwCAqBzauBWTygTvb1nxWasEJooGSJ/NwRw7b2HOwyRTQIU97Hq37l3npXoZGYMy3b3xYvPw==} + engines: {node: '>=18'} + cpu: [arm64] + os: [netbsd] + + '@esbuild/netbsd-x64@0.25.0': + resolution: {integrity: sha512-jl+qisSB5jk01N5f7sPCsBENCOlPiS/xptD5yxOx2oqQfyourJwIKLRA2yqWdifj3owQZCL2sn6o08dBzZGQzA==} + engines: {node: '>=18'} + cpu: [x64] + os: [netbsd] + + '@esbuild/openbsd-arm64@0.25.0': + resolution: {integrity: sha512-21sUNbq2r84YE+SJDfaQRvdgznTD8Xc0oc3p3iW/a1EVWeNj/SdUCbm5U0itZPQYRuRTW20fPMWMpcrciH2EJw==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openbsd] + + '@esbuild/openbsd-x64@0.25.0': + resolution: {integrity: sha512-2gwwriSMPcCFRlPlKx3zLQhfN/2WjJ2NSlg5TKLQOJdV0mSxIcYNTMhk3H3ulL/cak+Xj0lY1Ym9ysDV1igceg==} + engines: {node: '>=18'} + cpu: [x64] + os: [openbsd] + + '@esbuild/sunos-x64@0.25.0': + resolution: {integrity: sha512-bxI7ThgLzPrPz484/S9jLlvUAHYMzy6I0XiU1ZMeAEOBcS0VePBFxh1JjTQt3Xiat5b6Oh4x7UC7IwKQKIJRIg==} + engines: {node: '>=18'} + cpu: [x64] + os: [sunos] + + '@esbuild/win32-arm64@0.25.0': + resolution: {integrity: sha512-ZUAc2YK6JW89xTbXvftxdnYy3m4iHIkDtK3CLce8wg8M2L+YZhIvO1DKpxrd0Yr59AeNNkTiic9YLf6FTtXWMw==} + engines: {node: '>=18'} + cpu: [arm64] + os: [win32] + + '@esbuild/win32-ia32@0.25.0': + resolution: {integrity: sha512-eSNxISBu8XweVEWG31/JzjkIGbGIJN/TrRoiSVZwZ6pkC6VX4Im/WV2cz559/TXLcYbcrDN8JtKgd9DJVIo8GA==} + engines: {node: '>=18'} + cpu: [ia32] + os: [win32] + + '@esbuild/win32-x64@0.25.0': + resolution: {integrity: sha512-ZENoHJBxA20C2zFzh6AI4fT6RraMzjYw4xKWemRTRmRVtN9c5DcH9r/f2ihEkMjOW5eGgrwCslG/+Y/3bL+DHQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [win32] + + '@eslint-community/eslint-utils@4.4.1': + resolution: {integrity: sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 - '@eslint-community/regexpp@4.11.0': - resolution: {integrity: sha512-G/M/tIiMrTAxEWRfLfQJMmGNX28IxBg4PBz8XqQhqUHLFI6TL2htpIB1iQCj144V5ee/JaKyT9/WZ0MGZWfA7A==} + '@eslint-community/regexpp@4.12.1': + resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} '@eslint/eslintrc@2.1.4': resolution: {integrity: sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - '@eslint/js@8.57.0': - resolution: {integrity: sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==} + '@eslint/js@8.57.1': + resolution: {integrity: sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - '@floating-ui/core@1.6.4': - resolution: {integrity: sha512-a4IowK4QkXl4SCWTGUR0INAfEOX3wtsYw3rKK5InQEHMGObkR8Xk44qYQD9P4r6HHw0iIfK6GUKECmY8sTkqRA==} + '@fal-works/esbuild-plugin-global-externals@2.1.2': + resolution: {integrity: sha512-cEee/Z+I12mZcFJshKcCqC8tuX5hG3s+d+9nZ3LabqKF1vKdF41B92pJVCBggjAGORAeOzyyDDKrZwIkLffeOQ==} + + '@floating-ui/core@1.6.9': + resolution: {integrity: sha512-uMXCuQ3BItDUbAMhIXw7UPXRfAlOAvZzdK9BWpE60MCn+Svt3aLn9jsPTi/WNGlRUu2uI0v5S7JiIUsbsvh3fw==} - '@floating-ui/dom@1.6.7': - resolution: {integrity: sha512-wmVfPG5o2xnKDU4jx/m4w5qva9FWHcnZ8BvzEe90D/RpwsJaTAVYPEPdQ8sbr/N8zZTAHlZUTQdqg8ZUbzHmng==} + '@floating-ui/dom@1.6.13': + resolution: {integrity: sha512-umqzocjDgNRGTuO7Q8CU32dkHkECqI8ZdMZ5Swb6QAM0t5rnlrN3lGo1hdpscRd3WS8T6DKYK4ephgIH9iRh3w==} - '@floating-ui/react-dom@2.1.1': - resolution: {integrity: sha512-4h84MJt3CHrtG18mGsXuLCHMrug49d7DFkU0RMIyshRveBeyV2hmV/pDaF2Uxtu8kgq5r46llp5E5FQiR0K2Yg==} + '@floating-ui/react-dom@2.1.2': + resolution: {integrity: sha512-06okr5cgPzMNBy+Ycse2A6udMi4bqwW/zgBF/rwjcNqWkyr82Mcg8b0vjX8OJpZFy/FKjJmw6wV7t44kK6kW7A==} peerDependencies: react: '>=16.8.0' react-dom: '>=16.8.0' - '@floating-ui/utils@0.2.4': - resolution: {integrity: sha512-dWO2pw8hhi+WrXq1YJy2yCuWoL20PddgGaqTgVe4cOS9Q6qklXCiA1tJEqX6BEwRNSCP84/afac9hd4MS+zEUA==} + '@floating-ui/utils@0.2.9': + resolution: {integrity: sha512-MDWhGtE+eHw5JW7lq4qhc5yRLS11ERl1c7Z6Xd0a58DozHES6EnNNwUWbMiG4J9Cgj053Bhk8zvlhFYKVhULwg==} + + '@grpc/grpc-js@1.12.6': + resolution: {integrity: sha512-JXUj6PI0oqqzTGvKtzOkxtpsyPRNsrmhh41TtIz/zEB6J+AUiZZ0dxWzcMwO9Ns5rmSPuMdghlTbUuqIM48d3Q==} + engines: {node: '>=12.10.0'} + + '@grpc/proto-loader@0.7.13': + resolution: {integrity: sha512-AiXO/bfe9bmxBjxxtYxFAXGZvMaN5s8kO+jBHAJCON8rJoB5YS/D6X7ZNc6XQkuHNmyl4CYaMI1fJ/Gn27RGGw==} + engines: {node: '>=6'} + hasBin: true - '@humanwhocodes/config-array@0.11.14': - resolution: {integrity: sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==} + '@humanwhocodes/config-array@0.13.0': + resolution: {integrity: sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==} engines: {node: '>=10.10.0'} deprecated: Use @eslint/config-array instead @@ -230,12 +596,117 @@ packages: resolution: {integrity: sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==} deprecated: Use @eslint/object-schema instead + '@img/sharp-darwin-arm64@0.33.5': + resolution: {integrity: sha512-UT4p+iz/2H4twwAoLCqfA9UH5pI6DggwKEGuaPy7nCVQ8ZsiY5PIcrRvD1DzuY3qYL07NtIQcWnBSY/heikIFQ==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [arm64] + os: [darwin] + + '@img/sharp-darwin-x64@0.33.5': + resolution: {integrity: sha512-fyHac4jIc1ANYGRDxtiqelIbdWkIuQaI84Mv45KvGRRxSAa7o7d1ZKAOBaYbnepLC1WqxfpimdeWfvqqSGwR2Q==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [x64] + os: [darwin] + + '@img/sharp-libvips-darwin-arm64@1.0.4': + resolution: {integrity: sha512-XblONe153h0O2zuFfTAbQYAX2JhYmDHeWikp1LM9Hul9gVPjFY427k6dFEcOL72O01QxQsWi761svJ/ev9xEDg==} + cpu: [arm64] + os: [darwin] + + '@img/sharp-libvips-darwin-x64@1.0.4': + resolution: {integrity: sha512-xnGR8YuZYfJGmWPvmlunFaWJsb9T/AO2ykoP3Fz/0X5XV2aoYBPkX6xqCQvUTKKiLddarLaxpzNe+b1hjeWHAQ==} + cpu: [x64] + os: [darwin] + + '@img/sharp-libvips-linux-arm64@1.0.4': + resolution: {integrity: sha512-9B+taZ8DlyyqzZQnoeIvDVR/2F4EbMepXMc/NdVbkzsJbzkUjhXv/70GQJ7tdLA4YJgNP25zukcxpX2/SueNrA==} + cpu: [arm64] + os: [linux] + + '@img/sharp-libvips-linux-arm@1.0.5': + resolution: {integrity: sha512-gvcC4ACAOPRNATg/ov8/MnbxFDJqf/pDePbBnuBDcjsI8PssmjoKMAz4LtLaVi+OnSb5FK/yIOamqDwGmXW32g==} + cpu: [arm] + os: [linux] + + '@img/sharp-libvips-linux-s390x@1.0.4': + resolution: {integrity: sha512-u7Wz6ntiSSgGSGcjZ55im6uvTrOxSIS8/dgoVMoiGE9I6JAfU50yH5BoDlYA1tcuGS7g/QNtetJnxA6QEsCVTA==} + cpu: [s390x] + os: [linux] + + '@img/sharp-libvips-linux-x64@1.0.4': + resolution: {integrity: sha512-MmWmQ3iPFZr0Iev+BAgVMb3ZyC4KeFc3jFxnNbEPas60e1cIfevbtuyf9nDGIzOaW9PdnDciJm+wFFaTlj5xYw==} + cpu: [x64] + os: [linux] + + '@img/sharp-libvips-linuxmusl-arm64@1.0.4': + resolution: {integrity: sha512-9Ti+BbTYDcsbp4wfYib8Ctm1ilkugkA/uscUn6UXK1ldpC1JjiXbLfFZtRlBhjPZ5o1NCLiDbg8fhUPKStHoTA==} + cpu: [arm64] + os: [linux] + + '@img/sharp-libvips-linuxmusl-x64@1.0.4': + resolution: {integrity: sha512-viYN1KX9m+/hGkJtvYYp+CCLgnJXwiQB39damAO7WMdKWlIhmYTfHjwSbQeUK/20vY154mwezd9HflVFM1wVSw==} + cpu: [x64] + os: [linux] + + '@img/sharp-linux-arm64@0.33.5': + resolution: {integrity: sha512-JMVv+AMRyGOHtO1RFBiJy/MBsgz0x4AWrT6QoEVVTyh1E39TrCUpTRI7mx9VksGX4awWASxqCYLCV4wBZHAYxA==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [arm64] + os: [linux] + + '@img/sharp-linux-arm@0.33.5': + resolution: {integrity: sha512-JTS1eldqZbJxjvKaAkxhZmBqPRGmxgu+qFKSInv8moZ2AmT5Yib3EQ1c6gp493HvrvV8QgdOXdyaIBrhvFhBMQ==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [arm] + os: [linux] + + '@img/sharp-linux-s390x@0.33.5': + resolution: {integrity: sha512-y/5PCd+mP4CA/sPDKl2961b+C9d+vPAveS33s6Z3zfASk2j5upL6fXVPZi7ztePZ5CuH+1kW8JtvxgbuXHRa4Q==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [s390x] + os: [linux] + + '@img/sharp-linux-x64@0.33.5': + resolution: {integrity: sha512-opC+Ok5pRNAzuvq1AG0ar+1owsu842/Ab+4qvU879ippJBHvyY5n2mxF1izXqkPYlGuP/M556uh53jRLJmzTWA==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [x64] + os: [linux] + + '@img/sharp-linuxmusl-arm64@0.33.5': + resolution: {integrity: sha512-XrHMZwGQGvJg2V/oRSUfSAfjfPxO+4DkiRh6p2AFjLQztWUuY/o8Mq0eMQVIY7HJ1CDQUJlxGGZRw1a5bqmd1g==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [arm64] + os: [linux] + + '@img/sharp-linuxmusl-x64@0.33.5': + resolution: {integrity: sha512-WT+d/cgqKkkKySYmqoZ8y3pxx7lx9vVejxW/W4DOFMYVSkErR+w7mf2u8m/y4+xHe7yY9DAXQMWQhpnMuFfScw==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [x64] + os: [linux] + + '@img/sharp-wasm32@0.33.5': + resolution: {integrity: sha512-ykUW4LVGaMcU9lu9thv85CbRMAwfeadCJHRsg2GmeRa/cJxsVY9Rbd57JcMxBkKHag5U/x7TSBpScF4U8ElVzg==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [wasm32] + + '@img/sharp-win32-ia32@0.33.5': + resolution: {integrity: sha512-T36PblLaTwuVJ/zw/LaH0PdZkRz5rd3SmMHX8GSmR7vtNSP5Z6bQkExdSK7xGWyxLw4sUknBuugTelgw2faBbQ==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [ia32] + os: [win32] + + '@img/sharp-win32-x64@0.33.5': + resolution: {integrity: sha512-MpY/o8/8kj+EcnxwvrP4aTJSWw/aZ7JIGR4aBeZkZw5B7/Jn+tY9/VNwtcoGmdT7GfggGIU4kygOMSbYnOrAbg==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [x64] + os: [win32] + '@isaacs/cliui@8.0.2': resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} engines: {node: '>=12'} - '@jridgewell/gen-mapping@0.3.5': - resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==} + '@jridgewell/gen-mapping@0.3.8': + resolution: {integrity: sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==} engines: {node: '>=6.0.0'} '@jridgewell/resolve-uri@3.1.2': @@ -246,12 +717,27 @@ packages: resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} engines: {node: '>=6.0.0'} - '@jridgewell/sourcemap-codec@1.4.15': - resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} + '@jridgewell/sourcemap-codec@1.5.0': + resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} '@jridgewell/trace-mapping@0.3.25': resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} + '@js-sdsl/ordered-map@4.4.2': + resolution: {integrity: sha512-iUKgm52T8HOE/makSxjqoWhe95ZJA1/G1sYsGev2JDKUSS14KAgg1LHb+Ba+IPow0xflbnSkOsZcO08C7w1gYw==} + + '@js-temporal/polyfill@0.4.4': + resolution: {integrity: sha512-2X6bvghJ/JAoZO52lbgyAPFj8uCflhTo2g7nkFzEQdXd/D8rEeD4HtmTEpmtGCva260fcd66YNXBOYdnmHqSOg==} + engines: {node: '>=12'} + + '@mdx-js/esbuild@2.3.0': + resolution: {integrity: sha512-r/vsqsM0E+U4Wr0DK+0EfmABE/eg+8ITW4DjvYdh3ve/tK2safaqHArNnaqbOk1DjYGrhxtoXoGaM3BY8fGBTA==} + peerDependencies: + esbuild: '>=0.11.0' + + '@mdx-js/mdx@2.3.0': + resolution: {integrity: sha512-jLuwRlz8DQfQNiUCJR50Y09CGPq3fLtmtUQfVrj79E0JWu3dvsVcxVIcfhR5h0iXu+/z++zDrYeiJqifRynJkA==} + '@next/env@14.2.4': resolution: {integrity: sha512-3EtkY5VDkuV2+lNmKlbkibIJxcO4oIHEhBWne6PaAp+76J9KoSsGvNikp6ivzAT8dhhBMYrm6op2pS1ApG0Hzg==} @@ -275,28 +761,24 @@ packages: engines: {node: '>= 10'} cpu: [arm64] os: [linux] - libc: [glibc] '@next/swc-linux-arm64-musl@14.2.4': resolution: {integrity: sha512-Alv8/XGSs/ytwQcbCHwze1HmiIkIVhDHYLjczSVrf0Wi2MvKn/blt7+S6FJitj3yTlMwMxII1gIJ9WepI4aZ/A==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] - libc: [musl] '@next/swc-linux-x64-gnu@14.2.4': resolution: {integrity: sha512-ze0ShQDBPCqxLImzw4sCdfnB3lRmN3qGMB2GWDRlq5Wqy4G36pxtNOo2usu/Nm9+V2Rh/QQnrRc2l94kYFXO6Q==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - libc: [glibc] '@next/swc-linux-x64-musl@14.2.4': resolution: {integrity: sha512-8dwC0UJoc6fC7PX70csdaznVMNr16hQrTDAMPvLPloazlcaWfdPogq+UpZX6Drqb1OBlwowz8iG7WR0Tzk/diQ==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - libc: [musl] '@next/swc-win32-arm64-msvc@14.2.4': resolution: {integrity: sha512-jxyg67NbEWkDyvM+O8UDbPAyYRZqGLQDTPwvrBBeOSyVWW/jFQkQKQ70JDqDSYg1ZDdl+E3nkbFbq8xM8E9x8A==} @@ -328,6 +810,127 @@ packages: resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} engines: {node: '>= 8'} + '@nolyfill/is-core-module@1.0.39': + resolution: {integrity: sha512-nn5ozdjYQpUCZlWGuxcJY/KpxkWQs4DcbMCmKojjyrYDEAGy4Ce19NN4v5MduafTwJlbKc99UA8YhSVqq9yPZA==} + engines: {node: '>=12.4.0'} + + '@opentelemetry/api-logs@0.39.1': + resolution: {integrity: sha512-9BJ8lMcOzEN0lu+Qji801y707oFO4xT3db6cosPvl+k7ItUHKN5ofWqtSbM9gbt1H4JJ/4/2TVrqI9Rq7hNv6Q==} + engines: {node: '>=14'} + + '@opentelemetry/api@1.9.0': + resolution: {integrity: sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg==} + engines: {node: '>=8.0.0'} + + '@opentelemetry/context-async-hooks@1.30.1': + resolution: {integrity: sha512-s5vvxXPVdjqS3kTLKMeBMvop9hbWkwzBpu+mUO2M7sZtlkyDJGwFe33wRKnbaYDo8ExRVBIIdwIGrqpxHuKttA==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': '>=1.0.0 <1.10.0' + + '@opentelemetry/core@1.13.0': + resolution: {integrity: sha512-2dBX3Sj99H96uwJKvc2w9NOiNgbvAO6mOFJFramNkKfS9O4Um+VWgpnlAazoYjT6kUJ1MP70KQ5ngD4ed+4NUw==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': '>=1.0.0 <1.5.0' + + '@opentelemetry/core@1.30.1': + resolution: {integrity: sha512-OOCM2C/QIURhJMuKaekP3TRBxBKxG/TWWA0TL2J6nXUtDnuCtccy49LUJF8xPFXMX+0LMcxFpCo8M9cGY1W6rQ==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': '>=1.0.0 <1.10.0' + + '@opentelemetry/exporter-trace-otlp-grpc@0.39.1': + resolution: {integrity: sha512-l5RhLKx6U+yuLhMrtgavTDthX50E1mZM3/SSySC7OPZiArFHV/b/9x9jxAzrOgIQUDxyj4N0V9aLKSA2t7Qzxg==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.0.0 + + '@opentelemetry/otlp-exporter-base@0.39.1': + resolution: {integrity: sha512-Pv5X8fbi6jD/RJBePyn7MnCSuE6MbPB6dl+7YYBWJ5RcMGYMwvLXjd4h2jWsPV2TSUg38H/RoSP0aXvQ06Y7iw==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.0.0 + + '@opentelemetry/otlp-grpc-exporter-base@0.39.1': + resolution: {integrity: sha512-u3ErFRQqQFKjjIMuwLWxz/tLPYInfmiAmSy//fGSCzCh2ZdJgqQjMOAxBgqFtCF2xFL+OmMhyuC2ThMzceGRWA==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.0.0 + + '@opentelemetry/otlp-transformer@0.39.1': + resolution: {integrity: sha512-0hgVnXXz5efI382B/24NxD4b6Zxlh7nxCdJkxkdmQMbn0yRiwoq/ZT+QG8eUL6JNzsBAV1WJlF5aJNsL8skHvw==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': '>=1.3.0 <1.5.0' + + '@opentelemetry/propagator-b3@1.30.1': + resolution: {integrity: sha512-oATwWWDIJzybAZ4pO76ATN5N6FFbOA1otibAVlS8v90B4S1wClnhRUk7K+2CHAwN1JKYuj4jh/lpCEG5BAqFuQ==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': '>=1.0.0 <1.10.0' + + '@opentelemetry/propagator-jaeger@1.30.1': + resolution: {integrity: sha512-Pj/BfnYEKIOImirH76M4hDaBSx6HyZ2CXUqk+Kj02m6BB80c/yo4BdWkn/1gDFfU+YPY+bPR2U0DKBfdxCKwmg==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': '>=1.0.0 <1.10.0' + + '@opentelemetry/resources@1.13.0': + resolution: {integrity: sha512-euqjOkiN6xhjE//0vQYGvbStxoD/WWQRhDiO0OTLlnLBO9Yw2Gd/VoSx2H+svsebjzYk5OxLuREBmcdw6rbUNg==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': '>=1.0.0 <1.5.0' + + '@opentelemetry/resources@1.30.1': + resolution: {integrity: sha512-5UxZqiAgLYGFjS4s9qm5mBVo433u+dSPUFWVWXmLAD4wB65oMCoXaJP1KJa9DIYYMeHu3z4BZcStG3LC593cWA==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': '>=1.0.0 <1.10.0' + + '@opentelemetry/sdk-logs@0.39.1': + resolution: {integrity: sha512-/gmgKfZ1ZVFporKuwsewqIyvaUIGpv76JZ7lBpHQQPb37IMpaXO6pdqFI4ebHAWfNIm3akMyhmdtzivcgF3lgw==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': '>=1.4.0 <1.5.0' + '@opentelemetry/api-logs': '>=0.38.0' + + '@opentelemetry/sdk-metrics@1.13.0': + resolution: {integrity: sha512-MOjZX6AnSOqLliCcZUrb+DQKjAWXBiGeICGbHAGe5w0BB18PJIeIo995lO5JSaFfHpmUMgJButTPfJJD27W3Vg==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': '>=1.3.0 <1.5.0' + + '@opentelemetry/sdk-trace-base@1.13.0': + resolution: {integrity: sha512-moTiQtc0uPR1hQLt6gLDJH9IIkeBhgRb71OKjNHZPE1VF45fHtD6nBDi5J/DkTHTwYP5X3kBJLa3xN7ub6J4eg==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': '>=1.0.0 <1.5.0' + + '@opentelemetry/sdk-trace-base@1.30.1': + resolution: {integrity: sha512-jVPgBbH1gCy2Lb7X0AVQ8XAfgg0pJ4nvl8/IiQA6nxOsPvS+0zMJaFSs2ltXe0J6C8dqjcnpyqINDJmU30+uOg==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': '>=1.0.0 <1.10.0' + + '@opentelemetry/sdk-trace-node@1.30.1': + resolution: {integrity: sha512-cBjYOINt1JxXdpw1e5MlHmFRc5fgj4GW/86vsKFxJCJ8AL4PdVtYH41gWwl4qd4uQjqEL1oJVrXkSy5cnduAnQ==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': '>=1.0.0 <1.10.0' + + '@opentelemetry/semantic-conventions@1.13.0': + resolution: {integrity: sha512-LMGqfSZkaMQXqewO0o1wvWr/2fQdCh4a3Sqlxka/UsJCe0cfLulh6x2aqnKLnsrSGiCq5rSCwvINd152i0nCqw==} + engines: {node: '>=14'} + + '@opentelemetry/semantic-conventions@1.28.0': + resolution: {integrity: sha512-lp4qAiMTD4sNWW4DbKLBkfiMZ4jbAboJIGOQr5DvciMRI494OapieI9qiODpOt0XBr1LjIDy1xAGAnVs5supTA==} + engines: {node: '>=14'} + + '@opentelemetry/semantic-conventions@1.29.0': + resolution: {integrity: sha512-KZ1JsXcP2pqunfsJBNk+py6AJ5R6ZJ3yvM5Lhhf93rHPHvdDzgfMYPS4F7GNO3j/MVDCtfbttrkcpu7sl0Wu/Q==} + engines: {node: '>=14'} + '@pkgjs/parseargs@0.11.0': resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} engines: {node: '>=14'} @@ -336,11 +939,54 @@ packages: resolution: {integrity: sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==} engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} - '@radix-ui/primitive@1.1.0': - resolution: {integrity: sha512-4Z8dn6Upk0qk4P74xBhZ6Hd/w0mPEzOOLxy4xiPXOXqjF7jZS0VAKk7/x/H6FyY2zCkYJqePf1G5KmkmNJ4RBA==} + '@protobufjs/aspromise@1.1.2': + resolution: {integrity: sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==} + + '@protobufjs/base64@1.1.2': + resolution: {integrity: sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==} + + '@protobufjs/codegen@2.0.4': + resolution: {integrity: sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==} + + '@protobufjs/eventemitter@1.1.0': + resolution: {integrity: sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==} + + '@protobufjs/fetch@1.1.0': + resolution: {integrity: sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==} + + '@protobufjs/float@1.0.2': + resolution: {integrity: sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==} + + '@protobufjs/inquire@1.1.0': + resolution: {integrity: sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==} + + '@protobufjs/path@1.1.2': + resolution: {integrity: sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==} + + '@protobufjs/pool@1.1.0': + resolution: {integrity: sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==} + + '@protobufjs/utf8@1.1.0': + resolution: {integrity: sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==} + + '@radix-ui/primitive@1.1.1': + resolution: {integrity: sha512-SJ31y+Q/zAyShtXJc8x83i9TYdbAfHZ++tUZnvjJJqFjzsdUnKsxPL6IEtBlxKkU7yzer//GQtZSV4GbldL3YA==} + + '@radix-ui/react-arrow@1.1.2': + resolution: {integrity: sha512-G+KcpzXHq24iH0uGG/pF8LyzpFJYGD4RfLjCIBfGdSLXvjLHST31RUiRVrupIBMvIppMgSzQ6l66iAxl03tdlg==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true - '@radix-ui/react-arrow@1.1.0': - resolution: {integrity: sha512-FmlW1rCg7hBpEBwFbjHwCW6AmWLQM6g/v0Sn8XbP9NvmSZ2San1FpQeyPtufzOMSIx7Y4dzjlHoifhp+7NkZhw==} + '@radix-ui/react-aspect-ratio@1.1.2': + resolution: {integrity: sha512-TaJxYoCpxJ7vfEkv2PTNox/6zzmpKXT6ewvCuf2tTOIVN45/Jahhlld29Yw4pciOXS2Xq91/rSGEdmEnUWZCqA==} peerDependencies: '@types/react': '*' '@types/react-dom': '*' @@ -352,8 +998,8 @@ packages: '@types/react-dom': optional: true - '@radix-ui/react-collection@1.1.0': - resolution: {integrity: sha512-GZsZslMJEyo1VKm5L1ZJY8tGDxZNPAoUeQUIbKeJfoi7Q4kmig5AsgLMYYuyYbfjd8fBmFORAIwYAkXMnXZgZw==} + '@radix-ui/react-collection@1.1.2': + resolution: {integrity: sha512-9z54IEKRxIa9VityapoEYMuByaG42iSy1ZXlY2KcuLSEtq8x4987/N6m15ppoMffgZX72gER2uHe1D9Y6Unlcw==} peerDependencies: '@types/react': '*' '@types/react-dom': '*' @@ -365,8 +1011,8 @@ packages: '@types/react-dom': optional: true - '@radix-ui/react-compose-refs@1.1.0': - resolution: {integrity: sha512-b4inOtiaOnYf9KWyO3jAeeCG6FeyfY6ldiEPanbUjWd+xIk5wZeHa8yVwmrJ2vderhu/BQvzCrJI0lHd+wIiqw==} + '@radix-ui/react-compose-refs@1.1.1': + resolution: {integrity: sha512-Y9VzoRDSJtgFMUCoiZBDVo084VQ5hfpXxVE+NgkdNsjiDBByiImMZKKhxMwCbdHvhlENG6a833CbFkOQvTricw==} peerDependencies: '@types/react': '*' react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc @@ -374,8 +1020,8 @@ packages: '@types/react': optional: true - '@radix-ui/react-context@1.1.0': - resolution: {integrity: sha512-OKrckBy+sMEgYM/sMmqmErVn0kZqrHPJze+Ql3DzYsDDp0hl0L62nx/2122/Bvps1qz645jlcu2tD9lrRSdf8A==} + '@radix-ui/react-context@1.1.1': + resolution: {integrity: sha512-UASk9zi+crv9WteK/NU4PLvOoL3OuE6BWVKNF6hPRBtYBDXQ2u5iu3O59zUlJiTVvkyuycnqrztsHVJwcK9K+Q==} peerDependencies: '@types/react': '*' react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc @@ -383,6 +1029,19 @@ packages: '@types/react': optional: true + '@radix-ui/react-dialog@1.1.6': + resolution: {integrity: sha512-/IVhJV5AceX620DUJ4uYVMymzsipdKBzo3edo+omeskCKGm9FRHM0ebIdbPnlQVJqyuHbuBltQUOG2mOTq2IYw==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + '@radix-ui/react-direction@1.1.0': resolution: {integrity: sha512-BUuBvgThEiAXh2DWu93XsT+a3aWrGqolGlqqw5VU1kG7p/ZH2cuDlM1sRLNnY3QcBS69UIz2mcKhMxDsdewhjg==} peerDependencies: @@ -392,8 +1051,8 @@ packages: '@types/react': optional: true - '@radix-ui/react-dismissable-layer@1.1.0': - resolution: {integrity: sha512-/UovfmmXGptwGcBQawLzvn2jOfM0t4z3/uKffoBlj724+n3FvBbZ7M0aaBOmkp6pqFYpO4yx8tSVJjx3Fl2jig==} + '@radix-ui/react-dismissable-layer@1.1.5': + resolution: {integrity: sha512-E4TywXY6UsXNRhFrECa5HAvE5/4BFcGyfTyK36gP+pAW1ed7UTK4vKwdr53gAJYwqbfCWC6ATvJa3J3R/9+Qrg==} peerDependencies: '@types/react': '*' '@types/react-dom': '*' @@ -405,8 +1064,8 @@ packages: '@types/react-dom': optional: true - '@radix-ui/react-dropdown-menu@2.1.1': - resolution: {integrity: sha512-y8E+x9fBq9qvteD2Zwa4397pUVhYsh9iq44b5RD5qu1GMJWBCBuVg1hMyItbc6+zH00TxGRqd9Iot4wzf3OoBQ==} + '@radix-ui/react-dropdown-menu@2.1.6': + resolution: {integrity: sha512-no3X7V5fD487wab/ZYSHXq3H37u4NVeLDKI/Ks724X/eEFSSEFYZxWgsIlr1UBeEyDaM29HM5x9p1Nv8DuTYPA==} peerDependencies: '@types/react': '*' '@types/react-dom': '*' @@ -418,8 +1077,8 @@ packages: '@types/react-dom': optional: true - '@radix-ui/react-focus-guards@1.1.0': - resolution: {integrity: sha512-w6XZNUPVv6xCpZUqb/yN9DL6auvpGX3C/ee6Hdi16v2UUy25HV2Q5bcflsiDyT/g5RwbPQ/GIT1vLkeRb+ITBw==} + '@radix-ui/react-focus-guards@1.1.1': + resolution: {integrity: sha512-pSIwfrT1a6sIoDASCSpFwOasEwKTZWDw/iBdtnqKO7v6FeOzYJ7U53cPzYFVR3geGGXgVHaH+CdngrrAzqUGxg==} peerDependencies: '@types/react': '*' react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc @@ -427,8 +1086,8 @@ packages: '@types/react': optional: true - '@radix-ui/react-focus-scope@1.1.0': - resolution: {integrity: sha512-200UD8zylvEyL8Bx+z76RJnASR2gRMuxlgFCPAe/Q/679a/r0eK3MBVYMb7vZODZcffZBdob1EGnky78xmVvcA==} + '@radix-ui/react-focus-scope@1.1.2': + resolution: {integrity: sha512-zxwE80FCU7lcXUGWkdt6XpTTCKPitG1XKOwViTxHVKIJhZl9MvIl2dVHeZENCWD9+EdWv05wlaEkRXUykU27RA==} peerDependencies: '@types/react': '*' '@types/react-dom': '*' @@ -440,10 +1099,23 @@ packages: '@types/react-dom': optional: true - '@radix-ui/react-icons@1.3.0': - resolution: {integrity: sha512-jQxj/0LKgp+j9BiTXz3O3sgs26RNet2iLWmsPyRz2SIcR4q/4SbazXfnYwbAr+vLYKSfc7qxzyGQA1HLlYiuNw==} + '@radix-ui/react-hover-card@1.1.6': + resolution: {integrity: sha512-E4ozl35jq0VRlrdc4dhHrNSV0JqBb4Jy73WAhBEK7JoYnQ83ED5r0Rb/XdVKw89ReAJN38N492BAPBZQ57VmqQ==} peerDependencies: - react: ^16.x || ^17.x || ^18.x + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-icons@1.3.2': + resolution: {integrity: sha512-fyQIhGDhzfc9pK2kH6Pl9c4BDJGfMkPqkyIgYDthyNYoNg3wVhoJMMh19WS4Up/1KMPFVpNsT2q3WmXn2N1m6g==} + peerDependencies: + react: ^16.x || ^17.x || ^18.x || ^19.0.0 || ^19.0.0-rc '@radix-ui/react-id@1.1.0': resolution: {integrity: sha512-EJUrI8yYh7WOjNOqpoJaf1jlFIH2LvtgAl+YcFqNCa+4hj64ZXmPkAKOFs/ukjz3byN6bdb/AVUqHkI8/uWWMA==} @@ -454,8 +1126,21 @@ packages: '@types/react': optional: true - '@radix-ui/react-menu@2.1.1': - resolution: {integrity: sha512-oa3mXRRVjHi6DZu/ghuzdylyjaMXLymx83irM7hTxutQbD+7IhPKdMdRHD26Rm+kHRrWcrUkkRPv5pd47a2xFQ==} + '@radix-ui/react-menu@2.1.6': + resolution: {integrity: sha512-tBBb5CXDJW3t2mo9WlO7r6GTmWV0F0uzHZVFmlRmYpiSK1CDU5IKojP1pm7oknpBOrFZx/YgBRW9oorPO2S/Lg==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-navigation-menu@1.2.5': + resolution: {integrity: sha512-myMHHQUZ3ZLTi8W381/Vu43Ia0NqakkQZ2vzynMmTUtQQ9kNkjzhOwkZC9TAM5R07OZUVIQyHC06f/9JZJpvvA==} peerDependencies: '@types/react': '*' '@types/react-dom': '*' @@ -467,8 +1152,8 @@ packages: '@types/react-dom': optional: true - '@radix-ui/react-popper@1.2.0': - resolution: {integrity: sha512-ZnRMshKF43aBxVWPWvbj21+7TQCvhuULWJ4gNIKYpRlQt5xGRhLx66tMp8pya2UkGHTSlhpXwmjqltDYHhw7Vg==} + '@radix-ui/react-popover@1.1.6': + resolution: {integrity: sha512-NQouW0x4/GnkFJ/pRqsIS3rM/k97VzKnVb2jB7Gq7VEGPy5g7uNV1ykySFt7eWSp3i2uSGFwaJcvIRJBAHmmFg==} peerDependencies: '@types/react': '*' '@types/react-dom': '*' @@ -480,8 +1165,8 @@ packages: '@types/react-dom': optional: true - '@radix-ui/react-portal@1.1.1': - resolution: {integrity: sha512-A3UtLk85UtqhzFqtoC8Q0KvR2GbXF3mtPgACSazajqq6A41mEQgo53iPzY4i6BwDxlIFqWIhiQ2G729n+2aw/g==} + '@radix-ui/react-popper@1.2.2': + resolution: {integrity: sha512-Rvqc3nOpwseCyj/rgjlJDYAgyfw7OC1tTkKn2ivhaMGcYt8FSBlahHOZak2i3QwkRXUXgGgzeEe2RuqeEHuHgA==} peerDependencies: '@types/react': '*' '@types/react-dom': '*' @@ -493,8 +1178,8 @@ packages: '@types/react-dom': optional: true - '@radix-ui/react-presence@1.1.0': - resolution: {integrity: sha512-Gq6wuRN/asf9H/E/VzdKoUtT8GC9PQc9z40/vEr0VCJ4u5XvvhWIrSsCB6vD2/cH7ugTdSfYq9fLJCcM00acrQ==} + '@radix-ui/react-portal@1.1.4': + resolution: {integrity: sha512-sn2O9k1rPFYVyKd5LAJfo96JlSGVFpa1fS6UuBJfrZadudiw5tAmru+n1x7aMRQ84qDM71Zh1+SzK5QwU0tJfA==} peerDependencies: '@types/react': '*' '@types/react-dom': '*' @@ -506,8 +1191,8 @@ packages: '@types/react-dom': optional: true - '@radix-ui/react-primitive@2.0.0': - resolution: {integrity: sha512-ZSpFm0/uHa8zTvKBDjLFWLo8dkr4MBsiDLz0g3gMUwqgLHz9rTaRRGYDgvZPtBJgYCBKXkS9fzmoySgr8CO6Cw==} + '@radix-ui/react-presence@1.1.2': + resolution: {integrity: sha512-18TFr80t5EVgL9x1SwF/YGtfG+l0BS0PRAlCWBDoBEiDQjeKgnNZRVJp/oVBl24sr3Gbfwc/Qpj4OcWTQMsAEg==} peerDependencies: '@types/react': '*' '@types/react-dom': '*' @@ -519,8 +1204,8 @@ packages: '@types/react-dom': optional: true - '@radix-ui/react-roving-focus@1.1.0': - resolution: {integrity: sha512-EA6AMGeq9AEeQDeSH0aZgG198qkfHSbvWTf1HvoDmOB5bBG/qTxjYMWUKMnYiV6J/iP/J8MEFSuB2zRU2n7ODA==} + '@radix-ui/react-primitive@2.0.2': + resolution: {integrity: sha512-Ec/0d38EIuvDF+GZjcMU/Ze6MxntVJYO/fRlCPhCaVUyPY9WTalHJw54tp9sXeJo3tlShWpy41vQRgLRGOuz+w==} peerDependencies: '@types/react': '*' '@types/react-dom': '*' @@ -532,14 +1217,79 @@ packages: '@types/react-dom': optional: true - '@radix-ui/react-slot@1.1.0': - resolution: {integrity: sha512-FUCf5XMfmW4dtYl69pdS4DbxKy8nj4M7SafBgPllysxmdachynNflAdp/gCsnYWNDnge6tI9onzMp5ARYc1KNw==} + '@radix-ui/react-roving-focus@1.1.2': + resolution: {integrity: sha512-zgMQWkNO169GtGqRvYrzb0Zf8NhMHS2DuEB/TiEmVnpr5OqPU3i8lfbxaAmC2J/KYuIQxyoQQ6DxepyXp61/xw==} peerDependencies: '@types/react': '*' + '@types/react-dom': '*' react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: '@types/react': optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-separator@1.1.2': + resolution: {integrity: sha512-oZfHcaAp2Y6KFBX6I5P1u7CQoy4lheCGiYj+pGFrHy8E/VNRb5E39TkTr3JrV520csPBTZjkuKFdEsjS5EUNKQ==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-slot@1.1.2': + resolution: {integrity: sha512-YAKxaiGsSQJ38VzKH86/BPRC4rh+b1Jpa+JneA5LRE7skmLPNAyeG8kPJj/oo4STLvlrs8vkf/iYyc3A5stYCQ==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-switch@1.1.3': + resolution: {integrity: sha512-1nc+vjEOQkJVsJtWPSiISGT6OKm4SiOdjMo+/icLxo2G4vxz1GntC5MzfL4v8ey9OEfw787QCD1y3mUv0NiFEQ==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-toast@1.2.6': + resolution: {integrity: sha512-gN4dpuIVKEgpLn1z5FhzT9mYRUitbfZq9XqN/7kkBMUgFTzTG8x/KszWJugJXHcwxckY8xcKDZPz7kG3o6DsUA==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-tooltip@1.1.8': + resolution: {integrity: sha512-YAA2cu48EkJZdAMHC0dqo9kialOcRStbtiY4nJPaht7Ptrhcvpo+eDChaM6BIs8kL6a8Z5l5poiqLnXcNduOkA==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true '@radix-ui/react-use-callback-ref@1.1.0': resolution: {integrity: sha512-CasTfvsy+frcFkbXtSJ2Zu9JHpN8TYKxkgJGWbjiZhFivxaeW7rMeZt7QELGVLaYVfFMsKHjb7Ak0nMEe+2Vfw==} @@ -577,6 +1327,15 @@ packages: '@types/react': optional: true + '@radix-ui/react-use-previous@1.1.0': + resolution: {integrity: sha512-Z/e78qg2YFnnXcW88A4JmTtm4ADckLno6F7OXotmkQfeuCVaKuYzqAATPhVzl3delXE7CxIV8shofPn3jPc5Og==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@radix-ui/react-use-rect@1.1.0': resolution: {integrity: sha512-0Fmkebhr6PiseyZlYAOtLS+nb7jLmpqTrJyv61Pe68MKYW6OWdRE2kI70TaYY27u7H0lajqM3hSMMLFq18Z7nQ==} peerDependencies: @@ -595,11 +1354,45 @@ packages: '@types/react': optional: true + '@radix-ui/react-visually-hidden@1.1.2': + resolution: {integrity: sha512-1SzA4ns2M1aRlvxErqhLHsBHoS5eI5UUcI2awAMgGUp4LoaoWOKYmvqDY2s/tltuPkh3Yk77YF/r3IRj+Amx4Q==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + '@radix-ui/rect@1.1.0': resolution: {integrity: sha512-A9+lCBZoaMJlVKcRBz2YByCG+Cp2t6nAnMnNba+XiWxnj6r4JUFqfsgwocMBZU9LPtdxC6wB56ySYpc7LQIoJg==} - '@rushstack/eslint-patch@1.10.3': - resolution: {integrity: sha512-qC/xYId4NMebE6w/V33Fh9gWxLgURiNYgVNObbJl2LZv0GUUItCcCqC5axQSwRaAgaxl2mELq1rMzlswaQ0Zxg==} + '@rtsao/scc@1.1.0': + resolution: {integrity: sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==} + + '@rushstack/eslint-patch@1.10.5': + resolution: {integrity: sha512-kkKUDVlII2DQiKy7UstOR1ErJP8kUKAQ4oa+SQtM0K+lPdmmjj0YnnxBgtTVYH7mUKtbsxeFC9y0AmK7Yb78/A==} + + '@sindresorhus/merge-streams@2.3.0': + resolution: {integrity: sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg==} + engines: {node: '>=18'} + + '@splinetool/react-spline@4.0.0': + resolution: {integrity: sha512-FqrV7/K2q998Y0t83QUauQxsifKWAg9CFZoSb64qRuH7IfHkDs5/OgU1ACkg0aTgsEPtFlH+kATQ+8X6MrizHQ==} + peerDependencies: + '@splinetool/runtime': '*' + next: '>=14.2.0' + react: '*' + react-dom: '*' + peerDependenciesMeta: + next: + optional: true + + '@splinetool/runtime@1.9.63': + resolution: {integrity: sha512-thCIUQRpmQs4s/j498g2JJM3ph0KY8silB3fqGSvuOEXfmL5Ach9Iz16YmQFO3+0dMbkucTks54J6aWVG3sTIA==} '@swc/counter@0.1.3': resolution: {integrity: sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==} @@ -607,26 +1400,89 @@ packages: '@swc/helpers@0.5.5': resolution: {integrity: sha512-KGYxvIOXcceOAbEk4bi/dVLEK9z8sZ0uBB3Il5b1rhfClSpcX0yfRO0KmTkqR2cnQDymwLB+25ZyMzICg/cm/A==} - '@types/conventional-commits-parser@5.0.0': - resolution: {integrity: sha512-loB369iXNmAZglwWATL+WRe+CRMmmBPtpolYzIebFaX4YA3x+BEfLqhUAV9WanycKI3TG1IMr5bMJDajDKLlUQ==} + '@tailwindcss/forms@0.5.10': + resolution: {integrity: sha512-utI1ONF6uf/pPNO68kmN1b8rEwNXv3czukalo8VtJH8ksIkZXr3Q3VYudZLkCsDd4Wku120uF02hYK25XGPorw==} + peerDependencies: + tailwindcss: '>=3.0.0 || >= 3.0.0-alpha.1 || >= 4.0.0-alpha.20 || >= 4.0.0-beta.1' + + '@tailwindcss/typography@0.5.16': + resolution: {integrity: sha512-0wDLwCVF5V3x3b1SGXPCDcdsbDHMBe+lkFzBRaHeLvNi+nrrnZ1lA18u+OTWO8iSWU2GxUOCvlXtDuqftc1oiA==} + peerDependencies: + tailwindcss: '>=3.0.0 || insiders || >=4.0.0-alpha.20 || >=4.0.0-beta.1' + + '@types/acorn@4.0.6': + resolution: {integrity: sha512-veQTnWP+1D/xbxVrPC3zHnCZRjSrKfhbMUlEA43iMZLu7EsnTtkJklIuwrCPbOi8YkvDQAiW05VQQFvvz9oieQ==} + + '@types/conventional-commits-parser@5.0.1': + resolution: {integrity: sha512-7uz5EHdzz2TqoMfV7ee61Egf5y6NkcO4FB/1iCCQnbeiI1F3xzv3vK5dBCXUCLQgGYS+mUeigK1iKQzvED+QnQ==} + + '@types/debug@4.1.12': + resolution: {integrity: sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==} + + '@types/estree-jsx@1.0.5': + resolution: {integrity: sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg==} + + '@types/estree@1.0.6': + resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==} + + '@types/hast@2.3.10': + resolution: {integrity: sha512-McWspRw8xx8J9HurkVBfYj0xKoE25tOFlHGdx4MJ5xORQrMGZNqJhVQWaIbm6Oyla5kYOXtDiopzKRJzEOkwJw==} + + '@types/hast@3.0.4': + resolution: {integrity: sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==} '@types/json5@0.0.29': resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} - '@types/node@20.14.10': - resolution: {integrity: sha512-MdiXf+nDuMvY0gJKxyfZ7/6UFsETO7mGKF54MVD/ekJS6HdFtpZFBgrh6Pseu64XTb2MLyFPlbW6hj8HYRQNOQ==} + '@types/mdast@3.0.15': + resolution: {integrity: sha512-LnwD+mUEfxWMa1QpDraczIn6k0Ee3SMicuYSSzS6ZYl2gKS09EClnJYGd8Du6rfc5r/GZEk5o1mRb8TaTj03sQ==} + + '@types/mdast@4.0.4': + resolution: {integrity: sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==} + + '@types/mdx@2.0.13': + resolution: {integrity: sha512-+OWZQfAYyio6YkJb3HLxDrvnx6SWWDbC0zVPfBRzUk0/nqoDyf6dNxQi3eArPe8rJ473nobTMQ/8Zk+LxJ+Yuw==} + + '@types/ms@2.1.0': + resolution: {integrity: sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==} + + '@types/node@20.17.17': + resolution: {integrity: sha512-/WndGO4kIfMicEQLTi/mDANUu/iVUhT7KboZPdEqqHQ4aTS+3qT3U5gIqWDFV+XouorjfgGqvKILJeHhuQgFYg==} + + '@types/parse5@6.0.3': + resolution: {integrity: sha512-SuT16Q1K51EAVPz1K29DJ/sXjhSQ0zjvsypYJ6tlwVsRV9jwW5Adq2ch8Dq8kDBCkYnELS7N7VNCSB5nC56t/g==} + + '@types/prismjs@1.26.5': + resolution: {integrity: sha512-AUZTa7hQ2KY5L7AmtSiqxlhWxb4ina0yd8hNbl4TWuqnv/pFP0nDMb3YrfSBf4hJVGLh2YEIBfKaBW/9UEl6IQ==} + + '@types/prop-types@15.7.14': + resolution: {integrity: sha512-gNMvNH49DJ7OJYv+KAKn0Xp45p8PLl6zo2YnvDIbTd4J6MER2BmWN49TG7n9LvkyihINxeKW8+3bfS2yDC9dzQ==} + + '@types/react-dom@18.3.5': + resolution: {integrity: sha512-P4t6saawp+b/dFrUr2cvkVsfvPguwsxtH6dNIYRllMsefqFzkZk5UIjzyDOv5g1dXIPdG4Sp1yCR4Z6RCUsG/Q==} + peerDependencies: + '@types/react': ^18.0.0 + + '@types/react@18.2.65': + resolution: {integrity: sha512-98TsY0aW4jqx/3RqsUXwMDZSWR1Z4CUlJNue8ueS2/wcxZOsz4xmW1X8ieaWVRHcmmQM3R8xVA4XWB3dJnWwDQ==} + + '@types/resolve@1.20.6': + resolution: {integrity: sha512-A4STmOXPhMUtHH+S6ymgE2GiBSMqf4oTvcQZMcHzokuTLVYzXTB8ttjcgxOVaAp2lGwEdzZ0J+cRbbeevQj1UQ==} + + '@types/rss@0.0.32': + resolution: {integrity: sha512-2oKNqKyUY4RSdvl5eZR1n2Q9yvw3XTe3mQHsFPn9alaNBxfPnbXBtGP8R0SV8pK1PrVnLul0zx7izbm5/gF5Qw==} - '@types/prop-types@15.7.12': - resolution: {integrity: sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q==} + '@types/scheduler@0.23.0': + resolution: {integrity: sha512-YIoDCTH3Af6XM5VuwGG/QL/CJqga1Zm3NkU3HZ4ZHK2fRMPYP1VczsTUqtsf43PH/iJNVlPHAo2oWX7BSdB2Hw==} - '@types/react-dom@18.3.0': - resolution: {integrity: sha512-EhwApuTmMBmXuFOikhQLIBUn6uFg81SwLMOAUgodJF14SOBOCMdU04gDoYi0WOJJHD144TL32z4yDqCW3dnkQg==} + '@types/unist@2.0.11': + resolution: {integrity: sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==} - '@types/react@18.3.3': - resolution: {integrity: sha512-hti/R0pS0q1/xx+TsI73XIqk26eBsISZ2R0wUijXIngRK9R/e7Xw/cXVxQK7R5JjW+SV4zGcn5hXjudkN/pLIw==} + '@types/unist@3.0.3': + resolution: {integrity: sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==} - '@typescript-eslint/eslint-plugin@7.15.0': - resolution: {integrity: sha512-uiNHpyjZtFrLwLDpHnzaDlP3Tt6sGMqTCiqmxaN4n4RP0EfYZDODJyddiFDF44Hjwxr5xAcaYxVKm9QKQFJFLA==} + '@typescript-eslint/eslint-plugin@7.18.0': + resolution: {integrity: sha512-94EQTWZ40mzBc42ATNIBimBEDltSJ9RQHCC8vc/PDbxi4k8dVwUAv4o98dk50M1zB+JGFxp43FP7f8+FP8R6Sw==} engines: {node: ^18.18.0 || >=20.0.0} peerDependencies: '@typescript-eslint/parser': ^7.0.0 @@ -636,8 +1492,8 @@ packages: typescript: optional: true - '@typescript-eslint/parser@7.15.0': - resolution: {integrity: sha512-k9fYuQNnypLFcqORNClRykkGOMOj+pV6V91R4GO/l1FDGwpqmSwoOQrOHo3cGaH63e+D3ZiCAOsuS/D2c99j/A==} + '@typescript-eslint/parser@7.18.0': + resolution: {integrity: sha512-4Z+L8I2OqhZV8qA132M4wNL30ypZGYOQVBfMgxDH/K5UX0PNqTu1c6za9ST5r9+tavvHiTWmBnKzpCJ/GlVFtg==} engines: {node: ^18.18.0 || >=20.0.0} peerDependencies: eslint: ^8.56.0 @@ -656,16 +1512,16 @@ packages: typescript: optional: true - '@typescript-eslint/scope-manager@7.15.0': - resolution: {integrity: sha512-Q/1yrF/XbxOTvttNVPihxh1b9fxamjEoz2Os/Pe38OHwxC24CyCqXxGTOdpb4lt6HYtqw9HetA/Rf6gDGaMPlw==} + '@typescript-eslint/scope-manager@7.18.0': + resolution: {integrity: sha512-jjhdIE/FPF2B7Z1uzc6i3oWKbGcHb87Qw7AWj6jmEqNOfDFbJWtjt/XfwCpvNkpGWlcJaog5vTR+VV8+w9JflA==} engines: {node: ^18.18.0 || >=20.0.0} '@typescript-eslint/scope-manager@7.2.0': resolution: {integrity: sha512-Qh976RbQM/fYtjx9hs4XkayYujB/aPwglw2choHmf3zBjB4qOywWSdt9+KLRdHubGcoSwBnXUH2sR3hkyaERRg==} engines: {node: ^16.0.0 || >=18.0.0} - '@typescript-eslint/type-utils@7.15.0': - resolution: {integrity: sha512-SkgriaeV6PDvpA6253PDVep0qCqgbO1IOBiycjnXsszNTVQe5flN5wR5jiczoEoDEnAqYFSFFc9al9BSGVltkg==} + '@typescript-eslint/type-utils@7.18.0': + resolution: {integrity: sha512-XL0FJXuCLaDuX2sYqZUUSOJ2sG5/i1AAze+axqmLnSkNEVMVYLF+cbwlB2w8D1tinFuSikHmFta+P+HOofrLeA==} engines: {node: ^18.18.0 || >=20.0.0} peerDependencies: eslint: ^8.56.0 @@ -674,16 +1530,16 @@ packages: typescript: optional: true - '@typescript-eslint/types@7.15.0': - resolution: {integrity: sha512-aV1+B1+ySXbQH0pLK0rx66I3IkiZNidYobyfn0WFsdGhSXw+P3YOqeTq5GED458SfB24tg+ux3S+9g118hjlTw==} + '@typescript-eslint/types@7.18.0': + resolution: {integrity: sha512-iZqi+Ds1y4EDYUtlOOC+aUmxnE9xS/yCigkjA7XpTKV6nCBd3Hp/PRGGmdwnfkV2ThMyYldP1wRpm/id99spTQ==} engines: {node: ^18.18.0 || >=20.0.0} '@typescript-eslint/types@7.2.0': resolution: {integrity: sha512-XFtUHPI/abFhm4cbCDc5Ykc8npOKBSJePY3a3s+lwumt7XWJuzP5cZcfZ610MIPHjQjNsOLlYK8ASPaNG8UiyA==} engines: {node: ^16.0.0 || >=18.0.0} - '@typescript-eslint/typescript-estree@7.15.0': - resolution: {integrity: sha512-gjyB/rHAopL/XxfmYThQbXbzRMGhZzGw6KpcMbfe8Q3nNQKStpxnUKeXb0KiN/fFDR42Z43szs6rY7eHk0zdGQ==} + '@typescript-eslint/typescript-estree@7.18.0': + resolution: {integrity: sha512-aP1v/BSPnnyhMHts8cf1qQ6Q1IFwwRvAQGRvBFkWlo3/lH29OXA3Pts+c10nxRxIBrDnoMqzhgdwVe5f2D6OzA==} engines: {node: ^18.18.0 || >=20.0.0} peerDependencies: typescript: '*' @@ -700,22 +1556,22 @@ packages: typescript: optional: true - '@typescript-eslint/utils@7.15.0': - resolution: {integrity: sha512-hfDMDqaqOqsUVGiEPSMLR/AjTSCsmJwjpKkYQRo1FNbmW4tBwBspYDwO9eh7sKSTwMQgBw9/T4DHudPaqshRWA==} + '@typescript-eslint/utils@7.18.0': + resolution: {integrity: sha512-kK0/rNa2j74XuHVcoCZxdFBMF+aq/vH83CXAOHieC+2Gis4mF8jJXT5eAfyD3K0sAxtPuwxaIOIOvhwzVDt/kw==} engines: {node: ^18.18.0 || >=20.0.0} peerDependencies: eslint: ^8.56.0 - '@typescript-eslint/visitor-keys@7.15.0': - resolution: {integrity: sha512-Hqgy/ETgpt2L5xueA/zHHIl4fJI2O4XUE9l4+OIfbJIRSnTJb/QscncdqqZzofQegIJugRIF57OJea1khw2SDw==} + '@typescript-eslint/visitor-keys@7.18.0': + resolution: {integrity: sha512-cDF0/Gf81QpY3xYyJKDV14Zwdmid5+uuENhjH2EqFaF0ni+yAyq/LzMaIJdhNJXZI7uLzwIlA+V7oWoyn6Curg==} engines: {node: ^18.18.0 || >=20.0.0} '@typescript-eslint/visitor-keys@7.2.0': resolution: {integrity: sha512-c6EIQRHhcpl6+tO8EMR+kjkkV+ugUNXOmeASA1rlzkd8EPIriavpWoiEz1HR/VLhbVIdhqnV6E7JZm00cBDx2A==} engines: {node: ^16.0.0 || >=18.0.0} - '@ungap/structured-clone@1.2.0': - resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} + '@ungap/structured-clone@1.3.0': + resolution: {integrity: sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==} JSONStream@1.3.5: resolution: {integrity: sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==} @@ -726,33 +1582,29 @@ packages: peerDependencies: acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 - acorn@8.12.1: - resolution: {integrity: sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==} + acorn@8.14.0: + resolution: {integrity: sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==} engines: {node: '>=0.4.0'} hasBin: true ajv@6.12.6: resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} - ajv@8.16.0: - resolution: {integrity: sha512-F0twR8U1ZU67JIEtekUcLkXkoO5mMMmgGD8sK/xUFzJ805jxHQl92hImFAqqXMyMYjSPOyUPAwHYhB72g5sTXw==} + ajv@8.17.1: + resolution: {integrity: sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==} - ansi-escapes@6.2.1: - resolution: {integrity: sha512-4nJ3yixlEthEJ9Rk4vPcdBRkZvQZlYyu8j4/Mqz5sgIkddmEnH2Yj2ZrnP9S3tQOvSNRUIgVNF/1yPpRAGNRig==} - engines: {node: '>=14.16'} + ansi-escapes@7.0.0: + resolution: {integrity: sha512-GdYO7a61mR0fOlAsvC9/rIHf7L96sBc6dEWzeOu+KAea5bZyQRPIpojrVoI4AXGJS/ycu/fBTdLrUkA4ODrvjw==} + engines: {node: '>=18'} ansi-regex@5.0.1: resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} engines: {node: '>=8'} - ansi-regex@6.0.1: - resolution: {integrity: sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==} + ansi-regex@6.1.0: + resolution: {integrity: sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==} engines: {node: '>=12'} - ansi-styles@3.2.1: - resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} - engines: {node: '>=4'} - ansi-styles@4.3.0: resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} engines: {node: '>=8'} @@ -771,6 +1623,9 @@ packages: arg@5.0.2: resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==} + argparse@1.0.10: + resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} + argparse@2.0.1: resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} @@ -778,11 +1633,12 @@ packages: resolution: {integrity: sha512-y+CcFFwelSXpLZk/7fMB2mUbGtX9lKycf1MWJ7CaTIERyitVlyQx6C+sxcROU2BAJ24OiZyK+8wj2i8AlBoS3A==} engines: {node: '>=10'} - aria-query@5.1.3: - resolution: {integrity: sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ==} + aria-query@5.3.2: + resolution: {integrity: sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==} + engines: {node: '>= 0.4'} - array-buffer-byte-length@1.0.1: - resolution: {integrity: sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==} + array-buffer-byte-length@1.0.2: + resolution: {integrity: sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==} engines: {node: '>= 0.4'} array-ify@1.0.0: @@ -792,6 +1648,9 @@ packages: resolution: {integrity: sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==} engines: {node: '>= 0.4'} + array-timsort@1.0.3: + resolution: {integrity: sha512-/+3GRL7dDAGEfM6TseQk/U+mi18TU2Ms9I3UlLdUMhz2hbvGNTKdj9xniwXfUqgYhHxRx0+8UnKkvlNwVU+cWQ==} + array-union@2.1.0: resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} engines: {node: '>=8'} @@ -804,38 +1663,50 @@ packages: resolution: {integrity: sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ==} engines: {node: '>= 0.4'} - array.prototype.flat@1.3.2: - resolution: {integrity: sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==} + array.prototype.flat@1.3.3: + resolution: {integrity: sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg==} engines: {node: '>= 0.4'} - array.prototype.flatmap@1.3.2: - resolution: {integrity: sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==} + array.prototype.flatmap@1.3.3: + resolution: {integrity: sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg==} engines: {node: '>= 0.4'} - array.prototype.toreversed@1.1.2: - resolution: {integrity: sha512-wwDCoT4Ck4Cz7sLtgUmzR5UV3YF5mFHUlbChCzZBQZ+0m2cl/DH3tKgvphv1nKgFsJ48oCSg6p91q2Vm0I/ZMA==} - array.prototype.tosorted@1.1.4: resolution: {integrity: sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==} engines: {node: '>= 0.4'} - arraybuffer.prototype.slice@1.0.3: - resolution: {integrity: sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==} + arraybuffer.prototype.slice@1.0.4: + resolution: {integrity: sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==} engines: {node: '>= 0.4'} ast-types-flow@0.0.8: resolution: {integrity: sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==} + astring@1.9.0: + resolution: {integrity: sha512-LElXdjswlqjWrPpJFg1Fx4wpkOCxj1TDHlSV4PlaRxHGWko024xICaa97ZkMfs6DRKlCguiAI+rbXv5GWwXIkg==} + hasBin: true + + async-function@1.0.0: + resolution: {integrity: sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==} + engines: {node: '>= 0.4'} + available-typed-arrays@1.0.7: resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} engines: {node: '>= 0.4'} - axe-core@4.9.1: - resolution: {integrity: sha512-QbUdXJVTpvUTHU7871ppZkdOLBeGUKBQWHkHrvN2V9IQWGMt61zf3B45BtzjxEJzYuj0JBjBZP/hmYS/R9pmAw==} + axe-core@4.10.2: + resolution: {integrity: sha512-RE3mdQ7P3FRSe7eqCWoeQ/Z9QXrtniSjp1wUjt5nRC3WIpz5rSCve6o3fsZ2aCpJtrZjSZgjwXAoTO5k4tEI0w==} engines: {node: '>=4'} - axobject-query@3.1.1: - resolution: {integrity: sha512-goKlv8DZrK9hUh975fnHzhNIO4jUnFCfv/dszV5VwUGDFjI6vQ2VwoyjYjYNEbBE8AH87TduWP5uyDR1D+Iteg==} + axios@0.21.4: + resolution: {integrity: sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==} + + axobject-query@4.1.0: + resolution: {integrity: sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==} + engines: {node: '>= 0.4'} + + bail@2.0.2: + resolution: {integrity: sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==} balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} @@ -844,6 +1715,9 @@ packages: resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} engines: {node: '>=8'} + blurhash@2.0.5: + resolution: {integrity: sha512-cRygWd7kGBQO3VEhPiTgq4Wc43ctsM+o46urrmPOiuAe+07fzlSB9OJVdpgDL0jPqXUVQ9ht7aq7kxOeJHRK+w==} + brace-expansion@1.1.11: resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} @@ -854,47 +1728,72 @@ packages: resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} engines: {node: '>=8'} + buffer-from@1.1.2: + resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} + busboy@1.6.0: resolution: {integrity: sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==} engines: {node: '>=10.16.0'} - call-bind@1.0.7: - resolution: {integrity: sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==} + call-bind-apply-helpers@1.0.1: + resolution: {integrity: sha512-BhYE+WDaywFg2TBWYNXAE+8B1ATnThNBqXHP5nQu0jWJdVvY2hvkpyB3qOmtmDePiS5/BDQ8wASEWGMWRG148g==} + engines: {node: '>= 0.4'} + + call-bind@1.0.8: + resolution: {integrity: sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==} + engines: {node: '>= 0.4'} + + call-bound@1.0.3: + resolution: {integrity: sha512-YTd+6wGlNlPxSuri7Y6X8tY2dmm12UMH66RpKMhiX6rsk5wXXnYgbUcOt8kiS31/AjfoTOvCsE+w8nZQLQnzHA==} engines: {node: '>= 0.4'} callsites@3.1.0: resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} engines: {node: '>=6'} + camel-case@4.1.2: + resolution: {integrity: sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==} + camelcase-css@2.0.1: resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==} engines: {node: '>= 6'} - caniuse-lite@1.0.30001640: - resolution: {integrity: sha512-lA4VMpW0PSUrFnkmVuEKBUovSWKhj7puyCg8StBChgu298N1AtuF1sKWEvfDuimSEDbhlb/KqPKC3fs1HbuQUA==} + caniuse-lite@1.0.30001699: + resolution: {integrity: sha512-b+uH5BakXZ9Do9iK+CkDmctUSEqZl+SP056vc5usa0PL+ev5OHw003rZXcnjNDv3L8P5j6rwT6C0BPKSikW08w==} - chalk@2.4.2: - resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} - engines: {node: '>=4'} + ccount@2.0.1: + resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==} chalk@4.1.2: resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} engines: {node: '>=10'} - chalk@5.3.0: - resolution: {integrity: sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==} + chalk@5.4.1: + resolution: {integrity: sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w==} engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} + character-entities-html4@2.1.0: + resolution: {integrity: sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==} + + character-entities-legacy@3.0.0: + resolution: {integrity: sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==} + + character-entities@2.0.2: + resolution: {integrity: sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==} + + character-reference-invalid@2.0.1: + resolution: {integrity: sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==} + chokidar@3.6.0: resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} engines: {node: '>= 8.10.0'} - class-variance-authority@0.7.0: - resolution: {integrity: sha512-jFI8IQw4hczaL4ALINxqLEXQbWcNjoSkloa4IaufXCJr6QawJyw7tuRysRsrE8w2p/4gGaxKIt/hX3qz/IbD1A==} + class-variance-authority@0.7.1: + resolution: {integrity: sha512-Ka+9Trutv7G8M6WT6SeiRWz792K5qEqIGEGzXKhAE6xOWAY6pPH8U+9IY3oCMv6kqTmLsv7Xh/2w2RigkePMsg==} - cli-cursor@4.0.0: - resolution: {integrity: sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + cli-cursor@5.0.0: + resolution: {integrity: sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==} + engines: {node: '>=18'} cli-truncate@4.0.0: resolution: {integrity: sha512-nPdaFdQ0h/GEigbPClz11D0v/ZJEwxmeVZGeMo3Z5StPtUTkA9o1lD6QwoirYiSDzbcwn2XcjwmCp68W1IS4TA==} @@ -903,48 +1802,62 @@ packages: client-only@0.0.1: resolution: {integrity: sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==} + clipanion@3.2.1: + resolution: {integrity: sha512-dYFdjLb7y1ajfxQopN05mylEpK9ZX0sO1/RfMXdfmwjlIsPkbh4p7A682x++zFPLDCo1x3p82dtljHf5cW2LKA==} + peerDependencies: + typanion: '*' + cliui@8.0.1: resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} engines: {node: '>=12'} - clsx@2.0.0: - resolution: {integrity: sha512-rQ1+kcj+ttHG0MKVGBUXwayCCF1oh39BF5COIpRzuCEv8Mwjv0XucrI2ExNTOn9IlLifGClWQcU9BrZORvtw6Q==} - engines: {node: '>=6'} - clsx@2.1.1: resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==} engines: {node: '>=6'} - color-convert@1.9.3: - resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} - color-convert@2.0.1: resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} engines: {node: '>=7.0.0'} - color-name@1.1.3: - resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} - color-name@1.1.4: resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + color-string@1.9.1: + resolution: {integrity: sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==} + + color@4.2.3: + resolution: {integrity: sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==} + engines: {node: '>=12.5.0'} + colorette@2.0.20: resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==} - commander@12.1.0: - resolution: {integrity: sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==} + comma-separated-tokens@2.0.3: + resolution: {integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==} + + commander@13.1.0: + resolution: {integrity: sha512-/rFeCpNJQbhSZjGVwO9RFV3xPqbnERS8MmIQzCtD/zl6gpJuV/bMLuN92oG3F7d8oDEHHRrujSXNUr8fpjntKw==} engines: {node: '>=18'} commander@4.1.1: resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} engines: {node: '>= 6'} + comment-json@4.2.5: + resolution: {integrity: sha512-bKw/r35jR3HGt5PEPm1ljsQQGyCrR8sFGNiN5L+ykDHdpO8Smxkrkla9Yi6NkQyUrb8V54PGhfMs6NrIwtxtdw==} + engines: {node: '>= 6'} + compare-func@2.0.0: resolution: {integrity: sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==} concat-map@0.0.1: resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + contentlayer@0.3.4: + resolution: {integrity: sha512-FYDdTUFaN4yqep0waswrhcXjmMJnPD5iXDTtxcUCGdklfuIrXM2xLx51xl748cHmGA6IsC+27YZFxU6Ym13QIA==} + engines: {node: '>=14.18'} + hasBin: true + conventional-changelog-angular@7.0.0: resolution: {integrity: sha512-ROjNchA9LgfNMTTFSIWPzebCwOGFdgkEq45EnvvrmSLvCtAw0HSmrCs7/ty+wAeYUZyNay0YMUNYFTRL72PkBQ==} engines: {node: '>=16'} @@ -958,13 +1871,16 @@ packages: engines: {node: '>=16'} hasBin: true - cosmiconfig-typescript-loader@5.0.0: - resolution: {integrity: sha512-+8cK7jRAReYkMwMiG+bxhcNKiHJDM6bR9FD/nGBXOWdMLuYawjF5cGrtLilJ+LGd3ZjCXnJjR5DkfWPoIVlqJA==} - engines: {node: '>=v16'} + core-util-is@1.0.3: + resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} + + cosmiconfig-typescript-loader@6.1.0: + resolution: {integrity: sha512-tJ1w35ZRUiM5FeTzT7DtYWAFFv37ZLqSRkGi2oeCK1gPhvaWjkAtfXvLmvE1pRfxxp9aQo6ba/Pvg1dKj05D4g==} + engines: {node: '>=v18'} peerDependencies: '@types/node': '*' - cosmiconfig: '>=8.2' - typescript: '>=4' + cosmiconfig: '>=9' + typescript: '>=5' cosmiconfig@9.0.0: resolution: {integrity: sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==} @@ -975,8 +1891,8 @@ packages: typescript: optional: true - cross-spawn@7.0.3: - resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} + cross-spawn@7.0.6: + resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} engines: {node: '>= 8'} cssesc@3.0.0: @@ -994,18 +1910,33 @@ packages: resolution: {integrity: sha512-wAV9QHOsNbwnWdNW2FYvE1P56wtgSbM+3SZcdGiWQILwVjACCXDCI3Ai8QlCjMDB8YK5zySiXZYBiwGmNY3lnw==} engines: {node: '>=12'} - data-view-buffer@1.0.1: - resolution: {integrity: sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==} + data-uri-to-buffer@4.0.1: + resolution: {integrity: sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==} + engines: {node: '>= 12'} + + data-view-buffer@1.0.2: + resolution: {integrity: sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==} engines: {node: '>= 0.4'} - data-view-byte-length@1.0.1: - resolution: {integrity: sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==} + data-view-byte-length@1.0.2: + resolution: {integrity: sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==} engines: {node: '>= 0.4'} - data-view-byte-offset@1.0.0: - resolution: {integrity: sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==} + data-view-byte-offset@1.0.1: + resolution: {integrity: sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==} engines: {node: '>= 0.4'} + dayjs@1.11.13: + resolution: {integrity: sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg==} + + debug@2.6.9: + resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + debug@3.2.7: resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} peerDependencies: @@ -1014,8 +1945,8 @@ packages: supports-color: optional: true - debug@4.3.5: - resolution: {integrity: sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==} + debug@4.4.0: + resolution: {integrity: sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==} engines: {node: '>=6.0'} peerDependencies: supports-color: '*' @@ -1023,9 +1954,8 @@ packages: supports-color: optional: true - deep-equal@2.2.3: - resolution: {integrity: sha512-ZIwpnevOurS8bpT4192sqAowWM76JDKSHYzMLty3BZGSswgq6pBaH3DhCSW5xVAZICZyKdOBPjwww5wfgT/6PA==} - engines: {node: '>= 0.4'} + decode-named-character-reference@1.0.2: + resolution: {integrity: sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg==} deep-is@0.1.4: resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} @@ -1038,12 +1968,27 @@ packages: resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} engines: {node: '>= 0.4'} + dequal@2.0.3: + resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} + engines: {node: '>=6'} + + detect-libc@2.0.3: + resolution: {integrity: sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==} + engines: {node: '>=8'} + detect-node-es@1.1.0: resolution: {integrity: sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==} + devlop@1.1.0: + resolution: {integrity: sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==} + didyoumean@1.2.2: resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==} + diff@5.2.0: + resolution: {integrity: sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==} + engines: {node: '>=0.3.1'} + dir-glob@3.0.1: resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} engines: {node: '>=8'} @@ -1063,11 +2008,19 @@ packages: resolution: {integrity: sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==} engines: {node: '>=8'} + dotenv@16.4.7: + resolution: {integrity: sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ==} + engines: {node: '>=12'} + + dunder-proto@1.0.1: + resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} + engines: {node: '>= 0.4'} + eastasianwidth@0.2.0: resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} - emoji-regex@10.3.0: - resolution: {integrity: sha512-QpLs9D9v9kArv4lfDEgg1X/gN5XLnf/A6l9cs8SPZLRZR3ZkY9+kwIQTxm+fsSej5UMYGE8fdoaZVIBlqG0XTw==} + emoji-regex@10.4.0: + resolution: {integrity: sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==} emoji-regex@8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} @@ -1075,63 +2028,73 @@ packages: emoji-regex@9.2.2: resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} - enhanced-resolve@5.17.0: - resolution: {integrity: sha512-dwDPwZL0dmye8Txp2gzFmA6sxALaSvdRDjPH0viLcKrtlOL3tw62nWWweVD1SdILDTJrbrL6tdWVN58Wo6U3eA==} + enhanced-resolve@5.18.1: + resolution: {integrity: sha512-ZSW3ma5GkcQBIpwZTSRAI8N71Uuwgs93IezB7mf7R60tC8ZbJideoDNKjHn2O9KIlx6rkGTTEk1xUCK2E1Y2Yg==} engines: {node: '>=10.13.0'} + entities@4.5.0: + resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} + engines: {node: '>=0.12'} + env-paths@2.2.1: resolution: {integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==} engines: {node: '>=6'} + environment@1.1.0: + resolution: {integrity: sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==} + engines: {node: '>=18'} + error-ex@1.3.2: resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} - es-abstract@1.23.3: - resolution: {integrity: sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==} + es-abstract@1.23.9: + resolution: {integrity: sha512-py07lI0wjxAC/DcfK1S6G7iANonniZwTISvdPzk9hzeH0IZIshbuuFxLIU96OyF89Yb9hiqWn8M/bY83KY5vzA==} engines: {node: '>= 0.4'} - es-define-property@1.0.0: - resolution: {integrity: sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==} + es-define-property@1.0.1: + resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==} engines: {node: '>= 0.4'} es-errors@1.3.0: resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} engines: {node: '>= 0.4'} - es-get-iterator@1.1.3: - resolution: {integrity: sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw==} - - es-iterator-helpers@1.0.19: - resolution: {integrity: sha512-zoMwbCcH5hwUkKJkT8kDIBZSz9I6mVG//+lDCinLCGov4+r7NIy0ld8o03M0cJxl2spVf6ESYVS6/gpIfq1FFw==} + es-iterator-helpers@1.2.1: + resolution: {integrity: sha512-uDn+FE1yrDzyC0pCo961B2IHbdM8y/ACZsKD4dG6WqrjV53BADjwa7D+1aom2rsNVfLyDgU/eigvlJGJ08OQ4w==} engines: {node: '>= 0.4'} - es-object-atoms@1.0.0: - resolution: {integrity: sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==} + es-object-atoms@1.1.1: + resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==} engines: {node: '>= 0.4'} - es-set-tostringtag@2.0.3: - resolution: {integrity: sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==} + es-set-tostringtag@2.1.0: + resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==} engines: {node: '>= 0.4'} es-shim-unscopables@1.0.2: resolution: {integrity: sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==} - es-to-primitive@1.2.1: - resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==} + es-to-primitive@1.3.0: + resolution: {integrity: sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==} engines: {node: '>= 0.4'} - escalade@3.1.2: - resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==} - engines: {node: '>=6'} + esbuild@0.25.0: + resolution: {integrity: sha512-BXq5mqc8ltbaN34cDqWuYKyNhX8D/Z0J1xdtdQ8UcIIIyJyz+ZMKUt58tF3SrZ85jcfN/PZYhjR5uDQAYNVbuw==} + engines: {node: '>=18'} + hasBin: true - escape-string-regexp@1.0.5: - resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} - engines: {node: '>=0.8.0'} + escalade@3.2.0: + resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} + engines: {node: '>=6'} escape-string-regexp@4.0.0: resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} engines: {node: '>=10'} + escape-string-regexp@5.0.0: + resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==} + engines: {node: '>=12'} + eslint-config-next@14.2.4: resolution: {integrity: sha512-Qr0wMgG9m6m4uYy2jrYJmyuNlYZzPRQq5Kvb9IDlYwn+7yq6W6sfMNFgb+9guM1KYwuIo6TIaiFhZJ6SnQ/Efw==} peerDependencies: @@ -1150,15 +2113,21 @@ packages: eslint-import-resolver-node@0.3.9: resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==} - eslint-import-resolver-typescript@3.6.1: - resolution: {integrity: sha512-xgdptdoi5W3niYeuQxKmzVDTATvLYqhpwmykwsh7f6HIOStGWEIL9iqZgQDF9u9OEzrRwR8no5q2VT+bjAujTg==} + eslint-import-resolver-typescript@3.7.0: + resolution: {integrity: sha512-Vrwyi8HHxY97K5ebydMtffsWAn1SCR9eol49eCd5fJS4O1WV7PaAjbcjmbfJJSMz/t4Mal212Uz/fQZrOB8mow==} engines: {node: ^14.18.0 || >=16.0.0} peerDependencies: eslint: '*' eslint-plugin-import: '*' + eslint-plugin-import-x: '*' + peerDependenciesMeta: + eslint-plugin-import: + optional: true + eslint-plugin-import-x: + optional: true - eslint-module-utils@2.8.1: - resolution: {integrity: sha512-rXDXR3h7cs7dy9RNpUlQf80nX31XWJEyGq1tRMo+6GsO5VmTe4UTwtmonAD4ZkAsrfMVDA2wlGJ3790Ys+D49Q==} + eslint-module-utils@2.12.0: + resolution: {integrity: sha512-wALZ0HFoytlyh/1+4wuZ9FJCD/leWHQzzrxJ8+rebyReSLk7LApMyd3WJaLVoN+D5+WIdJyDK1c6JnE65V4Zyg==} engines: {node: '>=4'} peerDependencies: '@typescript-eslint/parser': '*' @@ -1178,24 +2147,24 @@ packages: eslint-import-resolver-webpack: optional: true - eslint-plugin-import@2.29.1: - resolution: {integrity: sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==} + eslint-plugin-import@2.31.0: + resolution: {integrity: sha512-ixmkI62Rbc2/w8Vfxyh1jQRTdRTF52VxwRVHl/ykPAmqG+Nb7/kNn+byLP0LxPgI7zWA16Jt82SybJInmMia3A==} engines: {node: '>=4'} peerDependencies: '@typescript-eslint/parser': '*' - eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 + eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9 peerDependenciesMeta: '@typescript-eslint/parser': optional: true - eslint-plugin-jsx-a11y@6.9.0: - resolution: {integrity: sha512-nOFOCaJG2pYqORjK19lqPqxMO/JpvdCZdPtNdxY3kvom3jTvkAbOvQvD8wuD0G8BYR0IGAGYDlzqWJOh/ybn2g==} + eslint-plugin-jsx-a11y@6.10.2: + resolution: {integrity: sha512-scB3nz4WmG75pV8+3eRUQOHZlNSUhFNq37xnpgRkCCELU3XMvXAxLk1eqWWyE22Ki4Q01Fnsw9BA3cJHDPgn2Q==} engines: {node: '>=4.0'} peerDependencies: - eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 + eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9 - eslint-plugin-prettier@5.1.3: - resolution: {integrity: sha512-C9GCVAs4Eq7ZC/XFQHITLiHJxQngdtraXaM+LoUFoFp/lHNl2Zn8f3WQbe9HvTBBQ9YnKFB0/2Ajdqwo5D1EAw==} + eslint-plugin-prettier@5.2.3: + resolution: {integrity: sha512-qJ+y0FfCp/mQYQ/vWQ3s7eUlFEL4PyKfAJxsnYTJ4YT73nsJBWqmEpFryxV9OeUiqmsTsYJ5Y+KDNaeP31wrRw==} engines: {node: ^14.18.0 || >=16.0.0} peerDependencies: '@types/eslint': '>=8.0.0' @@ -1208,17 +2177,17 @@ packages: eslint-config-prettier: optional: true - eslint-plugin-react-hooks@4.6.2: - resolution: {integrity: sha512-QzliNJq4GinDBcD8gPB5v0wh6g8q3SUi6EFF0x8N/BL9PoVs0atuGc47ozMRyOWAKdwaZ5OnbOEa3WR+dSGKuQ==} + eslint-plugin-react-hooks@5.0.0-canary-7118f5dd7-20230705: + resolution: {integrity: sha512-AZYbMo/NW9chdL7vk6HQzQhT+PvTAEVqWk9ziruUoW2kAOcN5qNyelv70e0F1VNQAbvutOC9oc+xfWycI9FxDw==} engines: {node: '>=10'} peerDependencies: eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 - eslint-plugin-react@7.34.3: - resolution: {integrity: sha512-aoW4MV891jkUulwDApQbPYTVZmeuSyFrudpbTAQuj5Fv8VL+o6df2xIGpw8B0hPjAaih1/Fb0om9grCdyFYemA==} + eslint-plugin-react@7.37.4: + resolution: {integrity: sha512-BGP0jRmfYyvOyvMoRX/uoUeW+GqNj9y16bPQzqAHf3AYII/tDs+jMN0dBVkl88/OZwNGwrVFxE7riHsXVfy/LQ==} engines: {node: '>=4'} peerDependencies: - eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 + eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7 eslint-scope@7.2.2: resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} @@ -1228,17 +2197,23 @@ packages: resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - eslint@8.57.0: - resolution: {integrity: sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==} + eslint@8.57.1: + resolution: {integrity: sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + deprecated: This version is no longer supported. Please see https://eslint.org/version-support for other options. hasBin: true espree@9.6.1: resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - esquery@1.5.0: - resolution: {integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==} + esprima@4.0.1: + resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} + engines: {node: '>=4'} + hasBin: true + + esquery@1.6.0: + resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==} engines: {node: '>=0.10'} esrecurse@4.3.0: @@ -1249,6 +2224,31 @@ packages: resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} engines: {node: '>=4.0'} + estree-util-attach-comments@2.1.1: + resolution: {integrity: sha512-+5Ba/xGGS6mnwFbXIuQiDPTbuTxuMCooq3arVv7gPZtYpjp+VXH/NkHAP35OOefPhNG/UGqU3vt/LTABwcHX0w==} + + estree-util-build-jsx@2.2.2: + resolution: {integrity: sha512-m56vOXcOBuaF+Igpb9OPAy7f9w9OIkb5yhjsZuaPm7HoGi4oTOQi0h2+yZ+AtKklYFZ+rPC4n0wYCJCEU1ONqg==} + + estree-util-is-identifier-name@1.1.0: + resolution: {integrity: sha512-OVJZ3fGGt9By77Ix9NhaRbzfbDV/2rx9EP7YIDJTmsZSEc5kYn2vWcNccYyahJL2uAQZK2a5Or2i0wtIKTPoRQ==} + + estree-util-is-identifier-name@2.1.0: + resolution: {integrity: sha512-bEN9VHRyXAUOjkKVQVvArFym08BTWB0aJPppZZr0UNyAqWsLaVfAqP7hbaTJjzHifmB5ebnR8Wm7r7yGN/HonQ==} + + estree-util-to-js@1.2.0: + resolution: {integrity: sha512-IzU74r1PK5IMMGZXUVZbmiu4A1uhiPgW5hm1GjcOfr4ZzHaMPpLNJjR7HjXiIOzi25nZDrgFTobHTkV5Q6ITjA==} + + estree-util-value-to-estree@1.3.0: + resolution: {integrity: sha512-Y+ughcF9jSUJvncXwqRageavjrNPAI+1M/L3BI3PyLp1nmgYTGUXU6t5z1Y7OWuThoDdhPME07bQU+d5LxdJqw==} + engines: {node: '>=12.0.0'} + + estree-util-visit@1.2.1: + resolution: {integrity: sha512-xbgqcrkIVbIG+lI/gzbvd9SGTJL4zqJKBFttUl5pP27KhAjtMKbX/mQXJ7qgyXpMgVy/zvpm0xoQQaGL8OloOw==} + + estree-walker@3.0.3: + resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} + esutils@2.0.3: resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} engines: {node: '>=0.10.0'} @@ -1260,14 +2260,21 @@ packages: resolution: {integrity: sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==} engines: {node: '>=16.17'} + extend-shallow@2.0.1: + resolution: {integrity: sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==} + engines: {node: '>=0.10.0'} + + extend@3.0.2: + resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==} + fast-deep-equal@3.1.3: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} fast-diff@1.3.0: resolution: {integrity: sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==} - fast-glob@3.3.2: - resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} + fast-glob@3.3.3: + resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==} engines: {node: '>=8.6.0'} fast-json-stable-stringify@2.1.0: @@ -1276,8 +2283,18 @@ packages: fast-levenshtein@2.0.6: resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} - fastq@1.17.1: - resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==} + fast-uri@3.0.6: + resolution: {integrity: sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw==} + + fastq@1.19.0: + resolution: {integrity: sha512-7SFSRCNjBQIZH/xZR3iy5iQYR8aGBE0h3VG6/cwlbrpdciNYBMotQav8c1XI3HjHH+NikUpP53nPdlZSdWmFzA==} + + fault@2.0.1: + resolution: {integrity: sha512-WtySTkS4OKev5JtpHXnib4Gxiurzh5NCGvWrFaZ34m6JehfTUhKZvn9njTfw48t6JumVQOmrKqpmGcdwxnhqBQ==} + + fetch-blob@3.2.0: + resolution: {integrity: sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==} + engines: {node: ^12.20 || >= 14.13} file-entry-cache@6.0.1: resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} @@ -1299,16 +2316,55 @@ packages: resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==} engines: {node: ^10.12.0 || >=12.0.0} - flatted@3.3.1: - resolution: {integrity: sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==} + flatted@3.3.2: + resolution: {integrity: sha512-AiwGJM8YcNOaobumgtng+6NHuOqC3A7MixFeDafM3X9cIUM+xUXoS5Vfgf+OihAYe20fxqNM9yPBXJzRtZ/4eA==} + + follow-redirects@1.15.9: + resolution: {integrity: sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==} + engines: {node: '>=4.0'} + peerDependencies: + debug: '*' + peerDependenciesMeta: + debug: + optional: true - for-each@0.3.3: - resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} + for-each@0.3.4: + resolution: {integrity: sha512-kKaIINnFpzW6ffJNDjjyjrk21BkDx38c0xa/klsT8VzLCaMEefv4ZTacrcVR4DmgTeBra++jMDAfS/tS799YDw==} + engines: {node: '>= 0.4'} - foreground-child@3.2.1: - resolution: {integrity: sha512-PXUUyLqrR2XCWICfv6ukppP96sdFwWbNEnfEMt7jNsISjMsvaLNinAHNDYyvkyU+SZG2BTSbT5NjG+vZslfGTA==} + foreground-child@3.3.0: + resolution: {integrity: sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==} engines: {node: '>=14'} + format@0.2.2: + resolution: {integrity: sha512-wzsgA6WOq+09wrU1tsJ09udeR/YZRaeArL9e1wPbFg3GG2yDnC2ldKpxs4xunpFF9DgqCqOIra3bc1HWrJ37Ww==} + engines: {node: '>=0.4.x'} + + formdata-polyfill@4.0.10: + resolution: {integrity: sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==} + engines: {node: '>=12.20.0'} + + framer-motion@11.18.2: + resolution: {integrity: sha512-5F5Och7wrvtLVElIpclDT0CBzMVg3dL22B64aZwHtsIY8RB4mXICLrkajK4G9R+ieSAGcgrLeae2SeUTg2pr6w==} + peerDependencies: + '@emotion/is-prop-valid': '*' + react: ^18.0.0 || ^19.0.0 + react-dom: ^18.0.0 || ^19.0.0 + peerDependenciesMeta: + '@emotion/is-prop-valid': + optional: true + react: + optional: true + react-dom: + optional: true + + fs-extra@11.3.0: + resolution: {integrity: sha512-Z4XaCL6dUDHfP/jT25jJKMmtxvuwbkrD1vNSMFlo9lNLY2c5FHYSQgHPRZUjAB26TpDEoW9HCOgplrdbaPV/ew==} + engines: {node: '>=14.14'} + + fs-monkey@1.0.6: + resolution: {integrity: sha512-b1FMfwetIKymC0eioW7mTywihSQE4oLzQn1dB6rZB5fx/3NpNEdAWeCSMB+60/AeT0TCXsxzAlcYVEFCTAksWg==} + fs.realpath@1.0.0: resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} @@ -1320,8 +2376,8 @@ packages: function-bind@1.1.2: resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} - function.prototype.name@1.1.6: - resolution: {integrity: sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==} + function.prototype.name@1.1.8: + resolution: {integrity: sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==} engines: {node: '>= 0.4'} functions-have-names@1.2.3: @@ -1331,34 +2387,44 @@ packages: resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} engines: {node: 6.* || 8.* || >= 10.*} - get-east-asian-width@1.2.0: - resolution: {integrity: sha512-2nk+7SIVb14QrgXFHcm84tD4bKQz0RxPuMT8Ag5KPOq7J5fEmAg0UbXdTOSHqNuHSU28k55qnceesxXRZGzKWA==} + get-east-asian-width@1.3.0: + resolution: {integrity: sha512-vpeMIQKxczTD/0s2CdEWHcb0eeJe6TFjxb+J5xgX7hScxqrGuyjmv4c1D4A/gelKfyox0gJJwIHF+fLjeaM8kQ==} engines: {node: '>=18'} - get-intrinsic@1.2.4: - resolution: {integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==} + get-intrinsic@1.2.7: + resolution: {integrity: sha512-VW6Pxhsrk0KAOqs3WEd0klDiF/+V7gQOpAvY1jVU/LHmaD/kQO4523aiJuikX/QAKYiW6x8Jh+RJej1almdtCA==} engines: {node: '>= 0.4'} get-nonce@1.0.1: resolution: {integrity: sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==} engines: {node: '>=6'} + get-proto@1.0.1: + resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==} + engines: {node: '>= 0.4'} + get-stream@8.0.1: resolution: {integrity: sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==} engines: {node: '>=16'} - get-symbol-description@1.0.2: - resolution: {integrity: sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==} + get-symbol-description@1.1.0: + resolution: {integrity: sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==} engines: {node: '>= 0.4'} - get-tsconfig@4.7.5: - resolution: {integrity: sha512-ZCuZCnlqNzjb4QprAzXKdpp/gh6KTxSJuw3IBsPnV/7fV4NxC9ckB+vPTt8w7fJA0TaSD7c55BR47JD6MEDyDw==} + get-tsconfig@4.10.0: + resolution: {integrity: sha512-kGzZ3LWWQcGIAmg6iWvXn0ei6WDtV26wzHRMwDSzmAbcXrTEXxHy6IehI6/4eT6VRKyMP1eF1VqwrVUmE/LR7A==} git-raw-commits@4.0.0: resolution: {integrity: sha512-ICsMM1Wk8xSGMowkOmPrzo2Fgmfo4bMHLNX6ytHjajRJUqvHOw/TFapQ+QG75c3X/tTDDhOSRPGC52dDbNM8FQ==} engines: {node: '>=16'} hasBin: true + github-api@3.4.0: + resolution: {integrity: sha512-2yYqYS6Uy4br1nw0D3VrlYWxtGTkUhIZrumBrcBwKdBOzMT8roAe8IvI6kjIOkxqxapKR5GkEsHtz3Du/voOpA==} + + github-slugger@2.0.0: + resolution: {integrity: sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw==} + glob-parent@5.1.2: resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} engines: {node: '>= 6'} @@ -1372,9 +2438,8 @@ packages: engines: {node: '>=16 || 14 >=14.17'} hasBin: true - glob@10.4.3: - resolution: {integrity: sha512-Q38SGlYRpVtDBPSWEylRyctn7uDeTp4NQERTLiCT1FqA9JXPYWqAVmQU6qh4r/zMM5ehxTcbaO8EjhWnvEhmyg==} - engines: {node: '>=18'} + glob@10.4.5: + resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==} hasBin: true glob@7.2.3: @@ -1397,8 +2462,13 @@ packages: resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} engines: {node: '>=10'} - gopd@1.0.1: - resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} + globby@14.1.0: + resolution: {integrity: sha512-0Ia46fDOaT7k4og1PDW4YbodWWr3scS2vAr2lTbsplOt2WkKp0vQbkI9wKis/T5LV/dqPjO3bpS/z6GTJB82LA==} + engines: {node: '>=18'} + + gopd@1.2.0: + resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} + engines: {node: '>= 0.4'} graceful-fs@4.2.11: resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} @@ -1406,36 +2476,92 @@ packages: graphemer@1.4.0: resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} - has-bigints@1.0.2: - resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==} + gray-matter@4.0.3: + resolution: {integrity: sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q==} + engines: {node: '>=6.0'} - has-flag@3.0.0: - resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} - engines: {node: '>=4'} + has-bigints@1.1.0: + resolution: {integrity: sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==} + engines: {node: '>= 0.4'} has-flag@4.0.0: resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} engines: {node: '>=8'} + has-own-prop@2.0.0: + resolution: {integrity: sha512-Pq0h+hvsVm6dDEa8x82GnLSYHOzNDt7f0ddFa3FqcQlgzEiptPqL+XrOJNavjOzSYiYWIrgeVYYgGlLmnxwilQ==} + engines: {node: '>=8'} + has-property-descriptors@1.0.2: resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} - has-proto@1.0.3: - resolution: {integrity: sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==} + has-proto@1.2.0: + resolution: {integrity: sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==} engines: {node: '>= 0.4'} - has-symbols@1.0.3: - resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} + has-symbols@1.1.0: + resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==} engines: {node: '>= 0.4'} has-tostringtag@1.0.2: resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} engines: {node: '>= 0.4'} + hash-wasm@4.12.0: + resolution: {integrity: sha512-+/2B2rYLb48I/evdOIhP+K/DD2ca2fgBjp6O+GBEnCDk2e4rpeXIK8GvIyRPjTezgmWn9gmKwkQjjx6BtqDHVQ==} + hasown@2.0.2: resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} engines: {node: '>= 0.4'} + hast-util-from-html@2.0.3: + resolution: {integrity: sha512-CUSRHXyKjzHov8yKsQjGOElXy/3EKpyX56ELnkHH34vDVw1N1XSQ1ZcAvTyAPtGqLTuKP/uxM+aLkSPqF/EtMw==} + + hast-util-from-parse5@7.1.2: + resolution: {integrity: sha512-Nz7FfPBuljzsN3tCQ4kCBKqdNhQE2l0Tn+X1ubgKBPRoiDIu1mL08Cfw4k7q71+Duyaw7DXDN+VTAp4Vh3oCOw==} + + hast-util-from-parse5@8.0.2: + resolution: {integrity: sha512-SfMzfdAi/zAoZ1KkFEyyeXBn7u/ShQrfd675ZEE9M3qj+PMFX05xubzRyF76CCSJu8au9jgVxDV1+okFvgZU4A==} + + hast-util-heading-rank@3.0.0: + resolution: {integrity: sha512-EJKb8oMUXVHcWZTDepnr+WNbfnXKFNf9duMesmr4S8SXTJBJ9M4Yok08pu9vxdJwdlGRhVumk9mEhkEvKGifwA==} + + hast-util-is-element@3.0.0: + resolution: {integrity: sha512-Val9mnv2IWpLbNPqc/pUem+a7Ipj2aHacCwgNfTiK0vJKl0LF+4Ba4+v1oPHFpf3bLYmreq0/l3Gud9S5OH42g==} + + hast-util-parse-selector@3.1.1: + resolution: {integrity: sha512-jdlwBjEexy1oGz0aJ2f4GKMaVKkA9jwjr4MjAAI22E5fM/TXVZHuS5OpONtdeIkRKqAaryQ2E9xNQxijoThSZA==} + + hast-util-parse-selector@4.0.0: + resolution: {integrity: sha512-wkQCkSYoOGCRKERFWcxMVMOcYE2K1AaNLU8DXS9arxnLOUEWbOXKXiJUNzEpqZ3JOKpnha3jkFrumEjVliDe7A==} + + hast-util-raw@7.2.3: + resolution: {integrity: sha512-RujVQfVsOrxzPOPSzZFiwofMArbQke6DJjnFfceiEbFh7S05CbPt0cYN+A5YeD3pso0JQk6O1aHBnx9+Pm2uqg==} + + hast-util-to-estree@2.3.3: + resolution: {integrity: sha512-ihhPIUPxN0v0w6M5+IiAZZrn0LH2uZomeWwhn7uP7avZC6TE7lIiEh2yBMPr5+zi1aUCXq6VoYRgs2Bw9xmycQ==} + + hast-util-to-html@8.0.4: + resolution: {integrity: sha512-4tpQTUOr9BMjtYyNlt0P50mH7xj0Ks2xpo8M943Vykljf99HW6EzulIoJP1N3eKOSScEHzyzi9dm7/cn0RfGwA==} + + hast-util-to-parse5@7.1.0: + resolution: {integrity: sha512-YNRgAJkH2Jky5ySkIqFXTQiaqcAtJyVE+D5lkN6CdtOqrnkLfGYYrEcKuHOJZlp+MwjSwuD3fZuawI+sic/RBw==} + + hast-util-to-string@3.0.1: + resolution: {integrity: sha512-XelQVTDWvqcl3axRfI0xSeoVKzyIFPwsAGSLIsKdJKQMXDYJS4WYrBNF/8J7RdhIcFI2BOHgAifggsvsxp/3+A==} + + hast-util-whitespace@2.0.1: + resolution: {integrity: sha512-nAxA0v8+vXSBDt3AnRUNjyRIQ0rD+ntpbAp4LnPkumc5M9yUbSMa4XDU9Q6etY4f1Wp4bNgvc1yjiZtsTTrSng==} + + hastscript@7.2.0: + resolution: {integrity: sha512-TtYPq24IldU8iKoJQqvZOuhi5CyCQRAbvDOX0x1eW6rsHSxa/1i2CCiptNTotGHJ3VoHRGmqiv6/D3q113ikkw==} + + hastscript@9.0.0: + resolution: {integrity: sha512-jzaLBGavEDKHrc5EfFImKN7nZKKBdSLIdGvCwDZ9TfzbF2ffXiov8CKE445L2Z1Ek2t/m4SKQ2j6Ipv7NyUolw==} + + html-void-elements@2.0.1: + resolution: {integrity: sha512-0quDb7s97CfemeJAnW9wC0hw78MtW7NU3hqtCD75g2vFlDLt36llsYD7uB7SUzojLMP24N5IatXf7ylGXiGG9A==} + human-signals@5.0.0: resolution: {integrity: sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==} engines: {node: '>=16.17.0'} @@ -1445,12 +2571,20 @@ packages: engines: {node: '>=14'} hasBin: true - ignore@5.3.1: - resolution: {integrity: sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==} + ignore@5.3.2: + resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} + engines: {node: '>= 4'} + + ignore@7.0.3: + resolution: {integrity: sha512-bAH5jbK/F3T3Jls4I0SO1hmPR0dKU0a7+SY6n1yzRtG54FLO8d6w/nxLFX2Nb7dBu6cCWXPaAME6cYqFUMmuCA==} engines: {node: '>= 4'} - import-fresh@3.3.0: - resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} + imagescript@1.3.0: + resolution: {integrity: sha512-lCYzQrWzdnA68K03oMj/BUlBJrVBnslzDOgGFymAp49NmdGEJxGeN7sHh5mCva0nQkq+kkKSuru2zLf1m04+3A==} + engines: {node: '>=14.0.0'} + + import-fresh@3.3.1: + resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==} engines: {node: '>=6'} import-meta-resolve@4.1.0: @@ -1460,6 +2594,10 @@ packages: resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} engines: {node: '>=0.8.19'} + inflection@2.0.1: + resolution: {integrity: sha512-wzkZHqpb4eGrOKBl34xy3umnYHx8Si5R1U4fwmdxLo5gdH6mEK8gclckTj/qWqy4Je0bsDYe/qazZYuO7xe3XQ==} + engines: {node: '>=14.0.0'} + inflight@1.0.6: resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. @@ -1471,61 +2609,82 @@ packages: resolution: {integrity: sha512-QQnnxNyfvmHFIsj7gkPcYymR8Jdw/o7mp5ZFihxn6h8Ci6fh3Dx4E1gPjpQEpIuPo9XVNY/ZUwh4BPMjGyL01g==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - internal-slot@1.0.7: - resolution: {integrity: sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==} + inline-style-parser@0.1.1: + resolution: {integrity: sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q==} + + internal-slot@1.1.0: + resolution: {integrity: sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==} engines: {node: '>= 0.4'} - invariant@2.2.4: - resolution: {integrity: sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==} + is-alphabetical@2.0.1: + resolution: {integrity: sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==} - is-arguments@1.1.1: - resolution: {integrity: sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==} - engines: {node: '>= 0.4'} + is-alphanumerical@2.0.1: + resolution: {integrity: sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==} - is-array-buffer@3.0.4: - resolution: {integrity: sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==} + is-array-buffer@3.0.5: + resolution: {integrity: sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==} engines: {node: '>= 0.4'} is-arrayish@0.2.1: resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} - is-async-function@2.0.0: - resolution: {integrity: sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==} + is-arrayish@0.3.2: + resolution: {integrity: sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==} + + is-async-function@2.1.1: + resolution: {integrity: sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==} engines: {node: '>= 0.4'} - is-bigint@1.0.4: - resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==} + is-bigint@1.1.0: + resolution: {integrity: sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==} + engines: {node: '>= 0.4'} is-binary-path@2.1.0: resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} engines: {node: '>=8'} - is-boolean-object@1.1.2: - resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} + is-boolean-object@1.2.2: + resolution: {integrity: sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==} engines: {node: '>= 0.4'} + is-buffer@2.0.5: + resolution: {integrity: sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==} + engines: {node: '>=4'} + + is-bun-module@1.3.0: + resolution: {integrity: sha512-DgXeu5UWI0IsMQundYb5UAOzm6G2eVnarJ0byP6Tm55iZNKceD59LNPA2L4VvsScTtHcw0yEkVwSf7PC+QoLSA==} + is-callable@1.2.7: resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} engines: {node: '>= 0.4'} - is-core-module@2.14.0: - resolution: {integrity: sha512-a5dFJih5ZLYlRtDc0dZWP7RiKr6xIKzmn/oAYCDvdLThadVgyJwlaoQPmRtMSpz+rk0OGAgIu+TcM9HUF0fk1A==} + is-core-module@2.16.1: + resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==} engines: {node: '>= 0.4'} - is-data-view@1.0.1: - resolution: {integrity: sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==} + is-data-view@1.0.2: + resolution: {integrity: sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==} engines: {node: '>= 0.4'} - is-date-object@1.0.5: - resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} + is-date-object@1.1.0: + resolution: {integrity: sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==} engines: {node: '>= 0.4'} + is-decimal@2.0.1: + resolution: {integrity: sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==} + + is-extendable@0.1.1: + resolution: {integrity: sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==} + engines: {node: '>=0.10.0'} + is-extglob@2.1.1: resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} engines: {node: '>=0.10.0'} - is-finalizationregistry@1.0.2: - resolution: {integrity: sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw==} + is-finalizationregistry@1.1.1: + resolution: {integrity: sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==} + engines: {node: '>= 0.4'} is-fullwidth-code-point@3.0.0: resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} @@ -1539,24 +2698,23 @@ packages: resolution: {integrity: sha512-OVa3u9kkBbw7b8Xw5F9P+D/T9X+Z4+JruYVNapTjPYZYUznQ5YfWeFkOj606XYYW8yugTfC8Pj0hYqvi4ryAhA==} engines: {node: '>=18'} - is-generator-function@1.0.10: - resolution: {integrity: sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==} + is-generator-function@1.1.0: + resolution: {integrity: sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ==} engines: {node: '>= 0.4'} is-glob@4.0.3: resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} engines: {node: '>=0.10.0'} + is-hexadecimal@2.0.1: + resolution: {integrity: sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==} + is-map@2.0.3: resolution: {integrity: sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==} engines: {node: '>= 0.4'} - is-negative-zero@2.0.3: - resolution: {integrity: sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==} - engines: {node: '>= 0.4'} - - is-number-object@1.0.7: - resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==} + is-number-object@1.1.1: + resolution: {integrity: sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==} engines: {node: '>= 0.4'} is-number@7.0.0: @@ -1571,47 +2729,59 @@ packages: resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} engines: {node: '>=8'} - is-regex@1.1.4: - resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} + is-plain-obj@3.0.0: + resolution: {integrity: sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==} + engines: {node: '>=10'} + + is-plain-obj@4.1.0: + resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==} + engines: {node: '>=12'} + + is-reference@3.0.3: + resolution: {integrity: sha512-ixkJoqQvAP88E6wLydLGGqCJsrFUnqoH6HnaczB8XmDH1oaWU+xxdptvikTgaEhtZ53Ky6YXiBuUI2WXLMCwjw==} + + is-regex@1.2.1: + resolution: {integrity: sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==} engines: {node: '>= 0.4'} is-set@2.0.3: resolution: {integrity: sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==} engines: {node: '>= 0.4'} - is-shared-array-buffer@1.0.3: - resolution: {integrity: sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==} + is-shared-array-buffer@1.0.4: + resolution: {integrity: sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==} engines: {node: '>= 0.4'} is-stream@3.0.0: resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - is-string@1.0.7: - resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==} + is-string@1.1.1: + resolution: {integrity: sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==} engines: {node: '>= 0.4'} - is-symbol@1.0.4: - resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==} + is-symbol@1.1.1: + resolution: {integrity: sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==} engines: {node: '>= 0.4'} is-text-path@2.0.0: resolution: {integrity: sha512-+oDTluR6WEjdXEJMnC2z6A4FRwFoYuvShVVEGsS7ewc0UTi2QtAKMDJuL4BDEVt+5T7MjFo12RP8ghOM75oKJw==} engines: {node: '>=8'} - is-typed-array@1.1.13: - resolution: {integrity: sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==} + is-typed-array@1.1.15: + resolution: {integrity: sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==} engines: {node: '>= 0.4'} is-weakmap@2.0.2: resolution: {integrity: sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==} engines: {node: '>= 0.4'} - is-weakref@1.0.2: - resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} + is-weakref@1.1.1: + resolution: {integrity: sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==} + engines: {node: '>= 0.4'} - is-weakset@2.0.3: - resolution: {integrity: sha512-LvIm3/KWzS9oRFHugab7d+M/GcBXuXX5xZkzPmN+NxihdQlZUQ4dWuSV1xR/sq6upL1TJEDrfBgRepHFdBtSNQ==} + is-weakset@2.0.4: + resolution: {integrity: sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==} engines: {node: '>= 0.4'} isarray@2.0.5: @@ -1620,28 +2790,42 @@ packages: isexe@2.0.0: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} - iterator.prototype@1.1.2: - resolution: {integrity: sha512-DR33HMMr8EzwuRL8Y9D3u2BMj8+RqSE850jfGu59kS7tbmPLzGkZmVSfyCFSDxuZiEY6Rzt3T2NA/qU+NwVj1w==} + iterator.prototype@1.1.5: + resolution: {integrity: sha512-H0dkQoCa3b2VEeKQBOxFph+JAbcrQdE7KC0UkqwpLmv2EC4P41QXP+rqo9wYodACiG5/WM5s9oDApTU8utwj9g==} + engines: {node: '>= 0.4'} jackspeak@2.3.6: resolution: {integrity: sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==} engines: {node: '>=14'} - jackspeak@3.4.1: - resolution: {integrity: sha512-U23pQPDnmYybVkYjObcuYMk43VRlMLLqLI+RdZy8s8WV8WsxO9SnqSroKaluuvcNOdCAlauKszDwd+umbot5Mg==} - engines: {node: '>=18'} + jackspeak@3.4.3: + resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} + + jiti@1.21.7: + resolution: {integrity: sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==} + hasBin: true - jiti@1.21.6: - resolution: {integrity: sha512-2yTgeWTWzMWkHu6Jp9NKgePDaYHbntiwvYuuJLbbN9vl7DC9DvXKOB2BC3ZZ92D3cvV/aflH0osDfwpHepQ53w==} + jiti@2.4.2: + resolution: {integrity: sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A==} hasBin: true + js-base64@2.6.4: + resolution: {integrity: sha512-pZe//GGmwJndub7ZghVHz7vjb2LgC1m8B07Au3eYqeqv9emhESByMXxaEgkUkEqJe87oBbSniGYoQNIBklc7IQ==} + js-tokens@4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + js-yaml@3.14.1: + resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} + hasBin: true + js-yaml@4.1.0: resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} hasBin: true + jsbi@4.3.0: + resolution: {integrity: sha512-SnZNcinB4RIcnEyZqFPdGPVgrg2AcnykiBy0sHVJQKHYeaLUvi3Exj+iaPpLnFVkDPZIV4U0yvgC9/R4uEAZ9g==} + json-buffer@3.0.1: resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} @@ -1661,6 +2845,9 @@ packages: resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==} hasBin: true + jsonfile@6.1.0: + resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} + jsonparse@1.3.1: resolution: {integrity: sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==} engines: {'0': node >= 0.2.0} @@ -1672,6 +2859,14 @@ packages: keyv@4.5.4: resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} + kind-of@6.0.3: + resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} + engines: {node: '>=0.10.0'} + + kleur@4.1.5: + resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==} + engines: {node: '>=6'} + language-subtag-registry@0.3.23: resolution: {integrity: sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ==} @@ -1683,24 +2878,20 @@ packages: resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} engines: {node: '>= 0.8.0'} - lilconfig@2.1.0: - resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==} - engines: {node: '>=10'} - - lilconfig@3.1.2: - resolution: {integrity: sha512-eop+wDAvpItUys0FWkHIKeC9ybYrTGbU41U5K7+bttZZeohvnY7M9dZ5kB21GNWiFT2q1OoPTvncPCgSOVO5ow==} + lilconfig@3.1.3: + resolution: {integrity: sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==} engines: {node: '>=14'} lines-and-columns@1.2.4: resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} - lint-staged@15.2.7: - resolution: {integrity: sha512-+FdVbbCZ+yoh7E/RosSdqKJyUM2OEjTciH0TFNkawKgvFp1zbGlEC39RADg+xKBG1R4mhoH2j85myBQZ5wR+lw==} + lint-staged@15.4.3: + resolution: {integrity: sha512-FoH1vOeouNh1pw+90S+cnuoFwRfUD9ijY2GKy5h7HS3OR7JVir2N2xrsa0+Twc1B7cW72L+88geG5cW4wIhn7g==} engines: {node: '>=18.12.0'} hasBin: true - listr2@8.2.3: - resolution: {integrity: sha512-Lllokma2mtoniUOS94CcOErHWAug5iu7HOmDrvWgpw8jyQH2fomgB+7lZS4HWZxytUuQwkGOwe49FvwVaA85Xw==} + listr2@8.2.5: + resolution: {integrity: sha512-iyAZCeyD+c1gPyE9qpFu8af0Y+MRtmKOncdGoA2S5EY8iFq99dmmvkNnHiWo+pj0s7yH7l3KPIgee77tKpXPWQ==} engines: {node: '>=18.0.0'} locate-path@6.0.0: @@ -1714,6 +2905,12 @@ packages: lodash.camelcase@4.3.0: resolution: {integrity: sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==} + lodash.castarray@4.4.0: + resolution: {integrity: sha512-aVx8ztPv7/2ULbArGJ2Y42bG1mEQ5mGjpdvrbJcJFU3TbYybe+QlLS4pst9zV52ymy2in1KpFPiZnAOATxD4+Q==} + + lodash.debounce@4.0.8: + resolution: {integrity: sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==} + lodash.isplainobject@4.0.6: resolution: {integrity: sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==} @@ -1738,23 +2935,109 @@ packages: lodash.upperfirst@4.3.1: resolution: {integrity: sha512-sReKOYJIJf74dhJONhU4e0/shzi1trVbSWDOhKYE5XV2O+H7Sb2Dihwuc7xWxVl+DgFPyTqIN3zMfT9cq5iWDg==} - log-update@6.0.0: - resolution: {integrity: sha512-niTvB4gqvtof056rRIrTZvjNYE4rCUzO6X/X+kYjd7WFxXeJ0NwEFnRxX6ehkvv3jTwrXnNdtAak5XYZuIyPFw==} + log-update@6.1.0: + resolution: {integrity: sha512-9ie8ItPR6tjY5uYJh8K/Zrv/RMZ5VOlOWvtZdEHYSTFKZfIBPQa9tOAEeAWhd+AnIneLJ22w5fjOYtoutpWq5w==} engines: {node: '>=18'} + long@5.2.4: + resolution: {integrity: sha512-qtzLbJE8hq7VabR3mISmVGtoXP8KGc2Z/AT8OuqlYD7JTR3oqrgwdjnk07wpj1twXxYmgDXgoKVWUG/fReSzHg==} + + longest-streak@3.1.0: + resolution: {integrity: sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==} + loose-envify@1.4.0: resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} hasBin: true - lru-cache@10.3.1: - resolution: {integrity: sha512-9/8QXrtbGeMB6LxwQd4x1tIMnsmUxMvIH/qWGsccz6bt9Uln3S+sgAaqfQNhbGA8ufzs2fHuP/yqapGgP9Hh2g==} - engines: {node: '>=18'} + lower-case@2.0.2: + resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==} + + lru-cache@10.4.3: + resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} lucide-react@0.408.0: resolution: {integrity: sha512-8kETAAeWmOvtGIr7HPHm51DXoxlfkNncQ5FZWXR+abX8saQwMYXANWIkUstaYtcKSo/imOe/q+tVFA8ANzdSVA==} peerDependencies: react: ^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0 + markdown-extensions@1.1.1: + resolution: {integrity: sha512-WWC0ZuMzCyDHYCasEGs4IPvLyTGftYwh6wIEOULOF0HXcqZlhwRzrK0w2VUlxWA98xnvb/jszw4ZSkJ6ADpM6Q==} + engines: {node: '>=0.10.0'} + + markdown-table@3.0.4: + resolution: {integrity: sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw==} + + math-intrinsics@1.1.0: + resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} + engines: {node: '>= 0.4'} + + mdast-util-definitions@5.1.2: + resolution: {integrity: sha512-8SVPMuHqlPME/z3gqVwWY4zVXn8lqKv/pAhC57FuJ40ImXyBpmO5ukh98zB2v7Blql2FiHjHv9LVztSIqjY+MA==} + + mdast-util-find-and-replace@2.2.2: + resolution: {integrity: sha512-MTtdFRz/eMDHXzeK6W3dO7mXUlF82Gom4y0oOgvHhh/HXZAGvIQDUvQ0SuUx+j2tv44b8xTHOm8K/9OoRFnXKw==} + + mdast-util-from-markdown@1.3.1: + resolution: {integrity: sha512-4xTO/M8c82qBcnQc1tgpNtubGUW/Y1tBQ1B0i5CtSoelOLKFYlElIr3bvgREYYO5iRqbMY1YuqZng0GVOI8Qww==} + + mdast-util-frontmatter@1.0.1: + resolution: {integrity: sha512-JjA2OjxRqAa8wEG8hloD0uTU0kdn8kbtOWpPP94NBkfAlbxn4S8gCGf/9DwFtEeGPXrDcNXdiDjVaRdUFqYokw==} + + mdast-util-gfm-autolink-literal@1.0.3: + resolution: {integrity: sha512-My8KJ57FYEy2W2LyNom4n3E7hKTuQk/0SES0u16tjA9Z3oFkF4RrC/hPAPgjlSpezsOvI8ObcXcElo92wn5IGA==} + + mdast-util-gfm-footnote@1.0.2: + resolution: {integrity: sha512-56D19KOGbE00uKVj3sgIykpwKL179QsVFwx/DCW0u/0+URsryacI4MAdNJl0dh+u2PSsD9FtxPFbHCzJ78qJFQ==} + + mdast-util-gfm-strikethrough@1.0.3: + resolution: {integrity: sha512-DAPhYzTYrRcXdMjUtUjKvW9z/FNAMTdU0ORyMcbmkwYNbKocDpdk+PX1L1dQgOID/+vVs1uBQ7ElrBQfZ0cuiQ==} + + mdast-util-gfm-table@1.0.7: + resolution: {integrity: sha512-jjcpmNnQvrmN5Vx7y7lEc2iIOEytYv7rTvu+MeyAsSHTASGCCRA79Igg2uKssgOs1i1po8s3plW0sTu1wkkLGg==} + + mdast-util-gfm-task-list-item@1.0.2: + resolution: {integrity: sha512-PFTA1gzfp1B1UaiJVyhJZA1rm0+Tzn690frc/L8vNX1Jop4STZgOE6bxUhnzdVSB+vm2GU1tIsuQcA9bxTQpMQ==} + + mdast-util-gfm@2.0.2: + resolution: {integrity: sha512-qvZ608nBppZ4icQlhQQIAdc6S3Ffj9RGmzwUKUWuEICFnd1LVkN3EktF7ZHAgfcEdvZB5owU9tQgt99e2TlLjg==} + + mdast-util-mdx-expression@1.3.2: + resolution: {integrity: sha512-xIPmR5ReJDu/DHH1OoIT1HkuybIfRGYRywC+gJtI7qHjCJp/M9jrmBEJW22O8lskDWm562BX2W8TiAwRTb0rKA==} + + mdast-util-mdx-jsx@2.1.4: + resolution: {integrity: sha512-DtMn9CmVhVzZx3f+optVDF8yFgQVt7FghCRNdlIaS3X5Bnym3hZwPbg/XW86vdpKjlc1PVj26SpnLGeJBXD3JA==} + + mdast-util-mdx@2.0.1: + resolution: {integrity: sha512-38w5y+r8nyKlGvNjSEqWrhG0w5PmnRA+wnBvm+ulYCct7nsGYhFVb0lljS9bQav4psDAS1eGkP2LMVcZBi/aqw==} + + mdast-util-mdxjs-esm@1.3.1: + resolution: {integrity: sha512-SXqglS0HrEvSdUEfoXFtcg7DRl7S2cwOXc7jkuusG472Mmjag34DUDeOJUZtl+BVnyeO1frIgVpHlNRWc2gk/w==} + + mdast-util-phrasing@3.0.1: + resolution: {integrity: sha512-WmI1gTXUBJo4/ZmSk79Wcb2HcjPJBzM1nlI/OUWA8yk2X9ik3ffNbBGsU+09BFmXaL1IBb9fiuvq6/KMiNycSg==} + + mdast-util-to-hast@12.3.0: + resolution: {integrity: sha512-pits93r8PhnIoU4Vy9bjW39M2jJ6/tdHyja9rrot9uujkN7UTU9SDnE6WNJz/IGyQk3XHX6yNNtrBH6cQzm8Hw==} + + mdast-util-to-hast@13.2.0: + resolution: {integrity: sha512-QGYKEuUsYT9ykKBCMOEDLsU5JRObWQusAolFMeko/tYPufNkRffBAQjIE+99jbA87xv6FgmjLtwjh9wBWajwAA==} + + mdast-util-to-markdown@1.5.0: + resolution: {integrity: sha512-bbv7TPv/WC49thZPg3jXuqzuvI45IL2EVAr/KxF0BSdHsU0ceFHOmwQn6evxAh1GaoK/6GQ1wp4R4oW2+LFL/A==} + + mdast-util-to-string@3.2.0: + resolution: {integrity: sha512-V4Zn/ncyN1QNSqSBxTrMOLpjr+IKdHl2v3KVLoWmDPscP4r9GcCi71gjgvUV1SFSKh92AjAG4peFuBl2/YgCJg==} + + mdx-bundler@9.2.1: + resolution: {integrity: sha512-hWEEip1KU9MCNqeH2rqwzAZ1pdqPPbfkx9OTJjADqGPQz4t9BO85fhI7AP9gVYrpmfArf9/xJZUN0yBErg/G/Q==} + engines: {node: '>=14', npm: '>=6'} + peerDependencies: + esbuild: 0.* + + memfs@3.5.3: + resolution: {integrity: sha512-UERzLsxzllchadvbPs5aolHh65ISpKpM+ccLbOJ8/vvpBKmAWf+la7dXFy7Mr0ySHbdHrFv5kGFCUHHe6GFEmw==} + engines: {node: '>= 4.0.0'} + meow@12.1.1: resolution: {integrity: sha512-BhXM0Au22RwUneMPwSCnyhTOizdWoIEPU9sp0Aqa1PnDMR5Wv2FGXYDjuzJEIX+Eo2Rb8xuYe5jrnm5QowQFkw==} engines: {node: '>=16.10'} @@ -1766,18 +3049,153 @@ packages: resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} engines: {node: '>= 8'} - micromatch@4.0.7: - resolution: {integrity: sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==} + micromark-core-commonmark@1.1.0: + resolution: {integrity: sha512-BgHO1aRbolh2hcrzL2d1La37V0Aoz73ymF8rAcKnohLy93titmv62E0gP8Hrx9PKcKrqCZ1BbLGbP3bEhoXYlw==} + + micromark-extension-frontmatter@1.1.1: + resolution: {integrity: sha512-m2UH9a7n3W8VAH9JO9y01APpPKmNNNs71P0RbknEmYSaZU5Ghogv38BYO94AI5Xw6OYfxZRdHZZ2nYjs/Z+SZQ==} + + micromark-extension-gfm-autolink-literal@1.0.5: + resolution: {integrity: sha512-z3wJSLrDf8kRDOh2qBtoTRD53vJ+CWIyo7uyZuxf/JAbNJjiHsOpG1y5wxk8drtv3ETAHutCu6N3thkOOgueWg==} + + micromark-extension-gfm-footnote@1.1.2: + resolution: {integrity: sha512-Yxn7z7SxgyGWRNa4wzf8AhYYWNrwl5q1Z8ii+CSTTIqVkmGZF1CElX2JI8g5yGoM3GAman9/PVCUFUSJ0kB/8Q==} + + micromark-extension-gfm-strikethrough@1.0.7: + resolution: {integrity: sha512-sX0FawVE1o3abGk3vRjOH50L5TTLr3b5XMqnP9YDRb34M0v5OoZhG+OHFz1OffZ9dlwgpTBKaT4XW/AsUVnSDw==} + + micromark-extension-gfm-table@1.0.7: + resolution: {integrity: sha512-3ZORTHtcSnMQEKtAOsBQ9/oHp9096pI/UvdPtN7ehKvrmZZ2+bbWhi0ln+I9drmwXMt5boocn6OlwQzNXeVeqw==} + + micromark-extension-gfm-tagfilter@1.0.2: + resolution: {integrity: sha512-5XWB9GbAUSHTn8VPU8/1DBXMuKYT5uOgEjJb8gN3mW0PNW5OPHpSdojoqf+iq1xo7vWzw/P8bAHY0n6ijpXF7g==} + + micromark-extension-gfm-task-list-item@1.0.5: + resolution: {integrity: sha512-RMFXl2uQ0pNQy6Lun2YBYT9g9INXtWJULgbt01D/x8/6yJ2qpKyzdZD3pi6UIkzF++Da49xAelVKUeUMqd5eIQ==} + + micromark-extension-gfm@2.0.3: + resolution: {integrity: sha512-vb9OoHqrhCmbRidQv/2+Bc6pkP0FrtlhurxZofvOEy5o8RtuuvTq+RQ1Vw5ZDNrVraQZu3HixESqbG+0iKk/MQ==} + + micromark-extension-mdx-expression@1.0.8: + resolution: {integrity: sha512-zZpeQtc5wfWKdzDsHRBY003H2Smg+PUi2REhqgIhdzAa5xonhP03FcXxqFSerFiNUr5AWmHpaNPQTBVOS4lrXw==} + + micromark-extension-mdx-jsx@1.0.5: + resolution: {integrity: sha512-gPH+9ZdmDflbu19Xkb8+gheqEDqkSpdCEubQyxuz/Hn8DOXiXvrXeikOoBA71+e8Pfi0/UYmU3wW3H58kr7akA==} + + micromark-extension-mdx-md@1.0.1: + resolution: {integrity: sha512-7MSuj2S7xjOQXAjjkbjBsHkMtb+mDGVW6uI2dBL9snOBCbZmoNgDAeZ0nSn9j3T42UE/g2xVNMn18PJxZvkBEA==} + + micromark-extension-mdxjs-esm@1.0.5: + resolution: {integrity: sha512-xNRBw4aoURcyz/S69B19WnZAkWJMxHMT5hE36GtDAyhoyn/8TuAeqjFJQlwk+MKQsUD7b3l7kFX+vlfVWgcX1w==} + + micromark-extension-mdxjs@1.0.1: + resolution: {integrity: sha512-7YA7hF6i5eKOfFUzZ+0z6avRG52GpWR8DL+kN47y3f2KhxbBZMhmxe7auOeaTBrW2DenbbZTf1ea9tA2hDpC2Q==} + + micromark-factory-destination@1.1.0: + resolution: {integrity: sha512-XaNDROBgx9SgSChd69pjiGKbV+nfHGDPVYFs5dOoDd7ZnMAE+Cuu91BCpsY8RT2NP9vo/B8pds2VQNCLiu0zhg==} + + micromark-factory-label@1.1.0: + resolution: {integrity: sha512-OLtyez4vZo/1NjxGhcpDSbHQ+m0IIGnT8BoPamh+7jVlzLJBH98zzuCoUeMxvM6WsNeh8wx8cKvqLiPHEACn0w==} + + micromark-factory-mdx-expression@1.0.9: + resolution: {integrity: sha512-jGIWzSmNfdnkJq05c7b0+Wv0Kfz3NJ3N4cBjnbO4zjXIlxJr+f8lk+5ZmwFvqdAbUy2q6B5rCY//g0QAAaXDWA==} + + micromark-factory-space@1.1.0: + resolution: {integrity: sha512-cRzEj7c0OL4Mw2v6nwzttyOZe8XY/Z8G0rzmWQZTBi/jjwyw/U4uqKtUORXQrR5bAZZnbTI/feRV/R7hc4jQYQ==} + + micromark-factory-title@1.1.0: + resolution: {integrity: sha512-J7n9R3vMmgjDOCY8NPw55jiyaQnH5kBdV2/UXCtZIpnHH3P6nHUKaH7XXEYuWwx/xUJcawa8plLBEjMPU24HzQ==} + + micromark-factory-whitespace@1.1.0: + resolution: {integrity: sha512-v2WlmiymVSp5oMg+1Q0N1Lxmt6pMhIHD457whWM7/GUlEks1hI9xj5w3zbc4uuMKXGisksZk8DzP2UyGbGqNsQ==} + + micromark-util-character@1.2.0: + resolution: {integrity: sha512-lXraTwcX3yH/vMDaFWCQJP1uIszLVebzUa3ZHdrgxr7KEU/9mL4mVgCpGbyhvNLNlauROiNUq7WN5u7ndbY6xg==} + + micromark-util-character@2.1.1: + resolution: {integrity: sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==} + + micromark-util-chunked@1.1.0: + resolution: {integrity: sha512-Ye01HXpkZPNcV6FiyoW2fGZDUw4Yc7vT0E9Sad83+bEDiCJ1uXu0S3mr8WLpsz3HaG3x2q0HM6CTuPdcZcluFQ==} + + micromark-util-classify-character@1.1.0: + resolution: {integrity: sha512-SL0wLxtKSnklKSUplok1WQFoGhUdWYKggKUiqhX+Swala+BtptGCu5iPRc+xvzJ4PXE/hwM3FNXsfEVgoZsWbw==} + + micromark-util-combine-extensions@1.1.0: + resolution: {integrity: sha512-Q20sp4mfNf9yEqDL50WwuWZHUrCO4fEyeDCnMGmG5Pr0Cz15Uo7KBs6jq+dq0EgX4DPwwrh9m0X+zPV1ypFvUA==} + + micromark-util-decode-numeric-character-reference@1.1.0: + resolution: {integrity: sha512-m9V0ExGv0jB1OT21mrWcuf4QhP46pH1KkfWy9ZEezqHKAxkj4mPCy3nIH1rkbdMlChLHX531eOrymlwyZIf2iw==} + + micromark-util-decode-string@1.1.0: + resolution: {integrity: sha512-YphLGCK8gM1tG1bd54azwyrQRjCFcmgj2S2GoJDNnh4vYtnL38JS8M4gpxzOPNyHdNEpheyWXCTnnTDY3N+NVQ==} + + micromark-util-encode@1.1.0: + resolution: {integrity: sha512-EuEzTWSTAj9PA5GOAs992GzNh2dGQO52UvAbtSOMvXTxv3Criqb6IOzJUBCmEqrrXSblJIJBbFFv6zPxpreiJw==} + + micromark-util-encode@2.0.1: + resolution: {integrity: sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw==} + + micromark-util-events-to-acorn@1.2.3: + resolution: {integrity: sha512-ij4X7Wuc4fED6UoLWkmo0xJQhsktfNh1J0m8g4PbIMPlx+ek/4YdW5mvbye8z/aZvAPUoxgXHrwVlXAPKMRp1w==} + + micromark-util-html-tag-name@1.2.0: + resolution: {integrity: sha512-VTQzcuQgFUD7yYztuQFKXT49KghjtETQ+Wv/zUjGSGBioZnkA4P1XXZPT1FHeJA6RwRXSF47yvJ1tsJdoxwO+Q==} + + micromark-util-normalize-identifier@1.1.0: + resolution: {integrity: sha512-N+w5vhqrBihhjdpM8+5Xsxy71QWqGn7HYNUvch71iV2PM7+E3uWGox1Qp90loa1ephtCxG2ftRV/Conitc6P2Q==} + + micromark-util-resolve-all@1.1.0: + resolution: {integrity: sha512-b/G6BTMSg+bX+xVCshPTPyAu2tmA0E4X98NSR7eIbeC6ycCqCeE7wjfDIgzEbkzdEVJXRtOG4FbEm/uGbCRouA==} + + micromark-util-sanitize-uri@1.2.0: + resolution: {integrity: sha512-QO4GXv0XZfWey4pYFndLUKEAktKkG5kZTdUNaTAkzbuJxn2tNBOr+QtxR2XpWaMhbImT2dPzyLrPXLlPhph34A==} + + micromark-util-sanitize-uri@2.0.1: + resolution: {integrity: sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==} + + micromark-util-subtokenize@1.1.0: + resolution: {integrity: sha512-kUQHyzRoxvZO2PuLzMt2P/dwVsTiivCK8icYTeR+3WgbuPqfHgPPy7nFKbeqRivBvn/3N3GBiNC+JRTMSxEC7A==} + + micromark-util-symbol@1.1.0: + resolution: {integrity: sha512-uEjpEYY6KMs1g7QfJ2eX1SQEV+ZT4rUD3UcF6l57acZvLNK7PBZL+ty82Z1qhK1/yXIY4bdx04FKMgR0g4IAag==} + + micromark-util-symbol@2.0.1: + resolution: {integrity: sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==} + + micromark-util-types@1.1.0: + resolution: {integrity: sha512-ukRBgie8TIAcacscVHSiddHjO4k/q3pnedmzMQ4iwDcK0FtFCohKOlFbaOL/mPgfnPsL3C1ZyxJa4sbWrBl3jg==} + + micromark-util-types@2.0.1: + resolution: {integrity: sha512-534m2WhVTddrcKVepwmVEVnUAmtrx9bfIjNoQHRqfnvdaHQiFytEhJoTgpWJvDEXCO5gLTQh3wYC1PgOJA4NSQ==} + + micromark@3.2.0: + resolution: {integrity: sha512-uD66tJj54JLYq0De10AhWycZWGQNUvDI55xPgk2sQM5kn1JYlhbCMTtEeT27+vAhW2FBQxLlOmS3pmA7/2z4aA==} + + micromatch@4.0.8: + resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} engines: {node: '>=8.6'} - mimic-fn@2.1.0: - resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} - engines: {node: '>=6'} + mime-db@1.25.0: + resolution: {integrity: sha512-5k547tI4Cy+Lddr/hdjNbBEWBwSl8EBc5aSdKvedav8DReADgWJzcYiktaRIw3GtGC1jjwldXtTzvqJZmtvC7w==} + engines: {node: '>= 0.6'} + + mime-types@2.1.13: + resolution: {integrity: sha512-ryBDp1Z/6X90UvjUK3RksH0IBPM137T7cmg4OgD5wQBojlAiUwuok0QeELkim/72EtcYuNlmbkrcGuxj3Kl0YQ==} + engines: {node: '>= 0.6'} mimic-fn@4.0.0: resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==} engines: {node: '>=12'} + mimic-function@5.0.1: + resolution: {integrity: sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==} + engines: {node: '>=18'} + + mini-svg-data-uri@1.4.4: + resolution: {integrity: sha512-r9deDe9p5FJUPZAk3A59wGH7Ii9YrjjWw0jmw/liSbHl2CHiyXj6FcDXDu2K3TjVAXqiJdaw3xxwlZZr9E6nHg==} + hasBin: true + minimatch@3.1.2: resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} @@ -1796,8 +3214,18 @@ packages: resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} engines: {node: '>=16 || 14 >=14.17'} - ms@2.1.2: - resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} + motion-dom@11.18.1: + resolution: {integrity: sha512-g76KvA001z+atjfxczdRtw/RXOM3OMSdd1f4DL77qCTF/+avrRJiawSG4yDibEQ215sr9kpinSlX2pCTJ9zbhw==} + + motion-utils@11.18.1: + resolution: {integrity: sha512-49Kt+HKjtbJKLtgO/LKj9Ld+6vw9BjH5d9sc40R/kVyH8GLAXgT42M2NnuPcJNuA3s9ZfZBUcwIgpmZWGEE+hA==} + + mri@1.2.0: + resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==} + engines: {node: '>=4'} + + ms@2.0.0: + resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==} ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} @@ -1805,20 +3233,35 @@ packages: mz@2.7.0: resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} - nanoid@3.3.7: - resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} + nanoid@3.3.8: + resolution: {integrity: sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true natural-compare@1.4.0: resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} + next-contentlayer@0.3.4: + resolution: {integrity: sha512-UtUCwgAl159KwfhNaOwyiI7Lg6sdioyKMeh+E7jxx0CJ29JuXGxBEYmCI6+72NxFGIFZKx8lvttbbQhbnYWYSw==} + peerDependencies: + contentlayer: 0.3.4 + next: ^12 || ^13 + react: '*' + react-dom: '*' + next-themes@0.3.0: resolution: {integrity: sha512-/QHIrsYpd6Kfk7xakK4svpDI5mmXP0gfvCoJdGpZQ2TOrQZmsW0QxjaiLn8wbIKjtm4BTSqLoix4lxYYOnLJ/w==} peerDependencies: react: ^16.8 || ^17 || ^18 react-dom: ^16.8 || ^17 || ^18 + next-view-transitions@0.3.4: + resolution: {integrity: sha512-SSiskenQ8JkEFGzPjvFwC5LGGoqgTxM5dxexkeugxvcXFLpWI2ZUh4IsCURD3ovW+8Ue7xXlrtrpy8b7XR7IwQ==} + peerDependencies: + next: '>=14.0.0' + react: ^18.2.0 + react-dom: ^18.2.0 + next@14.2.4: resolution: {integrity: sha512-R8/V7vugY+822rsQGQCjoLhMuC9oFj9SOi4Cl4b2wjDrseD0LRZ10W7R6Czo4w9ZznVSshKjuIomsRjvm9EKJQ==} engines: {node: '>=18.17.0'} @@ -1837,6 +3280,21 @@ packages: sass: optional: true + no-case@3.0.4: + resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==} + + node-cron@3.0.3: + resolution: {integrity: sha512-dOal67//nohNgYWb+nWmg5dkFdIwDm8EpeGYMekPMrngV3637lqnX0lbUcCtgibHTz6SEz7DAIjKvKDFYCnO1A==} + engines: {node: '>=6.0.0'} + + node-domexception@1.0.0: + resolution: {integrity: sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==} + engines: {node: '>=10.5.0'} + + node-fetch@3.3.2: + resolution: {integrity: sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + normalize-path@3.0.0: resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} engines: {node: '>=0.10.0'} @@ -1853,20 +3311,16 @@ packages: resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==} engines: {node: '>= 6'} - object-inspect@1.13.2: - resolution: {integrity: sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==} - engines: {node: '>= 0.4'} - - object-is@1.1.6: - resolution: {integrity: sha512-F8cZ+KfGlSGi09lJT7/Nd6KJZ9ygtvYC0/UYYLI9nmQKLMnydpB9yvbv9K1uSkEu7FU9vYPmVwLg328tX+ot3Q==} + object-inspect@1.13.4: + resolution: {integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==} engines: {node: '>= 0.4'} object-keys@1.1.1: resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} engines: {node: '>= 0.4'} - object.assign@4.1.5: - resolution: {integrity: sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==} + object.assign@4.1.7: + resolution: {integrity: sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==} engines: {node: '>= 0.4'} object.entries@1.1.8: @@ -1881,29 +3335,37 @@ packages: resolution: {integrity: sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==} engines: {node: '>= 0.4'} - object.hasown@1.1.4: - resolution: {integrity: sha512-FZ9LZt9/RHzGySlBARE3VF+gE26TxR38SdmqOqliuTnl9wrKulaQs+4dee1V+Io8VfxqzAfHu6YuRgUy8OHoTg==} + object.values@1.2.1: + resolution: {integrity: sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==} engines: {node: '>= 0.4'} - object.values@1.2.0: - resolution: {integrity: sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==} - engines: {node: '>= 0.4'} + on-change@4.0.2: + resolution: {integrity: sha512-cMtCyuJmTx/bg2HCpHo3ZLeF7FZnBOapLqZHr2AlLeJ5Ul0Zu2mUJJz051Fdwu/Et2YW04ZD+TtU+gVy0ACNCA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} once@1.4.0: resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} - onetime@5.1.2: - resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} - engines: {node: '>=6'} - onetime@6.0.0: resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==} engines: {node: '>=12'} + onetime@7.0.0: + resolution: {integrity: sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==} + engines: {node: '>=18'} + + oo-ascii-tree@1.106.0: + resolution: {integrity: sha512-0PZkjIiJUW3jEx7durxcri7JciR8VbJpf2K3qiVbGG4x0MTq6Xm/H84GjBI6tamSx/DV1PMFDfwMs3hm8zfOCw==} + engines: {node: '>= 14.17.0'} + optionator@0.9.4: resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} engines: {node: '>= 0.8.0'} + own-keys@1.0.1: + resolution: {integrity: sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==} + engines: {node: '>= 0.4'} + p-limit@3.1.0: resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} engines: {node: '>=10'} @@ -1920,17 +3382,32 @@ packages: resolution: {integrity: sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - package-json-from-dist@1.0.0: - resolution: {integrity: sha512-dATvCeZN/8wQsGywez1mzHtTlP22H8OEfPrVMLNr4/eGa+ijtLn/6M5f0dY8UKNrC2O9UCU6SSoG3qRKnt7STw==} + package-json-from-dist@1.0.1: + resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==} parent-module@1.0.1: resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} engines: {node: '>=6'} + parse-entities@4.0.2: + resolution: {integrity: sha512-GG2AQYWoLgL877gQIKeRPGO1xF9+eG1ujIb5soS5gPvLQ1y2o8FL90w2QWNdf9I361Mpp7726c+lj3U0qK1uGw==} + parse-json@5.2.0: resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} engines: {node: '>=8'} + parse-numeric-range@1.3.0: + resolution: {integrity: sha512-twN+njEipszzlMJd4ONUYgSfZPDxgHhT9Ahed5uTigpQn90FggW4SA/AIPq/6a149fTbE9qBEcSwE3FAEp6wQQ==} + + parse5@6.0.1: + resolution: {integrity: sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==} + + parse5@7.2.1: + resolution: {integrity: sha512-BuBYQYlv1ckiPdQi/ohiivi9Sagc9JG+Ozs0r7b/0iK3sKmrb0b9FdWdBbOdx6hBCM/F9Ir82ofnBhtZOjCRPQ==} + + pascal-case@3.1.2: + resolution: {integrity: sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==} + path-exists@4.0.0: resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} engines: {node: '>=8'} @@ -1962,8 +3439,15 @@ packages: resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} engines: {node: '>=8'} - picocolors@1.0.1: - resolution: {integrity: sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==} + path-type@6.0.0: + resolution: {integrity: sha512-Vj7sf++t5pBD637NSfkxpHSMfWaeig5+DKWLhcqIYx6mWQz5hdJTGDVMQiJcw1ZYkhs7AazKDGpRVji1LJCZUQ==} + engines: {node: '>=18'} + + periscopic@3.1.0: + resolution: {integrity: sha512-vKiQ8RRtkl9P+r/+oefh25C3fhybptkHKCZSPlcXiJux2tJF55GnEj3BVn4A5gKfq9NWWXXrxkHBwVPUfH0opw==} + + picocolors@1.1.1: + resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} picomatch@2.3.1: resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} @@ -1982,8 +3466,8 @@ packages: resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} engines: {node: '>= 6'} - possible-typed-array-names@1.0.0: - resolution: {integrity: sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==} + possible-typed-array-names@1.1.0: + resolution: {integrity: sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==} engines: {node: '>= 0.4'} postcss-import@15.1.0: @@ -2010,14 +3494,18 @@ packages: ts-node: optional: true - postcss-nested@6.0.1: - resolution: {integrity: sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==} + postcss-nested@6.2.0: + resolution: {integrity: sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==} engines: {node: '>=12.0'} peerDependencies: postcss: ^8.2.14 - postcss-selector-parser@6.1.0: - resolution: {integrity: sha512-UMz42UD0UY0EApS0ZL9o1XnLhSTtvvvLe5Dc2H2O56fvRZi+KulDyf5ctDhhtYJBGKStV2FL1fy6253cmLgqVQ==} + postcss-selector-parser@6.0.10: + resolution: {integrity: sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==} + engines: {node: '>=4'} + + postcss-selector-parser@6.1.2: + resolution: {integrity: sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==} engines: {node: '>=4'} postcss-value-parser@4.2.0: @@ -2027,8 +3515,8 @@ packages: resolution: {integrity: sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==} engines: {node: ^10 || ^12 || >=14} - postcss@8.4.39: - resolution: {integrity: sha512-0vzE+lAiG7hZl1/9I8yzKLx3aR9Xbof3fBHKunvMfOCYAtMhrsnccJY2iTURb9EZd5+pLuiNV9/c/GZJOHsgIw==} + postcss@8.5.1: + resolution: {integrity: sha512-6oz2beyjc5VMn/KV1pPw8fliQkhBXrVn1Z3TVyqZxU8kZpzEKhBdmCFqI6ZbmGtamQvQGuU1sgPTk8ZrXDD7jQ==} engines: {node: ^10 || ^12 || >=14} prelude-ls@1.2.1: @@ -2039,14 +3527,21 @@ packages: resolution: {integrity: sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==} engines: {node: '>=6.0.0'} - prettier@3.3.2: - resolution: {integrity: sha512-rAVeHYMcv8ATV5d508CFdn+8/pHPpXeIid1DdrPwXnaAdH7cqjVbpJaT5eq4yRAFU/lsbwYwSF/n5iNrdJHPQA==} + prettier@3.5.0: + resolution: {integrity: sha512-quyMrVt6svPS7CjQ9gKb3GLEX/rl3BCL2oa/QkNcXv4YNVBC9olt3s+H7ukto06q7B1Qz46PbrKLO34PR6vXcA==} engines: {node: '>=14'} hasBin: true prop-types@15.8.1: resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} + property-information@6.5.0: + resolution: {integrity: sha512-PgTgs/BlvHxOu8QuEN7wi5A0OmXaBcHpmCSTehcs6Uuu9IkDIEo13Hy7n898RHfrQ49vKCoGeWZSaAK01nwVig==} + + protobufjs@7.4.0: + resolution: {integrity: sha512-mRUWCc3KUU4w1jU8sGxICXH/gNS94DvI1gxqDvBzhj1JpcsimQkYiOJfwsPUykUI5ZaspFbSgmBLER8IrQ3tqw==} + engines: {node: '>=12.0.0'} + punycode@2.3.1: resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} engines: {node: '>=6'} @@ -2062,36 +3557,50 @@ packages: react-is@16.13.1: resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} - react-remove-scroll-bar@2.3.6: - resolution: {integrity: sha512-DtSYaao4mBmX+HDo5YWYdBWQwYIQQshUV/dVxFxK+KM26Wjwp1gZ6rv6OC3oujI6Bfu6Xyg3TwK533AQutsn/g==} + react-medium-image-zoom@5.2.13: + resolution: {integrity: sha512-KcBL4OsoUQJgIFh6vQgt/6sRGqDy6bQBcsbhGD2tsy4B5Pw3dWrboocVOyIm76RRALEZ6Qwp3EDvIvfEv0m5sg==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + + react-merge-refs@2.1.1: + resolution: {integrity: sha512-jLQXJ/URln51zskhgppGJ2ub7b2WFKGq3cl3NYKtlHoTG+dN2q7EzWrn3hN3EgPsTMvpR9tpq5ijdp7YwFZkag==} + + react-remove-scroll-bar@2.3.8: + resolution: {integrity: sha512-9r+yi9+mgU33AKcj6IbT9oRCO78WriSj6t/cF8DWBZJ9aOGPOTEDvdUDz1FwKim7QXWwmHqtdHnRJfhAxEG46Q==} engines: {node: '>=10'} peerDependencies: - '@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0 - react: ^16.8.0 || ^17.0.0 || ^18.0.0 + '@types/react': '*' + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 peerDependenciesMeta: '@types/react': optional: true - react-remove-scroll@2.5.7: - resolution: {integrity: sha512-FnrTWO4L7/Bhhf3CYBNArEG/yROV0tKmTv7/3h9QCFvH6sndeFf1wPqOcbFVu5VAulS5dV1wGT3GZZ/1GawqiA==} + react-remove-scroll@2.6.3: + resolution: {integrity: sha512-pnAi91oOk8g8ABQKGF5/M9qxmmOPxaAnopyTHYfqYEwJhyFrbbBtHuSgtKEoH0jpcxx5o3hXqH1mNd9/Oi+8iQ==} engines: {node: '>=10'} peerDependencies: - '@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0 - react: ^16.8.0 || ^17.0.0 || ^18.0.0 + '@types/react': '*' + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc peerDependenciesMeta: '@types/react': optional: true - react-style-singleton@2.2.1: - resolution: {integrity: sha512-ZWj0fHEMyWkHzKYUr2Bs/4zU6XLmq9HsgBURm7g5pAVfyn49DgUiNgY2d4lXRlYSiCif9YBGpQleewkcqddc7g==} + react-style-singleton@2.2.3: + resolution: {integrity: sha512-b6jSvxvVnyptAiLjbkWLE/lOnR4lfTtDAl+eUC7RZy+QQWc6wRzIV2CE6xBuMmDxc2qIihtDCZD5NPOFl7fRBQ==} engines: {node: '>=10'} peerDependencies: - '@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0 - react: ^16.8.0 || ^17.0.0 || ^18.0.0 + '@types/react': '*' + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc peerDependenciesMeta: '@types/react': optional: true + react-wrap-balancer@1.1.1: + resolution: {integrity: sha512-AB+l7FPRWl6uZ28VcJ8skkwLn2+UC62bjiw8tQUrZPlEWDVnR9MG0lghyn7EyxuJSsFEpht4G+yh2WikEqQ/5Q==} + peerDependencies: + react: '>=16.8.0 || ^17.0.0 || ^18' + react@18.3.1: resolution: {integrity: sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==} engines: {node: '>=0.10.0'} @@ -2103,14 +3612,64 @@ packages: resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} engines: {node: '>=8.10.0'} - reflect.getprototypeof@1.0.6: - resolution: {integrity: sha512-fmfw4XgoDke3kdI6h4xcUz1dG8uaiv5q9gcEwLS4Pnth2kxT+GZ7YehS1JTMGBQmtV7Y4GFGbs2re2NqhdozUg==} + reading-time@1.5.0: + resolution: {integrity: sha512-onYyVhBNr4CmAxFsKS7bz+uTLRakypIe4R+5A824vBSkQy/hB3fZepoVEf8OVAxzLvK+H/jm9TzpI3ETSm64Kg==} + + reflect.getprototypeof@1.0.10: + resolution: {integrity: sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==} engines: {node: '>= 0.4'} - regexp.prototype.flags@1.5.2: - resolution: {integrity: sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==} + refractor@4.8.1: + resolution: {integrity: sha512-/fk5sI0iTgFYlmVGYVew90AoYnNMP6pooClx/XKqyeeCQXrL0Kvgn8V0VEht5ccdljbzzF1i3Q213gcntkRExg==} + + regenerator-runtime@0.14.1: + resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} + + regexp.prototype.flags@1.5.4: + resolution: {integrity: sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==} engines: {node: '>= 0.4'} + rehype-autolink-headings@7.1.0: + resolution: {integrity: sha512-rItO/pSdvnvsP4QRB1pmPiNHUskikqtPojZKJPPPAVx9Hj8i8TwMBhofrrAYRhYOOBZH9tgmG5lPqDLuIWPWmw==} + + rehype-parse@9.0.1: + resolution: {integrity: sha512-ksCzCD0Fgfh7trPDxr2rSylbwq9iYDkSn8TCDmEJ49ljEUBxDVCzCHv7QNzZOfODanX4+bWQ4WZqLCRWYLfhag==} + + rehype-prism-plus@2.0.0: + resolution: {integrity: sha512-FeM/9V2N7EvDZVdR2dqhAzlw5YI49m9Tgn7ZrYJeYHIahM6gcXpH0K1y2gNnKanZCydOMluJvX2cB9z3lhY8XQ==} + + rehype-slug@6.0.0: + resolution: {integrity: sha512-lWyvf/jwu+oS5+hL5eClVd3hNdmwM1kAC0BUvEGD19pajQMIzcNUd/k9GsfQ+FfECvX+JE+e9/btsKH0EjJT6A==} + + rehype-stringify@9.0.4: + resolution: {integrity: sha512-Uk5xu1YKdqobe5XpSskwPvo1XeHUUucWEQSl8hTrXt5selvca1e8K1EZ37E6YoZ4BT8BCqCdVfQW7OfHfthtVQ==} + + remark-frontmatter@4.0.1: + resolution: {integrity: sha512-38fJrB0KnmD3E33a5jZC/5+gGAC2WKNiPw1/fdXJvijBlhA7RCsvJklrYJakS0HedninvaCYW8lQGf9C918GfA==} + + remark-gfm@3.0.1: + resolution: {integrity: sha512-lEFDoi2PICJyNrACFOfDD3JlLkuSbOa5Wd8EPt06HUdptv8Gn0bxYTdbU/XXQ3swAPkEaGxxPN9cbnMHvVu1Ig==} + + remark-mdx-frontmatter@1.1.1: + resolution: {integrity: sha512-7teX9DW4tI2WZkXS4DBxneYSY7NHiXl4AKdWDO9LXVweULlCT8OPWsOjLEnMIXViN1j+QcY8mfbq3k0EK6x3uA==} + engines: {node: '>=12.2.0'} + + remark-mdx@2.3.0: + resolution: {integrity: sha512-g53hMkpM0I98MU266IzDFMrTD980gNF3BJnkyFcmN+dD873mQeD5rdMO3Y2X+x8umQfbSE0PcoEDl7ledSA+2g==} + + remark-parse@10.0.2: + resolution: {integrity: sha512-3ydxgHa/ZQzG8LvC7jTXccARYDcRld3VfcgIIFs7bI6vbRSxJJmzgLEIIoYKyrfhaY+ujuWaf/PJiMZXoiCXgw==} + + remark-rehype@10.1.0: + resolution: {integrity: sha512-EFmR5zppdBp0WQeDVZ/b66CWJipB2q2VLNFMabzDSGR66Z2fQii83G5gTBbgGEnEEA0QRussvrFHxk1HWGJskw==} + + remark-rehype@11.1.1: + resolution: {integrity: sha512-g/osARvjkBXb6Wo0XvAeXQohVta8i84ACbenPpoSsxTOQH/Ae0/RGP4WZgnMH5pMLpsj4FG7OHmcIcXxpza8eQ==} + + repeat-string@1.6.1: + resolution: {integrity: sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==} + engines: {node: '>=0.10'} + require-directory@2.1.1: resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} engines: {node: '>=0.10.0'} @@ -2130,17 +3689,18 @@ packages: resolve-pkg-maps@1.0.0: resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} - resolve@1.22.8: - resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} + resolve@1.22.10: + resolution: {integrity: sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==} + engines: {node: '>= 0.4'} hasBin: true resolve@2.0.0-next.5: resolution: {integrity: sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==} hasBin: true - restore-cursor@4.0.0: - resolution: {integrity: sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + restore-cursor@5.1.0: + resolution: {integrity: sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==} + engines: {node: '>=18'} reusify@1.0.4: resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} @@ -2154,29 +3714,50 @@ packages: deprecated: Rimraf versions prior to v4 are no longer supported hasBin: true + rss@1.2.2: + resolution: {integrity: sha512-xUhRTgslHeCBeHAqaWSbOYTydN2f0tAzNXvzh3stjz7QDhQMzdgHf3pfgNIngeytQflrFPfy6axHilTETr6gDg==} + run-parallel@1.2.0: resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} - safe-array-concat@1.1.2: - resolution: {integrity: sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==} + sade@1.8.1: + resolution: {integrity: sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==} + engines: {node: '>=6'} + + safe-array-concat@1.1.3: + resolution: {integrity: sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==} engines: {node: '>=0.4'} - safe-regex-test@1.0.3: - resolution: {integrity: sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==} + safe-push-apply@1.0.0: + resolution: {integrity: sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==} + engines: {node: '>= 0.4'} + + safe-regex-test@1.1.0: + resolution: {integrity: sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==} engines: {node: '>= 0.4'} scheduler@0.23.2: resolution: {integrity: sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==} + section-matter@1.0.0: + resolution: {integrity: sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA==} + engines: {node: '>=4'} + + semver-compare@1.0.0: + resolution: {integrity: sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow==} + semver@6.3.1: resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} hasBin: true - semver@7.6.2: - resolution: {integrity: sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==} + semver@7.7.1: + resolution: {integrity: sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==} engines: {node: '>=10'} hasBin: true + server-only@0.0.1: + resolution: {integrity: sha512-qepMx2JxAa5jjfzxG79yPPq+8BuFToHd1hm7kI+Z4zAq1ftQiP7HcxMhDDItrbtwVeLg/cY2JnKnrcFkmiswNA==} + set-function-length@1.2.2: resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} engines: {node: '>= 0.4'} @@ -2185,6 +3766,14 @@ packages: resolution: {integrity: sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==} engines: {node: '>= 0.4'} + set-proto@1.0.0: + resolution: {integrity: sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==} + engines: {node: '>= 0.4'} + + sharp@0.33.5: + resolution: {integrity: sha512-haPVm1EkS9pgvHrQ/F3Xy+hgcuMV0Wm9vfIBSiwZ05k+xgb0PkBQpGsAA/oWdDobNaZTH5ppvHtzCFbnSEwHVw==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + shebang-command@2.0.0: resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} engines: {node: '>=8'} @@ -2193,21 +3782,37 @@ packages: resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} engines: {node: '>=8'} - side-channel@1.0.6: - resolution: {integrity: sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==} + side-channel-list@1.0.0: + resolution: {integrity: sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==} + engines: {node: '>= 0.4'} + + side-channel-map@1.0.1: + resolution: {integrity: sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==} + engines: {node: '>= 0.4'} + + side-channel-weakmap@1.0.2: + resolution: {integrity: sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==} engines: {node: '>= 0.4'} - signal-exit@3.0.7: - resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} + side-channel@1.1.0: + resolution: {integrity: sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==} + engines: {node: '>= 0.4'} signal-exit@4.1.0: resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} engines: {node: '>=14'} + simple-swizzle@0.2.2: + resolution: {integrity: sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==} + slash@3.0.0: resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} engines: {node: '>=8'} + slash@5.1.0: + resolution: {integrity: sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==} + engines: {node: '>=14.16'} + slice-ansi@5.0.0: resolution: {integrity: sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==} engines: {node: '>=12'} @@ -2216,17 +3821,39 @@ packages: resolution: {integrity: sha512-bSiSngZ/jWeX93BqeIAbImyTbEihizcwNjFoRUIY/T1wWQsfsm2Vw1agPKylXvQTU7iASGdHhyqRlqQzfz+Htg==} engines: {node: '>=18'} - source-map-js@1.2.0: - resolution: {integrity: sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==} + sonner@1.7.4: + resolution: {integrity: sha512-DIS8z4PfJRbIyfVFDVnK9rO3eYDtse4Omcm6bt0oEr5/jtLgysmjuBl1frJ9E/EQZrFmKx2A8m/s5s9CRXIzhw==} + peerDependencies: + react: ^18.0.0 || ^19.0.0 || ^19.0.0-rc + react-dom: ^18.0.0 || ^19.0.0 || ^19.0.0-rc + + source-map-js@1.2.1: + resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} + engines: {node: '>=0.10.0'} + + source-map-support@0.5.21: + resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} + + source-map@0.6.1: + resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} engines: {node: '>=0.10.0'} + source-map@0.7.4: + resolution: {integrity: sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==} + engines: {node: '>= 8'} + + space-separated-tokens@2.0.2: + resolution: {integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==} + split2@4.2.0: resolution: {integrity: sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==} engines: {node: '>= 10.x'} - stop-iteration-iterator@1.0.0: - resolution: {integrity: sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ==} - engines: {node: '>= 0.4'} + sprintf-js@1.0.3: + resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} + + stable-hash@0.0.4: + resolution: {integrity: sha512-LjdcbuBeLcdETCrPn9i8AYAZ1eCtu4ECAWtP7UleOiZ9LzVxRzzUZEoZ8zB24nhkQnDWyET0I+3sWokSDS3E7g==} streamsearch@1.1.0: resolution: {integrity: sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==} @@ -2248,24 +3875,32 @@ packages: resolution: {integrity: sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==} engines: {node: '>=18'} - string.prototype.includes@2.0.0: - resolution: {integrity: sha512-E34CkBgyeqNDcrbU76cDjL5JLcVrtSdYq0MEh/B10r17pRP4ciHLwTgnuLV8Ay6cgEMLkcBkFCKyFZ43YldYzg==} + string.prototype.includes@2.0.1: + resolution: {integrity: sha512-o7+c9bW6zpAdJHTtujeePODAhkuicdAryFsfVKwA+wGw89wJ4GTY484WTucM9hLtDEOpOvI+aHnzqnC5lHp4Rg==} + engines: {node: '>= 0.4'} - string.prototype.matchall@4.0.11: - resolution: {integrity: sha512-NUdh0aDavY2og7IbBPenWqR9exH+E26Sv8e0/eTe1tltDGZL+GtBkDAnnyBtmekfK6/Dq3MkcGtzXFEd1LQrtg==} + string.prototype.matchall@4.0.12: + resolution: {integrity: sha512-6CC9uyBL+/48dYizRf7H7VAYCMCNTBeM78x/VTUe9bFEaxBepPJDa1Ow99LqI/1yF7kuy7Q3cQsYMrcjGUcskA==} engines: {node: '>= 0.4'} - string.prototype.trim@1.2.9: - resolution: {integrity: sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==} + string.prototype.repeat@1.0.0: + resolution: {integrity: sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==} + + string.prototype.trim@1.2.10: + resolution: {integrity: sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==} engines: {node: '>= 0.4'} - string.prototype.trimend@1.0.8: - resolution: {integrity: sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==} + string.prototype.trimend@1.0.9: + resolution: {integrity: sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==} + engines: {node: '>= 0.4'} string.prototype.trimstart@1.0.8: resolution: {integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==} engines: {node: '>= 0.4'} + stringify-entities@4.0.4: + resolution: {integrity: sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==} + strip-ansi@6.0.1: resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} engines: {node: '>=8'} @@ -2274,6 +3909,10 @@ packages: resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} engines: {node: '>=12'} + strip-bom-string@1.0.0: + resolution: {integrity: sha512-uCC2VHvQRYu+lMh4My/sFNmF2klFymLX1wHJeXnbEJERpV/ZsVuonzerjfrGpIGF7LBVa1O7i9kjiWvJiFck8g==} + engines: {node: '>=0.10.0'} + strip-bom@3.0.0: resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} engines: {node: '>=4'} @@ -2286,6 +3925,9 @@ packages: resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} engines: {node: '>=8'} + style-to-object@0.4.4: + resolution: {integrity: sha512-HYNoHZa2GorYNyqiCaBgsxvcJIn7OHq6inEga+E6Ke3m5JkoqpQbnFssk4jwe+K7AhGa2fcha4wSOf1Kn01dMg==} + styled-jsx@5.1.1: resolution: {integrity: sha512-pW7uC1l4mBZ8ugbiZrcIsiIvVx1UmTfw7UkC3Um2tmfUq9Bhk8IiyEIPl6F8agHgjzku6j0xQEZbfA5uSgSaCw==} engines: {node: '>= 12.0.0'} @@ -2304,10 +3946,6 @@ packages: engines: {node: '>=16 || 14 >=14.17'} hasBin: true - supports-color@5.5.0: - resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} - engines: {node: '>=4'} - supports-color@7.2.0: resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} engines: {node: '>=8'} @@ -2316,20 +3954,20 @@ packages: resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} engines: {node: '>= 0.4'} - synckit@0.8.8: - resolution: {integrity: sha512-HwOKAP7Wc5aRGYdKH+dw0PRRpbO841v2DENBtjnR5HFWoiNByAl7vrx3p0G/rCyYXQsrxqtX48TImFtPcIHSpQ==} + synckit@0.9.2: + resolution: {integrity: sha512-vrozgXDQwYO72vHjUb/HnFbQx1exDjoKzqx23aXEg2a9VIg2TSFZ8FmeZpTjUCFMYw7mpX4BE2SFu8wI7asYsw==} engines: {node: ^14.18.0 || >=16.0.0} - tailwind-merge@2.4.0: - resolution: {integrity: sha512-49AwoOQNKdqKPd9CViyH5wJoSKsCDjUlzL8DxuGp3P1FsGY36NJDAa18jLZcaHAUUuTj+JB8IAo8zWgBNvBF7A==} + tailwind-merge@2.6.0: + resolution: {integrity: sha512-P+Vu1qXfzediirmHOC3xKGAYeZtPcV9g76X+xg2FD4tYgR71ewMA35Y3sCz3zhiN/dwefRpJX0yBcgwi1fXNQA==} tailwindcss-animate@1.0.7: resolution: {integrity: sha512-bl6mpH3T7I3UFxuvDEXLxy/VuFxBk5bbzplh7tXI68mwMokNYd1t9qPBHlnyTwfa4JGC4zP516I1hYYtQ/vspA==} peerDependencies: tailwindcss: '>=3.0.0 || insiders' - tailwindcss@3.4.4: - resolution: {integrity: sha512-ZoyXOdJjISB7/BcLTR6SEsLgKtDStYyYZVLsUtWChO4Ps20CBad7lfJKVDiejocV4ME1hLmyY0WJE3hSDcmQ2A==} + tailwindcss@3.4.17: + resolution: {integrity: sha512-w33E2aCvSDP0tW9RZuNXadXlkHXqFzSkQew/aIa2i/Sj8fThxwovwlXHSPXTbAHwEIhBFXAedUhP2tueAKP8Og==} engines: {node: '>=14.0.0'} hasBin: true @@ -2354,12 +3992,30 @@ packages: through@2.3.8: resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} + thumbhash@0.1.1: + resolution: {integrity: sha512-kH5pKeIIBPQXAOni2AiY/Cu/NKdkFREdpH+TLdM0g6WA7RriCv0kPLgP731ady67MhTAqrVG/4mnEeibVuCJcg==} + + tinyexec@0.3.2: + resolution: {integrity: sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==} + to-regex-range@5.0.1: resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} engines: {node: '>=8.0'} - ts-api-utils@1.3.0: - resolution: {integrity: sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==} + tocbot@4.33.0: + resolution: {integrity: sha512-mwTJXunwTyic/22uyLeBGXeX/c6jLcfrF8ONVJmwSg5tieW6kYGSfSSJQEOQXStbutv7WS7QdZ+gk4vQIQ23nA==} + + toml@3.0.0: + resolution: {integrity: sha512-y/mWCZinnvxjTKYhJ+pYxwD0mRLVvOtdS2Awbgxln6iEnt4rk0yBxeSBHkGJcPucRiG0e55mwWp+g/05rsrd6w==} + + trim-lines@3.0.1: + resolution: {integrity: sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==} + + trough@2.2.0: + resolution: {integrity: sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==} + + ts-api-utils@1.4.3: + resolution: {integrity: sha512-i3eMG77UTMD0hZhgRS562pv83RC6ukSAC2GMNWc+9dieh/+jDM5u5YG+NHX6VNDRHQcHwmsTHctP9LhbC3WxVw==} engines: {node: '>=16'} peerDependencies: typescript: '>=4.2.0' @@ -2367,11 +4023,17 @@ packages: ts-interface-checker@0.1.13: resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} + ts-pattern@4.3.0: + resolution: {integrity: sha512-pefrkcd4lmIVR0LA49Imjf9DYLK8vtWhqBPA3Ya1ir8xCW0O2yjL9dsCVvI7pCodLC5q7smNpEtDR2yVulQxOg==} + tsconfig-paths@3.15.0: resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==} - tslib@2.6.3: - resolution: {integrity: sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==} + tslib@2.8.1: + resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} + + typanion@3.14.0: + resolution: {integrity: sha512-ZW/lVMRabETuYCd9O9ZvMhAh8GslSqaUjxmK/JLPCh6l73CvLBiuXswj/+7LdnWOgYsQ130FqLzFz5aGT4I3Ug==} type-check@0.4.0: resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} @@ -2381,76 +4043,175 @@ packages: resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} engines: {node: '>=10'} - typed-array-buffer@1.0.2: - resolution: {integrity: sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==} + type-fest@3.13.1: + resolution: {integrity: sha512-tLq3bSNx+xSpwvAJnzrK0Ep5CLNWjvFTOp71URMaAEWBfRb9nnJiBoUe0tF8bI4ZFO3omgBR6NvnbzVUT3Ly4g==} + engines: {node: '>=14.16'} + + typed-array-buffer@1.0.3: + resolution: {integrity: sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==} engines: {node: '>= 0.4'} - typed-array-byte-length@1.0.1: - resolution: {integrity: sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==} + typed-array-byte-length@1.0.3: + resolution: {integrity: sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==} engines: {node: '>= 0.4'} - typed-array-byte-offset@1.0.2: - resolution: {integrity: sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==} + typed-array-byte-offset@1.0.4: + resolution: {integrity: sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==} engines: {node: '>= 0.4'} - typed-array-length@1.0.6: - resolution: {integrity: sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==} + typed-array-length@1.0.7: + resolution: {integrity: sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==} engines: {node: '>= 0.4'} - typescript@5.5.3: - resolution: {integrity: sha512-/hreyEujaB0w76zKo6717l3L0o/qEUtRgdvUBvlkhoWeOVMjMuHNHk0BRBzikzuGDqNmPQbg5ifMEqsHLiIUcQ==} + typescript@5.7.3: + resolution: {integrity: sha512-84MVSjMEHP+FQRPy3pX9sTVV/INIex71s9TL2Gm5FG/WG1SqXeKyZ0k7/blY/4FdOzI12CBy1vGc4og/eus0fw==} engines: {node: '>=14.17'} hasBin: true - unbox-primitive@1.0.2: - resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} + unbox-primitive@1.1.0: + resolution: {integrity: sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==} + engines: {node: '>= 0.4'} - undici-types@5.26.5: - resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} + undici-types@6.19.8: + resolution: {integrity: sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==} unicorn-magic@0.1.0: resolution: {integrity: sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==} engines: {node: '>=18'} + unicorn-magic@0.3.0: + resolution: {integrity: sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA==} + engines: {node: '>=18'} + + unified@10.1.2: + resolution: {integrity: sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==} + + unified@11.0.5: + resolution: {integrity: sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==} + + unist-util-filter@5.0.1: + resolution: {integrity: sha512-pHx7D4Zt6+TsfwylH9+lYhBhzyhEnCXs/lbq/Hstxno5z4gVdyc2WEW0asfjGKPyG4pEKrnBv5hdkO6+aRnQJw==} + + unist-util-generated@2.0.1: + resolution: {integrity: sha512-qF72kLmPxAw0oN2fwpWIqbXAVyEqUzDHMsbtPvOudIlUzXYFIeQIuxXQCRCFh22B7cixvU0MG7m3MW8FTq/S+A==} + + unist-util-is@5.2.1: + resolution: {integrity: sha512-u9njyyfEh43npf1M+yGKDGVPbY/JWEemg5nH05ncKPfi+kBbKBJoTdsogMu33uhytuLlv9y0O7GH7fEdwLdLQw==} + + unist-util-is@6.0.0: + resolution: {integrity: sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==} + + unist-util-position-from-estree@1.1.2: + resolution: {integrity: sha512-poZa0eXpS+/XpoQwGwl79UUdea4ol2ZuCYguVaJS4qzIOMDzbqz8a3erUCOmubSZkaOuGamb3tX790iwOIROww==} + + unist-util-position@4.0.4: + resolution: {integrity: sha512-kUBE91efOWfIVBo8xzh/uZQ7p9ffYRtUbMRZBNFYwf0RK8koUMx6dGUfwylLOKmaT2cs4wSW96QoYUSXAyEtpg==} + + unist-util-position@5.0.0: + resolution: {integrity: sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==} + + unist-util-remove-position@4.0.2: + resolution: {integrity: sha512-TkBb0HABNmxzAcfLf4qsIbFbaPDvMO6wa3b3j4VcEzFVaw1LBKwnW4/sRJ/atSLSzoIg41JWEdnE7N6DIhGDGQ==} + + unist-util-stringify-position@3.0.3: + resolution: {integrity: sha512-k5GzIBZ/QatR8N5X2y+drfpWG8IDBzdnVj6OInRNWm1oXrzydiaAT2OQiA8DPRRZyAKb9b6I2a6PxYklZD0gKg==} + + unist-util-stringify-position@4.0.0: + resolution: {integrity: sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==} + + unist-util-visit-parents@5.1.3: + resolution: {integrity: sha512-x6+y8g7wWMyQhL1iZfhIPhDAs7Xwbn9nRosDXl7qoPTSCy0yNxnKc+hWokFifWQIDGi154rdUqKvbCa4+1kLhg==} + + unist-util-visit-parents@6.0.1: + resolution: {integrity: sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==} + + unist-util-visit@4.1.2: + resolution: {integrity: sha512-MSd8OUGISqHdVvfY9TPhyK2VdUrPgxkUtWSuMHF6XAAFuL4LokseigBnZtPnJMu+FbynTkFNnFlyjxpVKujMRg==} + + unist-util-visit@5.0.0: + resolution: {integrity: sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==} + + universalify@2.0.1: + resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} + engines: {node: '>= 10.0.0'} + uri-js@4.4.1: resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} - use-callback-ref@1.3.2: - resolution: {integrity: sha512-elOQwe6Q8gqZgDA8mrh44qRTQqpIHDcZ3hXTLjBe1i4ph8XpNJnO+aQf3NaG+lriLopI4HMx9VjQLfPQ6vhnoA==} + use-callback-ref@1.3.3: + resolution: {integrity: sha512-jQL3lRnocaFtu3V00JToYz/4QkNWswxijDaCVNZRiRTO3HQDLsdu1ZtmIUvV4yPp+rvWm5j0y0TG/S61cuijTg==} engines: {node: '>=10'} peerDependencies: - '@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0 - react: ^16.8.0 || ^17.0.0 || ^18.0.0 + '@types/react': '*' + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc peerDependenciesMeta: '@types/react': optional: true - use-sidecar@1.1.2: - resolution: {integrity: sha512-epTbsLuzZ7lPClpz2TyryBfztm7m+28DlEv2ZCQ3MDr5ssiwyOwGH/e5F9CkfWjJ1t4clvI58yF822/GUkjjhw==} + use-sidecar@1.1.3: + resolution: {integrity: sha512-Fedw0aZvkhynoPYlA5WXrMCAMm+nSWdZt6lzJQ7Ok8S6Q+VsHmHpRWndVRJ8Be0ZbkfPc5LRYH+5XrzXcEeLRQ==} engines: {node: '>=10'} peerDependencies: - '@types/react': ^16.9.0 || ^17.0.0 || ^18.0.0 - react: ^16.8.0 || ^17.0.0 || ^18.0.0 + '@types/react': '*' + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc peerDependenciesMeta: '@types/react': optional: true + utf8@2.1.2: + resolution: {integrity: sha512-QXo+O/QkLP/x1nyi54uQiG0XrODxdysuQvE5dtVqv7F5K2Qb6FsN+qbr6KhF5wQ20tfcV3VQp0/2x1e1MRSPWg==} + util-deprecate@1.0.2: resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} - which-boxed-primitive@1.0.2: - resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==} + uuid@8.3.2: + resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} + hasBin: true + + uvu@0.5.6: + resolution: {integrity: sha512-+g8ENReyr8YsOc6fv/NVJs2vFdHBnBNdfE49rshrTzDWOlUx4Gq7KOS2GD8eqhy2j+Ejq29+SbKH8yjkAqXqoA==} + engines: {node: '>=8'} + hasBin: true + + vfile-location@4.1.0: + resolution: {integrity: sha512-YF23YMyASIIJXpktBa4vIGLJ5Gs88UB/XePgqPmTa7cDA+JeO3yclbpheQYCHjVHBn/yePzrXuygIL+xbvRYHw==} + + vfile-location@5.0.3: + resolution: {integrity: sha512-5yXvWDEgqeiYiBe1lbxYF7UMAIm/IcopxMHrMQDq3nvKcjPKIhZklUKL+AE7J7uApI4kwe2snsK+eI6UTj9EHg==} + + vfile-message@3.1.4: + resolution: {integrity: sha512-fa0Z6P8HUrQN4BZaX05SIVXic+7kE3b05PWAtPuYP9QLHsLKYR7/AlLW3NtOrpXRLeawpDLMsVkmk5DG0NXgWw==} + + vfile-message@4.0.2: + resolution: {integrity: sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==} + + vfile@5.3.7: + resolution: {integrity: sha512-r7qlzkgErKjobAmyNIkkSpizsFPYiUPuJb5pNW1RB4JcYVZhs4lIbVqk8XPk033CV/1z8ss5pkax8SuhGpcG8g==} + + vfile@6.0.3: + resolution: {integrity: sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==} + + web-namespaces@2.0.1: + resolution: {integrity: sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==} + + web-streams-polyfill@3.3.3: + resolution: {integrity: sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==} + engines: {node: '>= 8'} + + which-boxed-primitive@1.1.1: + resolution: {integrity: sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==} + engines: {node: '>= 0.4'} - which-builtin-type@1.1.3: - resolution: {integrity: sha512-YmjsSMDBYsM1CaFiayOVT06+KJeXf0o5M/CAd4o1lTadFAtacTUM49zoYxr/oroopFDfhvN6iEcBxUyc3gvKmw==} + which-builtin-type@1.2.1: + resolution: {integrity: sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==} engines: {node: '>= 0.4'} which-collection@1.0.2: resolution: {integrity: sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==} engines: {node: '>= 0.4'} - which-typed-array@1.1.15: - resolution: {integrity: sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==} + which-typed-array@1.1.18: + resolution: {integrity: sha512-qEcY+KJYlWyLH9vNbsr6/5j59AXk5ni5aakf8ldzBvGde6Iz4sxZGkJyWSAueTG7QhOvNRYb1lDdFmL5Td0QKA==} engines: {node: '>= 0.4'} which@2.0.2: @@ -2477,12 +4238,15 @@ packages: wrappy@1.0.2: resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + xml@1.0.1: + resolution: {integrity: sha512-huCv9IH9Tcf95zuYCsQraZtWnJvBtLVE0QHMOs8bWyZAFZNDcYjsPq1nEx8jKA9y+Beo9v+7OBPRisQTjinQMw==} + y18n@5.0.8: resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} engines: {node: '>=10'} - yaml@2.4.5: - resolution: {integrity: sha512-aBx2bnqDzVOyNKfsysjA2ms5ZlnjSAW2eG3/L5G/CSujfjLJTJsEw1bGw8kCf04KodQWk1pxlGnZ56CRxiawmg==} + yaml@2.7.0: + resolution: {integrity: sha512-+hSoy/QHluxmC9kCIJyL/uyFmLmc+e5CFR5Wa+bpIhIj85LVb9ZH2nVnqrHoSvKogwODv0ClqZkmiSSaIH5LTA==} engines: {node: '>= 14'} hasBin: true @@ -2502,84 +4266,88 @@ packages: resolution: {integrity: sha512-b4JR1PFR10y1mKjhHY9LaGo6tmrgjit7hxVIeAmyMw3jegXR4dhYqLaQF5zMXZxY7tLpMyJeLjr1C4rLmkVe8g==} engines: {node: '>=12.20'} + zod@3.24.1: + resolution: {integrity: sha512-muH7gBL9sI1nciMZV67X5fTKKBLtwpZ5VBp1vsOQzj1MhrBZ4wlVCm3gedKZWLp0Oyel8sIGfeiz54Su+OVT+A==} + + zwitch@2.0.4: + resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==} + snapshots: '@alloc/quick-lru@5.2.0': {} - '@babel/code-frame@7.24.7': + '@babel/code-frame@7.26.2': dependencies: - '@babel/highlight': 7.24.7 - picocolors: 1.0.1 + '@babel/helper-validator-identifier': 7.25.9 + js-tokens: 4.0.0 + picocolors: 1.1.1 - '@babel/helper-validator-identifier@7.24.7': {} + '@babel/helper-validator-identifier@7.25.9': {} - '@babel/highlight@7.24.7': + '@babel/runtime@7.26.7': dependencies: - '@babel/helper-validator-identifier': 7.24.7 - chalk: 2.4.2 - js-tokens: 4.0.0 - picocolors: 1.0.1 + regenerator-runtime: 0.14.1 - '@commitlint/cli@19.3.0(@types/node@20.14.10)(typescript@5.5.3)': + '@commitlint/cli@19.7.1(@types/node@20.17.17)(typescript@5.7.3)': dependencies: - '@commitlint/format': 19.3.0 - '@commitlint/lint': 19.2.2 - '@commitlint/load': 19.2.0(@types/node@20.14.10)(typescript@5.5.3) - '@commitlint/read': 19.2.1 - '@commitlint/types': 19.0.3 - execa: 8.0.1 + '@commitlint/format': 19.5.0 + '@commitlint/lint': 19.7.1 + '@commitlint/load': 19.6.1(@types/node@20.17.17)(typescript@5.7.3) + '@commitlint/read': 19.5.0 + '@commitlint/types': 19.5.0 + tinyexec: 0.3.2 yargs: 17.7.2 transitivePeerDependencies: - '@types/node' - typescript - '@commitlint/config-conventional@19.2.2': + '@commitlint/config-conventional@19.7.1': dependencies: - '@commitlint/types': 19.0.3 + '@commitlint/types': 19.5.0 conventional-changelog-conventionalcommits: 7.0.2 - '@commitlint/config-validator@19.0.3': + '@commitlint/config-validator@19.5.0': dependencies: - '@commitlint/types': 19.0.3 - ajv: 8.16.0 + '@commitlint/types': 19.5.0 + ajv: 8.17.1 - '@commitlint/ensure@19.0.3': + '@commitlint/ensure@19.5.0': dependencies: - '@commitlint/types': 19.0.3 + '@commitlint/types': 19.5.0 lodash.camelcase: 4.3.0 lodash.kebabcase: 4.1.1 lodash.snakecase: 4.1.1 lodash.startcase: 4.4.0 lodash.upperfirst: 4.3.1 - '@commitlint/execute-rule@19.0.0': {} + '@commitlint/execute-rule@19.5.0': {} - '@commitlint/format@19.3.0': + '@commitlint/format@19.5.0': dependencies: - '@commitlint/types': 19.0.3 - chalk: 5.3.0 + '@commitlint/types': 19.5.0 + chalk: 5.4.1 - '@commitlint/is-ignored@19.2.2': + '@commitlint/is-ignored@19.7.1': dependencies: - '@commitlint/types': 19.0.3 - semver: 7.6.2 + '@commitlint/types': 19.5.0 + semver: 7.7.1 - '@commitlint/lint@19.2.2': + '@commitlint/lint@19.7.1': dependencies: - '@commitlint/is-ignored': 19.2.2 - '@commitlint/parse': 19.0.3 - '@commitlint/rules': 19.0.3 - '@commitlint/types': 19.0.3 + '@commitlint/is-ignored': 19.7.1 + '@commitlint/parse': 19.5.0 + '@commitlint/rules': 19.6.0 + '@commitlint/types': 19.5.0 - '@commitlint/load@19.2.0(@types/node@20.14.10)(typescript@5.5.3)': + '@commitlint/load@19.6.1(@types/node@20.17.17)(typescript@5.7.3)': dependencies: - '@commitlint/config-validator': 19.0.3 - '@commitlint/execute-rule': 19.0.0 - '@commitlint/resolve-extends': 19.1.0 - '@commitlint/types': 19.0.3 - chalk: 5.3.0 - cosmiconfig: 9.0.0(typescript@5.5.3) - cosmiconfig-typescript-loader: 5.0.0(@types/node@20.14.10)(cosmiconfig@9.0.0)(typescript@5.5.3) + '@commitlint/config-validator': 19.5.0 + '@commitlint/execute-rule': 19.5.0 + '@commitlint/resolve-extends': 19.5.0 + '@commitlint/types': 19.5.0 + chalk: 5.4.1 + cosmiconfig: 9.0.0(typescript@5.7.3) + cosmiconfig-typescript-loader: 6.1.0(@types/node@20.17.17)(cosmiconfig@9.0.0)(typescript@5.7.3) lodash.isplainobject: 4.0.6 lodash.merge: 4.6.2 lodash.uniq: 4.5.0 @@ -2587,94 +4355,326 @@ snapshots: - '@types/node' - typescript - '@commitlint/message@19.0.0': {} + '@commitlint/message@19.5.0': {} - '@commitlint/parse@19.0.3': + '@commitlint/parse@19.5.0': dependencies: - '@commitlint/types': 19.0.3 + '@commitlint/types': 19.5.0 conventional-changelog-angular: 7.0.0 conventional-commits-parser: 5.0.0 - '@commitlint/read@19.2.1': + '@commitlint/read@19.5.0': dependencies: - '@commitlint/top-level': 19.0.0 - '@commitlint/types': 19.0.3 - execa: 8.0.1 + '@commitlint/top-level': 19.5.0 + '@commitlint/types': 19.5.0 git-raw-commits: 4.0.0 minimist: 1.2.8 + tinyexec: 0.3.2 - '@commitlint/resolve-extends@19.1.0': + '@commitlint/resolve-extends@19.5.0': dependencies: - '@commitlint/config-validator': 19.0.3 - '@commitlint/types': 19.0.3 + '@commitlint/config-validator': 19.5.0 + '@commitlint/types': 19.5.0 global-directory: 4.0.1 import-meta-resolve: 4.1.0 lodash.mergewith: 4.6.2 resolve-from: 5.0.0 - '@commitlint/rules@19.0.3': - dependencies: - '@commitlint/ensure': 19.0.3 - '@commitlint/message': 19.0.0 - '@commitlint/to-lines': 19.0.0 - '@commitlint/types': 19.0.3 - execa: 8.0.1 + '@commitlint/rules@19.6.0': + dependencies: + '@commitlint/ensure': 19.5.0 + '@commitlint/message': 19.5.0 + '@commitlint/to-lines': 19.5.0 + '@commitlint/types': 19.5.0 + + '@commitlint/to-lines@19.5.0': {} + + '@commitlint/top-level@19.5.0': + dependencies: + find-up: 7.0.0 + + '@commitlint/types@19.5.0': + dependencies: + '@types/conventional-commits-parser': 5.0.1 + chalk: 5.4.1 + + '@contentlayer/cli@0.3.4(esbuild@0.25.0)': + dependencies: + '@contentlayer/core': 0.3.4(esbuild@0.25.0) + '@contentlayer/utils': 0.3.4 + clipanion: 3.2.1(typanion@3.14.0) + typanion: 3.14.0 + transitivePeerDependencies: + - '@effect-ts/otel-node' + - esbuild + - markdown-wasm + - supports-color + + '@contentlayer/client@0.3.4(esbuild@0.25.0)': + dependencies: + '@contentlayer/core': 0.3.4(esbuild@0.25.0) + transitivePeerDependencies: + - '@effect-ts/otel-node' + - esbuild + - markdown-wasm + - supports-color + + '@contentlayer/core@0.3.4(esbuild@0.25.0)': + dependencies: + '@contentlayer/utils': 0.3.4 + camel-case: 4.1.2 + comment-json: 4.2.5 + esbuild: 0.25.0 + gray-matter: 4.0.3 + mdx-bundler: 9.2.1(esbuild@0.25.0) + rehype-stringify: 9.0.4 + remark-frontmatter: 4.0.1 + remark-parse: 10.0.2 + remark-rehype: 10.1.0 + source-map-support: 0.5.21 + type-fest: 3.13.1 + unified: 10.1.2 + transitivePeerDependencies: + - '@effect-ts/otel-node' + - supports-color + + '@contentlayer/source-files@0.3.4(esbuild@0.25.0)': + dependencies: + '@contentlayer/core': 0.3.4(esbuild@0.25.0) + '@contentlayer/utils': 0.3.4 + chokidar: 3.6.0 + fast-glob: 3.3.3 + gray-matter: 4.0.3 + imagescript: 1.3.0 + micromatch: 4.0.8 + ts-pattern: 4.3.0 + unified: 10.1.2 + yaml: 2.7.0 + zod: 3.24.1 + transitivePeerDependencies: + - '@effect-ts/otel-node' + - esbuild + - markdown-wasm + - supports-color + + '@contentlayer/source-remote-files@0.3.4(esbuild@0.25.0)': + dependencies: + '@contentlayer/core': 0.3.4(esbuild@0.25.0) + '@contentlayer/source-files': 0.3.4(esbuild@0.25.0) + '@contentlayer/utils': 0.3.4 + transitivePeerDependencies: + - '@effect-ts/otel-node' + - esbuild + - markdown-wasm + - supports-color + + '@contentlayer/utils@0.3.4': + dependencies: + '@effect-ts/core': 0.60.5 + '@effect-ts/otel': 0.15.1(@effect-ts/core@0.60.5)(@opentelemetry/api@1.9.0)(@opentelemetry/core@1.30.1)(@opentelemetry/sdk-trace-base@1.30.1) + '@effect-ts/otel-exporter-trace-otlp-grpc': 0.15.1(@effect-ts/core@0.60.5)(@opentelemetry/api@1.9.0)(@opentelemetry/core@1.30.1)(@opentelemetry/exporter-trace-otlp-grpc@0.39.1)(@opentelemetry/sdk-trace-base@1.30.1) + '@effect-ts/otel-sdk-trace-node': 0.15.1(@effect-ts/core@0.60.5)(@opentelemetry/api@1.9.0)(@opentelemetry/core@1.30.1)(@opentelemetry/sdk-trace-base@1.30.1)(@opentelemetry/sdk-trace-node@1.30.1) + '@js-temporal/polyfill': 0.4.4 + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 1.30.1(@opentelemetry/api@1.9.0) + '@opentelemetry/exporter-trace-otlp-grpc': 0.39.1(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 1.30.1(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-trace-base': 1.30.1(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-trace-node': 1.30.1(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.29.0 + chokidar: 3.6.0 + hash-wasm: 4.12.0 + inflection: 2.0.1 + memfs: 3.5.3 + oo-ascii-tree: 1.106.0 + ts-pattern: 4.3.0 + type-fest: 3.13.1 + + '@effect-ts/core@0.60.5': + dependencies: + '@effect-ts/system': 0.57.5 + + '@effect-ts/otel-exporter-trace-otlp-grpc@0.15.1(@effect-ts/core@0.60.5)(@opentelemetry/api@1.9.0)(@opentelemetry/core@1.30.1)(@opentelemetry/exporter-trace-otlp-grpc@0.39.1)(@opentelemetry/sdk-trace-base@1.30.1)': + dependencies: + '@effect-ts/core': 0.60.5 + '@effect-ts/otel': 0.15.1(@effect-ts/core@0.60.5)(@opentelemetry/api@1.9.0)(@opentelemetry/core@1.30.1)(@opentelemetry/sdk-trace-base@1.30.1) + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 1.30.1(@opentelemetry/api@1.9.0) + '@opentelemetry/exporter-trace-otlp-grpc': 0.39.1(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-trace-base': 1.30.1(@opentelemetry/api@1.9.0) + + '@effect-ts/otel-sdk-trace-node@0.15.1(@effect-ts/core@0.60.5)(@opentelemetry/api@1.9.0)(@opentelemetry/core@1.30.1)(@opentelemetry/sdk-trace-base@1.30.1)(@opentelemetry/sdk-trace-node@1.30.1)': + dependencies: + '@effect-ts/core': 0.60.5 + '@effect-ts/otel': 0.15.1(@effect-ts/core@0.60.5)(@opentelemetry/api@1.9.0)(@opentelemetry/core@1.30.1)(@opentelemetry/sdk-trace-base@1.30.1) + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 1.30.1(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-trace-base': 1.30.1(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-trace-node': 1.30.1(@opentelemetry/api@1.9.0) + + '@effect-ts/otel@0.15.1(@effect-ts/core@0.60.5)(@opentelemetry/api@1.9.0)(@opentelemetry/core@1.30.1)(@opentelemetry/sdk-trace-base@1.30.1)': + dependencies: + '@effect-ts/core': 0.60.5 + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 1.30.1(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-trace-base': 1.30.1(@opentelemetry/api@1.9.0) + + '@effect-ts/system@0.57.5': {} + + '@emnapi/runtime@1.3.1': + dependencies: + tslib: 2.8.1 + optional: true + + '@emotion/is-prop-valid@1.3.1': + dependencies: + '@emotion/memoize': 0.9.0 + + '@emotion/memoize@0.9.0': {} + + '@esbuild-plugins/node-resolve@0.1.4(esbuild@0.25.0)': + dependencies: + '@types/resolve': 1.20.6 + debug: 4.4.0 + esbuild: 0.25.0 + escape-string-regexp: 4.0.0 + resolve: 1.22.10 + transitivePeerDependencies: + - supports-color + + '@esbuild/aix-ppc64@0.25.0': + optional: true + + '@esbuild/android-arm64@0.25.0': + optional: true + + '@esbuild/android-arm@0.25.0': + optional: true + + '@esbuild/android-x64@0.25.0': + optional: true + + '@esbuild/darwin-arm64@0.25.0': + optional: true + + '@esbuild/darwin-x64@0.25.0': + optional: true + + '@esbuild/freebsd-arm64@0.25.0': + optional: true + + '@esbuild/freebsd-x64@0.25.0': + optional: true + + '@esbuild/linux-arm64@0.25.0': + optional: true + + '@esbuild/linux-arm@0.25.0': + optional: true + + '@esbuild/linux-ia32@0.25.0': + optional: true + + '@esbuild/linux-loong64@0.25.0': + optional: true + + '@esbuild/linux-mips64el@0.25.0': + optional: true + + '@esbuild/linux-ppc64@0.25.0': + optional: true + + '@esbuild/linux-riscv64@0.25.0': + optional: true + + '@esbuild/linux-s390x@0.25.0': + optional: true + + '@esbuild/linux-x64@0.25.0': + optional: true + + '@esbuild/netbsd-arm64@0.25.0': + optional: true + + '@esbuild/netbsd-x64@0.25.0': + optional: true + + '@esbuild/openbsd-arm64@0.25.0': + optional: true + + '@esbuild/openbsd-x64@0.25.0': + optional: true - '@commitlint/to-lines@19.0.0': {} + '@esbuild/sunos-x64@0.25.0': + optional: true - '@commitlint/top-level@19.0.0': - dependencies: - find-up: 7.0.0 + '@esbuild/win32-arm64@0.25.0': + optional: true - '@commitlint/types@19.0.3': - dependencies: - '@types/conventional-commits-parser': 5.0.0 - chalk: 5.3.0 + '@esbuild/win32-ia32@0.25.0': + optional: true + + '@esbuild/win32-x64@0.25.0': + optional: true - '@eslint-community/eslint-utils@4.4.0(eslint@8.57.0)': + '@eslint-community/eslint-utils@4.4.1(eslint@8.57.1)': dependencies: - eslint: 8.57.0 + eslint: 8.57.1 eslint-visitor-keys: 3.4.3 - '@eslint-community/regexpp@4.11.0': {} + '@eslint-community/regexpp@4.12.1': {} '@eslint/eslintrc@2.1.4': dependencies: ajv: 6.12.6 - debug: 4.3.5 + debug: 4.4.0 espree: 9.6.1 globals: 13.24.0 - ignore: 5.3.1 - import-fresh: 3.3.0 + ignore: 5.3.2 + import-fresh: 3.3.1 js-yaml: 4.1.0 minimatch: 3.1.2 strip-json-comments: 3.1.1 transitivePeerDependencies: - supports-color - '@eslint/js@8.57.0': {} + '@eslint/js@8.57.1': {} - '@floating-ui/core@1.6.4': + '@fal-works/esbuild-plugin-global-externals@2.1.2': {} + + '@floating-ui/core@1.6.9': dependencies: - '@floating-ui/utils': 0.2.4 + '@floating-ui/utils': 0.2.9 - '@floating-ui/dom@1.6.7': + '@floating-ui/dom@1.6.13': dependencies: - '@floating-ui/core': 1.6.4 - '@floating-ui/utils': 0.2.4 + '@floating-ui/core': 1.6.9 + '@floating-ui/utils': 0.2.9 - '@floating-ui/react-dom@2.1.1(react-dom@18.3.1)(react@18.3.1)': + '@floating-ui/react-dom@2.1.2(react-dom@18.3.1)(react@18.3.1)': dependencies: - '@floating-ui/dom': 1.6.7 + '@floating-ui/dom': 1.6.13 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - '@floating-ui/utils@0.2.4': {} + '@floating-ui/utils@0.2.9': {} + + '@grpc/grpc-js@1.12.6': + dependencies: + '@grpc/proto-loader': 0.7.13 + '@js-sdsl/ordered-map': 4.4.2 + + '@grpc/proto-loader@0.7.13': + dependencies: + lodash.camelcase: 4.3.0 + long: 5.2.4 + protobufjs: 7.4.0 + yargs: 17.7.2 - '@humanwhocodes/config-array@0.11.14': + '@humanwhocodes/config-array@0.13.0': dependencies: '@humanwhocodes/object-schema': 2.0.3 - debug: 4.3.5 + debug: 4.4.0 minimatch: 3.1.2 transitivePeerDependencies: - supports-color @@ -2683,6 +4683,81 @@ snapshots: '@humanwhocodes/object-schema@2.0.3': {} + '@img/sharp-darwin-arm64@0.33.5': + optionalDependencies: + '@img/sharp-libvips-darwin-arm64': 1.0.4 + optional: true + + '@img/sharp-darwin-x64@0.33.5': + optionalDependencies: + '@img/sharp-libvips-darwin-x64': 1.0.4 + optional: true + + '@img/sharp-libvips-darwin-arm64@1.0.4': + optional: true + + '@img/sharp-libvips-darwin-x64@1.0.4': + optional: true + + '@img/sharp-libvips-linux-arm64@1.0.4': + optional: true + + '@img/sharp-libvips-linux-arm@1.0.5': + optional: true + + '@img/sharp-libvips-linux-s390x@1.0.4': + optional: true + + '@img/sharp-libvips-linux-x64@1.0.4': + optional: true + + '@img/sharp-libvips-linuxmusl-arm64@1.0.4': + optional: true + + '@img/sharp-libvips-linuxmusl-x64@1.0.4': + optional: true + + '@img/sharp-linux-arm64@0.33.5': + optionalDependencies: + '@img/sharp-libvips-linux-arm64': 1.0.4 + optional: true + + '@img/sharp-linux-arm@0.33.5': + optionalDependencies: + '@img/sharp-libvips-linux-arm': 1.0.5 + optional: true + + '@img/sharp-linux-s390x@0.33.5': + optionalDependencies: + '@img/sharp-libvips-linux-s390x': 1.0.4 + optional: true + + '@img/sharp-linux-x64@0.33.5': + optionalDependencies: + '@img/sharp-libvips-linux-x64': 1.0.4 + optional: true + + '@img/sharp-linuxmusl-arm64@0.33.5': + optionalDependencies: + '@img/sharp-libvips-linuxmusl-arm64': 1.0.4 + optional: true + + '@img/sharp-linuxmusl-x64@0.33.5': + optionalDependencies: + '@img/sharp-libvips-linuxmusl-x64': 1.0.4 + optional: true + + '@img/sharp-wasm32@0.33.5': + dependencies: + '@emnapi/runtime': 1.3.1 + optional: true + + '@img/sharp-win32-ia32@0.33.5': + optional: true + + '@img/sharp-win32-x64@0.33.5': + optional: true + '@isaacs/cliui@8.0.2': dependencies: string-width: 5.1.2 @@ -2692,22 +4767,60 @@ snapshots: wrap-ansi: 8.1.0 wrap-ansi-cjs: wrap-ansi@7.0.0 - '@jridgewell/gen-mapping@0.3.5': + '@jridgewell/gen-mapping@0.3.8': dependencies: '@jridgewell/set-array': 1.2.1 - '@jridgewell/sourcemap-codec': 1.4.15 + '@jridgewell/sourcemap-codec': 1.5.0 '@jridgewell/trace-mapping': 0.3.25 '@jridgewell/resolve-uri@3.1.2': {} '@jridgewell/set-array@1.2.1': {} - '@jridgewell/sourcemap-codec@1.4.15': {} + '@jridgewell/sourcemap-codec@1.5.0': {} '@jridgewell/trace-mapping@0.3.25': dependencies: '@jridgewell/resolve-uri': 3.1.2 - '@jridgewell/sourcemap-codec': 1.4.15 + '@jridgewell/sourcemap-codec': 1.5.0 + + '@js-sdsl/ordered-map@4.4.2': {} + + '@js-temporal/polyfill@0.4.4': + dependencies: + jsbi: 4.3.0 + tslib: 2.8.1 + + '@mdx-js/esbuild@2.3.0(esbuild@0.25.0)': + dependencies: + '@mdx-js/mdx': 2.3.0 + esbuild: 0.25.0 + node-fetch: 3.3.2 + vfile: 5.3.7 + transitivePeerDependencies: + - supports-color + + '@mdx-js/mdx@2.3.0': + dependencies: + '@types/estree-jsx': 1.0.5 + '@types/mdx': 2.0.13 + estree-util-build-jsx: 2.2.2 + estree-util-is-identifier-name: 2.1.0 + estree-util-to-js: 1.2.0 + estree-walker: 3.0.3 + hast-util-to-estree: 2.3.3 + markdown-extensions: 1.1.1 + periscopic: 3.1.0 + remark-mdx: 2.3.0 + remark-parse: 10.0.2 + remark-rehype: 10.1.0 + unified: 10.1.2 + unist-util-position-from-estree: 1.1.2 + unist-util-stringify-position: 3.0.3 + unist-util-visit: 4.1.2 + vfile: 5.3.7 + transitivePeerDependencies: + - supports-color '@next/env@14.2.4': {} @@ -2752,364 +4865,751 @@ snapshots: '@nodelib/fs.walk@1.2.8': dependencies: '@nodelib/fs.scandir': 2.1.5 - fastq: 1.17.1 + fastq: 1.19.0 + + '@nolyfill/is-core-module@1.0.39': {} + + '@opentelemetry/api-logs@0.39.1': + dependencies: + '@opentelemetry/api': 1.9.0 + + '@opentelemetry/api@1.9.0': {} + + '@opentelemetry/context-async-hooks@1.30.1(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + + '@opentelemetry/core@1.13.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/semantic-conventions': 1.13.0 + + '@opentelemetry/core@1.30.1(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/semantic-conventions': 1.28.0 + + '@opentelemetry/exporter-trace-otlp-grpc@0.39.1(@opentelemetry/api@1.9.0)': + dependencies: + '@grpc/grpc-js': 1.12.6 + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 1.13.0(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-grpc-exporter-base': 0.39.1(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-transformer': 0.39.1(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 1.13.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-trace-base': 1.13.0(@opentelemetry/api@1.9.0) + + '@opentelemetry/otlp-exporter-base@0.39.1(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 1.13.0(@opentelemetry/api@1.9.0) + + '@opentelemetry/otlp-grpc-exporter-base@0.39.1(@opentelemetry/api@1.9.0)': + dependencies: + '@grpc/grpc-js': 1.12.6 + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 1.13.0(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-exporter-base': 0.39.1(@opentelemetry/api@1.9.0) + protobufjs: 7.4.0 + + '@opentelemetry/otlp-transformer@0.39.1(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/api-logs': 0.39.1 + '@opentelemetry/core': 1.13.0(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 1.13.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-logs': 0.39.1(@opentelemetry/api-logs@0.39.1)(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-metrics': 1.13.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-trace-base': 1.13.0(@opentelemetry/api@1.9.0) + + '@opentelemetry/propagator-b3@1.30.1(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 1.30.1(@opentelemetry/api@1.9.0) + + '@opentelemetry/propagator-jaeger@1.30.1(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 1.30.1(@opentelemetry/api@1.9.0) + + '@opentelemetry/resources@1.13.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 1.13.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.13.0 + + '@opentelemetry/resources@1.30.1(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 1.30.1(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.28.0 + + '@opentelemetry/sdk-logs@0.39.1(@opentelemetry/api-logs@0.39.1)(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/api-logs': 0.39.1 + '@opentelemetry/core': 1.13.0(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 1.13.0(@opentelemetry/api@1.9.0) + + '@opentelemetry/sdk-metrics@1.13.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 1.13.0(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 1.13.0(@opentelemetry/api@1.9.0) + lodash.merge: 4.6.2 + + '@opentelemetry/sdk-trace-base@1.13.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 1.13.0(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 1.13.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.13.0 + + '@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 1.30.1(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 1.30.1(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.28.0 + + '@opentelemetry/sdk-trace-node@1.30.1(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/context-async-hooks': 1.30.1(@opentelemetry/api@1.9.0) + '@opentelemetry/core': 1.30.1(@opentelemetry/api@1.9.0) + '@opentelemetry/propagator-b3': 1.30.1(@opentelemetry/api@1.9.0) + '@opentelemetry/propagator-jaeger': 1.30.1(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-trace-base': 1.30.1(@opentelemetry/api@1.9.0) + semver: 7.7.1 + + '@opentelemetry/semantic-conventions@1.13.0': {} + + '@opentelemetry/semantic-conventions@1.28.0': {} + + '@opentelemetry/semantic-conventions@1.29.0': {} '@pkgjs/parseargs@0.11.0': optional: true '@pkgr/core@0.1.1': {} - '@radix-ui/primitive@1.1.0': {} + '@protobufjs/aspromise@1.1.2': {} + + '@protobufjs/base64@1.1.2': {} + + '@protobufjs/codegen@2.0.4': {} + + '@protobufjs/eventemitter@1.1.0': {} + + '@protobufjs/fetch@1.1.0': + dependencies: + '@protobufjs/aspromise': 1.1.2 + '@protobufjs/inquire': 1.1.0 + + '@protobufjs/float@1.0.2': {} + + '@protobufjs/inquire@1.1.0': {} + + '@protobufjs/path@1.1.2': {} + + '@protobufjs/pool@1.1.0': {} + + '@protobufjs/utf8@1.1.0': {} + + '@radix-ui/primitive@1.1.1': {} + + '@radix-ui/react-arrow@1.1.2(@types/react-dom@18.3.5)(@types/react@18.2.65)(react-dom@18.3.1)(react@18.3.1)': + dependencies: + '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.5)(@types/react@18.2.65)(react-dom@18.3.1)(react@18.3.1) + '@types/react': 18.2.65 + '@types/react-dom': 18.3.5(@types/react@18.2.65) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) - '@radix-ui/react-arrow@1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1)': + '@radix-ui/react-aspect-ratio@1.1.2(@types/react-dom@18.3.5)(@types/react@18.2.65)(react-dom@18.3.1)(react@18.3.1)': dependencies: - '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) - '@types/react': 18.3.3 - '@types/react-dom': 18.3.0 + '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.5)(@types/react@18.2.65)(react-dom@18.3.1)(react@18.3.1) + '@types/react': 18.2.65 + '@types/react-dom': 18.3.5(@types/react@18.2.65) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - '@radix-ui/react-collection@1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1)': + '@radix-ui/react-collection@1.1.2(@types/react-dom@18.3.5)(@types/react@18.2.65)(react-dom@18.3.1)(react@18.3.1)': dependencies: - '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.3)(react@18.3.1) - '@radix-ui/react-context': 1.1.0(@types/react@18.3.3)(react@18.3.1) - '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-slot': 1.1.0(@types/react@18.3.3)(react@18.3.1) - '@types/react': 18.3.3 - '@types/react-dom': 18.3.0 + '@radix-ui/react-compose-refs': 1.1.1(@types/react@18.2.65)(react@18.3.1) + '@radix-ui/react-context': 1.1.1(@types/react@18.2.65)(react@18.3.1) + '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.5)(@types/react@18.2.65)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-slot': 1.1.2(@types/react@18.2.65)(react@18.3.1) + '@types/react': 18.2.65 + '@types/react-dom': 18.3.5(@types/react@18.2.65) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - '@radix-ui/react-compose-refs@1.1.0(@types/react@18.3.3)(react@18.3.1)': + '@radix-ui/react-compose-refs@1.1.1(@types/react@18.2.65)(react@18.3.1)': dependencies: - '@types/react': 18.3.3 + '@types/react': 18.2.65 react: 18.3.1 - '@radix-ui/react-context@1.1.0(@types/react@18.3.3)(react@18.3.1)': + '@radix-ui/react-context@1.1.1(@types/react@18.2.65)(react@18.3.1)': dependencies: - '@types/react': 18.3.3 + '@types/react': 18.2.65 + react: 18.3.1 + + '@radix-ui/react-dialog@1.1.6(@types/react-dom@18.3.5)(@types/react@18.2.65)(react-dom@18.3.1)(react@18.3.1)': + dependencies: + '@radix-ui/primitive': 1.1.1 + '@radix-ui/react-compose-refs': 1.1.1(@types/react@18.2.65)(react@18.3.1) + '@radix-ui/react-context': 1.1.1(@types/react@18.2.65)(react@18.3.1) + '@radix-ui/react-dismissable-layer': 1.1.5(@types/react-dom@18.3.5)(@types/react@18.2.65)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-focus-guards': 1.1.1(@types/react@18.2.65)(react@18.3.1) + '@radix-ui/react-focus-scope': 1.1.2(@types/react-dom@18.3.5)(@types/react@18.2.65)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-id': 1.1.0(@types/react@18.2.65)(react@18.3.1) + '@radix-ui/react-portal': 1.1.4(@types/react-dom@18.3.5)(@types/react@18.2.65)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-presence': 1.1.2(@types/react-dom@18.3.5)(@types/react@18.2.65)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.5)(@types/react@18.2.65)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-slot': 1.1.2(@types/react@18.2.65)(react@18.3.1) + '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.2.65)(react@18.3.1) + '@types/react': 18.2.65 + '@types/react-dom': 18.3.5(@types/react@18.2.65) + aria-hidden: 1.2.4 react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + react-remove-scroll: 2.6.3(@types/react@18.2.65)(react@18.3.1) - '@radix-ui/react-direction@1.1.0(@types/react@18.3.3)(react@18.3.1)': + '@radix-ui/react-direction@1.1.0(@types/react@18.2.65)(react@18.3.1)': dependencies: - '@types/react': 18.3.3 + '@types/react': 18.2.65 react: 18.3.1 - '@radix-ui/react-dismissable-layer@1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1)': + '@radix-ui/react-dismissable-layer@1.1.5(@types/react-dom@18.3.5)(@types/react@18.2.65)(react-dom@18.3.1)(react@18.3.1)': dependencies: - '@radix-ui/primitive': 1.1.0 - '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.3)(react@18.3.1) - '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.3)(react@18.3.1) - '@radix-ui/react-use-escape-keydown': 1.1.0(@types/react@18.3.3)(react@18.3.1) - '@types/react': 18.3.3 - '@types/react-dom': 18.3.0 + '@radix-ui/primitive': 1.1.1 + '@radix-ui/react-compose-refs': 1.1.1(@types/react@18.2.65)(react@18.3.1) + '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.5)(@types/react@18.2.65)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.2.65)(react@18.3.1) + '@radix-ui/react-use-escape-keydown': 1.1.0(@types/react@18.2.65)(react@18.3.1) + '@types/react': 18.2.65 + '@types/react-dom': 18.3.5(@types/react@18.2.65) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - '@radix-ui/react-dropdown-menu@2.1.1(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1)': - dependencies: - '@radix-ui/primitive': 1.1.0 - '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.3)(react@18.3.1) - '@radix-ui/react-context': 1.1.0(@types/react@18.3.3)(react@18.3.1) - '@radix-ui/react-id': 1.1.0(@types/react@18.3.3)(react@18.3.1) - '@radix-ui/react-menu': 2.1.1(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.3)(react@18.3.1) - '@types/react': 18.3.3 - '@types/react-dom': 18.3.0 + '@radix-ui/react-dropdown-menu@2.1.6(@types/react-dom@18.3.5)(@types/react@18.2.65)(react-dom@18.3.1)(react@18.3.1)': + dependencies: + '@radix-ui/primitive': 1.1.1 + '@radix-ui/react-compose-refs': 1.1.1(@types/react@18.2.65)(react@18.3.1) + '@radix-ui/react-context': 1.1.1(@types/react@18.2.65)(react@18.3.1) + '@radix-ui/react-id': 1.1.0(@types/react@18.2.65)(react@18.3.1) + '@radix-ui/react-menu': 2.1.6(@types/react-dom@18.3.5)(@types/react@18.2.65)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.5)(@types/react@18.2.65)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.2.65)(react@18.3.1) + '@types/react': 18.2.65 + '@types/react-dom': 18.3.5(@types/react@18.2.65) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - '@radix-ui/react-focus-guards@1.1.0(@types/react@18.3.3)(react@18.3.1)': + '@radix-ui/react-focus-guards@1.1.1(@types/react@18.2.65)(react@18.3.1)': dependencies: - '@types/react': 18.3.3 + '@types/react': 18.2.65 react: 18.3.1 - '@radix-ui/react-focus-scope@1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1)': + '@radix-ui/react-focus-scope@1.1.2(@types/react-dom@18.3.5)(@types/react@18.2.65)(react-dom@18.3.1)(react@18.3.1)': dependencies: - '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.3)(react@18.3.1) - '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.3)(react@18.3.1) - '@types/react': 18.3.3 - '@types/react-dom': 18.3.0 + '@radix-ui/react-compose-refs': 1.1.1(@types/react@18.2.65)(react@18.3.1) + '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.5)(@types/react@18.2.65)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.2.65)(react@18.3.1) + '@types/react': 18.2.65 + '@types/react-dom': 18.3.5(@types/react@18.2.65) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + + '@radix-ui/react-hover-card@1.1.6(@types/react-dom@18.3.5)(@types/react@18.2.65)(react-dom@18.3.1)(react@18.3.1)': + dependencies: + '@radix-ui/primitive': 1.1.1 + '@radix-ui/react-compose-refs': 1.1.1(@types/react@18.2.65)(react@18.3.1) + '@radix-ui/react-context': 1.1.1(@types/react@18.2.65)(react@18.3.1) + '@radix-ui/react-dismissable-layer': 1.1.5(@types/react-dom@18.3.5)(@types/react@18.2.65)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-popper': 1.2.2(@types/react-dom@18.3.5)(@types/react@18.2.65)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-portal': 1.1.4(@types/react-dom@18.3.5)(@types/react@18.2.65)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-presence': 1.1.2(@types/react-dom@18.3.5)(@types/react@18.2.65)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.5)(@types/react@18.2.65)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.2.65)(react@18.3.1) + '@types/react': 18.2.65 + '@types/react-dom': 18.3.5(@types/react@18.2.65) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - '@radix-ui/react-icons@1.3.0(react@18.3.1)': + '@radix-ui/react-icons@1.3.2(react@18.3.1)': dependencies: react: 18.3.1 - '@radix-ui/react-id@1.1.0(@types/react@18.3.3)(react@18.3.1)': + '@radix-ui/react-id@1.1.0(@types/react@18.2.65)(react@18.3.1)': dependencies: - '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.3.3)(react@18.3.1) - '@types/react': 18.3.3 + '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.2.65)(react@18.3.1) + '@types/react': 18.2.65 + react: 18.3.1 + + '@radix-ui/react-menu@2.1.6(@types/react-dom@18.3.5)(@types/react@18.2.65)(react-dom@18.3.1)(react@18.3.1)': + dependencies: + '@radix-ui/primitive': 1.1.1 + '@radix-ui/react-collection': 1.1.2(@types/react-dom@18.3.5)(@types/react@18.2.65)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-compose-refs': 1.1.1(@types/react@18.2.65)(react@18.3.1) + '@radix-ui/react-context': 1.1.1(@types/react@18.2.65)(react@18.3.1) + '@radix-ui/react-direction': 1.1.0(@types/react@18.2.65)(react@18.3.1) + '@radix-ui/react-dismissable-layer': 1.1.5(@types/react-dom@18.3.5)(@types/react@18.2.65)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-focus-guards': 1.1.1(@types/react@18.2.65)(react@18.3.1) + '@radix-ui/react-focus-scope': 1.1.2(@types/react-dom@18.3.5)(@types/react@18.2.65)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-id': 1.1.0(@types/react@18.2.65)(react@18.3.1) + '@radix-ui/react-popper': 1.2.2(@types/react-dom@18.3.5)(@types/react@18.2.65)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-portal': 1.1.4(@types/react-dom@18.3.5)(@types/react@18.2.65)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-presence': 1.1.2(@types/react-dom@18.3.5)(@types/react@18.2.65)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.5)(@types/react@18.2.65)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-roving-focus': 1.1.2(@types/react-dom@18.3.5)(@types/react@18.2.65)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-slot': 1.1.2(@types/react@18.2.65)(react@18.3.1) + '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.2.65)(react@18.3.1) + '@types/react': 18.2.65 + '@types/react-dom': 18.3.5(@types/react@18.2.65) + aria-hidden: 1.2.4 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + react-remove-scroll: 2.6.3(@types/react@18.2.65)(react@18.3.1) + + '@radix-ui/react-navigation-menu@1.2.5(@types/react-dom@18.3.5)(@types/react@18.2.65)(react-dom@18.3.1)(react@18.3.1)': + dependencies: + '@radix-ui/primitive': 1.1.1 + '@radix-ui/react-collection': 1.1.2(@types/react-dom@18.3.5)(@types/react@18.2.65)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-compose-refs': 1.1.1(@types/react@18.2.65)(react@18.3.1) + '@radix-ui/react-context': 1.1.1(@types/react@18.2.65)(react@18.3.1) + '@radix-ui/react-direction': 1.1.0(@types/react@18.2.65)(react@18.3.1) + '@radix-ui/react-dismissable-layer': 1.1.5(@types/react-dom@18.3.5)(@types/react@18.2.65)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-id': 1.1.0(@types/react@18.2.65)(react@18.3.1) + '@radix-ui/react-presence': 1.1.2(@types/react-dom@18.3.5)(@types/react@18.2.65)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.5)(@types/react@18.2.65)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.2.65)(react@18.3.1) + '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.2.65)(react@18.3.1) + '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.2.65)(react@18.3.1) + '@radix-ui/react-use-previous': 1.1.0(@types/react@18.2.65)(react@18.3.1) + '@radix-ui/react-visually-hidden': 1.1.2(@types/react-dom@18.3.5)(@types/react@18.2.65)(react-dom@18.3.1)(react@18.3.1) + '@types/react': 18.2.65 + '@types/react-dom': 18.3.5(@types/react@18.2.65) react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) - '@radix-ui/react-menu@2.1.1(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1)': - dependencies: - '@radix-ui/primitive': 1.1.0 - '@radix-ui/react-collection': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.3)(react@18.3.1) - '@radix-ui/react-context': 1.1.0(@types/react@18.3.3)(react@18.3.1) - '@radix-ui/react-direction': 1.1.0(@types/react@18.3.3)(react@18.3.1) - '@radix-ui/react-dismissable-layer': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-focus-guards': 1.1.0(@types/react@18.3.3)(react@18.3.1) - '@radix-ui/react-focus-scope': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-id': 1.1.0(@types/react@18.3.3)(react@18.3.1) - '@radix-ui/react-popper': 1.2.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-portal': 1.1.1(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-presence': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-roving-focus': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-slot': 1.1.0(@types/react@18.3.3)(react@18.3.1) - '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.3)(react@18.3.1) - '@types/react': 18.3.3 - '@types/react-dom': 18.3.0 + '@radix-ui/react-popover@1.1.6(@types/react-dom@18.3.5)(@types/react@18.2.65)(react-dom@18.3.1)(react@18.3.1)': + dependencies: + '@radix-ui/primitive': 1.1.1 + '@radix-ui/react-compose-refs': 1.1.1(@types/react@18.2.65)(react@18.3.1) + '@radix-ui/react-context': 1.1.1(@types/react@18.2.65)(react@18.3.1) + '@radix-ui/react-dismissable-layer': 1.1.5(@types/react-dom@18.3.5)(@types/react@18.2.65)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-focus-guards': 1.1.1(@types/react@18.2.65)(react@18.3.1) + '@radix-ui/react-focus-scope': 1.1.2(@types/react-dom@18.3.5)(@types/react@18.2.65)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-id': 1.1.0(@types/react@18.2.65)(react@18.3.1) + '@radix-ui/react-popper': 1.2.2(@types/react-dom@18.3.5)(@types/react@18.2.65)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-portal': 1.1.4(@types/react-dom@18.3.5)(@types/react@18.2.65)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-presence': 1.1.2(@types/react-dom@18.3.5)(@types/react@18.2.65)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.5)(@types/react@18.2.65)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-slot': 1.1.2(@types/react@18.2.65)(react@18.3.1) + '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.2.65)(react@18.3.1) + '@types/react': 18.2.65 + '@types/react-dom': 18.3.5(@types/react@18.2.65) aria-hidden: 1.2.4 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - react-remove-scroll: 2.5.7(@types/react@18.3.3)(react@18.3.1) - - '@radix-ui/react-popper@1.2.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1)': - dependencies: - '@floating-ui/react-dom': 2.1.1(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-arrow': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.3)(react@18.3.1) - '@radix-ui/react-context': 1.1.0(@types/react@18.3.3)(react@18.3.1) - '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.3)(react@18.3.1) - '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.3.3)(react@18.3.1) - '@radix-ui/react-use-rect': 1.1.0(@types/react@18.3.3)(react@18.3.1) - '@radix-ui/react-use-size': 1.1.0(@types/react@18.3.3)(react@18.3.1) + react-remove-scroll: 2.6.3(@types/react@18.2.65)(react@18.3.1) + + '@radix-ui/react-popper@1.2.2(@types/react-dom@18.3.5)(@types/react@18.2.65)(react-dom@18.3.1)(react@18.3.1)': + dependencies: + '@floating-ui/react-dom': 2.1.2(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-arrow': 1.1.2(@types/react-dom@18.3.5)(@types/react@18.2.65)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-compose-refs': 1.1.1(@types/react@18.2.65)(react@18.3.1) + '@radix-ui/react-context': 1.1.1(@types/react@18.2.65)(react@18.3.1) + '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.5)(@types/react@18.2.65)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.2.65)(react@18.3.1) + '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.2.65)(react@18.3.1) + '@radix-ui/react-use-rect': 1.1.0(@types/react@18.2.65)(react@18.3.1) + '@radix-ui/react-use-size': 1.1.0(@types/react@18.2.65)(react@18.3.1) '@radix-ui/rect': 1.1.0 - '@types/react': 18.3.3 - '@types/react-dom': 18.3.0 + '@types/react': 18.2.65 + '@types/react-dom': 18.3.5(@types/react@18.2.65) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - '@radix-ui/react-portal@1.1.1(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1)': + '@radix-ui/react-portal@1.1.4(@types/react-dom@18.3.5)(@types/react@18.2.65)(react-dom@18.3.1)(react@18.3.1)': dependencies: - '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.3.3)(react@18.3.1) - '@types/react': 18.3.3 - '@types/react-dom': 18.3.0 + '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.5)(@types/react@18.2.65)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.2.65)(react@18.3.1) + '@types/react': 18.2.65 + '@types/react-dom': 18.3.5(@types/react@18.2.65) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - '@radix-ui/react-presence@1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1)': + '@radix-ui/react-presence@1.1.2(@types/react-dom@18.3.5)(@types/react@18.2.65)(react-dom@18.3.1)(react@18.3.1)': dependencies: - '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.3)(react@18.3.1) - '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.3.3)(react@18.3.1) - '@types/react': 18.3.3 - '@types/react-dom': 18.3.0 + '@radix-ui/react-compose-refs': 1.1.1(@types/react@18.2.65)(react@18.3.1) + '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.2.65)(react@18.3.1) + '@types/react': 18.2.65 + '@types/react-dom': 18.3.5(@types/react@18.2.65) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - '@radix-ui/react-primitive@2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1)': + '@radix-ui/react-primitive@2.0.2(@types/react-dom@18.3.5)(@types/react@18.2.65)(react-dom@18.3.1)(react@18.3.1)': dependencies: - '@radix-ui/react-slot': 1.1.0(@types/react@18.3.3)(react@18.3.1) - '@types/react': 18.3.3 - '@types/react-dom': 18.3.0 + '@radix-ui/react-slot': 1.1.2(@types/react@18.2.65)(react@18.3.1) + '@types/react': 18.2.65 + '@types/react-dom': 18.3.5(@types/react@18.2.65) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + + '@radix-ui/react-roving-focus@1.1.2(@types/react-dom@18.3.5)(@types/react@18.2.65)(react-dom@18.3.1)(react@18.3.1)': + dependencies: + '@radix-ui/primitive': 1.1.1 + '@radix-ui/react-collection': 1.1.2(@types/react-dom@18.3.5)(@types/react@18.2.65)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-compose-refs': 1.1.1(@types/react@18.2.65)(react@18.3.1) + '@radix-ui/react-context': 1.1.1(@types/react@18.2.65)(react@18.3.1) + '@radix-ui/react-direction': 1.1.0(@types/react@18.2.65)(react@18.3.1) + '@radix-ui/react-id': 1.1.0(@types/react@18.2.65)(react@18.3.1) + '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.5)(@types/react@18.2.65)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.2.65)(react@18.3.1) + '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.2.65)(react@18.3.1) + '@types/react': 18.2.65 + '@types/react-dom': 18.3.5(@types/react@18.2.65) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + + '@radix-ui/react-separator@1.1.2(@types/react-dom@18.3.5)(@types/react@18.2.65)(react-dom@18.3.1)(react@18.3.1)': + dependencies: + '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.5)(@types/react@18.2.65)(react-dom@18.3.1)(react@18.3.1) + '@types/react': 18.2.65 + '@types/react-dom': 18.3.5(@types/react@18.2.65) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + + '@radix-ui/react-slot@1.1.2(@types/react@18.2.65)(react@18.3.1)': + dependencies: + '@radix-ui/react-compose-refs': 1.1.1(@types/react@18.2.65)(react@18.3.1) + '@types/react': 18.2.65 + react: 18.3.1 + + '@radix-ui/react-switch@1.1.3(@types/react-dom@18.3.5)(@types/react@18.2.65)(react-dom@18.3.1)(react@18.3.1)': + dependencies: + '@radix-ui/primitive': 1.1.1 + '@radix-ui/react-compose-refs': 1.1.1(@types/react@18.2.65)(react@18.3.1) + '@radix-ui/react-context': 1.1.1(@types/react@18.2.65)(react@18.3.1) + '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.5)(@types/react@18.2.65)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.2.65)(react@18.3.1) + '@radix-ui/react-use-previous': 1.1.0(@types/react@18.2.65)(react@18.3.1) + '@radix-ui/react-use-size': 1.1.0(@types/react@18.2.65)(react@18.3.1) + '@types/react': 18.2.65 + '@types/react-dom': 18.3.5(@types/react@18.2.65) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + + '@radix-ui/react-toast@1.2.6(@types/react-dom@18.3.5)(@types/react@18.2.65)(react-dom@18.3.1)(react@18.3.1)': + dependencies: + '@radix-ui/primitive': 1.1.1 + '@radix-ui/react-collection': 1.1.2(@types/react-dom@18.3.5)(@types/react@18.2.65)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-compose-refs': 1.1.1(@types/react@18.2.65)(react@18.3.1) + '@radix-ui/react-context': 1.1.1(@types/react@18.2.65)(react@18.3.1) + '@radix-ui/react-dismissable-layer': 1.1.5(@types/react-dom@18.3.5)(@types/react@18.2.65)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-portal': 1.1.4(@types/react-dom@18.3.5)(@types/react@18.2.65)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-presence': 1.1.2(@types/react-dom@18.3.5)(@types/react@18.2.65)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.5)(@types/react@18.2.65)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.2.65)(react@18.3.1) + '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.2.65)(react@18.3.1) + '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.2.65)(react@18.3.1) + '@radix-ui/react-visually-hidden': 1.1.2(@types/react-dom@18.3.5)(@types/react@18.2.65)(react-dom@18.3.1)(react@18.3.1) + '@types/react': 18.2.65 + '@types/react-dom': 18.3.5(@types/react@18.2.65) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - '@radix-ui/react-roving-focus@1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1)': - dependencies: - '@radix-ui/primitive': 1.1.0 - '@radix-ui/react-collection': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.3)(react@18.3.1) - '@radix-ui/react-context': 1.1.0(@types/react@18.3.3)(react@18.3.1) - '@radix-ui/react-direction': 1.1.0(@types/react@18.3.3)(react@18.3.1) - '@radix-ui/react-id': 1.1.0(@types/react@18.3.3)(react@18.3.1) - '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.3)(react@18.3.1) - '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.3)(react@18.3.1) - '@types/react': 18.3.3 - '@types/react-dom': 18.3.0 + '@radix-ui/react-tooltip@1.1.8(@types/react-dom@18.3.5)(@types/react@18.2.65)(react-dom@18.3.1)(react@18.3.1)': + dependencies: + '@radix-ui/primitive': 1.1.1 + '@radix-ui/react-compose-refs': 1.1.1(@types/react@18.2.65)(react@18.3.1) + '@radix-ui/react-context': 1.1.1(@types/react@18.2.65)(react@18.3.1) + '@radix-ui/react-dismissable-layer': 1.1.5(@types/react-dom@18.3.5)(@types/react@18.2.65)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-id': 1.1.0(@types/react@18.2.65)(react@18.3.1) + '@radix-ui/react-popper': 1.2.2(@types/react-dom@18.3.5)(@types/react@18.2.65)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-portal': 1.1.4(@types/react-dom@18.3.5)(@types/react@18.2.65)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-presence': 1.1.2(@types/react-dom@18.3.5)(@types/react@18.2.65)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.5)(@types/react@18.2.65)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-slot': 1.1.2(@types/react@18.2.65)(react@18.3.1) + '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.2.65)(react@18.3.1) + '@radix-ui/react-visually-hidden': 1.1.2(@types/react-dom@18.3.5)(@types/react@18.2.65)(react-dom@18.3.1)(react@18.3.1) + '@types/react': 18.2.65 + '@types/react-dom': 18.3.5(@types/react@18.2.65) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - '@radix-ui/react-slot@1.1.0(@types/react@18.3.3)(react@18.3.1)': + '@radix-ui/react-use-callback-ref@1.1.0(@types/react@18.2.65)(react@18.3.1)': dependencies: - '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.3)(react@18.3.1) - '@types/react': 18.3.3 + '@types/react': 18.2.65 react: 18.3.1 - '@radix-ui/react-use-callback-ref@1.1.0(@types/react@18.3.3)(react@18.3.1)': + '@radix-ui/react-use-controllable-state@1.1.0(@types/react@18.2.65)(react@18.3.1)': dependencies: - '@types/react': 18.3.3 + '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.2.65)(react@18.3.1) + '@types/react': 18.2.65 react: 18.3.1 - '@radix-ui/react-use-controllable-state@1.1.0(@types/react@18.3.3)(react@18.3.1)': + '@radix-ui/react-use-escape-keydown@1.1.0(@types/react@18.2.65)(react@18.3.1)': dependencies: - '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.3)(react@18.3.1) - '@types/react': 18.3.3 + '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.2.65)(react@18.3.1) + '@types/react': 18.2.65 react: 18.3.1 - '@radix-ui/react-use-escape-keydown@1.1.0(@types/react@18.3.3)(react@18.3.1)': + '@radix-ui/react-use-layout-effect@1.1.0(@types/react@18.2.65)(react@18.3.1)': dependencies: - '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.3)(react@18.3.1) - '@types/react': 18.3.3 + '@types/react': 18.2.65 react: 18.3.1 - '@radix-ui/react-use-layout-effect@1.1.0(@types/react@18.3.3)(react@18.3.1)': + '@radix-ui/react-use-previous@1.1.0(@types/react@18.2.65)(react@18.3.1)': dependencies: - '@types/react': 18.3.3 + '@types/react': 18.2.65 react: 18.3.1 - '@radix-ui/react-use-rect@1.1.0(@types/react@18.3.3)(react@18.3.1)': + '@radix-ui/react-use-rect@1.1.0(@types/react@18.2.65)(react@18.3.1)': dependencies: '@radix-ui/rect': 1.1.0 - '@types/react': 18.3.3 + '@types/react': 18.2.65 react: 18.3.1 - '@radix-ui/react-use-size@1.1.0(@types/react@18.3.3)(react@18.3.1)': + '@radix-ui/react-use-size@1.1.0(@types/react@18.2.65)(react@18.3.1)': dependencies: - '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.3.3)(react@18.3.1) - '@types/react': 18.3.3 + '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.2.65)(react@18.3.1) + '@types/react': 18.2.65 react: 18.3.1 + '@radix-ui/react-visually-hidden@1.1.2(@types/react-dom@18.3.5)(@types/react@18.2.65)(react-dom@18.3.1)(react@18.3.1)': + dependencies: + '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.5)(@types/react@18.2.65)(react-dom@18.3.1)(react@18.3.1) + '@types/react': 18.2.65 + '@types/react-dom': 18.3.5(@types/react@18.2.65) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + '@radix-ui/rect@1.1.0': {} - '@rushstack/eslint-patch@1.10.3': {} + '@rtsao/scc@1.1.0': {} + + '@rushstack/eslint-patch@1.10.5': {} + + '@sindresorhus/merge-streams@2.3.0': {} + + '@splinetool/react-spline@4.0.0(@splinetool/runtime@1.9.63)(next@14.2.4)(react-dom@18.3.1)(react@18.3.1)': + dependencies: + '@splinetool/runtime': 1.9.63 + blurhash: 2.0.5 + lodash.debounce: 4.0.8 + next: 14.2.4(@opentelemetry/api@1.9.0)(react-dom@18.3.1)(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + react-merge-refs: 2.1.1 + thumbhash: 0.1.1 + + '@splinetool/runtime@1.9.63': + dependencies: + on-change: 4.0.2 + semver-compare: 1.0.0 '@swc/counter@0.1.3': {} '@swc/helpers@0.5.5': dependencies: '@swc/counter': 0.1.3 - tslib: 2.6.3 + tslib: 2.8.1 + + '@tailwindcss/forms@0.5.10(tailwindcss@3.4.17)': + dependencies: + mini-svg-data-uri: 1.4.4 + tailwindcss: 3.4.17 + + '@tailwindcss/typography@0.5.16(tailwindcss@3.4.17)': + dependencies: + lodash.castarray: 4.4.0 + lodash.isplainobject: 4.0.6 + lodash.merge: 4.6.2 + postcss-selector-parser: 6.0.10 + tailwindcss: 3.4.17 + + '@types/acorn@4.0.6': + dependencies: + '@types/estree': 1.0.6 + + '@types/conventional-commits-parser@5.0.1': + dependencies: + '@types/node': 20.17.17 + + '@types/debug@4.1.12': + dependencies: + '@types/ms': 2.1.0 - '@types/conventional-commits-parser@5.0.0': + '@types/estree-jsx@1.0.5': dependencies: - '@types/node': 20.14.10 + '@types/estree': 1.0.6 + + '@types/estree@1.0.6': {} + + '@types/hast@2.3.10': + dependencies: + '@types/unist': 2.0.11 + + '@types/hast@3.0.4': + dependencies: + '@types/unist': 3.0.3 '@types/json5@0.0.29': {} - '@types/node@20.14.10': + '@types/mdast@3.0.15': + dependencies: + '@types/unist': 2.0.11 + + '@types/mdast@4.0.4': + dependencies: + '@types/unist': 3.0.3 + + '@types/mdx@2.0.13': {} + + '@types/ms@2.1.0': {} + + '@types/node@20.17.17': dependencies: - undici-types: 5.26.5 + undici-types: 6.19.8 + + '@types/parse5@6.0.3': {} - '@types/prop-types@15.7.12': {} + '@types/prismjs@1.26.5': {} - '@types/react-dom@18.3.0': + '@types/prop-types@15.7.14': {} + + '@types/react-dom@18.3.5(@types/react@18.2.65)': dependencies: - '@types/react': 18.3.3 + '@types/react': 18.2.65 - '@types/react@18.3.3': + '@types/react@18.2.65': dependencies: - '@types/prop-types': 15.7.12 + '@types/prop-types': 15.7.14 + '@types/scheduler': 0.23.0 csstype: 3.1.3 - '@typescript-eslint/eslint-plugin@7.15.0(@typescript-eslint/parser@7.15.0)(eslint@8.57.0)(typescript@5.5.3)': + '@types/resolve@1.20.6': {} + + '@types/rss@0.0.32': {} + + '@types/scheduler@0.23.0': {} + + '@types/unist@2.0.11': {} + + '@types/unist@3.0.3': {} + + '@typescript-eslint/eslint-plugin@7.18.0(@typescript-eslint/parser@7.18.0)(eslint@8.57.1)(typescript@5.7.3)': dependencies: - '@eslint-community/regexpp': 4.11.0 - '@typescript-eslint/parser': 7.15.0(eslint@8.57.0)(typescript@5.5.3) - '@typescript-eslint/scope-manager': 7.15.0 - '@typescript-eslint/type-utils': 7.15.0(eslint@8.57.0)(typescript@5.5.3) - '@typescript-eslint/utils': 7.15.0(eslint@8.57.0)(typescript@5.5.3) - '@typescript-eslint/visitor-keys': 7.15.0 - eslint: 8.57.0 + '@eslint-community/regexpp': 4.12.1 + '@typescript-eslint/parser': 7.18.0(eslint@8.57.1)(typescript@5.7.3) + '@typescript-eslint/scope-manager': 7.18.0 + '@typescript-eslint/type-utils': 7.18.0(eslint@8.57.1)(typescript@5.7.3) + '@typescript-eslint/utils': 7.18.0(eslint@8.57.1)(typescript@5.7.3) + '@typescript-eslint/visitor-keys': 7.18.0 + eslint: 8.57.1 graphemer: 1.4.0 - ignore: 5.3.1 + ignore: 5.3.2 natural-compare: 1.4.0 - ts-api-utils: 1.3.0(typescript@5.5.3) - typescript: 5.5.3 + ts-api-utils: 1.4.3(typescript@5.7.3) + typescript: 5.7.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@7.15.0(eslint@8.57.0)(typescript@5.5.3)': + '@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.7.3)': dependencies: - '@typescript-eslint/scope-manager': 7.15.0 - '@typescript-eslint/types': 7.15.0 - '@typescript-eslint/typescript-estree': 7.15.0(typescript@5.5.3) - '@typescript-eslint/visitor-keys': 7.15.0 - debug: 4.3.5 - eslint: 8.57.0 - typescript: 5.5.3 + '@typescript-eslint/scope-manager': 7.18.0 + '@typescript-eslint/types': 7.18.0 + '@typescript-eslint/typescript-estree': 7.18.0(typescript@5.7.3) + '@typescript-eslint/visitor-keys': 7.18.0 + debug: 4.4.0 + eslint: 8.57.1 + typescript: 5.7.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@7.2.0(eslint@8.57.0)(typescript@5.5.3)': + '@typescript-eslint/parser@7.2.0(eslint@8.57.1)(typescript@5.7.3)': dependencies: '@typescript-eslint/scope-manager': 7.2.0 '@typescript-eslint/types': 7.2.0 - '@typescript-eslint/typescript-estree': 7.2.0(typescript@5.5.3) + '@typescript-eslint/typescript-estree': 7.2.0(typescript@5.7.3) '@typescript-eslint/visitor-keys': 7.2.0 - debug: 4.3.5 - eslint: 8.57.0 - typescript: 5.5.3 + debug: 4.4.0 + eslint: 8.57.1 + typescript: 5.7.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/scope-manager@7.15.0': + '@typescript-eslint/scope-manager@7.18.0': dependencies: - '@typescript-eslint/types': 7.15.0 - '@typescript-eslint/visitor-keys': 7.15.0 + '@typescript-eslint/types': 7.18.0 + '@typescript-eslint/visitor-keys': 7.18.0 '@typescript-eslint/scope-manager@7.2.0': dependencies: '@typescript-eslint/types': 7.2.0 '@typescript-eslint/visitor-keys': 7.2.0 - '@typescript-eslint/type-utils@7.15.0(eslint@8.57.0)(typescript@5.5.3)': + '@typescript-eslint/type-utils@7.18.0(eslint@8.57.1)(typescript@5.7.3)': dependencies: - '@typescript-eslint/typescript-estree': 7.15.0(typescript@5.5.3) - '@typescript-eslint/utils': 7.15.0(eslint@8.57.0)(typescript@5.5.3) - debug: 4.3.5 - eslint: 8.57.0 - ts-api-utils: 1.3.0(typescript@5.5.3) - typescript: 5.5.3 + '@typescript-eslint/typescript-estree': 7.18.0(typescript@5.7.3) + '@typescript-eslint/utils': 7.18.0(eslint@8.57.1)(typescript@5.7.3) + debug: 4.4.0 + eslint: 8.57.1 + ts-api-utils: 1.4.3(typescript@5.7.3) + typescript: 5.7.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/types@7.15.0': {} + '@typescript-eslint/types@7.18.0': {} '@typescript-eslint/types@7.2.0': {} - '@typescript-eslint/typescript-estree@7.15.0(typescript@5.5.3)': + '@typescript-eslint/typescript-estree@7.18.0(typescript@5.7.3)': dependencies: - '@typescript-eslint/types': 7.15.0 - '@typescript-eslint/visitor-keys': 7.15.0 - debug: 4.3.5 + '@typescript-eslint/types': 7.18.0 + '@typescript-eslint/visitor-keys': 7.18.0 + debug: 4.4.0 globby: 11.1.0 is-glob: 4.0.3 minimatch: 9.0.5 - semver: 7.6.2 - ts-api-utils: 1.3.0(typescript@5.5.3) - typescript: 5.5.3 + semver: 7.7.1 + ts-api-utils: 1.4.3(typescript@5.7.3) + typescript: 5.7.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/typescript-estree@7.2.0(typescript@5.5.3)': + '@typescript-eslint/typescript-estree@7.2.0(typescript@5.7.3)': dependencies: '@typescript-eslint/types': 7.2.0 '@typescript-eslint/visitor-keys': 7.2.0 - debug: 4.3.5 + debug: 4.4.0 globby: 11.1.0 is-glob: 4.0.3 minimatch: 9.0.3 - semver: 7.6.2 - ts-api-utils: 1.3.0(typescript@5.5.3) - typescript: 5.5.3 + semver: 7.7.1 + ts-api-utils: 1.4.3(typescript@5.7.3) + typescript: 5.7.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@7.15.0(eslint@8.57.0)(typescript@5.5.3)': + '@typescript-eslint/utils@7.18.0(eslint@8.57.1)(typescript@5.7.3)': dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) - '@typescript-eslint/scope-manager': 7.15.0 - '@typescript-eslint/types': 7.15.0 - '@typescript-eslint/typescript-estree': 7.15.0(typescript@5.5.3) - eslint: 8.57.0 + '@eslint-community/eslint-utils': 4.4.1(eslint@8.57.1) + '@typescript-eslint/scope-manager': 7.18.0 + '@typescript-eslint/types': 7.18.0 + '@typescript-eslint/typescript-estree': 7.18.0(typescript@5.7.3) + eslint: 8.57.1 transitivePeerDependencies: - supports-color - typescript - '@typescript-eslint/visitor-keys@7.15.0': + '@typescript-eslint/visitor-keys@7.18.0': dependencies: - '@typescript-eslint/types': 7.15.0 + '@typescript-eslint/types': 7.18.0 eslint-visitor-keys: 3.4.3 '@typescript-eslint/visitor-keys@7.2.0': @@ -3117,18 +5617,18 @@ snapshots: '@typescript-eslint/types': 7.2.0 eslint-visitor-keys: 3.4.3 - '@ungap/structured-clone@1.2.0': {} + '@ungap/structured-clone@1.3.0': {} JSONStream@1.3.5: dependencies: jsonparse: 1.3.1 through: 2.3.8 - acorn-jsx@5.3.2(acorn@8.12.1): + acorn-jsx@5.3.2(acorn@8.14.0): dependencies: - acorn: 8.12.1 + acorn: 8.14.0 - acorn@8.12.1: {} + acorn@8.14.0: {} ajv@6.12.6: dependencies: @@ -3137,22 +5637,20 @@ snapshots: json-schema-traverse: 0.4.1 uri-js: 4.4.1 - ajv@8.16.0: + ajv@8.17.1: dependencies: fast-deep-equal: 3.1.3 + fast-uri: 3.0.6 json-schema-traverse: 1.0.0 require-from-string: 2.0.2 - uri-js: 4.4.1 - ansi-escapes@6.2.1: {} + ansi-escapes@7.0.0: + dependencies: + environment: 1.1.0 ansi-regex@5.0.1: {} - ansi-regex@6.0.1: {} - - ansi-styles@3.2.1: - dependencies: - color-convert: 1.9.3 + ansi-regex@6.1.0: {} ansi-styles@4.3.0: dependencies: @@ -3169,108 +5667,116 @@ snapshots: arg@5.0.2: {} + argparse@1.0.10: + dependencies: + sprintf-js: 1.0.3 + argparse@2.0.1: {} aria-hidden@1.2.4: dependencies: - tslib: 2.6.3 + tslib: 2.8.1 - aria-query@5.1.3: - dependencies: - deep-equal: 2.2.3 + aria-query@5.3.2: {} - array-buffer-byte-length@1.0.1: + array-buffer-byte-length@1.0.2: dependencies: - call-bind: 1.0.7 - is-array-buffer: 3.0.4 + call-bound: 1.0.3 + is-array-buffer: 3.0.5 array-ify@1.0.0: {} array-includes@3.1.8: dependencies: - call-bind: 1.0.7 + call-bind: 1.0.8 define-properties: 1.2.1 - es-abstract: 1.23.3 - es-object-atoms: 1.0.0 - get-intrinsic: 1.2.4 - is-string: 1.0.7 + es-abstract: 1.23.9 + es-object-atoms: 1.1.1 + get-intrinsic: 1.2.7 + is-string: 1.1.1 + + array-timsort@1.0.3: {} array-union@2.1.0: {} array.prototype.findlast@1.2.5: dependencies: - call-bind: 1.0.7 + call-bind: 1.0.8 define-properties: 1.2.1 - es-abstract: 1.23.3 + es-abstract: 1.23.9 es-errors: 1.3.0 - es-object-atoms: 1.0.0 + es-object-atoms: 1.1.1 es-shim-unscopables: 1.0.2 array.prototype.findlastindex@1.2.5: dependencies: - call-bind: 1.0.7 + call-bind: 1.0.8 define-properties: 1.2.1 - es-abstract: 1.23.3 + es-abstract: 1.23.9 es-errors: 1.3.0 - es-object-atoms: 1.0.0 - es-shim-unscopables: 1.0.2 - - array.prototype.flat@1.3.2: - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.23.3 + es-object-atoms: 1.1.1 es-shim-unscopables: 1.0.2 - array.prototype.flatmap@1.3.2: + array.prototype.flat@1.3.3: dependencies: - call-bind: 1.0.7 + call-bind: 1.0.8 define-properties: 1.2.1 - es-abstract: 1.23.3 + es-abstract: 1.23.9 es-shim-unscopables: 1.0.2 - array.prototype.toreversed@1.1.2: + array.prototype.flatmap@1.3.3: dependencies: - call-bind: 1.0.7 + call-bind: 1.0.8 define-properties: 1.2.1 - es-abstract: 1.23.3 + es-abstract: 1.23.9 es-shim-unscopables: 1.0.2 array.prototype.tosorted@1.1.4: dependencies: - call-bind: 1.0.7 + call-bind: 1.0.8 define-properties: 1.2.1 - es-abstract: 1.23.3 + es-abstract: 1.23.9 es-errors: 1.3.0 es-shim-unscopables: 1.0.2 - arraybuffer.prototype.slice@1.0.3: + arraybuffer.prototype.slice@1.0.4: dependencies: - array-buffer-byte-length: 1.0.1 - call-bind: 1.0.7 + array-buffer-byte-length: 1.0.2 + call-bind: 1.0.8 define-properties: 1.2.1 - es-abstract: 1.23.3 + es-abstract: 1.23.9 es-errors: 1.3.0 - get-intrinsic: 1.2.4 - is-array-buffer: 3.0.4 - is-shared-array-buffer: 1.0.3 + get-intrinsic: 1.2.7 + is-array-buffer: 3.0.5 ast-types-flow@0.0.8: {} + astring@1.9.0: {} + + async-function@1.0.0: {} + available-typed-arrays@1.0.7: dependencies: - possible-typed-array-names: 1.0.0 + possible-typed-array-names: 1.1.0 - axe-core@4.9.1: {} + axe-core@4.10.2: {} - axobject-query@3.1.1: + axios@0.21.4(debug@2.6.9): dependencies: - deep-equal: 2.2.3 + follow-redirects: 1.15.9(debug@2.6.9) + transitivePeerDependencies: + - debug + + axobject-query@4.1.0: {} + + bail@2.0.2: {} balanced-match@1.0.2: {} binary-extensions@2.3.0: {} + blurhash@2.0.5: {} + brace-expansion@1.1.11: dependencies: balanced-match: 1.0.2 @@ -3284,36 +5790,56 @@ snapshots: dependencies: fill-range: 7.1.1 + buffer-from@1.1.2: {} + busboy@1.6.0: dependencies: streamsearch: 1.1.0 - call-bind@1.0.7: + call-bind-apply-helpers@1.0.1: dependencies: - es-define-property: 1.0.0 es-errors: 1.3.0 function-bind: 1.1.2 - get-intrinsic: 1.2.4 + + call-bind@1.0.8: + dependencies: + call-bind-apply-helpers: 1.0.1 + es-define-property: 1.0.1 + get-intrinsic: 1.2.7 set-function-length: 1.2.2 + call-bound@1.0.3: + dependencies: + call-bind-apply-helpers: 1.0.1 + get-intrinsic: 1.2.7 + callsites@3.1.0: {} + camel-case@4.1.2: + dependencies: + pascal-case: 3.1.2 + tslib: 2.8.1 + camelcase-css@2.0.1: {} - caniuse-lite@1.0.30001640: {} + caniuse-lite@1.0.30001699: {} - chalk@2.4.2: - dependencies: - ansi-styles: 3.2.1 - escape-string-regexp: 1.0.5 - supports-color: 5.5.0 + ccount@2.0.1: {} chalk@4.1.2: dependencies: ansi-styles: 4.3.0 supports-color: 7.2.0 - chalk@5.3.0: {} + chalk@5.4.1: {} + + character-entities-html4@2.1.0: {} + + character-entities-legacy@3.0.0: {} + + character-entities@2.0.2: {} + + character-reference-invalid@2.0.1: {} chokidar@3.6.0: dependencies: @@ -3327,13 +5853,13 @@ snapshots: optionalDependencies: fsevents: 2.3.3 - class-variance-authority@0.7.0: + class-variance-authority@0.7.1: dependencies: - clsx: 2.0.0 + clsx: 2.1.1 - cli-cursor@4.0.0: + cli-cursor@5.0.0: dependencies: - restore-cursor: 4.0.0 + restore-cursor: 5.1.0 cli-truncate@4.0.0: dependencies: @@ -3342,34 +5868,50 @@ snapshots: client-only@0.0.1: {} + clipanion@3.2.1(typanion@3.14.0): + dependencies: + typanion: 3.14.0 + cliui@8.0.1: dependencies: string-width: 4.2.3 strip-ansi: 6.0.1 wrap-ansi: 7.0.0 - clsx@2.0.0: {} - clsx@2.1.1: {} - color-convert@1.9.3: - dependencies: - color-name: 1.1.3 - color-convert@2.0.1: dependencies: color-name: 1.1.4 - color-name@1.1.3: {} - color-name@1.1.4: {} + color-string@1.9.1: + dependencies: + color-name: 1.1.4 + simple-swizzle: 0.2.2 + + color@4.2.3: + dependencies: + color-convert: 2.0.1 + color-string: 1.9.1 + colorette@2.0.20: {} - commander@12.1.0: {} + comma-separated-tokens@2.0.3: {} + + commander@13.1.0: {} commander@4.1.1: {} + comment-json@4.2.5: + dependencies: + array-timsort: 1.0.3 + core-util-is: 1.0.3 + esprima: 4.0.1 + has-own-prop: 2.0.0 + repeat-string: 1.6.1 + compare-func@2.0.0: dependencies: array-ify: 1.0.0 @@ -3377,6 +5919,20 @@ snapshots: concat-map@0.0.1: {} + contentlayer@0.3.4(esbuild@0.25.0): + dependencies: + '@contentlayer/cli': 0.3.4(esbuild@0.25.0) + '@contentlayer/client': 0.3.4(esbuild@0.25.0) + '@contentlayer/core': 0.3.4(esbuild@0.25.0) + '@contentlayer/source-files': 0.3.4(esbuild@0.25.0) + '@contentlayer/source-remote-files': 0.3.4(esbuild@0.25.0) + '@contentlayer/utils': 0.3.4 + transitivePeerDependencies: + - '@effect-ts/otel-node' + - esbuild + - markdown-wasm + - supports-color + conventional-changelog-angular@7.0.0: dependencies: compare-func: 2.0.0 @@ -3392,22 +5948,24 @@ snapshots: meow: 12.1.1 split2: 4.2.0 - cosmiconfig-typescript-loader@5.0.0(@types/node@20.14.10)(cosmiconfig@9.0.0)(typescript@5.5.3): + core-util-is@1.0.3: {} + + cosmiconfig-typescript-loader@6.1.0(@types/node@20.17.17)(cosmiconfig@9.0.0)(typescript@5.7.3): dependencies: - '@types/node': 20.14.10 - cosmiconfig: 9.0.0(typescript@5.5.3) - jiti: 1.21.6 - typescript: 5.5.3 + '@types/node': 20.17.17 + cosmiconfig: 9.0.0(typescript@5.7.3) + jiti: 2.4.2 + typescript: 5.7.3 - cosmiconfig@9.0.0(typescript@5.5.3): + cosmiconfig@9.0.0(typescript@5.7.3): dependencies: env-paths: 2.2.1 - import-fresh: 3.3.0 + import-fresh: 3.3.1 js-yaml: 4.1.0 parse-json: 5.2.0 - typescript: 5.5.3 + typescript: 5.7.3 - cross-spawn@7.0.3: + cross-spawn@7.0.6: dependencies: path-key: 3.1.1 shebang-command: 2.0.0 @@ -3421,60 +5979,51 @@ snapshots: dargs@8.1.0: {} - data-view-buffer@1.0.1: + data-uri-to-buffer@4.0.1: {} + + data-view-buffer@1.0.2: dependencies: - call-bind: 1.0.7 + call-bound: 1.0.3 es-errors: 1.3.0 - is-data-view: 1.0.1 + is-data-view: 1.0.2 - data-view-byte-length@1.0.1: + data-view-byte-length@1.0.2: dependencies: - call-bind: 1.0.7 + call-bound: 1.0.3 es-errors: 1.3.0 - is-data-view: 1.0.1 + is-data-view: 1.0.2 - data-view-byte-offset@1.0.0: + data-view-byte-offset@1.0.1: dependencies: - call-bind: 1.0.7 + call-bound: 1.0.3 es-errors: 1.3.0 - is-data-view: 1.0.1 + is-data-view: 1.0.2 + + dayjs@1.11.13: {} + + debug@2.6.9: + dependencies: + ms: 2.0.0 debug@3.2.7: dependencies: ms: 2.1.3 - debug@4.3.5: + debug@4.4.0: dependencies: - ms: 2.1.2 + ms: 2.1.3 - deep-equal@2.2.3: + decode-named-character-reference@1.0.2: dependencies: - array-buffer-byte-length: 1.0.1 - call-bind: 1.0.7 - es-get-iterator: 1.1.3 - get-intrinsic: 1.2.4 - is-arguments: 1.1.1 - is-array-buffer: 3.0.4 - is-date-object: 1.0.5 - is-regex: 1.1.4 - is-shared-array-buffer: 1.0.3 - isarray: 2.0.5 - object-is: 1.1.6 - object-keys: 1.1.1 - object.assign: 4.1.5 - regexp.prototype.flags: 1.5.2 - side-channel: 1.0.6 - which-boxed-primitive: 1.0.2 - which-collection: 1.0.2 - which-typed-array: 1.1.15 + character-entities: 2.0.2 deep-is@0.1.4: {} define-data-property@1.1.4: dependencies: - es-define-property: 1.0.0 + es-define-property: 1.0.1 es-errors: 1.3.0 - gopd: 1.0.1 + gopd: 1.2.0 define-properties@1.2.1: dependencies: @@ -3482,10 +6031,20 @@ snapshots: has-property-descriptors: 1.0.2 object-keys: 1.1.1 + dequal@2.0.3: {} + + detect-libc@2.0.3: {} + detect-node-es@1.1.0: {} + devlop@1.1.0: + dependencies: + dequal: 2.0.3 + didyoumean@1.2.2: {} + diff@5.2.0: {} + dir-glob@3.0.1: dependencies: path-type: 4.0.0 @@ -3504,116 +6063,122 @@ snapshots: dependencies: is-obj: 2.0.0 + dotenv@16.4.7: {} + + dunder-proto@1.0.1: + dependencies: + call-bind-apply-helpers: 1.0.1 + es-errors: 1.3.0 + gopd: 1.2.0 + eastasianwidth@0.2.0: {} - emoji-regex@10.3.0: {} + emoji-regex@10.4.0: {} emoji-regex@8.0.0: {} emoji-regex@9.2.2: {} - enhanced-resolve@5.17.0: + enhanced-resolve@5.18.1: dependencies: graceful-fs: 4.2.11 tapable: 2.2.1 + entities@4.5.0: {} + env-paths@2.2.1: {} + environment@1.1.0: {} + error-ex@1.3.2: dependencies: is-arrayish: 0.2.1 - es-abstract@1.23.3: + es-abstract@1.23.9: dependencies: - array-buffer-byte-length: 1.0.1 - arraybuffer.prototype.slice: 1.0.3 + array-buffer-byte-length: 1.0.2 + arraybuffer.prototype.slice: 1.0.4 available-typed-arrays: 1.0.7 - call-bind: 1.0.7 - data-view-buffer: 1.0.1 - data-view-byte-length: 1.0.1 - data-view-byte-offset: 1.0.0 - es-define-property: 1.0.0 + call-bind: 1.0.8 + call-bound: 1.0.3 + data-view-buffer: 1.0.2 + data-view-byte-length: 1.0.2 + data-view-byte-offset: 1.0.1 + es-define-property: 1.0.1 es-errors: 1.3.0 - es-object-atoms: 1.0.0 - es-set-tostringtag: 2.0.3 - es-to-primitive: 1.2.1 - function.prototype.name: 1.1.6 - get-intrinsic: 1.2.4 - get-symbol-description: 1.0.2 + es-object-atoms: 1.1.1 + es-set-tostringtag: 2.1.0 + es-to-primitive: 1.3.0 + function.prototype.name: 1.1.8 + get-intrinsic: 1.2.7 + get-proto: 1.0.1 + get-symbol-description: 1.1.0 globalthis: 1.0.4 - gopd: 1.0.1 + gopd: 1.2.0 has-property-descriptors: 1.0.2 - has-proto: 1.0.3 - has-symbols: 1.0.3 + has-proto: 1.2.0 + has-symbols: 1.1.0 hasown: 2.0.2 - internal-slot: 1.0.7 - is-array-buffer: 3.0.4 + internal-slot: 1.1.0 + is-array-buffer: 3.0.5 is-callable: 1.2.7 - is-data-view: 1.0.1 - is-negative-zero: 2.0.3 - is-regex: 1.1.4 - is-shared-array-buffer: 1.0.3 - is-string: 1.0.7 - is-typed-array: 1.1.13 - is-weakref: 1.0.2 - object-inspect: 1.13.2 + is-data-view: 1.0.2 + is-regex: 1.2.1 + is-shared-array-buffer: 1.0.4 + is-string: 1.1.1 + is-typed-array: 1.1.15 + is-weakref: 1.1.1 + math-intrinsics: 1.1.0 + object-inspect: 1.13.4 object-keys: 1.1.1 - object.assign: 4.1.5 - regexp.prototype.flags: 1.5.2 - safe-array-concat: 1.1.2 - safe-regex-test: 1.0.3 - string.prototype.trim: 1.2.9 - string.prototype.trimend: 1.0.8 + object.assign: 4.1.7 + own-keys: 1.0.1 + regexp.prototype.flags: 1.5.4 + safe-array-concat: 1.1.3 + safe-push-apply: 1.0.0 + safe-regex-test: 1.1.0 + set-proto: 1.0.0 + string.prototype.trim: 1.2.10 + string.prototype.trimend: 1.0.9 string.prototype.trimstart: 1.0.8 - typed-array-buffer: 1.0.2 - typed-array-byte-length: 1.0.1 - typed-array-byte-offset: 1.0.2 - typed-array-length: 1.0.6 - unbox-primitive: 1.0.2 - which-typed-array: 1.1.15 + typed-array-buffer: 1.0.3 + typed-array-byte-length: 1.0.3 + typed-array-byte-offset: 1.0.4 + typed-array-length: 1.0.7 + unbox-primitive: 1.1.0 + which-typed-array: 1.1.18 - es-define-property@1.0.0: - dependencies: - get-intrinsic: 1.2.4 + es-define-property@1.0.1: {} es-errors@1.3.0: {} - es-get-iterator@1.1.3: + es-iterator-helpers@1.2.1: dependencies: - call-bind: 1.0.7 - get-intrinsic: 1.2.4 - has-symbols: 1.0.3 - is-arguments: 1.1.1 - is-map: 2.0.3 - is-set: 2.0.3 - is-string: 1.0.7 - isarray: 2.0.5 - stop-iteration-iterator: 1.0.0 - - es-iterator-helpers@1.0.19: - dependencies: - call-bind: 1.0.7 + call-bind: 1.0.8 + call-bound: 1.0.3 define-properties: 1.2.1 - es-abstract: 1.23.3 + es-abstract: 1.23.9 es-errors: 1.3.0 - es-set-tostringtag: 2.0.3 + es-set-tostringtag: 2.1.0 function-bind: 1.1.2 - get-intrinsic: 1.2.4 + get-intrinsic: 1.2.7 globalthis: 1.0.4 + gopd: 1.2.0 has-property-descriptors: 1.0.2 - has-proto: 1.0.3 - has-symbols: 1.0.3 - internal-slot: 1.0.7 - iterator.prototype: 1.1.2 - safe-array-concat: 1.1.2 + has-proto: 1.2.0 + has-symbols: 1.1.0 + internal-slot: 1.1.0 + iterator.prototype: 1.1.5 + safe-array-concat: 1.1.3 - es-object-atoms@1.0.0: + es-object-atoms@1.1.1: dependencies: es-errors: 1.3.0 - es-set-tostringtag@2.0.3: + es-set-tostringtag@2.1.0: dependencies: - get-intrinsic: 1.2.4 + es-errors: 1.3.0 + get-intrinsic: 1.2.7 has-tostringtag: 1.0.2 hasown: 2.0.2 @@ -3621,153 +6186,181 @@ snapshots: dependencies: hasown: 2.0.2 - es-to-primitive@1.2.1: + es-to-primitive@1.3.0: dependencies: is-callable: 1.2.7 - is-date-object: 1.0.5 - is-symbol: 1.0.4 + is-date-object: 1.1.0 + is-symbol: 1.1.1 - escalade@3.1.2: {} - - escape-string-regexp@1.0.5: {} + esbuild@0.25.0: + optionalDependencies: + '@esbuild/aix-ppc64': 0.25.0 + '@esbuild/android-arm': 0.25.0 + '@esbuild/android-arm64': 0.25.0 + '@esbuild/android-x64': 0.25.0 + '@esbuild/darwin-arm64': 0.25.0 + '@esbuild/darwin-x64': 0.25.0 + '@esbuild/freebsd-arm64': 0.25.0 + '@esbuild/freebsd-x64': 0.25.0 + '@esbuild/linux-arm': 0.25.0 + '@esbuild/linux-arm64': 0.25.0 + '@esbuild/linux-ia32': 0.25.0 + '@esbuild/linux-loong64': 0.25.0 + '@esbuild/linux-mips64el': 0.25.0 + '@esbuild/linux-ppc64': 0.25.0 + '@esbuild/linux-riscv64': 0.25.0 + '@esbuild/linux-s390x': 0.25.0 + '@esbuild/linux-x64': 0.25.0 + '@esbuild/netbsd-arm64': 0.25.0 + '@esbuild/netbsd-x64': 0.25.0 + '@esbuild/openbsd-arm64': 0.25.0 + '@esbuild/openbsd-x64': 0.25.0 + '@esbuild/sunos-x64': 0.25.0 + '@esbuild/win32-arm64': 0.25.0 + '@esbuild/win32-ia32': 0.25.0 + '@esbuild/win32-x64': 0.25.0 + + escalade@3.2.0: {} escape-string-regexp@4.0.0: {} - eslint-config-next@14.2.4(eslint@8.57.0)(typescript@5.5.3): + escape-string-regexp@5.0.0: {} + + eslint-config-next@14.2.4(eslint@8.57.1)(typescript@5.7.3): dependencies: '@next/eslint-plugin-next': 14.2.4 - '@rushstack/eslint-patch': 1.10.3 - '@typescript-eslint/parser': 7.2.0(eslint@8.57.0)(typescript@5.5.3) - eslint: 8.57.0 + '@rushstack/eslint-patch': 1.10.5 + '@typescript-eslint/parser': 7.2.0(eslint@8.57.1)(typescript@5.7.3) + eslint: 8.57.1 eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@7.2.0)(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1)(eslint@8.57.0) - eslint-plugin-import: 2.29.1(@typescript-eslint/parser@7.2.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0) - eslint-plugin-jsx-a11y: 6.9.0(eslint@8.57.0) - eslint-plugin-react: 7.34.3(eslint@8.57.0) - eslint-plugin-react-hooks: 4.6.2(eslint@8.57.0) - typescript: 5.5.3 + eslint-import-resolver-typescript: 3.7.0(eslint-plugin-import@2.31.0)(eslint@8.57.1) + eslint-plugin-import: 2.31.0(@typescript-eslint/parser@7.2.0)(eslint-import-resolver-typescript@3.7.0)(eslint@8.57.1) + eslint-plugin-jsx-a11y: 6.10.2(eslint@8.57.1) + eslint-plugin-react: 7.37.4(eslint@8.57.1) + eslint-plugin-react-hooks: 5.0.0-canary-7118f5dd7-20230705(eslint@8.57.1) + typescript: 5.7.3 transitivePeerDependencies: - eslint-import-resolver-webpack + - eslint-plugin-import-x - supports-color - eslint-config-prettier@9.1.0(eslint@8.57.0): + eslint-config-prettier@9.1.0(eslint@8.57.1): dependencies: - eslint: 8.57.0 + eslint: 8.57.1 eslint-import-resolver-node@0.3.9: dependencies: debug: 3.2.7 - is-core-module: 2.14.0 - resolve: 1.22.8 + is-core-module: 2.16.1 + resolve: 1.22.10 transitivePeerDependencies: - supports-color - eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@7.2.0)(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1)(eslint@8.57.0): + eslint-import-resolver-typescript@3.7.0(eslint-plugin-import@2.31.0)(eslint@8.57.1): dependencies: - debug: 4.3.5 - enhanced-resolve: 5.17.0 - eslint: 8.57.0 - eslint-module-utils: 2.8.1(@typescript-eslint/parser@7.2.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0) - eslint-plugin-import: 2.29.1(@typescript-eslint/parser@7.2.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0) - fast-glob: 3.3.2 - get-tsconfig: 4.7.5 - is-core-module: 2.14.0 + '@nolyfill/is-core-module': 1.0.39 + debug: 4.4.0 + enhanced-resolve: 5.18.1 + eslint: 8.57.1 + eslint-plugin-import: 2.31.0(@typescript-eslint/parser@7.2.0)(eslint-import-resolver-typescript@3.7.0)(eslint@8.57.1) + fast-glob: 3.3.3 + get-tsconfig: 4.10.0 + is-bun-module: 1.3.0 is-glob: 4.0.3 + stable-hash: 0.0.4 transitivePeerDependencies: - - '@typescript-eslint/parser' - - eslint-import-resolver-node - - eslint-import-resolver-webpack - supports-color - eslint-module-utils@2.8.1(@typescript-eslint/parser@7.2.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0): + eslint-module-utils@2.12.0(@typescript-eslint/parser@7.2.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.7.0)(eslint@8.57.1): dependencies: - '@typescript-eslint/parser': 7.2.0(eslint@8.57.0)(typescript@5.5.3) + '@typescript-eslint/parser': 7.2.0(eslint@8.57.1)(typescript@5.7.3) debug: 3.2.7 - eslint: 8.57.0 + eslint: 8.57.1 eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@7.2.0)(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1)(eslint@8.57.0) + eslint-import-resolver-typescript: 3.7.0(eslint-plugin-import@2.31.0)(eslint@8.57.1) transitivePeerDependencies: - supports-color - eslint-plugin-import@2.29.1(@typescript-eslint/parser@7.2.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0): + eslint-plugin-import@2.31.0(@typescript-eslint/parser@7.2.0)(eslint-import-resolver-typescript@3.7.0)(eslint@8.57.1): dependencies: - '@typescript-eslint/parser': 7.2.0(eslint@8.57.0)(typescript@5.5.3) + '@rtsao/scc': 1.1.0 + '@typescript-eslint/parser': 7.2.0(eslint@8.57.1)(typescript@5.7.3) array-includes: 3.1.8 array.prototype.findlastindex: 1.2.5 - array.prototype.flat: 1.3.2 - array.prototype.flatmap: 1.3.2 + array.prototype.flat: 1.3.3 + array.prototype.flatmap: 1.3.3 debug: 3.2.7 doctrine: 2.1.0 - eslint: 8.57.0 + eslint: 8.57.1 eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.8.1(@typescript-eslint/parser@7.2.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0) + eslint-module-utils: 2.12.0(@typescript-eslint/parser@7.2.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.7.0)(eslint@8.57.1) hasown: 2.0.2 - is-core-module: 2.14.0 + is-core-module: 2.16.1 is-glob: 4.0.3 minimatch: 3.1.2 object.fromentries: 2.0.8 object.groupby: 1.0.3 - object.values: 1.2.0 + object.values: 1.2.1 semver: 6.3.1 + string.prototype.trimend: 1.0.9 tsconfig-paths: 3.15.0 transitivePeerDependencies: - eslint-import-resolver-typescript - eslint-import-resolver-webpack - supports-color - eslint-plugin-jsx-a11y@6.9.0(eslint@8.57.0): + eslint-plugin-jsx-a11y@6.10.2(eslint@8.57.1): dependencies: - aria-query: 5.1.3 + aria-query: 5.3.2 array-includes: 3.1.8 - array.prototype.flatmap: 1.3.2 + array.prototype.flatmap: 1.3.3 ast-types-flow: 0.0.8 - axe-core: 4.9.1 - axobject-query: 3.1.1 + axe-core: 4.10.2 + axobject-query: 4.1.0 damerau-levenshtein: 1.0.8 emoji-regex: 9.2.2 - es-iterator-helpers: 1.0.19 - eslint: 8.57.0 + eslint: 8.57.1 hasown: 2.0.2 jsx-ast-utils: 3.3.5 language-tags: 1.0.9 minimatch: 3.1.2 object.fromentries: 2.0.8 - safe-regex-test: 1.0.3 - string.prototype.includes: 2.0.0 + safe-regex-test: 1.1.0 + string.prototype.includes: 2.0.1 - eslint-plugin-prettier@5.1.3(eslint-config-prettier@9.1.0)(eslint@8.57.0)(prettier@3.3.2): + eslint-plugin-prettier@5.2.3(eslint-config-prettier@9.1.0)(eslint@8.57.1)(prettier@3.5.0): dependencies: - eslint: 8.57.0 - eslint-config-prettier: 9.1.0(eslint@8.57.0) - prettier: 3.3.2 + eslint: 8.57.1 + eslint-config-prettier: 9.1.0(eslint@8.57.1) + prettier: 3.5.0 prettier-linter-helpers: 1.0.0 - synckit: 0.8.8 + synckit: 0.9.2 - eslint-plugin-react-hooks@4.6.2(eslint@8.57.0): + eslint-plugin-react-hooks@5.0.0-canary-7118f5dd7-20230705(eslint@8.57.1): dependencies: - eslint: 8.57.0 + eslint: 8.57.1 - eslint-plugin-react@7.34.3(eslint@8.57.0): + eslint-plugin-react@7.37.4(eslint@8.57.1): dependencies: array-includes: 3.1.8 array.prototype.findlast: 1.2.5 - array.prototype.flatmap: 1.3.2 - array.prototype.toreversed: 1.1.2 + array.prototype.flatmap: 1.3.3 array.prototype.tosorted: 1.1.4 doctrine: 2.1.0 - es-iterator-helpers: 1.0.19 - eslint: 8.57.0 + es-iterator-helpers: 1.2.1 + eslint: 8.57.1 estraverse: 5.3.0 + hasown: 2.0.2 jsx-ast-utils: 3.3.5 minimatch: 3.1.2 object.entries: 1.1.8 object.fromentries: 2.0.8 - object.hasown: 1.1.4 - object.values: 1.2.0 + object.values: 1.2.1 prop-types: 15.8.1 resolve: 2.0.0-next.5 semver: 6.3.1 - string.prototype.matchall: 4.0.11 + string.prototype.matchall: 4.0.12 + string.prototype.repeat: 1.0.0 eslint-scope@7.2.2: dependencies: @@ -3776,26 +6369,26 @@ snapshots: eslint-visitor-keys@3.4.3: {} - eslint@8.57.0: + eslint@8.57.1: dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) - '@eslint-community/regexpp': 4.11.0 + '@eslint-community/eslint-utils': 4.4.1(eslint@8.57.1) + '@eslint-community/regexpp': 4.12.1 '@eslint/eslintrc': 2.1.4 - '@eslint/js': 8.57.0 - '@humanwhocodes/config-array': 0.11.14 + '@eslint/js': 8.57.1 + '@humanwhocodes/config-array': 0.13.0 '@humanwhocodes/module-importer': 1.0.1 '@nodelib/fs.walk': 1.2.8 - '@ungap/structured-clone': 1.2.0 + '@ungap/structured-clone': 1.3.0 ajv: 6.12.6 chalk: 4.1.2 - cross-spawn: 7.0.3 - debug: 4.3.5 + cross-spawn: 7.0.6 + debug: 4.4.0 doctrine: 3.0.0 escape-string-regexp: 4.0.0 eslint-scope: 7.2.2 eslint-visitor-keys: 3.4.3 espree: 9.6.1 - esquery: 1.5.0 + esquery: 1.6.0 esutils: 2.0.3 fast-deep-equal: 3.1.3 file-entry-cache: 6.0.1 @@ -3803,7 +6396,7 @@ snapshots: glob-parent: 6.0.2 globals: 13.24.0 graphemer: 1.4.0 - ignore: 5.3.1 + ignore: 5.3.2 imurmurhash: 0.1.4 is-glob: 4.0.3 is-path-inside: 3.0.3 @@ -3821,11 +6414,13 @@ snapshots: espree@9.6.1: dependencies: - acorn: 8.12.1 - acorn-jsx: 5.3.2(acorn@8.12.1) + acorn: 8.14.0 + acorn-jsx: 5.3.2(acorn@8.14.0) eslint-visitor-keys: 3.4.3 - esquery@1.5.0: + esprima@4.0.1: {} + + esquery@1.6.0: dependencies: estraverse: 5.3.0 @@ -3835,13 +6430,46 @@ snapshots: estraverse@5.3.0: {} + estree-util-attach-comments@2.1.1: + dependencies: + '@types/estree': 1.0.6 + + estree-util-build-jsx@2.2.2: + dependencies: + '@types/estree-jsx': 1.0.5 + estree-util-is-identifier-name: 2.1.0 + estree-walker: 3.0.3 + + estree-util-is-identifier-name@1.1.0: {} + + estree-util-is-identifier-name@2.1.0: {} + + estree-util-to-js@1.2.0: + dependencies: + '@types/estree-jsx': 1.0.5 + astring: 1.9.0 + source-map: 0.7.4 + + estree-util-value-to-estree@1.3.0: + dependencies: + is-plain-obj: 3.0.0 + + estree-util-visit@1.2.1: + dependencies: + '@types/estree-jsx': 1.0.5 + '@types/unist': 2.0.11 + + estree-walker@3.0.3: + dependencies: + '@types/estree': 1.0.6 + esutils@2.0.3: {} eventemitter3@5.0.1: {} execa@8.0.1: dependencies: - cross-spawn: 7.0.3 + cross-spawn: 7.0.6 get-stream: 8.0.1 human-signals: 5.0.0 is-stream: 3.0.0 @@ -3851,26 +6479,43 @@ snapshots: signal-exit: 4.1.0 strip-final-newline: 3.0.0 + extend-shallow@2.0.1: + dependencies: + is-extendable: 0.1.1 + + extend@3.0.2: {} + fast-deep-equal@3.1.3: {} fast-diff@1.3.0: {} - fast-glob@3.3.2: + fast-glob@3.3.3: dependencies: '@nodelib/fs.stat': 2.0.5 '@nodelib/fs.walk': 1.2.8 glob-parent: 5.1.2 merge2: 1.4.1 - micromatch: 4.0.7 + micromatch: 4.0.8 fast-json-stable-stringify@2.1.0: {} fast-levenshtein@2.0.6: {} - fastq@1.17.1: + fast-uri@3.0.6: {} + + fastq@1.19.0: dependencies: reusify: 1.0.4 + fault@2.0.1: + dependencies: + format: 0.2.2 + + fetch-blob@3.2.0: + dependencies: + node-domexception: 1.0.0 + web-streams-polyfill: 3.3.3 + file-entry-cache@6.0.1: dependencies: flat-cache: 3.2.0 @@ -3892,21 +6537,48 @@ snapshots: flat-cache@3.2.0: dependencies: - flatted: 3.3.1 + flatted: 3.3.2 keyv: 4.5.4 rimraf: 3.0.2 - flatted@3.3.1: {} + flatted@3.3.2: {} + + follow-redirects@1.15.9(debug@2.6.9): + dependencies: + debug: 2.6.9 - for-each@0.3.3: + for-each@0.3.4: dependencies: is-callable: 1.2.7 - foreground-child@3.2.1: + foreground-child@3.3.0: dependencies: - cross-spawn: 7.0.3 + cross-spawn: 7.0.6 signal-exit: 4.1.0 + format@0.2.2: {} + + formdata-polyfill@4.0.10: + dependencies: + fetch-blob: 3.2.0 + + framer-motion@11.18.2(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1)(react@18.3.1): + dependencies: + '@emotion/is-prop-valid': 1.3.1 + motion-dom: 11.18.1 + motion-utils: 11.18.1 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + tslib: 2.8.1 + + fs-extra@11.3.0: + dependencies: + graceful-fs: 4.2.11 + jsonfile: 6.1.0 + universalify: 2.0.1 + + fs-monkey@1.0.6: {} + fs.realpath@1.0.0: {} fsevents@2.3.3: @@ -3914,38 +6586,50 @@ snapshots: function-bind@1.1.2: {} - function.prototype.name@1.1.6: + function.prototype.name@1.1.8: dependencies: - call-bind: 1.0.7 + call-bind: 1.0.8 + call-bound: 1.0.3 define-properties: 1.2.1 - es-abstract: 1.23.3 functions-have-names: 1.2.3 + hasown: 2.0.2 + is-callable: 1.2.7 functions-have-names@1.2.3: {} get-caller-file@2.0.5: {} - get-east-asian-width@1.2.0: {} + get-east-asian-width@1.3.0: {} - get-intrinsic@1.2.4: + get-intrinsic@1.2.7: dependencies: + call-bind-apply-helpers: 1.0.1 + es-define-property: 1.0.1 es-errors: 1.3.0 + es-object-atoms: 1.1.1 function-bind: 1.1.2 - has-proto: 1.0.3 - has-symbols: 1.0.3 + get-proto: 1.0.1 + gopd: 1.2.0 + has-symbols: 1.1.0 hasown: 2.0.2 + math-intrinsics: 1.1.0 get-nonce@1.0.1: {} + get-proto@1.0.1: + dependencies: + dunder-proto: 1.0.1 + es-object-atoms: 1.1.1 + get-stream@8.0.1: {} - get-symbol-description@1.0.2: + get-symbol-description@1.1.0: dependencies: - call-bind: 1.0.7 + call-bound: 1.0.3 es-errors: 1.3.0 - get-intrinsic: 1.2.4 + get-intrinsic: 1.2.7 - get-tsconfig@4.7.5: + get-tsconfig@4.10.0: dependencies: resolve-pkg-maps: 1.0.0 @@ -3955,6 +6639,17 @@ snapshots: meow: 12.1.1 split2: 4.2.0 + github-api@3.4.0: + dependencies: + axios: 0.21.4(debug@2.6.9) + debug: 2.6.9 + js-base64: 2.6.4 + utf8: 2.1.2 + transitivePeerDependencies: + - supports-color + + github-slugger@2.0.0: {} + glob-parent@5.1.2: dependencies: is-glob: 4.0.3 @@ -3965,19 +6660,19 @@ snapshots: glob@10.3.10: dependencies: - foreground-child: 3.2.1 + foreground-child: 3.3.0 jackspeak: 2.3.6 minimatch: 9.0.5 minipass: 7.1.2 path-scurry: 1.11.1 - glob@10.4.3: + glob@10.4.5: dependencies: - foreground-child: 3.2.1 - jackspeak: 3.4.1 + foreground-child: 3.3.0 + jackspeak: 3.4.3 minimatch: 9.0.5 minipass: 7.1.2 - package-json-from-dist: 1.0.0 + package-json-from-dist: 1.0.1 path-scurry: 1.11.1 glob@7.2.3: @@ -4000,54 +6695,203 @@ snapshots: globalthis@1.0.4: dependencies: define-properties: 1.2.1 - gopd: 1.0.1 + gopd: 1.2.0 globby@11.1.0: dependencies: array-union: 2.1.0 dir-glob: 3.0.1 - fast-glob: 3.3.2 - ignore: 5.3.1 + fast-glob: 3.3.3 + ignore: 5.3.2 merge2: 1.4.1 slash: 3.0.0 - gopd@1.0.1: + globby@14.1.0: dependencies: - get-intrinsic: 1.2.4 + '@sindresorhus/merge-streams': 2.3.0 + fast-glob: 3.3.3 + ignore: 7.0.3 + path-type: 6.0.0 + slash: 5.1.0 + unicorn-magic: 0.3.0 + + gopd@1.2.0: {} graceful-fs@4.2.11: {} graphemer@1.4.0: {} - has-bigints@1.0.2: {} + gray-matter@4.0.3: + dependencies: + js-yaml: 3.14.1 + kind-of: 6.0.3 + section-matter: 1.0.0 + strip-bom-string: 1.0.0 - has-flag@3.0.0: {} + has-bigints@1.1.0: {} has-flag@4.0.0: {} + has-own-prop@2.0.0: {} + has-property-descriptors@1.0.2: dependencies: - es-define-property: 1.0.0 + es-define-property: 1.0.1 - has-proto@1.0.3: {} + has-proto@1.2.0: + dependencies: + dunder-proto: 1.0.1 - has-symbols@1.0.3: {} + has-symbols@1.1.0: {} has-tostringtag@1.0.2: dependencies: - has-symbols: 1.0.3 + has-symbols: 1.1.0 + + hash-wasm@4.12.0: {} hasown@2.0.2: dependencies: function-bind: 1.1.2 + hast-util-from-html@2.0.3: + dependencies: + '@types/hast': 3.0.4 + devlop: 1.1.0 + hast-util-from-parse5: 8.0.2 + parse5: 7.2.1 + vfile: 6.0.3 + vfile-message: 4.0.2 + + hast-util-from-parse5@7.1.2: + dependencies: + '@types/hast': 2.3.10 + '@types/unist': 2.0.11 + hastscript: 7.2.0 + property-information: 6.5.0 + vfile: 5.3.7 + vfile-location: 4.1.0 + web-namespaces: 2.0.1 + + hast-util-from-parse5@8.0.2: + dependencies: + '@types/hast': 3.0.4 + '@types/unist': 3.0.3 + devlop: 1.1.0 + hastscript: 9.0.0 + property-information: 6.5.0 + vfile: 6.0.3 + vfile-location: 5.0.3 + web-namespaces: 2.0.1 + + hast-util-heading-rank@3.0.0: + dependencies: + '@types/hast': 3.0.4 + + hast-util-is-element@3.0.0: + dependencies: + '@types/hast': 3.0.4 + + hast-util-parse-selector@3.1.1: + dependencies: + '@types/hast': 2.3.10 + + hast-util-parse-selector@4.0.0: + dependencies: + '@types/hast': 3.0.4 + + hast-util-raw@7.2.3: + dependencies: + '@types/hast': 2.3.10 + '@types/parse5': 6.0.3 + hast-util-from-parse5: 7.1.2 + hast-util-to-parse5: 7.1.0 + html-void-elements: 2.0.1 + parse5: 6.0.1 + unist-util-position: 4.0.4 + unist-util-visit: 4.1.2 + vfile: 5.3.7 + web-namespaces: 2.0.1 + zwitch: 2.0.4 + + hast-util-to-estree@2.3.3: + dependencies: + '@types/estree': 1.0.6 + '@types/estree-jsx': 1.0.5 + '@types/hast': 2.3.10 + '@types/unist': 2.0.11 + comma-separated-tokens: 2.0.3 + estree-util-attach-comments: 2.1.1 + estree-util-is-identifier-name: 2.1.0 + hast-util-whitespace: 2.0.1 + mdast-util-mdx-expression: 1.3.2 + mdast-util-mdxjs-esm: 1.3.1 + property-information: 6.5.0 + space-separated-tokens: 2.0.2 + style-to-object: 0.4.4 + unist-util-position: 4.0.4 + zwitch: 2.0.4 + transitivePeerDependencies: + - supports-color + + hast-util-to-html@8.0.4: + dependencies: + '@types/hast': 2.3.10 + '@types/unist': 2.0.11 + ccount: 2.0.1 + comma-separated-tokens: 2.0.3 + hast-util-raw: 7.2.3 + hast-util-whitespace: 2.0.1 + html-void-elements: 2.0.1 + property-information: 6.5.0 + space-separated-tokens: 2.0.2 + stringify-entities: 4.0.4 + zwitch: 2.0.4 + + hast-util-to-parse5@7.1.0: + dependencies: + '@types/hast': 2.3.10 + comma-separated-tokens: 2.0.3 + property-information: 6.5.0 + space-separated-tokens: 2.0.2 + web-namespaces: 2.0.1 + zwitch: 2.0.4 + + hast-util-to-string@3.0.1: + dependencies: + '@types/hast': 3.0.4 + + hast-util-whitespace@2.0.1: {} + + hastscript@7.2.0: + dependencies: + '@types/hast': 2.3.10 + comma-separated-tokens: 2.0.3 + hast-util-parse-selector: 3.1.1 + property-information: 6.5.0 + space-separated-tokens: 2.0.2 + + hastscript@9.0.0: + dependencies: + '@types/hast': 3.0.4 + comma-separated-tokens: 2.0.3 + hast-util-parse-selector: 4.0.0 + property-information: 6.5.0 + space-separated-tokens: 2.0.2 + + html-void-elements@2.0.1: {} + human-signals@5.0.0: {} husky@8.0.3: {} - ignore@5.3.1: {} + ignore@5.3.2: {} - import-fresh@3.3.0: + ignore@7.0.3: {} + + imagescript@1.3.0: {} + + import-fresh@3.3.1: dependencies: parent-module: 1.0.1 resolve-from: 4.0.0 @@ -4056,6 +6900,8 @@ snapshots: imurmurhash@0.1.4: {} + inflection@2.0.1: {} + inflight@1.0.6: dependencies: once: 1.4.0 @@ -4065,64 +6911,84 @@ snapshots: ini@4.1.1: {} - internal-slot@1.0.7: + inline-style-parser@0.1.1: {} + + internal-slot@1.1.0: dependencies: es-errors: 1.3.0 hasown: 2.0.2 - side-channel: 1.0.6 + side-channel: 1.1.0 - invariant@2.2.4: - dependencies: - loose-envify: 1.4.0 + is-alphabetical@2.0.1: {} - is-arguments@1.1.1: + is-alphanumerical@2.0.1: dependencies: - call-bind: 1.0.7 - has-tostringtag: 1.0.2 + is-alphabetical: 2.0.1 + is-decimal: 2.0.1 - is-array-buffer@3.0.4: + is-array-buffer@3.0.5: dependencies: - call-bind: 1.0.7 - get-intrinsic: 1.2.4 + call-bind: 1.0.8 + call-bound: 1.0.3 + get-intrinsic: 1.2.7 is-arrayish@0.2.1: {} - is-async-function@2.0.0: + is-arrayish@0.3.2: {} + + is-async-function@2.1.1: dependencies: + async-function: 1.0.0 + call-bound: 1.0.3 + get-proto: 1.0.1 has-tostringtag: 1.0.2 + safe-regex-test: 1.1.0 - is-bigint@1.0.4: + is-bigint@1.1.0: dependencies: - has-bigints: 1.0.2 + has-bigints: 1.1.0 is-binary-path@2.1.0: dependencies: binary-extensions: 2.3.0 - is-boolean-object@1.1.2: + is-boolean-object@1.2.2: dependencies: - call-bind: 1.0.7 + call-bound: 1.0.3 has-tostringtag: 1.0.2 + is-buffer@2.0.5: {} + + is-bun-module@1.3.0: + dependencies: + semver: 7.7.1 + is-callable@1.2.7: {} - is-core-module@2.14.0: + is-core-module@2.16.1: dependencies: hasown: 2.0.2 - is-data-view@1.0.1: + is-data-view@1.0.2: dependencies: - is-typed-array: 1.1.13 + call-bound: 1.0.3 + get-intrinsic: 1.2.7 + is-typed-array: 1.1.15 - is-date-object@1.0.5: + is-date-object@1.1.0: dependencies: + call-bound: 1.0.3 has-tostringtag: 1.0.2 + is-decimal@2.0.1: {} + + is-extendable@0.1.1: {} + is-extglob@2.1.1: {} - is-finalizationregistry@1.0.2: + is-finalizationregistry@1.1.1: dependencies: - call-bind: 1.0.7 + call-bound: 1.0.3 is-fullwidth-code-point@3.0.0: {} @@ -4130,22 +6996,26 @@ snapshots: is-fullwidth-code-point@5.0.0: dependencies: - get-east-asian-width: 1.2.0 + get-east-asian-width: 1.3.0 - is-generator-function@1.0.10: + is-generator-function@1.1.0: dependencies: + call-bound: 1.0.3 + get-proto: 1.0.1 has-tostringtag: 1.0.2 + safe-regex-test: 1.1.0 is-glob@4.0.3: dependencies: is-extglob: 2.1.1 - is-map@2.0.3: {} + is-hexadecimal@2.0.1: {} - is-negative-zero@2.0.3: {} + is-map@2.0.3: {} - is-number-object@1.0.7: + is-number-object@1.1.1: dependencies: + call-bound: 1.0.3 has-tostringtag: 1.0.2 is-number@7.0.0: {} @@ -4154,56 +7024,70 @@ snapshots: is-path-inside@3.0.3: {} - is-regex@1.1.4: + is-plain-obj@3.0.0: {} + + is-plain-obj@4.1.0: {} + + is-reference@3.0.3: + dependencies: + '@types/estree': 1.0.6 + + is-regex@1.2.1: dependencies: - call-bind: 1.0.7 + call-bound: 1.0.3 + gopd: 1.2.0 has-tostringtag: 1.0.2 + hasown: 2.0.2 is-set@2.0.3: {} - is-shared-array-buffer@1.0.3: + is-shared-array-buffer@1.0.4: dependencies: - call-bind: 1.0.7 + call-bound: 1.0.3 is-stream@3.0.0: {} - is-string@1.0.7: + is-string@1.1.1: dependencies: + call-bound: 1.0.3 has-tostringtag: 1.0.2 - is-symbol@1.0.4: + is-symbol@1.1.1: dependencies: - has-symbols: 1.0.3 + call-bound: 1.0.3 + has-symbols: 1.1.0 + safe-regex-test: 1.1.0 is-text-path@2.0.0: dependencies: text-extensions: 2.4.0 - is-typed-array@1.1.13: + is-typed-array@1.1.15: dependencies: - which-typed-array: 1.1.15 + which-typed-array: 1.1.18 is-weakmap@2.0.2: {} - is-weakref@1.0.2: + is-weakref@1.1.1: dependencies: - call-bind: 1.0.7 + call-bound: 1.0.3 - is-weakset@2.0.3: + is-weakset@2.0.4: dependencies: - call-bind: 1.0.7 - get-intrinsic: 1.2.4 + call-bound: 1.0.3 + get-intrinsic: 1.2.7 isarray@2.0.5: {} isexe@2.0.0: {} - iterator.prototype@1.1.2: + iterator.prototype@1.1.5: dependencies: - define-properties: 1.2.1 - get-intrinsic: 1.2.4 - has-symbols: 1.0.3 - reflect.getprototypeof: 1.0.6 + define-data-property: 1.1.4 + es-object-atoms: 1.1.1 + get-intrinsic: 1.2.7 + get-proto: 1.0.1 + has-symbols: 1.1.0 set-function-name: 2.0.2 jackspeak@2.3.6: @@ -4212,20 +7096,31 @@ snapshots: optionalDependencies: '@pkgjs/parseargs': 0.11.0 - jackspeak@3.4.1: + jackspeak@3.4.3: dependencies: '@isaacs/cliui': 8.0.2 optionalDependencies: '@pkgjs/parseargs': 0.11.0 - jiti@1.21.6: {} + jiti@1.21.7: {} + + jiti@2.4.2: {} + + js-base64@2.6.4: {} js-tokens@4.0.0: {} + js-yaml@3.14.1: + dependencies: + argparse: 1.0.10 + esprima: 4.0.1 + js-yaml@4.1.0: dependencies: argparse: 2.0.1 + jsbi@4.3.0: {} + json-buffer@3.0.1: {} json-parse-even-better-errors@2.3.1: {} @@ -4240,19 +7135,29 @@ snapshots: dependencies: minimist: 1.2.8 + jsonfile@6.1.0: + dependencies: + universalify: 2.0.1 + optionalDependencies: + graceful-fs: 4.2.11 + jsonparse@1.3.1: {} jsx-ast-utils@3.3.5: dependencies: array-includes: 3.1.8 - array.prototype.flat: 1.3.2 - object.assign: 4.1.5 - object.values: 1.2.0 + array.prototype.flat: 1.3.3 + object.assign: 4.1.7 + object.values: 1.2.1 keyv@4.5.4: dependencies: json-buffer: 3.0.1 + kind-of@6.0.3: {} + + kleur@4.1.5: {} + language-subtag-registry@0.3.23: {} language-tags@1.0.9: @@ -4264,95 +7169,596 @@ snapshots: prelude-ls: 1.2.1 type-check: 0.4.0 - lilconfig@2.1.0: {} - - lilconfig@3.1.2: {} + lilconfig@3.1.3: {} lines-and-columns@1.2.4: {} - lint-staged@15.2.7: + lint-staged@15.4.3: dependencies: - chalk: 5.3.0 - commander: 12.1.0 - debug: 4.3.5 + chalk: 5.4.1 + commander: 13.1.0 + debug: 4.4.0 execa: 8.0.1 - lilconfig: 3.1.2 - listr2: 8.2.3 - micromatch: 4.0.7 + lilconfig: 3.1.3 + listr2: 8.2.5 + micromatch: 4.0.8 pidtree: 0.6.0 string-argv: 0.3.2 - yaml: 2.4.5 + yaml: 2.7.0 + transitivePeerDependencies: + - supports-color + + listr2@8.2.5: + dependencies: + cli-truncate: 4.0.0 + colorette: 2.0.20 + eventemitter3: 5.0.1 + log-update: 6.1.0 + rfdc: 1.4.1 + wrap-ansi: 9.0.0 + + locate-path@6.0.0: + dependencies: + p-locate: 5.0.0 + + locate-path@7.2.0: + dependencies: + p-locate: 6.0.0 + + lodash.camelcase@4.3.0: {} + + lodash.castarray@4.4.0: {} + + lodash.debounce@4.0.8: {} + + lodash.isplainobject@4.0.6: {} + + lodash.kebabcase@4.1.1: {} + + lodash.merge@4.6.2: {} + + lodash.mergewith@4.6.2: {} + + lodash.snakecase@4.1.1: {} + + lodash.startcase@4.4.0: {} + + lodash.uniq@4.5.0: {} + + lodash.upperfirst@4.3.1: {} + + log-update@6.1.0: + dependencies: + ansi-escapes: 7.0.0 + cli-cursor: 5.0.0 + slice-ansi: 7.1.0 + strip-ansi: 7.1.0 + wrap-ansi: 9.0.0 + + long@5.2.4: {} + + longest-streak@3.1.0: {} + + loose-envify@1.4.0: + dependencies: + js-tokens: 4.0.0 + + lower-case@2.0.2: + dependencies: + tslib: 2.8.1 + + lru-cache@10.4.3: {} + + lucide-react@0.408.0(react@18.3.1): + dependencies: + react: 18.3.1 + + markdown-extensions@1.1.1: {} + + markdown-table@3.0.4: {} + + math-intrinsics@1.1.0: {} + + mdast-util-definitions@5.1.2: + dependencies: + '@types/mdast': 3.0.15 + '@types/unist': 2.0.11 + unist-util-visit: 4.1.2 + + mdast-util-find-and-replace@2.2.2: + dependencies: + '@types/mdast': 3.0.15 + escape-string-regexp: 5.0.0 + unist-util-is: 5.2.1 + unist-util-visit-parents: 5.1.3 + + mdast-util-from-markdown@1.3.1: + dependencies: + '@types/mdast': 3.0.15 + '@types/unist': 2.0.11 + decode-named-character-reference: 1.0.2 + mdast-util-to-string: 3.2.0 + micromark: 3.2.0 + micromark-util-decode-numeric-character-reference: 1.1.0 + micromark-util-decode-string: 1.1.0 + micromark-util-normalize-identifier: 1.1.0 + micromark-util-symbol: 1.1.0 + micromark-util-types: 1.1.0 + unist-util-stringify-position: 3.0.3 + uvu: 0.5.6 + transitivePeerDependencies: + - supports-color + + mdast-util-frontmatter@1.0.1: + dependencies: + '@types/mdast': 3.0.15 + mdast-util-to-markdown: 1.5.0 + micromark-extension-frontmatter: 1.1.1 + + mdast-util-gfm-autolink-literal@1.0.3: + dependencies: + '@types/mdast': 3.0.15 + ccount: 2.0.1 + mdast-util-find-and-replace: 2.2.2 + micromark-util-character: 1.2.0 + + mdast-util-gfm-footnote@1.0.2: + dependencies: + '@types/mdast': 3.0.15 + mdast-util-to-markdown: 1.5.0 + micromark-util-normalize-identifier: 1.1.0 + + mdast-util-gfm-strikethrough@1.0.3: + dependencies: + '@types/mdast': 3.0.15 + mdast-util-to-markdown: 1.5.0 + + mdast-util-gfm-table@1.0.7: + dependencies: + '@types/mdast': 3.0.15 + markdown-table: 3.0.4 + mdast-util-from-markdown: 1.3.1 + mdast-util-to-markdown: 1.5.0 + transitivePeerDependencies: + - supports-color + + mdast-util-gfm-task-list-item@1.0.2: + dependencies: + '@types/mdast': 3.0.15 + mdast-util-to-markdown: 1.5.0 + + mdast-util-gfm@2.0.2: + dependencies: + mdast-util-from-markdown: 1.3.1 + mdast-util-gfm-autolink-literal: 1.0.3 + mdast-util-gfm-footnote: 1.0.2 + mdast-util-gfm-strikethrough: 1.0.3 + mdast-util-gfm-table: 1.0.7 + mdast-util-gfm-task-list-item: 1.0.2 + mdast-util-to-markdown: 1.5.0 + transitivePeerDependencies: + - supports-color + + mdast-util-mdx-expression@1.3.2: + dependencies: + '@types/estree-jsx': 1.0.5 + '@types/hast': 2.3.10 + '@types/mdast': 3.0.15 + mdast-util-from-markdown: 1.3.1 + mdast-util-to-markdown: 1.5.0 + transitivePeerDependencies: + - supports-color + + mdast-util-mdx-jsx@2.1.4: + dependencies: + '@types/estree-jsx': 1.0.5 + '@types/hast': 2.3.10 + '@types/mdast': 3.0.15 + '@types/unist': 2.0.11 + ccount: 2.0.1 + mdast-util-from-markdown: 1.3.1 + mdast-util-to-markdown: 1.5.0 + parse-entities: 4.0.2 + stringify-entities: 4.0.4 + unist-util-remove-position: 4.0.2 + unist-util-stringify-position: 3.0.3 + vfile-message: 3.1.4 + transitivePeerDependencies: + - supports-color + + mdast-util-mdx@2.0.1: + dependencies: + mdast-util-from-markdown: 1.3.1 + mdast-util-mdx-expression: 1.3.2 + mdast-util-mdx-jsx: 2.1.4 + mdast-util-mdxjs-esm: 1.3.1 + mdast-util-to-markdown: 1.5.0 + transitivePeerDependencies: + - supports-color + + mdast-util-mdxjs-esm@1.3.1: + dependencies: + '@types/estree-jsx': 1.0.5 + '@types/hast': 2.3.10 + '@types/mdast': 3.0.15 + mdast-util-from-markdown: 1.3.1 + mdast-util-to-markdown: 1.5.0 + transitivePeerDependencies: + - supports-color + + mdast-util-phrasing@3.0.1: + dependencies: + '@types/mdast': 3.0.15 + unist-util-is: 5.2.1 + + mdast-util-to-hast@12.3.0: + dependencies: + '@types/hast': 2.3.10 + '@types/mdast': 3.0.15 + mdast-util-definitions: 5.1.2 + micromark-util-sanitize-uri: 1.2.0 + trim-lines: 3.0.1 + unist-util-generated: 2.0.1 + unist-util-position: 4.0.4 + unist-util-visit: 4.1.2 + + mdast-util-to-hast@13.2.0: + dependencies: + '@types/hast': 3.0.4 + '@types/mdast': 4.0.4 + '@ungap/structured-clone': 1.3.0 + devlop: 1.1.0 + micromark-util-sanitize-uri: 2.0.1 + trim-lines: 3.0.1 + unist-util-position: 5.0.0 + unist-util-visit: 5.0.0 + vfile: 6.0.3 + + mdast-util-to-markdown@1.5.0: + dependencies: + '@types/mdast': 3.0.15 + '@types/unist': 2.0.11 + longest-streak: 3.1.0 + mdast-util-phrasing: 3.0.1 + mdast-util-to-string: 3.2.0 + micromark-util-decode-string: 1.1.0 + unist-util-visit: 4.1.2 + zwitch: 2.0.4 + + mdast-util-to-string@3.2.0: + dependencies: + '@types/mdast': 3.0.15 + + mdx-bundler@9.2.1(esbuild@0.25.0): + dependencies: + '@babel/runtime': 7.26.7 + '@esbuild-plugins/node-resolve': 0.1.4(esbuild@0.25.0) + '@fal-works/esbuild-plugin-global-externals': 2.1.2 + '@mdx-js/esbuild': 2.3.0(esbuild@0.25.0) + esbuild: 0.25.0 + gray-matter: 4.0.3 + remark-frontmatter: 4.0.1 + remark-mdx-frontmatter: 1.1.1 + uuid: 8.3.2 + vfile: 5.3.7 transitivePeerDependencies: - supports-color - listr2@8.2.3: + memfs@3.5.3: + dependencies: + fs-monkey: 1.0.6 + + meow@12.1.1: {} + + merge-stream@2.0.0: {} + + merge2@1.4.1: {} + + micromark-core-commonmark@1.1.0: + dependencies: + decode-named-character-reference: 1.0.2 + micromark-factory-destination: 1.1.0 + micromark-factory-label: 1.1.0 + micromark-factory-space: 1.1.0 + micromark-factory-title: 1.1.0 + micromark-factory-whitespace: 1.1.0 + micromark-util-character: 1.2.0 + micromark-util-chunked: 1.1.0 + micromark-util-classify-character: 1.1.0 + micromark-util-html-tag-name: 1.2.0 + micromark-util-normalize-identifier: 1.1.0 + micromark-util-resolve-all: 1.1.0 + micromark-util-subtokenize: 1.1.0 + micromark-util-symbol: 1.1.0 + micromark-util-types: 1.1.0 + uvu: 0.5.6 + + micromark-extension-frontmatter@1.1.1: + dependencies: + fault: 2.0.1 + micromark-util-character: 1.2.0 + micromark-util-symbol: 1.1.0 + micromark-util-types: 1.1.0 + + micromark-extension-gfm-autolink-literal@1.0.5: + dependencies: + micromark-util-character: 1.2.0 + micromark-util-sanitize-uri: 1.2.0 + micromark-util-symbol: 1.1.0 + micromark-util-types: 1.1.0 + + micromark-extension-gfm-footnote@1.1.2: + dependencies: + micromark-core-commonmark: 1.1.0 + micromark-factory-space: 1.1.0 + micromark-util-character: 1.2.0 + micromark-util-normalize-identifier: 1.1.0 + micromark-util-sanitize-uri: 1.2.0 + micromark-util-symbol: 1.1.0 + micromark-util-types: 1.1.0 + uvu: 0.5.6 + + micromark-extension-gfm-strikethrough@1.0.7: + dependencies: + micromark-util-chunked: 1.1.0 + micromark-util-classify-character: 1.1.0 + micromark-util-resolve-all: 1.1.0 + micromark-util-symbol: 1.1.0 + micromark-util-types: 1.1.0 + uvu: 0.5.6 + + micromark-extension-gfm-table@1.0.7: + dependencies: + micromark-factory-space: 1.1.0 + micromark-util-character: 1.2.0 + micromark-util-symbol: 1.1.0 + micromark-util-types: 1.1.0 + uvu: 0.5.6 + + micromark-extension-gfm-tagfilter@1.0.2: + dependencies: + micromark-util-types: 1.1.0 + + micromark-extension-gfm-task-list-item@1.0.5: + dependencies: + micromark-factory-space: 1.1.0 + micromark-util-character: 1.2.0 + micromark-util-symbol: 1.1.0 + micromark-util-types: 1.1.0 + uvu: 0.5.6 + + micromark-extension-gfm@2.0.3: + dependencies: + micromark-extension-gfm-autolink-literal: 1.0.5 + micromark-extension-gfm-footnote: 1.1.2 + micromark-extension-gfm-strikethrough: 1.0.7 + micromark-extension-gfm-table: 1.0.7 + micromark-extension-gfm-tagfilter: 1.0.2 + micromark-extension-gfm-task-list-item: 1.0.5 + micromark-util-combine-extensions: 1.1.0 + micromark-util-types: 1.1.0 + + micromark-extension-mdx-expression@1.0.8: + dependencies: + '@types/estree': 1.0.6 + micromark-factory-mdx-expression: 1.0.9 + micromark-factory-space: 1.1.0 + micromark-util-character: 1.2.0 + micromark-util-events-to-acorn: 1.2.3 + micromark-util-symbol: 1.1.0 + micromark-util-types: 1.1.0 + uvu: 0.5.6 + + micromark-extension-mdx-jsx@1.0.5: + dependencies: + '@types/acorn': 4.0.6 + '@types/estree': 1.0.6 + estree-util-is-identifier-name: 2.1.0 + micromark-factory-mdx-expression: 1.0.9 + micromark-factory-space: 1.1.0 + micromark-util-character: 1.2.0 + micromark-util-symbol: 1.1.0 + micromark-util-types: 1.1.0 + uvu: 0.5.6 + vfile-message: 3.1.4 + + micromark-extension-mdx-md@1.0.1: + dependencies: + micromark-util-types: 1.1.0 + + micromark-extension-mdxjs-esm@1.0.5: + dependencies: + '@types/estree': 1.0.6 + micromark-core-commonmark: 1.1.0 + micromark-util-character: 1.2.0 + micromark-util-events-to-acorn: 1.2.3 + micromark-util-symbol: 1.1.0 + micromark-util-types: 1.1.0 + unist-util-position-from-estree: 1.1.2 + uvu: 0.5.6 + vfile-message: 3.1.4 + + micromark-extension-mdxjs@1.0.1: + dependencies: + acorn: 8.14.0 + acorn-jsx: 5.3.2(acorn@8.14.0) + micromark-extension-mdx-expression: 1.0.8 + micromark-extension-mdx-jsx: 1.0.5 + micromark-extension-mdx-md: 1.0.1 + micromark-extension-mdxjs-esm: 1.0.5 + micromark-util-combine-extensions: 1.1.0 + micromark-util-types: 1.1.0 + + micromark-factory-destination@1.1.0: + dependencies: + micromark-util-character: 1.2.0 + micromark-util-symbol: 1.1.0 + micromark-util-types: 1.1.0 + + micromark-factory-label@1.1.0: + dependencies: + micromark-util-character: 1.2.0 + micromark-util-symbol: 1.1.0 + micromark-util-types: 1.1.0 + uvu: 0.5.6 + + micromark-factory-mdx-expression@1.0.9: + dependencies: + '@types/estree': 1.0.6 + micromark-util-character: 1.2.0 + micromark-util-events-to-acorn: 1.2.3 + micromark-util-symbol: 1.1.0 + micromark-util-types: 1.1.0 + unist-util-position-from-estree: 1.1.2 + uvu: 0.5.6 + vfile-message: 3.1.4 + + micromark-factory-space@1.1.0: + dependencies: + micromark-util-character: 1.2.0 + micromark-util-types: 1.1.0 + + micromark-factory-title@1.1.0: + dependencies: + micromark-factory-space: 1.1.0 + micromark-util-character: 1.2.0 + micromark-util-symbol: 1.1.0 + micromark-util-types: 1.1.0 + + micromark-factory-whitespace@1.1.0: + dependencies: + micromark-factory-space: 1.1.0 + micromark-util-character: 1.2.0 + micromark-util-symbol: 1.1.0 + micromark-util-types: 1.1.0 + + micromark-util-character@1.2.0: + dependencies: + micromark-util-symbol: 1.1.0 + micromark-util-types: 1.1.0 + + micromark-util-character@2.1.1: + dependencies: + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.1 + + micromark-util-chunked@1.1.0: dependencies: - cli-truncate: 4.0.0 - colorette: 2.0.20 - eventemitter3: 5.0.1 - log-update: 6.0.0 - rfdc: 1.4.1 - wrap-ansi: 9.0.0 + micromark-util-symbol: 1.1.0 - locate-path@6.0.0: + micromark-util-classify-character@1.1.0: dependencies: - p-locate: 5.0.0 + micromark-util-character: 1.2.0 + micromark-util-symbol: 1.1.0 + micromark-util-types: 1.1.0 - locate-path@7.2.0: + micromark-util-combine-extensions@1.1.0: dependencies: - p-locate: 6.0.0 + micromark-util-chunked: 1.1.0 + micromark-util-types: 1.1.0 - lodash.camelcase@4.3.0: {} + micromark-util-decode-numeric-character-reference@1.1.0: + dependencies: + micromark-util-symbol: 1.1.0 - lodash.isplainobject@4.0.6: {} + micromark-util-decode-string@1.1.0: + dependencies: + decode-named-character-reference: 1.0.2 + micromark-util-character: 1.2.0 + micromark-util-decode-numeric-character-reference: 1.1.0 + micromark-util-symbol: 1.1.0 - lodash.kebabcase@4.1.1: {} + micromark-util-encode@1.1.0: {} - lodash.merge@4.6.2: {} + micromark-util-encode@2.0.1: {} - lodash.mergewith@4.6.2: {} + micromark-util-events-to-acorn@1.2.3: + dependencies: + '@types/acorn': 4.0.6 + '@types/estree': 1.0.6 + '@types/unist': 2.0.11 + estree-util-visit: 1.2.1 + micromark-util-symbol: 1.1.0 + micromark-util-types: 1.1.0 + uvu: 0.5.6 + vfile-message: 3.1.4 - lodash.snakecase@4.1.1: {} + micromark-util-html-tag-name@1.2.0: {} - lodash.startcase@4.4.0: {} + micromark-util-normalize-identifier@1.1.0: + dependencies: + micromark-util-symbol: 1.1.0 - lodash.uniq@4.5.0: {} + micromark-util-resolve-all@1.1.0: + dependencies: + micromark-util-types: 1.1.0 - lodash.upperfirst@4.3.1: {} + micromark-util-sanitize-uri@1.2.0: + dependencies: + micromark-util-character: 1.2.0 + micromark-util-encode: 1.1.0 + micromark-util-symbol: 1.1.0 - log-update@6.0.0: + micromark-util-sanitize-uri@2.0.1: dependencies: - ansi-escapes: 6.2.1 - cli-cursor: 4.0.0 - slice-ansi: 7.1.0 - strip-ansi: 7.1.0 - wrap-ansi: 9.0.0 + micromark-util-character: 2.1.1 + micromark-util-encode: 2.0.1 + micromark-util-symbol: 2.0.1 - loose-envify@1.4.0: + micromark-util-subtokenize@1.1.0: dependencies: - js-tokens: 4.0.0 + micromark-util-chunked: 1.1.0 + micromark-util-symbol: 1.1.0 + micromark-util-types: 1.1.0 + uvu: 0.5.6 - lru-cache@10.3.1: {} + micromark-util-symbol@1.1.0: {} - lucide-react@0.408.0(react@18.3.1): - dependencies: - react: 18.3.1 + micromark-util-symbol@2.0.1: {} - meow@12.1.1: {} + micromark-util-types@1.1.0: {} - merge-stream@2.0.0: {} + micromark-util-types@2.0.1: {} - merge2@1.4.1: {} + micromark@3.2.0: + dependencies: + '@types/debug': 4.1.12 + debug: 4.4.0 + decode-named-character-reference: 1.0.2 + micromark-core-commonmark: 1.1.0 + micromark-factory-space: 1.1.0 + micromark-util-character: 1.2.0 + micromark-util-chunked: 1.1.0 + micromark-util-combine-extensions: 1.1.0 + micromark-util-decode-numeric-character-reference: 1.1.0 + micromark-util-encode: 1.1.0 + micromark-util-normalize-identifier: 1.1.0 + micromark-util-resolve-all: 1.1.0 + micromark-util-sanitize-uri: 1.2.0 + micromark-util-subtokenize: 1.1.0 + micromark-util-symbol: 1.1.0 + micromark-util-types: 1.1.0 + uvu: 0.5.6 + transitivePeerDependencies: + - supports-color - micromatch@4.0.7: + micromatch@4.0.8: dependencies: braces: 3.0.3 picomatch: 2.3.1 - mimic-fn@2.1.0: {} + mime-db@1.25.0: {} + + mime-types@2.1.13: + dependencies: + mime-db: 1.25.0 mimic-fn@4.0.0: {} + mimic-function@5.0.1: {} + + mini-svg-data-uri@1.4.4: {} + minimatch@3.1.2: dependencies: brace-expansion: 1.1.11 @@ -4369,7 +7775,15 @@ snapshots: minipass@7.1.2: {} - ms@2.1.2: {} + motion-dom@11.18.1: + dependencies: + motion-utils: 11.18.1 + + motion-utils@11.18.1: {} + + mri@1.2.0: {} + + ms@2.0.0: {} ms@2.1.3: {} @@ -4379,21 +7793,42 @@ snapshots: object-assign: 4.1.1 thenify-all: 1.6.0 - nanoid@3.3.7: {} + nanoid@3.3.8: {} natural-compare@1.4.0: {} + next-contentlayer@0.3.4(contentlayer@0.3.4)(esbuild@0.25.0)(next@14.2.4)(react-dom@18.3.1)(react@18.3.1): + dependencies: + '@contentlayer/core': 0.3.4(esbuild@0.25.0) + '@contentlayer/utils': 0.3.4 + contentlayer: 0.3.4(esbuild@0.25.0) + next: 14.2.4(@opentelemetry/api@1.9.0)(react-dom@18.3.1)(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + transitivePeerDependencies: + - '@effect-ts/otel-node' + - esbuild + - markdown-wasm + - supports-color + next-themes@0.3.0(react-dom@18.3.1)(react@18.3.1): dependencies: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - next@14.2.4(react-dom@18.3.1)(react@18.3.1): + next-view-transitions@0.3.4(next@14.2.4)(react-dom@18.3.1)(react@18.3.1): + dependencies: + next: 14.2.4(@opentelemetry/api@1.9.0)(react-dom@18.3.1)(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + + next@14.2.4(@opentelemetry/api@1.9.0)(react-dom@18.3.1)(react@18.3.1): dependencies: '@next/env': 14.2.4 + '@opentelemetry/api': 1.9.0 '@swc/helpers': 0.5.5 busboy: 1.6.0 - caniuse-lite: 1.0.30001640 + caniuse-lite: 1.0.30001699 graceful-fs: 4.2.11 postcss: 8.4.31 react: 18.3.1 @@ -4413,6 +7848,23 @@ snapshots: - '@babel/core' - babel-plugin-macros + no-case@3.0.4: + dependencies: + lower-case: 2.0.2 + tslib: 2.8.1 + + node-cron@3.0.3: + dependencies: + uuid: 8.3.2 + + node-domexception@1.0.0: {} + + node-fetch@3.3.2: + dependencies: + data-uri-to-buffer: 4.0.1 + fetch-blob: 3.2.0 + formdata-polyfill: 4.0.10 + normalize-path@3.0.0: {} npm-run-path@5.3.0: @@ -4423,65 +7875,61 @@ snapshots: object-hash@3.0.0: {} - object-inspect@1.13.2: {} - - object-is@1.1.6: - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 + object-inspect@1.13.4: {} object-keys@1.1.1: {} - object.assign@4.1.5: + object.assign@4.1.7: dependencies: - call-bind: 1.0.7 + call-bind: 1.0.8 + call-bound: 1.0.3 define-properties: 1.2.1 - has-symbols: 1.0.3 + es-object-atoms: 1.1.1 + has-symbols: 1.1.0 object-keys: 1.1.1 object.entries@1.1.8: dependencies: - call-bind: 1.0.7 + call-bind: 1.0.8 define-properties: 1.2.1 - es-object-atoms: 1.0.0 + es-object-atoms: 1.1.1 object.fromentries@2.0.8: dependencies: - call-bind: 1.0.7 + call-bind: 1.0.8 define-properties: 1.2.1 - es-abstract: 1.23.3 - es-object-atoms: 1.0.0 + es-abstract: 1.23.9 + es-object-atoms: 1.1.1 object.groupby@1.0.3: dependencies: - call-bind: 1.0.7 + call-bind: 1.0.8 define-properties: 1.2.1 - es-abstract: 1.23.3 + es-abstract: 1.23.9 - object.hasown@1.1.4: + object.values@1.2.1: dependencies: + call-bind: 1.0.8 + call-bound: 1.0.3 define-properties: 1.2.1 - es-abstract: 1.23.3 - es-object-atoms: 1.0.0 + es-object-atoms: 1.1.1 - object.values@1.2.0: - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-object-atoms: 1.0.0 + on-change@4.0.2: {} once@1.4.0: dependencies: wrappy: 1.0.2 - onetime@5.1.2: - dependencies: - mimic-fn: 2.1.0 - onetime@6.0.0: dependencies: mimic-fn: 4.0.0 + onetime@7.0.0: + dependencies: + mimic-function: 5.0.1 + + oo-ascii-tree@1.106.0: {} + optionator@0.9.4: dependencies: deep-is: 0.1.4 @@ -4491,6 +7939,12 @@ snapshots: type-check: 0.4.0 word-wrap: 1.2.5 + own-keys@1.0.1: + dependencies: + get-intrinsic: 1.2.7 + object-keys: 1.1.1 + safe-push-apply: 1.0.0 + p-limit@3.1.0: dependencies: yocto-queue: 0.1.0 @@ -4507,19 +7961,42 @@ snapshots: dependencies: p-limit: 4.0.0 - package-json-from-dist@1.0.0: {} + package-json-from-dist@1.0.1: {} parent-module@1.0.1: dependencies: callsites: 3.1.0 + parse-entities@4.0.2: + dependencies: + '@types/unist': 2.0.11 + character-entities-legacy: 3.0.0 + character-reference-invalid: 2.0.1 + decode-named-character-reference: 1.0.2 + is-alphanumerical: 2.0.1 + is-decimal: 2.0.1 + is-hexadecimal: 2.0.1 + parse-json@5.2.0: dependencies: - '@babel/code-frame': 7.24.7 + '@babel/code-frame': 7.26.2 error-ex: 1.3.2 json-parse-even-better-errors: 2.3.1 lines-and-columns: 1.2.4 + parse-numeric-range@1.3.0: {} + + parse5@6.0.1: {} + + parse5@7.2.1: + dependencies: + entities: 4.5.0 + + pascal-case@3.1.2: + dependencies: + no-case: 3.0.4 + tslib: 2.8.1 + path-exists@4.0.0: {} path-exists@5.0.0: {} @@ -4534,12 +8011,20 @@ snapshots: path-scurry@1.11.1: dependencies: - lru-cache: 10.3.1 + lru-cache: 10.4.3 minipass: 7.1.2 path-type@4.0.0: {} - picocolors@1.0.1: {} + path-type@6.0.0: {} + + periscopic@3.1.0: + dependencies: + '@types/estree': 1.0.6 + estree-walker: 3.0.3 + is-reference: 3.0.3 + + picocolors@1.1.1: {} picomatch@2.3.1: {} @@ -4549,32 +8034,37 @@ snapshots: pirates@4.0.6: {} - possible-typed-array-names@1.0.0: {} + possible-typed-array-names@1.1.0: {} - postcss-import@15.1.0(postcss@8.4.39): + postcss-import@15.1.0(postcss@8.5.1): dependencies: - postcss: 8.4.39 + postcss: 8.5.1 postcss-value-parser: 4.2.0 read-cache: 1.0.0 - resolve: 1.22.8 + resolve: 1.22.10 - postcss-js@4.0.1(postcss@8.4.39): + postcss-js@4.0.1(postcss@8.5.1): dependencies: camelcase-css: 2.0.1 - postcss: 8.4.39 + postcss: 8.5.1 - postcss-load-config@4.0.2(postcss@8.4.39): + postcss-load-config@4.0.2(postcss@8.5.1): dependencies: - lilconfig: 3.1.2 - postcss: 8.4.39 - yaml: 2.4.5 + lilconfig: 3.1.3 + postcss: 8.5.1 + yaml: 2.7.0 - postcss-nested@6.0.1(postcss@8.4.39): + postcss-nested@6.2.0(postcss@8.5.1): dependencies: - postcss: 8.4.39 - postcss-selector-parser: 6.1.0 + postcss: 8.5.1 + postcss-selector-parser: 6.1.2 - postcss-selector-parser@6.1.0: + postcss-selector-parser@6.0.10: + dependencies: + cssesc: 3.0.0 + util-deprecate: 1.0.2 + + postcss-selector-parser@6.1.2: dependencies: cssesc: 3.0.0 util-deprecate: 1.0.2 @@ -4583,15 +8073,15 @@ snapshots: postcss@8.4.31: dependencies: - nanoid: 3.3.7 - picocolors: 1.0.1 - source-map-js: 1.2.0 + nanoid: 3.3.8 + picocolors: 1.1.1 + source-map-js: 1.2.1 - postcss@8.4.39: + postcss@8.5.1: dependencies: - nanoid: 3.3.7 - picocolors: 1.0.1 - source-map-js: 1.2.0 + nanoid: 3.3.8 + picocolors: 1.1.1 + source-map-js: 1.2.1 prelude-ls@1.2.1: {} @@ -4599,7 +8089,7 @@ snapshots: dependencies: fast-diff: 1.3.0 - prettier@3.3.2: {} + prettier@3.5.0: {} prop-types@15.8.1: dependencies: @@ -4607,6 +8097,23 @@ snapshots: object-assign: 4.1.1 react-is: 16.13.1 + property-information@6.5.0: {} + + protobufjs@7.4.0: + dependencies: + '@protobufjs/aspromise': 1.1.2 + '@protobufjs/base64': 1.1.2 + '@protobufjs/codegen': 2.0.4 + '@protobufjs/eventemitter': 1.1.0 + '@protobufjs/fetch': 1.1.0 + '@protobufjs/float': 1.0.2 + '@protobufjs/inquire': 1.1.0 + '@protobufjs/path': 1.1.2 + '@protobufjs/pool': 1.1.0 + '@protobufjs/utf8': 1.1.0 + '@types/node': 20.17.17 + long: 5.2.4 + punycode@2.3.1: {} queue-microtask@1.2.3: {} @@ -4619,30 +8126,40 @@ snapshots: react-is@16.13.1: {} - react-remove-scroll-bar@2.3.6(@types/react@18.3.3)(react@18.3.1): + react-medium-image-zoom@5.2.13(react-dom@18.3.1)(react@18.3.1): + dependencies: + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + + react-merge-refs@2.1.1: {} + + react-remove-scroll-bar@2.3.8(@types/react@18.2.65)(react@18.3.1): dependencies: - '@types/react': 18.3.3 + '@types/react': 18.2.65 react: 18.3.1 - react-style-singleton: 2.2.1(@types/react@18.3.3)(react@18.3.1) - tslib: 2.6.3 + react-style-singleton: 2.2.3(@types/react@18.2.65)(react@18.3.1) + tslib: 2.8.1 - react-remove-scroll@2.5.7(@types/react@18.3.3)(react@18.3.1): + react-remove-scroll@2.6.3(@types/react@18.2.65)(react@18.3.1): dependencies: - '@types/react': 18.3.3 + '@types/react': 18.2.65 react: 18.3.1 - react-remove-scroll-bar: 2.3.6(@types/react@18.3.3)(react@18.3.1) - react-style-singleton: 2.2.1(@types/react@18.3.3)(react@18.3.1) - tslib: 2.6.3 - use-callback-ref: 1.3.2(@types/react@18.3.3)(react@18.3.1) - use-sidecar: 1.1.2(@types/react@18.3.3)(react@18.3.1) + react-remove-scroll-bar: 2.3.8(@types/react@18.2.65)(react@18.3.1) + react-style-singleton: 2.2.3(@types/react@18.2.65)(react@18.3.1) + tslib: 2.8.1 + use-callback-ref: 1.3.3(@types/react@18.2.65)(react@18.3.1) + use-sidecar: 1.1.3(@types/react@18.2.65)(react@18.3.1) - react-style-singleton@2.2.1(@types/react@18.3.3)(react@18.3.1): + react-style-singleton@2.2.3(@types/react@18.2.65)(react@18.3.1): dependencies: - '@types/react': 18.3.3 + '@types/react': 18.2.65 get-nonce: 1.0.1 - invariant: 2.2.4 react: 18.3.1 - tslib: 2.6.3 + tslib: 2.8.1 + + react-wrap-balancer@1.1.1(react@18.3.1): + dependencies: + react: 18.3.1 react@18.3.1: dependencies: @@ -4656,23 +8173,130 @@ snapshots: dependencies: picomatch: 2.3.1 - reflect.getprototypeof@1.0.6: + reading-time@1.5.0: {} + + reflect.getprototypeof@1.0.10: dependencies: - call-bind: 1.0.7 + call-bind: 1.0.8 define-properties: 1.2.1 - es-abstract: 1.23.3 + es-abstract: 1.23.9 es-errors: 1.3.0 - get-intrinsic: 1.2.4 - globalthis: 1.0.4 - which-builtin-type: 1.1.3 + es-object-atoms: 1.1.1 + get-intrinsic: 1.2.7 + get-proto: 1.0.1 + which-builtin-type: 1.2.1 + + refractor@4.8.1: + dependencies: + '@types/hast': 2.3.10 + '@types/prismjs': 1.26.5 + hastscript: 7.2.0 + parse-entities: 4.0.2 + + regenerator-runtime@0.14.1: {} - regexp.prototype.flags@1.5.2: + regexp.prototype.flags@1.5.4: dependencies: - call-bind: 1.0.7 + call-bind: 1.0.8 define-properties: 1.2.1 es-errors: 1.3.0 + get-proto: 1.0.1 + gopd: 1.2.0 set-function-name: 2.0.2 + rehype-autolink-headings@7.1.0: + dependencies: + '@types/hast': 3.0.4 + '@ungap/structured-clone': 1.3.0 + hast-util-heading-rank: 3.0.0 + hast-util-is-element: 3.0.0 + unified: 11.0.5 + unist-util-visit: 5.0.0 + + rehype-parse@9.0.1: + dependencies: + '@types/hast': 3.0.4 + hast-util-from-html: 2.0.3 + unified: 11.0.5 + + rehype-prism-plus@2.0.0: + dependencies: + hast-util-to-string: 3.0.1 + parse-numeric-range: 1.3.0 + refractor: 4.8.1 + rehype-parse: 9.0.1 + unist-util-filter: 5.0.1 + unist-util-visit: 5.0.0 + + rehype-slug@6.0.0: + dependencies: + '@types/hast': 3.0.4 + github-slugger: 2.0.0 + hast-util-heading-rank: 3.0.0 + hast-util-to-string: 3.0.1 + unist-util-visit: 5.0.0 + + rehype-stringify@9.0.4: + dependencies: + '@types/hast': 2.3.10 + hast-util-to-html: 8.0.4 + unified: 10.1.2 + + remark-frontmatter@4.0.1: + dependencies: + '@types/mdast': 3.0.15 + mdast-util-frontmatter: 1.0.1 + micromark-extension-frontmatter: 1.1.1 + unified: 10.1.2 + + remark-gfm@3.0.1: + dependencies: + '@types/mdast': 3.0.15 + mdast-util-gfm: 2.0.2 + micromark-extension-gfm: 2.0.3 + unified: 10.1.2 + transitivePeerDependencies: + - supports-color + + remark-mdx-frontmatter@1.1.1: + dependencies: + estree-util-is-identifier-name: 1.1.0 + estree-util-value-to-estree: 1.3.0 + js-yaml: 4.1.0 + toml: 3.0.0 + + remark-mdx@2.3.0: + dependencies: + mdast-util-mdx: 2.0.1 + micromark-extension-mdxjs: 1.0.1 + transitivePeerDependencies: + - supports-color + + remark-parse@10.0.2: + dependencies: + '@types/mdast': 3.0.15 + mdast-util-from-markdown: 1.3.1 + unified: 10.1.2 + transitivePeerDependencies: + - supports-color + + remark-rehype@10.1.0: + dependencies: + '@types/hast': 2.3.10 + '@types/mdast': 3.0.15 + mdast-util-to-hast: 12.3.0 + unified: 10.1.2 + + remark-rehype@11.1.1: + dependencies: + '@types/hast': 3.0.4 + '@types/mdast': 4.0.4 + mdast-util-to-hast: 13.2.0 + unified: 11.0.5 + vfile: 6.0.3 + + repeat-string@1.6.1: {} + require-directory@2.1.1: {} require-from-string@2.0.2: {} @@ -4683,22 +8307,22 @@ snapshots: resolve-pkg-maps@1.0.0: {} - resolve@1.22.8: + resolve@1.22.10: dependencies: - is-core-module: 2.14.0 + is-core-module: 2.16.1 path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 resolve@2.0.0-next.5: dependencies: - is-core-module: 2.14.0 + is-core-module: 2.16.1 path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 - restore-cursor@4.0.0: + restore-cursor@5.1.0: dependencies: - onetime: 5.1.2 - signal-exit: 3.0.7 + onetime: 7.0.0 + signal-exit: 4.1.0 reusify@1.0.4: {} @@ -4708,38 +8332,62 @@ snapshots: dependencies: glob: 7.2.3 + rss@1.2.2: + dependencies: + mime-types: 2.1.13 + xml: 1.0.1 + run-parallel@1.2.0: dependencies: queue-microtask: 1.2.3 - safe-array-concat@1.1.2: + sade@1.8.1: + dependencies: + mri: 1.2.0 + + safe-array-concat@1.1.3: + dependencies: + call-bind: 1.0.8 + call-bound: 1.0.3 + get-intrinsic: 1.2.7 + has-symbols: 1.1.0 + isarray: 2.0.5 + + safe-push-apply@1.0.0: dependencies: - call-bind: 1.0.7 - get-intrinsic: 1.2.4 - has-symbols: 1.0.3 + es-errors: 1.3.0 isarray: 2.0.5 - safe-regex-test@1.0.3: + safe-regex-test@1.1.0: dependencies: - call-bind: 1.0.7 + call-bound: 1.0.3 es-errors: 1.3.0 - is-regex: 1.1.4 + is-regex: 1.2.1 scheduler@0.23.2: dependencies: loose-envify: 1.4.0 + section-matter@1.0.0: + dependencies: + extend-shallow: 2.0.1 + kind-of: 6.0.3 + + semver-compare@1.0.0: {} + semver@6.3.1: {} - semver@7.6.2: {} + semver@7.7.1: {} + + server-only@0.0.1: {} set-function-length@1.2.2: dependencies: define-data-property: 1.1.4 es-errors: 1.3.0 function-bind: 1.1.2 - get-intrinsic: 1.2.4 - gopd: 1.0.1 + get-intrinsic: 1.2.7 + gopd: 1.2.0 has-property-descriptors: 1.0.2 set-function-name@2.0.2: @@ -4749,25 +8397,82 @@ snapshots: functions-have-names: 1.2.3 has-property-descriptors: 1.0.2 + set-proto@1.0.0: + dependencies: + dunder-proto: 1.0.1 + es-errors: 1.3.0 + es-object-atoms: 1.1.1 + + sharp@0.33.5: + dependencies: + color: 4.2.3 + detect-libc: 2.0.3 + semver: 7.7.1 + optionalDependencies: + '@img/sharp-darwin-arm64': 0.33.5 + '@img/sharp-darwin-x64': 0.33.5 + '@img/sharp-libvips-darwin-arm64': 1.0.4 + '@img/sharp-libvips-darwin-x64': 1.0.4 + '@img/sharp-libvips-linux-arm': 1.0.5 + '@img/sharp-libvips-linux-arm64': 1.0.4 + '@img/sharp-libvips-linux-s390x': 1.0.4 + '@img/sharp-libvips-linux-x64': 1.0.4 + '@img/sharp-libvips-linuxmusl-arm64': 1.0.4 + '@img/sharp-libvips-linuxmusl-x64': 1.0.4 + '@img/sharp-linux-arm': 0.33.5 + '@img/sharp-linux-arm64': 0.33.5 + '@img/sharp-linux-s390x': 0.33.5 + '@img/sharp-linux-x64': 0.33.5 + '@img/sharp-linuxmusl-arm64': 0.33.5 + '@img/sharp-linuxmusl-x64': 0.33.5 + '@img/sharp-wasm32': 0.33.5 + '@img/sharp-win32-ia32': 0.33.5 + '@img/sharp-win32-x64': 0.33.5 + shebang-command@2.0.0: dependencies: shebang-regex: 3.0.0 shebang-regex@3.0.0: {} - side-channel@1.0.6: + side-channel-list@1.0.0: + dependencies: + es-errors: 1.3.0 + object-inspect: 1.13.4 + + side-channel-map@1.0.1: + dependencies: + call-bound: 1.0.3 + es-errors: 1.3.0 + get-intrinsic: 1.2.7 + object-inspect: 1.13.4 + + side-channel-weakmap@1.0.2: dependencies: - call-bind: 1.0.7 + call-bound: 1.0.3 es-errors: 1.3.0 - get-intrinsic: 1.2.4 - object-inspect: 1.13.2 + get-intrinsic: 1.2.7 + object-inspect: 1.13.4 + side-channel-map: 1.0.1 - signal-exit@3.0.7: {} + side-channel@1.1.0: + dependencies: + es-errors: 1.3.0 + object-inspect: 1.13.4 + side-channel-list: 1.0.0 + side-channel-map: 1.0.1 + side-channel-weakmap: 1.0.2 signal-exit@4.1.0: {} + simple-swizzle@0.2.2: + dependencies: + is-arrayish: 0.3.2 + slash@3.0.0: {} + slash@5.1.0: {} + slice-ansi@5.0.0: dependencies: ansi-styles: 6.2.1 @@ -4778,13 +8483,29 @@ snapshots: ansi-styles: 6.2.1 is-fullwidth-code-point: 5.0.0 - source-map-js@1.2.0: {} + sonner@1.7.4(react-dom@18.3.1)(react@18.3.1): + dependencies: + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) - split2@4.2.0: {} + source-map-js@1.2.1: {} - stop-iteration-iterator@1.0.0: + source-map-support@0.5.21: dependencies: - internal-slot: 1.0.7 + buffer-from: 1.1.2 + source-map: 0.6.1 + + source-map@0.6.1: {} + + source-map@0.7.4: {} + + space-separated-tokens@2.0.2: {} + + split2@4.2.0: {} + + sprintf-js@1.0.3: {} + + stable-hash@0.0.4: {} streamsearch@1.1.0: {} @@ -4804,48 +8525,64 @@ snapshots: string-width@7.2.0: dependencies: - emoji-regex: 10.3.0 - get-east-asian-width: 1.2.0 + emoji-regex: 10.4.0 + get-east-asian-width: 1.3.0 strip-ansi: 7.1.0 - string.prototype.includes@2.0.0: + string.prototype.includes@2.0.1: dependencies: + call-bind: 1.0.8 define-properties: 1.2.1 - es-abstract: 1.23.3 + es-abstract: 1.23.9 - string.prototype.matchall@4.0.11: + string.prototype.matchall@4.0.12: dependencies: - call-bind: 1.0.7 + call-bind: 1.0.8 + call-bound: 1.0.3 define-properties: 1.2.1 - es-abstract: 1.23.3 + es-abstract: 1.23.9 es-errors: 1.3.0 - es-object-atoms: 1.0.0 - get-intrinsic: 1.2.4 - gopd: 1.0.1 - has-symbols: 1.0.3 - internal-slot: 1.0.7 - regexp.prototype.flags: 1.5.2 + es-object-atoms: 1.1.1 + get-intrinsic: 1.2.7 + gopd: 1.2.0 + has-symbols: 1.1.0 + internal-slot: 1.1.0 + regexp.prototype.flags: 1.5.4 set-function-name: 2.0.2 - side-channel: 1.0.6 + side-channel: 1.1.0 + + string.prototype.repeat@1.0.0: + dependencies: + define-properties: 1.2.1 + es-abstract: 1.23.9 - string.prototype.trim@1.2.9: + string.prototype.trim@1.2.10: dependencies: - call-bind: 1.0.7 + call-bind: 1.0.8 + call-bound: 1.0.3 + define-data-property: 1.1.4 define-properties: 1.2.1 - es-abstract: 1.23.3 - es-object-atoms: 1.0.0 + es-abstract: 1.23.9 + es-object-atoms: 1.1.1 + has-property-descriptors: 1.0.2 - string.prototype.trimend@1.0.8: + string.prototype.trimend@1.0.9: dependencies: - call-bind: 1.0.7 + call-bind: 1.0.8 + call-bound: 1.0.3 define-properties: 1.2.1 - es-object-atoms: 1.0.0 + es-object-atoms: 1.1.1 string.prototype.trimstart@1.0.8: dependencies: - call-bind: 1.0.7 + call-bind: 1.0.8 define-properties: 1.2.1 - es-object-atoms: 1.0.0 + es-object-atoms: 1.1.1 + + stringify-entities@4.0.4: + dependencies: + character-entities-html4: 2.1.0 + character-entities-legacy: 3.0.0 strip-ansi@6.0.1: dependencies: @@ -4853,7 +8590,9 @@ snapshots: strip-ansi@7.1.0: dependencies: - ansi-regex: 6.0.1 + ansi-regex: 6.1.0 + + strip-bom-string@1.0.0: {} strip-bom@3.0.0: {} @@ -4861,6 +8600,10 @@ snapshots: strip-json-comments@3.1.1: {} + style-to-object@0.4.4: + dependencies: + inline-style-parser: 0.1.1 + styled-jsx@5.1.1(react@18.3.1): dependencies: client-only: 0.0.1 @@ -4868,58 +8611,54 @@ snapshots: sucrase@3.35.0: dependencies: - '@jridgewell/gen-mapping': 0.3.5 + '@jridgewell/gen-mapping': 0.3.8 commander: 4.1.1 - glob: 10.4.3 + glob: 10.4.5 lines-and-columns: 1.2.4 mz: 2.7.0 pirates: 4.0.6 ts-interface-checker: 0.1.13 - supports-color@5.5.0: - dependencies: - has-flag: 3.0.0 - supports-color@7.2.0: dependencies: has-flag: 4.0.0 supports-preserve-symlinks-flag@1.0.0: {} - synckit@0.8.8: + synckit@0.9.2: dependencies: '@pkgr/core': 0.1.1 - tslib: 2.6.3 + tslib: 2.8.1 - tailwind-merge@2.4.0: {} + tailwind-merge@2.6.0: {} - tailwindcss-animate@1.0.7(tailwindcss@3.4.4): + tailwindcss-animate@1.0.7(tailwindcss@3.4.17): dependencies: - tailwindcss: 3.4.4 + tailwindcss: 3.4.17 - tailwindcss@3.4.4: + tailwindcss@3.4.17: dependencies: '@alloc/quick-lru': 5.2.0 arg: 5.0.2 chokidar: 3.6.0 didyoumean: 1.2.2 dlv: 1.1.3 - fast-glob: 3.3.2 + fast-glob: 3.3.3 glob-parent: 6.0.2 is-glob: 4.0.3 - jiti: 1.21.6 - lilconfig: 2.1.0 - micromatch: 4.0.7 + jiti: 1.21.7 + lilconfig: 3.1.3 + micromatch: 4.0.8 normalize-path: 3.0.0 object-hash: 3.0.0 - picocolors: 1.0.1 - postcss: 8.4.39 - postcss-import: 15.1.0(postcss@8.4.39) - postcss-js: 4.0.1(postcss@8.4.39) - postcss-load-config: 4.0.2(postcss@8.4.39) - postcss-nested: 6.0.1(postcss@8.4.39) - postcss-selector-parser: 6.1.0 - resolve: 1.22.8 + picocolors: 1.1.1 + postcss: 8.5.1 + postcss-import: 15.1.0(postcss@8.5.1) + postcss-js: 4.0.1(postcss@8.5.1) + postcss-load-config: 4.0.2(postcss@8.5.1) + postcss-nested: 6.2.0(postcss@8.5.1) + postcss-selector-parser: 6.1.2 + resolve: 1.22.10 sucrase: 3.35.0 transitivePeerDependencies: - ts-node @@ -4940,16 +8679,30 @@ snapshots: through@2.3.8: {} + thumbhash@0.1.1: {} + + tinyexec@0.3.2: {} + to-regex-range@5.0.1: dependencies: is-number: 7.0.0 - ts-api-utils@1.3.0(typescript@5.5.3): + tocbot@4.33.0: {} + + toml@3.0.0: {} + + trim-lines@3.0.1: {} + + trough@2.2.0: {} + + ts-api-utils@1.4.3(typescript@5.7.3): dependencies: - typescript: 5.5.3 + typescript: 5.7.3 ts-interface-checker@0.1.13: {} + ts-pattern@4.3.0: {} + tsconfig-paths@3.15.0: dependencies: '@types/json5': 0.0.29 @@ -4957,7 +8710,9 @@ snapshots: minimist: 1.2.8 strip-bom: 3.0.0 - tslib@2.6.3: {} + tslib@2.8.1: {} + + typanion@3.14.0: {} type-check@0.4.0: dependencies: @@ -4965,106 +8720,245 @@ snapshots: type-fest@0.20.2: {} - typed-array-buffer@1.0.2: + type-fest@3.13.1: {} + + typed-array-buffer@1.0.3: dependencies: - call-bind: 1.0.7 + call-bound: 1.0.3 es-errors: 1.3.0 - is-typed-array: 1.1.13 + is-typed-array: 1.1.15 - typed-array-byte-length@1.0.1: + typed-array-byte-length@1.0.3: dependencies: - call-bind: 1.0.7 - for-each: 0.3.3 - gopd: 1.0.1 - has-proto: 1.0.3 - is-typed-array: 1.1.13 + call-bind: 1.0.8 + for-each: 0.3.4 + gopd: 1.2.0 + has-proto: 1.2.0 + is-typed-array: 1.1.15 - typed-array-byte-offset@1.0.2: + typed-array-byte-offset@1.0.4: dependencies: available-typed-arrays: 1.0.7 - call-bind: 1.0.7 - for-each: 0.3.3 - gopd: 1.0.1 - has-proto: 1.0.3 - is-typed-array: 1.1.13 + call-bind: 1.0.8 + for-each: 0.3.4 + gopd: 1.2.0 + has-proto: 1.2.0 + is-typed-array: 1.1.15 + reflect.getprototypeof: 1.0.10 - typed-array-length@1.0.6: + typed-array-length@1.0.7: dependencies: - call-bind: 1.0.7 - for-each: 0.3.3 - gopd: 1.0.1 - has-proto: 1.0.3 - is-typed-array: 1.1.13 - possible-typed-array-names: 1.0.0 + call-bind: 1.0.8 + for-each: 0.3.4 + gopd: 1.2.0 + is-typed-array: 1.1.15 + possible-typed-array-names: 1.1.0 + reflect.getprototypeof: 1.0.10 - typescript@5.5.3: {} + typescript@5.7.3: {} - unbox-primitive@1.0.2: + unbox-primitive@1.1.0: dependencies: - call-bind: 1.0.7 - has-bigints: 1.0.2 - has-symbols: 1.0.3 - which-boxed-primitive: 1.0.2 + call-bound: 1.0.3 + has-bigints: 1.1.0 + has-symbols: 1.1.0 + which-boxed-primitive: 1.1.1 - undici-types@5.26.5: {} + undici-types@6.19.8: {} unicorn-magic@0.1.0: {} + unicorn-magic@0.3.0: {} + + unified@10.1.2: + dependencies: + '@types/unist': 2.0.11 + bail: 2.0.2 + extend: 3.0.2 + is-buffer: 2.0.5 + is-plain-obj: 4.1.0 + trough: 2.2.0 + vfile: 5.3.7 + + unified@11.0.5: + dependencies: + '@types/unist': 3.0.3 + bail: 2.0.2 + devlop: 1.1.0 + extend: 3.0.2 + is-plain-obj: 4.1.0 + trough: 2.2.0 + vfile: 6.0.3 + + unist-util-filter@5.0.1: + dependencies: + '@types/unist': 3.0.3 + unist-util-is: 6.0.0 + unist-util-visit-parents: 6.0.1 + + unist-util-generated@2.0.1: {} + + unist-util-is@5.2.1: + dependencies: + '@types/unist': 2.0.11 + + unist-util-is@6.0.0: + dependencies: + '@types/unist': 3.0.3 + + unist-util-position-from-estree@1.1.2: + dependencies: + '@types/unist': 2.0.11 + + unist-util-position@4.0.4: + dependencies: + '@types/unist': 2.0.11 + + unist-util-position@5.0.0: + dependencies: + '@types/unist': 3.0.3 + + unist-util-remove-position@4.0.2: + dependencies: + '@types/unist': 2.0.11 + unist-util-visit: 4.1.2 + + unist-util-stringify-position@3.0.3: + dependencies: + '@types/unist': 2.0.11 + + unist-util-stringify-position@4.0.0: + dependencies: + '@types/unist': 3.0.3 + + unist-util-visit-parents@5.1.3: + dependencies: + '@types/unist': 2.0.11 + unist-util-is: 5.2.1 + + unist-util-visit-parents@6.0.1: + dependencies: + '@types/unist': 3.0.3 + unist-util-is: 6.0.0 + + unist-util-visit@4.1.2: + dependencies: + '@types/unist': 2.0.11 + unist-util-is: 5.2.1 + unist-util-visit-parents: 5.1.3 + + 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 + + universalify@2.0.1: {} + uri-js@4.4.1: dependencies: punycode: 2.3.1 - use-callback-ref@1.3.2(@types/react@18.3.3)(react@18.3.1): + use-callback-ref@1.3.3(@types/react@18.2.65)(react@18.3.1): dependencies: - '@types/react': 18.3.3 + '@types/react': 18.2.65 react: 18.3.1 - tslib: 2.6.3 + tslib: 2.8.1 - use-sidecar@1.1.2(@types/react@18.3.3)(react@18.3.1): + use-sidecar@1.1.3(@types/react@18.2.65)(react@18.3.1): dependencies: - '@types/react': 18.3.3 + '@types/react': 18.2.65 detect-node-es: 1.1.0 react: 18.3.1 - tslib: 2.6.3 + tslib: 2.8.1 + + utf8@2.1.2: {} util-deprecate@1.0.2: {} - which-boxed-primitive@1.0.2: + uuid@8.3.2: {} + + uvu@0.5.6: + dependencies: + dequal: 2.0.3 + diff: 5.2.0 + kleur: 4.1.5 + sade: 1.8.1 + + vfile-location@4.1.0: + dependencies: + '@types/unist': 2.0.11 + vfile: 5.3.7 + + vfile-location@5.0.3: + dependencies: + '@types/unist': 3.0.3 + vfile: 6.0.3 + + vfile-message@3.1.4: + dependencies: + '@types/unist': 2.0.11 + unist-util-stringify-position: 3.0.3 + + vfile-message@4.0.2: + dependencies: + '@types/unist': 3.0.3 + unist-util-stringify-position: 4.0.0 + + vfile@5.3.7: + dependencies: + '@types/unist': 2.0.11 + is-buffer: 2.0.5 + unist-util-stringify-position: 3.0.3 + vfile-message: 3.1.4 + + vfile@6.0.3: + dependencies: + '@types/unist': 3.0.3 + vfile-message: 4.0.2 + + web-namespaces@2.0.1: {} + + web-streams-polyfill@3.3.3: {} + + which-boxed-primitive@1.1.1: dependencies: - is-bigint: 1.0.4 - is-boolean-object: 1.1.2 - is-number-object: 1.0.7 - is-string: 1.0.7 - is-symbol: 1.0.4 + is-bigint: 1.1.0 + is-boolean-object: 1.2.2 + is-number-object: 1.1.1 + is-string: 1.1.1 + is-symbol: 1.1.1 - which-builtin-type@1.1.3: + which-builtin-type@1.2.1: dependencies: - function.prototype.name: 1.1.6 + call-bound: 1.0.3 + function.prototype.name: 1.1.8 has-tostringtag: 1.0.2 - is-async-function: 2.0.0 - is-date-object: 1.0.5 - is-finalizationregistry: 1.0.2 - is-generator-function: 1.0.10 - is-regex: 1.1.4 - is-weakref: 1.0.2 + is-async-function: 2.1.1 + is-date-object: 1.1.0 + is-finalizationregistry: 1.1.1 + is-generator-function: 1.1.0 + is-regex: 1.2.1 + is-weakref: 1.1.1 isarray: 2.0.5 - which-boxed-primitive: 1.0.2 + which-boxed-primitive: 1.1.1 which-collection: 1.0.2 - which-typed-array: 1.1.15 + which-typed-array: 1.1.18 which-collection@1.0.2: dependencies: is-map: 2.0.3 is-set: 2.0.3 is-weakmap: 2.0.2 - is-weakset: 2.0.3 + is-weakset: 2.0.4 - which-typed-array@1.1.15: + which-typed-array@1.1.18: dependencies: available-typed-arrays: 1.0.7 - call-bind: 1.0.7 - for-each: 0.3.3 - gopd: 1.0.1 + call-bind: 1.0.8 + call-bound: 1.0.3 + for-each: 0.3.4 + gopd: 1.2.0 has-tostringtag: 1.0.2 which@2.0.2: @@ -5093,16 +8987,18 @@ snapshots: wrappy@1.0.2: {} + xml@1.0.1: {} + y18n@5.0.8: {} - yaml@2.4.5: {} + yaml@2.7.0: {} yargs-parser@21.1.1: {} yargs@17.7.2: dependencies: cliui: 8.0.1 - escalade: 3.1.2 + escalade: 3.2.0 get-caller-file: 2.0.5 require-directory: 2.1.1 string-width: 4.2.3 @@ -5112,3 +9008,7 @@ snapshots: yocto-queue@0.1.0: {} yocto-queue@1.1.1: {} + + zod@3.24.1: {} + + zwitch@2.0.4: {} diff --git a/posts/65-things-need-konw.mdx b/posts/65-things-need-konw.mdx new file mode 100644 index 0000000..1bd36e2 --- /dev/null +++ b/posts/65-things-need-konw.mdx @@ -0,0 +1,285 @@ +--- +title: 当我开始编程时我希望知道的 65 件事 +description: 65 条建议可能会为你即将到来的漫长旅程有所帮助。它们将作为编程学习道路上的锦囊,帮我们度过难关 +tags: [建议, 编程思维] +slug: 65-things-need-konw-started-programming +author: luckySnail +# cover: +date: 2023-12-10 +--- + +> 原文链接:https://dev.to/madza/65-things-i-wish-i-knew-when-i-started-to-code-20ka + +今天读到一个资深开发者三年前的博客文章,收益很多,希望被更多人看到,我做了翻译分享给大家,原文链接:https://www.madza.dev/blog/65-things-i-wish-i-knew-when-i-started-to-code ,下面是正文内容: + +> 每个人成功的故事都不同,我们都在学习过程中经历过起起落落,也会对刚开始时没有掌握的东西感到遗憾。如果你是一位想成为开发者的新手,以下 65 条建议可能会为你即将到来的漫长旅程有所帮助。它们将作为学习道路上的锦囊,帮我们度过难关 + +### 1\. 编程是解决问题的艺术。 + +程序员的工作远不止坐在电脑前随意敲击键盘。它是解决现实世界问题并简化人们生活的强大工具。如果你能做到,你将始终受到追捧。 + +### 2\. 规划是成功的关键。 + +每一个成功的项目都始于大量的规划。 + +- 确保你确定目标、 + +- 定义任务、 + +- 了解你的受众等。 + +- 使用笔和纸或任何在线线框图工具,努力构思出你解决方案的清晰图景。 + +### 3\. 内容为王 + +没有内容,你的网站就毫无意义。如果你处理静态内容,请确保它呈现得很好。如果内容是动态的,总是尝试预测你将创建或接收的内容类型,并据此设计你的布局、代码和数据库结构。 + +### 4\. 编码应该是项目最后一个阶段 + +初学者可能认为每个项目都是从编码开始的。实际上,编码只是之前所有规划的技术实现,并应是解决问题的最后一步。 + +### 5\. 一切都触手可及 + +现在已经不再是 50 年代或 60 年代了,那时你必须去图书馆学习一些主题。您需要的所有信息都触手可及。运用你的大脑和互联网。 + +### 6\. 编码不需要顶尖硬件。 + +尖端处理器、大量内存和 5 个显示器都是可选的。一台中等配置的笔记本电脑足以开始。 + +### 7.你不需要擅长数学。 + +根据我们看过的电影,编码常常与一些智商超过 200 的天才联系在一起。它可能会涉及人工智能、机器人、密码学等主题的数学知识,但为了开始,您只需要了解基本操作。 + +### 8\. 找到正确的工作流程并不容易。 + +我们每个人都有不同的偏好。尝试不同的扩展和设置。需要花费大量时间来了解什么对您有用以及如何将所有内容结合在一起。但这对于你以后的工作效率将会非常有益。 + +### 9.最佳时机是现在。 + +将事情保存在书签中只是一种优雅的拖延。要提高生产力,最好的办法是立即行动。 + +### 10.同步使你更灵活。 + +在你使用的每台机器上同步所有浏览器和 IDE/代码编辑器的扩展和设置。这将确保你无论在哪里都能在相同的环境中工作。 + +### 11\. 有多种实现方法。 + +当我开始编码时,我以为代码逻辑非常严格,必须遵循特定模式。实际上,唯一严格的变量是所使用语言的语法。 + +### 12\. 命名是一项艰巨的任务 + +这在一开始看起来可能很简单,但你会发现,尤其是在大型项目中,这可能非常具有挑战性。 + +### 13、将错误视为教训。 + +如果你看任何一个成功故事,你会发现它实际上是一个不断尝试和错误的模式,**「坚持和好奇心」**是成功的关键。 + +### 14\. 重建比从头开始编写容易 10 倍。 + +重建现有应用时,你对项目的布局和构建原则有了清晰的了解。而这些往往是最具挑战性的部分。 + +### 15\. 找到自己的定位很重要。 + +在各个小众领域之间徘徊将让你一事无成。在投身某个领域之前,先明确你的兴趣并研究可选的领域。 + +### 16\. 对事情为何有效感到好奇。 + +总是尝试去探究事物的内部原理。不要满足于仅看到事物表面上神奇地运行。 + +### 17\. 工具是提高生产力的关键。 + +一个人的能力往往取决于他/她使用的工具。投入时间来构建一套合适的工具组合,因为这会带来巨大的回报! + +### 18.热衷于项目能激励你不断前行。 + +选择副业项目时,务必挑选自己真心感兴趣的。因为你对结果的在乎,会大幅提升你的动力。 + +### 19\. 这是一场马拉松,而不是短跑。 + +开发领域持续在变革,因此要做好长期学习的准备。若一开始进展过快,你可能很快就会感到疲惫。 + +### 20.你所关注的人影响你获取的信息。 + +注意自己在社交媒体上所关注的人。他们决定了你获取信息的质量和内容。 + +### 21.避免重复造轮子。 + +在开始项目之前,先研究其他开发者是如何解决相似问题的。大多数问题都已有解决方案,关键在于你搜寻的能力。 + +### 22.容易被带偏。 + +在社区活跃是好事,但要注意这可能让你发现更高效的技术和更现代的 UI 等,但这并不总意味着你当前使用的技术栈不佳或需更换。 + +### 23\. 教程可能会误导你。 + +大多数教程基于预先编写和重构的代码。如果你将自己与之比较,可能会感到沮丧,因为你无法迅速找到解决方案或一开始就写出整洁的代码。记住,这只是事物的一面,创作者们也曾经历过挣扎。 + +### 24\. 教程不会让你变得独立。 + +观看或阅读教程能帮助你大致了解技术,但这并不能使你独立。你应该阅读官方文档,发展你的分析思维,并尝试自己找到解决方案。 + +### 25\. 没有完美的技术。 + +每种技术都各有优势和不足。当你感到犹豫时,将不同的选择放在一起,进行研究,并比较它们如何解决特定问题。 + +### 26.学习新事物的能力很关键。 + +在申请工作时,你可能对公司的技术栈不熟悉。重要的是你能多快学会遇到的特定技术,而不是你了解多少技术。 + +### 27\. 版本控制非常重要。 + +客户经常需要之前的设计并对功能选择犹豫不决。版本控制是必需的,它不仅保证了你的代码总是有备份,也为你节省了时间。 + +### 28\. Bug 可能非常棘手。 + +准备好应对可能需要数小时甚至数天才能解决的难缠 Bug。在这些时期,你可能因低效率而感到沮丧,但一旦解决了,你会感到很有成就感。 + +### 29.学会判断什么不需要学。 + +在当今技术的海洋中,很容易迷失方向。讽刺的是,如今最重要的技能之一是学会判断什么不需要学。 + +### 30\. 阅读别人的代码同样能提升你。 + +通过编写代码,你在思考自己所掌握的知识。阅读其他开发者的代码同样重要,它能帮你学习不同的设计模式和最佳实践。 + +### 31\. 谦逊使你受人尊敬。 + +对自己的成就心怀喜悦,但对外则保持低调。夸耀自己并不会带你走得更远。 + +### 32\. 过度追求完美会拖慢你的脚步。 + +追求高质量的工作是好事,但不要过分追求完美,否则你可能会留下许多未完成的项目。 + +### 33\. 开源是一件了不起的事。 + +从个人到大型公司,开源在社区中蓬勃发展。这是一件美好的事情,我相信我们可以共同创造更好的项目。确保你学习其他人使用的最佳实践和设计模式 + +### 34\. 学历并不是硬性要求 + +客户通常关注的不是你的文凭,而是你解决问题的实际能力。 + +### 35.当遇到困难时,尝试分解问题 + +面对复杂问题时,找到解决方案可能会感到困难。把问题分解成小块,一步一步解决每个部分。 + +### 36\. 大企业需要你开发 CRUD 应用 + +大多数大企业的核心业务是 CRUD(增删查改)操作。如果你计划申请这些公司,就需要学习并准备好日常处理这些操作。 + +### 37\. 项目永远不会完全结束。 + +每个项目都有改进和优化的空间。更重要的是考虑项目是否满足要求,并足够完善,可以发布。 + +### 38\. 优秀的代码应该易于阅读和维护。 + +无论是不是独自工作,总是要努力写出像是别人也会参与的代码。在更复杂的部分留下注释,解释其工作原理。 + +### 39\. 第一门编程语言总是最难学的。 + +我经常看到人们询问哪种编程语言最难学。实际上,学习难度取决于你的经验。 + +### 40\. 使用谷歌和 Stack Overflow 是正常的。 + +这些资源是为了帮助你的。不要因为在别人面前使用谷歌或浏览 SO 感到尴尬。要知道,他们也会这样做。 + +### 41\. 沟通技能被低估了。 + +仅仅依靠代码并不能保证你的成功。培养与人交流的能力同样重要。 + +### 42\. 提升你的谈判(薪)技能。 + +如果你不懂得如何进行谈判(薪),再多的前沿技术知识也没有用。记住,是他们需要你,而不是你需要他们。 + +### 43\. 在线影响力很重要。 + +如果没有人知道你的项目,即使做了许多本地项目也毫无意义。建立一个良好的在线影响力来推广你的项目。 + +### 44\. 始终记住 28 法则。 + +要记住,项目的最后 20% 部分往往需要花费 80% 的时间。因此,在向客户报告进展时要多加思考。 + +### 45\. 无故不要过度设计。 + +一个好的实践是尽可能减少而不是增加功能,直到没有多余的功能可以被移除。 + +### 46\. 框架是短暂的。 + +学习框架所基于的技术远比学习框架本身更有价值,这样你在必要时可以轻松掌握特定框架。 + +### 47\. 精通一项技能比浅尝辄止好。 + +与其试图学习并掌握所有技能,不如专注于你感兴趣的领域,深入研究相关技术栈,选择一个并彻底掌握它。试图成为万事通最终会一事无成。 + +### 48\. 测试存在是有原因的。 + +培养编写测试的好习惯。虽然最初你可能觉得这是无用功,但长期来看,它们会在大型代码库中帮你节省大量时间。 + +### 49\. 成就是提升动力的最佳方式。 + +珍惜学习过程中的每一个“顿悟”时刻,解决难题,看到他人的惊讶和自己的价值。将这些视为激发你动力的燃料。 + +### 50\. 不要超出自己的能力范围。 + +在选择问题的规模时,找到一个平衡点,挑战足够大以让你学到新东西,但也足够小以确保可解决。 + +### 51\. 不要与他人比较。 + +与其他开发者的成就比较自己,很容易让人沮丧。按照自己的节奏学习是完全正常的。 + +### 52\. 不要过于个人化地看待批评。 + +建设性的批评是宝贵的反馈,指出你可能没有意识到的错误或改进点。这最终会提高产品的质量。 + +### 53\. 每个人都曾写过糟糕的代码。 + +不用担心回头看你几年前写的代码。那可能让你感到不可思议甚至羞愧,但要记住,这实际上是你进步的明显标志 + +### 54\. 一个完成的项目胜过十个未完成的。 + +尽量一次只处理一个或几个项目,并遵循想法到执行的模式。记住,**「已部署的项目才真正有价值」**。 + +### 55\. 教授他人是最好的学习方式。 + +为了教授他人,你必须先自己深入研究概念。这确保你对概念有深入的了解,并且在分享知识时实现双赢。 + +### 56\. 申请工作时,你永远不会感觉准备好。 + +学习编程是一个不断的过程,而不是一个目的地,所以你总会感觉自己还在努力实现某些事情。不要让这种感觉阻止你,勇敢去申请。 + +### 57\. 炒作是真实存在的。 + +要关注趋势,但只到理解它们的主要工作原理和用途的程度。这样你就会知道它最适合解决哪些问题,并在需要时选择合适的工具。 + +### 58\. 实践是通往精通的道路。 + +重复是所有知识的母亲,坚持练习是掌握某事的最安全途径之一。 + +### 59\. 专注于索引而不是内容。 + +如今,快速找到信息很重要。如果你知道需要什么以及在哪里查找,学习只是时间问题。 + +### 60\. 像海绵一样吸收知识。 + +养成每天学习的习惯,以保持竞争力和知识。注意你关注的人。追求质量而不是数量。 + +### 61.学会说不。 + +如果你永远不说不,别人迟早会开始利用你,你最终会做更多本不应该做的工作。 + +### 62\. 记笔记是克服写作障碍的救星。 + +无论你在哪里,都要尽力记录下你的想法。为那些灵感不足的时候创建一个信息后备库。 + +### 63\. 安排一周并确定优先事项。 + +尝试提前花时间进行计划。这样更容易识别所有要处理的任务,并确定执行顺序的优先级。 + +### 64\. 休息能创造奇迹。 + +如果你陷入困境,尝试暂时不做任何与编码相关的事情。花时间与家人在一起,进行你的爱好,或者去慢跑。很多时候,当你重新审视项目时,就能轻松找到解决方案。 + +### 65.运动和充足的睡眠可以提高生产力。 + +在提高生产力方面,通常8小时的睡眠和4小时的工作 + +总结:这里很多点,我的感受都是很深,例如:好好休息,提前做规划,找到自己的工作 SOP,等等;也有我暂时无法理解的点,例如:测试的重要性,我觉得是我现在的能力还不够,希望接下来的日子里,我将这些方法论践行到我的日常工作中,感谢您的阅读 diff --git a/posts/about.mdx b/posts/about.mdx new file mode 100644 index 0000000..3ad5879 --- /dev/null +++ b/posts/about.mdx @@ -0,0 +1,103 @@ +--- +title: 关于 幸运的蜗牛 +description: 我是幸运的蜗牛,一名充满热情的前端开发工程师。我热衷于探索和体验最新技术,特别是人工智能(AI),并在日常工作中去使用它们,来提升我的工作效率。我的目标是积极参与开源社区,为开源项目贡献自己的力量。正如我的名字,我相信越努力,越幸运 +tags: [luckySnail, 前端工程师] +slug: about +author: luckySnail +cover: https://blog-1304565468.cos.ap-shanghai.myqcloud.com/work/image-20240721171518634.png +date: 1900-01-01 +--- + +# 简介 + +我是 _幸运的蜗牛_,一名准全栈开发工程师,但是 AI 的到来,我逐渐变成了提问工程师,和 AI 答案校验者。目前在上海,就职于 鱼鸢网络。很巧,写这段文字的时候,我工作了近**_两年半_**。我的目标是成为一个全干工程师,通过技术和认知做出一些个人的产品,并被很多人使用。 + +## 我会在这些地方活跃 + +1. 我的 Github,目前个人开发的代码基本上都会在 GitHub +2. 会把工作和学习中需要记录的知识第一时间记录在 语雀 +3. 每日必逛 哔哩哔哩 + +## 目前掌握技术 + +- HTML +- CSS +- JavaScript +- Vue(熟悉) +- React (主要技术栈) +- Next.js +- Node.js (熟悉,借助 AI 能够完成基本开发) +- Vite、webpack、rollup 等打包工具都有使用 +- Nginx (基本使用) +- 小程序(Taro、原生) +- Docker +- Nest.js (一点点,还在看神光的小册中) +- 测试(在学习中。。) +- 非常熟练 [ant design pro](https://pro.ant.design/zh-CN/) 开发 + +## 我的设备 + +- Apple MacBook Pro 2 Max(主力机,公司的,感谢老板) +- Apple MacBook Pro 1 (平时在家用的) +- IQOO 12 PRO 16 GB + 1TB (主力手机,很满意) +- Apple 13 (之前的手机,目前作为备用机,和测试机器) +- SONY WH-1000XM3 头戴式耳机 +- AirPods Pro 1 代 (好用,用过苹果耳机应该不会再换其他的了吧!) +- 联想 Y27h-30 电竞屏 (感觉屏幕都差不多,27寸应该是大多数人的选择) +- 台式电脑(但是现在没有使用了,管不住自己,总是玩游戏去了,我要多学习,多写代码) + +## 我的爱好 + +- 音乐 (基本上都听,希望多去现场听) + - 嘻哈 + - 摇滚(最近迷上,循环 **麻园诗人**) + - 民谣 + - 流行 +- 游戏 + - 英雄联盟,现在也基本不玩了,太费时间了 + - 王者荣耀,现在已经不玩了 + - 金铲铲之战 + - 没有更多了,不是不喜欢,是没时间玩,梦想财务自由,每天在家打游戏 +- 探索新技术,AI 等 +- 写文章,把所见所闻所想都记录下来,然后分享给别人 +- 做饭,如果天气合适,我会自己给自己做饭,做饭和写代码很像,不断的练习,就能做出美味的饭菜,写出好的代码 +- 读书,微信读书很好用,读书能让内心平静 +- 旅行,和朋友一起旅行, +- ~~看美女~~ + +## 很想做 + +- 看演唱会 +- 自媒体 +- 养一只狗 +- 摄影 📹,记录美好 + +## 联系我 + +- 微信:RELEASE500 +- 邮箱:snailrun160@gamil.com + +## 我能提供什么? + +- 上海租房,干饭小能手! +- 超多实战项目经验,擅长 React,Vue,Node.js 解决问题 +- AI 探索者,丰富的 AI 工具使用经验 +- 费曼学习法践行者,能静下心来学习知识 +- 丰富团队协作经验,能同事和后端,产品,UI 打成一片! + +## 其他 + + + 我的简历 + + + + 我的代码片段 + + +关注我,我会分享我在前端路上的所有,如果你学习有什么问题,欢迎和我讨论 + +![bg](https://blog-1304565468.cos.ap-shanghai.myqcloud.com/work/about-me-bg.webp) diff --git a/posts/code-manager.mdx b/posts/code-manager.mdx new file mode 100644 index 0000000..e0192ef --- /dev/null +++ b/posts/code-manager.mdx @@ -0,0 +1,372 @@ +--- +title: multi-repo 和 mono-repo 代码管理方式了解(附实践源码) +description: 这篇文章深入探讨了代码仓库管理的两种主要方式:multi-repo和 mono-repo。文章详细介绍了它们的概念、优缺点和适用场景。重点讲解了 mono-repo 的实践,包括使用 pnpm 和 Turborepo 两种工具来搭建 mono-repo 项目。文章通过实际操作步骤,演示了如何设置工作空间、管理依赖、配置构建任务等。对于想要了解和实践 mono-repo 的开发者来说,这是一篇全面且实用的指南,提供了从基础到进阶的 mono-repo 知识和技巧。 +tags: [multi-repo, mono-repo, 代码仓库管理] +slug: code-manager-way +author: luckySnail +# cover: +date: 2024-07-03 +--- + +## 了解代码仓库管理方式 + +### multi-repo + +全称:Multiple Repositories 多仓库 +Multi-repo是指每个项目或组件都有自己独立的版本控制仓库。这种方法的特点包括: + +- 每个项目有独立的代码库和版本控制历史 +- 项目之间保持分离,可以使用不同的框架、语言或技术 +- 更高的代码安全性,因为每个仓库都是独立的 +- 适合大型项目或有多个独立团队的组织 + +我们业务项目基本上都是 multi-repo,但是multi-repo 项目如果要开发多个库,然后这些库互相有依赖关系,那么协同就很麻烦,就比如 React 项目,我们知道 React 项目下面有 React 核心库、React DOM、React Native ,这些模块之间有许多共享的代码和依赖。使用 mono-repo 可以让这些模块共享同一份代码库,从而避免代码重复,提高代码复用性。好了,我们来了解一下 mono-repo 吧! + +### mono-repo + +全称:Monolithic Repository 单一仓库 +Mono-repo是指在单个版本控制仓库中包含多个项目或组件。其特点包括: + +- 所有项目共享同一个代码库和版本控制历史 +- 促进代码共享和集中管理 +- 简化依赖管理 +- 适合中小型项目或需要紧密集成的相关项目 + +上面也说了,类似 React 这样的项目,使用 mono-repo 就再适合不过了,但是 mono-repo 的缺点也是有的, + +- 性能:随着仓库内容的增大,在单个存储库中跨不同函数和上下文组合代码可能会减慢代码拉取操作的速度。这对新加入的开发人员或 CI/CD(全称是“Continuous Integration/Continuous Deployment”,意思是“持续集成/持续部署”。) 系统可能造成影响。 +- 权限控制困难:对于大型组织,可能难以在单一仓库中实现细粒度的访问控制,可能导致安全风险 +- 技术栈限制: mono-repo 可能鼓励使用统一的技术栈,这可能限制了在特定项目中使用最适合的技术 + +所以,选择使用 mono-repo 作为仓库管理方式需要考虑清楚。我们接下来就实践一下吧! + +## mono-repo 实践 + +可以按照简单和复杂的维度来进行技术选择 +简单的工具: + +- npm workspace:[https://docs.npmjs.com/cli/v7/using-npm/workspaces](https://docs.npmjs.com/cli/v7/using-npm/workspaces) +- yarn workspace:[https://classic.yarnpkg.com/lang/en/docs/workspaces/](https://classic.yarnpkg.com/lang/en/docs/workspaces/) +- pnpm workspace:[https://pnpm.io/workspaces](https://pnpm.io/workspaces)(推荐阅读:[https://juejin.cn/post/7127295203177676837](https://juejin.cn/post/7127295203177676837)) + +专业的工具: + +- lerna:[https://www.lernajs.cn/](https://www.lernajs.cn/),最初由Sebastian McKenzie创建,他也是Babel的作者。目前Lerna由开源社区维护,主要贡献者来自各大科技公司 +- Nx:[https://nx.dev/](https://nx.dev/),Nx Nx由Nrwl公司开发和维护。Nrwl是一家专注于提供企业级开发工具和服务的公司,由前Google员工Victor Savkin和Jeff Cross创立 +- Turborepo:[https://turborepo.org/](https://turborepo.org/),最初由Jared Palmer个人开发。2021年,Vercel公司收购了Turborepo,现在由Vercel团队继续开发和维护。Vercel是一家专注于前端开发和部署的公司,以Next.js框架而闻名 +- Bazel:[https://bazel.build/about/intro?hl=zh-cn](https://bazel.build/about/intro?hl=zh-cn),由Google开发和维护。它源于Google内部使用的构建工具Blaze,后来被开源并改名为Bazel。Google的大规模mono-repo实践为Bazel的设计提供了丰富的经验 +- Rush:[https://rushjs.io/](https://rushjs.io/),Microsoft开发的可扩展mono-repo管理器 + +### 简单工具:pnpm 使用 + +对于个人的小项目来说,我们使用 pnpm 就可以了,我们来快速上手一下 +1)创建文件夹 + +```bash +mkdir mono-repo-pnpm +cd ./mono-repo-pnpm +``` + +2)pnpm 初始化 + +```bash +pnpm init +``` + +3. 初始化pnpm-workspace.yaml + 配置全局代码规范 + 参考:[https://pnpm.io/zh/pnpm-workspace_yaml](https://pnpm.io/zh/pnpm-workspace_yaml),新建 pnpm-workspace.yaml + +```javascript +packages: -'packages/*'; +``` + +指定了 /package 下的所有文件,就是我们 mono-repo 的所有子项目。我们 mono-repo 的初始配置就完成了 + +现在,我们安装一下 全局的代码格式化依赖。这样每个子包都使用统一的代码格式化规范,对了,我们的编辑器需要先有 ESLint 和 Prettier 插件,并在设置中配置一下, +![image.png](https://blog-1304565468.cos.ap-shanghai.myqcloud.com/work/1719751228447-c40b7f35-5863-48fa-a241-1ef951fdd8f7.png) +然后,我们安装: + +```bash +pnpm i eslint -D -w +``` + +-w 是 --workspace-root 的别名,即安装到工程根目录,作为所有子模块的公共依赖。也可以用 -r 递归给每个子模块安装,或者用 --filter `` 给指定子模块安装。然后初始化,我们终端执行:`npx eslint --init`(我们需要选择一些配置,选择好后会生成一个 eslint.config.mjs 文件给我们),然而,可能你会遇到这样的提示: + +```bash + WARN  Issues with peer dependencies found +. +├─┬ @typescript-eslint/parser 7.14.1 +│ └── ✕ unmet peer eslint@^8.56.0: found 9.6.0 +└─┬ typescript-eslint 7.14.1 + ├── ✕ unmet peer eslint@^8.56.0: found 9.6.0 + └─┬ @typescript-eslint/eslint-plugin 7.14.1 + ├── ✕ unmet peer eslint@^8.56.0: found 9.6.0 + ├─┬ @typescript-eslint/utils 7.14.1 + │ └── ✕ unmet peer eslint@^8.56.0: found 9.6.0 + └─┬ @typescript-eslint/type-utils 7.14.1 + └── ✕ unmet peer eslint@^8.56.0: found 9.6.0 +``` + +我们可以执行:`pnpm install eslint@^8.56.0 -D`,这是提示 eslint 版本与某些依赖项的预期版本不匹配,我们安装匹配的就好 +我们继续安装 ts 的 eslint 插件 和 prettier 的依赖 + +```bash +pnpm i -D -w @typescript-eslint/eslint-plugin prettier eslint-config-prettier eslint-plugin-prettier +``` + +然后,我们来创建对应的配置文件,先创建 `.prettierrc.json` + +```json +{ + "printWidth": 80, + "tabWidth": 2, + "useTabs": true, + "singleQuote": true, + "semi": true, + "trailingComma": "none", + "bracketSpacing": true +} +``` + +再创建 `tsconfig.json` + +```json +{ + "include": ["./packages/**/*"], + "compileOnSave": true, + "compilerOptions": { + "target": "ESNext", + "useDefineForClassFields": true, + "module": "ESNext", + "lib": ["ESNext", "DOM"], + "moduleResolution": "Node", + "strict": true, + "sourceMap": true, + "resolveJsonModule": true, + "isolatedModules": true, + "esModuleInterop": true, + "noEmit": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "noImplicitReturns": false, + "skipLibCheck": true, + "baseUrl": "./packages" + } +} +``` + +再修改 `eslint.config.mjs` + +```javascript +import pluginJs from '@eslint/js'; +import globals from 'globals'; +import tseslint from 'typescript-eslint'; + +export default [ + { files: ['**/*.{js,mjs,cjs,ts}'] }, + { languageOptions: { globals: globals.browser } }, + pluginJs.configs.recommended, + ...tseslint.configs.recommended, + { + env: { + browser: true, + es2021: true, + node: true + }, + extends: [ + 'eslint:recommended', + 'plugin:@typescript-eslint/recommended', + 'prettier', + 'plugin:prettier/recommended' + ], + parser: '@typescript-eslint/parser', + parserOptions: { + ecmaVersion: 'latest', + sourceType: 'module' + }, + plugins: ['@typescript-eslint', 'prettier'], + rules: { + 'prettier/prettier': 'error', + 'no-case-declarations': 'off', + 'no-constant-condition': 'off', + '@typescript-eslint/ban-ts-comment': 'off' + } + } +]; +``` + +现在,我们的项目就完成了代码自动进行报错提示,和保存格式化,我们可以在 packeage.json 中添加脚本 + +```json + "lint": "eslint --ext .ts,.js,.jsx,.tsx --fix --quiet ./packages" +``` + +4)创建子项目 +我们创建两个子项目并初始化 + +```bash +mkdir -p packages/common packages/app +``` + +初始化,每个子项目 + +```bash +cd packages/common +pnpm init +cd ../app +pnpm init +cd ../.. +``` + +修改子项目 package.json 文件,这代表了下载子包的安装命名,也代表这些包都归属于 mono-repo-pnpm 包 + +```json +// packages/app +{ + "name": "@mono-repo-pnpm/app", + ... +} +// packages/common +{ + "name": "@mono-repo-pnpm/common", + ... +} +``` + +5)在common包中添加一些共享代码 +在 packages/common/index.js 中添加: + +```javascript +console.log('执行了了common.js'); +exports.sayHello = (name) => `Hello, ${name}!`; +``` + +6)在app包中使用common包 +首先,在 app 包的 package.json 中添加对 common 包的依赖: + +```json +{ + "dependencies": { + "@mono-repo-pnpm/common": "workspace:*" + } +} +``` + +然后在 packages/app/index.js 中使用 common 包: + +```javascript +const { sayHello } = require('@mono-repo-pnpm/common'); +console.log(sayHello('Monorepo')); +``` + +我们刚好可以测试一下在全局配置的代码规范也是生效的, 保存的时候如果写的不符合规范,我们就会看到提示,保存也会自动格式化 +7)终端执行:`node ./packages/app`,我们可以看到: +![image.png](https://blog-1304565468.cos.ap-shanghai.myqcloud.com/work/1719756062777-d1066c93-59f9-441a-89ce-0a4292d678eb.png) +这就是通过 mono-repo 的本地依赖能力,如果不使用 mono-repo,我们可能需要通过 npm link 来解决,非常麻烦 +8)我们在根目录安装一个依赖 lodash,然后在子目录可通过 `"lodash": "*",` 来使用 根目录的 lodash。实现根目标管理所有的包9)我们可以在每个 `package.json` 中,添加一个脚本,例如:`"dev": "node index.js"`。然后根目录执行 `pnpm -r dev`。这样我们就可以在一行代码执行所有的子项目的 dev 脚本。 +通过这个基础的 mono-repo 的项目,我们使用了 mono-repo 的如下能力 + +1. 工作空间管理: 通过pnpm-workspace.yaml轻松管理多个包。 +2. 依赖共享: 子项目可以共享依赖,节省磁盘空间。 +3. 本地依赖: 可以使用workspace:\*语法引用本地包。 +4. 统一版本控制: 可以在根目录管理所有包的版本。 +5. 并行执行: 可以并行运行多个包的脚本。 + +### 专业工具:turborepo 使用 + +> 操作系统: macos,如果你是使用 windows ,可能有些地方不一样 + +我们全局安装 turbo,执行命令 `pnpm install turbo --global`,如果你也报错: +![image.png](https://blog-1304565468.cos.ap-shanghai.myqcloud.com/work/1717916747666-00652358-c37c-4816-b396-5c336ddf79ff.png) +不要着急,跟我我一步步修复这个报错,这是因为没有正确配置了你的环境变量和全局目录 +1)我们先按照提示执行:pnpm setup ,然后再次执行全局安装 turbo命令,如果这时候依然提示上面的报错,或者类似这样的报错 +![image.png](https://blog-1304565468.cos.ap-shanghai.myqcloud.com/work/1717917291588-5e432a15-352a-4f0e-9a7f-b4b94ec9ff91.png) 2)我们执行:`nano ~/.bashrc` 或者 `nano ~/.zshrc`,添加以下内容: + +```bash +export PNPM_HOME="$HOME/.pnpm" +export PATH="$PNPM_HOME:$PATH" +``` + +我们先保存(** ctrl + o 组合键**),系统会询问你是否要保存所做的更改,我们**按下回车键**,然后我们关闭( **ctrl + x 组合键**)文件,然后重新加载配置文件: + +```bash +source ~/.bashrc # 或者 source ~/.zshrc +``` + +我们来验证一下是否配置成功: + +```bash +# 确认环境变量已正确设置 +echo $PNPM_HOME +echo $PATH +# 确保 PNPM_HOME 目录存在,并且包含 pnpm 安装的全局包: +ls $PNPM_HOME +``` + +如果这俩都没有报错,那么就说明配置成功,我们重新执行全局安装 turbo 命令,这里应该能够安装成功 +![image.png](https://blog-1304565468.cos.ap-shanghai.myqcloud.com/work/1717917677812-1bca684a-23ce-489d-bd5a-070dc38b659b.png) +3)全局安装成功 turbo 后,我们执行 `npx create-turbo@latest`, +![image.png](https://blog-1304565468.cos.ap-shanghai.myqcloud.com/work/1719761825547-28374898-dc71-4e1c-8adc-c866c177229a.png) 4)项目目录了解。turpo-repo 来解决复杂 mono-repo 项目,打包性能问题 + +```bash +my-turborepo/ +├── apps/ +│ ├── docs/ +│ └── web/ +├── packages/ +│ ├── eslint-config-custom/ +│ ├── tsconfig/ +│ └── ui/ +├── turbo.json +└── package.json +``` + +5)turbo.json 了解,turbo.json 是 Turbo 的核心配置文件。它定义了任务之间的依赖关系, + +```json +{ + "$schema": "https://turbo.build/schema.json", + "tasks": { + "build": { + "dependsOn": ["^build"], + "inputs": ["$TURBO_DEFAULT$", ".env*"], + "outputs": [".next/**", "!.next/cache/**"] + }, + "lint": { + "dependsOn": ["^lint"] + }, + "dev": { + "cache": false, + "persistent": true + } + } +} +``` + +1. "$schema": 指定了 JSON schema 的位置,用于验证配置文件的正确性。 +2. "tasks": 定义了项目中的各种任务。 +3. "build" 任务: + - "dependsOn": ["^build"]: 表示此任务依赖于所有工作空间中的 build 任务。^ 符号表示只考虑当前包的依赖项。 + - "inputs": ["$TURBO_DEFAULT$", ".env*"]: 指定任务的输入文件。$TURBO_DEFAULT$ 是 Turbo 的默认输入集,.env\* 表示所有 .env 文件。 + - "outputs": [".next/**", "!.next/cache/**"]: 指定任务的输出。这里包含了 .next 目录下的所有文件,但排除了 .next/cache 目录。 +4. "lint" 任务: + - "dependsOn": ["^lint"]: 表示此任务依赖于所有依赖项的 lint 任务。 +5. "dev" 任务: + - "cache": false: 禁用此任务的缓存。 + - "persistent": true: 表示这是一个长期运行的任务,如开发服务器。 + +6)在根目录下,您可以运行:`turbo run build`,这将会根据 turbo.json 的配置,并行构建所有的应用和包。我们可以构建两次,会发现第二次构建时间比第一次短,这就是 Turbo的增量构建和缓存机制大大提高了构建速度。 +最后,我们看一下Turbo的主要能力: + +1. 增量构建: Turbo只重新构建发生变化的部分 +2. 远程缓存: 可以在团队成员之间共享构建缓存 +3. 并行执行: Turbo可以并行运行任务,提高效率 +4. 任务编排: 通过turbo.json定义任务之间的依赖关系 +5. 单一配置: 使用一个turbo.json文件管理整个monorepo + +## 参考: + +1. vivo 技术:[基于 Lerna 管理 packages 的 Monorepo 项目最佳实践](https://segmentfault.com/a/1190000020047120) +2. turbo,新兴的 monorepo 管理方案:[https://segmentfault.com/a/1190000042282389](https://segmentfault.com/a/1190000042282389) +3. 我的 pnpm 实现 mono-repo 代码:[https://github.com/chaseFunny/pnpm-monorepo](https://github.com/chaseFunny/pnpm-monorepo) +4. 我的 turbo 示例代码:[https://github.com/chaseFunny/turbo-monorepo](https://github.com/chaseFunny/turbo-monorepo) diff --git a/posts/docker-learn-1.mdx b/posts/docker-learn-1.mdx new file mode 100644 index 0000000..89a0388 --- /dev/null +++ b/posts/docker-learn-1.mdx @@ -0,0 +1,217 @@ +--- +title: 前端程序员学习 Docker 的笔记 (-) +description: 从前端开发者的角度介绍 Docker 的基础知识和实践应用。文章解释 Docker 的概念、优势及主要组件,并通过部署 Next.js 项目的实例,详细演示 Docker 的安装、配置、镜像构建、容器运行以及发布到 Docker Hub 的全过程。作者还提供了常用 Docker 命令的说明,为前端开发者快速上手 Docker 提供了实用指南。文章内容全面且易懂,适合想要学习 Docker 的前端开发人员阅读 +tags: [docker, 笔记] +slug: docker-learn-1 +author: luckySnail +# cover: +date: 2024-05-12 +--- + +大家好,我是阿星。最近公司使用 Docker 进行了项目部署,但是我还不会 Docker。于是就补了一下技术漏洞,顺便写一个笔记,记录学习,因为最好的学习就是输出嘛!因为本人是前端开发,所以接下来都是从前端视角分享 Docker 的 学习 + +## 什么是 Docker? + +官方解释:“Accelerate how you build, share, and run applications. Docker helps developers build, share, run, and verify applications anywhere — without tedious environment configuration or management.” +翻译过来就是:加快您**构建、共享和运行应用程序**的速度。Docker 帮助开发人员**在任何地方构建、共享、运行和验证应用程序,无需繁琐的环境配置或管理**。 + +## 为什么需要 Docker? + +知道了什么是 Docker,可能还是不知道 Docker 是干什么的。这里举个例子:开发者小张在本地开发了一个 web 应用,并且调试也没有任何问题,这时候小张把应用部署到远程服务器,让所有人都能看到。那小张就需要**在远程服务器创建一个和本地一样的环境**,例如:数据库,Web服务器。即使这些环境一样,软件也不一定能运行,因为服务器的操作系统和本地不一样。为了模拟完全相同的本地开发环境,可能会想着使用虚拟机,但是虚拟机需要模拟硬件运行整个操作系统,而且还有以下缺点: + +- 体积臃肿 +- 内存占用高 +- 程序的性能也会受到影响 + +于是就产生了 Docker,Docker与虚拟机非常类似,但却轻量很多,它不会去模拟底层的硬件,只会为每一个应用提供完全隔离的运行环境,我们可以在环境中配置不同的工具软件,并且不同环境之间相互不影响,这个环境就是 Docker 中的 container 容器。 + +## Docker 中四个重要概念 + +1. Docker file:就像是一个自动化脚本,它主要被用来创建镜像,可以理解为我们在虚拟机安装操作系统和软件,通过 Docker file 这个自动化脚本完成了安装过程,不需要再手动操作 +2. 镜像(Image):Docker 镜像是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)。镜像不包含任何动态数据,其内容在构建之后也不会被改变。可以把它理解成一个虚拟机的快照 +3. 容器(Container):通过镜像,我们可以创建许多不同的 container 容器,这里的容器可以理解为一台台运行起来的虚拟机,里面运行着应用程序,每个容器是独立运行的,它们相互之间不影响 +4. 仓库(Repository):在本地制作好镜像后,我们可以将镜像推送到远程仓库(Repository)。仓库分为公开仓库和私有仓库,最大的公开仓库是 Docker 的官方仓库 [Docker Hub](https://link.juejin.cn/?target=https%3A%2F%2Fhub.docker.com%2F)。这一点跟 Git 就很相似了,最大的 Git 公开仓库是 GitHub。 + +而镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和实例一样,**镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。** + +## 实践 + +下面演示都是基于 windows 11 环境 + +### 安装 Docker Desktop + +如果你使用的是Windows和Mac,可以在官网 [下载](https://www.docker.com/products/docker-desktop/) 一个叫做 Docker Desktop 的应用,并且在Windows 10以上,可以使用 WSL2:也就是 Windows 下的 Linux 子系统来运行 Docker,我们按照 [文档](https://docs.docker.com/desktop/install/windows-install/) 一步一步操作就好 + +> 注意:要运行 Windows 容器,您需要 Windows 10 或 Windows 11 专业版或企业版。 Windows 家庭版或教育版仅允许您运行 Linux 容器。 + +查看系统: +![image.png](https://blog-1304565468.cos.ap-shanghai.myqcloud.com/blog/1715266006417-3ebf9e6e-4495-4f63-9143-9aa5d2edfdf3.png) +windows 11专业版环境安装成功页面: +![image.png](https://blog-1304565468.cos.ap-shanghai.myqcloud.com/blog/1715265917277-dc44c005-1b19-4af5-ad3a-a69a1aae5381.png) +安装完成了,我们使用命令行检测一下是否真的安装好了: +![image.png](https://blog-1304565468.cos.ap-shanghai.myqcloud.com/blog/1715266676848-4012a9dc-5426-444d-a90e-23ff5daa0e22.png) +如果不可用,那要设置下这个: +![](https://blog-1304565468.cos.ap-shanghai.myqcloud.com/blog/1715266891678-8099a21e-b0d8-43c5-9ac8-a26298c238fe.webp) +国内从 Docker Hub 拉取镜像有时会拉取不到,可以配置镜像加速器。可用的加速器可以参考:[gist.github.com/y0ngb1n/7e8…](https://link.juejin.cn/?target=https%3A%2F%2Fgist.github.com%2Fy0ngb1n%2F7e8f16af3242c7815e7ca2f0833d3ea6)。我们可以: +![image.png](https://blog-1304565468.cos.ap-shanghai.myqcloud.com/blog/1715268881302-03335cab-264d-4986-ad98-7956fcd63241.png) +代码奉上: + +```javascript +{ + // ... + "max-concurrent-downloads": 2, + "max-download-attempts": 10, + "registry-mirrors": [ + "https://dockerproxy.com", + "https://docker.mirrors.ustc.edu.cn", + "https://docker.nju.edu.cn" + ] + // ... +} +``` + +### 简单熟悉 Docker Desktop + +如果打开后,这样,请参考:[https://blog.csdn.net/weixin_43576565/article/details/134044435](https://blog.csdn.net/weixin_43576565/article/details/134044435) 解决: +![image.png](https://blog-1304565468.cos.ap-shanghai.myqcloud.com/blog/1715269586757-54db611b-88b3-414a-8f07-4faf593fe59a.png) + +搜索 & 拉取镜像(需要🪜) +![image.png](https://blog-1304565468.cos.ap-shanghai.myqcloud.com/blog/1715269122739-fb78cc04-feff-4ea8-bfec-526ea5994884.png) + +### Docker 部署 Next.js 项目 + +如果大家使用 VSCode 编辑器,可以安装 docker 插件,它能为 Dockerfile和 docker-compose.yml 文件提供了代码提示;通过Docker Explorer视图,可以直观地管理Docker资源,如容器、镜像、卷、网络和容器注册表。直接进行各种Docker操作,如启动和停止容器、查看日志等等 还有很多其他能力 +![image.png](https://blog-1304565468.cos.ap-shanghai.myqcloud.com/blog/1715270412016-717d3746-67e0-4c15-966c-44572d606dd8.png) +这里,我使用 VSCode 作为编辑器,使用 `npx create-next-app@latest`创建一个 Next.js 项目,然后修改一下代码,如下: +![image.png](https://blog-1304565468.cos.ap-shanghai.myqcloud.com/blog/1715271118824-3ad168e9-a6c3-441e-a506-ce283f98bbf3.png) +现在我们为此项目添加 Dockerfile: + +1. 根目录新建 .dockerignore,作用类似于 .gitignore,排除不必要的文件和目录,这样在构建 Docker 镜像时,就可以减小镜像大小并提高构建效率。我们写入: + +```bash +Dockerfile +.dockerignore +node_modules +npm-debug.log +README.md +.next +docker +.git +``` + +2. 根目录新建 Dockerfile,写入,推荐使用安装了 Docker 的 VSCode 编写: + +```bash +FROM node:18-alpine +WORKDIR /app +COPY . . +RUN npm install --registry=https://registry.npmmirror.com && npm run build +CMD npm start +EXPOSE 3000 +``` + +Dockerfile 是用于**定制镜像文件的文本文件。其内的每一行都是一句指令。**完整的指令和其含义可查 [文档](https://docs.docker.com/engine/reference/builder/#dockerfile-reference)。简单解释一下上面这段代码: + +- `FROM` 用于指定基础镜像。所谓定制镜像,那一定是以一个镜像为基础,在其上进行定制。而 `FROM` 就是指定 基础镜像,因此一个 Dockerfile 中** FROM 是必备的指令**,**并且必须是第一条指令**。这里我们选择 node:18-alpine 是参考了 Next.js 的官方 [ Docker 示例代码](https://github.com/vercel/next.js/tree/canary/examples/with-docker)。 +- `WORKDIR` 用于指定**之后所有 Docker 命令的工作路径**。如该目录不存在,WORKDIR 会帮你建立目录。 +- `COPY` 用于将文件拷贝到 Docker。**第一个点表示本地路径,第二个点表示目标路径**。目标路径可以是容器内的绝对路径,也可以是相对于工作目录的相对路径,这里意思是:将当前目录的所有文件拷贝到 /app下。 +- RUN 用于执行命令行命令,我们可以执行任意 shell 命令。这里我们安装了项目依赖。 +- CMD 用于指定**容器**启动命令。**RUN 可以有多个,在镜像构建阶段执行**。**CMD 只能有一个,在容器启动后执行**。前面说到,容器就是进程。既然是进程,那么在启动容器的时候,需要指定所运行的程序及参数。CMD 指令就是用于指定默认的容器主进程的启动命令的。 +- EXPOSE 用于声明容器运行时提供服务的端口。不过**这只是一个声明**,在容器运行时并不会因为这个声明应用就会开启这个端口的服务。但可以帮助镜像使用者理解这个镜像服务的守护端口,以方便配置映射。 + +进入项目根目录,运行命令`docker image build -t next-docker-learn-demo:0.0.1 .`,构建镜像文件,我们可以看到: +![image.png](https://blog-1304565468.cos.ap-shanghai.myqcloud.com/blog/1715348264267-58e561be-a536-401b-b0b6-e6400573d99d.png) +解释一下这个构建参数: +-t 参数用来指定镜像文件的名字,后面还可以用**冒号指定标签**。如果不指定,默认的标签就是 latest。**最后面还有一个 . 不能省略,**它告诉 Docker 应该在当前目录下寻找这个 Dockerfile 和 指定上下文路径。 +第一次构建会慢一点,但是后面会快很多,因为 Docker会缓存之前的每一个操作,也就是 Docker中的分层。 构建完后,可以在 Docker 客户端中查看: +![image.png](https://blog-1304565468.cos.ap-shanghai.myqcloud.com/blog/1715348348531-841eb019-3e44-4fc2-9c15-8f39cbd14686.png) +也可以在本地执行 docker images 查看镜像列表: +![image.png](https://blog-1304565468.cos.ap-shanghai.myqcloud.com/blog/1715348398686-0cf72db3-a708-4b7c-957e-7428435a28aa.png) +有了镜像,我们使用docker run 创建并启动一个新的容器实例,可以在终端运行: + +```bash +docker run -p 4000:3000 next-docker-learn-demo:0.0.1 +``` + +-p 用于指定端口映射,这里的意思是将容器的 3000 端口映射到主机的 4000 端口,格式:`[宿主机端口]:[容器端口]`, `next-docker-learn-demo:0.0.1`指定了要使用的 Docker 镜像 + +- next-docker-learn-demo 是 Docker 镜像的名称。 +- 0.0.1 是镜像的版本标签,用于指定具体的版本 + +也可以使用 Docker 客户端 运行,我们需要填写一些参数: +![image.png](https://blog-1304565468.cos.ap-shanghai.myqcloud.com/blog/1715351997214-6601e81d-e9cc-4657-b106-e1c1b7b03c62.png) +我们本地访问:[http://localhost:4000/](http://localhost:4000/),可以看到: +![image.png](https://blog-1304565468.cos.ap-shanghai.myqcloud.com/blog/1715352124331-b3d953cd-7896-44fb-8f7e-c9c9615fc9f1.png) +查看 Docker 客户端: +![image.png](https://blog-1304565468.cos.ap-shanghai.myqcloud.com/blog/1715352300114-bad9f7ec-fb78-4728-88a0-14cd97b32f01.png) +也可以通过 docker ps 在终端查看: +![image.png](https://blog-1304565468.cos.ap-shanghai.myqcloud.com/blog/1715354945312-3a5546f8-ca35-4c2f-98e6-41b6dc3cf413.png) +我们可以使用以下命令对启动的容器进行启动、停止、删除等操作: + +```bash +# 容器列表 +docker container ls +# 停止容器 +docker container stop container-id +# 启动容器 +docker container start container-id +# 重启容器 +docker container restart container-id +# 删除容器 +docker container rm container-id + +``` + +下面我们可以将镜像发布到 Docker Hub(就像把代码发布到 github)。首先需要去[https://hub.docker.com/](https://hub.docker.com/) 注册一个账户,也可以直接在 Docker 客户端进行登录:![image.png](https://blog-1304565468.cos.ap-shanghai.myqcloud.com/blog/1715354324888-ed49b5b4-3871-4c25-bdad-0b70cd553975.png) +我们可以在终端执行 docker login 确认我们登录成功: +![image.png](https://blog-1304565468.cos.ap-shanghai.myqcloud.com/blog/1715354350699-1bd2443a-d77d-4bc9-aae8-d7cec451ea71.png) +现在我们在终端把我们的 `next-docker-learn-demo` 发布到 Docker hub, +需要先使用 `dcoker image tag` 标记本地镜像,将其归入某一仓库: + +```bash +# 格式如下: +# docker image tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG] +# 其中 snailrun160 是我的 Docker Hub 账户名 +docker image tag next-docker-learn-demo:0.0.1 snailrun160/next-docker-learn-demo:0.0.1 + +``` + +然后`推送其到 Docker Hub: + +```bash +# 格式如下: +# docker image push [OPTIONS] NAME[:TAG] +docker image push snailrun160/next-docker-learn-demo:0.0.1 +``` + +发布完毕后,在 Docker 客户端的 Images 下的 Hub 可看到:![image.png](https://blog-1304565468.cos.ap-shanghai.myqcloud.com/blog/1715355841312-0342cecd-0d29-4dab-91a2-19a254f89f81.png) +推送到 Docker Hub 后,其他人就可以直接拉取我的镜像文件: + +```bash +docker image pull snailrun160/next-docker-learn-demo:0.0.1 +``` + +然后运行 docker run :创建容器 + +```bash +docker run -p 4000:3000 next-docker-learn-demo:0.0.1 +``` + +到这里,最基本的 Docker 使用就结束了,是不是还是很简单的,但是这才是 Docker 的冰山一角,我打算写三篇文章记录 Docker 学习,学完后应该就够我用了! + +## 回顾 + +我们来总结一下,我们学到的知识, + +- 我们知道了什么是 Docker?它解决了什么问题? +- 我们如何在电脑安装 Docker 环境? +- 了解 Docker Desktop 和 VSCode Docker +- 如何使用 Docker 进行简单的 Next.js 纯前端项目部署 + +下一章,我会介绍 Docker Compose ,把一个带 Nginx,Redis,MySQL的项目,使用 Docker Compose 来对多个容器进行管理, + +## 参考: + +1. 官方网站:[https://www.docker.com/](https://www.docker.com/) +2. Docker 10分钟快速入门: [https://www.bilibili.com/video/BV1s54y1n7Ev](https://www.bilibili.com/video/BV1s54y1n7Ev/?share_source=copy_web&vd_source=baff1d303cd044521f2216d96406a3a4) +3. Docker 入门到实践:[https://yeasy.gitbook.io/docker_practice](https://yeasy.gitbook.io/docker_practice) diff --git a/posts/docker-learn-2.mdx b/posts/docker-learn-2.mdx new file mode 100644 index 0000000..f8c8670 --- /dev/null +++ b/posts/docker-learn-2.mdx @@ -0,0 +1,254 @@ +--- +title: 前端程序员学习 Docker 的笔记 (二) +description: 如何使用 Docker Compose 来部署一个包含 Next.js 和 Redis 的项目。文章首先演示了本地启动项目的步骤,然后讲解了如何使用 Docker 容器化部署服务。接着介绍了 Docker Compose 的概念和使用方法,通过编写 docker-compose.yml 文件来管理多个容器。最后,文章还讨论了数据卷的概念和使用,以实现数据持久化。整篇文章通过实际操作步骤,深入浅出地讲解了 Docker 在前端项目中的应用,适合想要学习 Docker 的前端开发者阅读 +tags: [docker, 笔记] +slug: docker-learn-2 +author: luckySnail +# cover: +date: 2024-05-19 +--- + +大家好,我是阿星,上一个文章:[更适合前端的 Docker 教程(一)](https://www.yuque.com/asgas/web_system/th4kazgysrzuktxn?view=doc_embed),我分享了 Docker 基础,如何通过 Docker 容器化部署一个纯前端的项目,但是真实项目,肯定是离不开后端的,下面就以一个需要 nextjs + redis 技术的项目为例,来入门一下 `Docker Compose` + +## 本地启动项目 + +我们先本地启动一下需要这些技术的项目,这里直接 git 拉取仓库就好: + +```bash +git clone -b day1 git@github.com:mqyqingfeng/next-react-notes-demo.git +``` + +本地运行 + +```bash +cd next-react-notes-demo && npm i && npm run dev +``` + +由于这个项目需要 Redis 服务,我们新开一个命令行运行:`redis-server`,如果没有安装 redis,需要先安装一下 Redis。 + +![image.png](https://blog-1304565468.cos.ap-shanghai.myqcloud.com/work/b8b253c7c2224ddfbe8f5176993892cb~tplv-k3u1fbpfcp-jj-mark:0:0:0:0:q75.png) + +## 容器化部署 + +使用上个文章的知识,我们现在把 Redis 和 Next.js 项目 容器化部署 + +1. 拉取 Redis 镜像:`docker pull redis` +1. 关闭本地命令行启动的 Redis ,使用 Docker 启动 Redis:`docker run -p 6379:6379 redis redis-server` 关闭本地的Redis 后,我们的项目刷新是会报错的: ![image.png](https://blog-1304565468.cos.ap-shanghai.myqcloud.com/work/9241bde347e74ddc84c25ffa1810554d~tplv-k3u1fbpfcp-jj-mark:0:0:0:0:q75.png)使用 Docker 启动 Redis 后,就恢复了 +1. 我们完成了 Redis 容器化,我们现在把 Next.js 项目也新开一个容器进行部署,但是每个容器都是一个单独的隔离空间。这时候**即将容器化部署的 Next.js 服务就访问不到我们的 Redis 服务**。那么我们就需要将两个容器服务连接起来,Docker 可以将容器加入[自定义的 Docker 网络](通义)的方式来连接多个容器。 + +> Docker 支持自定义网络,这里我们使用桥接网络来连接多个容器,容器间就可以通信了! + +4. 创建一个 自定义 Docker 网络:`docker network create -d bridge react-notes` + +- -d bridge :参数指定 Docker 网络类型,有 bridge、overlay。 +- react-notes 为我们的自定义网络的名字 + +5)暂停或者删除之前开启的 Redis 容器,运行一个新的 Redis 容器并连接到新建的 react-notes 网络: + +```bash +docker run -p 6379:6379 --network react-notes redis redis-server +``` + +6)查找 redis 容器的 IP 地址:`docker network inspect react-notes`得到 IPv4Address 的 host 将其设置为 lib/redis.js 的 Redis host + +![image.png](https://blog-1304565468.cos.ap-shanghai.myqcloud.com/work/be8064969d0f4bc6a20695da99c63315~tplv-k3u1fbpfcp-jj-mark:0:0:0:0:q75.png) + +7) 为 Next.js 项目创建 Dockerfile,上篇文章讲了每行命令的含义 + +```bash +FROM node:18-alpine +WORKDIR /app +COPY . . +RUN npm install --registry=https://registry.npmmirror.com +CMD npm run build && npm start +EXPOSE 3000 +``` + +8)有了 Dockerfile ,我们就可以为项目打包镜像。执行:`docker image build -t next-react-notes-demo:0.0.1 .`创建镜像 + +9. 运行打包好的镜像,生成一个实例:`docker run -p 4000:3000 --network react-notes next-react-notes-demo:0.0.1` 本地访问 http://localhost:4000 我们应该可以看到页面,但是我们这样设置网络,设置每个容器,是不是很麻烦?没错我们可以使用** Docker Compose 来帮我们管理多个容器** + +## Docker Compose + +> Docker Compose 是一个用于定义和运行多容器 Docker 应用的工具。通过编写一个 docker-compose.yml 文件,你可以在其中定义所有服务、网络和卷,然后使用一个命令就能启动和管理这些服务。 + +三个核心概念: + +- 服务:也就是容器,例如上面的前端网页服务和 Redis 服务 +- 网络:Docker Compose 会创建一个默认网络让所有服务互相连接,你也可以定义自定义网络 +- 卷:用于在服务(容器)之间共享和持久化数据。可以在开头创建数据卷,给服务使用 + +先查看是否安装了 Docker Compose,如果是安装 Docker 客户端,是会默认安装上的 + +```bash +docker-compose --version +# 应该能看到:Docker Compose version v2.27.0-desktop.2 这样的返回 +``` + +我们编写 docker-compose.yml 文件(模板文件的各种指令含义可以参考 https://yeasy.gitbook.io/docker_practice/compose/compose_file): + +```yml +# 使用 Docker Compose 文件格式版本 3.8。这版本支持新的功能和属性,同时确保与 Docker 引擎的兼容性。 +version: '3.8' +# 定义了应用的所有服务,每个服务对应一个容器。 +services: +# 服务名称,可以任意字符串,这里是 Redis 服务 + redis: + # 指定镜像,从 Docker Hub 下载该镜像 + image: redis + # 将容器的 6379 端口映射到主机的 6379 端口。这使得在本地可以通过端口 6379 访问 Redis 服务。 ports: + - '6379:6379' + # 指定容器启动时执行的命令,这里是 redis-server,即启动 Redis 服务器 + command: redis-server + # nextjs 前端网页服务 + nextapp: + # 构建镜像时使用当前目录,nextapp 服务的镜像将根据当前目录中的 Dockerfile 构建。 + build: . + # 将容器的 3000 端口映射到主机的 4000 端口。 + ports: + - '4000:3000' + # nextapp 服务依赖 redis 服务。这意味着在启动 nextapp 服务之前,Docker Compose 会先启动 redis 服务。 depends_on: + - redis +``` + +我为每行添加了注释,使用的时候注释记得删除掉,不然会有问题,我们还需要之前编写的 Dockerfile ,我们还需要修改 redis.js + +```js +const redis = new Redis({ + host: 'redis' +}); +``` + +我们这时候命令行运行 Docker Compose 脚本:`docker-compose up` docker-compose up 会尝试自动完成包括 + +- 构建镜像 +- (重新)创建服务 +- 启动服务 +- 关联服务相关容器的一系列操作 + +现在我们的项目应该启动了,依然是:http://localhost:4000,我们会看到: ![image.png](https://blog-1304565468.cos.ap-shanghai.myqcloud.com/work/5994d84dc8fb4a498ac5a3cec38f4bbb~tplv-k3u1fbpfcp-jj-mark:0:0:0:0:q75.png) **之前我们做的事情,现在只需要一行命令就都帮我们搞定了** 真好,加入每次部署使用 Docker Compose 节省时间是 1 分钟(应该肯定不止吧!),那帮所有使用 Docker 的人节省的时间那得是多少呀!这就是技术的魅力,省下来的时间玩游戏多香呀! 现在还有一个问题,就是 Redis 中的数据都在容器中,如果容器销毁,产生的数据也都随之消失,那如果是线上,这肯定不行的呀,数据才是最重要的,得要把容器的数据同步备份到主机中,即使容器销毁,数据也还在,那就需要数据卷 VOLUME 了,让我们继续往下看 + +## 数据卷 + +> 数据卷(Volumes)是 Docker 提供的一种用于在容器和主机之间共享数据的机制。数据卷可以独立于容器的生命周期存在,这意味着即使容器删除了,数据卷中的数据也不会丢失。它的特点: +> +> 1. **持久性**:数据卷的数据会一直保留,直到明确删除,即使容器删除,数据仍然存在。 +> 1. **共享和重用**:数据卷可以在多个容器之间共享和重用。 +> 1. **备份和恢复**:可以轻松地对数据卷进行备份和恢复操作。 +> 1. **高效**:数据卷的性能优于直接在容器内存储数据。 + +上面部署的项目,Redis 的数据是没有存储到主机的,我们验证一下: + +```bash +# 查看 redis 容器的 container id +docker container ls +# 进入想要进入的容器 (这里是进入 Redis 容器) +docker exec -it 6ddf48e06645 bash +``` + +终端效果: ![image.png](https://blog-1304565468.cos.ap-shanghai.myqcloud.com/work/05d9898a42034398a8b475f30a4ffe95~tplv-k3u1fbpfcp-jj-mark:0:0:0:0:q75.png) 我们执行一些 Redis 命令,来删除一条数据 + +```bash +redis-cli +keys * +hgetAll notes +hdel notes 1702459182837 +hgetAll notes +``` + +![image.png](https://blog-1304565468.cos.ap-shanghai.myqcloud.com/work/dff8fe8fa662463793cc3382d6edb1c1~tplv-k3u1fbpfcp-jj-mark:0:0:0:0:q75.png) + +```bash +# 查看 Next.js 项目的 container id +docker container ls +# 重启 Next.js 容器 +docker container restart 74776b12c032 +``` + +我们能看到: ![image.png](https://blog-1304565468.cos.ap-shanghai.myqcloud.com/work/4e016e207e7245aaaf37679535d954a8~tplv-k3u1fbpfcp-jj-mark:0:0:0:0:q75.png) 这时候,如果我们把所有容器都删除(Redis 容器也删除了),重新运行: 先执行:`docker-compose down`,再执行`docker-compose up` ![image.png](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/c9509f0eca224516ab1b8822241f14c4~tplv-k3u1fbpfcp-jj-mark:0:0:0:0:q75.image#?w=1624&h=334&s=81668&e=png&b=1e1e1e) 我们会发现数据又恢复到了三条,那我现在希望我删除能够一直生效,就需要使用到 数据卷(volumes)的功能,它会将数据存在主机文件系统的某个区域,现在我们在项目的根目录下建立一个名为 redis 的文件夹,修改 docker-compose.yml如下: + +```bash +version: '3.8' +services: + + redis: + image: redis + ports: + - '6379:6379' + command: redis-server + volumes: + - ./redis:/data + + nextapp: + build: . + ports: + - '4000:3000' + depends_on: + - redis +``` + +./redis:/data 是通过 : 进行分割,左边是主机的地址,右边是 容器的地址,我们会发现很多地方都是这样,左边是宿主机的信息,右边是容器的。 我们配置这个后,容器中的数据就会同步到主机,也就实现了**数据持久化**。 我们删除掉之前的镜像,再重新构建的镜像,因为数据做了持久化,再重复一遍刚才的操作再次打开地址的时候,数据如果是两条,那么数据卷就生效,我们动手试一下吧! + +```bash +# 查看镜像 +docker image ls +# 删除镜像 +docker rmi next-react-demo-nextapp +# 再次查看 +docker image ls +# 重新执行 docker compose +docker-compose up +``` + +![image.png](https://blog-1304565468.cos.ap-shanghai.myqcloud.com/work/c64988ef084b4f0e84d063568985313e~tplv-k3u1fbpfcp-jj-mark:0:0:0:0:q75.png) +去删数据: +![image.png](https://blog-1304565468.cos.ap-shanghai.myqcloud.com/work/059a0861871149048ace50dc8069a2ac~tplv-k3u1fbpfcp-jj-mark:0:0:0:0:q75.png) +重新启动 nextapp 容器,然后刷新 http://localhost:4000 +![image.png](https://blog-1304565468.cos.ap-shanghai.myqcloud.com/work/de27212eb83e48aaadb0647b36eb9d2f~tplv-k3u1fbpfcp-jj-mark:0:0:0:0:q75.png) +我们删除关闭所有容器,然后重启。会看到数据依然是两条。那数据持久化就完成啦! 如果细心的小伙伴,可以看到我们主机的 Redis 目录下 多了一个 文件 +![image.png](https://blog-1304565468.cos.ap-shanghai.myqcloud.com/work/7667efaff22f4117b1c4fe51680e298f~tplv-k3u1fbpfcp-jj-mark:0:0:0:0:q75.png) +这个文件是二进制文件,正是 Redis 数据的全量备份。运行 `docker-compose up` 的时候,redis 又会读取加载这个文件,也就实现了数据持久化。 dump.rdb 这个文件就是 Redis 的持久化机制的体现。Redis 的持久化机制有两种, + +- 一种是 RDB(Redis Database),RDB 是一次快照,也是默认值 +- 一种是 AOF(Append Only File)。开启 Redis 容器时的 --appendonly 参数开启那就是 AOF。 + +### 数据卷的其他命令 + +- 创建:`docker volume create my-vol` +- 查看:`docker volume ls` +- 查看数据卷对应主机位置:`docker volume inspect my-vol` + +在 docker-compose.yml 创建数据卷 + +```bash +version: '3.8' +# 创建名为 redis-data 数据卷 +volumes: + redis-data: + +services: + + redis: + image: redis + ports: + - '6379:6379' + command: redis-server + # 挂载 到容器 + volumes: + - redis-data:/data + + nextapp: + build: . + ports: + - '4000:3000' + depends_on: + - redis +``` + +到这里,本节就结束了,但是这次部署,依然有两个问题? + +1. 打包后的 next.js 镜像很大, 我们需要优化 +1. 目前依然只能本地访问,我们部署是为了让所有人都可以访问,但是没有做到。 + +下一节,我们深度使用 Docker,解决这两个问题,到这里,我发现 Docker 命令还是很多的,如果不是经常使用,根本就记不住(ps:虽然可以使用 Docker desktop 快捷操作)。如果忘记命令,这里推荐查阅这个中文文档,非常大而全的手册:https://yeasy.gitbook.io/docker_practice,很快能搜索到想要的代码 +![image.png](https://blog-1304565468.cos.ap-shanghai.myqcloud.com/work/3529e2b0a4a1490992deaeb2d404e66e~tplv-k3u1fbpfcp-jj-mark:0:0:0:0:q75.png) diff --git a/posts/end-2023.mdx b/posts/end-2023.mdx new file mode 100644 index 0000000..616944d --- /dev/null +++ b/posts/end-2023.mdx @@ -0,0 +1,113 @@ +--- +title: 一名普通前端开发的絮絮叨 - 2023 +description: 2023 年,一个普通前端打工人的遭遇,亲人离开,偶然一个社区活动参与,为未来跳槽埋下种子,总结一年中的个人提升,最后为未来进行了规划 +tags: [2023, 年终总结, 未来规划, luckySnail] +slug: end-2023 +author: luckySnail +# cover: +date: 2023-12-31 +--- + +## 2023 一名普通前端开发的絮絮叨 + +2023 年,是伴随着全面解封的政策到来的。但是寒冷的冬季也让病毒传播的更加迅速,我的姥姥也因此留在了刺骨的冬天。印象很深, 在去公司上班路上,我在地铁上,我爸打电话和我说:“你姥走了!”,我当时一下就哭了出来,姥姥对我很好,在我上高中的时候经常来看我,给我买好吃的。第一次体验了亲人离世,看到我妈一直止不住的哭,到家后那种撕心裂肺的痛哭,感觉真的很痛苦! + +### 不安于现状 + +回来工作,还是会时常想起姥姥。我工作在杭州的一个电商的互联网公司,研发团队也有几百人,在我实习的时候,我有一个很好的 leader,我从他身上学习到了很多编程开发经验和技能,后面因为一些原因,把我调到另外一个组,我的 leader 也不再带我,新的 leader 我不是很喜欢,可能我当时心态有问题,就是想要和最初的 leader 搭档。但是我新的团队,技术氛围不是很好。我本身也不是一个很 自律的人,所以感觉天天都在做重复的 CRUD 工作,个人成长很慢,工作也没有什么成就感。我觉得 **跟对人和圈子** 是很重要的事情,于是我决定跳出舒适圈,那之后,我开始看外面的机会,天天学习,看一些面试题等等, + +### 成为星球前端小助手 + +我的运气好像很不错!**星球 小 y** 告诉我编程导航招聘 **前端小助手**,我就报名了,这里我想感谢小 y,他给我了一个机会,我顺利成为了前端小助手,后面鱼皮给我和另外一个前端小助手开会评审需求,当时还是很激动的,也是很有动力的开发鱼皮交给我的任务。后面鱼皮说要自己创业,问我们想要参与吗?我当时很开心,我是看完了鱼皮的用户中心的全部课程,我觉得能直播讲的这么好,真的好厉害!(直播 和 录课 是两个概念的 )我想我一定要抓住机会,我就提离职了,当时领导和我聊了很久,说行情不好,等等的!但是,最难的是我爸妈的阻止,但是我说了很久,最终在他们的不理解中,我来到了上海 + +### 系统性的学习和提升 + +说实话!来上海租房是我人生中的第一次租房,真的感谢文强,那天是周六(休息日对于打工人意味着什么不用我说吧!),他带着我找到了一个满意的房子,屑老板(鱼皮)还请吃了饭(感动)。接下来,就开始了我的快乐打工生活。在这里真的学到了很多, + +- 学会了如何做需求调研,需求是否需要做?怎么做? +- 学会了如何做技术调研,有哪些技术可以实现?每个技术的优缺点? +- 学会了如何写出更好维护的代码?怎么更高效的开发,不重复写相同的代码? +- 学会了如何沉淀技术,写一个规范的文档? +- 学会了如何提交一个规范的代码,保证最小提交? +- 学会了怎么让页面变得更加美观,让用户用的更加舒服,学会了很多开发小技巧 +- 学会了怎么上线网站,怎么配置 nginx,给网站做 SEO 优化等等 + +除了这些我觉得在沟通表达上,我也有了很大进步,现在能理解别人的话和表达出我的想法。在处理棘手问题的心态上,我也比以前更加自信,以更加好的状态去面对。例如:以前我面对很多问题,我觉得棘手,我会放弃;现在我会尝试去解决它,战胜它。 +和屑老板一起工作,在个人眼界上也提升了不少,比以前看到了事情的更多方面;看到了很多我之前没有见过,或者听过的事情,让我对很多事情有了新的感受。 + +### AI 对我的影响 + +如果你谈 2023 年 ,但是你不聊 AI,那就太没意思了!AI 毫无疑问是今年的主角,现在我的工作也完全离不开 AI,我觉得 AI 是我的助手(就像我们开发的鱼聪明 AI 助手),它是真的能帮我节省时间,解决问题的好助手! + +- 我会使用 **鱼聪明 AI** 助手帮我写大众点评的好评; +- 我会使用 **devv.ai** 帮我解决 编程的问题,百分之九十的答案都是我能直接使用的 +- 我会使用 **chatGPT 4** 帮我解决一些比较棘手的解决方案问题,它总是能很好的帮我化解问题 +- 我会使用 [perplexity](https://www.perplexity.ai/) 来帮我查找资料,他能全网搜索我需要的主题,并给出引用地址 +- 我会使用 **Claude** 来帮我优化我的文章内容,它总是能找出文章的不足,然后告诉我怎么优化 +- 我会使用 **Github Copilot** 来辅助我进行编程,它总是在我每一个回车 和 空行 的时候,告诉我一些我接下来要做的事情,我仅仅需要按下 `tab`, +- 我还会在闲暇之余,使用 **鱼聪明 AI** 生成 好看的小姐姐,提高我的审美,因为优秀的前端,审美也一定不能差 + +AI 真的帮我做了好多事情,帮我节省了很多时间,帮我解决了太多问题,我完全离开不了 AI 了!我也希望每个人都能使用 AI 来提高 自己的效率。 + +### 专业能力提升 + +在学习技术方面,2023 年,我学习了: + +- vue 3、vite、 +- webpack +- react 18 新官方文档 +- next.js 13。做了自己的 blog +- 一些基础原理,看了一些库的源码,发现看源码其实也很有乐趣,看懂了的成就感也非常爽! + +最近,在听 **左耳朵耗子**(骨灰级程序员大佬) 的极客时间音频,还入手了他的传记《传奇程序员练级攻略》,通过大佬的讲述,再次告诉我:“**学习没有捷径**”,**不断学习并掌握基础知识和相关技术,可以帮助我们更好地梳理和解决问题**。所以,2024 年,我希望我能深入前端和计算 机基础,理解并掌握那些基础的,底层的知识。不再去过分追求最新的,最前沿的技术,了解即可! + +### 生活上的改变 + +在生活方面,首先我今年开始了微信读书,我会使用碎片化的时间去看一些书籍,例如:《纳瓦尔宝典》《黑客与画家》《小王子》《亲密关系》等等,反正就是随便看。最近还会使用多邻国学习英语,带替之前刷抖音,它也是碎片化学习的神器。还有,我觉得恋爱经历是我很想要总结的,通过恋爱,我对我自己有了更加清晰的认知,我学会了很多,我变得自信了!都要感谢这段亲密关系,很喜欢经常看到的一句话:“人生就是一种体验!”,希望大家都要多多尝试,走出舒适圈,认识他人,这也是更加认识自己的过程! + +### 沉淀的方法论 + +还有一个非常重要,我觉得在 AI 时代,每个人都需要掌握的本领,**知识索引的能力**,我觉得熟练的索引能力,是提高我们工作效率的一大利器!遇到问题, + +1. 能够知道问题的原因, +2. 然后正确的提出问题, +3. 然后找到合适的提问工具, +4. 然后找到感觉正确的答案并去验证,实践。 + +能够做到这个,我觉得是非常厉害的!我觉得这个 SOP 适用遇到的任何问题,不断的这样处理问题,形成一个心智模型,一定会让我 的生活和工作更加顺利! + +这里有几点,我觉得需要总结: + +1. 对于找到问题原因,我觉得就是需要提高自己的专业能力,知识储备,知道问题出在哪里,然后模糊知道怎么解决,剩下就交给互联 网 +2. 对于如何提问,我觉得看《提问的智慧》就够了,它是一本我觉得任何想要去向别人提问都要看的书,链接:https://github.com/tvvocold/How-To-Ask-Questions-The-Smart-Way +3. 下面是我常使用的索引方式: + +4. 1. 谷歌搜索框 + 2. GitHub search ; github issues + 3. devv.ai + 4. chatGPT + 5. 向有经验的人提问等等 + +### 2024 展望 + +对于 2024 ,我希望我能通过不断的 **行动** 完成我立下来的这些 flag + +1. 在工作上,我希望我能更加专注,更加注重细节,提高自己独当一面的能力 + +1. 1. flag:使用所学的技术,提高自己工作效率,减少重复的工作 + 2. flag:对工作 **更加细心,更多思考**,把工作做好,提高自己对自己作品的要求 + 3. flag:更加主动,积极的去反馈工作遇到的问题,好消息,坏消息都要主动的上报 + +1. 在技术上,我希望重新深入学习 前端基础知识,计算机基础知识,赋能到工作 + +1. 1. flag:看一本 JS 相关的书籍,并记录笔记,代码 demo ,等等 + 2. flag:学习 React 源码 + 3. flag: 做一些脚手架之类的,能够提高效率的事情 + +1. 在生活上,我希望我能有更多时间去读书,去旅游,去体验新的事物 + +1. 1. flag:我要读 12 本书 + 2. flag:旅游一个新的城市 + 3. flag:看一次演唱会(希望) + +悲观者往往正确,但是乐观者往往成功! 2024 加油 diff --git a/posts/fan-hua.mdx b/posts/fan-hua.mdx new file mode 100644 index 0000000..02d1100 --- /dev/null +++ b/posts/fan-hua.mdx @@ -0,0 +1,71 @@ +--- +title: 《繁花》中让人惊艳的台词 +description: 电视剧《繁花》中让人惊艳的台词 +tags: [繁花, 台词] +slug: fan-hua +author: luckySnail +cover: https://blog-1304565468.cos.ap-shanghai.myqcloud.com/work/640.jpeg +date: 2024-03-18 +--- + +偶然看到繁华这部剧,最开始不想看,到后面每日追更,这部剧是真的好!推荐大家有空看看,我整理一些经典台词,归档一下: + +1. 外行看门面,内行看后门。 + +2. 你以为吃的是龙虾,实际上吃的是机会,一只龙虾就是一个机会。 + +3. 凡事,总要留一手。 + +4. 纽约的帝国大厦晓得吧?从底下跑到屋顶,要一个钟头,从屋顶跳下来,只要八点八秒。 + +5. 一个男人应该有多少个钱包?三只。第一只就是你实际有多少钱。第二只就是你的信用,人家钱包里的钞票你可以调动多少。第三只就是人家认为你有多少钱。 + +6. 做生意,首先要学会两个字:不响。不知道的,说不清楚的,没想好、没规划的,为难自己、为难别人的,都不响。做事情要留有余地,对吧。 + +7. 市场永远是对的,错的只有自己。 + +8. 做生意不是比谁赚得多,要看谁活得长,不要想着一步登天,要一步一个脚印,稳扎稳打。 + +9. 机会面前人人平等,抓住了机会就有可能改变人生。有人乘风而起,有人半日归零。 + +10. 心可以热,但头一定要冷。 + +11. 出人头地就是一个被人教训的过程。 + +12. 人人心里有杆秤,什么时候可以同富贵,什么时候可以共患难,心里多少都有数的。 + +13. 目标从来都不遥远,一步步,一天天,只管全力以赴,剩下的交给时间。 + +14. 人情就是欠来欠去的,就跟刷墙一样,刷过来刷过去,所以这个人情才会越来越深厚。 + +15. 今天的太阳,晒不到明天的衣裳。时间,决定一切。 + +16. 在老天爷看来,都是必然的。一种选择,一种人生,不是你晓得对跟错,就能够逃得掉的。 + +17. 哪里有那么多真的假的,眼前看到的就是真的,走掉的都是假的。 + +18. 人生两个问题,第一,找到问题,第二,把它解决掉。 + +19. 宁敲金钟一记,不打破鼓千声。(比喻宁愿和能人作短暂的接触,也不屑和平庸低劣的人多打交道。) + +20. 只有看到未来,才会有未来。 + +21. 屁股决定脑袋 + +22. 市场大路朝天,看清楚只有两个人 ,一个是赢家 ,一个是输家 。 + +23. 英雄不问出处 ,钞票不写名字 。 + +24. 人总要赶一头,要么走 ,要么留 ,唯独不好后悔 ,后悔没药好救的。 + +25. 跟你交流起来有点吃力,是我的问题 ,我层次太高了 。 + +26. 人嘛,总归要被一样东西套牢的 ,不是股票,就是房子,还有女人 。 + +27. 黄河路搭台,大家来唱戏 。轮到了粉墨登场,演好了下抬卸装 ,角色不一样,流程都一样的 。正所谓,唱戏不如听戏好 ,上台终有下抬时。 + +28. 能用金解决的事情,就别用人情,能用汗水解决的问题,就别用眼泪。 + +29. 对穷人要说利益,一个连生存都成问题的人,先让他吃饱饭,才能为你所用。 + +30. 在过去的7年里,我和这片土地上大多数的阿宝一样,经风雨,见世面,我们摸着石头过河,也愿意当好一块石头,让别人摸着我们过去 diff --git a/posts/fiber-learn.mdx b/posts/fiber-learn.mdx new file mode 100644 index 0000000..beb8b85 --- /dev/null +++ b/posts/fiber-learn.mdx @@ -0,0 +1,348 @@ +--- +title: 一篇文章讲清楚 React Element、React Component、JSX、Fiber 以及Diff算法的概念及其相互关系 +description: 这篇文章深入探讨了 React 中的几个核心概念:React Element、React Component、JSX、Fiber、Diff 算法和 React.createElement。文章通过源码分析和工具演示,详细解释了这些概念的含义及其之间的关系。它阐明了 JSX 如何转换为 React Element,React Component 如何生成和管理 Element,以及 Fiber 架构和 Diff 算法如何优化 React 的渲染过程。 +tags: [React, 源码学习, 笔记] +slug: compare-react-some-concept +author: luckySnail +# cover: +date: 2024-05-05 +--- + +最近在学习 React 源码的时候,发现好多概念,它们之间还有一些关系。总是容易忘记和弄混,打算写一篇文章记录一下,忘记了就再翻看看看。这次要弄清楚的是 + +- React Element + +- React Component + +- JSX + +- Fiber + +- Diff 算法 + +- React.createElement + +我会先介绍一下以上每一个,然后再通过源码和工具,来理解它们的关系,来我们先看看它们的“自我简介” + +## 它们的“自我简介” + +### React Element + +`React Element` 是构建 React 应用的最小单元。它是对一个 DOM 元素的轻量级描述,**最后都会被转化为纯 JavaScript 对象**,`React Element` 对象包含了几个基本的属性,如: + +- type:表示元素的类型,可以是字符串(如 'div', 'span' 等 HTML 元素),也可以是一个 React 组件。 + +- props:包含了该元素的属性,以及传递给子元素的数据。 + +- key:一个可选的、在兄弟元素之间必须唯一的字符串,用于在重新渲染时帮助识别元素的稳定性。 + +`React Element`是不可变的,一旦被创建,你不能改变其内容或属性。如果界面需要更新,React 会创建一个新的 Element,并在必要时通过比较新旧 `Elements` 来有效地更新 DOM。因此,可以将 `React Element` 理解为描述界面结构的纯数据结构,它们是虚拟 DOM 的组成部分,用于最终生成真实的 DOM 结构。这种设计使得 React 可以在不直接操作 DOM 的情况下,通过比较和重新渲染 `Elements` 来高效地更新界面。看一下真实的 React Element: + +``` +//
snailRun
; // JSX 转化为 React ELement 的对象如下: { '$$typeof': Symbol(react.transitional.element), type: 'div', key: null, props: { classname: 'snail-run', children: 'snailRun' }, _owner: null, _store: {} } +``` + +### React Component + +`React Component` 是构成 React 应用的独立、可复用的代码块。它们本质上是返回 `React Element`的 `JavaScript` 函数或类。组件可以接受输入(称为 `props`),并返回`React Element`。组件分为两种类型:函数组件和类组件,函数组件通常更简洁,支持 Hooks。它还可以作为 `React.createElement`的第一个参数,也就是 type 字段。我们日常开发 React 项目,写的最多的也就是 `React Component`,给大家写一下最简单的函数组件和类组件: + +``` +// 函数组件 function AppFunc() { // 可以使用 react hooks return
snailRun
; } // 类组件 class AppClass extends React.Component { render() { return
snailRun
; } } +``` + +### JSX + +JSX是一种语法扩展(语法糖),看起来很像 `XML`或 `HTML`。`JSX`提供了一种更直观的方式来描述UI,它让开发者可以在 `JavaScript`代码中写标签语言。在编译过程中,`JSX`会被转换成标准的`JavaScript`对象,即 `React Elements`,JSX 示例代码: + +``` +
snailRun
+``` + +### Fiber + +`Fiber` 是一种新的内部架构,用于增强 React 的能力,特别是在动画、布局和中断渲染方面。`Fiber`架构首次在 `React 16`中引入,目的是解决以前版本 React 递归更新过程不能中断的问题,**它能够将渲染工作分解成小的单元,每完成一小部分工作后,就能将控制权交回给浏览器,让浏览器处理如动画、布局、输入响应等其他工作。这种能力被称为“可中断渲染”**。Fiber 作为静态数据结构来讲,存储着很多信息,和 JSX 数据结构很相似,但是它存储更多内容。它本质上是一个**工作单元**的抽象,它代表 React 在构建和更新 DOM 时需要完成的工作。每一个 `React Element` 都对应一个 **Fiber 节点**,整个应用的结构可以被看作一个巨大的 Fiber 树。 + +### Diff 算法 + +当组件的状态或属性发生变化时,React 需要决定是否更新 DOM。React 使用\*\* Diff 算法\*\*来比较新旧两个 fiber 树并标记标记那些需要进行添加、删除或更新的 Fiber 节点并确定优先级,最后提交更改到 DOM,这个过程称为 `Reconciliation`(协调)。 + +**Diff 算法**会识别出需要进行更新的部分,并生成相应的操作来更新 DOM。这种方法确保了只有实际改变的部分才会被重新渲染,从而优化了性能。 + +> 小知识 >> 首屏渲染和更新的区别是:在创建 fiber 树的过程中,是否有diff算法 + +## 看看源码 + +想要了解这些名词和它们之间的关系,我们需要借助一个 JavaScript 编译器 `babel`:https://babeljs.io/,来看看 JSX 的编译结果。首先我们不添加任何插件,去掉 React 预设,来写一段 JSX 代码,我们可以看到报错了,因为本来`JavaScript` 不知道如何编译 JSX 的。 + +![](https://blog-1304565468.cos.ap-shanghai.myqcloud.com/work/640-20240801000429279.png) + +我们这时候滑动左边到底部点击 `add plugin` ,添加一个 `transform-react-jsx`插件。 + +![](https://blog-1304565468.cos.ap-shanghai.myqcloud.com/work/640-20240801000433968.png) + +我们可以看到,JSX 语法被成功编译,我们的左侧就被编译成为了右侧,它的结果就是 JSX 的结果: + +![](https://blog-1304565468.cos.ap-shanghai.myqcloud.com/work/640-20240801000437837.png) + +那我们现在来看看编译后的这个代码的结果是什么?也就是`React.createElement`做了什么?我帮大家找到了 React 源码中 `React.createElement`的实现,也就是下面这段代码: + +```javascript +/** + * Create and return a new ReactElement of the given type. + * See https://reactjs.org/docs/react-api.html#createelement + */ +export function createElement(type, config, children) { + if (__DEV__) { + if (!isValidElementType(type)) { + // This is an invalid element type. + // + // We warn in this case but don't throw. We expect the element creation to + // succeed and there will likely be errors in render. + let info = ''; + if ( + type === undefined || + (typeof type === 'object' && + type !== null && + Object.keys(type).length === 0) + ) { + info += + ' You likely forgot to export your component from the file ' + + "it's defined in, or you might have mixed up default and named imports."; + } + + let typeString; + if (type === null) { + typeString = 'null'; + } else if (isArray(type)) { + typeString = 'array'; + } else if (type !== undefined && type.$$typeof === REACT_ELEMENT_TYPE) { + typeString = `<${getComponentNameFromType(type.type) || 'Unknown'} />`; + info = + ' Did you accidentally export a JSX literal instead of a component?'; + } else { + typeString = typeof type; + } + + console.error( + 'React.createElement: type is invalid -- expected a string (for ' + + 'built-in components) or a class/function (for composite ' + + 'components) but got: %s.%s', + typeString, + info + ); + } else { + // This is a valid element type. + + // Skip key warning if the type isn't valid since our key validation logic + // doesn't expect a non-string/function type and can throw confusing + // errors. We don't want exception behavior to differ between dev and + // prod. (Rendering will throw with a helpful message and as soon as the + // type is fixed, the key warnings will appear.) + for (let i = 2; i < arguments.length; i++) { + validateChildKeys(arguments[i], type); + } + } + + // Unlike the jsx() runtime, createElement() doesn't warn about key spread. + } + + let propName; + + // Reserved names are extracted + const props = {}; + + let key = null; + let ref = null; + + if (config != null) { + if (__DEV__) { + if ( + !didWarnAboutOldJSXRuntime && + '__self' in config && + // Do not assume this is the result of an oudated JSX transform if key + // is present, because the modern JSX transform sometimes outputs + // createElement to preserve precedence between a static key and a + // spread key. To avoid false positive warnings, we never warn if + // there's a key. + !('key' in config) + ) { + didWarnAboutOldJSXRuntime = true; + console.warn( + 'Your app (or one of its dependencies) is using an outdated JSX ' + + 'transform. Update to the modern JSX transform for ' + + 'faster performance: https://react.dev/link/new-jsx-transform' + ); + } + } + + if (hasValidRef(config)) { + if (!enableRefAsProp) { + ref = config.ref; + if (!disableStringRefs) { + ref = coerceStringRef(ref, getOwner(), type); + } + } + + if (__DEV__ && !disableStringRefs) { + warnIfStringRefCannotBeAutoConverted(config, config.__self); + } + } + if (hasValidKey(config)) { + if (__DEV__) { + checkKeyStringCoercion(config.key); + } + key = '' + config.key; + } + + // Remaining properties are added to a new props object + for (propName in config) { + if ( + hasOwnProperty.call(config, propName) && + // Skip over reserved prop names + propName !== 'key' && + (enableRefAsProp || propName !== 'ref') && + // Even though we don't use these anymore in the runtime, we don't want + // them to appear as props, so in createElement we filter them out. + // We don't have to do this in the jsx() runtime because the jsx() + // transform never passed these as props; it used separate arguments. + propName !== '__self' && + propName !== '__source' + ) { + if (enableRefAsProp && !disableStringRefs && propName === 'ref') { + props.ref = coerceStringRef(config[propName], getOwner(), type); + } else { + props[propName] = config[propName]; + } + } + } + } + + // Children can be more than one argument, and those are transferred onto + // the newly allocated props object. + const childrenLength = arguments.length - 2; + if (childrenLength === 1) { + props.children = children; + } else if (childrenLength > 1) { + const childArray = Array(childrenLength); + for (let i = 0; i < childrenLength; i++) { + childArray[i] = arguments[i + 2]; + } + if (__DEV__) { + if (Object.freeze) { + Object.freeze(childArray); + } + } + props.children = childArray; + } + + // Resolve default props + if (type && type.defaultProps) { + const defaultProps = type.defaultProps; + for (propName in defaultProps) { + if (props[propName] === undefined) { + props[propName] = defaultProps[propName]; + } + } + } + if (__DEV__) { + if (key || (!enableRefAsProp && ref)) { + const displayName = + typeof type === 'function' + ? type.displayName || type.name || 'Unknown' + : type; + if (key) { + defineKeyPropWarningGetter(props, displayName); + } + if (!enableRefAsProp && ref) { + defineRefPropWarningGetter(props, displayName); + } + } + } + + const element = ReactElement( + type, + key, + ref, + undefined, + undefined, + getOwner(), + props + ); + + if (type === REACT_FRAGMENT_TYPE) { + validateFragmentProps(element); + } + + return element; +} +``` + +现在让我来简单解释一下这段代码: + +**参数说明:** + +- type:元素的类型,可以是 HTML 标签的字符串,或者是一个 React 组件( 函数组件 和 类组件) + +- config:一个配置对象,包含了元素的属性(props),可能还包括特殊属性如 key 和 ref。 + +- children:子元素,可以是任意数量的参数,表示元素的子节点。 + +示例:`React.createElement("div", {classname: "snail-run"}, "snailRun");` + +**主要逻辑:** + +1. **类型验证**:首先检查 type 是否有效。如果无效,会在控制台输出错误信息。有效性检查包括是否未定义、是否为空对象、是否为数组等情况。 + +2. **处理配置对象(config)**: + +- **处理 ref**:如果配置对象中有 ref 属性,并且当前环境允许 ref 作为属性,那么将其添加到新的 props 对象中。 + +- **处理 key**:如果配置对象中有 key 属性,将其转换为字符串并存储。 + +- **复制其他属性**:将 `config` 对象中的其他属性复制到新的 props 对象中,忽略 `key、ref、__self` 和 `__source` 等特殊或保留属性。 + +4. **处理子元素**: + +- 如果只有一个子元素,直接将其赋值给 `props.children`。 + +- 如果有多个子元素,将它们放入一个数组中,并赋值给 `props.children`。 + +6. **处理默认属性**:如果类型 type 有默认属性(`defaultProps`),则将未在 props 中显式设置的属性填充为默认值。 + +7. **创建 React Element**:使用 `ReactElement` 函数创建一个新的 React 元素,传入 `type、key、ref、props` 等参数。 + +8. **特殊类型处理**:如果 type 是 `Fragment` 类型,还会对 `Fragment` 的属性进行验证。 + +**开发与生产环境的差异** + +代码中多次出现`__DEV__`的条件编译指令,这是用来区分开发环境和生产环境的。在开发环境中,会进行更多的警告和错误检查,以帮助开发者发现潜在问题。 + +**总结:** + +- `createElement` 函数接受参数后,通过校验参数和处理,最后返回了 `ReactElement`,也就是说 JSX 编译得到的结果是 `ReactElement`, + +- \*\*JSX \*\*是写 React 组件时用来声明元素的语法糖,本质是 `React.createElement`,最终 JSX 被转换成 `React Element`。 + +## 它们的关系 + +1. **JSX 与 React Element 的关系**:`JSX` 是 `JavaScript` 的语法扩展,看起来很像 `HTML`。开发者通常使用 `JSX` 来描述 `UI` 结构。当 `JSX` 被编译时,它会被转换成 `React Element`。因此,可以认为 `JSX` 是创建 `React Element` 的语法糖。 + +2. **React Element 与 React Component 的关系**:`React Element` 是 `React`应用中最小的构建块,它是对组件输出的轻量级描述。`React Component` 则是封装了逻辑和状态的独立单元,它返回 `React Element`。因此,组件是创建和管理元素的容器。 + +3. **React Element 和 Fiber 节点的关系**:每个 `React Element`在内部对应一个 `Fiber` 节点,这些节点是实际执行工作的单位。 + +4. **React Component 和 Fiber 的关系**:在 `React 16` 版本中引入了 `Fiber` 架构,这是一种新的协调算法,用于提高应用的性能和响应性。每个 `React Component` 在渲染时都会对应**一个或多个** `Fiber` 节点。`React` 中的一个**工作单元**通常是一个 `Fiber`节点,`React` 通过这些**工作单元**来构建和更新虚拟 `DOM`。 + +5. **Diff 算法比较 Element 变化**:当组件的状态或属性变化时,`React`会使用 `Diff`算法比较旧的和新的 `React Element`,确定哪些需要更新。 + +6. **Fiber 与 Diff 算法的关系**:`Diff` 算法是 `React` 中**用于对比新旧虚拟 DOM 的差异,并决定如何有效更新真实 DOM 的过程**。在 `Fiber` 架构中,`Diff` 算法被用于确定哪些 `Fiber` 节点需要变更、哪些可以保留。`Fiber` 架构使得 `React` 可以中断和恢复 `Diff` 过程,允许任务按优先级进行,从而优化性能。 + +7. **整体流程**:当组件的状态或属性发生变化时,`React` 会重新执行 通过 `JSX`(`React.createElement` 语法糖) 创建的组件(`React Component`)的渲染函数,生成新的 `React Element`。然后,`React` 使用 **Diff 算法**对比新旧元素,通过\*\* Fiber 架构\*\*将这些变更分解成多个小任务,逐步执行这些任务,生成新的 `fiber` 树,最终将变更反映到真实的 `DOM` 上。 + +总结来说,**JSX **提供了一种声明式的语法来生成 `React Element / React Component`(函数组件 or 类组件),这些元素是由 `React Component` 输出的。`React Component` 通过** Fiber 架构**管理其生命周期和状态变化,而 `Fiber` 架构内部使用\*\* Diff 算法\*\*来优化更新过程。这些概念共同工作,使得 `React` 能够高效且灵活地构建用户界面。 + +## 参考 + +1. React 技术解密:https://react.iamkasong.com/preparation/jsx.html#jsx-%E7%AE%80%E4%BB%8B + +2. ai 问答:https://devv.ai/search?threadId=dkrfa9t4dwxs diff --git a/posts/first-project-manager-record.mdx b/posts/first-project-manager-record.mdx new file mode 100644 index 0000000..c4ef282 --- /dev/null +++ b/posts/first-project-manager-record.mdx @@ -0,0 +1,64 @@ +--- +title: 记录第一次当项目负责人感受 +description: 分享从前端开发转变为项目负责人的经历和收获。他学习到了如何进行数据分析、敏捷开发、遵守原则、独立思考和反思自己的行为。尽管面临挑战,他仍然感谢这个机会,并希望自己能够继续学习和进步。 +tags: [项目管理, 反思, 总结, 工作] +slug: first-project-manager-record +author: luckySnail +# cover: https://blog-1304565468.cos.ap-shanghai.myqcloud.com/work/image-20240721171518634.png +date: 2024-04-19 +--- + +简单介绍一下我自己,我叫阿星,我目前是一名前端开发,工作快两年了(22 年毕业),目前在鱼厂(程序员鱼皮的公司)打工,那今天要分享的是我在最近一个多月成为(最菜的)项目负责人的经历和收获,那直接进入正题 + +## 为什么需要我独立负责项目? + +2 月底的时候,我记得很清楚,那天是周一,晚上老板说要请客吃饭,跟我们说一件事情。我怀着疑惑去了饭店,然后老板跟我们说,他今天跟一位很厉害的产品大佬聊天(就叫他产品哥吧),产品哥分析了我们公司现在的发展情况和遇到的问题。老板说,已经确定他要加入我们团队,来帮助我们公司更好地发展。我当时听完很开心,因为有一个经验丰富的人加入我们公司,就意味着我所在的平台更好了,我们公司有了更多的可能性。而且我也很赞同产品哥对我们公司的分析和总结。 三月初,产品哥来了,老板请新来的员工吃饭,在饭桌上对公司现状进行了分析,得出两个结论:🌈💎🌈 + +1. 公司所有工作仍依赖于老板安排,员工无主人翁意识,无人能明确自己工作目标。 +2. 目前整体处于“温水煮青蛙”状态,不好不坏,这不是创业公司该有的样子 + +在产品哥的分析后,我们引入了“负责人制度”,以项目为单位,每项任务设立一名负责人,亦可称之为“小组长”。负责人的工作是逐步承担老板之前的一些工作。 以前,老板规划需求,细化需求,安排排期,分配资源,然后我们开发上线。现在,负责人规划工作,向老板争取资源,安排排期,开发上线,只需向老板汇报工作。 听起来负责人的工作似乎并不难,但实际操作起来却手忙脚乱。不过,产品哥和老板表示,他们不会一下子放手让我们做,而是会辅助我们,让我们慢慢独立负责,遇到问题都可以向他们请教。 初生牛犊不怕虎的我,主动请缨,说想尝试一下这个负责人制度。 + +## 我做了什么? + +**制定计划,开会同步计划:** 每周一,制定本周计划,拆解需求为尽可能小的需求,然后对需求进行排期,并记录文档,发起会议,确定需求是否要做,和老板同步需求所需要的时间和需要的人力。 + +**和同事沟通,推进工作:** 会议结束后,通知对应的人这周需要他们怎么做,例如:告诉后端我需要他做什么,大概什么时间前得给我,让他自己安排优先级。 + +**开发上线,同步老板:** 接下来就是我的日常工作,前端开发 + +1. 我和后端基于我们公司已有的资源搭建了一套简陋的数据看板,并且根据数据看板的数据对项目进行了优化,上线后及时查看改动对数据的影响,反馈给到同事和老板。 +2. 对竞品做深度分析,和产品哥一起对我们产品(用户使用路径,用户充值路径等等)多纬度进行分析和优化,提高用户的使用体验。 +3. 每周五会把本周完成的工作,未完成的工作做一个简单汇报给到老板。 + +**掌控整体进度,及时反馈风险:** 我还会偶尔当当最不喜欢的监工,例如:pr 没过,要及时催处理,写完需求及时验收测试。如果有需求发现完成不了了,及时和上级反馈,寻求解决办法 维护社群,文档,每日同步看板数据,分析数据:这段时间,我开始了维护社群,发一些产品更新动态公告,用户问题反馈收集等工作。每日在工作群和同事同步昨日的看板数据,分析数据,可能会产生一些新的需求,记录到需求池里 + +上面都是一些好的,下面说点不好的 + +**预估时间不准确,需求延期:** 我根据我的经验,和同事沟通,一起确定的上线日期,总是会很赶,甚至延期。 + +**无法准确思考需求优先级:** 感觉自己对产品理解还是不够,会做一些不是那么紧急的工作,但是有优先级更高的工作在等着我们 我负责的项目是老鱼简历,如果你有需要可以尝试一下,链接为https://www.laoyujianli.com/。如果你有任何不满意的地方,都可以随时跟我说,我都会记录下来,并努力改进。 + +## 我学习到了什么? + +二月底的我,还只是一个写需求、少写 bug,确保需求不延期的前端螺丝钉。现在,我却要成为一个项目负责人。习惯了被分配工作的我,大脑像是生了锈,完全不知所措,不知道该怎么去规划。幸运的是,我有产品哥😎!遇到问题,我就去请教他。产品哥并没有直接告诉我,我要怎么做,或者说这让我来吧!而是说:从数据中找答案,从竞品中分析。他教会了我如何进行简单的数据分析,来对现有的产品进行用户体验提升。跟他一起这段时间,我学到了很多,并且我也非常相信产品哥,现在基本上不确定的都会问问我的产品哥。 + +**先处理情绪再处理工作:** 那段时间的我,做需求总是 bug 不断,就是因为我感觉目前的工作有多个项目,杂乱,每天要做的事情感觉太多了,每天工作都处于需求马上要延期了,我得快点了,这种紧张状态下写的代码就会有很多问题,后来我看到群里推荐的 **《搞定 - 无压力工作的艺术》** ,我学到了先处理情绪。现在我会在精力不集中,情绪不稳定的时候先做点别的,例如:去接水,喝水,和同事唠嗑等等来解压 + +**清空大脑,专注当下工作:** 这个也是搞定那本书里的技巧,我现在每天都在实践,例如:工作中,突然企业微信的用户群里,反馈问题,我会看这个需求 5 分钟是否能搞定,可以的话立马做了,不可以记录文档(365 的 todo list),然后等主线任务完成,统一处理,我打算接下来要继续践行 番茄工作法,提高自己的工作专注 + +**及时沟通,不让问题称为大问题:** 我是一个 i 人,遇到问题了,尤其是因为我导致的问题,我害怕上报,害怕挨批,但是现在我不会再这样,我带着解决问题的心态,即使是不好的事情,也硬着头皮去反馈,和团队一起商量解决办法,因为不反馈只会让问题变成大问题, + +**数据驱动业务:** 也就是通过分析数据,来对产品进行优化,这样做需求都是有数据支撑, + +**敏捷开发:** 以前的时候是拿到需求就开始开发,开发中思考如何实现,现在我会看到需求立马就想这个需求是否有技术难点,需要谁配合,大概需要多少时间,这个需求是否要做,可以使用现有的工具实现吗?如果要做,会将需求拆解为更小的需求等等。并且开发中也是给一个需求建立一个独立的分支,这样能做到快速开发,快速上线,准切分析这个改动的影响 + +**遵守原则:** 在开发中,一定要遵守规定好的原则,例如:上线前要 code review,多人验收,上线收也要再次测试。在日常工作中要遵守,在处理紧急 bug 的时候,依然要遵守约定 + +**多独立思考,总结和反思自己的行为:** 当负责人这段时间,我每天记录自己当日的不足之处,如何改进,我通过每日的记录真的改变了很多 + +## 我的一些感悟 + +独立负责项目这段时间,我被批评过,也被表扬过,真的很累,但是还是要感谢有一个这样的平台,让我来尝试,真的是痛并快乐着,我觉得我从一个被动接收方变成了一个主动方,我现在无论是在生活上,还是再工作上,我都尽可能让自己处于主动方。虽然直到现在,我依然不太适应这种主动推动一些事情, 在做负责人最初一段时间,我真的走路洗澡都在想工作的事情,但是我想说,这是不健康的,要平衡工作和生活,我现在尽可能工作中保持高效率,准点下班,回来学习新的知识,例如: 冴羽的《next.js 小册》,神光的《nest.js 小册》,希望自己保持学习,保持进步 + +希望文章对你有所收获! diff --git a/posts/frontend-learn-line-1.mdx b/posts/frontend-learn-line-1.mdx new file mode 100644 index 0000000..13d0c5f --- /dev/null +++ b/posts/frontend-learn-line-1.mdx @@ -0,0 +1,65 @@ +--- +title: 一个普通三本如何自学成为前端开发者 +description: 一个很普通,周围环境不好的三本大学生,如何自学成为一个前端打工人 +tags: [三本大学生, 学习, 闲聊] +slug: frontend-learn-line-1 +author: luckySnail +# cover: +date: 2024-03-30 +--- + +# 背景 + +大家好,我是阿星,不知不觉已经成为前端开发工程师快三年了(加上实习),在上次的程序员鱼皮直播中,他分享了**前端学习路线**,我觉得我从中学到了不少。还发现我都没有真正系统的梳理一下我的前端学习路线,我的技术图谱。所以我就想趁着这个直播分享,也梳理一下我这三年来学习前端的过程和我个人理解中的前端, +下面我会分享: + +1. 我从接触前端到成为一个前端人的过程 +2. 然后我想分享一下我觉得在2024年如何快速入门前端,加入前端打工人的大家庭 +3. 然后我想分享我理解的后端如何快速入门前端 +4. 最后我想把我看到一些新人(刚接触前端)常问的问题做一个我理解的回复 + +# 我的自学前端之路 + +> 普通三本(黄河科技学院)大学生,成为前端程序员的过程。虽然经历无法复制,但可总结一些经验。 + +### 初识前端,确定做一名前端打工人 + +2021 年,我还是一名大三学生,学校开设了《HTML 5网页设计》这一个课程,我学完后就喜欢上了,这比我之前学习的 C++ 可好玩多了。**这门课快结束的时候,我们学校刚好统计未来计划表格**,考研还是工作?具体做什么行业?迷茫的我发现了我喜欢的《HTML 5网页设计》,还有对应的工作岗位“前端开发工程师”,于是我就填写了:前端工程师。我和大多数初学者一样,想过要报名一个培训班 。但是多方面考虑,**最终还是决定自学**。我就开始寻找一个好的课程,我先是在哔哩哔哩上找了一些,但是都有一个问题,就是不够系统,那我的目的是为了学完后能工作,所以我就尝试去 某宝和某鱼上寻找,果然,功夫不负有心人,我找到了,黑马的前端体系课程。这是当时课程的路线:[https://zhuanlan.zhihu.com/p/359288649](https://zhuanlan.zhihu.com/p/359288649) ,如果你是一个刚接触编程的新人,可能会找很久那个让你愿意学到底的课程,因为我就是这样。所以当时我真的想要报一个培训班,然后得到最新的教程 + 一个老师辅导我,而不是我随便找到的一个课程。**回头来看,其实只要目标明确 + 执行能力强,免费的就是足够了。** + +### 嘎嘎学,投递面试,痛苦实习生活 + +确定了要学习前端,确定了学习的内容,我就是开始学,那时候是真的喜欢前端;有一天**凌晨四点**我还在学习 JavaScript;还给我们工学部**免费做学院官网**,只会 html+css+js 的我写了好多个页面。虽然没有成功采纳,但是因此认识了我们工学部主任,他后面帮我解决了我学分不够的难题。果然,因果妙不可言(狗头)。 +当我学完前端三件套(pink 老师的视频)后,也快到暑假了,我在室友和自己的分析下,**大胆的投出了技术栈只有三件套的简历**,是的,就只会前端三件套,我收到了几个面试(所以那个时候行情真的好),毫无悬念的都挂了,但是我是很有收获的。我知道了我需要去学习一个前端框架。于是在暑假的时候,我学习了 Vue 并做了两个项目。可能没有在培训班快,但是也做到了。**这段时间也是我很焦虑的时候,因为我不知道我是否符合市场的需求**,没有任何人带我,没有什么可以询问的人(那时候要有编程导航星球该多好)。九月,我再次写简历,投递简历,每天背前端面试题(pink 老师推荐的),那段时间每天都很焦虑。我面试了四五家,拿到了 2 个 offfer,一个薪资高点,但是公司感觉不是很好,另一个就很正规,公司也很大(对当时的我来说)。算是满意拿到了 offer。 + +刚去实习,公司是 react 技术栈,领导让我学习 React, 当我学完后,我就和上级说我可以尝试工作了。但是没人管我,他们很忙,也不给我分配工作,我在很多老员工的不理解下主动找我的领导要需求。领导真的很好,给我分配需求,还耐心指导我,我真的很幸运!实习最初那会是很痛苦的,因为我要读老代码,代码和业务逻辑耦合的很深,没有什么文档和注释。我还因为问老员工一些代码问题被骂,现在来看,确实我的问题,**能百度的问题,一定不要问别人**, + +给大家看一下我学习阶段在 gitee 和 github 上传的代码,其实我有做很多项目,但是我觉得代码太不好了,所以就删掉了。这是黑马的课程实践 + +![](https://blog-1304565468.cos.ap-shanghai.myqcloud.com/work/40d00f40-7ff7-48ac-9d24-25ce075e81b3.png) + +21 年九月份我投递的简历是我自己使用所学技术写的(现在看不了一点) + +![](https://blog-1304565468.cos.ap-shanghai.myqcloud.com/work/ed552bea-147a-42ef-ab4c-1c0c61d3f195.png) + +## 持续学习 + +在工作一段时间后,我发现工作已经能够完全胜任,上班也很闲。于是我就开始学习一些其他技术。例如:coderwhy 的 webpack 课程,王沛的 react hooks 课程,coderwhy 的vue3课程。后面加入了编程导航知识星球,又自学了 微信小程序,做了自己的记账本:[https://articles.zsxq.com/id_olncmzwhm8xn.html](https://articles.zsxq.com/id_olncmzwhm8xn.html) ,学习了全栈框架 Next.js ,做了自己的 blog。我也会把我学习的一些知识,工作经验写成文章分享出来。**按照费曼学习法,输出就是最好的输入** + +## 总结 + +### 向着目标行动 + +我当时可能没有意识到我是在向着目标(找一个实习工作)行动,但是现在回看,我就是一直在向着目标前进。所以明确目标,然后制定计划,执行计划,就好了! + +### 找一个带着你的人(环境)也很重要 + +1. 绝大多数的人,都会受到环境的影响,所以选择所处的环境,就是选择自己要成为什么样的人。我在大三就是处于一个觉得自己马上毕业就失业的环境下,压力让我不得不做这些事情。 +2. 如果在你的成长路上,有一个带着你的人,那真的是超幸运!虽然知识是不变的,但是在学习成长的过程中每个人遇到的问题不一样。如果有一个带着你的人,他能够一眼看出问题,然后对症下药,还会防止你走偏,帮你节省很多时间,所以找一个这样人,是非常值得的 + +### 向每一个愿意努力进步的人说:“加油” + +我绝对是很笨的那种同学,吃了很多亏,才慢慢改变,成长的过程中,很幸运遇到很多有耐心,又愿意拉我一把的人,我真的感谢这些人。我能做到就是把这种精神传递出去,面对那些新入行的,有问题的人,我也要尽力帮助他们成长,因为他们就是之前的我! + +![](https://blog-1304565468.cos.ap-shanghai.myqcloud.com/work/68f07813-bb3b-4c07-9c82-d05d635acd15.png) + +下一期,我分享我理解的前端学习路线图。 diff --git a/posts/frontend-learn-line-2.mdx b/posts/frontend-learn-line-2.mdx new file mode 100644 index 0000000..d11a9d5 --- /dev/null +++ b/posts/frontend-learn-line-2.mdx @@ -0,0 +1,387 @@ +--- +title: 前端学习路线(自学版) +description: 一个普通三本大学生如何通过自学成为前端开发者的路径。文章针对环境不佳、资源有限的学生,提供了实用的学习建议和方法。内容涵盖了学习规划、技能培养、项目实践等方面,旨在帮助三本学生克服困难,实现职业目标。对于想要进入前端行业的三本学生来说,这是一篇富有启发性和指导意义的文章,为他们的学习之路提供了清晰的方向。 +tags: [三本大学生, 前端学习路线, 资源] +slug: frontend-learn-line-2 +author: luckySnail +# cover: +date: 2024-04-05 +--- + +建议先看下鱼皮的两个视频 + 如何学习技术文章: + +1. https://bcdh.yuque.com/staff-wpxfif/resource/rito86b49l53w1w2(前端 1 小时 - 1 小时 16 分钟) +2. https://www.bilibili.com/video/BV1nh411e7oG,超级详情的前端学习路线 +3. https://bcdh.yuque.com/staff-wpxfif/resource/nxkhhu +4. https://www.bilibili.com/video/BV1Ax4y1m72q + +下面分享一下,一个新人成为前端开发工程师的路线。**可以将学习前端开发类比为建造一座房子**。 + +> 课程特点:我会推荐视频教程和文字教程,这样无论是喜欢视频还是文字都可以无痛学习(我推荐在后面学习过程中渐渐转为文字教程) +> +> 学习目标: +> +> 1. 构建一个网站,并将其发布到网络上 +> 2. 写出一份好的简历,并找到满意的工作 + +## 搭建前端开发环境 + +工欲善其事,必先利其器。所以搭建一个好的开发环境能让学习更加高效 + +### 编辑器:(推荐 vscode) + +- **Visual Studio Code**:一款轻量级但功能强大的源代码编辑器,支持 Windows、macOS 和 Linux 平台。它内置了对 JavaScript、TypeScript 和 Node.js 的支持,并通过丰富的扩展生态系统支持更多语言和运行时环境。 +- **webStorm**:WebStorm 是由 JetBrains 开发的一款强大的商业化集成开发环境(IDE),专为现代 JavaScript生态系统设计,支持如 React、Angular 和 Vue.js 等前端框架和库。它提供了诸如代码自动完成、重构、强大的调试器以及与各种构建工具和版本控制系统的紧密集成等高级功能,以提升 Web 开发的效率和体验。 + +### 游览器:(推荐 chrome) + +- edge:微软的,基于 Chromium +- firefox:火狐 +- chrome:最推荐,谷歌的 + +### 代码版本控制工具 Git 和 代码托管平台 Github + +git 和 github 的关系,就像图书管理系统和图书馆,git 管理代码,GitHub 存储代码 +在真正开始写代码之前,我建议先把 Git 和 Github 了解一下, +学习 Git 基础,掌握版本控制的概念和基本操作 + +1. 视频教程:[https://www.bilibili.com/video/BV1HM411377j](https://www.bilibili.com/video/BV1HM411377j) +2. 文字教程:[https://www.bookstack.cn/read/git-tutorial/README.md](https://www.bookstack.cn/read/git-tutorial/README.md) + +使用GitHub进行代码托管和协作开发: + +1. 视频教程:[https://www.bilibili.com/video/BV1hS4y1S7wL](https://www.bilibili.com/video/BV1hS4y1S7wL) +2. 文字教程:[https://docs.github.com/zh/get-started](https://docs.github.com/zh/get-started) + +如果有时间最好看一下这两个教程: + +1. Linux 系统的登录工具 SSH:[https://wangdoc.com/ssh](https://wangdoc.com/bash/) +2. Linux 命令行 Bash 的基本用法和脚本编程:[https://wangdoc.com/bash](https://wangdoc.com/bash/) + +为什么要先学会使用 git 和 github 的原因是: +学习的过程就是一个不断写代码的过程,那么有一个工具帮你记录你写的所有代码,这不仅仅有利于找工作中,别人能快速看到你的代码提交记录,还能让你每天提交代码后,能清晰感受到自己的进步,满满的成就感。 + +## 前端三大基石 + +### HTML + +> 构建网页的结构。类比于建造房子的框架 + +- 视频教程:[https://www.bilibili.com/video/BV14J4114768/?vd_source=ce628a5bd43df277d141676215ef5ff3](https://www.bilibili.com/video/BV14J4114768/?vd_source=ce628a5bd43df277d141676215ef5ff3) +- 文章教程:[https://wangdoc.com/html/intro](https://wangdoc.com/html/intro) + +相关资源: + +1. MDN:[https://developer.mozilla.org/zh-CN/docs/Learn/HTML](https://developer.mozilla.org/zh-CN/docs/Learn/HTML) +2. 菜鸟教程 :[https://www.runoob.com/html/html-tutorial.html](https://www.runoob.com/html/html-tutorial.html) + +从基础标签开始学习,一定要多敲代码,对每个标签都有一些印象,如果在开发中遇到问题?那推荐使用 AI 工具进行询问,推荐 AI 工具如下,后面不再重复: + +1. 鱼聪明 AI:yucongming.com +2. devv.ai 更适合程序员的 AI 工具 +3. 通义千问(他还有对应的 vscode 和 webstorm 插件) + +### CSS + +> 网页样式设计,包括布局、颜色、字体等。类比于房子的内外装修 + +- 视频教程:[https://www.bilibili.com/video/BV14J4114768/?vd_source=ce628a5bd43df277d141676215ef5ff3](https://www.bilibili.com/video/BV14J4114768/?vd_source=ce628a5bd43df277d141676215ef5ff3) +- 文章教程:[https://www.runoob.com/css/css-tutorial.html](https://www.runoob.com/css/css-tutorial.html) + +相关资源: + +1. 一份 css 规范和代码风格指导:[https://github.com/chadluo/CSS-Guidelines](https://github.com/chadluo/CSS-Guidelines) + +css 其实还是很复杂的,学习过程中,不需要把所有都记住,只要留个印象就好,后面遇到了知道使用哪种属性实现即可 +如果你按照顺序学习完 HTML 和 CSS 后,那你可以稍作休息,检验一下是否真的掌握了这些知识,这里有两个任务: + +1. 像玩游戏一样通关 [freeCodeCamp](https://www.freecodecamp.org/chinese/learn)中【响应式网页设计认证】关卡 +2. 自己在不看视频教程的情况下,自己独立完成一个静态网站的开发(例如:仿京东 pc 端)。给大家看一下github star 很多的一个 纯 HTML + CSS 的网站:[https://github.com/codewithsadee/vcard-personal-portfolio](https://github.com/codewithsadee/vcard-personal-portfolio) + +完成这两个任务,我们要开始攀登第三座大山:JavaScript,也是编程语言排行榜常年前十的语言,有图为证: +![image.png](https://blog-1304565468.cos.ap-shanghai.myqcloud.com/work/1712209274764-46e152c3-7bd7-497f-bb94-0caafe488e14.png) + +### JavaScript + +> 实现网页交互的脚本语言,让网页“活起来”的魔法,类比于房子的电气和智能家居系统 + +- 视频教程:[https://www.bilibili.com/video/BV1Y84y1L7Nn](https://www.bilibili.com/video/BV1Y84y1L7Nn) +- 文章教程: + +1. 基础:[https://wangdoc.com/javascript/](https://wangdoc.com/javascript/) +2. es6:[https://es6.ruanyifeng.com/](https://es6.ruanyifeng.com/) + +相关资源: + +1. mdn 学习 JavaScript:[https://developer.mozilla.org/zh-CN/docs/Learn/JavaScript](https://developer.mozilla.org/zh-CN/docs/Learn/JavaScript) +2. freeCodeCamp JavaScript 通关:[https://www.freecodecamp.org/chinese/learn/javascript-algorithms-and-data-structures-v8/](https://www.freecodecamp.org/chinese/learn/javascript-algorithms-and-data-structures-v8/) + +JavaScript 是前端核心技术,所以一定要多敲代码练习。遇到问题可及时询问 AI,或者其他人。如果有时间可以看以下书籍,提高 JavaScript 水平(非必需): + +- JavaScript 高级程序设计 +- 你不知道的 JavaScript +- JavaScript 语言精粹 +- Eloquent JavaScript +- JavaScript 权威指南 + +当学习完前端三件套后,这时候可以把之前做的静态作品添加上一些事件,让网站“活”起来。这时候如果你真的使用原始的技术(HTML,CSS,JavaScript)来做网站开发,你会发现开发好慢,尤其是开发一个复杂的网站的时候那就更慢,并且代码不好维护。那这时候就迫切需要提高效率的框架,那接下来就可以学习一套框架,来感受框架的魅力。 + +## 现代前端开发 + +### 必备环境:包管理工具 + +在学习框架之前,需要先学习一下**包管理工具**的知识,例如:npm , yarn,pnpm 等等,要学习包的基本使用,包括安装、更新和管理依赖。学习过程中,你会发现你需要切换 node 版本 和 npm 镜像,推荐: + +- node 版本管理:[https://juejin.cn/post/7000652162950758431](https://juejin.cn/post/7000652162950758431?) +- npm 镜像源切换:[https://juejin.cn/post/7327937033321463820](https://juejin.cn/post/7327937033321463820) + +### 前端框架 + +#### Vue(推荐学习) + +学习 Vue 就学习 Vue3 就好,并且 Vue 2 也不再维护 + +- 视频教程:[https://www.bilibili.com/video/BV1Za4y1r7KE](https://www.bilibili.com/video/BV1Za4y1r7KE/) +- 文字教程:[https://cn.vuejs.org/](https://cn.vuejs.org/) +- 组件库推荐:element plus:[https://element-plus.org/zh-CN/](https://element-plus.org/zh-CN/) + +vue 我觉得官网就是最好的教程,也是最好的文档,没有之一,vue 更容易上手,推荐学习 Vue + +**vue 服务端框架学习(非必需):** + +nuxt:[https://nuxt.com.cn/](https://nuxt.com.cn/) + +有能力的请阅读英文文档:[https://nuxt.com/](https://nuxt.com/), + +因为文档更准确,是最新的 + +参考资源: + +1. Vue 源码学习:[https://juejin.cn/post/6925668019884523534](https://juejin.cn/post/6925668019884523534) +2. vue 社区两个大神: + +- 尤雨溪:[https://evanyou.me/](https://evanyou.me/) +- antfu:[https://antfu.me/](https://antfu.me/) + +#### React(目前大厂使用最多的) + +- 视频教程:[https://www.bilibili.com/video/BV1ZB4y1Z7o8](https://www.bilibili.com/video/BV1ZB4y1Z7o8) +- 文字教程:[https://react.docschina.org/](https://react.docschina.org/) +- 组件库推荐:ant-design:[https://ant.design/index-cn](https://ant.design/index-cn) + +新官方文档是 dan 大神重新写的,非常好,有条件的看英文版:[https://react.dev/](https://react.dev/) + +**react 服务端框架:** + +Next.js:[https://www.nextjs.cn/](https://www.nextjs.cn/) , + +有能力请阅读英文文档:[https://nextjs.org/](https://nextjs.org/) + +**参考资源** + +1. 阮一峰的 React 体系教程:[https://www.ruanyifeng.com/blog/2016/09/react-technology-stack.html](https://www.ruanyifeng.com/blog/2016/09/react-technology-stack.html) +2. 极客时间 React hooks 课程:[https://time.geekbang.org/column/intro/100079901](https://time.geekbang.org/column/intro/100079901) +3. dan 神:[https://overreacted.io/](https://overreacted.io/) + +无论学习 Vue 还是 React ,学完后,都应该使用对应技术完成一个单页面应用,例如搭建自己的 blog,然后发布到互联网,哦对了,发布到互联网,并作为简历的个人项目。可以参考以下文章和视频教程: + +1. [https://www.bilibili.com/video/BV1rU4y1J785/](https://www.bilibili.com/video/BV1rU4y1J785/) +2. [https://www.bilibili.com/video/BV1uK411p7Bp](https://www.bilibili.com/video/BV1uK411p7Bp) +3. [https://zhuanlan.zhihu.com/p/554519860](https://zhuanlan.zhihu.com/p/554519860) + +### 构建工具和 CSS 预处理工具 + +#### 构建工具 + +**webpack(推荐学习)** + +- 视频教程:[https://www.bilibili.com/video/BV14T4y1z7sw](https://www.bilibili.com/video/BV14T4y1z7sw) +- 文字教程:[https://webpack.wuhaolin.cn/](https://webpack.wuhaolin.cn/) +- webpack 官网:[https://webpack.js.org/](https://webpack.js.org/) +- 阮一峰的 webpack demo 代码:[https://github.com/ruanyf/webpack-demos](https://github.com/ruanyf/webpack-demos) + +**vite** + +- 视频教程:[https://www.bilibili.com/video/BV1Kd4y147gg](https://www.bilibili.com/video/BV1Kd4y147gg) +- 文字教程:[https://cn.vitejs.dev/guide/](https://cn.vitejs.dev/guide/) + +vite 是新一代打包工具,更快更简单,目前 vite 底层打包依赖于 gulp(打包工具),所以了解一下 gulp 对使用 vite 有帮助 +学习目标:从 0 到 1 使用构建工具来打包发布一个项目,例如:写一个自己的脚手架,写一个自己 npm 包等等 + +#### CSS 预处理工具 + +**less** + +- 视频课程:[https://www.bilibili.com/video/BV1i54y1U7zY](https://www.bilibili.com/video/BV1i54y1U7zY) +- 文字教程:[https://juejin.cn/post/6844903520441729037](https://juejin.cn/post/6844903520441729037) +- 官网:[https://lesscss.org/](https://lesscss.org/) + +**sass** + +- 视频课程:[https://www.bilibili.com/video/BV1n94y1o7yS](https://www.bilibili.com/video/BV1n94y1o7yS) + +学习课程的以下章 +![image.png](https://blog-1304565468.cos.ap-shanghai.myqcloud.com/work/1712277838646-62c94120-fcc5-43f8-b12e-01474f55f221.png) + +- 文字教程:[https://www.ruanyifeng.com/blog/2012/06/sass.html](https://www.ruanyifeng.com/blog/2012/06/sass.html) +- 官网:[https://sass-lang.com/](https://sass-lang.com/) + +学习目标:使用预处理语言来重构项目,提高 css 编写效率 + +## 进阶学习 + +在前面学习中,你肯定会发现你有些知识没了解,例如:typescript,node.js,eslint,prettier 等等;这写知识现在也很重要,是开发大型项目必备的技能,接下来让我们开始吧! + +### TypeScript + +- 视频教程:[https://www.bilibili.com/video/BV1Xy4y1v7S2/](https://www.bilibili.com/video/BV1Xy4y1v7S2/) +- 文字教程:[https://wangdoc.com/typescript/](https://wangdoc.com/typescript/) + +参考资料 + +1. 冴羽老师的 ts 课程:[https://ts.yayujs.com/](https://ts.yayujs.com/) +2. ts 入门教程:[https://ts.xcatliu.com/](https://ts.xcatliu.com/) + +学习目标:将项目使用 ts 进行重构 + +### Node.js + +- 视频教程:[https://www.bilibili.com/video/BV1gM411W7ex](https://www.bilibili.com/video/BV1gM411W7ex) + +- 文字教程:[https://developer.mozilla.org/zh-CN/docs/Learn/Server-side/Express_Nodejs/Introduction](https://developer.mozilla.org/zh-CN/docs/Learn/Server-side/Express_Nodejs/Introduction) + +参考: + +1. 阮一峰的 node 教程(未完结):[https://github.com/wangdoc/nodejs-tutorial](https://github.com/wangdoc/nodejs-tutorial) +2. node 极简教程:[https://www.yuque.com/sunluyong/node](https://www.yuque.com/sunluyong/node) + +学习目标:写一个自己的脚手架,使用 node-puppeteer 来完成一些工作 + +### css 框架 + +- tailwind css:[https://tailwindcss.com/](https://tailwindcss.com/)(实用优先的 CSS 框架) + +- Bootstrap:[https://getbootstrap.com/](https://getbootstrap.com/)(前端开发框架,旨在确保网站应用具有响应性和移动友好性) + +选择使用 Tailwind CSS 还是 Bootstrap 取决于项目需求和开发经验。Tailwind CSS 适合需要高度定制和独特样式的项目,而 Bootstrap 适合需要快速开发和标准化的项目。我们可以根据项目要求和团队特点选择最适合的框架。 +学习目标:使用 CSS 框架简化样式编程,提高页面搭建效率 + +### 小程序开发 + +这里我就默认指:微信小程序,那无论是哪个技术栈都需要过一遍微信官方的小程序文档:[https://developers.weixin.qq.com/miniprogram/dev/framework/](https://developers.weixin.qq.com/miniprogram/dev/framework/) + +vue 技术栈:原生就是和 vue 很像 + +- 视频教程:[https://www.bilibili.com/video/BV1oy4y1j75s/](https://www.bilibili.com/video/BV1oy4y1j75s/) + +- 文字教程:[https://zh.uniapp.dcloud.io/resource.html](https://zh.uniapp.dcloud.io/resource.html) + +参考资料 + +1. [https://juejin.cn/post/6899642866693423111](https://juejin.cn/post/6899642866693423111) + +React 技术栈:Taro,大型小程序开发这是使用这个框架 + +- 视频教程:[https://www.bilibili.com/video/BV1vM4m1R7K3](https://www.bilibili.com/video/BV1vM4m1R7K3) + +- 文字教程:[https://docs.taro.zone/docs/](https://docs.taro.zone/docs/) + +学习目标:做一个自己的微信小程序,并且上线微信小程序 + +### 设计模式 + +了解常见的设计模式能够写出更好,更容易维护的代码 +参考资料: + +1. [https://juejin.cn/post/7306459858127732786](https://juejin.cn/post/7306459858127732786) +2. [https://juejin.cn/post/7211026540129157180](https://juejin.cn/post/7211026540129157180?searchId=202404052042051D322D827F9941B696E5) +3. [https://github.com/lxj/javascript.patterns](https://github.com/lxj/javascript.patterns) + +### 前端工程化 + +#### 代码质量工具(ESLint、Prettier,SonarLint) + +eslint + +- 视频教程:[https://www.bilibili.com/video/BV183411r7YK](https://www.bilibili.com/video/BV183411r7YK) + +- 文字教程:[https://juejin.cn/post/6990929456382607374](https://juejin.cn/post/6990929456382607374) + +- 官网:[https://eslint.org/](https://eslint.org/) + +prettier + +- 视频教程:[https://www.bilibili.com/video/BV183411r7YK](https://www.bilibili.com/video/BV183411r7YK) + +- 文字教程:[https://juejin.cn/post/6990929456382607374](https://juejin.cn/post/6990929456382607374) + +- 官网:[https://prettier.io/](https://prettier.io/) + +SonarLint + +非必需,我觉得很有帮助,一个能实时检测并高亮代码中的错误、漏洞和代码异味,帮助开发者提升代码质量。 +学习目标:给项目添加 ESLint + Prettier 让项目保持统一的代码风格 + +#### 前端性能优化 + +- 视频教程:[https://www.bilibili.com/video/BV1Xy4y1f7gv](https://www.bilibili.com/video/BV1Xy4y1f7gv) + +- 文字教程:[https://godbasin.github.io/front-end-playground/front-end-basic/performance/front-end-performance-optimization.html](https://godbasin.github.io/front-end-playground/front-end-basic/performance/front-end-performance-optimization.html) + +这里我也没有实践,从互联网找到了我觉得我未来会学习的资源,如果你有好的资源,感谢反馈 +参考资料: + +1. 入门前端工程:[https://woai3c.github.io/introduction-to-front-end-engineering/](https://woai3c.github.io/introduction-to-front-end-engineering/) + +## 实战 & 参与社区开源 + +### 个人项目 + +- blog +- 其他 + +目标:做一个(多个)自己的项目,并且上线,写到自己的简历上 + +### 社区 + +- 给开源仓库提交 pr +- 发布文章到 掘金,思否,51CTO ,CSDN 等等 + +如果给知名开源仓库贡献代码,还可以写到简历上 + +## 自学(新人)可能会遇到的问题? + +在我的自学中,曾经遇到了很多问题 + +### HTML CSS 属性那么多记不住怎么办?前面学后面忘记怎么办? + +前面学,后面忘记,是很正常的,那其实在最初学习的时候,就是要多写代码,留下相对深的印象,在使用的时候查询文档或者询问 AI 即可,不要说刚学习,即使一线前端开发,没有搜索引擎也是寸步难行(至少我是这样) + +### 学习一段时间后没有热情怎么办? + +创造一些有成就感的事情,记录,输出式的学习,学习本身是正反馈很少的,需要我们主动创建一些正反馈机制,那学习就会和打游戏一样快乐 + +### 遇到 bug 怎么办?学习遇到卡点怎么办? + +1. 询问 Google +2. 询问 AI +3. 加入一些社区,例如编程导航知识星球,询问有前端经验的人 + +### JavaScript 需要深入吗? + +需要,但是一口吃不吃胖子,我觉得我 JavaScript 能力一般,如今框架为主的生态,JavaScript 即使能力一般,也能胜任日常工作。分享一个大佬的学习技术方法:“学会这门技术的基础,然后做一个项目,然后写一份对应工作的简历,入职后带薪学习”,我是认同的,因为工作会遇到很多场景,对技术提升是最快的,而且有压力,不得不学 + +### 如何准备面试 + +目前我理解的面试就是销售自己,那就是需要包装,需要渲染,让面试官觉得,我靠这个人我必须留下来,那面试前疯狂背八股文,刷算法,面试题等等都是需要的,面试和工作是两个事情 +参考资料: + +1. 程序员鱼皮的保姆级教程:[https://bcdh.yuque.com/staff-wpxfif/resource/yvtiza4dmgumk3dt](https://bcdh.yuque.com/staff-wpxfif/resource/yvtiza4dmgumk3dt) +2. 阮一峰的如何写一份有效技术简历:[https://www.ruanyifeng.com/blog/2020/01/technical-resume.html](https://www.ruanyifeng.com/blog/2020/01/technical-resume.html) +3. 简历的本质:[https://github.com/Wscats/CV](https://github.com/Wscats/CV) + +# 后端如何快速入门前端? + +我询问了我的后端搭档 松柏,问他如何快速入门前端,他的回答是: +![image.png](https://blog-1304565468.cos.ap-shanghai.myqcloud.com/work/1712319445460-c4d36cd7-3fab-4fdb-8895-d098aa0b5a50.png) +我非常赞同,后端本身有编程基础,再学习一门语言是相对简单的,那前端 html + css 都是很简单的,JavaScript 又不是问题,那要学习的就是一个框架语言了,Vue 官方文档写的那么好,还有什么好说的呢! diff --git a/posts/github-copilot-chat-use.mdx b/posts/github-copilot-chat-use.mdx new file mode 100644 index 0000000..97dbd7d --- /dev/null +++ b/posts/github-copilot-chat-use.mdx @@ -0,0 +1,90 @@ +--- +title: GitHub copilot chat 体验 +description: 如何购买并使用 github copilot chat +tags: [github copilot, AI, 提效] +slug: github-copilot-chat-use +author: luckySnail +date: 2023-05-27 +--- + +> 最近,看到很多大佬分享 GitHub copilot chat ,据说能够让效率翻倍,抱着不相信,打假的心态我也弄一个,体验一下,结果真的很赞,下面分享使用 GitHub copilot chat 的过程 + +首先,我们需要先了解一下 GitHub copilot chat 是一个什么东西,GitHub Copilot 是一个AI驱动的代码完成工具,由 OpenAI 和 GitHub 联合开发。它利用机器学习模型预测和生成代码,帮助开发者快速编写代码。而GitHub Copilot Chat 则是 GitHub Copilot 的扩展,它将 AI 编程助手融入到对话中,帮助解答编程问题,提供代码示例,甚至可以对代码进行审查和修正。这两种工具都是开发者的有效助手,帮助提升编程效率和代码质量。下面,我们需要做这几件事情👇🏻👇🏻 + +1. 你必须购买了 GitHub copilot ,因为 chat 是基于它的,这个大家可以和我一样去某宝搜索,很便宜(一杯奶茶),我相信这绝对是你2023最具性价比的投资 +2. 当你购买成功后,就可以去 VSCode 左下角登录一下你购买服务的账号,然后在插件下载中心下载 GitHub copilot ,体验一下 GitHub copilot 的能力(我的代码产出 = chatGPT + GitHub Copilot), + +![image-20230527153837751](https://blog-1304565468.cos.ap-shanghai.myqcloud.com/work/0e2321fa391947f08eca30fb454ad0f2~tplv-k3u1fbpfcp-zoom-in-crop-mark:1512:0:0:0.awebp) + +3. 申请加入 waitlist :[github.com/github-copi…](https://link.juejin.cn/?target=https%3A%2F%2Fgithub.amrom.workers.dev%2Fgithub-copilot%2Fchat_waitlist_signup%2Fjoin 'https://github.com/github-copilot/chat_waitlist_signup/join') 当你加入 list 后,你再次进入这个网址你可以看到 👇🏻 还有,关注你留的邮箱,通过后会通过邮箱提醒你(很快,最多两个工作日) + +![image-20230527154016617](https://blog-1304565468.cos.ap-shanghai.myqcloud.com/work/11d6150b33d54e68a5557850ed598472~tplv-k3u1fbpfcp-zoom-in-crop-mark:1512:0:0:0.awebp) + +4. 下载我们的 VSCode insiders,因为只有在这里才能体验(坑了我好多时间):[code.visualstudio.com/insiders/](https://link.juejin.cn/?target=https%3A%2F%2Fcode.visualstudio.com%2Finsiders%2F 'https://code.visualstudio.com/insiders/') + +![image-20230527154108314](https://blog-1304565468.cos.ap-shanghai.myqcloud.com/work/d0d0d5b57921408eb29cf35066e8d044~tplv-k3u1fbpfcp-zoom-in-crop-mark:1512:0:0:0.awebp) + +5. 在我们刚刚下载的VSCode insiders中 下载一个插件GitHub Copilot Nightly:[marketplace.visualstudio.com/items?itemN…](https://link.juejin.cn/?target=https%3A%2F%2Fmarketplace.visualstudio.com%2Fitems%3FitemName%3DGitHub.copilot-nightly 'https://marketplace.visualstudio.com/items?itemName=GitHub.copilot-nightly') 你会看到 👇🏻 + +![image-20230527154215438](https://blog-1304565468.cos.ap-shanghai.myqcloud.com/work/6a704acc906e4edab6e59cc20a53aaa1~tplv-k3u1fbpfcp-zoom-in-crop-mark:1512:0:0:0.awebp) + +如果没有看到,不要慌,先看下自己编辑器是否登录上了 GitHub ,看下右下角的弹窗是不是有一个 GitHub copilot chat 的提示让你登录 GitHub,如果这两个都完成了,重启一下,应该就能看到我们心心念念的 chat页面了 + +### 体验 AI 的强大 + +先看下,官方对它的定位,是这样描述的:我是你的副驾驶,我是来帮你更快完成任务的。我可以识别问题,解释甚至改进代码。您可以问一些一般性的问题,但我真正擅长的是帮助您编写代码。例如: + +- 为我的代码生成单元测试 +- 解释选定的代码 +- 建议,修复我代码中的错误 + +如果你想了解更多关于我的能力和局限性,请查看副驾驶文档:[docs.github.com/en/early-ac…](https://link.juejin.cn/?target=https%3A%2F%2Fdocs.github.com%2Fen%2Fearly-access%2Fcopilot%2Fgithub-copilot-chat-transparency-note%25E3%2580%2582%25E6%259C%2580%25E5%2590%258E%25E5%25AE%2583%25E8%25BF%2598%25E9%25B8%25A1%25E8%25B4%25BC%25E7%259A%2584%25E8%25BF%259B%25E8%25A1%258C%25E4%25BA%2586%25E7%2594%25A9%25E9%2594%2585%25EF%25BC%258C%25E6%2588%2591%25E6%2598%25AF%25E7%2594%25B1%25E4%25BA%25BA%25E5%25B7%25A5%25E6%2599%25BA%25E8%2583%25BD%25E9%25A9%25B1%25E5%258A%25A8%25E7%259A%2584%25EF%25BC%258C%25E6%2589%2580%25E4%25BB%25A5%25E6%2584%258F%25E5%25A4%2596%25E5%2592%258C%25E9%2594%2599%25E8%25AF%25AF%25E6%2598%25AF%25E5%258F%25AF%25E8%2583%25BD%25E7%259A%2584%25E3%2580%2582%25E4%25B8%258D%25E8%25BF%2587%25E4%25B9%259F%25E7%25BB%2599%25E6%2588%2591%25E4%25BB%25AC%25E7%25A8%258B%25E5%25BA%258F%25E5%2591%2598%25E4%25B8%2580%25E7%2582%25B9%25E9%259D%25A2%25E5%25AD%2590%25EF%25BC%258C%25E8%25A6%2581%25E6%2598%25AF%25E4%25B8%258D%25E5%2587%25BA%25E9%2594%2599%25EF%25BC%258C%25E9%2582%25A3%25E7%25A8%258B%25E5%25BA%258F%25E5%2591%2598%25E4%25B8%258D%25E6%2598%25AF%25E8%25A6%2581%25E6%25B6%2588%25E5%25A4%25B1%25E4%25BA%2586%25E6%2598%25AF%25E5%2590%25A7%25EF%25BC%258C%25E6%2588%2591%25E4%25BB%25AC%25E4%25B8%2580%25E4%25B8%25AA%25E4%25B8%2580%25E4%25B8%25AA%25E5%258A%259F%25E8%2583%25BD%25E6%259D%25A5%25E4%25BD%2593%25E9%25AA%258C 'https://docs.github.com/en/early-access/copilot/github-copilot-chat-transparency-note%E3%80%82%E6%9C%80%E5%90%8E%E5%AE%83%E8%BF%98%E9%B8%A1%E8%B4%BC%E7%9A%84%E8%BF%9B%E8%A1%8C%E4%BA%86%E7%94%A9%E9%94%85%EF%BC%8C%E6%88%91%E6%98%AF%E7%94%B1%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD%E9%A9%B1%E5%8A%A8%E7%9A%84%EF%BC%8C%E6%89%80%E4%BB%A5%E6%84%8F%E5%A4%96%E5%92%8C%E9%94%99%E8%AF%AF%E6%98%AF%E5%8F%AF%E8%83%BD%E7%9A%84%E3%80%82%E4%B8%8D%E8%BF%87%E4%B9%9F%E7%BB%99%E6%88%91%E4%BB%AC%E7%A8%8B%E5%BA%8F%E5%91%98%E4%B8%80%E7%82%B9%E9%9D%A2%E5%AD%90%EF%BC%8C%E8%A6%81%E6%98%AF%E4%B8%8D%E5%87%BA%E9%94%99%EF%BC%8C%E9%82%A3%E7%A8%8B%E5%BA%8F%E5%91%98%E4%B8%8D%E6%98%AF%E8%A6%81%E6%B6%88%E5%A4%B1%E4%BA%86%E6%98%AF%E5%90%A7%EF%BC%8C%E6%88%91%E4%BB%AC%E4%B8%80%E4%B8%AA%E4%B8%80%E4%B8%AA%E5%8A%9F%E8%83%BD%E6%9D%A5%E4%BD%93%E9%AA%8C') + +#### 为我的代码生成单元测试 + +我先选中左侧我的函数,然后使用 `command + i` (windows 是`ctrl + i`) + +![image-20230527163056394](https://blog-1304565468.cos.ap-shanghai.myqcloud.com/work/8eccc03291034d9c90d299db0e0dd4b1~tplv-k3u1fbpfcp-zoom-in-crop-mark:1512:0:0:0.awebp) + +这里我的 prompt 是 `/test Generate tests for the selectd code with Mocha` 这里有两个注意事项, + +1. 我使用了 GitHub copilot chat 提供的 `/test` 关键字,用于生成单元测试代码 +2. 我在末尾添加了 生成的测试代码使用的框架 `Mocha` + +我们可以看到右侧就为我们生成了对应的单元测试代码,这里我们没有安装对应的单元测试库,所以就报错了,兄弟们,帮我看看它写的对不对?(我觉得应该是靠谱的) + +#### 解释选定的代码 + +> 逐步解释选中代码的原理 + +我依然使用 `command + i` 然后 prompt 就是它提供的 `/explain` + +![image-20230527163742419](https://blog-1304565468.cos.ap-shanghai.myqcloud.com/work/dff6542715f949fb9efe07bf1f1b5278~tplv-k3u1fbpfcp-zoom-in-crop-mark:1512:0:0:0.awebp) + +#### 建议,修复我代码中的错误 + +错误代码:![image-20230527164206558](https://blog-1304565468.cos.ap-shanghai.myqcloud.com/work/5de26d0b720840659ad1be129c95cbcc~tplv-k3u1fbpfcp-zoom-in-crop-mark:1512:0:0:0.awebp) + +这里,如果执行的话,会发现它并没有检测出来 hooks 写法的错误,这也很好理解,因为它不知道这段代码的上下文,我这样写 prompt 后,就好了 + +![image-20230527164355663](https://blog-1304565468.cos.ap-shanghai.myqcloud.com/work/ee569b4f76f94547807371d94b4c5247~tplv-k3u1fbpfcp-zoom-in-crop-mark:1512:0:0:0.awebp) + +### 其他功能 + +1. `/ ext` :询问`VS Code`扩展开发。 +2. `/fix:`修复针对所选代码中的问题提出修复建议。 +3. `/help :`帮助关于 GitHub Copilot 的一般帮助 +4. `/vscode:`关于 VSCode 的问题 +5. `/clear:`清空当前会话 + +### 使用体验总结 + +1. 在左侧聊天的时候,它真的太懂程序员的懒了,它会自动预测下一个问题?这真的很智能 +2. 它最大的好处就是和编辑器完美融合,使用体验非常 nice,以后再也不用切换了 +3. 当我们在读一些源码的时候,我觉得 `/explain`真的太强大了吧,以后再也不怕看源码了 +4. 把它放在编辑器中,不代表它不能做其他事情,你完全可以把它当做一个chatGPT 3.5来用,嗯??那以后上班玩 chatGPT 再也不怕被发现了, +5. 当我们写完代码后,如果有很复杂的业务逻辑,很可能有一些没有测试出的 bug,我们可以直接选中代码去询问:“这段代码有什么改进的地方吗?”,“这段代码需要重构吗?” +6. 我现在,当我们把我们的工作流程化了,我们完全可以使用 AI 来帮我们完成任务,例如:我们最常写的crud,如果代码够通用,我们写新的 crud 是不是就完全可以交给 AI,不像我们自己写,还有可能 复制粘贴错误 +7. 我们还可以问它我们在实现一些之前没有实现过的场景,怎么做,让我们写出更加健壮,可读性强的代码,因为我觉得它在学习了 GitHub 上那么多优秀的开源库后,它提供的基本上都是最佳实践,我们只需要写出更好的 prompt 即可 + +最后,我还发现了一个宝藏,那就是 `GitHub Copilot Voice` :,我已经加入waitlist,以后写代码,可能都不需要键盘了,这真的泰裤辣! diff --git a/posts/mid-year-2024.mdx b/posts/mid-year-2024.mdx new file mode 100644 index 0000000..cf0914c --- /dev/null +++ b/posts/mid-year-2024.mdx @@ -0,0 +1,57 @@ +--- +title: 2024 年中总结 +description: 分享 2024 年的目标,现在的实现进度。反思这半年的工作,以及对 2024 年下边年的 flag。 +tags: [2024, 年中总结, 未来规划, luckySnail] +slug: mid-year-2024 +author: luckySnail +# cover: +date: 2024-06-08 +--- + +不知道你是否察觉到 2024 年已经过去了半年,大家年初立下的 flag 进展又怎么样了呢? +大家好,我是阿星,一个快正式工作两年的前端打工人。 + +## 我的 2024 目标 + +2023 年末尾的时候,我立下了这些 flag +![image.png](https://blog-1304565468.cos.ap-shanghai.myqcloud.com/work/1717853833519-ef8b1a49-a986-4577-ad36-bf9d9afd4a33.png) + +## 目前进展 + +到今天为止,这些要做的事情完成进度是没有到 50% 的。简单回顾一下 2024 上半年,我做了如下事情: + +1. 开始了 React 源码学习,进度 20 % +2. 开始系统学习 Next.js ,入手了冴羽的《Next.js 开发指南》,写的很不错,两个实战项目,让我对 Next.js 有了更深的认识 +3. 读完了一本书《代码整洁之道 - 程序员的职业素养》。在读的有很多,例如:《代码整洁之道 - clear code》,《沉默的大多数》,《搞定 - 无压工作的艺术》等等 +4. 工作中,我会更多思考并实践通过技术解决问题,我有更多的测试流程,更加有主人翁意识,换位思考能力,能主动推动工作等等 +5. 生活上,我在准备去一场演唱会。已经去了新的城市宁波游玩,去了南塘古镇,买了好吃的麻花,拍了照片留作记录 +6. 开始写文章记录工作,记录学习,记录生活。并且有一点点粉丝了,是一个很好的开端 + +那这半年的旅途,我成长了很多,但是也有做的不好的地方。 + +## 对这半年的反思 + +我想了我这半年的犯错,在接下来的半年中我需要的改进如下: + +1. **更加理解业务**:努力工作,工作中多思考,准确理解需求和需求背后的价值,把老板给我的工作做好, +2. **更加注重细节**:我觉得我工作是不是表现的好的关键就是这里了,我会接下来更多的注重产品交付的流程,不断改进我的测试和产品交付 SOP,保证产品不出现不应该的失误 +3. **更加有 owner 意识,做一个值得信任的好同事**:这个很难,但是我现在开始埋下种子,那么终有一天它会生根发芽,我需要从时间管理,质量意识,知识储备,产品思维,沟通能力,主动反馈等方面来提升 +4. **优化我的开发工作流**:记录每天工作的时间花费,看看自己的时间是花在了哪里?分析工作中哪个环节还可以更加高效。 + +## 对年末的预期 + +那我接下来就要对我年末进行量化目标 + +1. 好好工作,争取接下来的半年 需求完成率 99% + ,线上 bug 不超过 5 个, 不犯低级的错误 +2. 完成 React 源码学习,实现 snailRun 版本的 mini-react +3. 完成 Next.js 的系统学习,从 0 - 1 开发完成自己的 blog,这样更加有动力写文章 +4. 微信公众号 每周至少 2 篇文章,希望更多人关注我 +5. 开始简单的尝试视频分析一些技术,费曼学习法来巩固自己的学习 +6. 提升自己的软技能,做一个更加让队友放心的好同事 +7. 读完 4 本书籍 +8. 看一场演唱会,或者音乐节现场吧! + +## 一起进步吧! + +如果你还没有目标,或者,你年初的目标和我一样还没有完成一半,那也写一个文章记录下来,来梳理自己接下来应该如何做才能完成自己目标,我们一起学习进步吧!如果你超预期完成目标,那你真的太棒了! +最后,flag 已经立下,年末我来交作业, diff --git a/posts/mid-year-summary-2023.mdx b/posts/mid-year-summary-2023.mdx new file mode 100644 index 0000000..ace99dc --- /dev/null +++ b/posts/mid-year-summary-2023.mdx @@ -0,0 +1,67 @@ +--- +title: 2023 年中终结 +description: 一个普通毕业一年半的前端程序员,分析自己的现状,规划自己未来目标, +tags: [年中总结, 规划, 2023, 杂谈, luckySnail] +slug: mid-year-summary-2023 +author: luckySnail +# cover: +date: 2023-06-17 +--- + +## 我也想成为 不高兴就喝水口 中的前 10% + +![](https://blog-1304565468.cos.ap-shanghai.myqcloud.com/work/640.png) + +从我的老板和水哥的聊天中,水哥说了一个很接地气的理论,如果能够成为行业的前 10% ,一定不会太差。我是很认同的,确实不能再每天都当 NPC ,随波逐流了,那行业前10%前提怎么实现呢?从我现在来看我觉得是非常难的,原因有: + +1. 我目前的学历和能力都很普通,没有在大厂工作的经历 + +2. 社会压力很大,人们都在奋斗,互联网行业也不再像之前那样充满活力 + +3. 我常常会被短暂的激情所驱使,情绪容易波动,难以保持专注 + +4. 不可否认,现在有很多诱惑,比如抖音等社交媒体,总是把我时间偷走 + +5. 也没有什么抱负,没有很强的事业心那种,希望自己能够把生活过的不错就满意了 + +。。。 总之 ,我就是一个知道很多,但是缺少行动力的人,但是,我身边人都很优秀啊,环境对绝大多数的人的影响都是很大的,我这样认为,我有一个不能再优秀的老板,有每天都打鸡血似的小 y,还有太多优秀的人被我看见,希望自己能平视这些优秀的伙伴,看了很多道理,听了很多故事,我想我需要规划一下自己,彻底的,客观的直视自己,总结一下上半年,规划一下 下半年 和 自己的未来,总不能一直被推着走, + +![](https://blog-1304565468.cos.ap-shanghai.myqcloud.com/work/640-20240731232635847.png) + +这是我在年初定的目标,其实是完全没有做到的,但是这半年我也有改变,找到了真正喜欢的工作,真的很幸运,也让我更加相信行动的重要性,我只需要努力去做,结果交给时间。 + +在上半年,我有段时间是在每天学习的,每天写新的技术笔记,很不幸,和每次都一样,没能坚持,也让我更加坚信,行动是需要动力的,生活是需要鼓励和鸡汤的, + +![](https://blog-1304565468.cos.ap-shanghai.myqcloud.com/work/640-20240731232639917.png) + +这是我的 github 近期,语雀也差不多,取得了一些令人鼓舞的成就和努力。我成功考取了驾照,并找到了梦寐以求的工作。同时,我还学习了一些新技术,并且自己搭建了一个简单的博客系统。虽然目前还有一些功能需要完善,无法上线,但我对自己的进展感到满意。此外,我还致力于学习各种技术,并对自己的技术栈进行了总结,以便了解自己的优势和需要进一步学习的领域。在工作和生活之间,我也思考了平衡的问题,并正在努力探索高效工作和快乐生活的方法。 + +回顾2023年上半年,虽然我没有完全实现年初设定的目标,但我并不气馁,因为2023年还有下半年的时间。我将继续加油努力⛽️,努力把 flag 都变成现实,我觉得无论是摆烂还是积极努力,都是最好的我,都是为了更好的整理自己继续前进。如果你觉得我说的对,那给我点个赞可以吗,这对我真的很重要。 + +进入 2023 年下半年,我将全力以赴工作和生活,减少懒散,多做有意义的事情。以下是我的具体目标: + +1. 深入学习React源码,提升技术水平,增强解决问题的能力和从容应对 bug 的能力 + +2. 写文章,**「每周」**至少一偏纯技术学习笔记,学习并记录下来,希望通过分享简单易懂的文字,提高自己的写作能力,编程能力和思维能力 + +3. **「每周」**至少运动一次,跑步,羽毛球等等,健康和钱 ,我全都要 🐶 + +4. 努力工作,认真工作,让自己成为一个成熟的打工人,不拖后腿,如果能产生更多价值,那就更好了 + +5. 快乐生活,简单大方,希望自己能够落落大方,对待任何事情和人,提高自己情绪的稳定性 + +6. 希望能够找到一个合适的伴侣。 + +7. 希望自己能开启自己的自媒体的路,其实我也很喜欢分享和开源,所以记录下我的成长不会是我的负担, + +8. 做自己的博客网站,并开源,并写详细的实现过程,做一个自己的原创项目 + +9. 我有两个榜样,一个是冴羽,一个是鱼皮,希望能从他们身上学到更多,并将其转化为自己的收获。 + +这里,我分享一下 冴羽 的微信付费文章,真的不错,是我 2023 前五的对自己的投资,从如何建立信念,培养自尊,刺激去行动,如何更好的去行动,如何寻找目标,如何更好的管理自己的精力,到近期的如何更好的管理自己,每一篇都是精华,给大家看下我的阅读笔记 + +![](https://blog-1304565468.cos.ap-shanghai.myqcloud.com/work/640-20240731232644348.png) + +最后,我自身总结发现,如果想要去做一件事情并且坚持下来,是需要自己给自己的行为赋予意义的,也可以说是自己给自己画饼,只有自己和这个目标产生吸引力,才能产生动力,才能产生行为,才能产生结果。至于是什么结果,我觉得应该不会太差。这也是我最近学习到的 吸引力法则,动力本身就应该源于自己,不是源于我自己的动力产生的行为,在我身上都没有坚持下来,不知道大家是不是这样。 + +半年总结活动还在进行,希望看到更多人对自己的思考,并分享出来,写下来,大家互相学习,一起进步。 diff --git a/posts/react-drag-drop-demo.mdx b/posts/react-drag-drop-demo.mdx new file mode 100644 index 0000000..311f99c --- /dev/null +++ b/posts/react-drag-drop-demo.mdx @@ -0,0 +1,62 @@ +--- +title: React最简版本低代码实现 +description: 如何使用 React 通过拖拉拽实现一个页面,通过这篇文章,来了解实现思路 +tags: [低代码, React] +slug: react-drag-drop-demo +author: luckySnail +# cover: https://blog-1304565468.cos.ap-shanghai.myqcloud.com/typora/laugh.png +date: 2024-06-22 +--- + +大家好,我是阿星,不知道你有没有开发拖拽功能的需求,或者对拖拽元素感兴趣。那么这篇文章应该你可以读一下。接下来我会使用 react-dnd、 react-moveable 来实现下面这个 拖拽demo,先给大家看一下我的效果: +![file.gif](https://blog-1304565468.cos.ap-shanghai.myqcloud.com/typora/1718442022534-e6d1c040-a2e7-4012-aaef-34d1565d43b5.gif) +这里是源码:[https://github.com/coderPerseus/drag-drop](https://github.com/coderPerseus/drag-drop),如果对你有帮助,可以 star 一下,感谢! + +## 需求分析 + +先找一个很赞的低代码平台,这里我找的是:阿里的低代码引擎:[https://lowcode-engine.cn/demo/demo-general/index.html](https://lowcode-engine.cn/demo/demo-general/index.html),大家可以先看下,了解一下低代码平台。 +那我们来完成一个最简版本的demo吧!通过上面的gif 大家应该看到了页面分为三个部分,准确来说分为如下四个部分: + +1. 导航栏:放一些全局的配置,操作等等 +2. 左侧物料区:左侧会放一些物料,用来拖拽到中间,有的还会有页面树结构,JSON 数据,我们这里就实现一个 物料展示和拖拽 +3. 中间展示,拖拽区:负责把左侧的物料可以拖进来,可以在这里进行物料的拖拽,可以点击唤起右侧对应的属性编辑区 +4. 右边属性配置区:选中拖拽元素,进行编辑 + +好了,我们需求梳理完成,我们一步步开发吧! + +## 搭建项目 + +我们基于 Next.js 创建一个项目吧!参考文档:[https://nextjs.org/docs/getting-started/installation](https://nextjs.org/docs/getting-started/installation),执行 `npx create-next-app@latest`, +![image.png](https://blog-1304565468.cos.ap-shanghai.myqcloud.com/work/1718019389894-b6990624-c97b-4070-b487-71f25344d124.png) +我们等待安装完成,启动项目`npm run dev`,node版本要 >= 18.17 哦! +我们删除 app/page.tsx 不需要内容后,我们就创建我们需要的组件文件 +![image.png](https://blog-1304565468.cos.ap-shanghai.myqcloud.com/typora/1718452836796-0bcab620-b6fc-4834-b745-b4fe298d663a.png) +app 放页面的目录,里面有我们的主页面 +componet:组件目录 + +\> ContextProvider:基于useContext 封装的数据共享组件,这样就实现了数据在多个组件同步的能力,中间移动元素的位置,右侧也相应变化 + +\> material:存放我们左侧所有物料的地方,这里有图片物料和文本物料(通过一个映射map 来动态渲染对应的元素),这里就是完成左侧所有类型物料的渲染逻辑的地方 + +\> DraggableComponent:左侧组件面板,展示可供拖拽和使用的组件库。通过渲染预设的素材数组,然后使用下文中的 DragWrapper 来包裹每一个 组件,使其可以拖拽 + +\> ComponentPanel 设计面板:用于放置和编辑组件的地方。渲染用户从左侧拖拽的元素数组,使用 MoveableWrapper 来实现页面元素可以拖拽 + +\> PropertyEditor:右侧属性编辑器,用于编辑物料的属性,通过配置得到要渲染的配置表单,然后渲染出对应的配置表单 + +\> DragWrapper:封装了一个 可拖拽组件的包装组件,使用 react-dnd + +\> MoveableWrapper:封装了一个可以移动的包装组件,使用 react-moveable 实现 + +\> lib 下面 component 存放物料的数据,utils 存放一些公共方法 + +是不是很简答,这是最简的低代码生成器,通过拖拽得到对应的 JSON 数据,但真正的低代码生成器要比这个复杂的多 + +## 难点 & 坑点 + +这个项目真正难的数据结构,需要设计一个好的数据结构来兼容无论什么元素都额可以使用这个数据结构来承载。 +这个项目的坑点是当我刷新页面把一个元素拖拽到设计区,然后这个元素无法被选中,最后发现是需要动态更新 moveable 的target 属性,我就设置了一个 target 的 useState,然后,当前选中的元素和JSON数据变化的时候我就更新这个 target 修复了这个bug,但是排查了很久才发现是它的问题 + +## end + +感谢你的阅读! diff --git a/posts/react-error.mdx b/posts/react-error.mdx new file mode 100644 index 0000000..77df974 --- /dev/null +++ b/posts/react-error.mdx @@ -0,0 +1,969 @@ +--- +title: React 新手常犯的十个错误 +description: 介绍了刚入门 React 的新人,在编写代码的时候遇到一些常见问题,并给出了解决方案。 +tags: [React, bug] +slug: common-mistakes-make-react-beginners +author: luckySnail +# cover: +date: 2023-06-27 +--- + +这是我关注的一位前端开发者的分享,分享的非常棒!值得被更多人看到,原文英文版本,我做了翻译,希望对 React 开发者有所帮助。 + +在我最近开发的时候,在遇到复杂状态管理和副作用的时候,就会经常不能完全想到所有可能发生的情况,导致一些莫名其妙的 bug,如果你也是,那看完吧,一定有新的收获。以下是正文部分: + +“几年前,我在当地的一个编码训练营教 React,我注意到有一些事情让学生措手不及。人们不断掉进同一个坑里!在本教程中,我们将探索 8 个最常见的陷阱。您将学习如何绕过它们,并希望能够避免很多挫败感。为了保持这篇博客文章轻松流畅,我们不会过多探讨这些陷阱背后的原因。这更像是一个快速参考。下面看下常见的问题吧! + +> ##### 目标受众 +> +> 这篇文章是为那些对React基础知识已经有所了解,但在他们的学习旅程中仍然处于初级阶段的开发者编写的。 + +### 1\. 使用 0 作为判断依据 + +好的,我们从其中一个最普遍的陷阱开始。我在一些生产应用程序中实际遇到过这个问题! + +请看下以下代码: + +``` +// react app.js +import React from 'react'; +import ShoppingList from './ShoppingList'; + +function App() { + const [items, setItems] = React.useState([]); + + return ( +
+ {items.length && } +
+ ); +} + +export default App; + +``` + +``` +// ShoppingList.js +import React from 'react'; + +function ShoppingList({ items }) { + return ( + <> +

Shopping List

+
    + {items.map((item, index) => { + // NOTE: We shouldn't use “index” as the key! + // This is covered later in this post 😄 + return ( +
  • + {item} +
  • + ); + })} +
+ + ); +} + +export default ShoppingList + +``` + +我们的目标是有条件地显示一个购物清单。如果数组中至少有1个项目,我们应该渲染一个ShoppingList元素。否则,我们不应该渲染任何内容。**然而,我们最终在 UI 中得到一个随机的 `0` !** + +发生这种情况是因为 `items.length` 的计算结果为 `0` 。由于 0 在 JavaScript 中是一个虚假值,因此 `&&` 运算符短路,整个表达式解析为 `0` 。实际上,就好像我们这样做了一样: + +``` +function App() { + return ( +
+ {0} +
+ ); +} + +``` + +与其他假值(如''、null、false等)不同,数字0是JSX中的一个有效值。毕竟,在许多情况下,我们确实希望打印数字0! + +**如何修复:** 我们的表达式应该使用一个“纯粹”的布尔值(true/false): + +``` +function App() { + const [items, setItems] = React.useState([]); +return ( +
+ {items.length > 0 && ( + + )} +
+ ); +} + +``` + +`items.length > 0` 将始终计算为 `true` 或 `false` ,因此我们永远不会有任何问题。或者,我们可以使用三元表达式: + +``` +function App() { + const [items, setItems] = React.useState([]); +return ( +
+ {items.length + ? + : null} +
+ ); +} + +``` + +这两种选择都是完全有效的,这取决于**个人品味**。 + +### 2\. 不正确使用状态 + +让我们继续使用我们的购物清单示例。假设我们能够添加新项目: + +``` +// app.js +import React from 'react'; +import ShoppingList from './ShoppingList'; +import NewItemForm from './NewItemForm'; + +function App() { + const [items, setItems] = React.useState([ + 'apple', + 'banana', + ]); + + function handleAddItem(value) { + items.push(value); + setItems(items); + } + + return ( +
+ {items.length > 0 && } + +
+ ) +} + +export default App; + +``` + +``` +// ShoppingList.js +import React from 'react'; + +function ShoppingList({ items }) { + return ( + <> +

Shopping List

+
    + {items.map((item, index) => { + // NOTE: We shouldn't use “index” as the key! + // This is covered later in this post 😄 + return ( +
  • + {item} +
  • + ); + })} +
+ + ); +} + +export default ShoppingList; + +``` + +``` +// NewItemFrom.js +import React from 'react'; + +function NewItemForm({ handleAddItem }) { + const [value, setValue] = React.useState(''); + + return ( +
{ + event.preventDefault(); + + handleAddItem(value); + setValue(''); + }} + > + {/* We'll touch on this ID stuff later too! */} + + setValue(event.target.value)} + /> + +
+ ); +} + +export default NewItemForm; + +``` + +可看到如下: + +![image-20230623130414761](https://blog-1304565468.cos.ap-shanghai.myqcloud.com/work/3bf4b338ff594eeeb865752f4f9daf31~tplv-k3u1fbpfcp-zoom-in-crop-mark:1512:0:0:0.awebp) + +每当用户提交一个新项目时,`handleAddItem`函数会被调用。不幸的是,它目前无法正常工作!当我们输入一个项目并提交表单时,该项目并没有被添加到购物清单中。 + +**问题** 出在我们违反了React中可能是最重要的规则之一:我们修改了**状态**的值。具体来说,问题是这一行: + +``` +// app.js +function handleAddItem(value) { + items.push(value); + setItems(items); +} + +``` + +React 依靠**状态变量的身份**(也就是这里的 useState hooks)来判断状态何时发生了变化。当我们把一个项目推到数组中时,我们不会改变该数组的身份,所以 React 无法判断这个值已经改变。 + +**如何修复:** 我们需要创建一个全新的数组。以下是我的做法: + +``` +// app.js +function handleAddItem(value) { + const nextItems = [...items, value]; // 不知道有人看过我之前的文章不,这里也是遵守 react 的不可变性原则 + setItems(nextItems); +} + +``` + +与其修改现有的数组,我选择从头开始创建一个新的数组。这个新数组包含了与原数组完全相同的所有项(借助展开语法...),以及新添加的项。这里的区别在于**修改现有项**与**创建新项**之间的差异。当我们将一个值传递给像 setCount 这样的**状态设置函数**时,它需要是一个**新的实体**。**对象也是如此:** + +``` +// ❌ Mutates an existing object +function handleChangeEmail(nextEmail) { + user.email = nextEmail; + setUser(user); +} +// ✅ Creates a new object +function handleChangeEmail(email) { + const nextUser = { ...user, email: nextEmail }; + setUser(nextUser); +} + +``` + +基本上,... 语法是一种将数组/对象中的所有内容复制/粘贴到全新实体中的方式。这确保一切正常运作。 + +### 3\. 不生成密钥 + +以下是您之前可能看到的警告: + +> Warning: Each child in a list should have a unique "key" prop. +> +> 警告:列表中的每个子元素应该有一个唯一的 "key" 属性。 + +最常见的情况是在对数据进行映射时发生此错误。以下是一个违反此规则的示例: + +``` +// app.js +import React from 'react'; +import ShoppingList from './ShoppingList'; +import NewItemForm from './NewItemForm'; + +function App() { + const [items, setItems] = React.useState([ + 'apple', + 'banana', + 'carrot', + ]); + + function handleAddItem(value) { + const nextItems = [...items, value] + setItems(nextItems); + } + + return ( +
+ {items.length > 0 && } + +
+ ) +} + +export default App; + +``` + +``` +// ShoppingList.js +import React from 'react'; + +function ShoppingList({ items }) { + return ( +
    + {items.map((item) => { + return ( +
  • {item}
  • + ); + })} +
+ ); +} + +export default ShoppingList; + +``` + +``` +// NewItemForm.js +import React from 'react'; +function NewItemForm({ handleAddItem }) { + const [value, setValue] = React.useState(''); + + return ( +
{ + event.preventDefault(); + + handleAddItem(value); + setValue(''); + }} + > + {/* We'll touch on this ID stuff later too! */} + + setValue(event.target.value)} + /> + +
+ ); +} + +export default NewItemForm; + +``` + +你会看到: + +![image-20230623132957917](https://blog-1304565468.cos.ap-shanghai.myqcloud.com/work/bac5be80c2d04ca3a30266874079e80a~tplv-k3u1fbpfcp-zoom-in-crop-mark:1512:0:0:0.awebp) + +每当我们渲染一个元素数组时,我们需要为 React 提供额外的上下文信息,以便它能够识别每个项。关键是,这个标识符需要是唯一的。许多在线资源会建议使用数组索引来解决这个问题: + +``` +// ShoppingList.js +function ShoppingList({ items }) { + return ( +
    + {items.map((item, index) => { + return ( +
  • {item}
  • + ); + })} +
+ ); +} + +``` + +我不认为这是一个好的建议。这种方法有时可以工作,但在其他情况下可能会引发一些严重的问题。随着对 React 工作原理的更深入理解,您将能够在每个具体情况下判断是否可以使用这种方法,但老实说,我认为以一种始终安全的方式解决问题会更容易。这样,您就不必担心它! + +**下面是计划:** 每当向列表中添加新项时,我们将为其生成一个唯一的ID: + +``` +// app.js +function handleAddItem(value) { + const nextItem = { + id: crypto.randomUUID(), + label: value, + }; + const nextItems = [...items, nextItem]; + setItems(nextItems); +} + +``` + +`crypto.randomUUID`是内置于浏览器中的方法(它不是第三方包)。它在所有主要浏览器中都可用。它与加密货币无关。该方法生成一个类似于 `d9bb3c4c-0459-48b9-a94c-7ca3963f7bd0` 的唯一字符串。通过在用户提交表单时动态生成一个 ID,我们确保购物清单中的每个项都具有唯一的 ID。以下是如何将其应用为键的方法: + +``` +// ShoppingList.js +function ShoppingList({ items }) { + return ( +
    + {items.map((item, index) => { + return ( +
  • + {item.label} +
  • + ); + })} +
+ ); +} + +``` + +重要的是,我们希望在状态更新时生成ID,而不是这样做: + +``` +// ❌ This is a bad idea +
  • + {item.label} +
  • + +``` + +在 JSX 中这样生成会导致键在**每次渲染时发生变化**。当键发生变化时,React将销毁并重新创建这些元素,这可能对**性能产生重大负面影响**。这种模式——在创建数据时生成键——可以应用于各种情况。例如,下面是我在从服务器获取数据时创建唯一ID的方式: + +``` +const [data, setData] = React.useState(null); +async function retrieveData() { + const res = await fetch('/api/data'); + const json = await res.json(); + // The moment we have the data, we generate + // an ID for each item: + const dataWithId = json.data.map(item => { + return { + ...item, + id: crypto.randomUUID(), + }; + }); + // Then we update the state with + // this augmented data: + setData(dataWithId); +} + +``` + +### 4\. 缺少空格 + +这是我在网络上经常看到的一个非常让人困惑的问题。 + +``` +import React from 'react'; + +function App() { + return ( +

    + Welcome to Corpitech.com! + Log in to continue +

    + ); +} + +export default App; + +``` + +你会看到:![image-20230623133756836](https://blog-1304565468.cos.ap-shanghai.myqcloud.com/work/24ad0c9df1d14578b7edb81c0b88607a~tplv-k3u1fbpfcp-zoom-in-crop-mark:1512:0:0:0.awebp) + +注意到这两个句子被混在一起了: + +![image-20230623133859746](https://blog-1304565468.cos.ap-shanghai.myqcloud.com/work/d199f5422dc04f3099300fb8a46e56de~tplv-k3u1fbpfcp-zoom-in-crop-mark:1512:0:0:0.awebp) + +这是因为 **JSX 编译器**(将我们编写的 JSX 转换为适用于浏览器的 JavaScript 的工具)**无法真正区分语法上的空格和我们为缩进/代码可读性而添加的空格**。 + +**如何修复它:** 我们需要在文本和锚点标记之间添加一个**显式的空格字符**: + +``` +

    + Welcome to Corpitech.com! + {' '} + Log in to continue +

    + +``` + +一个小小的专业技巧:如果您使用 `Prettier`,它会自动为您添加这些空格字符!只需确保让它进行格式化(不要提前将内容拆分为多行)。 + +> 为什么 React 团队没有解决这个问题? +> +> 当我第一次了解到这种策略时,我也觉得有些凌乱。为什么 React 团队不能修复它,使其按照我们的预期工作呢?!我后来意识到这个问题并没有完美的解决方案。如果 React 开始将缩进解释为语法上的空格,可以解决这个问题,但也会引入一系列其他问题。最终,尽管它看起来有些笨拙,但我认为这是正确的决定。这是最不糟糕的选择! + +### 5\. 在修改状态后访问它 + +这个问题在某个时刻都会让人措手不及。在我在一家本地编程训练营教授时,我已经记不清有多少次有人因为这个问题向我求助了。下面是一个最简单的计数器应用程序:点击按钮会增加计数。看看你能否发现问题所在: + +``` +import React from 'react'; + +function App() { + const [count, setCount] = React.useState(0); + + function handleClick() { + setCount(count + 1); + + console.log({ count }); + } + + return ( + + ); +} + +export default App; + +``` + +你会看到: + +![image-20230623134419724](https://blog-1304565468.cos.ap-shanghai.myqcloud.com/work/dba119edd43b4c6b815cc6f970ced7d5~tplv-k3u1fbpfcp-zoom-in-crop-mark:1512:0:0:0.awebp) + +在增加计数状态变量后,我们将其值记录到控制台。令人奇怪的是,它记录了错误的值: + +![image-20230623134525645](https://blog-1304565468.cos.ap-shanghai.myqcloud.com/work/f63ae0958c8748dfb21f089eb9903445~tplv-k3u1fbpfcp-zoom-in-crop-mark:1512:0:0:0.awebp) + +问题出在这里:React 中的状态设置函数(例如 setCount)是异步的。 这是有问题的代码是这里: + +``` +function handleClick() { + setCount(count + 1); + console.log({ count }); +} + +``` + +很容易错误地认为 setCount 函数类似于赋值,好像这样做是等同于这样的操作: + +``` +count = count + 1; +console.log({ count }); + +``` + +然而,React 并不是这样构建的。当我们调用 setCount 时,我们并没有重新赋值给一个变量,而是安排了一个更新操作。 + +对于我们完全理解这个概念可能需要一些时间,但下面的解释或许有助于更好地理解:我们无法重新赋值给 count 变量,因为它是一个常量! + +``` +// Uses `const`, not `let`, and so it can't be reassigned +const [count, setCount] = React.useState(0); +count = count + 1; // Uncaught TypeError: + // Assignment to constant variable + +``` + +那么我们应该如何修复这个问题呢?幸运的是,我们已经知道这个值应该是什么。我们需要将它存储在一个变量中,以便我们可以访问它: + +``` +function handleClick() { // 再次验证不可变性重要性,使用新的变量记录最新的状态 + const nextCount = count + 1; + setCount(nextCount); + // Use `nextCount` whenever we want + // to reference the new value: + console.log({ nextCount }); +} + +``` + +我喜欢在这种情况下使用“next”前缀(比如nextCount、nextItems、nextEmail等)。这样对我来说更清晰,我们不是更新当前值,而是安排下一个值。 + +### 6\. 返回多个元素 + +有时,一个组件需要返回多个顶级元素。例如: + +``` +// app.js +import React from 'react'; +import LabeledInput from './LabeledInput'; + +function App() { + const [name, setName] = React.useState(''); + + return ( + setName(event.target.value)} + /> + ); +} + +export default App; + +``` + +``` +// LabeledInput.js +function LabeledInput({ id, label, ...delegated }) { + return ( + + + ); +} + +export default LabeledInput; + +``` + +你会看到: + +![image-20230623135153465](https://blog-1304565468.cos.ap-shanghai.myqcloud.com/work/cadab96d750449c6bf52be148e09b3d4~tplv-k3u1fbpfcp-zoom-in-crop-mark:1512:0:0:0.awebp) + +我们希望我们的 LabeledInput 组件返回两个元素:一个 `