diff --git a/backend/src/controllers/questions.ts b/backend/src/controllers/questions.ts index 3240aa71..f467f907 100644 --- a/backend/src/controllers/questions.ts +++ b/backend/src/controllers/questions.ts @@ -31,7 +31,7 @@ export function getQuestionId(learningObjectIdentifier: LearningObjectIdentifier export async function getAllQuestionsHandler(req: Request, res: Response): Promise { const hruid = req.params.hruid; const version = req.params.version; - const language = req.query.lang as string; + const language = (req.query.lang ? req.query.lang : FALLBACK_LANG) as string; const full = req.query.full === 'true'; requireFields({ hruid }); diff --git a/backend/src/controllers/students.ts b/backend/src/controllers/students.ts index 51488a2a..229cff7e 100644 --- a/backend/src/controllers/students.ts +++ b/backend/src/controllers/students.ts @@ -73,7 +73,7 @@ export async function getStudentAssignmentsHandler(req: Request, res: Response): const username = req.params.username; requireFields({ username }); - const assignments = getStudentAssignments(username, full); + const assignments = await getStudentAssignments(username, full); res.json({ assignments }); } diff --git a/backend/src/data/questions/answer-repository.ts b/backend/src/data/questions/answer-repository.ts index 54f67a01..4ef30bbe 100644 --- a/backend/src/data/questions/answer-repository.ts +++ b/backend/src/data/questions/answer-repository.ts @@ -12,7 +12,11 @@ export class AnswerRepository extends DwengoEntityRepository { content: answer.content, timestamp: new Date(), }); - return this.insert(answerEntity); + await this.insert(answerEntity); + answerEntity.toQuestion = answer.toQuestion; + answerEntity.author = answer.author; + answerEntity.content = answer.content; + return answerEntity; } public async findAllAnswersToQuestion(question: Question): Promise { return this.findAll({ diff --git a/backend/src/data/questions/question-repository.ts b/backend/src/data/questions/question-repository.ts index 598cfb35..b9935b16 100644 --- a/backend/src/data/questions/question-repository.ts +++ b/backend/src/data/questions/question-repository.ts @@ -24,7 +24,7 @@ export class QuestionRepository extends DwengoEntityRepository { questionEntity.author = question.author; questionEntity.inGroup = question.inGroup; questionEntity.content = question.content; - return this.insert(questionEntity); + return await this.insert(questionEntity); } public async findAllQuestionsAboutLearningObject(loId: LearningObjectIdentifier): Promise { return this.findAll({ diff --git a/backend/src/services/questions.ts b/backend/src/services/questions.ts index a16c277b..09643cd2 100644 --- a/backend/src/services/questions.ts +++ b/backend/src/services/questions.ts @@ -12,6 +12,7 @@ import { AssignmentDTO } from '@dwengo-1/common/interfaces/assignment'; import { fetchStudent } from './students.js'; import { NotFoundException } from '../exceptions/not-found-exception.js'; import { FALLBACK_VERSION_NUM } from '../config.js'; +import { fetchAssignment } from './assignments.js'; export async function getQuestionsAboutLearningObjectInAssignment( loId: LearningObjectIdentifier, @@ -86,8 +87,16 @@ export async function createQuestion(loId: LearningObjectIdentifier, questionDat const author = await fetchStudent(questionData.author!); const content = questionData.content; - const clazz = await getClassRepository().findById((questionData.inGroup.assignment as AssignmentDTO).within); - const assignment = mapToAssignment(questionData.inGroup.assignment as AssignmentDTO, clazz!); + let assignment; + + if (typeof questionData.inGroup.assignment === 'number' && typeof questionData.inGroup.class === 'string') { + assignment = await fetchAssignment(questionData.inGroup.class, questionData.inGroup.assignment); + } else { + // TODO check if necessary and no conflicts to delete this if + const clazz = await getClassRepository().findById((questionData.inGroup.assignment as AssignmentDTO).within); + assignment = mapToAssignment(questionData.inGroup.assignment as AssignmentDTO, clazz!); + } + const inGroup = await getGroupRepository().findByAssignmentAndGroupNumber(assignment, questionData.inGroup.groupNumber); const question = await questionRepository.createQuestion({ diff --git a/backend/tests/test_assets/questions/answers.testdata.ts b/backend/tests/test_assets/questions/answers.testdata.ts index ec15527f..5614cd6a 100644 --- a/backend/tests/test_assets/questions/answers.testdata.ts +++ b/backend/tests/test_assets/questions/answers.testdata.ts @@ -2,6 +2,8 @@ import { EntityManager } from '@mikro-orm/core'; import { Answer } from '../../../src/entities/questions/answer.entity'; import { Teacher } from '../../../src/entities/users/teacher.entity'; import { Question } from '../../../src/entities/questions/question.entity'; +import { getTestleerkracht1 } from '../users/teachers.testdata'; +import { getQuestion07 } from './questions.testdata'; export function makeTestAnswers(em: EntityManager, teachers: Teacher[], questions: Question[]): Answer[] { const answer01 = em.create(Answer, { @@ -28,5 +30,21 @@ export function makeTestAnswers(em: EntityManager, teachers: Teacher[], question content: 'answer3', }); - return [answer01, answer02, answer03]; + const answer04 = em.create(Answer, { + author: getTestleerkracht1(), + toQuestion: getQuestion07(), + sequenceNumber: 1, + timestamp: new Date(), + content: 'this is a test answer', + }); + + const answer05 = em.create(Answer, { + author: getTestleerkracht1(), + toQuestion: getQuestion07(), + sequenceNumber: 2, + timestamp: new Date(), + content: 'this is a test answer', + }); + + return [answer01, answer02, answer03, answer04, answer05]; } diff --git a/backend/tests/test_assets/questions/questions.testdata.ts b/backend/tests/test_assets/questions/questions.testdata.ts index 10a04571..9e8d6df3 100644 --- a/backend/tests/test_assets/questions/questions.testdata.ts +++ b/backend/tests/test_assets/questions/questions.testdata.ts @@ -3,6 +3,9 @@ import { Question } from '../../../src/entities/questions/question.entity'; import { Language } from '@dwengo-1/common/util/language'; import { Student } from '../../../src/entities/users/student.entity'; import { Group } from '../../../src/entities/assignments/group.entity'; +import { getTestleerling1 } from '../users/students.testdata'; +import { testLearningObjectMultipleChoice } from '../content/learning-objects.testdata'; +import { getGroup1ConditionalLearningPath } from '../assignments/groups.testdata'; export function makeTestQuestions(em: EntityManager, students: Student[], groups: Group[]): Question[] { const question01 = em.create(Question, { @@ -66,10 +69,43 @@ export function makeTestQuestions(em: EntityManager, students: Student[], groups learningObjectHruid: 'id05', sequenceNumber: 4, author: students[2], - inGroup: groups[3], // Group #4 for Assignment #2 in class 'id02' + inGroup: groups[5], // Group #4 for Assignment #2 in class 'id02' timestamp: new Date(), content: 'question', }); - return [question01, question02, question03, question04, question05, question06]; + question07 = em.create(Question, { + learningObjectLanguage: Language.English, + learningObjectVersion: 1, + learningObjectHruid: testLearningObjectMultipleChoice.hruid, + sequenceNumber: 1, + author: getTestleerling1(), + inGroup: getGroup1ConditionalLearningPath(), + timestamp: new Date(), + content: 'this is a test question', + }); + + question08 = em.create(Question, { + learningObjectLanguage: Language.English, + learningObjectVersion: 1, + learningObjectHruid: testLearningObjectMultipleChoice.hruid, + sequenceNumber: 2, + author: getTestleerling1(), + inGroup: getGroup1ConditionalLearningPath(), + timestamp: new Date(), + content: 'this is a second test question', + }); + + return [question01, question02, question03, question04, question05, question06, question07, question08]; +} + +let question08: Question; +let question07: Question; + +export function getQuestion07(): Question { + return question07; +} + +export function getQuestion08(): Question { + return question08; } diff --git a/backend/tests/test_assets/users/teachers.testdata.ts b/backend/tests/test_assets/users/teachers.testdata.ts index 03366c80..cfb906b6 100644 --- a/backend/tests/test_assets/users/teachers.testdata.ts +++ b/backend/tests/test_assets/users/teachers.testdata.ts @@ -30,8 +30,8 @@ export function makeTestTeachers(em: EntityManager): Teacher[] { // Makes sure when logged in as testleerkracht1, there exists a corresponding user testleerkracht1 = em.create(Teacher, { username: 'testleerkracht1', - firstName: 'Kris', - lastName: 'Coolsaet', + firstName: 'David', + lastName: 'Bowie', }); return [teacher01, teacher02, teacher03, teacher04, testleerkracht1]; diff --git a/frontend/package.json b/frontend/package.json index faeae3d3..0826edae 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -22,6 +22,7 @@ "@vueuse/core": "^13.1.0", "axios": "^1.8.2", "oidc-client-ts": "^3.1.0", + "rollup": "^4.40.0", "uuid": "^11.1.0", "vue": "^3.5.13", "vue-i18n": "^11.1.2", diff --git a/frontend/src/components/QandA.vue b/frontend/src/components/QandA.vue new file mode 100644 index 00000000..f9b15362 --- /dev/null +++ b/frontend/src/components/QandA.vue @@ -0,0 +1,20 @@ + + + diff --git a/frontend/src/components/QuestionNotification.vue b/frontend/src/components/QuestionNotification.vue new file mode 100644 index 00000000..9b854224 --- /dev/null +++ b/frontend/src/components/QuestionNotification.vue @@ -0,0 +1,28 @@ + + + diff --git a/frontend/src/components/SingleQuestion.vue b/frontend/src/components/SingleQuestion.vue new file mode 100644 index 00000000..8d53b6e1 --- /dev/null +++ b/frontend/src/components/SingleQuestion.vue @@ -0,0 +1,188 @@ + + + diff --git a/frontend/src/controllers/answers.ts b/frontend/src/controllers/answers.ts index 04235e77..57407b19 100644 --- a/frontend/src/controllers/answers.ts +++ b/frontend/src/controllers/answers.ts @@ -1,6 +1,7 @@ import type { AnswerData, AnswerDTO, AnswerId } from "@dwengo-1/common/interfaces/answer"; import { BaseController } from "@/controllers/base-controller.ts"; import type { QuestionId } from "@dwengo-1/common/interfaces/question"; +import type { LearningObjectIdentifierDTO } from "@dwengo-1/common/interfaces/learning-content"; export interface AnswersResponse { answers: AnswerDTO[] | AnswerId[]; @@ -11,29 +12,34 @@ export interface AnswerResponse { } export class AnswerController extends BaseController { + loId: LearningObjectIdentifierDTO; + sequenceNumber: number; + constructor(questionId: QuestionId) { + super( + `learningObject/${questionId.learningObjectIdentifier.hruid}/:${questionId.learningObjectIdentifier.version}/questions/${questionId.sequenceNumber}/answers`, + ); this.loId = questionId.learningObjectIdentifier; this.sequenceNumber = questionId.sequenceNumber; - super(`learningObject/${loId.hruid}/:${loId.version}/questions/${this.sequenceNumber}/answers`); } async getAll(full = true): Promise { - return this.get("/", { lang: this.loId.lang, full }); + return this.get("/", { lang: this.loId.language, full }); } async getBy(seq: number): Promise { - return this.get(`/${seq}`, { lang: this.loId.lang }); + return this.get(`/${seq}`, { lang: this.loId.language }); } async create(answerData: AnswerData): Promise { - return this.post("/", answerData, { lang: this.loId.lang }); + return this.post("/", answerData, { lang: this.loId.language }); } async remove(seq: number): Promise { - return this.delete(`/${seq}`, { lang: this.loId.lang }); + return this.delete(`/${seq}`, { lang: this.loId.language }); } async update(seq: number, answerData: AnswerData): Promise { - return this.put(`/${seq}`, answerData, { lang: this.loId.lang }); + return this.put(`/${seq}`, answerData, { lang: this.loId.language }); } } diff --git a/frontend/src/controllers/questions.ts b/frontend/src/controllers/questions.ts index 60a51d1a..86f4a56d 100644 --- a/frontend/src/controllers/questions.ts +++ b/frontend/src/controllers/questions.ts @@ -11,28 +11,30 @@ export interface QuestionResponse { } export class QuestionController extends BaseController { + loId: LearningObjectIdentifierDTO; + constructor(loId: LearningObjectIdentifierDTO) { - this.loId = loId; super(`learningObject/${loId.hruid}/:${loId.version}/questions`); + this.loId = loId; } async getAll(full = true): Promise { - return this.get("/", { lang: this.loId.lang, full }); + return this.get("/", { lang: this.loId.language, full }); } async getBy(sequenceNumber: number): Promise { - return this.get(`/${sequenceNumber}`, { lang: this.loId.lang }); + return this.get(`/${sequenceNumber}`, { lang: this.loId.language }); } async create(questionData: QuestionData): Promise { - return this.post("/", questionData, { lang: this.loId.lang }); + return this.post("/", questionData, { lang: this.loId.language }); } async remove(sequenceNumber: number): Promise { - return this.delete(`/${sequenceNumber}`, { lang: this.loId.lang }); + return this.delete(`/${sequenceNumber}`, { lang: this.loId.language }); } async update(sequenceNumber: number, questionData: QuestionData): Promise { - return this.put(`/${sequenceNumber}`, questionData, { lang: this.loId.lang }); + return this.put(`/${sequenceNumber}`, questionData, { lang: this.loId.language }); } } diff --git a/frontend/src/i18n/locale/de.json b/frontend/src/i18n/locale/de.json index 38a3914d..fbdc652a 100644 --- a/frontend/src/i18n/locale/de.json +++ b/frontend/src/i18n/locale/de.json @@ -119,6 +119,7 @@ "enterUsername": "Geben Sie den Benutzernamen der Lehrkraft ein, die Sie einladen möchten", "username": "Nutzername", "invite": "einladen", + "assignmentIndicator": "AUFGABE", "searchAllLearningPathsTitle": "Alle Lernpfade durchsuchen", "searchAllLearningPathsDescription": "Nicht gefunden, was Sie gesucht haben? Klicken Sie hier, um unsere gesamte Lernpfad-Datenbank zu durchsuchen." } diff --git a/frontend/src/i18n/locale/en.json b/frontend/src/i18n/locale/en.json index e31c8f8d..e4042d09 100644 --- a/frontend/src/i18n/locale/en.json +++ b/frontend/src/i18n/locale/en.json @@ -119,6 +119,7 @@ "enterUsername": "enter the username of the teacher you would like to invite", "username": "username", "invite": "invite", + "assignmentIndicator": "ASSIGNMENT", "searchAllLearningPathsTitle": "Search all learning paths", "searchAllLearningPathsDescription": "You didn't find what you were looking for? Click here to search our whole database of available learning paths." } diff --git a/frontend/src/i18n/locale/fr.json b/frontend/src/i18n/locale/fr.json index af00bb52..b331a168 100644 --- a/frontend/src/i18n/locale/fr.json +++ b/frontend/src/i18n/locale/fr.json @@ -119,6 +119,7 @@ "enterUsername": "entrez le nom d'utilisateur de l'enseignant que vous souhaitez inviter", "username": "Nom d'utilisateur", "invite": "inviter", + "assignmentIndicator": "DEVOIR", "searchAllLearningPathsTitle": "Rechercher tous les parcours d'apprentissage", "searchAllLearningPathsDescription": "Vous n'avez pas trouvé ce que vous cherchiez ? Cliquez ici pour rechercher dans toute notre base de données de parcours d'apprentissage disponibles." } diff --git a/frontend/src/i18n/locale/nl.json b/frontend/src/i18n/locale/nl.json index 8199055b..5aa17930 100644 --- a/frontend/src/i18n/locale/nl.json +++ b/frontend/src/i18n/locale/nl.json @@ -119,6 +119,7 @@ "enterUsername": "vul de gebruikersnaam van de leerkracht die je wilt uitnodigen in", "username": "gebruikersnaam", "invite": "uitnodigen", + "assignmentIndicator": "OPDRACHT", "searchAllLearningPathsTitle": "Alle leerpaden doorzoeken", "searchAllLearningPathsDescription": "Niet gevonden waar je naar op zoek was? Klik hier om onze volledige databank van beschikbare leerpaden te doorzoeken." } diff --git a/frontend/src/views/learning-paths/LearningPathPage.vue b/frontend/src/views/learning-paths/LearningPathPage.vue index 453ac66a..63f1b686 100644 --- a/frontend/src/views/learning-paths/LearningPathPage.vue +++ b/frontend/src/views/learning-paths/LearningPathPage.vue @@ -13,6 +13,15 @@ import authService from "@/services/auth/auth-service.ts"; import { LearningPathNode } from "@/data-objects/learning-paths/learning-path-node.ts"; import LearningPathGroupSelector from "@/views/learning-paths/LearningPathGroupSelector.vue"; + import { useCreateQuestionMutation, useQuestionsQuery } from "@/queries/questions"; + import type { QuestionsResponse } from "@/controllers/questions"; + import type { LearningObjectIdentifierDTO } from "@dwengo-1/common/interfaces/learning-content"; + import QandA from "@/components/QandA.vue"; + import type { QuestionData, QuestionDTO } from "@dwengo-1/common/interfaces/question"; + import { useStudentAssignmentsQuery, useStudentGroupsQuery } from "@/queries/students"; + import type { AssignmentDTO } from "@dwengo-1/common/interfaces/assignment"; + import type { GroupDTO } from "@dwengo-1/common/interfaces/group"; + import QuestionNotification from "@/components/QuestionNotification.vue"; const router = useRouter(); const route = useRoute(); @@ -68,6 +77,17 @@ return currentIndex < nodesList.value?.length ? nodesList.value?.[currentIndex - 1] : undefined; }); + const getQuestionsQuery = useQuestionsQuery( + computed( + () => + ({ + language: currentNode.value?.language, + hruid: currentNode.value?.learningobjectHruid, + version: currentNode.value?.version, + }) as LearningObjectIdentifierDTO, + ), + ); + const navigationDrawerShown = ref(true); function isLearningObjectCompleted(learningObject: LearningObject): boolean { @@ -125,6 +145,51 @@ }, }); } + + const studentAssignmentsQueryResult = useStudentAssignmentsQuery( + authService.authState.user?.profile.preferred_username, + ); + const pathIsAssignment = computed(() => { + const assignments = (studentAssignmentsQueryResult.data.value?.assignments as AssignmentDTO[]) || []; + return assignments.some( + (assignment) => assignment.learningPath === props.hruid && assignment.language === props.language, + ); + }); + + const loID: LearningObjectIdentifierDTO = { + hruid: props.learningObjectHruid as string, + language: props.language, + }; + const createQuestionMutation = useCreateQuestionMutation(loID); + const groupsQueryResult = useStudentGroupsQuery(authService.authState.user?.profile.preferred_username); + + const questionInput = ref(""); + + function submitQuestion(): void { + const assignments = studentAssignmentsQueryResult.data.value?.assignments as AssignmentDTO[]; + const assignment = assignments.find( + (assignment) => assignment.learningPath === props.hruid && assignment.language === props.language, + ); + const groups = groupsQueryResult.data.value?.groups as GroupDTO[]; + const group = groups?.find((group) => group.assignment === assignment?.id) as GroupDTO; + const questionData: QuestionData = { + author: authService.authState.user?.profile.preferred_username, + content: questionInput.value, + inGroup: group, //TODO: POST response zegt dat dit null is??? + }; + if (questionInput.value !== "") { + createQuestionMutation.mutate(questionData, { + onSuccess: async () => { + questionInput.value = ""; // Clear the input field after submission + await getQuestionsQuery.refetch(); // Reload the questions + }, + onError: (_) => { + // TODO Handle error + // - console.error(e); + }, + }); + } + } - + @@ -217,6 +292,14 @@ > + +
+ {{ t("assignmentIndicator") }} +
+
@@ -239,6 +322,25 @@ v-if="currentNode" >
+
+
+ + +
+
+ + + @@ -284,8 +392,73 @@ display: flex; justify-content: space-between; } - .button-in-nav { - margin-top: 10px; - margin-bottom: 10px; + .assignment-indicator { + position: absolute; + bottom: 10px; + left: 10px; + padding: 4px 12px; + border: 2px solid #f8bcbc; + border-radius: 20px; + color: #f36c6c; + background-color: rgba(248, 188, 188, 0.1); + font-weight: bold; + font-family: Arial, sans-serif; + font-size: 14px; + text-transform: uppercase; + z-index: 2; /* Less than modals/popups */ + } + .question-box { + width: 100%; + max-width: 400px; + margin: 20px auto; + font-family: sans-serif; + } + .input-wrapper { + display: flex; + align-items: center; + border: 1px solid #ccc; + border-radius: 999px; + padding: 8px 12px; + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); + } + + .question-input { + flex: 1; + border: none; + outline: none; + font-size: 14px; + background-color: transparent; + } + + .question-input::placeholder { + color: #999; + } + + .send-button { + background: none; + border: none; + cursor: pointer; + font-size: 16px; + color: #555; + transition: color 0.2s ease; + } + + .send-button:hover { + color: #000; + } + + .discussion-link { + margin-top: 8px; + font-size: 13px; + color: #444; + } + + .discussion-link a { + color: #3b82f6; /* blue */ + text-decoration: none; + } + + .discussion-link a:hover { + text-decoration: underline; } diff --git a/package-lock.json b/package-lock.json index 963cd020..d1a3b3a7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -102,6 +102,7 @@ "@vueuse/core": "^13.1.0", "axios": "^1.8.2", "oidc-client-ts": "^3.1.0", + "rollup": "^4.40.0", "uuid": "^11.1.0", "vue": "^3.5.13", "vue-i18n": "^11.1.2", @@ -1269,30 +1270,6 @@ "@mikro-orm/core": "^6.0.0" } }, - "node_modules/@napi-rs/snappy-android-arm-eabi": { - "optional": true - }, - "node_modules/@napi-rs/snappy-android-arm64": { - "optional": true - }, - "node_modules/@napi-rs/snappy-darwin-arm64": { - "optional": true - }, - "node_modules/@napi-rs/snappy-darwin-x64": { - "optional": true - }, - "node_modules/@napi-rs/snappy-freebsd-x64": { - "optional": true - }, - "node_modules/@napi-rs/snappy-linux-arm-gnueabihf": { - "optional": true - }, - "node_modules/@napi-rs/snappy-linux-arm64-gnu": { - "optional": true - }, - "node_modules/@napi-rs/snappy-linux-arm64-musl": { - "optional": true - }, "node_modules/@napi-rs/snappy-linux-x64-gnu": { "version": "7.2.2", "cpu": [ @@ -1321,15 +1298,6 @@ "node": ">= 10" } }, - "node_modules/@napi-rs/snappy-win32-arm64-msvc": { - "optional": true - }, - "node_modules/@napi-rs/snappy-win32-ia32-msvc": { - "optional": true - }, - "node_modules/@napi-rs/snappy-win32-x64-msvc": { - "optional": true - }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", "license": "MIT", @@ -1505,26 +1473,22 @@ "cpu": [ "x64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ "linux" - ], - "peer": true + ] }, "node_modules/@rollup/rollup-linux-x64-musl": { "version": "4.40.0", "cpu": [ "x64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ "linux" - ], - "peer": true + ] }, "node_modules/@scarf/scarf": { "version": "1.4.0", @@ -1693,7 +1657,6 @@ }, "node_modules/@types/estree": { "version": "1.0.7", - "dev": true, "license": "MIT" }, "node_modules/@types/express": { @@ -3755,438 +3718,6 @@ "@esbuild/win32-x64": "0.25.3" } }, - "node_modules/esbuild/node_modules/@esbuild/aix-ppc64": { - "version": "0.25.3", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.3.tgz", - "integrity": "sha512-W8bFfPA8DowP8l//sxjJLSLkD8iEjMc7cBVyP+u4cEv9sM7mdUCkgsj+t0n/BWPFtv7WWCN5Yzj0N6FJNUUqBQ==", - "cpu": [ - "ppc64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "aix" - ], - "peer": true, - "engines": { - "node": ">=18" - } - }, - "node_modules/esbuild/node_modules/@esbuild/android-arm": { - "version": "0.25.3", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.3.tgz", - "integrity": "sha512-PuwVXbnP87Tcff5I9ngV0lmiSu40xw1At6i3GsU77U7cjDDB4s0X2cyFuBiDa1SBk9DnvWwnGvVaGBqoFWPb7A==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "peer": true, - "engines": { - "node": ">=18" - } - }, - "node_modules/esbuild/node_modules/@esbuild/android-arm64": { - "version": "0.25.3", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.3.tgz", - "integrity": "sha512-XelR6MzjlZuBM4f5z2IQHK6LkK34Cvv6Rj2EntER3lwCBFdg6h2lKbtRjpTTsdEjD/WSe1q8UyPBXP1x3i/wYQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "peer": true, - "engines": { - "node": ">=18" - } - }, - "node_modules/esbuild/node_modules/@esbuild/android-x64": { - "version": "0.25.3", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.3.tgz", - "integrity": "sha512-ogtTpYHT/g1GWS/zKM0cc/tIebFjm1F9Aw1boQ2Y0eUQ+J89d0jFY//s9ei9jVIlkYi8AfOjiixcLJSGNSOAdQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "peer": true, - "engines": { - "node": ">=18" - } - }, - "node_modules/esbuild/node_modules/@esbuild/darwin-arm64": { - "version": "0.25.3", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.3.tgz", - "integrity": "sha512-eESK5yfPNTqpAmDfFWNsOhmIOaQA59tAcF/EfYvo5/QWQCzXn5iUSOnqt3ra3UdzBv073ykTtmeLJZGt3HhA+w==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "peer": true, - "engines": { - "node": ">=18" - } - }, - "node_modules/esbuild/node_modules/@esbuild/darwin-x64": { - "version": "0.25.3", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.3.tgz", - "integrity": "sha512-Kd8glo7sIZtwOLcPbW0yLpKmBNWMANZhrC1r6K++uDR2zyzb6AeOYtI6udbtabmQpFaxJ8uduXMAo1gs5ozz8A==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "peer": true, - "engines": { - "node": ">=18" - } - }, - "node_modules/esbuild/node_modules/@esbuild/freebsd-arm64": { - "version": "0.25.3", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.3.tgz", - "integrity": "sha512-EJiyS70BYybOBpJth3M0KLOus0n+RRMKTYzhYhFeMwp7e/RaajXvP+BWlmEXNk6uk+KAu46j/kaQzr6au+JcIw==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "peer": true, - "engines": { - "node": ">=18" - } - }, - "node_modules/esbuild/node_modules/@esbuild/freebsd-x64": { - "version": "0.25.3", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.3.tgz", - "integrity": "sha512-Q+wSjaLpGxYf7zC0kL0nDlhsfuFkoN+EXrx2KSB33RhinWzejOd6AvgmP5JbkgXKmjhmpfgKZq24pneodYqE8Q==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "peer": true, - "engines": { - "node": ">=18" - } - }, - "node_modules/esbuild/node_modules/@esbuild/linux-arm": { - "version": "0.25.3", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.3.tgz", - "integrity": "sha512-dUOVmAUzuHy2ZOKIHIKHCm58HKzFqd+puLaS424h6I85GlSDRZIA5ycBixb3mFgM0Jdh+ZOSB6KptX30DD8YOQ==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "peer": true, - "engines": { - "node": ">=18" - } - }, - "node_modules/esbuild/node_modules/@esbuild/linux-arm64": { - "version": "0.25.3", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.3.tgz", - "integrity": "sha512-xCUgnNYhRD5bb1C1nqrDV1PfkwgbswTTBRbAd8aH5PhYzikdf/ddtsYyMXFfGSsb/6t6QaPSzxtbfAZr9uox4A==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "peer": true, - "engines": { - "node": ">=18" - } - }, - "node_modules/esbuild/node_modules/@esbuild/linux-ia32": { - "version": "0.25.3", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.3.tgz", - "integrity": "sha512-yplPOpczHOO4jTYKmuYuANI3WhvIPSVANGcNUeMlxH4twz/TeXuzEP41tGKNGWJjuMhotpGabeFYGAOU2ummBw==", - "cpu": [ - "ia32" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "peer": true, - "engines": { - "node": ">=18" - } - }, - "node_modules/esbuild/node_modules/@esbuild/linux-loong64": { - "version": "0.25.3", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.3.tgz", - "integrity": "sha512-P4BLP5/fjyihmXCELRGrLd793q/lBtKMQl8ARGpDxgzgIKJDRJ/u4r1A/HgpBpKpKZelGct2PGI4T+axcedf6g==", - "cpu": [ - "loong64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "peer": true, - "engines": { - "node": ">=18" - } - }, - "node_modules/esbuild/node_modules/@esbuild/linux-mips64el": { - "version": "0.25.3", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.3.tgz", - "integrity": "sha512-eRAOV2ODpu6P5divMEMa26RRqb2yUoYsuQQOuFUexUoQndm4MdpXXDBbUoKIc0iPa4aCO7gIhtnYomkn2x+bag==", - "cpu": [ - "mips64el" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "peer": true, - "engines": { - "node": ">=18" - } - }, - "node_modules/esbuild/node_modules/@esbuild/linux-ppc64": { - "version": "0.25.3", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.3.tgz", - "integrity": "sha512-ZC4jV2p7VbzTlnl8nZKLcBkfzIf4Yad1SJM4ZMKYnJqZFD4rTI+pBG65u8ev4jk3/MPwY9DvGn50wi3uhdaghg==", - "cpu": [ - "ppc64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "peer": true, - "engines": { - "node": ">=18" - } - }, - "node_modules/esbuild/node_modules/@esbuild/linux-riscv64": { - "version": "0.25.3", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.3.tgz", - "integrity": "sha512-LDDODcFzNtECTrUUbVCs6j9/bDVqy7DDRsuIXJg6so+mFksgwG7ZVnTruYi5V+z3eE5y+BJZw7VvUadkbfg7QA==", - "cpu": [ - "riscv64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "peer": true, - "engines": { - "node": ">=18" - } - }, - "node_modules/esbuild/node_modules/@esbuild/linux-s390x": { - "version": "0.25.3", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.3.tgz", - "integrity": "sha512-s+w/NOY2k0yC2p9SLen+ymflgcpRkvwwa02fqmAwhBRI3SC12uiS10edHHXlVWwfAagYSY5UpmT/zISXPMW3tQ==", - "cpu": [ - "s390x" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "peer": true, - "engines": { - "node": ">=18" - } - }, - "node_modules/esbuild/node_modules/@esbuild/netbsd-arm64": { - "version": "0.25.3", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.3.tgz", - "integrity": "sha512-1QaLtOWq0mzK6tzzp0jRN3eccmN3hezey7mhLnzC6oNlJoUJz4nym5ZD7mDnS/LZQgkrhEbEiTn515lPeLpgWA==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "netbsd" - ], - "peer": true, - "engines": { - "node": ">=18" - } - }, - "node_modules/esbuild/node_modules/@esbuild/netbsd-x64": { - "version": "0.25.3", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.3.tgz", - "integrity": "sha512-i5Hm68HXHdgv8wkrt+10Bc50zM0/eonPb/a/OFVfB6Qvpiirco5gBA5bz7S2SHuU+Y4LWn/zehzNX14Sp4r27g==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "netbsd" - ], - "peer": true, - "engines": { - "node": ">=18" - } - }, - "node_modules/esbuild/node_modules/@esbuild/openbsd-arm64": { - "version": "0.25.3", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.3.tgz", - "integrity": "sha512-zGAVApJEYTbOC6H/3QBr2mq3upG/LBEXr85/pTtKiv2IXcgKV0RT0QA/hSXZqSvLEpXeIxah7LczB4lkiYhTAQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "openbsd" - ], - "peer": true, - "engines": { - "node": ">=18" - } - }, - "node_modules/esbuild/node_modules/@esbuild/openbsd-x64": { - "version": "0.25.3", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.3.tgz", - "integrity": "sha512-fpqctI45NnCIDKBH5AXQBsD0NDPbEFczK98hk/aa6HJxbl+UtLkJV2+Bvy5hLSLk3LHmqt0NTkKNso1A9y1a4w==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "openbsd" - ], - "peer": true, - "engines": { - "node": ">=18" - } - }, - "node_modules/esbuild/node_modules/@esbuild/sunos-x64": { - "version": "0.25.3", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.3.tgz", - "integrity": "sha512-ROJhm7d8bk9dMCUZjkS8fgzsPAZEjtRJqCAmVgB0gMrvG7hfmPmz9k1rwO4jSiblFjYmNvbECL9uhaPzONMfgA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "sunos" - ], - "peer": true, - "engines": { - "node": ">=18" - } - }, - "node_modules/esbuild/node_modules/@esbuild/win32-arm64": { - "version": "0.25.3", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.3.tgz", - "integrity": "sha512-YWcow8peiHpNBiIXHwaswPnAXLsLVygFwCB3A7Bh5jRkIBFWHGmNQ48AlX4xDvQNoMZlPYzjVOQDYEzWCqufMQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "peer": true, - "engines": { - "node": ">=18" - } - }, - "node_modules/esbuild/node_modules/@esbuild/win32-ia32": { - "version": "0.25.3", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.3.tgz", - "integrity": "sha512-qspTZOIGoXVS4DpNqUYUs9UxVb04khS1Degaw/MnfMe7goQ3lTfQ13Vw4qY/Nj0979BGvMRpAYbs/BAxEvU8ew==", - "cpu": [ - "ia32" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "peer": true, - "engines": { - "node": ">=18" - } - }, - "node_modules/esbuild/node_modules/@esbuild/win32-x64": { - "version": "0.25.3", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.3.tgz", - "integrity": "sha512-ICgUR+kPimx0vvRzf+N/7L7tVSQeE3BYY+NhHRHXS1kBuPO7z2+7ea2HbhDyZdTephgvNvKrlDDKUexuCVBVvg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "peer": true, - "engines": { - "node": ">=18" - } - }, "node_modules/escalade": { "version": "3.2.0", "license": "MIT", @@ -4910,10 +4441,6 @@ "devOptional": true, "license": "ISC" }, - "node_modules/fsevents": { - "dev": true, - "optional": true - }, "node_modules/function-bind": { "version": "1.1.2", "license": "MIT", @@ -7640,7 +7167,6 @@ }, "node_modules/rollup": { "version": "4.40.0", - "dev": true, "license": "MIT", "dependencies": { "@types/estree": "1.0.7" @@ -7676,292 +7202,6 @@ "fsevents": "~2.3.2" } }, - "node_modules/rollup/node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.40.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.40.0.tgz", - "integrity": "sha512-+Fbls/diZ0RDerhE8kyC6hjADCXA1K4yVNlH0EYfd2XjyH0UGgzaQ8MlT0pCXAThfxv3QUAczHaL+qSv1E4/Cg==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "peer": true - }, - "node_modules/rollup/node_modules/@rollup/rollup-android-arm64": { - "version": "4.40.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.40.0.tgz", - "integrity": "sha512-PPA6aEEsTPRz+/4xxAmaoWDqh67N7wFbgFUJGMnanCFs0TV99M0M8QhhaSCks+n6EbQoFvLQgYOGXxlMGQe/6w==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "peer": true - }, - "node_modules/rollup/node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.40.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.40.0.tgz", - "integrity": "sha512-GwYOcOakYHdfnjjKwqpTGgn5a6cUX7+Ra2HeNj/GdXvO2VJOOXCiYYlRFU4CubFM67EhbmzLOmACKEfvp3J1kQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "peer": true - }, - "node_modules/rollup/node_modules/@rollup/rollup-darwin-x64": { - "version": "4.40.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.40.0.tgz", - "integrity": "sha512-CoLEGJ+2eheqD9KBSxmma6ld01czS52Iw0e2qMZNpPDlf7Z9mj8xmMemxEucinev4LgHalDPczMyxzbq+Q+EtA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "peer": true - }, - "node_modules/rollup/node_modules/@rollup/rollup-freebsd-arm64": { - "version": "4.40.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.40.0.tgz", - "integrity": "sha512-r7yGiS4HN/kibvESzmrOB/PxKMhPTlz+FcGvoUIKYoTyGd5toHp48g1uZy1o1xQvybwwpqpe010JrcGG2s5nkg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "peer": true - }, - "node_modules/rollup/node_modules/@rollup/rollup-freebsd-x64": { - "version": "4.40.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.40.0.tgz", - "integrity": "sha512-mVDxzlf0oLzV3oZOr0SMJ0lSDd3xC4CmnWJ8Val8isp9jRGl5Dq//LLDSPFrasS7pSm6m5xAcKaw3sHXhBjoRw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "peer": true - }, - "node_modules/rollup/node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.40.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.40.0.tgz", - "integrity": "sha512-y/qUMOpJxBMy8xCXD++jeu8t7kzjlOCkoxxajL58G62PJGBZVl/Gwpm7JK9+YvlB701rcQTzjUZ1JgUoPTnoQA==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "peer": true - }, - "node_modules/rollup/node_modules/@rollup/rollup-linux-arm-musleabihf": { - "version": "4.40.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.40.0.tgz", - "integrity": "sha512-GoCsPibtVdJFPv/BOIvBKO/XmwZLwaNWdyD8TKlXuqp0veo2sHE+A/vpMQ5iSArRUz/uaoj4h5S6Pn0+PdhRjg==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "peer": true - }, - "node_modules/rollup/node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.40.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.40.0.tgz", - "integrity": "sha512-L5ZLphTjjAD9leJzSLI7rr8fNqJMlGDKlazW2tX4IUF9P7R5TMQPElpH82Q7eNIDQnQlAyiNVfRPfP2vM5Avvg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "peer": true - }, - "node_modules/rollup/node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.40.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.40.0.tgz", - "integrity": "sha512-ATZvCRGCDtv1Y4gpDIXsS+wfFeFuLwVxyUBSLawjgXK2tRE6fnsQEkE4csQQYWlBlsFztRzCnBvWVfcae/1qxQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "peer": true - }, - "node_modules/rollup/node_modules/@rollup/rollup-linux-loongarch64-gnu": { - "version": "4.40.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.40.0.tgz", - "integrity": "sha512-wG9e2XtIhd++QugU5MD9i7OnpaVb08ji3P1y/hNbxrQ3sYEelKJOq1UJ5dXczeo6Hj2rfDEL5GdtkMSVLa/AOg==", - "cpu": [ - "loong64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "peer": true - }, - "node_modules/rollup/node_modules/@rollup/rollup-linux-powerpc64le-gnu": { - "version": "4.40.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.40.0.tgz", - "integrity": "sha512-vgXfWmj0f3jAUvC7TZSU/m/cOE558ILWDzS7jBhiCAFpY2WEBn5jqgbqvmzlMjtp8KlLcBlXVD2mkTSEQE6Ixw==", - "cpu": [ - "ppc64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "peer": true - }, - "node_modules/rollup/node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.40.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.40.0.tgz", - "integrity": "sha512-uJkYTugqtPZBS3Z136arevt/FsKTF/J9dEMTX/cwR7lsAW4bShzI2R0pJVw+hcBTWF4dxVckYh72Hk3/hWNKvA==", - "cpu": [ - "riscv64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "peer": true - }, - "node_modules/rollup/node_modules/@rollup/rollup-linux-riscv64-musl": { - "version": "4.40.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.40.0.tgz", - "integrity": "sha512-rKmSj6EXQRnhSkE22+WvrqOqRtk733x3p5sWpZilhmjnkHkpeCgWsFFo0dGnUGeA+OZjRl3+VYq+HyCOEuwcxQ==", - "cpu": [ - "riscv64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "peer": true - }, - "node_modules/rollup/node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.40.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.40.0.tgz", - "integrity": "sha512-SpnYlAfKPOoVsQqmTFJ0usx0z84bzGOS9anAC0AZ3rdSo3snecihbhFTlJZ8XMwzqAcodjFU4+/SM311dqE5Sw==", - "cpu": [ - "s390x" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "peer": true - }, - "node_modules/rollup/node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.40.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.40.0.tgz", - "integrity": "sha512-UtZQQI5k/b8d7d3i9AZmA/t+Q4tk3hOC0tMOMSq2GlMYOfxbesxG4mJSeDp0EHs30N9bsfwUvs3zF4v/RzOeTQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "peer": true - }, - "node_modules/rollup/node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.40.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.40.0.tgz", - "integrity": "sha512-+m03kvI2f5syIqHXCZLPVYplP8pQch9JHyXKZ3AGMKlg8dCyr2PKHjwRLiW53LTrN/Nc3EqHOKxUxzoSPdKddA==", - "cpu": [ - "ia32" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "peer": true - }, - "node_modules/rollup/node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.40.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.40.0.tgz", - "integrity": "sha512-lpPE1cLfP5oPzVjKMx10pgBmKELQnFJXHgvtHCtuJWOv8MxqdEIMNtgHgBFf7Ea2/7EuVwa9fodWUfXAlXZLZQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "peer": true - }, - "node_modules/rollup/node_modules/fsevents": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "peer": true, - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, "node_modules/router": { "version": "2.2.0", "license": "MIT", @@ -9049,22 +8289,6 @@ "fsevents": "~2.3.3" } }, - "node_modules/tsx/node_modules/fsevents": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "peer": true, - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, "node_modules/tunnel-agent": { "version": "0.6.0", "license": "Apache-2.0", @@ -9533,22 +8757,6 @@ } } }, - "node_modules/vite/node_modules/fsevents": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "peer": true, - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, "node_modules/vite/node_modules/picomatch": { "version": "4.0.2", "dev": true,