diff --git a/components/Git/Issue/Card.tsx b/components/Git/Issue/Card.tsx new file mode 100644 index 0000000..506e77e --- /dev/null +++ b/components/Git/Issue/Card.tsx @@ -0,0 +1,68 @@ +import { Avatar, Card, CardContent, CardProps, Chip } from '@mui/material'; +import { marked } from 'marked'; +import { Issue } from 'mobx-github'; +import { FC } from 'react'; + +import { SymbolIcon } from '../../Icon'; + +export type IssueCardProps = Issue & Omit; + +export const IssueCard: FC = ({ + id, + repository_url, + number, + title, + labels, + body, + html_url, + user, + comments, + created_at, + ...props +}) => ( + + +

+ + {repository_url.split('/').slice(-2).join('/')}#{number} +
+ {title} +
+

+ +
+ {labels?.map( + label => + typeof label === 'object' && ( + + ), + )} +
+ +
+ +
+ {user && ( +
+ + {user.name || ''} +
+ )} +
+ + {comments} +
+ +
+ + +); diff --git a/components/Icon.tsx b/components/Icon.tsx index c81cf9d..f20f82d 100644 --- a/components/Icon.tsx +++ b/components/Icon.tsx @@ -5,7 +5,12 @@ export interface IconProps extends HTMLAttributes { variant?: 'outlined' | 'rounded' | 'sharp'; } -export const SymbolIcon: FC = ({ className, name, variant = 'outlined', ...props }) => ( +export const SymbolIcon: FC = ({ + className = '', + name, + variant = 'outlined', + ...props +}) => ( [ { title: t('latest_projects'), href: '/project' }, + { title: 'GitHub-reward', href: '/project/reward/issue', target: '_top' }, { title: t('member'), href: '/member' }, { title: t('open_source_project'), href: '/open-source' }, ]; @@ -36,8 +27,8 @@ export class MainNavigator extends Component { }; renderLinks = () => - mainNavLinks().map(({ title, href }) => ( - + mainNavLinks().map(({ title, href, target }) => ( + {title} )); diff --git a/components/Member/Card.tsx b/components/Member/Card.tsx index ed71b68..bd06dbe 100644 --- a/components/Member/Card.tsx +++ b/components/Member/Card.tsx @@ -1,7 +1,6 @@ import { CardProps, Chip } from '@mui/material'; import { marked } from 'marked'; import { observer } from 'mobx-react'; -import Image from 'next/image'; import Link from 'next/link'; import { FC } from 'react'; @@ -29,15 +28,13 @@ export const MemberCard: FC = observer(
{github && ( - {String(github)} )} -

{String(nickname)}

{String(position ?? '')}

diff --git a/models/Base.ts b/models/Base.ts index 766206b..b9e9072 100644 --- a/models/Base.ts +++ b/models/Base.ts @@ -1,8 +1,22 @@ import { HTTPClient } from 'koajax'; import MIME from 'mime'; +import { githubClient } from 'mobx-github'; import { TableCellValue, TableCellMedia, TableCellAttachment } from 'mobx-lark'; -import { API_Host } from './configuration'; +import { API_Host, GithubToken, isServer } from './configuration'; + +if (!isServer()) githubClient.baseURI = `${API_Host}/api/GitHub/`; + +githubClient.use(({ request }, next) => { + if (GithubToken) + request.headers = { + Authorization: `Bearer ${GithubToken}`, + ...request.headers, + }; + return next(); +}); + +export { githubClient }; export const larkClient = new HTTPClient({ baseURI: `${API_Host}/api/Lark/`, diff --git a/models/Issue.ts b/models/Issue.ts new file mode 100644 index 0000000..db6d713 --- /dev/null +++ b/models/Issue.ts @@ -0,0 +1,39 @@ +import { isEmpty } from 'lodash'; +import { Issue } from 'mobx-github'; +import { Filter, ListModel } from 'mobx-restful'; +import { buildURLData } from 'web-utility'; + +import { githubClient } from './Base'; + +interface SearchData { + total_count: number; + incomplete_results: boolean; + items: T[]; +} + +export type IssueFilter = Filter; + +export class IssueModel extends ListModel { + baseURI = 'search/issues'; + client = githubClient; + + async loadPage( + page = this.pageIndex, + per_page = this.pageSize, + { repository_url, state, title }: IssueFilter, + ) { + const [org, repo] = repository_url?.replace('https://github.com/', '').split('/') || []; + + const condition = Object.entries({ org, repo, type: 'issue', state }) + .filter(([, value]) => !isEmpty(value)) + .map(([key, value]) => `${key}:${value}`) + .join(' '); + + const { body } = await this.client.get>( + `${this.baseURI}?${buildURLData({ page, per_page, q: `${condition} ${title}` })}`, + ); + return { pageData: body!.items, totalCount: body!.total_count }; + } +} + +export default new IssueModel(); diff --git a/models/Repository.ts b/models/Repository.ts index 70f9903..c8c7e6d 100644 --- a/models/Repository.ts +++ b/models/Repository.ts @@ -1,19 +1,8 @@ import { observable } from 'mobx'; -import { githubClient, GitRepository, RepositoryFilter, RepositoryModel } from 'mobx-github'; +import { GitRepository, RepositoryFilter, RepositoryModel } from 'mobx-github'; import { Stream } from 'mobx-restful'; -import { API_Host, GithubToken, isServer } from './configuration'; - -if (!isServer()) githubClient.baseURI = `${API_Host}/api/GitHub/`; - -githubClient.use(({ request }, next) => { - if (GithubToken) - request.headers = { - authorization: `Bearer ${GithubToken}`, - ...request.headers, - }; - return next(); -}); +import { githubClient } from './Base'; export class GitRepositoryModel extends Stream(RepositoryModel) { client = githubClient; diff --git a/models/configuration.ts b/models/configuration.ts index d4c1147..21df72f 100644 --- a/models/configuration.ts +++ b/models/configuration.ts @@ -1,12 +1,11 @@ -import { parseCookie } from 'mobx-i18n'; - export const Name = process.env.NEXT_PUBLIC_SITE_NAME, Summary = process.env.NEXT_PUBLIC_SITE_SUMMARY, DefaultImage = process.env.NEXT_PUBLIC_LOGO || '/og.png'; export const isServer = () => typeof window === 'undefined'; -export const VercelHost = process.env.VERCEL_URL; +export const { VERCEL } = process.env, + VercelHost = process.env.VERCEL_URL; export const API_Host = isServer() ? VercelHost @@ -18,8 +17,9 @@ export const CACHE_HOST = process.env.NEXT_PUBLIC_CACHE_HOST!; export const { CRAWLER_TOKEN, JWT_SECRET } = process.env; -export const GithubToken = - parseCookie(globalThis.document?.cookie || '').token || process.env.GITHUB_TOKEN; +export const ProxyBaseURL = `https://idea2.app/proxy`; + +export const GithubToken = process.env.GITHUB_TOKEN; export const LARK_API_HOST = `${API_Host}/api/Lark/`; diff --git a/next.config.ts b/next.config.ts index 6dcc3b6..7d4ec0f 100644 --- a/next.config.ts +++ b/next.config.ts @@ -1,4 +1,5 @@ import { withSentryConfig } from '@sentry/nextjs'; +import { NextConfig } from 'next'; import setPWA from 'next-pwa'; import webpack from 'webpack'; @@ -12,6 +13,20 @@ const withPWA = setPWA({ disable: isDev, }); +const rewrites: NextConfig['rewrites'] = async () => ({ + beforeFiles: [ + { + source: '/proxy/github.com/:path*', + destination: 'https://github.com/:path*', + }, + { + source: '/proxy/raw.githubusercontent.com/:path*', + destination: 'https://raw.githubusercontent.com/:path*', + }, + ], + afterFiles: [], +}); + const nextConfig = withPWA({ output: CI ? 'standalone' : undefined, compiler: { @@ -30,6 +45,7 @@ const nextConfig = withPWA({ // eslint-disable-next-line @typescript-eslint/no-unsafe-return return config; }, + rewrites, }); export default isDev || !SENTRY_AUTH_TOKEN diff --git a/package.json b/package.json index 70ff6c4..d401aa4 100644 --- a/package.json +++ b/package.json @@ -12,8 +12,8 @@ "@giscus/react": "^3.1.0", "@koa/bodyparser": "^5.1.1", "@koa/router": "^13.1.0", - "@mui/lab": "6.0.0-beta.31", - "@mui/material": "^6.4.11", + "@mui/lab": "^7.0.0-beta.11", + "@mui/material": "^7.0.2", "@sentry/nextjs": "^9.15.0", "file-type": "^20.5.0", "jsonwebtoken": "^9.0.2", diff --git a/pages/_document.tsx b/pages/_document.tsx index be9b812..0f218b0 100644 --- a/pages/_document.tsx +++ b/pages/_document.tsx @@ -40,7 +40,7 @@ export default function Document() { * */} diff --git a/pages/api/GitHub/core.ts b/pages/api/GitHub/core.ts index e330fc3..959dab7 100644 --- a/pages/api/GitHub/core.ts +++ b/pages/api/GitHub/core.ts @@ -1,5 +1,8 @@ import { Context, Middleware } from 'koa'; import { githubClient } from 'mobx-github'; +import { githubOAuth2 } from 'next-ssr-middleware'; + +import { ProxyBaseURL, VERCEL } from '../../../models/configuration'; export const proxyGithub = async ({ method, @@ -20,3 +23,13 @@ export const proxyGitHubAll: Middleware = async context => { context.status = status; context.body = body; }; + +const client_id = process.env.GITHUB_OAUTH_CLIENT_ID!, + client_secret = process.env.GITHUB_OAUTH_CLIENT_SECRET!; + +export const githubOAuth = githubOAuth2({ + rootBaseURL: VERCEL ? undefined : `${ProxyBaseURL}/github.com/`, + client_id, + client_secret, + scopes: ['user', 'repo'], +}); diff --git a/pages/project/reward/issue.tsx b/pages/project/reward/issue.tsx new file mode 100644 index 0000000..684e9cf --- /dev/null +++ b/pages/project/reward/issue.tsx @@ -0,0 +1,50 @@ +import { Grid } from '@mui/material'; +import { Issue } from 'mobx-github'; +import { observer } from 'mobx-react'; +import { cache, compose, errorLogger, translator } from 'next-ssr-middleware'; +import { FC } from 'react'; + +import { IssueCard } from '../../../components/Git/Issue/Card'; +import { PageHead } from '../../../components/PageHead'; +import { ScrollList } from '../../../components/ScrollList'; +import issueStore, { IssueFilter, IssueModel } from '../../../models/Issue'; +import { i18n } from '../../../models/Translation'; +import { githubOAuth } from '../../api/GitHub/core'; + +const issueFilter: IssueFilter = { + repository_url: 'https://github.com/idea2app', + state: 'open', + title: 'reward', +}; + +export const getServerSideProps = compose(githubOAuth, errorLogger, translator(i18n), async () => { + const list = await new IssueModel().getList(issueFilter); + + return { props: JSON.parse(JSON.stringify({ list })) }; +}); + +const IssuesPage: FC<{ list: Issue[] }> = observer(({ list }) => ( + + + +

GitHub-reward issues

+ + ( + + {allItems.map(issue => ( + + + + ))} + + )} + /> +
+)); + +export default IssuesPage; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index ad6c72b..6eb97ad 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -27,11 +27,11 @@ importers: specifier: ^13.1.0 version: 13.1.0 '@mui/lab': - specifier: 6.0.0-beta.31 - version: 6.0.0-beta.31(@emotion/react@11.14.0(@types/react@19.1.2)(react@19.1.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.1.2)(react@19.1.0))(@types/react@19.1.2)(react@19.1.0))(@mui/material@6.4.11(@emotion/react@11.14.0(@types/react@19.1.2)(react@19.1.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.1.2)(react@19.1.0))(@types/react@19.1.2)(react@19.1.0))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + specifier: ^7.0.0-beta.11 + version: 7.0.0-beta.11(@emotion/react@11.14.0(@types/react@19.1.2)(react@19.1.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.1.2)(react@19.1.0))(@types/react@19.1.2)(react@19.1.0))(@mui/material@7.0.2(@emotion/react@11.14.0(@types/react@19.1.2)(react@19.1.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.1.2)(react@19.1.0))(@types/react@19.1.2)(react@19.1.0))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@mui/material': - specifier: ^6.4.11 - version: 6.4.11(@emotion/react@11.14.0(@types/react@19.1.2)(react@19.1.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.1.2)(react@19.1.0))(@types/react@19.1.2)(react@19.1.0))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + specifier: ^7.0.2 + version: 7.0.2(@emotion/react@11.14.0(@types/react@19.1.2)(react@19.1.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.1.2)(react@19.1.0))(@types/react@19.1.2)(react@19.1.0))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@sentry/nextjs': specifier: ^9.15.0 version: 9.15.0(@opentelemetry/context-async-hooks@1.30.1(@opentelemetry/api@1.9.0))(@opentelemetry/core@1.30.1(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.57.2(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(next@15.3.1(@babel/core@7.27.1)(@opentelemetry/api@1.9.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react@19.1.0)(webpack@5.99.7) @@ -1091,21 +1091,6 @@ packages: resolution: {integrity: sha512-ZAoA40rNMPwSm+AeHpCq8STiNAwzWLJuP8Xv4CHIc9wv/PSuExjMrmjfYNj682vW0OOiZ1HKxzvjQr9XZIisQA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@floating-ui/core@1.7.0': - resolution: {integrity: sha512-FRdBLykrPPA6P76GGGqlex/e7fbe0F1ykgxHYNXQsH/iTEtjMj/f9bpY5oQqbjt5VgZvgz/uKXbGuROijh3VLA==} - - '@floating-ui/dom@1.7.0': - resolution: {integrity: sha512-lGTor4VlXcesUMh1cupTUTDoCxMb0V6bm3CnxHzQcw8Eaf1jQbgQX4i02fYgT0vJ82tb5MZ4CZk1LRGkktJCzg==} - - '@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.9': - resolution: {integrity: sha512-MDWhGtE+eHw5JW7lq4qhc5yRLS11ERl1c7Z6Xd0a58DozHES6EnNNwUWbMiG4J9Cgj053Bhk8zvlhFYKVhULwg==} - '@giscus/react@3.1.0': resolution: {integrity: sha512-0TCO2TvL43+oOdyVVGHDItwxD1UMKP2ZYpT6gXmhFOqfAJtZxTzJ9hkn34iAF/b6YzyJ4Um89QIt9z/ajmAEeg==} peerDependencies: @@ -1286,28 +1271,17 @@ packages: resolution: {integrity: sha512-k/1pb70eD638anoi0e8wUGAlbMJXyvdV4p62Ko+EZ7eBe1xMx8Uhak1R5DgfoofsK5IBBnRwsYGTaLZl+6/+RQ==} engines: {node: '>=18'} - '@mui/base@5.0.0-beta.70': - resolution: {integrity: sha512-Tb/BIhJzb0pa5zv/wu7OdokY9ZKEDqcu1BDFnohyvGCoHuSXbEr90rPq1qeNW3XvTBIbNWHEF7gqge+xpUo6tQ==} - engines: {node: '>=14.0.0'} - peerDependencies: - '@types/react': ^17.0.0 || ^18.0.0 || ^19.0.0 - react: ^17.0.0 || ^18.0.0 || ^19.0.0 - react-dom: ^17.0.0 || ^18.0.0 || ^19.0.0 - peerDependenciesMeta: - '@types/react': - optional: true - - '@mui/core-downloads-tracker@6.4.11': - resolution: {integrity: sha512-CzAQs9CTzlwbsF9ZYB4o4lLwBv1/qNE264NjuYao+ctAXsmlPtYa8RtER4UsUXSMxNN9Qi+aQdYcKl2sUpnmAw==} + '@mui/core-downloads-tracker@7.0.2': + resolution: {integrity: sha512-TfeFU9TgN1N06hyb/pV/63FfO34nijZRMqgHk0TJ3gkl4Fbd+wZ73+ZtOd7jag6hMmzO9HSrBc6Vdn591nhkAg==} - '@mui/lab@6.0.0-beta.31': - resolution: {integrity: sha512-iZjchha0XznSqp5fKtgsozz/zZEjJFG8s4EeBypdlZEIcHvRKx3hUKBuaFM6B/PiC2kJrNMQSi5W2Fjio5sLKQ==} + '@mui/lab@7.0.0-beta.11': + resolution: {integrity: sha512-VJDEUgiRsjo8V2xDvBEE9Cfs1cSlwzp9UFmD3KzIg6emFMqz9BfYh+9cFI4iQWaoz3Agm3q6bVKlhlX6xw6sVQ==} engines: {node: '>=14.0.0'} peerDependencies: '@emotion/react': ^11.5.0 '@emotion/styled': ^11.3.0 - '@mui/material': ^6.4.8 - '@mui/material-pigment-css': ^6.4.8 + '@mui/material': ^7.0.2 + '@mui/material-pigment-css': ^7.0.2 '@types/react': ^17.0.0 || ^18.0.0 || ^19.0.0 react: ^17.0.0 || ^18.0.0 || ^19.0.0 react-dom: ^17.0.0 || ^18.0.0 || ^19.0.0 @@ -1321,13 +1295,13 @@ packages: '@types/react': optional: true - '@mui/material@6.4.11': - resolution: {integrity: sha512-k2D3FLJS+/qD0qnd6ZlAjGFvaaxe1Dl10NyvpeDzIebMuYdn8VqYe6XBgGueEAtnzSJM4V03VD9kb5Fi24dnTA==} + '@mui/material@7.0.2': + resolution: {integrity: sha512-rjJlJ13+3LdLfobRplkXbjIFEIkn6LgpetgU/Cs3Xd8qINCCQK9qXQIjjQ6P0FXFTPFzEVMj0VgBR1mN+FhOcA==} engines: {node: '>=14.0.0'} peerDependencies: '@emotion/react': ^11.5.0 '@emotion/styled': ^11.3.0 - '@mui/material-pigment-css': ^6.4.11 + '@mui/material-pigment-css': ^7.0.2 '@types/react': ^17.0.0 || ^18.0.0 || ^19.0.0 react: ^17.0.0 || ^18.0.0 || ^19.0.0 react-dom: ^17.0.0 || ^18.0.0 || ^19.0.0 @@ -1341,8 +1315,8 @@ packages: '@types/react': optional: true - '@mui/private-theming@6.4.9': - resolution: {integrity: sha512-LktcVmI5X17/Q5SkwjCcdOLBzt1hXuc14jYa7NPShog0GBDCDvKtcnP0V7a2s6EiVRlv7BzbWEJzH6+l/zaCxw==} + '@mui/private-theming@7.0.2': + resolution: {integrity: sha512-6lt8heDC9wN8YaRqEdhqnm0cFCv08AMf4IlttFvOVn7ZdKd81PNpD/rEtPGLLwQAFyyKSxBG4/2XCgpbcdNKiA==} engines: {node: '>=14.0.0'} peerDependencies: '@types/react': ^17.0.0 || ^18.0.0 || ^19.0.0 @@ -1351,8 +1325,8 @@ packages: '@types/react': optional: true - '@mui/styled-engine@6.4.11': - resolution: {integrity: sha512-74AUmlHXaGNbyUqdK/+NwDJOZqgRQw6BcNvhoWYLq3LGbLTkE+khaJ7soz6cIabE4CPYqO2/QAIU1Z/HEjjpcw==} + '@mui/styled-engine@7.0.2': + resolution: {integrity: sha512-11Bt4YdHGlh7sB8P75S9mRCUxTlgv7HGbr0UKz6m6Z9KLeiw1Bm9y/t3iqLLVMvSHYB6zL8X8X+LmfTE++gyBw==} engines: {node: '>=14.0.0'} peerDependencies: '@emotion/react': ^11.4.1 @@ -1364,8 +1338,8 @@ packages: '@emotion/styled': optional: true - '@mui/system@6.4.11': - resolution: {integrity: sha512-gibtsrZEwnDaT5+I/KloOj/yHluX5G8heknuxBpQOdEQ3Gc0avjSImn5hSeKp8D4thiwZiApuggIjZw1dQguUA==} + '@mui/system@7.0.2': + resolution: {integrity: sha512-yFUraAWYWuKIISPPEVPSQ1NLeqmTT4qiQ+ktmyS8LO/KwHxB+NNVOacEZaIofh5x1NxY8rzphvU5X2heRZ/RDA==} engines: {node: '>=14.0.0'} peerDependencies: '@emotion/react': ^11.5.0 @@ -1380,16 +1354,16 @@ packages: '@types/react': optional: true - '@mui/types@7.2.24': - resolution: {integrity: sha512-3c8tRt/CbWZ+pEg7QpSwbdxOk36EfmhbKf6AGZsD1EcLDLTSZoxxJ86FVtcjxvjuhdyBiWKSTGZFaXCnidO2kw==} + '@mui/types@7.4.1': + resolution: {integrity: sha512-gUL8IIAI52CRXP/MixT1tJKt3SI6tVv4U/9soFsTtAsHzaJQptZ42ffdHZV3niX1ei0aUgMvOxBBN0KYqdG39g==} peerDependencies: '@types/react': ^17.0.0 || ^18.0.0 || ^19.0.0 peerDependenciesMeta: '@types/react': optional: true - '@mui/utils@6.4.9': - resolution: {integrity: sha512-Y12Q9hbK9g+ZY0T3Rxrx9m2m10gaphDuUMgWxyV5kNJevVxXYCLclYUCC9vXaIk1/NdNDTcW2Yfr2OGvNFNmHg==} + '@mui/utils@7.0.2': + resolution: {integrity: sha512-72gcuQjPzhj/MLmPHLCgZjy2VjOH4KniR/4qRtXTTXIEwbkgcN+Y5W/rC90rWtMmZbjt9svZev/z+QHUI4j74w==} engines: {node: '>=14.0.0'} peerDependencies: '@types/react': ^17.0.0 || ^18.0.0 || ^19.0.0 @@ -6394,23 +6368,6 @@ snapshots: '@eslint/core': 0.13.0 levn: 0.4.1 - '@floating-ui/core@1.7.0': - dependencies: - '@floating-ui/utils': 0.2.9 - - '@floating-ui/dom@1.7.0': - dependencies: - '@floating-ui/core': 1.7.0 - '@floating-ui/utils': 0.2.9 - - '@floating-ui/react-dom@2.1.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': - dependencies: - '@floating-ui/dom': 1.7.0 - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) - - '@floating-ui/utils@0.2.9': {} - '@giscus/react@3.1.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: giscus: 1.6.0 @@ -6566,30 +6523,15 @@ snapshots: transitivePeerDependencies: - supports-color - '@mui/base@5.0.0-beta.70(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': - dependencies: - '@babel/runtime': 7.27.1 - '@floating-ui/react-dom': 2.1.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@mui/types': 7.2.24(@types/react@19.1.2) - '@mui/utils': 6.4.9(@types/react@19.1.2)(react@19.1.0) - '@popperjs/core': 2.11.8 - clsx: 2.1.1 - prop-types: 15.8.1 - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) - optionalDependencies: - '@types/react': 19.1.2 - - '@mui/core-downloads-tracker@6.4.11': {} + '@mui/core-downloads-tracker@7.0.2': {} - '@mui/lab@6.0.0-beta.31(@emotion/react@11.14.0(@types/react@19.1.2)(react@19.1.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.1.2)(react@19.1.0))(@types/react@19.1.2)(react@19.1.0))(@mui/material@6.4.11(@emotion/react@11.14.0(@types/react@19.1.2)(react@19.1.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.1.2)(react@19.1.0))(@types/react@19.1.2)(react@19.1.0))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@mui/lab@7.0.0-beta.11(@emotion/react@11.14.0(@types/react@19.1.2)(react@19.1.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.1.2)(react@19.1.0))(@types/react@19.1.2)(react@19.1.0))(@mui/material@7.0.2(@emotion/react@11.14.0(@types/react@19.1.2)(react@19.1.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.1.2)(react@19.1.0))(@types/react@19.1.2)(react@19.1.0))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: '@babel/runtime': 7.27.1 - '@mui/base': 5.0.0-beta.70(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@mui/material': 6.4.11(@emotion/react@11.14.0(@types/react@19.1.2)(react@19.1.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.1.2)(react@19.1.0))(@types/react@19.1.2)(react@19.1.0))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@mui/system': 6.4.11(@emotion/react@11.14.0(@types/react@19.1.2)(react@19.1.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.1.2)(react@19.1.0))(@types/react@19.1.2)(react@19.1.0))(@types/react@19.1.2)(react@19.1.0) - '@mui/types': 7.2.24(@types/react@19.1.2) - '@mui/utils': 6.4.9(@types/react@19.1.2)(react@19.1.0) + '@mui/material': 7.0.2(@emotion/react@11.14.0(@types/react@19.1.2)(react@19.1.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.1.2)(react@19.1.0))(@types/react@19.1.2)(react@19.1.0))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@mui/system': 7.0.2(@emotion/react@11.14.0(@types/react@19.1.2)(react@19.1.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.1.2)(react@19.1.0))(@types/react@19.1.2)(react@19.1.0))(@types/react@19.1.2)(react@19.1.0) + '@mui/types': 7.4.1(@types/react@19.1.2) + '@mui/utils': 7.0.2(@types/react@19.1.2)(react@19.1.0) clsx: 2.1.1 prop-types: 15.8.1 react: 19.1.0 @@ -6599,13 +6541,13 @@ snapshots: '@emotion/styled': 11.14.0(@emotion/react@11.14.0(@types/react@19.1.2)(react@19.1.0))(@types/react@19.1.2)(react@19.1.0) '@types/react': 19.1.2 - '@mui/material@6.4.11(@emotion/react@11.14.0(@types/react@19.1.2)(react@19.1.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.1.2)(react@19.1.0))(@types/react@19.1.2)(react@19.1.0))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@mui/material@7.0.2(@emotion/react@11.14.0(@types/react@19.1.2)(react@19.1.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.1.2)(react@19.1.0))(@types/react@19.1.2)(react@19.1.0))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: '@babel/runtime': 7.27.1 - '@mui/core-downloads-tracker': 6.4.11 - '@mui/system': 6.4.11(@emotion/react@11.14.0(@types/react@19.1.2)(react@19.1.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.1.2)(react@19.1.0))(@types/react@19.1.2)(react@19.1.0))(@types/react@19.1.2)(react@19.1.0) - '@mui/types': 7.2.24(@types/react@19.1.2) - '@mui/utils': 6.4.9(@types/react@19.1.2)(react@19.1.0) + '@mui/core-downloads-tracker': 7.0.2 + '@mui/system': 7.0.2(@emotion/react@11.14.0(@types/react@19.1.2)(react@19.1.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.1.2)(react@19.1.0))(@types/react@19.1.2)(react@19.1.0))(@types/react@19.1.2)(react@19.1.0) + '@mui/types': 7.4.1(@types/react@19.1.2) + '@mui/utils': 7.0.2(@types/react@19.1.2)(react@19.1.0) '@popperjs/core': 2.11.8 '@types/react-transition-group': 4.4.12(@types/react@19.1.2) clsx: 2.1.1 @@ -6620,16 +6562,16 @@ snapshots: '@emotion/styled': 11.14.0(@emotion/react@11.14.0(@types/react@19.1.2)(react@19.1.0))(@types/react@19.1.2)(react@19.1.0) '@types/react': 19.1.2 - '@mui/private-theming@6.4.9(@types/react@19.1.2)(react@19.1.0)': + '@mui/private-theming@7.0.2(@types/react@19.1.2)(react@19.1.0)': dependencies: '@babel/runtime': 7.27.1 - '@mui/utils': 6.4.9(@types/react@19.1.2)(react@19.1.0) + '@mui/utils': 7.0.2(@types/react@19.1.2)(react@19.1.0) prop-types: 15.8.1 react: 19.1.0 optionalDependencies: '@types/react': 19.1.2 - '@mui/styled-engine@6.4.11(@emotion/react@11.14.0(@types/react@19.1.2)(react@19.1.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.1.2)(react@19.1.0))(@types/react@19.1.2)(react@19.1.0))(react@19.1.0)': + '@mui/styled-engine@7.0.2(@emotion/react@11.14.0(@types/react@19.1.2)(react@19.1.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.1.2)(react@19.1.0))(@types/react@19.1.2)(react@19.1.0))(react@19.1.0)': dependencies: '@babel/runtime': 7.27.1 '@emotion/cache': 11.14.0 @@ -6642,13 +6584,13 @@ snapshots: '@emotion/react': 11.14.0(@types/react@19.1.2)(react@19.1.0) '@emotion/styled': 11.14.0(@emotion/react@11.14.0(@types/react@19.1.2)(react@19.1.0))(@types/react@19.1.2)(react@19.1.0) - '@mui/system@6.4.11(@emotion/react@11.14.0(@types/react@19.1.2)(react@19.1.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.1.2)(react@19.1.0))(@types/react@19.1.2)(react@19.1.0))(@types/react@19.1.2)(react@19.1.0)': + '@mui/system@7.0.2(@emotion/react@11.14.0(@types/react@19.1.2)(react@19.1.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.1.2)(react@19.1.0))(@types/react@19.1.2)(react@19.1.0))(@types/react@19.1.2)(react@19.1.0)': dependencies: '@babel/runtime': 7.27.1 - '@mui/private-theming': 6.4.9(@types/react@19.1.2)(react@19.1.0) - '@mui/styled-engine': 6.4.11(@emotion/react@11.14.0(@types/react@19.1.2)(react@19.1.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.1.2)(react@19.1.0))(@types/react@19.1.2)(react@19.1.0))(react@19.1.0) - '@mui/types': 7.2.24(@types/react@19.1.2) - '@mui/utils': 6.4.9(@types/react@19.1.2)(react@19.1.0) + '@mui/private-theming': 7.0.2(@types/react@19.1.2)(react@19.1.0) + '@mui/styled-engine': 7.0.2(@emotion/react@11.14.0(@types/react@19.1.2)(react@19.1.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.1.2)(react@19.1.0))(@types/react@19.1.2)(react@19.1.0))(react@19.1.0) + '@mui/types': 7.4.1(@types/react@19.1.2) + '@mui/utils': 7.0.2(@types/react@19.1.2)(react@19.1.0) clsx: 2.1.1 csstype: 3.1.3 prop-types: 15.8.1 @@ -6658,14 +6600,16 @@ snapshots: '@emotion/styled': 11.14.0(@emotion/react@11.14.0(@types/react@19.1.2)(react@19.1.0))(@types/react@19.1.2)(react@19.1.0) '@types/react': 19.1.2 - '@mui/types@7.2.24(@types/react@19.1.2)': + '@mui/types@7.4.1(@types/react@19.1.2)': + dependencies: + '@babel/runtime': 7.27.1 optionalDependencies: '@types/react': 19.1.2 - '@mui/utils@6.4.9(@types/react@19.1.2)(react@19.1.0)': + '@mui/utils@7.0.2(@types/react@19.1.2)(react@19.1.0)': dependencies: '@babel/runtime': 7.27.1 - '@mui/types': 7.2.24(@types/react@19.1.2) + '@mui/types': 7.4.1(@types/react@19.1.2) '@types/prop-types': 15.7.14 clsx: 2.1.1 prop-types: 15.8.1