From ebc0c64ef4eecdd8678481320f14a93dafabb7ae Mon Sep 17 00:00:00 2001
From: JubaAzul <118773284+JubaAzul@users.noreply.github.com>
Date: Fri, 10 Jan 2025 12:39:52 -0500
Subject: [PATCH 01/23] Added tests
---
.../templates/MultipleChoice.test.tsx | 126 ++
.../templates/ShortAnswer.test.tsx | 54 +
.../GiftTemplate/templates/TrueFalse.test.tsx | 51 +
.../MultipleChoice.test.tsx.snap | 1019 +++++++++++++++++
.../__snapshots__/ShortAnswer.test.tsx.snap | 226 ++++
.../__snapshots__/TrueFalse.test.tsx.snap | 329 ++++++
6 files changed, 1805 insertions(+)
create mode 100644 client/src/__tests__/components/GiftTemplate/templates/MultipleChoice.test.tsx
create mode 100644 client/src/__tests__/components/GiftTemplate/templates/ShortAnswer.test.tsx
create mode 100644 client/src/__tests__/components/GiftTemplate/templates/TrueFalse.test.tsx
create mode 100644 client/src/__tests__/components/GiftTemplate/templates/__snapshots__/MultipleChoice.test.tsx.snap
create mode 100644 client/src/__tests__/components/GiftTemplate/templates/__snapshots__/ShortAnswer.test.tsx.snap
create mode 100644 client/src/__tests__/components/GiftTemplate/templates/__snapshots__/TrueFalse.test.tsx.snap
diff --git a/client/src/__tests__/components/GiftTemplate/templates/MultipleChoice.test.tsx b/client/src/__tests__/components/GiftTemplate/templates/MultipleChoice.test.tsx
new file mode 100644
index 0000000..9932fb1
--- /dev/null
+++ b/client/src/__tests__/components/GiftTemplate/templates/MultipleChoice.test.tsx
@@ -0,0 +1,126 @@
+import { render } from '@testing-library/react';
+import { MultipleChoice } from '../../../../components/GiftTemplate/templates';
+import { TemplateOptions, MultipleChoice as MultipleChoiceType } from '../../../../components/GiftTemplate/templates/types';
+
+const mockProps: TemplateOptions & MultipleChoiceType = {
+ type: 'MC',
+ hasEmbeddedAnswers: false,
+ title: 'Sample Title',
+ stem: { format: 'plain' , text: 'Sample Stem'},
+ choices: [
+ { text: { format: 'plain' , text: 'Choice 1'}, isCorrect: true, feedback: { format: 'plain' , text: 'Correct!'}, weight: 1 },
+ { text: { format: 'plain', text: 'Choice 2' }, isCorrect: false, feedback: { format: 'plain' , text: 'InCorrect!'}, weight: 1 }
+ ],
+ globalFeedback: { format: 'plain', text: 'Sample Global Feedback' }
+};
+
+const katekMock: TemplateOptions & MultipleChoiceType = {
+ type: 'MC',
+ hasEmbeddedAnswers: false,
+ title: 'Sample Title',
+ stem: { format: 'plain' , text: '$$\\frac{zzz}{yyy}$$'},
+ choices: [
+ { text: { format: 'plain' , text: 'Choice 1'}, isCorrect: true, feedback: { format: 'plain' , text: 'Correct!'}, weight: 1 },
+ { text: { format: 'plain', text: 'Choice 2' }, isCorrect: true, feedback: { format: 'plain' , text: 'Correct!'}, weight: 1 }
+ ],
+ globalFeedback: { format: 'plain', text: 'Sample Global Feedback' }
+};
+
+const imageMock: TemplateOptions & MultipleChoiceType = {
+ type: 'MC',
+ hasEmbeddedAnswers: false,
+ title: 'Sample Title with Image',
+ stem: { format: 'plain', text: 'Sample Stem with Image' },
+ choices: [
+ { text: { format: 'plain', text: 'Choice 1' }, isCorrect: true, feedback: { format: 'plain', text: 'Correct!' }, weight: 1 },
+ { text: { format: 'plain', text: 'Choice 2' }, isCorrect: false, feedback: { format: 'plain', text: 'Incorrect!' }, weight: 1 },
+ { text: { format: 'plain', text: '
' }, isCorrect: false, feedback: { format: 'plain', text: 'Image Feedback' }, weight: 1 }
+ ],
+ globalFeedback: { format: 'plain', text: 'Sample Global Feedback with Image' }
+};
+
+const mockMoodle: TemplateOptions & MultipleChoiceType = {
+ type: 'MC',
+ hasEmbeddedAnswers: false,
+ title: 'Sample Title',
+ stem: { format: 'moodle' , text: 'Sample Stem'},
+ choices: [
+ { text: { format: 'moodle' , text: 'Choice 1'}, isCorrect: true, feedback: { format: 'plain' , text: 'Correct!'}, weight: 1 },
+ { text: { format: 'plain', text: 'Choice 2' }, isCorrect: false, feedback: { format: 'plain' , text: 'InCorrect!'}, weight: 1 }
+ ],
+ globalFeedback: { format: 'plain', text: 'Sample Global Feedback' }
+};
+
+
+const mockHTML: TemplateOptions & MultipleChoiceType = {
+ type: 'MC',
+ hasEmbeddedAnswers: false,
+ title: 'Sample Title',
+ stem: { format: 'html' , text: '$$\\frac{zzz}{yyy}$$'},
+ choices: [
+ { text: { format: 'html' , text: 'Choice 1'}, isCorrect: true, feedback: { format: 'plain' , text: 'Correct!'}, weight: 1 },
+ { text: { format: 'html', text: 'Choice 2' }, isCorrect: false, feedback: { format: 'plain' , text: 'InCorrect!'}, weight: 1 }
+ ],
+ globalFeedback: { format: 'html', text: 'Sample Global Feedback' }
+};
+
+const mockMarkdown: TemplateOptions & MultipleChoiceType = {
+ type: 'MC',
+ hasEmbeddedAnswers: false,
+ title: 'Sample Title with Image',
+ stem: { format: 'markdown', text: 'Sample Stem with Image' },
+ choices: [
+ { text: { format: 'markdown', text: 'Choice 1' }, isCorrect: true, feedback: { format: 'plain', text: 'Correct!' }, weight: 1 },
+ { text: { format: 'markdown', text: 'Choice 2' }, isCorrect: false, feedback: { format: 'plain', text: 'Incorrect!' }, weight: 1 },
+ { text: { format: 'markdown', text: '
' }, isCorrect: false, feedback: { format: 'plain', text: 'Image Feedback' }, weight: 1 }
+ ],
+ globalFeedback: { format: 'markdown', text: 'Sample Global Feedback with Image' }
+};
+
+const mockMarkdownTwoImages: TemplateOptions & MultipleChoiceType = {
+ type: 'MC',
+ hasEmbeddedAnswers: false,
+ title: 'Sample Title with Image',
+ stem: { format: 'markdown', text: '
' },
+ choices: [
+ { text: { format: 'markdown', text: 'Choice 1' }, isCorrect: true, feedback: { format: 'plain', text: 'Correct!' }, weight: 1 },
+ { text: { format: 'markdown', text: 'Choice 2' }, isCorrect: false, feedback: { format: 'plain', text: 'Incorrect!' }, weight: 1 },
+ { text: { format: 'markdown', text: '
' }, isCorrect: false, feedback: { format: 'plain', text: 'Image Feedback' }, weight: 1 }
+ ],
+ globalFeedback: { format: 'markdown', text: 'Sample Global Feedback with Image' }
+};
+
+test('MultipleChoice snapshot test', () => {
+ const { asFragment } = render();
+ expect(asFragment()).toMatchSnapshot();
+});
+
+test('MultipleChoice snapshot test with katex', () => {
+ const { asFragment } = render();
+ expect(asFragment()).toMatchSnapshot();
+});
+
+test('MultipleChoice snapshot test with image', () => {
+ const { asFragment } = render();
+ expect(asFragment()).toMatchSnapshot();
+});
+
+test('MultipleChoice snapshot test with Moodle text format', () => {
+ const { asFragment } = render();
+ expect(asFragment()).toMatchSnapshot();
+});
+
+test('MultipleChoice snapshot test with katex, using html text format', () => {
+ const { asFragment } = render();
+ expect(asFragment()).toMatchSnapshot();
+});
+
+test('MultipleChoice snapshot test with image using markdown text format', () => {
+ const { asFragment } = render();
+ expect(asFragment()).toMatchSnapshot();
+});
+
+test('MultipleChoice snapshot test with 2 images using markdown text format', () => {
+ const { asFragment } = render();
+ expect(asFragment()).toMatchSnapshot();
+});
\ No newline at end of file
diff --git a/client/src/__tests__/components/GiftTemplate/templates/ShortAnswer.test.tsx b/client/src/__tests__/components/GiftTemplate/templates/ShortAnswer.test.tsx
new file mode 100644
index 0000000..626389c
--- /dev/null
+++ b/client/src/__tests__/components/GiftTemplate/templates/ShortAnswer.test.tsx
@@ -0,0 +1,54 @@
+import { render } from '@testing-library/react';
+import ShortAnswer from '../../../../components/GiftTemplate/templates/ShortAnswer';
+import { TemplateOptions, ShortAnswer as ShortAnswerType } from '../../../../components/GiftTemplate/templates/types';
+
+const plainTextMock: TemplateOptions & ShortAnswerType = {
+ type: 'Short',
+ hasEmbeddedAnswers: false,
+ title: 'Sample Short Answer Title',
+ stem: { format: 'plain', text: 'Sample Stem' },
+ choices: [
+ { text: { format: 'plain' , text: 'Answer 1'}, isCorrect: true, feedback: { format: 'plain' , text: 'Correct!'}, weight: 1 },
+ { text: { format: 'plain' , text: 'Answer 2'}, isCorrect: true, feedback: { format: 'plain' , text: 'Correct!'}, weight: 1 }
+ ],
+ globalFeedback: { format: 'plain', text: 'Sample Global Feedback' }
+};
+
+const katexMock: TemplateOptions & ShortAnswerType = {
+ type: 'Short',
+ hasEmbeddedAnswers: false,
+ title: 'Sample Short Answer Title',
+ stem: { format: 'html', text: '$$\\frac{zzz}{yyy}$$' },
+ choices: [
+ { text: { format: 'html' , text: 'Answer 1'}, isCorrect: true, feedback: { format: 'html' , text: 'Correct!'}, weight: 1 },
+ { text: { format: 'html' , text: 'Answer 2'}, isCorrect: true, feedback: { format: 'moodle' , text: 'Correct!'}, weight: 1 }
+ ],
+ globalFeedback: { format: 'html', text: 'Sample Global Feedback' }
+};
+
+const moodleMock: TemplateOptions & ShortAnswerType = {
+ type: 'Short',
+ hasEmbeddedAnswers: false,
+ title: 'Sample Short Answer Title',
+ stem: { format: 'moodle', text: 'Sample Stem' },
+ choices: [
+ { text: { format: 'plain' , text: 'Answer 1'}, isCorrect: true, feedback: { format: 'plain' , text: 'Correct!'}, weight: 1 },
+ { text: { format: 'plain' , text: 'Answer 2'}, isCorrect: true, feedback: { format: 'plain' , text: 'Correct!'}, weight: 1 }
+ ],
+ globalFeedback: { format: 'moodle', text: 'Sample Global Feedback' }
+};
+
+test('ShortAnswer snapshot test with plain text', () => {
+ const { asFragment } = render();
+ expect(asFragment()).toMatchSnapshot();
+});
+
+test('ShortAnswer snapshot test with katex', () => {
+ const { asFragment } = render();
+ expect(asFragment()).toMatchSnapshot();
+});
+
+test('ShortAnswer snapshot test with moodle', () => {
+ const { asFragment } = render();
+ expect(asFragment()).toMatchSnapshot();
+});
\ No newline at end of file
diff --git a/client/src/__tests__/components/GiftTemplate/templates/TrueFalse.test.tsx b/client/src/__tests__/components/GiftTemplate/templates/TrueFalse.test.tsx
new file mode 100644
index 0000000..69cd3e7
--- /dev/null
+++ b/client/src/__tests__/components/GiftTemplate/templates/TrueFalse.test.tsx
@@ -0,0 +1,51 @@
+import { render } from '@testing-library/react';
+import TrueFalse from '../../../../components/GiftTemplate/templates';
+import { TemplateOptions, TrueFalse as TrueFalseType } from '../../../../components/GiftTemplate/templates/types';
+
+const plainTextMock: TemplateOptions & TrueFalseType = {
+ type: 'TF',
+ hasEmbeddedAnswers: false,
+ title: 'Sample True/False Title',
+ stem: { format: 'plain', text: 'Sample Stem' },
+ isTrue: true,
+ trueFeedback: { format: 'plain', text: 'Correct!' },
+ falseFeedback: { format: 'plain', text: 'Incorrect!' },
+ globalFeedback: { format: 'plain', text: 'Sample Global Feedback' }
+};
+
+const katexMock: TemplateOptions & TrueFalseType = {
+ type: 'TF',
+ hasEmbeddedAnswers: false,
+ title: 'Sample True/False Title',
+ stem: { format: 'html', text: '$$\\frac{zzz}{yyy}$$' },
+ isTrue: true,
+ trueFeedback: { format: 'moodle', text: 'Correct!' },
+ falseFeedback: { format: 'html', text: 'Incorrect!' },
+ globalFeedback: { format: 'markdown', text: 'Sample Global Feedback' }
+};
+
+const moodleMock: TemplateOptions & TrueFalseType = {
+ type: 'TF',
+ hasEmbeddedAnswers: false,
+ title: 'Sample True/False Title',
+ stem: { format: 'moodle', text: 'Sample Stem' },
+ isTrue: true,
+ trueFeedback: { format: 'moodle', text: 'Correct!' },
+ falseFeedback: { format: 'moodle', text: 'Incorrect!' },
+ globalFeedback: { format: 'moodle', text: 'Sample Global Feedback' }
+};
+
+test('TrueFalse snapshot test with plain text', () => {
+ const { asFragment } = render();
+ expect(asFragment()).toMatchSnapshot();
+});
+
+test('TrueFalse snapshot test with katex', () => {
+ const { asFragment } = render();
+ expect(asFragment()).toMatchSnapshot();
+});
+
+test('TrueFalse snapshot test with moodle', () => {
+ const { asFragment } = render();
+ expect(asFragment()).toMatchSnapshot();
+});
\ No newline at end of file
diff --git a/client/src/__tests__/components/GiftTemplate/templates/__snapshots__/MultipleChoice.test.tsx.snap b/client/src/__tests__/components/GiftTemplate/templates/__snapshots__/MultipleChoice.test.tsx.snap
new file mode 100644
index 0000000..75e7226
--- /dev/null
+++ b/client/src/__tests__/components/GiftTemplate/templates/__snapshots__/MultipleChoice.test.tsx.snap
@@ -0,0 +1,1019 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`MultipleChoice snapshot test 1`] = `
+
+ <section style="
+ flex-wrap: wrap;
+ position: relative;
+ padding: 1rem 1rem;
+ margin-bottom: 0.5rem;
+ background-color: hsl(0, 0%, 100%);
+ border: solid hsl(0, 0%, 100%) 2px;
+ border-radius: 6px;
+ box-shadow: 0px 1px 3px hsl(0, 0%, 74%);
+">
+ <div style="
+ display: flex;
+ font-weight: bold;
+">
+ <span>
+ <span style="
+ color: #5271FF;
+ ">Sample Title</span>
+ </span>
+ <span style="
+ margin-left: auto;
+ padding-left: 0.75rem;
+ flex: none;
+ margin-bottom: 10px;">
+ <span style="
+ box-shadow: 0px 1px 3px hsl(0, 0%, 74%);
+ padding-left: 0.7rem;
+ padding-right: 0.7rem;
+ padding-top: 0.4rem;
+ padding-bottom: 0.4rem;
+ border-radius: 4px;
+ background-color: hsl(0, 0%, 100%);
+ color: hsl(180, 15%, 41%);
+">Choix multiple</span>
+ </span>
+ </div>
+<p style="
+ color: hsl(0, 0%, 0%);
+">Sample Stem</p><span style="
+ color: hsl(0, 0%, 0%);
+">Choisir une réponse:</span>
+ <div class='multiple-choice-answers-container'>
+ <input class="gift-input" type="radio" id="ideNwBGu" name="id2CCZVRT9">
+ <span style="
+ box-shadow: 0px 1px 1px hsl(0, 0%, 74%);
+ border-radius: 3px;
+ padding-left: 0.2rem;
+ padding-right: 0.2rem;
+ padding-top: 0.05rem;
+ padding-bottom: 0.05rem;
+
+ color: hsl(134, 31%, 32%);
+ background-color: hsl(134, 68%, 95%);
+ ">1%</span>
+ <label style="
+ display: inline-block;
+ padding: 0.2em 0 0.2em 0;
+
+ color: hsl(0, 0%, 0%);
+" for="ideNwBGu">
+ Choice 1
+ </label>
+ <svg style="
+ vertical-align: text-bottom;
+ display: inline-block;
+ margin-left: 0.1rem;
+ margin-right: 0.2rem;
+
+ width: 1em;
+ color: hsl(120, 39%, 54%);
+ " role="img" aria-hidden="true" focusable="false" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path fill="currentColor" d="M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z"></path></svg>
+ <span style="
+ color: hsl(180, 15%, 41%);
+ ">Correct!</span>
+ </input>
+ </div>
+
+ <div class='multiple-choice-answers-container'>
+ <input class="gift-input" type="radio" id="idGR2h1H" name="id2CCZVRT9">
+ <span style="
+ box-shadow: 0px 1px 1px hsl(0, 0%, 74%);
+ border-radius: 3px;
+ padding-left: 0.2rem;
+ padding-right: 0.2rem;
+ padding-top: 0.05rem;
+ padding-bottom: 0.05rem;
+
+ color: hsl(35, 51%, 33%);
+ background-color: hsl(36, 84%, 93%);
+ ">1%</span>
+ <label style="
+ display: inline-block;
+ padding: 0.2em 0 0.2em 0;
+
+ color: hsl(0, 0%, 0%);
+" for="idGR2h1H">
+ Choice 2
+ </label>
+ <svg style="
+ vertical-align: text-bottom;
+ display: inline-block;
+ margin-left: 0.1rem;
+ margin-right: 0.2rem;
+
+ width: 0.75em;
+ color: hsl(2, 64%, 58%);
+ " role="img" aria-hidden="true" focusable="false" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 352 512"><path fill="currentColor" d="M242.72 256l100.07-100.07c12.28-12.28 12.28-32.19 0-44.48l-22.24-22.24c-12.28-12.28-32.19-12.28-44.48 0L176 189.28 75.93 89.21c-12.28-12.28-32.19-12.28-44.48 0L9.21 111.45c-12.28 12.28-12.28 32.19 0 44.48L109.28 256 9.21 356.07c-12.28 12.28-12.28 32.19 0 44.48l22.24 22.24c12.28 12.28 32.2 12.28 44.48 0L176 322.72l100.07 100.07c12.28 12.28 32.2 12.28 44.48 0l22.24-22.24c12.28-12.28 12.28-32.19 0-44.48L242.72 256z"></path></svg>
+ <span style="
+ color: hsl(180, 15%, 41%);
+ ">InCorrect!</span>
+ </input>
+ </div>
+ <div style="
+ position: relative;
+ margin-top: 1rem;
+ padding: 0 1rem;
+ background-color: hsl(43, 100%, 94%);
+ color: hsl(43, 95%, 9%);
+ border: hsl(36, 84%, 93%) 1px solid;
+ border-radius: 6px;
+ box-shadow: 0px 2px 5px hsl(0, 0%, 74%);
+">
+ <p>Sample Global Feedback</p>
+ </div></section>
+
+`;
+
+exports[`MultipleChoice snapshot test with 2 images using markdown text format 1`] = `
+
+ <section style="
+ flex-wrap: wrap;
+ position: relative;
+ padding: 1rem 1rem;
+ margin-bottom: 0.5rem;
+ background-color: hsl(0, 0%, 100%);
+ border: solid hsl(0, 0%, 100%) 2px;
+ border-radius: 6px;
+ box-shadow: 0px 1px 3px hsl(0, 0%, 74%);
+">
+ <div style="
+ display: flex;
+ font-weight: bold;
+">
+ <span>
+ <span style="
+ color: #5271FF;
+ ">Sample Title with Image</span>
+ </span>
+ <span style="
+ margin-left: auto;
+ padding-left: 0.75rem;
+ flex: none;
+ margin-bottom: 10px;">
+ <span style="
+ box-shadow: 0px 1px 3px hsl(0, 0%, 74%);
+ padding-left: 0.7rem;
+ padding-right: 0.7rem;
+ padding-top: 0.4rem;
+ padding-bottom: 0.4rem;
+ border-radius: 4px;
+ background-color: hsl(0, 0%, 100%);
+ color: hsl(180, 15%, 41%);
+">Choix multiple</span>
+ </span>
+ </div>
+<p style="
+ color: hsl(0, 0%, 0%);
+"><img src="https://via.placeholder.com/150" alt = "Sample Image"/></p><span style="
+ color: hsl(0, 0%, 0%);
+">Choisir une réponse:</span>
+ <div class='multiple-choice-answers-container'>
+ <input class="gift-input" type="radio" id="id57MvEd" name="idQ_whKmSd">
+ <span style="
+ box-shadow: 0px 1px 1px hsl(0, 0%, 74%);
+ border-radius: 3px;
+ padding-left: 0.2rem;
+ padding-right: 0.2rem;
+ padding-top: 0.05rem;
+ padding-bottom: 0.05rem;
+
+ color: hsl(134, 31%, 32%);
+ background-color: hsl(134, 68%, 95%);
+ ">1%</span>
+ <label style="
+ display: inline-block;
+ padding: 0.2em 0 0.2em 0;
+
+ color: hsl(0, 0%, 0%);
+" for="id57MvEd">
+ Choice 1
+
+ </label>
+ <svg style="
+ vertical-align: text-bottom;
+ display: inline-block;
+ margin-left: 0.1rem;
+ margin-right: 0.2rem;
+
+ width: 1em;
+ color: hsl(120, 39%, 54%);
+ " role="img" aria-hidden="true" focusable="false" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path fill="currentColor" d="M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z"></path></svg>
+ <span style="
+ color: hsl(180, 15%, 41%);
+ ">Correct!</span>
+ </input>
+ </div>
+
+ <div class='multiple-choice-answers-container'>
+ <input class="gift-input" type="radio" id="idZ1O9uM" name="idQ_whKmSd">
+ <span style="
+ box-shadow: 0px 1px 1px hsl(0, 0%, 74%);
+ border-radius: 3px;
+ padding-left: 0.2rem;
+ padding-right: 0.2rem;
+ padding-top: 0.05rem;
+ padding-bottom: 0.05rem;
+
+ color: hsl(35, 51%, 33%);
+ background-color: hsl(36, 84%, 93%);
+ ">1%</span>
+ <label style="
+ display: inline-block;
+ padding: 0.2em 0 0.2em 0;
+
+ color: hsl(0, 0%, 0%);
+" for="idZ1O9uM">
+ Choice 2
+
+ </label>
+ <svg style="
+ vertical-align: text-bottom;
+ display: inline-block;
+ margin-left: 0.1rem;
+ margin-right: 0.2rem;
+
+ width: 0.75em;
+ color: hsl(2, 64%, 58%);
+ " role="img" aria-hidden="true" focusable="false" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 352 512"><path fill="currentColor" d="M242.72 256l100.07-100.07c12.28-12.28 12.28-32.19 0-44.48l-22.24-22.24c-12.28-12.28-32.19-12.28-44.48 0L176 189.28 75.93 89.21c-12.28-12.28-32.19-12.28-44.48 0L9.21 111.45c-12.28 12.28-12.28 32.19 0 44.48L109.28 256 9.21 356.07c-12.28 12.28-12.28 32.19 0 44.48l22.24 22.24c12.28 12.28 32.2 12.28 44.48 0L176 322.72l100.07 100.07c12.28 12.28 32.2 12.28 44.48 0l22.24-22.24c12.28-12.28 12.28-32.19 0-44.48L242.72 256z"></path></svg>
+ <span style="
+ color: hsl(180, 15%, 41%);
+ ">Incorrect!</span>
+ </input>
+ </div>
+
+ <div class='multiple-choice-answers-container'>
+ <input class="gift-input" type="radio" id="idJ4Wzh2" name="idQ_whKmSd">
+ <span style="
+ box-shadow: 0px 1px 1px hsl(0, 0%, 74%);
+ border-radius: 3px;
+ padding-left: 0.2rem;
+ padding-right: 0.2rem;
+ padding-top: 0.05rem;
+ padding-bottom: 0.05rem;
+
+ color: hsl(35, 51%, 33%);
+ background-color: hsl(36, 84%, 93%);
+ ">1%</span>
+ <label style="
+ display: inline-block;
+ padding: 0.2em 0 0.2em 0;
+
+ color: hsl(0, 0%, 0%);
+" for="idJ4Wzh2">
+ <img src="https://via.placeholder.com/150" alt="Sample Image" />
+ </label>
+ <svg style="
+ vertical-align: text-bottom;
+ display: inline-block;
+ margin-left: 0.1rem;
+ margin-right: 0.2rem;
+
+ width: 0.75em;
+ color: hsl(2, 64%, 58%);
+ " role="img" aria-hidden="true" focusable="false" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 352 512"><path fill="currentColor" d="M242.72 256l100.07-100.07c12.28-12.28 12.28-32.19 0-44.48l-22.24-22.24c-12.28-12.28-32.19-12.28-44.48 0L176 189.28 75.93 89.21c-12.28-12.28-32.19-12.28-44.48 0L9.21 111.45c-12.28 12.28-12.28 32.19 0 44.48L109.28 256 9.21 356.07c-12.28 12.28-12.28 32.19 0 44.48l22.24 22.24c12.28 12.28 32.2 12.28 44.48 0L176 322.72l100.07 100.07c12.28 12.28 32.2 12.28 44.48 0l22.24-22.24c12.28-12.28 12.28-32.19 0-44.48L242.72 256z"></path></svg>
+ <span style="
+ color: hsl(180, 15%, 41%);
+ ">Image Feedback</span>
+ </input>
+ </div>
+ <div style="
+ position: relative;
+ margin-top: 1rem;
+ padding: 0 1rem;
+ background-color: hsl(43, 100%, 94%);
+ color: hsl(43, 95%, 9%);
+ border: hsl(36, 84%, 93%) 1px solid;
+ border-radius: 6px;
+ box-shadow: 0px 2px 5px hsl(0, 0%, 74%);
+">
+ <p>Sample Global Feedback with Image
+</p>
+ </div></section>
+
+`;
+
+exports[`MultipleChoice snapshot test with Moodle text format 1`] = `
+
+ <section style="
+ flex-wrap: wrap;
+ position: relative;
+ padding: 1rem 1rem;
+ margin-bottom: 0.5rem;
+ background-color: hsl(0, 0%, 100%);
+ border: solid hsl(0, 0%, 100%) 2px;
+ border-radius: 6px;
+ box-shadow: 0px 1px 3px hsl(0, 0%, 74%);
+">
+ <div style="
+ display: flex;
+ font-weight: bold;
+">
+ <span>
+ <span style="
+ color: #5271FF;
+ ">Sample Title</span>
+ </span>
+ <span style="
+ margin-left: auto;
+ padding-left: 0.75rem;
+ flex: none;
+ margin-bottom: 10px;">
+ <span style="
+ box-shadow: 0px 1px 3px hsl(0, 0%, 74%);
+ padding-left: 0.7rem;
+ padding-right: 0.7rem;
+ padding-top: 0.4rem;
+ padding-bottom: 0.4rem;
+ border-radius: 4px;
+ background-color: hsl(0, 0%, 100%);
+ color: hsl(180, 15%, 41%);
+">Choix multiple</span>
+ </span>
+ </div>
+<p style="
+ color: hsl(0, 0%, 0%);
+">Sample Stem</p><span style="
+ color: hsl(0, 0%, 0%);
+">Choisir une réponse:</span>
+ <div class='multiple-choice-answers-container'>
+ <input class="gift-input" type="radio" id="idmWstm6" name="idhXDZKhP7">
+ <span style="
+ box-shadow: 0px 1px 1px hsl(0, 0%, 74%);
+ border-radius: 3px;
+ padding-left: 0.2rem;
+ padding-right: 0.2rem;
+ padding-top: 0.05rem;
+ padding-bottom: 0.05rem;
+
+ color: hsl(134, 31%, 32%);
+ background-color: hsl(134, 68%, 95%);
+ ">1%</span>
+ <label style="
+ display: inline-block;
+ padding: 0.2em 0 0.2em 0;
+
+ color: hsl(0, 0%, 0%);
+" for="idmWstm6">
+ Choice 1
+ </label>
+ <svg style="
+ vertical-align: text-bottom;
+ display: inline-block;
+ margin-left: 0.1rem;
+ margin-right: 0.2rem;
+
+ width: 1em;
+ color: hsl(120, 39%, 54%);
+ " role="img" aria-hidden="true" focusable="false" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path fill="currentColor" d="M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z"></path></svg>
+ <span style="
+ color: hsl(180, 15%, 41%);
+ ">Correct!</span>
+ </input>
+ </div>
+
+ <div class='multiple-choice-answers-container'>
+ <input class="gift-input" type="radio" id="id7sfVHd" name="idhXDZKhP7">
+ <span style="
+ box-shadow: 0px 1px 1px hsl(0, 0%, 74%);
+ border-radius: 3px;
+ padding-left: 0.2rem;
+ padding-right: 0.2rem;
+ padding-top: 0.05rem;
+ padding-bottom: 0.05rem;
+
+ color: hsl(35, 51%, 33%);
+ background-color: hsl(36, 84%, 93%);
+ ">1%</span>
+ <label style="
+ display: inline-block;
+ padding: 0.2em 0 0.2em 0;
+
+ color: hsl(0, 0%, 0%);
+" for="id7sfVHd">
+ Choice 2
+ </label>
+ <svg style="
+ vertical-align: text-bottom;
+ display: inline-block;
+ margin-left: 0.1rem;
+ margin-right: 0.2rem;
+
+ width: 0.75em;
+ color: hsl(2, 64%, 58%);
+ " role="img" aria-hidden="true" focusable="false" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 352 512"><path fill="currentColor" d="M242.72 256l100.07-100.07c12.28-12.28 12.28-32.19 0-44.48l-22.24-22.24c-12.28-12.28-32.19-12.28-44.48 0L176 189.28 75.93 89.21c-12.28-12.28-32.19-12.28-44.48 0L9.21 111.45c-12.28 12.28-12.28 32.19 0 44.48L109.28 256 9.21 356.07c-12.28 12.28-12.28 32.19 0 44.48l22.24 22.24c12.28 12.28 32.2 12.28 44.48 0L176 322.72l100.07 100.07c12.28 12.28 32.2 12.28 44.48 0l22.24-22.24c12.28-12.28 12.28-32.19 0-44.48L242.72 256z"></path></svg>
+ <span style="
+ color: hsl(180, 15%, 41%);
+ ">InCorrect!</span>
+ </input>
+ </div>
+ <div style="
+ position: relative;
+ margin-top: 1rem;
+ padding: 0 1rem;
+ background-color: hsl(43, 100%, 94%);
+ color: hsl(43, 95%, 9%);
+ border: hsl(36, 84%, 93%) 1px solid;
+ border-radius: 6px;
+ box-shadow: 0px 2px 5px hsl(0, 0%, 74%);
+">
+ <p>Sample Global Feedback</p>
+ </div></section>
+
+`;
+
+exports[`MultipleChoice snapshot test with image 1`] = `
+
+ <section style="
+ flex-wrap: wrap;
+ position: relative;
+ padding: 1rem 1rem;
+ margin-bottom: 0.5rem;
+ background-color: hsl(0, 0%, 100%);
+ border: solid hsl(0, 0%, 100%) 2px;
+ border-radius: 6px;
+ box-shadow: 0px 1px 3px hsl(0, 0%, 74%);
+">
+ <div style="
+ display: flex;
+ font-weight: bold;
+">
+ <span>
+ <span style="
+ color: #5271FF;
+ ">Sample Title with Image</span>
+ </span>
+ <span style="
+ margin-left: auto;
+ padding-left: 0.75rem;
+ flex: none;
+ margin-bottom: 10px;">
+ <span style="
+ box-shadow: 0px 1px 3px hsl(0, 0%, 74%);
+ padding-left: 0.7rem;
+ padding-right: 0.7rem;
+ padding-top: 0.4rem;
+ padding-bottom: 0.4rem;
+ border-radius: 4px;
+ background-color: hsl(0, 0%, 100%);
+ color: hsl(180, 15%, 41%);
+">Choix multiple</span>
+ </span>
+ </div>
+<p style="
+ color: hsl(0, 0%, 0%);
+">Sample Stem with Image</p><span style="
+ color: hsl(0, 0%, 0%);
+">Choisir une réponse:</span>
+ <div class='multiple-choice-answers-container'>
+ <input class="gift-input" type="radio" id="idYcIYQH" name="id4wrZpxqV">
+ <span style="
+ box-shadow: 0px 1px 1px hsl(0, 0%, 74%);
+ border-radius: 3px;
+ padding-left: 0.2rem;
+ padding-right: 0.2rem;
+ padding-top: 0.05rem;
+ padding-bottom: 0.05rem;
+
+ color: hsl(134, 31%, 32%);
+ background-color: hsl(134, 68%, 95%);
+ ">1%</span>
+ <label style="
+ display: inline-block;
+ padding: 0.2em 0 0.2em 0;
+
+ color: hsl(0, 0%, 0%);
+" for="idYcIYQH">
+ Choice 1
+ </label>
+ <svg style="
+ vertical-align: text-bottom;
+ display: inline-block;
+ margin-left: 0.1rem;
+ margin-right: 0.2rem;
+
+ width: 1em;
+ color: hsl(120, 39%, 54%);
+ " role="img" aria-hidden="true" focusable="false" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path fill="currentColor" d="M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z"></path></svg>
+ <span style="
+ color: hsl(180, 15%, 41%);
+ ">Correct!</span>
+ </input>
+ </div>
+
+ <div class='multiple-choice-answers-container'>
+ <input class="gift-input" type="radio" id="id2Vhlzo" name="id4wrZpxqV">
+ <span style="
+ box-shadow: 0px 1px 1px hsl(0, 0%, 74%);
+ border-radius: 3px;
+ padding-left: 0.2rem;
+ padding-right: 0.2rem;
+ padding-top: 0.05rem;
+ padding-bottom: 0.05rem;
+
+ color: hsl(35, 51%, 33%);
+ background-color: hsl(36, 84%, 93%);
+ ">1%</span>
+ <label style="
+ display: inline-block;
+ padding: 0.2em 0 0.2em 0;
+
+ color: hsl(0, 0%, 0%);
+" for="id2Vhlzo">
+ Choice 2
+ </label>
+ <svg style="
+ vertical-align: text-bottom;
+ display: inline-block;
+ margin-left: 0.1rem;
+ margin-right: 0.2rem;
+
+ width: 0.75em;
+ color: hsl(2, 64%, 58%);
+ " role="img" aria-hidden="true" focusable="false" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 352 512"><path fill="currentColor" d="M242.72 256l100.07-100.07c12.28-12.28 12.28-32.19 0-44.48l-22.24-22.24c-12.28-12.28-32.19-12.28-44.48 0L176 189.28 75.93 89.21c-12.28-12.28-32.19-12.28-44.48 0L9.21 111.45c-12.28 12.28-12.28 32.19 0 44.48L109.28 256 9.21 356.07c-12.28 12.28-12.28 32.19 0 44.48l22.24 22.24c12.28 12.28 32.2 12.28 44.48 0L176 322.72l100.07 100.07c12.28 12.28 32.2 12.28 44.48 0l22.24-22.24c12.28-12.28 12.28-32.19 0-44.48L242.72 256z"></path></svg>
+ <span style="
+ color: hsl(180, 15%, 41%);
+ ">Incorrect!</span>
+ </input>
+ </div>
+
+ <div class='multiple-choice-answers-container'>
+ <input class="gift-input" type="radio" id="idz87odw" name="id4wrZpxqV">
+ <span style="
+ box-shadow: 0px 1px 1px hsl(0, 0%, 74%);
+ border-radius: 3px;
+ padding-left: 0.2rem;
+ padding-right: 0.2rem;
+ padding-top: 0.05rem;
+ padding-bottom: 0.05rem;
+
+ color: hsl(35, 51%, 33%);
+ background-color: hsl(36, 84%, 93%);
+ ">1%</span>
+ <label style="
+ display: inline-block;
+ padding: 0.2em 0 0.2em 0;
+
+ color: hsl(0, 0%, 0%);
+" for="idz87odw">
+ <img src="https://via.placeholder.com/150" alt="Sample Image" />
+ </label>
+ <svg style="
+ vertical-align: text-bottom;
+ display: inline-block;
+ margin-left: 0.1rem;
+ margin-right: 0.2rem;
+
+ width: 0.75em;
+ color: hsl(2, 64%, 58%);
+ " role="img" aria-hidden="true" focusable="false" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 352 512"><path fill="currentColor" d="M242.72 256l100.07-100.07c12.28-12.28 12.28-32.19 0-44.48l-22.24-22.24c-12.28-12.28-32.19-12.28-44.48 0L176 189.28 75.93 89.21c-12.28-12.28-32.19-12.28-44.48 0L9.21 111.45c-12.28 12.28-12.28 32.19 0 44.48L109.28 256 9.21 356.07c-12.28 12.28-12.28 32.19 0 44.48l22.24 22.24c12.28 12.28 32.2 12.28 44.48 0L176 322.72l100.07 100.07c12.28 12.28 32.2 12.28 44.48 0l22.24-22.24c12.28-12.28 12.28-32.19 0-44.48L242.72 256z"></path></svg>
+ <span style="
+ color: hsl(180, 15%, 41%);
+ ">Image Feedback</span>
+ </input>
+ </div>
+ <div style="
+ position: relative;
+ margin-top: 1rem;
+ padding: 0 1rem;
+ background-color: hsl(43, 100%, 94%);
+ color: hsl(43, 95%, 9%);
+ border: hsl(36, 84%, 93%) 1px solid;
+ border-radius: 6px;
+ box-shadow: 0px 2px 5px hsl(0, 0%, 74%);
+">
+ <p>Sample Global Feedback with Image</p>
+ </div></section>
+
+`;
+
+exports[`MultipleChoice snapshot test with image using markdown text format 1`] = `
+
+ <section style="
+ flex-wrap: wrap;
+ position: relative;
+ padding: 1rem 1rem;
+ margin-bottom: 0.5rem;
+ background-color: hsl(0, 0%, 100%);
+ border: solid hsl(0, 0%, 100%) 2px;
+ border-radius: 6px;
+ box-shadow: 0px 1px 3px hsl(0, 0%, 74%);
+">
+ <div style="
+ display: flex;
+ font-weight: bold;
+">
+ <span>
+ <span style="
+ color: #5271FF;
+ ">Sample Title with Image</span>
+ </span>
+ <span style="
+ margin-left: auto;
+ padding-left: 0.75rem;
+ flex: none;
+ margin-bottom: 10px;">
+ <span style="
+ box-shadow: 0px 1px 3px hsl(0, 0%, 74%);
+ padding-left: 0.7rem;
+ padding-right: 0.7rem;
+ padding-top: 0.4rem;
+ padding-bottom: 0.4rem;
+ border-radius: 4px;
+ background-color: hsl(0, 0%, 100%);
+ color: hsl(180, 15%, 41%);
+">Choix multiple</span>
+ </span>
+ </div>
+<p style="
+ color: hsl(0, 0%, 0%);
+">Sample Stem with Image
+</p><span style="
+ color: hsl(0, 0%, 0%);
+">Choisir une réponse:</span>
+ <div class='multiple-choice-answers-container'>
+ <input class="gift-input" type="radio" id="idGnTXOs" name="idy3Mbb-wN">
+ <span style="
+ box-shadow: 0px 1px 1px hsl(0, 0%, 74%);
+ border-radius: 3px;
+ padding-left: 0.2rem;
+ padding-right: 0.2rem;
+ padding-top: 0.05rem;
+ padding-bottom: 0.05rem;
+
+ color: hsl(134, 31%, 32%);
+ background-color: hsl(134, 68%, 95%);
+ ">1%</span>
+ <label style="
+ display: inline-block;
+ padding: 0.2em 0 0.2em 0;
+
+ color: hsl(0, 0%, 0%);
+" for="idGnTXOs">
+ Choice 1
+
+ </label>
+ <svg style="
+ vertical-align: text-bottom;
+ display: inline-block;
+ margin-left: 0.1rem;
+ margin-right: 0.2rem;
+
+ width: 1em;
+ color: hsl(120, 39%, 54%);
+ " role="img" aria-hidden="true" focusable="false" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path fill="currentColor" d="M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z"></path></svg>
+ <span style="
+ color: hsl(180, 15%, 41%);
+ ">Correct!</span>
+ </input>
+ </div>
+
+ <div class='multiple-choice-answers-container'>
+ <input class="gift-input" type="radio" id="id4cQyMJ" name="idy3Mbb-wN">
+ <span style="
+ box-shadow: 0px 1px 1px hsl(0, 0%, 74%);
+ border-radius: 3px;
+ padding-left: 0.2rem;
+ padding-right: 0.2rem;
+ padding-top: 0.05rem;
+ padding-bottom: 0.05rem;
+
+ color: hsl(35, 51%, 33%);
+ background-color: hsl(36, 84%, 93%);
+ ">1%</span>
+ <label style="
+ display: inline-block;
+ padding: 0.2em 0 0.2em 0;
+
+ color: hsl(0, 0%, 0%);
+" for="id4cQyMJ">
+ Choice 2
+
+ </label>
+ <svg style="
+ vertical-align: text-bottom;
+ display: inline-block;
+ margin-left: 0.1rem;
+ margin-right: 0.2rem;
+
+ width: 0.75em;
+ color: hsl(2, 64%, 58%);
+ " role="img" aria-hidden="true" focusable="false" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 352 512"><path fill="currentColor" d="M242.72 256l100.07-100.07c12.28-12.28 12.28-32.19 0-44.48l-22.24-22.24c-12.28-12.28-32.19-12.28-44.48 0L176 189.28 75.93 89.21c-12.28-12.28-32.19-12.28-44.48 0L9.21 111.45c-12.28 12.28-12.28 32.19 0 44.48L109.28 256 9.21 356.07c-12.28 12.28-12.28 32.19 0 44.48l22.24 22.24c12.28 12.28 32.2 12.28 44.48 0L176 322.72l100.07 100.07c12.28 12.28 32.2 12.28 44.48 0l22.24-22.24c12.28-12.28 12.28-32.19 0-44.48L242.72 256z"></path></svg>
+ <span style="
+ color: hsl(180, 15%, 41%);
+ ">Incorrect!</span>
+ </input>
+ </div>
+
+ <div class='multiple-choice-answers-container'>
+ <input class="gift-input" type="radio" id="ideT1A0q" name="idy3Mbb-wN">
+ <span style="
+ box-shadow: 0px 1px 1px hsl(0, 0%, 74%);
+ border-radius: 3px;
+ padding-left: 0.2rem;
+ padding-right: 0.2rem;
+ padding-top: 0.05rem;
+ padding-bottom: 0.05rem;
+
+ color: hsl(35, 51%, 33%);
+ background-color: hsl(36, 84%, 93%);
+ ">1%</span>
+ <label style="
+ display: inline-block;
+ padding: 0.2em 0 0.2em 0;
+
+ color: hsl(0, 0%, 0%);
+" for="ideT1A0q">
+ <img src="https://via.placeholder.com/150" alt="Sample Image" />
+ </label>
+ <svg style="
+ vertical-align: text-bottom;
+ display: inline-block;
+ margin-left: 0.1rem;
+ margin-right: 0.2rem;
+
+ width: 0.75em;
+ color: hsl(2, 64%, 58%);
+ " role="img" aria-hidden="true" focusable="false" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 352 512"><path fill="currentColor" d="M242.72 256l100.07-100.07c12.28-12.28 12.28-32.19 0-44.48l-22.24-22.24c-12.28-12.28-32.19-12.28-44.48 0L176 189.28 75.93 89.21c-12.28-12.28-32.19-12.28-44.48 0L9.21 111.45c-12.28 12.28-12.28 32.19 0 44.48L109.28 256 9.21 356.07c-12.28 12.28-12.28 32.19 0 44.48l22.24 22.24c12.28 12.28 32.2 12.28 44.48 0L176 322.72l100.07 100.07c12.28 12.28 32.2 12.28 44.48 0l22.24-22.24c12.28-12.28 12.28-32.19 0-44.48L242.72 256z"></path></svg>
+ <span style="
+ color: hsl(180, 15%, 41%);
+ ">Image Feedback</span>
+ </input>
+ </div>
+ <div style="
+ position: relative;
+ margin-top: 1rem;
+ padding: 0 1rem;
+ background-color: hsl(43, 100%, 94%);
+ color: hsl(43, 95%, 9%);
+ border: hsl(36, 84%, 93%) 1px solid;
+ border-radius: 6px;
+ box-shadow: 0px 2px 5px hsl(0, 0%, 74%);
+">
+ <p>Sample Global Feedback with Image
+</p>
+ </div></section>
+
+`;
+
+exports[`MultipleChoice snapshot test with katex 1`] = `
+
+ <section style="
+ flex-wrap: wrap;
+ position: relative;
+ padding: 1rem 1rem;
+ margin-bottom: 0.5rem;
+ background-color: hsl(0, 0%, 100%);
+ border: solid hsl(0, 0%, 100%) 2px;
+ border-radius: 6px;
+ box-shadow: 0px 1px 3px hsl(0, 0%, 74%);
+">
+ <div style="
+ display: flex;
+ font-weight: bold;
+">
+ <span>
+ <span style="
+ color: #5271FF;
+ ">Sample Title</span>
+ </span>
+ <span style="
+ margin-left: auto;
+ padding-left: 0.75rem;
+ flex: none;
+ margin-bottom: 10px;">
+ <span style="
+ box-shadow: 0px 1px 3px hsl(0, 0%, 74%);
+ padding-left: 0.7rem;
+ padding-right: 0.7rem;
+ padding-top: 0.4rem;
+ padding-bottom: 0.4rem;
+ border-radius: 4px;
+ background-color: hsl(0, 0%, 100%);
+ color: hsl(180, 15%, 41%);
+">Choix multiple</span>
+ </span>
+ </div>
+<p style="
+ color: hsl(0, 0%, 0%);
+"><span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><mfrac><mrow><mi>z</mi><mi>z</mi><mi>z</mi></mrow><mrow><mi>y</mi><mi>y</mi><mi>y</mi></mrow></mfrac></mrow><annotation encoding="application/x-tex">\\frac{zzz}{yyy}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1.988em;vertical-align:-0.8804em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.1076em;"><span style="top:-2.314em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.03588em;">yyy</span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.677em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.04398em;">zzz</span></span></span></span><span class="vlist-s"></span></span><span class="vlist-r"><span class="vlist" style="height:0.8804em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span></span></span></span></span></p><span style="
+ color: hsl(0, 0%, 0%);
+">Choisir une réponse:</span>
+ <div class='multiple-choice-answers-container'>
+ <input class="gift-input" type="radio" id="idNwG_aI" name="idir2jT135">
+ <span style="
+ box-shadow: 0px 1px 1px hsl(0, 0%, 74%);
+ border-radius: 3px;
+ padding-left: 0.2rem;
+ padding-right: 0.2rem;
+ padding-top: 0.05rem;
+ padding-bottom: 0.05rem;
+
+ color: hsl(134, 31%, 32%);
+ background-color: hsl(134, 68%, 95%);
+ ">1%</span>
+ <label style="
+ display: inline-block;
+ padding: 0.2em 0 0.2em 0;
+
+ color: hsl(0, 0%, 0%);
+" for="idNwG_aI">
+ Choice 1
+ </label>
+ <svg style="
+ vertical-align: text-bottom;
+ display: inline-block;
+ margin-left: 0.1rem;
+ margin-right: 0.2rem;
+
+ width: 1em;
+ color: hsl(120, 39%, 54%);
+ " role="img" aria-hidden="true" focusable="false" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path fill="currentColor" d="M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z"></path></svg>
+ <span style="
+ color: hsl(180, 15%, 41%);
+ ">Correct!</span>
+ </input>
+ </div>
+
+ <div class='multiple-choice-answers-container'>
+ <input class="gift-input" type="radio" id="idbqDUYQ" name="idir2jT135">
+ <span style="
+ box-shadow: 0px 1px 1px hsl(0, 0%, 74%);
+ border-radius: 3px;
+ padding-left: 0.2rem;
+ padding-right: 0.2rem;
+ padding-top: 0.05rem;
+ padding-bottom: 0.05rem;
+
+ color: hsl(35, 51%, 33%);
+ background-color: hsl(36, 84%, 93%);
+ ">1%</span>
+ <label style="
+ display: inline-block;
+ padding: 0.2em 0 0.2em 0;
+
+ color: hsl(0, 0%, 0%);
+" for="idbqDUYQ">
+ Choice 2
+ </label>
+ <svg style="
+ vertical-align: text-bottom;
+ display: inline-block;
+ margin-left: 0.1rem;
+ margin-right: 0.2rem;
+
+ width: 0.75em;
+ color: hsl(2, 64%, 58%);
+ " role="img" aria-hidden="true" focusable="false" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 352 512"><path fill="currentColor" d="M242.72 256l100.07-100.07c12.28-12.28 12.28-32.19 0-44.48l-22.24-22.24c-12.28-12.28-32.19-12.28-44.48 0L176 189.28 75.93 89.21c-12.28-12.28-32.19-12.28-44.48 0L9.21 111.45c-12.28 12.28-12.28 32.19 0 44.48L109.28 256 9.21 356.07c-12.28 12.28-12.28 32.19 0 44.48l22.24 22.24c12.28 12.28 32.2 12.28 44.48 0L176 322.72l100.07 100.07c12.28 12.28 32.2 12.28 44.48 0l22.24-22.24c12.28-12.28 12.28-32.19 0-44.48L242.72 256z"></path></svg>
+ <span style="
+ color: hsl(180, 15%, 41%);
+ ">InCorrect!</span>
+ </input>
+ </div>
+ <div style="
+ position: relative;
+ margin-top: 1rem;
+ padding: 0 1rem;
+ background-color: hsl(43, 100%, 94%);
+ color: hsl(43, 95%, 9%);
+ border: hsl(36, 84%, 93%) 1px solid;
+ border-radius: 6px;
+ box-shadow: 0px 2px 5px hsl(0, 0%, 74%);
+">
+ <p>Sample Global Feedback</p>
+ </div></section>
+
+`;
+
+exports[`MultipleChoice snapshot test with katex, using html text format 1`] = `
+
+ <section style="
+ flex-wrap: wrap;
+ position: relative;
+ padding: 1rem 1rem;
+ margin-bottom: 0.5rem;
+ background-color: hsl(0, 0%, 100%);
+ border: solid hsl(0, 0%, 100%) 2px;
+ border-radius: 6px;
+ box-shadow: 0px 1px 3px hsl(0, 0%, 74%);
+">
+ <div style="
+ display: flex;
+ font-weight: bold;
+">
+ <span>
+ <span style="
+ color: #5271FF;
+ ">Sample Title</span>
+ </span>
+ <span style="
+ margin-left: auto;
+ padding-left: 0.75rem;
+ flex: none;
+ margin-bottom: 10px;">
+ <span style="
+ box-shadow: 0px 1px 3px hsl(0, 0%, 74%);
+ padding-left: 0.7rem;
+ padding-right: 0.7rem;
+ padding-top: 0.4rem;
+ padding-bottom: 0.4rem;
+ border-radius: 4px;
+ background-color: hsl(0, 0%, 100%);
+ color: hsl(180, 15%, 41%);
+">Choix multiple</span>
+ </span>
+ </div>
+<p style="
+ color: hsl(0, 0%, 0%);
+"><span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><mfrac><mrow><mi>z</mi><mi>z</mi><mi>z</mi></mrow><mrow><mi>y</mi><mi>y</mi><mi>y</mi></mrow></mfrac></mrow><annotation encoding="application/x-tex">\\frac{zzz}{yyy}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1.988em;vertical-align:-0.8804em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.1076em;"><span style="top:-2.314em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.03588em;">yyy</span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.677em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.04398em;">zzz</span></span></span></span><span class="vlist-s"></span></span><span class="vlist-r"><span class="vlist" style="height:0.8804em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span></span></span></span></span></p><span style="
+ color: hsl(0, 0%, 0%);
+">Choisir une réponse:</span>
+ <div class='multiple-choice-answers-container'>
+ <input class="gift-input" type="radio" id="idhrJmYd" name="idiA6lal3j">
+ <span style="
+ box-shadow: 0px 1px 1px hsl(0, 0%, 74%);
+ border-radius: 3px;
+ padding-left: 0.2rem;
+ padding-right: 0.2rem;
+ padding-top: 0.05rem;
+ padding-bottom: 0.05rem;
+
+ color: hsl(134, 31%, 32%);
+ background-color: hsl(134, 68%, 95%);
+ ">1%</span>
+ <label style="
+ display: inline-block;
+ padding: 0.2em 0 0.2em 0;
+
+ color: hsl(0, 0%, 0%);
+" for="idhrJmYd">
+ Choice 1
+ </label>
+ <svg style="
+ vertical-align: text-bottom;
+ display: inline-block;
+ margin-left: 0.1rem;
+ margin-right: 0.2rem;
+
+ width: 1em;
+ color: hsl(120, 39%, 54%);
+ " role="img" aria-hidden="true" focusable="false" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path fill="currentColor" d="M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z"></path></svg>
+ <span style="
+ color: hsl(180, 15%, 41%);
+ ">Correct!</span>
+ </input>
+ </div>
+
+ <div class='multiple-choice-answers-container'>
+ <input class="gift-input" type="radio" id="idxZUKMy" name="idiA6lal3j">
+ <span style="
+ box-shadow: 0px 1px 1px hsl(0, 0%, 74%);
+ border-radius: 3px;
+ padding-left: 0.2rem;
+ padding-right: 0.2rem;
+ padding-top: 0.05rem;
+ padding-bottom: 0.05rem;
+
+ color: hsl(35, 51%, 33%);
+ background-color: hsl(36, 84%, 93%);
+ ">1%</span>
+ <label style="
+ display: inline-block;
+ padding: 0.2em 0 0.2em 0;
+
+ color: hsl(0, 0%, 0%);
+" for="idxZUKMy">
+ Choice 2
+ </label>
+ <svg style="
+ vertical-align: text-bottom;
+ display: inline-block;
+ margin-left: 0.1rem;
+ margin-right: 0.2rem;
+
+ width: 0.75em;
+ color: hsl(2, 64%, 58%);
+ " role="img" aria-hidden="true" focusable="false" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 352 512"><path fill="currentColor" d="M242.72 256l100.07-100.07c12.28-12.28 12.28-32.19 0-44.48l-22.24-22.24c-12.28-12.28-32.19-12.28-44.48 0L176 189.28 75.93 89.21c-12.28-12.28-32.19-12.28-44.48 0L9.21 111.45c-12.28 12.28-12.28 32.19 0 44.48L109.28 256 9.21 356.07c-12.28 12.28-12.28 32.19 0 44.48l22.24 22.24c12.28 12.28 32.2 12.28 44.48 0L176 322.72l100.07 100.07c12.28 12.28 32.2 12.28 44.48 0l22.24-22.24c12.28-12.28 12.28-32.19 0-44.48L242.72 256z"></path></svg>
+ <span style="
+ color: hsl(180, 15%, 41%);
+ ">InCorrect!</span>
+ </input>
+ </div>
+ <div style="
+ position: relative;
+ margin-top: 1rem;
+ padding: 0 1rem;
+ background-color: hsl(43, 100%, 94%);
+ color: hsl(43, 95%, 9%);
+ border: hsl(36, 84%, 93%) 1px solid;
+ border-radius: 6px;
+ box-shadow: 0px 2px 5px hsl(0, 0%, 74%);
+">
+ <p>Sample Global Feedback</p>
+ </div></section>
+
+`;
diff --git a/client/src/__tests__/components/GiftTemplate/templates/__snapshots__/ShortAnswer.test.tsx.snap b/client/src/__tests__/components/GiftTemplate/templates/__snapshots__/ShortAnswer.test.tsx.snap
new file mode 100644
index 0000000..9646352
--- /dev/null
+++ b/client/src/__tests__/components/GiftTemplate/templates/__snapshots__/ShortAnswer.test.tsx.snap
@@ -0,0 +1,226 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`ShortAnswer snapshot test with katex 1`] = `
+
+ <section style="
+ flex-wrap: wrap;
+ position: relative;
+ padding: 1rem 1rem;
+ margin-bottom: 0.5rem;
+ background-color: hsl(0, 0%, 100%);
+ border: solid hsl(0, 0%, 100%) 2px;
+ border-radius: 6px;
+ box-shadow: 0px 1px 3px hsl(0, 0%, 74%);
+">
+ <div style="
+ display: flex;
+ font-weight: bold;
+">
+ <span>
+ <span style="
+ color: #5271FF;
+ ">Sample Short Answer Title</span>
+ </span>
+ <span style="
+ margin-left: auto;
+ padding-left: 0.75rem;
+ flex: none;
+ margin-bottom: 10px;">
+ <span style="
+ box-shadow: 0px 1px 3px hsl(0, 0%, 74%);
+ padding-left: 0.7rem;
+ padding-right: 0.7rem;
+ padding-top: 0.4rem;
+ padding-bottom: 0.4rem;
+ border-radius: 4px;
+ background-color: hsl(0, 0%, 100%);
+ color: hsl(180, 15%, 41%);
+">Réponse courte</span>
+ </span>
+ </div>
+<p style="
+ color: hsl(0, 0%, 0%);
+"><span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><mfrac><mrow><mi>z</mi><mi>z</mi><mi>z</mi></mrow><mrow><mi>y</mi><mi>y</mi><mi>y</mi></mrow></mfrac></mrow><annotation encoding="application/x-tex">\\frac{zzz}{yyy}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1.988em;vertical-align:-0.8804em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.1076em;"><span style="top:-2.314em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.03588em;">yyy</span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.677em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.04398em;">zzz</span></span></span></span><span class="vlist-s"></span></span><span class="vlist-r"><span class="vlist" style="height:0.8804em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span></span></span></span></span></p>
+ <div>
+ <span style="
+ color: hsl(0, 0%, 0%);
+">Réponse: </span><input class="gift-input" type="text" style="
+ display: inline-block;
+ padding: 0.375rem 0.75rem;
+ line-height: 1.5;
+ color: hsl(0, 0%, 16%);
+ background-color: hsl(0, 0%, 100%);
+ border: 1px solid hsl(0, 0%, 81%);
+ border-radius: 0.25rem;
+ box-shadow: rgba(0, 0, 0, 0.05) 0px 1px 2px 0px;
+ margin: 0;
+ font-family: inherit;
+ font-size: inherit;
+ line-height: inherit;
+ width: 90%;
+" placeholder="Answer 1, Answer 2">
+ </div>
+ <div style="
+ position: relative;
+ margin-top: 1rem;
+ padding: 0 1rem;
+ background-color: hsl(43, 100%, 94%);
+ color: hsl(43, 95%, 9%);
+ border: hsl(36, 84%, 93%) 1px solid;
+ border-radius: 6px;
+ box-shadow: 0px 2px 5px hsl(0, 0%, 74%);
+">
+ <p>Sample Global Feedback</p>
+ </div></section>
+
+`;
+
+exports[`ShortAnswer snapshot test with moodle 1`] = `
+
+ <section style="
+ flex-wrap: wrap;
+ position: relative;
+ padding: 1rem 1rem;
+ margin-bottom: 0.5rem;
+ background-color: hsl(0, 0%, 100%);
+ border: solid hsl(0, 0%, 100%) 2px;
+ border-radius: 6px;
+ box-shadow: 0px 1px 3px hsl(0, 0%, 74%);
+">
+ <div style="
+ display: flex;
+ font-weight: bold;
+">
+ <span>
+ <span style="
+ color: #5271FF;
+ ">Sample Short Answer Title</span>
+ </span>
+ <span style="
+ margin-left: auto;
+ padding-left: 0.75rem;
+ flex: none;
+ margin-bottom: 10px;">
+ <span style="
+ box-shadow: 0px 1px 3px hsl(0, 0%, 74%);
+ padding-left: 0.7rem;
+ padding-right: 0.7rem;
+ padding-top: 0.4rem;
+ padding-bottom: 0.4rem;
+ border-radius: 4px;
+ background-color: hsl(0, 0%, 100%);
+ color: hsl(180, 15%, 41%);
+">Réponse courte</span>
+ </span>
+ </div>
+<p style="
+ color: hsl(0, 0%, 0%);
+">Sample Stem</p>
+ <div>
+ <span style="
+ color: hsl(0, 0%, 0%);
+">Réponse: </span><input class="gift-input" type="text" style="
+ display: inline-block;
+ padding: 0.375rem 0.75rem;
+ line-height: 1.5;
+ color: hsl(0, 0%, 16%);
+ background-color: hsl(0, 0%, 100%);
+ border: 1px solid hsl(0, 0%, 81%);
+ border-radius: 0.25rem;
+ box-shadow: rgba(0, 0, 0, 0.05) 0px 1px 2px 0px;
+ margin: 0;
+ font-family: inherit;
+ font-size: inherit;
+ line-height: inherit;
+ width: 90%;
+" placeholder="Answer 1, Answer 2">
+ </div>
+ <div style="
+ position: relative;
+ margin-top: 1rem;
+ padding: 0 1rem;
+ background-color: hsl(43, 100%, 94%);
+ color: hsl(43, 95%, 9%);
+ border: hsl(36, 84%, 93%) 1px solid;
+ border-radius: 6px;
+ box-shadow: 0px 2px 5px hsl(0, 0%, 74%);
+">
+ <p>Sample Global Feedback</p>
+ </div></section>
+
+`;
+
+exports[`ShortAnswer snapshot test with plain text 1`] = `
+
+ <section style="
+ flex-wrap: wrap;
+ position: relative;
+ padding: 1rem 1rem;
+ margin-bottom: 0.5rem;
+ background-color: hsl(0, 0%, 100%);
+ border: solid hsl(0, 0%, 100%) 2px;
+ border-radius: 6px;
+ box-shadow: 0px 1px 3px hsl(0, 0%, 74%);
+">
+ <div style="
+ display: flex;
+ font-weight: bold;
+">
+ <span>
+ <span style="
+ color: #5271FF;
+ ">Sample Short Answer Title</span>
+ </span>
+ <span style="
+ margin-left: auto;
+ padding-left: 0.75rem;
+ flex: none;
+ margin-bottom: 10px;">
+ <span style="
+ box-shadow: 0px 1px 3px hsl(0, 0%, 74%);
+ padding-left: 0.7rem;
+ padding-right: 0.7rem;
+ padding-top: 0.4rem;
+ padding-bottom: 0.4rem;
+ border-radius: 4px;
+ background-color: hsl(0, 0%, 100%);
+ color: hsl(180, 15%, 41%);
+">Réponse courte</span>
+ </span>
+ </div>
+<p style="
+ color: hsl(0, 0%, 0%);
+">Sample Stem</p>
+ <div>
+ <span style="
+ color: hsl(0, 0%, 0%);
+">Réponse: </span><input class="gift-input" type="text" style="
+ display: inline-block;
+ padding: 0.375rem 0.75rem;
+ line-height: 1.5;
+ color: hsl(0, 0%, 16%);
+ background-color: hsl(0, 0%, 100%);
+ border: 1px solid hsl(0, 0%, 81%);
+ border-radius: 0.25rem;
+ box-shadow: rgba(0, 0, 0, 0.05) 0px 1px 2px 0px;
+ margin: 0;
+ font-family: inherit;
+ font-size: inherit;
+ line-height: inherit;
+ width: 90%;
+" placeholder="Answer 1, Answer 2">
+ </div>
+ <div style="
+ position: relative;
+ margin-top: 1rem;
+ padding: 0 1rem;
+ background-color: hsl(43, 100%, 94%);
+ color: hsl(43, 95%, 9%);
+ border: hsl(36, 84%, 93%) 1px solid;
+ border-radius: 6px;
+ box-shadow: 0px 2px 5px hsl(0, 0%, 74%);
+">
+ <p>Sample Global Feedback</p>
+ </div></section>
+
+`;
diff --git a/client/src/__tests__/components/GiftTemplate/templates/__snapshots__/TrueFalse.test.tsx.snap b/client/src/__tests__/components/GiftTemplate/templates/__snapshots__/TrueFalse.test.tsx.snap
new file mode 100644
index 0000000..8d914d8
--- /dev/null
+++ b/client/src/__tests__/components/GiftTemplate/templates/__snapshots__/TrueFalse.test.tsx.snap
@@ -0,0 +1,329 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`TrueFalse snapshot test with katex 1`] = `
+
+ <section style="
+ flex-wrap: wrap;
+ position: relative;
+ padding: 1rem 1rem;
+ margin-bottom: 0.5rem;
+ background-color: hsl(0, 0%, 100%);
+ border: solid hsl(0, 0%, 100%) 2px;
+ border-radius: 6px;
+ box-shadow: 0px 1px 3px hsl(0, 0%, 74%);
+">
+ <div style="
+ display: flex;
+ font-weight: bold;
+">
+ <span>
+ <span style="
+ color: #5271FF;
+ ">Sample True/False Title</span>
+ </span>
+ <span style="
+ margin-left: auto;
+ padding-left: 0.75rem;
+ flex: none;
+ margin-bottom: 10px;">
+ <span style="
+ box-shadow: 0px 1px 3px hsl(0, 0%, 74%);
+ padding-left: 0.7rem;
+ padding-right: 0.7rem;
+ padding-top: 0.4rem;
+ padding-bottom: 0.4rem;
+ border-radius: 4px;
+ background-color: hsl(0, 0%, 100%);
+ color: hsl(180, 15%, 41%);
+">Vrai/Faux</span>
+ </span>
+ </div>
+<p style="
+ color: hsl(0, 0%, 0%);
+"><span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><mfrac><mrow><mi>z</mi><mi>z</mi><mi>z</mi></mrow><mrow><mi>y</mi><mi>y</mi><mi>y</mi></mrow></mfrac></mrow><annotation encoding="application/x-tex">\\frac{zzz}{yyy}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1.988em;vertical-align:-0.8804em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.1076em;"><span style="top:-2.314em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.03588em;">yyy</span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.677em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.04398em;">zzz</span></span></span></span><span class="vlist-s"></span></span><span class="vlist-r"><span class="vlist" style="height:0.8804em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span></span></span></span></span></p><span style="
+ color: hsl(0, 0%, 0%);
+">Choisir une réponse:</span>
+ <div class='multiple-choice-answers-container'>
+ <input class="gift-input" type="radio" id="idJPS1EM" name="idpM8HEdsR">
+
+ <label style="
+ display: inline-block;
+ padding: 0.2em 0 0.2em 0;
+
+ color: hsl(0, 0%, 0%);
+" for="idJPS1EM">
+ Vrai
+ </label>
+ <svg style="
+ vertical-align: text-bottom;
+ display: inline-block;
+ margin-left: 0.1rem;
+ margin-right: 0.2rem;
+
+ width: 1em;
+ color: hsl(120, 39%, 54%);
+ " role="img" aria-hidden="true" focusable="false" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path fill="currentColor" d="M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z"></path></svg>
+ <span style="
+ color: hsl(180, 15%, 41%);
+ ">Correct!</span>
+ </input>
+ </div>
+
+ <div class='multiple-choice-answers-container'>
+ <input class="gift-input" type="radio" id="id_-5rkc" name="idpM8HEdsR">
+
+ <label style="
+ display: inline-block;
+ padding: 0.2em 0 0.2em 0;
+
+ color: hsl(0, 0%, 0%);
+" for="id_-5rkc">
+ Faux
+ </label>
+ <svg style="
+ vertical-align: text-bottom;
+ display: inline-block;
+ margin-left: 0.1rem;
+ margin-right: 0.2rem;
+
+ width: 0.75em;
+ color: hsl(2, 64%, 58%);
+ " role="img" aria-hidden="true" focusable="false" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 352 512"><path fill="currentColor" d="M242.72 256l100.07-100.07c12.28-12.28 12.28-32.19 0-44.48l-22.24-22.24c-12.28-12.28-32.19-12.28-44.48 0L176 189.28 75.93 89.21c-12.28-12.28-32.19-12.28-44.48 0L9.21 111.45c-12.28 12.28-12.28 32.19 0 44.48L109.28 256 9.21 356.07c-12.28 12.28-12.28 32.19 0 44.48l22.24 22.24c12.28 12.28 32.2 12.28 44.48 0L176 322.72l100.07 100.07c12.28 12.28 32.2 12.28 44.48 0l22.24-22.24c12.28-12.28 12.28-32.19 0-44.48L242.72 256z"></path></svg>
+ <span style="
+ color: hsl(180, 15%, 41%);
+ ">Incorrect!</span>
+ </input>
+ </div>
+ <div style="
+ position: relative;
+ margin-top: 1rem;
+ padding: 0 1rem;
+ background-color: hsl(43, 100%, 94%);
+ color: hsl(43, 95%, 9%);
+ border: hsl(36, 84%, 93%) 1px solid;
+ border-radius: 6px;
+ box-shadow: 0px 2px 5px hsl(0, 0%, 74%);
+">
+ <p>Sample Global Feedback
+</p>
+ </div></section>
+
+`;
+
+exports[`TrueFalse snapshot test with moodle 1`] = `
+
+ <section style="
+ flex-wrap: wrap;
+ position: relative;
+ padding: 1rem 1rem;
+ margin-bottom: 0.5rem;
+ background-color: hsl(0, 0%, 100%);
+ border: solid hsl(0, 0%, 100%) 2px;
+ border-radius: 6px;
+ box-shadow: 0px 1px 3px hsl(0, 0%, 74%);
+">
+ <div style="
+ display: flex;
+ font-weight: bold;
+">
+ <span>
+ <span style="
+ color: #5271FF;
+ ">Sample True/False Title</span>
+ </span>
+ <span style="
+ margin-left: auto;
+ padding-left: 0.75rem;
+ flex: none;
+ margin-bottom: 10px;">
+ <span style="
+ box-shadow: 0px 1px 3px hsl(0, 0%, 74%);
+ padding-left: 0.7rem;
+ padding-right: 0.7rem;
+ padding-top: 0.4rem;
+ padding-bottom: 0.4rem;
+ border-radius: 4px;
+ background-color: hsl(0, 0%, 100%);
+ color: hsl(180, 15%, 41%);
+">Vrai/Faux</span>
+ </span>
+ </div>
+<p style="
+ color: hsl(0, 0%, 0%);
+">Sample Stem</p><span style="
+ color: hsl(0, 0%, 0%);
+">Choisir une réponse:</span>
+ <div class='multiple-choice-answers-container'>
+ <input class="gift-input" type="radio" id="idOPBdFk" name="idoMEBjTDb">
+
+ <label style="
+ display: inline-block;
+ padding: 0.2em 0 0.2em 0;
+
+ color: hsl(0, 0%, 0%);
+" for="idOPBdFk">
+ Vrai
+ </label>
+ <svg style="
+ vertical-align: text-bottom;
+ display: inline-block;
+ margin-left: 0.1rem;
+ margin-right: 0.2rem;
+
+ width: 1em;
+ color: hsl(120, 39%, 54%);
+ " role="img" aria-hidden="true" focusable="false" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path fill="currentColor" d="M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z"></path></svg>
+ <span style="
+ color: hsl(180, 15%, 41%);
+ ">Correct!</span>
+ </input>
+ </div>
+
+ <div class='multiple-choice-answers-container'>
+ <input class="gift-input" type="radio" id="id3lljUu" name="idoMEBjTDb">
+
+ <label style="
+ display: inline-block;
+ padding: 0.2em 0 0.2em 0;
+
+ color: hsl(0, 0%, 0%);
+" for="id3lljUu">
+ Faux
+ </label>
+ <svg style="
+ vertical-align: text-bottom;
+ display: inline-block;
+ margin-left: 0.1rem;
+ margin-right: 0.2rem;
+
+ width: 0.75em;
+ color: hsl(2, 64%, 58%);
+ " role="img" aria-hidden="true" focusable="false" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 352 512"><path fill="currentColor" d="M242.72 256l100.07-100.07c12.28-12.28 12.28-32.19 0-44.48l-22.24-22.24c-12.28-12.28-32.19-12.28-44.48 0L176 189.28 75.93 89.21c-12.28-12.28-32.19-12.28-44.48 0L9.21 111.45c-12.28 12.28-12.28 32.19 0 44.48L109.28 256 9.21 356.07c-12.28 12.28-12.28 32.19 0 44.48l22.24 22.24c12.28 12.28 32.2 12.28 44.48 0L176 322.72l100.07 100.07c12.28 12.28 32.2 12.28 44.48 0l22.24-22.24c12.28-12.28 12.28-32.19 0-44.48L242.72 256z"></path></svg>
+ <span style="
+ color: hsl(180, 15%, 41%);
+ ">Incorrect!</span>
+ </input>
+ </div>
+ <div style="
+ position: relative;
+ margin-top: 1rem;
+ padding: 0 1rem;
+ background-color: hsl(43, 100%, 94%);
+ color: hsl(43, 95%, 9%);
+ border: hsl(36, 84%, 93%) 1px solid;
+ border-radius: 6px;
+ box-shadow: 0px 2px 5px hsl(0, 0%, 74%);
+">
+ <p>Sample Global Feedback</p>
+ </div></section>
+
+`;
+
+exports[`TrueFalse snapshot test with plain text 1`] = `
+
+ <section style="
+ flex-wrap: wrap;
+ position: relative;
+ padding: 1rem 1rem;
+ margin-bottom: 0.5rem;
+ background-color: hsl(0, 0%, 100%);
+ border: solid hsl(0, 0%, 100%) 2px;
+ border-radius: 6px;
+ box-shadow: 0px 1px 3px hsl(0, 0%, 74%);
+">
+ <div style="
+ display: flex;
+ font-weight: bold;
+">
+ <span>
+ <span style="
+ color: #5271FF;
+ ">Sample True/False Title</span>
+ </span>
+ <span style="
+ margin-left: auto;
+ padding-left: 0.75rem;
+ flex: none;
+ margin-bottom: 10px;">
+ <span style="
+ box-shadow: 0px 1px 3px hsl(0, 0%, 74%);
+ padding-left: 0.7rem;
+ padding-right: 0.7rem;
+ padding-top: 0.4rem;
+ padding-bottom: 0.4rem;
+ border-radius: 4px;
+ background-color: hsl(0, 0%, 100%);
+ color: hsl(180, 15%, 41%);
+">Vrai/Faux</span>
+ </span>
+ </div>
+<p style="
+ color: hsl(0, 0%, 0%);
+">Sample Stem</p><span style="
+ color: hsl(0, 0%, 0%);
+">Choisir une réponse:</span>
+ <div class='multiple-choice-answers-container'>
+ <input class="gift-input" type="radio" id="id2_2M-E" name="idpl2XIOYb">
+
+ <label style="
+ display: inline-block;
+ padding: 0.2em 0 0.2em 0;
+
+ color: hsl(0, 0%, 0%);
+" for="id2_2M-E">
+ Vrai
+ </label>
+ <svg style="
+ vertical-align: text-bottom;
+ display: inline-block;
+ margin-left: 0.1rem;
+ margin-right: 0.2rem;
+
+ width: 1em;
+ color: hsl(120, 39%, 54%);
+ " role="img" aria-hidden="true" focusable="false" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path fill="currentColor" d="M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z"></path></svg>
+ <span style="
+ color: hsl(180, 15%, 41%);
+ ">Correct!</span>
+ </input>
+ </div>
+
+ <div class='multiple-choice-answers-container'>
+ <input class="gift-input" type="radio" id="idPc16JK" name="idpl2XIOYb">
+
+ <label style="
+ display: inline-block;
+ padding: 0.2em 0 0.2em 0;
+
+ color: hsl(0, 0%, 0%);
+" for="idPc16JK">
+ Faux
+ </label>
+ <svg style="
+ vertical-align: text-bottom;
+ display: inline-block;
+ margin-left: 0.1rem;
+ margin-right: 0.2rem;
+
+ width: 0.75em;
+ color: hsl(2, 64%, 58%);
+ " role="img" aria-hidden="true" focusable="false" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 352 512"><path fill="currentColor" d="M242.72 256l100.07-100.07c12.28-12.28 12.28-32.19 0-44.48l-22.24-22.24c-12.28-12.28-32.19-12.28-44.48 0L176 189.28 75.93 89.21c-12.28-12.28-32.19-12.28-44.48 0L9.21 111.45c-12.28 12.28-12.28 32.19 0 44.48L109.28 256 9.21 356.07c-12.28 12.28-12.28 32.19 0 44.48l22.24 22.24c12.28 12.28 32.2 12.28 44.48 0L176 322.72l100.07 100.07c12.28 12.28 32.2 12.28 44.48 0l22.24-22.24c12.28-12.28 12.28-32.19 0-44.48L242.72 256z"></path></svg>
+ <span style="
+ color: hsl(180, 15%, 41%);
+ ">Incorrect!</span>
+ </input>
+ </div>
+ <div style="
+ position: relative;
+ margin-top: 1rem;
+ padding: 0 1rem;
+ background-color: hsl(43, 100%, 94%);
+ color: hsl(43, 95%, 9%);
+ border: hsl(36, 84%, 93%) 1px solid;
+ border-radius: 6px;
+ box-shadow: 0px 2px 5px hsl(0, 0%, 74%);
+">
+ <p>Sample Global Feedback</p>
+ </div></section>
+
+`;
From 427182e7a8c1f38d63cd4ce46aa469ebba591573 Mon Sep 17 00:00:00 2001
From: JubaAzul <118773284+JubaAzul@users.noreply.github.com>
Date: Fri, 10 Jan 2025 17:39:19 -0500
Subject: [PATCH 02/23] Adding snapshot tests for editor
---
.../GiftTemplate/templates/Numerical.test.tsx | 72 +++++
.../templates/ShortAnswer.test.tsx | 23 +-
.../GiftTemplate/templates/TrueFalse.test.tsx | 16 +
.../MultipleChoice.test.tsx.snap | 82 ++---
.../__snapshots__/Numerical.test.tsx.snap | 301 ++++++++++++++++++
.../__snapshots__/ShortAnswer.test.tsx.snap | 78 +++++
.../__snapshots__/TrueFalse.test.tsx.snap | 133 +++++++-
7 files changed, 650 insertions(+), 55 deletions(-)
create mode 100644 client/src/__tests__/components/GiftTemplate/templates/Numerical.test.tsx
create mode 100644 client/src/__tests__/components/GiftTemplate/templates/__snapshots__/Numerical.test.tsx.snap
diff --git a/client/src/__tests__/components/GiftTemplate/templates/Numerical.test.tsx b/client/src/__tests__/components/GiftTemplate/templates/Numerical.test.tsx
new file mode 100644
index 0000000..65921f9
--- /dev/null
+++ b/client/src/__tests__/components/GiftTemplate/templates/Numerical.test.tsx
@@ -0,0 +1,72 @@
+import { render } from '@testing-library/react';
+import Numerical from '../../../../components/GiftTemplate/templates/Numerical';
+import { TemplateOptions, Numerical as NumericalType } from '../../../../components/GiftTemplate/templates/types';
+
+const plainTextMock: TemplateOptions & NumericalType = {
+ type: 'Numerical',
+ hasEmbeddedAnswers: false,
+ title: 'Sample Numerical Title',
+ stem: { format: 'plain', text: 'Sample Stem' },
+ choices: [
+ { isCorrect: true, weight: 1, text: { type: 'simple', number: 42}, feedback: { format: 'plain', text: 'Correct!' } },
+ { isCorrect: false, weight: 1, text: { type: 'simple', number: 43}, feedback: { format: 'plain', text: 'Incorrect!' } }
+ ],
+ globalFeedback: { format: 'plain', text: 'Sample Global Feedback' }
+};
+
+const htmlMock: TemplateOptions & NumericalType = {
+ type: 'Numerical',
+ hasEmbeddedAnswers: false,
+ title: 'Sample Numerical Title',
+ stem: { format: 'html', text: '$$\\frac{zzz}{yyy}$$' },
+ choices: [
+ { isCorrect: true, weight: 1, text: { type: 'simple', number: 42}, feedback: { format: 'html', text: 'Correct!' } },
+ { isCorrect: false, weight: 1, text: { type: 'simple', number: 43}, feedback: { format: 'html', text: 'Incorrect!' } }
+ ],
+ globalFeedback: { format: 'html', text: 'Sample Global Feedback' }
+};
+
+const moodleMock: TemplateOptions & NumericalType = {
+ type: 'Numerical',
+ hasEmbeddedAnswers: false,
+ title: 'Sample Numerical Title',
+ stem: { format: 'moodle', text: 'Sample Stem' },
+ choices: [
+ { isCorrect: true, weight: 1, text: { type: 'simple', number: 42}, feedback: { format: 'moodle', text: 'Correct!' } },
+ { isCorrect: false, weight: 1, text: { type: 'simple', number: 43}, feedback: { format: 'moodle', text: 'Incorrect!' } }
+ ],
+ globalFeedback: { format: 'moodle', text: 'Sample Global Feedback' }
+};
+
+const imageMock: TemplateOptions & NumericalType = {
+ type: 'Numerical',
+ hasEmbeddedAnswers: false,
+ title: 'Sample Numerical Title with Image',
+ stem: { format: 'plain', text: 'Sample Stem with Image' },
+ choices: [
+ { isCorrect: true, weight: 1, text: { type: 'simple', number: 42}, feedback: { format: 'plain', text: 'Correct!' } },
+ { isCorrect: false, weight: 1, text: { type: 'simple', number: 43}, feedback: { format: 'plain', text: 'Incorrect!' } },
+ { isCorrect: false, weight: 1, text: { type: 'simple', number: 44}, feedback: { format: 'plain', text: '
' } }
+ ],
+ globalFeedback: { format: 'plain', text: 'Sample Global Feedback with Image' }
+};
+
+test('Numerical snapshot test with plain text', () => {
+ const { asFragment } = render();
+ expect(asFragment()).toMatchSnapshot();
+});
+
+test('Numerical snapshot test with html', () => {
+ const { asFragment } = render();
+ expect(asFragment()).toMatchSnapshot();
+});
+
+test('Numerical snapshot test with moodle', () => {
+ const { asFragment } = render();
+ expect(asFragment()).toMatchSnapshot();
+});
+
+test('Numerical snapshot test with image', () => {
+ const { asFragment } = render();
+ expect(asFragment()).toMatchSnapshot();
+});
\ No newline at end of file
diff --git a/client/src/__tests__/components/GiftTemplate/templates/ShortAnswer.test.tsx b/client/src/__tests__/components/GiftTemplate/templates/ShortAnswer.test.tsx
index 626389c..1a84fa9 100644
--- a/client/src/__tests__/components/GiftTemplate/templates/ShortAnswer.test.tsx
+++ b/client/src/__tests__/components/GiftTemplate/templates/ShortAnswer.test.tsx
@@ -32,12 +32,26 @@ const moodleMock: TemplateOptions & ShortAnswerType = {
title: 'Sample Short Answer Title',
stem: { format: 'moodle', text: 'Sample Stem' },
choices: [
- { text: { format: 'plain' , text: 'Answer 1'}, isCorrect: true, feedback: { format: 'plain' , text: 'Correct!'}, weight: 1 },
- { text: { format: 'plain' , text: 'Answer 2'}, isCorrect: true, feedback: { format: 'plain' , text: 'Correct!'}, weight: 1 }
+ { text: { format: 'moodle' , text: 'Answer 1'}, isCorrect: true, feedback: { format: 'plain' , text: 'Correct!'}, weight: 1 },
+ { text: { format: 'moodle' , text: 'Answer 2'}, isCorrect: true, feedback: { format: 'plain' , text: 'Correct!'}, weight: 1 }
],
globalFeedback: { format: 'moodle', text: 'Sample Global Feedback' }
};
+const imageMock: TemplateOptions & ShortAnswerType = {
+ type: 'Short',
+ hasEmbeddedAnswers: false,
+ title: 'Sample Short Answer Title with Image',
+ stem: { format: 'markdown', text: 'Sample Stem with Image' },
+ choices: [
+ { text: { format: 'markdown', text: 'Answer 1' }, isCorrect: true, feedback: { format: 'plain', text: 'Correct!' }, weight: 1 },
+ { text: { format: 'markdown', text: 'Answer 2' }, isCorrect: true, feedback: { format: 'plain', text: 'Correct!' }, weight: 1 },
+ { text: { format: 'markdown', text: '
' }, isCorrect: true, feedback: { format: 'plain', text: 'Correct!' }, weight: 1 }
+ ],
+ globalFeedback: { format: 'plain', text: 'Sample Global Feedback with Image' }
+};
+
+
test('ShortAnswer snapshot test with plain text', () => {
const { asFragment } = render();
expect(asFragment()).toMatchSnapshot();
@@ -51,4 +65,9 @@ test('ShortAnswer snapshot test with katex', () => {
test('ShortAnswer snapshot test with moodle', () => {
const { asFragment } = render();
expect(asFragment()).toMatchSnapshot();
+});
+
+test('ShortAnswer snapshot test with image', () => {
+ const { asFragment } = render();
+ expect(asFragment()).toMatchSnapshot();
});
\ No newline at end of file
diff --git a/client/src/__tests__/components/GiftTemplate/templates/TrueFalse.test.tsx b/client/src/__tests__/components/GiftTemplate/templates/TrueFalse.test.tsx
index 69cd3e7..6d3a93a 100644
--- a/client/src/__tests__/components/GiftTemplate/templates/TrueFalse.test.tsx
+++ b/client/src/__tests__/components/GiftTemplate/templates/TrueFalse.test.tsx
@@ -35,6 +35,17 @@ const moodleMock: TemplateOptions & TrueFalseType = {
globalFeedback: { format: 'moodle', text: 'Sample Global Feedback' }
};
+const imageMock: TemplateOptions & TrueFalseType = {
+ type: 'TF',
+ hasEmbeddedAnswers: false,
+ title: 'Sample Short Answer Title with Image',
+ stem: { format: 'plain', text: 'Sample Stem with Image' },
+ trueFeedback: { format: 'moodle', text: 'Correct!' },
+ isTrue: true,
+ falseFeedback: { format: 'moodle', text: 'Incorrect!' },
+ globalFeedback: { format: 'plain', text: '
' }
+};
+
test('TrueFalse snapshot test with plain text', () => {
const { asFragment } = render();
expect(asFragment()).toMatchSnapshot();
@@ -48,4 +59,9 @@ test('TrueFalse snapshot test with katex', () => {
test('TrueFalse snapshot test with moodle', () => {
const { asFragment } = render();
expect(asFragment()).toMatchSnapshot();
+});
+
+test('TrueFalse snapshot test with image', () => {
+ const { asFragment } = render();
+ expect(asFragment()).toMatchSnapshot();
});
\ No newline at end of file
diff --git a/client/src/__tests__/components/GiftTemplate/templates/__snapshots__/MultipleChoice.test.tsx.snap b/client/src/__tests__/components/GiftTemplate/templates/__snapshots__/MultipleChoice.test.tsx.snap
index 75e7226..ab25b5e 100644
--- a/client/src/__tests__/components/GiftTemplate/templates/__snapshots__/MultipleChoice.test.tsx.snap
+++ b/client/src/__tests__/components/GiftTemplate/templates/__snapshots__/MultipleChoice.test.tsx.snap
@@ -44,7 +44,7 @@ exports[`MultipleChoice snapshot test 1`] = `
color: hsl(0, 0%, 0%);
">Choisir une réponse:</span>
<div class='multiple-choice-answers-container'>
- <input class="gift-input" type="radio" id="ideNwBGu" name="id2CCZVRT9">
+ <input class="gift-input" type="radio" id="idY6sLQS" name="idYcbBS3PT">
<span style="
box-shadow: 0px 1px 1px hsl(0, 0%, 74%);
border-radius: 3px;
@@ -61,7 +61,7 @@ exports[`MultipleChoice snapshot test 1`] = `
padding: 0.2em 0 0.2em 0;
color: hsl(0, 0%, 0%);
-" for="ideNwBGu">
+" for="idY6sLQS">
Choice 1
</label>
<svg style="
@@ -80,7 +80,7 @@ exports[`MultipleChoice snapshot test 1`] = `
</div>
<div class='multiple-choice-answers-container'>
- <input class="gift-input" type="radio" id="idGR2h1H" name="id2CCZVRT9">
+ <input class="gift-input" type="radio" id="ida41-A1" name="idYcbBS3PT">
<span style="
box-shadow: 0px 1px 1px hsl(0, 0%, 74%);
border-radius: 3px;
@@ -97,7 +97,7 @@ exports[`MultipleChoice snapshot test 1`] = `
padding: 0.2em 0 0.2em 0;
color: hsl(0, 0%, 0%);
-" for="idGR2h1H">
+" for="ida41-A1">
Choice 2
</label>
<svg style="
@@ -173,7 +173,7 @@ exports[`MultipleChoice snapshot test with 2 images using markdown text format 1
color: hsl(0, 0%, 0%);
">Choisir une réponse:</span>
<div class='multiple-choice-answers-container'>
- <input class="gift-input" type="radio" id="id57MvEd" name="idQ_whKmSd">
+ <input class="gift-input" type="radio" id="idRndLXH" name="id41Q3iM9t">
<span style="
box-shadow: 0px 1px 1px hsl(0, 0%, 74%);
border-radius: 3px;
@@ -190,7 +190,7 @@ exports[`MultipleChoice snapshot test with 2 images using markdown text format 1
padding: 0.2em 0 0.2em 0;
color: hsl(0, 0%, 0%);
-" for="id57MvEd">
+" for="idRndLXH">
Choice 1
</label>
@@ -210,7 +210,7 @@ exports[`MultipleChoice snapshot test with 2 images using markdown text format 1
</div>
<div class='multiple-choice-answers-container'>
- <input class="gift-input" type="radio" id="idZ1O9uM" name="idQ_whKmSd">
+ <input class="gift-input" type="radio" id="id9so1y3" name="id41Q3iM9t">
<span style="
box-shadow: 0px 1px 1px hsl(0, 0%, 74%);
border-radius: 3px;
@@ -227,7 +227,7 @@ exports[`MultipleChoice snapshot test with 2 images using markdown text format 1
padding: 0.2em 0 0.2em 0;
color: hsl(0, 0%, 0%);
-" for="idZ1O9uM">
+" for="id9so1y3">
Choice 2
</label>
@@ -247,7 +247,7 @@ exports[`MultipleChoice snapshot test with 2 images using markdown text format 1
</div>
<div class='multiple-choice-answers-container'>
- <input class="gift-input" type="radio" id="idJ4Wzh2" name="idQ_whKmSd">
+ <input class="gift-input" type="radio" id="idyhlQbI" name="id41Q3iM9t">
<span style="
box-shadow: 0px 1px 1px hsl(0, 0%, 74%);
border-radius: 3px;
@@ -264,7 +264,7 @@ exports[`MultipleChoice snapshot test with 2 images using markdown text format 1
padding: 0.2em 0 0.2em 0;
color: hsl(0, 0%, 0%);
-" for="idJ4Wzh2">
+" for="idyhlQbI">
<img src="https://via.placeholder.com/150" alt="Sample Image" />
</label>
<svg style="
@@ -341,7 +341,7 @@ exports[`MultipleChoice snapshot test with Moodle text format 1`] = `
color: hsl(0, 0%, 0%);
">Choisir une réponse:</span>
<div class='multiple-choice-answers-container'>
- <input class="gift-input" type="radio" id="idmWstm6" name="idhXDZKhP7">
+ <input class="gift-input" type="radio" id="idOkvGfv" name="idG7FzhlwG">
<span style="
box-shadow: 0px 1px 1px hsl(0, 0%, 74%);
border-radius: 3px;
@@ -358,7 +358,7 @@ exports[`MultipleChoice snapshot test with Moodle text format 1`] = `
padding: 0.2em 0 0.2em 0;
color: hsl(0, 0%, 0%);
-" for="idmWstm6">
+" for="idOkvGfv">
Choice 1
</label>
<svg style="
@@ -377,7 +377,7 @@ exports[`MultipleChoice snapshot test with Moodle text format 1`] = `
</div>
<div class='multiple-choice-answers-container'>
- <input class="gift-input" type="radio" id="id7sfVHd" name="idhXDZKhP7">
+ <input class="gift-input" type="radio" id="idWc4Fdg" name="idG7FzhlwG">
<span style="
box-shadow: 0px 1px 1px hsl(0, 0%, 74%);
border-radius: 3px;
@@ -394,7 +394,7 @@ exports[`MultipleChoice snapshot test with Moodle text format 1`] = `
padding: 0.2em 0 0.2em 0;
color: hsl(0, 0%, 0%);
-" for="id7sfVHd">
+" for="idWc4Fdg">
Choice 2
</label>
<svg style="
@@ -470,7 +470,7 @@ exports[`MultipleChoice snapshot test with image 1`] = `
color: hsl(0, 0%, 0%);
">Choisir une réponse:</span>
<div class='multiple-choice-answers-container'>
- <input class="gift-input" type="radio" id="idYcIYQH" name="id4wrZpxqV">
+ <input class="gift-input" type="radio" id="idtg_4sy" name="idtYfkT0sj">
<span style="
box-shadow: 0px 1px 1px hsl(0, 0%, 74%);
border-radius: 3px;
@@ -487,7 +487,7 @@ exports[`MultipleChoice snapshot test with image 1`] = `
padding: 0.2em 0 0.2em 0;
color: hsl(0, 0%, 0%);
-" for="idYcIYQH">
+" for="idtg_4sy">
Choice 1
</label>
<svg style="
@@ -506,7 +506,7 @@ exports[`MultipleChoice snapshot test with image 1`] = `
</div>
<div class='multiple-choice-answers-container'>
- <input class="gift-input" type="radio" id="id2Vhlzo" name="id4wrZpxqV">
+ <input class="gift-input" type="radio" id="idsl9DOz" name="idtYfkT0sj">
<span style="
box-shadow: 0px 1px 1px hsl(0, 0%, 74%);
border-radius: 3px;
@@ -523,7 +523,7 @@ exports[`MultipleChoice snapshot test with image 1`] = `
padding: 0.2em 0 0.2em 0;
color: hsl(0, 0%, 0%);
-" for="id2Vhlzo">
+" for="idsl9DOz">
Choice 2
</label>
<svg style="
@@ -542,7 +542,7 @@ exports[`MultipleChoice snapshot test with image 1`] = `
</div>
<div class='multiple-choice-answers-container'>
- <input class="gift-input" type="radio" id="idz87odw" name="id4wrZpxqV">
+ <input class="gift-input" type="radio" id="idPEStwV" name="idtYfkT0sj">
<span style="
box-shadow: 0px 1px 1px hsl(0, 0%, 74%);
border-radius: 3px;
@@ -559,7 +559,7 @@ exports[`MultipleChoice snapshot test with image 1`] = `
padding: 0.2em 0 0.2em 0;
color: hsl(0, 0%, 0%);
-" for="idz87odw">
+" for="idPEStwV">
<img src="https://via.placeholder.com/150" alt="Sample Image" />
</label>
<svg style="
@@ -636,7 +636,7 @@ exports[`MultipleChoice snapshot test with image using markdown text format 1`]
color: hsl(0, 0%, 0%);
">Choisir une réponse:</span>
<div class='multiple-choice-answers-container'>
- <input class="gift-input" type="radio" id="idGnTXOs" name="idy3Mbb-wN">
+ <input class="gift-input" type="radio" id="idfcMRhV" name="idIpMjpvV3">
<span style="
box-shadow: 0px 1px 1px hsl(0, 0%, 74%);
border-radius: 3px;
@@ -653,7 +653,7 @@ exports[`MultipleChoice snapshot test with image using markdown text format 1`]
padding: 0.2em 0 0.2em 0;
color: hsl(0, 0%, 0%);
-" for="idGnTXOs">
+" for="idfcMRhV">
Choice 1
</label>
@@ -673,7 +673,7 @@ exports[`MultipleChoice snapshot test with image using markdown text format 1`]
</div>
<div class='multiple-choice-answers-container'>
- <input class="gift-input" type="radio" id="id4cQyMJ" name="idy3Mbb-wN">
+ <input class="gift-input" type="radio" id="idS15bbw" name="idIpMjpvV3">
<span style="
box-shadow: 0px 1px 1px hsl(0, 0%, 74%);
border-radius: 3px;
@@ -690,7 +690,7 @@ exports[`MultipleChoice snapshot test with image using markdown text format 1`]
padding: 0.2em 0 0.2em 0;
color: hsl(0, 0%, 0%);
-" for="id4cQyMJ">
+" for="idS15bbw">
Choice 2
</label>
@@ -710,7 +710,7 @@ exports[`MultipleChoice snapshot test with image using markdown text format 1`]
</div>
<div class='multiple-choice-answers-container'>
- <input class="gift-input" type="radio" id="ideT1A0q" name="idy3Mbb-wN">
+ <input class="gift-input" type="radio" id="id5hwUQu" name="idIpMjpvV3">
<span style="
box-shadow: 0px 1px 1px hsl(0, 0%, 74%);
border-radius: 3px;
@@ -727,7 +727,7 @@ exports[`MultipleChoice snapshot test with image using markdown text format 1`]
padding: 0.2em 0 0.2em 0;
color: hsl(0, 0%, 0%);
-" for="ideT1A0q">
+" for="id5hwUQu">
<img src="https://via.placeholder.com/150" alt="Sample Image" />
</label>
<svg style="
@@ -804,7 +804,7 @@ exports[`MultipleChoice snapshot test with katex 1`] = `
color: hsl(0, 0%, 0%);
">Choisir une réponse:</span>
<div class='multiple-choice-answers-container'>
- <input class="gift-input" type="radio" id="idNwG_aI" name="idir2jT135">
+ <input class="gift-input" type="radio" id="id_8Kbh1" name="idwLkHBxIV">
<span style="
box-shadow: 0px 1px 1px hsl(0, 0%, 74%);
border-radius: 3px;
@@ -821,7 +821,7 @@ exports[`MultipleChoice snapshot test with katex 1`] = `
padding: 0.2em 0 0.2em 0;
color: hsl(0, 0%, 0%);
-" for="idNwG_aI">
+" for="id_8Kbh1">
Choice 1
</label>
<svg style="
@@ -840,7 +840,7 @@ exports[`MultipleChoice snapshot test with katex 1`] = `
</div>
<div class='multiple-choice-answers-container'>
- <input class="gift-input" type="radio" id="idbqDUYQ" name="idir2jT135">
+ <input class="gift-input" type="radio" id="idmmZ__M" name="idwLkHBxIV">
<span style="
box-shadow: 0px 1px 1px hsl(0, 0%, 74%);
border-radius: 3px;
@@ -849,15 +849,15 @@ exports[`MultipleChoice snapshot test with katex 1`] = `
padding-top: 0.05rem;
padding-bottom: 0.05rem;
- color: hsl(35, 51%, 33%);
- background-color: hsl(36, 84%, 93%);
- ">1%</span>
+ color: hsl(134, 31%, 32%);
+ background-color: hsl(134, 68%, 95%);
+ ">1%</span>
<label style="
display: inline-block;
padding: 0.2em 0 0.2em 0;
color: hsl(0, 0%, 0%);
-" for="idbqDUYQ">
+" for="idmmZ__M">
Choice 2
</label>
<svg style="
@@ -866,12 +866,12 @@ exports[`MultipleChoice snapshot test with katex 1`] = `
margin-left: 0.1rem;
margin-right: 0.2rem;
- width: 0.75em;
- color: hsl(2, 64%, 58%);
- " role="img" aria-hidden="true" focusable="false" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 352 512"><path fill="currentColor" d="M242.72 256l100.07-100.07c12.28-12.28 12.28-32.19 0-44.48l-22.24-22.24c-12.28-12.28-32.19-12.28-44.48 0L176 189.28 75.93 89.21c-12.28-12.28-32.19-12.28-44.48 0L9.21 111.45c-12.28 12.28-12.28 32.19 0 44.48L109.28 256 9.21 356.07c-12.28 12.28-12.28 32.19 0 44.48l22.24 22.24c12.28 12.28 32.2 12.28 44.48 0L176 322.72l100.07 100.07c12.28 12.28 32.2 12.28 44.48 0l22.24-22.24c12.28-12.28 12.28-32.19 0-44.48L242.72 256z"></path></svg>
+ width: 1em;
+ color: hsl(120, 39%, 54%);
+ " role="img" aria-hidden="true" focusable="false" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path fill="currentColor" d="M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z"></path></svg>
<span style="
color: hsl(180, 15%, 41%);
- ">InCorrect!</span>
+ ">Correct!</span>
</input>
</div>
<div style="
@@ -933,7 +933,7 @@ exports[`MultipleChoice snapshot test with katex, using html text format 1`] = `
color: hsl(0, 0%, 0%);
">Choisir une réponse:</span>
<div class='multiple-choice-answers-container'>
- <input class="gift-input" type="radio" id="idhrJmYd" name="idiA6lal3j">
+ <input class="gift-input" type="radio" id="idmhYkGR" name="id7uMk4tB5">
<span style="
box-shadow: 0px 1px 1px hsl(0, 0%, 74%);
border-radius: 3px;
@@ -950,7 +950,7 @@ exports[`MultipleChoice snapshot test with katex, using html text format 1`] = `
padding: 0.2em 0 0.2em 0;
color: hsl(0, 0%, 0%);
-" for="idhrJmYd">
+" for="idmhYkGR">
Choice 1
</label>
<svg style="
@@ -969,7 +969,7 @@ exports[`MultipleChoice snapshot test with katex, using html text format 1`] = `
</div>
<div class='multiple-choice-answers-container'>
- <input class="gift-input" type="radio" id="idxZUKMy" name="idiA6lal3j">
+ <input class="gift-input" type="radio" id="idvT6Xg7" name="id7uMk4tB5">
<span style="
box-shadow: 0px 1px 1px hsl(0, 0%, 74%);
border-radius: 3px;
@@ -986,7 +986,7 @@ exports[`MultipleChoice snapshot test with katex, using html text format 1`] = `
padding: 0.2em 0 0.2em 0;
color: hsl(0, 0%, 0%);
-" for="idxZUKMy">
+" for="idvT6Xg7">
Choice 2
</label>
<svg style="
diff --git a/client/src/__tests__/components/GiftTemplate/templates/__snapshots__/Numerical.test.tsx.snap b/client/src/__tests__/components/GiftTemplate/templates/__snapshots__/Numerical.test.tsx.snap
new file mode 100644
index 0000000..20ae2b9
--- /dev/null
+++ b/client/src/__tests__/components/GiftTemplate/templates/__snapshots__/Numerical.test.tsx.snap
@@ -0,0 +1,301 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`Numerical snapshot test with html 1`] = `
+
+ <section style="
+ flex-wrap: wrap;
+ position: relative;
+ padding: 1rem 1rem;
+ margin-bottom: 0.5rem;
+ background-color: hsl(0, 0%, 100%);
+ border: solid hsl(0, 0%, 100%) 2px;
+ border-radius: 6px;
+ box-shadow: 0px 1px 3px hsl(0, 0%, 74%);
+">
+ <div style="
+ display: flex;
+ font-weight: bold;
+">
+ <span>
+ <span style="
+ color: #5271FF;
+ ">Sample Numerical Title</span>
+ </span>
+ <span style="
+ margin-left: auto;
+ padding-left: 0.75rem;
+ flex: none;
+ margin-bottom: 10px;">
+ <span style="
+ box-shadow: 0px 1px 3px hsl(0, 0%, 74%);
+ padding-left: 0.7rem;
+ padding-right: 0.7rem;
+ padding-top: 0.4rem;
+ padding-bottom: 0.4rem;
+ border-radius: 4px;
+ background-color: hsl(0, 0%, 100%);
+ color: hsl(180, 15%, 41%);
+">Numérique</span>
+ </span>
+ </div>
+<p style="
+ color: hsl(0, 0%, 0%);
+"><span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><mfrac><mrow><mi>z</mi><mi>z</mi><mi>z</mi></mrow><mrow><mi>y</mi><mi>y</mi><mi>y</mi></mrow></mfrac></mrow><annotation encoding="application/x-tex">\\frac{zzz}{yyy}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1.988em;vertical-align:-0.8804em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.1076em;"><span style="top:-2.314em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.03588em;">yyy</span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.677em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.04398em;">zzz</span></span></span></span><span class="vlist-s"></span></span><span class="vlist-r"><span class="vlist" style="height:0.8804em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span></span></span></span></span></p>
+ <div>
+ <span style="
+ color: hsl(0, 0%, 0%);
+">Réponse: </span><input class="gift-input" type="text" style="
+ display: inline-block;
+ padding: 0.375rem 0.75rem;
+ line-height: 1.5;
+ color: hsl(0, 0%, 16%);
+ background-color: hsl(0, 0%, 100%);
+ border: 1px solid hsl(0, 0%, 81%);
+ border-radius: 0.25rem;
+ box-shadow: rgba(0, 0, 0, 0.05) 0px 1px 2px 0px;
+ margin: 0;
+ font-family: inherit;
+ font-size: inherit;
+ line-height: inherit;
+ width: 90%;
+" placeholder="42, 43">
+ </div>
+ <div style="
+ position: relative;
+ margin-top: 1rem;
+ padding: 0 1rem;
+ background-color: hsl(43, 100%, 94%);
+ color: hsl(43, 95%, 9%);
+ border: hsl(36, 84%, 93%) 1px solid;
+ border-radius: 6px;
+ box-shadow: 0px 2px 5px hsl(0, 0%, 74%);
+">
+ <p>Sample Global Feedback</p>
+ </div></section>
+
+`;
+
+exports[`Numerical snapshot test with image 1`] = `
+
+ <section style="
+ flex-wrap: wrap;
+ position: relative;
+ padding: 1rem 1rem;
+ margin-bottom: 0.5rem;
+ background-color: hsl(0, 0%, 100%);
+ border: solid hsl(0, 0%, 100%) 2px;
+ border-radius: 6px;
+ box-shadow: 0px 1px 3px hsl(0, 0%, 74%);
+">
+ <div style="
+ display: flex;
+ font-weight: bold;
+">
+ <span>
+ <span style="
+ color: #5271FF;
+ ">Sample Numerical Title with Image</span>
+ </span>
+ <span style="
+ margin-left: auto;
+ padding-left: 0.75rem;
+ flex: none;
+ margin-bottom: 10px;">
+ <span style="
+ box-shadow: 0px 1px 3px hsl(0, 0%, 74%);
+ padding-left: 0.7rem;
+ padding-right: 0.7rem;
+ padding-top: 0.4rem;
+ padding-bottom: 0.4rem;
+ border-radius: 4px;
+ background-color: hsl(0, 0%, 100%);
+ color: hsl(180, 15%, 41%);
+">Numérique</span>
+ </span>
+ </div>
+<p style="
+ color: hsl(0, 0%, 0%);
+">Sample Stem with Image</p>
+ <div>
+ <span style="
+ color: hsl(0, 0%, 0%);
+">Réponse: </span><input class="gift-input" type="text" style="
+ display: inline-block;
+ padding: 0.375rem 0.75rem;
+ line-height: 1.5;
+ color: hsl(0, 0%, 16%);
+ background-color: hsl(0, 0%, 100%);
+ border: 1px solid hsl(0, 0%, 81%);
+ border-radius: 0.25rem;
+ box-shadow: rgba(0, 0, 0, 0.05) 0px 1px 2px 0px;
+ margin: 0;
+ font-family: inherit;
+ font-size: inherit;
+ line-height: inherit;
+ width: 90%;
+" placeholder="42, 43, 44">
+ </div>
+ <div style="
+ position: relative;
+ margin-top: 1rem;
+ padding: 0 1rem;
+ background-color: hsl(43, 100%, 94%);
+ color: hsl(43, 95%, 9%);
+ border: hsl(36, 84%, 93%) 1px solid;
+ border-radius: 6px;
+ box-shadow: 0px 2px 5px hsl(0, 0%, 74%);
+">
+ <p>Sample Global Feedback with Image</p>
+ </div></section>
+
+`;
+
+exports[`Numerical snapshot test with moodle 1`] = `
+
+ <section style="
+ flex-wrap: wrap;
+ position: relative;
+ padding: 1rem 1rem;
+ margin-bottom: 0.5rem;
+ background-color: hsl(0, 0%, 100%);
+ border: solid hsl(0, 0%, 100%) 2px;
+ border-radius: 6px;
+ box-shadow: 0px 1px 3px hsl(0, 0%, 74%);
+">
+ <div style="
+ display: flex;
+ font-weight: bold;
+">
+ <span>
+ <span style="
+ color: #5271FF;
+ ">Sample Numerical Title</span>
+ </span>
+ <span style="
+ margin-left: auto;
+ padding-left: 0.75rem;
+ flex: none;
+ margin-bottom: 10px;">
+ <span style="
+ box-shadow: 0px 1px 3px hsl(0, 0%, 74%);
+ padding-left: 0.7rem;
+ padding-right: 0.7rem;
+ padding-top: 0.4rem;
+ padding-bottom: 0.4rem;
+ border-radius: 4px;
+ background-color: hsl(0, 0%, 100%);
+ color: hsl(180, 15%, 41%);
+">Numérique</span>
+ </span>
+ </div>
+<p style="
+ color: hsl(0, 0%, 0%);
+">Sample Stem</p>
+ <div>
+ <span style="
+ color: hsl(0, 0%, 0%);
+">Réponse: </span><input class="gift-input" type="text" style="
+ display: inline-block;
+ padding: 0.375rem 0.75rem;
+ line-height: 1.5;
+ color: hsl(0, 0%, 16%);
+ background-color: hsl(0, 0%, 100%);
+ border: 1px solid hsl(0, 0%, 81%);
+ border-radius: 0.25rem;
+ box-shadow: rgba(0, 0, 0, 0.05) 0px 1px 2px 0px;
+ margin: 0;
+ font-family: inherit;
+ font-size: inherit;
+ line-height: inherit;
+ width: 90%;
+" placeholder="42, 43">
+ </div>
+ <div style="
+ position: relative;
+ margin-top: 1rem;
+ padding: 0 1rem;
+ background-color: hsl(43, 100%, 94%);
+ color: hsl(43, 95%, 9%);
+ border: hsl(36, 84%, 93%) 1px solid;
+ border-radius: 6px;
+ box-shadow: 0px 2px 5px hsl(0, 0%, 74%);
+">
+ <p>Sample Global Feedback</p>
+ </div></section>
+
+`;
+
+exports[`Numerical snapshot test with plain text 1`] = `
+
+ <section style="
+ flex-wrap: wrap;
+ position: relative;
+ padding: 1rem 1rem;
+ margin-bottom: 0.5rem;
+ background-color: hsl(0, 0%, 100%);
+ border: solid hsl(0, 0%, 100%) 2px;
+ border-radius: 6px;
+ box-shadow: 0px 1px 3px hsl(0, 0%, 74%);
+">
+ <div style="
+ display: flex;
+ font-weight: bold;
+">
+ <span>
+ <span style="
+ color: #5271FF;
+ ">Sample Numerical Title</span>
+ </span>
+ <span style="
+ margin-left: auto;
+ padding-left: 0.75rem;
+ flex: none;
+ margin-bottom: 10px;">
+ <span style="
+ box-shadow: 0px 1px 3px hsl(0, 0%, 74%);
+ padding-left: 0.7rem;
+ padding-right: 0.7rem;
+ padding-top: 0.4rem;
+ padding-bottom: 0.4rem;
+ border-radius: 4px;
+ background-color: hsl(0, 0%, 100%);
+ color: hsl(180, 15%, 41%);
+">Numérique</span>
+ </span>
+ </div>
+<p style="
+ color: hsl(0, 0%, 0%);
+">Sample Stem</p>
+ <div>
+ <span style="
+ color: hsl(0, 0%, 0%);
+">Réponse: </span><input class="gift-input" type="text" style="
+ display: inline-block;
+ padding: 0.375rem 0.75rem;
+ line-height: 1.5;
+ color: hsl(0, 0%, 16%);
+ background-color: hsl(0, 0%, 100%);
+ border: 1px solid hsl(0, 0%, 81%);
+ border-radius: 0.25rem;
+ box-shadow: rgba(0, 0, 0, 0.05) 0px 1px 2px 0px;
+ margin: 0;
+ font-family: inherit;
+ font-size: inherit;
+ line-height: inherit;
+ width: 90%;
+" placeholder="42, 43">
+ </div>
+ <div style="
+ position: relative;
+ margin-top: 1rem;
+ padding: 0 1rem;
+ background-color: hsl(43, 100%, 94%);
+ color: hsl(43, 95%, 9%);
+ border: hsl(36, 84%, 93%) 1px solid;
+ border-radius: 6px;
+ box-shadow: 0px 2px 5px hsl(0, 0%, 74%);
+">
+ <p>Sample Global Feedback</p>
+ </div></section>
+
+`;
diff --git a/client/src/__tests__/components/GiftTemplate/templates/__snapshots__/ShortAnswer.test.tsx.snap b/client/src/__tests__/components/GiftTemplate/templates/__snapshots__/ShortAnswer.test.tsx.snap
index 9646352..6204be4 100644
--- a/client/src/__tests__/components/GiftTemplate/templates/__snapshots__/ShortAnswer.test.tsx.snap
+++ b/client/src/__tests__/components/GiftTemplate/templates/__snapshots__/ShortAnswer.test.tsx.snap
@@ -1,5 +1,83 @@
// Jest Snapshot v1, https://goo.gl/fbAQLP
+exports[`ShortAnswer snapshot test with image 1`] = `
+
+ <section style="
+ flex-wrap: wrap;
+ position: relative;
+ padding: 1rem 1rem;
+ margin-bottom: 0.5rem;
+ background-color: hsl(0, 0%, 100%);
+ border: solid hsl(0, 0%, 100%) 2px;
+ border-radius: 6px;
+ box-shadow: 0px 1px 3px hsl(0, 0%, 74%);
+">
+ <div style="
+ display: flex;
+ font-weight: bold;
+">
+ <span>
+ <span style="
+ color: #5271FF;
+ ">Sample Short Answer Title with Image</span>
+ </span>
+ <span style="
+ margin-left: auto;
+ padding-left: 0.75rem;
+ flex: none;
+ margin-bottom: 10px;">
+ <span style="
+ box-shadow: 0px 1px 3px hsl(0, 0%, 74%);
+ padding-left: 0.7rem;
+ padding-right: 0.7rem;
+ padding-top: 0.4rem;
+ padding-bottom: 0.4rem;
+ border-radius: 4px;
+ background-color: hsl(0, 0%, 100%);
+ color: hsl(180, 15%, 41%);
+">Réponse courte</span>
+ </span>
+ </div>
+<p style="
+ color: hsl(0, 0%, 0%);
+">Sample Stem with Image
+</p>
+ <div>
+ <span style="
+ color: hsl(0, 0%, 0%);
+">Réponse: </span><input class="gift-input" type="text" style="
+ display: inline-block;
+ padding: 0.375rem 0.75rem;
+ line-height: 1.5;
+ color: hsl(0, 0%, 16%);
+ background-color: hsl(0, 0%, 100%);
+ border: 1px solid hsl(0, 0%, 81%);
+ border-radius: 0.25rem;
+ box-shadow: rgba(0, 0, 0, 0.05) 0px 1px 2px 0px;
+ margin: 0;
+ font-family: inherit;
+ font-size: inherit;
+ line-height: inherit;
+ width: 90%;
+" placeholder="Answer 1
+, Answer 2
+, <img src="https://via.placeholder.com/150" alt="Sample Image" />">
+ </div>
+ <div style="
+ position: relative;
+ margin-top: 1rem;
+ padding: 0 1rem;
+ background-color: hsl(43, 100%, 94%);
+ color: hsl(43, 95%, 9%);
+ border: hsl(36, 84%, 93%) 1px solid;
+ border-radius: 6px;
+ box-shadow: 0px 2px 5px hsl(0, 0%, 74%);
+">
+ <p>Sample Global Feedback with Image</p>
+ </div></section>
+
+`;
+
exports[`ShortAnswer snapshot test with katex 1`] = `
<section style="
diff --git a/client/src/__tests__/components/GiftTemplate/templates/__snapshots__/TrueFalse.test.tsx.snap b/client/src/__tests__/components/GiftTemplate/templates/__snapshots__/TrueFalse.test.tsx.snap
index 8d914d8..7003dac 100644
--- a/client/src/__tests__/components/GiftTemplate/templates/__snapshots__/TrueFalse.test.tsx.snap
+++ b/client/src/__tests__/components/GiftTemplate/templates/__snapshots__/TrueFalse.test.tsx.snap
@@ -1,5 +1,114 @@
// Jest Snapshot v1, https://goo.gl/fbAQLP
+exports[`TrueFalse snapshot test with image 1`] = `
+
+ <section style="
+ flex-wrap: wrap;
+ position: relative;
+ padding: 1rem 1rem;
+ margin-bottom: 0.5rem;
+ background-color: hsl(0, 0%, 100%);
+ border: solid hsl(0, 0%, 100%) 2px;
+ border-radius: 6px;
+ box-shadow: 0px 1px 3px hsl(0, 0%, 74%);
+">
+ <div style="
+ display: flex;
+ font-weight: bold;
+">
+ <span>
+ <span style="
+ color: #5271FF;
+ ">Sample Short Answer Title with Image</span>
+ </span>
+ <span style="
+ margin-left: auto;
+ padding-left: 0.75rem;
+ flex: none;
+ margin-bottom: 10px;">
+ <span style="
+ box-shadow: 0px 1px 3px hsl(0, 0%, 74%);
+ padding-left: 0.7rem;
+ padding-right: 0.7rem;
+ padding-top: 0.4rem;
+ padding-bottom: 0.4rem;
+ border-radius: 4px;
+ background-color: hsl(0, 0%, 100%);
+ color: hsl(180, 15%, 41%);
+">Vrai/Faux</span>
+ </span>
+ </div>
+<p style="
+ color: hsl(0, 0%, 0%);
+">Sample Stem with Image</p><span style="
+ color: hsl(0, 0%, 0%);
+">Choisir une réponse:</span>
+ <div class='multiple-choice-answers-container'>
+ <input class="gift-input" type="radio" id="idgpc2Rm" name="idrK_AqV9h">
+
+ <label style="
+ display: inline-block;
+ padding: 0.2em 0 0.2em 0;
+
+ color: hsl(0, 0%, 0%);
+" for="idgpc2Rm">
+ Vrai
+ </label>
+ <svg style="
+ vertical-align: text-bottom;
+ display: inline-block;
+ margin-left: 0.1rem;
+ margin-right: 0.2rem;
+
+ width: 1em;
+ color: hsl(120, 39%, 54%);
+ " role="img" aria-hidden="true" focusable="false" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path fill="currentColor" d="M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z"></path></svg>
+ <span style="
+ color: hsl(180, 15%, 41%);
+ ">Correct!</span>
+ </input>
+ </div>
+
+ <div class='multiple-choice-answers-container'>
+ <input class="gift-input" type="radio" id="idQF-GNQ" name="idrK_AqV9h">
+
+ <label style="
+ display: inline-block;
+ padding: 0.2em 0 0.2em 0;
+
+ color: hsl(0, 0%, 0%);
+" for="idQF-GNQ">
+ Faux
+ </label>
+ <svg style="
+ vertical-align: text-bottom;
+ display: inline-block;
+ margin-left: 0.1rem;
+ margin-right: 0.2rem;
+
+ width: 0.75em;
+ color: hsl(2, 64%, 58%);
+ " role="img" aria-hidden="true" focusable="false" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 352 512"><path fill="currentColor" d="M242.72 256l100.07-100.07c12.28-12.28 12.28-32.19 0-44.48l-22.24-22.24c-12.28-12.28-32.19-12.28-44.48 0L176 189.28 75.93 89.21c-12.28-12.28-32.19-12.28-44.48 0L9.21 111.45c-12.28 12.28-12.28 32.19 0 44.48L109.28 256 9.21 356.07c-12.28 12.28-12.28 32.19 0 44.48l22.24 22.24c12.28 12.28 32.2 12.28 44.48 0L176 322.72l100.07 100.07c12.28 12.28 32.2 12.28 44.48 0l22.24-22.24c12.28-12.28 12.28-32.19 0-44.48L242.72 256z"></path></svg>
+ <span style="
+ color: hsl(180, 15%, 41%);
+ ">Incorrect!</span>
+ </input>
+ </div>
+ <div style="
+ position: relative;
+ margin-top: 1rem;
+ padding: 0 1rem;
+ background-color: hsl(43, 100%, 94%);
+ color: hsl(43, 95%, 9%);
+ border: hsl(36, 84%, 93%) 1px solid;
+ border-radius: 6px;
+ box-shadow: 0px 2px 5px hsl(0, 0%, 74%);
+">
+ <p><img src="https://via.placeholder.com/150" alt="Sample Image" /></p>
+ </div></section>
+
+`;
+
exports[`TrueFalse snapshot test with katex 1`] = `
<section style="
@@ -44,14 +153,14 @@ exports[`TrueFalse snapshot test with katex 1`] = `
color: hsl(0, 0%, 0%);
">Choisir une réponse:</span>
<div class='multiple-choice-answers-container'>
- <input class="gift-input" type="radio" id="idJPS1EM" name="idpM8HEdsR">
+ <input class="gift-input" type="radio" id="idHBTzQU" name="idA0BQMs9B">
<label style="
display: inline-block;
padding: 0.2em 0 0.2em 0;
color: hsl(0, 0%, 0%);
-" for="idJPS1EM">
+" for="idHBTzQU">
Vrai
</label>
<svg style="
@@ -70,14 +179,14 @@ exports[`TrueFalse snapshot test with katex 1`] = `
</div>
<div class='multiple-choice-answers-container'>
- <input class="gift-input" type="radio" id="id_-5rkc" name="idpM8HEdsR">
+ <input class="gift-input" type="radio" id="idYE-crD" name="idA0BQMs9B">
<label style="
display: inline-block;
padding: 0.2em 0 0.2em 0;
color: hsl(0, 0%, 0%);
-" for="id_-5rkc">
+" for="idYE-crD">
Faux
</label>
<svg style="
@@ -154,14 +263,14 @@ exports[`TrueFalse snapshot test with moodle 1`] = `
color: hsl(0, 0%, 0%);
">Choisir une réponse:</span>
<div class='multiple-choice-answers-container'>
- <input class="gift-input" type="radio" id="idOPBdFk" name="idoMEBjTDb">
+ <input class="gift-input" type="radio" id="idf3UShS" name="idNOTYKGh8">
<label style="
display: inline-block;
padding: 0.2em 0 0.2em 0;
color: hsl(0, 0%, 0%);
-" for="idOPBdFk">
+" for="idf3UShS">
Vrai
</label>
<svg style="
@@ -180,14 +289,14 @@ exports[`TrueFalse snapshot test with moodle 1`] = `
</div>
<div class='multiple-choice-answers-container'>
- <input class="gift-input" type="radio" id="id3lljUu" name="idoMEBjTDb">
+ <input class="gift-input" type="radio" id="idtUEUUA" name="idNOTYKGh8">
<label style="
display: inline-block;
padding: 0.2em 0 0.2em 0;
color: hsl(0, 0%, 0%);
-" for="id3lljUu">
+" for="idtUEUUA">
Faux
</label>
<svg style="
@@ -263,14 +372,14 @@ exports[`TrueFalse snapshot test with plain text 1`] = `
color: hsl(0, 0%, 0%);
">Choisir une réponse:</span>
<div class='multiple-choice-answers-container'>
- <input class="gift-input" type="radio" id="id2_2M-E" name="idpl2XIOYb">
+ <input class="gift-input" type="radio" id="idgBg2Sw" name="idWE_PEATF">
<label style="
display: inline-block;
padding: 0.2em 0 0.2em 0;
color: hsl(0, 0%, 0%);
-" for="id2_2M-E">
+" for="idgBg2Sw">
Vrai
</label>
<svg style="
@@ -289,14 +398,14 @@ exports[`TrueFalse snapshot test with plain text 1`] = `
</div>
<div class='multiple-choice-answers-container'>
- <input class="gift-input" type="radio" id="idPc16JK" name="idpl2XIOYb">
+ <input class="gift-input" type="radio" id="idSjCrHY" name="idWE_PEATF">
<label style="
display: inline-block;
padding: 0.2em 0 0.2em 0;
color: hsl(0, 0%, 0%);
-" for="idPc16JK">
+" for="idSjCrHY">
Faux
</label>
<svg style="
From 6e39587c68a984705bfc1f809fc59531274b2bae Mon Sep 17 00:00:00 2001
From: JubaAzul <118773284+JubaAzul@users.noreply.github.com>
Date: Mon, 13 Jan 2025 10:25:09 -0500
Subject: [PATCH 03/23] Update node
---
server/package-lock.json | 2 +-
server/package.json | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/server/package-lock.json b/server/package-lock.json
index 644d9ea..f51e35e 100644
--- a/server/package-lock.json
+++ b/server/package-lock.json
@@ -28,7 +28,7 @@
"supertest": "^6.3.4"
},
"engines": {
- "node": "18.x"
+ "node": "20.x"
}
},
"node_modules/@ampproject/remapping": {
diff --git a/server/package.json b/server/package.json
index d3e8919..9a9699c 100644
--- a/server/package.json
+++ b/server/package.json
@@ -32,7 +32,7 @@
"supertest": "^6.3.4"
},
"engines": {
- "node": "18.x"
+ "node": "20.x"
},
"jest": {
"testEnvironment": "node",
From 12b376d6069c350529cf609d6dc92f57ceba5741 Mon Sep 17 00:00:00 2001
From: JubaAzul <118773284+JubaAzul@users.noreply.github.com>
Date: Mon, 13 Jan 2025 18:34:25 -0500
Subject: [PATCH 04/23] Correciton pull
---
.../templates/MultipleChoice.test.tsx | 7 ++
.../GiftTemplate/templates/Numerical.test.tsx | 5 ++
.../templates/ShortAnswer.test.tsx | 5 ++
.../GiftTemplate/templates/TrueFalse.test.tsx | 5 ++
.../MultipleChoice.test.tsx.snap | 68 +++++++++----------
.../__snapshots__/TrueFalse.test.tsx.snap | 32 ++++-----
6 files changed, 72 insertions(+), 50 deletions(-)
diff --git a/client/src/__tests__/components/GiftTemplate/templates/MultipleChoice.test.tsx b/client/src/__tests__/components/GiftTemplate/templates/MultipleChoice.test.tsx
index 9932fb1..2fa7639 100644
--- a/client/src/__tests__/components/GiftTemplate/templates/MultipleChoice.test.tsx
+++ b/client/src/__tests__/components/GiftTemplate/templates/MultipleChoice.test.tsx
@@ -2,6 +2,13 @@ import { render } from '@testing-library/react';
import { MultipleChoice } from '../../../../components/GiftTemplate/templates';
import { TemplateOptions, MultipleChoice as MultipleChoiceType } from '../../../../components/GiftTemplate/templates/types';
+
+// Mock the nanoid function
+jest.mock('nanoid', () => ({
+ nanoid: jest.fn(() => 'mocked-id')
+ }));
+
+
const mockProps: TemplateOptions & MultipleChoiceType = {
type: 'MC',
hasEmbeddedAnswers: false,
diff --git a/client/src/__tests__/components/GiftTemplate/templates/Numerical.test.tsx b/client/src/__tests__/components/GiftTemplate/templates/Numerical.test.tsx
index 65921f9..cff5199 100644
--- a/client/src/__tests__/components/GiftTemplate/templates/Numerical.test.tsx
+++ b/client/src/__tests__/components/GiftTemplate/templates/Numerical.test.tsx
@@ -2,6 +2,11 @@ import { render } from '@testing-library/react';
import Numerical from '../../../../components/GiftTemplate/templates/Numerical';
import { TemplateOptions, Numerical as NumericalType } from '../../../../components/GiftTemplate/templates/types';
+// Mock the nanoid function
+jest.mock('nanoid', () => ({
+ nanoid: jest.fn(() => 'mocked-id')
+ }));
+
const plainTextMock: TemplateOptions & NumericalType = {
type: 'Numerical',
hasEmbeddedAnswers: false,
diff --git a/client/src/__tests__/components/GiftTemplate/templates/ShortAnswer.test.tsx b/client/src/__tests__/components/GiftTemplate/templates/ShortAnswer.test.tsx
index 1a84fa9..27cc933 100644
--- a/client/src/__tests__/components/GiftTemplate/templates/ShortAnswer.test.tsx
+++ b/client/src/__tests__/components/GiftTemplate/templates/ShortAnswer.test.tsx
@@ -2,6 +2,11 @@ import { render } from '@testing-library/react';
import ShortAnswer from '../../../../components/GiftTemplate/templates/ShortAnswer';
import { TemplateOptions, ShortAnswer as ShortAnswerType } from '../../../../components/GiftTemplate/templates/types';
+// Mock the nanoid function
+jest.mock('nanoid', () => ({
+ nanoid: jest.fn(() => 'mocked-id')
+ }));
+
const plainTextMock: TemplateOptions & ShortAnswerType = {
type: 'Short',
hasEmbeddedAnswers: false,
diff --git a/client/src/__tests__/components/GiftTemplate/templates/TrueFalse.test.tsx b/client/src/__tests__/components/GiftTemplate/templates/TrueFalse.test.tsx
index 6d3a93a..3597189 100644
--- a/client/src/__tests__/components/GiftTemplate/templates/TrueFalse.test.tsx
+++ b/client/src/__tests__/components/GiftTemplate/templates/TrueFalse.test.tsx
@@ -2,6 +2,11 @@ import { render } from '@testing-library/react';
import TrueFalse from '../../../../components/GiftTemplate/templates';
import { TemplateOptions, TrueFalse as TrueFalseType } from '../../../../components/GiftTemplate/templates/types';
+// Mock the nanoid function
+jest.mock('nanoid', () => ({
+ nanoid: jest.fn(() => 'mocked-id')
+ }));
+
const plainTextMock: TemplateOptions & TrueFalseType = {
type: 'TF',
hasEmbeddedAnswers: false,
diff --git a/client/src/__tests__/components/GiftTemplate/templates/__snapshots__/MultipleChoice.test.tsx.snap b/client/src/__tests__/components/GiftTemplate/templates/__snapshots__/MultipleChoice.test.tsx.snap
index ab25b5e..651b5bc 100644
--- a/client/src/__tests__/components/GiftTemplate/templates/__snapshots__/MultipleChoice.test.tsx.snap
+++ b/client/src/__tests__/components/GiftTemplate/templates/__snapshots__/MultipleChoice.test.tsx.snap
@@ -44,7 +44,7 @@ exports[`MultipleChoice snapshot test 1`] = `
color: hsl(0, 0%, 0%);
">Choisir une réponse:</span>
<div class='multiple-choice-answers-container'>
- <input class="gift-input" type="radio" id="idY6sLQS" name="idYcbBS3PT">
+ <input class="gift-input" type="radio" id="idmocked-id" name="idmocked-id">
<span style="
box-shadow: 0px 1px 1px hsl(0, 0%, 74%);
border-radius: 3px;
@@ -61,7 +61,7 @@ exports[`MultipleChoice snapshot test 1`] = `
padding: 0.2em 0 0.2em 0;
color: hsl(0, 0%, 0%);
-" for="idY6sLQS">
+" for="idmocked-id">
Choice 1
</label>
<svg style="
@@ -80,7 +80,7 @@ exports[`MultipleChoice snapshot test 1`] = `
</div>
<div class='multiple-choice-answers-container'>
- <input class="gift-input" type="radio" id="ida41-A1" name="idYcbBS3PT">
+ <input class="gift-input" type="radio" id="idmocked-id" name="idmocked-id">
<span style="
box-shadow: 0px 1px 1px hsl(0, 0%, 74%);
border-radius: 3px;
@@ -97,7 +97,7 @@ exports[`MultipleChoice snapshot test 1`] = `
padding: 0.2em 0 0.2em 0;
color: hsl(0, 0%, 0%);
-" for="ida41-A1">
+" for="idmocked-id">
Choice 2
</label>
<svg style="
@@ -173,7 +173,7 @@ exports[`MultipleChoice snapshot test with 2 images using markdown text format 1
color: hsl(0, 0%, 0%);
">Choisir une réponse:</span>
<div class='multiple-choice-answers-container'>
- <input class="gift-input" type="radio" id="idRndLXH" name="id41Q3iM9t">
+ <input class="gift-input" type="radio" id="idmocked-id" name="idmocked-id">
<span style="
box-shadow: 0px 1px 1px hsl(0, 0%, 74%);
border-radius: 3px;
@@ -190,7 +190,7 @@ exports[`MultipleChoice snapshot test with 2 images using markdown text format 1
padding: 0.2em 0 0.2em 0;
color: hsl(0, 0%, 0%);
-" for="idRndLXH">
+" for="idmocked-id">
Choice 1
</label>
@@ -210,7 +210,7 @@ exports[`MultipleChoice snapshot test with 2 images using markdown text format 1
</div>
<div class='multiple-choice-answers-container'>
- <input class="gift-input" type="radio" id="id9so1y3" name="id41Q3iM9t">
+ <input class="gift-input" type="radio" id="idmocked-id" name="idmocked-id">
<span style="
box-shadow: 0px 1px 1px hsl(0, 0%, 74%);
border-radius: 3px;
@@ -227,7 +227,7 @@ exports[`MultipleChoice snapshot test with 2 images using markdown text format 1
padding: 0.2em 0 0.2em 0;
color: hsl(0, 0%, 0%);
-" for="id9so1y3">
+" for="idmocked-id">
Choice 2
</label>
@@ -247,7 +247,7 @@ exports[`MultipleChoice snapshot test with 2 images using markdown text format 1
</div>
<div class='multiple-choice-answers-container'>
- <input class="gift-input" type="radio" id="idyhlQbI" name="id41Q3iM9t">
+ <input class="gift-input" type="radio" id="idmocked-id" name="idmocked-id">
<span style="
box-shadow: 0px 1px 1px hsl(0, 0%, 74%);
border-radius: 3px;
@@ -264,7 +264,7 @@ exports[`MultipleChoice snapshot test with 2 images using markdown text format 1
padding: 0.2em 0 0.2em 0;
color: hsl(0, 0%, 0%);
-" for="idyhlQbI">
+" for="idmocked-id">
<img src="https://via.placeholder.com/150" alt="Sample Image" />
</label>
<svg style="
@@ -341,7 +341,7 @@ exports[`MultipleChoice snapshot test with Moodle text format 1`] = `
color: hsl(0, 0%, 0%);
">Choisir une réponse:</span>
<div class='multiple-choice-answers-container'>
- <input class="gift-input" type="radio" id="idOkvGfv" name="idG7FzhlwG">
+ <input class="gift-input" type="radio" id="idmocked-id" name="idmocked-id">
<span style="
box-shadow: 0px 1px 1px hsl(0, 0%, 74%);
border-radius: 3px;
@@ -358,7 +358,7 @@ exports[`MultipleChoice snapshot test with Moodle text format 1`] = `
padding: 0.2em 0 0.2em 0;
color: hsl(0, 0%, 0%);
-" for="idOkvGfv">
+" for="idmocked-id">
Choice 1
</label>
<svg style="
@@ -377,7 +377,7 @@ exports[`MultipleChoice snapshot test with Moodle text format 1`] = `
</div>
<div class='multiple-choice-answers-container'>
- <input class="gift-input" type="radio" id="idWc4Fdg" name="idG7FzhlwG">
+ <input class="gift-input" type="radio" id="idmocked-id" name="idmocked-id">
<span style="
box-shadow: 0px 1px 1px hsl(0, 0%, 74%);
border-radius: 3px;
@@ -394,7 +394,7 @@ exports[`MultipleChoice snapshot test with Moodle text format 1`] = `
padding: 0.2em 0 0.2em 0;
color: hsl(0, 0%, 0%);
-" for="idWc4Fdg">
+" for="idmocked-id">
Choice 2
</label>
<svg style="
@@ -470,7 +470,7 @@ exports[`MultipleChoice snapshot test with image 1`] = `
color: hsl(0, 0%, 0%);
">Choisir une réponse:</span>
<div class='multiple-choice-answers-container'>
- <input class="gift-input" type="radio" id="idtg_4sy" name="idtYfkT0sj">
+ <input class="gift-input" type="radio" id="idmocked-id" name="idmocked-id">
<span style="
box-shadow: 0px 1px 1px hsl(0, 0%, 74%);
border-radius: 3px;
@@ -487,7 +487,7 @@ exports[`MultipleChoice snapshot test with image 1`] = `
padding: 0.2em 0 0.2em 0;
color: hsl(0, 0%, 0%);
-" for="idtg_4sy">
+" for="idmocked-id">
Choice 1
</label>
<svg style="
@@ -506,7 +506,7 @@ exports[`MultipleChoice snapshot test with image 1`] = `
</div>
<div class='multiple-choice-answers-container'>
- <input class="gift-input" type="radio" id="idsl9DOz" name="idtYfkT0sj">
+ <input class="gift-input" type="radio" id="idmocked-id" name="idmocked-id">
<span style="
box-shadow: 0px 1px 1px hsl(0, 0%, 74%);
border-radius: 3px;
@@ -523,7 +523,7 @@ exports[`MultipleChoice snapshot test with image 1`] = `
padding: 0.2em 0 0.2em 0;
color: hsl(0, 0%, 0%);
-" for="idsl9DOz">
+" for="idmocked-id">
Choice 2
</label>
<svg style="
@@ -542,7 +542,7 @@ exports[`MultipleChoice snapshot test with image 1`] = `
</div>
<div class='multiple-choice-answers-container'>
- <input class="gift-input" type="radio" id="idPEStwV" name="idtYfkT0sj">
+ <input class="gift-input" type="radio" id="idmocked-id" name="idmocked-id">
<span style="
box-shadow: 0px 1px 1px hsl(0, 0%, 74%);
border-radius: 3px;
@@ -559,7 +559,7 @@ exports[`MultipleChoice snapshot test with image 1`] = `
padding: 0.2em 0 0.2em 0;
color: hsl(0, 0%, 0%);
-" for="idPEStwV">
+" for="idmocked-id">
<img src="https://via.placeholder.com/150" alt="Sample Image" />
</label>
<svg style="
@@ -636,7 +636,7 @@ exports[`MultipleChoice snapshot test with image using markdown text format 1`]
color: hsl(0, 0%, 0%);
">Choisir une réponse:</span>
<div class='multiple-choice-answers-container'>
- <input class="gift-input" type="radio" id="idfcMRhV" name="idIpMjpvV3">
+ <input class="gift-input" type="radio" id="idmocked-id" name="idmocked-id">
<span style="
box-shadow: 0px 1px 1px hsl(0, 0%, 74%);
border-radius: 3px;
@@ -653,7 +653,7 @@ exports[`MultipleChoice snapshot test with image using markdown text format 1`]
padding: 0.2em 0 0.2em 0;
color: hsl(0, 0%, 0%);
-" for="idfcMRhV">
+" for="idmocked-id">
Choice 1
</label>
@@ -673,7 +673,7 @@ exports[`MultipleChoice snapshot test with image using markdown text format 1`]
</div>
<div class='multiple-choice-answers-container'>
- <input class="gift-input" type="radio" id="idS15bbw" name="idIpMjpvV3">
+ <input class="gift-input" type="radio" id="idmocked-id" name="idmocked-id">
<span style="
box-shadow: 0px 1px 1px hsl(0, 0%, 74%);
border-radius: 3px;
@@ -690,7 +690,7 @@ exports[`MultipleChoice snapshot test with image using markdown text format 1`]
padding: 0.2em 0 0.2em 0;
color: hsl(0, 0%, 0%);
-" for="idS15bbw">
+" for="idmocked-id">
Choice 2
</label>
@@ -710,7 +710,7 @@ exports[`MultipleChoice snapshot test with image using markdown text format 1`]
</div>
<div class='multiple-choice-answers-container'>
- <input class="gift-input" type="radio" id="id5hwUQu" name="idIpMjpvV3">
+ <input class="gift-input" type="radio" id="idmocked-id" name="idmocked-id">
<span style="
box-shadow: 0px 1px 1px hsl(0, 0%, 74%);
border-radius: 3px;
@@ -727,7 +727,7 @@ exports[`MultipleChoice snapshot test with image using markdown text format 1`]
padding: 0.2em 0 0.2em 0;
color: hsl(0, 0%, 0%);
-" for="id5hwUQu">
+" for="idmocked-id">
<img src="https://via.placeholder.com/150" alt="Sample Image" />
</label>
<svg style="
@@ -804,7 +804,7 @@ exports[`MultipleChoice snapshot test with katex 1`] = `
color: hsl(0, 0%, 0%);
">Choisir une réponse:</span>
<div class='multiple-choice-answers-container'>
- <input class="gift-input" type="radio" id="id_8Kbh1" name="idwLkHBxIV">
+ <input class="gift-input" type="radio" id="idmocked-id" name="idmocked-id">
<span style="
box-shadow: 0px 1px 1px hsl(0, 0%, 74%);
border-radius: 3px;
@@ -821,7 +821,7 @@ exports[`MultipleChoice snapshot test with katex 1`] = `
padding: 0.2em 0 0.2em 0;
color: hsl(0, 0%, 0%);
-" for="id_8Kbh1">
+" for="idmocked-id">
Choice 1
</label>
<svg style="
@@ -840,7 +840,7 @@ exports[`MultipleChoice snapshot test with katex 1`] = `
</div>
<div class='multiple-choice-answers-container'>
- <input class="gift-input" type="radio" id="idmmZ__M" name="idwLkHBxIV">
+ <input class="gift-input" type="radio" id="idmocked-id" name="idmocked-id">
<span style="
box-shadow: 0px 1px 1px hsl(0, 0%, 74%);
border-radius: 3px;
@@ -857,7 +857,7 @@ exports[`MultipleChoice snapshot test with katex 1`] = `
padding: 0.2em 0 0.2em 0;
color: hsl(0, 0%, 0%);
-" for="idmmZ__M">
+" for="idmocked-id">
Choice 2
</label>
<svg style="
@@ -933,7 +933,7 @@ exports[`MultipleChoice snapshot test with katex, using html text format 1`] = `
color: hsl(0, 0%, 0%);
">Choisir une réponse:</span>
<div class='multiple-choice-answers-container'>
- <input class="gift-input" type="radio" id="idmhYkGR" name="id7uMk4tB5">
+ <input class="gift-input" type="radio" id="idmocked-id" name="idmocked-id">
<span style="
box-shadow: 0px 1px 1px hsl(0, 0%, 74%);
border-radius: 3px;
@@ -950,7 +950,7 @@ exports[`MultipleChoice snapshot test with katex, using html text format 1`] = `
padding: 0.2em 0 0.2em 0;
color: hsl(0, 0%, 0%);
-" for="idmhYkGR">
+" for="idmocked-id">
Choice 1
</label>
<svg style="
@@ -969,7 +969,7 @@ exports[`MultipleChoice snapshot test with katex, using html text format 1`] = `
</div>
<div class='multiple-choice-answers-container'>
- <input class="gift-input" type="radio" id="idvT6Xg7" name="id7uMk4tB5">
+ <input class="gift-input" type="radio" id="idmocked-id" name="idmocked-id">
<span style="
box-shadow: 0px 1px 1px hsl(0, 0%, 74%);
border-radius: 3px;
@@ -986,7 +986,7 @@ exports[`MultipleChoice snapshot test with katex, using html text format 1`] = `
padding: 0.2em 0 0.2em 0;
color: hsl(0, 0%, 0%);
-" for="idvT6Xg7">
+" for="idmocked-id">
Choice 2
</label>
<svg style="
diff --git a/client/src/__tests__/components/GiftTemplate/templates/__snapshots__/TrueFalse.test.tsx.snap b/client/src/__tests__/components/GiftTemplate/templates/__snapshots__/TrueFalse.test.tsx.snap
index 7003dac..c010906 100644
--- a/client/src/__tests__/components/GiftTemplate/templates/__snapshots__/TrueFalse.test.tsx.snap
+++ b/client/src/__tests__/components/GiftTemplate/templates/__snapshots__/TrueFalse.test.tsx.snap
@@ -44,14 +44,14 @@ exports[`TrueFalse snapshot test with image 1`] = `
color: hsl(0, 0%, 0%);
">Choisir une réponse:</span>
<div class='multiple-choice-answers-container'>
- <input class="gift-input" type="radio" id="idgpc2Rm" name="idrK_AqV9h">
+ <input class="gift-input" type="radio" id="idmocked-id" name="idmocked-id">
<label style="
display: inline-block;
padding: 0.2em 0 0.2em 0;
color: hsl(0, 0%, 0%);
-" for="idgpc2Rm">
+" for="idmocked-id">
Vrai
</label>
<svg style="
@@ -70,14 +70,14 @@ exports[`TrueFalse snapshot test with image 1`] = `
</div>
<div class='multiple-choice-answers-container'>
- <input class="gift-input" type="radio" id="idQF-GNQ" name="idrK_AqV9h">
+ <input class="gift-input" type="radio" id="idmocked-id" name="idmocked-id">
<label style="
display: inline-block;
padding: 0.2em 0 0.2em 0;
color: hsl(0, 0%, 0%);
-" for="idQF-GNQ">
+" for="idmocked-id">
Faux
</label>
<svg style="
@@ -153,14 +153,14 @@ exports[`TrueFalse snapshot test with katex 1`] = `
color: hsl(0, 0%, 0%);
">Choisir une réponse:</span>
<div class='multiple-choice-answers-container'>
- <input class="gift-input" type="radio" id="idHBTzQU" name="idA0BQMs9B">
+ <input class="gift-input" type="radio" id="idmocked-id" name="idmocked-id">
<label style="
display: inline-block;
padding: 0.2em 0 0.2em 0;
color: hsl(0, 0%, 0%);
-" for="idHBTzQU">
+" for="idmocked-id">
Vrai
</label>
<svg style="
@@ -179,14 +179,14 @@ exports[`TrueFalse snapshot test with katex 1`] = `
</div>
<div class='multiple-choice-answers-container'>
- <input class="gift-input" type="radio" id="idYE-crD" name="idA0BQMs9B">
+ <input class="gift-input" type="radio" id="idmocked-id" name="idmocked-id">
<label style="
display: inline-block;
padding: 0.2em 0 0.2em 0;
color: hsl(0, 0%, 0%);
-" for="idYE-crD">
+" for="idmocked-id">
Faux
</label>
<svg style="
@@ -263,14 +263,14 @@ exports[`TrueFalse snapshot test with moodle 1`] = `
color: hsl(0, 0%, 0%);
">Choisir une réponse:</span>
<div class='multiple-choice-answers-container'>
- <input class="gift-input" type="radio" id="idf3UShS" name="idNOTYKGh8">
+ <input class="gift-input" type="radio" id="idmocked-id" name="idmocked-id">
<label style="
display: inline-block;
padding: 0.2em 0 0.2em 0;
color: hsl(0, 0%, 0%);
-" for="idf3UShS">
+" for="idmocked-id">
Vrai
</label>
<svg style="
@@ -289,14 +289,14 @@ exports[`TrueFalse snapshot test with moodle 1`] = `
</div>
<div class='multiple-choice-answers-container'>
- <input class="gift-input" type="radio" id="idtUEUUA" name="idNOTYKGh8">
+ <input class="gift-input" type="radio" id="idmocked-id" name="idmocked-id">
<label style="
display: inline-block;
padding: 0.2em 0 0.2em 0;
color: hsl(0, 0%, 0%);
-" for="idtUEUUA">
+" for="idmocked-id">
Faux
</label>
<svg style="
@@ -372,14 +372,14 @@ exports[`TrueFalse snapshot test with plain text 1`] = `
color: hsl(0, 0%, 0%);
">Choisir une réponse:</span>
<div class='multiple-choice-answers-container'>
- <input class="gift-input" type="radio" id="idgBg2Sw" name="idWE_PEATF">
+ <input class="gift-input" type="radio" id="idmocked-id" name="idmocked-id">
<label style="
display: inline-block;
padding: 0.2em 0 0.2em 0;
color: hsl(0, 0%, 0%);
-" for="idgBg2Sw">
+" for="idmocked-id">
Vrai
</label>
<svg style="
@@ -398,14 +398,14 @@ exports[`TrueFalse snapshot test with plain text 1`] = `
</div>
<div class='multiple-choice-answers-container'>
- <input class="gift-input" type="radio" id="idSjCrHY" name="idWE_PEATF">
+ <input class="gift-input" type="radio" id="idmocked-id" name="idmocked-id">
<label style="
display: inline-block;
padding: 0.2em 0 0.2em 0;
color: hsl(0, 0%, 0%);
-" for="idSjCrHY">
+" for="idmocked-id">
Faux
</label>
<svg style="
From f2013050642e11d2ed6d108447d009a8b1364931 Mon Sep 17 00:00:00 2001
From: JubaAzul <118773284+JubaAzul@users.noreply.github.com>
Date: Mon, 13 Jan 2025 18:47:28 -0500
Subject: [PATCH 05/23] Revert node change
---
.../components/GiftTemplate/templates/MultipleChoice.test.tsx | 2 --
server/package-lock.json | 2 +-
server/package.json | 2 +-
3 files changed, 2 insertions(+), 4 deletions(-)
diff --git a/client/src/__tests__/components/GiftTemplate/templates/MultipleChoice.test.tsx b/client/src/__tests__/components/GiftTemplate/templates/MultipleChoice.test.tsx
index 2fa7639..f4b1a67 100644
--- a/client/src/__tests__/components/GiftTemplate/templates/MultipleChoice.test.tsx
+++ b/client/src/__tests__/components/GiftTemplate/templates/MultipleChoice.test.tsx
@@ -2,12 +2,10 @@ import { render } from '@testing-library/react';
import { MultipleChoice } from '../../../../components/GiftTemplate/templates';
import { TemplateOptions, MultipleChoice as MultipleChoiceType } from '../../../../components/GiftTemplate/templates/types';
-
// Mock the nanoid function
jest.mock('nanoid', () => ({
nanoid: jest.fn(() => 'mocked-id')
}));
-
const mockProps: TemplateOptions & MultipleChoiceType = {
type: 'MC',
diff --git a/server/package-lock.json b/server/package-lock.json
index f51e35e..644d9ea 100644
--- a/server/package-lock.json
+++ b/server/package-lock.json
@@ -28,7 +28,7 @@
"supertest": "^6.3.4"
},
"engines": {
- "node": "20.x"
+ "node": "18.x"
}
},
"node_modules/@ampproject/remapping": {
diff --git a/server/package.json b/server/package.json
index 9a9699c..d3e8919 100644
--- a/server/package.json
+++ b/server/package.json
@@ -32,7 +32,7 @@
"supertest": "^6.3.4"
},
"engines": {
- "node": "20.x"
+ "node": "18.x"
},
"jest": {
"testEnvironment": "node",
From b834c8f06fa805c6d2d187eb5b92d9d3a499d54b Mon Sep 17 00:00:00 2001
From: JubaAzul <118773284+JubaAzul@users.noreply.github.com>
Date: Mon, 13 Jan 2025 19:47:37 -0500
Subject: [PATCH 06/23] Import react in tests classes
---
.../components/GiftTemplate/templates/MultipleChoice.test.tsx | 1 +
.../components/GiftTemplate/templates/Numerical.test.tsx | 1 +
.../components/GiftTemplate/templates/ShortAnswer.test.tsx | 1 +
.../components/GiftTemplate/templates/TrueFalse.test.tsx | 1 +
4 files changed, 4 insertions(+)
diff --git a/client/src/__tests__/components/GiftTemplate/templates/MultipleChoice.test.tsx b/client/src/__tests__/components/GiftTemplate/templates/MultipleChoice.test.tsx
index f4b1a67..afe83d1 100644
--- a/client/src/__tests__/components/GiftTemplate/templates/MultipleChoice.test.tsx
+++ b/client/src/__tests__/components/GiftTemplate/templates/MultipleChoice.test.tsx
@@ -1,4 +1,5 @@
import { render } from '@testing-library/react';
+import '@testing-library/jest-dom';
import { MultipleChoice } from '../../../../components/GiftTemplate/templates';
import { TemplateOptions, MultipleChoice as MultipleChoiceType } from '../../../../components/GiftTemplate/templates/types';
diff --git a/client/src/__tests__/components/GiftTemplate/templates/Numerical.test.tsx b/client/src/__tests__/components/GiftTemplate/templates/Numerical.test.tsx
index cff5199..d8a4749 100644
--- a/client/src/__tests__/components/GiftTemplate/templates/Numerical.test.tsx
+++ b/client/src/__tests__/components/GiftTemplate/templates/Numerical.test.tsx
@@ -1,4 +1,5 @@
import { render } from '@testing-library/react';
+import '@testing-library/jest-dom';
import Numerical from '../../../../components/GiftTemplate/templates/Numerical';
import { TemplateOptions, Numerical as NumericalType } from '../../../../components/GiftTemplate/templates/types';
diff --git a/client/src/__tests__/components/GiftTemplate/templates/ShortAnswer.test.tsx b/client/src/__tests__/components/GiftTemplate/templates/ShortAnswer.test.tsx
index 27cc933..145e4d6 100644
--- a/client/src/__tests__/components/GiftTemplate/templates/ShortAnswer.test.tsx
+++ b/client/src/__tests__/components/GiftTemplate/templates/ShortAnswer.test.tsx
@@ -1,4 +1,5 @@
import { render } from '@testing-library/react';
+import '@testing-library/jest-dom';
import ShortAnswer from '../../../../components/GiftTemplate/templates/ShortAnswer';
import { TemplateOptions, ShortAnswer as ShortAnswerType } from '../../../../components/GiftTemplate/templates/types';
diff --git a/client/src/__tests__/components/GiftTemplate/templates/TrueFalse.test.tsx b/client/src/__tests__/components/GiftTemplate/templates/TrueFalse.test.tsx
index 3597189..1dae35b 100644
--- a/client/src/__tests__/components/GiftTemplate/templates/TrueFalse.test.tsx
+++ b/client/src/__tests__/components/GiftTemplate/templates/TrueFalse.test.tsx
@@ -1,4 +1,5 @@
import { render } from '@testing-library/react';
+import '@testing-library/jest-dom';
import TrueFalse from '../../../../components/GiftTemplate/templates';
import { TemplateOptions, TrueFalse as TrueFalseType } from '../../../../components/GiftTemplate/templates/types';
From 59b7fa02e0c2c71d641c9976fa5edd95089bb8cb Mon Sep 17 00:00:00 2001
From: JubaAzul <118773284+JubaAzul@users.noreply.github.com>
Date: Mon, 13 Jan 2025 20:03:12 -0500
Subject: [PATCH 07/23] try import react inside class
---
.../components/GiftTemplate/templates/MultipleChoice.test.tsx | 1 +
.../components/GiftTemplate/templates/Numerical.test.tsx | 1 +
.../components/GiftTemplate/templates/ShortAnswer.test.tsx | 1 +
.../components/GiftTemplate/templates/TrueFalse.test.tsx | 1 +
4 files changed, 4 insertions(+)
diff --git a/client/src/__tests__/components/GiftTemplate/templates/MultipleChoice.test.tsx b/client/src/__tests__/components/GiftTemplate/templates/MultipleChoice.test.tsx
index afe83d1..ddd06ed 100644
--- a/client/src/__tests__/components/GiftTemplate/templates/MultipleChoice.test.tsx
+++ b/client/src/__tests__/components/GiftTemplate/templates/MultipleChoice.test.tsx
@@ -1,3 +1,4 @@
+import React from 'react';
import { render } from '@testing-library/react';
import '@testing-library/jest-dom';
import { MultipleChoice } from '../../../../components/GiftTemplate/templates';
diff --git a/client/src/__tests__/components/GiftTemplate/templates/Numerical.test.tsx b/client/src/__tests__/components/GiftTemplate/templates/Numerical.test.tsx
index d8a4749..5d974ab 100644
--- a/client/src/__tests__/components/GiftTemplate/templates/Numerical.test.tsx
+++ b/client/src/__tests__/components/GiftTemplate/templates/Numerical.test.tsx
@@ -1,3 +1,4 @@
+import React from 'react';
import { render } from '@testing-library/react';
import '@testing-library/jest-dom';
import Numerical from '../../../../components/GiftTemplate/templates/Numerical';
diff --git a/client/src/__tests__/components/GiftTemplate/templates/ShortAnswer.test.tsx b/client/src/__tests__/components/GiftTemplate/templates/ShortAnswer.test.tsx
index 145e4d6..9f4fbf0 100644
--- a/client/src/__tests__/components/GiftTemplate/templates/ShortAnswer.test.tsx
+++ b/client/src/__tests__/components/GiftTemplate/templates/ShortAnswer.test.tsx
@@ -1,3 +1,4 @@
+import React from 'react';
import { render } from '@testing-library/react';
import '@testing-library/jest-dom';
import ShortAnswer from '../../../../components/GiftTemplate/templates/ShortAnswer';
diff --git a/client/src/__tests__/components/GiftTemplate/templates/TrueFalse.test.tsx b/client/src/__tests__/components/GiftTemplate/templates/TrueFalse.test.tsx
index 1dae35b..586837b 100644
--- a/client/src/__tests__/components/GiftTemplate/templates/TrueFalse.test.tsx
+++ b/client/src/__tests__/components/GiftTemplate/templates/TrueFalse.test.tsx
@@ -1,3 +1,4 @@
+import React from 'react';
import { render } from '@testing-library/react';
import '@testing-library/jest-dom';
import TrueFalse from '../../../../components/GiftTemplate/templates';
From 9444603a93bb7e2abe645c8aadb41e22102c645e Mon Sep 17 00:00:00 2001
From: JubaAzul <118773284+JubaAzul@users.noreply.github.com>
Date: Wed, 15 Jan 2025 10:27:28 -0500
Subject: [PATCH 08/23] import react inside class for pipeline, not IDE
---
.../components/GiftTemplate/templates/MultipleChoice.test.tsx | 1 +
.../components/GiftTemplate/templates/Numerical.test.tsx | 1 +
.../components/GiftTemplate/templates/ShortAnswer.test.tsx | 1 +
.../components/GiftTemplate/templates/TrueFalse.test.tsx | 1 +
4 files changed, 4 insertions(+)
diff --git a/client/src/__tests__/components/GiftTemplate/templates/MultipleChoice.test.tsx b/client/src/__tests__/components/GiftTemplate/templates/MultipleChoice.test.tsx
index ddd06ed..3fe9c73 100644
--- a/client/src/__tests__/components/GiftTemplate/templates/MultipleChoice.test.tsx
+++ b/client/src/__tests__/components/GiftTemplate/templates/MultipleChoice.test.tsx
@@ -1,3 +1,4 @@
+// @ts-ignore
import React from 'react';
import { render } from '@testing-library/react';
import '@testing-library/jest-dom';
diff --git a/client/src/__tests__/components/GiftTemplate/templates/Numerical.test.tsx b/client/src/__tests__/components/GiftTemplate/templates/Numerical.test.tsx
index 5d974ab..9ac90f9 100644
--- a/client/src/__tests__/components/GiftTemplate/templates/Numerical.test.tsx
+++ b/client/src/__tests__/components/GiftTemplate/templates/Numerical.test.tsx
@@ -1,3 +1,4 @@
+// @ts-ignore
import React from 'react';
import { render } from '@testing-library/react';
import '@testing-library/jest-dom';
diff --git a/client/src/__tests__/components/GiftTemplate/templates/ShortAnswer.test.tsx b/client/src/__tests__/components/GiftTemplate/templates/ShortAnswer.test.tsx
index 9f4fbf0..a59aaa6 100644
--- a/client/src/__tests__/components/GiftTemplate/templates/ShortAnswer.test.tsx
+++ b/client/src/__tests__/components/GiftTemplate/templates/ShortAnswer.test.tsx
@@ -1,3 +1,4 @@
+// @ts-ignore
import React from 'react';
import { render } from '@testing-library/react';
import '@testing-library/jest-dom';
diff --git a/client/src/__tests__/components/GiftTemplate/templates/TrueFalse.test.tsx b/client/src/__tests__/components/GiftTemplate/templates/TrueFalse.test.tsx
index 586837b..acf41d1 100644
--- a/client/src/__tests__/components/GiftTemplate/templates/TrueFalse.test.tsx
+++ b/client/src/__tests__/components/GiftTemplate/templates/TrueFalse.test.tsx
@@ -1,3 +1,4 @@
+// @ts-ignore
import React from 'react';
import { render } from '@testing-library/react';
import '@testing-library/jest-dom';
From 8d14e49095529e85535441c02ec3603a60ae1507 Mon Sep 17 00:00:00 2001
From: JubaAzul <118773284+JubaAzul@users.noreply.github.com>
Date: Wed, 15 Jan 2025 10:30:45 -0500
Subject: [PATCH 09/23] Used "@ts-expect-error" instead of "@ts-ignore"
---
.../components/GiftTemplate/templates/MultipleChoice.test.tsx | 2 +-
.../components/GiftTemplate/templates/Numerical.test.tsx | 2 +-
.../components/GiftTemplate/templates/ShortAnswer.test.tsx | 2 +-
.../components/GiftTemplate/templates/TrueFalse.test.tsx | 2 +-
4 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/client/src/__tests__/components/GiftTemplate/templates/MultipleChoice.test.tsx b/client/src/__tests__/components/GiftTemplate/templates/MultipleChoice.test.tsx
index 3fe9c73..f11106c 100644
--- a/client/src/__tests__/components/GiftTemplate/templates/MultipleChoice.test.tsx
+++ b/client/src/__tests__/components/GiftTemplate/templates/MultipleChoice.test.tsx
@@ -1,4 +1,4 @@
-// @ts-ignore
+// @ts-expect-error
import React from 'react';
import { render } from '@testing-library/react';
import '@testing-library/jest-dom';
diff --git a/client/src/__tests__/components/GiftTemplate/templates/Numerical.test.tsx b/client/src/__tests__/components/GiftTemplate/templates/Numerical.test.tsx
index 9ac90f9..c1c8ebb 100644
--- a/client/src/__tests__/components/GiftTemplate/templates/Numerical.test.tsx
+++ b/client/src/__tests__/components/GiftTemplate/templates/Numerical.test.tsx
@@ -1,4 +1,4 @@
-// @ts-ignore
+// @ts-expect-error
import React from 'react';
import { render } from '@testing-library/react';
import '@testing-library/jest-dom';
diff --git a/client/src/__tests__/components/GiftTemplate/templates/ShortAnswer.test.tsx b/client/src/__tests__/components/GiftTemplate/templates/ShortAnswer.test.tsx
index a59aaa6..e33c568 100644
--- a/client/src/__tests__/components/GiftTemplate/templates/ShortAnswer.test.tsx
+++ b/client/src/__tests__/components/GiftTemplate/templates/ShortAnswer.test.tsx
@@ -1,4 +1,4 @@
-// @ts-ignore
+// @ts-expect-error
import React from 'react';
import { render } from '@testing-library/react';
import '@testing-library/jest-dom';
diff --git a/client/src/__tests__/components/GiftTemplate/templates/TrueFalse.test.tsx b/client/src/__tests__/components/GiftTemplate/templates/TrueFalse.test.tsx
index acf41d1..38b0c9a 100644
--- a/client/src/__tests__/components/GiftTemplate/templates/TrueFalse.test.tsx
+++ b/client/src/__tests__/components/GiftTemplate/templates/TrueFalse.test.tsx
@@ -1,4 +1,4 @@
-// @ts-ignore
+// @ts-expect-error
import React from 'react';
import { render } from '@testing-library/react';
import '@testing-library/jest-dom';
From 470d856afc5f88b226eebd4268dec235c51a045e Mon Sep 17 00:00:00 2001
From: JubaAzul <118773284+JubaAzul@users.noreply.github.com>
Date: Wed, 15 Jan 2025 10:40:40 -0500
Subject: [PATCH 10/23] Include a description after the "@ts-expect-error"
directive to explain why the @ts-expect-error is necessary. The description
must be 3 characters or longer
---
.../components/GiftTemplate/templates/MultipleChoice.test.tsx | 2 +-
.../components/GiftTemplate/templates/Numerical.test.tsx | 2 +-
.../components/GiftTemplate/templates/ShortAnswer.test.tsx | 2 +-
.../components/GiftTemplate/templates/TrueFalse.test.tsx | 2 +-
4 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/client/src/__tests__/components/GiftTemplate/templates/MultipleChoice.test.tsx b/client/src/__tests__/components/GiftTemplate/templates/MultipleChoice.test.tsx
index f11106c..bc59d60 100644
--- a/client/src/__tests__/components/GiftTemplate/templates/MultipleChoice.test.tsx
+++ b/client/src/__tests__/components/GiftTemplate/templates/MultipleChoice.test.tsx
@@ -1,4 +1,4 @@
-// @ts-expect-error
+// @ts-expect-error: Required for pipeline compatibility
import React from 'react';
import { render } from '@testing-library/react';
import '@testing-library/jest-dom';
diff --git a/client/src/__tests__/components/GiftTemplate/templates/Numerical.test.tsx b/client/src/__tests__/components/GiftTemplate/templates/Numerical.test.tsx
index c1c8ebb..996f8d7 100644
--- a/client/src/__tests__/components/GiftTemplate/templates/Numerical.test.tsx
+++ b/client/src/__tests__/components/GiftTemplate/templates/Numerical.test.tsx
@@ -1,4 +1,4 @@
-// @ts-expect-error
+// @ts-expect-error : Required for pipeline compatibility
import React from 'react';
import { render } from '@testing-library/react';
import '@testing-library/jest-dom';
diff --git a/client/src/__tests__/components/GiftTemplate/templates/ShortAnswer.test.tsx b/client/src/__tests__/components/GiftTemplate/templates/ShortAnswer.test.tsx
index e33c568..a58f2fa 100644
--- a/client/src/__tests__/components/GiftTemplate/templates/ShortAnswer.test.tsx
+++ b/client/src/__tests__/components/GiftTemplate/templates/ShortAnswer.test.tsx
@@ -1,4 +1,4 @@
-// @ts-expect-error
+// @ts-expect-error: Required for pipeline compatibility
import React from 'react';
import { render } from '@testing-library/react';
import '@testing-library/jest-dom';
diff --git a/client/src/__tests__/components/GiftTemplate/templates/TrueFalse.test.tsx b/client/src/__tests__/components/GiftTemplate/templates/TrueFalse.test.tsx
index 38b0c9a..afd7769 100644
--- a/client/src/__tests__/components/GiftTemplate/templates/TrueFalse.test.tsx
+++ b/client/src/__tests__/components/GiftTemplate/templates/TrueFalse.test.tsx
@@ -1,4 +1,4 @@
-// @ts-expect-error
+// @ts-expect-error: Required for pipeline compatibility
import React from 'react';
import { render } from '@testing-library/react';
import '@testing-library/jest-dom';
From d6774b300f0f9f5c8e39ef6c5d26140bd377028e Mon Sep 17 00:00:00 2001
From: JubaAzul <118773284+JubaAzul@users.noreply.github.com>
Date: Wed, 15 Jan 2025 11:08:17 -0500
Subject: [PATCH 11/23] ignore @ts-expect-error in pipeline
---
client/.eslintrc.cjs | 8 ++++++++
1 file changed, 8 insertions(+)
diff --git a/client/.eslintrc.cjs b/client/.eslintrc.cjs
index d6c9537..75b4298 100644
--- a/client/.eslintrc.cjs
+++ b/client/.eslintrc.cjs
@@ -15,4 +15,12 @@ module.exports = {
{ allowConstantExport: true },
],
},
+ "overrides": [
+ {
+ "files": ["**/*.test.ts", "**/*.test.tsx"],
+ "rules": {
+ "@typescript-eslint/ban-ts-comment": "off"
+ }
+ }
+ ]
}
From f595ccca203b7cc40a9ecd885e9418eb60b98e61 Mon Sep 17 00:00:00 2001
From: JubaAzul <118773284+JubaAzul@users.noreply.github.com>
Date: Wed, 15 Jan 2025 11:47:52 -0500
Subject: [PATCH 12/23] remove change in .eslintrc.cjs, workflow did not run
---
client/.eslintrc.cjs | 8 --------
1 file changed, 8 deletions(-)
diff --git a/client/.eslintrc.cjs b/client/.eslintrc.cjs
index 75b4298..d6c9537 100644
--- a/client/.eslintrc.cjs
+++ b/client/.eslintrc.cjs
@@ -15,12 +15,4 @@ module.exports = {
{ allowConstantExport: true },
],
},
- "overrides": [
- {
- "files": ["**/*.test.ts", "**/*.test.tsx"],
- "rules": {
- "@typescript-eslint/ban-ts-comment": "off"
- }
- }
- ]
}
From bf97931995edc8a0207bc43c788dfd66bd983150 Mon Sep 17 00:00:00 2001
From: JubaAzul <118773284+JubaAzul@users.noreply.github.com>
Date: Wed, 15 Jan 2025 13:20:50 -0500
Subject: [PATCH 13/23] Run with change ob frontend.yml
---
.github/workflows/dev_frontend-deploy.yml | 4 ++++
.github/workflows/frontend-deploy.yml | 4 ++++
2 files changed, 8 insertions(+)
diff --git a/.github/workflows/dev_frontend-deploy.yml b/.github/workflows/dev_frontend-deploy.yml
index 330dcf1..da21450 100644
--- a/.github/workflows/dev_frontend-deploy.yml
+++ b/.github/workflows/dev_frontend-deploy.yml
@@ -24,3 +24,7 @@ jobs:
file: ./client/Dockerfile
push: true
tags: ${{ secrets.DOCKERHUB_USERNAME }}/dev_${{ secrets.DOCKERHUB_FRONTEND_REPO }}:latest
+
+ - name: Lint Code
+ run: |
+ eslint . --rule "@typescript-eslint/ban-ts-comment: off"
diff --git a/.github/workflows/frontend-deploy.yml b/.github/workflows/frontend-deploy.yml
index b46a7bb..2a18e4c 100644
--- a/.github/workflows/frontend-deploy.yml
+++ b/.github/workflows/frontend-deploy.yml
@@ -24,3 +24,7 @@ jobs:
file: ./client/Dockerfile
push: true
tags: ${{ secrets.DOCKERHUB_USERNAME }}/${{ secrets.DOCKERHUB_FRONTEND_REPO }}:latest
+
+ - name: Lint Code
+ run: |
+ eslint . --rule "@typescript-eslint/ban-ts-comment: off"
From 159ed5fa5c081d07f46471e330ef845cf4c1a993 Mon Sep 17 00:00:00 2001
From: JubaAzul <118773284+JubaAzul@users.noreply.github.com>
Date: Thu, 16 Jan 2025 10:40:27 -0500
Subject: [PATCH 14/23] removed import in every class, try to update react
---
client/package-lock.json | 390 ++++++++----------
client/package.json | 4 +-
.../templates/MultipleChoice.test.tsx | 2 -
.../GiftTemplate/templates/Numerical.test.tsx | 2 -
.../templates/ShortAnswer.test.tsx | 2 -
.../GiftTemplate/templates/TrueFalse.test.tsx | 2 -
6 files changed, 167 insertions(+), 235 deletions(-)
diff --git a/client/package-lock.json b/client/package-lock.json
index 873505d..5072f28 100644
--- a/client/package-lock.json
+++ b/client/package-lock.json
@@ -25,8 +25,8 @@
"katex": "^0.16.11",
"marked": "^14.1.2",
"nanoid": "^5.0.2",
- "react": "^18.3.1",
- "react-dom": "^18.3.1",
+ "react": "^19.0.0",
+ "react-dom": "^19.0.0",
"react-modal": "^3.16.1",
"react-router-dom": "^6.26.2",
"remark-math": "^6.0.0",
@@ -2008,14 +2008,14 @@
}
},
"node_modules/@emotion/cache": {
- "version": "11.13.1",
- "resolved": "https://registry.npmjs.org/@emotion/cache/-/cache-11.13.1.tgz",
- "integrity": "sha512-iqouYkuEblRcXmylXIwwOodiEK5Ifl7JcX7o6V4jI3iW4mLXX3dmt5xwBtIkJiQEXFAI+pC8X0i67yiPkH9Ucw==",
+ "version": "11.14.0",
+ "resolved": "https://registry.npmjs.org/@emotion/cache/-/cache-11.14.0.tgz",
+ "integrity": "sha512-L/B1lc/TViYk4DcpGxtAVbx0ZyiKM5ktoIyafGkH6zg/tj+mA+NE//aPYKG0k8kCHSHVJrpLpcAlOBEXQ3SavA==",
"license": "MIT",
"dependencies": {
"@emotion/memoize": "^0.9.0",
"@emotion/sheet": "^1.4.0",
- "@emotion/utils": "^1.4.0",
+ "@emotion/utils": "^1.4.2",
"@emotion/weak-memoize": "^0.4.0",
"stylis": "4.2.0"
}
@@ -2123,9 +2123,9 @@
}
},
"node_modules/@emotion/utils": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/@emotion/utils/-/utils-1.4.1.tgz",
- "integrity": "sha512-BymCXzCG3r72VKJxaYVwOXATqXIZ85cuvg0YOUDxMGNrKc1DJRZk8MgV5wyXRyEayIMd4FuXJIUgTBXvDNW5cA==",
+ "version": "1.4.2",
+ "resolved": "https://registry.npmjs.org/@emotion/utils/-/utils-1.4.2.tgz",
+ "integrity": "sha512-3vLclRofFziIa3J2wDh9jjbkUz9qk5Vi3IZ/FSTKViB0k+ef0fPV7dYrUIugbgupYDx7v9ud/SjrtEP8Y4xLoA==",
"license": "MIT"
},
"node_modules/@emotion/weak-memoize": {
@@ -2522,7 +2522,7 @@
"version": "4.4.1",
"resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.1.tgz",
"integrity": "sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA==",
- "dev": true,
+ "devOptional": true,
"license": "MIT",
"dependencies": {
"eslint-visitor-keys": "^3.4.3"
@@ -2541,7 +2541,7 @@
"version": "4.12.1",
"resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz",
"integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==",
- "dev": true,
+ "devOptional": true,
"license": "MIT",
"engines": {
"node": "^12.0.0 || ^14.0.0 || >=16.0.0"
@@ -2551,7 +2551,7 @@
"version": "0.18.0",
"resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.18.0.tgz",
"integrity": "sha512-fTxvnS1sRMu3+JjXwJG0j/i4RT9u4qJ+lqS/yCGap4lH4zZGzQ7tu+xZqQmcMZq5OBZDL4QRxQzRjkWcGt8IVw==",
- "dev": true,
+ "devOptional": true,
"license": "Apache-2.0",
"dependencies": {
"@eslint/object-schema": "^2.1.4",
@@ -2566,7 +2566,7 @@
"version": "1.1.11",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
"integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
- "dev": true,
+ "devOptional": true,
"license": "MIT",
"dependencies": {
"balanced-match": "^1.0.0",
@@ -2577,7 +2577,7 @@
"version": "3.1.2",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
"integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
- "dev": true,
+ "devOptional": true,
"license": "ISC",
"dependencies": {
"brace-expansion": "^1.1.7"
@@ -2590,7 +2590,7 @@
"version": "0.7.0",
"resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.7.0.tgz",
"integrity": "sha512-xp5Jirz5DyPYlPiKat8jaq0EmYvDXKKpzTbxXMpT9eqlRJkRKIz9AGMdlvYjih+im+QlhWrpvVjl8IPC/lHlUw==",
- "dev": true,
+ "devOptional": true,
"license": "Apache-2.0",
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -2600,7 +2600,7 @@
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.1.0.tgz",
"integrity": "sha512-4Bfj15dVJdoy3RfZmmo86RK1Fwzn6SstsvK9JS+BaVKqC6QQQQyXekNaC+g+LKNgkQ+2VhGAzm6hO40AhMR3zQ==",
- "dev": true,
+ "devOptional": true,
"license": "MIT",
"dependencies": {
"ajv": "^6.12.4",
@@ -2624,7 +2624,7 @@
"version": "1.1.11",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
"integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
- "dev": true,
+ "devOptional": true,
"license": "MIT",
"dependencies": {
"balanced-match": "^1.0.0",
@@ -2635,7 +2635,7 @@
"version": "14.0.0",
"resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz",
"integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==",
- "dev": true,
+ "devOptional": true,
"license": "MIT",
"engines": {
"node": ">=18"
@@ -2648,7 +2648,7 @@
"version": "3.1.2",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
"integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
- "dev": true,
+ "devOptional": true,
"license": "ISC",
"dependencies": {
"brace-expansion": "^1.1.7"
@@ -2661,7 +2661,7 @@
"version": "9.13.0",
"resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.13.0.tgz",
"integrity": "sha512-IFLyoY4d72Z5y/6o/BazFBezupzI/taV8sGumxTAVw3lXG9A6md1Dc34T9s1FoD/an9pJH8RHbAxsaEbBed9lA==",
- "dev": true,
+ "devOptional": true,
"license": "MIT",
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -2671,7 +2671,7 @@
"version": "2.1.4",
"resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.4.tgz",
"integrity": "sha512-BsWiH1yFGjXXS2yvrf5LyuoSIIbPrGUWob917o+BTKuZ7qJdxX8aJLRxs1fS9n6r7vESrq1OUqb68dANcFXuQQ==",
- "dev": true,
+ "devOptional": true,
"license": "Apache-2.0",
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -2681,7 +2681,7 @@
"version": "0.2.2",
"resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.2.2.tgz",
"integrity": "sha512-CXtq5nR4Su+2I47WPOlWud98Y5Lv8Kyxp2ukhgFx/eW6Blm18VXJO5WuQylPugRo8nbluoi6GvvxBLqHcvqUUw==",
- "dev": true,
+ "devOptional": true,
"license": "Apache-2.0",
"dependencies": {
"levn": "^0.4.1"
@@ -2691,22 +2691,22 @@
}
},
"node_modules/@floating-ui/core": {
- "version": "1.6.8",
- "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.6.8.tgz",
- "integrity": "sha512-7XJ9cPU+yI2QeLS+FCSlqNFZJq8arvswefkZrYI1yQBbftw6FyrZOxYSh+9S7z7TpeWlRt9zJ5IhM1WIL334jA==",
+ "version": "1.6.9",
+ "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.6.9.tgz",
+ "integrity": "sha512-uMXCuQ3BItDUbAMhIXw7UPXRfAlOAvZzdK9BWpE60MCn+Svt3aLn9jsPTi/WNGlRUu2uI0v5S7JiIUsbsvh3fw==",
"license": "MIT",
"dependencies": {
- "@floating-ui/utils": "^0.2.8"
+ "@floating-ui/utils": "^0.2.9"
}
},
"node_modules/@floating-ui/dom": {
- "version": "1.6.12",
- "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.6.12.tgz",
- "integrity": "sha512-NP83c0HjokcGVEMeoStg317VD9W7eDlGK7457dMBANbKA6GJZdc7rjujdgqzTaz93jkGgc5P/jeWbaCHnMNc+w==",
+ "version": "1.6.13",
+ "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.6.13.tgz",
+ "integrity": "sha512-umqzocjDgNRGTuO7Q8CU32dkHkECqI8ZdMZ5Swb6QAM0t5rnlrN3lGo1hdpscRd3WS8T6DKYK4ephgIH9iRh3w==",
"license": "MIT",
"dependencies": {
"@floating-ui/core": "^1.6.0",
- "@floating-ui/utils": "^0.2.8"
+ "@floating-ui/utils": "^0.2.9"
}
},
"node_modules/@floating-ui/react-dom": {
@@ -2723,9 +2723,9 @@
}
},
"node_modules/@floating-ui/utils": {
- "version": "0.2.8",
- "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.8.tgz",
- "integrity": "sha512-kym7SodPp8/wloecOpcmSnWJsK7M0E5Wg8UcFA+uO4B9s5d0ywXOEro/8HM9x0rW+TljRzul/14UYz3TleT3ig==",
+ "version": "0.2.9",
+ "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.9.tgz",
+ "integrity": "sha512-MDWhGtE+eHw5JW7lq4qhc5yRLS11ERl1c7Z6Xd0a58DozHES6EnNNwUWbMiG4J9Cgj053Bhk8zvlhFYKVhULwg==",
"license": "MIT"
},
"node_modules/@fortawesome/fontawesome-common-types": {
@@ -2787,7 +2787,7 @@
"version": "0.19.1",
"resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz",
"integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==",
- "dev": true,
+ "devOptional": true,
"license": "Apache-2.0",
"engines": {
"node": ">=18.18.0"
@@ -2797,7 +2797,7 @@
"version": "0.16.6",
"resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.6.tgz",
"integrity": "sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==",
- "dev": true,
+ "devOptional": true,
"license": "Apache-2.0",
"dependencies": {
"@humanfs/core": "^0.19.1",
@@ -2811,7 +2811,7 @@
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz",
"integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==",
- "dev": true,
+ "devOptional": true,
"license": "Apache-2.0",
"engines": {
"node": ">=12.22"
@@ -2825,7 +2825,7 @@
"version": "0.3.1",
"resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.3.1.tgz",
"integrity": "sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==",
- "dev": true,
+ "devOptional": true,
"license": "Apache-2.0",
"engines": {
"node": ">=18.18"
@@ -3323,38 +3323,6 @@
"@jridgewell/sourcemap-codec": "^1.4.14"
}
},
- "node_modules/@mui/base": {
- "version": "5.0.0-beta.40",
- "resolved": "https://registry.npmjs.org/@mui/base/-/base-5.0.0-beta.40.tgz",
- "integrity": "sha512-I/lGHztkCzvwlXpjD2+SNmvNQvB4227xBXhISPjEaJUXGImOQ9f3D2Yj/T3KasSI/h0MLWy74X0J6clhPmsRbQ==",
- "license": "MIT",
- "dependencies": {
- "@babel/runtime": "^7.23.9",
- "@floating-ui/react-dom": "^2.0.8",
- "@mui/types": "^7.2.14",
- "@mui/utils": "^5.15.14",
- "@popperjs/core": "^2.11.8",
- "clsx": "^2.1.0",
- "prop-types": "^15.8.1"
- },
- "engines": {
- "node": ">=12.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/mui-org"
- },
- "peerDependencies": {
- "@types/react": "^17.0.0 || ^18.0.0",
- "react": "^17.0.0 || ^18.0.0",
- "react-dom": "^17.0.0 || ^18.0.0"
- },
- "peerDependenciesMeta": {
- "@types/react": {
- "optional": true
- }
- }
- },
"node_modules/@mui/core-downloads-tracker": {
"version": "6.1.6",
"resolved": "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-6.1.6.tgz",
@@ -3432,6 +3400,38 @@
}
}
},
+ "node_modules/@mui/lab/node_modules/@mui/base": {
+ "version": "5.0.0-beta.40",
+ "resolved": "https://registry.npmjs.org/@mui/base/-/base-5.0.0-beta.40.tgz",
+ "integrity": "sha512-I/lGHztkCzvwlXpjD2+SNmvNQvB4227xBXhISPjEaJUXGImOQ9f3D2Yj/T3KasSI/h0MLWy74X0J6clhPmsRbQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@babel/runtime": "^7.23.9",
+ "@floating-ui/react-dom": "^2.0.8",
+ "@mui/types": "^7.2.14",
+ "@mui/utils": "^5.15.14",
+ "@popperjs/core": "^2.11.8",
+ "clsx": "^2.1.0",
+ "prop-types": "^15.8.1"
+ },
+ "engines": {
+ "node": ">=12.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/mui-org"
+ },
+ "peerDependencies": {
+ "@types/react": "^17.0.0 || ^18.0.0",
+ "react": "^17.0.0 || ^18.0.0",
+ "react-dom": "^17.0.0 || ^18.0.0"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ }
+ }
+ },
"node_modules/@mui/material": {
"version": "6.1.6",
"resolved": "https://registry.npmjs.org/@mui/material/-/material-6.1.6.tgz",
@@ -3613,13 +3613,13 @@
}
},
"node_modules/@mui/private-theming": {
- "version": "5.16.6",
- "resolved": "https://registry.npmjs.org/@mui/private-theming/-/private-theming-5.16.6.tgz",
- "integrity": "sha512-rAk+Rh8Clg7Cd7shZhyt2HGTTE5wYKNSJ5sspf28Fqm/PZ69Er9o6KX25g03/FG2dfpg5GCwZh/xOojiTfm3hw==",
+ "version": "5.16.14",
+ "resolved": "https://registry.npmjs.org/@mui/private-theming/-/private-theming-5.16.14.tgz",
+ "integrity": "sha512-12t7NKzvYi819IO5IapW2BcR33wP/KAVrU8d7gLhGHoAmhDxyXlRoKiRij3TOD8+uzk0B6R9wHUNKi4baJcRNg==",
"license": "MIT",
"dependencies": {
"@babel/runtime": "^7.23.9",
- "@mui/utils": "^5.16.6",
+ "@mui/utils": "^5.16.14",
"prop-types": "^15.8.1"
},
"engines": {
@@ -3630,8 +3630,8 @@
"url": "https://opencollective.com/mui-org"
},
"peerDependencies": {
- "@types/react": "^17.0.0 || ^18.0.0",
- "react": "^17.0.0 || ^18.0.0"
+ "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0",
+ "react": "^17.0.0 || ^18.0.0 || ^19.0.0"
},
"peerDependenciesMeta": {
"@types/react": {
@@ -3640,13 +3640,13 @@
}
},
"node_modules/@mui/styled-engine": {
- "version": "5.16.6",
- "resolved": "https://registry.npmjs.org/@mui/styled-engine/-/styled-engine-5.16.6.tgz",
- "integrity": "sha512-zaThmS67ZmtHSWToTiHslbI8jwrmITcN93LQaR2lKArbvS7Z3iLkwRoiikNWutx9MBs8Q6okKvbZq1RQYB3v7g==",
+ "version": "5.16.14",
+ "resolved": "https://registry.npmjs.org/@mui/styled-engine/-/styled-engine-5.16.14.tgz",
+ "integrity": "sha512-UAiMPZABZ7p8mUW4akDV6O7N3+4DatStpXMZwPlt+H/dA0lt67qawN021MNND+4QTpjaiMYxbhKZeQcyWCbuKw==",
"license": "MIT",
"dependencies": {
"@babel/runtime": "^7.23.9",
- "@emotion/cache": "^11.11.0",
+ "@emotion/cache": "^11.13.5",
"csstype": "^3.1.3",
"prop-types": "^15.8.1"
},
@@ -3660,7 +3660,7 @@
"peerDependencies": {
"@emotion/react": "^11.4.1",
"@emotion/styled": "^11.3.0",
- "react": "^17.0.0 || ^18.0.0"
+ "react": "^17.0.0 || ^18.0.0 || ^19.0.0"
},
"peerDependenciesMeta": {
"@emotion/react": {
@@ -3672,16 +3672,16 @@
}
},
"node_modules/@mui/system": {
- "version": "5.16.7",
- "resolved": "https://registry.npmjs.org/@mui/system/-/system-5.16.7.tgz",
- "integrity": "sha512-Jncvs/r/d/itkxh7O7opOunTqbbSSzMTHzZkNLM+FjAOg+cYAZHrPDlYe1ZGKUYORwwb2XexlWnpZp0kZ4AHuA==",
+ "version": "5.16.14",
+ "resolved": "https://registry.npmjs.org/@mui/system/-/system-5.16.14.tgz",
+ "integrity": "sha512-KBxMwCb8mSIABnKvoGbvM33XHyT+sN0BzEBG+rsSc0lLQGzs7127KWkCA6/H8h6LZ00XpBEME5MAj8mZLiQ1tw==",
"license": "MIT",
"dependencies": {
"@babel/runtime": "^7.23.9",
- "@mui/private-theming": "^5.16.6",
- "@mui/styled-engine": "^5.16.6",
+ "@mui/private-theming": "^5.16.14",
+ "@mui/styled-engine": "^5.16.14",
"@mui/types": "^7.2.15",
- "@mui/utils": "^5.16.6",
+ "@mui/utils": "^5.16.14",
"clsx": "^2.1.0",
"csstype": "^3.1.3",
"prop-types": "^15.8.1"
@@ -3696,8 +3696,8 @@
"peerDependencies": {
"@emotion/react": "^11.5.0",
"@emotion/styled": "^11.3.0",
- "@types/react": "^17.0.0 || ^18.0.0",
- "react": "^17.0.0 || ^18.0.0"
+ "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0",
+ "react": "^17.0.0 || ^18.0.0 || ^19.0.0"
},
"peerDependenciesMeta": {
"@emotion/react": {
@@ -3726,9 +3726,9 @@
}
},
"node_modules/@mui/utils": {
- "version": "5.16.6",
- "resolved": "https://registry.npmjs.org/@mui/utils/-/utils-5.16.6.tgz",
- "integrity": "sha512-tWiQqlhxAt3KENNiSRL+DIn9H5xNVK6Jjf70x3PnfQPz1MPBdh7yyIcAyVBT9xiw7hP3SomRhPR7hzBMBCjqEA==",
+ "version": "5.16.14",
+ "resolved": "https://registry.npmjs.org/@mui/utils/-/utils-5.16.14.tgz",
+ "integrity": "sha512-wn1QZkRzSmeXD1IguBVvJJHV3s6rxJrfb6YuC9Kk6Noh9f8Fb54nUs5JRkKm+BOerRhj5fLg05Dhx/H3Ofb8Mg==",
"license": "MIT",
"dependencies": {
"@babel/runtime": "^7.23.9",
@@ -3736,7 +3736,7 @@
"@types/prop-types": "^15.7.12",
"clsx": "^2.1.1",
"prop-types": "^15.8.1",
- "react-is": "^18.3.1"
+ "react-is": "^19.0.0"
},
"engines": {
"node": ">=12.0.0"
@@ -3746,8 +3746,8 @@
"url": "https://opencollective.com/mui-org"
},
"peerDependencies": {
- "@types/react": "^17.0.0 || ^18.0.0",
- "react": "^17.0.0 || ^18.0.0"
+ "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0",
+ "react": "^17.0.0 || ^18.0.0 || ^19.0.0"
},
"peerDependenciesMeta": {
"@types/react": {
@@ -3755,6 +3755,12 @@
}
}
},
+ "node_modules/@mui/utils/node_modules/react-is": {
+ "version": "19.0.0",
+ "resolved": "https://registry.npmjs.org/react-is/-/react-is-19.0.0.tgz",
+ "integrity": "sha512-H91OHcwjZsbq3ClIDHMzBShc1rotbfACdWENsmEf0IFvZ3FgGPtdHMcsv45bQ1hAbgdfiA8SnxTKfDS+x/8m2g==",
+ "license": "MIT"
+ },
"node_modules/@nodelib/fs.scandir": {
"version": "2.1.5",
"resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
@@ -3816,7 +3822,6 @@
"cpu": [
"arm"
],
- "dev": true,
"license": "MIT",
"optional": true,
"os": [
@@ -3830,7 +3835,6 @@
"cpu": [
"arm64"
],
- "dev": true,
"license": "MIT",
"optional": true,
"os": [
@@ -3844,7 +3848,6 @@
"cpu": [
"arm64"
],
- "dev": true,
"license": "MIT",
"optional": true,
"os": [
@@ -3858,7 +3861,6 @@
"cpu": [
"x64"
],
- "dev": true,
"license": "MIT",
"optional": true,
"os": [
@@ -3872,7 +3874,6 @@
"cpu": [
"arm64"
],
- "dev": true,
"license": "MIT",
"optional": true,
"os": [
@@ -3886,7 +3887,6 @@
"cpu": [
"x64"
],
- "dev": true,
"license": "MIT",
"optional": true,
"os": [
@@ -3900,7 +3900,6 @@
"cpu": [
"arm"
],
- "dev": true,
"license": "MIT",
"optional": true,
"os": [
@@ -3914,7 +3913,6 @@
"cpu": [
"arm"
],
- "dev": true,
"license": "MIT",
"optional": true,
"os": [
@@ -3928,7 +3926,6 @@
"cpu": [
"arm64"
],
- "dev": true,
"license": "MIT",
"optional": true,
"os": [
@@ -3942,7 +3939,6 @@
"cpu": [
"arm64"
],
- "dev": true,
"license": "MIT",
"optional": true,
"os": [
@@ -3956,7 +3952,6 @@
"cpu": [
"ppc64"
],
- "dev": true,
"license": "MIT",
"optional": true,
"os": [
@@ -3970,7 +3965,6 @@
"cpu": [
"riscv64"
],
- "dev": true,
"license": "MIT",
"optional": true,
"os": [
@@ -3984,7 +3978,6 @@
"cpu": [
"s390x"
],
- "dev": true,
"license": "MIT",
"optional": true,
"os": [
@@ -3998,7 +3991,6 @@
"cpu": [
"x64"
],
- "dev": true,
"license": "MIT",
"optional": true,
"os": [
@@ -4012,7 +4004,6 @@
"cpu": [
"x64"
],
- "dev": true,
"license": "MIT",
"optional": true,
"os": [
@@ -4026,7 +4017,6 @@
"cpu": [
"arm64"
],
- "dev": true,
"license": "MIT",
"optional": true,
"os": [
@@ -4040,7 +4030,6 @@
"cpu": [
"ia32"
],
- "dev": true,
"license": "MIT",
"optional": true,
"os": [
@@ -4054,7 +4043,6 @@
"cpu": [
"x64"
],
- "dev": true,
"license": "MIT",
"optional": true,
"os": [
@@ -4095,7 +4083,7 @@
"version": "1.7.40",
"resolved": "https://registry.npmjs.org/@swc/core/-/core-1.7.40.tgz",
"integrity": "sha512-0HIzM5vigVT5IvNum+pPuST9p8xFhN6mhdIKju7qYYeNuZG78lwms/2d8WgjTJJlzp6JlPguXGrMMNzjQw0qNg==",
- "dev": true,
+ "devOptional": true,
"hasInstallScript": true,
"license": "Apache-2.0",
"dependencies": {
@@ -4137,7 +4125,6 @@
"cpu": [
"arm64"
],
- "dev": true,
"license": "Apache-2.0 AND MIT",
"optional": true,
"os": [
@@ -4154,7 +4141,6 @@
"cpu": [
"x64"
],
- "dev": true,
"license": "Apache-2.0 AND MIT",
"optional": true,
"os": [
@@ -4171,7 +4157,6 @@
"cpu": [
"arm"
],
- "dev": true,
"license": "Apache-2.0",
"optional": true,
"os": [
@@ -4188,7 +4173,6 @@
"cpu": [
"arm64"
],
- "dev": true,
"license": "Apache-2.0 AND MIT",
"optional": true,
"os": [
@@ -4205,7 +4189,6 @@
"cpu": [
"arm64"
],
- "dev": true,
"license": "Apache-2.0 AND MIT",
"optional": true,
"os": [
@@ -4222,7 +4205,6 @@
"cpu": [
"x64"
],
- "dev": true,
"license": "Apache-2.0 AND MIT",
"optional": true,
"os": [
@@ -4239,7 +4221,6 @@
"cpu": [
"x64"
],
- "dev": true,
"license": "Apache-2.0 AND MIT",
"optional": true,
"os": [
@@ -4256,7 +4237,6 @@
"cpu": [
"arm64"
],
- "dev": true,
"license": "Apache-2.0 AND MIT",
"optional": true,
"os": [
@@ -4273,7 +4253,6 @@
"cpu": [
"ia32"
],
- "dev": true,
"license": "Apache-2.0 AND MIT",
"optional": true,
"os": [
@@ -4290,7 +4269,6 @@
"cpu": [
"x64"
],
- "dev": true,
"license": "Apache-2.0 AND MIT",
"optional": true,
"os": [
@@ -4304,14 +4282,14 @@
"version": "0.1.3",
"resolved": "https://registry.npmjs.org/@swc/counter/-/counter-0.1.3.tgz",
"integrity": "sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==",
- "dev": true,
+ "devOptional": true,
"license": "Apache-2.0"
},
"node_modules/@swc/types": {
"version": "0.1.13",
"resolved": "https://registry.npmjs.org/@swc/types/-/types-0.1.13.tgz",
"integrity": "sha512-JL7eeCk6zWCbiYQg2xQSdLXQJl8Qoc9rXmG2cEKvHe3CKwMHwHGpfOb8frzNLmbycOo6I51qxnLnn9ESf4I20Q==",
- "dev": true,
+ "devOptional": true,
"license": "Apache-2.0",
"dependencies": {
"@swc/counter": "^0.1.3"
@@ -4505,7 +4483,6 @@
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz",
"integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==",
- "dev": true,
"license": "MIT"
},
"node_modules/@types/graceful-fs": {
@@ -4605,7 +4582,7 @@
"version": "7.0.15",
"resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz",
"integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==",
- "dev": true,
+ "devOptional": true,
"license": "MIT"
},
"node_modules/@types/katex": {
@@ -4977,7 +4954,7 @@
"version": "5.3.2",
"resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz",
"integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==",
- "dev": true,
+ "devOptional": true,
"license": "MIT",
"peerDependencies": {
"acorn": "^6.0.0 || ^7.0.0 || ^8.0.0"
@@ -5011,7 +4988,7 @@
"version": "6.12.6",
"resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
"integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
- "dev": true,
+ "devOptional": true,
"license": "MIT",
"dependencies": {
"fast-deep-equal": "^3.1.1",
@@ -5086,7 +5063,7 @@
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
"integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
- "dev": true,
+ "devOptional": true,
"license": "Python-2.0"
},
"node_modules/aria-query": {
@@ -5698,7 +5675,7 @@
"version": "7.0.3",
"resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
"integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
- "dev": true,
+ "devOptional": true,
"license": "MIT",
"dependencies": {
"path-key": "^3.1.0",
@@ -5815,7 +5792,7 @@
"version": "0.1.4",
"resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz",
"integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==",
- "dev": true,
+ "devOptional": true,
"license": "MIT"
},
"node_modules/deepmerge": {
@@ -6121,7 +6098,7 @@
"version": "9.13.0",
"resolved": "https://registry.npmjs.org/eslint/-/eslint-9.13.0.tgz",
"integrity": "sha512-EYZK6SX6zjFHST/HRytOdA/zE72Cq/bfw45LSyuwrdvcclb/gqV8RRQxywOBEWO2+WDpva6UZa4CcDeJKzUCFA==",
- "dev": true,
+ "devOptional": true,
"license": "MIT",
"dependencies": {
"@eslint-community/eslint-utils": "^4.2.0",
@@ -6205,7 +6182,7 @@
"version": "8.2.0",
"resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.2.0.tgz",
"integrity": "sha512-PHlWUfG6lvPc3yvP5A4PNyBL1W8fkDUccmI21JUu/+GKZBoH/W5u6usENXUrWFRsyoW5ACUjFGgAFQp5gUlb/A==",
- "dev": true,
+ "devOptional": true,
"license": "BSD-2-Clause",
"dependencies": {
"esrecurse": "^4.3.0",
@@ -6222,7 +6199,7 @@
"version": "3.4.3",
"resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz",
"integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==",
- "dev": true,
+ "devOptional": true,
"license": "Apache-2.0",
"engines": {
"node": "^12.22.0 || ^14.17.0 || >=16.0.0"
@@ -6235,7 +6212,7 @@
"version": "1.1.11",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
"integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
- "dev": true,
+ "devOptional": true,
"license": "MIT",
"dependencies": {
"balanced-match": "^1.0.0",
@@ -6246,7 +6223,7 @@
"version": "4.2.0",
"resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz",
"integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==",
- "dev": true,
+ "devOptional": true,
"license": "Apache-2.0",
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -6259,7 +6236,7 @@
"version": "3.1.2",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
"integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
- "dev": true,
+ "devOptional": true,
"license": "ISC",
"dependencies": {
"brace-expansion": "^1.1.7"
@@ -6272,7 +6249,7 @@
"version": "10.3.0",
"resolved": "https://registry.npmjs.org/espree/-/espree-10.3.0.tgz",
"integrity": "sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==",
- "dev": true,
+ "devOptional": true,
"license": "BSD-2-Clause",
"dependencies": {
"acorn": "^8.14.0",
@@ -6290,7 +6267,7 @@
"version": "4.2.0",
"resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz",
"integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==",
- "dev": true,
+ "devOptional": true,
"license": "Apache-2.0",
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -6316,7 +6293,7 @@
"version": "1.6.0",
"resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz",
"integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==",
- "dev": true,
+ "devOptional": true,
"license": "BSD-3-Clause",
"dependencies": {
"estraverse": "^5.1.0"
@@ -6329,7 +6306,7 @@
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz",
"integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==",
- "dev": true,
+ "devOptional": true,
"license": "BSD-2-Clause",
"dependencies": {
"estraverse": "^5.2.0"
@@ -6422,7 +6399,7 @@
"version": "3.1.3",
"resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
"integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
- "dev": true,
+ "devOptional": true,
"license": "MIT"
},
"node_modules/fast-glob": {
@@ -6457,14 +6434,14 @@
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
"integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==",
- "dev": true,
+ "devOptional": true,
"license": "MIT"
},
"node_modules/fast-levenshtein": {
"version": "2.0.6",
"resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
"integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==",
- "dev": true,
+ "devOptional": true,
"license": "MIT"
},
"node_modules/fastq": {
@@ -6490,7 +6467,7 @@
"version": "8.0.0",
"resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz",
"integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==",
- "dev": true,
+ "devOptional": true,
"license": "MIT",
"dependencies": {
"flat-cache": "^4.0.0"
@@ -6544,7 +6521,7 @@
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz",
"integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==",
- "dev": true,
+ "devOptional": true,
"license": "MIT",
"dependencies": {
"locate-path": "^6.0.0",
@@ -6561,7 +6538,7 @@
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz",
"integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==",
- "dev": true,
+ "devOptional": true,
"license": "MIT",
"dependencies": {
"flatted": "^3.2.9",
@@ -6575,7 +6552,7 @@
"version": "3.3.1",
"resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz",
"integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==",
- "dev": true,
+ "devOptional": true,
"license": "ISC"
},
"node_modules/follow-redirects": {
@@ -6743,7 +6720,7 @@
"version": "6.0.2",
"resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
"integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==",
- "dev": true,
+ "devOptional": true,
"license": "ISC",
"dependencies": {
"is-glob": "^4.0.3"
@@ -6926,7 +6903,7 @@
"version": "5.3.2",
"resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz",
"integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==",
- "dev": true,
+ "devOptional": true,
"license": "MIT",
"engines": {
"node": ">= 4"
@@ -6972,7 +6949,7 @@
"version": "0.1.4",
"resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
"integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==",
- "dev": true,
+ "devOptional": true,
"license": "MIT",
"engines": {
"node": ">=0.8.19"
@@ -7125,7 +7102,7 @@
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
"integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==",
- "dev": true,
+ "devOptional": true,
"license": "ISC"
},
"node_modules/istanbul-lib-coverage": {
@@ -8145,7 +8122,7 @@
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
"integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
- "dev": true,
+ "devOptional": true,
"license": "MIT",
"dependencies": {
"argparse": "^2.0.1"
@@ -8215,7 +8192,7 @@
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz",
"integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==",
- "dev": true,
+ "devOptional": true,
"license": "MIT"
},
"node_modules/json-parse-even-better-errors": {
@@ -8228,14 +8205,14 @@
"version": "0.4.1",
"resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
"integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
- "dev": true,
+ "devOptional": true,
"license": "MIT"
},
"node_modules/json-stable-stringify-without-jsonify": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
"integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==",
- "dev": true,
+ "devOptional": true,
"license": "MIT"
},
"node_modules/json5": {
@@ -8292,7 +8269,7 @@
"version": "4.5.4",
"resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz",
"integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==",
- "dev": true,
+ "devOptional": true,
"license": "MIT",
"dependencies": {
"json-buffer": "3.0.1"
@@ -8322,7 +8299,7 @@
"version": "0.4.1",
"resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz",
"integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==",
- "dev": true,
+ "devOptional": true,
"license": "MIT",
"dependencies": {
"prelude-ls": "^1.2.1",
@@ -8342,7 +8319,7 @@
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
"integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==",
- "dev": true,
+ "devOptional": true,
"license": "MIT",
"dependencies": {
"p-locate": "^5.0.0"
@@ -8379,7 +8356,7 @@
"version": "4.6.2",
"resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
"integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==",
- "dev": true,
+ "devOptional": true,
"license": "MIT"
},
"node_modules/longest-streak": {
@@ -9147,7 +9124,7 @@
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
"integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==",
- "dev": true,
+ "devOptional": true,
"license": "MIT"
},
"node_modules/node-int64": {
@@ -9230,7 +9207,7 @@
"version": "0.9.4",
"resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz",
"integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==",
- "dev": true,
+ "devOptional": true,
"license": "MIT",
"dependencies": {
"deep-is": "^0.1.3",
@@ -9248,7 +9225,7 @@
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
"integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
- "dev": true,
+ "devOptional": true,
"license": "MIT",
"dependencies": {
"yocto-queue": "^0.1.0"
@@ -9264,7 +9241,7 @@
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz",
"integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==",
- "dev": true,
+ "devOptional": true,
"license": "MIT",
"dependencies": {
"p-limit": "^3.0.2"
@@ -9332,7 +9309,7 @@
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
"integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
- "dev": true,
+ "devOptional": true,
"license": "MIT",
"engines": {
"node": ">=8"
@@ -9485,7 +9462,6 @@
"version": "8.4.47",
"resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.47.tgz",
"integrity": "sha512-56rxCq7G/XfB4EkXq9Egn5GCqugWvDFjafDOThIdMBsI15iqPqR5r15TfSr1YPYeEI19YeaXMCbY6u88Y76GLQ==",
- "dev": true,
"funding": [
{
"type": "opencollective",
@@ -9514,7 +9490,6 @@
"version": "3.3.7",
"resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz",
"integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==",
- "dev": true,
"funding": [
{
"type": "github",
@@ -9533,7 +9508,7 @@
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz",
"integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==",
- "dev": true,
+ "devOptional": true,
"license": "MIT",
"engines": {
"node": ">= 0.8.0"
@@ -9670,28 +9645,24 @@
"license": "MIT"
},
"node_modules/react": {
- "version": "18.3.1",
- "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz",
- "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==",
+ "version": "19.0.0",
+ "resolved": "https://registry.npmjs.org/react/-/react-19.0.0.tgz",
+ "integrity": "sha512-V8AVnmPIICiWpGfm6GLzCR/W5FXLchHop40W4nXBmdlEceh16rCN8O8LNWm5bh5XUX91fh7KpA+W0TgMKmgTpQ==",
"license": "MIT",
- "dependencies": {
- "loose-envify": "^1.1.0"
- },
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/react-dom": {
- "version": "18.3.1",
- "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz",
- "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==",
+ "version": "19.0.0",
+ "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.0.0.tgz",
+ "integrity": "sha512-4GV5sHFG0e/0AD4X+ySy6UJd3jVl1iNsNHdpad0qhABJ11twS3TTBnseqsKurKcsNqCEFeGL3uLpVChpIO3QfQ==",
"license": "MIT",
"dependencies": {
- "loose-envify": "^1.1.0",
- "scheduler": "^0.23.2"
+ "scheduler": "^0.25.0"
},
"peerDependencies": {
- "react": "^18.3.1"
+ "react": "^19.0.0"
}
},
"node_modules/react-is": {
@@ -9978,7 +9949,6 @@
"version": "4.24.3",
"resolved": "https://registry.npmjs.org/rollup/-/rollup-4.24.3.tgz",
"integrity": "sha512-HBW896xR5HGmoksbi3JBDtmVzWiPAYqp7wip50hjQ67JbDz61nyoMPdqu1DvVW9asYb2M65Z20ZHsyJCMqMyDg==",
- "dev": true,
"license": "MIT",
"dependencies": {
"@types/estree": "1.0.6"
@@ -10054,13 +10024,10 @@
}
},
"node_modules/scheduler": {
- "version": "0.23.2",
- "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz",
- "integrity": "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==",
- "license": "MIT",
- "dependencies": {
- "loose-envify": "^1.1.0"
- }
+ "version": "0.25.0",
+ "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.25.0.tgz",
+ "integrity": "sha512-xFVuu11jh+xcO7JOAGJNOXld8/TcEHK/4CituBUeUb5hqxJLj9YuemAEuvm9gQ/+pgXYfbQuqAkiYu+u7YEsNA==",
+ "license": "MIT"
},
"node_modules/semver": {
"version": "6.3.1",
@@ -10076,7 +10043,7 @@
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
"integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
- "dev": true,
+ "devOptional": true,
"license": "MIT",
"dependencies": {
"shebang-regex": "^3.0.0"
@@ -10089,7 +10056,7 @@
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
"integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
- "dev": true,
+ "devOptional": true,
"license": "MIT",
"engines": {
"node": ">=8"
@@ -10159,7 +10126,6 @@
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz",
"integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==",
- "dev": true,
"license": "BSD-3-Clause",
"engines": {
"node": ">=0.10.0"
@@ -10292,7 +10258,7 @@
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
"integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
- "dev": true,
+ "devOptional": true,
"license": "MIT",
"engines": {
"node": ">=8"
@@ -10380,7 +10346,7 @@
"version": "0.2.0",
"resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
"integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==",
- "dev": true,
+ "devOptional": true,
"license": "MIT"
},
"node_modules/tiny-invariant": {
@@ -10567,7 +10533,7 @@
"version": "0.4.0",
"resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",
"integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==",
- "dev": true,
+ "devOptional": true,
"license": "MIT",
"dependencies": {
"prelude-ls": "^1.2.1"
@@ -10601,7 +10567,6 @@
"version": "5.6.3",
"resolved": "https://registry.npmjs.org/typescript/-/typescript-5.6.3.tgz",
"integrity": "sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==",
- "dev": true,
"license": "Apache-2.0",
"bin": {
"tsc": "bin/tsc",
@@ -10793,7 +10758,7 @@
"version": "4.4.1",
"resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
"integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
- "dev": true,
+ "devOptional": true,
"license": "BSD-2-Clause",
"dependencies": {
"punycode": "^2.1.0"
@@ -10882,7 +10847,6 @@
"version": "5.4.10",
"resolved": "https://registry.npmjs.org/vite/-/vite-5.4.10.tgz",
"integrity": "sha512-1hvaPshuPUtxeQ0hsVH3Mud0ZanOLwVTneA1EgbAM5LhaZEqyPWGRQ7BtaMvUrTDeEaC8pxtj6a6jku3x4z6SQ==",
- "dev": true,
"license": "MIT",
"dependencies": {
"esbuild": "^0.21.3",
@@ -11021,7 +10985,6 @@
"cpu": [
"ppc64"
],
- "dev": true,
"license": "MIT",
"optional": true,
"os": [
@@ -11038,7 +11001,6 @@
"cpu": [
"arm"
],
- "dev": true,
"license": "MIT",
"optional": true,
"os": [
@@ -11055,7 +11017,6 @@
"cpu": [
"arm64"
],
- "dev": true,
"license": "MIT",
"optional": true,
"os": [
@@ -11072,7 +11033,6 @@
"cpu": [
"x64"
],
- "dev": true,
"license": "MIT",
"optional": true,
"os": [
@@ -11089,7 +11049,6 @@
"cpu": [
"arm64"
],
- "dev": true,
"license": "MIT",
"optional": true,
"os": [
@@ -11106,7 +11065,6 @@
"cpu": [
"x64"
],
- "dev": true,
"license": "MIT",
"optional": true,
"os": [
@@ -11123,7 +11081,6 @@
"cpu": [
"arm64"
],
- "dev": true,
"license": "MIT",
"optional": true,
"os": [
@@ -11140,7 +11097,6 @@
"cpu": [
"x64"
],
- "dev": true,
"license": "MIT",
"optional": true,
"os": [
@@ -11157,7 +11113,6 @@
"cpu": [
"arm"
],
- "dev": true,
"license": "MIT",
"optional": true,
"os": [
@@ -11174,7 +11129,6 @@
"cpu": [
"arm64"
],
- "dev": true,
"license": "MIT",
"optional": true,
"os": [
@@ -11191,7 +11145,6 @@
"cpu": [
"ia32"
],
- "dev": true,
"license": "MIT",
"optional": true,
"os": [
@@ -11208,7 +11161,6 @@
"cpu": [
"loong64"
],
- "dev": true,
"license": "MIT",
"optional": true,
"os": [
@@ -11225,7 +11177,6 @@
"cpu": [
"mips64el"
],
- "dev": true,
"license": "MIT",
"optional": true,
"os": [
@@ -11242,7 +11193,6 @@
"cpu": [
"ppc64"
],
- "dev": true,
"license": "MIT",
"optional": true,
"os": [
@@ -11259,7 +11209,6 @@
"cpu": [
"riscv64"
],
- "dev": true,
"license": "MIT",
"optional": true,
"os": [
@@ -11276,7 +11225,6 @@
"cpu": [
"s390x"
],
- "dev": true,
"license": "MIT",
"optional": true,
"os": [
@@ -11293,7 +11241,6 @@
"cpu": [
"x64"
],
- "dev": true,
"license": "MIT",
"optional": true,
"os": [
@@ -11310,7 +11257,6 @@
"cpu": [
"x64"
],
- "dev": true,
"license": "MIT",
"optional": true,
"os": [
@@ -11327,7 +11273,6 @@
"cpu": [
"x64"
],
- "dev": true,
"license": "MIT",
"optional": true,
"os": [
@@ -11344,7 +11289,6 @@
"cpu": [
"x64"
],
- "dev": true,
"license": "MIT",
"optional": true,
"os": [
@@ -11361,7 +11305,6 @@
"cpu": [
"arm64"
],
- "dev": true,
"license": "MIT",
"optional": true,
"os": [
@@ -11378,7 +11321,6 @@
"cpu": [
"ia32"
],
- "dev": true,
"license": "MIT",
"optional": true,
"os": [
@@ -11395,7 +11337,6 @@
"cpu": [
"x64"
],
- "dev": true,
"license": "MIT",
"optional": true,
"os": [
@@ -11409,7 +11350,6 @@
"version": "0.21.5",
"resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz",
"integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==",
- "dev": true,
"hasInstallScript": true,
"license": "MIT",
"bin": {
@@ -11619,7 +11559,7 @@
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
"integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
- "dev": true,
+ "devOptional": true,
"license": "ISC",
"dependencies": {
"isexe": "^2.0.0"
@@ -11635,7 +11575,7 @@
"version": "1.2.5",
"resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz",
"integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==",
- "dev": true,
+ "devOptional": true,
"license": "MIT",
"engines": {
"node": ">=0.10.0"
@@ -11792,7 +11732,7 @@
"version": "0.1.0",
"resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
"integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==",
- "dev": true,
+ "devOptional": true,
"license": "MIT",
"engines": {
"node": ">=10"
diff --git a/client/package.json b/client/package.json
index 6a7de25..a0954df 100644
--- a/client/package.json
+++ b/client/package.json
@@ -29,8 +29,8 @@
"katex": "^0.16.11",
"marked": "^14.1.2",
"nanoid": "^5.0.2",
- "react": "^18.3.1",
- "react-dom": "^18.3.1",
+ "react": "^19.0.0",
+ "react-dom": "^19.0.0",
"react-modal": "^3.16.1",
"react-router-dom": "^6.26.2",
"remark-math": "^6.0.0",
diff --git a/client/src/__tests__/components/GiftTemplate/templates/MultipleChoice.test.tsx b/client/src/__tests__/components/GiftTemplate/templates/MultipleChoice.test.tsx
index bc59d60..afe83d1 100644
--- a/client/src/__tests__/components/GiftTemplate/templates/MultipleChoice.test.tsx
+++ b/client/src/__tests__/components/GiftTemplate/templates/MultipleChoice.test.tsx
@@ -1,5 +1,3 @@
-// @ts-expect-error: Required for pipeline compatibility
-import React from 'react';
import { render } from '@testing-library/react';
import '@testing-library/jest-dom';
import { MultipleChoice } from '../../../../components/GiftTemplate/templates';
diff --git a/client/src/__tests__/components/GiftTemplate/templates/Numerical.test.tsx b/client/src/__tests__/components/GiftTemplate/templates/Numerical.test.tsx
index 996f8d7..d8a4749 100644
--- a/client/src/__tests__/components/GiftTemplate/templates/Numerical.test.tsx
+++ b/client/src/__tests__/components/GiftTemplate/templates/Numerical.test.tsx
@@ -1,5 +1,3 @@
-// @ts-expect-error : Required for pipeline compatibility
-import React from 'react';
import { render } from '@testing-library/react';
import '@testing-library/jest-dom';
import Numerical from '../../../../components/GiftTemplate/templates/Numerical';
diff --git a/client/src/__tests__/components/GiftTemplate/templates/ShortAnswer.test.tsx b/client/src/__tests__/components/GiftTemplate/templates/ShortAnswer.test.tsx
index a58f2fa..145e4d6 100644
--- a/client/src/__tests__/components/GiftTemplate/templates/ShortAnswer.test.tsx
+++ b/client/src/__tests__/components/GiftTemplate/templates/ShortAnswer.test.tsx
@@ -1,5 +1,3 @@
-// @ts-expect-error: Required for pipeline compatibility
-import React from 'react';
import { render } from '@testing-library/react';
import '@testing-library/jest-dom';
import ShortAnswer from '../../../../components/GiftTemplate/templates/ShortAnswer';
diff --git a/client/src/__tests__/components/GiftTemplate/templates/TrueFalse.test.tsx b/client/src/__tests__/components/GiftTemplate/templates/TrueFalse.test.tsx
index afd7769..1dae35b 100644
--- a/client/src/__tests__/components/GiftTemplate/templates/TrueFalse.test.tsx
+++ b/client/src/__tests__/components/GiftTemplate/templates/TrueFalse.test.tsx
@@ -1,5 +1,3 @@
-// @ts-expect-error: Required for pipeline compatibility
-import React from 'react';
import { render } from '@testing-library/react';
import '@testing-library/jest-dom';
import TrueFalse from '../../../../components/GiftTemplate/templates';
From 3c9b14dd9db1043b7e388318ee53370935be5bd9 Mon Sep 17 00:00:00 2001
From: JubaAzul <118773284+JubaAzul@users.noreply.github.com>
Date: Wed, 15 Jan 2025 10:30:45 -0500
Subject: [PATCH 15/23] Used "@ts-expect-error" instead of "@ts-ignore"
---
.../components/GiftTemplate/templates/MultipleChoice.test.tsx | 2 ++
.../components/GiftTemplate/templates/Numerical.test.tsx | 2 ++
.../components/GiftTemplate/templates/ShortAnswer.test.tsx | 2 ++
.../components/GiftTemplate/templates/TrueFalse.test.tsx | 2 ++
4 files changed, 8 insertions(+)
diff --git a/client/src/__tests__/components/GiftTemplate/templates/MultipleChoice.test.tsx b/client/src/__tests__/components/GiftTemplate/templates/MultipleChoice.test.tsx
index afe83d1..f11106c 100644
--- a/client/src/__tests__/components/GiftTemplate/templates/MultipleChoice.test.tsx
+++ b/client/src/__tests__/components/GiftTemplate/templates/MultipleChoice.test.tsx
@@ -1,3 +1,5 @@
+// @ts-expect-error
+import React from 'react';
import { render } from '@testing-library/react';
import '@testing-library/jest-dom';
import { MultipleChoice } from '../../../../components/GiftTemplate/templates';
diff --git a/client/src/__tests__/components/GiftTemplate/templates/Numerical.test.tsx b/client/src/__tests__/components/GiftTemplate/templates/Numerical.test.tsx
index d8a4749..c1c8ebb 100644
--- a/client/src/__tests__/components/GiftTemplate/templates/Numerical.test.tsx
+++ b/client/src/__tests__/components/GiftTemplate/templates/Numerical.test.tsx
@@ -1,3 +1,5 @@
+// @ts-expect-error
+import React from 'react';
import { render } from '@testing-library/react';
import '@testing-library/jest-dom';
import Numerical from '../../../../components/GiftTemplate/templates/Numerical';
diff --git a/client/src/__tests__/components/GiftTemplate/templates/ShortAnswer.test.tsx b/client/src/__tests__/components/GiftTemplate/templates/ShortAnswer.test.tsx
index 145e4d6..e33c568 100644
--- a/client/src/__tests__/components/GiftTemplate/templates/ShortAnswer.test.tsx
+++ b/client/src/__tests__/components/GiftTemplate/templates/ShortAnswer.test.tsx
@@ -1,3 +1,5 @@
+// @ts-expect-error
+import React from 'react';
import { render } from '@testing-library/react';
import '@testing-library/jest-dom';
import ShortAnswer from '../../../../components/GiftTemplate/templates/ShortAnswer';
diff --git a/client/src/__tests__/components/GiftTemplate/templates/TrueFalse.test.tsx b/client/src/__tests__/components/GiftTemplate/templates/TrueFalse.test.tsx
index 1dae35b..38b0c9a 100644
--- a/client/src/__tests__/components/GiftTemplate/templates/TrueFalse.test.tsx
+++ b/client/src/__tests__/components/GiftTemplate/templates/TrueFalse.test.tsx
@@ -1,3 +1,5 @@
+// @ts-expect-error
+import React from 'react';
import { render } from '@testing-library/react';
import '@testing-library/jest-dom';
import TrueFalse from '../../../../components/GiftTemplate/templates';
From 3eb7ef084cfb47fb78cefadec9b6c6dec0d26063 Mon Sep 17 00:00:00 2001
From: JubaAzul <118773284+JubaAzul@users.noreply.github.com>
Date: Wed, 15 Jan 2025 10:40:40 -0500
Subject: [PATCH 16/23] Include a description after the "@ts-expect-error"
directive to explain why the @ts-expect-error is necessary. The description
must be 3 characters or longer
---
.../components/GiftTemplate/templates/MultipleChoice.test.tsx | 2 +-
.../components/GiftTemplate/templates/Numerical.test.tsx | 2 +-
.../components/GiftTemplate/templates/ShortAnswer.test.tsx | 2 +-
.../components/GiftTemplate/templates/TrueFalse.test.tsx | 2 +-
4 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/client/src/__tests__/components/GiftTemplate/templates/MultipleChoice.test.tsx b/client/src/__tests__/components/GiftTemplate/templates/MultipleChoice.test.tsx
index f11106c..bc59d60 100644
--- a/client/src/__tests__/components/GiftTemplate/templates/MultipleChoice.test.tsx
+++ b/client/src/__tests__/components/GiftTemplate/templates/MultipleChoice.test.tsx
@@ -1,4 +1,4 @@
-// @ts-expect-error
+// @ts-expect-error: Required for pipeline compatibility
import React from 'react';
import { render } from '@testing-library/react';
import '@testing-library/jest-dom';
diff --git a/client/src/__tests__/components/GiftTemplate/templates/Numerical.test.tsx b/client/src/__tests__/components/GiftTemplate/templates/Numerical.test.tsx
index c1c8ebb..996f8d7 100644
--- a/client/src/__tests__/components/GiftTemplate/templates/Numerical.test.tsx
+++ b/client/src/__tests__/components/GiftTemplate/templates/Numerical.test.tsx
@@ -1,4 +1,4 @@
-// @ts-expect-error
+// @ts-expect-error : Required for pipeline compatibility
import React from 'react';
import { render } from '@testing-library/react';
import '@testing-library/jest-dom';
diff --git a/client/src/__tests__/components/GiftTemplate/templates/ShortAnswer.test.tsx b/client/src/__tests__/components/GiftTemplate/templates/ShortAnswer.test.tsx
index e33c568..a58f2fa 100644
--- a/client/src/__tests__/components/GiftTemplate/templates/ShortAnswer.test.tsx
+++ b/client/src/__tests__/components/GiftTemplate/templates/ShortAnswer.test.tsx
@@ -1,4 +1,4 @@
-// @ts-expect-error
+// @ts-expect-error: Required for pipeline compatibility
import React from 'react';
import { render } from '@testing-library/react';
import '@testing-library/jest-dom';
diff --git a/client/src/__tests__/components/GiftTemplate/templates/TrueFalse.test.tsx b/client/src/__tests__/components/GiftTemplate/templates/TrueFalse.test.tsx
index 38b0c9a..afd7769 100644
--- a/client/src/__tests__/components/GiftTemplate/templates/TrueFalse.test.tsx
+++ b/client/src/__tests__/components/GiftTemplate/templates/TrueFalse.test.tsx
@@ -1,4 +1,4 @@
-// @ts-expect-error
+// @ts-expect-error: Required for pipeline compatibility
import React from 'react';
import { render } from '@testing-library/react';
import '@testing-library/jest-dom';
From 0a932d96179bbe9eb614ed6f3bcd0e54f19a1c0b Mon Sep 17 00:00:00 2001
From: JubaAzul <118773284+JubaAzul@users.noreply.github.com>
Date: Wed, 15 Jan 2025 11:08:17 -0500
Subject: [PATCH 17/23] ignore @ts-expect-error in pipeline
---
client/.eslintrc.cjs | 26 ++++++++++++++++++++++++++
1 file changed, 26 insertions(+)
create mode 100644 client/.eslintrc.cjs
diff --git a/client/.eslintrc.cjs b/client/.eslintrc.cjs
new file mode 100644
index 0000000..75b4298
--- /dev/null
+++ b/client/.eslintrc.cjs
@@ -0,0 +1,26 @@
+module.exports = {
+ root: true,
+ env: { browser: true, es2020: true },
+ extends: [
+ 'eslint:recommended',
+ 'plugin:@typescript-eslint/recommended',
+ 'plugin:react-hooks/recommended',
+ ],
+ ignorePatterns: ['dist', '.eslintrc.cjs'],
+ parser: '@typescript-eslint/parser',
+ plugins: ['react-refresh'],
+ rules: {
+ 'react-refresh/only-export-components': [
+ 'warn',
+ { allowConstantExport: true },
+ ],
+ },
+ "overrides": [
+ {
+ "files": ["**/*.test.ts", "**/*.test.tsx"],
+ "rules": {
+ "@typescript-eslint/ban-ts-comment": "off"
+ }
+ }
+ ]
+}
From 6d56454b02d0e5516409f07428248b25203085dd Mon Sep 17 00:00:00 2001
From: JubaAzul <118773284+JubaAzul@users.noreply.github.com>
Date: Wed, 15 Jan 2025 11:47:52 -0500
Subject: [PATCH 18/23] remove change in .eslintrc.cjs, workflow did not run
---
client/.eslintrc.cjs | 8 --------
1 file changed, 8 deletions(-)
diff --git a/client/.eslintrc.cjs b/client/.eslintrc.cjs
index 75b4298..d6c9537 100644
--- a/client/.eslintrc.cjs
+++ b/client/.eslintrc.cjs
@@ -15,12 +15,4 @@ module.exports = {
{ allowConstantExport: true },
],
},
- "overrides": [
- {
- "files": ["**/*.test.ts", "**/*.test.tsx"],
- "rules": {
- "@typescript-eslint/ban-ts-comment": "off"
- }
- }
- ]
}
From b46e2e3985943e3460923a1c58496e5b9f48eeb9 Mon Sep 17 00:00:00 2001
From: JubaAzul <118773284+JubaAzul@users.noreply.github.com>
Date: Thu, 16 Jan 2025 10:40:27 -0500
Subject: [PATCH 19/23] removed import in every class, try to update react
---
.../components/GiftTemplate/templates/MultipleChoice.test.tsx | 2 --
.../components/GiftTemplate/templates/Numerical.test.tsx | 2 --
.../components/GiftTemplate/templates/ShortAnswer.test.tsx | 2 --
.../components/GiftTemplate/templates/TrueFalse.test.tsx | 2 --
4 files changed, 8 deletions(-)
diff --git a/client/src/__tests__/components/GiftTemplate/templates/MultipleChoice.test.tsx b/client/src/__tests__/components/GiftTemplate/templates/MultipleChoice.test.tsx
index bc59d60..afe83d1 100644
--- a/client/src/__tests__/components/GiftTemplate/templates/MultipleChoice.test.tsx
+++ b/client/src/__tests__/components/GiftTemplate/templates/MultipleChoice.test.tsx
@@ -1,5 +1,3 @@
-// @ts-expect-error: Required for pipeline compatibility
-import React from 'react';
import { render } from '@testing-library/react';
import '@testing-library/jest-dom';
import { MultipleChoice } from '../../../../components/GiftTemplate/templates';
diff --git a/client/src/__tests__/components/GiftTemplate/templates/Numerical.test.tsx b/client/src/__tests__/components/GiftTemplate/templates/Numerical.test.tsx
index 996f8d7..d8a4749 100644
--- a/client/src/__tests__/components/GiftTemplate/templates/Numerical.test.tsx
+++ b/client/src/__tests__/components/GiftTemplate/templates/Numerical.test.tsx
@@ -1,5 +1,3 @@
-// @ts-expect-error : Required for pipeline compatibility
-import React from 'react';
import { render } from '@testing-library/react';
import '@testing-library/jest-dom';
import Numerical from '../../../../components/GiftTemplate/templates/Numerical';
diff --git a/client/src/__tests__/components/GiftTemplate/templates/ShortAnswer.test.tsx b/client/src/__tests__/components/GiftTemplate/templates/ShortAnswer.test.tsx
index a58f2fa..145e4d6 100644
--- a/client/src/__tests__/components/GiftTemplate/templates/ShortAnswer.test.tsx
+++ b/client/src/__tests__/components/GiftTemplate/templates/ShortAnswer.test.tsx
@@ -1,5 +1,3 @@
-// @ts-expect-error: Required for pipeline compatibility
-import React from 'react';
import { render } from '@testing-library/react';
import '@testing-library/jest-dom';
import ShortAnswer from '../../../../components/GiftTemplate/templates/ShortAnswer';
diff --git a/client/src/__tests__/components/GiftTemplate/templates/TrueFalse.test.tsx b/client/src/__tests__/components/GiftTemplate/templates/TrueFalse.test.tsx
index afd7769..1dae35b 100644
--- a/client/src/__tests__/components/GiftTemplate/templates/TrueFalse.test.tsx
+++ b/client/src/__tests__/components/GiftTemplate/templates/TrueFalse.test.tsx
@@ -1,5 +1,3 @@
-// @ts-expect-error: Required for pipeline compatibility
-import React from 'react';
import { render } from '@testing-library/react';
import '@testing-library/jest-dom';
import TrueFalse from '../../../../components/GiftTemplate/templates';
From 89dd55ca8f79e6bbf4511dc0b9ca03ca0b1a9683 Mon Sep 17 00:00:00 2001
From: JubaAzul <118773284+JubaAzul@users.noreply.github.com>
Date: Mon, 13 Jan 2025 20:03:12 -0500
Subject: [PATCH 20/23] try import react inside class
---
.../components/GiftTemplate/templates/MultipleChoice.test.tsx | 1 +
.../components/GiftTemplate/templates/Numerical.test.tsx | 1 +
.../components/GiftTemplate/templates/ShortAnswer.test.tsx | 1 +
.../components/GiftTemplate/templates/TrueFalse.test.tsx | 1 +
4 files changed, 4 insertions(+)
diff --git a/client/src/__tests__/components/GiftTemplate/templates/MultipleChoice.test.tsx b/client/src/__tests__/components/GiftTemplate/templates/MultipleChoice.test.tsx
index afe83d1..ddd06ed 100644
--- a/client/src/__tests__/components/GiftTemplate/templates/MultipleChoice.test.tsx
+++ b/client/src/__tests__/components/GiftTemplate/templates/MultipleChoice.test.tsx
@@ -1,3 +1,4 @@
+import React from 'react';
import { render } from '@testing-library/react';
import '@testing-library/jest-dom';
import { MultipleChoice } from '../../../../components/GiftTemplate/templates';
diff --git a/client/src/__tests__/components/GiftTemplate/templates/Numerical.test.tsx b/client/src/__tests__/components/GiftTemplate/templates/Numerical.test.tsx
index d8a4749..5d974ab 100644
--- a/client/src/__tests__/components/GiftTemplate/templates/Numerical.test.tsx
+++ b/client/src/__tests__/components/GiftTemplate/templates/Numerical.test.tsx
@@ -1,3 +1,4 @@
+import React from 'react';
import { render } from '@testing-library/react';
import '@testing-library/jest-dom';
import Numerical from '../../../../components/GiftTemplate/templates/Numerical';
diff --git a/client/src/__tests__/components/GiftTemplate/templates/ShortAnswer.test.tsx b/client/src/__tests__/components/GiftTemplate/templates/ShortAnswer.test.tsx
index 145e4d6..9f4fbf0 100644
--- a/client/src/__tests__/components/GiftTemplate/templates/ShortAnswer.test.tsx
+++ b/client/src/__tests__/components/GiftTemplate/templates/ShortAnswer.test.tsx
@@ -1,3 +1,4 @@
+import React from 'react';
import { render } from '@testing-library/react';
import '@testing-library/jest-dom';
import ShortAnswer from '../../../../components/GiftTemplate/templates/ShortAnswer';
diff --git a/client/src/__tests__/components/GiftTemplate/templates/TrueFalse.test.tsx b/client/src/__tests__/components/GiftTemplate/templates/TrueFalse.test.tsx
index 1dae35b..586837b 100644
--- a/client/src/__tests__/components/GiftTemplate/templates/TrueFalse.test.tsx
+++ b/client/src/__tests__/components/GiftTemplate/templates/TrueFalse.test.tsx
@@ -1,3 +1,4 @@
+import React from 'react';
import { render } from '@testing-library/react';
import '@testing-library/jest-dom';
import TrueFalse from '../../../../components/GiftTemplate/templates';
From 1c928c8350f84334df07f1513b490a3b91e65ec6 Mon Sep 17 00:00:00 2001
From: JubaAzul <118773284+JubaAzul@users.noreply.github.com>
Date: Thu, 16 Jan 2025 12:37:07 -0500
Subject: [PATCH 21/23] Chemin absolu pour les imports
---
client/.eslintrc.cjs | 1 +
client/package-lock.json | 2139 +++++++++++++++--
client/package.json | 6 +-
.../ConfirmDialog/ConfirmDialog.test.tsx | 2 +-
.../components/Editor/Editor.test.tsx | 2 +-
.../GiftTemplate/GIFTTemplatePreview.test.tsx | 2 +-
.../components/GiftTemplate/TextType.test.ts | 2 +-
.../GiftTemplate/constants/colors.test.tsx | 2 +-
.../GiftTemplate/constants/styles.test.tsx | 2 +-
.../GiftTemplate/constants/theme.test.tsx | 4 +-
.../templates/AnswerIcon.test.tsx | 2 +-
.../templates/MultipleChoice.test.tsx | 4 +-
.../GiftTemplate/templates/Numerical.test.tsx | 4 +-
.../templates/ShortAnswer.test.tsx | 4 +-
.../GiftTemplate/templates/TrueFalse.test.tsx | 4 +-
.../ImportModal/ImportModal.test.tsx | 2 +-
.../LaunchQuizDialog.test.tsx | 2 +-
.../LoadingCircle/LoadingCircle.test.tsx | 2 +-
.../MultipleChoiceQuestion.test.tsx | 2 +-
.../NumericalQuestion.test.tsx | 2 +-
.../components/Questions/Question.test.tsx | 2 +-
.../ShortAnswerQuestion.test.tsx | 2 +-
.../TrueFalseQuestion.test.tsx | 2 +-
.../ReturnButton/ReturnButton.test.tsx | 2 +-
.../StudentWaitPage/StudentWaitPage.test.tsx | 2 +-
.../StudentModeQuiz/StudentModeQuiz.test.tsx | 2 +-
.../TeacherModeQuiz/TeacherModeQuiz.test.tsx | 2 +-
.../StudentModeQuiz/StudentModeQuiz.tsx | 2 +-
.../TeacherModeQuiz/TeacherModeQuiz.tsx | 2 +-
.../src/pages/Student/JoinRoom/JoinRoom.tsx | 8 +-
.../src/pages/Teacher/Dashboard/Dashboard.tsx | 4 +-
.../pages/Teacher/EditorQuiz/EditorQuiz.tsx | 8 +-
client/src/pages/Teacher/Login/Login.tsx | 2 +-
.../pages/Teacher/ManageRoom/ManageRoom.tsx | 12 +-
.../src/pages/Teacher/Register/Register.tsx | 2 +-
.../Teacher/ResetPassword/ResetPassword.tsx | 2 +-
client/src/pages/Teacher/Share/Share.tsx | 2 +-
37 files changed, 2055 insertions(+), 193 deletions(-)
diff --git a/client/.eslintrc.cjs b/client/.eslintrc.cjs
index d6c9537..43f6c4c 100644
--- a/client/.eslintrc.cjs
+++ b/client/.eslintrc.cjs
@@ -1,3 +1,4 @@
+// eslint-disable-next-line no-undef
module.exports = {
root: true,
env: { browser: true, es2020: true },
diff --git a/client/package-lock.json b/client/package-lock.json
index 5072f28..0ba8c34 100644
--- a/client/package-lock.json
+++ b/client/package-lock.json
@@ -25,8 +25,8 @@
"katex": "^0.16.11",
"marked": "^14.1.2",
"nanoid": "^5.0.2",
- "react": "^19.0.0",
- "react-dom": "^19.0.0",
+ "react": "^18.3.1",
+ "react-dom": "^18.3.1",
"react-modal": "^3.16.1",
"react-router-dom": "^6.26.2",
"remark-math": "^6.0.0",
@@ -39,6 +39,7 @@
"@babel/preset-env": "^7.23.3",
"@babel/preset-react": "^7.23.3",
"@babel/preset-typescript": "^7.23.3",
+ "@eslint/js": "^9.18.0",
"@testing-library/dom": "^10.4.0",
"@testing-library/jest-dom": "^6.5.0",
"@testing-library/react": "^16.0.1",
@@ -50,13 +51,16 @@
"@typescript-eslint/eslint-plugin": "^8.5.0",
"@typescript-eslint/parser": "^8.5.0",
"@vitejs/plugin-react-swc": "^3.3.2",
- "eslint": "^9.10.0",
+ "eslint": "^9.18.0",
+ "eslint-plugin-react": "^7.37.3",
"eslint-plugin-react-hooks": "^5.1.0-rc-206df66e-20240912",
"eslint-plugin-react-refresh": "^0.4.12",
+ "globals": "^15.14.0",
"identity-obj-proxy": "^3.0.0",
"jest": "^29.7.0",
"ts-jest": "^29.1.1",
"typescript": "^5.6.2",
+ "typescript-eslint": "^8.19.1",
"vite": "^5.4.5",
"vite-plugin-environment": "^1.1.3"
}
@@ -973,6 +977,16 @@
"@babel/core": "^7.0.0-0"
}
},
+ "node_modules/@babel/plugin-transform-classes/node_modules/globals": {
+ "version": "11.12.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz",
+ "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=4"
+ }
+ },
"node_modules/@babel/plugin-transform-computed-properties": {
"version": "7.25.9",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.25.9.tgz",
@@ -1946,6 +1960,15 @@
"node": ">=6.9.0"
}
},
+ "node_modules/@babel/traverse/node_modules/globals": {
+ "version": "11.12.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz",
+ "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=4"
+ }
+ },
"node_modules/@babel/types": {
"version": "7.26.0",
"resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.0.tgz",
@@ -2548,13 +2571,13 @@
}
},
"node_modules/@eslint/config-array": {
- "version": "0.18.0",
- "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.18.0.tgz",
- "integrity": "sha512-fTxvnS1sRMu3+JjXwJG0j/i4RT9u4qJ+lqS/yCGap4lH4zZGzQ7tu+xZqQmcMZq5OBZDL4QRxQzRjkWcGt8IVw==",
+ "version": "0.19.1",
+ "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.19.1.tgz",
+ "integrity": "sha512-fo6Mtm5mWyKjA/Chy1BYTdn5mGJoDNjC7C64ug20ADsRDGrA85bN3uK3MaKbeRkRuuIEAR5N33Jr1pbm411/PA==",
"devOptional": true,
"license": "Apache-2.0",
"dependencies": {
- "@eslint/object-schema": "^2.1.4",
+ "@eslint/object-schema": "^2.1.5",
"debug": "^4.3.1",
"minimatch": "^3.1.2"
},
@@ -2587,19 +2610,22 @@
}
},
"node_modules/@eslint/core": {
- "version": "0.7.0",
- "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.7.0.tgz",
- "integrity": "sha512-xp5Jirz5DyPYlPiKat8jaq0EmYvDXKKpzTbxXMpT9eqlRJkRKIz9AGMdlvYjih+im+QlhWrpvVjl8IPC/lHlUw==",
+ "version": "0.10.0",
+ "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.10.0.tgz",
+ "integrity": "sha512-gFHJ+xBOo4G3WRlR1e/3G8A6/KZAH6zcE/hkLRCZTi/B9avAG365QhFA8uOGzTMqgTghpn7/fSnscW++dpMSAw==",
"devOptional": true,
"license": "Apache-2.0",
+ "dependencies": {
+ "@types/json-schema": "^7.0.15"
+ },
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
}
},
"node_modules/@eslint/eslintrc": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.1.0.tgz",
- "integrity": "sha512-4Bfj15dVJdoy3RfZmmo86RK1Fwzn6SstsvK9JS+BaVKqC6QQQQyXekNaC+g+LKNgkQ+2VhGAzm6hO40AhMR3zQ==",
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.2.0.tgz",
+ "integrity": "sha512-grOjVNN8P3hjJn/eIETF1wwd12DdnwFDoyceUJLYYdkpbwq3nLi+4fqrTAONx7XDALqlL220wC/RHSC/QTI/0w==",
"devOptional": true,
"license": "MIT",
"dependencies": {
@@ -2658,9 +2684,9 @@
}
},
"node_modules/@eslint/js": {
- "version": "9.13.0",
- "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.13.0.tgz",
- "integrity": "sha512-IFLyoY4d72Z5y/6o/BazFBezupzI/taV8sGumxTAVw3lXG9A6md1Dc34T9s1FoD/an9pJH8RHbAxsaEbBed9lA==",
+ "version": "9.18.0",
+ "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.18.0.tgz",
+ "integrity": "sha512-fK6L7rxcq6/z+AaQMtiFTkvbHkBLNlwyRxHpKawP0x3u9+NC6MQTnFW+AdpwC6gfHTW0051cokQgtTN2FqlxQA==",
"devOptional": true,
"license": "MIT",
"engines": {
@@ -2668,9 +2694,9 @@
}
},
"node_modules/@eslint/object-schema": {
- "version": "2.1.4",
- "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.4.tgz",
- "integrity": "sha512-BsWiH1yFGjXXS2yvrf5LyuoSIIbPrGUWob917o+BTKuZ7qJdxX8aJLRxs1fS9n6r7vESrq1OUqb68dANcFXuQQ==",
+ "version": "2.1.5",
+ "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.5.tgz",
+ "integrity": "sha512-o0bhxnL89h5Bae5T318nFoFzGy+YE5i/gGkoPAgkmTVdRKTiv3p8JHevPiPaMwoloKfEiiaHlawCqaZMqRm+XQ==",
"devOptional": true,
"license": "Apache-2.0",
"engines": {
@@ -2678,12 +2704,13 @@
}
},
"node_modules/@eslint/plugin-kit": {
- "version": "0.2.2",
- "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.2.2.tgz",
- "integrity": "sha512-CXtq5nR4Su+2I47WPOlWud98Y5Lv8Kyxp2ukhgFx/eW6Blm18VXJO5WuQylPugRo8nbluoi6GvvxBLqHcvqUUw==",
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.2.5.tgz",
+ "integrity": "sha512-lB05FkqEdUg2AA0xEbUz0SnkXT1LcCTa438W4IWTUh4hdOnVbQyOJ81OrDXsJk/LSiJHubgGEFoR5EHq1NsH1A==",
"devOptional": true,
"license": "Apache-2.0",
"dependencies": {
+ "@eslint/core": "^0.10.0",
"levn": "^0.4.1"
},
"engines": {
@@ -4706,21 +4733,21 @@
"license": "MIT"
},
"node_modules/@typescript-eslint/eslint-plugin": {
- "version": "8.12.2",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.12.2.tgz",
- "integrity": "sha512-gQxbxM8mcxBwaEmWdtLCIGLfixBMHhQjBqR8sVWNTPpcj45WlYL2IObS/DNMLH1DBP0n8qz+aiiLTGfopPEebw==",
+ "version": "8.20.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.20.0.tgz",
+ "integrity": "sha512-naduuphVw5StFfqp4Gq4WhIBE2gN1GEmMUExpJYknZJdRnc+2gDzB8Z3+5+/Kv33hPQRDGzQO/0opHE72lZZ6A==",
"dev": true,
"license": "MIT",
"dependencies": {
"@eslint-community/regexpp": "^4.10.0",
- "@typescript-eslint/scope-manager": "8.12.2",
- "@typescript-eslint/type-utils": "8.12.2",
- "@typescript-eslint/utils": "8.12.2",
- "@typescript-eslint/visitor-keys": "8.12.2",
+ "@typescript-eslint/scope-manager": "8.20.0",
+ "@typescript-eslint/type-utils": "8.20.0",
+ "@typescript-eslint/utils": "8.20.0",
+ "@typescript-eslint/visitor-keys": "8.20.0",
"graphemer": "^1.4.0",
"ignore": "^5.3.1",
"natural-compare": "^1.4.0",
- "ts-api-utils": "^1.3.0"
+ "ts-api-utils": "^2.0.0"
},
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -4731,25 +4758,21 @@
},
"peerDependencies": {
"@typescript-eslint/parser": "^8.0.0 || ^8.0.0-alpha.0",
- "eslint": "^8.57.0 || ^9.0.0"
- },
- "peerDependenciesMeta": {
- "typescript": {
- "optional": true
- }
+ "eslint": "^8.57.0 || ^9.0.0",
+ "typescript": ">=4.8.4 <5.8.0"
}
},
"node_modules/@typescript-eslint/parser": {
- "version": "8.12.2",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.12.2.tgz",
- "integrity": "sha512-MrvlXNfGPLH3Z+r7Tk+Z5moZAc0dzdVjTgUgwsdGweH7lydysQsnSww3nAmsq8blFuRD5VRlAr9YdEFw3e6PBw==",
+ "version": "8.20.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.20.0.tgz",
+ "integrity": "sha512-gKXG7A5HMyjDIedBi6bUrDcun8GIjnI8qOwVLiY3rx6T/sHP/19XLJOnIq/FgQvWLHja5JN/LSE7eklNBr612g==",
"dev": true,
- "license": "BSD-2-Clause",
+ "license": "MIT",
"dependencies": {
- "@typescript-eslint/scope-manager": "8.12.2",
- "@typescript-eslint/types": "8.12.2",
- "@typescript-eslint/typescript-estree": "8.12.2",
- "@typescript-eslint/visitor-keys": "8.12.2",
+ "@typescript-eslint/scope-manager": "8.20.0",
+ "@typescript-eslint/types": "8.20.0",
+ "@typescript-eslint/typescript-estree": "8.20.0",
+ "@typescript-eslint/visitor-keys": "8.20.0",
"debug": "^4.3.4"
},
"engines": {
@@ -4760,23 +4783,19 @@
"url": "https://opencollective.com/typescript-eslint"
},
"peerDependencies": {
- "eslint": "^8.57.0 || ^9.0.0"
- },
- "peerDependenciesMeta": {
- "typescript": {
- "optional": true
- }
+ "eslint": "^8.57.0 || ^9.0.0",
+ "typescript": ">=4.8.4 <5.8.0"
}
},
"node_modules/@typescript-eslint/scope-manager": {
- "version": "8.12.2",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.12.2.tgz",
- "integrity": "sha512-gPLpLtrj9aMHOvxJkSbDBmbRuYdtiEbnvO25bCMza3DhMjTQw0u7Y1M+YR5JPbMsXXnSPuCf5hfq0nEkQDL/JQ==",
+ "version": "8.20.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.20.0.tgz",
+ "integrity": "sha512-J7+VkpeGzhOt3FeG1+SzhiMj9NzGD/M6KoGn9f4dbz3YzK9hvbhVTmLj/HiTp9DazIzJ8B4XcM80LrR9Dm1rJw==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@typescript-eslint/types": "8.12.2",
- "@typescript-eslint/visitor-keys": "8.12.2"
+ "@typescript-eslint/types": "8.20.0",
+ "@typescript-eslint/visitor-keys": "8.20.0"
},
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -4787,16 +4806,16 @@
}
},
"node_modules/@typescript-eslint/type-utils": {
- "version": "8.12.2",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.12.2.tgz",
- "integrity": "sha512-bwuU4TAogPI+1q/IJSKuD4shBLc/d2vGcRT588q+jzayQyjVK2X6v/fbR4InY2U2sgf8MEvVCqEWUzYzgBNcGQ==",
+ "version": "8.20.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.20.0.tgz",
+ "integrity": "sha512-bPC+j71GGvA7rVNAHAtOjbVXbLN5PkwqMvy1cwGeaxUoRQXVuKCebRoLzm+IPW/NtFFpstn1ummSIasD5t60GA==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@typescript-eslint/typescript-estree": "8.12.2",
- "@typescript-eslint/utils": "8.12.2",
+ "@typescript-eslint/typescript-estree": "8.20.0",
+ "@typescript-eslint/utils": "8.20.0",
"debug": "^4.3.4",
- "ts-api-utils": "^1.3.0"
+ "ts-api-utils": "^2.0.0"
},
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -4805,16 +4824,15 @@
"type": "opencollective",
"url": "https://opencollective.com/typescript-eslint"
},
- "peerDependenciesMeta": {
- "typescript": {
- "optional": true
- }
+ "peerDependencies": {
+ "eslint": "^8.57.0 || ^9.0.0",
+ "typescript": ">=4.8.4 <5.8.0"
}
},
"node_modules/@typescript-eslint/types": {
- "version": "8.12.2",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.12.2.tgz",
- "integrity": "sha512-VwDwMF1SZ7wPBUZwmMdnDJ6sIFk4K4s+ALKLP6aIQsISkPv8jhiw65sAK6SuWODN/ix+m+HgbYDkH+zLjrzvOA==",
+ "version": "8.20.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.20.0.tgz",
+ "integrity": "sha512-cqaMiY72CkP+2xZRrFt3ExRBu0WmVitN/rYPZErA80mHjHx/Svgp8yfbzkJmDoQ/whcytOPO9/IZXnOc+wigRA==",
"dev": true,
"license": "MIT",
"engines": {
@@ -4826,20 +4844,20 @@
}
},
"node_modules/@typescript-eslint/typescript-estree": {
- "version": "8.12.2",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.12.2.tgz",
- "integrity": "sha512-mME5MDwGe30Pq9zKPvyduyU86PH7aixwqYR2grTglAdB+AN8xXQ1vFGpYaUSJ5o5P/5znsSBeNcs5g5/2aQwow==",
+ "version": "8.20.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.20.0.tgz",
+ "integrity": "sha512-Y7ncuy78bJqHI35NwzWol8E0X7XkRVS4K4P4TCyzWkOJih5NDvtoRDW4Ba9YJJoB2igm9yXDdYI/+fkiiAxPzA==",
"dev": true,
- "license": "BSD-2-Clause",
+ "license": "MIT",
"dependencies": {
- "@typescript-eslint/types": "8.12.2",
- "@typescript-eslint/visitor-keys": "8.12.2",
+ "@typescript-eslint/types": "8.20.0",
+ "@typescript-eslint/visitor-keys": "8.20.0",
"debug": "^4.3.4",
"fast-glob": "^3.3.2",
"is-glob": "^4.0.3",
"minimatch": "^9.0.4",
"semver": "^7.6.0",
- "ts-api-utils": "^1.3.0"
+ "ts-api-utils": "^2.0.0"
},
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -4848,10 +4866,8 @@
"type": "opencollective",
"url": "https://opencollective.com/typescript-eslint"
},
- "peerDependenciesMeta": {
- "typescript": {
- "optional": true
- }
+ "peerDependencies": {
+ "typescript": ">=4.8.4 <5.8.0"
}
},
"node_modules/@typescript-eslint/typescript-estree/node_modules/semver": {
@@ -4868,16 +4884,16 @@
}
},
"node_modules/@typescript-eslint/utils": {
- "version": "8.12.2",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.12.2.tgz",
- "integrity": "sha512-UTTuDIX3fkfAz6iSVa5rTuSfWIYZ6ATtEocQ/umkRSyC9O919lbZ8dcH7mysshrCdrAM03skJOEYaBugxN+M6A==",
+ "version": "8.20.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.20.0.tgz",
+ "integrity": "sha512-dq70RUw6UK9ei7vxc4KQtBRk7qkHZv447OUZ6RPQMQl71I3NZxQJX/f32Smr+iqWrB02pHKn2yAdHBb0KNrRMA==",
"dev": true,
"license": "MIT",
"dependencies": {
"@eslint-community/eslint-utils": "^4.4.0",
- "@typescript-eslint/scope-manager": "8.12.2",
- "@typescript-eslint/types": "8.12.2",
- "@typescript-eslint/typescript-estree": "8.12.2"
+ "@typescript-eslint/scope-manager": "8.20.0",
+ "@typescript-eslint/types": "8.20.0",
+ "@typescript-eslint/typescript-estree": "8.20.0"
},
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -4887,18 +4903,19 @@
"url": "https://opencollective.com/typescript-eslint"
},
"peerDependencies": {
- "eslint": "^8.57.0 || ^9.0.0"
+ "eslint": "^8.57.0 || ^9.0.0",
+ "typescript": ">=4.8.4 <5.8.0"
}
},
"node_modules/@typescript-eslint/visitor-keys": {
- "version": "8.12.2",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.12.2.tgz",
- "integrity": "sha512-PChz8UaKQAVNHghsHcPyx1OMHoFRUEA7rJSK/mDhdq85bk+PLsUHUBqTQTFt18VJZbmxBovM65fezlheQRsSDA==",
+ "version": "8.20.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.20.0.tgz",
+ "integrity": "sha512-v/BpkeeYAsPkKCkR8BDwcno0llhzWVqPOamQrAEMdpZav2Y9OVjd9dwJyBLJWwf335B5DmlifECIkZRJCaGaHA==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@typescript-eslint/types": "8.12.2",
- "eslint-visitor-keys": "^3.4.3"
+ "@typescript-eslint/types": "8.20.0",
+ "eslint-visitor-keys": "^4.2.0"
},
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -4908,6 +4925,19 @@
"url": "https://opencollective.com/typescript-eslint"
}
},
+ "node_modules/@typescript-eslint/visitor-keys/node_modules/eslint-visitor-keys": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz",
+ "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
"node_modules/@vitejs/plugin-react-swc": {
"version": "3.7.1",
"resolved": "https://registry.npmjs.org/@vitejs/plugin-react-swc/-/plugin-react-swc-3.7.1.tgz",
@@ -5076,6 +5106,142 @@
"dequal": "^2.0.3"
}
},
+ "node_modules/array-buffer-byte-length": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.2.tgz",
+ "integrity": "sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bound": "^1.0.3",
+ "is-array-buffer": "^3.0.5"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/array-includes": {
+ "version": "3.1.8",
+ "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.8.tgz",
+ "integrity": "sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bind": "^1.0.7",
+ "define-properties": "^1.2.1",
+ "es-abstract": "^1.23.2",
+ "es-object-atoms": "^1.0.0",
+ "get-intrinsic": "^1.2.4",
+ "is-string": "^1.0.7"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/array.prototype.findlast": {
+ "version": "1.2.5",
+ "resolved": "https://registry.npmjs.org/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz",
+ "integrity": "sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bind": "^1.0.7",
+ "define-properties": "^1.2.1",
+ "es-abstract": "^1.23.2",
+ "es-errors": "^1.3.0",
+ "es-object-atoms": "^1.0.0",
+ "es-shim-unscopables": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/array.prototype.flat": {
+ "version": "1.3.3",
+ "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.3.tgz",
+ "integrity": "sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bind": "^1.0.8",
+ "define-properties": "^1.2.1",
+ "es-abstract": "^1.23.5",
+ "es-shim-unscopables": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/array.prototype.flatmap": {
+ "version": "1.3.3",
+ "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.3.tgz",
+ "integrity": "sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bind": "^1.0.8",
+ "define-properties": "^1.2.1",
+ "es-abstract": "^1.23.5",
+ "es-shim-unscopables": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/array.prototype.tosorted": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.4.tgz",
+ "integrity": "sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bind": "^1.0.7",
+ "define-properties": "^1.2.1",
+ "es-abstract": "^1.23.3",
+ "es-errors": "^1.3.0",
+ "es-shim-unscopables": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/arraybuffer.prototype.slice": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.4.tgz",
+ "integrity": "sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "array-buffer-byte-length": "^1.0.1",
+ "call-bind": "^1.0.8",
+ "define-properties": "^1.2.1",
+ "es-abstract": "^1.23.5",
+ "es-errors": "^1.3.0",
+ "get-intrinsic": "^1.2.6",
+ "is-array-buffer": "^3.0.4"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
"node_modules/async": {
"version": "3.2.6",
"resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz",
@@ -5089,6 +5255,22 @@
"integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==",
"license": "MIT"
},
+ "node_modules/available-typed-arrays": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz",
+ "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "possible-typed-array-names": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
"node_modules/axios": {
"version": "1.7.7",
"resolved": "https://registry.npmjs.org/axios/-/axios-1.7.7.tgz",
@@ -5386,6 +5568,56 @@
"dev": true,
"license": "MIT"
},
+ "node_modules/call-bind": {
+ "version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz",
+ "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bind-apply-helpers": "^1.0.0",
+ "es-define-property": "^1.0.0",
+ "get-intrinsic": "^1.2.4",
+ "set-function-length": "^1.2.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/call-bind-apply-helpers": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.1.tgz",
+ "integrity": "sha512-BhYE+WDaywFg2TBWYNXAE+8B1ATnThNBqXHP5nQu0jWJdVvY2hvkpyB3qOmtmDePiS5/BDQ8wASEWGMWRG148g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "es-errors": "^1.3.0",
+ "function-bind": "^1.1.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/call-bound": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.3.tgz",
+ "integrity": "sha512-YTd+6wGlNlPxSuri7Y6X8tY2dmm12UMH66RpKMhiX6rsk5wXXnYgbUcOt8kiS31/AjfoTOvCsE+w8nZQLQnzHA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bind-apply-helpers": "^1.0.1",
+ "get-intrinsic": "^1.2.6"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
"node_modules/callsites": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
@@ -5672,9 +5904,9 @@
"license": "MIT"
},
"node_modules/cross-spawn": {
- "version": "7.0.3",
- "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
- "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
+ "version": "7.0.6",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz",
+ "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==",
"devOptional": true,
"license": "MIT",
"dependencies": {
@@ -5737,6 +5969,60 @@
"node": ">=12"
}
},
+ "node_modules/data-view-buffer": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.2.tgz",
+ "integrity": "sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bound": "^1.0.3",
+ "es-errors": "^1.3.0",
+ "is-data-view": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/data-view-byte-length": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.2.tgz",
+ "integrity": "sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bound": "^1.0.3",
+ "es-errors": "^1.3.0",
+ "is-data-view": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/inspect-js"
+ }
+ },
+ "node_modules/data-view-byte-offset": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.1.tgz",
+ "integrity": "sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bound": "^1.0.2",
+ "es-errors": "^1.3.0",
+ "is-data-view": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
"node_modules/debug": {
"version": "4.3.7",
"resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz",
@@ -5805,6 +6091,42 @@
"node": ">=0.10.0"
}
},
+ "node_modules/define-data-property": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz",
+ "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "es-define-property": "^1.0.0",
+ "es-errors": "^1.3.0",
+ "gopd": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/define-properties": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz",
+ "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "define-data-property": "^1.0.1",
+ "has-property-descriptors": "^1.0.0",
+ "object-keys": "^1.1.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
"node_modules/delayed-stream": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
@@ -5865,6 +6187,19 @@
"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
+ "node_modules/doctrine": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz",
+ "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "esutils": "^2.0.2"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
"node_modules/dom-accessibility-api": {
"version": "0.5.16",
"resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.5.16.tgz",
@@ -5895,6 +6230,21 @@
"node": ">=12"
}
},
+ "node_modules/dunder-proto": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz",
+ "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bind-apply-helpers": "^1.0.1",
+ "es-errors": "^1.3.0",
+ "gopd": "^1.2.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
"node_modules/ejs": {
"version": "3.1.10",
"resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.10.tgz",
@@ -6002,6 +6352,177 @@
"is-arrayish": "^0.2.1"
}
},
+ "node_modules/es-abstract": {
+ "version": "1.23.9",
+ "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.9.tgz",
+ "integrity": "sha512-py07lI0wjxAC/DcfK1S6G7iANonniZwTISvdPzk9hzeH0IZIshbuuFxLIU96OyF89Yb9hiqWn8M/bY83KY5vzA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "array-buffer-byte-length": "^1.0.2",
+ "arraybuffer.prototype.slice": "^1.0.4",
+ "available-typed-arrays": "^1.0.7",
+ "call-bind": "^1.0.8",
+ "call-bound": "^1.0.3",
+ "data-view-buffer": "^1.0.2",
+ "data-view-byte-length": "^1.0.2",
+ "data-view-byte-offset": "^1.0.1",
+ "es-define-property": "^1.0.1",
+ "es-errors": "^1.3.0",
+ "es-object-atoms": "^1.0.0",
+ "es-set-tostringtag": "^2.1.0",
+ "es-to-primitive": "^1.3.0",
+ "function.prototype.name": "^1.1.8",
+ "get-intrinsic": "^1.2.7",
+ "get-proto": "^1.0.0",
+ "get-symbol-description": "^1.1.0",
+ "globalthis": "^1.0.4",
+ "gopd": "^1.2.0",
+ "has-property-descriptors": "^1.0.2",
+ "has-proto": "^1.2.0",
+ "has-symbols": "^1.1.0",
+ "hasown": "^2.0.2",
+ "internal-slot": "^1.1.0",
+ "is-array-buffer": "^3.0.5",
+ "is-callable": "^1.2.7",
+ "is-data-view": "^1.0.2",
+ "is-regex": "^1.2.1",
+ "is-shared-array-buffer": "^1.0.4",
+ "is-string": "^1.1.1",
+ "is-typed-array": "^1.1.15",
+ "is-weakref": "^1.1.0",
+ "math-intrinsics": "^1.1.0",
+ "object-inspect": "^1.13.3",
+ "object-keys": "^1.1.1",
+ "object.assign": "^4.1.7",
+ "own-keys": "^1.0.1",
+ "regexp.prototype.flags": "^1.5.3",
+ "safe-array-concat": "^1.1.3",
+ "safe-push-apply": "^1.0.0",
+ "safe-regex-test": "^1.1.0",
+ "set-proto": "^1.0.0",
+ "string.prototype.trim": "^1.2.10",
+ "string.prototype.trimend": "^1.0.9",
+ "string.prototype.trimstart": "^1.0.8",
+ "typed-array-buffer": "^1.0.3",
+ "typed-array-byte-length": "^1.0.3",
+ "typed-array-byte-offset": "^1.0.4",
+ "typed-array-length": "^1.0.7",
+ "unbox-primitive": "^1.1.0",
+ "which-typed-array": "^1.1.18"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/es-define-property": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz",
+ "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/es-errors": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz",
+ "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/es-iterator-helpers": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.2.1.tgz",
+ "integrity": "sha512-uDn+FE1yrDzyC0pCo961B2IHbdM8y/ACZsKD4dG6WqrjV53BADjwa7D+1aom2rsNVfLyDgU/eigvlJGJ08OQ4w==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bind": "^1.0.8",
+ "call-bound": "^1.0.3",
+ "define-properties": "^1.2.1",
+ "es-abstract": "^1.23.6",
+ "es-errors": "^1.3.0",
+ "es-set-tostringtag": "^2.0.3",
+ "function-bind": "^1.1.2",
+ "get-intrinsic": "^1.2.6",
+ "globalthis": "^1.0.4",
+ "gopd": "^1.2.0",
+ "has-property-descriptors": "^1.0.2",
+ "has-proto": "^1.2.0",
+ "has-symbols": "^1.1.0",
+ "internal-slot": "^1.1.0",
+ "iterator.prototype": "^1.1.4",
+ "safe-array-concat": "^1.1.3"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/es-object-atoms": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz",
+ "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "es-errors": "^1.3.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/es-set-tostringtag": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz",
+ "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "es-errors": "^1.3.0",
+ "get-intrinsic": "^1.2.6",
+ "has-tostringtag": "^1.0.2",
+ "hasown": "^2.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/es-shim-unscopables": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz",
+ "integrity": "sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "hasown": "^2.0.0"
+ }
+ },
+ "node_modules/es-to-primitive": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.3.0.tgz",
+ "integrity": "sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-callable": "^1.2.7",
+ "is-date-object": "^1.0.5",
+ "is-symbol": "^1.0.4"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
"node_modules/esbuild": {
"version": "0.23.1",
"resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.23.1.tgz",
@@ -6095,32 +6616,32 @@
}
},
"node_modules/eslint": {
- "version": "9.13.0",
- "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.13.0.tgz",
- "integrity": "sha512-EYZK6SX6zjFHST/HRytOdA/zE72Cq/bfw45LSyuwrdvcclb/gqV8RRQxywOBEWO2+WDpva6UZa4CcDeJKzUCFA==",
+ "version": "9.18.0",
+ "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.18.0.tgz",
+ "integrity": "sha512-+waTfRWQlSbpt3KWE+CjrPPYnbq9kfZIYUqapc0uBXyjTp8aYXZDsUH16m39Ryq3NjAVP4tjuF7KaukeqoCoaA==",
"devOptional": true,
"license": "MIT",
"dependencies": {
"@eslint-community/eslint-utils": "^4.2.0",
- "@eslint-community/regexpp": "^4.11.0",
- "@eslint/config-array": "^0.18.0",
- "@eslint/core": "^0.7.0",
- "@eslint/eslintrc": "^3.1.0",
- "@eslint/js": "9.13.0",
- "@eslint/plugin-kit": "^0.2.0",
- "@humanfs/node": "^0.16.5",
+ "@eslint-community/regexpp": "^4.12.1",
+ "@eslint/config-array": "^0.19.0",
+ "@eslint/core": "^0.10.0",
+ "@eslint/eslintrc": "^3.2.0",
+ "@eslint/js": "9.18.0",
+ "@eslint/plugin-kit": "^0.2.5",
+ "@humanfs/node": "^0.16.6",
"@humanwhocodes/module-importer": "^1.0.1",
- "@humanwhocodes/retry": "^0.3.1",
+ "@humanwhocodes/retry": "^0.4.1",
"@types/estree": "^1.0.6",
"@types/json-schema": "^7.0.15",
"ajv": "^6.12.4",
"chalk": "^4.0.0",
- "cross-spawn": "^7.0.2",
+ "cross-spawn": "^7.0.6",
"debug": "^4.3.2",
"escape-string-regexp": "^4.0.0",
- "eslint-scope": "^8.1.0",
- "eslint-visitor-keys": "^4.1.0",
- "espree": "^10.2.0",
+ "eslint-scope": "^8.2.0",
+ "eslint-visitor-keys": "^4.2.0",
+ "espree": "^10.3.0",
"esquery": "^1.5.0",
"esutils": "^2.0.2",
"fast-deep-equal": "^3.1.3",
@@ -6134,8 +6655,7 @@
"lodash.merge": "^4.6.2",
"minimatch": "^3.1.2",
"natural-compare": "^1.4.0",
- "optionator": "^0.9.3",
- "text-table": "^0.2.0"
+ "optionator": "^0.9.3"
},
"bin": {
"eslint": "bin/eslint.js"
@@ -6155,6 +6675,39 @@
}
}
},
+ "node_modules/eslint-plugin-react": {
+ "version": "7.37.4",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.37.4.tgz",
+ "integrity": "sha512-BGP0jRmfYyvOyvMoRX/uoUeW+GqNj9y16bPQzqAHf3AYII/tDs+jMN0dBVkl88/OZwNGwrVFxE7riHsXVfy/LQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "array-includes": "^3.1.8",
+ "array.prototype.findlast": "^1.2.5",
+ "array.prototype.flatmap": "^1.3.3",
+ "array.prototype.tosorted": "^1.1.4",
+ "doctrine": "^2.1.0",
+ "es-iterator-helpers": "^1.2.1",
+ "estraverse": "^5.3.0",
+ "hasown": "^2.0.2",
+ "jsx-ast-utils": "^2.4.1 || ^3.0.0",
+ "minimatch": "^3.1.2",
+ "object.entries": "^1.1.8",
+ "object.fromentries": "^2.0.8",
+ "object.values": "^1.2.1",
+ "prop-types": "^15.8.1",
+ "resolve": "^2.0.0-next.5",
+ "semver": "^6.3.1",
+ "string.prototype.matchall": "^4.0.12",
+ "string.prototype.repeat": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ },
+ "peerDependencies": {
+ "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7"
+ }
+ },
"node_modules/eslint-plugin-react-hooks": {
"version": "5.1.0-rc-fb9a90fa48-20240614",
"resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-5.1.0-rc-fb9a90fa48-20240614.tgz",
@@ -6178,6 +6731,48 @@
"eslint": ">=7"
}
},
+ "node_modules/eslint-plugin-react/node_modules/brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "node_modules/eslint-plugin-react/node_modules/minimatch": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+ "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "brace-expansion": "^1.1.7"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/eslint-plugin-react/node_modules/resolve": {
+ "version": "2.0.0-next.5",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.5.tgz",
+ "integrity": "sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-core-module": "^2.13.0",
+ "path-parse": "^1.0.7",
+ "supports-preserve-symlinks-flag": "^1.0.0"
+ },
+ "bin": {
+ "resolve": "bin/resolve"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
"node_modules/eslint-scope": {
"version": "8.2.0",
"resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.2.0.tgz",
@@ -6208,6 +6803,20 @@
"url": "https://opencollective.com/eslint"
}
},
+ "node_modules/eslint/node_modules/@humanwhocodes/retry": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.1.tgz",
+ "integrity": "sha512-c7hNEllBlenFTHBky65mhq8WD2kbN9Q6gk0bTk8lSBvc554jpXSkST1iePudpt7+A/AQvuHs9EMqjHDXMY1lrA==",
+ "devOptional": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": ">=18.18"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/nzakas"
+ }
+ },
"node_modules/eslint/node_modules/brace-expansion": {
"version": "1.1.11",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
@@ -6575,6 +7184,16 @@
}
}
},
+ "node_modules/for-each": {
+ "version": "0.3.3",
+ "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz",
+ "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-callable": "^1.1.3"
+ }
+ },
"node_modules/form-data": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.1.tgz",
@@ -6642,6 +7261,37 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/function.prototype.name": {
+ "version": "1.1.8",
+ "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.8.tgz",
+ "integrity": "sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bind": "^1.0.8",
+ "call-bound": "^1.0.3",
+ "define-properties": "^1.2.1",
+ "functions-have-names": "^1.2.3",
+ "hasown": "^2.0.2",
+ "is-callable": "^1.2.7"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/functions-have-names": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz",
+ "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==",
+ "dev": true,
+ "license": "MIT",
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
"node_modules/gensync": {
"version": "1.0.0-beta.2",
"resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz",
@@ -6662,6 +7312,31 @@
"node": "6.* || 8.* || >= 10.*"
}
},
+ "node_modules/get-intrinsic": {
+ "version": "1.2.7",
+ "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.7.tgz",
+ "integrity": "sha512-VW6Pxhsrk0KAOqs3WEd0klDiF/+V7gQOpAvY1jVU/LHmaD/kQO4523aiJuikX/QAKYiW6x8Jh+RJej1almdtCA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bind-apply-helpers": "^1.0.1",
+ "es-define-property": "^1.0.1",
+ "es-errors": "^1.3.0",
+ "es-object-atoms": "^1.0.0",
+ "function-bind": "^1.1.2",
+ "get-proto": "^1.0.0",
+ "gopd": "^1.2.0",
+ "has-symbols": "^1.1.0",
+ "hasown": "^2.0.2",
+ "math-intrinsics": "^1.1.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
"node_modules/get-package-type": {
"version": "0.1.0",
"resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz",
@@ -6672,6 +7347,20 @@
"node": ">=8.0.0"
}
},
+ "node_modules/get-proto": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz",
+ "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "dunder-proto": "^1.0.1",
+ "es-object-atoms": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
"node_modules/get-stream": {
"version": "6.0.1",
"resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz",
@@ -6685,6 +7374,24 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
+ "node_modules/get-symbol-description": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.1.0.tgz",
+ "integrity": "sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bound": "^1.0.3",
+ "es-errors": "^1.3.0",
+ "get-intrinsic": "^1.2.6"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
"node_modules/gift-pegjs": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/gift-pegjs/-/gift-pegjs-1.0.2.tgz",
@@ -6754,12 +7461,46 @@
}
},
"node_modules/globals": {
- "version": "11.12.0",
- "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz",
- "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==",
+ "version": "15.14.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-15.14.0.tgz",
+ "integrity": "sha512-OkToC372DtlQeje9/zHIo5CT8lRP/FUgEOKBEhU4e0abL7J7CD24fD9ohiLN5hagG/kWCYj4K5oaxxtj2Z0Dig==",
+ "dev": true,
"license": "MIT",
"engines": {
- "node": ">=4"
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/globalthis": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz",
+ "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "define-properties": "^1.2.1",
+ "gopd": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/gopd": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz",
+ "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/graceful-fs": {
@@ -6782,6 +7523,19 @@
"dev": true,
"license": "(Apache-2.0 OR MPL-1.1)"
},
+ "node_modules/has-bigints": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.1.0.tgz",
+ "integrity": "sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
"node_modules/has-flag": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
@@ -6791,6 +7545,64 @@
"node": ">=8"
}
},
+ "node_modules/has-property-descriptors": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz",
+ "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "es-define-property": "^1.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/has-proto": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.2.0.tgz",
+ "integrity": "sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "dunder-proto": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/has-symbols": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz",
+ "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/has-tostringtag": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz",
+ "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "has-symbols": "^1.0.3"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
"node_modules/hasown": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz",
@@ -6984,12 +7796,80 @@
"dev": true,
"license": "ISC"
},
+ "node_modules/internal-slot": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.1.0.tgz",
+ "integrity": "sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "es-errors": "^1.3.0",
+ "hasown": "^2.0.2",
+ "side-channel": "^1.1.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/is-array-buffer": {
+ "version": "3.0.5",
+ "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.5.tgz",
+ "integrity": "sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bind": "^1.0.8",
+ "call-bound": "^1.0.3",
+ "get-intrinsic": "^1.2.6"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
"node_modules/is-arrayish": {
"version": "0.2.1",
"resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
"integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==",
"license": "MIT"
},
+ "node_modules/is-async-function": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.1.0.tgz",
+ "integrity": "sha512-GExz9MtyhlZyXYLxzlJRj5WUCE661zhDa1Yna52CN57AJsymh+DvXXjyveSioqSRdxvUrdKdvqB1b5cVKsNpWQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bound": "^1.0.3",
+ "get-proto": "^1.0.1",
+ "has-tostringtag": "^1.0.2",
+ "safe-regex-test": "^1.1.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-bigint": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.1.0.tgz",
+ "integrity": "sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "has-bigints": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
"node_modules/is-binary-path": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
@@ -7002,6 +7882,36 @@
"node": ">=8"
}
},
+ "node_modules/is-boolean-object": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.2.1.tgz",
+ "integrity": "sha512-l9qO6eFlUETHtuihLcYOaLKByJ1f+N4kthcU9YjHy3N+B3hWv0y/2Nd0mu/7lTFnRQHTrSdXF50HQ3bl5fEnng==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bound": "^1.0.2",
+ "has-tostringtag": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-callable": {
+ "version": "1.2.7",
+ "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz",
+ "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
"node_modules/is-core-module": {
"version": "2.15.1",
"resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.1.tgz",
@@ -7017,6 +7927,41 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/is-data-view": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.2.tgz",
+ "integrity": "sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bound": "^1.0.2",
+ "get-intrinsic": "^1.2.6",
+ "is-typed-array": "^1.1.13"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-date-object": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.1.0.tgz",
+ "integrity": "sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bound": "^1.0.2",
+ "has-tostringtag": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
"node_modules/is-extglob": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
@@ -7026,6 +7971,22 @@
"node": ">=0.10.0"
}
},
+ "node_modules/is-finalizationregistry": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.1.1.tgz",
+ "integrity": "sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bound": "^1.0.3"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
"node_modules/is-fullwidth-code-point": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
@@ -7046,6 +8007,25 @@
"node": ">=6"
}
},
+ "node_modules/is-generator-function": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.1.0.tgz",
+ "integrity": "sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bound": "^1.0.3",
+ "get-proto": "^1.0.0",
+ "has-tostringtag": "^1.0.2",
+ "safe-regex-test": "^1.1.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
"node_modules/is-glob": {
"version": "4.0.3",
"resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
@@ -7058,6 +8038,19 @@
"node": ">=0.10.0"
}
},
+ "node_modules/is-map": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz",
+ "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
"node_modules/is-number": {
"version": "7.0.0",
"resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
@@ -7067,6 +8060,23 @@
"node": ">=0.12.0"
}
},
+ "node_modules/is-number-object": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.1.1.tgz",
+ "integrity": "sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bound": "^1.0.3",
+ "has-tostringtag": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
"node_modules/is-plain-obj": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz",
@@ -7085,6 +8095,54 @@
"integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==",
"license": "MIT"
},
+ "node_modules/is-regex": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz",
+ "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bound": "^1.0.2",
+ "gopd": "^1.2.0",
+ "has-tostringtag": "^1.0.2",
+ "hasown": "^2.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-set": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz",
+ "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-shared-array-buffer": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.4.tgz",
+ "integrity": "sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bound": "^1.0.3"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
"node_modules/is-stream": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz",
@@ -7098,6 +8156,110 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
+ "node_modules/is-string": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.1.1.tgz",
+ "integrity": "sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bound": "^1.0.3",
+ "has-tostringtag": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-symbol": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.1.1.tgz",
+ "integrity": "sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bound": "^1.0.2",
+ "has-symbols": "^1.1.0",
+ "safe-regex-test": "^1.1.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-typed-array": {
+ "version": "1.1.15",
+ "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.15.tgz",
+ "integrity": "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "which-typed-array": "^1.1.16"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-weakmap": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz",
+ "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-weakref": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.1.0.tgz",
+ "integrity": "sha512-SXM8Nwyys6nT5WP6pltOwKytLV7FqQ4UiibxVmW+EIosHcmCqkkjViTb5SNssDlkCiEYRP1/pdWUKVvZBmsR2Q==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bound": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-weakset": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.4.tgz",
+ "integrity": "sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bound": "^1.0.3",
+ "get-intrinsic": "^1.2.6"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/isarray": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz",
+ "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/isexe": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
@@ -7199,6 +8361,24 @@
"node": ">=8"
}
},
+ "node_modules/iterator.prototype": {
+ "version": "1.1.5",
+ "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.5.tgz",
+ "integrity": "sha512-H0dkQoCa3b2VEeKQBOxFph+JAbcrQdE7KC0UkqwpLmv2EC4P41QXP+rqo9wYodACiG5/WM5s9oDApTU8utwj9g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "define-data-property": "^1.1.4",
+ "es-object-atoms": "^1.0.0",
+ "get-intrinsic": "^1.2.6",
+ "get-proto": "^1.0.0",
+ "has-symbols": "^1.1.0",
+ "set-function-name": "^2.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
"node_modules/jake": {
"version": "10.9.2",
"resolved": "https://registry.npmjs.org/jake/-/jake-10.9.2.tgz",
@@ -8249,6 +9429,22 @@
"node": ">= 10.0.0"
}
},
+ "node_modules/jsx-ast-utils": {
+ "version": "3.3.5",
+ "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz",
+ "integrity": "sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "array-includes": "^3.1.6",
+ "array.prototype.flat": "^1.3.1",
+ "object.assign": "^4.1.4",
+ "object.values": "^1.1.6"
+ },
+ "engines": {
+ "node": ">=4.0"
+ }
+ },
"node_modules/katex": {
"version": "0.16.11",
"resolved": "https://registry.npmjs.org/katex/-/katex-0.16.11.tgz",
@@ -8458,6 +9654,16 @@
"node": ">= 18"
}
},
+ "node_modules/math-intrinsics": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz",
+ "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
"node_modules/mdast-util-from-markdown": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.2.tgz",
@@ -9177,6 +10383,103 @@
"node": ">=0.10.0"
}
},
+ "node_modules/object-inspect": {
+ "version": "1.13.3",
+ "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.3.tgz",
+ "integrity": "sha512-kDCGIbxkDSXE3euJZZXzc6to7fCrKHNI/hSRQnRuQ+BWjFNzZwiFF8fj/6o2t2G9/jTj8PSIYTfCLelLZEeRpA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/object-keys": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
+ "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/object.assign": {
+ "version": "4.1.7",
+ "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.7.tgz",
+ "integrity": "sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bind": "^1.0.8",
+ "call-bound": "^1.0.3",
+ "define-properties": "^1.2.1",
+ "es-object-atoms": "^1.0.0",
+ "has-symbols": "^1.1.0",
+ "object-keys": "^1.1.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/object.entries": {
+ "version": "1.1.8",
+ "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.8.tgz",
+ "integrity": "sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bind": "^1.0.7",
+ "define-properties": "^1.2.1",
+ "es-object-atoms": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/object.fromentries": {
+ "version": "2.0.8",
+ "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz",
+ "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bind": "^1.0.7",
+ "define-properties": "^1.2.1",
+ "es-abstract": "^1.23.2",
+ "es-object-atoms": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/object.values": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.1.tgz",
+ "integrity": "sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bind": "^1.0.8",
+ "call-bound": "^1.0.3",
+ "define-properties": "^1.2.1",
+ "es-object-atoms": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
"node_modules/once": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
@@ -9221,6 +10524,24 @@
"node": ">= 0.8.0"
}
},
+ "node_modules/own-keys": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/own-keys/-/own-keys-1.0.1.tgz",
+ "integrity": "sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "get-intrinsic": "^1.2.6",
+ "object-keys": "^1.1.1",
+ "safe-push-apply": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
"node_modules/p-limit": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
@@ -9458,6 +10779,16 @@
"node": ">=8"
}
},
+ "node_modules/possible-typed-array-names": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz",
+ "integrity": "sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
"node_modules/postcss": {
"version": "8.4.47",
"resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.47.tgz",
@@ -9645,24 +10976,28 @@
"license": "MIT"
},
"node_modules/react": {
- "version": "19.0.0",
- "resolved": "https://registry.npmjs.org/react/-/react-19.0.0.tgz",
- "integrity": "sha512-V8AVnmPIICiWpGfm6GLzCR/W5FXLchHop40W4nXBmdlEceh16rCN8O8LNWm5bh5XUX91fh7KpA+W0TgMKmgTpQ==",
+ "version": "18.3.1",
+ "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz",
+ "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==",
"license": "MIT",
+ "dependencies": {
+ "loose-envify": "^1.1.0"
+ },
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/react-dom": {
- "version": "19.0.0",
- "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.0.0.tgz",
- "integrity": "sha512-4GV5sHFG0e/0AD4X+ySy6UJd3jVl1iNsNHdpad0qhABJ11twS3TTBnseqsKurKcsNqCEFeGL3uLpVChpIO3QfQ==",
+ "version": "18.3.1",
+ "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz",
+ "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==",
"license": "MIT",
"dependencies": {
- "scheduler": "^0.25.0"
+ "loose-envify": "^1.1.0",
+ "scheduler": "^0.23.2"
},
"peerDependencies": {
- "react": "^19.0.0"
+ "react": "^18.3.1"
}
},
"node_modules/react-is": {
@@ -9770,6 +11105,29 @@
"node": ">=8"
}
},
+ "node_modules/reflect.getprototypeof": {
+ "version": "1.0.10",
+ "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz",
+ "integrity": "sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bind": "^1.0.8",
+ "define-properties": "^1.2.1",
+ "es-abstract": "^1.23.9",
+ "es-errors": "^1.3.0",
+ "es-object-atoms": "^1.0.0",
+ "get-intrinsic": "^1.2.7",
+ "get-proto": "^1.0.1",
+ "which-builtin-type": "^1.2.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
"node_modules/regenerate": {
"version": "1.4.2",
"resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz",
@@ -9806,6 +11164,27 @@
"@babel/runtime": "^7.8.4"
}
},
+ "node_modules/regexp.prototype.flags": {
+ "version": "1.5.4",
+ "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.4.tgz",
+ "integrity": "sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bind": "^1.0.8",
+ "define-properties": "^1.2.1",
+ "es-errors": "^1.3.0",
+ "get-proto": "^1.0.1",
+ "gopd": "^1.2.0",
+ "set-function-name": "^2.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
"node_modules/regexpu-core": {
"version": "6.1.1",
"resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-6.1.1.tgz",
@@ -10005,6 +11384,61 @@
"queue-microtask": "^1.2.2"
}
},
+ "node_modules/safe-array-concat": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.3.tgz",
+ "integrity": "sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bind": "^1.0.8",
+ "call-bound": "^1.0.2",
+ "get-intrinsic": "^1.2.6",
+ "has-symbols": "^1.1.0",
+ "isarray": "^2.0.5"
+ },
+ "engines": {
+ "node": ">=0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/safe-push-apply": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/safe-push-apply/-/safe-push-apply-1.0.0.tgz",
+ "integrity": "sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "es-errors": "^1.3.0",
+ "isarray": "^2.0.5"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/safe-regex-test": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.1.0.tgz",
+ "integrity": "sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bound": "^1.0.2",
+ "es-errors": "^1.3.0",
+ "is-regex": "^1.2.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
"node_modules/safer-buffer": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
@@ -10024,10 +11458,13 @@
}
},
"node_modules/scheduler": {
- "version": "0.25.0",
- "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.25.0.tgz",
- "integrity": "sha512-xFVuu11jh+xcO7JOAGJNOXld8/TcEHK/4CituBUeUb5hqxJLj9YuemAEuvm9gQ/+pgXYfbQuqAkiYu+u7YEsNA==",
- "license": "MIT"
+ "version": "0.23.2",
+ "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz",
+ "integrity": "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==",
+ "license": "MIT",
+ "dependencies": {
+ "loose-envify": "^1.1.0"
+ }
},
"node_modules/semver": {
"version": "6.3.1",
@@ -10039,6 +11476,55 @@
"semver": "bin/semver.js"
}
},
+ "node_modules/set-function-length": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz",
+ "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "define-data-property": "^1.1.4",
+ "es-errors": "^1.3.0",
+ "function-bind": "^1.1.2",
+ "get-intrinsic": "^1.2.4",
+ "gopd": "^1.0.1",
+ "has-property-descriptors": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/set-function-name": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz",
+ "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "define-data-property": "^1.1.4",
+ "es-errors": "^1.3.0",
+ "functions-have-names": "^1.2.3",
+ "has-property-descriptors": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/set-proto": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/set-proto/-/set-proto-1.0.0.tgz",
+ "integrity": "sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "dunder-proto": "^1.0.1",
+ "es-errors": "^1.3.0",
+ "es-object-atoms": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
"node_modules/shebang-command": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
@@ -10062,6 +11548,82 @@
"node": ">=8"
}
},
+ "node_modules/side-channel": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz",
+ "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "es-errors": "^1.3.0",
+ "object-inspect": "^1.13.3",
+ "side-channel-list": "^1.0.0",
+ "side-channel-map": "^1.0.1",
+ "side-channel-weakmap": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/side-channel-list": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz",
+ "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "es-errors": "^1.3.0",
+ "object-inspect": "^1.13.3"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/side-channel-map": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz",
+ "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bound": "^1.0.2",
+ "es-errors": "^1.3.0",
+ "get-intrinsic": "^1.2.5",
+ "object-inspect": "^1.13.3"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/side-channel-weakmap": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz",
+ "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bound": "^1.0.2",
+ "es-errors": "^1.3.0",
+ "get-intrinsic": "^1.2.5",
+ "object-inspect": "^1.13.3",
+ "side-channel-map": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
"node_modules/signal-exit": {
"version": "3.0.7",
"resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz",
@@ -10209,6 +11771,104 @@
"node": ">=8"
}
},
+ "node_modules/string.prototype.matchall": {
+ "version": "4.0.12",
+ "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.12.tgz",
+ "integrity": "sha512-6CC9uyBL+/48dYizRf7H7VAYCMCNTBeM78x/VTUe9bFEaxBepPJDa1Ow99LqI/1yF7kuy7Q3cQsYMrcjGUcskA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bind": "^1.0.8",
+ "call-bound": "^1.0.3",
+ "define-properties": "^1.2.1",
+ "es-abstract": "^1.23.6",
+ "es-errors": "^1.3.0",
+ "es-object-atoms": "^1.0.0",
+ "get-intrinsic": "^1.2.6",
+ "gopd": "^1.2.0",
+ "has-symbols": "^1.1.0",
+ "internal-slot": "^1.1.0",
+ "regexp.prototype.flags": "^1.5.3",
+ "set-function-name": "^2.0.2",
+ "side-channel": "^1.1.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/string.prototype.repeat": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/string.prototype.repeat/-/string.prototype.repeat-1.0.0.tgz",
+ "integrity": "sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "define-properties": "^1.1.3",
+ "es-abstract": "^1.17.5"
+ }
+ },
+ "node_modules/string.prototype.trim": {
+ "version": "1.2.10",
+ "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.10.tgz",
+ "integrity": "sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bind": "^1.0.8",
+ "call-bound": "^1.0.2",
+ "define-data-property": "^1.1.4",
+ "define-properties": "^1.2.1",
+ "es-abstract": "^1.23.5",
+ "es-object-atoms": "^1.0.0",
+ "has-property-descriptors": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/string.prototype.trimend": {
+ "version": "1.0.9",
+ "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.9.tgz",
+ "integrity": "sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bind": "^1.0.8",
+ "call-bound": "^1.0.2",
+ "define-properties": "^1.2.1",
+ "es-object-atoms": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/string.prototype.trimstart": {
+ "version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz",
+ "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bind": "^1.0.7",
+ "define-properties": "^1.2.1",
+ "es-object-atoms": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
"node_modules/strip-ansi": {
"version": "6.0.1",
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
@@ -10342,13 +12002,6 @@
"node": "*"
}
},
- "node_modules/text-table": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
- "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==",
- "devOptional": true,
- "license": "MIT"
- },
"node_modules/tiny-invariant": {
"version": "1.3.3",
"resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.3.tgz",
@@ -10412,16 +12065,16 @@
}
},
"node_modules/ts-api-utils": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.4.0.tgz",
- "integrity": "sha512-032cPxaEKwM+GT3vA5JXNzIaizx388rhsSW79vGRNGXfRRAdEAn2mvk36PvK5HnOchyWZ7afLEXqYCvPCrzuzQ==",
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.0.0.tgz",
+ "integrity": "sha512-xCt/TOAc+EOHS1XPnijD3/yzpH6qg2xppZO1YDqGoVsNXfQfzHpOdNuXwrwOU8u4ITXJyDCTyt8w5g1sZv9ynQ==",
"dev": true,
"license": "MIT",
"engines": {
- "node": ">=16"
+ "node": ">=18.12"
},
"peerDependencies": {
- "typescript": ">=4.2.0"
+ "typescript": ">=4.8.4"
}
},
"node_modules/ts-jest": {
@@ -10563,6 +12216,84 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
+ "node_modules/typed-array-buffer": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz",
+ "integrity": "sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bound": "^1.0.3",
+ "es-errors": "^1.3.0",
+ "is-typed-array": "^1.1.14"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/typed-array-byte-length": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.3.tgz",
+ "integrity": "sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bind": "^1.0.8",
+ "for-each": "^0.3.3",
+ "gopd": "^1.2.0",
+ "has-proto": "^1.2.0",
+ "is-typed-array": "^1.1.14"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/typed-array-byte-offset": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.4.tgz",
+ "integrity": "sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "available-typed-arrays": "^1.0.7",
+ "call-bind": "^1.0.8",
+ "for-each": "^0.3.3",
+ "gopd": "^1.2.0",
+ "has-proto": "^1.2.0",
+ "is-typed-array": "^1.1.15",
+ "reflect.getprototypeof": "^1.0.9"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/typed-array-length": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.7.tgz",
+ "integrity": "sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bind": "^1.0.7",
+ "for-each": "^0.3.3",
+ "gopd": "^1.0.1",
+ "is-typed-array": "^1.1.13",
+ "possible-typed-array-names": "^1.0.0",
+ "reflect.getprototypeof": "^1.0.6"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
"node_modules/typescript": {
"version": "5.6.3",
"resolved": "https://registry.npmjs.org/typescript/-/typescript-5.6.3.tgz",
@@ -10576,6 +12307,48 @@
"node": ">=14.17"
}
},
+ "node_modules/typescript-eslint": {
+ "version": "8.20.0",
+ "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.20.0.tgz",
+ "integrity": "sha512-Kxz2QRFsgbWj6Xcftlw3Dd154b3cEPFqQC+qMZrMypSijPd4UanKKvoKDrJ4o8AIfZFKAF+7sMaEIR8mTElozA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@typescript-eslint/eslint-plugin": "8.20.0",
+ "@typescript-eslint/parser": "8.20.0",
+ "@typescript-eslint/utils": "8.20.0"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependencies": {
+ "eslint": "^8.57.0 || ^9.0.0",
+ "typescript": ">=4.8.4 <5.8.0"
+ }
+ },
+ "node_modules/unbox-primitive": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.1.0.tgz",
+ "integrity": "sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bound": "^1.0.3",
+ "has-bigints": "^1.0.2",
+ "has-symbols": "^1.1.0",
+ "which-boxed-primitive": "^1.1.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
"node_modules/undici-types": {
"version": "6.19.8",
"resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz",
@@ -11571,6 +13344,94 @@
"node": ">= 8"
}
},
+ "node_modules/which-boxed-primitive": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.1.1.tgz",
+ "integrity": "sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-bigint": "^1.1.0",
+ "is-boolean-object": "^1.2.1",
+ "is-number-object": "^1.1.1",
+ "is-string": "^1.1.1",
+ "is-symbol": "^1.1.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/which-builtin-type": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.2.1.tgz",
+ "integrity": "sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bound": "^1.0.2",
+ "function.prototype.name": "^1.1.6",
+ "has-tostringtag": "^1.0.2",
+ "is-async-function": "^2.0.0",
+ "is-date-object": "^1.1.0",
+ "is-finalizationregistry": "^1.1.0",
+ "is-generator-function": "^1.0.10",
+ "is-regex": "^1.2.1",
+ "is-weakref": "^1.0.2",
+ "isarray": "^2.0.5",
+ "which-boxed-primitive": "^1.1.0",
+ "which-collection": "^1.0.2",
+ "which-typed-array": "^1.1.16"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/which-collection": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz",
+ "integrity": "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-map": "^2.0.3",
+ "is-set": "^2.0.3",
+ "is-weakmap": "^2.0.2",
+ "is-weakset": "^2.0.3"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/which-typed-array": {
+ "version": "1.1.18",
+ "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.18.tgz",
+ "integrity": "sha512-qEcY+KJYlWyLH9vNbsr6/5j59AXk5ni5aakf8ldzBvGde6Iz4sxZGkJyWSAueTG7QhOvNRYb1lDdFmL5Td0QKA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "available-typed-arrays": "^1.0.7",
+ "call-bind": "^1.0.8",
+ "call-bound": "^1.0.3",
+ "for-each": "^0.3.3",
+ "gopd": "^1.2.0",
+ "has-tostringtag": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
"node_modules/word-wrap": {
"version": "1.2.5",
"resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz",
diff --git a/client/package.json b/client/package.json
index 6b1c567..6476a10 100644
--- a/client/package.json
+++ b/client/package.json
@@ -29,8 +29,8 @@
"katex": "^0.16.11",
"marked": "^14.1.2",
"nanoid": "^5.0.2",
- "react": "^19.0.0",
- "react-dom": "^19.0.0",
+ "react": "^18.3.1",
+ "react-dom": "^18.3.1",
"react-modal": "^3.16.1",
"react-router-dom": "^6.26.2",
"remark-math": "^6.0.0",
@@ -68,4 +68,4 @@
"vite": "^5.4.5",
"vite-plugin-environment": "^1.1.3"
}
-}
+}
\ No newline at end of file
diff --git a/client/src/__tests__/components/ConfirmDialog/ConfirmDialog.test.tsx b/client/src/__tests__/components/ConfirmDialog/ConfirmDialog.test.tsx
index e119ca8..539476f 100644
--- a/client/src/__tests__/components/ConfirmDialog/ConfirmDialog.test.tsx
+++ b/client/src/__tests__/components/ConfirmDialog/ConfirmDialog.test.tsx
@@ -2,7 +2,7 @@
import React from 'react';
import { render, fireEvent, screen } from '@testing-library/react';
import '@testing-library/jest-dom';
-import ConfirmDialog from '../../../components/ConfirmDialog/ConfirmDialog';
+import ConfirmDialog from 'src/components/ConfirmDialog/ConfirmDialog';
describe('ConfirmDialog Component', () => {
const mockOnConfirm = jest.fn();
diff --git a/client/src/__tests__/components/Editor/Editor.test.tsx b/client/src/__tests__/components/Editor/Editor.test.tsx
index 0a7c9b5..7548aac 100644
--- a/client/src/__tests__/components/Editor/Editor.test.tsx
+++ b/client/src/__tests__/components/Editor/Editor.test.tsx
@@ -2,7 +2,7 @@
import React from 'react';
import { render, fireEvent, screen } from '@testing-library/react';
import '@testing-library/jest-dom';
-import Editor from '../../../components/Editor/Editor';
+import Editor from 'src/components/Editor/Editor';
describe('Editor Component', () => {
const mockOnEditorChange = jest.fn();
diff --git a/client/src/__tests__/components/GiftTemplate/GIFTTemplatePreview.test.tsx b/client/src/__tests__/components/GiftTemplate/GIFTTemplatePreview.test.tsx
index f4eea86..586c8d1 100644
--- a/client/src/__tests__/components/GiftTemplate/GIFTTemplatePreview.test.tsx
+++ b/client/src/__tests__/components/GiftTemplate/GIFTTemplatePreview.test.tsx
@@ -1,7 +1,7 @@
import React from 'react';
import { render, screen } from '@testing-library/react';
import '@testing-library/jest-dom';
-import GIFTTemplatePreview from '../../../components/GiftTemplate/GIFTTemplatePreview';
+import GIFTTemplatePreview from 'src/components/GiftTemplate/GIFTTemplatePreview';
describe('GIFTTemplatePreview Component', () => {
test('renders error message when questions contain invalid syntax', () => {
diff --git a/client/src/__tests__/components/GiftTemplate/TextType.test.ts b/client/src/__tests__/components/GiftTemplate/TextType.test.ts
index ade4211..9909686 100644
--- a/client/src/__tests__/components/GiftTemplate/TextType.test.ts
+++ b/client/src/__tests__/components/GiftTemplate/TextType.test.ts
@@ -1,7 +1,7 @@
// TextType.test.ts
import { TextFormat } from "gift-pegjs";
-import textType from "../../../components/GiftTemplate/templates/TextType";
+import textType from "src/components/GiftTemplate/templates/TextType";
describe('TextType', () => {
it('should format text with basic characters correctly', () => {
diff --git a/client/src/__tests__/components/GiftTemplate/constants/colors.test.tsx b/client/src/__tests__/components/GiftTemplate/constants/colors.test.tsx
index dacd85d..44fa3f4 100644
--- a/client/src/__tests__/components/GiftTemplate/constants/colors.test.tsx
+++ b/client/src/__tests__/components/GiftTemplate/constants/colors.test.tsx
@@ -1,5 +1,5 @@
//color.test.tsx
-import { colors } from "../../../../components/GiftTemplate/constants";
+import { colors } from "src/components/GiftTemplate/constants";
describe('Colors object', () => {
test('All colors are defined', () => {
diff --git a/client/src/__tests__/components/GiftTemplate/constants/styles.test.tsx b/client/src/__tests__/components/GiftTemplate/constants/styles.test.tsx
index 7347b67..0bb5c54 100644
--- a/client/src/__tests__/components/GiftTemplate/constants/styles.test.tsx
+++ b/client/src/__tests__/components/GiftTemplate/constants/styles.test.tsx
@@ -3,7 +3,7 @@ import React from 'react';
import { render } from '@testing-library/react';
import '@testing-library/jest-dom';
-import { ParagraphStyle } from '../../../../components/GiftTemplate/constants';
+import { ParagraphStyle } from 'src/components/GiftTemplate/constants';
describe('ParagraphStyle', () => {
test('applies styles correctly', () => {
diff --git a/client/src/__tests__/components/GiftTemplate/constants/theme.test.tsx b/client/src/__tests__/components/GiftTemplate/constants/theme.test.tsx
index 6a3831a..727efc9 100644
--- a/client/src/__tests__/components/GiftTemplate/constants/theme.test.tsx
+++ b/client/src/__tests__/components/GiftTemplate/constants/theme.test.tsx
@@ -1,6 +1,6 @@
import '@testing-library/jest-dom';
-import { theme } from '../../../../components/GiftTemplate/constants/theme';
-import { colors } from '../../../../components/GiftTemplate/constants/colors';
+import { theme } from 'src/components/GiftTemplate/constants/theme';
+import { colors } from 'src/components/GiftTemplate/constants/colors';
describe('Theme', () => {
test('returns correct light color', () => {
diff --git a/client/src/__tests__/components/GiftTemplate/templates/AnswerIcon.test.tsx b/client/src/__tests__/components/GiftTemplate/templates/AnswerIcon.test.tsx
index b053976..2727893 100644
--- a/client/src/__tests__/components/GiftTemplate/templates/AnswerIcon.test.tsx
+++ b/client/src/__tests__/components/GiftTemplate/templates/AnswerIcon.test.tsx
@@ -1,7 +1,7 @@
import React from 'react';
import { render } from '@testing-library/react';
import '@testing-library/jest-dom';
-import AnswerIcon from '../../../../components/GiftTemplate/templates/AnswerIcon';
+import AnswerIcon from 'src/components/GiftTemplate/templates/AnswerIcon';
describe('AnswerIcon', () => {
test('renders correct icon when correct is true', () => {
diff --git a/client/src/__tests__/components/GiftTemplate/templates/MultipleChoice.test.tsx b/client/src/__tests__/components/GiftTemplate/templates/MultipleChoice.test.tsx
index ddd06ed..53c86c0 100644
--- a/client/src/__tests__/components/GiftTemplate/templates/MultipleChoice.test.tsx
+++ b/client/src/__tests__/components/GiftTemplate/templates/MultipleChoice.test.tsx
@@ -1,8 +1,8 @@
import React from 'react';
import { render } from '@testing-library/react';
import '@testing-library/jest-dom';
-import { MultipleChoice } from '../../../../components/GiftTemplate/templates';
-import { TemplateOptions, MultipleChoice as MultipleChoiceType } from '../../../../components/GiftTemplate/templates/types';
+import { MultipleChoice } from 'src/components/GiftTemplate/templates';
+import { TemplateOptions, MultipleChoice as MultipleChoiceType } from 'src/components/GiftTemplate/templates/types';
// Mock the nanoid function
jest.mock('nanoid', () => ({
diff --git a/client/src/__tests__/components/GiftTemplate/templates/Numerical.test.tsx b/client/src/__tests__/components/GiftTemplate/templates/Numerical.test.tsx
index 5d974ab..e28f80f 100644
--- a/client/src/__tests__/components/GiftTemplate/templates/Numerical.test.tsx
+++ b/client/src/__tests__/components/GiftTemplate/templates/Numerical.test.tsx
@@ -1,8 +1,8 @@
import React from 'react';
import { render } from '@testing-library/react';
import '@testing-library/jest-dom';
-import Numerical from '../../../../components/GiftTemplate/templates/Numerical';
-import { TemplateOptions, Numerical as NumericalType } from '../../../../components/GiftTemplate/templates/types';
+import Numerical from 'src/components/GiftTemplate/templates/Numerical';
+import { TemplateOptions, Numerical as NumericalType } from 'src/components/GiftTemplate/templates/types';
// Mock the nanoid function
jest.mock('nanoid', () => ({
diff --git a/client/src/__tests__/components/GiftTemplate/templates/ShortAnswer.test.tsx b/client/src/__tests__/components/GiftTemplate/templates/ShortAnswer.test.tsx
index 9f4fbf0..9928099 100644
--- a/client/src/__tests__/components/GiftTemplate/templates/ShortAnswer.test.tsx
+++ b/client/src/__tests__/components/GiftTemplate/templates/ShortAnswer.test.tsx
@@ -1,8 +1,8 @@
import React from 'react';
import { render } from '@testing-library/react';
import '@testing-library/jest-dom';
-import ShortAnswer from '../../../../components/GiftTemplate/templates/ShortAnswer';
-import { TemplateOptions, ShortAnswer as ShortAnswerType } from '../../../../components/GiftTemplate/templates/types';
+import ShortAnswer from 'src/components/GiftTemplate/templates/ShortAnswer';
+import { TemplateOptions, ShortAnswer as ShortAnswerType } from 'src/components/GiftTemplate/templates/types';
// Mock the nanoid function
jest.mock('nanoid', () => ({
diff --git a/client/src/__tests__/components/GiftTemplate/templates/TrueFalse.test.tsx b/client/src/__tests__/components/GiftTemplate/templates/TrueFalse.test.tsx
index 586837b..bbb717e 100644
--- a/client/src/__tests__/components/GiftTemplate/templates/TrueFalse.test.tsx
+++ b/client/src/__tests__/components/GiftTemplate/templates/TrueFalse.test.tsx
@@ -1,8 +1,8 @@
import React from 'react';
import { render } from '@testing-library/react';
import '@testing-library/jest-dom';
-import TrueFalse from '../../../../components/GiftTemplate/templates';
-import { TemplateOptions, TrueFalse as TrueFalseType } from '../../../../components/GiftTemplate/templates/types';
+import TrueFalse from 'src/components/GiftTemplate/templates';
+import { TemplateOptions, TrueFalse as TrueFalseType } from 'src/components/GiftTemplate/templates/types';
// Mock the nanoid function
jest.mock('nanoid', () => ({
diff --git a/client/src/__tests__/components/ImportModal/ImportModal.test.tsx b/client/src/__tests__/components/ImportModal/ImportModal.test.tsx
index 400b586..f52bcd6 100644
--- a/client/src/__tests__/components/ImportModal/ImportModal.test.tsx
+++ b/client/src/__tests__/components/ImportModal/ImportModal.test.tsx
@@ -1,7 +1,7 @@
import React from 'react';
import { render, screen, fireEvent } from '@testing-library/react';
import '@testing-library/jest-dom';
-import DragAndDrop from '../../../components/ImportModal/ImportModal';
+import DragAndDrop from 'src/components/ImportModal/ImportModal';
describe('DragAndDrop Component', () => {
diff --git a/client/src/__tests__/components/LaunchQuizDialog/LaunchQuizDialog.test.tsx b/client/src/__tests__/components/LaunchQuizDialog/LaunchQuizDialog.test.tsx
index 9709cd0..cd78997 100644
--- a/client/src/__tests__/components/LaunchQuizDialog/LaunchQuizDialog.test.tsx
+++ b/client/src/__tests__/components/LaunchQuizDialog/LaunchQuizDialog.test.tsx
@@ -1,7 +1,7 @@
import React from 'react';
import { render, screen, fireEvent } from '@testing-library/react';
import '@testing-library/jest-dom';
-import LaunchQuizDialog from '../../../components/LaunchQuizDialog/LaunchQuizDialog';
+import LaunchQuizDialog from 'src/components/LaunchQuizDialog/LaunchQuizDialog';
// Mock the functions passed as props
const mockHandleOnClose = jest.fn();
diff --git a/client/src/__tests__/components/LoadingCircle/LoadingCircle.test.tsx b/client/src/__tests__/components/LoadingCircle/LoadingCircle.test.tsx
index 11c9ee5..a535b98 100644
--- a/client/src/__tests__/components/LoadingCircle/LoadingCircle.test.tsx
+++ b/client/src/__tests__/components/LoadingCircle/LoadingCircle.test.tsx
@@ -1,7 +1,7 @@
import React from 'react';
import { render, screen } from '@testing-library/react';
import '@testing-library/jest-dom';
-import LoadingCircle from '../../../components/LoadingCircle/LoadingCircle';
+import LoadingCircle from 'src/components/LoadingCircle/LoadingCircle';
describe('LoadingCircle', () => {
it('displays the provided text correctly', () => {
diff --git a/client/src/__tests__/components/Questions/MultipleChoiceQuestion/MultipleChoiceQuestion.test.tsx b/client/src/__tests__/components/Questions/MultipleChoiceQuestion/MultipleChoiceQuestion.test.tsx
index 573bcae..784ea81 100644
--- a/client/src/__tests__/components/Questions/MultipleChoiceQuestion/MultipleChoiceQuestion.test.tsx
+++ b/client/src/__tests__/components/Questions/MultipleChoiceQuestion/MultipleChoiceQuestion.test.tsx
@@ -1,7 +1,7 @@
import React from 'react';
import { render, screen, fireEvent } from '@testing-library/react';
import '@testing-library/jest-dom';
-import MultipleChoiceQuestion from '../../../../components/Questions/MultipleChoiceQuestion/MultipleChoiceQuestion';
+import MultipleChoiceQuestion from 'src/components/Questions/MultipleChoiceQuestion/MultipleChoiceQuestion';
import { act } from 'react';
import { MemoryRouter } from 'react-router-dom';
diff --git a/client/src/__tests__/components/Questions/NumericalQuestion/NumericalQuestion.test.tsx b/client/src/__tests__/components/Questions/NumericalQuestion/NumericalQuestion.test.tsx
index 5dbb5e7..e307ed8 100644
--- a/client/src/__tests__/components/Questions/NumericalQuestion/NumericalQuestion.test.tsx
+++ b/client/src/__tests__/components/Questions/NumericalQuestion/NumericalQuestion.test.tsx
@@ -2,7 +2,7 @@
import React from 'react';
import { render, screen, fireEvent } from '@testing-library/react';
import '@testing-library/jest-dom';
-import NumericalQuestion from '../../../../components/Questions/NumericalQuestion/NumericalQuestion';
+import NumericalQuestion from 'src/components/Questions/NumericalQuestion/NumericalQuestion';
describe('NumericalQuestion Component', () => {
const mockHandleSubmitAnswer = jest.fn();
diff --git a/client/src/__tests__/components/Questions/Question.test.tsx b/client/src/__tests__/components/Questions/Question.test.tsx
index c92606a..cd04c8a 100644
--- a/client/src/__tests__/components/Questions/Question.test.tsx
+++ b/client/src/__tests__/components/Questions/Question.test.tsx
@@ -2,7 +2,7 @@
import React from 'react';
import { render, screen, fireEvent } from '@testing-library/react';
import '@testing-library/jest-dom';
-import Questions from '../../../components/Questions/Question';
+import Questions from 'src/components/Questions/Question';
import { GIFTQuestion } from 'gift-pegjs';
//
diff --git a/client/src/__tests__/components/Questions/ShortAnswerQuestion/ShortAnswerQuestion.test.tsx b/client/src/__tests__/components/Questions/ShortAnswerQuestion/ShortAnswerQuestion.test.tsx
index bb45604..351f732 100644
--- a/client/src/__tests__/components/Questions/ShortAnswerQuestion/ShortAnswerQuestion.test.tsx
+++ b/client/src/__tests__/components/Questions/ShortAnswerQuestion/ShortAnswerQuestion.test.tsx
@@ -2,7 +2,7 @@
import React from 'react';
import { render, screen, fireEvent } from '@testing-library/react';
import '@testing-library/jest-dom';
-import ShortAnswerQuestion from '../../../../components/Questions/ShortAnswerQuestion/ShortAnswerQuestion';
+import ShortAnswerQuestion from 'src/components/Questions/ShortAnswerQuestion/ShortAnswerQuestion';
describe('ShortAnswerQuestion Component', () => {
const mockHandleSubmitAnswer = jest.fn();
diff --git a/client/src/__tests__/components/Questions/TrueFalseQuestion/TrueFalseQuestion.test.tsx b/client/src/__tests__/components/Questions/TrueFalseQuestion/TrueFalseQuestion.test.tsx
index afb015b..2a6ad77 100644
--- a/client/src/__tests__/components/Questions/TrueFalseQuestion/TrueFalseQuestion.test.tsx
+++ b/client/src/__tests__/components/Questions/TrueFalseQuestion/TrueFalseQuestion.test.tsx
@@ -2,7 +2,7 @@
import React from 'react';
import { render, fireEvent, screen, act } from '@testing-library/react';
import '@testing-library/jest-dom';
-import TrueFalseQuestion from '../../../../components/Questions/TrueFalseQuestion/TrueFalseQuestion';
+import TrueFalseQuestion from 'src/components/Questions/TrueFalseQuestion/TrueFalseQuestion';
import { MemoryRouter } from 'react-router-dom';
describe('TrueFalseQuestion Component', () => {
diff --git a/client/src/__tests__/components/ReturnButton/ReturnButton.test.tsx b/client/src/__tests__/components/ReturnButton/ReturnButton.test.tsx
index d2861a9..8f8ef99 100644
--- a/client/src/__tests__/components/ReturnButton/ReturnButton.test.tsx
+++ b/client/src/__tests__/components/ReturnButton/ReturnButton.test.tsx
@@ -1,7 +1,7 @@
import React from 'react';
import { render, screen, fireEvent } from '@testing-library/react';
import '@testing-library/jest-dom';
-import ReturnButton from '../../../components/ReturnButton/ReturnButton';
+import ReturnButton from 'src/components/ReturnButton/ReturnButton';
import { useNavigate } from 'react-router-dom';
jest.mock('react-router-dom', () => ({
diff --git a/client/src/__tests__/components/StudentWaitPage/StudentWaitPage.test.tsx b/client/src/__tests__/components/StudentWaitPage/StudentWaitPage.test.tsx
index 3e171c3..a52061a 100644
--- a/client/src/__tests__/components/StudentWaitPage/StudentWaitPage.test.tsx
+++ b/client/src/__tests__/components/StudentWaitPage/StudentWaitPage.test.tsx
@@ -2,7 +2,7 @@
import React from 'react';
import { render, screen, fireEvent } from '@testing-library/react';
import '@testing-library/jest-dom';
-import StudentWaitPage from '../../../components/StudentWaitPage/StudentWaitPage';
+import StudentWaitPage from 'src/components/StudentWaitPage/StudentWaitPage';
import { StudentType, Answer } from '../../../Types/StudentType';
describe('StudentWaitPage Component', () => {
diff --git a/client/src/__tests__/pages/Student/StudentModeQuiz/StudentModeQuiz.test.tsx b/client/src/__tests__/pages/Student/StudentModeQuiz/StudentModeQuiz.test.tsx
index fa6475f..379cf5e 100644
--- a/client/src/__tests__/pages/Student/StudentModeQuiz/StudentModeQuiz.test.tsx
+++ b/client/src/__tests__/pages/Student/StudentModeQuiz/StudentModeQuiz.test.tsx
@@ -4,7 +4,7 @@ import '@testing-library/jest-dom';
import { parse } from 'gift-pegjs';
import { MemoryRouter } from 'react-router-dom';
import { QuestionType } from '../../../../Types/QuestionType';
-import StudentModeQuiz from '../../../../components/StudentModeQuiz/StudentModeQuiz';
+import StudentModeQuiz from 'src/components/StudentModeQuiz/StudentModeQuiz';
const mockGiftQuestions = parse(
`::Sample Question 1:: Sample Question 1 {=Option A ~Option B}
diff --git a/client/src/__tests__/pages/Student/TeacherModeQuiz/TeacherModeQuiz.test.tsx b/client/src/__tests__/pages/Student/TeacherModeQuiz/TeacherModeQuiz.test.tsx
index 1524e2e..2339a70 100644
--- a/client/src/__tests__/pages/Student/TeacherModeQuiz/TeacherModeQuiz.test.tsx
+++ b/client/src/__tests__/pages/Student/TeacherModeQuiz/TeacherModeQuiz.test.tsx
@@ -5,7 +5,7 @@ import { screen } from '@testing-library/dom';
import '@testing-library/jest-dom';
import { parse } from 'gift-pegjs';
-import TeacherModeQuiz from '../../../../components/TeacherModeQuiz/TeacherModeQuiz';
+import TeacherModeQuiz from 'src/components/TeacherModeQuiz/TeacherModeQuiz';
import { MemoryRouter } from 'react-router-dom';
// import { mock } from 'node:test';
diff --git a/client/src/components/StudentModeQuiz/StudentModeQuiz.tsx b/client/src/components/StudentModeQuiz/StudentModeQuiz.tsx
index 418405f..6b8db94 100644
--- a/client/src/components/StudentModeQuiz/StudentModeQuiz.tsx
+++ b/client/src/components/StudentModeQuiz/StudentModeQuiz.tsx
@@ -8,7 +8,7 @@ import { QuestionType } from '../../Types/QuestionType';
import { Button } from '@mui/material';
import QuestionNavigation from '../QuestionNavigation/QuestionNavigation';
import { ChevronLeft, ChevronRight } from '@mui/icons-material';
-import DisconnectButton from '../../components/DisconnectButton/DisconnectButton';
+import DisconnectButton from 'src/components/DisconnectButton/DisconnectButton';
interface StudentModeQuizProps {
questions: QuestionType[];
diff --git a/client/src/components/TeacherModeQuiz/TeacherModeQuiz.tsx b/client/src/components/TeacherModeQuiz/TeacherModeQuiz.tsx
index 82f12a6..1afab71 100644
--- a/client/src/components/TeacherModeQuiz/TeacherModeQuiz.tsx
+++ b/client/src/components/TeacherModeQuiz/TeacherModeQuiz.tsx
@@ -6,7 +6,7 @@ import QuestionComponent from '../Questions/Question';
import '../../pages/Student/JoinRoom/joinRoom.css';
import { QuestionType } from '../../Types/QuestionType';
// import { QuestionService } from '../../services/QuestionService';
-import DisconnectButton from '../../components/DisconnectButton/DisconnectButton';
+import DisconnectButton from 'src/components/DisconnectButton/DisconnectButton';
import { Dialog, DialogTitle, DialogContent, DialogActions, Button } from '@mui/material';
interface TeacherModeQuizProps {
diff --git a/client/src/pages/Student/JoinRoom/JoinRoom.tsx b/client/src/pages/Student/JoinRoom/JoinRoom.tsx
index 040f22e..f0ac8d7 100644
--- a/client/src/pages/Student/JoinRoom/JoinRoom.tsx
+++ b/client/src/pages/Student/JoinRoom/JoinRoom.tsx
@@ -3,17 +3,17 @@ import React, { useEffect, useState } from 'react';
import { Socket } from 'socket.io-client';
import { ENV_VARIABLES } from 'src/constants';
-import StudentModeQuiz from '../../../components/StudentModeQuiz/StudentModeQuiz';
-import TeacherModeQuiz from '../../../components/TeacherModeQuiz/TeacherModeQuiz';
+import StudentModeQuiz from 'src/components/StudentModeQuiz/StudentModeQuiz';
+import TeacherModeQuiz from 'src/components/TeacherModeQuiz/TeacherModeQuiz';
import webSocketService, { AnswerSubmissionToBackendType } from '../../../services/WebsocketService';
-import DisconnectButton from '../../../components/DisconnectButton/DisconnectButton';
+import DisconnectButton from 'src/components/DisconnectButton/DisconnectButton';
import './joinRoom.css';
import { QuestionType } from '../../../Types/QuestionType';
import { TextField } from '@mui/material';
import LoadingButton from '@mui/lab/LoadingButton';
-import LoginContainer from '../../../components/LoginContainer/LoginContainer'
+import LoginContainer from 'src/components/LoginContainer/LoginContainer'
const JoinRoom: React.FC = () => {
const [roomName, setRoomName] = useState('');
diff --git a/client/src/pages/Teacher/Dashboard/Dashboard.tsx b/client/src/pages/Teacher/Dashboard/Dashboard.tsx
index 4b9583a..be9574d 100644
--- a/client/src/pages/Teacher/Dashboard/Dashboard.tsx
+++ b/client/src/pages/Teacher/Dashboard/Dashboard.tsx
@@ -3,14 +3,14 @@ import { useNavigate } from 'react-router-dom';
import React, { useState, useEffect, useMemo } from 'react';
import { parse } from 'gift-pegjs';
-import Template from '../../../components/GiftTemplate/templates';
+import Template from 'src/components/GiftTemplate/templates';
import { QuizType } from '../../../Types/QuizType';
import { FolderType } from '../../../Types/FolderType';
// import { QuestionService } from '../../../services/QuestionService';
import ApiService from '../../../services/ApiService';
import './dashboard.css';
-import ImportModal from '../../../components/ImportModal/ImportModal';
+import ImportModal from 'src/components/ImportModal/ImportModal';
//import axios from 'axios';
import {
diff --git a/client/src/pages/Teacher/EditorQuiz/EditorQuiz.tsx b/client/src/pages/Teacher/EditorQuiz/EditorQuiz.tsx
index e17c91c..82f7b05 100644
--- a/client/src/pages/Teacher/EditorQuiz/EditorQuiz.tsx
+++ b/client/src/pages/Teacher/EditorQuiz/EditorQuiz.tsx
@@ -4,15 +4,15 @@ import { useParams, useNavigate } from 'react-router-dom';
import { FolderType } from '../../../Types/FolderType';
-import Editor from '../../../components/Editor/Editor';
-import GiftCheatSheet from '../../../components/GIFTCheatSheet/GiftCheatSheet';
-import GIFTTemplatePreview from '../../../components/GiftTemplate/GIFTTemplatePreview';
+import Editor from 'src/components/Editor/Editor';
+import GiftCheatSheet from 'src/components/GIFTCheatSheet/GiftCheatSheet';
+import GIFTTemplatePreview from 'src/components/GiftTemplate/GIFTTemplatePreview';
import { QuizType } from '../../../Types/QuizType';
import './editorQuiz.css';
import { Button, TextField, NativeSelect, Divider, Dialog, DialogTitle, DialogActions, DialogContent } from '@mui/material';
-import ReturnButton from '../../../components/ReturnButton/ReturnButton';
+import ReturnButton from 'src/components/ReturnButton/ReturnButton';
import ApiService from '../../../services/ApiService';
import { escapeForGIFT } from '../../../utils/giftUtils';
diff --git a/client/src/pages/Teacher/Login/Login.tsx b/client/src/pages/Teacher/Login/Login.tsx
index 8e914b8..7c82a24 100644
--- a/client/src/pages/Teacher/Login/Login.tsx
+++ b/client/src/pages/Teacher/Login/Login.tsx
@@ -7,7 +7,7 @@ import './Login.css';
import { TextField } from '@mui/material';
import LoadingButton from '@mui/lab/LoadingButton';
-import LoginContainer from '../../../components/LoginContainer/LoginContainer'
+import LoginContainer from 'src/components/LoginContainer/LoginContainer'
import ApiService from '../../../services/ApiService';
const Login: React.FC = () => {
diff --git a/client/src/pages/Teacher/ManageRoom/ManageRoom.tsx b/client/src/pages/Teacher/ManageRoom/ManageRoom.tsx
index 73ac6e0..30add4e 100644
--- a/client/src/pages/Teacher/ManageRoom/ManageRoom.tsx
+++ b/client/src/pages/Teacher/ManageRoom/ManageRoom.tsx
@@ -4,7 +4,7 @@ import { useNavigate, useParams } from 'react-router-dom';
import { Socket } from 'socket.io-client';
import { GIFTQuestion, parse } from 'gift-pegjs';
import { QuestionType } from '../../../Types/QuestionType';
-import LiveResultsComponent from '../../../components/LiveResults/LiveResults';
+import LiveResultsComponent from 'src/components/LiveResults/LiveResults';
// import { QuestionService } from '../../../services/QuestionService';
import webSocketService, { AnswerReceptionFromBackendType } from '../../../services/WebsocketService';
import { QuizType } from '../../../Types/QuizType';
@@ -13,12 +13,12 @@ import './manageRoom.css';
import { ENV_VARIABLES } from 'src/constants';
import { StudentType, Answer } from '../../../Types/StudentType';
import { Button } from '@mui/material';
-import LoadingCircle from '../../../components/LoadingCircle/LoadingCircle';
+import LoadingCircle from 'src/components/LoadingCircle/LoadingCircle';
import { Refresh, Error } from '@mui/icons-material';
-import StudentWaitPage from '../../../components/StudentWaitPage/StudentWaitPage';
-import DisconnectButton from '../../../components/DisconnectButton/DisconnectButton';
-import QuestionNavigation from '../../../components/QuestionNavigation/QuestionNavigation';
-import Question from '../../../components/Questions/Question';
+import StudentWaitPage from 'src/components/StudentWaitPage/StudentWaitPage';
+import DisconnectButton from 'src/components/DisconnectButton/DisconnectButton';
+import QuestionNavigation from 'src/components/QuestionNavigation/QuestionNavigation';
+import Question from 'src/components/Questions/Question';
import ApiService from '../../../services/ApiService';
const ManageRoom: React.FC = () => {
diff --git a/client/src/pages/Teacher/Register/Register.tsx b/client/src/pages/Teacher/Register/Register.tsx
index 76a683c..e09b316 100644
--- a/client/src/pages/Teacher/Register/Register.tsx
+++ b/client/src/pages/Teacher/Register/Register.tsx
@@ -7,7 +7,7 @@ import React, { useEffect, useState } from 'react';
import { TextField } from '@mui/material';
import LoadingButton from '@mui/lab/LoadingButton';
-import LoginContainer from '../../../components/LoginContainer/LoginContainer'
+import LoginContainer from 'src/components/LoginContainer/LoginContainer'
import ApiService from '../../../services/ApiService';
const Register: React.FC = () => {
diff --git a/client/src/pages/Teacher/ResetPassword/ResetPassword.tsx b/client/src/pages/Teacher/ResetPassword/ResetPassword.tsx
index 27fe796..c5d9f6e 100644
--- a/client/src/pages/Teacher/ResetPassword/ResetPassword.tsx
+++ b/client/src/pages/Teacher/ResetPassword/ResetPassword.tsx
@@ -7,7 +7,7 @@ import React, { useEffect, useState } from 'react';
import { TextField } from '@mui/material';
import LoadingButton from '@mui/lab/LoadingButton';
-import LoginContainer from '../../../components/LoginContainer/LoginContainer'
+import LoginContainer from 'src/components/LoginContainer/LoginContainer'
import ApiService from '../../../services/ApiService';
const ResetPassword: React.FC = () => {
diff --git a/client/src/pages/Teacher/Share/Share.tsx b/client/src/pages/Teacher/Share/Share.tsx
index d8efcd2..31bb72c 100644
--- a/client/src/pages/Teacher/Share/Share.tsx
+++ b/client/src/pages/Teacher/Share/Share.tsx
@@ -7,7 +7,7 @@ import { FolderType } from '../../../Types/FolderType';
import './share.css';
import { Button, NativeSelect } from '@mui/material';
-import ReturnButton from '../../../components/ReturnButton/ReturnButton';
+import ReturnButton from 'src/components/ReturnButton/ReturnButton';
import ApiService from '../../../services/ApiService';
From f997fea3c339d5c5d4003180fd8b95ea19100c68 Mon Sep 17 00:00:00 2001
From: JubaAzul <118773284+JubaAzul@users.noreply.github.com>
Date: Thu, 16 Jan 2025 12:40:04 -0500
Subject: [PATCH 22/23] Enlever erreur dans .yml
---
.github/workflows/dev_frontend-deploy.yml | 4 ----
.github/workflows/frontend-deploy.yml | 6 +-----
2 files changed, 1 insertion(+), 9 deletions(-)
diff --git a/.github/workflows/dev_frontend-deploy.yml b/.github/workflows/dev_frontend-deploy.yml
index da21450..330dcf1 100644
--- a/.github/workflows/dev_frontend-deploy.yml
+++ b/.github/workflows/dev_frontend-deploy.yml
@@ -24,7 +24,3 @@ jobs:
file: ./client/Dockerfile
push: true
tags: ${{ secrets.DOCKERHUB_USERNAME }}/dev_${{ secrets.DOCKERHUB_FRONTEND_REPO }}:latest
-
- - name: Lint Code
- run: |
- eslint . --rule "@typescript-eslint/ban-ts-comment: off"
diff --git a/.github/workflows/frontend-deploy.yml b/.github/workflows/frontend-deploy.yml
index 2a18e4c..7cbe60a 100644
--- a/.github/workflows/frontend-deploy.yml
+++ b/.github/workflows/frontend-deploy.yml
@@ -23,8 +23,4 @@ jobs:
context: ./client
file: ./client/Dockerfile
push: true
- tags: ${{ secrets.DOCKERHUB_USERNAME }}/${{ secrets.DOCKERHUB_FRONTEND_REPO }}:latest
-
- - name: Lint Code
- run: |
- eslint . --rule "@typescript-eslint/ban-ts-comment: off"
+ tags: ${{ secrets.DOCKERHUB_USERNAME }}/${{ secrets.DOCKERHUB_FRONTEND_REPO }}:latest
\ No newline at end of file
From 734f48b30ac2773a48a4c4364ede074ce9c35890 Mon Sep 17 00:00:00 2001
From: JubaAzul <118773284+JubaAzul@users.noreply.github.com>
Date: Thu, 16 Jan 2025 16:22:16 -0500
Subject: [PATCH 23/23] Ajout de configuration de jest.config.cjs
---
client/jest.config.cjs | 3 +++
1 file changed, 3 insertions(+)
diff --git a/client/jest.config.cjs b/client/jest.config.cjs
index 557c00d..6c635c8 100644
--- a/client/jest.config.cjs
+++ b/client/jest.config.cjs
@@ -13,7 +13,10 @@ module.exports = {
setupFiles: ['./jest.setup.cjs'],
moduleNameMapper: {
'\\.(css|less|scss|sass)$': 'identity-obj-proxy',
+ // Permet de mocker les constantes pour les tests avec un chemin absolue (ex: import { ENV_VARIABLES } from 'src/constants';). Voir les "paths" dans tsconfig.json.
'^src/constants$': '/src/__mocks__/constantsMock.tsx',
+ // Dû au fait que tous les imports de "src/" sont normalisés, Jest doit comprendre le chemin réel. TODO: Trouver une solution pour que Jest se fie à tsconfig.json.
+ '^src/(.*)$': '/src/$1',
},
transformIgnorePatterns: ['node_modules/(?!nanoid/)'],
};