├── public ├── _redirects └── utn-logo.svg ├── src ├── types │ ├── index.ts │ └── types.ts ├── pages │ ├── index.ts │ └── PlanPage.tsx ├── theme │ ├── index.ts │ ├── lightTheme.ts │ └── AppTheme.tsx ├── views │ ├── index.ts │ └── PlanView.tsx ├── hooks │ ├── index.ts │ └── useDigraph.ts ├── layout │ ├── index.ts │ └── PlanLayout.tsx ├── data │ ├── index.ts │ ├── plans.ts │ ├── constants.ts │ ├── k23.ts │ ├── k08.ts │ └── r23.ts ├── services │ ├── importViz.ts │ ├── index.ts │ ├── getVizInstance.ts │ └── renderSVG.ts ├── context │ ├── index.ts │ ├── PlanContext.ts │ ├── planReducer.ts │ └── PlanProvider.tsx ├── utils │ ├── replaceWhiteSpace.ts │ ├── index.ts │ ├── composeSVGObjectURL.ts │ ├── findPlanById.ts │ └── Digraph.ts ├── App.tsx ├── main.tsx ├── components │ ├── index.ts │ ├── SubjectGrid.tsx │ ├── StatusMarker.tsx │ ├── ShowDigraphButton.tsx │ ├── NavBar.tsx │ ├── ExportSVGButton.tsx │ ├── ModeSelect.tsx │ ├── __tests__ │ │ ├── PlanSelect.test.tsx │ │ ├── SubjectStack.test.tsx │ │ ├── fixture.ts │ │ └── Subject.test.tsx │ ├── StatusRadioGroup.tsx │ ├── PlanSelect.tsx │ ├── Subject.tsx │ └── SubjectStack.tsx └── AppRouter.tsx ├── .dockerignore ├── nginx.conf ├── .vscode └── settings.json ├── vitest.config.ts ├── Dockerfile ├── .github └── workflows │ └── ci.yml ├── biome.json ├── vite.config.ts ├── tsconfig.json ├── index.html ├── .devcontainer └── devcontainer.json ├── LICENSE ├── package.json ├── .gitignore ├── README.md └── yarn.lock /public/_redirects: -------------------------------------------------------------------------------- 1 | /* /index.html 200 -------------------------------------------------------------------------------- /src/types/index.ts: -------------------------------------------------------------------------------- 1 | export * from './types'; 2 | -------------------------------------------------------------------------------- /src/pages/index.ts: -------------------------------------------------------------------------------- 1 | export { default as PlanPage } from './PlanPage'; 2 | -------------------------------------------------------------------------------- /src/theme/index.ts: -------------------------------------------------------------------------------- 1 | export { default as AppTheme } from './AppTheme'; 2 | -------------------------------------------------------------------------------- /src/views/index.ts: -------------------------------------------------------------------------------- 1 | export { default as PlanView } from './PlanView'; 2 | -------------------------------------------------------------------------------- /src/hooks/index.ts: -------------------------------------------------------------------------------- 1 | export { default as useDigraph } from './useDigraph'; 2 | -------------------------------------------------------------------------------- /src/layout/index.ts: -------------------------------------------------------------------------------- 1 | export { default as PlanLayout } from './PlanLayout'; 2 | -------------------------------------------------------------------------------- /src/data/index.ts: -------------------------------------------------------------------------------- 1 | export * from './constants'; 2 | export { default as plans } from './plans'; 3 | -------------------------------------------------------------------------------- /.dockerignore: -------------------------------------------------------------------------------- 1 | .dockerignore 2 | .git 3 | .gitignore 4 | build 5 | dist 6 | Dockerfile 7 | node_modules 8 | README.md 9 | -------------------------------------------------------------------------------- /src/services/importViz.ts: -------------------------------------------------------------------------------- 1 | function importViz() { 2 | return import('@viz-js/viz'); 3 | } 4 | 5 | export default importViz; 6 | -------------------------------------------------------------------------------- /src/services/index.ts: -------------------------------------------------------------------------------- 1 | export { default as importViz } from './importViz'; 2 | export { default as renderSVG } from './renderSVG'; 3 | -------------------------------------------------------------------------------- /src/context/index.ts: -------------------------------------------------------------------------------- 1 | export { default as PlanContext } from './PlanContext'; 2 | export { default as PlanProvider } from './PlanProvider'; 3 | -------------------------------------------------------------------------------- /src/utils/replaceWhiteSpace.ts: -------------------------------------------------------------------------------- 1 | function replaceWhiteSpace(str: string, replacement = '-') { 2 | return str.replace(/\s+/g, replacement).toLowerCase(); 3 | } 4 | 5 | export default replaceWhiteSpace; 6 | -------------------------------------------------------------------------------- /src/theme/lightTheme.ts: -------------------------------------------------------------------------------- 1 | import { createTheme } from '@mui/material'; 2 | 3 | const lightTheme = createTheme({ 4 | palette: { 5 | mode: 'light', 6 | }, 7 | }); 8 | 9 | export default lightTheme; 10 | -------------------------------------------------------------------------------- /src/services/getVizInstance.ts: -------------------------------------------------------------------------------- 1 | import importViz from './importViz'; 2 | 3 | async function getVizInstance() { 4 | const viz = await importViz(); 5 | return viz.instance(); 6 | } 7 | 8 | export default getVizInstance; 9 | -------------------------------------------------------------------------------- /src/data/plans.ts: -------------------------------------------------------------------------------- 1 | import type { DataPlan } from '@/types'; 2 | import k08 from './k08'; 3 | import k23 from './k23'; 4 | import r23 from './r23'; 5 | 6 | const plans: ReadonlyArray = [k08, k23, r23]; 7 | 8 | export default plans; 9 | -------------------------------------------------------------------------------- /nginx.conf: -------------------------------------------------------------------------------- 1 | server { 2 | listen 80; 3 | 4 | location / { 5 | root /usr/share/nginx/html; 6 | index index.html index.htm; 7 | try_files $uri $uri/ /index.html =404; 8 | } 9 | 10 | include /etc/nginx/extra-conf.d/*.conf; 11 | } 12 | -------------------------------------------------------------------------------- /src/pages/PlanPage.tsx: -------------------------------------------------------------------------------- 1 | import { PlanLayout } from '@/layout'; 2 | import { PlanView } from '@/views'; 3 | 4 | function PlanPage() { 5 | return ( 6 | 7 | 8 | 9 | ); 10 | } 11 | 12 | export default PlanPage; 13 | -------------------------------------------------------------------------------- /src/utils/index.ts: -------------------------------------------------------------------------------- 1 | export { default as composeSVGObjectURL } from './composeSVGObjectURL'; 2 | export { default as Digraph } from './Digraph'; 3 | export { default as findPlanById } from './findPlanById'; 4 | export { default as replaceWhiteSpace } from './replaceWhiteSpace'; 5 | -------------------------------------------------------------------------------- /src/utils/composeSVGObjectURL.ts: -------------------------------------------------------------------------------- 1 | function composeSVGObjectURL(svg: SVGElement) { 2 | const asText = new XMLSerializer().serializeToString(svg); 3 | const blob = new Blob([asText], { type: 'image/svg+xml' }); 4 | return URL.createObjectURL(blob); 5 | } 6 | 7 | export default composeSVGObjectURL; 8 | -------------------------------------------------------------------------------- /src/utils/findPlanById.ts: -------------------------------------------------------------------------------- 1 | import { plans } from '@/data'; 2 | 3 | function findPlanById(id: string) { 4 | return ( 5 | plans.find((plan) => plan.id === id) ?? 6 | (() => { 7 | throw new Error(`Plan with id "${id}" not found`); 8 | })() 9 | ); 10 | } 11 | 12 | export default findPlanById; 13 | -------------------------------------------------------------------------------- /src/App.tsx: -------------------------------------------------------------------------------- 1 | import { PlanProvider } from '@/context'; 2 | import { AppTheme } from '@/theme'; 3 | import AppRouter from './AppRouter'; 4 | 5 | function App() { 6 | return ( 7 | 8 | 9 | 10 | 11 | 12 | ); 13 | } 14 | 15 | export default App; 16 | -------------------------------------------------------------------------------- /.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "editor.codeActionsOnSave": { 3 | "quickfix.biome": "explicit", 4 | "source.addMissingImports.ts": "explicit", 5 | "source.organizeImports": "explicit" 6 | }, 7 | "editor.defaultFormatter": "biomejs.biome", 8 | "[markdown]": { 9 | "editor.defaultFormatter": "esbenp.prettier-vscode" 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /src/services/renderSVG.ts: -------------------------------------------------------------------------------- 1 | import getVizInstance from './getVizInstance'; 2 | 3 | async function renderSVG( 4 | digraph: string, 5 | continuation: (svg: SVGElement) => void, 6 | ) { 7 | const vizInstance = await getVizInstance(); 8 | const svg = vizInstance.renderSVGElement(digraph); 9 | continuation(svg); 10 | } 11 | 12 | export default renderSVG; 13 | -------------------------------------------------------------------------------- /src/context/PlanContext.ts: -------------------------------------------------------------------------------- 1 | import type { PlanContextProps } from '@/types'; 2 | import { createContext } from 'react'; 3 | 4 | const PlanContext = createContext({ 5 | contextPlan: { 6 | branch: '', 7 | id: '', 8 | subjects: {}, 9 | }, 10 | updateMode: () => {}, 11 | updateStatuses: () => {}, 12 | }); 13 | 14 | export default PlanContext; 15 | -------------------------------------------------------------------------------- /vitest.config.ts: -------------------------------------------------------------------------------- 1 | import { defineConfig, mergeConfig } from 'vitest/config'; 2 | import viteConfig from './vite.config'; 3 | 4 | const vitestConfig = mergeConfig( 5 | viteConfig, 6 | defineConfig({ 7 | test: { 8 | globals: true, 9 | environment: 'jsdom', 10 | include: ['src/**/*.{test,spec}.{ts,tsx}'], 11 | }, 12 | }), 13 | ); 14 | 15 | export default vitestConfig; 16 | -------------------------------------------------------------------------------- /src/theme/AppTheme.tsx: -------------------------------------------------------------------------------- 1 | import { CssBaseline, ThemeProvider } from '@mui/material'; 2 | import type { ReactNode } from 'react'; 3 | import lightTheme from './lightTheme'; 4 | 5 | function AppTheme({ children }: { children: ReactNode }) { 6 | return ( 7 | 8 | 9 | {children} 10 | 11 | ); 12 | } 13 | 14 | export default AppTheme; 15 | -------------------------------------------------------------------------------- /src/main.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import ReactDOM from 'react-dom/client'; 3 | import { BrowserRouter } from 'react-router-dom'; 4 | import App from './App'; 5 | import { importViz } from './services'; 6 | 7 | importViz(); 8 | 9 | ReactDOM.createRoot(document.getElementById('root') as HTMLElement).render( 10 | 11 | 12 | 13 | 14 | , 15 | ); 16 | -------------------------------------------------------------------------------- /Dockerfile: -------------------------------------------------------------------------------- 1 | FROM node:18.16.0-slim AS base 2 | WORKDIR /app 3 | 4 | FROM base AS dev 5 | RUN apt update && \ 6 | apt install -y git fish vim && \ 7 | chsh -s /usr/bin/fish node 8 | 9 | FROM base AS build 10 | COPY package*.json ./ 11 | RUN yarn install 12 | COPY . . 13 | RUN yarn build 14 | 15 | FROM nginx:stable AS deploy 16 | COPY nginx.conf /etc/nginx/conf.d/default.conf 17 | COPY --from=build /app/dist /usr/share/nginx/html 18 | EXPOSE 80 19 | CMD ["nginx", "-g", "daemon off;"] 20 | -------------------------------------------------------------------------------- /src/layout/PlanLayout.tsx: -------------------------------------------------------------------------------- 1 | import { NavBar } from '@/components'; 2 | import { Box, Toolbar } from '@mui/material'; 3 | import type { ReactNode } from 'react'; 4 | 5 | function PlanLayout({ children }: { children: ReactNode }) { 6 | return ( 7 | <> 8 | 9 | 10 | 11 | {children} 12 | 13 | 14 | ); 15 | } 16 | 17 | export default PlanLayout; 18 | -------------------------------------------------------------------------------- /.github/workflows/ci.yml: -------------------------------------------------------------------------------- 1 | name: 🕵🏻 CI 2 | on: 3 | push: 4 | branches: 5 | - main 6 | - develop 7 | pull_request: 8 | branches: 9 | - main 10 | - develop 11 | jobs: 12 | build: 13 | runs-on: ubuntu-latest 14 | steps: 15 | - uses: actions/checkout@v4 16 | - name: Use Node.js latest 17 | uses: actions/setup-node@v4 18 | with: 19 | node-version: latest 20 | - run: yarn install 21 | - run: yarn ci 22 | - run: yarn test 23 | - run: yarn build 24 | -------------------------------------------------------------------------------- /src/hooks/useDigraph.ts: -------------------------------------------------------------------------------- 1 | import { PlanContext } from '@/context'; 2 | import { Digraph, findPlanById } from '@/utils'; 3 | import { use } from 'react'; 4 | 5 | function useDigraph() { 6 | const { contextPlan } = use(PlanContext); 7 | const plan = findPlanById(contextPlan.id); 8 | 9 | function composeDigraph() { 10 | const subjectsByLevel = plan.subjects; 11 | const contextSubjects = contextPlan.subjects; 12 | return new Digraph(contextSubjects, subjectsByLevel).generate().toString(); 13 | } 14 | 15 | return { composeDigraph }; 16 | } 17 | 18 | export default useDigraph; 19 | -------------------------------------------------------------------------------- /src/context/planReducer.ts: -------------------------------------------------------------------------------- 1 | import type { ContextPlan } from '@/types'; 2 | 3 | const planTypes = { 4 | updatePlan: 'plan/update', 5 | } as const; 6 | 7 | interface PlanAction { 8 | readonly type: (typeof planTypes)[keyof typeof planTypes]; 9 | readonly payload: { 10 | readonly newPlan: ContextPlan; 11 | }; 12 | } 13 | 14 | const planReducer = (state: ContextPlan, action: PlanAction) => { 15 | switch (action.type) { 16 | case planTypes.updatePlan: 17 | return action.payload.newPlan; 18 | default: 19 | return state; 20 | } 21 | }; 22 | 23 | export { planReducer, planTypes }; 24 | -------------------------------------------------------------------------------- /biome.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://biomejs.dev/schemas/1.9.4/schema.json", 3 | "vcs": { 4 | "enabled": true, 5 | "clientKind": "git", 6 | "useIgnoreFile": true, 7 | "defaultBranch": "main" 8 | }, 9 | "organizeImports": { 10 | "enabled": true 11 | }, 12 | "formatter": { 13 | "enabled": true, 14 | "indentStyle": "space", 15 | "indentWidth": 2 16 | }, 17 | "linter": { 18 | "enabled": true, 19 | "rules": { 20 | "recommended": true 21 | } 22 | }, 23 | "javascript": { 24 | "formatter": { 25 | "quoteStyle": "single" 26 | } 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /src/components/index.ts: -------------------------------------------------------------------------------- 1 | export { default as ExportSVGButton } from './ExportSVGButton'; 2 | export { default as ModeSelect } from './ModeSelect'; 3 | export { default as NavBar } from './NavBar'; 4 | export { default as PlanSelect } from './PlanSelect'; 5 | export { default as ShowDigraphButton } from './ShowDigraphButton'; 6 | export { default as StatusMarker } from './StatusMarker'; 7 | export { default as StatusRadioGroup } from './StatusRadioGroup'; 8 | export { default as Subject } from './Subject'; 9 | export { default as SubjectGrid } from './SubjectGrid'; 10 | export { default as SubjectStack } from './SubjectStack'; 11 | -------------------------------------------------------------------------------- /src/components/SubjectGrid.tsx: -------------------------------------------------------------------------------- 1 | import { Subject } from '@/components'; 2 | import type { SubjectProps } from '@/types'; 3 | import Grid from '@mui/material/Grid2'; 4 | 5 | function SubjectGrid({ 6 | levelSubjects, 7 | }: { 8 | levelSubjects: ReadonlyArray; 9 | }) { 10 | return ( 11 | 19 | {levelSubjects.map((subject) => ( 20 | 21 | ))} 22 | 23 | ); 24 | } 25 | 26 | export default SubjectGrid; 27 | -------------------------------------------------------------------------------- /vite.config.ts: -------------------------------------------------------------------------------- 1 | import react from '@vitejs/plugin-react-swc'; 2 | import { defineConfig } from 'vite'; 3 | import tsconfigPaths from 'vite-tsconfig-paths'; 4 | 5 | const viteConfig = defineConfig({ 6 | plugins: [react(), tsconfigPaths()], 7 | build: { 8 | rollupOptions: { 9 | output: { 10 | manualChunks: { 11 | reactDOM: ['react-dom'], 12 | emotionReact: ['@emotion/react'], 13 | emotionStyled: ['@emotion/styled'], 14 | muiMaterial: ['@mui/material'], 15 | viz: ['@viz-js/viz'], 16 | }, 17 | }, 18 | }, 19 | }, 20 | }); 21 | 22 | export default viteConfig; 23 | -------------------------------------------------------------------------------- /src/AppRouter.tsx: -------------------------------------------------------------------------------- 1 | import { PlanContext } from '@/context'; 2 | import { plans } from '@/data'; 3 | import { PlanPage } from '@/pages'; 4 | import { use } from 'react'; 5 | import { Navigate, Route, Routes } from 'react-router-dom'; 6 | 7 | function AppRouter() { 8 | const { contextPlan } = use(PlanContext); 9 | const { id } = contextPlan; 10 | 11 | return ( 12 | 13 | {plans.map((plan) => ( 14 | } key={plan.id} path={`/${plan.id}`} /> 15 | ))} 16 | } path="/" /> 17 | } path="*" /> 18 | 19 | ); 20 | } 21 | 22 | export default AppRouter; 23 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "allowImportingTsExtensions": true, 4 | "allowJs": false, 5 | "allowSyntheticDefaultImports": true, 6 | "esModuleInterop": false, 7 | "forceConsistentCasingInFileNames": true, 8 | "isolatedModules": true, 9 | "jsx": "react-jsx", 10 | "lib": ["DOM", "DOM.Iterable", "ESNext"], 11 | "module": "ESNext", 12 | "moduleResolution": "bundler", 13 | "noEmit": true, 14 | "noFallthroughCasesInSwitch": true, 15 | "noUnusedLocals": true, 16 | "noUnusedParameters": true, 17 | "paths": { 18 | "@/*": ["./src/*"] 19 | }, 20 | "resolveJsonModule": true, 21 | "skipLibCheck": true, 22 | "strict": true, 23 | "target": "ESNext", 24 | "useDefineForClassFields": true 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /src/views/PlanView.tsx: -------------------------------------------------------------------------------- 1 | import { ExportSVGButton, ShowDigraphButton, SubjectStack } from '@/components'; 2 | import { Box } from '@mui/material'; 3 | import Grid from '@mui/material/Grid2'; 4 | 5 | function PlanView() { 6 | return ( 7 | 8 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | ); 27 | } 28 | 29 | export default PlanView; 30 | -------------------------------------------------------------------------------- /src/data/constants.ts: -------------------------------------------------------------------------------- 1 | const modes = { 2 | ANNUAL: 'Anual', 3 | QUADRIMESTRAL: 'Cuatrimestral', 4 | } as const; 5 | 6 | const options = { 7 | annualSubject: `shape="box"`, 8 | globalArrowSize: `arrowsize="0.5"`, 9 | globalDigraph: `ranksep="3"rankdir="BT"nodesep="0.3"`, 10 | takenTransitionEdgeStyle: `style="dotted"penwidth="2"`, 11 | } as const; 12 | 13 | const statuses = { 14 | PENDING: { 15 | name: 'Falta cursada', 16 | color: '#d3d3d3', 17 | }, 18 | IN_PROGRESS: { 19 | name: 'Cursando', 20 | color: '#00BFFF', 21 | }, 22 | NEED_FINAL_EXAM: { 23 | name: 'Firmada', 24 | color: '#FFA500', 25 | }, 26 | PASSED: { 27 | name: 'Aprobada', 28 | color: '#4CAF50', 29 | }, 30 | } as const; 31 | 32 | const DEFAULT_STATUS = statuses.PENDING; 33 | 34 | export { DEFAULT_STATUS, modes, options, statuses }; 35 | -------------------------------------------------------------------------------- /index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 10 | UTN Flowchart 11 | 12 | 13 | 14 | 18 | 19 | 20 |
21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /src/types/types.ts: -------------------------------------------------------------------------------- 1 | interface Plan { 2 | readonly id: string; 3 | readonly branch: string; 4 | readonly subjects: T; 5 | } 6 | 7 | interface PlanContextProps { 8 | readonly contextPlan: ContextPlan; 9 | readonly updateMode: (subjectId: string, newMode: string) => void; 10 | readonly updateStatuses: ( 11 | subjects: ReadonlyArray, 12 | newStatus: Status, 13 | ) => void; 14 | } 15 | 16 | interface Status { 17 | readonly color: string; 18 | readonly name: string; 19 | } 20 | 21 | interface SubjectProps { 22 | readonly id: string; 23 | readonly modes: ReadonlyArray; 24 | readonly name: string; 25 | readonly passed: ReadonlyArray; 26 | readonly status: Status; 27 | readonly taken: ReadonlyArray; 28 | } 29 | 30 | type ContextPlan = Plan>; 31 | 32 | type DataPlan = Plan>>; 33 | 34 | export type { ContextPlan, DataPlan, PlanContextProps, Status, SubjectProps }; 35 | -------------------------------------------------------------------------------- /.devcontainer/devcontainer.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "UTN Flowchart Devcontainer", 3 | "build": { 4 | "context": "..", 5 | "dockerfile": "../Dockerfile", 6 | "target": "dev" 7 | }, 8 | "workspaceFolder": "/app", 9 | "workspaceMount": "source=${localWorkspaceFolder},target=/app,type=bind,consistency=cached", 10 | "customizations": { 11 | "vscode": { 12 | "settings": { 13 | "editor.defaultFormatter": "dbaeumer.vscode-eslint", 14 | "editor.formatOnSave": true, 15 | "editor.codeActionsOnSave": { 16 | "source.fixAll": "explicit", 17 | "source.organizeImports": "explicit" 18 | }, 19 | "editor.insertSpaces": true, 20 | "editor.tabSize": 2, 21 | "eslint.enable": true, 22 | "eslint.format.enable": true, 23 | "eslint.codeActionsOnSave.mode": "all", 24 | "eslint.run": "onSave" 25 | }, 26 | "extensions": ["dbaeumer.vscode-eslint"] 27 | } 28 | }, 29 | "remoteUser": "node" 30 | } 31 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2023 Joel Suh 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /src/components/StatusMarker.tsx: -------------------------------------------------------------------------------- 1 | import { PlanContext } from '@/context'; 2 | import type { Status, SubjectProps } from '@/types'; 3 | import { Box, Divider, Link } from '@mui/material'; 4 | import { dividerClasses } from '@mui/material/Divider'; 5 | import { use } from 'react'; 6 | 7 | function StatusMarker({ 8 | levelSubjects, 9 | renderDivider, 10 | status, 11 | }: { 12 | levelSubjects: ReadonlyArray; 13 | renderDivider: boolean; 14 | status: Status; 15 | }) { 16 | const { updateStatuses } = use(PlanContext); 17 | 18 | const handleClickStatusMarker = () => { 19 | const newStatus = status; 20 | updateStatuses(levelSubjects, newStatus); 21 | }; 22 | 23 | return ( 24 | 32 | 37 | {status.name} 38 | 39 | {renderDivider ? : null} 40 | 41 | ); 42 | } 43 | 44 | export default StatusMarker; 45 | -------------------------------------------------------------------------------- /src/components/ShowDigraphButton.tsx: -------------------------------------------------------------------------------- 1 | import { useDigraph } from '@/hooks'; 2 | import { renderSVG } from '@/services'; 3 | import { composeSVGObjectURL } from '@/utils'; 4 | import PolylineIcon from '@mui/icons-material/Polyline'; 5 | import { Button, CircularProgress, Typography } from '@mui/material'; 6 | import { useState } from 'react'; 7 | 8 | const continuation = (svg: SVGElement) => { 9 | const url = composeSVGObjectURL(svg); 10 | const newWindow = window.open(url); 11 | if (newWindow) { 12 | newWindow.onload = () => URL.revokeObjectURL(url); 13 | } else { 14 | window.location.assign(url); 15 | } 16 | }; 17 | 18 | function ShowDigraphButton() { 19 | const [isLoadingDigraph, setIsLoadingDigraph] = useState(false); 20 | 21 | const { composeDigraph } = useDigraph(); 22 | 23 | const handleClickShowDigraph = async () => { 24 | setIsLoadingDigraph(true); 25 | const digraph = composeDigraph(); 26 | await renderSVG(digraph, continuation); 27 | setIsLoadingDigraph(false); 28 | }; 29 | 30 | return ( 31 | 43 | ); 44 | } 45 | 46 | export default ShowDigraphButton; 47 | -------------------------------------------------------------------------------- /src/components/NavBar.tsx: -------------------------------------------------------------------------------- 1 | import { PlanSelect } from '@/components'; 2 | import GitHubIcon from '@mui/icons-material/GitHub'; 3 | import { AppBar, IconButton, Toolbar, Typography } from '@mui/material'; 4 | import Grid from '@mui/material/Grid2'; 5 | 6 | function NavBar() { 7 | return ( 8 | 14 | 15 | 24 | 30 | UTN Flowchart 31 | 32 | 33 | 40 | 45 | 46 | 47 | 48 | 49 | ); 50 | } 51 | 52 | export default NavBar; 53 | -------------------------------------------------------------------------------- /src/components/ExportSVGButton.tsx: -------------------------------------------------------------------------------- 1 | import { useDigraph } from '@/hooks'; 2 | import { renderSVG } from '@/services'; 3 | import { composeSVGObjectURL } from '@/utils'; 4 | import FileDownloadIcon from '@mui/icons-material/FileDownload'; 5 | import { Button, CircularProgress, Typography } from '@mui/material'; 6 | import { useState } from 'react'; 7 | 8 | const continuation = (svg: SVGElement) => { 9 | const url = composeSVGObjectURL(svg); 10 | const anchor = document.createElement('a'); 11 | anchor.download = 'digraph.svg'; 12 | anchor.href = url; 13 | anchor.click(); 14 | URL.revokeObjectURL(url); 15 | }; 16 | 17 | function ExportSVGButton() { 18 | const [isLoadingDigraph, setIsLoadingDigraph] = useState(false); 19 | 20 | const { composeDigraph } = useDigraph(); 21 | 22 | const handleClickExportSVG = async () => { 23 | setIsLoadingDigraph(true); 24 | const digraph = composeDigraph(); 25 | await renderSVG(digraph, continuation); 26 | setIsLoadingDigraph(false); 27 | }; 28 | 29 | return ( 30 | 45 | ); 46 | } 47 | 48 | export default ExportSVGButton; 49 | -------------------------------------------------------------------------------- /src/components/ModeSelect.tsx: -------------------------------------------------------------------------------- 1 | import { PlanContext } from '@/context'; 2 | import type { SubjectProps } from '@/types'; 3 | import { replaceWhiteSpace } from '@/utils'; 4 | import { FormControl, InputLabel, NativeSelect } from '@mui/material'; 5 | import { type ChangeEvent, use } from 'react'; 6 | 7 | function ModeSelect({ subject }: { subject: SubjectProps }) { 8 | const { contextPlan, updateMode } = use(PlanContext); 9 | const targetSubject = contextPlan.subjects[subject.id]; 10 | const contextMode = targetSubject.modes[0]; 11 | 12 | const onSelectInputChange = (event: ChangeEvent) => { 13 | const newMode = JSON.parse(event.target.value); 14 | updateMode(subject.id, newMode); 15 | }; 16 | 17 | return ( 18 | 19 | 20 | Modalidad 21 | 22 | 30 | {subject.modes.map((mode) => ( 31 | 37 | ))} 38 | 39 | 40 | ); 41 | } 42 | 43 | export default ModeSelect; 44 | -------------------------------------------------------------------------------- /src/components/__tests__/PlanSelect.test.tsx: -------------------------------------------------------------------------------- 1 | import { PlanSelect } from '@/components'; 2 | import { PlanContext } from '@/context'; 3 | import { render, screen } from '@testing-library/react'; 4 | import userEvent from '@testing-library/user-event'; 5 | import { MemoryRouter } from 'react-router-dom'; 6 | import { describe, expect, it, vi } from 'vitest'; 7 | import { contextPlanValue, plan1, plan2, planId1, planId2 } from './fixture'; 8 | 9 | const mockedUseNavigate = vi.fn(); 10 | vi.mock('react-router-dom', async (importOriginal) => { 11 | const actual = await importOriginal(); 12 | return { 13 | ...actual, 14 | useNavigate: () => mockedUseNavigate, 15 | }; 16 | }); 17 | 18 | describe(`<${PlanSelect.name} /> Tests`, () => { 19 | const comboboxRole = 'combobox'; 20 | const optionRole = 'option'; 21 | 22 | it('should navigate on select change', async () => { 23 | const user = userEvent.setup(); 24 | render( 25 | 26 | 27 | 28 | 29 | , 30 | ); 31 | const button = screen.getByRole(comboboxRole); 32 | await user.click(button); 33 | const menuItems = screen.getAllByRole(optionRole); 34 | await user.click(menuItems[1]); 35 | expect(mockedUseNavigate).toHaveBeenCalledWith(`/${planId2}`, { 36 | replace: true, 37 | }); 38 | }); 39 | }); 40 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "utn-flowchart", 3 | "version": "1.0.0", 4 | "type": "module", 5 | "description": "Un generador de digrafos de planes de estudio de la Universidad Tecnológica Nacional.", 6 | "keywords": ["flowchart", "utn", "seguidor", "carrera"], 7 | "repository": { 8 | "type": "git", 9 | "url": "git+https://github.com/jlsuh/utn-flowchart.git" 10 | }, 11 | "license": "MIT", 12 | "bugs": { 13 | "url": "https://github.com/jlsuh/utn-flowchart/issues" 14 | }, 15 | "scripts": { 16 | "build": "tsc && vite build", 17 | "check": "biome check .", 18 | "ci": "biome ci .", 19 | "dev": "vite", 20 | "format": "biome check --write --unsafe .", 21 | "install": "biome migrate --write", 22 | "preview": "vite preview", 23 | "test": "vitest" 24 | }, 25 | "dependencies": { 26 | "@emotion/react": "11.13.5", 27 | "@emotion/styled": "11.13.5", 28 | "@mui/icons-material": "6.1.10", 29 | "@mui/material": "6.1.10", 30 | "@viz-js/viz": "3.11.0", 31 | "react": "19.0.0", 32 | "react-dom": "19.0.0", 33 | "react-router-dom": "7.0.2" 34 | }, 35 | "devDependencies": { 36 | "@biomejs/biome": "1.9.4", 37 | "@testing-library/dom": "10.4.0", 38 | "@testing-library/react": "16.1.0", 39 | "@testing-library/user-event": "14.5.2", 40 | "@types/react": "19.0.1", 41 | "@types/react-dom": "19.0.1", 42 | "@vitejs/plugin-react-swc": "3.7.2", 43 | "jsdom": "25.0.1", 44 | "typescript": "5.7.2", 45 | "vite": "6.0.3", 46 | "vite-tsconfig-paths": "5.1.4", 47 | "vitest": "2.1.8" 48 | } 49 | } 50 | -------------------------------------------------------------------------------- /src/components/StatusRadioGroup.tsx: -------------------------------------------------------------------------------- 1 | import { PlanContext } from '@/context'; 2 | import { statuses } from '@/data'; 3 | import type { SubjectProps } from '@/types'; 4 | import { 5 | FormControl, 6 | FormControlLabel, 7 | FormLabel, 8 | Radio, 9 | RadioGroup, 10 | } from '@mui/material'; 11 | import { type ChangeEvent, use } from 'react'; 12 | 13 | function StatusRadioGroup({ subject }: { subject: SubjectProps }) { 14 | const { contextPlan, updateStatuses } = use(PlanContext); 15 | const contextSubject = contextPlan.subjects[subject.id]; 16 | const contextStatus = contextSubject.status; 17 | 18 | const handleChangeRadioInput = (event: ChangeEvent) => { 19 | const newStatus = JSON.parse(event.target.value); 20 | updateStatuses([subject], newStatus); 21 | }; 22 | 23 | return ( 24 | 25 | Estado 26 | 33 | {Object.values(statuses).map((status, index) => ( 34 | } 36 | key={`${subject.id}-status-radio-group-input-${index}`} 37 | label={status.name} 38 | value={JSON.stringify(status)} 39 | /> 40 | ))} 41 | 42 | 43 | ); 44 | } 45 | 46 | export default StatusRadioGroup; 47 | -------------------------------------------------------------------------------- /src/components/PlanSelect.tsx: -------------------------------------------------------------------------------- 1 | import { PlanContext } from '@/context'; 2 | import { plans } from '@/data'; 3 | import { 4 | FormControl, 5 | MenuItem, 6 | Select, 7 | type SelectChangeEvent, 8 | } from '@mui/material'; 9 | import { use } from 'react'; 10 | import { useNavigate } from 'react-router-dom'; 11 | 12 | const selectStyles = { 13 | color: 'primary.contrastText', 14 | '.MuiSelect-select': { 15 | backgroundColor: 'primary.dark', 16 | }, 17 | '.MuiOutlinedInput-notchedOutline': { 18 | borderColor: 'primary.dark', 19 | }, 20 | '&:hover .MuiOutlinedInput-notchedOutline': { 21 | borderColor: 'primary.dark', 22 | }, 23 | '&.Mui-focused .MuiOutlinedInput-notchedOutline': { 24 | borderColor: 'primary.dark', 25 | }, 26 | '.MuiSvgIcon-root ': { 27 | color: 'background.default', 28 | }, 29 | }; 30 | 31 | function PlanSelect({ availablePlans = plans }) { 32 | const { contextPlan } = use(PlanContext); 33 | const navigate = useNavigate(); 34 | 35 | const handleChangeMenuItem = (event: SelectChangeEvent) => { 36 | navigate(`/${event.target.value}`, { 37 | replace: true, 38 | }); 39 | }; 40 | 41 | return ( 42 | 43 | 63 | 64 | ); 65 | } 66 | 67 | export default PlanSelect; 68 | -------------------------------------------------------------------------------- /src/components/Subject.tsx: -------------------------------------------------------------------------------- 1 | import { ModeSelect, StatusRadioGroup } from '@/components'; 2 | import { PlanContext } from '@/context'; 3 | import type { SubjectProps } from '@/types'; 4 | import CircleIcon from '@mui/icons-material/Circle'; 5 | import { Card, CardActions, CardContent, Typography } from '@mui/material'; 6 | import Grid from '@mui/material/Grid2'; 7 | import { use } from 'react'; 8 | 9 | function Subject({ subject }: { subject: SubjectProps }) { 10 | const { contextPlan } = use(PlanContext); 11 | const { subjects } = contextPlan; 12 | const contextSubject = subjects[subject.id]; 13 | const color = contextSubject.status.color; 14 | 15 | return ( 16 | 25 | 36 | 43 | 44 | {subject.name} 45 | 46 | 53 | 54 | 63 | 64 | 65 | 66 | 67 | 68 | ); 69 | } 70 | 71 | export default Subject; 72 | -------------------------------------------------------------------------------- /src/components/__tests__/SubjectStack.test.tsx: -------------------------------------------------------------------------------- 1 | import { SubjectStack } from '@/components'; 2 | import { PlanContext } from '@/context'; 3 | import { statuses } from '@/data'; 4 | import * as utils from '@/utils'; 5 | import { render, screen } from '@testing-library/react'; 6 | import { userEvent } from '@testing-library/user-event'; 7 | import { describe, expect, it, vi } from 'vitest'; 8 | import { contextPlanValue, plan1 } from './fixture'; 9 | 10 | describe(`<${SubjectStack.name} /> Tests`, () => { 11 | const buttonRole = 'button'; 12 | const headingRole = 'heading'; 13 | 14 | vi.spyOn(utils, 'findPlanById').mockReturnValue(plan1); 15 | 16 | it('should render stack with plan subjects', () => { 17 | render( 18 | 19 | 20 | , 21 | ); 22 | const subjects = screen.getAllByRole(headingRole, { 23 | level: 4, 24 | }); 25 | expect(subjects.length).toBe(plan1.subjects.flat().length); 26 | }); 27 | 28 | it('should render all status markers', () => { 29 | render( 30 | 31 | 32 | , 33 | ); 34 | const statusMarkers = screen.getAllByRole(buttonRole); 35 | expect(statusMarkers.length).toBe( 36 | plan1.subjects.length * Object.values(statuses).length, 37 | ); 38 | }); 39 | 40 | it('should invoke updateSubject on status marker click', async () => { 41 | const mockedUpdateStatuses = vi.fn(); 42 | const user = userEvent.setup(); 43 | render( 44 | 50 | 51 | , 52 | ); 53 | const statusMarkers = screen.getAllByRole(buttonRole); 54 | await user.click(statusMarkers[3]); 55 | expect(mockedUpdateStatuses).toHaveBeenCalledWith( 56 | plan1.subjects[0], 57 | statuses.PASSED, 58 | ); 59 | }); 60 | }); 61 | -------------------------------------------------------------------------------- /src/components/SubjectStack.tsx: -------------------------------------------------------------------------------- 1 | import { StatusMarker, SubjectGrid } from '@/components'; 2 | import { PlanContext } from '@/context'; 3 | import { statuses } from '@/data'; 4 | import { findPlanById, replaceWhiteSpace } from '@/utils'; 5 | import { Box, Stack, Typography } from '@mui/material'; 6 | import Grid from '@mui/material/Grid2'; 7 | import { use } from 'react'; 8 | 9 | function SubjectStack() { 10 | const { contextPlan } = use(PlanContext); 11 | const plan = findPlanById(contextPlan.id); 12 | const subjectsByLevel = plan.subjects; 13 | const statusesMaxIndex = Object.values(statuses).length - 1; 14 | 15 | return ( 16 | 17 | {Array.isArray(subjectsByLevel) && 18 | subjectsByLevel.map((levelSubjects, index) => ( 19 | 27 | 35 | 36 | 37 | {index + 1}° año 38 | 39 | 40 | 43 | Marcar a todas como: 44 | {Object.values(statuses).map((status, index) => ( 45 | 53 | ))} 54 | 55 | 56 | 57 | 58 | ))} 59 | 60 | ); 61 | } 62 | 63 | export default SubjectStack; 64 | -------------------------------------------------------------------------------- /src/components/__tests__/fixture.ts: -------------------------------------------------------------------------------- 1 | import { DEFAULT_STATUS, modes } from '@/data'; 2 | import type { ContextPlan, DataPlan, PlanContextProps } from '@/types'; 3 | 4 | const id1 = 'subject-1'; 5 | const id2 = 'subject-2'; 6 | const id3 = 'subject-3'; 7 | const id4 = 'subject-4'; 8 | const planId1 = 'plan-1'; 9 | const planId2 = 'plan-2'; 10 | const subjectName1 = 'Subject 1'; 11 | const subjectName2 = 'Subject 2'; 12 | 13 | const contextPlan: ContextPlan = { 14 | id: planId1, 15 | branch: 'planBranch-1', 16 | subjects: { 17 | [id1]: { 18 | id: id1, 19 | modes: [modes.ANNUAL], 20 | name: subjectName1, 21 | passed: [], 22 | status: DEFAULT_STATUS, 23 | taken: [], 24 | }, 25 | [id2]: { 26 | id: id2, 27 | modes: [modes.ANNUAL], 28 | name: subjectName2, 29 | passed: [], 30 | status: DEFAULT_STATUS, 31 | taken: [], 32 | }, 33 | }, 34 | }; 35 | const subject = { 36 | id: id1, 37 | modes: [modes.ANNUAL, modes.QUADRIMESTRAL], 38 | name: subjectName1, 39 | passed: [], 40 | status: DEFAULT_STATUS, 41 | taken: [], 42 | }; 43 | const plan1: DataPlan = { 44 | branch: 'planBranch-1', 45 | id: planId1, 46 | subjects: [ 47 | [ 48 | { 49 | id: id1, 50 | modes: [modes.ANNUAL, modes.QUADRIMESTRAL], 51 | name: subjectName1, 52 | passed: [], 53 | status: DEFAULT_STATUS, 54 | taken: [], 55 | }, 56 | ], 57 | [ 58 | { 59 | id: id2, 60 | modes: [modes.ANNUAL], 61 | name: 'Subject 2', 62 | passed: [], 63 | status: DEFAULT_STATUS, 64 | taken: [], 65 | }, 66 | ], 67 | ], 68 | }; 69 | const plan2: DataPlan = { 70 | branch: 'planBranch-2', 71 | id: planId2, 72 | subjects: [ 73 | [ 74 | { 75 | id: id3, 76 | modes: [modes.ANNUAL, modes.QUADRIMESTRAL], 77 | name: 'Subject 3', 78 | passed: [], 79 | status: DEFAULT_STATUS, 80 | taken: [], 81 | }, 82 | ], 83 | [ 84 | { 85 | id: id4, 86 | modes: [modes.ANNUAL], 87 | name: 'Subject 4', 88 | passed: [], 89 | status: DEFAULT_STATUS, 90 | taken: [], 91 | }, 92 | ], 93 | ], 94 | }; 95 | const contextPlanValue: PlanContextProps = { 96 | contextPlan, 97 | updateMode: () => {}, 98 | updateStatuses: () => {}, 99 | }; 100 | 101 | export { 102 | contextPlan, 103 | contextPlanValue, 104 | plan1, 105 | plan2, 106 | planId1, 107 | planId2, 108 | subject, 109 | }; 110 | -------------------------------------------------------------------------------- /src/context/PlanProvider.tsx: -------------------------------------------------------------------------------- 1 | import { PlanContext } from '@/context'; 2 | import { plans } from '@/data'; 3 | import type { ContextPlan, DataPlan, Status, SubjectProps } from '@/types'; 4 | import { type ReactNode, useReducer } from 'react'; 5 | import { useLocation } from 'react-router-dom'; 6 | import { planReducer, planTypes } from './planReducer'; 7 | 8 | const DEFAULT_PLAN = plans[0]; 9 | const SUBJECTS_KEY = 'subjects'; 10 | 11 | const getFlattenedPlan = ({ id, branch, subjects }: DataPlan) => { 12 | const flattenedSubjects = Object.values(subjects) 13 | .flat() 14 | .reduce( 15 | (acc, subject) => 16 | Object.assign(acc, { 17 | [subject.id]: { 18 | modes: subject.modes, 19 | status: subject.status, 20 | }, 21 | }), 22 | {}, 23 | ); 24 | return { 25 | branch, 26 | id, 27 | subjects: flattenedSubjects, 28 | }; 29 | }; 30 | 31 | const initializer = (initialArg: ContextPlan) => { 32 | const subjectsJSON = localStorage.getItem(SUBJECTS_KEY); 33 | if (subjectsJSON === null) { 34 | localStorage.setItem(SUBJECTS_KEY, JSON.stringify(initialArg)); 35 | return initialArg; 36 | } 37 | return JSON.parse(subjectsJSON); 38 | }; 39 | 40 | function PlanProvider({ children }: { children: ReactNode }) { 41 | const location = useLocation(); 42 | const [contextPlan, dispatch] = useReducer( 43 | planReducer, 44 | getFlattenedPlan(DEFAULT_PLAN), 45 | initializer, 46 | ); 47 | const currentPlan = plans.find( 48 | (plan) => plan.id === location.pathname.slice(1), 49 | ); 50 | 51 | function updatePlan(newPlan: ContextPlan) { 52 | localStorage.setItem(SUBJECTS_KEY, JSON.stringify(newPlan)); 53 | const action = { 54 | type: planTypes.updatePlan, 55 | payload: { 56 | newPlan, 57 | }, 58 | }; 59 | dispatch(action); 60 | } 61 | 62 | if (currentPlan && currentPlan.id !== contextPlan.id) { 63 | const newPlan = getFlattenedPlan(currentPlan); 64 | updatePlan(newPlan); 65 | } 66 | 67 | function updateMode(subjectId: string, newMode: string) { 68 | const newSubjects = JSON.parse(JSON.stringify(contextPlan.subjects)); 69 | newSubjects[subjectId] = { 70 | ...newSubjects[subjectId], 71 | modes: [ 72 | newMode, 73 | ...newSubjects[subjectId].modes.filter( 74 | (mode: string) => mode !== newMode, 75 | ), 76 | ], 77 | }; 78 | const newPlan = { 79 | ...contextPlan, 80 | subjects: newSubjects, 81 | }; 82 | updatePlan(newPlan); 83 | } 84 | 85 | function updateStatuses( 86 | subjects: ReadonlyArray, 87 | newStatus: Status, 88 | ) { 89 | const newSubjects = JSON.parse(JSON.stringify(contextPlan.subjects)); 90 | for (const subject of subjects) { 91 | newSubjects[subject.id] = { 92 | ...newSubjects[subject.id], 93 | status: newStatus, 94 | }; 95 | } 96 | const newPlan = { 97 | ...contextPlan, 98 | subjects: newSubjects, 99 | }; 100 | updatePlan(newPlan); 101 | } 102 | 103 | return ( 104 | 111 | {children} 112 | 113 | ); 114 | } 115 | 116 | export default PlanProvider; 117 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Created by https://www.toptal.com/developers/gitignore/api/node,visualstudiocode,react 2 | # Edit at https://www.toptal.com/developers/gitignore?templates=node,visualstudiocode,react 3 | 4 | ### Node ### 5 | # Logs 6 | logs 7 | *.log 8 | npm-debug.log* 9 | yarn-debug.log* 10 | yarn-error.log* 11 | lerna-debug.log* 12 | .pnpm-debug.log* 13 | 14 | # Diagnostic reports (https://nodejs.org/api/report.html) 15 | report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json 16 | 17 | # Runtime data 18 | pids 19 | *.pid 20 | *.seed 21 | *.pid.lock 22 | 23 | # Directory for instrumented libs generated by jscoverage/JSCover 24 | lib-cov 25 | 26 | # Coverage directory used by tools like istanbul 27 | coverage 28 | *.lcov 29 | 30 | # nyc test coverage 31 | .nyc_output 32 | 33 | # Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) 34 | .grunt 35 | 36 | # Bower dependency directory (https://bower.io/) 37 | bower_components 38 | 39 | # node-waf configuration 40 | .lock-wscript 41 | 42 | # Compiled binary addons (https://nodejs.org/api/addons.html) 43 | build/Release 44 | 45 | # Dependency directories 46 | node_modules/ 47 | jspm_packages/ 48 | 49 | # Snowpack dependency directory (https://snowpack.dev/) 50 | web_modules/ 51 | 52 | # TypeScript cache 53 | *.tsbuildinfo 54 | 55 | # Optional npm cache directory 56 | .npm 57 | 58 | # Optional eslint cache 59 | .eslintcache 60 | 61 | # Optional stylelint cache 62 | .stylelintcache 63 | 64 | # Microbundle cache 65 | .rpt2_cache/ 66 | .rts2_cache_cjs/ 67 | .rts2_cache_es/ 68 | .rts2_cache_umd/ 69 | 70 | # Optional REPL history 71 | .node_repl_history 72 | 73 | # Output of 'npm pack' 74 | *.tgz 75 | 76 | # Yarn Integrity file 77 | .yarn-integrity 78 | 79 | # dotenv environment variable files 80 | .env 81 | .env.development.local 82 | .env.test.local 83 | .env.production.local 84 | .env.local 85 | 86 | # parcel-bundler cache (https://parceljs.org/) 87 | .cache 88 | .parcel-cache 89 | 90 | # Next.js build output 91 | .next 92 | out 93 | 94 | # Nuxt.js build / generate output 95 | .nuxt 96 | dist 97 | 98 | # Gatsby files 99 | .cache/ 100 | # Comment in the public line in if your project uses Gatsby and not Next.js 101 | # https://nextjs.org/blog/next-9-1#public-directory-support 102 | # public 103 | 104 | # vuepress build output 105 | .vuepress/dist 106 | 107 | # vuepress v2.x temp and cache directory 108 | .temp 109 | 110 | # Docusaurus cache and generated files 111 | .docusaurus 112 | 113 | # Serverless directories 114 | .serverless/ 115 | 116 | # FuseBox cache 117 | .fusebox/ 118 | 119 | # DynamoDB Local files 120 | .dynamodb/ 121 | 122 | # TernJS port file 123 | .tern-port 124 | 125 | # Stores VSCode versions used for testing VSCode extensions 126 | .vscode-test 127 | 128 | # yarn v2 129 | .yarn/cache 130 | .yarn/unplugged 131 | .yarn/build-state.yml 132 | .yarn/install-state.gz 133 | .pnp.* 134 | 135 | ### Node Patch ### 136 | # Serverless Webpack directories 137 | .webpack/ 138 | 139 | # Optional stylelint cache 140 | 141 | # SvelteKit build / generate output 142 | .svelte-kit 143 | 144 | ### react ### 145 | .DS_* 146 | **/*.backup.* 147 | **/*.back.* 148 | 149 | node_modules 150 | 151 | *.sublime* 152 | 153 | psd 154 | thumb 155 | sketch 156 | 157 | ### VisualStudioCode ### 158 | .vscode/* 159 | !.vscode/settings.json 160 | !.vscode/tasks.json 161 | !.vscode/launch.json 162 | !.vscode/extensions.json 163 | !.vscode/*.code-snippets 164 | 165 | # Local History for Visual Studio Code 166 | .history/ 167 | 168 | # Built Visual Studio Code Extensions 169 | *.vsix 170 | 171 | ### VisualStudioCode Patch ### 172 | # Ignore all local history of files 173 | .history 174 | .ionide 175 | 176 | # End of https://www.toptal.com/developers/gitignore/api/node,visualstudiocode,react 177 | -------------------------------------------------------------------------------- /src/components/__tests__/Subject.test.tsx: -------------------------------------------------------------------------------- 1 | import { Subject } from '@/components'; 2 | import { PlanContext } from '@/context'; 3 | import { modes, statuses } from '@/data'; 4 | import { render, screen } from '@testing-library/react'; 5 | import userEvent from '@testing-library/user-event'; 6 | import { describe, expect, it, vi } from 'vitest'; 7 | import { contextPlanValue, subject } from './fixture'; 8 | 9 | describe(`<${Subject.name} /> Tests`, () => { 10 | const comboBoxRole = 'combobox'; 11 | const optionRole = 'option'; 12 | const radioGroupRole = 'radiogroup'; 13 | const radioRole = 'radio'; 14 | 15 | it('should render card with subject name', () => { 16 | render( 17 | 18 | 19 | , 20 | ); 21 | const cardTitle = screen.getByText(subject.name); 22 | expect(cardTitle).toBeTruthy(); 23 | }); 24 | 25 | it('should render card with modes combobox', () => { 26 | render( 27 | 28 | 29 | , 30 | ); 31 | const options = screen.getAllByRole(optionRole); 32 | expect(options.length).toBe(Object.keys(modes).length); 33 | }); 34 | 35 | it('should select first mode as default', () => { 36 | render( 37 | 38 | 39 | , 40 | ); 41 | const combobox: HTMLInputElement = screen.getByRole(comboBoxRole); 42 | expect(combobox.value).toBe(JSON.stringify(modes.ANNUAL)); 43 | }); 44 | 45 | it('should invoke updateMode on select input change', async () => { 46 | const mockedUpdateMode = vi.fn(); 47 | const user = userEvent.setup(); 48 | render( 49 | 55 | 56 | , 57 | ); 58 | const combobox = screen.getAllByRole(comboBoxRole)[0]; 59 | await user.selectOptions(combobox, JSON.stringify(modes.QUADRIMESTRAL)); 60 | expect(mockedUpdateMode).toHaveBeenCalledWith( 61 | subject.id, 62 | modes.QUADRIMESTRAL, 63 | ); 64 | }); 65 | 66 | it('should render card with statuses radio group', () => { 67 | render( 68 | 69 | 70 | , 71 | ); 72 | const radioGroup = screen.getByRole(radioGroupRole); 73 | expect(radioGroup.childElementCount).toBe(Object.values(statuses).length); 74 | }); 75 | 76 | it('should check first status as default', () => { 77 | render( 78 | 79 | 80 | , 81 | ); 82 | const inputs: HTMLInputElement[] = screen.getAllByRole(radioRole); 83 | expect(inputs[0].checked).toBeTruthy(); 84 | }); 85 | 86 | it('should invoke updateStatuses on radio group change', async () => { 87 | const mockedUpdateStatuses = vi.fn(); 88 | const user = userEvent.setup(); 89 | render( 90 | 96 | 97 | , 98 | ); 99 | const inputs = screen.getAllByRole(radioRole); 100 | await user.click(inputs[1]); 101 | expect(mockedUpdateStatuses).toHaveBeenCalledWith( 102 | [subject], 103 | statuses.IN_PROGRESS, 104 | ); 105 | }); 106 | }); 107 | -------------------------------------------------------------------------------- /src/utils/Digraph.ts: -------------------------------------------------------------------------------- 1 | import { modes, options, statuses } from '@/data'; 2 | import type { SubjectProps } from '@/types'; 3 | 4 | class Digraph { 5 | private readonly allSubjects: ReadonlyArray; 6 | private readonly contextSubjects: Record; 7 | private readonly subjectsByLevel: ReadonlyArray>; 8 | private digraph: string; 9 | 10 | constructor( 11 | contextSubjects: Record, 12 | subjectsByLevel: ReadonlyArray>, 13 | ) { 14 | this.allSubjects = subjectsByLevel.flat(); 15 | this.contextSubjects = contextSubjects; 16 | this.subjectsByLevel = subjectsByLevel; 17 | this.digraph = ''; 18 | } 19 | 20 | public generate() { 21 | this.appendDigraph(); 22 | this.appendDigraphOptions(); 23 | this.appendTransitions(); 24 | this.appendClosing(); 25 | return this; 26 | } 27 | 28 | public toString() { 29 | return this.digraph; 30 | } 31 | 32 | private filterNonPassedSubjects(subjects: ReadonlyArray) { 33 | return subjects.filter( 34 | (subject) => 35 | this.contextSubjects[subject.id].status.name !== statuses.PASSED.name, 36 | ); 37 | } 38 | 39 | private findSubjectById(targetSubjectId: string) { 40 | return ( 41 | this.allSubjects.find((subject) => subject.id === targetSubjectId) ?? 42 | (() => { 43 | throw new Error(`Subject with id "${targetSubjectId}" not found`); 44 | })() 45 | ); 46 | } 47 | 48 | private mapToSubjects(subjectsIds: ReadonlyArray) { 49 | return subjectsIds.map((id) => this.findSubjectById(id)); 50 | } 51 | 52 | private getJoinedOptions(options: ReadonlyArray) { 53 | return `[${options.join('')}]`; 54 | } 55 | 56 | private appendString(string: string) { 57 | this.digraph += string; 58 | } 59 | 60 | private appendOpening() { 61 | this.appendString('{'); 62 | } 63 | 64 | private appendClosing() { 65 | this.appendString('}'); 66 | } 67 | 68 | private appendDigraph() { 69 | this.appendString('digraph'); 70 | this.appendOpening(); 71 | } 72 | 73 | private appendDigraphOptions() { 74 | this.appendString(`${options.globalDigraph}`); 75 | } 76 | 77 | private appendSubjectNames(names: ReadonlyArray) { 78 | for (const name of names) { 79 | this.appendString(`"${name}"`); 80 | } 81 | } 82 | 83 | private appendDependenciesNames(dependencies: ReadonlyArray) { 84 | this.appendSubjectNames(dependencies.map((subject) => subject.name)); 85 | } 86 | 87 | private appendDependenciesWithOptions( 88 | subject: SubjectProps, 89 | dependencies: ReadonlyArray, 90 | options: ReadonlyArray, 91 | ) { 92 | this.appendOpening(); 93 | this.appendDependenciesNames(dependencies); 94 | this.appendClosing(); 95 | this.appendString('->'); 96 | this.appendSubjectNames([subject.name]); 97 | this.appendString(this.getJoinedOptions(options)); 98 | } 99 | 100 | private appendSameRank(levelSubjects: ReadonlyArray) { 101 | if (levelSubjects.length > 1) { 102 | this.appendOpening(); 103 | this.appendString('rank=same'); 104 | this.appendOpening(); 105 | const subjectNames = levelSubjects.map((subject) => subject.name); 106 | this.appendSubjectNames(subjectNames); 107 | this.appendClosing(); 108 | this.appendClosing(); 109 | } 110 | } 111 | 112 | private appendTakenDependencies(subject: SubjectProps) { 113 | const takenIds = subject.taken; 114 | if (takenIds.length > 0) { 115 | const takenSubjects = this.mapToSubjects(takenIds); 116 | this.appendDependenciesWithOptions( 117 | subject, 118 | this.filterNonPassedSubjects(takenSubjects), 119 | [`${options.globalArrowSize}`, `${options.takenTransitionEdgeStyle}`], 120 | ); 121 | } 122 | } 123 | 124 | private appendPassedDependencies(subject: SubjectProps) { 125 | const passedIds = subject.passed; 126 | if (passedIds.length > 0) { 127 | const passedSubjects = this.mapToSubjects(passedIds); 128 | this.appendDependenciesWithOptions( 129 | subject, 130 | this.filterNonPassedSubjects(passedSubjects), 131 | [`${options.globalArrowSize}`], 132 | ); 133 | } 134 | } 135 | 136 | private appendNodeOptions(name: string, id: string) { 137 | this.appendSubjectNames([name]); 138 | const { status, modes: subjectModes } = this.contextSubjects[id]; 139 | const nodeOptions = [`style="filled"fillcolor="${status.color}"`]; 140 | if (subjectModes[0] === modes.ANNUAL) { 141 | nodeOptions.push(`${options.annualSubject}`); 142 | } 143 | this.appendString(this.getJoinedOptions(nodeOptions)); 144 | } 145 | 146 | private appendDependencies( 147 | nonPassedLevelSubjects: ReadonlyArray, 148 | ) { 149 | for (const nonPassedSubject of nonPassedLevelSubjects) { 150 | this.appendNodeOptions(nonPassedSubject.name, nonPassedSubject.id); 151 | this.appendTakenDependencies(nonPassedSubject); 152 | this.appendPassedDependencies(nonPassedSubject); 153 | } 154 | } 155 | 156 | private appendNonPassedSubjects(levelSubjects: ReadonlyArray) { 157 | const nonPassedLevelSubjects = this.filterNonPassedSubjects(levelSubjects); 158 | this.appendDependencies(nonPassedLevelSubjects); 159 | this.appendSameRank(nonPassedLevelSubjects); 160 | } 161 | 162 | private appendTransitions() { 163 | for (const levelSubjects of this.subjectsByLevel) { 164 | this.appendNonPassedSubjects(levelSubjects); 165 | } 166 | } 167 | } 168 | 169 | export default Digraph; 170 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # UTN Flowchart 2 | 3 | Un generador de digrafos de planes de estudio de la Universidad Tecnológica Nacional. 4 | 5 | ## Especificaciones de uso 6 | 7 | Para cada materia, es posible elegir tanto los _estados_ como la _modalidad de cursada_. 8 | 9 | ### Estados de materias 10 | 11 | - **Falta cursada**: Todavía no cursada. El nodo asociado figura en color gris. 12 | - **Cursando**: Cursando actualmente. El nodo asociado figura en color celeste. 13 | - **Firmada**: "Regularizada" o bien con final pendiente. El nodo asociado figura en color naranja. 14 | - **Aprobada**: Aprobada con final o promoción. El nodo asociado es omitido en el digrafo (aunque en el panel principal figura en color verde). 15 | 16 |

17 | 18 | 19 |

20 | 21 | ### Modalidades de cursada 22 | 23 | - **Anual**: Cursada anual. El nodo asociado posee la forma de un rectángulo. 24 | - **Cuatrimestral**: Cursada cuatrimestral. El nodo asociado posee la forma de una elipse. 25 | 26 |

27 | 28 |

29 | 30 | ### Correlativas de materias 31 | 32 | - **Cursada**: La materia origen debe estar **firmada, "regularizada" o bien con final pendiente** para poder cursar la materia destino. La arista asociada es de trazo discontinuo. 33 | - **Aprobada**: La materia origen debe estar **aprobada** para poder cursar la materia destino. La arista asociada es de trazo continuo. 34 | 35 |

36 | 37 |

38 | 39 | ### Generación del digrafo 40 | 41 | [Viz.js](https://github.com/mdaines/viz-js) es una herramienta que permite generar grafos en el browser mediante [Graphviz](https://graphviz.org/) a partir de la especificación de una gramática abstracta en [DOT](https://graphviz.org/doc/info/lang.html), siendo en este caso empleado para generar el digrafo del plan de estudios seleccionado. 42 | 43 | Es posible visualizar el digrafo asociado al estado de las materias haciendo click en "Ver digrafo". 44 | 45 | ### Exportar el digrafo 46 | 47 | Es posible exportar el digrafo en formato SVG haciendo click en "Exportar". 48 | 49 | ## Levantar la aplicación con Docker 50 | 51 | Es posible levantar la aplicación localmente mediante Docker. La imagen del contenedor es obtenible de las siguientes formas estipuladas. 52 | 53 | ### Obtener la imagen a partir del repositorio 54 | 55 | Luego de clonar el repositorio, posicionarse en el directorio raíz del proyecto y ejecutar: 56 | 57 | ```bash 58 | docker build -t utn-flowchart . 59 | ``` 60 | 61 | ### Obtener la imagen de Docker Hub 62 | 63 | La misma es obtenible mediante: 64 | 65 | ```bash 66 | docker pull jlsuh/utn-flowchart:latest 67 | ``` 68 | 69 | ## Creación del contenedor 70 | 71 | Una vez obtenida la imagen, es posible crear el contenedor y levantar la aplicación de la forma: 72 | 73 | ```bash 74 | docker run --rm -dp 80:80 utn-flowchart 75 | ``` 76 | 77 | O bien, en caso de haber obtenido la imagen de Docker Hub: 78 | 79 | ```bash 80 | docker run --rm -dp 80:80 jlsuh/utn-flowchart 81 | ``` 82 | 83 | La aplicación ejecutará en `localhost:80`. 84 | 85 | ## Incorporación de nuevos planes de estudio 86 | 87 | Cada plan de estudio debe ser agregado en el directorio `src/data/.ts` como un archivo que exporte un único `object`. El mismo debe ser de la forma: 88 | 89 | ```ts 90 | const codigoDelPlan: DataPlan = { 91 | id: 'codigoDelPlan', 92 | branch: 'codigoDeLaRegional', 93 | subjects: [ 94 | [ 95 | // Materias del primer año 96 | { 97 | id: 'idMateria1Nivel1', 98 | modes: [modes.ANNUAL, modes.QUADRIMESTRAL], 99 | name: 'Nombre completo de la materia 1 nivel 1', 100 | passed: [], 101 | status: DEFAULT_STATUS, 102 | taken: [], 103 | }, 104 | { 105 | id: 'idMateria2Nivel1', 106 | modes: [modes.QUADRIMESTRAL], 107 | name: 'Nombre completo de la materia 2 nivel 1', 108 | passed: [], 109 | status: DEFAULT_STATUS, 110 | taken: [], 111 | }, 112 | /* Más materias según corresponda */ 113 | ], 114 | [ 115 | // Materias del segundo año 116 | { 117 | id: 'idMateria1Nivel2', 118 | modes: [modes.ANNUAL], 119 | name: 'Nombre completo de la materia 1 nivel 2', 120 | passed: [], 121 | status: DEFAULT_STATUS, 122 | taken: ['idMateria1Nivel1', 'idMateria2Nivel1'], 123 | }, 124 | { 125 | id: 'idMateria2Nivel2', 126 | modes: [modes.ANNUAL, modes.QUADRIMESTRAL], 127 | name: 'Nombre completo de la materia 2 nivel 2', 128 | passed: [], 129 | status: DEFAULT_STATUS, 130 | taken: ['idMateria2Nivel1'], 131 | }, 132 | { 133 | id: 'idMateria3Nivel2', 134 | name: 'Nombre completo de la materia 3 nivel 2', 135 | modes: [modes.QUADRIMESTRAL], 136 | passed: [], 137 | status: DEFAULT_STATUS, 138 | taken: [], 139 | }, 140 | /* Más materias según corresponda */ 141 | ], 142 | [ 143 | // Materias del tercer año 144 | { 145 | id: 'idMateria1Nivel3', 146 | modes: [modes.ANNUAL], 147 | name: 'Nombre completo de la materia 1 nivel 3', 148 | passed: ['idMateria3Nivel2'], 149 | status: DEFAULT_STATUS, 150 | taken: ['idMateria1Nivel2', 'idMateria2Nivel2'], 151 | }, 152 | { 153 | id: 'idMateria2Nivel3', 154 | modes: [modes.ANNUAL, modes.QUADRIMESTRAL], 155 | name: 'Nombre completo de la materia 2 nivel 3', 156 | passed: ['idMateria2Nivel2'], 157 | status: DEFAULT_STATUS, 158 | taken: ['idMateria1Nivel2'], 159 | }, 160 | { 161 | id: 'idMateria3Nivel3', 162 | modes: [modes.QUADRIMESTRAL], 163 | name: 'Nombre completo de la materia 3 nivel 3', 164 | passed: [], 165 | status: DEFAULT_STATUS, 166 | taken: ['idMateria1Nivel2'], 167 | }, 168 | /* Más materias según corresponda */ 169 | ], 170 | /* Más niveles según corresponda */ 171 | ], 172 | }; 173 | 174 | export default codigoDelPlan; 175 | ``` 176 | 177 | **Observaciones**: 178 | 179 | - El orden de las modalidades de cursada en el `array` `modes` debe ser según el aspecto "por defecto" bajo la cual la regional ofrezca dicha materia. Ejemplo: Si la materia se ofrece principalmente en forma anual, siendo en forma secundaria cuatrimestral, el orden correcto es: `[modes.ANNUAL, modes.QUADRIMESTRAL]`. 180 | - El `array` `taken` contiene los `id`s de las materias que son requisito para poder **cursar la materia en cuestión**. 181 | - El `array` `passed` contiene los `id`s de las materias que son requisito para poder **aprobar la materia en cuestión**. 182 | - `DEFAULT_STATUS` es `statuses.PENDING`. En otras palabras, el estado por defecto de una materia es "Falta cursada". 183 | - En caso de que la materia no tenga ninguna correlativa, los `array`s `taken` y `passed` deben ser `[]`. 184 | 185 | Finalmente, el objeto del plan debe ser incorporado al `array` de planes existentes en `src/data/plans.ts`: 186 | 187 | ```ts 188 | /* ... */ 189 | import codigoDelPlan from './codigoDelPlan'; 190 | 191 | const plans: ReadonlyArray = [ 192 | codigoDelPlan /*, Otros planes según corresponda*/, 193 | ]; 194 | 195 | export default plans; 196 | ``` 197 | 198 | La incorporación del plan de estudio al `array` se verá reflejada en la aplicación mediante una nueva `Route`, siendo la misma navegable desde el `Select` de planes de estudio: 199 | 200 |

201 | 202 |

203 | -------------------------------------------------------------------------------- /public/utn-logo.svg: -------------------------------------------------------------------------------- 1 | UTN Logo -------------------------------------------------------------------------------- /src/data/k23.ts: -------------------------------------------------------------------------------- 1 | import { DEFAULT_STATUS, modes } from '@/data'; 2 | import type { DataPlan } from '@/types'; 3 | 4 | const k23: DataPlan = { 5 | id: 'k23', 6 | branch: 'FRBA', 7 | subjects: [ 8 | [ 9 | { 10 | id: 'am1', 11 | modes: [modes.ANNUAL, modes.QUADRIMESTRAL], 12 | name: 'Análisis Matemático I', 13 | passed: [], 14 | status: DEFAULT_STATUS, 15 | taken: [], 16 | }, 17 | { 18 | id: 'aga', 19 | modes: [modes.ANNUAL, modes.QUADRIMESTRAL], 20 | name: 'Álgebra y Geometría Analítica', 21 | passed: [], 22 | status: DEFAULT_STATUS, 23 | taken: [], 24 | }, 25 | { 26 | id: 'f1', 27 | modes: [modes.ANNUAL, modes.QUADRIMESTRAL], 28 | name: 'Física I', 29 | passed: [], 30 | status: DEFAULT_STATUS, 31 | taken: [], 32 | }, 33 | { 34 | id: 'ingles1', 35 | modes: [modes.QUADRIMESTRAL], 36 | name: 'Inglés I', 37 | passed: [], 38 | status: DEFAULT_STATUS, 39 | taken: [], 40 | }, 41 | { 42 | id: 'lyed', 43 | modes: [modes.ANNUAL], 44 | name: 'Lógica y Estructuras Discretas', 45 | passed: [], 46 | status: DEFAULT_STATUS, 47 | taken: [], 48 | }, 49 | { 50 | id: 'ayed', 51 | modes: [modes.ANNUAL], 52 | name: 'Algoritmos y Estructuras de Datos', 53 | passed: [], 54 | status: DEFAULT_STATUS, 55 | taken: [], 56 | }, 57 | { 58 | id: 'adc', 59 | modes: [modes.ANNUAL], 60 | name: 'Arquitectura de Computadores', 61 | passed: [], 62 | status: DEFAULT_STATUS, 63 | taken: [], 64 | }, 65 | { 66 | id: 'sypn', 67 | modes: [modes.ANNUAL], 68 | name: 'Sist. y Procesos de Negocio', 69 | passed: [], 70 | status: DEFAULT_STATUS, 71 | taken: [], 72 | }, 73 | ], 74 | [ 75 | { 76 | id: 'am2', 77 | modes: [modes.ANNUAL, modes.QUADRIMESTRAL], 78 | name: 'Análisis Matemático II', 79 | passed: [], 80 | status: DEFAULT_STATUS, 81 | taken: ['am1', 'aga'], 82 | }, 83 | { 84 | id: 'f2', 85 | modes: [modes.ANNUAL, modes.QUADRIMESTRAL], 86 | name: 'Física II', 87 | passed: [], 88 | status: DEFAULT_STATUS, 89 | taken: ['am1', 'f1'], 90 | }, 91 | { 92 | id: 'iys', 93 | modes: [modes.QUADRIMESTRAL], 94 | name: 'Ing. y Sociedad', 95 | passed: [], 96 | status: DEFAULT_STATUS, 97 | taken: [], 98 | }, 99 | { 100 | id: 'ingles2', 101 | modes: [modes.QUADRIMESTRAL], 102 | name: 'Inglés II', 103 | passed: ['ingles1'], 104 | status: DEFAULT_STATUS, 105 | taken: [], 106 | }, 107 | { 108 | id: 'ssl', 109 | modes: [modes.ANNUAL], 110 | name: 'Sintaxis y Semántica de los Lenguajes', 111 | passed: [], 112 | status: DEFAULT_STATUS, 113 | taken: ['lyed', 'ayed'], 114 | }, 115 | { 116 | id: 'pdep', 117 | modes: [modes.ANNUAL], 118 | name: 'Paradigmas de Programación', 119 | passed: [], 120 | status: DEFAULT_STATUS, 121 | taken: ['lyed', 'ayed'], 122 | }, 123 | { 124 | id: 'sisop', 125 | modes: [modes.QUADRIMESTRAL], 126 | name: 'Sist. Operativos', 127 | passed: [], 128 | status: DEFAULT_STATUS, 129 | taken: ['adc'], 130 | }, 131 | { 132 | id: 'adsi', 133 | modes: [modes.ANNUAL], 134 | name: 'Análisis de Sistemas de Información', 135 | passed: [], 136 | status: DEFAULT_STATUS, 137 | taken: ['ayed', 'sypn'], 138 | }, 139 | ], 140 | [ 141 | { 142 | id: 'proba', 143 | modes: [modes.QUADRIMESTRAL], 144 | name: 'Prob. y Estadística', 145 | passed: [], 146 | status: DEFAULT_STATUS, 147 | taken: ['am1', 'aga'], 148 | }, 149 | { 150 | id: 'economia', 151 | modes: [modes.QUADRIMESTRAL], 152 | name: 'Economía', 153 | passed: ['am1', 'aga'], 154 | status: DEFAULT_STATUS, 155 | taken: [], 156 | }, 157 | { 158 | id: 'bdd', 159 | modes: [modes.QUADRIMESTRAL], 160 | name: 'Bases de Datos', 161 | passed: ['lyed', 'ayed'], 162 | status: DEFAULT_STATUS, 163 | taken: ['ssl', 'adsi'], 164 | }, 165 | { 166 | id: 'ddsw', 167 | modes: [modes.QUADRIMESTRAL], 168 | name: 'Desarrollo de Software', 169 | passed: ['lyed', 'ayed'], 170 | status: DEFAULT_STATUS, 171 | taken: ['pdep', 'adsi'], 172 | }, 173 | { 174 | id: 'cdd', 175 | modes: [modes.QUADRIMESTRAL], 176 | name: 'Comunicación de Datos', 177 | passed: ['f1', 'adc'], 178 | status: DEFAULT_STATUS, 179 | taken: [], 180 | }, 181 | { 182 | id: 'an', 183 | modes: [modes.QUADRIMESTRAL], 184 | name: 'Análisis Numérico', 185 | passed: ['am1', 'aga'], 186 | status: DEFAULT_STATUS, 187 | taken: ['am2'], 188 | }, 189 | { 190 | id: 'ddsi', 191 | modes: [modes.ANNUAL], 192 | name: 'Diseño de Sistemas de Información', 193 | passed: ['ingles1', 'ayed', 'sypn'], 194 | status: DEFAULT_STATUS, 195 | taken: ['pdep', 'adsi'], 196 | }, 197 | ], 198 | [ 199 | { 200 | id: 'legislacion', 201 | modes: [modes.QUADRIMESTRAL], 202 | name: 'Legislación', 203 | passed: [], 204 | status: DEFAULT_STATUS, 205 | taken: ['iys'], 206 | }, 207 | { 208 | id: 'iycds', 209 | modes: [modes.QUADRIMESTRAL], 210 | name: 'Ing. y Calidad de Software', 211 | passed: ['ssl', 'pdep'], 212 | status: DEFAULT_STATUS, 213 | taken: ['bdd', 'ddsw', 'ddsi'], 214 | }, 215 | { 216 | id: 'rdd', 217 | modes: [modes.QUADRIMESTRAL], 218 | name: 'Redes de Datos', 219 | passed: [], 220 | status: DEFAULT_STATUS, 221 | taken: ['sisop', 'cdd'], 222 | }, 223 | { 224 | id: 'io', 225 | modes: [modes.QUADRIMESTRAL], 226 | name: 'Inv. Operativa', 227 | passed: [], 228 | status: DEFAULT_STATUS, 229 | taken: ['proba', 'an'], 230 | }, 231 | { 232 | id: 'simulacion', 233 | modes: [modes.QUADRIMESTRAL], 234 | name: 'Simulación', 235 | passed: ['am2'], 236 | status: DEFAULT_STATUS, 237 | taken: ['proba'], 238 | }, 239 | { 240 | id: 'tpla', 241 | modes: [modes.QUADRIMESTRAL], 242 | name: 'Tecnologías para la Automatización', 243 | passed: ['am2'], 244 | status: DEFAULT_STATUS, 245 | taken: ['f2', 'an'], 246 | }, 247 | { 248 | id: 'admsi', 249 | modes: [modes.ANNUAL], 250 | name: 'Adm. de Sist. de Información', 251 | passed: ['adsi'], 252 | status: DEFAULT_STATUS, 253 | taken: ['economia', 'ddsi'], 254 | }, 255 | ], 256 | [ 257 | { 258 | id: 'ia', 259 | modes: [modes.QUADRIMESTRAL], 260 | name: 'Inteligencia Artificial', 261 | passed: ['proba', 'an'], 262 | status: DEFAULT_STATUS, 263 | taken: ['simulacion'], 264 | }, 265 | { 266 | id: 'csdd', 267 | modes: [modes.QUADRIMESTRAL], 268 | name: 'Ciencias de Datos', 269 | passed: ['proba', 'bdd'], 270 | status: DEFAULT_STATUS, 271 | taken: ['simulacion'], 272 | }, 273 | { 274 | id: 'sdg', 275 | modes: [modes.QUADRIMESTRAL], 276 | name: 'Sist. de Gestión', 277 | passed: ['ddsi'], 278 | status: DEFAULT_STATUS, 279 | taken: ['economia', 'io'], 280 | }, 281 | { 282 | id: 'gg', 283 | modes: [modes.QUADRIMESTRAL], 284 | name: 'Gestión Gerencial', 285 | passed: ['economia'], 286 | status: DEFAULT_STATUS, 287 | taken: ['legislacion', 'admsi'], 288 | }, 289 | { 290 | id: 'selsi', 291 | modes: [modes.QUADRIMESTRAL], 292 | name: 'Seguridad en los Sistemas de Información', 293 | passed: ['ddsw', 'cdd'], 294 | status: DEFAULT_STATUS, 295 | taken: ['rdd', 'admsi'], 296 | }, 297 | { 298 | id: 'proyecto', 299 | modes: [modes.ANNUAL], 300 | name: 'Proyecto Final', 301 | passed: ['ingles2', 'ddsw', 'ddsi'], 302 | status: DEFAULT_STATUS, 303 | taken: ['iycds', 'rdd', 'admsi'], 304 | }, 305 | { 306 | id: 'pps', 307 | modes: [modes.ANNUAL], 308 | name: 'Práctica Profesional Supervisada', 309 | passed: ['ingles2', 'ddsw', 'ddsi'], 310 | status: DEFAULT_STATUS, 311 | taken: ['iycds', 'rdd', 'admsi'], 312 | }, 313 | ], 314 | ], 315 | }; 316 | 317 | export default k23; 318 | -------------------------------------------------------------------------------- /src/data/k08.ts: -------------------------------------------------------------------------------- 1 | import { DEFAULT_STATUS, modes } from '@/data'; 2 | import type { DataPlan } from '@/types'; 3 | 4 | const k08: DataPlan = { 5 | id: 'k08', 6 | branch: 'FRBA', 7 | subjects: [ 8 | [ 9 | { 10 | id: 'aga', 11 | modes: [modes.ANNUAL, modes.QUADRIMESTRAL], 12 | name: 'Álgebra y Geometría Analítica', 13 | passed: [], 14 | status: DEFAULT_STATUS, 15 | taken: [], 16 | }, 17 | { 18 | id: 'am1', 19 | modes: [modes.ANNUAL, modes.QUADRIMESTRAL], 20 | name: 'Análisis Matemático I', 21 | passed: [], 22 | status: DEFAULT_STATUS, 23 | taken: [], 24 | }, 25 | { 26 | id: 'md', 27 | modes: [modes.ANNUAL], 28 | name: 'Matemática Discreta', 29 | passed: [], 30 | status: DEFAULT_STATUS, 31 | taken: [], 32 | }, 33 | { 34 | id: 'quimica', 35 | modes: [modes.QUADRIMESTRAL], 36 | name: 'Química', 37 | passed: [], 38 | status: DEFAULT_STATUS, 39 | taken: [], 40 | }, 41 | { 42 | id: 'iys', 43 | modes: [modes.QUADRIMESTRAL], 44 | name: 'Ing. y Sociedad', 45 | passed: [], 46 | status: DEFAULT_STATUS, 47 | taken: [], 48 | }, 49 | { 50 | id: 'ayed', 51 | modes: [modes.ANNUAL], 52 | name: 'Algoritmos y Estructuras de Datos', 53 | passed: [], 54 | status: DEFAULT_STATUS, 55 | taken: [], 56 | }, 57 | { 58 | id: 'adc', 59 | modes: [modes.ANNUAL], 60 | name: 'Arquitectura de Computadores', 61 | passed: [], 62 | status: DEFAULT_STATUS, 63 | taken: [], 64 | }, 65 | { 66 | id: 'syo', 67 | modes: [modes.ANNUAL], 68 | name: 'Sist. y Organizaciones', 69 | passed: [], 70 | status: DEFAULT_STATUS, 71 | taken: [], 72 | }, 73 | ], 74 | [ 75 | { 76 | id: 'ads', 77 | modes: [modes.ANNUAL], 78 | name: 'Análisis de Sistemas', 79 | passed: [], 80 | status: DEFAULT_STATUS, 81 | taken: ['syo', 'ayed'], 82 | }, 83 | { 84 | id: 'sdr', 85 | modes: [modes.ANNUAL], 86 | name: 'Sist. de Representación', 87 | passed: [], 88 | status: DEFAULT_STATUS, 89 | taken: [], 90 | }, 91 | { 92 | id: 'am2', 93 | modes: [modes.ANNUAL, modes.QUADRIMESTRAL], 94 | name: 'Análisis Matemático II', 95 | passed: [], 96 | status: DEFAULT_STATUS, 97 | taken: ['am1', 'aga'], 98 | }, 99 | { 100 | id: 'ssl', 101 | modes: [modes.ANNUAL], 102 | name: 'Sintaxis y Semántica de los Lenguajes', 103 | passed: [], 104 | status: DEFAULT_STATUS, 105 | taken: ['md', 'ayed'], 106 | }, 107 | { 108 | id: 'ingles1', 109 | modes: [modes.QUADRIMESTRAL], 110 | name: 'Inglés I', 111 | passed: [], 112 | status: DEFAULT_STATUS, 113 | taken: [], 114 | }, 115 | { 116 | id: 'f1', 117 | modes: [modes.ANNUAL, modes.QUADRIMESTRAL], 118 | name: 'Física I', 119 | passed: [], 120 | status: DEFAULT_STATUS, 121 | taken: [], 122 | }, 123 | { 124 | id: 'pdep', 125 | modes: [modes.ANNUAL], 126 | name: 'Paradigmas de Programación', 127 | passed: [], 128 | status: DEFAULT_STATUS, 129 | taken: ['md', 'ayed'], 130 | }, 131 | { 132 | id: 'proba', 133 | modes: [modes.QUADRIMESTRAL], 134 | name: 'Prob. y Estadística', 135 | passed: [], 136 | status: DEFAULT_STATUS, 137 | taken: ['am1', 'aga'], 138 | }, 139 | ], 140 | [ 141 | { 142 | id: 'dds', 143 | modes: [modes.ANNUAL], 144 | name: 'Diseño de Sistemas', 145 | passed: ['md', 'syo', 'ayed'], 146 | status: DEFAULT_STATUS, 147 | taken: ['ads', 'pdep'], 148 | }, 149 | { 150 | id: 'sisop', 151 | modes: [modes.QUADRIMESTRAL], 152 | name: 'Sist. Operativos', 153 | passed: [], 154 | status: DEFAULT_STATUS, 155 | taken: ['md', 'ayed', 'adc'], 156 | }, 157 | { 158 | id: 'f2', 159 | modes: [modes.ANNUAL, modes.QUADRIMESTRAL], 160 | name: 'Física II', 161 | passed: [], 162 | status: DEFAULT_STATUS, 163 | taken: ['am1', 'f1'], 164 | }, 165 | { 166 | id: 'economia', 167 | modes: [modes.QUADRIMESTRAL], 168 | name: 'Economía', 169 | passed: ['syo', 'ayed'], 170 | status: DEFAULT_STATUS, 171 | taken: ['ads'], 172 | }, 173 | { 174 | id: 'gdd', 175 | modes: [modes.QUADRIMESTRAL], 176 | name: 'Gestión de Datos', 177 | passed: ['md', 'syo', 'ayed'], 178 | status: DEFAULT_STATUS, 179 | taken: ['ads', 'ssl', 'pdep'], 180 | }, 181 | { 182 | id: 'ms', 183 | modes: [modes.QUADRIMESTRAL], 184 | name: 'Matemática Superior', 185 | passed: ['am1', 'aga'], 186 | status: DEFAULT_STATUS, 187 | taken: ['am2'], 188 | }, 189 | { 190 | id: 'legislacion', 191 | modes: [modes.QUADRIMESTRAL], 192 | name: 'Legislación', 193 | passed: ['syo', 'ayed'], 194 | status: DEFAULT_STATUS, 195 | taken: ['ads', 'iys'], 196 | }, 197 | { 198 | id: 'ingles2', 199 | modes: [modes.QUADRIMESTRAL], 200 | name: 'Inglés II', 201 | passed: ['ingles1'], 202 | status: DEFAULT_STATUS, 203 | taken: [], 204 | }, 205 | ], 206 | [ 207 | { 208 | id: 'adr', 209 | modes: [modes.ANNUAL], 210 | name: 'Adm. de Recursos', 211 | passed: ['adc', 'ingles1', 'ads', 'pdep'], 212 | status: DEFAULT_STATUS, 213 | taken: ['dds', 'sisop', 'economia'], 214 | }, 215 | { 216 | id: 'ids', 217 | modes: [modes.QUADRIMESTRAL], 218 | name: 'Ing. de Software', 219 | passed: ['ads', 'ssl', 'pdep'], 220 | status: DEFAULT_STATUS, 221 | taken: ['proba', 'dds', 'gdd'], 222 | }, 223 | { 224 | id: 'tdc', 225 | modes: [modes.QUADRIMESTRAL], 226 | name: 'Teoría de Control', 227 | passed: ['am2', 'f2'], 228 | status: DEFAULT_STATUS, 229 | taken: ['quimica', 'ms'], 230 | }, 231 | { 232 | id: 'comunicaciones', 233 | modes: [modes.QUADRIMESTRAL], 234 | name: 'Comunicaciones', 235 | passed: ['am1', 'aga', 'f1'], 236 | status: DEFAULT_STATUS, 237 | taken: ['adc', 'am2', 'f2'], 238 | }, 239 | { 240 | id: 'redes', 241 | modes: [modes.QUADRIMESTRAL], 242 | name: 'Redes de Información', 243 | passed: ['md', 'ayed', 'adc', 'am2', 'f2'], 244 | status: DEFAULT_STATUS, 245 | taken: ['sisop', 'comunicaciones'], 246 | }, 247 | { 248 | id: 'io', 249 | modes: [modes.QUADRIMESTRAL], 250 | name: 'Inv. Operativa', 251 | passed: ['am2'], 252 | status: DEFAULT_STATUS, 253 | taken: ['proba', 'ms'], 254 | }, 255 | { 256 | id: 'simulacion', 257 | modes: [modes.QUADRIMESTRAL], 258 | name: 'Simulación', 259 | passed: ['am2'], 260 | status: DEFAULT_STATUS, 261 | taken: ['pdep', 'ms'], 262 | }, 263 | ], 264 | [ 265 | { 266 | id: 'proyecto', 267 | modes: [modes.ANNUAL], 268 | name: 'Proyecto Final', 269 | passed: [ 270 | 'iys', 271 | 'sdr', 272 | 'proba', 273 | 'sisop', 274 | 'dds', 275 | 'gdd', 276 | 'economia', 277 | 'ingles2', 278 | 'comunicaciones', 279 | ], 280 | status: DEFAULT_STATUS, 281 | taken: ['legislacion', 'adr', 'redes', 'ids'], 282 | }, 283 | { 284 | id: 'pps', 285 | modes: [modes.ANNUAL], 286 | name: 'Práctica Profesional Supervisada', 287 | passed: ['ads', 'ssl', 'am2', 'pdep', 'sisop', 'ingles2'], 288 | status: DEFAULT_STATUS, 289 | taken: ['dds', 'gdd', 'comunicaciones', 'redes'], 290 | }, 291 | { 292 | id: 'ia', 293 | modes: [modes.QUADRIMESTRAL], 294 | name: 'Inteligencia Artificial', 295 | passed: ['proba', 'dds', 'ms'], 296 | status: DEFAULT_STATUS, 297 | taken: ['io', 'simulacion'], 298 | }, 299 | { 300 | id: 'ag', 301 | modes: [modes.QUADRIMESTRAL], 302 | name: 'Adm. Gerencial', 303 | passed: ['proba', 'dds', 'sisop', 'ms', 'economia'], 304 | status: DEFAULT_STATUS, 305 | taken: ['adr', 'io'], 306 | }, 307 | { 308 | id: 'sdg', 309 | modes: [modes.QUADRIMESTRAL], 310 | name: 'Sist. de Gestión', 311 | passed: ['proba', 'dds', 'sisop', 'ms', 'economia'], 312 | status: DEFAULT_STATUS, 313 | taken: ['adr', 'io', 'simulacion'], 314 | }, 315 | ], 316 | ], 317 | }; 318 | 319 | export default k08; 320 | -------------------------------------------------------------------------------- /src/data/r23.ts: -------------------------------------------------------------------------------- 1 | import { DEFAULT_STATUS, modes } from '@/data'; 2 | import type { DataPlan } from '@/types'; 3 | 4 | const r23: DataPlan = { 5 | id: 'r23', 6 | branch: 'FRBA', 7 | subjects: [ 8 | [ 9 | { 10 | id: 'info1', 11 | modes: [modes.ANNUAL], 12 | name: 'Informática I', 13 | passed: [], 14 | status: DEFAULT_STATUS, 15 | taken: [], 16 | }, 17 | { 18 | id: 'aga', 19 | modes: [modes.ANNUAL, modes.QUADRIMESTRAL], 20 | name: 'Álgebra y Geometría Analítica', 21 | passed: [], 22 | status: DEFAULT_STATUS, 23 | taken: [], 24 | }, 25 | { 26 | id: 'am1', 27 | modes: [modes.ANNUAL, modes.QUADRIMESTRAL], 28 | name: 'Análisis Matemático I', 29 | passed: [], 30 | status: DEFAULT_STATUS, 31 | taken: [], 32 | }, 33 | { 34 | id: 'iys', 35 | modes: [modes.QUADRIMESTRAL], 36 | name: 'Ing. y Sociedad', 37 | passed: [], 38 | status: DEFAULT_STATUS, 39 | taken: [], 40 | }, 41 | { 42 | id: 'am2', 43 | modes: [modes.ANNUAL, modes.QUADRIMESTRAL], 44 | name: 'Análisis Matemático II', 45 | passed: [], 46 | status: DEFAULT_STATUS, 47 | taken: ['aga', 'am1'], 48 | }, 49 | { 50 | id: 'f1', 51 | modes: [modes.ANNUAL, modes.QUADRIMESTRAL], 52 | name: 'Física I', 53 | passed: [], 54 | status: DEFAULT_STATUS, 55 | taken: [], 56 | }, 57 | { 58 | id: 'dapc', 59 | modes: [modes.ANNUAL], 60 | name: 'Diseño Asistido por Computadora', 61 | passed: [], 62 | status: DEFAULT_STATUS, 63 | taken: [], 64 | }, 65 | ], 66 | [ 67 | { 68 | id: 'info2', 69 | modes: [modes.ANNUAL], 70 | name: 'Informática II', 71 | passed: [], 72 | status: DEFAULT_STATUS, 73 | taken: ['info1', 'aga', 'am1'], 74 | }, 75 | { 76 | id: 'asys', 77 | modes: [modes.ANNUAL], 78 | name: 'Análisis de Señales y Sistemas', 79 | passed: ['aga', 'am1'], 80 | status: DEFAULT_STATUS, 81 | taken: ['am2'], 82 | }, 83 | { 84 | id: 'qg', 85 | modes: [modes.ANNUAL], 86 | name: 'Quimica General', 87 | passed: [], 88 | status: DEFAULT_STATUS, 89 | taken: [], 90 | }, 91 | { 92 | id: 'f2', 93 | modes: [modes.ANNUAL, modes.QUADRIMESTRAL], 94 | name: 'Física II', 95 | passed: [], 96 | status: DEFAULT_STATUS, 97 | taken: ['am1', 'f1'], 98 | }, 99 | { 100 | id: 'proba', 101 | modes: [modes.QUADRIMESTRAL], 102 | name: 'Prob. y Estadística', 103 | passed: [], 104 | status: DEFAULT_STATUS, 105 | taken: ['aga', 'am1'], 106 | }, 107 | { 108 | id: 'fe', 109 | modes: [modes.QUADRIMESTRAL], 110 | name: 'Física Electrónica', 111 | passed: ['aga', 'am1', 'f1'], 112 | status: DEFAULT_STATUS, 113 | taken: ['f2'], 114 | }, 115 | { 116 | id: 'ingles1', 117 | modes: [modes.QUADRIMESTRAL], 118 | name: 'Inglés I', 119 | passed: [], 120 | status: DEFAULT_STATUS, 121 | taken: [], 122 | }, 123 | ], 124 | [ 125 | { 126 | id: 'tdlc1', 127 | modes: [modes.ANNUAL], 128 | name: 'Teoría de los Circuitos I', 129 | passed: ['am1', 'f1'], 130 | status: DEFAULT_STATUS, 131 | taken: ['am2', 'f2'], 132 | }, 133 | { 134 | id: 'td1', 135 | modes: [modes.ANNUAL], 136 | name: 'Técnicas Digitales I', 137 | passed: ['aga'], 138 | status: DEFAULT_STATUS, 139 | taken: ['info1'], 140 | }, 141 | { 142 | id: 'dispo', 143 | modes: [modes.QUADRIMESTRAL], 144 | name: 'Dispositivos Electrónicos', 145 | passed: [], 146 | status: DEFAULT_STATUS, 147 | taken: ['info1', 'am1', 'qg'], 148 | }, 149 | { 150 | id: 'legislacion', 151 | modes: [modes.QUADRIMESTRAL], 152 | name: 'Legislación', 153 | passed: ['iys'], 154 | status: DEFAULT_STATUS, 155 | taken: ['info2'], 156 | }, 157 | { 158 | id: 'ea1', 159 | modes: [modes.QUADRIMESTRAL], 160 | name: 'Electrónica Aplicada I', 161 | passed: ['info1', 'am1', 'f1'], 162 | status: DEFAULT_STATUS, 163 | taken: ['qg', 'f2'], 164 | }, 165 | { 166 | id: 'mde', 167 | modes: [modes.ANNUAL], 168 | name: 'Medios de Enlace', 169 | passed: ['aga', 'am1', 'f1'], 170 | status: DEFAULT_STATUS, 171 | taken: ['am2', 'f2'], 172 | }, 173 | { 174 | id: 'ingles2', 175 | modes: [modes.QUADRIMESTRAL], 176 | name: 'Inglés II', 177 | passed: ['ingles1'], 178 | status: DEFAULT_STATUS, 179 | taken: [], 180 | }, 181 | ], 182 | [ 183 | { 184 | id: 'td2', 185 | modes: [modes.ANNUAL], 186 | name: 'Técnicas Digtales II', 187 | passed: ['qg', 'f2'], 188 | status: DEFAULT_STATUS, 189 | taken: ['info2', 'td1', 'ea1'], 190 | }, 191 | { 192 | id: 'me1', 193 | modes: [modes.ANNUAL], 194 | name: 'Medidas Electrónicas I', 195 | passed: ['am2', 'qg', 'f2'], 196 | status: DEFAULT_STATUS, 197 | taken: ['asys', 'tdlc1', 'td1', 'ea1'], 198 | }, 199 | { 200 | id: 'tdlc2', 201 | modes: [modes.ANNUAL], 202 | name: 'Teoría de los Circuitos II', 203 | passed: ['am2', 'f2'], 204 | status: DEFAULT_STATUS, 205 | taken: ['asys', 'tdlc1'], 206 | }, 207 | { 208 | id: 'meil', 209 | modes: [modes.ANNUAL], 210 | name: 'Máquinas e Instalaciones Eléctricas', 211 | passed: ['am2', 'f2'], 212 | status: DEFAULT_STATUS, 213 | taken: ['asys', 'tdlc1'], 214 | }, 215 | { 216 | id: 'sdcom', 217 | modes: [modes.ANNUAL], 218 | name: 'Sistemas de Comunicaciones', 219 | passed: ['am2', 'f2'], 220 | status: DEFAULT_STATUS, 221 | taken: ['asys', 'proba', 'ea1', 'mde'], 222 | }, 223 | { 224 | id: 'ea2', 225 | modes: [modes.ANNUAL], 226 | name: 'Electrónica Aplicada II', 227 | passed: ['am2', 'f2', 'ingles1'], 228 | status: DEFAULT_STATUS, 229 | taken: ['asys', 'fe', 'tdlc1', 'dispo', 'ea1'], 230 | }, 231 | { 232 | id: 'shyma', 233 | modes: [modes.ANNUAL], 234 | name: 'Seguridad, Higiene y medio ambiente', 235 | passed: ['iys', 'qg'], 236 | status: DEFAULT_STATUS, 237 | taken: [], 238 | }, 239 | ], 240 | [ 241 | { 242 | id: 'td3', 243 | modes: [modes.ANNUAL], 244 | name: 'Técnica Digitales III', 245 | passed: ['info2', 'td1', 'ea1'], 246 | status: DEFAULT_STATUS, 247 | taken: ['td2'], 248 | }, 249 | { 250 | id: 'me2', 251 | modes: [modes.ANNUAL], 252 | name: 'Medidas Electrónicas II', 253 | passed: ['dapc', 'fe', 'tdlc1', 'td1', 'ea1', 'ingles2'], 254 | status: DEFAULT_STATUS, 255 | taken: ['td2', 'me1', 'sdcom', 'ea2'], 256 | }, 257 | { 258 | id: 'sdc', 259 | modes: [modes.ANNUAL], 260 | name: 'Sistema de Control', 261 | passed: ['fe', 'tdlc1'], 262 | status: DEFAULT_STATUS, 263 | taken: ['tdlc2', 'meil'], 264 | }, 265 | { 266 | id: 'ea3', 267 | modes: [modes.ANNUAL], 268 | name: 'Electrónica Aplicada III', 269 | passed: ['fe', 'tdlc1', 'ea1'], 270 | status: DEFAULT_STATUS, 271 | taken: ['tdlc2', 'sdcom', 'ea2'], 272 | }, 273 | { 274 | id: 'te', 275 | modes: [modes.ANNUAL], 276 | name: 'Tecnología Electrónica', 277 | passed: ['fe', 'td1', 'ea1'], 278 | status: DEFAULT_STATUS, 279 | taken: ['me1'], 280 | }, 281 | { 282 | id: 'edp', 283 | modes: [modes.ANNUAL], 284 | name: 'Electrónica de Potencia', 285 | passed: ['fe', 'td1', 'ea1'], 286 | status: DEFAULT_STATUS, 287 | taken: ['me1', 'meil', 'ea2'], 288 | }, 289 | { 290 | id: 'oi', 291 | modes: [modes.QUADRIMESTRAL], 292 | name: 'Organización Industrial', 293 | passed: [], 294 | status: DEFAULT_STATUS, 295 | taken: ['legislacion'], 296 | }, 297 | ], 298 | [ 299 | { 300 | id: 'economia', 301 | modes: [modes.QUADRIMESTRAL], 302 | name: 'Economía', 303 | passed: ['iys'], 304 | status: DEFAULT_STATUS, 305 | taken: ['info2'], 306 | }, 307 | { 308 | id: 'proyecto', 309 | modes: [modes.ANNUAL], 310 | name: 'Proyecto Final', 311 | passed: ['td2', 'me1', 'meil', 'ea2'], 312 | status: DEFAULT_STATUS, 313 | taken: ['td3', 'me2', 'ea3'], 314 | }, 315 | { 316 | id: 'pps', 317 | modes: [modes.ANNUAL], 318 | name: 'Práctica Profesional Supervisada', 319 | passed: ['dapc', 'fe', 'tdlc1', 'td1', 'ea1', 'ingles2'], 320 | status: DEFAULT_STATUS, 321 | taken: ['td2', 'me1', 'sdcom', 'ea2'], 322 | }, 323 | ], 324 | ], 325 | }; 326 | 327 | export default r23; 328 | -------------------------------------------------------------------------------- /yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | "@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4", "@babel/code-frame@^7.25.9", "@babel/code-frame@^7.26.2": 6 | version "7.26.2" 7 | resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.26.2.tgz#4b5fab97d33338eff916235055f0ebc21e573a85" 8 | integrity sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ== 9 | dependencies: 10 | "@babel/helper-validator-identifier" "^7.25.9" 11 | js-tokens "^4.0.0" 12 | picocolors "^1.0.0" 13 | 14 | "@babel/generator@^7.26.3": 15 | version "7.26.3" 16 | resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.26.3.tgz#ab8d4360544a425c90c248df7059881f4b2ce019" 17 | integrity sha512-6FF/urZvD0sTeO7k6/B15pMLC4CHUv1426lzr3N01aHJTl046uCAh9LXW/fzeXXjPNCJ6iABW5XaWOsIZB93aQ== 18 | dependencies: 19 | "@babel/parser" "^7.26.3" 20 | "@babel/types" "^7.26.3" 21 | "@jridgewell/gen-mapping" "^0.3.5" 22 | "@jridgewell/trace-mapping" "^0.3.25" 23 | jsesc "^3.0.2" 24 | 25 | "@babel/helper-module-imports@^7.16.7": 26 | version "7.25.9" 27 | resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.25.9.tgz#e7f8d20602ebdbf9ebbea0a0751fb0f2a4141715" 28 | integrity sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw== 29 | dependencies: 30 | "@babel/traverse" "^7.25.9" 31 | "@babel/types" "^7.25.9" 32 | 33 | "@babel/helper-string-parser@^7.25.9": 34 | version "7.25.9" 35 | resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz#1aabb72ee72ed35789b4bbcad3ca2862ce614e8c" 36 | integrity sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA== 37 | 38 | "@babel/helper-validator-identifier@^7.25.9": 39 | version "7.25.9" 40 | resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz#24b64e2c3ec7cd3b3c547729b8d16871f22cbdc7" 41 | integrity sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ== 42 | 43 | "@babel/parser@^7.25.9", "@babel/parser@^7.26.3": 44 | version "7.26.3" 45 | resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.26.3.tgz#8c51c5db6ddf08134af1ddbacf16aaab48bac234" 46 | integrity sha512-WJ/CvmY8Mea8iDXo6a7RK2wbmJITT5fN3BEkRuFlxVyNx8jOKIIhmC4fSkTcPcf8JyavbBwIe6OpiCOBXt/IcA== 47 | dependencies: 48 | "@babel/types" "^7.26.3" 49 | 50 | "@babel/runtime@^7.12.5", "@babel/runtime@^7.18.3", "@babel/runtime@^7.26.0", "@babel/runtime@^7.5.5", "@babel/runtime@^7.8.7": 51 | version "7.26.0" 52 | resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.26.0.tgz#8600c2f595f277c60815256418b85356a65173c1" 53 | integrity sha512-FDSOghenHTiToteC/QRlv2q3DhPZ/oOXTBoirfWNx1Cx3TMVcGWQtMMmQcSvb/JjpNeGzx8Pq/b4fKEJuWm1sw== 54 | dependencies: 55 | regenerator-runtime "^0.14.0" 56 | 57 | "@babel/template@^7.25.9": 58 | version "7.25.9" 59 | resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.25.9.tgz#ecb62d81a8a6f5dc5fe8abfc3901fc52ddf15016" 60 | integrity sha512-9DGttpmPvIxBb/2uwpVo3dqJ+O6RooAFOS+lB+xDqoE2PVCE8nfoHMdZLpfCQRLwvohzXISPZcgxt80xLfsuwg== 61 | dependencies: 62 | "@babel/code-frame" "^7.25.9" 63 | "@babel/parser" "^7.25.9" 64 | "@babel/types" "^7.25.9" 65 | 66 | "@babel/traverse@^7.25.9": 67 | version "7.26.4" 68 | resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.26.4.tgz#ac3a2a84b908dde6d463c3bfa2c5fdc1653574bd" 69 | integrity sha512-fH+b7Y4p3yqvApJALCPJcwb0/XaOSgtK4pzV6WVjPR5GLFQBRI7pfoX2V2iM48NXvX07NUxxm1Vw98YjqTcU5w== 70 | dependencies: 71 | "@babel/code-frame" "^7.26.2" 72 | "@babel/generator" "^7.26.3" 73 | "@babel/parser" "^7.26.3" 74 | "@babel/template" "^7.25.9" 75 | "@babel/types" "^7.26.3" 76 | debug "^4.3.1" 77 | globals "^11.1.0" 78 | 79 | "@babel/types@^7.25.9", "@babel/types@^7.26.3": 80 | version "7.26.3" 81 | resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.26.3.tgz#37e79830f04c2b5687acc77db97fbc75fb81f3c0" 82 | integrity sha512-vN5p+1kl59GVKMvTHt55NzzmYVxprfJD+ql7U9NFIfKCBkYE55LYtS+WtPlaYOyzydrKI8Nezd+aZextrd+FMA== 83 | dependencies: 84 | "@babel/helper-string-parser" "^7.25.9" 85 | "@babel/helper-validator-identifier" "^7.25.9" 86 | 87 | "@biomejs/biome@1.9.4": 88 | version "1.9.4" 89 | resolved "https://registry.yarnpkg.com/@biomejs/biome/-/biome-1.9.4.tgz#89766281cbc3a0aae865a7ff13d6aaffea2842bf" 90 | integrity sha512-1rkd7G70+o9KkTn5KLmDYXihGoTaIGO9PIIN2ZB7UJxFrWw04CZHPYiMRjYsaDvVV7hP1dYNRLxSANLaBFGpog== 91 | optionalDependencies: 92 | "@biomejs/cli-darwin-arm64" "1.9.4" 93 | "@biomejs/cli-darwin-x64" "1.9.4" 94 | "@biomejs/cli-linux-arm64" "1.9.4" 95 | "@biomejs/cli-linux-arm64-musl" "1.9.4" 96 | "@biomejs/cli-linux-x64" "1.9.4" 97 | "@biomejs/cli-linux-x64-musl" "1.9.4" 98 | "@biomejs/cli-win32-arm64" "1.9.4" 99 | "@biomejs/cli-win32-x64" "1.9.4" 100 | 101 | "@biomejs/cli-darwin-arm64@1.9.4": 102 | version "1.9.4" 103 | resolved "https://registry.yarnpkg.com/@biomejs/cli-darwin-arm64/-/cli-darwin-arm64-1.9.4.tgz#dfa376d23a54a2d8f17133c92f23c1bf2e62509f" 104 | integrity sha512-bFBsPWrNvkdKrNCYeAp+xo2HecOGPAy9WyNyB/jKnnedgzl4W4Hb9ZMzYNbf8dMCGmUdSavlYHiR01QaYR58cw== 105 | 106 | "@biomejs/cli-darwin-x64@1.9.4": 107 | version "1.9.4" 108 | resolved "https://registry.yarnpkg.com/@biomejs/cli-darwin-x64/-/cli-darwin-x64-1.9.4.tgz#eafc2ce3849d385fc02238aad1ca4a73395a64d9" 109 | integrity sha512-ngYBh/+bEedqkSevPVhLP4QfVPCpb+4BBe2p7Xs32dBgs7rh9nY2AIYUL6BgLw1JVXV8GlpKmb/hNiuIxfPfZg== 110 | 111 | "@biomejs/cli-linux-arm64-musl@1.9.4": 112 | version "1.9.4" 113 | resolved "https://registry.yarnpkg.com/@biomejs/cli-linux-arm64-musl/-/cli-linux-arm64-musl-1.9.4.tgz#d780c3e01758fc90f3268357e3f19163d1f84fca" 114 | integrity sha512-v665Ct9WCRjGa8+kTr0CzApU0+XXtRgwmzIf1SeKSGAv+2scAlW6JR5PMFo6FzqqZ64Po79cKODKf3/AAmECqA== 115 | 116 | "@biomejs/cli-linux-arm64@1.9.4": 117 | version "1.9.4" 118 | resolved "https://registry.yarnpkg.com/@biomejs/cli-linux-arm64/-/cli-linux-arm64-1.9.4.tgz#8ed1dd0e89419a4b66a47f95aefb8c46ae6041c9" 119 | integrity sha512-fJIW0+LYujdjUgJJuwesP4EjIBl/N/TcOX3IvIHJQNsAqvV2CHIogsmA94BPG6jZATS4Hi+xv4SkBBQSt1N4/g== 120 | 121 | "@biomejs/cli-linux-x64-musl@1.9.4": 122 | version "1.9.4" 123 | resolved "https://registry.yarnpkg.com/@biomejs/cli-linux-x64-musl/-/cli-linux-x64-musl-1.9.4.tgz#f36982b966bd671a36671e1de4417963d7db15fb" 124 | integrity sha512-gEhi/jSBhZ2m6wjV530Yy8+fNqG8PAinM3oV7CyO+6c3CEh16Eizm21uHVsyVBEB6RIM8JHIl6AGYCv6Q6Q9Tg== 125 | 126 | "@biomejs/cli-linux-x64@1.9.4": 127 | version "1.9.4" 128 | resolved "https://registry.yarnpkg.com/@biomejs/cli-linux-x64/-/cli-linux-x64-1.9.4.tgz#a0a7f56680c76b8034ddc149dbf398bdd3a462e8" 129 | integrity sha512-lRCJv/Vi3Vlwmbd6K+oQ0KhLHMAysN8lXoCI7XeHlxaajk06u7G+UsFSO01NAs5iYuWKmVZjmiOzJ0OJmGsMwg== 130 | 131 | "@biomejs/cli-win32-arm64@1.9.4": 132 | version "1.9.4" 133 | resolved "https://registry.yarnpkg.com/@biomejs/cli-win32-arm64/-/cli-win32-arm64-1.9.4.tgz#e2ef4e0084e76b7e26f0fc887c5ef1265ea56200" 134 | integrity sha512-tlbhLk+WXZmgwoIKwHIHEBZUwxml7bRJgk0X2sPyNR3S93cdRq6XulAZRQJ17FYGGzWne0fgrXBKpl7l4M87Hg== 135 | 136 | "@biomejs/cli-win32-x64@1.9.4": 137 | version "1.9.4" 138 | resolved "https://registry.yarnpkg.com/@biomejs/cli-win32-x64/-/cli-win32-x64-1.9.4.tgz#4c7afa90e3970213599b4095e62f87e5972b2340" 139 | integrity sha512-8Y5wMhVIPaWe6jw2H+KlEm4wP/f7EW3810ZLmDlrEEy5KvBsb9ECEfu/kMWD484ijfQ8+nIi0giMgu9g1UAuuA== 140 | 141 | "@emotion/babel-plugin@^11.13.5": 142 | version "11.13.5" 143 | resolved "https://registry.yarnpkg.com/@emotion/babel-plugin/-/babel-plugin-11.13.5.tgz#eab8d65dbded74e0ecfd28dc218e75607c4e7bc0" 144 | integrity sha512-pxHCpT2ex+0q+HH91/zsdHkw/lXd468DIN2zvfvLtPKLLMo6gQj7oLObq8PhkrxOZb/gGCq03S3Z7PDhS8pduQ== 145 | dependencies: 146 | "@babel/helper-module-imports" "^7.16.7" 147 | "@babel/runtime" "^7.18.3" 148 | "@emotion/hash" "^0.9.2" 149 | "@emotion/memoize" "^0.9.0" 150 | "@emotion/serialize" "^1.3.3" 151 | babel-plugin-macros "^3.1.0" 152 | convert-source-map "^1.5.0" 153 | escape-string-regexp "^4.0.0" 154 | find-root "^1.1.0" 155 | source-map "^0.5.7" 156 | stylis "4.2.0" 157 | 158 | "@emotion/cache@^11.13.5": 159 | version "11.13.5" 160 | resolved "https://registry.yarnpkg.com/@emotion/cache/-/cache-11.13.5.tgz#e78dad0489e1ed7572507ba8ed9d2130529e4266" 161 | integrity sha512-Z3xbtJ+UcK76eWkagZ1onvn/wAVb1GOMuR15s30Fm2wrMgC7jzpnO2JZXr4eujTTqoQFUrZIw/rT0c6Zzjca1g== 162 | dependencies: 163 | "@emotion/memoize" "^0.9.0" 164 | "@emotion/sheet" "^1.4.0" 165 | "@emotion/utils" "^1.4.2" 166 | "@emotion/weak-memoize" "^0.4.0" 167 | stylis "4.2.0" 168 | 169 | "@emotion/hash@^0.9.2": 170 | version "0.9.2" 171 | resolved "https://registry.yarnpkg.com/@emotion/hash/-/hash-0.9.2.tgz#ff9221b9f58b4dfe61e619a7788734bd63f6898b" 172 | integrity sha512-MyqliTZGuOm3+5ZRSaaBGP3USLw6+EGykkwZns2EPC5g8jJ4z9OrdZY9apkl3+UP9+sdz76YYkwCKP5gh8iY3g== 173 | 174 | "@emotion/is-prop-valid@^1.3.0": 175 | version "1.3.1" 176 | resolved "https://registry.yarnpkg.com/@emotion/is-prop-valid/-/is-prop-valid-1.3.1.tgz#8d5cf1132f836d7adbe42cf0b49df7816fc88240" 177 | integrity sha512-/ACwoqx7XQi9knQs/G0qKvv5teDMhD7bXYns9N/wM8ah8iNb8jZ2uNO0YOgiq2o2poIvVtJS2YALasQuMSQ7Kw== 178 | dependencies: 179 | "@emotion/memoize" "^0.9.0" 180 | 181 | "@emotion/memoize@^0.9.0": 182 | version "0.9.0" 183 | resolved "https://registry.yarnpkg.com/@emotion/memoize/-/memoize-0.9.0.tgz#745969d649977776b43fc7648c556aaa462b4102" 184 | integrity sha512-30FAj7/EoJ5mwVPOWhAyCX+FPfMDrVecJAM+Iw9NRoSl4BBAQeqj4cApHHUXOVvIPgLVDsCFoz/hGD+5QQD1GQ== 185 | 186 | "@emotion/react@11.13.5": 187 | version "11.13.5" 188 | resolved "https://registry.yarnpkg.com/@emotion/react/-/react-11.13.5.tgz#fc818ff5b13424f86501ba4d0740f343ae20b8d9" 189 | integrity sha512-6zeCUxUH+EPF1s+YF/2hPVODeV/7V07YU5x+2tfuRL8MdW6rv5vb2+CBEGTGwBdux0OIERcOS+RzxeK80k2DsQ== 190 | dependencies: 191 | "@babel/runtime" "^7.18.3" 192 | "@emotion/babel-plugin" "^11.13.5" 193 | "@emotion/cache" "^11.13.5" 194 | "@emotion/serialize" "^1.3.3" 195 | "@emotion/use-insertion-effect-with-fallbacks" "^1.1.0" 196 | "@emotion/utils" "^1.4.2" 197 | "@emotion/weak-memoize" "^0.4.0" 198 | hoist-non-react-statics "^3.3.1" 199 | 200 | "@emotion/serialize@^1.3.3": 201 | version "1.3.3" 202 | resolved "https://registry.yarnpkg.com/@emotion/serialize/-/serialize-1.3.3.tgz#d291531005f17d704d0463a032fe679f376509e8" 203 | integrity sha512-EISGqt7sSNWHGI76hC7x1CksiXPahbxEOrC5RjmFRJTqLyEK9/9hZvBbiYn70dw4wuwMKiEMCUlR6ZXTSWQqxA== 204 | dependencies: 205 | "@emotion/hash" "^0.9.2" 206 | "@emotion/memoize" "^0.9.0" 207 | "@emotion/unitless" "^0.10.0" 208 | "@emotion/utils" "^1.4.2" 209 | csstype "^3.0.2" 210 | 211 | "@emotion/sheet@^1.4.0": 212 | version "1.4.0" 213 | resolved "https://registry.yarnpkg.com/@emotion/sheet/-/sheet-1.4.0.tgz#c9299c34d248bc26e82563735f78953d2efca83c" 214 | integrity sha512-fTBW9/8r2w3dXWYM4HCB1Rdp8NLibOw2+XELH5m5+AkWiL/KqYX6dc0kKYlaYyKjrQ6ds33MCdMPEwgs2z1rqg== 215 | 216 | "@emotion/styled@11.13.5": 217 | version "11.13.5" 218 | resolved "https://registry.yarnpkg.com/@emotion/styled/-/styled-11.13.5.tgz#0fa6602227414c5e42cf267506e3c35bae655df9" 219 | integrity sha512-gnOQ+nGLPvDXgIx119JqGalys64lhMdnNQA9TMxhDA4K0Hq5+++OE20Zs5GxiCV9r814xQ2K5WmtofSpHVW6BQ== 220 | dependencies: 221 | "@babel/runtime" "^7.18.3" 222 | "@emotion/babel-plugin" "^11.13.5" 223 | "@emotion/is-prop-valid" "^1.3.0" 224 | "@emotion/serialize" "^1.3.3" 225 | "@emotion/use-insertion-effect-with-fallbacks" "^1.1.0" 226 | "@emotion/utils" "^1.4.2" 227 | 228 | "@emotion/unitless@^0.10.0": 229 | version "0.10.0" 230 | resolved "https://registry.yarnpkg.com/@emotion/unitless/-/unitless-0.10.0.tgz#2af2f7c7e5150f497bdabd848ce7b218a27cf745" 231 | integrity sha512-dFoMUuQA20zvtVTuxZww6OHoJYgrzfKM1t52mVySDJnMSEa08ruEvdYQbhvyu6soU+NeLVd3yKfTfT0NeV6qGg== 232 | 233 | "@emotion/use-insertion-effect-with-fallbacks@^1.1.0": 234 | version "1.1.0" 235 | resolved "https://registry.yarnpkg.com/@emotion/use-insertion-effect-with-fallbacks/-/use-insertion-effect-with-fallbacks-1.1.0.tgz#1a818a0b2c481efba0cf34e5ab1e0cb2dcb9dfaf" 236 | integrity sha512-+wBOcIV5snwGgI2ya3u99D7/FJquOIniQT1IKyDsBmEgwvpxMNeS65Oib7OnE2d2aY+3BU4OiH+0Wchf8yk3Hw== 237 | 238 | "@emotion/utils@^1.4.2": 239 | version "1.4.2" 240 | resolved "https://registry.yarnpkg.com/@emotion/utils/-/utils-1.4.2.tgz#6df6c45881fcb1c412d6688a311a98b7f59c1b52" 241 | integrity sha512-3vLclRofFziIa3J2wDh9jjbkUz9qk5Vi3IZ/FSTKViB0k+ef0fPV7dYrUIugbgupYDx7v9ud/SjrtEP8Y4xLoA== 242 | 243 | "@emotion/weak-memoize@^0.4.0": 244 | version "0.4.0" 245 | resolved "https://registry.yarnpkg.com/@emotion/weak-memoize/-/weak-memoize-0.4.0.tgz#5e13fac887f08c44f76b0ccaf3370eb00fec9bb6" 246 | integrity sha512-snKqtPW01tN0ui7yu9rGv69aJXr/a/Ywvl11sUjNtEcRc+ng/mQriFL0wLXMef74iHa/EkftbDzU9F8iFbH+zg== 247 | 248 | "@esbuild/aix-ppc64@0.21.5": 249 | version "0.21.5" 250 | resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz#c7184a326533fcdf1b8ee0733e21c713b975575f" 251 | integrity sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ== 252 | 253 | "@esbuild/aix-ppc64@0.24.0": 254 | version "0.24.0" 255 | resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.24.0.tgz#b57697945b50e99007b4c2521507dc613d4a648c" 256 | integrity sha512-WtKdFM7ls47zkKHFVzMz8opM7LkcsIp9amDUBIAWirg70RM71WRSjdILPsY5Uv1D42ZpUfaPILDlfactHgsRkw== 257 | 258 | "@esbuild/android-arm64@0.21.5": 259 | version "0.21.5" 260 | resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz#09d9b4357780da9ea3a7dfb833a1f1ff439b4052" 261 | integrity sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A== 262 | 263 | "@esbuild/android-arm64@0.24.0": 264 | version "0.24.0" 265 | resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.24.0.tgz#1add7e0af67acefd556e407f8497e81fddad79c0" 266 | integrity sha512-Vsm497xFM7tTIPYK9bNTYJyF/lsP590Qc1WxJdlB6ljCbdZKU9SY8i7+Iin4kyhV/KV5J2rOKsBQbB77Ab7L/w== 267 | 268 | "@esbuild/android-arm@0.21.5": 269 | version "0.21.5" 270 | resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.21.5.tgz#9b04384fb771926dfa6d7ad04324ecb2ab9b2e28" 271 | integrity sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg== 272 | 273 | "@esbuild/android-arm@0.24.0": 274 | version "0.24.0" 275 | resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.24.0.tgz#ab7263045fa8e090833a8e3c393b60d59a789810" 276 | integrity sha512-arAtTPo76fJ/ICkXWetLCc9EwEHKaeya4vMrReVlEIUCAUncH7M4bhMQ+M9Vf+FFOZJdTNMXNBrWwW+OXWpSew== 277 | 278 | "@esbuild/android-x64@0.21.5": 279 | version "0.21.5" 280 | resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.21.5.tgz#29918ec2db754cedcb6c1b04de8cd6547af6461e" 281 | integrity sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA== 282 | 283 | "@esbuild/android-x64@0.24.0": 284 | version "0.24.0" 285 | resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.24.0.tgz#e8f8b196cfdfdd5aeaebbdb0110983460440e705" 286 | integrity sha512-t8GrvnFkiIY7pa7mMgJd7p8p8qqYIz1NYiAoKc75Zyv73L3DZW++oYMSHPRarcotTKuSs6m3hTOa5CKHaS02TQ== 287 | 288 | "@esbuild/darwin-arm64@0.21.5": 289 | version "0.21.5" 290 | resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz#e495b539660e51690f3928af50a76fb0a6ccff2a" 291 | integrity sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ== 292 | 293 | "@esbuild/darwin-arm64@0.24.0": 294 | version "0.24.0" 295 | resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.24.0.tgz#2d0d9414f2acbffd2d86e98253914fca603a53dd" 296 | integrity sha512-CKyDpRbK1hXwv79soeTJNHb5EiG6ct3efd/FTPdzOWdbZZfGhpbcqIpiD0+vwmpu0wTIL97ZRPZu8vUt46nBSw== 297 | 298 | "@esbuild/darwin-x64@0.21.5": 299 | version "0.21.5" 300 | resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz#c13838fa57372839abdddc91d71542ceea2e1e22" 301 | integrity sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw== 302 | 303 | "@esbuild/darwin-x64@0.24.0": 304 | version "0.24.0" 305 | resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.24.0.tgz#33087aab31a1eb64c89daf3d2cf8ce1775656107" 306 | integrity sha512-rgtz6flkVkh58od4PwTRqxbKH9cOjaXCMZgWD905JOzjFKW+7EiUObfd/Kav+A6Gyud6WZk9w+xu6QLytdi2OA== 307 | 308 | "@esbuild/freebsd-arm64@0.21.5": 309 | version "0.21.5" 310 | resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz#646b989aa20bf89fd071dd5dbfad69a3542e550e" 311 | integrity sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g== 312 | 313 | "@esbuild/freebsd-arm64@0.24.0": 314 | version "0.24.0" 315 | resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.24.0.tgz#bb76e5ea9e97fa3c753472f19421075d3a33e8a7" 316 | integrity sha512-6Mtdq5nHggwfDNLAHkPlyLBpE5L6hwsuXZX8XNmHno9JuL2+bg2BX5tRkwjyfn6sKbxZTq68suOjgWqCicvPXA== 317 | 318 | "@esbuild/freebsd-x64@0.21.5": 319 | version "0.21.5" 320 | resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz#aa615cfc80af954d3458906e38ca22c18cf5c261" 321 | integrity sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ== 322 | 323 | "@esbuild/freebsd-x64@0.24.0": 324 | version "0.24.0" 325 | resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.24.0.tgz#e0e2ce9249fdf6ee29e5dc3d420c7007fa579b93" 326 | integrity sha512-D3H+xh3/zphoX8ck4S2RxKR6gHlHDXXzOf6f/9dbFt/NRBDIE33+cVa49Kil4WUjxMGW0ZIYBYtaGCa2+OsQwQ== 327 | 328 | "@esbuild/linux-arm64@0.21.5": 329 | version "0.21.5" 330 | resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz#70ac6fa14f5cb7e1f7f887bcffb680ad09922b5b" 331 | integrity sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q== 332 | 333 | "@esbuild/linux-arm64@0.24.0": 334 | version "0.24.0" 335 | resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.24.0.tgz#d1b2aa58085f73ecf45533c07c82d81235388e75" 336 | integrity sha512-TDijPXTOeE3eaMkRYpcy3LarIg13dS9wWHRdwYRnzlwlA370rNdZqbcp0WTyyV/k2zSxfko52+C7jU5F9Tfj1g== 337 | 338 | "@esbuild/linux-arm@0.21.5": 339 | version "0.21.5" 340 | resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz#fc6fd11a8aca56c1f6f3894f2bea0479f8f626b9" 341 | integrity sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA== 342 | 343 | "@esbuild/linux-arm@0.24.0": 344 | version "0.24.0" 345 | resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.24.0.tgz#8e4915df8ea3e12b690a057e77a47b1d5935ef6d" 346 | integrity sha512-gJKIi2IjRo5G6Glxb8d3DzYXlxdEj2NlkixPsqePSZMhLudqPhtZ4BUrpIuTjJYXxvF9njql+vRjB2oaC9XpBw== 347 | 348 | "@esbuild/linux-ia32@0.21.5": 349 | version "0.21.5" 350 | resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz#3271f53b3f93e3d093d518d1649d6d68d346ede2" 351 | integrity sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg== 352 | 353 | "@esbuild/linux-ia32@0.24.0": 354 | version "0.24.0" 355 | resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.24.0.tgz#8200b1110666c39ab316572324b7af63d82013fb" 356 | integrity sha512-K40ip1LAcA0byL05TbCQ4yJ4swvnbzHscRmUilrmP9Am7//0UjPreh4lpYzvThT2Quw66MhjG//20mrufm40mA== 357 | 358 | "@esbuild/linux-loong64@0.21.5": 359 | version "0.21.5" 360 | resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz#ed62e04238c57026aea831c5a130b73c0f9f26df" 361 | integrity sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg== 362 | 363 | "@esbuild/linux-loong64@0.24.0": 364 | version "0.24.0" 365 | resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.24.0.tgz#6ff0c99cf647504df321d0640f0d32e557da745c" 366 | integrity sha512-0mswrYP/9ai+CU0BzBfPMZ8RVm3RGAN/lmOMgW4aFUSOQBjA31UP8Mr6DDhWSuMwj7jaWOT0p0WoZ6jeHhrD7g== 367 | 368 | "@esbuild/linux-mips64el@0.21.5": 369 | version "0.21.5" 370 | resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz#e79b8eb48bf3b106fadec1ac8240fb97b4e64cbe" 371 | integrity sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg== 372 | 373 | "@esbuild/linux-mips64el@0.24.0": 374 | version "0.24.0" 375 | resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.24.0.tgz#3f720ccd4d59bfeb4c2ce276a46b77ad380fa1f3" 376 | integrity sha512-hIKvXm0/3w/5+RDtCJeXqMZGkI2s4oMUGj3/jM0QzhgIASWrGO5/RlzAzm5nNh/awHE0A19h/CvHQe6FaBNrRA== 377 | 378 | "@esbuild/linux-ppc64@0.21.5": 379 | version "0.21.5" 380 | resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz#5f2203860a143b9919d383ef7573521fb154c3e4" 381 | integrity sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w== 382 | 383 | "@esbuild/linux-ppc64@0.24.0": 384 | version "0.24.0" 385 | resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.24.0.tgz#9d6b188b15c25afd2e213474bf5f31e42e3aa09e" 386 | integrity sha512-HcZh5BNq0aC52UoocJxaKORfFODWXZxtBaaZNuN3PUX3MoDsChsZqopzi5UupRhPHSEHotoiptqikjN/B77mYQ== 387 | 388 | "@esbuild/linux-riscv64@0.21.5": 389 | version "0.21.5" 390 | resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz#07bcafd99322d5af62f618cb9e6a9b7f4bb825dc" 391 | integrity sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA== 392 | 393 | "@esbuild/linux-riscv64@0.24.0": 394 | version "0.24.0" 395 | resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.24.0.tgz#f989fdc9752dfda286c9cd87c46248e4dfecbc25" 396 | integrity sha512-bEh7dMn/h3QxeR2KTy1DUszQjUrIHPZKyO6aN1X4BCnhfYhuQqedHaa5MxSQA/06j3GpiIlFGSsy1c7Gf9padw== 397 | 398 | "@esbuild/linux-s390x@0.21.5": 399 | version "0.21.5" 400 | resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz#b7ccf686751d6a3e44b8627ababc8be3ef62d8de" 401 | integrity sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A== 402 | 403 | "@esbuild/linux-s390x@0.24.0": 404 | version "0.24.0" 405 | resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.24.0.tgz#29ebf87e4132ea659c1489fce63cd8509d1c7319" 406 | integrity sha512-ZcQ6+qRkw1UcZGPyrCiHHkmBaj9SiCD8Oqd556HldP+QlpUIe2Wgn3ehQGVoPOvZvtHm8HPx+bH20c9pvbkX3g== 407 | 408 | "@esbuild/linux-x64@0.21.5": 409 | version "0.21.5" 410 | resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz#6d8f0c768e070e64309af8004bb94e68ab2bb3b0" 411 | integrity sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ== 412 | 413 | "@esbuild/linux-x64@0.24.0": 414 | version "0.24.0" 415 | resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.24.0.tgz#4af48c5c0479569b1f359ffbce22d15f261c0cef" 416 | integrity sha512-vbutsFqQ+foy3wSSbmjBXXIJ6PL3scghJoM8zCL142cGaZKAdCZHyf+Bpu/MmX9zT9Q0zFBVKb36Ma5Fzfa8xA== 417 | 418 | "@esbuild/netbsd-x64@0.21.5": 419 | version "0.21.5" 420 | resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz#bbe430f60d378ecb88decb219c602667387a6047" 421 | integrity sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg== 422 | 423 | "@esbuild/netbsd-x64@0.24.0": 424 | version "0.24.0" 425 | resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.24.0.tgz#1ae73d23cc044a0ebd4f198334416fb26c31366c" 426 | integrity sha512-hjQ0R/ulkO8fCYFsG0FZoH+pWgTTDreqpqY7UnQntnaKv95uP5iW3+dChxnx7C3trQQU40S+OgWhUVwCjVFLvg== 427 | 428 | "@esbuild/openbsd-arm64@0.24.0": 429 | version "0.24.0" 430 | resolved "https://registry.yarnpkg.com/@esbuild/openbsd-arm64/-/openbsd-arm64-0.24.0.tgz#5d904a4f5158c89859fd902c427f96d6a9e632e2" 431 | integrity sha512-MD9uzzkPQbYehwcN583yx3Tu5M8EIoTD+tUgKF982WYL9Pf5rKy9ltgD0eUgs8pvKnmizxjXZyLt0z6DC3rRXg== 432 | 433 | "@esbuild/openbsd-x64@0.21.5": 434 | version "0.21.5" 435 | resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz#99d1cf2937279560d2104821f5ccce220cb2af70" 436 | integrity sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow== 437 | 438 | "@esbuild/openbsd-x64@0.24.0": 439 | version "0.24.0" 440 | resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.24.0.tgz#4c8aa88c49187c601bae2971e71c6dc5e0ad1cdf" 441 | integrity sha512-4ir0aY1NGUhIC1hdoCzr1+5b43mw99uNwVzhIq1OY3QcEwPDO3B7WNXBzaKY5Nsf1+N11i1eOfFcq+D/gOS15Q== 442 | 443 | "@esbuild/sunos-x64@0.21.5": 444 | version "0.21.5" 445 | resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz#08741512c10d529566baba837b4fe052c8f3487b" 446 | integrity sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg== 447 | 448 | "@esbuild/sunos-x64@0.24.0": 449 | version "0.24.0" 450 | resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.24.0.tgz#8ddc35a0ea38575fa44eda30a5ee01ae2fa54dd4" 451 | integrity sha512-jVzdzsbM5xrotH+W5f1s+JtUy1UWgjU0Cf4wMvffTB8m6wP5/kx0KiaLHlbJO+dMgtxKV8RQ/JvtlFcdZ1zCPA== 452 | 453 | "@esbuild/win32-arm64@0.21.5": 454 | version "0.21.5" 455 | resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz#675b7385398411240735016144ab2e99a60fc75d" 456 | integrity sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A== 457 | 458 | "@esbuild/win32-arm64@0.24.0": 459 | version "0.24.0" 460 | resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.24.0.tgz#6e79c8543f282c4539db684a207ae0e174a9007b" 461 | integrity sha512-iKc8GAslzRpBytO2/aN3d2yb2z8XTVfNV0PjGlCxKo5SgWmNXx82I/Q3aG1tFfS+A2igVCY97TJ8tnYwpUWLCA== 462 | 463 | "@esbuild/win32-ia32@0.21.5": 464 | version "0.21.5" 465 | resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz#1bfc3ce98aa6ca9a0969e4d2af72144c59c1193b" 466 | integrity sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA== 467 | 468 | "@esbuild/win32-ia32@0.24.0": 469 | version "0.24.0" 470 | resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.24.0.tgz#057af345da256b7192d18b676a02e95d0fa39103" 471 | integrity sha512-vQW36KZolfIudCcTnaTpmLQ24Ha1RjygBo39/aLkM2kmjkWmZGEJ5Gn9l5/7tzXA42QGIoWbICfg6KLLkIw6yw== 472 | 473 | "@esbuild/win32-x64@0.21.5": 474 | version "0.21.5" 475 | resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz#acad351d582d157bb145535db2a6ff53dd514b5c" 476 | integrity sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw== 477 | 478 | "@esbuild/win32-x64@0.24.0": 479 | version "0.24.0" 480 | resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.24.0.tgz#168ab1c7e1c318b922637fad8f339d48b01e1244" 481 | integrity sha512-7IAFPrjSQIJrGsK6flwg7NFmwBoSTyF3rl7If0hNUFQU4ilTsEPL6GuMuU9BfIWVVGuRnuIidkSMC+c0Otu8IA== 482 | 483 | "@jridgewell/gen-mapping@^0.3.5": 484 | version "0.3.5" 485 | resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz#dcce6aff74bdf6dad1a95802b69b04a2fcb1fb36" 486 | integrity sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg== 487 | dependencies: 488 | "@jridgewell/set-array" "^1.2.1" 489 | "@jridgewell/sourcemap-codec" "^1.4.10" 490 | "@jridgewell/trace-mapping" "^0.3.24" 491 | 492 | "@jridgewell/resolve-uri@^3.1.0": 493 | version "3.1.2" 494 | resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz#7a0ee601f60f99a20c7c7c5ff0c80388c1189bd6" 495 | integrity sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw== 496 | 497 | "@jridgewell/set-array@^1.2.1": 498 | version "1.2.1" 499 | resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.2.1.tgz#558fb6472ed16a4c850b889530e6b36438c49280" 500 | integrity sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A== 501 | 502 | "@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.14", "@jridgewell/sourcemap-codec@^1.5.0": 503 | version "1.5.0" 504 | resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz#3188bcb273a414b0d215fd22a58540b989b9409a" 505 | integrity sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ== 506 | 507 | "@jridgewell/trace-mapping@^0.3.24", "@jridgewell/trace-mapping@^0.3.25": 508 | version "0.3.25" 509 | resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz#15f190e98895f3fc23276ee14bc76b675c2e50f0" 510 | integrity sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ== 511 | dependencies: 512 | "@jridgewell/resolve-uri" "^3.1.0" 513 | "@jridgewell/sourcemap-codec" "^1.4.14" 514 | 515 | "@mui/core-downloads-tracker@^6.1.10": 516 | version "6.1.10" 517 | resolved "https://registry.yarnpkg.com/@mui/core-downloads-tracker/-/core-downloads-tracker-6.1.10.tgz#871b5a4876cfd0beac6672fe50d57e0c0a53db36" 518 | integrity sha512-LY5wdiLCBDY7u+Od8UmFINZFGN/5ZU90fhAslf/ZtfP+5RhuY45f679pqYIxe0y54l6Gkv9PFOc8Cs10LDTBYg== 519 | 520 | "@mui/icons-material@6.1.10": 521 | version "6.1.10" 522 | resolved "https://registry.yarnpkg.com/@mui/icons-material/-/icons-material-6.1.10.tgz#9ed27fc750ab4811da94c1a1252253d9d1e86cc2" 523 | integrity sha512-G6P1BCSt6EQDcKca47KwvKjlqgOXFbp2I3oWiOlFgKYTANBH89yk7ttMQ5ysqNxSYAB+4TdM37MlPYp4+FkVrQ== 524 | dependencies: 525 | "@babel/runtime" "^7.26.0" 526 | 527 | "@mui/material@6.1.10": 528 | version "6.1.10" 529 | resolved "https://registry.yarnpkg.com/@mui/material/-/material-6.1.10.tgz#eab2a9df24c68548d0df2b5b25c0410311313ff9" 530 | integrity sha512-txnwYObY4N9ugv5T2n5h1KcbISegZ6l65w1/7tpSU5OB6MQCU94YkP8n/3slDw2KcEfRk4+4D8EUGfhSPMODEQ== 531 | dependencies: 532 | "@babel/runtime" "^7.26.0" 533 | "@mui/core-downloads-tracker" "^6.1.10" 534 | "@mui/system" "^6.1.10" 535 | "@mui/types" "^7.2.19" 536 | "@mui/utils" "^6.1.10" 537 | "@popperjs/core" "^2.11.8" 538 | "@types/react-transition-group" "^4.4.11" 539 | clsx "^2.1.1" 540 | csstype "^3.1.3" 541 | prop-types "^15.8.1" 542 | react-is "^18.3.1" 543 | react-transition-group "^4.4.5" 544 | 545 | "@mui/private-theming@^6.1.10": 546 | version "6.1.10" 547 | resolved "https://registry.yarnpkg.com/@mui/private-theming/-/private-theming-6.1.10.tgz#cfe8f70c30351208e8ca5c2b16c6992ce0288559" 548 | integrity sha512-DqgsH0XFEweeG3rQfVkqTkeXcj/E76PGYWag8flbPdV8IYdMo+DfVdFlZK8JEjsaIVD2Eu1kJg972XnH5pfnBQ== 549 | dependencies: 550 | "@babel/runtime" "^7.26.0" 551 | "@mui/utils" "^6.1.10" 552 | prop-types "^15.8.1" 553 | 554 | "@mui/styled-engine@^6.1.10": 555 | version "6.1.10" 556 | resolved "https://registry.yarnpkg.com/@mui/styled-engine/-/styled-engine-6.1.10.tgz#0f093defd35934b6accff156011c9deac22356be" 557 | integrity sha512-+NV9adKZYhslJ270iPjf2yzdVJwav7CIaXcMlPSi1Xy1S/zRe5xFgZ6BEoMdmGRpr34lIahE8H1acXP2myrvRw== 558 | dependencies: 559 | "@babel/runtime" "^7.26.0" 560 | "@emotion/cache" "^11.13.5" 561 | "@emotion/serialize" "^1.3.3" 562 | "@emotion/sheet" "^1.4.0" 563 | csstype "^3.1.3" 564 | prop-types "^15.8.1" 565 | 566 | "@mui/system@^6.1.10": 567 | version "6.1.10" 568 | resolved "https://registry.yarnpkg.com/@mui/system/-/system-6.1.10.tgz#d8a6f9099883880182cfafc08fc8ab8099647c01" 569 | integrity sha512-5YNIqxETR23SIkyP7MY2fFnXmplX/M4wNi2R+10AVRd3Ub+NLctWY/Vs5vq1oAMF0eSDLhRTGUjaUe+IGSfWqg== 570 | dependencies: 571 | "@babel/runtime" "^7.26.0" 572 | "@mui/private-theming" "^6.1.10" 573 | "@mui/styled-engine" "^6.1.10" 574 | "@mui/types" "^7.2.19" 575 | "@mui/utils" "^6.1.10" 576 | clsx "^2.1.1" 577 | csstype "^3.1.3" 578 | prop-types "^15.8.1" 579 | 580 | "@mui/types@^7.2.19": 581 | version "7.2.19" 582 | resolved "https://registry.yarnpkg.com/@mui/types/-/types-7.2.19.tgz#c941954dd24393fdce5f07830d44440cf4ab6c80" 583 | integrity sha512-6XpZEM/Q3epK9RN8ENoXuygnqUQxE+siN/6rGRi2iwJPgBUR25mphYQ9ZI87plGh58YoZ5pp40bFvKYOCDJ3tA== 584 | 585 | "@mui/utils@^6.1.10": 586 | version "6.1.10" 587 | resolved "https://registry.yarnpkg.com/@mui/utils/-/utils-6.1.10.tgz#edf8c5c9cf930a8290b5347550ece15f5800b1c3" 588 | integrity sha512-1ETuwswGjUiAf2dP9TkBy8p49qrw2wXa+RuAjNTRE5+91vtXJ1HKrs7H9s8CZd1zDlQVzUcUAPm9lpQwF5ogTw== 589 | dependencies: 590 | "@babel/runtime" "^7.26.0" 591 | "@mui/types" "^7.2.19" 592 | "@types/prop-types" "^15.7.13" 593 | clsx "^2.1.1" 594 | prop-types "^15.8.1" 595 | react-is "^18.3.1" 596 | 597 | "@popperjs/core@^2.11.8": 598 | version "2.11.8" 599 | resolved "https://registry.yarnpkg.com/@popperjs/core/-/core-2.11.8.tgz#6b79032e760a0899cd4204710beede972a3a185f" 600 | integrity sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A== 601 | 602 | "@rollup/rollup-android-arm-eabi@4.28.1": 603 | version "4.28.1" 604 | resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.28.1.tgz#7f4c4d8cd5ccab6e95d6750dbe00321c1f30791e" 605 | integrity sha512-2aZp8AES04KI2dy3Ss6/MDjXbwBzj+i0GqKtWXgw2/Ma6E4jJvujryO6gJAghIRVz7Vwr9Gtl/8na3nDUKpraQ== 606 | 607 | "@rollup/rollup-android-arm64@4.28.1": 608 | version "4.28.1" 609 | resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.28.1.tgz#17ea71695fb1518c2c324badbe431a0bd1879f2d" 610 | integrity sha512-EbkK285O+1YMrg57xVA+Dp0tDBRB93/BZKph9XhMjezf6F4TpYjaUSuPt5J0fZXlSag0LmZAsTmdGGqPp4pQFA== 611 | 612 | "@rollup/rollup-darwin-arm64@4.28.1": 613 | version "4.28.1" 614 | resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.28.1.tgz#dac0f0d0cfa73e7d5225ae6d303c13c8979e7999" 615 | integrity sha512-prduvrMKU6NzMq6nxzQw445zXgaDBbMQvmKSJaxpaZ5R1QDM8w+eGxo6Y/jhT/cLoCvnZI42oEqf9KQNYz1fqQ== 616 | 617 | "@rollup/rollup-darwin-x64@4.28.1": 618 | version "4.28.1" 619 | resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.28.1.tgz#8f63baa1d31784904a380d2e293fa1ddf53dd4a2" 620 | integrity sha512-WsvbOunsUk0wccO/TV4o7IKgloJ942hVFK1CLatwv6TJspcCZb9umQkPdvB7FihmdxgaKR5JyxDjWpCOp4uZlQ== 621 | 622 | "@rollup/rollup-freebsd-arm64@4.28.1": 623 | version "4.28.1" 624 | resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.28.1.tgz#30ed247e0df6e8858cdc6ae4090e12dbeb8ce946" 625 | integrity sha512-HTDPdY1caUcU4qK23FeeGxCdJF64cKkqajU0iBnTVxS8F7H/7BewvYoG+va1KPSL63kQ1PGNyiwKOfReavzvNA== 626 | 627 | "@rollup/rollup-freebsd-x64@4.28.1": 628 | version "4.28.1" 629 | resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.28.1.tgz#57846f382fddbb508412ae07855b8a04c8f56282" 630 | integrity sha512-m/uYasxkUevcFTeRSM9TeLyPe2QDuqtjkeoTpP9SW0XxUWfcYrGDMkO/m2tTw+4NMAF9P2fU3Mw4ahNvo7QmsQ== 631 | 632 | "@rollup/rollup-linux-arm-gnueabihf@4.28.1": 633 | version "4.28.1" 634 | resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.28.1.tgz#378ca666c9dae5e6f94d1d351e7497c176e9b6df" 635 | integrity sha512-QAg11ZIt6mcmzpNE6JZBpKfJaKkqTm1A9+y9O+frdZJEuhQxiugM05gnCWiANHj4RmbgeVJpTdmKRmH/a+0QbA== 636 | 637 | "@rollup/rollup-linux-arm-musleabihf@4.28.1": 638 | version "4.28.1" 639 | resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.28.1.tgz#a692eff3bab330d5c33a5d5813a090c15374cddb" 640 | integrity sha512-dRP9PEBfolq1dmMcFqbEPSd9VlRuVWEGSmbxVEfiq2cs2jlZAl0YNxFzAQS2OrQmsLBLAATDMb3Z6MFv5vOcXg== 641 | 642 | "@rollup/rollup-linux-arm64-gnu@4.28.1": 643 | version "4.28.1" 644 | resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.28.1.tgz#6b1719b76088da5ac1ae1feccf48c5926b9e3db9" 645 | integrity sha512-uGr8khxO+CKT4XU8ZUH1TTEUtlktK6Kgtv0+6bIFSeiSlnGJHG1tSFSjm41uQ9sAO/5ULx9mWOz70jYLyv1QkA== 646 | 647 | "@rollup/rollup-linux-arm64-musl@4.28.1": 648 | version "4.28.1" 649 | resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.28.1.tgz#865baf5b6f5ff67acb32e5a359508828e8dc5788" 650 | integrity sha512-QF54q8MYGAqMLrX2t7tNpi01nvq5RI59UBNx+3+37zoKX5KViPo/gk2QLhsuqok05sSCRluj0D00LzCwBikb0A== 651 | 652 | "@rollup/rollup-linux-loongarch64-gnu@4.28.1": 653 | version "4.28.1" 654 | resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.28.1.tgz#23c6609ba0f7fa7a7f2038b6b6a08555a5055a87" 655 | integrity sha512-vPul4uodvWvLhRco2w0GcyZcdyBfpfDRgNKU+p35AWEbJ/HPs1tOUrkSueVbBS0RQHAf/A+nNtDpvw95PeVKOA== 656 | 657 | "@rollup/rollup-linux-powerpc64le-gnu@4.28.1": 658 | version "4.28.1" 659 | resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.28.1.tgz#652ef0d9334a9f25b9daf85731242801cb0fc41c" 660 | integrity sha512-pTnTdBuC2+pt1Rmm2SV7JWRqzhYpEILML4PKODqLz+C7Ou2apEV52h19CR7es+u04KlqplggmN9sqZlekg3R1A== 661 | 662 | "@rollup/rollup-linux-riscv64-gnu@4.28.1": 663 | version "4.28.1" 664 | resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.28.1.tgz#1eb6651839ee6ebca64d6cc64febbd299e95e6bd" 665 | integrity sha512-vWXy1Nfg7TPBSuAncfInmAI/WZDd5vOklyLJDdIRKABcZWojNDY0NJwruY2AcnCLnRJKSaBgf/GiJfauu8cQZA== 666 | 667 | "@rollup/rollup-linux-s390x-gnu@4.28.1": 668 | version "4.28.1" 669 | resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.28.1.tgz#015c52293afb3ff2a293cf0936b1d43975c1e9cd" 670 | integrity sha512-/yqC2Y53oZjb0yz8PVuGOQQNOTwxcizudunl/tFs1aLvObTclTwZ0JhXF2XcPT/zuaymemCDSuuUPXJJyqeDOg== 671 | 672 | "@rollup/rollup-linux-x64-gnu@4.28.1": 673 | version "4.28.1" 674 | resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.28.1.tgz#b83001b5abed2bcb5e2dbeec6a7e69b194235c1e" 675 | integrity sha512-fzgeABz7rrAlKYB0y2kSEiURrI0691CSL0+KXwKwhxvj92VULEDQLpBYLHpF49MSiPG4sq5CK3qHMnb9tlCjBw== 676 | 677 | "@rollup/rollup-linux-x64-musl@4.28.1": 678 | version "4.28.1" 679 | resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.28.1.tgz#6cc7c84cd4563737f8593e66f33b57d8e228805b" 680 | integrity sha512-xQTDVzSGiMlSshpJCtudbWyRfLaNiVPXt1WgdWTwWz9n0U12cI2ZVtWe/Jgwyv/6wjL7b66uu61Vg0POWVfz4g== 681 | 682 | "@rollup/rollup-win32-arm64-msvc@4.28.1": 683 | version "4.28.1" 684 | resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.28.1.tgz#631ffeee094d71279fcd1fe8072bdcf25311bc11" 685 | integrity sha512-wSXmDRVupJstFP7elGMgv+2HqXelQhuNf+IS4V+nUpNVi/GUiBgDmfwD0UGN3pcAnWsgKG3I52wMOBnk1VHr/A== 686 | 687 | "@rollup/rollup-win32-ia32-msvc@4.28.1": 688 | version "4.28.1" 689 | resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.28.1.tgz#06d1d60d5b9f718e8a6c4a43f82e3f9e3254587f" 690 | integrity sha512-ZkyTJ/9vkgrE/Rk9vhMXhf8l9D+eAhbAVbsGsXKy2ohmJaWg0LPQLnIxRdRp/bKyr8tXuPlXhIoGlEB5XpJnGA== 691 | 692 | "@rollup/rollup-win32-x64-msvc@4.28.1": 693 | version "4.28.1" 694 | resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.28.1.tgz#4dff5c4259ebe6c5b4a8f2c5bc3829b7a8447ff0" 695 | integrity sha512-ZvK2jBafvttJjoIdKm/Q/Bh7IJ1Ose9IBOwpOXcOvW3ikGTQGmKDgxTC6oCAzW6PynbkKP8+um1du81XJHZ0JA== 696 | 697 | "@swc/core-darwin-arm64@1.10.0": 698 | version "1.10.0" 699 | resolved "https://registry.yarnpkg.com/@swc/core-darwin-arm64/-/core-darwin-arm64-1.10.0.tgz#39fd894356f8e858535e96111d34602da0a730c5" 700 | integrity sha512-wCeUpanqZyzvgqWRtXIyhcFK3CqukAlYyP+fJpY2gWc/+ekdrenNIfZMwY7tyTFDkXDYEKzvn3BN/zDYNJFowQ== 701 | 702 | "@swc/core-darwin-x64@1.10.0": 703 | version "1.10.0" 704 | resolved "https://registry.yarnpkg.com/@swc/core-darwin-x64/-/core-darwin-x64-1.10.0.tgz#d1b95c1db67ac328a96324b800843bc410d17f05" 705 | integrity sha512-0CZPzqTynUBO+SHEl/qKsFSahp2Jv/P2ZRjFG0gwZY5qIcr1+B/v+o74/GyNMBGz9rft+F2WpU31gz2sJwyF4A== 706 | 707 | "@swc/core-linux-arm-gnueabihf@1.10.0": 708 | version "1.10.0" 709 | resolved "https://registry.yarnpkg.com/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.10.0.tgz#e10510bb028bc3836948cb7345312269cd22295d" 710 | integrity sha512-oq+DdMu5uJOFPtRkeiITc4kxmd+QSmK+v+OBzlhdGkSgoH3yRWZP+H2ao0cBXo93ZgCr2LfjiER0CqSKhjGuNA== 711 | 712 | "@swc/core-linux-arm64-gnu@1.10.0": 713 | version "1.10.0" 714 | resolved "https://registry.yarnpkg.com/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.10.0.tgz#a4826c0b44db5b5a02826a0c47307f5969bcc353" 715 | integrity sha512-Y6+PC8knchEViRxiCUj3j8wsGXaIhuvU+WqrFqV834eiItEMEI9+Vh3FovqJMBE3L7d4E4ZQtgImHCXjrHfxbw== 716 | 717 | "@swc/core-linux-arm64-musl@1.10.0": 718 | version "1.10.0" 719 | resolved "https://registry.yarnpkg.com/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.10.0.tgz#d4adab4a646be095e3c64226a0150ebe4b874c1a" 720 | integrity sha512-EbrX9A5U4cECCQQfky7945AW9GYnTXtCUXElWTkTYmmyQK87yCyFfY8hmZ9qMFIwxPOH6I3I2JwMhzdi8Qoz7g== 721 | 722 | "@swc/core-linux-x64-gnu@1.10.0": 723 | version "1.10.0" 724 | resolved "https://registry.yarnpkg.com/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.10.0.tgz#278655c2b2abcb2e7ada031e75e6853777ebce4c" 725 | integrity sha512-TaxpO6snTjjfLXFYh5EjZ78se69j2gDcqEM8yB9gguPYwkCHi2Ylfmh7iVaNADnDJFtjoAQp0L41bTV/Pfq9Cg== 726 | 727 | "@swc/core-linux-x64-musl@1.10.0": 728 | version "1.10.0" 729 | resolved "https://registry.yarnpkg.com/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.10.0.tgz#7df236de40a685c1723a904d6dead99eea36a30f" 730 | integrity sha512-IEGvDd6aEEKEyZFZ8oCKuik05G5BS7qwG5hO5PEMzdGeh8JyFZXxsfFXbfeAqjue4UaUUrhnoX+Ze3M2jBVMHw== 731 | 732 | "@swc/core-win32-arm64-msvc@1.10.0": 733 | version "1.10.0" 734 | resolved "https://registry.yarnpkg.com/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.10.0.tgz#99278f8f02c79e03caeeb6d64941d0487e58d7e1" 735 | integrity sha512-UkQ952GSpY+Z6XONj9GSW8xGSkF53jrCsuLj0nrcuw7Dvr1a816U/9WYZmmcYS8tnG2vHylhpm6csQkyS8lpCw== 736 | 737 | "@swc/core-win32-ia32-msvc@1.10.0": 738 | version "1.10.0" 739 | resolved "https://registry.yarnpkg.com/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.10.0.tgz#a5cf2cfa3e31e8e01a3692d7e053aaa788d3cf3e" 740 | integrity sha512-a2QpIZmTiT885u/mUInpeN2W9ClCnqrV2LnMqJR1/Fgx1Afw/hAtiDZPtQ0SqS8yDJ2VR5gfNZo3gpxWMrqdVA== 741 | 742 | "@swc/core-win32-x64-msvc@1.10.0": 743 | version "1.10.0" 744 | resolved "https://registry.yarnpkg.com/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.10.0.tgz#ee1fdf8e6a627de33501b5a404465a7e676c8689" 745 | integrity sha512-tZcCmMwf483nwsEBfUk5w9e046kMa1iSik4bP9Kwi2FGtOfHuDfIcwW4jek3hdcgF5SaBW1ktnK/lgQLDi5AtA== 746 | 747 | "@swc/core@^1.7.26": 748 | version "1.10.0" 749 | resolved "https://registry.yarnpkg.com/@swc/core/-/core-1.10.0.tgz#9584465f7c5feaf34098466c7063c0044fa08bd8" 750 | integrity sha512-+CuuTCmQFfzaNGg1JmcZvdUVITQXJk9sMnl1C2TiDLzOSVOJRwVD4dNo5dljX/qxpMAN+2BIYlwjlSkoGi6grg== 751 | dependencies: 752 | "@swc/counter" "^0.1.3" 753 | "@swc/types" "^0.1.17" 754 | optionalDependencies: 755 | "@swc/core-darwin-arm64" "1.10.0" 756 | "@swc/core-darwin-x64" "1.10.0" 757 | "@swc/core-linux-arm-gnueabihf" "1.10.0" 758 | "@swc/core-linux-arm64-gnu" "1.10.0" 759 | "@swc/core-linux-arm64-musl" "1.10.0" 760 | "@swc/core-linux-x64-gnu" "1.10.0" 761 | "@swc/core-linux-x64-musl" "1.10.0" 762 | "@swc/core-win32-arm64-msvc" "1.10.0" 763 | "@swc/core-win32-ia32-msvc" "1.10.0" 764 | "@swc/core-win32-x64-msvc" "1.10.0" 765 | 766 | "@swc/counter@^0.1.3": 767 | version "0.1.3" 768 | resolved "https://registry.yarnpkg.com/@swc/counter/-/counter-0.1.3.tgz#cc7463bd02949611c6329596fccd2b0ec782b0e9" 769 | integrity sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ== 770 | 771 | "@swc/types@^0.1.17": 772 | version "0.1.17" 773 | resolved "https://registry.yarnpkg.com/@swc/types/-/types-0.1.17.tgz#bd1d94e73497f27341bf141abdf4c85230d41e7c" 774 | integrity sha512-V5gRru+aD8YVyCOMAjMpWR1Ui577DD5KSJsHP8RAxopAH22jFz6GZd/qxqjO6MJHQhcsjvjOFXyDhyLQUnMveQ== 775 | dependencies: 776 | "@swc/counter" "^0.1.3" 777 | 778 | "@testing-library/dom@10.4.0": 779 | version "10.4.0" 780 | resolved "https://registry.yarnpkg.com/@testing-library/dom/-/dom-10.4.0.tgz#82a9d9462f11d240ecadbf406607c6ceeeff43a8" 781 | integrity sha512-pemlzrSESWbdAloYml3bAJMEfNh1Z7EduzqPKprCH5S341frlpYnUEW0H72dLxa6IsYr+mPno20GiSm+h9dEdQ== 782 | dependencies: 783 | "@babel/code-frame" "^7.10.4" 784 | "@babel/runtime" "^7.12.5" 785 | "@types/aria-query" "^5.0.1" 786 | aria-query "5.3.0" 787 | chalk "^4.1.0" 788 | dom-accessibility-api "^0.5.9" 789 | lz-string "^1.5.0" 790 | pretty-format "^27.0.2" 791 | 792 | "@testing-library/react@16.1.0": 793 | version "16.1.0" 794 | resolved "https://registry.yarnpkg.com/@testing-library/react/-/react-16.1.0.tgz#aa0c61398bac82eaf89776967e97de41ac742d71" 795 | integrity sha512-Q2ToPvg0KsVL0ohND9A3zLJWcOXXcO8IDu3fj11KhNt0UlCWyFyvnCIBkd12tidB2lkiVRG8VFqdhcqhqnAQtg== 796 | dependencies: 797 | "@babel/runtime" "^7.12.5" 798 | 799 | "@testing-library/user-event@14.5.2": 800 | version "14.5.2" 801 | resolved "https://registry.yarnpkg.com/@testing-library/user-event/-/user-event-14.5.2.tgz#db7257d727c891905947bd1c1a99da20e03c2ebd" 802 | integrity sha512-YAh82Wh4TIrxYLmfGcixwD18oIjyC1pFQC2Y01F2lzV2HTMiYrI0nze0FD0ocB//CKS/7jIUgae+adPqxK5yCQ== 803 | 804 | "@types/aria-query@^5.0.1": 805 | version "5.0.4" 806 | resolved "https://registry.yarnpkg.com/@types/aria-query/-/aria-query-5.0.4.tgz#1a31c3d378850d2778dabb6374d036dcba4ba708" 807 | integrity sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw== 808 | 809 | "@types/cookie@^0.6.0": 810 | version "0.6.0" 811 | resolved "https://registry.yarnpkg.com/@types/cookie/-/cookie-0.6.0.tgz#eac397f28bf1d6ae0ae081363eca2f425bedf0d5" 812 | integrity sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA== 813 | 814 | "@types/estree@1.0.6", "@types/estree@^1.0.0": 815 | version "1.0.6" 816 | resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.6.tgz#628effeeae2064a1b4e79f78e81d87b7e5fc7b50" 817 | integrity sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw== 818 | 819 | "@types/parse-json@^4.0.0": 820 | version "4.0.2" 821 | resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.2.tgz#5950e50960793055845e956c427fc2b0d70c5239" 822 | integrity sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw== 823 | 824 | "@types/prop-types@^15.7.13": 825 | version "15.7.14" 826 | resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.14.tgz#1433419d73b2a7ebfc6918dcefd2ec0d5cd698f2" 827 | integrity sha512-gNMvNH49DJ7OJYv+KAKn0Xp45p8PLl6zo2YnvDIbTd4J6MER2BmWN49TG7n9LvkyihINxeKW8+3bfS2yDC9dzQ== 828 | 829 | "@types/react-dom@19.0.1": 830 | version "19.0.1" 831 | resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-19.0.1.tgz#b1032c4c3215018e4028a85a71441560216e51c6" 832 | integrity sha512-hljHij7MpWPKF6u5vojuyfV0YA4YURsQG7KT6SzV0Zs2BXAtgdTxG6A229Ub/xiWV4w/7JL8fi6aAyjshH4meA== 833 | dependencies: 834 | "@types/react" "*" 835 | 836 | "@types/react-transition-group@^4.4.11": 837 | version "4.4.11" 838 | resolved "https://registry.yarnpkg.com/@types/react-transition-group/-/react-transition-group-4.4.11.tgz#d963253a611d757de01ebb241143b1017d5d63d5" 839 | integrity sha512-RM05tAniPZ5DZPzzNFP+DmrcOdD0efDUxMy3145oljWSl3x9ZV5vhme98gTxFrj2lhXvmGNnUiuDyJgY9IKkNA== 840 | dependencies: 841 | "@types/react" "*" 842 | 843 | "@types/react@*", "@types/react@19.0.1": 844 | version "19.0.1" 845 | resolved "https://registry.yarnpkg.com/@types/react/-/react-19.0.1.tgz#a000d5b78f473732a08cecbead0f3751e550b3df" 846 | integrity sha512-YW6614BDhqbpR5KtUYzTA+zlA7nayzJRA9ljz9CQoxthR0sDisYZLuvSMsil36t4EH/uAt8T52Xb4sVw17G+SQ== 847 | dependencies: 848 | csstype "^3.0.2" 849 | 850 | "@vitejs/plugin-react-swc@3.7.2": 851 | version "3.7.2" 852 | resolved "https://registry.yarnpkg.com/@vitejs/plugin-react-swc/-/plugin-react-swc-3.7.2.tgz#b0958dd44c48dbd37b5ef887bdb8b8d1276f24cd" 853 | integrity sha512-y0byko2b2tSVVf5Gpng1eEhX1OvPC7x8yns1Fx8jDzlJp4LS6CMkCPfLw47cjyoMrshQDoQw4qcgjsU9VvlCew== 854 | dependencies: 855 | "@swc/core" "^1.7.26" 856 | 857 | "@vitest/expect@2.1.8": 858 | version "2.1.8" 859 | resolved "https://registry.yarnpkg.com/@vitest/expect/-/expect-2.1.8.tgz#13fad0e8d5a0bf0feb675dcf1d1f1a36a1773bc1" 860 | integrity sha512-8ytZ/fFHq2g4PJVAtDX57mayemKgDR6X3Oa2Foro+EygiOJHUXhCqBAAKQYYajZpFoIfvBCF1j6R6IYRSIUFuw== 861 | dependencies: 862 | "@vitest/spy" "2.1.8" 863 | "@vitest/utils" "2.1.8" 864 | chai "^5.1.2" 865 | tinyrainbow "^1.2.0" 866 | 867 | "@vitest/mocker@2.1.8": 868 | version "2.1.8" 869 | resolved "https://registry.yarnpkg.com/@vitest/mocker/-/mocker-2.1.8.tgz#51dec42ac244e949d20009249e033e274e323f73" 870 | integrity sha512-7guJ/47I6uqfttp33mgo6ga5Gr1VnL58rcqYKyShoRK9ebu8T5Rs6HN3s1NABiBeVTdWNrwUMcHH54uXZBN4zA== 871 | dependencies: 872 | "@vitest/spy" "2.1.8" 873 | estree-walker "^3.0.3" 874 | magic-string "^0.30.12" 875 | 876 | "@vitest/pretty-format@2.1.8", "@vitest/pretty-format@^2.1.8": 877 | version "2.1.8" 878 | resolved "https://registry.yarnpkg.com/@vitest/pretty-format/-/pretty-format-2.1.8.tgz#88f47726e5d0cf4ba873d50c135b02e4395e2bca" 879 | integrity sha512-9HiSZ9zpqNLKlbIDRWOnAWqgcA7xu+8YxXSekhr0Ykab7PAYFkhkwoqVArPOtJhPmYeE2YHgKZlj3CP36z2AJQ== 880 | dependencies: 881 | tinyrainbow "^1.2.0" 882 | 883 | "@vitest/runner@2.1.8": 884 | version "2.1.8" 885 | resolved "https://registry.yarnpkg.com/@vitest/runner/-/runner-2.1.8.tgz#b0e2dd29ca49c25e9323ea2a45a5125d8729759f" 886 | integrity sha512-17ub8vQstRnRlIU5k50bG+QOMLHRhYPAna5tw8tYbj+jzjcspnwnwtPtiOlkuKC4+ixDPTuLZiqiWWQ2PSXHVg== 887 | dependencies: 888 | "@vitest/utils" "2.1.8" 889 | pathe "^1.1.2" 890 | 891 | "@vitest/snapshot@2.1.8": 892 | version "2.1.8" 893 | resolved "https://registry.yarnpkg.com/@vitest/snapshot/-/snapshot-2.1.8.tgz#d5dc204f4b95dc8b5e468b455dfc99000047d2de" 894 | integrity sha512-20T7xRFbmnkfcmgVEz+z3AU/3b0cEzZOt/zmnvZEctg64/QZbSDJEVm9fLnnlSi74KibmRsO9/Qabi+t0vCRPg== 895 | dependencies: 896 | "@vitest/pretty-format" "2.1.8" 897 | magic-string "^0.30.12" 898 | pathe "^1.1.2" 899 | 900 | "@vitest/spy@2.1.8": 901 | version "2.1.8" 902 | resolved "https://registry.yarnpkg.com/@vitest/spy/-/spy-2.1.8.tgz#bc41af3e1e6a41ae3b67e51f09724136b88fa447" 903 | integrity sha512-5swjf2q95gXeYPevtW0BLk6H8+bPlMb4Vw/9Em4hFxDcaOxS+e0LOX4yqNxoHzMR2akEB2xfpnWUzkZokmgWDg== 904 | dependencies: 905 | tinyspy "^3.0.2" 906 | 907 | "@vitest/utils@2.1.8": 908 | version "2.1.8" 909 | resolved "https://registry.yarnpkg.com/@vitest/utils/-/utils-2.1.8.tgz#f8ef85525f3362ebd37fd25d268745108d6ae388" 910 | integrity sha512-dwSoui6djdwbfFmIgbIjX2ZhIoG7Ex/+xpxyiEgIGzjliY8xGkcpITKTlp6B4MgtGkF2ilvm97cPM96XZaAgcA== 911 | dependencies: 912 | "@vitest/pretty-format" "2.1.8" 913 | loupe "^3.1.2" 914 | tinyrainbow "^1.2.0" 915 | 916 | "@viz-js/viz@3.11.0": 917 | version "3.11.0" 918 | resolved "https://registry.yarnpkg.com/@viz-js/viz/-/viz-3.11.0.tgz#516a3fb644ca871762bcb86e2b41b6d107869c20" 919 | integrity sha512-3zoKLQUqShIhTPvBAIIgJUf5wO9aY0q+Ftzw1u26KkJX1OJjT7Z5VUqgML2GIzXJYFgjqS6a2VREMwrgChuubA== 920 | 921 | agent-base@^7.0.2, agent-base@^7.1.0: 922 | version "7.1.1" 923 | resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-7.1.1.tgz#bdbded7dfb096b751a2a087eeeb9664725b2e317" 924 | integrity sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA== 925 | dependencies: 926 | debug "^4.3.4" 927 | 928 | ansi-regex@^5.0.1: 929 | version "5.0.1" 930 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" 931 | integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== 932 | 933 | ansi-styles@^4.1.0: 934 | version "4.3.0" 935 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" 936 | integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== 937 | dependencies: 938 | color-convert "^2.0.1" 939 | 940 | ansi-styles@^5.0.0: 941 | version "5.2.0" 942 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-5.2.0.tgz#07449690ad45777d1924ac2abb2fc8895dba836b" 943 | integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA== 944 | 945 | aria-query@5.3.0: 946 | version "5.3.0" 947 | resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-5.3.0.tgz#650c569e41ad90b51b3d7df5e5eed1c7549c103e" 948 | integrity sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A== 949 | dependencies: 950 | dequal "^2.0.3" 951 | 952 | assertion-error@^2.0.1: 953 | version "2.0.1" 954 | resolved "https://registry.yarnpkg.com/assertion-error/-/assertion-error-2.0.1.tgz#f641a196b335690b1070bf00b6e7593fec190bf7" 955 | integrity sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA== 956 | 957 | asynckit@^0.4.0: 958 | version "0.4.0" 959 | resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" 960 | integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== 961 | 962 | babel-plugin-macros@^3.1.0: 963 | version "3.1.0" 964 | resolved "https://registry.yarnpkg.com/babel-plugin-macros/-/babel-plugin-macros-3.1.0.tgz#9ef6dc74deb934b4db344dc973ee851d148c50c1" 965 | integrity sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg== 966 | dependencies: 967 | "@babel/runtime" "^7.12.5" 968 | cosmiconfig "^7.0.0" 969 | resolve "^1.19.0" 970 | 971 | cac@^6.7.14: 972 | version "6.7.14" 973 | resolved "https://registry.yarnpkg.com/cac/-/cac-6.7.14.tgz#804e1e6f506ee363cb0e3ccbb09cad5dd9870959" 974 | integrity sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ== 975 | 976 | callsites@^3.0.0: 977 | version "3.1.0" 978 | resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" 979 | integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== 980 | 981 | chai@^5.1.2: 982 | version "5.1.2" 983 | resolved "https://registry.yarnpkg.com/chai/-/chai-5.1.2.tgz#3afbc340b994ae3610ca519a6c70ace77ad4378d" 984 | integrity sha512-aGtmf24DW6MLHHG5gCx4zaI3uBq3KRtxeVs0DjFH6Z0rDNbsvTxFASFvdj79pxjxZ8/5u3PIiN3IwEIQkiiuPw== 985 | dependencies: 986 | assertion-error "^2.0.1" 987 | check-error "^2.1.1" 988 | deep-eql "^5.0.1" 989 | loupe "^3.1.0" 990 | pathval "^2.0.0" 991 | 992 | chalk@^4.1.0: 993 | version "4.1.2" 994 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" 995 | integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== 996 | dependencies: 997 | ansi-styles "^4.1.0" 998 | supports-color "^7.1.0" 999 | 1000 | check-error@^2.1.1: 1001 | version "2.1.1" 1002 | resolved "https://registry.yarnpkg.com/check-error/-/check-error-2.1.1.tgz#87eb876ae71ee388fa0471fe423f494be1d96ccc" 1003 | integrity sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw== 1004 | 1005 | clsx@^2.1.1: 1006 | version "2.1.1" 1007 | resolved "https://registry.yarnpkg.com/clsx/-/clsx-2.1.1.tgz#eed397c9fd8bd882bfb18deab7102049a2f32999" 1008 | integrity sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA== 1009 | 1010 | color-convert@^2.0.1: 1011 | version "2.0.1" 1012 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" 1013 | integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== 1014 | dependencies: 1015 | color-name "~1.1.4" 1016 | 1017 | color-name@~1.1.4: 1018 | version "1.1.4" 1019 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" 1020 | integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== 1021 | 1022 | combined-stream@^1.0.8: 1023 | version "1.0.8" 1024 | resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" 1025 | integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== 1026 | dependencies: 1027 | delayed-stream "~1.0.0" 1028 | 1029 | convert-source-map@^1.5.0: 1030 | version "1.9.0" 1031 | resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.9.0.tgz#7faae62353fb4213366d0ca98358d22e8368b05f" 1032 | integrity sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A== 1033 | 1034 | cookie@^1.0.1: 1035 | version "1.0.2" 1036 | resolved "https://registry.yarnpkg.com/cookie/-/cookie-1.0.2.tgz#27360701532116bd3f1f9416929d176afe1e4610" 1037 | integrity sha512-9Kr/j4O16ISv8zBBhJoi4bXOYNTkFLOqSL3UDB0njXxCXNezjeyVrJyGOWtgfs/q2km1gwBcfH8q1yEGoMYunA== 1038 | 1039 | cosmiconfig@^7.0.0: 1040 | version "7.1.0" 1041 | resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-7.1.0.tgz#1443b9afa596b670082ea46cbd8f6a62b84635f6" 1042 | integrity sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA== 1043 | dependencies: 1044 | "@types/parse-json" "^4.0.0" 1045 | import-fresh "^3.2.1" 1046 | parse-json "^5.0.0" 1047 | path-type "^4.0.0" 1048 | yaml "^1.10.0" 1049 | 1050 | cssstyle@^4.1.0: 1051 | version "4.1.0" 1052 | resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-4.1.0.tgz#161faee382af1bafadb6d3867a92a19bcb4aea70" 1053 | integrity sha512-h66W1URKpBS5YMI/V8PyXvTMFT8SupJ1IzoIV8IeBC/ji8WVmrO8dGlTi+2dh6whmdk6BiKJLD/ZBkhWbcg6nA== 1054 | dependencies: 1055 | rrweb-cssom "^0.7.1" 1056 | 1057 | csstype@^3.0.2, csstype@^3.1.3: 1058 | version "3.1.3" 1059 | resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.3.tgz#d80ff294d114fb0e6ac500fbf85b60137d7eff81" 1060 | integrity sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw== 1061 | 1062 | data-urls@^5.0.0: 1063 | version "5.0.0" 1064 | resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-5.0.0.tgz#2f76906bce1824429ffecb6920f45a0b30f00dde" 1065 | integrity sha512-ZYP5VBHshaDAiVZxjbRVcFJpc+4xGgT0bK3vzy1HLN8jTO975HEbuYzZJcHoQEY5K1a0z8YayJkyVETa08eNTg== 1066 | dependencies: 1067 | whatwg-mimetype "^4.0.0" 1068 | whatwg-url "^14.0.0" 1069 | 1070 | debug@4, debug@^4.1.1, debug@^4.3.1, debug@^4.3.4, debug@^4.3.7: 1071 | version "4.4.0" 1072 | resolved "https://registry.yarnpkg.com/debug/-/debug-4.4.0.tgz#2b3f2aea2ffeb776477460267377dc8710faba8a" 1073 | integrity sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA== 1074 | dependencies: 1075 | ms "^2.1.3" 1076 | 1077 | decimal.js@^10.4.3: 1078 | version "10.4.3" 1079 | resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.4.3.tgz#1044092884d245d1b7f65725fa4ad4c6f781cc23" 1080 | integrity sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA== 1081 | 1082 | deep-eql@^5.0.1: 1083 | version "5.0.2" 1084 | resolved "https://registry.yarnpkg.com/deep-eql/-/deep-eql-5.0.2.tgz#4b756d8d770a9257300825d52a2c2cff99c3a341" 1085 | integrity sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q== 1086 | 1087 | delayed-stream@~1.0.0: 1088 | version "1.0.0" 1089 | resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" 1090 | integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== 1091 | 1092 | dequal@^2.0.3: 1093 | version "2.0.3" 1094 | resolved "https://registry.yarnpkg.com/dequal/-/dequal-2.0.3.tgz#2644214f1997d39ed0ee0ece72335490a7ac67be" 1095 | integrity sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA== 1096 | 1097 | dom-accessibility-api@^0.5.9: 1098 | version "0.5.16" 1099 | resolved "https://registry.yarnpkg.com/dom-accessibility-api/-/dom-accessibility-api-0.5.16.tgz#5a7429e6066eb3664d911e33fb0e45de8eb08453" 1100 | integrity sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg== 1101 | 1102 | dom-helpers@^5.0.1: 1103 | version "5.2.1" 1104 | resolved "https://registry.yarnpkg.com/dom-helpers/-/dom-helpers-5.2.1.tgz#d9400536b2bf8225ad98fe052e029451ac40e902" 1105 | integrity sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA== 1106 | dependencies: 1107 | "@babel/runtime" "^7.8.7" 1108 | csstype "^3.0.2" 1109 | 1110 | entities@^4.5.0: 1111 | version "4.5.0" 1112 | resolved "https://registry.yarnpkg.com/entities/-/entities-4.5.0.tgz#5d268ea5e7113ec74c4d033b79ea5a35a488fb48" 1113 | integrity sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw== 1114 | 1115 | error-ex@^1.3.1: 1116 | version "1.3.2" 1117 | resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" 1118 | integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== 1119 | dependencies: 1120 | is-arrayish "^0.2.1" 1121 | 1122 | es-module-lexer@^1.5.4: 1123 | version "1.5.4" 1124 | resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-1.5.4.tgz#a8efec3a3da991e60efa6b633a7cad6ab8d26b78" 1125 | integrity sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw== 1126 | 1127 | esbuild@^0.21.3: 1128 | version "0.21.5" 1129 | resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.21.5.tgz#9ca301b120922959b766360d8ac830da0d02997d" 1130 | integrity sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw== 1131 | optionalDependencies: 1132 | "@esbuild/aix-ppc64" "0.21.5" 1133 | "@esbuild/android-arm" "0.21.5" 1134 | "@esbuild/android-arm64" "0.21.5" 1135 | "@esbuild/android-x64" "0.21.5" 1136 | "@esbuild/darwin-arm64" "0.21.5" 1137 | "@esbuild/darwin-x64" "0.21.5" 1138 | "@esbuild/freebsd-arm64" "0.21.5" 1139 | "@esbuild/freebsd-x64" "0.21.5" 1140 | "@esbuild/linux-arm" "0.21.5" 1141 | "@esbuild/linux-arm64" "0.21.5" 1142 | "@esbuild/linux-ia32" "0.21.5" 1143 | "@esbuild/linux-loong64" "0.21.5" 1144 | "@esbuild/linux-mips64el" "0.21.5" 1145 | "@esbuild/linux-ppc64" "0.21.5" 1146 | "@esbuild/linux-riscv64" "0.21.5" 1147 | "@esbuild/linux-s390x" "0.21.5" 1148 | "@esbuild/linux-x64" "0.21.5" 1149 | "@esbuild/netbsd-x64" "0.21.5" 1150 | "@esbuild/openbsd-x64" "0.21.5" 1151 | "@esbuild/sunos-x64" "0.21.5" 1152 | "@esbuild/win32-arm64" "0.21.5" 1153 | "@esbuild/win32-ia32" "0.21.5" 1154 | "@esbuild/win32-x64" "0.21.5" 1155 | 1156 | esbuild@^0.24.0: 1157 | version "0.24.0" 1158 | resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.24.0.tgz#f2d470596885fcb2e91c21eb3da3b3c89c0b55e7" 1159 | integrity sha512-FuLPevChGDshgSicjisSooU0cemp/sGXR841D5LHMB7mTVOmsEHcAxaH3irL53+8YDIeVNQEySh4DaYU/iuPqQ== 1160 | optionalDependencies: 1161 | "@esbuild/aix-ppc64" "0.24.0" 1162 | "@esbuild/android-arm" "0.24.0" 1163 | "@esbuild/android-arm64" "0.24.0" 1164 | "@esbuild/android-x64" "0.24.0" 1165 | "@esbuild/darwin-arm64" "0.24.0" 1166 | "@esbuild/darwin-x64" "0.24.0" 1167 | "@esbuild/freebsd-arm64" "0.24.0" 1168 | "@esbuild/freebsd-x64" "0.24.0" 1169 | "@esbuild/linux-arm" "0.24.0" 1170 | "@esbuild/linux-arm64" "0.24.0" 1171 | "@esbuild/linux-ia32" "0.24.0" 1172 | "@esbuild/linux-loong64" "0.24.0" 1173 | "@esbuild/linux-mips64el" "0.24.0" 1174 | "@esbuild/linux-ppc64" "0.24.0" 1175 | "@esbuild/linux-riscv64" "0.24.0" 1176 | "@esbuild/linux-s390x" "0.24.0" 1177 | "@esbuild/linux-x64" "0.24.0" 1178 | "@esbuild/netbsd-x64" "0.24.0" 1179 | "@esbuild/openbsd-arm64" "0.24.0" 1180 | "@esbuild/openbsd-x64" "0.24.0" 1181 | "@esbuild/sunos-x64" "0.24.0" 1182 | "@esbuild/win32-arm64" "0.24.0" 1183 | "@esbuild/win32-ia32" "0.24.0" 1184 | "@esbuild/win32-x64" "0.24.0" 1185 | 1186 | escape-string-regexp@^4.0.0: 1187 | version "4.0.0" 1188 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" 1189 | integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== 1190 | 1191 | estree-walker@^3.0.3: 1192 | version "3.0.3" 1193 | resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-3.0.3.tgz#67c3e549ec402a487b4fc193d1953a524752340d" 1194 | integrity sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g== 1195 | dependencies: 1196 | "@types/estree" "^1.0.0" 1197 | 1198 | expect-type@^1.1.0: 1199 | version "1.1.0" 1200 | resolved "https://registry.yarnpkg.com/expect-type/-/expect-type-1.1.0.tgz#a146e414250d13dfc49eafcfd1344a4060fa4c75" 1201 | integrity sha512-bFi65yM+xZgk+u/KRIpekdSYkTB5W1pEf0Lt8Q8Msh7b+eQ7LXVtIB1Bkm4fvclDEL1b2CZkMhv2mOeF8tMdkA== 1202 | 1203 | find-root@^1.1.0: 1204 | version "1.1.0" 1205 | resolved "https://registry.yarnpkg.com/find-root/-/find-root-1.1.0.tgz#abcfc8ba76f708c42a97b3d685b7e9450bfb9ce4" 1206 | integrity sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng== 1207 | 1208 | form-data@^4.0.0: 1209 | version "4.0.1" 1210 | resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.1.tgz#ba1076daaaa5bfd7e99c1a6cb02aa0a5cff90d48" 1211 | integrity sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw== 1212 | dependencies: 1213 | asynckit "^0.4.0" 1214 | combined-stream "^1.0.8" 1215 | mime-types "^2.1.12" 1216 | 1217 | fsevents@~2.3.2, fsevents@~2.3.3: 1218 | version "2.3.3" 1219 | resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" 1220 | integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== 1221 | 1222 | function-bind@^1.1.2: 1223 | version "1.1.2" 1224 | resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" 1225 | integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== 1226 | 1227 | globals@^11.1.0: 1228 | version "11.12.0" 1229 | resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" 1230 | integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== 1231 | 1232 | globrex@^0.1.2: 1233 | version "0.1.2" 1234 | resolved "https://registry.yarnpkg.com/globrex/-/globrex-0.1.2.tgz#dd5d9ec826232730cd6793a5e33a9302985e6098" 1235 | integrity sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg== 1236 | 1237 | has-flag@^4.0.0: 1238 | version "4.0.0" 1239 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" 1240 | integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== 1241 | 1242 | hasown@^2.0.2: 1243 | version "2.0.2" 1244 | resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.2.tgz#003eaf91be7adc372e84ec59dc37252cedb80003" 1245 | integrity sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ== 1246 | dependencies: 1247 | function-bind "^1.1.2" 1248 | 1249 | hoist-non-react-statics@^3.3.1: 1250 | version "3.3.2" 1251 | resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz#ece0acaf71d62c2969c2ec59feff42a4b1a85b45" 1252 | integrity sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw== 1253 | dependencies: 1254 | react-is "^16.7.0" 1255 | 1256 | html-encoding-sniffer@^4.0.0: 1257 | version "4.0.0" 1258 | resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-4.0.0.tgz#696df529a7cfd82446369dc5193e590a3735b448" 1259 | integrity sha512-Y22oTqIU4uuPgEemfz7NDJz6OeKf12Lsu+QC+s3BVpda64lTiMYCyGwg5ki4vFxkMwQdeZDl2adZoqUgdFuTgQ== 1260 | dependencies: 1261 | whatwg-encoding "^3.1.1" 1262 | 1263 | http-proxy-agent@^7.0.2: 1264 | version "7.0.2" 1265 | resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz#9a8b1f246866c028509486585f62b8f2c18c270e" 1266 | integrity sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig== 1267 | dependencies: 1268 | agent-base "^7.1.0" 1269 | debug "^4.3.4" 1270 | 1271 | https-proxy-agent@^7.0.5: 1272 | version "7.0.5" 1273 | resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-7.0.5.tgz#9e8b5013873299e11fab6fd548405da2d6c602b2" 1274 | integrity sha512-1e4Wqeblerz+tMKPIq2EMGiiWW1dIjZOksyHWSUm1rmuvw/how9hBHZ38lAGj5ID4Ik6EdkOw7NmWPy6LAwalw== 1275 | dependencies: 1276 | agent-base "^7.0.2" 1277 | debug "4" 1278 | 1279 | iconv-lite@0.6.3: 1280 | version "0.6.3" 1281 | resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501" 1282 | integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw== 1283 | dependencies: 1284 | safer-buffer ">= 2.1.2 < 3.0.0" 1285 | 1286 | import-fresh@^3.2.1: 1287 | version "3.3.0" 1288 | resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" 1289 | integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== 1290 | dependencies: 1291 | parent-module "^1.0.0" 1292 | resolve-from "^4.0.0" 1293 | 1294 | is-arrayish@^0.2.1: 1295 | version "0.2.1" 1296 | resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" 1297 | integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg== 1298 | 1299 | is-core-module@^2.13.0: 1300 | version "2.15.1" 1301 | resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.15.1.tgz#a7363a25bee942fefab0de13bf6aa372c82dcc37" 1302 | integrity sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ== 1303 | dependencies: 1304 | hasown "^2.0.2" 1305 | 1306 | is-potential-custom-element-name@^1.0.1: 1307 | version "1.0.1" 1308 | resolved "https://registry.yarnpkg.com/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz#171ed6f19e3ac554394edf78caa05784a45bebb5" 1309 | integrity sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ== 1310 | 1311 | "js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: 1312 | version "4.0.0" 1313 | resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" 1314 | integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== 1315 | 1316 | jsdom@25.0.1: 1317 | version "25.0.1" 1318 | resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-25.0.1.tgz#536ec685c288fc8a5773a65f82d8b44badcc73ef" 1319 | integrity sha512-8i7LzZj7BF8uplX+ZyOlIz86V6TAsSs+np6m1kpW9u0JWi4z/1t+FzcK1aek+ybTnAC4KhBL4uXCNT0wcUIeCw== 1320 | dependencies: 1321 | cssstyle "^4.1.0" 1322 | data-urls "^5.0.0" 1323 | decimal.js "^10.4.3" 1324 | form-data "^4.0.0" 1325 | html-encoding-sniffer "^4.0.0" 1326 | http-proxy-agent "^7.0.2" 1327 | https-proxy-agent "^7.0.5" 1328 | is-potential-custom-element-name "^1.0.1" 1329 | nwsapi "^2.2.12" 1330 | parse5 "^7.1.2" 1331 | rrweb-cssom "^0.7.1" 1332 | saxes "^6.0.0" 1333 | symbol-tree "^3.2.4" 1334 | tough-cookie "^5.0.0" 1335 | w3c-xmlserializer "^5.0.0" 1336 | webidl-conversions "^7.0.0" 1337 | whatwg-encoding "^3.1.1" 1338 | whatwg-mimetype "^4.0.0" 1339 | whatwg-url "^14.0.0" 1340 | ws "^8.18.0" 1341 | xml-name-validator "^5.0.0" 1342 | 1343 | jsesc@^3.0.2: 1344 | version "3.0.2" 1345 | resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-3.0.2.tgz#bb8b09a6597ba426425f2e4a07245c3d00b9343e" 1346 | integrity sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g== 1347 | 1348 | json-parse-even-better-errors@^2.3.0: 1349 | version "2.3.1" 1350 | resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" 1351 | integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== 1352 | 1353 | lines-and-columns@^1.1.6: 1354 | version "1.2.4" 1355 | resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" 1356 | integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== 1357 | 1358 | loose-envify@^1.4.0: 1359 | version "1.4.0" 1360 | resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" 1361 | integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== 1362 | dependencies: 1363 | js-tokens "^3.0.0 || ^4.0.0" 1364 | 1365 | loupe@^3.1.0, loupe@^3.1.2: 1366 | version "3.1.2" 1367 | resolved "https://registry.yarnpkg.com/loupe/-/loupe-3.1.2.tgz#c86e0696804a02218f2206124c45d8b15291a240" 1368 | integrity sha512-23I4pFZHmAemUnz8WZXbYRSKYj801VDaNv9ETuMh7IrMc7VuVVSo+Z9iLE3ni30+U48iDWfi30d3twAXBYmnCg== 1369 | 1370 | lz-string@^1.5.0: 1371 | version "1.5.0" 1372 | resolved "https://registry.yarnpkg.com/lz-string/-/lz-string-1.5.0.tgz#c1ab50f77887b712621201ba9fd4e3a6ed099941" 1373 | integrity sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ== 1374 | 1375 | magic-string@^0.30.12: 1376 | version "0.30.14" 1377 | resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.30.14.tgz#e9bb29870b81cfc1ec3cc656552f5a7fcbf19077" 1378 | integrity sha512-5c99P1WKTed11ZC0HMJOj6CDIue6F8ySu+bJL+85q1zBEIY8IklrJ1eiKC2NDRh3Ct3FcvmJPyQHb9erXMTJNw== 1379 | dependencies: 1380 | "@jridgewell/sourcemap-codec" "^1.5.0" 1381 | 1382 | mime-db@1.52.0: 1383 | version "1.52.0" 1384 | resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" 1385 | integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== 1386 | 1387 | mime-types@^2.1.12: 1388 | version "2.1.35" 1389 | resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" 1390 | integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== 1391 | dependencies: 1392 | mime-db "1.52.0" 1393 | 1394 | ms@^2.1.3: 1395 | version "2.1.3" 1396 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" 1397 | integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== 1398 | 1399 | nanoid@^3.3.7: 1400 | version "3.3.8" 1401 | resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.8.tgz#b1be3030bee36aaff18bacb375e5cce521684baf" 1402 | integrity sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w== 1403 | 1404 | nwsapi@^2.2.12: 1405 | version "2.2.16" 1406 | resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.16.tgz#177760bba02c351df1d2644e220c31dfec8cdb43" 1407 | integrity sha512-F1I/bimDpj3ncaNDhfyMWuFqmQDBwDB0Fogc2qpL3BWvkQteFD/8BzWuIRl83rq0DXfm8SGt/HFhLXZyljTXcQ== 1408 | 1409 | object-assign@^4.1.1: 1410 | version "4.1.1" 1411 | resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" 1412 | integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== 1413 | 1414 | parent-module@^1.0.0: 1415 | version "1.0.1" 1416 | resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" 1417 | integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== 1418 | dependencies: 1419 | callsites "^3.0.0" 1420 | 1421 | parse-json@^5.0.0: 1422 | version "5.2.0" 1423 | resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd" 1424 | integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== 1425 | dependencies: 1426 | "@babel/code-frame" "^7.0.0" 1427 | error-ex "^1.3.1" 1428 | json-parse-even-better-errors "^2.3.0" 1429 | lines-and-columns "^1.1.6" 1430 | 1431 | parse5@^7.1.2: 1432 | version "7.2.1" 1433 | resolved "https://registry.yarnpkg.com/parse5/-/parse5-7.2.1.tgz#8928f55915e6125f430cc44309765bf17556a33a" 1434 | integrity sha512-BuBYQYlv1ckiPdQi/ohiivi9Sagc9JG+Ozs0r7b/0iK3sKmrb0b9FdWdBbOdx6hBCM/F9Ir82ofnBhtZOjCRPQ== 1435 | dependencies: 1436 | entities "^4.5.0" 1437 | 1438 | path-parse@^1.0.7: 1439 | version "1.0.7" 1440 | resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" 1441 | integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== 1442 | 1443 | path-type@^4.0.0: 1444 | version "4.0.0" 1445 | resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" 1446 | integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== 1447 | 1448 | pathe@^1.1.2: 1449 | version "1.1.2" 1450 | resolved "https://registry.yarnpkg.com/pathe/-/pathe-1.1.2.tgz#6c4cb47a945692e48a1ddd6e4094d170516437ec" 1451 | integrity sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ== 1452 | 1453 | pathval@^2.0.0: 1454 | version "2.0.0" 1455 | resolved "https://registry.yarnpkg.com/pathval/-/pathval-2.0.0.tgz#7e2550b422601d4f6b8e26f1301bc8f15a741a25" 1456 | integrity sha512-vE7JKRyES09KiunauX7nd2Q9/L7lhok4smP9RZTDeD4MVs72Dp2qNFVz39Nz5a0FVEW0BJR6C0DYrq6unoziZA== 1457 | 1458 | picocolors@^1.0.0, picocolors@^1.1.1: 1459 | version "1.1.1" 1460 | resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.1.1.tgz#3d321af3eab939b083c8f929a1d12cda81c26b6b" 1461 | integrity sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA== 1462 | 1463 | postcss@^8.4.43, postcss@^8.4.49: 1464 | version "8.4.49" 1465 | resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.49.tgz#4ea479048ab059ab3ae61d082190fabfd994fe19" 1466 | integrity sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA== 1467 | dependencies: 1468 | nanoid "^3.3.7" 1469 | picocolors "^1.1.1" 1470 | source-map-js "^1.2.1" 1471 | 1472 | pretty-format@^27.0.2: 1473 | version "27.5.1" 1474 | resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-27.5.1.tgz#2181879fdea51a7a5851fb39d920faa63f01d88e" 1475 | integrity sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ== 1476 | dependencies: 1477 | ansi-regex "^5.0.1" 1478 | ansi-styles "^5.0.0" 1479 | react-is "^17.0.1" 1480 | 1481 | prop-types@^15.6.2, prop-types@^15.8.1: 1482 | version "15.8.1" 1483 | resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.8.1.tgz#67d87bf1a694f48435cf332c24af10214a3140b5" 1484 | integrity sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg== 1485 | dependencies: 1486 | loose-envify "^1.4.0" 1487 | object-assign "^4.1.1" 1488 | react-is "^16.13.1" 1489 | 1490 | punycode@^2.3.1: 1491 | version "2.3.1" 1492 | resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.1.tgz#027422e2faec0b25e1549c3e1bd8309b9133b6e5" 1493 | integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg== 1494 | 1495 | react-dom@19.0.0: 1496 | version "19.0.0" 1497 | resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-19.0.0.tgz#43446f1f01c65a4cd7f7588083e686a6726cfb57" 1498 | integrity sha512-4GV5sHFG0e/0AD4X+ySy6UJd3jVl1iNsNHdpad0qhABJ11twS3TTBnseqsKurKcsNqCEFeGL3uLpVChpIO3QfQ== 1499 | dependencies: 1500 | scheduler "^0.25.0" 1501 | 1502 | react-is@^16.13.1, react-is@^16.7.0: 1503 | version "16.13.1" 1504 | resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" 1505 | integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== 1506 | 1507 | react-is@^17.0.1: 1508 | version "17.0.2" 1509 | resolved "https://registry.yarnpkg.com/react-is/-/react-is-17.0.2.tgz#e691d4a8e9c789365655539ab372762b0efb54f0" 1510 | integrity sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w== 1511 | 1512 | react-is@^18.3.1: 1513 | version "18.3.1" 1514 | resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.3.1.tgz#e83557dc12eae63a99e003a46388b1dcbb44db7e" 1515 | integrity sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg== 1516 | 1517 | react-router-dom@7.0.2: 1518 | version "7.0.2" 1519 | resolved "https://registry.yarnpkg.com/react-router-dom/-/react-router-dom-7.0.2.tgz#cbd7ce2db7112f1bc3e9eee3657ad32d7515a913" 1520 | integrity sha512-VJOQ+CDWFDGaWdrG12Nl+d7yHtLaurNgAQZVgaIy7/Xd+DojgmYLosFfZdGz1wpxmjJIAkAMVTKWcvkx1oggAw== 1521 | dependencies: 1522 | react-router "7.0.2" 1523 | 1524 | react-router@7.0.2: 1525 | version "7.0.2" 1526 | resolved "https://registry.yarnpkg.com/react-router/-/react-router-7.0.2.tgz#2820e107cb8cec8acc5db15a17470c056ea86022" 1527 | integrity sha512-m5AcPfTRUcjwmhBzOJGEl6Y7+Crqyju0+TgTQxoS4SO+BkWbhOrcfZNq6wSWdl2BBbJbsAoBUb8ZacOFT+/JlA== 1528 | dependencies: 1529 | "@types/cookie" "^0.6.0" 1530 | cookie "^1.0.1" 1531 | set-cookie-parser "^2.6.0" 1532 | turbo-stream "2.4.0" 1533 | 1534 | react-transition-group@^4.4.5: 1535 | version "4.4.5" 1536 | resolved "https://registry.yarnpkg.com/react-transition-group/-/react-transition-group-4.4.5.tgz#e53d4e3f3344da8521489fbef8f2581d42becdd1" 1537 | integrity sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g== 1538 | dependencies: 1539 | "@babel/runtime" "^7.5.5" 1540 | dom-helpers "^5.0.1" 1541 | loose-envify "^1.4.0" 1542 | prop-types "^15.6.2" 1543 | 1544 | react@19.0.0: 1545 | version "19.0.0" 1546 | resolved "https://registry.yarnpkg.com/react/-/react-19.0.0.tgz#6e1969251b9f108870aa4bff37a0ce9ddfaaabdd" 1547 | integrity sha512-V8AVnmPIICiWpGfm6GLzCR/W5FXLchHop40W4nXBmdlEceh16rCN8O8LNWm5bh5XUX91fh7KpA+W0TgMKmgTpQ== 1548 | 1549 | regenerator-runtime@^0.14.0: 1550 | version "0.14.1" 1551 | resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz#356ade10263f685dda125100cd862c1db895327f" 1552 | integrity sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw== 1553 | 1554 | resolve-from@^4.0.0: 1555 | version "4.0.0" 1556 | resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" 1557 | integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== 1558 | 1559 | resolve@^1.19.0: 1560 | version "1.22.8" 1561 | resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.8.tgz#b6c87a9f2aa06dfab52e3d70ac8cde321fa5a48d" 1562 | integrity sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw== 1563 | dependencies: 1564 | is-core-module "^2.13.0" 1565 | path-parse "^1.0.7" 1566 | supports-preserve-symlinks-flag "^1.0.0" 1567 | 1568 | rollup@^4.20.0, rollup@^4.23.0: 1569 | version "4.28.1" 1570 | resolved "https://registry.yarnpkg.com/rollup/-/rollup-4.28.1.tgz#7718ba34d62b449dfc49adbfd2f312b4fe0df4de" 1571 | integrity sha512-61fXYl/qNVinKmGSTHAZ6Yy8I3YIJC/r2m9feHo6SwVAVcLT5MPwOUFe7EuURA/4m0NR8lXG4BBXuo/IZEsjMg== 1572 | dependencies: 1573 | "@types/estree" "1.0.6" 1574 | optionalDependencies: 1575 | "@rollup/rollup-android-arm-eabi" "4.28.1" 1576 | "@rollup/rollup-android-arm64" "4.28.1" 1577 | "@rollup/rollup-darwin-arm64" "4.28.1" 1578 | "@rollup/rollup-darwin-x64" "4.28.1" 1579 | "@rollup/rollup-freebsd-arm64" "4.28.1" 1580 | "@rollup/rollup-freebsd-x64" "4.28.1" 1581 | "@rollup/rollup-linux-arm-gnueabihf" "4.28.1" 1582 | "@rollup/rollup-linux-arm-musleabihf" "4.28.1" 1583 | "@rollup/rollup-linux-arm64-gnu" "4.28.1" 1584 | "@rollup/rollup-linux-arm64-musl" "4.28.1" 1585 | "@rollup/rollup-linux-loongarch64-gnu" "4.28.1" 1586 | "@rollup/rollup-linux-powerpc64le-gnu" "4.28.1" 1587 | "@rollup/rollup-linux-riscv64-gnu" "4.28.1" 1588 | "@rollup/rollup-linux-s390x-gnu" "4.28.1" 1589 | "@rollup/rollup-linux-x64-gnu" "4.28.1" 1590 | "@rollup/rollup-linux-x64-musl" "4.28.1" 1591 | "@rollup/rollup-win32-arm64-msvc" "4.28.1" 1592 | "@rollup/rollup-win32-ia32-msvc" "4.28.1" 1593 | "@rollup/rollup-win32-x64-msvc" "4.28.1" 1594 | fsevents "~2.3.2" 1595 | 1596 | rrweb-cssom@^0.7.1: 1597 | version "0.7.1" 1598 | resolved "https://registry.yarnpkg.com/rrweb-cssom/-/rrweb-cssom-0.7.1.tgz#c73451a484b86dd7cfb1e0b2898df4b703183e4b" 1599 | integrity sha512-TrEMa7JGdVm0UThDJSx7ddw5nVm3UJS9o9CCIZ72B1vSyEZoziDqBYP3XIoi/12lKrJR8rE3jeFHMok2F/Mnsg== 1600 | 1601 | "safer-buffer@>= 2.1.2 < 3.0.0": 1602 | version "2.1.2" 1603 | resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" 1604 | integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== 1605 | 1606 | saxes@^6.0.0: 1607 | version "6.0.0" 1608 | resolved "https://registry.yarnpkg.com/saxes/-/saxes-6.0.0.tgz#fe5b4a4768df4f14a201b1ba6a65c1f3d9988cc5" 1609 | integrity sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA== 1610 | dependencies: 1611 | xmlchars "^2.2.0" 1612 | 1613 | scheduler@^0.25.0: 1614 | version "0.25.0" 1615 | resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.25.0.tgz#336cd9768e8cceebf52d3c80e3dcf5de23e7e015" 1616 | integrity sha512-xFVuu11jh+xcO7JOAGJNOXld8/TcEHK/4CituBUeUb5hqxJLj9YuemAEuvm9gQ/+pgXYfbQuqAkiYu+u7YEsNA== 1617 | 1618 | set-cookie-parser@^2.6.0: 1619 | version "2.7.1" 1620 | resolved "https://registry.yarnpkg.com/set-cookie-parser/-/set-cookie-parser-2.7.1.tgz#3016f150072202dfbe90fadee053573cc89d2943" 1621 | integrity sha512-IOc8uWeOZgnb3ptbCURJWNjWUPcO3ZnTTdzsurqERrP6nPyv+paC55vJM0LpOlT2ne+Ix+9+CRG1MNLlyZ4GjQ== 1622 | 1623 | siginfo@^2.0.0: 1624 | version "2.0.0" 1625 | resolved "https://registry.yarnpkg.com/siginfo/-/siginfo-2.0.0.tgz#32e76c70b79724e3bb567cb9d543eb858ccfaf30" 1626 | integrity sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g== 1627 | 1628 | source-map-js@^1.2.1: 1629 | version "1.2.1" 1630 | resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.2.1.tgz#1ce5650fddd87abc099eda37dcff024c2667ae46" 1631 | integrity sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA== 1632 | 1633 | source-map@^0.5.7: 1634 | version "0.5.7" 1635 | resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" 1636 | integrity sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ== 1637 | 1638 | stackback@0.0.2: 1639 | version "0.0.2" 1640 | resolved "https://registry.yarnpkg.com/stackback/-/stackback-0.0.2.tgz#1ac8a0d9483848d1695e418b6d031a3c3ce68e3b" 1641 | integrity sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw== 1642 | 1643 | std-env@^3.8.0: 1644 | version "3.8.0" 1645 | resolved "https://registry.yarnpkg.com/std-env/-/std-env-3.8.0.tgz#b56ffc1baf1a29dcc80a3bdf11d7fca7c315e7d5" 1646 | integrity sha512-Bc3YwwCB+OzldMxOXJIIvC6cPRWr/LxOp48CdQTOkPyk/t4JWWJbrilwBd7RJzKV8QW7tJkcgAmeuLLJugl5/w== 1647 | 1648 | stylis@4.2.0: 1649 | version "4.2.0" 1650 | resolved "https://registry.yarnpkg.com/stylis/-/stylis-4.2.0.tgz#79daee0208964c8fe695a42fcffcac633a211a51" 1651 | integrity sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw== 1652 | 1653 | supports-color@^7.1.0: 1654 | version "7.2.0" 1655 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" 1656 | integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== 1657 | dependencies: 1658 | has-flag "^4.0.0" 1659 | 1660 | supports-preserve-symlinks-flag@^1.0.0: 1661 | version "1.0.0" 1662 | resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" 1663 | integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== 1664 | 1665 | symbol-tree@^3.2.4: 1666 | version "3.2.4" 1667 | resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2" 1668 | integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw== 1669 | 1670 | tinybench@^2.9.0: 1671 | version "2.9.0" 1672 | resolved "https://registry.yarnpkg.com/tinybench/-/tinybench-2.9.0.tgz#103c9f8ba6d7237a47ab6dd1dcff77251863426b" 1673 | integrity sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg== 1674 | 1675 | tinyexec@^0.3.1: 1676 | version "0.3.1" 1677 | resolved "https://registry.yarnpkg.com/tinyexec/-/tinyexec-0.3.1.tgz#0ab0daf93b43e2c211212396bdb836b468c97c98" 1678 | integrity sha512-WiCJLEECkO18gwqIp6+hJg0//p23HXp4S+gGtAKu3mI2F2/sXC4FvHvXvB0zJVVaTPhx1/tOwdbRsa1sOBIKqQ== 1679 | 1680 | tinypool@^1.0.1: 1681 | version "1.0.2" 1682 | resolved "https://registry.yarnpkg.com/tinypool/-/tinypool-1.0.2.tgz#706193cc532f4c100f66aa00b01c42173d9051b2" 1683 | integrity sha512-al6n+QEANGFOMf/dmUMsuS5/r9B06uwlyNjZZql/zv8J7ybHCgoihBNORZCY2mzUuAnomQa2JdhyHKzZxPCrFA== 1684 | 1685 | tinyrainbow@^1.2.0: 1686 | version "1.2.0" 1687 | resolved "https://registry.yarnpkg.com/tinyrainbow/-/tinyrainbow-1.2.0.tgz#5c57d2fc0fb3d1afd78465c33ca885d04f02abb5" 1688 | integrity sha512-weEDEq7Z5eTHPDh4xjX789+fHfF+P8boiFB+0vbWzpbnbsEr/GRaohi/uMKxg8RZMXnl1ItAi/IUHWMsjDV7kQ== 1689 | 1690 | tinyspy@^3.0.2: 1691 | version "3.0.2" 1692 | resolved "https://registry.yarnpkg.com/tinyspy/-/tinyspy-3.0.2.tgz#86dd3cf3d737b15adcf17d7887c84a75201df20a" 1693 | integrity sha512-n1cw8k1k0x4pgA2+9XrOkFydTerNcJ1zWCO5Nn9scWHTD+5tp8dghT2x1uduQePZTZgd3Tupf+x9BxJjeJi77Q== 1694 | 1695 | tldts-core@^6.1.65: 1696 | version "6.1.65" 1697 | resolved "https://registry.yarnpkg.com/tldts-core/-/tldts-core-6.1.65.tgz#4b238e9658469f82a61787ee9135a3f083de68fa" 1698 | integrity sha512-Uq5t0N0Oj4nQSbU8wFN1YYENvMthvwU13MQrMJRspYCGLSAZjAfoBOJki5IQpnBM/WFskxxC/gIOTwaedmHaSg== 1699 | 1700 | tldts@^6.1.32: 1701 | version "6.1.65" 1702 | resolved "https://registry.yarnpkg.com/tldts/-/tldts-6.1.65.tgz#a3b8ad62292c7465d79addba3ff4bdc5fa92e4f5" 1703 | integrity sha512-xU9gLTfAGsADQ2PcWee6Hg8RFAv0DnjMGVJmDnUmI8a9+nYmapMQix4afwrdaCtT+AqP4MaxEzu7cCrYmBPbzQ== 1704 | dependencies: 1705 | tldts-core "^6.1.65" 1706 | 1707 | tough-cookie@^5.0.0: 1708 | version "5.0.0" 1709 | resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-5.0.0.tgz#6b6518e2b5c070cf742d872ee0f4f92d69eac1af" 1710 | integrity sha512-FRKsF7cz96xIIeMZ82ehjC3xW2E+O2+v11udrDYewUbszngYhsGa8z6YUMMzO9QJZzzyd0nGGXnML/TReX6W8Q== 1711 | dependencies: 1712 | tldts "^6.1.32" 1713 | 1714 | tr46@^5.0.0: 1715 | version "5.0.0" 1716 | resolved "https://registry.yarnpkg.com/tr46/-/tr46-5.0.0.tgz#3b46d583613ec7283020d79019f1335723801cec" 1717 | integrity sha512-tk2G5R2KRwBd+ZN0zaEXpmzdKyOYksXwywulIX95MBODjSzMIuQnQ3m8JxgbhnL1LeVo7lqQKsYa1O3Htl7K5g== 1718 | dependencies: 1719 | punycode "^2.3.1" 1720 | 1721 | tsconfck@^3.0.3: 1722 | version "3.1.4" 1723 | resolved "https://registry.yarnpkg.com/tsconfck/-/tsconfck-3.1.4.tgz#de01a15334962e2feb526824339b51be26712229" 1724 | integrity sha512-kdqWFGVJqe+KGYvlSO9NIaWn9jT1Ny4oKVzAJsKii5eoE9snzTJzL4+MMVOMn+fikWGFmKEylcXL710V/kIPJQ== 1725 | 1726 | turbo-stream@2.4.0: 1727 | version "2.4.0" 1728 | resolved "https://registry.yarnpkg.com/turbo-stream/-/turbo-stream-2.4.0.tgz#1e4fca6725e90fa14ac4adb782f2d3759a5695f0" 1729 | integrity sha512-FHncC10WpBd2eOmGwpmQsWLDoK4cqsA/UT/GqNoaKOQnT8uzhtCbg3EoUDMvqpOSAI0S26mr0rkjzbOO6S3v1g== 1730 | 1731 | typescript@5.7.2: 1732 | version "5.7.2" 1733 | resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.7.2.tgz#3169cf8c4c8a828cde53ba9ecb3d2b1d5dd67be6" 1734 | integrity sha512-i5t66RHxDvVN40HfDd1PsEThGNnlMCMT3jMUuoh9/0TaqWevNontacunWyN02LA9/fIbEWlcHZcgTKb9QoaLfg== 1735 | 1736 | vite-node@2.1.8: 1737 | version "2.1.8" 1738 | resolved "https://registry.yarnpkg.com/vite-node/-/vite-node-2.1.8.tgz#9495ca17652f6f7f95ca7c4b568a235e0c8dbac5" 1739 | integrity sha512-uPAwSr57kYjAUux+8E2j0q0Fxpn8M9VoyfGiRI8Kfktz9NcYMCenwY5RnZxnF1WTu3TGiYipirIzacLL3VVGFg== 1740 | dependencies: 1741 | cac "^6.7.14" 1742 | debug "^4.3.7" 1743 | es-module-lexer "^1.5.4" 1744 | pathe "^1.1.2" 1745 | vite "^5.0.0" 1746 | 1747 | vite-tsconfig-paths@5.1.4: 1748 | version "5.1.4" 1749 | resolved "https://registry.yarnpkg.com/vite-tsconfig-paths/-/vite-tsconfig-paths-5.1.4.tgz#d9a71106a7ff2c1c840c6f1708042f76a9212ed4" 1750 | integrity sha512-cYj0LRuLV2c2sMqhqhGpaO3LretdtMn/BVX4cPLanIZuwwrkVl+lK84E/miEXkCHWXuq65rhNN4rXsBcOB3S4w== 1751 | dependencies: 1752 | debug "^4.1.1" 1753 | globrex "^0.1.2" 1754 | tsconfck "^3.0.3" 1755 | 1756 | vite@6.0.3: 1757 | version "6.0.3" 1758 | resolved "https://registry.yarnpkg.com/vite/-/vite-6.0.3.tgz#cc01f403e326a9fc1e064235df8a6de084c8a491" 1759 | integrity sha512-Cmuo5P0ENTN6HxLSo6IHsjCLn/81Vgrp81oaiFFMRa8gGDj5xEjIcEpf2ZymZtZR8oU0P2JX5WuUp/rlXcHkAw== 1760 | dependencies: 1761 | esbuild "^0.24.0" 1762 | postcss "^8.4.49" 1763 | rollup "^4.23.0" 1764 | optionalDependencies: 1765 | fsevents "~2.3.3" 1766 | 1767 | vite@^5.0.0: 1768 | version "5.4.11" 1769 | resolved "https://registry.yarnpkg.com/vite/-/vite-5.4.11.tgz#3b415cd4aed781a356c1de5a9ebafb837715f6e5" 1770 | integrity sha512-c7jFQRklXua0mTzneGW9QVyxFjUgwcihC4bXEtujIo2ouWCe1Ajt/amn2PCxYnhYfd5k09JX3SB7OYWFKYqj8Q== 1771 | dependencies: 1772 | esbuild "^0.21.3" 1773 | postcss "^8.4.43" 1774 | rollup "^4.20.0" 1775 | optionalDependencies: 1776 | fsevents "~2.3.3" 1777 | 1778 | vitest@2.1.8: 1779 | version "2.1.8" 1780 | resolved "https://registry.yarnpkg.com/vitest/-/vitest-2.1.8.tgz#2e6a00bc24833574d535c96d6602fb64163092fa" 1781 | integrity sha512-1vBKTZskHw/aosXqQUlVWWlGUxSJR8YtiyZDJAFeW2kPAeX6S3Sool0mjspO+kXLuxVWlEDDowBAeqeAQefqLQ== 1782 | dependencies: 1783 | "@vitest/expect" "2.1.8" 1784 | "@vitest/mocker" "2.1.8" 1785 | "@vitest/pretty-format" "^2.1.8" 1786 | "@vitest/runner" "2.1.8" 1787 | "@vitest/snapshot" "2.1.8" 1788 | "@vitest/spy" "2.1.8" 1789 | "@vitest/utils" "2.1.8" 1790 | chai "^5.1.2" 1791 | debug "^4.3.7" 1792 | expect-type "^1.1.0" 1793 | magic-string "^0.30.12" 1794 | pathe "^1.1.2" 1795 | std-env "^3.8.0" 1796 | tinybench "^2.9.0" 1797 | tinyexec "^0.3.1" 1798 | tinypool "^1.0.1" 1799 | tinyrainbow "^1.2.0" 1800 | vite "^5.0.0" 1801 | vite-node "2.1.8" 1802 | why-is-node-running "^2.3.0" 1803 | 1804 | w3c-xmlserializer@^5.0.0: 1805 | version "5.0.0" 1806 | resolved "https://registry.yarnpkg.com/w3c-xmlserializer/-/w3c-xmlserializer-5.0.0.tgz#f925ba26855158594d907313cedd1476c5967f6c" 1807 | integrity sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA== 1808 | dependencies: 1809 | xml-name-validator "^5.0.0" 1810 | 1811 | webidl-conversions@^7.0.0: 1812 | version "7.0.0" 1813 | resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-7.0.0.tgz#256b4e1882be7debbf01d05f0aa2039778ea080a" 1814 | integrity sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g== 1815 | 1816 | whatwg-encoding@^3.1.1: 1817 | version "3.1.1" 1818 | resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-3.1.1.tgz#d0f4ef769905d426e1688f3e34381a99b60b76e5" 1819 | integrity sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ== 1820 | dependencies: 1821 | iconv-lite "0.6.3" 1822 | 1823 | whatwg-mimetype@^4.0.0: 1824 | version "4.0.0" 1825 | resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-4.0.0.tgz#bc1bf94a985dc50388d54a9258ac405c3ca2fc0a" 1826 | integrity sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg== 1827 | 1828 | whatwg-url@^14.0.0: 1829 | version "14.1.0" 1830 | resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-14.1.0.tgz#fffebec86cc8e6c2a657e50dc606207b870f0ab3" 1831 | integrity sha512-jlf/foYIKywAt3x/XWKZ/3rz8OSJPiWktjmk891alJUEjiVxKX9LEO92qH3hv4aJ0mN3MWPvGMCy8jQi95xK4w== 1832 | dependencies: 1833 | tr46 "^5.0.0" 1834 | webidl-conversions "^7.0.0" 1835 | 1836 | why-is-node-running@^2.3.0: 1837 | version "2.3.0" 1838 | resolved "https://registry.yarnpkg.com/why-is-node-running/-/why-is-node-running-2.3.0.tgz#a3f69a97107f494b3cdc3bdddd883a7d65cebf04" 1839 | integrity sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w== 1840 | dependencies: 1841 | siginfo "^2.0.0" 1842 | stackback "0.0.2" 1843 | 1844 | ws@^8.18.0: 1845 | version "8.18.0" 1846 | resolved "https://registry.yarnpkg.com/ws/-/ws-8.18.0.tgz#0d7505a6eafe2b0e712d232b42279f53bc289bbc" 1847 | integrity sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw== 1848 | 1849 | xml-name-validator@^5.0.0: 1850 | version "5.0.0" 1851 | resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-5.0.0.tgz#82be9b957f7afdacf961e5980f1bf227c0bf7673" 1852 | integrity sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg== 1853 | 1854 | xmlchars@^2.2.0: 1855 | version "2.2.0" 1856 | resolved "https://registry.yarnpkg.com/xmlchars/-/xmlchars-2.2.0.tgz#060fe1bcb7f9c76fe2a17db86a9bc3ab894210cb" 1857 | integrity sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw== 1858 | 1859 | yaml@^1.10.0: 1860 | version "1.10.2" 1861 | resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b" 1862 | integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== 1863 | --------------------------------------------------------------------------------