From 7e0018bfb44d8db3499e523ed2911c2c027eaae1 Mon Sep 17 00:00:00 2001 From: dionyichia Date: Thu, 20 Nov 2025 00:25:01 -0800 Subject: [PATCH 01/13] done with no styling, created buildprompt renderer and three types of option fields --- actions/supabase/queries/prompt.ts | 12 ++ app/templates/test_build_prompt/page.tsx | 46 ++++++ components/prompts/BuildPromptRenderer.tsx | 148 ++++++++++++++++++++ components/prompts/CheckboxPrompt.tsx | 50 +++++++ components/prompts/MultipleChoicePrompt.tsx | 51 +++++++ components/prompts/PromptRenderer.tsx | 54 +++++++ components/prompts/TextPrompt.tsx | 18 +++ components/prompts/styles.ts | 20 +++ types/schema.d.ts | 10 ++ 9 files changed, 409 insertions(+) create mode 100644 actions/supabase/queries/prompt.ts create mode 100644 app/templates/test_build_prompt/page.tsx create mode 100644 components/prompts/BuildPromptRenderer.tsx create mode 100644 components/prompts/CheckboxPrompt.tsx create mode 100644 components/prompts/MultipleChoicePrompt.tsx create mode 100644 components/prompts/PromptRenderer.tsx create mode 100644 components/prompts/TextPrompt.tsx create mode 100644 components/prompts/styles.ts diff --git a/actions/supabase/queries/prompt.ts b/actions/supabase/queries/prompt.ts new file mode 100644 index 00000000..a88a3e2e --- /dev/null +++ b/actions/supabase/queries/prompt.ts @@ -0,0 +1,12 @@ +import { UUID } from "crypto"; +import supabase from "../client"; + +export async function getOptionsForPrompt(prompt_id: UUID) { + const { data, error } = await supabase.from("prompt_option").select("*").eq('prompt_id', prompt_id); + + if (error) { + throw new Error(`Error fetching data: ${error.message}`); + } + + return data; +} diff --git a/app/templates/test_build_prompt/page.tsx b/app/templates/test_build_prompt/page.tsx new file mode 100644 index 00000000..c3f41b3a --- /dev/null +++ b/app/templates/test_build_prompt/page.tsx @@ -0,0 +1,46 @@ +"use client"; + +import { useState } from "react"; +import PromptRenderer from "@/components/prompts/BuildPromptRenderer"; +import { UUID } from "crypto"; + +// Fake UUID for testing +const fakePromptId = "11111111-1111-1111-1111-111111111111" as UUID; + +export default function TestPage() { + const [draftData, setDraftData] = useState(null); + + function handleUpdate(prompt_id: UUID, data: any) { + console.log("🔥 Prompt Updated:", { prompt_id, ...data }); + setDraftData(data); + } + + return ( +
+ {/* Left side: the interactive prompt builder */} +
+

Prompt Builder Test Page

+ + +
+ + {/* Right side: live JSON preview */} +
+

Live Data

+
+                    {JSON.stringify(draftData, null, 2)}
+                
+
+
+ ); +} diff --git a/components/prompts/BuildPromptRenderer.tsx b/components/prompts/BuildPromptRenderer.tsx new file mode 100644 index 00000000..362090be --- /dev/null +++ b/components/prompts/BuildPromptRenderer.tsx @@ -0,0 +1,148 @@ +'use client' + +import { UUID } from "crypto"; +import { useState, useEffect } from "react"; +import { PromptRendererStyled, QuestionHeader } from "./styles"; +import { PromptType, PromptOption } from "@/types/schema"; +import { getOptionsForPrompt } from "@/actions/supabase/queries/prompt"; +import TextPrompt from "./TextPrompt"; +import MultipleChoicePrompt from "./MultipleChoicePrompt"; +import CheckboxPrompt from "./CheckboxPrompt"; + +// Options staged in state, only converted to PromptOptions on submit +export type StagedOption = { + option_number: number; + option_text: string; + is_correct?: boolean; // used for MCQ/Checkbox +} + +type PromptRendererProps = { + prompt_id: UUID; + onUpdate: (prompt_id: UUID, data: { + question: string; + promptType: PromptType; + options: StagedOption[]; + }) => void; +}; + +export interface OptionsProps { + options: StagedOption[]; + updateOptionText: (option_number: number, text: string) => void; + addNewOption?: (newText: string) => void; + deleteOption?: (option_number: number) => void; + toggleCorrect?: (option_number: number) => void; +} + +export default function PromptRenderer ({ + prompt_id, + onUpdate, + }: PromptRendererProps ) { + const [promptType, setPromptType] = useState('text'); + const [options, setOptions] = useState([]); + const [question, setQuestion] = useState('Untitled Question'); + + // Notify parent whenever prompt state changes + useEffect(() => { + onUpdate(prompt_id, { question, promptType, options }); + }, [question, promptType, options]); + + function handleChangePromptType(newType: PromptType) { + // clear all options + setOptions([]) + + // set new prompt type + setPromptType(newType); + } + + function addNewOption(newText: string) { + setOptions(prev => [ + ...prev, + { + option_number: prev.length + 1, + option_text: newText, + is_correct: false, + } + ]); + } + + function deleteOption(option_number: number) { + setOptions(prev => + prev + .filter(o => o.option_number !== option_number) + .map((o, i) => ({ ...o, option_number: i + 1 })) // reindex + ); + } + + function updateOptionText(option_number: number, text: string) { + setOptions(prev => + prev.map(o => + o.option_number === option_number + ? { ...o, option_text: text } + : o + ) + ); + } + + function toggleCorrect(option_number: number) { + if (promptType === "multiple_choice") { + // only one correct + setOptions(prev => + prev.map(o => ({ + ...o, + is_correct: o.option_number === option_number + })) + ); + } else { + // checkbox: many correct + setOptions(prev => + prev.map(o => + o.option_number === option_number + ? { ...o, is_correct: !o.is_correct } + : o + ) + ); + } + } + + const optionsField = + promptType === "text" ? ( + + ) : promptType === "multiple_choice" ? ( + + ) : ( + + ); + + return ( + + setQuestion(e.target.value)} + /> + + + + {optionsField} + + ); +} \ No newline at end of file diff --git a/components/prompts/CheckboxPrompt.tsx b/components/prompts/CheckboxPrompt.tsx new file mode 100644 index 00000000..75662df6 --- /dev/null +++ b/components/prompts/CheckboxPrompt.tsx @@ -0,0 +1,50 @@ +import { OptionsProps } from "./BuildPromptRenderer"; +import { CheckboxPromptStyled } from "./styles"; +import { UUID } from "crypto"; + +export default function CheckboxPrompt ({ + options, + addNewOption, + deleteOption, + toggleCorrect, + updateOptionText, +}: OptionsProps) { + + function handleAddNewOption() { + addNewOption?.("New option"); + } + + return ( + + + + {options.map(opt => ( +
+ toggleCorrect?.(opt.option_number)} + /> + + updateOptionText?.(opt.option_number, e.target.value)} + /> + + +
+ ))} +
+ ); +} diff --git a/components/prompts/MultipleChoicePrompt.tsx b/components/prompts/MultipleChoicePrompt.tsx new file mode 100644 index 00000000..9153cb39 --- /dev/null +++ b/components/prompts/MultipleChoicePrompt.tsx @@ -0,0 +1,51 @@ +import { OptionsProps } from "./BuildPromptRenderer"; +import { MultipleChoicePromptStyled } from "./styles"; + +export default function MultipleChoicePrompt ({ + options, + addNewOption, + deleteOption, + toggleCorrect, + updateOptionText, +}: OptionsProps) { + + function handleAddNewOption() { + addNewOption?.(""); // new empty option + } + + return ( + + + + {options.map(opt => ( +
+ + {/* Correct answer selector (radio) */} + toggleCorrect?.(opt.option_number)} + /> + + {/* Option text */} + updateOptionText?.(opt.option_number, e.target.value)} + /> + + {/* Delete option */} + +
+ ))} +
+ ); +} \ No newline at end of file diff --git a/components/prompts/PromptRenderer.tsx b/components/prompts/PromptRenderer.tsx new file mode 100644 index 00000000..e44f5506 --- /dev/null +++ b/components/prompts/PromptRenderer.tsx @@ -0,0 +1,54 @@ +'use client' + +import { UUID } from "crypto"; +import { useState, useEffect } from "react"; +import { PromptRendererStyled, QuestionHeader } from "./styles"; +import { PromptType, PromptOption } from "@/types/schema"; +import { getOptionsForPrompt } from "@/actions/supabase/queries/prompt"; +import TextPrompt from "./TextPrompt"; +import MultipleChoicePrompt from "./MultipleChoicePrompt"; +import CheckboxPrompt from "./CheckboxPrompt"; + +type PromptRendererProps = { + prompt_id: UUID; + prompt_type: PromptType; + question: string; +} + +export interface OptionsProps { + options: PromptOption[] +} + +export default function PromptRenderer ({ + prompt_id, + prompt_type, + question + }: PromptRendererProps ) { + const [options, setOptions] = useState([]); + + // pull prompt options + async function loadPromptOptions() { + const pulled_options = await getOptionsForPrompt(prompt_id); + setOptions(pulled_options ?? []); + } + + useEffect(() => { + loadPromptOptions(); + }, [prompt_id]); + + const optionsField = + prompt_type === "text" ? ( + + ) : prompt_type === "multiple_choice" ? ( + + ) : ( + + ); + + return ( + + {question} + {optionsField} + + ); +} \ No newline at end of file diff --git a/components/prompts/TextPrompt.tsx b/components/prompts/TextPrompt.tsx new file mode 100644 index 00000000..615972b4 --- /dev/null +++ b/components/prompts/TextPrompt.tsx @@ -0,0 +1,18 @@ +import { OptionsProps } from "./BuildPromptRenderer"; +import { TextPromptStyled } from "./styles"; + +export default function TextPrompt({ + options, + updateOptionText +}: OptionsProps) { + + const value = options[0]?.option_text ?? ""; + + return ( + updateOptionText?.(0, e.target.value)} + /> + ); +} diff --git a/components/prompts/styles.ts b/components/prompts/styles.ts new file mode 100644 index 00000000..74ea17a9 --- /dev/null +++ b/components/prompts/styles.ts @@ -0,0 +1,20 @@ +import styled from "styled-components"; + +export const PromptRendererStyled = styled.div` + +`; + +export const QuestionHeader = styled.input` + +`; + +export const TextPromptStyled = styled.textarea` + +`; +export const MultipleChoicePromptStyled = styled.div` + +`; + +export const CheckboxPromptStyled = styled.div` + +`; \ No newline at end of file diff --git a/types/schema.d.ts b/types/schema.d.ts index fa435ad0..08cf8ef2 100644 --- a/types/schema.d.ts +++ b/types/schema.d.ts @@ -9,6 +9,9 @@ export type UserType = "Admin" | "Facilitator" | "Participant"; // ENUM for status export type StatusType = "Pending" | "Accepted" | "Cancelled"; +// ENUM for prompt_type +export type PromptType = "text" | "multiple_choice" | "checkbox"; + /* SCHEMA */ //org_id --> user_group_id export interface UserGroup { @@ -88,12 +91,14 @@ export interface Prompt { phase_id: UUID; role_phase_id: UUID; prompt_text: string; + prompt_type: PromptType; } export interface PromptAnswer { prompt_response_id: UUID; // prompt_answer_id user_id: UUID; prompt_id: UUID; + prompt_option_id: UUID; prompt_answer: string; } export interface Tag { @@ -114,3 +119,8 @@ export interface Invite { user_type: string; status: string; } +export interface PromptOption { + option_id: UUID; + prompt_id: UUID; + option_text: string; +} \ No newline at end of file From da019c2d01c122adec10b84d102bb37faf93ca90 Mon Sep 17 00:00:00 2001 From: dionyichia Date: Fri, 21 Nov 2025 10:17:43 -0800 Subject: [PATCH 02/13] staged prompts in page state, changes updates state, only on clicking submit button, updates db and clears state --- actions/supabase/queries/prompt.ts | 46 +++++++++ app/templates/test_build_prompt/page.tsx | 107 +++++++++++++++++--- components/prompts/BuildPromptRenderer.tsx | 34 +------ components/prompts/CheckboxPrompt.tsx | 5 +- components/prompts/MultipleChoicePrompt.tsx | 5 +- types/schema.d.ts | 11 +- 6 files changed, 149 insertions(+), 59 deletions(-) diff --git a/actions/supabase/queries/prompt.ts b/actions/supabase/queries/prompt.ts index a88a3e2e..dc95905e 100644 --- a/actions/supabase/queries/prompt.ts +++ b/actions/supabase/queries/prompt.ts @@ -1,5 +1,6 @@ import { UUID } from "crypto"; import supabase from "../client"; +import { PromptType } from "@/types/schema"; export async function getOptionsForPrompt(prompt_id: UUID) { const { data, error } = await supabase.from("prompt_option").select("*").eq('prompt_id', prompt_id); @@ -10,3 +11,48 @@ export async function getOptionsForPrompt(prompt_id: UUID) { return data; } + +export async function addNewPrompt( + prompt_text: string, + prompt_type: PromptType +): Promise { + + const { data, error } = await supabase + .from("prompt") + .insert([ + { + prompt_text, + prompt_type, + } + ]) + .select("prompt_id") + .single(); // returns { prompt_id: ... } + + if (error) { + throw new Error(`Error inserting prompt: ${error.message}`); + } + + return data.prompt_id as UUID; +} + +export async function addNewOption( + prompt_id: UUID, + option_text: string, +): Promise { + const { data, error } = await supabase + .from("prompt_option") + .insert([ + { + prompt_id, + option_text, + } + ]) + .select("option_id") + .single(); // returns { option_id: ... } + + if (error) { + throw new Error(`Error inserting prompt: ${error.message}`); + } + + return data.option_id as UUID; +} \ No newline at end of file diff --git a/app/templates/test_build_prompt/page.tsx b/app/templates/test_build_prompt/page.tsx index c3f41b3a..97abdbbc 100644 --- a/app/templates/test_build_prompt/page.tsx +++ b/app/templates/test_build_prompt/page.tsx @@ -1,33 +1,110 @@ "use client"; import { useState } from "react"; -import PromptRenderer from "@/components/prompts/BuildPromptRenderer"; +import PromptRenderer, { StagedOption } from "@/components/prompts/BuildPromptRenderer"; import { UUID } from "crypto"; +import { PromptType } from "@/types/schema"; +import { addNewPrompt, addNewOption } from "@/actions/supabase/queries/prompt"; -// Fake UUID for testing -const fakePromptId = "11111111-1111-1111-1111-111111111111" as UUID; +type Data = { + question: string; + prompt_type: PromptType; + options: StagedOption[]; +} + +export type StagedPrompt = { + prompt_number: number; + data: Data; +} export default function TestPage() { - const [draftData, setDraftData] = useState(null); + const [prompts, setPrompts] = useState([]) + + function handleUpdate(prompt_number: number, data: any) { + console.log("🔥 Prompt Updated:", { prompt_number, ...data }); + setPrompts(prev => + prev.map(p => + p.prompt_number === prompt_number + ? { ...p, data } + : p + ) + ); + } + + function addEmptyPrompt() { + const nextNum = prompts.length + 1; + setPrompts(prev => [ + ...prev, + { + prompt_number: nextNum, + data: { + question: "", + prompt_type: "text" as PromptType, + options: [] + } + } + ]); + } + + async function handleSubmit() { + try { + for (const prompt of prompts) { + const { question, prompt_type, options } = prompt.data; - function handleUpdate(prompt_id: UUID, data: any) { - console.log("🔥 Prompt Updated:", { prompt_id, ...data }); - setDraftData(data); + // Insert prompt => get prompt_id (UUID) + const prompt_id: UUID = await addNewPrompt( + question, + prompt_type + ); + + // Insert each option + for (const opt of options) { + await addNewOption(prompt_id, opt.option_text); + } + } + + alert("All prompts saved!"); + + // Clear data + setPrompts([]) + + } catch (err: any) { + console.error(err); + alert("Error submitting prompts: " + err.message); + } } return (
- {/* Left side: the interactive prompt builder */} + + {/* LEFT SIDE */}

Prompt Builder Test Page

- + + +
+ {prompts.map((p) => ( +
+ +
+ ))} +
+ +
- {/* Right side: live JSON preview */} + {/* RIGHT SIDE */}

Live Data

-                    {JSON.stringify(draftData, null, 2)}
+                    {JSON.stringify(prompts, null, 2)}
                 
); -} +} \ No newline at end of file diff --git a/components/prompts/BuildPromptRenderer.tsx b/components/prompts/BuildPromptRenderer.tsx index 362090be..abb3db8c 100644 --- a/components/prompts/BuildPromptRenderer.tsx +++ b/components/prompts/BuildPromptRenderer.tsx @@ -1,10 +1,7 @@ 'use client' - -import { UUID } from "crypto"; import { useState, useEffect } from "react"; import { PromptRendererStyled, QuestionHeader } from "./styles"; import { PromptType, PromptOption } from "@/types/schema"; -import { getOptionsForPrompt } from "@/actions/supabase/queries/prompt"; import TextPrompt from "./TextPrompt"; import MultipleChoicePrompt from "./MultipleChoicePrompt"; import CheckboxPrompt from "./CheckboxPrompt"; @@ -13,24 +10,21 @@ import CheckboxPrompt from "./CheckboxPrompt"; export type StagedOption = { option_number: number; option_text: string; - is_correct?: boolean; // used for MCQ/Checkbox } type PromptRendererProps = { - prompt_id: UUID; - onUpdate: (prompt_id: UUID, data: { + prompt_id: number; + onUpdate: (prompt_id: number, data: { question: string; promptType: PromptType; options: StagedOption[]; }) => void; }; - export interface OptionsProps { options: StagedOption[]; updateOptionText: (option_number: number, text: string) => void; addNewOption?: (newText: string) => void; deleteOption?: (option_number: number) => void; - toggleCorrect?: (option_number: number) => void; } export default function PromptRenderer ({ @@ -60,7 +54,6 @@ export default function PromptRenderer ({ { option_number: prev.length + 1, option_text: newText, - is_correct: false, } ]); } @@ -83,27 +76,6 @@ export default function PromptRenderer ({ ); } - function toggleCorrect(option_number: number) { - if (promptType === "multiple_choice") { - // only one correct - setOptions(prev => - prev.map(o => ({ - ...o, - is_correct: o.option_number === option_number - })) - ); - } else { - // checkbox: many correct - setOptions(prev => - prev.map(o => - o.option_number === option_number - ? { ...o, is_correct: !o.is_correct } - : o - ) - ); - } - } - const optionsField = promptType === "text" ? ( ) : ( ); diff --git a/components/prompts/CheckboxPrompt.tsx b/components/prompts/CheckboxPrompt.tsx index 75662df6..c09d78d7 100644 --- a/components/prompts/CheckboxPrompt.tsx +++ b/components/prompts/CheckboxPrompt.tsx @@ -6,7 +6,6 @@ export default function CheckboxPrompt ({ options, addNewOption, deleteOption, - toggleCorrect, updateOptionText, }: OptionsProps) { @@ -27,8 +26,8 @@ export default function CheckboxPrompt ({ > toggleCorrect?.(opt.option_number)} + // checked={opt.is_correct} + // onChange={() => toggleCorrect?.(opt.option_number)} /> toggleCorrect?.(opt.option_number)} + // checked={opt.is_correct === true} + // onChange={() => toggleCorrect?.(opt.option_number)} /> {/* Option text */} diff --git a/types/schema.d.ts b/types/schema.d.ts index 08cf8ef2..efbea5f9 100644 --- a/types/schema.d.ts +++ b/types/schema.d.ts @@ -93,7 +93,11 @@ export interface Prompt { prompt_text: string; prompt_type: PromptType; } - +export interface PromptOption { + option_id: UUID; + prompt_id: UUID; + option_text: string; +} export interface PromptAnswer { prompt_response_id: UUID; // prompt_answer_id user_id: UUID; @@ -118,9 +122,4 @@ export interface Invite { email: string; user_type: string; status: string; -} -export interface PromptOption { - option_id: UUID; - prompt_id: UUID; - option_text: string; } \ No newline at end of file From 4c176d3ec0b7babe9e27c6913996cb46ae8b0637 Mon Sep 17 00:00:00 2001 From: dionyichia Date: Sun, 23 Nov 2025 15:36:47 -0800 Subject: [PATCH 03/13] completed functionality for build prompt components for admins --- actions/supabase/queries/prompt.ts | 16 +- app/templates/test_build_prompt/page.tsx | 205 ++++++++++---------- components/prompts/BuildPromptRenderer.tsx | 203 ++++++++++--------- components/prompts/CheckboxPrompt.tsx | 78 ++++---- components/prompts/MultipleChoicePrompt.tsx | 82 ++++---- components/prompts/PromptRenderer.tsx | 93 ++++----- components/prompts/TextPrompt.tsx | 25 ++- components/prompts/styles.ts | 19 +- package.json | 1 + pnpm-lock.yaml | 180 +++++++++++++++++ types/schema.d.ts | 4 +- 11 files changed, 540 insertions(+), 366 deletions(-) diff --git a/actions/supabase/queries/prompt.ts b/actions/supabase/queries/prompt.ts index dc95905e..10c15da0 100644 --- a/actions/supabase/queries/prompt.ts +++ b/actions/supabase/queries/prompt.ts @@ -1,9 +1,12 @@ import { UUID } from "crypto"; -import supabase from "../client"; import { PromptType } from "@/types/schema"; +import supabase from "../client"; export async function getOptionsForPrompt(prompt_id: UUID) { - const { data, error } = await supabase.from("prompt_option").select("*").eq('prompt_id', prompt_id); + const { data, error } = await supabase + .from("prompt_option") + .select("*") + .eq("prompt_id", prompt_id); if (error) { throw new Error(`Error fetching data: ${error.message}`); @@ -14,16 +17,15 @@ export async function getOptionsForPrompt(prompt_id: UUID) { export async function addNewPrompt( prompt_text: string, - prompt_type: PromptType + prompt_type: PromptType, ): Promise { - const { data, error } = await supabase .from("prompt") .insert([ { prompt_text, prompt_type, - } + }, ]) .select("prompt_id") .single(); // returns { prompt_id: ... } @@ -45,7 +47,7 @@ export async function addNewOption( { prompt_id, option_text, - } + }, ]) .select("option_id") .single(); // returns { option_id: ... } @@ -55,4 +57,4 @@ export async function addNewOption( } return data.option_id as UUID; -} \ No newline at end of file +} diff --git a/app/templates/test_build_prompt/page.tsx b/app/templates/test_build_prompt/page.tsx index 97abdbbc..556e0689 100644 --- a/app/templates/test_build_prompt/page.tsx +++ b/app/templates/test_build_prompt/page.tsx @@ -1,123 +1,116 @@ "use client"; import { useState } from "react"; -import PromptRenderer, { StagedOption } from "@/components/prompts/BuildPromptRenderer"; import { UUID } from "crypto"; +import { addNewOption, addNewPrompt } from "@/actions/supabase/queries/prompt"; +import PromptRenderer, { + StagedOption, +} from "@/components/prompts/BuildPromptRenderer"; import { PromptType } from "@/types/schema"; -import { addNewPrompt, addNewOption } from "@/actions/supabase/queries/prompt"; type Data = { - question: string; - prompt_type: PromptType; - options: StagedOption[]; -} + question: string; + prompt_type: PromptType; + options: StagedOption[]; +}; export type StagedPrompt = { - prompt_number: number; - data: Data; -} + prompt_number: number; + data: Data; +}; export default function TestPage() { - const [prompts, setPrompts] = useState([]) - - function handleUpdate(prompt_number: number, data: any) { - console.log("🔥 Prompt Updated:", { prompt_number, ...data }); - setPrompts(prev => - prev.map(p => - p.prompt_number === prompt_number - ? { ...p, data } - : p - ) - ); - } - - function addEmptyPrompt() { - const nextNum = prompts.length + 1; - setPrompts(prev => [ - ...prev, - { - prompt_number: nextNum, - data: { - question: "", - prompt_type: "text" as PromptType, - options: [] - } - } - ]); - } - - async function handleSubmit() { - try { - for (const prompt of prompts) { - const { question, prompt_type, options } = prompt.data; - - // Insert prompt => get prompt_id (UUID) - const prompt_id: UUID = await addNewPrompt( - question, - prompt_type - ); - - // Insert each option - for (const opt of options) { - await addNewOption(prompt_id, opt.option_text); - } - } - - alert("All prompts saved!"); + const [prompts, setPrompts] = useState([]); - // Clear data - setPrompts([]) - - } catch (err: any) { - console.error(err); - alert("Error submitting prompts: " + err.message); + function handleUpdate(prompt_number: number, data: Data) { + console.log("Prompt Updated:", { prompt_number, ...data }); + setPrompts(prev => + prev.map(p => (p.prompt_number === prompt_number ? { ...p, data } : p)), + ); + } + + function addEmptyPrompt() { + const nextNum = prompts.length + 1; + setPrompts(prev => [ + ...prev, + { + prompt_number: nextNum, + data: { + question: "", + prompt_type: "text" as PromptType, + options: [], + }, + }, + ]); + } + + async function handleSubmit() { + try { + for (const prompt of prompts) { + const { question, prompt_type, options } = prompt.data; + + // Insert prompt => get prompt_id (UUID) + const prompt_id: UUID = await addNewPrompt(question, prompt_type); + + // Insert each option + for (const opt of options) { + await addNewOption(prompt_id, opt.option_text); } - } + } - return ( -
- - {/* LEFT SIDE */} -
-

Prompt Builder Test Page

- - - -
- {prompts.map((p) => ( -
- -
- ))} -
- - -
+ alert("All prompts saved!"); - {/* RIGHT SIDE */} -
-

Live Data

-
-                    {JSON.stringify(prompts, null, 2)}
-                
+ // Clear data + setPrompts([]); + } catch (err) { + console.error(err); + alert("Error submitting prompts: "); + } + } + + return ( +
+ {/* LEFT SIDE */} +
+

Prompt Builder Test Page

+ + + +
+ {prompts.map(p => ( +
+
+ ))}
- ); -} \ No newline at end of file + + +
+ + {/* RIGHT SIDE */} +
+

Live Data

+
+          {JSON.stringify(prompts, null, 2)}
+        
+
+
+ ); +} diff --git a/components/prompts/BuildPromptRenderer.tsx b/components/prompts/BuildPromptRenderer.tsx index abb3db8c..5fb67e3f 100644 --- a/components/prompts/BuildPromptRenderer.tsx +++ b/components/prompts/BuildPromptRenderer.tsx @@ -1,118 +1,129 @@ -'use client' -import { useState, useEffect } from "react"; +"use client"; + +import { useEffect, useState } from "react"; +import { PromptType } from "@/types/schema"; +import CheckboxPrompt from "./CheckboxPrompt"; +import MultipleChoicePrompt from "./MultipleChoicePrompt"; import { PromptRendererStyled, QuestionHeader } from "./styles"; -import { PromptType, PromptOption } from "@/types/schema"; import TextPrompt from "./TextPrompt"; -import MultipleChoicePrompt from "./MultipleChoicePrompt"; -import CheckboxPrompt from "./CheckboxPrompt"; // Options staged in state, only converted to PromptOptions on submit export type StagedOption = { - option_number: number; - option_text: string; -} + option_number: number; + option_text: string; +}; type PromptRendererProps = { - prompt_id: number; - onUpdate: (prompt_id: number, data: { - question: string; - promptType: PromptType; - options: StagedOption[]; - }) => void; + prompt_id: number; + onUpdate: ( + prompt_id: number, + data: { + question: string; + prompt_type: PromptType; + options: StagedOption[]; + }, + ) => void; }; export interface OptionsProps { - options: StagedOption[]; - updateOptionText: (option_number: number, text: string) => void; - addNewOption?: (newText: string) => void; - deleteOption?: (option_number: number) => void; + options: StagedOption[]; + updateOptionText: (option_number: number, text: string) => void; + addNewOption?: (newText: string) => void; + deleteOption?: (option_number: number) => void; } -export default function PromptRenderer ({ - prompt_id, - onUpdate, - }: PromptRendererProps ) { - const [promptType, setPromptType] = useState('text'); - const [options, setOptions] = useState([]); - const [question, setQuestion] = useState('Untitled Question'); - - // Notify parent whenever prompt state changes - useEffect(() => { - onUpdate(prompt_id, { question, promptType, options }); - }, [question, promptType, options]); - - function handleChangePromptType(newType: PromptType) { - // clear all options - setOptions([]) - - // set new prompt type - setPromptType(newType); +export default function PromptRenderer({ + prompt_id, + onUpdate, +}: PromptRendererProps) { + const [prompt_type, setPromptType] = useState("text"); + const [options, setOptions] = useState([]); + const [question, setQuestion] = useState("Untitled Question"); + + // Notify parent whenever prompt state changes + useEffect(() => { + onUpdate(prompt_id, { question, prompt_type, options }); + }, [question, prompt_type, options]); + + useEffect(() => { + if (prompt_type === "text" && options.length === 0) { + addNewOption(""); } + }, [prompt_type]); + + function handleChangePromptType(newType: PromptType) { + // clear all options + setOptions([]); + + // set new prompt type + setPromptType(newType); + } - function addNewOption(newText: string) { + function addNewOption(newText: string) { setOptions(prev => [ - ...prev, - { + ...prev, + { option_number: prev.length + 1, option_text: newText, - } + }, ]); - } + } - function deleteOption(option_number: number) { - setOptions(prev => + function deleteOption(option_number: number) { + setOptions( + prev => prev - .filter(o => o.option_number !== option_number) - .map((o, i) => ({ ...o, option_number: i + 1 })) // reindex - ); - } + .filter(o => o.option_number !== option_number) + .map((o, i) => ({ ...o, option_number: i + 1 })), // reindex + ); + } - function updateOptionText(option_number: number, text: string) { - setOptions(prev => - prev.map(o => - o.option_number === option_number - ? { ...o, option_text: text } - : o - ) - ); - } + function updateOptionText(option_number: number, text: string) { + console.log(options.length); + + setOptions(prev => + prev.map(o => + o.option_number === option_number ? { ...o, option_text: text } : o, + ), + ); + } - const optionsField = - promptType === "text" ? ( - - ) : promptType === "multiple_choice" ? ( - - ) : ( - - ); - - return ( - - setQuestion(e.target.value)} - /> - - - - {optionsField} - + const optionsField = + prompt_type === "text" ? ( + + ) : prompt_type === "multiple_choice" ? ( + + ) : ( + ); -} \ No newline at end of file + + return ( + + setQuestion(e.target.value)} + /> + + + + {optionsField} + + ); +} diff --git a/components/prompts/CheckboxPrompt.tsx b/components/prompts/CheckboxPrompt.tsx index c09d78d7..7ddecadd 100644 --- a/components/prompts/CheckboxPrompt.tsx +++ b/components/prompts/CheckboxPrompt.tsx @@ -1,49 +1,47 @@ import { OptionsProps } from "./BuildPromptRenderer"; import { CheckboxPromptStyled } from "./styles"; -import { UUID } from "crypto"; -export default function CheckboxPrompt ({ - options, - addNewOption, - deleteOption, - updateOptionText, +export default function CheckboxPrompt({ + options, + addNewOption, + deleteOption, + updateOptionText, }: OptionsProps) { + function handleAddNewOption() { + addNewOption?.("New option"); + } - function handleAddNewOption() { - addNewOption?.("New option"); - } + return ( + + - return ( - - + {options.map(opt => ( +
+ toggleCorrect?.(opt.option_number)} + /> - {options.map(opt => ( -
- toggleCorrect?.(opt.option_number)} - /> + + updateOptionText?.(opt.option_number, e.target.value) + } + /> - updateOptionText?.(opt.option_number, e.target.value)} - /> - - -
- ))} - - ); + +
+ ))} +
+ ); } diff --git a/components/prompts/MultipleChoicePrompt.tsx b/components/prompts/MultipleChoicePrompt.tsx index a5b55227..e6ff8b2e 100644 --- a/components/prompts/MultipleChoicePrompt.tsx +++ b/components/prompts/MultipleChoicePrompt.tsx @@ -1,50 +1,48 @@ import { OptionsProps } from "./BuildPromptRenderer"; import { MultipleChoicePromptStyled } from "./styles"; -export default function MultipleChoicePrompt ({ - options, - addNewOption, - deleteOption, - updateOptionText, +export default function MultipleChoicePrompt({ + options, + addNewOption, + deleteOption, + updateOptionText, }: OptionsProps) { + function handleAddNewOption() { + addNewOption?.(""); // new empty option + } - function handleAddNewOption() { - addNewOption?.(""); // new empty option - } + return ( + + - return ( - - + {options.map(opt => ( +
+ {/* Correct answer selector (radio) */} + toggleCorrect?.(opt.option_number)} + /> - {options.map(opt => ( -
+ {/* Option text */} + + updateOptionText?.(opt.option_number, e.target.value) + } + /> - {/* Correct answer selector (radio) */} - toggleCorrect?.(opt.option_number)} - /> - - {/* Option text */} - updateOptionText?.(opt.option_number, e.target.value)} - /> - - {/* Delete option */} - -
- ))} - - ); -} \ No newline at end of file + {/* Delete option */} + +
+ ))} +
+ ); +} diff --git a/components/prompts/PromptRenderer.tsx b/components/prompts/PromptRenderer.tsx index e44f5506..013e6bce 100644 --- a/components/prompts/PromptRenderer.tsx +++ b/components/prompts/PromptRenderer.tsx @@ -1,54 +1,57 @@ -'use client' +"use client"; +// Just leaving this here for future reference when we need to render prompts for participants. +import { useEffect, useState } from "react"; import { UUID } from "crypto"; -import { useState, useEffect } from "react"; -import { PromptRendererStyled, QuestionHeader } from "./styles"; -import { PromptType, PromptOption } from "@/types/schema"; import { getOptionsForPrompt } from "@/actions/supabase/queries/prompt"; -import TextPrompt from "./TextPrompt"; -import MultipleChoicePrompt from "./MultipleChoicePrompt"; -import CheckboxPrompt from "./CheckboxPrompt"; +import { PromptOption, PromptType } from "@/types/schema"; + +// import CheckboxPrompt from "./CheckboxPrompt"; +// import MultipleChoicePrompt from "./MultipleChoicePrompt"; +// import { PromptRendererStyled, QuestionHeader } from "./styles"; +// import TextPrompt from "./TextPrompt"; type PromptRendererProps = { - prompt_id: UUID; - prompt_type: PromptType; - question: string; -} + prompt_id: UUID; + prompt_type: PromptType; + question: string; +}; export interface OptionsProps { - options: PromptOption[] + options: PromptOption[]; } -export default function PromptRenderer ({ - prompt_id, - prompt_type, - question - }: PromptRendererProps ) { - const [options, setOptions] = useState([]); - - // pull prompt options - async function loadPromptOptions() { - const pulled_options = await getOptionsForPrompt(prompt_id); - setOptions(pulled_options ?? []); - } - - useEffect(() => { - loadPromptOptions(); - }, [prompt_id]); - - const optionsField = - prompt_type === "text" ? ( - - ) : prompt_type === "multiple_choice" ? ( - - ) : ( - - ); - - return ( - - {question} - {optionsField} - - ); -} \ No newline at end of file +export default function PromptRenderer({ + prompt_id, + prompt_type, + question, +}: PromptRendererProps) { + const [options, setOptions] = useState([]); + + // pull prompt options + async function loadPromptOptions() { + const pulled_options = await getOptionsForPrompt(prompt_id); + setOptions(pulled_options ?? []); + } + + useEffect(() => { + loadPromptOptions(); + }, [prompt_id]); + + // const optionsField = + // prompt_type === "text" ? ( + // + // ) : prompt_type === "multiple_choice" ? ( + // + // ) : ( + // + // ); + + return ( + // + // {question} + // {optionsField} + // + <> + ); +} diff --git a/components/prompts/TextPrompt.tsx b/components/prompts/TextPrompt.tsx index 615972b4..b26c12ce 100644 --- a/components/prompts/TextPrompt.tsx +++ b/components/prompts/TextPrompt.tsx @@ -1,18 +1,17 @@ +import TextareaAutosize from "@mui/material/TextareaAutosize"; import { OptionsProps } from "./BuildPromptRenderer"; -import { TextPromptStyled } from "./styles"; -export default function TextPrompt({ - options, - updateOptionText +export default function TextPrompt({ + options, + updateOptionText, }: OptionsProps) { + const value = options[0]?.option_text ?? ""; - const value = options[0]?.option_text ?? ""; - - return ( - updateOptionText?.(0, e.target.value)} - /> - ); + return ( + updateOptionText?.(1, e.target.value)} + /> + ); } diff --git a/components/prompts/styles.ts b/components/prompts/styles.ts index 74ea17a9..7d5c65cc 100644 --- a/components/prompts/styles.ts +++ b/components/prompts/styles.ts @@ -1,20 +1,9 @@ import styled from "styled-components"; -export const PromptRendererStyled = styled.div` +export const PromptRendererStyled = styled.div``; -`; +export const QuestionHeader = styled.input``; -export const QuestionHeader = styled.input` +export const MultipleChoicePromptStyled = styled.div``; -`; - -export const TextPromptStyled = styled.textarea` - -`; -export const MultipleChoicePromptStyled = styled.div` - -`; - -export const CheckboxPromptStyled = styled.div` - -`; \ No newline at end of file +export const CheckboxPromptStyled = styled.div``; diff --git a/package.json b/package.json index 13babd1b..647a2d40 100644 --- a/package.json +++ b/package.json @@ -15,6 +15,7 @@ "pre-commit": "concurrently \"pnpm run tsc\" \"pnpm run lint\" \"pnpm run prettier\"" }, "dependencies": { + "@mui/material": "^7.3.5", "@supabase/supabase-js": "^2.52.1", "dotenv": "^17.2.3", "lucide-react": "^0.553.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 07abfc76..74ac2aa2 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -11,6 +11,9 @@ importers: .: dependencies: + '@mui/material': + specifier: ^7.3.5 + version: 7.3.5(@emotion/react@11.14.0(@types/react@19.1.12)(react@19.1.1))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) '@supabase/supabase-js': specifier: ^2.52.1 version: 2.52.1 @@ -420,6 +423,86 @@ packages: '@jridgewell/trace-mapping@0.3.30': resolution: {integrity: sha512-GQ7Nw5G2lTu/BtHTKfXhKHok2WGetd4XYcVKGx00SjAk8GMwgJM3zr6zORiPGuOE+/vkc90KtTosSSvaCjKb2Q==} + '@mui/core-downloads-tracker@7.3.5': + resolution: {integrity: sha512-kOLwlcDPnVz2QMhiBv0OQ8le8hTCqKM9cRXlfVPL91l3RGeOsxrIhNRsUt3Xb8wb+pTVUolW+JXKym93vRKxCw==} + + '@mui/material@7.3.5': + resolution: {integrity: sha512-8VVxFmp1GIm9PpmnQoCoYo0UWHoOrdA57tDL62vkpzEgvb/d71Wsbv4FRg7r1Gyx7PuSo0tflH34cdl/NvfHNQ==} + engines: {node: '>=14.0.0'} + peerDependencies: + '@emotion/react': ^11.5.0 + '@emotion/styled': ^11.3.0 + '@mui/material-pigment-css': ^7.3.5 + '@types/react': ^17.0.0 || ^18.0.0 || ^19.0.0 + react: ^17.0.0 || ^18.0.0 || ^19.0.0 + react-dom: ^17.0.0 || ^18.0.0 || ^19.0.0 + peerDependenciesMeta: + '@emotion/react': + optional: true + '@emotion/styled': + optional: true + '@mui/material-pigment-css': + optional: true + '@types/react': + optional: true + + '@mui/private-theming@7.3.5': + resolution: {integrity: sha512-cTx584W2qrLonwhZLbEN7P5pAUu0nZblg8cLBlTrZQ4sIiw8Fbvg7GvuphQaSHxPxrCpa7FDwJKtXdbl2TSmrA==} + engines: {node: '>=14.0.0'} + peerDependencies: + '@types/react': ^17.0.0 || ^18.0.0 || ^19.0.0 + react: ^17.0.0 || ^18.0.0 || ^19.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + + '@mui/styled-engine@7.3.5': + resolution: {integrity: sha512-zbsZ0uYYPndFCCPp2+V3RLcAN6+fv4C8pdwRx6OS3BwDkRCN8WBehqks7hWyF3vj1kdQLIWrpdv/5Y0jHRxYXQ==} + engines: {node: '>=14.0.0'} + peerDependencies: + '@emotion/react': ^11.4.1 + '@emotion/styled': ^11.3.0 + react: ^17.0.0 || ^18.0.0 || ^19.0.0 + peerDependenciesMeta: + '@emotion/react': + optional: true + '@emotion/styled': + optional: true + + '@mui/system@7.3.5': + resolution: {integrity: sha512-yPaf5+gY3v80HNkJcPi6WT+r9ebeM4eJzrREXPxMt7pNTV/1eahyODO4fbH3Qvd8irNxDFYn5RQ3idHW55rA6g==} + engines: {node: '>=14.0.0'} + peerDependencies: + '@emotion/react': ^11.5.0 + '@emotion/styled': ^11.3.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': + optional: true + '@emotion/styled': + optional: true + '@types/react': + optional: true + + '@mui/types@7.4.8': + resolution: {integrity: sha512-ZNXLBjkPV6ftLCmmRCafak3XmSn8YV0tKE/ZOhzKys7TZXUiE0mZxlH8zKDo6j6TTUaDnuij68gIG+0Ucm7Xhw==} + peerDependencies: + '@types/react': ^17.0.0 || ^18.0.0 || ^19.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + + '@mui/utils@7.3.5': + resolution: {integrity: sha512-jisvFsEC3sgjUjcPnR4mYfhzjCDIudttSGSbe1o/IXFNu0kZuR+7vqQI0jg8qtcVZBHWrwTfvAZj9MNMumcq1g==} + engines: {node: '>=14.0.0'} + peerDependencies: + '@types/react': ^17.0.0 || ^18.0.0 || ^19.0.0 + react: ^17.0.0 || ^18.0.0 || ^19.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@next/env@15.5.2': resolution: {integrity: sha512-Qe06ew4zt12LeO6N7j8/nULSOe3fMXE4dM6xgpBQNvdzyK1sv5y4oAP3bq4LamrvGCZtmRYnW8URFCeX5nFgGg==} @@ -494,6 +577,9 @@ packages: resolution: {integrity: sha512-QNqXyfVS2wm9hweSYD2O7F0G06uurj9kZ96TRQE5Y9hU7+tgdZwIkbAKc5Ocy1HxEY2kuDQa6cQ1WRs/O5LFKA==} engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} + '@popperjs/core@2.11.8': + resolution: {integrity: sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==} + '@rtsao/scc@1.1.0': resolution: {integrity: sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==} @@ -548,6 +634,9 @@ packages: '@types/phoenix@1.6.6': resolution: {integrity: sha512-PIzZZlEppgrpoT2QgbnDU+MMzuR6BbCjllj0bM70lWoejMeNJAxCchxnv7J3XFkI8MpygtRpzXrIlmWUBclP5A==} + '@types/prop-types@15.7.15': + resolution: {integrity: sha512-F6bEyamV9jKGAFBEmlQnesRPGOQqS2+Uwi0Em15xenOxHaf2hv6L8YCVn3rPdPJOiJfPiCnLIRyvwVaqMY3MIw==} + '@types/react-dom@19.1.9': resolution: {integrity: sha512-qXRuZaOsAdXKFyOhRBg6Lqqc0yay13vN7KrIg4L7N4aaHN68ma9OK3NE1BoDFgFOTfM7zg+3/8+2n8rLUH3OKQ==} peerDependencies: @@ -777,6 +866,10 @@ packages: resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} engines: {node: '>=12'} + clsx@2.1.1: + resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==} + engines: {node: '>=6'} + color-convert@2.0.1: resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} engines: {node: '>=7.0.0'} @@ -1848,6 +1941,9 @@ packages: react-is@16.13.1: resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} + react-is@19.2.0: + resolution: {integrity: sha512-x3Ax3kNSMIIkyVYhWPyO09bu0uttcAIoecO/um/rKGQ4EltYWVYtyiGkS/3xMynrbVQdS69Jhlv8FXUEZehlzA==} + react-select@5.10.2: resolution: {integrity: sha512-Z33nHdEFWq9tfnfVXaiM12rbJmk+QjFEztWLtmXqQhz6Al4UZZ9xc0wiatmGtUOCCnHN0WizL3tCMYRENX4rVQ==} peerDependencies: @@ -2595,6 +2691,82 @@ snapshots: '@jridgewell/resolve-uri': 3.1.2 '@jridgewell/sourcemap-codec': 1.5.0 + '@mui/core-downloads-tracker@7.3.5': {} + + '@mui/material@7.3.5(@emotion/react@11.14.0(@types/react@19.1.12)(react@19.1.1))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': + dependencies: + '@babel/runtime': 7.28.4 + '@mui/core-downloads-tracker': 7.3.5 + '@mui/system': 7.3.5(@emotion/react@11.14.0(@types/react@19.1.12)(react@19.1.1))(@types/react@19.1.12)(react@19.1.1) + '@mui/types': 7.4.8(@types/react@19.1.12) + '@mui/utils': 7.3.5(@types/react@19.1.12)(react@19.1.1) + '@popperjs/core': 2.11.8 + '@types/react-transition-group': 4.4.12(@types/react@19.1.12) + clsx: 2.1.1 + csstype: 3.1.3 + prop-types: 15.8.1 + react: 19.1.1 + react-dom: 19.1.1(react@19.1.1) + react-is: 19.2.0 + react-transition-group: 4.4.5(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + optionalDependencies: + '@emotion/react': 11.14.0(@types/react@19.1.12)(react@19.1.1) + '@types/react': 19.1.12 + + '@mui/private-theming@7.3.5(@types/react@19.1.12)(react@19.1.1)': + dependencies: + '@babel/runtime': 7.28.4 + '@mui/utils': 7.3.5(@types/react@19.1.12)(react@19.1.1) + prop-types: 15.8.1 + react: 19.1.1 + optionalDependencies: + '@types/react': 19.1.12 + + '@mui/styled-engine@7.3.5(@emotion/react@11.14.0(@types/react@19.1.12)(react@19.1.1))(react@19.1.1)': + dependencies: + '@babel/runtime': 7.28.4 + '@emotion/cache': 11.14.0 + '@emotion/serialize': 1.3.3 + '@emotion/sheet': 1.4.0 + csstype: 3.1.3 + prop-types: 15.8.1 + react: 19.1.1 + optionalDependencies: + '@emotion/react': 11.14.0(@types/react@19.1.12)(react@19.1.1) + + '@mui/system@7.3.5(@emotion/react@11.14.0(@types/react@19.1.12)(react@19.1.1))(@types/react@19.1.12)(react@19.1.1)': + dependencies: + '@babel/runtime': 7.28.4 + '@mui/private-theming': 7.3.5(@types/react@19.1.12)(react@19.1.1) + '@mui/styled-engine': 7.3.5(@emotion/react@11.14.0(@types/react@19.1.12)(react@19.1.1))(react@19.1.1) + '@mui/types': 7.4.8(@types/react@19.1.12) + '@mui/utils': 7.3.5(@types/react@19.1.12)(react@19.1.1) + clsx: 2.1.1 + csstype: 3.1.3 + prop-types: 15.8.1 + react: 19.1.1 + optionalDependencies: + '@emotion/react': 11.14.0(@types/react@19.1.12)(react@19.1.1) + '@types/react': 19.1.12 + + '@mui/types@7.4.8(@types/react@19.1.12)': + dependencies: + '@babel/runtime': 7.28.4 + optionalDependencies: + '@types/react': 19.1.12 + + '@mui/utils@7.3.5(@types/react@19.1.12)(react@19.1.1)': + dependencies: + '@babel/runtime': 7.28.4 + '@mui/types': 7.4.8(@types/react@19.1.12) + '@types/prop-types': 15.7.15 + clsx: 2.1.1 + prop-types: 15.8.1 + react: 19.1.1 + react-is: 19.2.0 + optionalDependencies: + '@types/react': 19.1.12 + '@next/env@15.5.2': {} '@next/eslint-plugin-next@15.5.2': @@ -2641,6 +2813,8 @@ snapshots: '@pkgr/core@0.2.9': {} + '@popperjs/core@2.11.8': {} + '@rtsao/scc@1.1.0': {} '@rushstack/eslint-patch@1.10.4': {} @@ -2711,6 +2885,8 @@ snapshots: '@types/phoenix@1.6.6': {} + '@types/prop-types@15.7.15': {} + '@types/react-dom@19.1.9(@types/react@19.1.12)': dependencies: '@types/react': 19.1.12 @@ -3034,6 +3210,8 @@ snapshots: strip-ansi: 6.0.1 wrap-ansi: 7.0.0 + clsx@2.1.1: {} + color-convert@2.0.1: dependencies: color-name: 1.1.4 @@ -4292,6 +4470,8 @@ snapshots: react-is@16.13.1: {} + react-is@19.2.0: {} + react-select@5.10.2(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1): dependencies: '@babel/runtime': 7.28.4 diff --git a/types/schema.d.ts b/types/schema.d.ts index efbea5f9..d7860746 100644 --- a/types/schema.d.ts +++ b/types/schema.d.ts @@ -10,7 +10,7 @@ export type UserType = "Admin" | "Facilitator" | "Participant"; export type StatusType = "Pending" | "Accepted" | "Cancelled"; // ENUM for prompt_type -export type PromptType = "text" | "multiple_choice" | "checkbox"; +export type PromptType = "text" | "multiple_choice" | "checkbox"; /* SCHEMA */ //org_id --> user_group_id @@ -122,4 +122,4 @@ export interface Invite { email: string; user_type: string; status: string; -} \ No newline at end of file +} From 2791de32fe7878f43235c87091259cc06420cc9d Mon Sep 17 00:00:00 2001 From: dionyichia Date: Sat, 7 Mar 2026 15:01:12 -0800 Subject: [PATCH 04/13] done prompt builder styling sprint --- app/templates/test_build_prompt/page.tsx | 126 ++++++++--------- app/templates/test_build_prompt/styles.ts | 56 ++++---- components/prompts/BuildPromptRenderer.tsx | 75 +++++----- components/prompts/CheckboxPrompt.tsx | 51 +++++-- components/prompts/MultipleChoicePrompt.tsx | 92 ++++++------- components/prompts/TextPrompt.tsx | 1 - components/prompts/styles.ts | 144 ++++++++++---------- 7 files changed, 288 insertions(+), 257 deletions(-) diff --git a/app/templates/test_build_prompt/page.tsx b/app/templates/test_build_prompt/page.tsx index c442ac62..ef75b666 100644 --- a/app/templates/test_build_prompt/page.tsx +++ b/app/templates/test_build_prompt/page.tsx @@ -2,21 +2,20 @@ import { useState } from "react"; import { UUID } from "crypto"; +import { Button, TextField, Typography } from "@mui/material"; import { addNewOption, addNewPrompt } from "@/actions/supabase/queries/prompt"; +import { LayoutWrapper, SideNavContainer } from "@/app/facilitator/styles"; +import TemplateSideBar from "@/app/facilitator/template-list/components/TemplateSidebar"; +import TopNavBar from "@/components/NavBar/NavBar"; import PromptRenderer, { StagedOption, } from "@/components/prompts/BuildPromptRenderer"; import { PromptType } from "@/types/schema"; import { - Button, - Typography, - Paper, - TextField -} from "@mui/material"; -import { FacilitatorPromptBuilderStyled, TitleStyled, PhaseDescriptionFieldStyled } from "./styles"; -import TopNavBar from "@/components/NavBar/NavBar"; -import TemplateSideBar from "@/app/facilitator/template-list/components/TemplateSidebar"; -import { LayoutWrapper, SideNavContainer } from "@/app/facilitator/styles"; + FacilitatorPromptBuilderStyled, + PhaseDescriptionFieldStyled, + TitleStyled, +} from "./styles"; type Data = { question: string; @@ -31,7 +30,7 @@ export type StagedPrompt = { export default function TestPage() { const [prompts, setPrompts] = useState([]); - const [phaseNumber, setPhaseNumber] = useState(1); + const phaseNumber = 1; function handleUpdate(prompt_number: number, data: Data) { console.log("Prompt Updated:", { prompt_number, ...data }); @@ -80,58 +79,63 @@ export default function TestPage() { } return ( - <> - + <> + - ""} /> - - - - - {/* LEFT SIDE */} - - - - Phase {phaseNumber} - - - - ""} /> + + + + {/* LEFT SIDE */} + + + Phase {phaseNumber} + + + + + + + {prompts.map(p => ( + - - - - {prompts.map(p => ( - - ))} - -
- - - -
- - {/* RIGHT SIDE */} - {/* + ))} + +
+ + + +
+ + {/* RIGHT SIDE */} + {/* Live Data @@ -140,8 +144,8 @@ export default function TestPage() { */} -
-
+ + ); } diff --git a/app/templates/test_build_prompt/styles.ts b/app/templates/test_build_prompt/styles.ts index bdace19a..88887aff 100644 --- a/app/templates/test_build_prompt/styles.ts +++ b/app/templates/test_build_prompt/styles.ts @@ -1,40 +1,40 @@ import styled from "styled-components"; export const FacilitatorPromptBuilderStyled = styled.div` - display: flex; - width: 100%; - height: 100%; - padding: 48px 160px; - flex-direction: column; - gap: 40px; + display: flex; + width: 100%; + height: 100%; + padding: 48px 160px; + flex-direction: column; + gap: 40px; - color: var(--Black-100, #0F0F0F); - font-family: "Public Sans"; - font-style: normal; - line-height: normal; + color: var(--Black-100, #0f0f0f); + font-family: "Public Sans"; + font-style: normal; + line-height: normal; `; export const TitleStyled = styled.div` - display: flex; - flex-direction: column; - gap: 16px; - width: 100%; - font-family: "Public Sans"; - font-size: 24px; - font-style: normal; - font-weight: 700; - line-height: normal; + display: flex; + flex-direction: column; + gap: 16px; + width: 100%; + font-family: "Public Sans"; + font-size: 24px; + font-style: normal; + font-weight: 700; + line-height: normal; `; export const PhaseDescriptionFieldStyled = styled.div` - width: 100%; - font-family: "Public Sans"; - font-size: 12px; - font-style: italic; - font-weight: 500; - line-height: 150%; /* 18px */ + width: 100%; + font-family: "Public Sans"; + font-size: 12px; + font-style: italic; + font-weight: 500; + line-height: 150%; /* 18px */ - .MuiFormControl-root { - width: 100%; - } + .MuiFormControl-root { + width: 100%; + } `; diff --git a/components/prompts/BuildPromptRenderer.tsx b/components/prompts/BuildPromptRenderer.tsx index c3dacf30..52ed3eaa 100644 --- a/components/prompts/BuildPromptRenderer.tsx +++ b/components/prompts/BuildPromptRenderer.tsx @@ -1,11 +1,17 @@ "use client"; import { useEffect, useState } from "react"; +import { FormControl, MenuItem, Select } from "@mui/material"; import { PromptType } from "@/types/schema"; import CheckboxPrompt from "./CheckboxPrompt"; import MultipleChoicePrompt from "./MultipleChoicePrompt"; -import { PromptRendererStyled, QuestionHeaderStyled, PromptTypeDropdownStyled, TextFieldStyled, QuestionNumberStyled } from "./styles"; -import { FormControl, Select, MenuItem } from "@mui/material"; +import { + PromptRendererStyled, + PromptTypeDropdownStyled, + QuestionHeaderStyled, + QuestionNumberStyled, + TextFieldStyled, +} from "./styles"; // Options staged in state, only converted to PromptOptions on submit export type StagedOption = { @@ -42,13 +48,13 @@ export default function PromptRenderer({ // Notify parent whenever prompt state changes useEffect(() => { onUpdate(prompt_id, { question, prompt_type, options }); - }, [question, prompt_type, options]); + }, [question, prompt_type, options, onUpdate, prompt_id]); useEffect(() => { if (prompt_type === "text" && options.length === 0) { addNewOption(""); } - }, [prompt_type]); + }, [prompt_type, options.length]); function handleChangePromptType(newType: PromptType) { // clear all options @@ -107,38 +113,35 @@ export default function PromptRenderer({ ); return ( - - - - Question {prompt_id} - - - - setQuestion(e.target.value)} - /> - - - - - - - - {optionsField} - + + + Question {prompt_id} + + + setQuestion(e.target.value)} + /> + + + + + + + {optionsField} + ); } diff --git a/components/prompts/CheckboxPrompt.tsx b/components/prompts/CheckboxPrompt.tsx index c09c6cda..78a21677 100644 --- a/components/prompts/CheckboxPrompt.tsx +++ b/components/prompts/CheckboxPrompt.tsx @@ -1,6 +1,13 @@ -import { Button, Checkbox, TextField } from "@mui/material"; +import { Button, Checkbox } from "@mui/material"; import { OptionsProps } from "./BuildPromptRenderer"; -import { CheckboxPromptStyled, McqOptionStyled, TextFieldStyled, DeleteMcqOptionButton } from "./styles"; +import { + AddNewOptionStyled, + AddNewOptionTextStyled, + CheckboxPromptStyled, + DeleteMcqOptionButton, + McqOptionStyled, + TextFieldStyled, +} from "./styles"; export default function CheckboxPrompt({ options, @@ -19,14 +26,14 @@ export default function CheckboxPrompt({ - - updateOptionText?.(opt.option_number, e.target.value)} - /> - + + updateOptionText?.(opt.option_number, e.target.value) + } + /> +
); -} \ No newline at end of file +} diff --git a/components/prompts/MultipleChoicePrompt.tsx b/components/prompts/MultipleChoicePrompt.tsx index 28f3a76e..3fb49f29 100644 --- a/components/prompts/MultipleChoicePrompt.tsx +++ b/components/prompts/MultipleChoicePrompt.tsx @@ -1,12 +1,12 @@ -import { Button, RadioGroup, Radio, TextField } from "@mui/material"; +import { Button, Radio, RadioGroup } from "@mui/material"; import { OptionsProps } from "./BuildPromptRenderer"; -import { - MultipleChoicePromptStyled, - McqOptionStyled, - TextFieldStyled, - DeleteMcqOptionButton, +import { AddNewOptionStyled, - AddNewOptionTextStyled + AddNewOptionTextStyled, + DeleteMcqOptionButton, + McqOptionStyled, + MultipleChoicePromptStyled, + TextFieldStyled, } from "./styles"; export default function MultipleChoicePrompt({ @@ -21,58 +21,56 @@ export default function MultipleChoicePrompt({ return ( - - {options.map(opt => ( -
+
+ {/* Correct answer radio */} + - {/* Correct answer radio */} - - - {/* Editable option text */} - - updateOptionText?.( - opt.option_number, - e.target.value - ) - } - /> - - {/* Delete option */} - - - + {/* Editable option text */} + + updateOptionText?.(opt.option_number, e.target.value) + } + /> + {/* Delete option */} + + + -
))} - - diff --git a/components/prompts/TextPrompt.tsx b/components/prompts/TextPrompt.tsx index d1d9331f..e6dac459 100644 --- a/components/prompts/TextPrompt.tsx +++ b/components/prompts/TextPrompt.tsx @@ -1,4 +1,3 @@ - import { TextField } from "@mui/material"; import { OptionsProps } from "./BuildPromptRenderer"; diff --git a/components/prompts/styles.ts b/components/prompts/styles.ts index be99de63..350f1df0 100644 --- a/components/prompts/styles.ts +++ b/components/prompts/styles.ts @@ -1,119 +1,119 @@ -import { Button, TextField, Typography } from "@mui/material"; +import { TextField } from "@mui/material"; import styled from "styled-components"; -import { Sans } from "@/styles/fonts"; import COLORS from "@/styles/colors"; +import { Sans } from "@/styles/fonts"; export const PromptRendererStyled = styled.div` - display: flex; - flex-direction: column; - align-items: left; - width: 100%; - gap: 16px; - padding: 16px; - border-radius: 8px; - border: 1px solid var(${COLORS.oat_medium}, #EEE); - background: var(${COLORS.oat_light}, #F9F9F9); - -] color: var(--Black-100, #0F0F0F); - font-family: "Public Sans"; - font-style: normal; - line-height: normal; + display: flex; + flex-direction: column; + align-items: left; + width: 100%; + gap: 16px; + padding: 16px; + border-radius: 8px; + border: 1px solid ${COLORS.oat_medium}; + background-color: ${COLORS.oat_light}; + + ]color: var(--Black-100, #0f0f0f); + font-family: "Public Sans"; + font-style: normal; + line-height: normal; `; export const QuestionNumberStyled = styled.div` - color: var(--Black-70, #4B4A49); - font-family: ${Sans.style.fontFamily}; - font-size: 12px; - font-style: normal; - font-weight: 700; - line-height: 150%; /* 18px */ + color: ${COLORS.black70}; + font-family: ${Sans.style.fontFamily}; + font-size: 12px; + font-style: normal; + font-weight: 700; + line-height: 150%; /* 18px */ `; export const QuestionHeaderStyled = styled.div` - display: flex; - align-items: center; + display: flex; + align-items: center; + width: 100%; + gap: 12px; + box-sizing: border-box; + font-family: ${Sans.style.fontFamily}; + + .MuiFormControl-root { width: 100%; - gap: 12px; - box-sizing: border-box; - font-family: ${Sans.style.fontFamily}; - - .MuiFormControl-root { - width: 100%; - } + } `; export const TextFieldStyled = styled(TextField)` - flex: 1; - min-width: 0; /* critical: prevents flex item from overflowing */ + flex: 1; + min-width: 0; + height: fit-content; - border-radius: 4px; - border: 1px solid var(${COLORS.oat_medium}, #EEE); - background: var(${COLORS.oat_light}, #FFF); + border-radius: 4px; + border: 1px solid ${COLORS.oat_medium}; + background-color: ${COLORS.white}; - color: var(${COLORS.black20}, #C7C6C3); + color: ${COLORS.black20}; - .MuiInputBase-input { - font-size: 10px; - font-family: ${Sans.style.fontFamily}; - font-weight: 500; - color: var(--Black-20, #C7C6C3); - } + .MuiInputBase-input { + font-size: 10px; + font-family: ${Sans.style.fontFamily}; + font-weight: 500; + color: ${COLORS.black20}; + } + + .MuiFormControl-root { + width: 100%; + } + .MuiOutlinedInput-root { + background-color: transparent; - .MuiFormControl-root { - width: 100%; - } - - .MuiOutlinedInput-root { fieldset { - border-width: 0; /* grey */ + border-width: 0; /* grey */ } &:hover fieldset { - border-color: #bdbdbd; + border-color: #bdbdbd; } &.Mui-focused fieldset { - border-color: #bdbdbd; + border-color: #bdbdbd; } } `; export const PromptTypeDropdownStyled = styled.div` - height: 100%; + height: 100%; `; -export const MultipleChoicePromptStyled = styled.div` -`; +export const MultipleChoicePromptStyled = styled.div``; export const McqOptionStyled = styled.div` - display: flex; - flex-direction: row; - width: 100%; - padding: 8px 0px; + display: flex; + flex-direction: row; + width: 100%; + padding: 2px 0px; + align-items: center; `; - export const DeleteMcqOptionButton = styled.div` - padding-right: 20px; - padding-left: 30px; + padding-right: 20px; + padding-left: 30px; `; export const CheckboxPromptStyled = styled.div``; export const AddNewOptionStyled = styled.div` - display: flex; - align-items: center; - gap: 8px; - align-self: stretch; + display: flex; + align-items: center; + gap: 8px; + align-self: stretch; `; export const AddNewOptionTextStyled = styled.div` - font-family: ${Sans.style.fontFamily}; - font-size: 10px; - font-style: normal; - font-weight: 500; - line-height: normal; - color: var(${COLORS.darkElectricBlue}, #476C77); + font-family: ${Sans.style.fontFamily}; + font-size: 10px; + font-style: normal; + font-weight: 500; + line-height: normal; + color: ${COLORS.darkElectricBlue}; `; - From 9937817e8a47945bd0129f6cd4ac8990b2b5945b Mon Sep 17 00:00:00 2001 From: dionyichia Date: Sat, 7 Mar 2026 15:06:38 -0800 Subject: [PATCH 05/13] added lock yaml file for new dep --- pnpm-lock.yaml | 86 +++++++++++++++++++++++++++----------------------- 1 file changed, 46 insertions(+), 40 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 80307eb2..6942a282 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -24,8 +24,8 @@ importers: specifier: 5.0.0-beta.70 version: 5.0.0-beta.70(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) '@mui/material': - specifier: ^7.3.7 - version: 7.3.7(@emotion/react@11.14.0(@types/react@19.2.7)(react@19.2.3))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.2.7)(react@19.2.3))(@types/react@19.2.7)(react@19.2.3))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + specifier: ^7.3.9 + version: 7.3.9(@emotion/react@11.14.0(@types/react@19.2.7)(react@19.2.3))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.2.7)(react@19.2.3))(@types/react@19.2.7)(react@19.2.3))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) '@supabase/ssr': specifier: ^0.8.0 version: 0.8.0(@supabase/supabase-js@2.86.0) @@ -177,6 +177,10 @@ packages: resolution: {integrity: sha512-Q/N6JNWvIvPnLDvjlE1OUBLPQHH6l3CltCEsHIujp45zQUSSh8K+gHnaEX45yAT1nyngnINhvWtzN+Nb9D8RAQ==} engines: {node: '>=6.9.0'} + '@babel/runtime@7.28.6': + resolution: {integrity: sha512-05WQkdpL9COIMz4LjTxGpPNCdlpyimKppYNoJ5Di5EUObifl8t4tuLuUBBZEpoLYOmfvIWrsp9fCl0HoPRVTdA==} + engines: {node: '>=6.9.0'} + '@babel/template@7.27.2': resolution: {integrity: sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==} engines: {node: '>=6.9.0'} @@ -534,16 +538,16 @@ packages: '@types/react': optional: true - '@mui/core-downloads-tracker@7.3.7': - resolution: {integrity: sha512-8jWwS6FweMkpyRkrJooamUGe1CQfO1yJ+lM43IyUJbrhHW/ObES+6ry4vfGi8EKaldHL3t3BG1bcLcERuJPcjg==} + '@mui/core-downloads-tracker@7.3.9': + resolution: {integrity: sha512-MOkOCTfbMJwLshlBCKJ59V2F/uaLYfmKnN76kksj6jlGUVdI25A9Hzs08m+zjBRdLv+sK7Rqdsefe8X7h/6PCw==} - '@mui/material@7.3.7': - resolution: {integrity: sha512-6bdIxqzeOtBAj2wAsfhWCYyMKPLkRO9u/2o5yexcL0C3APqyy91iGSWgT3H7hg+zR2XgE61+WAu12wXPON8b6A==} + '@mui/material@7.3.9': + resolution: {integrity: sha512-I8yO3t4T0y7bvDiR1qhIN6iBWZOTBfVOnmLlM7K6h3dx5YX2a7rnkuXzc2UkZaqhxY9NgTnEbdPlokR1RxCNRQ==} engines: {node: '>=14.0.0'} peerDependencies: '@emotion/react': ^11.5.0 '@emotion/styled': ^11.3.0 - '@mui/material-pigment-css': ^7.3.7 + '@mui/material-pigment-css': ^7.3.9 '@types/react': ^17.0.0 || ^18.0.0 || ^19.0.0 react: ^17.0.0 || ^18.0.0 || ^19.0.0 react-dom: ^17.0.0 || ^18.0.0 || ^19.0.0 @@ -557,8 +561,8 @@ packages: '@types/react': optional: true - '@mui/private-theming@7.3.7': - resolution: {integrity: sha512-w7r1+CYhG0syCAQUWAuV5zSaU2/67WA9JXUderdb7DzCIJdp/5RmJv6L85wRjgKCMsxFF0Kfn0kPgPbPgw/jdw==} + '@mui/private-theming@7.3.9': + resolution: {integrity: sha512-ErIyRQvsiQEq7Yvcvfw9UDHngaqjMy9P3JDPnRAaKG5qhpl2C4tX/W1S4zJvpu+feihmZJStjIyvnv6KDbIrlw==} engines: {node: '>=14.0.0'} peerDependencies: '@types/react': ^17.0.0 || ^18.0.0 || ^19.0.0 @@ -567,8 +571,8 @@ packages: '@types/react': optional: true - '@mui/styled-engine@7.3.7': - resolution: {integrity: sha512-y/QkNXv6cF6dZ5APztd/dFWfQ6LHKPx3skyYO38YhQD4+Cxd6sFAL3Z38WMSSC8LQz145Mpp3CcLrSCLKPwYAg==} + '@mui/styled-engine@7.3.9': + resolution: {integrity: sha512-JqujWt5bX4okjUPGpVof/7pvgClqh7HvIbsIBIOOlCh2u3wG/Bwp4+E1bc1dXSwkrkp9WUAoNdI5HEC+5HKvMw==} engines: {node: '>=14.0.0'} peerDependencies: '@emotion/react': ^11.4.1 @@ -580,8 +584,8 @@ packages: '@emotion/styled': optional: true - '@mui/system@7.3.7': - resolution: {integrity: sha512-DovL3k+FBRKnhmatzUMyO5bKkhMLlQ9L7Qw5qHrre3m8zCZmE+31NDVBFfqrbrA7sq681qaEIHdkWD5nmiAjyQ==} + '@mui/system@7.3.9': + resolution: {integrity: sha512-aL1q9am8XpRrSabv9qWf5RHhJICJql34wnrc1nz0MuOglPRYF/liN+c8VqZdTvUn9qg+ZjRVbKf4sJVFfIDtmg==} engines: {node: '>=14.0.0'} peerDependencies: '@emotion/react': ^11.5.0 @@ -604,8 +608,8 @@ packages: '@types/react': optional: true - '@mui/types@7.4.10': - resolution: {integrity: sha512-0+4mSjknSu218GW3isRqoxKRTOrTLd/vHi/7UC4+wZcUrOAqD9kRk7UQRL1mcrzqRoe7s3UT6rsRpbLkW5mHpQ==} + '@mui/types@7.4.12': + resolution: {integrity: sha512-iKNAF2u9PzSIj40CjvKJWxFXJo122jXVdrmdh0hMYd+FR+NuJMkr/L88XwWLCRiJ5P1j+uyac25+Kp6YC4hu6w==} peerDependencies: '@types/react': ^17.0.0 || ^18.0.0 || ^19.0.0 peerDependenciesMeta: @@ -622,8 +626,8 @@ packages: '@types/react': optional: true - '@mui/utils@7.3.7': - resolution: {integrity: sha512-+YjnjMRnyeTkWnspzoxRdiSOgkrcpTikhNPoxOZW0APXx+urHtUoXJ9lbtCZRCA5a4dg5gSbd19alL1DvRs5fg==} + '@mui/utils@7.3.9': + resolution: {integrity: sha512-U6SdZaGbfb65fqTsH3V5oJdFj9uYwyLE2WVuNvmbggTSDBb8QHrFsqY8BN3taK9t3yJ8/BPHD/kNvLNyjwM7Yw==} engines: {node: '>=14.0.0'} peerDependencies: '@types/react': ^17.0.0 || ^18.0.0 || ^19.0.0 @@ -2498,6 +2502,8 @@ snapshots: '@babel/runtime@7.28.4': {} + '@babel/runtime@7.28.6': {} + '@babel/template@7.27.2': dependencies: '@babel/code-frame': 7.27.1 @@ -2868,15 +2874,15 @@ snapshots: optionalDependencies: '@types/react': 19.2.7 - '@mui/core-downloads-tracker@7.3.7': {} + '@mui/core-downloads-tracker@7.3.9': {} - '@mui/material@7.3.7(@emotion/react@11.14.0(@types/react@19.2.7)(react@19.2.3))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.2.7)(react@19.2.3))(@types/react@19.2.7)(react@19.2.3))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': + '@mui/material@7.3.9(@emotion/react@11.14.0(@types/react@19.2.7)(react@19.2.3))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.2.7)(react@19.2.3))(@types/react@19.2.7)(react@19.2.3))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': dependencies: - '@babel/runtime': 7.28.4 - '@mui/core-downloads-tracker': 7.3.7 - '@mui/system': 7.3.7(@emotion/react@11.14.0(@types/react@19.2.7)(react@19.2.3))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.2.7)(react@19.2.3))(@types/react@19.2.7)(react@19.2.3))(@types/react@19.2.7)(react@19.2.3) - '@mui/types': 7.4.10(@types/react@19.2.7) - '@mui/utils': 7.3.7(@types/react@19.2.7)(react@19.2.3) + '@babel/runtime': 7.28.6 + '@mui/core-downloads-tracker': 7.3.9 + '@mui/system': 7.3.9(@emotion/react@11.14.0(@types/react@19.2.7)(react@19.2.3))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.2.7)(react@19.2.3))(@types/react@19.2.7)(react@19.2.3))(@types/react@19.2.7)(react@19.2.3) + '@mui/types': 7.4.12(@types/react@19.2.7) + '@mui/utils': 7.3.9(@types/react@19.2.7)(react@19.2.3) '@popperjs/core': 2.11.8 '@types/react-transition-group': 4.4.12(@types/react@19.2.7) clsx: 2.1.1 @@ -2891,18 +2897,18 @@ snapshots: '@emotion/styled': 11.14.1(@emotion/react@11.14.0(@types/react@19.2.7)(react@19.2.3))(@types/react@19.2.7)(react@19.2.3) '@types/react': 19.2.7 - '@mui/private-theming@7.3.7(@types/react@19.2.7)(react@19.2.3)': + '@mui/private-theming@7.3.9(@types/react@19.2.7)(react@19.2.3)': dependencies: - '@babel/runtime': 7.28.4 - '@mui/utils': 7.3.7(@types/react@19.2.7)(react@19.2.3) + '@babel/runtime': 7.28.6 + '@mui/utils': 7.3.9(@types/react@19.2.7)(react@19.2.3) prop-types: 15.8.1 react: 19.2.3 optionalDependencies: '@types/react': 19.2.7 - '@mui/styled-engine@7.3.7(@emotion/react@11.14.0(@types/react@19.2.7)(react@19.2.3))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.2.7)(react@19.2.3))(@types/react@19.2.7)(react@19.2.3))(react@19.2.3)': + '@mui/styled-engine@7.3.9(@emotion/react@11.14.0(@types/react@19.2.7)(react@19.2.3))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.2.7)(react@19.2.3))(@types/react@19.2.7)(react@19.2.3))(react@19.2.3)': dependencies: - '@babel/runtime': 7.28.4 + '@babel/runtime': 7.28.6 '@emotion/cache': 11.14.0 '@emotion/serialize': 1.3.3 '@emotion/sheet': 1.4.0 @@ -2913,13 +2919,13 @@ snapshots: '@emotion/react': 11.14.0(@types/react@19.2.7)(react@19.2.3) '@emotion/styled': 11.14.1(@emotion/react@11.14.0(@types/react@19.2.7)(react@19.2.3))(@types/react@19.2.7)(react@19.2.3) - '@mui/system@7.3.7(@emotion/react@11.14.0(@types/react@19.2.7)(react@19.2.3))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.2.7)(react@19.2.3))(@types/react@19.2.7)(react@19.2.3))(@types/react@19.2.7)(react@19.2.3)': + '@mui/system@7.3.9(@emotion/react@11.14.0(@types/react@19.2.7)(react@19.2.3))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.2.7)(react@19.2.3))(@types/react@19.2.7)(react@19.2.3))(@types/react@19.2.7)(react@19.2.3)': dependencies: - '@babel/runtime': 7.28.4 - '@mui/private-theming': 7.3.7(@types/react@19.2.7)(react@19.2.3) - '@mui/styled-engine': 7.3.7(@emotion/react@11.14.0(@types/react@19.2.7)(react@19.2.3))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.2.7)(react@19.2.3))(@types/react@19.2.7)(react@19.2.3))(react@19.2.3) - '@mui/types': 7.4.10(@types/react@19.2.7) - '@mui/utils': 7.3.7(@types/react@19.2.7)(react@19.2.3) + '@babel/runtime': 7.28.6 + '@mui/private-theming': 7.3.9(@types/react@19.2.7)(react@19.2.3) + '@mui/styled-engine': 7.3.9(@emotion/react@11.14.0(@types/react@19.2.7)(react@19.2.3))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.2.7)(react@19.2.3))(@types/react@19.2.7)(react@19.2.3))(react@19.2.3) + '@mui/types': 7.4.12(@types/react@19.2.7) + '@mui/utils': 7.3.9(@types/react@19.2.7)(react@19.2.3) clsx: 2.1.1 csstype: 3.2.3 prop-types: 15.8.1 @@ -2933,9 +2939,9 @@ snapshots: optionalDependencies: '@types/react': 19.2.7 - '@mui/types@7.4.10(@types/react@19.2.7)': + '@mui/types@7.4.12(@types/react@19.2.7)': dependencies: - '@babel/runtime': 7.28.4 + '@babel/runtime': 7.28.6 optionalDependencies: '@types/react': 19.2.7 @@ -2951,10 +2957,10 @@ snapshots: optionalDependencies: '@types/react': 19.2.7 - '@mui/utils@7.3.7(@types/react@19.2.7)(react@19.2.3)': + '@mui/utils@7.3.9(@types/react@19.2.7)(react@19.2.3)': dependencies: - '@babel/runtime': 7.28.4 - '@mui/types': 7.4.10(@types/react@19.2.7) + '@babel/runtime': 7.28.6 + '@mui/types': 7.4.12(@types/react@19.2.7) '@types/prop-types': 15.7.15 clsx: 2.1.1 prop-types: 15.8.1 From 011dae903c95b292837e5e07637b02e230d3c0e9 Mon Sep 17 00:00:00 2001 From: dionyichia Date: Sun, 8 Mar 2026 18:43:35 -0700 Subject: [PATCH 06/13] basic form functionality done --- actions/supabase/queries/prompt.ts | 2 +- .../components/CheckboxPromptParticipant.tsx | 67 ++++++++++ .../MultipleChoicePromptParticipant.tsx | 60 +++++++++ .../components/TextPromptParticipant.tsx | 19 +++ app/participants/session-flow/page.tsx | 126 +++++++++++++++--- app/participants/session-flow/styles.ts | 13 +- components/prompts/PromptRenderer.tsx | 85 ++++++------ components/prompts/styles.ts | 1 + 8 files changed, 302 insertions(+), 71 deletions(-) create mode 100644 app/participants/components/CheckboxPromptParticipant.tsx create mode 100644 app/participants/components/MultipleChoicePromptParticipant.tsx create mode 100644 app/participants/components/TextPromptParticipant.tsx diff --git a/actions/supabase/queries/prompt.ts b/actions/supabase/queries/prompt.ts index 10c15da0..404b45d4 100644 --- a/actions/supabase/queries/prompt.ts +++ b/actions/supabase/queries/prompt.ts @@ -2,7 +2,7 @@ import { UUID } from "crypto"; import { PromptType } from "@/types/schema"; import supabase from "../client"; -export async function getOptionsForPrompt(prompt_id: UUID) { +export async function getOptionsForPrompt(prompt_id: string) { const { data, error } = await supabase .from("prompt_option") .select("*") diff --git a/app/participants/components/CheckboxPromptParticipant.tsx b/app/participants/components/CheckboxPromptParticipant.tsx new file mode 100644 index 00000000..d4449003 --- /dev/null +++ b/app/participants/components/CheckboxPromptParticipant.tsx @@ -0,0 +1,67 @@ +import { Checkbox, FormControlLabel } from "@mui/material"; +import styled from "styled-components"; +import COLORS from "@/styles/colors"; +import { Sans } from "@/styles/fonts"; +import { PromptOption } from "@/types/schema"; + +const CheckboxParticipantStyled = styled.div` + display: flex; + flex-direction: column; + gap: 4px; +`; + +const McqOptionParticipantStyled = styled.div` + display: flex; + flex-direction: row; + align-items: center; + padding: 2px 0px; + width: 100%; +`; + +const OptionTextStyled = styled.span` + font-family: ${Sans.style.fontFamily}; + font-size: 12px; + font-style: normal; + font-weight: 500; + line-height: normal; + color: ${COLORS.black20}; +`; + +type Props = { + options: PromptOption[]; + value: string[]; + onChange: (value: string[]) => void; +}; + +export default function CheckboxPromptParticipant({ + options, + value, + onChange, +}: Props) { + function toggle(id: string) { + if (value.includes(id)) { + onChange(value.filter((v) => v !== id)); + } else { + onChange([...value, id]); + } + } + + return ( + + {options.map((o) => ( + + toggle(o.option_id)} + /> + } + label={{o.option_text}} + /> + + ))} + + ); +} \ No newline at end of file diff --git a/app/participants/components/MultipleChoicePromptParticipant.tsx b/app/participants/components/MultipleChoicePromptParticipant.tsx new file mode 100644 index 00000000..5342f7a3 --- /dev/null +++ b/app/participants/components/MultipleChoicePromptParticipant.tsx @@ -0,0 +1,60 @@ +import { Radio, RadioGroup, FormControlLabel } from "@mui/material"; +import styled from "styled-components"; +import COLORS from "@/styles/colors"; +import { Sans } from "@/styles/fonts"; +import { PromptOption } from "@/types/schema"; + +const MultipleChoiceParticipantStyled = styled.div` + display: flex; + flex-direction: column; + gap: 4px; +`; + +const McqOptionParticipantStyled = styled.div` + display: flex; + flex-direction: row; + align-items: center; + padding: 2px 0px; + width: 100%; +`; + +const OptionTextStyled = styled.span` + font-family: ${Sans.style.fontFamily}; + font-size: 12px; + font-style: normal; + font-weight: 500; + line-height: normal; + color: ${COLORS.black20}; +`; + +type Props = { + options: PromptOption[]; + value: string; + onChange: (value: string) => void; +}; + +export default function MultipleChoicePromptParticipant({ + options, + value, + onChange, +}: Props) { + return ( + + onChange(e.target.value)} + name="mcq-participant" + > + {options.map((o) => ( + + } + label={{o.option_text}} + /> + + ))} + + + ); +} \ No newline at end of file diff --git a/app/participants/components/TextPromptParticipant.tsx b/app/participants/components/TextPromptParticipant.tsx new file mode 100644 index 00000000..51dfdabb --- /dev/null +++ b/app/participants/components/TextPromptParticipant.tsx @@ -0,0 +1,19 @@ +import { TextFieldStyled } from "@/components/prompts/styles"; + +type TextPromptParticipantProps = { + value: string; + onChange: (value: string) => void; +}; + +export default function TextPromptParticipant({ + value, + onChange, +}: TextPromptParticipantProps) { + return ( + onChange(e.target.value)} + /> + ); +} \ No newline at end of file diff --git a/app/participants/session-flow/page.tsx b/app/participants/session-flow/page.tsx index d39137f6..28f06c23 100644 --- a/app/participants/session-flow/page.tsx +++ b/app/participants/session-flow/page.tsx @@ -1,6 +1,6 @@ "use client"; -import type { Phase, Prompt, RolePhase, UUID } from "@/types/schema"; +import type { Phase, Prompt, PromptOption, RolePhase, UUID } from "@/types/schema"; import { useEffect, useState } from "react"; import { useSearchParams } from "next/navigation"; import supabase from "@/actions/supabase/client"; @@ -23,6 +23,13 @@ import { RolePhaseDescription, StyledTextarea, } from "./styles"; +import { getOptionsForPrompt } from "@/actions/supabase/queries/prompt"; +import PromptRenderer from "@/components/prompts/PromptRenderer"; + +export interface PromptWithOption { + prompt: Prompt + options: PromptOption[]; +} export default function ParticipantFlowPage() { const { userId } = useProfile(); @@ -33,9 +40,10 @@ export default function ParticipantFlowPage() { const [phases, setPhases] = useState([]); const [currentPhaseIndex, setCurrentPhaseIndex] = useState(0); const [rolePhase, setRolePhase] = useState(null); - const [prompts, setPrompts] = useState([]); + const [promptsWithOptions, setPromptsWithOptions] = useState([]); const [loading, setLoading] = useState(true); - const [answers, setAnswers] = useState([]); + const [answers, setAnswers] = useState<(string | string[])[]>([]); + const isLastPhase = currentPhaseIndex === phases.length - 1; const currentPhase = phases[currentPhaseIndex]; @@ -62,6 +70,12 @@ export default function ParticipantFlowPage() { loadData(); }, [userId, sessionId]); + // Load Options if prompt is an mcq or checkbox + async function loadPromptOptions(prompt_id: string) { + const pulled_options = await getOptionsForPrompt(prompt_id); + return pulled_options ?? []; + } + useEffect(() => { if (!currentPhase || !roleId) return; @@ -71,14 +85,27 @@ export default function ParticipantFlowPage() { setRolePhase(rp); if (rp) { - const p = await fetchPrompts(rp.role_phase_id); - setPrompts(p); + const prompts = await fetchPrompts(rp.role_phase_id); + + const buffer: PromptWithOption[] = await Promise.all( + prompts.map(async(p) => { + const pulled_options = await loadPromptOptions(p.prompt_id); + + return { + prompt: p, + options: pulled_options, + } + }) + ) + + setPromptsWithOptions(buffer); + } else { - setPrompts([]); + setPromptsWithOptions([]); } } catch (err) { console.error("Error setting prompts:", err); - setPrompts([]); + setPromptsWithOptions([]); } } @@ -125,24 +152,37 @@ export default function ParticipantFlowPage() { }, [userId, sessionId, phases]); useEffect(() => { - setAnswers(Array(prompts.length).fill("")); - }, [prompts]); - - function handleInputAnswer(index: number, value: string) { - const updated = [...answers]; - updated[index] = value; - setAnswers(updated); + setAnswers(Array(promptsWithOptions.length).fill("")); + }, [promptsWithOptions]); + + function handleInputAnswer(index: number, value: string | string[]) { + setAnswers((prev) => { + const copy = [...prev]; + copy[index] = value; + return copy; + }); } async function submitAnswers() { for (let i = 0; i < answers.length; i++) { const answer = answers[i]; + const promptId = promptsWithOptions[i].prompt.prompt_id; + + if (!userId || !answer) continue; - if (!answer.trim()) continue; - const promptId = prompts[i].prompt_id; + // TEXT or MCQ + if (typeof answer === "string") { + if (!answer.trim()) continue; - if (!userId) continue; - await createPromptAnswer(userId, promptId, answer); + await createPromptAnswer(userId, promptId, answer); + } + + // CHECKBOX (multiple answers) + if (Array.isArray(answer)) { + for (const optionId of answer) { + await createPromptAnswer(userId, promptId, optionId); + } + } } } @@ -168,6 +208,54 @@ export default function ParticipantFlowPage() { )} + {/* {promptsWithOptions.map((pWithOpts, index) => ( +
+ {pWithOpts.prompt.prompt_text} + + ) => + handleInputAnswer(index, e.target.value) + } + minRows={3} + placeholder="Type your answer..." + /> +
+ ))} */} + {promptsWithOptions.map((pWithOpts, index) => ( + handleInputAnswer(index, value)} + /> + ))} +
+ + {roleId && userId && sessionId && ( + + )} + + {currentPhaseIndex === phases.length &&
End of phases
} + + + + Phase {currentPhaseIndex + 1} + + {rolePhase && ( + + Role description: {rolePhase.description} + + )} + + {/* {prompts.map((prompt, index) => (
{prompt.prompt_text} @@ -182,7 +270,7 @@ export default function ParticipantFlowPage() { />
))} -
+ */} {roleId && userId && sessionId && ( void; }; -export interface OptionsProps { - options: PromptOption[]; -} - export default function PromptRenderer({ - prompt_id, - prompt_type, - question, + promptWithOption, + answer, + onAnswer, }: PromptRendererProps) { - const [options, setOptions] = useState([]); - - // pull prompt options - async function loadPromptOptions() { - const pulled_options = await getOptionsForPrompt(prompt_id); - setOptions(pulled_options ?? []); - } - - useEffect(() => { - loadPromptOptions(); - }, [prompt_id]); - - // const optionsField = - // prompt_type === "text" ? ( - // - // ) : prompt_type === "multiple_choice" ? ( - // - // ) : ( - // - // ); + + const { prompt, options } = promptWithOption; return ( - // - // {question} - // {optionsField} - // - <> +
+

{prompt.prompt_text}

+ + {prompt.prompt_type === "text" && ( + + )} + + {prompt.prompt_type === "multiple_choice" && ( + + )} + + {prompt.prompt_type === "checkbox" && ( + + )} +
); -} +} \ No newline at end of file diff --git a/components/prompts/styles.ts b/components/prompts/styles.ts index 350f1df0..f7e084d6 100644 --- a/components/prompts/styles.ts +++ b/components/prompts/styles.ts @@ -45,6 +45,7 @@ export const QuestionHeaderStyled = styled.div` export const TextFieldStyled = styled(TextField)` flex: 1; min-width: 0; + width: 100%; height: fit-content; border-radius: 4px; From 9019e5fb4e7eb031872ec6545e36ecf361d96d7c Mon Sep 17 00:00:00 2001 From: dionyichia Date: Tue, 10 Mar 2026 18:16:29 -0700 Subject: [PATCH 07/13] basic styling for phase ccontent and prompt questions for particpants done --- .../components/ParticipantNextButton.tsx | 5 +- .../components/PromptRenderer.tsx | 60 +++++++ app/participants/session-flow/page.tsx | 123 ++++++++------- app/participants/session-flow/styles.ts | 149 +++++++++++++++++- app/participants/styles.ts | 5 +- components/prompts/PromptRenderer.tsx | 50 ------ 6 files changed, 270 insertions(+), 122 deletions(-) create mode 100644 app/participants/components/PromptRenderer.tsx delete mode 100644 components/prompts/PromptRenderer.tsx diff --git a/app/participants/components/ParticipantNextButton.tsx b/app/participants/components/ParticipantNextButton.tsx index 5263f642..4f335bc7 100644 --- a/app/participants/components/ParticipantNextButton.tsx +++ b/app/participants/components/ParticipantNextButton.tsx @@ -5,6 +5,7 @@ import { useEffect, useState } from "react"; import { useRouter } from "next/navigation"; import { setIsFinished } from "@/actions/supabase/queries/sessions"; import { Button } from "../styles"; +import { NextButtonContainerStyled } from "../session-flow/styles"; interface NextButtonProps { user_id: UUID; @@ -48,12 +49,12 @@ export default function NextButton({ } return ( -
+ {clicked && waiting for others...} -
+ ); } diff --git a/app/participants/components/PromptRenderer.tsx b/app/participants/components/PromptRenderer.tsx new file mode 100644 index 00000000..c4240fb5 --- /dev/null +++ b/app/participants/components/PromptRenderer.tsx @@ -0,0 +1,60 @@ +"use client"; + +import { PromptWithOption } from "@/app/participants/session-flow/page"; +import TextPromptParticipant from "@/app/participants/components/TextPromptParticipant"; +import MultipleChoicePromptParticipant from "@/app/participants/components/MultipleChoicePromptParticipant"; +import CheckboxPromptParticipant from "@/app/participants/components/CheckboxPromptParticipant"; +import { PromptQuestionStyled, PromptQuestionArrowStyled, PromptQuestionContentStyled, PromptQuestionContentTitledStyled } from "../session-flow/styles"; + +type PromptRendererProps = { + index: number; + promptWithOption: PromptWithOption; + answer: string | string[]; + onAnswer: (value: string | string[]) => void; +}; + +export default function PromptRenderer({ + index, + promptWithOption, + answer, + onAnswer, +}: PromptRendererProps) { + + const { prompt, options } = promptWithOption; + + const arrowString: string = '->'; + + + return ( + + {index + 1} {arrowString} + + + {prompt.prompt_text} + + {prompt.prompt_type === "text" && ( + + )} + + {prompt.prompt_type === "multiple_choice" && ( + + )} + + {prompt.prompt_type === "checkbox" && ( + + )} + + + ); +} \ No newline at end of file diff --git a/app/participants/session-flow/page.tsx b/app/participants/session-flow/page.tsx index 28f06c23..a491b31f 100644 --- a/app/participants/session-flow/page.tsx +++ b/app/participants/session-flow/page.tsx @@ -19,12 +19,17 @@ import { ParticipantFlowMain, PhaseHeading, PromptCard, - PromptText, - RolePhaseDescription, - StyledTextarea, + PhaseContextStyled, + SubheaderStyled, + ContextStyled, + ScenarioOverviewStyled, + ScenarioOverviewFieldsStyled, + ScenarioOverviewTitleStyled, + BodyTextStyled, + PromptQuestionTitleStyled, } from "./styles"; import { getOptionsForPrompt } from "@/actions/supabase/queries/prompt"; -import PromptRenderer from "@/components/prompts/PromptRenderer"; +import PromptRenderer from "@/app/participants/components/PromptRenderer"; export interface PromptWithOption { prompt: Prompt @@ -198,32 +203,68 @@ export default function ParticipantFlowPage() { return (
- + + {currentPhaseIndex + 1} out of {phases.length} Phase {currentPhaseIndex + 1} + + Context + +
+ Your office has been working around the clock tackling a new wave of COVID-19 spurred by a lack of compliance with public health precautions as people moved indoors during the colder months. Yesterday, the country reached all-time highs of 7,019 new cases and 144 deaths. Vaccines are expected to start becoming available in February, but only in limited amounts initially. +
+
+ You receive a call from a rural field office that the local hospital has reported seeing over 100 patients with fever, headache and breathing difficulties last week. Due to limited lab supplies, only 37 of the patients could be tested. The swabs were sent to a private laboratory for analysis, and none of the tests were positive for COVID-19. Based on the symptoms and progression of the disease, doctors at the hospital believe the patients do have COVID-19, and they are concerned about the handling and testing protocols used for the samples. Upon checking CRVS, you find that the lab has not yet submitted the results for those tests. +
+
+ You ask your colleague at the field office to visit the hospital and the laboratory to see if he can identify any issues with the test kits, sampling process, handling, or analysis protocols. He expresses concern about visiting the COVID ward at the hospital due to shortages of PPE. +
+
+ A breakout of COVID-19 at PTCL headquarters in Islamabad has impacted Internet reliability, causing intermittent outages, particularly in the capital. +
+
+ +
+ + + + Scenario Overview + + + + Summary + {} + + + + Setting + {} + + + + Current Activity + {} + + + + +
+ + - {rolePhase && ( + + Questions + + + {/* {rolePhase && ( Role description: {rolePhase.description} - )} + )} */} - {/* {promptsWithOptions.map((pWithOpts, index) => ( -
- {pWithOpts.prompt.prompt_text} - - ) => - handleInputAnswer(index, e.target.value) - } - minRows={3} - placeholder="Type your answer..." - /> -
- ))} */} {promptsWithOptions.map((pWithOpts, index) => ( End of phases
} - - - Phase {currentPhaseIndex + 1} - - {rolePhase && ( - - Role description: {rolePhase.description} - - )} - - {/* - {prompts.map((prompt, index) => ( -
- {prompt.prompt_text} - - ) => - handleInputAnswer(index, e.target.value) - } - minRows={3} - placeholder="Type your answer..." - /> -
- ))} -
*/} - - {roleId && userId && sessionId && ( - - )} - - {currentPhaseIndex === phases.length &&
End of phases
} -
); diff --git a/app/participants/session-flow/styles.ts b/app/participants/session-flow/styles.ts index 70d660e6..f4f6c9d3 100644 --- a/app/participants/session-flow/styles.ts +++ b/app/participants/session-flow/styles.ts @@ -10,21 +10,37 @@ export const ParticipantFlowMain = styled.div` padding: 40px 0; width: 100%; height: 100%; + align-items: flex-start; + gap: 32px; + flex: 1 0 0; `; export const Container = styled.div` background-color: ${COLORS.white}; width: 100%; height: 100%; - display: flex; - flex-direction: row; + display: grid; + grid-template-columns: 1fr 1fr; gap: 120px; padding: 80px 120px; `; +export const PhaseContextStyled = styled.div` + width: 100%; + height: 100%; + flex: 1; + display: flex; + flex-direction: column; + gap: 40px; +`; + export const PromptCard = styled.div` - gap: 1rem; - padding-bottom: 1rem; + display: flex; + padding-top: 32px; + flex-direction: column; + align-items: flex-start; + gap: 32px; + flex: 1 0 0; `; export const Main = styled.main` @@ -36,13 +52,12 @@ export const Main = styled.main` align-items: center; flex-direction: column; background-color: ${COLORS.white}; - background: ${COLORS.white}; + font-family: ${Sans.style.fontFamily}; `; export const PhaseHeading = styled.h1` display: flex; flex-direction: column; - padding: 0.75rem; `; export const RolePhaseDescription = styled.p` @@ -71,3 +86,125 @@ export const StyledTextarea = styled(TextareaAutosize)` box-shadow: 0 0 0 2px #e8efff; } `; + +export const ContextStyled = styled.div` + display: flex; + padding: 9px 12px; + flex-direction: column; + align-items: flex-start; + align-self: stretch; + + border-radius: 8px; + background-color: ${COLORS.oat_medium}; + + color: ${COLORS.black70}; + + /* Body 2 */ + font-family: ${Sans.style.fontFamily}; + font-size: 12px; + font-style: normal; + font-weight: 500; + line-height: 150%; /* 18px */ +`; + +export const SubheaderStyled = styled.h4` + font-size: 10px; + color: ${COLORS.black40}; + padding 0 0 8px; +`; + +export const BodyTextStyled = styled.h4` + display: flex; + flex-direction: column; + align-items: flex-start; + gap: 16px; + align-self: stretch; +`; + +export const ScenarioOverviewStyled = styled.h3` + display: flex; + flex-direction: column; + align-self: stretch; + gap: 16px; +`; + +export const ScenarioOverviewTitleStyled = styled.h4` + color: ${COLORS.black}; + padding: 0 0 16px 0; + + /* Heading 3 */ + font-family: ${Sans.style.fontFamily}; + font-size: 24px; + font-style: normal; + font-weight: 700; + line-height: normal; +`; + +export const ScenarioOverviewFieldsStyled = styled.div` + display: flex; + padding: 9px 12px; + flex-direction: column; + align-items: flex-start; + gap: 8px; + align-self: stretch; + + border-radius: 8px; + background-color: ${COLORS.oat_medium}; +`; + + +export const PromptQuestionTitleStyled = styled.div` + color: ${COLORS.black}; + + /* Heading 3 */ + font-family: ${Sans.style.fontFamily}; + font-size: 24px; + font-style: normal; + font-weight: 700; + line-height: normal; +`; + +export const NextButtonContainerStyled = styled.div` + width: 100%; + display: flex; + justify-content: flex-end; +`; + +export const PromptQuestionStyled = styled.div` + display: flex; + flex-direction: row; + gap: 8px; + color: ${COLORS.black70}; +`; + +export const PromptQuestionArrowStyled = styled.div` + display: flex; + flex-shrink: 0; + color: ${COLORS.black70}; + + /* Body 1 */ + font-family: ${Sans.style.fontFamily}; + font-size: 14px; + font-style: normal; + font-weight: 700; + line-height: normal; +`; + +export const PromptQuestionContentStyled = styled.div` + display: flex; + flex-direction: column; + color: ${COLORS.black70}; +`; + +export const PromptQuestionContentTitledStyled = styled.div` + display: flex; + padding: 0 0 16px 0; + color: ${COLORS.black70}; + + /* Body 1 */ + font-family: ${Sans.style.fontFamily}; + font-size: 14px; + font-style: normal; + font-weight: 700; + line-height: normal; +`; diff --git a/app/participants/styles.ts b/app/participants/styles.ts index e6d4df70..08e59bcc 100644 --- a/app/participants/styles.ts +++ b/app/participants/styles.ts @@ -3,14 +3,13 @@ import COLORS from "@/styles/colors"; import { Sans } from "@/styles/fonts"; export const Button = styled.button` - width: 100%; height: 45px; gap: 10rem; + padding: 8px 32px; + border-radius: 4px; display: flex; - flex-direction: column; justify-content: center; align-items: center; - align-self: stretch; background-color: ${COLORS.darkElectricBlue}; font-family: ${Sans.style.fontFamily}; font-size: 12px; diff --git a/components/prompts/PromptRenderer.tsx b/components/prompts/PromptRenderer.tsx deleted file mode 100644 index b4aca36e..00000000 --- a/components/prompts/PromptRenderer.tsx +++ /dev/null @@ -1,50 +0,0 @@ -"use client"; - -import { PromptWithOption } from "@/app/participants/session-flow/page"; -import TextPromptParticipant from "@/app/participants/components/TextPromptParticipant"; -import MultipleChoicePromptParticipant from "@/app/participants/components/MultipleChoicePromptParticipant"; -import CheckboxPromptParticipant from "@/app/participants/components/CheckboxPromptParticipant"; - -type PromptRendererProps = { - promptWithOption: PromptWithOption; - answer: string | string[]; - onAnswer: (value: string | string[]) => void; -}; - -export default function PromptRenderer({ - promptWithOption, - answer, - onAnswer, -}: PromptRendererProps) { - - const { prompt, options } = promptWithOption; - - return ( -
-

{prompt.prompt_text}

- - {prompt.prompt_type === "text" && ( - - )} - - {prompt.prompt_type === "multiple_choice" && ( - - )} - - {prompt.prompt_type === "checkbox" && ( - - )} -
- ); -} \ No newline at end of file From 8bbc31278014857ecd01ee36e82283297e1c9c9c Mon Sep 17 00:00:00 2001 From: dionyichia Date: Thu, 12 Mar 2026 00:39:43 -0700 Subject: [PATCH 08/13] done with styling --- .../components/CheckboxPromptParticipant.tsx | 76 +++++++++----- .../MultipleChoicePromptParticipant.tsx | 53 +++++++--- .../components/ParticipantNextButton.tsx | 14 +-- .../components/PromptRenderer.tsx | 27 +++-- .../components/TextPromptParticipant.tsx | 40 +++++++- app/participants/session-flow/page.tsx | 98 ++++++++++++------- app/participants/session-flow/styles.ts | 13 +-- styles/colors.ts | 2 +- 8 files changed, 227 insertions(+), 96 deletions(-) diff --git a/app/participants/components/CheckboxPromptParticipant.tsx b/app/participants/components/CheckboxPromptParticipant.tsx index d4449003..c6b74163 100644 --- a/app/participants/components/CheckboxPromptParticipant.tsx +++ b/app/participants/components/CheckboxPromptParticipant.tsx @@ -7,24 +7,46 @@ import { PromptOption } from "@/types/schema"; const CheckboxParticipantStyled = styled.div` display: flex; flex-direction: column; - gap: 4px; + width: 100%; + + .MuiFormGroup-root { + gap: 8px; + } `; -const McqOptionParticipantStyled = styled.div` +const CheckboxOptionParticipantStyled = styled.div<{ $selected: boolean }>` display: flex; flex-direction: row; align-items: center; - padding: 2px 0px; width: 100%; + border-radius: 8px; + background-color: ${({ $selected }) => + $selected ? COLORS.lightEletricBlue : COLORS.oat_light}; + border: 1px solid + ${({ $selected }) => ($selected ? COLORS.darkElectricBlue : "transparent")}; + + .MuiFormControlLabel-root { + margin-left: 0; + width: 100%; + } + + .MuiCheckbox-root { + padding-left: 8px; + } + + .MuiCheckbox-root.Mui-checked { + color: ${COLORS.darkElectricBlue}; + } `; -const OptionTextStyled = styled.span` +const OptionTextStyled = styled.span<{ $selected: boolean }>` font-family: ${Sans.style.fontFamily}; font-size: 12px; font-style: normal; font-weight: 500; - line-height: normal; - color: ${COLORS.black20}; + line-height: 150%; + padding: 8px 0; + color: ${({ $selected }) => ($selected ? COLORS.black100 : COLORS.black70)}; `; type Props = { @@ -40,7 +62,7 @@ export default function CheckboxPromptParticipant({ }: Props) { function toggle(id: string) { if (value.includes(id)) { - onChange(value.filter((v) => v !== id)); + onChange(value.filter(v => v !== id)); } else { onChange([...value, id]); } @@ -48,20 +70,30 @@ export default function CheckboxPromptParticipant({ return ( - {options.map((o) => ( - - toggle(o.option_id)} - /> - } - label={{o.option_text}} - /> - - ))} + {options.map(o => { + const selected = value.includes(o.option_id); + return ( + + toggle(o.option_id)} + /> + } + label={ + + {o.option_text} + + } + /> + + ); + })} ); -} \ No newline at end of file +} diff --git a/app/participants/components/MultipleChoicePromptParticipant.tsx b/app/participants/components/MultipleChoicePromptParticipant.tsx index 5342f7a3..e0dcc2f0 100644 --- a/app/participants/components/MultipleChoicePromptParticipant.tsx +++ b/app/participants/components/MultipleChoicePromptParticipant.tsx @@ -1,4 +1,4 @@ -import { Radio, RadioGroup, FormControlLabel } from "@mui/material"; +import { FormControlLabel, Radio, RadioGroup } from "@mui/material"; import styled from "styled-components"; import COLORS from "@/styles/colors"; import { Sans } from "@/styles/fonts"; @@ -7,24 +7,45 @@ import { PromptOption } from "@/types/schema"; const MultipleChoiceParticipantStyled = styled.div` display: flex; flex-direction: column; - gap: 4px; + + .MuiFormGroup-root { + gap: 8px; + } `; -const McqOptionParticipantStyled = styled.div` - display: flex; +const McqOptionParticipantStyled = styled.div<{ $selected: boolean }>` + display: fit-content; flex-direction: row; align-items: center; - padding: 2px 0px; width: 100%; + border-radius: 8px; + background-color: ${COLORS.oat_light}; + + background-color: ${({ $selected }) => + $selected ? COLORS.lightEletricBlue : COLORS.oat_light}; + border: 1px solid + ${({ $selected }) => ($selected ? COLORS.darkElectricBlue : "transparent")}; + + .MuiFormControlLabel-root { + margin-left: 0; + } + + .MuiRadio-root.Mui-checked { + padding-left: 8px; + color: ${({ $selected }) => + $selected ? COLORS.darkElectricBlue : COLORS.oat_medium}; + } `; -const OptionTextStyled = styled.span` +const OptionTextStyled = styled.span<{ $selected: boolean }>` font-family: ${Sans.style.fontFamily}; font-size: 12px; font-style: normal; font-weight: 500; line-height: normal; - color: ${COLORS.black20}; + color: ${({ $selected }) => ($selected ? COLORS.black100 : COLORS.black70)}; + line-height: 150%; /* 18px */ + padding: 8px 0; `; type Props = { @@ -42,19 +63,27 @@ export default function MultipleChoicePromptParticipant({ onChange(e.target.value)} + onChange={e => onChange(e.target.value)} name="mcq-participant" > - {options.map((o) => ( - + {options.map(o => ( + } - label={{o.option_text}} + label={ + + {" "} + {o.option_text} + + } /> ))} ); -} \ No newline at end of file +} diff --git a/app/participants/components/ParticipantNextButton.tsx b/app/participants/components/ParticipantNextButton.tsx index 4f335bc7..73e77939 100644 --- a/app/participants/components/ParticipantNextButton.tsx +++ b/app/participants/components/ParticipantNextButton.tsx @@ -4,8 +4,8 @@ import type { UUID } from "@/types/schema"; import { useEffect, useState } from "react"; import { useRouter } from "next/navigation"; import { setIsFinished } from "@/actions/supabase/queries/sessions"; -import { Button } from "../styles"; import { NextButtonContainerStyled } from "../session-flow/styles"; +import { Button } from "../styles"; interface NextButtonProps { user_id: UUID; @@ -50,11 +50,13 @@ export default function NextButton({ return ( - - - {clicked && waiting for others...} + {clicked ? ( + waiting for others... + ) : ( + + )} ); } diff --git a/app/participants/components/PromptRenderer.tsx b/app/participants/components/PromptRenderer.tsx index c4240fb5..4ca30204 100644 --- a/app/participants/components/PromptRenderer.tsx +++ b/app/participants/components/PromptRenderer.tsx @@ -1,10 +1,15 @@ "use client"; -import { PromptWithOption } from "@/app/participants/session-flow/page"; -import TextPromptParticipant from "@/app/participants/components/TextPromptParticipant"; -import MultipleChoicePromptParticipant from "@/app/participants/components/MultipleChoicePromptParticipant"; import CheckboxPromptParticipant from "@/app/participants/components/CheckboxPromptParticipant"; -import { PromptQuestionStyled, PromptQuestionArrowStyled, PromptQuestionContentStyled, PromptQuestionContentTitledStyled } from "../session-flow/styles"; +import MultipleChoicePromptParticipant from "@/app/participants/components/MultipleChoicePromptParticipant"; +import TextPromptParticipant from "@/app/participants/components/TextPromptParticipant"; +import { PromptWithOption } from "@/app/participants/session-flow/page"; +import { + PromptQuestionArrowStyled, + PromptQuestionContentStyled, + PromptQuestionContentTitledStyled, + PromptQuestionStyled, +} from "../session-flow/styles"; type PromptRendererProps = { index: number; @@ -19,18 +24,20 @@ export default function PromptRenderer({ answer, onAnswer, }: PromptRendererProps) { - const { prompt, options } = promptWithOption; - const arrowString: string = '->'; - + const arrowString: string = "->"; return ( - {index + 1} {arrowString} + + {index + 1} {arrowString}{" "} + - {prompt.prompt_text} + + {prompt.prompt_text} + {prompt.prompt_type === "text" && ( ); -} \ No newline at end of file +} diff --git a/app/participants/components/TextPromptParticipant.tsx b/app/participants/components/TextPromptParticipant.tsx index 51dfdabb..cf685fdb 100644 --- a/app/participants/components/TextPromptParticipant.tsx +++ b/app/participants/components/TextPromptParticipant.tsx @@ -1,4 +1,36 @@ -import { TextFieldStyled } from "@/components/prompts/styles"; +import { TextField } from "@mui/material"; +import styled from "styled-components"; +import COLORS from "@/styles/colors"; +import { Sans } from "@/styles/fonts"; + +export const TextFieldParticpantsStyled = styled(TextField)` + width: 100%; + + .MuiOutlinedInput-root { + background-color: ${COLORS.white}; + border-radius: 8px; + + fieldset { + border: 1px solid ${COLORS.black20}; // set here, not on root + } + + &:hover fieldset { + border-color: ${COLORS.black20}; + } + + &.Mui-focused fieldset { + border-color: ${COLORS.black20}; + border-width: 1px; // MUI defaults to 2px on focus + } + } + + .MuiInputBase-input { + font-size: 10px; + font-family: ${Sans.style.fontFamily}; + font-weight: 500; + color: ${COLORS.black70}; + } +`; type TextPromptParticipantProps = { value: string; @@ -10,10 +42,10 @@ export default function TextPromptParticipant({ onChange, }: TextPromptParticipantProps) { return ( - onChange(e.target.value)} + onChange={e => onChange(e.target.value)} /> ); -} \ No newline at end of file +} diff --git a/app/participants/session-flow/page.tsx b/app/participants/session-flow/page.tsx index a491b31f..f09402ca 100644 --- a/app/participants/session-flow/page.tsx +++ b/app/participants/session-flow/page.tsx @@ -1,9 +1,10 @@ "use client"; -import type { Phase, Prompt, PromptOption, RolePhase, UUID } from "@/types/schema"; +import type { Phase, Prompt, PromptOption, UUID } from "@/types/schema"; import { useEffect, useState } from "react"; import { useSearchParams } from "next/navigation"; import supabase from "@/actions/supabase/client"; +import { getOptionsForPrompt } from "@/actions/supabase/queries/prompt"; import { createPromptAnswer, fetchPhases, @@ -11,28 +12,27 @@ import { fetchRole, fetchRolePhases, } from "@/actions/supabase/queries/sessions"; +import PromptRenderer from "@/app/participants/components/PromptRenderer"; import { useProfile } from "@/utils/ProfileProvider"; import NextButton from "../components/ParticipantNextButton"; import { + BodyTextStyled, Container, + ContextStyled, Main, ParticipantFlowMain, + PhaseContextStyled, PhaseHeading, PromptCard, - PhaseContextStyled, - SubheaderStyled, - ContextStyled, - ScenarioOverviewStyled, + PromptQuestionTitleStyled, ScenarioOverviewFieldsStyled, + ScenarioOverviewStyled, ScenarioOverviewTitleStyled, - BodyTextStyled, - PromptQuestionTitleStyled, + SubheaderStyled, } from "./styles"; -import { getOptionsForPrompt } from "@/actions/supabase/queries/prompt"; -import PromptRenderer from "@/app/participants/components/PromptRenderer"; export interface PromptWithOption { - prompt: Prompt + prompt: Prompt; options: PromptOption[]; } @@ -44,8 +44,9 @@ export default function ParticipantFlowPage() { const [roleId, setRoleId] = useState(null); const [phases, setPhases] = useState([]); const [currentPhaseIndex, setCurrentPhaseIndex] = useState(0); - const [rolePhase, setRolePhase] = useState(null); - const [promptsWithOptions, setPromptsWithOptions] = useState([]); + const [promptsWithOptions, setPromptsWithOptions] = useState< + PromptWithOption[] + >([]); const [loading, setLoading] = useState(true); const [answers, setAnswers] = useState<(string | string[])[]>([]); @@ -86,25 +87,25 @@ export default function ParticipantFlowPage() { async function loadPhaseContent() { try { + console.log("Getting role phase id"); const rp = await fetchRolePhases(roleId as UUID, currentPhase.phase_id); - setRolePhase(rp); if (rp) { + console.log("Getting prompts"); const prompts = await fetchPrompts(rp.role_phase_id); const buffer: PromptWithOption[] = await Promise.all( - prompts.map(async(p) => { + prompts.map(async p => { const pulled_options = await loadPromptOptions(p.prompt_id); return { prompt: p, options: pulled_options, - } - }) - ) + }; + }), + ); setPromptsWithOptions(buffer); - } else { setPromptsWithOptions([]); } @@ -115,7 +116,7 @@ export default function ParticipantFlowPage() { } loadPhaseContent(); - }, [currentPhase, roleId]); + }, [currentPhase, currentPhaseIndex, roleId]); useEffect(() => { if (!userId || !sessionId) return; @@ -135,7 +136,18 @@ export default function ParticipantFlowPage() { filter: `session_id=eq.${sessionId}`, }, payload => { - console.log("Realtime payload received:", payload); + console.log( + "OLD Realtime payload received:", + payload, + payload.old.is_finished, + payload.old.phase_index, + ); + console.log( + "Realtime payload received:", + payload, + payload.new.is_finished, + payload.new.phase_index, + ); const newPhaseIndex = payload.new.phase_index; console.log("New phase_index from DB:", newPhaseIndex); @@ -161,7 +173,7 @@ export default function ParticipantFlowPage() { }, [promptsWithOptions]); function handleInputAnswer(index: number, value: string | string[]) { - setAnswers((prev) => { + setAnswers(prev => { const copy = [...prev]; copy[index] = value; return copy; @@ -210,21 +222,42 @@ export default function ParticipantFlowPage() { Context
- Your office has been working around the clock tackling a new wave of COVID-19 spurred by a lack of compliance with public health precautions as people moved indoors during the colder months. Yesterday, the country reached all-time highs of 7,019 new cases and 144 deaths. Vaccines are expected to start becoming available in February, but only in limited amounts initially. + Your office has been working around the clock tackling a new + wave of COVID-19 spurred by a lack of compliance with public + health precautions as people moved indoors during the colder + months. Yesterday, the country reached all-time highs of 7,019 + new cases and 144 deaths. Vaccines are expected to start + becoming available in February, but only in limited amounts + initially.
- You receive a call from a rural field office that the local hospital has reported seeing over 100 patients with fever, headache and breathing difficulties last week. Due to limited lab supplies, only 37 of the patients could be tested. The swabs were sent to a private laboratory for analysis, and none of the tests were positive for COVID-19. Based on the symptoms and progression of the disease, doctors at the hospital believe the patients do have COVID-19, and they are concerned about the handling and testing protocols used for the samples. Upon checking CRVS, you find that the lab has not yet submitted the results for those tests. + You receive a call from a rural field office that the local + hospital has reported seeing over 100 patients with fever, + headache and breathing difficulties last week. Due to limited + lab supplies, only 37 of the patients could be tested. The swabs + were sent to a private laboratory for analysis, and none of the + tests were positive for COVID-19. Based on the symptoms and + progression of the disease, doctors at the hospital believe the + patients do have COVID-19, and they are concerned about the + handling and testing protocols used for the samples. Upon + checking CRVS, you find that the lab has not yet submitted the + results for those tests.
- You ask your colleague at the field office to visit the hospital and the laboratory to see if he can identify any issues with the test kits, sampling process, handling, or analysis protocols. He expresses concern about visiting the COVID ward at the hospital due to shortages of PPE. + You ask your colleague at the field office to visit the hospital + and the laboratory to see if he can identify any issues with the + test kits, sampling process, handling, or analysis protocols. He + expresses concern about visiting the COVID ward at the hospital + due to shortages of PPE.
- A breakout of COVID-19 at PTCL headquarters in Islamabad has impacted Internet reliability, causing intermittent outages, particularly in the capital. + A breakout of COVID-19 at PTCL headquarters in Islamabad has + impacted Internet reliability, causing intermittent outages, + particularly in the capital.
- Scenario Overview @@ -239,22 +272,17 @@ export default function ParticipantFlowPage() { Setting {} - + Current Activity {} - - - + + Questions - - Questions - - {/* {rolePhase && ( Role description: {rolePhase.description} @@ -268,7 +296,7 @@ export default function ParticipantFlowPage() { key={pWithOpts.prompt.prompt_id} promptWithOption={pWithOpts} answer={answers[index]} - onAnswer={(value) => handleInputAnswer(index, value)} + onAnswer={value => handleInputAnswer(index, value)} /> ))} diff --git a/app/participants/session-flow/styles.ts b/app/participants/session-flow/styles.ts index f4f6c9d3..20b25adc 100644 --- a/app/participants/session-flow/styles.ts +++ b/app/participants/session-flow/styles.ts @@ -93,7 +93,7 @@ export const ContextStyled = styled.div` flex-direction: column; align-items: flex-start; align-self: stretch; - + border-radius: 8px; background-color: ${COLORS.oat_medium}; @@ -128,7 +128,7 @@ export const ScenarioOverviewStyled = styled.h3` gap: 16px; `; -export const ScenarioOverviewTitleStyled = styled.h4` +export const ScenarioOverviewTitleStyled = styled.div` color: ${COLORS.black}; padding: 0 0 16px 0; @@ -151,7 +151,6 @@ export const ScenarioOverviewFieldsStyled = styled.div` border-radius: 8px; background-color: ${COLORS.oat_medium}; `; - export const PromptQuestionTitleStyled = styled.div` color: ${COLORS.black}; @@ -169,17 +168,18 @@ export const NextButtonContainerStyled = styled.div` display: flex; justify-content: flex-end; `; - + export const PromptQuestionStyled = styled.div` display: flex; flex-direction: row; - gap: 8px; + gap: 8px; + width: 100%; color: ${COLORS.black70}; `; export const PromptQuestionArrowStyled = styled.div` display: flex; - flex-shrink: 0; + flex-shrink: 0; color: ${COLORS.black70}; /* Body 1 */ @@ -194,6 +194,7 @@ export const PromptQuestionContentStyled = styled.div` display: flex; flex-direction: column; color: ${COLORS.black70}; + width: 100%; `; export const PromptQuestionContentTitledStyled = styled.div` diff --git a/styles/colors.ts b/styles/colors.ts index 8c5b0b9c..2eef695a 100644 --- a/styles/colors.ts +++ b/styles/colors.ts @@ -10,7 +10,7 @@ const COLORS = { oat_medium: "#EEEDE9", oat_light: "#F9F7F4", white: "#FFFFFF", - lightEletricBlue: "##DAE2E4", + lightEletricBlue: "#DAE2E4", darkElectricBlue: "#476c77", tagRed: "#EF4444", From a24bef2a9e358a32f69f9a9ed65f61ffeb042bda Mon Sep 17 00:00:00 2001 From: dionyichia Date: Thu, 12 Mar 2026 14:39:31 -0700 Subject: [PATCH 09/13] added new option field to create prompt answer to pass option id into table --- actions/supabase/queries/sessions.ts | 4 ++- app/participants/session-flow/page.tsx | 46 +++++++++++++++----------- 2 files changed, 30 insertions(+), 20 deletions(-) diff --git a/actions/supabase/queries/sessions.ts b/actions/supabase/queries/sessions.ts index 9dad19c3..72b301db 100644 --- a/actions/supabase/queries/sessions.ts +++ b/actions/supabase/queries/sessions.ts @@ -271,6 +271,7 @@ export async function createPromptAnswer( userId: string, promptId: string, answer: string, + isOption: boolean, ) { const supabase = await getSupabaseServerClient(); const { data, error } = await supabase @@ -280,7 +281,8 @@ export async function createPromptAnswer( prompt_response_id: crypto.randomUUID(), user_id: userId, prompt_id: promptId, - prompt_answer: answer, + prompt_answer: isOption ? null : answer, + prompt_option_id: isOption ? answer : null, }, ]) .select("prompt_response_id"); diff --git a/app/participants/session-flow/page.tsx b/app/participants/session-flow/page.tsx index f09402ca..3aa093fc 100644 --- a/app/participants/session-flow/page.tsx +++ b/app/participants/session-flow/page.tsx @@ -180,26 +180,38 @@ export default function ParticipantFlowPage() { }); } + async function submitTextAnswer(promptId: string, answer: string) { + console.log("trying to submit string"); + if (!userId || !answer.trim()) return; + await createPromptAnswer(userId, promptId, answer, false); + } + + async function submitOptionAnswer( + promptId: string, + answer: string | string[], + ) { + console.log("trying to submit option"); + if (!userId) return; + const optionIds = Array.isArray(answer) ? answer : [answer]; + for (const optionId of optionIds) { + await createPromptAnswer( + userId, + promptId, + optionId, + true, + ); + } + } + async function submitAnswers() { for (let i = 0; i < answers.length; i++) { const answer = answers[i]; - const promptId = promptsWithOptions[i].prompt.prompt_id; - + const { prompt_id, prompt_type } = promptsWithOptions[i].prompt; if (!userId || !answer) continue; - // TEXT or MCQ - if (typeof answer === "string") { - if (!answer.trim()) continue; - - await createPromptAnswer(userId, promptId, answer); - } - - // CHECKBOX (multiple answers) - if (Array.isArray(answer)) { - for (const optionId of answer) { - await createPromptAnswer(userId, promptId, optionId); - } - } + if (prompt_type === "multiple_choice" || prompt_type === "checkbox") + await submitOptionAnswer(prompt_id, answer); + else await submitTextAnswer(prompt_id, answer as string); } } @@ -208,10 +220,6 @@ export default function ParticipantFlowPage() { return
Loading phases...
; } - console.log("user id:", userId); - console.log("session id:", sessionId); - console.log("currentPhaseIndex:", currentPhaseIndex); - return (
From 1ed80deefc6bb7981d8dfa2575f05eee64a2f669 Mon Sep 17 00:00:00 2001 From: dionyichia Date: Thu, 12 Mar 2026 14:40:22 -0700 Subject: [PATCH 10/13] prettier --- app/participants/session-flow/page.tsx | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/app/participants/session-flow/page.tsx b/app/participants/session-flow/page.tsx index 3aa093fc..1464fe1b 100644 --- a/app/participants/session-flow/page.tsx +++ b/app/participants/session-flow/page.tsx @@ -194,12 +194,7 @@ export default function ParticipantFlowPage() { if (!userId) return; const optionIds = Array.isArray(answer) ? answer : [answer]; for (const optionId of optionIds) { - await createPromptAnswer( - userId, - promptId, - optionId, - true, - ); + await createPromptAnswer(userId, promptId, optionId, true); } } From 73c2ae1a7dcb00f418a1dc7b5ced4708e0c772b2 Mon Sep 17 00:00:00 2001 From: dionyichia Date: Sat, 14 Mar 2026 16:12:47 -0700 Subject: [PATCH 11/13] moved styles to styles file --- .../components/CheckboxPromptParticipant.tsx | 57 +------- .../MultipleChoicePromptParticipant.tsx | 58 +------- .../components/TextPromptParticipant.tsx | 34 +---- app/participants/components/styles.ts | 126 ++++++++++++++++++ 4 files changed, 141 insertions(+), 134 deletions(-) create mode 100644 app/participants/components/styles.ts diff --git a/app/participants/components/CheckboxPromptParticipant.tsx b/app/participants/components/CheckboxPromptParticipant.tsx index c6b74163..8f5022b7 100644 --- a/app/participants/components/CheckboxPromptParticipant.tsx +++ b/app/participants/components/CheckboxPromptParticipant.tsx @@ -1,53 +1,10 @@ import { Checkbox, FormControlLabel } from "@mui/material"; -import styled from "styled-components"; -import COLORS from "@/styles/colors"; -import { Sans } from "@/styles/fonts"; import { PromptOption } from "@/types/schema"; - -const CheckboxParticipantStyled = styled.div` - display: flex; - flex-direction: column; - width: 100%; - - .MuiFormGroup-root { - gap: 8px; - } -`; - -const CheckboxOptionParticipantStyled = styled.div<{ $selected: boolean }>` - display: flex; - flex-direction: row; - align-items: center; - width: 100%; - border-radius: 8px; - background-color: ${({ $selected }) => - $selected ? COLORS.lightEletricBlue : COLORS.oat_light}; - border: 1px solid - ${({ $selected }) => ($selected ? COLORS.darkElectricBlue : "transparent")}; - - .MuiFormControlLabel-root { - margin-left: 0; - width: 100%; - } - - .MuiCheckbox-root { - padding-left: 8px; - } - - .MuiCheckbox-root.Mui-checked { - color: ${COLORS.darkElectricBlue}; - } -`; - -const OptionTextStyled = styled.span<{ $selected: boolean }>` - font-family: ${Sans.style.fontFamily}; - font-size: 12px; - font-style: normal; - font-weight: 500; - line-height: 150%; - padding: 8px 0; - color: ${({ $selected }) => ($selected ? COLORS.black100 : COLORS.black70)}; -`; +import { + CheckboxOptionParticipantStyled, + CheckboxOptionTextStyled, + CheckboxParticipantStyled, +} from "./styles"; type Props = { options: PromptOption[]; @@ -86,9 +43,9 @@ export default function CheckboxPromptParticipant({ /> } label={ - + {o.option_text} - + } /> diff --git a/app/participants/components/MultipleChoicePromptParticipant.tsx b/app/participants/components/MultipleChoicePromptParticipant.tsx index 1b60a728..c9850397 100644 --- a/app/participants/components/MultipleChoicePromptParticipant.tsx +++ b/app/participants/components/MultipleChoicePromptParticipant.tsx @@ -1,54 +1,10 @@ import { FormControlLabel, Radio, RadioGroup } from "@mui/material"; -import styled from "styled-components"; -import COLORS from "@/styles/colors"; -import { Sans } from "@/styles/fonts"; import { PromptOption } from "@/types/schema"; - -const MultipleChoiceParticipantStyled = styled.div` - display: flex; - flex-direction: column; - - .MuiFormGroup-root { - gap: 8px; - } -`; - -const McqOptionParticipantStyled = styled.div<{ $selected: boolean }>` - display: fit-content; - flex-direction: row; - align-items: center; - width: 100%; - border-radius: 8px; - background-color: ${COLORS.oat_light}; - - background-color: ${({ $selected }) => - $selected ? COLORS.lightEletricBlue : COLORS.oat_light}; - border: 1px solid - ${({ $selected }) => ($selected ? COLORS.darkElectricBlue : "transparent")}; - - .MuiFormControlLabel-root { - margin-left: 0; - width: 100%; - } - - .MuiRadio-root.Mui-checked { - padding-left: 8px; - color: ${({ $selected }) => - $selected ? COLORS.darkElectricBlue : COLORS.oat_medium}; - } -`; - -const OptionTextStyled = styled.span<{ $selected: boolean }>` - font-family: ${Sans.style.fontFamily}; - font-size: 12px; - font-style: normal; - font-weight: 500; - line-height: normal; - color: ${({ $selected }) => ($selected ? COLORS.black100 : COLORS.black70)}; - line-height: 150%; /* 18px */ - padding: 8px 0; - width: 100%; -`; +import { + McqOptionParticipantStyled, + McqOptionTextStyled, + MultipleChoiceParticipantStyled, +} from "./styles"; type Props = { options: PromptOption[]; @@ -77,10 +33,10 @@ export default function MultipleChoicePromptParticipant({ value={o.option_id} control={} label={ - + {" "} {o.option_text} - + } /> diff --git a/app/participants/components/TextPromptParticipant.tsx b/app/participants/components/TextPromptParticipant.tsx index 48f9d8b1..8161d41b 100644 --- a/app/participants/components/TextPromptParticipant.tsx +++ b/app/participants/components/TextPromptParticipant.tsx @@ -1,36 +1,4 @@ -import { TextField } from "@mui/material"; -import styled from "styled-components"; -import COLORS from "@/styles/colors"; -import { Sans } from "@/styles/fonts"; - -export const TextFieldParticpantsStyled = styled(TextField)` - width: 100%; - - .MuiOutlinedInput-root { - background-color: ${COLORS.white}; - border-radius: 8px; - - fieldset { - border: 1px solid ${COLORS.black20}; // set here, not on root - } - - &:hover fieldset { - border-color: ${COLORS.black20}; - } - - &.Mui-focused fieldset { - border-color: ${COLORS.black20}; - border-width: 1px; // MUI defaults to 2px on focus - } - } - - .MuiInputBase-input { - font-size: 10px; - font-family: ${Sans.style.fontFamily}; - font-weight: 500; - color: ${COLORS.black70}; - } -`; +import { TextFieldParticpantsStyled } from "./styles"; type TextPromptParticipantProps = { value: string; diff --git a/app/participants/components/styles.ts b/app/participants/components/styles.ts new file mode 100644 index 00000000..ebbed7c9 --- /dev/null +++ b/app/participants/components/styles.ts @@ -0,0 +1,126 @@ +import { TextField } from "@mui/material"; +import styled from "styled-components"; +import COLORS from "@/styles/colors"; +import { Sans } from "@/styles/fonts"; + +export const MultipleChoiceParticipantStyled = styled.div` + display: flex; + flex-direction: column; + + .MuiFormGroup-root { + gap: 8px; + } +`; + +export const McqOptionParticipantStyled = styled.div<{ $selected: boolean }>` + display: fit-content; + flex-direction: row; + align-items: center; + width: 100%; + border-radius: 8px; + background-color: ${COLORS.oat_light}; + + background-color: ${({ $selected }) => + $selected ? COLORS.lightEletricBlue : COLORS.oat_light}; + border: 1px solid + ${({ $selected }) => ($selected ? COLORS.darkElectricBlue : "transparent")}; + + .MuiFormControlLabel-root { + margin-left: 0; + width: 100%; + } + + .MuiRadio-root.Mui-checked { + padding-left: 8px; + color: ${({ $selected }) => + $selected ? COLORS.darkElectricBlue : COLORS.oat_medium}; + } +`; + +export const McqOptionTextStyled = styled.span<{ $selected: boolean }>` + font-family: ${Sans.style.fontFamily}; + font-size: 12px; + font-style: normal; + font-weight: 500; + line-height: normal; + color: ${({ $selected }) => ($selected ? COLORS.black100 : COLORS.black70)}; + line-height: 150%; /* 18px */ + padding: 8px 0; + width: 100%; +`; + +export const CheckboxParticipantStyled = styled.div` + display: flex; + flex-direction: column; + width: 100%; + + .MuiFormGroup-root { + gap: 8px; + } +`; + +export const CheckboxOptionParticipantStyled = styled.div<{ + $selected: boolean; +}>` + display: flex; + flex-direction: row; + align-items: center; + width: 100%; + border-radius: 8px; + background-color: ${({ $selected }) => + $selected ? COLORS.lightEletricBlue : COLORS.oat_light}; + border: 1px solid + ${({ $selected }) => ($selected ? COLORS.darkElectricBlue : "transparent")}; + + .MuiFormControlLabel-root { + margin-left: 0; + width: 100%; + } + + .MuiCheckbox-root { + padding-left: 8px; + } + + .MuiCheckbox-root.Mui-checked { + color: ${COLORS.darkElectricBlue}; + } +`; + +export const CheckboxOptionTextStyled = styled.span<{ $selected: boolean }>` + font-family: ${Sans.style.fontFamily}; + font-size: 12px; + font-style: normal; + font-weight: 500; + line-height: 150%; + padding: 8px 0; + color: ${({ $selected }) => ($selected ? COLORS.black100 : COLORS.black70)}; +`; + +export const TextFieldParticpantsStyled = styled(TextField)` + width: 100%; + + .MuiOutlinedInput-root { + background-color: ${COLORS.white}; + border-radius: 8px; + + fieldset { + border: 1px solid ${COLORS.black20}; // set here, not on root + } + + &:hover fieldset { + border-color: ${COLORS.black20}; + } + + &.Mui-focused fieldset { + border-color: ${COLORS.black20}; + border-width: 1px; // MUI defaults to 2px on focus + } + } + + .MuiInputBase-input { + font-size: 10px; + font-family: ${Sans.style.fontFamily}; + font-weight: 500; + color: ${COLORS.black70}; + } +`; From 42af49674803d04d3e67ecfd84b024b0de313655 Mon Sep 17 00:00:00 2001 From: dionyichia Date: Sat, 14 Mar 2026 16:23:48 -0700 Subject: [PATCH 12/13] dep error --- pnpm-lock.yaml | 2345 +++++++++++++++++------------------------------- 1 file changed, 823 insertions(+), 1522 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index b2886b28..9a417267 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -13,35 +13,31 @@ importers: dependencies: '@base-ui-components/react': specifier: 1.0.0-rc.0 - version: 1.0.0-rc.0(@types/react@19.1.12)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + version: 1.0.0-rc.0(@types/react@19.2.7)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) '@emotion/react': specifier: ^11.14.0 - version: 11.14.0(@types/react@19.1.12)(react@19.2.4) + version: 11.14.0(@types/react@19.2.7)(react@19.2.4) '@emotion/styled': specifier: ^11.14.1 - version: 11.14.1(@emotion/react@11.14.0(@types/react@19.1.12)(react@19.2.4))(@types/react@19.1.12)(react@19.2.4) + version: 11.14.1(@emotion/react@11.14.0(@types/react@19.2.7)(react@19.2.4))(@types/react@19.2.7)(react@19.2.4) '@mui/base': specifier: 5.0.0-beta.70 - version: 5.0.0-beta.70(@types/react@19.1.12)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + version: 5.0.0-beta.70(@types/react@19.2.7)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) '@mui/material': specifier: ^7.3.9 -<<<<<<< HEAD - version: 7.3.9(@emotion/react@11.14.0(@types/react@19.2.7)(react@19.2.3))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.2.7)(react@19.2.3))(@types/react@19.2.7)(react@19.2.3))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) -======= - version: 7.3.9(@emotion/react@11.14.0(@types/react@19.1.12)(react@19.2.4))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.12)(react@19.2.4))(@types/react@19.1.12)(react@19.2.4))(@types/react@19.1.12)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) ->>>>>>> a9ae57d6a9f6590b23a901643b7d0fb9af61c6e5 + version: 7.3.9(@emotion/react@11.14.0(@types/react@19.2.7)(react@19.2.4))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.2.7)(react@19.2.4))(@types/react@19.2.7)(react@19.2.4))(@types/react@19.2.7)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) '@supabase/ssr': specifier: ^0.8.0 - version: 0.8.0(@supabase/supabase-js@2.52.1) + version: 0.8.0(@supabase/supabase-js@2.86.0) '@supabase/supabase-js': specifier: ^2.52.1 - version: 2.52.1 + version: 2.86.0 '@types/styled-components': specifier: ^5.1.36 version: 5.1.36 dotenv: specifier: ^17.2.3 - version: 17.3.1 + version: 17.2.3 immer: specifier: ^10.2.0 version: 10.2.0 @@ -53,7 +49,7 @@ importers: version: 16.1.1(react-dom@19.2.4(react@19.2.4))(react@19.2.4) npm: specifier: ^11.10.0 - version: 11.11.0 + version: 11.10.0 react: specifier: ^19.2.4 version: 19.2.4 @@ -62,26 +58,26 @@ importers: version: 19.2.4(react@19.2.4) react-icons: specifier: ^5.5.0 - version: 5.6.0(react@19.2.4) + version: 5.5.0(react@19.2.4) react-select: specifier: ^5.10.2 - version: 5.10.2(@types/react@19.1.12)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + version: 5.10.2(@types/react@19.2.7)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) styled-components: specifier: ^6.3.11 version: 6.3.11(react-dom@19.2.4(react@19.2.4))(react@19.2.4) devDependencies: '@eslint/eslintrc': specifier: ^3.3.1 - version: 3.3.1 + version: 3.3.3 '@ianvs/prettier-plugin-sort-imports': specifier: ^4.7.0 - version: 4.7.0(prettier@3.3.3) + version: 4.7.0(prettier@3.7.3) '@types/estree': specifier: ^1.0.8 version: 1.0.8 '@types/hoist-non-react-statics': specifier: ^3.3.7 - version: 3.3.7(@types/react@19.1.12) + version: 3.3.7(@types/react@19.2.7) '@types/json-schema': specifier: ^7.0.15 version: 7.0.15 @@ -90,7 +86,7 @@ importers: version: 2.2.0 '@types/node': specifier: ^20 - version: 20.16.5 + version: 20.19.25 '@types/parse-json': specifier: ^7.0.0 version: 7.0.0 @@ -99,13 +95,13 @@ importers: version: 15.7.15 '@types/react': specifier: ^19 - version: 19.1.12 + version: 19.2.7 '@types/react-dom': specifier: ^19 - version: 19.1.9(@types/react@19.1.12) + version: 19.2.3(@types/react@19.2.7) '@types/react-transition-group': specifier: ^4.4.12 - version: 4.4.12(@types/react@19.1.12) + version: 4.4.12(@types/react@19.2.7) '@types/stylis': specifier: ^4.2.7 version: 4.2.7 @@ -114,37 +110,37 @@ importers: version: 8.18.1 '@typescript-eslint/eslint-plugin': specifier: ^8.41.0 - version: 8.41.0(@typescript-eslint/parser@8.41.0(eslint@9.39.4)(typescript@5.6.2))(eslint@9.39.4)(typescript@5.6.2) + version: 8.48.0(@typescript-eslint/parser@8.48.0(eslint@9.39.1)(typescript@5.9.3))(eslint@9.39.1)(typescript@5.9.3) '@typescript-eslint/parser': specifier: ^8.41.0 - version: 8.41.0(eslint@9.39.4)(typescript@5.6.2) + version: 8.48.0(eslint@9.39.1)(typescript@5.9.3) concurrently: specifier: ^9.2.1 version: 9.2.1 eslint: specifier: ^9.39.1 - version: 9.39.4 + version: 9.39.1 eslint-config-next: specifier: 15.5.2 - version: 15.5.2(eslint@9.39.4)(typescript@5.6.2) + version: 15.5.2(eslint@9.39.1)(typescript@5.9.3) eslint-config-prettier: specifier: ^10.1.8 - version: 10.1.8(eslint@9.39.4) + version: 10.1.8(eslint@9.39.1) eslint-plugin-prettier: specifier: ^5.5.4 - version: 5.5.4(eslint-config-prettier@10.1.8(eslint@9.39.4))(eslint@9.39.4)(prettier@3.3.3) + version: 5.5.4(eslint-config-prettier@10.1.8(eslint@9.39.1))(eslint@9.39.1)(prettier@3.7.3) husky: specifier: ^9.1.5 - version: 9.1.6 + version: 9.1.7 prettier: specifier: ^3.3.3 - version: 3.3.3 + version: 3.7.3 supabase: specifier: ^2.76.15 - version: 2.77.0 + version: 2.76.15 typescript: specifier: ^5 - version: 5.6.2 + version: 5.9.3 packages: @@ -152,50 +148,33 @@ packages: resolution: {integrity: sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==} engines: {node: '>=6.9.0'} - '@babel/code-frame@7.29.0': - resolution: {integrity: sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==} - engines: {node: '>=6.9.0'} - - '@babel/generator@7.28.3': - resolution: {integrity: sha512-3lSpxGgvnmZznmBkCRnVREPUFJv2wrv9iAoFDvADJc0ypmdOxdUtcLeBgBJ6zE0PMeTKnxeQzyk0xTBq4Ep7zw==} - engines: {node: '>=6.9.0'} - - '@babel/generator@7.29.1': - resolution: {integrity: sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw==} + '@babel/generator@7.28.5': + resolution: {integrity: sha512-3EwLFhZ38J4VyIP6WNtt2kUdW9dokXA9Cr4IVIFHuCpZ3H8/YFOl5JjZHisrn1fATPBmKKqXzDFvh9fUwHz6CQ==} engines: {node: '>=6.9.0'} '@babel/helper-globals@7.28.0': resolution: {integrity: sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==} engines: {node: '>=6.9.0'} - '@babel/helper-module-imports@7.28.6': - resolution: {integrity: sha512-l5XkZK7r7wa9LucGw9LwZyyCUscb4x37JWTPz7swwFE/0FMQAGpiWUZn8u9DzkSBWEcK25jmvubfpw2dnAMdbw==} + '@babel/helper-module-imports@7.27.1': + resolution: {integrity: sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==} engines: {node: '>=6.9.0'} '@babel/helper-string-parser@7.27.1': resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==} engines: {node: '>=6.9.0'} - '@babel/helper-validator-identifier@7.27.1': - resolution: {integrity: sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==} - engines: {node: '>=6.9.0'} - '@babel/helper-validator-identifier@7.28.5': resolution: {integrity: sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==} engines: {node: '>=6.9.0'} - '@babel/parser@7.28.3': - resolution: {integrity: sha512-7+Ey1mAgYqFAx2h0RuoxcQT5+MlG3GTV0TQrgr7/ZliKsm/MNDxVVutlWaziMq7wJNAz8MTqz55XLpWvva6StA==} + '@babel/parser@7.28.5': + resolution: {integrity: sha512-KKBU1VGYR7ORr3At5HAtUQ+TV3SzRCXmA/8OdDZiLDBIZxVyzXuztPjfLd3BV1PRAQGCMWWSHYhL0F8d5uHBDQ==} engines: {node: '>=6.0.0'} hasBin: true - '@babel/parser@7.29.0': - resolution: {integrity: sha512-IyDgFV5GeDUVX4YdF/3CPULtVGSXXMLh1xVIgdCgxApktqnQV0r7/8Nqthg+8YLGaAtdyIlo2qIdZrbCv4+7ww==} - engines: {node: '>=6.0.0'} - hasBin: true - - '@babel/runtime@7.28.6': - resolution: {integrity: sha512-05WQkdpL9COIMz4LjTxGpPNCdlpyimKppYNoJ5Di5EUObifl8t4tuLuUBBZEpoLYOmfvIWrsp9fCl0HoPRVTdA==} + '@babel/runtime@7.28.4': + resolution: {integrity: sha512-Q/N6JNWvIvPnLDvjlE1OUBLPQHH6l3CltCEsHIujp45zQUSSh8K+gHnaEX45yAT1nyngnINhvWtzN+Nb9D8RAQ==} engines: {node: '>=6.9.0'} '@babel/runtime@7.28.6': @@ -206,24 +185,12 @@ packages: resolution: {integrity: sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==} engines: {node: '>=6.9.0'} - '@babel/template@7.28.6': - resolution: {integrity: sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==} - engines: {node: '>=6.9.0'} - - '@babel/traverse@7.28.3': - resolution: {integrity: sha512-7w4kZYHneL3A6NP2nxzHvT3HCZ7puDZZjFMqDpBPECub79sTtSO5CGXDkKrTQq8ksAwfD/XI2MRFX23njdDaIQ==} - engines: {node: '>=6.9.0'} - - '@babel/traverse@7.29.0': - resolution: {integrity: sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA==} - engines: {node: '>=6.9.0'} - - '@babel/types@7.28.2': - resolution: {integrity: sha512-ruv7Ae4J5dUYULmeXw1gmb7rYRz57OWCPM57pHojnLq/3Z1CK2lNSLTCVjxVk1F/TZHwOZZrOWi0ur95BbLxNQ==} + '@babel/traverse@7.28.5': + resolution: {integrity: sha512-TCCj4t55U90khlYkVV/0TfkJkAkUg3jZFA3Neb7unZT8CPok7iiRfaX0F+WnqWqt7OxhOn0uBKXCw4lbL8W0aQ==} engines: {node: '>=6.9.0'} - '@babel/types@7.29.0': - resolution: {integrity: sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==} + '@babel/types@7.28.5': + resolution: {integrity: sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA==} engines: {node: '>=6.9.0'} '@base-ui-components/react@1.0.0-rc.0': @@ -249,9 +216,15 @@ packages: '@types/react': optional: true + '@emnapi/core@1.8.1': + resolution: {integrity: sha512-AvT9QFpxK0Zd8J0jopedNm+w/2fIzvtPKPjqyw9jwvBaReTTqPBk9Hixaz7KbjimP+QNz605/XnjFcDAL2pqBg==} + '@emnapi/runtime@1.8.1': resolution: {integrity: sha512-mehfKSMWjjNol8659Z8KxEMrdSJDDot5SXMq00dM8BN4o+CLNXQ0xH2V7EchNHV4RmbZLmmPdEaXZc5H2FXmDg==} + '@emnapi/wasi-threads@1.1.0': + resolution: {integrity: sha512-WI0DdZ8xFSbgMjR1sFsKABJ/C5OnRrjT06JXbZKexJGrDuPTzZdDYfFlsgcCXCyf+suG5QU2e/y1Wo2V/OapLQ==} + '@emotion/babel-plugin@11.13.5': resolution: {integrity: sha512-pxHCpT2ex+0q+HH91/zsdHkw/lXd468DIN2zvfvLtPKLLMo6gQj7oLObq8PhkrxOZb/gGCq03S3Z7PDhS8pduQ==} @@ -306,24 +279,18 @@ packages: '@emotion/weak-memoize@0.4.0': resolution: {integrity: sha512-snKqtPW01tN0ui7yu9rGv69aJXr/a/Ywvl11sUjNtEcRc+ng/mQriFL0wLXMef74iHa/EkftbDzU9F8iFbH+zg==} - '@eslint-community/eslint-utils@4.7.0': - resolution: {integrity: sha512-dyybb3AcajC7uha6CvhdVRJqaKyn7w2YKqKyAN37NKYgZT36w+iRb0Dymmc5qEJ549c/S31cMMSFd75bteCpCw==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 - - '@eslint-community/eslint-utils@4.9.1': - resolution: {integrity: sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==} + '@eslint-community/eslint-utils@4.9.0': + resolution: {integrity: sha512-ayVFHdtZ+hsq1t2Dy24wCmGXGe4q9Gu3smhLYALJrr473ZH27MsnSL+LKUlimp4BWJqMDMLmPpx/Q9R3OAlL4g==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 - '@eslint-community/regexpp@4.12.1': - resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==} + '@eslint-community/regexpp@4.12.2': + resolution: {integrity: sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} - '@eslint/config-array@0.21.2': - resolution: {integrity: sha512-nJl2KGTlrf9GjLimgIru+V/mzgSK0ABCDQRvxw5BjURL7WfH5uoWmizbH7QB6MmnMBd8cIC9uceWnezL1VZWWw==} + '@eslint/config-array@0.21.1': + resolution: {integrity: sha512-aw1gNayWpdI/jSYVgzN5pL0cfzU02GT3NBpeT/DXbx1/1x7ZKxFPd9bwrzygx/qiwIQiJ1sw/zD8qY/kRvlGHA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@eslint/config-helpers@0.4.2': @@ -334,16 +301,12 @@ packages: resolution: {integrity: sha512-yL/sLrpmtDaFEiUj1osRP4TI2MDz1AddJL+jZ7KSqvBuliN4xqYY54IfdN8qD8Toa6g1iloph1fxQNkjOxrrpQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/eslintrc@3.3.1': - resolution: {integrity: sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@eslint/eslintrc@3.3.5': - resolution: {integrity: sha512-4IlJx0X0qftVsN5E+/vGujTRIFtwuLbNsVUe7TO6zYPDR1O6nFwvwhIKEKSrl6dZchmYBITazxKoUYOjdtjlRg==} + '@eslint/eslintrc@3.3.3': + resolution: {integrity: sha512-Kr+LPIUVKz2qkx1HAMH8q1q6azbqBAsXJUxBl/ODDuVPX45Z9DfwB8tPjTi6nNZ8BuM3nbJxC5zCAg5elnBUTQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/js@9.39.4': - resolution: {integrity: sha512-nE7DEIchvtiFTwBw4Lfbu59PG+kCofhjsKaCWzxTpt4lfRjRMqG6uMBzKXuEcyXhOHoUp9riAm7/aWYGhXZ9cw==} + '@eslint/js@9.39.1': + resolution: {integrity: sha512-S26Stp4zCy88tH94QbBv3XCuzRQiZ9yXofEILmglYTh/Ug/a9/umqvgFtYBAo3Lp0nsI/5/qH1CCrbdK3AP1Tw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@eslint/object-schema@2.1.7': @@ -354,37 +317,39 @@ packages: resolution: {integrity: sha512-43/qtrDUokr7LJqoF2c3+RInu/t4zfrpYdoSDfYyhg52rwLV6TnOvdG4fXm7IkSB3wErkcmJS9iEhjVtOSEjjA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@floating-ui/core@1.7.5': - resolution: {integrity: sha512-1Ih4WTWyw0+lKyFMcBHGbb5U5FtuHJuujoyyr5zTaWS5EYMeT6Jb2AuDeftsCsEuchO+mM2ij5+q9crhydzLhQ==} + '@floating-ui/core@1.7.3': + resolution: {integrity: sha512-sGnvb5dmrJaKEZ+LDIpguvdX3bDlEllmv4/ClQ9awcmCZrlx5jQyyMWFM5kBI+EyNOCDDiKk8il0zeuX3Zlg/w==} + + '@floating-ui/core@1.7.4': + resolution: {integrity: sha512-C3HlIdsBxszvm5McXlB8PeOEWfBhcGBTZGkGlWc2U0KFY5IwG5OQEuQ8rq52DZmcHDlPLd+YFBK+cZcytwIFWg==} - '@floating-ui/dom@1.7.6': - resolution: {integrity: sha512-9gZSAI5XM36880PPMm//9dfiEngYoC6Am2izES1FF406YFsjvyBMmeJ2g4SAju3xWwtuynNRFL2s9hgxpLI5SQ==} + '@floating-ui/dom@1.7.4': + resolution: {integrity: sha512-OOchDgh4F2CchOX94cRVqhvy7b3AFb+/rQXyswmzmGakRfkMgoWVjfnLWkRirfLEfuD4ysVW16eXzwt3jHIzKA==} - '@floating-ui/react-dom@2.1.8': - resolution: {integrity: sha512-cC52bHwM/n/CxS87FH0yWdngEZrjdtLW/qVruo68qg+prK7ZQ4YGdut2GyDVpoGeAYe/h899rVeOVm6Oi40k2A==} + '@floating-ui/dom@1.7.5': + resolution: {integrity: sha512-N0bD2kIPInNHUHehXhMke1rBGs1dwqvC9O9KYMyyjK7iXt7GAhnro7UlcuYcGdS/yYOlq0MAVgrow8IbWJwyqg==} + + '@floating-ui/react-dom@2.1.7': + resolution: {integrity: sha512-0tLRojf/1Go2JgEVm+3Frg9A3IW8bJgKgdO0BN5RkF//ufuz2joZM63Npau2ff3J6lUVYgDSNzNkR+aH3IVfjg==} peerDependencies: react: '>=16.8.0' react-dom: '>=16.8.0' - '@floating-ui/utils@0.2.11': - resolution: {integrity: sha512-RiB/yIh78pcIxl6lLMG0CgBXAZ2Y0eVHqMPYugu+9U0AeT6YBeiJpf7lbdJNIugFP5SIjwNRgo4DhR1Qxi26Gg==} + '@floating-ui/utils@0.2.10': + resolution: {integrity: sha512-aGTxbpbg8/b5JfU1HXSrbH3wXZuLPJcNEcZQFMxLs3oSzgtVu6nFPkbbGGUvBcUjKV2YyB9Wxxabo+HEH9tcRQ==} '@humanfs/core@0.19.1': resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==} engines: {node: '>=18.18.0'} - '@humanfs/node@0.16.6': - resolution: {integrity: sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==} + '@humanfs/node@0.16.7': + resolution: {integrity: sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ==} engines: {node: '>=18.18.0'} '@humanwhocodes/module-importer@1.0.1': resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} engines: {node: '>=12.22'} - '@humanwhocodes/retry@0.3.1': - resolution: {integrity: sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==} - engines: {node: '>=18.18'} - '@humanwhocodes/retry@0.4.3': resolution: {integrity: sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==} engines: {node: '>=18.18'} @@ -407,8 +372,8 @@ packages: prettier-plugin-ember-template-tag: optional: true - '@img/colour@1.1.0': - resolution: {integrity: sha512-Td76q7j57o/tLVdgS746cYARfSyxk8iEfRxewL9h4OMzYhbW4TAcppl0mT4eyqXddh6L/jwoM75mo7ixa/pCeQ==} + '@img/colour@1.0.0': + resolution: {integrity: sha512-A5P/LfWGFSl6nsckYtjw9da+19jB8hkJ6ACTGcDfEJ0aE+l2n2El7dsVM7UVHZQ9s2lmYMWlrS21YLy2IR1LUw==} engines: {node: '>=18'} '@img/sharp-darwin-arm64@0.34.5': @@ -555,11 +520,11 @@ packages: resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} engines: {node: '>=6.0.0'} - '@jridgewell/sourcemap-codec@1.5.0': - resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} + '@jridgewell/sourcemap-codec@1.5.5': + resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==} - '@jridgewell/trace-mapping@0.3.30': - resolution: {integrity: sha512-GQ7Nw5G2lTu/BtHTKfXhKHok2WGetd4XYcVKGx00SjAk8GMwgJM3zr6zORiPGuOE+/vkc90KtTosSSvaCjKb2Q==} + '@jridgewell/trace-mapping@0.3.31': + resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==} '@mui/base@5.0.0-beta.70': resolution: {integrity: sha512-Tb/BIhJzb0pa5zv/wu7OdokY9ZKEDqcu1BDFnohyvGCoHuSXbEr90rPq1qeNW3XvTBIbNWHEF7gqge+xpUo6tQ==} @@ -671,6 +636,9 @@ packages: '@types/react': optional: true + '@napi-rs/wasm-runtime@0.2.12': + resolution: {integrity: sha512-ZVWUcfwY4E/yPitQJl481FjFo3K22D6qF0DuFH6Y/nbnE11GY5uguDxZMGXPQ8WQ0128MXQD7TnfHyK4oWoIJQ==} + '@next/env@16.1.1': resolution: {integrity: sha512-3oxyM97Sr2PqiVyMyrZUtrtM3jqqFxOQJVuKclDsgj/L728iZt/GyslkN4NwarledZATCenbk4Offjk1hQmaAA==} @@ -751,39 +719,44 @@ packages: '@rtsao/scc@1.1.0': resolution: {integrity: sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==} - '@rushstack/eslint-patch@1.10.4': - resolution: {integrity: sha512-WJgX9nzTqknM393q1QJDJmoW28kUfEnybeTfVNcNAPnIx210RXm2DiXiHzfNPJNIUUb1tJnz/l4QGtJ30PgWmA==} + '@rushstack/eslint-patch@1.15.0': + resolution: {integrity: sha512-ojSshQPKwVvSMR8yT2L/QtUkV5SXi/IfDiJ4/8d6UbTPjiHVmxZzUAzGD8Tzks1b9+qQkZa0isUOvYObedITaw==} - '@supabase/auth-js@2.71.1': - resolution: {integrity: sha512-mMIQHBRc+SKpZFRB2qtupuzulaUhFYupNyxqDj5Jp/LyPvcWvjaJzZzObv6URtL/O6lPxkanASnotGtNpS3H2Q==} + '@supabase/auth-js@2.86.0': + resolution: {integrity: sha512-3xPqMvBWC6Haqpr6hEWmSUqDq+6SA1BAEdbiaHdAZM9QjZ5uiQJ+6iD9pZOzOa6MVXZh4GmwjhC9ObIG0K1NcA==} + engines: {node: '>=20.0.0'} - '@supabase/functions-js@2.4.5': - resolution: {integrity: sha512-v5GSqb9zbosquTo6gBwIiq7W9eQ7rE5QazsK/ezNiQXdCbY+bH8D9qEaBIkhVvX4ZRW5rP03gEfw5yw9tiq4EQ==} + '@supabase/functions-js@2.86.0': + resolution: {integrity: sha512-AlOoVfeaq9XGlBFIyXTmb+y+CZzxNO4wWbfgRM6iPpNU5WCXKawtQYSnhivi3UVxS7GA0rWovY4d6cIAxZAojA==} + engines: {node: '>=20.0.0'} - '@supabase/node-fetch@2.6.15': - resolution: {integrity: sha512-1ibVeYUacxWYi9i0cf5efil6adJ9WRyZBLivgjs+AUpewx1F3xPi7gLgaASI2SmIQxPoCEjAsLAzKPgMJVgOUQ==} - engines: {node: 4.x || >=6.0.0} + '@supabase/postgrest-js@2.86.0': + resolution: {integrity: sha512-QVf+wIXILcZJ7IhWhWn+ozdf8B+oO0Ulizh2AAPxD/6nQL+x3r9lJ47a+fpc/jvAOGXMbkeW534Kw6jz7e8iIA==} + engines: {node: '>=20.0.0'} - '@supabase/postgrest-js@1.19.4': - resolution: {integrity: sha512-O4soKqKtZIW3olqmbXXbKugUtByD2jPa8kL2m2c1oozAO11uCcGrRhkZL0kVxjBLrXHE0mdSkFsMj7jDSfyNpw==} - - '@supabase/realtime-js@2.11.15': - resolution: {integrity: sha512-HQKRnwAqdVqJW/P9TjKVK+/ETpW4yQ8tyDPPtRMKOH4Uh3vQD74vmj353CYs8+YwVBKubeUOOEpI9CT8mT4obw==} + '@supabase/realtime-js@2.86.0': + resolution: {integrity: sha512-dyS8bFoP29R/sj5zLi0AP3JfgG8ar1nuImcz5jxSx7UIW7fbFsXhUCVrSY2Ofo0+Ev6wiATiSdBOzBfWaiFyPA==} + engines: {node: '>=20.0.0'} '@supabase/ssr@0.8.0': resolution: {integrity: sha512-/PKk8kNFSs8QvvJ2vOww1mF5/c5W8y42duYtXvkOSe+yZKRgTTZywYG2l41pjhNomqESZCpZtXuWmYjFRMV+dw==} peerDependencies: '@supabase/supabase-js': ^2.76.1 - '@supabase/storage-js@2.7.1': - resolution: {integrity: sha512-asYHcyDR1fKqrMpytAS1zjyEfvxuOIp1CIXX7ji4lHHcJKqyk+sLl/Vxgm4sN6u8zvuUtae9e4kDxQP2qrwWBA==} + '@supabase/storage-js@2.86.0': + resolution: {integrity: sha512-PM47jX/Mfobdtx7NNpoj9EvlrkapAVTQBZgGGslEXD6NS70EcGjhgRPBItwHdxZPM5GwqQ0cGMN06uhjeY2mHQ==} + engines: {node: '>=20.0.0'} - '@supabase/supabase-js@2.52.1': - resolution: {integrity: sha512-IxYljprgl381j4SuFrW4JimjTb59WJ98DqxhMvEOJjpGJWuZ7kwttIWn7E4NBnvkYwZ948zJkJ7dSI6B0oO0Xw==} + '@supabase/supabase-js@2.86.0': + resolution: {integrity: sha512-BaC9sv5+HGNy1ulZwY8/Ev7EjfYYmWD4fOMw9bDBqTawEj6JHAiOHeTwXLRzVaeSay4p17xYLN2NSCoGgXMQnw==} + engines: {node: '>=20.0.0'} '@swc/helpers@0.5.15': resolution: {integrity: sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==} + '@tybys/wasm-util@0.10.1': + resolution: {integrity: sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==} + '@types/estree@1.0.8': resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} @@ -802,8 +775,8 @@ packages: resolution: {integrity: sha512-NrVug5woqbvNZ0WX+Gv4R+L4TGddtmFek2u8RtccAgFZWtS9QXF2xCXY22/M4nzkaKF0q9Fc6M/5rxLDhfwc/A==} deprecated: This is a stub types definition. json5 provides its own type definitions, so you do not need this installed. - '@types/node@20.16.5': - resolution: {integrity: sha512-VwYCweNo3ERajwy0IUlqqcyZ8/A7Zwa9ZP3MnENWcB11AejO+tLy3pu850goUW2FC/IJMdZUfKpX/yxL1gymCA==} + '@types/node@20.19.25': + resolution: {integrity: sha512-ZsJzA5thDQMSQO788d7IocwwQbI8B5OPzmqNvpf3NY/+MHDAS759Wo0gd2WQeXYt5AAAQjzcrTVC6SKCuYgoCQ==} '@types/parse-json@4.0.2': resolution: {integrity: sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==} @@ -818,18 +791,18 @@ packages: '@types/prop-types@15.7.15': resolution: {integrity: sha512-F6bEyamV9jKGAFBEmlQnesRPGOQqS2+Uwi0Em15xenOxHaf2hv6L8YCVn3rPdPJOiJfPiCnLIRyvwVaqMY3MIw==} - '@types/react-dom@19.1.9': - resolution: {integrity: sha512-qXRuZaOsAdXKFyOhRBg6Lqqc0yay13vN7KrIg4L7N4aaHN68ma9OK3NE1BoDFgFOTfM7zg+3/8+2n8rLUH3OKQ==} + '@types/react-dom@19.2.3': + resolution: {integrity: sha512-jp2L/eY6fn+KgVVQAOqYItbF0VY/YApe5Mz2F0aykSO8gx31bYCZyvSeYxCHKvzHG5eZjc+zyaS5BrBWya2+kQ==} peerDependencies: - '@types/react': ^19.0.0 + '@types/react': ^19.2.0 '@types/react-transition-group@4.4.12': resolution: {integrity: sha512-8TV6R3h2j7a91c+1DXdJi3Syo69zzIZbz7Lg5tORM5LEJG7X/E6a1V3drRyBRZq7/utz7A+c4OgYLiLcYGHG6w==} peerDependencies: '@types/react': '*' - '@types/react@19.1.12': - resolution: {integrity: sha512-cMoR+FoAf/Jyq6+Df2/Z41jISvGZZ2eTlnsaJRptmZ76Caldwy1odD4xTr/gNV9VLj0AWgg/nmkevIyUfIIq5w==} + '@types/react@19.2.7': + resolution: {integrity: sha512-MWtvHrGZLFttgeEj28VXHxpmwYbor/ATPYbBfSFZEIRK0ecCFLl2Qo55z52Hss+UV9CRN7trSeq1zbgx7YDWWg==} '@types/styled-components@5.1.36': resolution: {integrity: sha512-pGMRNY5G2rNDKEv2DOiFYa7Ft1r0jrhmgBwHhOMzPTgCjO76bCot0/4uEfqj7K0Jf1KdQmDtAuaDk9EAs9foSw==} @@ -840,65 +813,160 @@ packages: '@types/ws@8.18.1': resolution: {integrity: sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==} - '@typescript-eslint/eslint-plugin@8.41.0': - resolution: {integrity: sha512-8fz6oa6wEKZrhXWro/S3n2eRJqlRcIa6SlDh59FXJ5Wp5XRZ8B9ixpJDcjadHq47hMx0u+HW6SNa6LjJQ6NLtw==} + '@typescript-eslint/eslint-plugin@8.48.0': + resolution: {integrity: sha512-XxXP5tL1txl13YFtrECECQYeZjBZad4fyd3cFV4a19LkAY/bIp9fev3US4S5fDVV2JaYFiKAZ/GRTOLer+mbyQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - '@typescript-eslint/parser': ^8.41.0 + '@typescript-eslint/parser': ^8.48.0 eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/parser@8.41.0': - resolution: {integrity: sha512-gTtSdWX9xiMPA/7MV9STjJOOYtWwIJIYxkQxnSV1U3xcE+mnJSH3f6zI0RYP+ew66WSlZ5ed+h0VCxsvdC1jJg==} + '@typescript-eslint/parser@8.48.0': + resolution: {integrity: sha512-jCzKdm/QK0Kg4V4IK/oMlRZlY+QOcdjv89U2NgKHZk1CYTj82/RVSx1mV/0gqCVMJ/DA+Zf/S4NBWNF8GQ+eqQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/project-service@8.41.0': - resolution: {integrity: sha512-b8V9SdGBQzQdjJ/IO3eDifGpDBJfvrNTp2QD9P2BeqWTGrRibgfgIlBSw6z3b6R7dPzg752tOs4u/7yCLxksSQ==} + '@typescript-eslint/project-service@8.48.0': + resolution: {integrity: sha512-Ne4CTZyRh1BecBf84siv42wv5vQvVmgtk8AuiEffKTUo3DrBaGYZueJSxxBZ8fjk/N3DrgChH4TOdIOwOwiqqw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/scope-manager@8.41.0': - resolution: {integrity: sha512-n6m05bXn/Cd6DZDGyrpXrELCPVaTnLdPToyhBoFkLIMznRUQUEQdSp96s/pcWSQdqOhrgR1mzJ+yItK7T+WPMQ==} + '@typescript-eslint/scope-manager@8.48.0': + resolution: {integrity: sha512-uGSSsbrtJrLduti0Q1Q9+BF1/iFKaxGoQwjWOIVNJv0o6omrdyR8ct37m4xIl5Zzpkp69Kkmvom7QFTtue89YQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/tsconfig-utils@8.41.0': - resolution: {integrity: sha512-TDhxYFPUYRFxFhuU5hTIJk+auzM/wKvWgoNYOPcOf6i4ReYlOoYN8q1dV5kOTjNQNJgzWN3TUUQMtlLOcUgdUw==} + '@typescript-eslint/tsconfig-utils@8.48.0': + resolution: {integrity: sha512-WNebjBdFdyu10sR1M4OXTt2OkMd5KWIL+LLfeH9KhgP+jzfDV/LI3eXzwJ1s9+Yc0Kzo2fQCdY/OpdusCMmh6w==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/type-utils@8.41.0': - resolution: {integrity: sha512-63qt1h91vg3KsjVVonFJWjgSK7pZHSQFKH6uwqxAH9bBrsyRhO6ONoKyXxyVBzG1lJnFAJcKAcxLS54N1ee1OQ==} + '@typescript-eslint/type-utils@8.48.0': + resolution: {integrity: sha512-zbeVaVqeXhhab6QNEKfK96Xyc7UQuoFWERhEnj3mLVnUWrQnv15cJNseUni7f3g557gm0e46LZ6IJ4NJVOgOpw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/types@8.41.0': - resolution: {integrity: sha512-9EwxsWdVqh42afLbHP90n2VdHaWU/oWgbH2P0CfcNfdKL7CuKpwMQGjwev56vWu9cSKU7FWSu6r9zck6CVfnag==} + '@typescript-eslint/types@8.48.0': + resolution: {integrity: sha512-cQMcGQQH7kwKoVswD1xdOytxQR60MWKM1di26xSUtxehaDs/32Zpqsu5WJlXTtTTqyAVK8R7hvsUnIXRS+bjvA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/typescript-estree@8.41.0': - resolution: {integrity: sha512-D43UwUYJmGhuwHfY7MtNKRZMmfd8+p/eNSfFe6tH5mbVDto+VQCayeAt35rOx3Cs6wxD16DQtIKw/YXxt5E0UQ==} + '@typescript-eslint/typescript-estree@8.48.0': + resolution: {integrity: sha512-ljHab1CSO4rGrQIAyizUS6UGHHCiAYhbfcIZ1zVJr5nMryxlXMVWS3duFPSKvSUbFPwkXMFk1k0EMIjub4sRRQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/utils@8.41.0': - resolution: {integrity: sha512-udbCVstxZ5jiPIXrdH+BZWnPatjlYwJuJkDA4Tbo3WyYLh8NvB+h/bKeSZHDOFKfphsZYJQqaFtLeXEqurQn1A==} + '@typescript-eslint/utils@8.48.0': + resolution: {integrity: sha512-yTJO1XuGxCsSfIVt1+1UrLHtue8xz16V8apzPYI06W0HbEbEWHxHXgZaAgavIkoh+GeV6hKKd5jm0sS6OYxWXQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/visitor-keys@8.41.0': - resolution: {integrity: sha512-+GeGMebMCy0elMNg67LRNoVnUFPIm37iu5CmHESVx56/9Jsfdpsvbv605DQ81Pi/x11IdKUsS5nzgTYbCQU9fg==} + '@typescript-eslint/visitor-keys@8.48.0': + resolution: {integrity: sha512-T0XJMaRPOH3+LBbAfzR2jalckP1MSG/L9eUtY0DEzUyVaXJ/t6zN0nR7co5kz0Jko/nkSYCBRkz1djvjajVTTg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@unrs/resolver-binding-android-arm-eabi@1.11.1': + resolution: {integrity: sha512-ppLRUgHVaGRWUx0R0Ut06Mjo9gBaBkg3v/8AxusGLhsIotbBLuRk51rAzqLC8gq6NyyAojEXglNjzf6R948DNw==} + cpu: [arm] + os: [android] + + '@unrs/resolver-binding-android-arm64@1.11.1': + resolution: {integrity: sha512-lCxkVtb4wp1v+EoN+HjIG9cIIzPkX5OtM03pQYkG+U5O/wL53LC4QbIeazgiKqluGeVEeBlZahHalCaBvU1a2g==} + cpu: [arm64] + os: [android] + + '@unrs/resolver-binding-darwin-arm64@1.11.1': + resolution: {integrity: sha512-gPVA1UjRu1Y/IsB/dQEsp2V1pm44Of6+LWvbLc9SDk1c2KhhDRDBUkQCYVWe6f26uJb3fOK8saWMgtX8IrMk3g==} + cpu: [arm64] + os: [darwin] + + '@unrs/resolver-binding-darwin-x64@1.11.1': + resolution: {integrity: sha512-cFzP7rWKd3lZaCsDze07QX1SC24lO8mPty9vdP+YVa3MGdVgPmFc59317b2ioXtgCMKGiCLxJ4HQs62oz6GfRQ==} + cpu: [x64] + os: [darwin] + + '@unrs/resolver-binding-freebsd-x64@1.11.1': + resolution: {integrity: sha512-fqtGgak3zX4DCB6PFpsH5+Kmt/8CIi4Bry4rb1ho6Av2QHTREM+47y282Uqiu3ZRF5IQioJQ5qWRV6jduA+iGw==} + cpu: [x64] + os: [freebsd] + + '@unrs/resolver-binding-linux-arm-gnueabihf@1.11.1': + resolution: {integrity: sha512-u92mvlcYtp9MRKmP+ZvMmtPN34+/3lMHlyMj7wXJDeXxuM0Vgzz0+PPJNsro1m3IZPYChIkn944wW8TYgGKFHw==} + cpu: [arm] + os: [linux] + + '@unrs/resolver-binding-linux-arm-musleabihf@1.11.1': + resolution: {integrity: sha512-cINaoY2z7LVCrfHkIcmvj7osTOtm6VVT16b5oQdS4beibX2SYBwgYLmqhBjA1t51CarSaBuX5YNsWLjsqfW5Cw==} + cpu: [arm] + os: [linux] + + '@unrs/resolver-binding-linux-arm64-gnu@1.11.1': + resolution: {integrity: sha512-34gw7PjDGB9JgePJEmhEqBhWvCiiWCuXsL9hYphDF7crW7UgI05gyBAi6MF58uGcMOiOqSJ2ybEeCvHcq0BCmQ==} + cpu: [arm64] + os: [linux] + + '@unrs/resolver-binding-linux-arm64-musl@1.11.1': + resolution: {integrity: sha512-RyMIx6Uf53hhOtJDIamSbTskA99sPHS96wxVE/bJtePJJtpdKGXO1wY90oRdXuYOGOTuqjT8ACccMc4K6QmT3w==} + cpu: [arm64] + os: [linux] + + '@unrs/resolver-binding-linux-ppc64-gnu@1.11.1': + resolution: {integrity: sha512-D8Vae74A4/a+mZH0FbOkFJL9DSK2R6TFPC9M+jCWYia/q2einCubX10pecpDiTmkJVUH+y8K3BZClycD8nCShA==} + cpu: [ppc64] + os: [linux] + + '@unrs/resolver-binding-linux-riscv64-gnu@1.11.1': + resolution: {integrity: sha512-frxL4OrzOWVVsOc96+V3aqTIQl1O2TjgExV4EKgRY09AJ9leZpEg8Ak9phadbuX0BA4k8U5qtvMSQQGGmaJqcQ==} + cpu: [riscv64] + os: [linux] + + '@unrs/resolver-binding-linux-riscv64-musl@1.11.1': + resolution: {integrity: sha512-mJ5vuDaIZ+l/acv01sHoXfpnyrNKOk/3aDoEdLO/Xtn9HuZlDD6jKxHlkN8ZhWyLJsRBxfv9GYM2utQ1SChKew==} + cpu: [riscv64] + os: [linux] + + '@unrs/resolver-binding-linux-s390x-gnu@1.11.1': + resolution: {integrity: sha512-kELo8ebBVtb9sA7rMe1Cph4QHreByhaZ2QEADd9NzIQsYNQpt9UkM9iqr2lhGr5afh885d/cB5QeTXSbZHTYPg==} + cpu: [s390x] + os: [linux] + + '@unrs/resolver-binding-linux-x64-gnu@1.11.1': + resolution: {integrity: sha512-C3ZAHugKgovV5YvAMsxhq0gtXuwESUKc5MhEtjBpLoHPLYM+iuwSj3lflFwK3DPm68660rZ7G8BMcwSro7hD5w==} + cpu: [x64] + os: [linux] + + '@unrs/resolver-binding-linux-x64-musl@1.11.1': + resolution: {integrity: sha512-rV0YSoyhK2nZ4vEswT/QwqzqQXw5I6CjoaYMOX0TqBlWhojUf8P94mvI7nuJTeaCkkds3QE4+zS8Ko+GdXuZtA==} + cpu: [x64] + os: [linux] + + '@unrs/resolver-binding-wasm32-wasi@1.11.1': + resolution: {integrity: sha512-5u4RkfxJm+Ng7IWgkzi3qrFOvLvQYnPBmjmZQ8+szTK/b31fQCnleNl1GgEt7nIsZRIf5PLhPwT0WM+q45x/UQ==} + engines: {node: '>=14.0.0'} + cpu: [wasm32] + + '@unrs/resolver-binding-win32-arm64-msvc@1.11.1': + resolution: {integrity: sha512-nRcz5Il4ln0kMhfL8S3hLkxI85BXs3o8EYoattsJNdsX4YUU89iOkVn7g0VHSRxFuVMdM4Q1jEpIId1Ihim/Uw==} + cpu: [arm64] + os: [win32] + + '@unrs/resolver-binding-win32-ia32-msvc@1.11.1': + resolution: {integrity: sha512-DCEI6t5i1NmAZp6pFonpD5m7i6aFrpofcp4LA2i8IIq60Jyo28hamKBxNrZcyOwVOZkgsRp9O2sXWBWP8MnvIQ==} + cpu: [ia32] + os: [win32] + + '@unrs/resolver-binding-win32-x64-msvc@1.11.1': + resolution: {integrity: sha512-lrW200hZdbfRtztbygyaq/6jP6AKE8qQN2KvPcJ+x7wiD038YtnYtZ82IMNJ69GJibV7bwL3y9FgK+5w/pYt6g==} + cpu: [x64] + os: [win32] + acorn-jsx@5.3.2: resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} peerDependencies: @@ -916,9 +984,6 @@ packages: ajv@6.12.6: resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} - ajv@6.14.0: - resolution: {integrity: sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw==} - ansi-regex@5.0.1: resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} engines: {node: '>=8'} @@ -930,21 +995,14 @@ packages: argparse@2.0.1: resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} - aria-query@5.1.3: - resolution: {integrity: sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ==} - - array-buffer-byte-length@1.0.1: - resolution: {integrity: sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==} + aria-query@5.3.2: + resolution: {integrity: sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==} engines: {node: '>= 0.4'} array-buffer-byte-length@1.0.2: resolution: {integrity: sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==} engines: {node: '>= 0.4'} - array-includes@3.1.8: - resolution: {integrity: sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==} - engines: {node: '>= 0.4'} - array-includes@3.1.9: resolution: {integrity: sha512-FmeCCAenzH0KH381SPT5FZmiA/TmpndpcaShhfgEN9eCVjnFBqq3l1xrI42y8+PPLI6hypzou4GXw00WHmPBLQ==} engines: {node: '>= 0.4'} @@ -957,18 +1015,10 @@ packages: resolution: {integrity: sha512-F/TKATkzseUExPlfvmwQKGITM3DGTK+vkAsCZoDc5daVygbJBnjEUCbgkAvVFsgfXfX4YIqZ/27G3k3tdXrTxQ==} engines: {node: '>= 0.4'} - array.prototype.flat@1.3.2: - resolution: {integrity: sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==} - engines: {node: '>= 0.4'} - array.prototype.flat@1.3.3: resolution: {integrity: sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg==} engines: {node: '>= 0.4'} - array.prototype.flatmap@1.3.2: - resolution: {integrity: sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==} - engines: {node: '>= 0.4'} - array.prototype.flatmap@1.3.3: resolution: {integrity: sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg==} engines: {node: '>= 0.4'} @@ -977,10 +1027,6 @@ packages: resolution: {integrity: sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==} engines: {node: '>= 0.4'} - arraybuffer.prototype.slice@1.0.3: - resolution: {integrity: sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==} - engines: {node: '>= 0.4'} - arraybuffer.prototype.slice@1.0.4: resolution: {integrity: sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==} engines: {node: '>= 0.4'} @@ -992,8 +1038,8 @@ packages: resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} engines: {node: '>= 0.4'} - axe-core@4.10.0: - resolution: {integrity: sha512-Mr2ZakwQ7XUAjp7pAwQWRhhK8mQQ6JAaNWSjmjxil0R8BPioMtQsTLOolGYkji1rcL++3dCqZA3zWqpT+9Ew6g==} + axe-core@4.11.0: + resolution: {integrity: sha512-ilYanEU8vxxBexpJd8cWM4ElSQq4QctCLKih0TSfjIfCQTeyH/6zVrmIJfLPrKTKJRbiG+cfnZbQIjAlJmF1jQ==} engines: {node: '>=4'} axobject-query@4.1.0: @@ -1007,9 +1053,8 @@ packages: balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} - baseline-browser-mapping@2.10.0: - resolution: {integrity: sha512-lIyg0szRfYbiy67j9KN8IyeD7q7hcmqnJ1ddWmNt19ItGpNN64mnllmxUNFIOdOm6by97jlL6wfpTTJrmnjWAA==} - engines: {node: '>=6.0.0'} + baseline-browser-mapping@2.9.12: + resolution: {integrity: sha512-Mij6Lij93pTAIsSYy5cyBQ975Qh9uLEc5rwGTpomiZeXZL9yIS6uORJakb3ScHgfs0serMMfIbXzokPMuEiRyw==} hasBin: true bin-links@6.0.0: @@ -1030,10 +1075,6 @@ packages: resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==} engines: {node: '>= 0.4'} - call-bind@1.0.7: - resolution: {integrity: sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==} - engines: {node: '>= 0.4'} - call-bind@1.0.8: resolution: {integrity: sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==} engines: {node: '>= 0.4'} @@ -1049,8 +1090,8 @@ packages: camelize@1.0.1: resolution: {integrity: sha512-dU+Tx2fsypxTgtLoE36npi3UqcjSSMNYfkqgmoEhtZrraP5VWq0K7FkWVTYa8eMPtnU/G2txVsfdCJTn9uzpuQ==} - caniuse-lite@1.0.30001660: - resolution: {integrity: sha512-GacvNTTuATm26qC74pt+ad1fW15mlQ/zuTzzY1ZoIzECTP8HURDfF43kNxPgf7H1jmelCBQTTbBNxdSXOA7Bqg==} + caniuse-lite@1.0.30001757: + resolution: {integrity: sha512-r0nnL/I28Zi/yjk1el6ilj27tKcdjLsNqAOZr0yVjWPrSQyHgKI2INaEWw21bAQSv2LXRt1XuCS/GomNpWOxsQ==} chalk@4.1.2: resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} @@ -1112,9 +1153,6 @@ packages: css-to-react-native@3.2.0: resolution: {integrity: sha512-e8RKaLXMOFii+02mOlqwjbD00KSEKqblnpO9e++1aXS1fPQOpS1YoqdVHBqPjHNoxeF2mimzVqawm2KCbEdtHQ==} - csstype@3.1.3: - resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} - csstype@3.2.3: resolution: {integrity: sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==} @@ -1125,26 +1163,14 @@ packages: resolution: {integrity: sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==} engines: {node: '>= 12'} - data-view-buffer@1.0.1: - resolution: {integrity: sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==} - engines: {node: '>= 0.4'} - data-view-buffer@1.0.2: resolution: {integrity: sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==} engines: {node: '>= 0.4'} - data-view-byte-length@1.0.1: - resolution: {integrity: sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==} - engines: {node: '>= 0.4'} - data-view-byte-length@1.0.2: resolution: {integrity: sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==} engines: {node: '>= 0.4'} - data-view-byte-offset@1.0.0: - resolution: {integrity: sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==} - engines: {node: '>= 0.4'} - data-view-byte-offset@1.0.1: resolution: {integrity: sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==} engines: {node: '>= 0.4'} @@ -1157,8 +1183,8 @@ packages: supports-color: optional: true - debug@4.4.1: - resolution: {integrity: sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==} + debug@4.4.3: + resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==} engines: {node: '>=6.0'} peerDependencies: supports-color: '*' @@ -1166,10 +1192,6 @@ packages: supports-color: optional: true - deep-equal@2.2.3: - resolution: {integrity: sha512-ZIwpnevOurS8bpT4192sqAowWM76JDKSHYzMLty3BZGSswgq6pBaH3DhCSW5xVAZICZyKdOBPjwww5wfgT/6PA==} - engines: {node: '>= 0.4'} - deep-is@0.1.4: resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} @@ -1192,8 +1214,8 @@ packages: dom-helpers@5.2.1: resolution: {integrity: sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==} - dotenv@17.3.1: - resolution: {integrity: sha512-IO8C/dzEb6O3F9/twg6ZLXz164a2fhTnEWb95H23Dm4OuN+92NmEAlTrupP9VW6Jm3sO26tQlqyvyi4CsnY9GA==} + dotenv@17.2.3: + resolution: {integrity: sha512-JVUnt+DUIzu87TABbhPmNfVdBDt18BLOWjMUFJMSi/Qqg7NTYtabbvSNJGOJ7afbRuv9D/lngizHtP7QyLQ+9w==} engines: {node: '>=12'} dunder-proto@1.0.1: @@ -1206,25 +1228,13 @@ packages: emoji-regex@9.2.2: resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} - enhanced-resolve@5.17.1: - resolution: {integrity: sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg==} - engines: {node: '>=10.13.0'} - error-ex@1.3.4: resolution: {integrity: sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ==} - es-abstract@1.23.3: - resolution: {integrity: sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==} - engines: {node: '>= 0.4'} - es-abstract@1.24.0: resolution: {integrity: sha512-WSzPgsdLtTcQwm4CROfS5ju2Wa1QQcVeT37jFjYzdFz1r9ahadC8B8/a4qxJxM+09F18iumCdRmlr96ZYkQvEg==} engines: {node: '>= 0.4'} - es-define-property@1.0.0: - resolution: {integrity: sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==} - engines: {node: '>= 0.4'} - es-define-property@1.0.1: resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==} engines: {node: '>= 0.4'} @@ -1233,44 +1243,22 @@ packages: resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} engines: {node: '>= 0.4'} - es-get-iterator@1.1.3: - resolution: {integrity: sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw==} - - es-iterator-helpers@1.0.19: - resolution: {integrity: sha512-zoMwbCcH5hwUkKJkT8kDIBZSz9I6mVG//+lDCinLCGov4+r7NIy0ld8o03M0cJxl2spVf6ESYVS6/gpIfq1FFw==} - engines: {node: '>= 0.4'} - es-iterator-helpers@1.2.1: resolution: {integrity: sha512-uDn+FE1yrDzyC0pCo961B2IHbdM8y/ACZsKD4dG6WqrjV53BADjwa7D+1aom2rsNVfLyDgU/eigvlJGJ08OQ4w==} engines: {node: '>= 0.4'} - es-object-atoms@1.0.0: - resolution: {integrity: sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==} - engines: {node: '>= 0.4'} - es-object-atoms@1.1.1: resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==} engines: {node: '>= 0.4'} - es-set-tostringtag@2.0.3: - resolution: {integrity: sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==} - engines: {node: '>= 0.4'} - es-set-tostringtag@2.1.0: resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==} engines: {node: '>= 0.4'} - es-shim-unscopables@1.0.2: - resolution: {integrity: sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==} - es-shim-unscopables@1.1.0: resolution: {integrity: sha512-d9T8ucsEhh8Bi1woXCf+TIKDIROLG5WCkxg8geBCbvk22kzwC5G2OnXVMO6FUsvQlgUUXQ2itephWDLqDzbeCw==} engines: {node: '>= 0.4'} - es-to-primitive@1.2.1: - resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==} - engines: {node: '>= 0.4'} - es-to-primitive@1.3.0: resolution: {integrity: sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==} engines: {node: '>= 0.4'} @@ -1301,8 +1289,8 @@ packages: eslint-import-resolver-node@0.3.9: resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==} - eslint-import-resolver-typescript@3.6.3: - resolution: {integrity: sha512-ud9aw4szY9cCT1EWWdGv1L1XR6hh2PaRWif0j2QjQ0pgTY/69iw+W0Z4qZv5wHahOl8isEr+k/JnyAqNQkLkIA==} + eslint-import-resolver-typescript@3.10.1: + resolution: {integrity: sha512-A1rHYb06zjMGAxdLSkN2fXPBwuSaQ0iO5M/hdyS0Ajj1VBaRp0sPD3dn1FhME3c/JluGFbwSxyCfqdSbtQLAHQ==} engines: {node: ^14.18.0 || >=16.0.0} peerDependencies: eslint: '*' @@ -1314,27 +1302,6 @@ packages: eslint-plugin-import-x: optional: true - eslint-module-utils@2.11.0: - resolution: {integrity: sha512-gbBE5Hitek/oG6MUVj6sFuzEjA/ClzNflVrLovHi/JgLdC7fiN5gLAY1WIPW1a0V5I999MnsrvVrCOGmmVqDBQ==} - engines: {node: '>=4'} - peerDependencies: - '@typescript-eslint/parser': '*' - eslint: '*' - eslint-import-resolver-node: '*' - eslint-import-resolver-typescript: '*' - eslint-import-resolver-webpack: '*' - peerDependenciesMeta: - '@typescript-eslint/parser': - optional: true - eslint: - optional: true - eslint-import-resolver-node: - optional: true - eslint-import-resolver-typescript: - optional: true - eslint-import-resolver-webpack: - optional: true - eslint-module-utils@2.12.1: resolution: {integrity: sha512-L8jSWTze7K2mTg0vos/RuLRS5soomksDPoJLXIslC7c8Wmut3bx7CPpJijDcBZtxQ5lrbUdM+s0OlNbz0DCDNw==} engines: {node: '>=4'} @@ -1366,8 +1333,8 @@ packages: '@typescript-eslint/parser': optional: true - eslint-plugin-jsx-a11y@6.10.0: - resolution: {integrity: sha512-ySOHvXX8eSN6zz8Bywacm7CvGNhUtdjvqfQDVe6020TUK34Cywkw7m0KsCCk1Qtm9G1FayfTN1/7mMYnYO2Bhg==} + eslint-plugin-jsx-a11y@6.10.2: + resolution: {integrity: sha512-scB3nz4WmG75pV8+3eRUQOHZlNSUhFNq37xnpgRkCCELU3XMvXAxLk1eqWWyE22Ki4Q01Fnsw9BA3cJHDPgn2Q==} engines: {node: '>=4.0'} peerDependencies: eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9 @@ -1410,8 +1377,8 @@ packages: resolution: {integrity: sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - eslint@9.39.4: - resolution: {integrity: sha512-XoMjdBOwe/esVgEvLmNsD3IRHkm7fbKIUGvrleloJXUZgDHig2IPWNniv+GwjyJXzuNqVjlr5+4yVUZjycJwfQ==} + eslint@9.39.1: + resolution: {integrity: sha512-BhHmn2yNOFA9H9JmmIVKJmd288g9hrVRDkdoIgRCRuSySRUHH7r/DI6aAXW9T1WwUuY3DFgrcaqB+deURBLR5g==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} hasBin: true peerDependencies: @@ -1450,18 +1417,23 @@ packages: resolution: {integrity: sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==} engines: {node: '>=8.6.0'} - fast-glob@3.3.2: - resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} - engines: {node: '>=8.6.0'} - fast-json-stable-stringify@2.1.0: resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} fast-levenshtein@2.0.6: resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} - fastq@1.17.1: - resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==} + fastq@1.19.1: + resolution: {integrity: sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==} + + fdir@6.5.0: + resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==} + engines: {node: '>=12.0.0'} + peerDependencies: + picomatch: ^3 || ^4 + peerDependenciesMeta: + picomatch: + optional: true fetch-blob@3.2.0: resolution: {integrity: sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==} @@ -1489,9 +1461,6 @@ packages: flatted@3.3.3: resolution: {integrity: sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==} - for-each@0.3.3: - resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} - for-each@0.3.5: resolution: {integrity: sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==} engines: {node: '>= 0.4'} @@ -1503,10 +1472,6 @@ packages: function-bind@1.1.2: resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} - function.prototype.name@1.1.6: - resolution: {integrity: sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==} - engines: {node: '>= 0.4'} - function.prototype.name@1.1.8: resolution: {integrity: sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==} engines: {node: '>= 0.4'} @@ -1514,14 +1479,14 @@ packages: functions-have-names@1.2.3: resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} + generator-function@2.0.1: + resolution: {integrity: sha512-SFdFmIJi+ybC0vjlHN0ZGVGHc3lgE0DxPAT0djjVg+kjOnSqclqmj0KQ7ykTOLP6YxoqOvuAODGdcHJn+43q3g==} + engines: {node: '>= 0.4'} + get-caller-file@2.0.5: resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} engines: {node: 6.* || 8.* || >= 10.*} - get-intrinsic@1.2.4: - resolution: {integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==} - engines: {node: '>= 0.4'} - get-intrinsic@1.3.0: resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==} engines: {node: '>= 0.4'} @@ -1530,16 +1495,12 @@ packages: resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==} engines: {node: '>= 0.4'} - get-symbol-description@1.0.2: - resolution: {integrity: sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==} - engines: {node: '>= 0.4'} - get-symbol-description@1.1.0: resolution: {integrity: sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==} engines: {node: '>= 0.4'} - get-tsconfig@4.8.1: - resolution: {integrity: sha512-k9PN+cFBmaLWtVz29SkUoqU5O0slLuHJXt/2P+tMVFT+phsSGXGkp9t3rQIqdz0e+06EHNGs3oM6ZX1s2zHxRg==} + get-tsconfig@4.13.0: + resolution: {integrity: sha512-1VKTZJCwBrvbd+Wn3AOgQP/2Av+TfTCOlE4AcRJE72W1ksZXbAx8PPBR9RzgTeSPzlPMHrbANMH3LbltH73wxQ==} glob-parent@5.1.2: resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} @@ -1557,21 +1518,16 @@ packages: resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==} engines: {node: '>= 0.4'} - gopd@1.0.1: - resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} - gopd@1.2.0: resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} engines: {node: '>= 0.4'} - graceful-fs@4.2.11: - resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} - graphemer@1.4.0: resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} - has-bigints@1.0.2: - resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==} + has-bigints@1.1.0: + resolution: {integrity: sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==} + engines: {node: '>= 0.4'} has-flag@4.0.0: resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} @@ -1580,18 +1536,10 @@ packages: has-property-descriptors@1.0.2: resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} - has-proto@1.0.3: - resolution: {integrity: sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==} - engines: {node: '>= 0.4'} - has-proto@1.2.0: resolution: {integrity: sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==} engines: {node: '>= 0.4'} - has-symbols@1.0.3: - resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} - engines: {node: '>= 0.4'} - has-symbols@1.1.0: resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==} engines: {node: '>= 0.4'} @@ -1611,11 +1559,15 @@ packages: resolution: {integrity: sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==} engines: {node: '>= 14'} - husky@9.1.6: - resolution: {integrity: sha512-sqbjZKK7kf44hfdE94EoX8MZNk0n7HeW37O4YrVGCF4wzgQjp+akPAkfUK5LZ6KuR/6sqeAVuXHji+RzQgOn5A==} + husky@9.1.7: + resolution: {integrity: sha512-5gs5ytaNjBrh5Ow3zrvdUUY+0VxIuWVL4i9irt6friV+BqdCfmV11CQTWMiBYWHbXhco+J1kHfTOUkePhCDvMA==} engines: {node: '>=18'} hasBin: true + iceberg-js@0.8.0: + resolution: {integrity: sha512-kmgmea2nguZEvRqW79gDqNXyxA3OS5WIgMVffrHpqXV4F/J4UmNIw2vstixioLTNSkd5rFB8G0s3Lwzogm6OFw==} + engines: {node: '>=20.0.0'} + ignore@5.3.2: resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} engines: {node: '>= 4'} @@ -1635,26 +1587,10 @@ packages: resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} engines: {node: '>=0.8.19'} - index-to-position@1.2.0: - resolution: {integrity: sha512-Yg7+ztRkqslMAS2iFaU+Oa4KTSidr63OsFGlOrJoW981kIYO3CGCS3wA95P1mUi/IVSJkn0D479KTJpVpvFNuw==} - engines: {node: '>=18'} - - internal-slot@1.0.7: - resolution: {integrity: sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==} - engines: {node: '>= 0.4'} - internal-slot@1.1.0: resolution: {integrity: sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==} engines: {node: '>= 0.4'} - is-arguments@1.1.1: - resolution: {integrity: sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==} - engines: {node: '>= 0.4'} - - is-array-buffer@3.0.4: - resolution: {integrity: sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==} - engines: {node: '>= 0.4'} - is-array-buffer@3.0.5: resolution: {integrity: sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==} engines: {node: '>= 0.4'} @@ -1666,48 +1602,29 @@ packages: resolution: {integrity: sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==} engines: {node: '>= 0.4'} - is-bigint@1.0.4: - resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==} - is-bigint@1.1.0: resolution: {integrity: sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==} engines: {node: '>= 0.4'} - is-boolean-object@1.1.2: - resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} - engines: {node: '>= 0.4'} - is-boolean-object@1.2.2: resolution: {integrity: sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==} engines: {node: '>= 0.4'} - is-bun-module@1.2.1: - resolution: {integrity: sha512-AmidtEM6D6NmUiLOvvU7+IePxjEjOzra2h0pSrsfSAcXwl/83zLLXDByafUJy9k/rKK0pvXMLdwKwGHlX2Ke6Q==} + is-bun-module@2.0.0: + resolution: {integrity: sha512-gNCGbnnnnFAUGKeZ9PdbyeGYJqewpmc2aKHUEMO5nQPWU9lOmv7jcmQIv+qHD8fXW6W7qfuCwX4rY9LNRjXrkQ==} is-callable@1.2.7: resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} engines: {node: '>= 0.4'} - is-core-module@2.15.1: - resolution: {integrity: sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==} - engines: {node: '>= 0.4'} - is-core-module@2.16.1: resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==} engines: {node: '>= 0.4'} - is-data-view@1.0.1: - resolution: {integrity: sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==} - engines: {node: '>= 0.4'} - is-data-view@1.0.2: resolution: {integrity: sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==} engines: {node: '>= 0.4'} - is-date-object@1.0.5: - resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} - engines: {node: '>= 0.4'} - is-date-object@1.1.0: resolution: {integrity: sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==} engines: {node: '>= 0.4'} @@ -1716,9 +1633,6 @@ packages: resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} engines: {node: '>=0.10.0'} - is-finalizationregistry@1.0.2: - resolution: {integrity: sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw==} - is-finalizationregistry@1.1.1: resolution: {integrity: sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==} engines: {node: '>= 0.4'} @@ -1727,8 +1641,8 @@ packages: resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} engines: {node: '>=8'} - is-generator-function@1.0.10: - resolution: {integrity: sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==} + is-generator-function@1.1.2: + resolution: {integrity: sha512-upqt1SkGkODW9tsGNG5mtXTXtECizwtS2kA161M+gJPc1xdb/Ax629af6YrTwcOeQHbewrPNlE5Dx7kzvXTizA==} engines: {node: '>= 0.4'} is-glob@4.0.3: @@ -1743,10 +1657,6 @@ packages: resolution: {integrity: sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==} engines: {node: '>= 0.4'} - is-number-object@1.0.7: - resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==} - engines: {node: '>= 0.4'} - is-number-object@1.1.1: resolution: {integrity: sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==} engines: {node: '>= 0.4'} @@ -1755,10 +1665,6 @@ packages: resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} engines: {node: '>=0.12.0'} - is-regex@1.1.4: - resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} - engines: {node: '>= 0.4'} - is-regex@1.2.1: resolution: {integrity: sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==} engines: {node: '>= 0.4'} @@ -1767,34 +1673,18 @@ packages: resolution: {integrity: sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==} engines: {node: '>= 0.4'} - is-shared-array-buffer@1.0.3: - resolution: {integrity: sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==} - engines: {node: '>= 0.4'} - is-shared-array-buffer@1.0.4: resolution: {integrity: sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==} engines: {node: '>= 0.4'} - is-string@1.0.7: - resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==} - engines: {node: '>= 0.4'} - is-string@1.1.1: resolution: {integrity: sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==} engines: {node: '>= 0.4'} - is-symbol@1.0.4: - resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==} - engines: {node: '>= 0.4'} - is-symbol@1.1.1: resolution: {integrity: sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==} engines: {node: '>= 0.4'} - is-typed-array@1.1.13: - resolution: {integrity: sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==} - engines: {node: '>= 0.4'} - is-typed-array@1.1.15: resolution: {integrity: sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==} engines: {node: '>= 0.4'} @@ -1803,15 +1693,12 @@ packages: resolution: {integrity: sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==} engines: {node: '>= 0.4'} - is-weakref@1.0.2: - resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} - is-weakref@1.1.1: resolution: {integrity: sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==} engines: {node: '>= 0.4'} - is-weakset@2.0.3: - resolution: {integrity: sha512-LvIm3/KWzS9oRFHugab7d+M/GcBXuXX5xZkzPmN+NxihdQlZUQ4dWuSV1xR/sq6upL1TJEDrfBgRepHFdBtSNQ==} + is-weakset@2.0.4: + resolution: {integrity: sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==} engines: {node: '>= 0.4'} isarray@2.0.5: @@ -1820,14 +1707,6 @@ packages: isexe@2.0.0: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} - isows@1.0.7: - resolution: {integrity: sha512-I1fSfDCZL5P0v33sVqeTDSpcstAg/N+wF5HS033mogOVIp4B+oHC7oOCsA3axAbBSGTJ8QubbNmnIRN/h8U7hg==} - peerDependencies: - ws: '*' - - iterator.prototype@1.1.2: - resolution: {integrity: sha512-DR33HMMr8EzwuRL8Y9D3u2BMj8+RqSE850jfGu59kS7tbmPLzGkZmVSfyCFSDxuZiEY6Rzt3T2NA/qU+NwVj1w==} - iterator.prototype@1.1.5: resolution: {integrity: sha512-H0dkQoCa3b2VEeKQBOxFph+JAbcrQdE7KC0UkqwpLmv2EC4P41QXP+rqo9wYodACiG5/WM5s9oDApTU8utwj9g==} engines: {node: '>= 0.4'} @@ -1835,10 +1714,6 @@ packages: js-tokens@4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} - js-yaml@4.1.0: - resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} - hasBin: true - js-yaml@4.1.1: resolution: {integrity: sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==} hasBin: true @@ -1919,9 +1794,6 @@ packages: minimatch@3.1.2: resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} - minimatch@3.1.5: - resolution: {integrity: sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==} - minimatch@9.0.5: resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} engines: {node: '>=16 || 14 >=14.17'} @@ -1945,6 +1817,11 @@ packages: engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true + napi-postinstall@0.3.4: + resolution: {integrity: sha512-PHI5f1O0EP5xJ9gQmFGMS6IZcrVvTjpXjz7Na41gTE7eE2hK11lg04CECCYEEjdc17EV4DO+fkGEtt7TpTaTiQ==} + engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} + hasBin: true + natural-compare@1.4.0: resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} @@ -1982,8 +1859,8 @@ packages: resolution: {integrity: sha512-CJi3OS4JLsNMmr2u07OJlhcrPxCeOeP/4xq67aWNai6TNWWbTrlNDgl8NcFKVlcBKp18GPj+EzbNIgrBfZhsag==} engines: {node: ^20.17.0 || >=22.9.0} - npm@11.11.0: - resolution: {integrity: sha512-82gRxKrh/eY5UnNorkTFcdBQAGpgjWehkfGVqAGlJjejEtJZGGJUqjo3mbBTNbc5BTnPKGVtGPBZGhElujX5cw==} + npm@11.10.0: + resolution: {integrity: sha512-i8hE43iSIAMFuYVi8TxsEISdELM4fIza600aLjJ0ankGPLqd0oTPKMJqAcO/QWm307MbSlWGzJcNZ0lGMQgHPA==} engines: {node: ^20.17.0 || >=22.9.0} hasBin: true bundledDependencies: @@ -2003,6 +1880,7 @@ packages: - cacache - chalk - ci-info + - cli-columns - fastest-levenshtein - fs-minipass - glob @@ -2057,26 +1935,14 @@ packages: resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} engines: {node: '>=0.10.0'} - object-inspect@1.13.2: - resolution: {integrity: sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==} - engines: {node: '>= 0.4'} - object-inspect@1.13.4: resolution: {integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==} engines: {node: '>= 0.4'} - object-is@1.1.6: - resolution: {integrity: sha512-F8cZ+KfGlSGi09lJT7/Nd6KJZ9ygtvYC0/UYYLI9nmQKLMnydpB9yvbv9K1uSkEu7FU9vYPmVwLg328tX+ot3Q==} - engines: {node: '>= 0.4'} - object-keys@1.1.1: resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} engines: {node: '>= 0.4'} - object.assign@4.1.5: - resolution: {integrity: sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==} - engines: {node: '>= 0.4'} - object.assign@4.1.7: resolution: {integrity: sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==} engines: {node: '>= 0.4'} @@ -2121,10 +1987,6 @@ packages: resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} engines: {node: '>=8'} - parse-json@8.3.0: - resolution: {integrity: sha512-ybiGyvspI+fAoRQbIPRddCcSTV9/LsJbf0e/S85VLowVGzRmokfneg2kwVW/KU5rOXrPSbF1qAKPMgNTqqROQQ==} - engines: {node: '>=18'} - path-exists@4.0.0: resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} engines: {node: '>=8'} @@ -2147,8 +2009,12 @@ packages: resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} engines: {node: '>=8.6'} - possible-typed-array-names@1.0.0: - resolution: {integrity: sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==} + picomatch@4.0.3: + resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==} + engines: {node: '>=12'} + + possible-typed-array-names@1.1.0: + resolution: {integrity: sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==} engines: {node: '>= 0.4'} postcss-value-parser@4.2.0: @@ -2170,8 +2036,8 @@ packages: resolution: {integrity: sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==} engines: {node: '>=6.0.0'} - prettier@3.3.3: - resolution: {integrity: sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==} + prettier@3.7.3: + resolution: {integrity: sha512-QgODejq9K3OzoBbuyobZlUhznP5SKwPqp+6Q6xw6o8gnhr4O85L2U915iM2IDcfF2NPXVaM9zlo9tdwipnYwzg==} engines: {node: '>=14'} hasBin: true @@ -2194,16 +2060,16 @@ packages: peerDependencies: react: ^19.2.4 - react-icons@5.6.0: - resolution: {integrity: sha512-RH93p5ki6LfOiIt0UtDyNg/cee+HLVR6cHHtW3wALfo+eOHTp8RnU2kRkI6E+H19zMIs03DyxUG/GfZMOGvmiA==} + react-icons@5.5.0: + resolution: {integrity: sha512-MEFcXdkP3dLo8uumGI5xN3lDFNsRtrjbOEKDLD7yv76v4wpnEq2Lt2qeHaQOr34I/wPN3s3+N08WkQ+CW37Xiw==} peerDependencies: react: '*' react-is@16.13.1: resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} - react-is@19.2.4: - resolution: {integrity: sha512-W+EWGn2v0ApPKgKKCy/7s7WHXkboGcsrXE+2joLyVxkbyVQfO3MUEaUQDHoSmb8TFFrSKYa9mw64WZHNHSDzYA==} + react-is@19.2.3: + resolution: {integrity: sha512-qJNJfu81ByyabuG7hPFEbXqNcWSU3+eVus+KJs+0ncpGfMyYdvSmxiJxbWR65lYi1I+/0HBcliO029gc4F+PnA==} react-select@5.10.2: resolution: {integrity: sha512-Z33nHdEFWq9tfnfVXaiM12rbJmk+QjFEztWLtmXqQhz6Al4UZZ9xc0wiatmGtUOCCnHN0WizL3tCMYRENX4rVQ==} @@ -2229,14 +2095,6 @@ packages: resolution: {integrity: sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==} engines: {node: '>= 0.4'} - reflect.getprototypeof@1.0.6: - resolution: {integrity: sha512-fmfw4XgoDke3kdI6h4xcUz1dG8uaiv5q9gcEwLS4Pnth2kxT+GZ7YehS1JTMGBQmtV7Y4GFGbs2re2NqhdozUg==} - engines: {node: '>= 0.4'} - - regexp.prototype.flags@1.5.2: - resolution: {integrity: sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==} - engines: {node: '>= 0.4'} - regexp.prototype.flags@1.5.4: resolution: {integrity: sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==} engines: {node: '>= 0.4'} @@ -2255,16 +2113,17 @@ packages: resolve-pkg-maps@1.0.0: resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} - resolve@1.22.8: - resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} + resolve@1.22.11: + resolution: {integrity: sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==} + engines: {node: '>= 0.4'} hasBin: true resolve@2.0.0-next.5: resolution: {integrity: sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==} hasBin: true - reusify@1.0.4: - resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} + reusify@1.1.0: + resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==} engines: {iojs: '>=1.0.0', node: '>=0.10.0'} run-parallel@1.2.0: @@ -2273,10 +2132,6 @@ packages: rxjs@7.8.2: resolution: {integrity: sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==} - safe-array-concat@1.1.2: - resolution: {integrity: sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==} - engines: {node: '>=0.4'} - safe-array-concat@1.1.3: resolution: {integrity: sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==} engines: {node: '>=0.4'} @@ -2285,10 +2140,6 @@ packages: resolution: {integrity: sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==} engines: {node: '>= 0.4'} - safe-regex-test@1.0.3: - resolution: {integrity: sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==} - engines: {node: '>= 0.4'} - safe-regex-test@1.1.0: resolution: {integrity: sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==} engines: {node: '>= 0.4'} @@ -2300,18 +2151,8 @@ packages: resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} hasBin: true - semver@7.6.3: - resolution: {integrity: sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==} - engines: {node: '>=10'} - hasBin: true - - semver@7.7.2: - resolution: {integrity: sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==} - engines: {node: '>=10'} - hasBin: true - - semver@7.7.4: - resolution: {integrity: sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==} + semver@7.7.3: + resolution: {integrity: sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==} engines: {node: '>=10'} hasBin: true @@ -2358,10 +2199,6 @@ packages: resolution: {integrity: sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==} engines: {node: '>= 0.4'} - side-channel@1.0.6: - resolution: {integrity: sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==} - engines: {node: '>= 0.4'} - side-channel@1.1.0: resolution: {integrity: sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==} engines: {node: '>= 0.4'} @@ -2378,9 +2215,8 @@ packages: resolution: {integrity: sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==} engines: {node: '>=0.10.0'} - stop-iteration-iterator@1.0.0: - resolution: {integrity: sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ==} - engines: {node: '>= 0.4'} + stable-hash@0.0.5: + resolution: {integrity: sha512-+L3ccpzibovGXFK+Ap/f8LOS0ahMrHTf3xu7mMLSpEGU0EO9ucaysSylKo9eRDFNhWve/y275iPmIZ4z39a9iA==} stop-iteration-iterator@1.1.0: resolution: {integrity: sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==} @@ -2390,8 +2226,9 @@ packages: resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} engines: {node: '>=8'} - string.prototype.includes@2.0.0: - resolution: {integrity: sha512-E34CkBgyeqNDcrbU76cDjL5JLcVrtSdYq0MEh/B10r17pRP4ciHLwTgnuLV8Ay6cgEMLkcBkFCKyFZ43YldYzg==} + string.prototype.includes@2.0.1: + resolution: {integrity: sha512-o7+c9bW6zpAdJHTtujeePODAhkuicdAryFsfVKwA+wGw89wJ4GTY484WTucM9hLtDEOpOvI+aHnzqnC5lHp4Rg==} + engines: {node: '>= 0.4'} string.prototype.matchall@4.0.12: resolution: {integrity: sha512-6CC9uyBL+/48dYizRf7H7VAYCMCNTBeM78x/VTUe9bFEaxBepPJDa1Ow99LqI/1yF7kuy7Q3cQsYMrcjGUcskA==} @@ -2404,13 +2241,6 @@ packages: resolution: {integrity: sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==} engines: {node: '>= 0.4'} - string.prototype.trim@1.2.9: - resolution: {integrity: sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==} - engines: {node: '>= 0.4'} - - string.prototype.trimend@1.0.8: - resolution: {integrity: sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==} - string.prototype.trimend@1.0.9: resolution: {integrity: sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==} engines: {node: '>= 0.4'} @@ -2460,8 +2290,8 @@ packages: stylis@4.3.6: resolution: {integrity: sha512-yQ3rwFWRfwNUY7H5vpU0wfdkNSnvnJinhF9830Swlaxl03zsOjCfmX0ugac+3LtK0lYSgwL/KXc8oYL3mG4YFQ==} - supabase@2.77.0: - resolution: {integrity: sha512-CTjEkiuXV3ITyhYZm0k3dx/jW4qGTGxVNjInQWk2KO+/dLCpNS6dvX/NKKZQHMb3O9Pyj/3w0XKGusliCizbBg==} + supabase@2.76.15: + resolution: {integrity: sha512-m69o1XPAzZaIWfQiEeT+KY/Ci3OSA663RyoH9xECbXSxhr7dsipLCpCqT1E4MCob0mMhHh/7A+Eltx4y1qSwiQ==} engines: {npm: '>=8'} hasBin: true @@ -2484,21 +2314,18 @@ packages: tabbable@6.4.0: resolution: {integrity: sha512-05PUHKSNE8ou2dwIxTngl4EzcnsCDZGJ/iCLtDflR/SHB/ny14rXc+qU5P4mG9JkusiV7EivzY9Mhm55AzAvCg==} - tapable@2.2.1: - resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==} - engines: {node: '>=6'} - - tar@7.5.10: - resolution: {integrity: sha512-8mOPs1//5q/rlkNSPcCegA6hiHJYDmSLEI8aMH/CdSQJNWztHC9WHNam5zdQlfpTwB9Xp7IBEsHfV5LKMJGVAw==} + tar@7.5.9: + resolution: {integrity: sha512-BTLcK0xsDh2+PUe9F6c2TlRp4zOOBMTkoQHQIWSIzI0R7KG46uEwq4OPk2W7bZcprBMsuaeFsqwYr7pjh6CuHg==} engines: {node: '>=18'} + tinyglobby@0.2.15: + resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==} + engines: {node: '>=12.0.0'} + to-regex-range@5.0.1: resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} engines: {node: '>=8.0'} - tr46@0.0.3: - resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} - tree-kill@1.2.2: resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==} hasBin: true @@ -2519,56 +2346,36 @@ packages: resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} engines: {node: '>= 0.8.0'} - type-fest@4.41.0: - resolution: {integrity: sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==} - engines: {node: '>=16'} - - typed-array-buffer@1.0.2: - resolution: {integrity: sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==} - engines: {node: '>= 0.4'} - typed-array-buffer@1.0.3: resolution: {integrity: sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==} engines: {node: '>= 0.4'} - typed-array-byte-length@1.0.1: - resolution: {integrity: sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==} - engines: {node: '>= 0.4'} - typed-array-byte-length@1.0.3: resolution: {integrity: sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==} engines: {node: '>= 0.4'} - typed-array-byte-offset@1.0.2: - resolution: {integrity: sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==} - engines: {node: '>= 0.4'} - typed-array-byte-offset@1.0.4: resolution: {integrity: sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==} engines: {node: '>= 0.4'} - typed-array-length@1.0.6: - resolution: {integrity: sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==} - engines: {node: '>= 0.4'} - typed-array-length@1.0.7: resolution: {integrity: sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==} engines: {node: '>= 0.4'} - typescript@5.6.2: - resolution: {integrity: sha512-NW8ByodCSNCwZeghjN3o+JX5OFH0Ojg6sadjEKY4huZ52TqbJTJnDo5+Tw98lSy63NZvi4n+ez5m2u5d4PkZyw==} + typescript@5.9.3: + resolution: {integrity: sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==} engines: {node: '>=14.17'} hasBin: true - unbox-primitive@1.0.2: - resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} - unbox-primitive@1.1.0: resolution: {integrity: sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==} engines: {node: '>= 0.4'} - undici-types@6.19.8: - resolution: {integrity: sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==} + undici-types@6.21.0: + resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==} + + unrs-resolver@1.11.1: + resolution: {integrity: sha512-bSjt9pjaEBnNiGgc9rUiHGKv5l4/TGzDmYw3RhnkJGtLhbnnA/5qJj7x3dNDCRx/PJxu774LlH8lCOlB4hEfKg==} uri-js@4.4.1: resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} @@ -2591,23 +2398,10 @@ packages: resolution: {integrity: sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==} engines: {node: '>= 8'} - webidl-conversions@3.0.1: - resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} - - whatwg-url@5.0.0: - resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} - - which-boxed-primitive@1.0.2: - resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==} - which-boxed-primitive@1.1.1: resolution: {integrity: sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==} engines: {node: '>= 0.4'} - which-builtin-type@1.1.4: - resolution: {integrity: sha512-bppkmBSsHFmIMSl8BO9TbsyzsvGjVoppt8xUiGzwiu/bhDCGxnpOKCxgqj6GuyHE0mINMDecBFPlOm2hzY084w==} - engines: {node: '>= 0.4'} - which-builtin-type@1.2.1: resolution: {integrity: sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==} engines: {node: '>= 0.4'} @@ -2616,10 +2410,6 @@ packages: resolution: {integrity: sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==} engines: {node: '>= 0.4'} - which-typed-array@1.1.15: - resolution: {integrity: sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==} - engines: {node: '>= 0.4'} - which-typed-array@1.1.19: resolution: {integrity: sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw==} engines: {node: '>= 0.4'} @@ -2637,8 +2427,8 @@ packages: resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} engines: {node: '>=10'} - write-file-atomic@7.0.1: - resolution: {integrity: sha512-OTIk8iR8/aCRWBqvxrzxR0hgxWpnYBblY1S5hDWBQfk/VFmJwzmJgQFN3WsoUKHISv2eAwe+PpbUzyL1CKTLXg==} + write-file-atomic@7.0.0: + resolution: {integrity: sha512-YnlPC6JqnZl6aO4uRc+dx5PHguiR9S6WeoLtpxNT9wIG+BDya7ZNE1q7KOjVgaA73hKhKLpVPgJ5QA9THQ5BRg==} engines: {node: ^20.17.0 || >=22.9.0} ws@8.18.3: @@ -2680,140 +2470,108 @@ packages: snapshots: '@babel/code-frame@7.27.1': - dependencies: - '@babel/helper-validator-identifier': 7.27.1 - js-tokens: 4.0.0 - picocolors: 1.1.1 - - '@babel/code-frame@7.29.0': dependencies: '@babel/helper-validator-identifier': 7.28.5 js-tokens: 4.0.0 picocolors: 1.1.1 - '@babel/generator@7.28.3': - dependencies: - '@babel/parser': 7.28.3 - '@babel/types': 7.28.2 - '@jridgewell/gen-mapping': 0.3.13 - '@jridgewell/trace-mapping': 0.3.30 - jsesc: 3.1.0 - - '@babel/generator@7.29.1': + '@babel/generator@7.28.5': dependencies: - '@babel/parser': 7.29.0 - '@babel/types': 7.29.0 + '@babel/parser': 7.28.5 + '@babel/types': 7.28.5 '@jridgewell/gen-mapping': 0.3.13 - '@jridgewell/trace-mapping': 0.3.30 + '@jridgewell/trace-mapping': 0.3.31 jsesc: 3.1.0 '@babel/helper-globals@7.28.0': {} - '@babel/helper-module-imports@7.28.6': + '@babel/helper-module-imports@7.27.1': dependencies: - '@babel/traverse': 7.29.0 - '@babel/types': 7.29.0 + '@babel/traverse': 7.28.5 + '@babel/types': 7.28.5 transitivePeerDependencies: - supports-color '@babel/helper-string-parser@7.27.1': {} - '@babel/helper-validator-identifier@7.27.1': {} - '@babel/helper-validator-identifier@7.28.5': {} - '@babel/parser@7.28.3': - dependencies: - '@babel/types': 7.28.2 - - '@babel/parser@7.29.0': + '@babel/parser@7.28.5': dependencies: - '@babel/types': 7.29.0 + '@babel/types': 7.28.5 - '@babel/runtime@7.28.6': {} + '@babel/runtime@7.28.4': {} '@babel/runtime@7.28.6': {} '@babel/template@7.27.2': dependencies: '@babel/code-frame': 7.27.1 - '@babel/parser': 7.28.3 - '@babel/types': 7.28.2 + '@babel/parser': 7.28.5 + '@babel/types': 7.28.5 - '@babel/template@7.28.6': - dependencies: - '@babel/code-frame': 7.29.0 - '@babel/parser': 7.29.0 - '@babel/types': 7.29.0 - - '@babel/traverse@7.28.3': + '@babel/traverse@7.28.5': dependencies: '@babel/code-frame': 7.27.1 - '@babel/generator': 7.28.3 + '@babel/generator': 7.28.5 '@babel/helper-globals': 7.28.0 - '@babel/parser': 7.28.3 + '@babel/parser': 7.28.5 '@babel/template': 7.27.2 - '@babel/types': 7.28.2 - debug: 4.4.1 - transitivePeerDependencies: - - supports-color - - '@babel/traverse@7.29.0': - dependencies: - '@babel/code-frame': 7.29.0 - '@babel/generator': 7.29.1 - '@babel/helper-globals': 7.28.0 - '@babel/parser': 7.29.0 - '@babel/template': 7.28.6 - '@babel/types': 7.29.0 - debug: 4.4.1 + '@babel/types': 7.28.5 + debug: 4.4.3 transitivePeerDependencies: - supports-color - '@babel/types@7.28.2': - dependencies: - '@babel/helper-string-parser': 7.27.1 - '@babel/helper-validator-identifier': 7.27.1 - - '@babel/types@7.29.0': + '@babel/types@7.28.5': dependencies: '@babel/helper-string-parser': 7.27.1 '@babel/helper-validator-identifier': 7.28.5 - '@base-ui-components/react@1.0.0-rc.0(@types/react@19.1.12)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + '@base-ui-components/react@1.0.0-rc.0(@types/react@19.2.7)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: - '@babel/runtime': 7.28.6 - '@base-ui-components/utils': 0.2.2(@types/react@19.1.12)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@floating-ui/react-dom': 2.1.8(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@floating-ui/utils': 0.2.11 + '@babel/runtime': 7.28.4 + '@base-ui-components/utils': 0.2.2(@types/react@19.2.7)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@floating-ui/react-dom': 2.1.7(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@floating-ui/utils': 0.2.10 react: 19.2.4 react-dom: 19.2.4(react@19.2.4) reselect: 5.1.1 tabbable: 6.4.0 use-sync-external-store: 1.6.0(react@19.2.4) optionalDependencies: - '@types/react': 19.1.12 + '@types/react': 19.2.7 - '@base-ui-components/utils@0.2.2(@types/react@19.1.12)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + '@base-ui-components/utils@0.2.2(@types/react@19.2.7)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: - '@babel/runtime': 7.28.6 - '@floating-ui/utils': 0.2.11 + '@babel/runtime': 7.28.4 + '@floating-ui/utils': 0.2.10 react: 19.2.4 react-dom: 19.2.4(react@19.2.4) reselect: 5.1.1 use-sync-external-store: 1.6.0(react@19.2.4) optionalDependencies: - '@types/react': 19.1.12 + '@types/react': 19.2.7 + + '@emnapi/core@1.8.1': + dependencies: + '@emnapi/wasi-threads': 1.1.0 + tslib: 2.8.1 + optional: true '@emnapi/runtime@1.8.1': dependencies: tslib: 2.8.1 optional: true + '@emnapi/wasi-threads@1.1.0': + dependencies: + tslib: 2.8.1 + optional: true + '@emotion/babel-plugin@11.13.5': dependencies: - '@babel/helper-module-imports': 7.28.6 - '@babel/runtime': 7.28.6 + '@babel/helper-module-imports': 7.27.1 + '@babel/runtime': 7.28.4 '@emotion/hash': 0.9.2 '@emotion/memoize': 0.9.0 '@emotion/serialize': 1.3.3 @@ -2842,9 +2600,9 @@ snapshots: '@emotion/memoize@0.9.0': {} - '@emotion/react@11.14.0(@types/react@19.1.12)(react@19.2.4)': + '@emotion/react@11.14.0(@types/react@19.2.7)(react@19.2.4)': dependencies: - '@babel/runtime': 7.28.6 + '@babel/runtime': 7.28.4 '@emotion/babel-plugin': 11.13.5 '@emotion/cache': 11.14.0 '@emotion/serialize': 1.3.3 @@ -2854,7 +2612,7 @@ snapshots: hoist-non-react-statics: 3.3.2 react: 19.2.4 optionalDependencies: - '@types/react': 19.1.12 + '@types/react': 19.2.7 transitivePeerDependencies: - supports-color @@ -2864,22 +2622,22 @@ snapshots: '@emotion/memoize': 0.9.0 '@emotion/unitless': 0.10.0 '@emotion/utils': 1.4.2 - csstype: 3.1.3 + csstype: 3.2.3 '@emotion/sheet@1.4.0': {} - '@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.12)(react@19.2.4))(@types/react@19.1.12)(react@19.2.4)': + '@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.2.7)(react@19.2.4))(@types/react@19.2.7)(react@19.2.4)': dependencies: - '@babel/runtime': 7.28.6 + '@babel/runtime': 7.28.4 '@emotion/babel-plugin': 11.13.5 '@emotion/is-prop-valid': 1.4.0 - '@emotion/react': 11.14.0(@types/react@19.1.12)(react@19.2.4) + '@emotion/react': 11.14.0(@types/react@19.2.7)(react@19.2.4) '@emotion/serialize': 1.3.3 '@emotion/use-insertion-effect-with-fallbacks': 1.2.0(react@19.2.4) '@emotion/utils': 1.4.2 react: 19.2.4 optionalDependencies: - '@types/react': 19.1.12 + '@types/react': 19.2.7 transitivePeerDependencies: - supports-color @@ -2893,23 +2651,18 @@ snapshots: '@emotion/weak-memoize@0.4.0': {} - '@eslint-community/eslint-utils@4.7.0(eslint@9.39.4)': + '@eslint-community/eslint-utils@4.9.0(eslint@9.39.1)': dependencies: - eslint: 9.39.4 + eslint: 9.39.1 eslint-visitor-keys: 3.4.3 - '@eslint-community/eslint-utils@4.9.1(eslint@9.39.4)': - dependencies: - eslint: 9.39.4 - eslint-visitor-keys: 3.4.3 + '@eslint-community/regexpp@4.12.2': {} - '@eslint-community/regexpp@4.12.1': {} - - '@eslint/config-array@0.21.2': + '@eslint/config-array@0.21.1': dependencies: '@eslint/object-schema': 2.1.7 - debug: 4.4.1 - minimatch: 3.1.5 + debug: 4.4.3 + minimatch: 3.1.2 transitivePeerDependencies: - supports-color @@ -2921,35 +2674,21 @@ snapshots: dependencies: '@types/json-schema': 7.0.15 - '@eslint/eslintrc@3.3.1': + '@eslint/eslintrc@3.3.3': dependencies: ajv: 6.12.6 - debug: 4.4.1 - espree: 10.4.0 - globals: 14.0.0 - ignore: 5.3.2 - import-fresh: 3.3.1 - js-yaml: 4.1.0 - minimatch: 3.1.2 - strip-json-comments: 3.1.1 - transitivePeerDependencies: - - supports-color - - '@eslint/eslintrc@3.3.5': - dependencies: - ajv: 6.14.0 - debug: 4.4.1 + debug: 4.4.3 espree: 10.4.0 globals: 14.0.0 ignore: 5.3.2 import-fresh: 3.3.1 js-yaml: 4.1.1 - minimatch: 3.1.5 + minimatch: 3.1.2 strip-json-comments: 3.1.1 transitivePeerDependencies: - supports-color - '@eslint/js@9.39.4': {} + '@eslint/js@9.39.1': {} '@eslint/object-schema@2.1.7': {} @@ -2958,48 +2697,55 @@ snapshots: '@eslint/core': 0.17.0 levn: 0.4.1 - '@floating-ui/core@1.7.5': + '@floating-ui/core@1.7.3': + dependencies: + '@floating-ui/utils': 0.2.10 + + '@floating-ui/core@1.7.4': + dependencies: + '@floating-ui/utils': 0.2.10 + + '@floating-ui/dom@1.7.4': dependencies: - '@floating-ui/utils': 0.2.11 + '@floating-ui/core': 1.7.3 + '@floating-ui/utils': 0.2.10 - '@floating-ui/dom@1.7.6': + '@floating-ui/dom@1.7.5': dependencies: - '@floating-ui/core': 1.7.5 - '@floating-ui/utils': 0.2.11 + '@floating-ui/core': 1.7.4 + '@floating-ui/utils': 0.2.10 - '@floating-ui/react-dom@2.1.8(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + '@floating-ui/react-dom@2.1.7(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: - '@floating-ui/dom': 1.7.6 + '@floating-ui/dom': 1.7.5 react: 19.2.4 react-dom: 19.2.4(react@19.2.4) - '@floating-ui/utils@0.2.11': {} + '@floating-ui/utils@0.2.10': {} '@humanfs/core@0.19.1': {} - '@humanfs/node@0.16.6': + '@humanfs/node@0.16.7': dependencies: '@humanfs/core': 0.19.1 - '@humanwhocodes/retry': 0.3.1 + '@humanwhocodes/retry': 0.4.3 '@humanwhocodes/module-importer@1.0.1': {} - '@humanwhocodes/retry@0.3.1': {} - '@humanwhocodes/retry@0.4.3': {} - '@ianvs/prettier-plugin-sort-imports@4.7.0(prettier@3.3.3)': + '@ianvs/prettier-plugin-sort-imports@4.7.0(prettier@3.7.3)': dependencies: - '@babel/generator': 7.28.3 - '@babel/parser': 7.28.3 - '@babel/traverse': 7.28.3 - '@babel/types': 7.28.2 - prettier: 3.3.3 - semver: 7.7.2 + '@babel/generator': 7.28.5 + '@babel/parser': 7.28.5 + '@babel/traverse': 7.28.5 + '@babel/types': 7.28.5 + prettier: 3.7.3 + semver: 7.7.3 transitivePeerDependencies: - supports-color - '@img/colour@1.1.0': + '@img/colour@1.0.0': optional: true '@img/sharp-darwin-arm64@0.34.5': @@ -3102,86 +2848,65 @@ snapshots: '@jridgewell/gen-mapping@0.3.13': dependencies: - '@jridgewell/sourcemap-codec': 1.5.0 - '@jridgewell/trace-mapping': 0.3.30 + '@jridgewell/sourcemap-codec': 1.5.5 + '@jridgewell/trace-mapping': 0.3.31 '@jridgewell/resolve-uri@3.1.2': {} - '@jridgewell/sourcemap-codec@1.5.0': {} + '@jridgewell/sourcemap-codec@1.5.5': {} - '@jridgewell/trace-mapping@0.3.30': + '@jridgewell/trace-mapping@0.3.31': dependencies: '@jridgewell/resolve-uri': 3.1.2 - '@jridgewell/sourcemap-codec': 1.5.0 + '@jridgewell/sourcemap-codec': 1.5.5 - '@mui/base@5.0.0-beta.70(@types/react@19.1.12)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + '@mui/base@5.0.0-beta.70(@types/react@19.2.7)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: - '@babel/runtime': 7.28.6 - '@floating-ui/react-dom': 2.1.8(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@mui/types': 7.2.24(@types/react@19.1.12) - '@mui/utils': 6.4.9(@types/react@19.1.12)(react@19.2.4) + '@babel/runtime': 7.28.4 + '@floating-ui/react-dom': 2.1.7(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@mui/types': 7.2.24(@types/react@19.2.7) + '@mui/utils': 6.4.9(@types/react@19.2.7)(react@19.2.4) '@popperjs/core': 2.11.8 clsx: 2.1.1 prop-types: 15.8.1 react: 19.2.4 react-dom: 19.2.4(react@19.2.4) optionalDependencies: - '@types/react': 19.1.12 + '@types/react': 19.2.7 '@mui/core-downloads-tracker@7.3.9': {} -<<<<<<< HEAD - '@mui/material@7.3.9(@emotion/react@11.14.0(@types/react@19.2.7)(react@19.2.3))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.2.7)(react@19.2.3))(@types/react@19.2.7)(react@19.2.3))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': + '@mui/material@7.3.9(@emotion/react@11.14.0(@types/react@19.2.7)(react@19.2.4))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.2.7)(react@19.2.4))(@types/react@19.2.7)(react@19.2.4))(@types/react@19.2.7)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: '@babel/runtime': 7.28.6 '@mui/core-downloads-tracker': 7.3.9 - '@mui/system': 7.3.9(@emotion/react@11.14.0(@types/react@19.2.7)(react@19.2.3))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.2.7)(react@19.2.3))(@types/react@19.2.7)(react@19.2.3))(@types/react@19.2.7)(react@19.2.3) + '@mui/system': 7.3.9(@emotion/react@11.14.0(@types/react@19.2.7)(react@19.2.4))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.2.7)(react@19.2.4))(@types/react@19.2.7)(react@19.2.4))(@types/react@19.2.7)(react@19.2.4) '@mui/types': 7.4.12(@types/react@19.2.7) - '@mui/utils': 7.3.9(@types/react@19.2.7)(react@19.2.3) -======= - '@mui/material@7.3.9(@emotion/react@11.14.0(@types/react@19.1.12)(react@19.2.4))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.12)(react@19.2.4))(@types/react@19.1.12)(react@19.2.4))(@types/react@19.1.12)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': - dependencies: - '@babel/runtime': 7.28.6 - '@mui/core-downloads-tracker': 7.3.9 - '@mui/system': 7.3.9(@emotion/react@11.14.0(@types/react@19.1.12)(react@19.2.4))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.12)(react@19.2.4))(@types/react@19.1.12)(react@19.2.4))(@types/react@19.1.12)(react@19.2.4) - '@mui/types': 7.4.12(@types/react@19.1.12) - '@mui/utils': 7.3.9(@types/react@19.1.12)(react@19.2.4) ->>>>>>> a9ae57d6a9f6590b23a901643b7d0fb9af61c6e5 + '@mui/utils': 7.3.9(@types/react@19.2.7)(react@19.2.4) '@popperjs/core': 2.11.8 - '@types/react-transition-group': 4.4.12(@types/react@19.1.12) + '@types/react-transition-group': 4.4.12(@types/react@19.2.7) clsx: 2.1.1 csstype: 3.2.3 prop-types: 15.8.1 react: 19.2.4 react-dom: 19.2.4(react@19.2.4) - react-is: 19.2.4 + react-is: 19.2.3 react-transition-group: 4.4.5(react-dom@19.2.4(react@19.2.4))(react@19.2.4) optionalDependencies: - '@emotion/react': 11.14.0(@types/react@19.1.12)(react@19.2.4) - '@emotion/styled': 11.14.1(@emotion/react@11.14.0(@types/react@19.1.12)(react@19.2.4))(@types/react@19.1.12)(react@19.2.4) - '@types/react': 19.1.12 + '@emotion/react': 11.14.0(@types/react@19.2.7)(react@19.2.4) + '@emotion/styled': 11.14.1(@emotion/react@11.14.0(@types/react@19.2.7)(react@19.2.4))(@types/react@19.2.7)(react@19.2.4) + '@types/react': 19.2.7 -<<<<<<< HEAD - '@mui/private-theming@7.3.9(@types/react@19.2.7)(react@19.2.3)': + '@mui/private-theming@7.3.9(@types/react@19.2.7)(react@19.2.4)': dependencies: '@babel/runtime': 7.28.6 - '@mui/utils': 7.3.9(@types/react@19.2.7)(react@19.2.3) -======= - '@mui/private-theming@7.3.9(@types/react@19.1.12)(react@19.2.4)': - dependencies: - '@babel/runtime': 7.28.6 - '@mui/utils': 7.3.9(@types/react@19.1.12)(react@19.2.4) ->>>>>>> a9ae57d6a9f6590b23a901643b7d0fb9af61c6e5 + '@mui/utils': 7.3.9(@types/react@19.2.7)(react@19.2.4) prop-types: 15.8.1 react: 19.2.4 optionalDependencies: - '@types/react': 19.1.12 + '@types/react': 19.2.7 -<<<<<<< HEAD - '@mui/styled-engine@7.3.9(@emotion/react@11.14.0(@types/react@19.2.7)(react@19.2.3))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.2.7)(react@19.2.3))(@types/react@19.2.7)(react@19.2.3))(react@19.2.3)': -======= - '@mui/styled-engine@7.3.9(@emotion/react@11.14.0(@types/react@19.1.12)(react@19.2.4))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.12)(react@19.2.4))(@types/react@19.1.12)(react@19.2.4))(react@19.2.4)': ->>>>>>> a9ae57d6a9f6590b23a901643b7d0fb9af61c6e5 + '@mui/styled-engine@7.3.9(@emotion/react@11.14.0(@types/react@19.2.7)(react@19.2.4))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.2.7)(react@19.2.4))(@types/react@19.2.7)(react@19.2.4))(react@19.2.4)': dependencies: '@babel/runtime': 7.28.6 '@emotion/cache': 11.14.0 @@ -3191,79 +2916,65 @@ snapshots: prop-types: 15.8.1 react: 19.2.4 optionalDependencies: - '@emotion/react': 11.14.0(@types/react@19.1.12)(react@19.2.4) - '@emotion/styled': 11.14.1(@emotion/react@11.14.0(@types/react@19.1.12)(react@19.2.4))(@types/react@19.1.12)(react@19.2.4) + '@emotion/react': 11.14.0(@types/react@19.2.7)(react@19.2.4) + '@emotion/styled': 11.14.1(@emotion/react@11.14.0(@types/react@19.2.7)(react@19.2.4))(@types/react@19.2.7)(react@19.2.4) -<<<<<<< HEAD - '@mui/system@7.3.9(@emotion/react@11.14.0(@types/react@19.2.7)(react@19.2.3))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.2.7)(react@19.2.3))(@types/react@19.2.7)(react@19.2.3))(@types/react@19.2.7)(react@19.2.3)': + '@mui/system@7.3.9(@emotion/react@11.14.0(@types/react@19.2.7)(react@19.2.4))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.2.7)(react@19.2.4))(@types/react@19.2.7)(react@19.2.4))(@types/react@19.2.7)(react@19.2.4)': dependencies: '@babel/runtime': 7.28.6 - '@mui/private-theming': 7.3.9(@types/react@19.2.7)(react@19.2.3) - '@mui/styled-engine': 7.3.9(@emotion/react@11.14.0(@types/react@19.2.7)(react@19.2.3))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.2.7)(react@19.2.3))(@types/react@19.2.7)(react@19.2.3))(react@19.2.3) + '@mui/private-theming': 7.3.9(@types/react@19.2.7)(react@19.2.4) + '@mui/styled-engine': 7.3.9(@emotion/react@11.14.0(@types/react@19.2.7)(react@19.2.4))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.2.7)(react@19.2.4))(@types/react@19.2.7)(react@19.2.4))(react@19.2.4) '@mui/types': 7.4.12(@types/react@19.2.7) - '@mui/utils': 7.3.9(@types/react@19.2.7)(react@19.2.3) -======= - '@mui/system@7.3.9(@emotion/react@11.14.0(@types/react@19.1.12)(react@19.2.4))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.12)(react@19.2.4))(@types/react@19.1.12)(react@19.2.4))(@types/react@19.1.12)(react@19.2.4)': - dependencies: - '@babel/runtime': 7.28.6 - '@mui/private-theming': 7.3.9(@types/react@19.1.12)(react@19.2.4) - '@mui/styled-engine': 7.3.9(@emotion/react@11.14.0(@types/react@19.1.12)(react@19.2.4))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.12)(react@19.2.4))(@types/react@19.1.12)(react@19.2.4))(react@19.2.4) - '@mui/types': 7.4.12(@types/react@19.1.12) - '@mui/utils': 7.3.9(@types/react@19.1.12)(react@19.2.4) ->>>>>>> a9ae57d6a9f6590b23a901643b7d0fb9af61c6e5 + '@mui/utils': 7.3.9(@types/react@19.2.7)(react@19.2.4) clsx: 2.1.1 csstype: 3.2.3 prop-types: 15.8.1 react: 19.2.4 optionalDependencies: - '@emotion/react': 11.14.0(@types/react@19.1.12)(react@19.2.4) - '@emotion/styled': 11.14.1(@emotion/react@11.14.0(@types/react@19.1.12)(react@19.2.4))(@types/react@19.1.12)(react@19.2.4) - '@types/react': 19.1.12 + '@emotion/react': 11.14.0(@types/react@19.2.7)(react@19.2.4) + '@emotion/styled': 11.14.1(@emotion/react@11.14.0(@types/react@19.2.7)(react@19.2.4))(@types/react@19.2.7)(react@19.2.4) + '@types/react': 19.2.7 - '@mui/types@7.2.24(@types/react@19.1.12)': + '@mui/types@7.2.24(@types/react@19.2.7)': optionalDependencies: - '@types/react': 19.1.12 + '@types/react': 19.2.7 -<<<<<<< HEAD '@mui/types@7.4.12(@types/react@19.2.7)': -======= - '@mui/types@7.4.12(@types/react@19.1.12)': ->>>>>>> a9ae57d6a9f6590b23a901643b7d0fb9af61c6e5 dependencies: '@babel/runtime': 7.28.6 optionalDependencies: - '@types/react': 19.1.12 + '@types/react': 19.2.7 - '@mui/utils@6.4.9(@types/react@19.1.12)(react@19.2.4)': + '@mui/utils@6.4.9(@types/react@19.2.7)(react@19.2.4)': dependencies: - '@babel/runtime': 7.28.6 - '@mui/types': 7.2.24(@types/react@19.1.12) + '@babel/runtime': 7.28.4 + '@mui/types': 7.2.24(@types/react@19.2.7) '@types/prop-types': 15.7.15 clsx: 2.1.1 prop-types: 15.8.1 react: 19.2.4 - react-is: 19.2.4 + react-is: 19.2.3 optionalDependencies: - '@types/react': 19.1.12 + '@types/react': 19.2.7 -<<<<<<< HEAD - '@mui/utils@7.3.9(@types/react@19.2.7)(react@19.2.3)': + '@mui/utils@7.3.9(@types/react@19.2.7)(react@19.2.4)': dependencies: '@babel/runtime': 7.28.6 '@mui/types': 7.4.12(@types/react@19.2.7) -======= - '@mui/utils@7.3.9(@types/react@19.1.12)(react@19.2.4)': - dependencies: - '@babel/runtime': 7.28.6 - '@mui/types': 7.4.12(@types/react@19.1.12) ->>>>>>> a9ae57d6a9f6590b23a901643b7d0fb9af61c6e5 '@types/prop-types': 15.7.15 clsx: 2.1.1 prop-types: 15.8.1 react: 19.2.4 - react-is: 19.2.4 + react-is: 19.2.3 optionalDependencies: - '@types/react': 19.1.12 + '@types/react': 19.2.7 + + '@napi-rs/wasm-runtime@0.2.12': + dependencies: + '@emnapi/core': 1.8.1 + '@emnapi/runtime': 1.8.1 + '@tybys/wasm-util': 0.10.1 + optional: true '@next/env@16.1.1': {} @@ -3305,7 +3016,7 @@ snapshots: '@nodelib/fs.walk@1.2.8': dependencies: '@nodelib/fs.scandir': 2.1.5 - fastq: 1.17.1 + fastq: 1.19.1 '@nolyfill/is-core-module@1.0.39': {} @@ -3315,52 +3026,47 @@ snapshots: '@rtsao/scc@1.1.0': {} - '@rushstack/eslint-patch@1.10.4': {} + '@rushstack/eslint-patch@1.15.0': {} - '@supabase/auth-js@2.71.1': + '@supabase/auth-js@2.86.0': dependencies: - '@supabase/node-fetch': 2.6.15 - - '@supabase/functions-js@2.4.5': - dependencies: - '@supabase/node-fetch': 2.6.15 + tslib: 2.8.1 - '@supabase/node-fetch@2.6.15': + '@supabase/functions-js@2.86.0': dependencies: - whatwg-url: 5.0.0 + tslib: 2.8.1 - '@supabase/postgrest-js@1.19.4': + '@supabase/postgrest-js@2.86.0': dependencies: - '@supabase/node-fetch': 2.6.15 + tslib: 2.8.1 - '@supabase/realtime-js@2.11.15': + '@supabase/realtime-js@2.86.0': dependencies: - '@supabase/node-fetch': 2.6.15 '@types/phoenix': 1.6.6 '@types/ws': 8.18.1 - isows: 1.0.7(ws@8.18.3) + tslib: 2.8.1 ws: 8.18.3 transitivePeerDependencies: - bufferutil - utf-8-validate - '@supabase/ssr@0.8.0(@supabase/supabase-js@2.52.1)': + '@supabase/ssr@0.8.0(@supabase/supabase-js@2.86.0)': dependencies: - '@supabase/supabase-js': 2.52.1 + '@supabase/supabase-js': 2.86.0 cookie: 1.1.1 - '@supabase/storage-js@2.7.1': + '@supabase/storage-js@2.86.0': dependencies: - '@supabase/node-fetch': 2.6.15 + iceberg-js: 0.8.0 + tslib: 2.8.1 - '@supabase/supabase-js@2.52.1': + '@supabase/supabase-js@2.86.0': dependencies: - '@supabase/auth-js': 2.71.1 - '@supabase/functions-js': 2.4.5 - '@supabase/node-fetch': 2.6.15 - '@supabase/postgrest-js': 1.19.4 - '@supabase/realtime-js': 2.11.15 - '@supabase/storage-js': 2.7.1 + '@supabase/auth-js': 2.86.0 + '@supabase/functions-js': 2.86.0 + '@supabase/postgrest-js': 2.86.0 + '@supabase/realtime-js': 2.86.0 + '@supabase/storage-js': 2.86.0 transitivePeerDependencies: - bufferutil - utf-8-validate @@ -3369,11 +3075,16 @@ snapshots: dependencies: tslib: 2.8.1 + '@tybys/wasm-util@0.10.1': + dependencies: + tslib: 2.8.1 + optional: true + '@types/estree@1.0.8': {} - '@types/hoist-non-react-statics@3.3.7(@types/react@19.1.12)': + '@types/hoist-non-react-statics@3.3.7(@types/react@19.2.7)': dependencies: - '@types/react': 19.1.12 + '@types/react': 19.2.7 hoist-non-react-statics: 3.3.2 '@types/json-schema@7.0.15': {} @@ -3384,137 +3095,195 @@ snapshots: dependencies: json5: 1.0.2 - '@types/node@20.16.5': + '@types/node@20.19.25': dependencies: - undici-types: 6.19.8 + undici-types: 6.21.0 '@types/parse-json@4.0.2': {} '@types/parse-json@7.0.0': dependencies: - parse-json: 8.3.0 + parse-json: 5.2.0 '@types/phoenix@1.6.6': {} '@types/prop-types@15.7.15': {} - '@types/react-dom@19.1.9(@types/react@19.1.12)': + '@types/react-dom@19.2.3(@types/react@19.2.7)': dependencies: - '@types/react': 19.1.12 + '@types/react': 19.2.7 - '@types/react-transition-group@4.4.12(@types/react@19.1.12)': + '@types/react-transition-group@4.4.12(@types/react@19.2.7)': dependencies: - '@types/react': 19.1.12 + '@types/react': 19.2.7 - '@types/react@19.1.12': + '@types/react@19.2.7': dependencies: - csstype: 3.1.3 + csstype: 3.2.3 '@types/styled-components@5.1.36': dependencies: - '@types/hoist-non-react-statics': 3.3.7(@types/react@19.1.12) - '@types/react': 19.1.12 + '@types/hoist-non-react-statics': 3.3.7(@types/react@19.2.7) + '@types/react': 19.2.7 csstype: 3.2.3 '@types/stylis@4.2.7': {} '@types/ws@8.18.1': dependencies: - '@types/node': 20.16.5 + '@types/node': 20.19.25 - '@typescript-eslint/eslint-plugin@8.41.0(@typescript-eslint/parser@8.41.0(eslint@9.39.4)(typescript@5.6.2))(eslint@9.39.4)(typescript@5.6.2)': + '@typescript-eslint/eslint-plugin@8.48.0(@typescript-eslint/parser@8.48.0(eslint@9.39.1)(typescript@5.9.3))(eslint@9.39.1)(typescript@5.9.3)': dependencies: - '@eslint-community/regexpp': 4.12.1 - '@typescript-eslint/parser': 8.41.0(eslint@9.39.4)(typescript@5.6.2) - '@typescript-eslint/scope-manager': 8.41.0 - '@typescript-eslint/type-utils': 8.41.0(eslint@9.39.4)(typescript@5.6.2) - '@typescript-eslint/utils': 8.41.0(eslint@9.39.4)(typescript@5.6.2) - '@typescript-eslint/visitor-keys': 8.41.0 - eslint: 9.39.4 + '@eslint-community/regexpp': 4.12.2 + '@typescript-eslint/parser': 8.48.0(eslint@9.39.1)(typescript@5.9.3) + '@typescript-eslint/scope-manager': 8.48.0 + '@typescript-eslint/type-utils': 8.48.0(eslint@9.39.1)(typescript@5.9.3) + '@typescript-eslint/utils': 8.48.0(eslint@9.39.1)(typescript@5.9.3) + '@typescript-eslint/visitor-keys': 8.48.0 + eslint: 9.39.1 graphemer: 1.4.0 ignore: 7.0.5 natural-compare: 1.4.0 - ts-api-utils: 2.1.0(typescript@5.6.2) - typescript: 5.6.2 + ts-api-utils: 2.1.0(typescript@5.9.3) + typescript: 5.9.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.41.0(eslint@9.39.4)(typescript@5.6.2)': + '@typescript-eslint/parser@8.48.0(eslint@9.39.1)(typescript@5.9.3)': dependencies: - '@typescript-eslint/scope-manager': 8.41.0 - '@typescript-eslint/types': 8.41.0 - '@typescript-eslint/typescript-estree': 8.41.0(typescript@5.6.2) - '@typescript-eslint/visitor-keys': 8.41.0 - debug: 4.4.1 - eslint: 9.39.4 - typescript: 5.6.2 + '@typescript-eslint/scope-manager': 8.48.0 + '@typescript-eslint/types': 8.48.0 + '@typescript-eslint/typescript-estree': 8.48.0(typescript@5.9.3) + '@typescript-eslint/visitor-keys': 8.48.0 + debug: 4.4.3 + eslint: 9.39.1 + typescript: 5.9.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/project-service@8.41.0(typescript@5.6.2)': + '@typescript-eslint/project-service@8.48.0(typescript@5.9.3)': dependencies: - '@typescript-eslint/tsconfig-utils': 8.41.0(typescript@5.6.2) - '@typescript-eslint/types': 8.41.0 - debug: 4.4.1 - typescript: 5.6.2 + '@typescript-eslint/tsconfig-utils': 8.48.0(typescript@5.9.3) + '@typescript-eslint/types': 8.48.0 + debug: 4.4.3 + typescript: 5.9.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/scope-manager@8.41.0': + '@typescript-eslint/scope-manager@8.48.0': dependencies: - '@typescript-eslint/types': 8.41.0 - '@typescript-eslint/visitor-keys': 8.41.0 + '@typescript-eslint/types': 8.48.0 + '@typescript-eslint/visitor-keys': 8.48.0 - '@typescript-eslint/tsconfig-utils@8.41.0(typescript@5.6.2)': + '@typescript-eslint/tsconfig-utils@8.48.0(typescript@5.9.3)': dependencies: - typescript: 5.6.2 + typescript: 5.9.3 - '@typescript-eslint/type-utils@8.41.0(eslint@9.39.4)(typescript@5.6.2)': + '@typescript-eslint/type-utils@8.48.0(eslint@9.39.1)(typescript@5.9.3)': dependencies: - '@typescript-eslint/types': 8.41.0 - '@typescript-eslint/typescript-estree': 8.41.0(typescript@5.6.2) - '@typescript-eslint/utils': 8.41.0(eslint@9.39.4)(typescript@5.6.2) - debug: 4.4.1 - eslint: 9.39.4 - ts-api-utils: 2.1.0(typescript@5.6.2) - typescript: 5.6.2 + '@typescript-eslint/types': 8.48.0 + '@typescript-eslint/typescript-estree': 8.48.0(typescript@5.9.3) + '@typescript-eslint/utils': 8.48.0(eslint@9.39.1)(typescript@5.9.3) + debug: 4.4.3 + eslint: 9.39.1 + ts-api-utils: 2.1.0(typescript@5.9.3) + typescript: 5.9.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/types@8.41.0': {} + '@typescript-eslint/types@8.48.0': {} - '@typescript-eslint/typescript-estree@8.41.0(typescript@5.6.2)': + '@typescript-eslint/typescript-estree@8.48.0(typescript@5.9.3)': dependencies: - '@typescript-eslint/project-service': 8.41.0(typescript@5.6.2) - '@typescript-eslint/tsconfig-utils': 8.41.0(typescript@5.6.2) - '@typescript-eslint/types': 8.41.0 - '@typescript-eslint/visitor-keys': 8.41.0 - debug: 4.4.1 - fast-glob: 3.3.2 - is-glob: 4.0.3 + '@typescript-eslint/project-service': 8.48.0(typescript@5.9.3) + '@typescript-eslint/tsconfig-utils': 8.48.0(typescript@5.9.3) + '@typescript-eslint/types': 8.48.0 + '@typescript-eslint/visitor-keys': 8.48.0 + debug: 4.4.3 minimatch: 9.0.5 - semver: 7.7.2 - ts-api-utils: 2.1.0(typescript@5.6.2) - typescript: 5.6.2 + semver: 7.7.3 + tinyglobby: 0.2.15 + ts-api-utils: 2.1.0(typescript@5.9.3) + typescript: 5.9.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.41.0(eslint@9.39.4)(typescript@5.6.2)': + '@typescript-eslint/utils@8.48.0(eslint@9.39.1)(typescript@5.9.3)': dependencies: - '@eslint-community/eslint-utils': 4.7.0(eslint@9.39.4) - '@typescript-eslint/scope-manager': 8.41.0 - '@typescript-eslint/types': 8.41.0 - '@typescript-eslint/typescript-estree': 8.41.0(typescript@5.6.2) - eslint: 9.39.4 - typescript: 5.6.2 + '@eslint-community/eslint-utils': 4.9.0(eslint@9.39.1) + '@typescript-eslint/scope-manager': 8.48.0 + '@typescript-eslint/types': 8.48.0 + '@typescript-eslint/typescript-estree': 8.48.0(typescript@5.9.3) + eslint: 9.39.1 + typescript: 5.9.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/visitor-keys@8.41.0': + '@typescript-eslint/visitor-keys@8.48.0': dependencies: - '@typescript-eslint/types': 8.41.0 + '@typescript-eslint/types': 8.48.0 eslint-visitor-keys: 4.2.1 + '@unrs/resolver-binding-android-arm-eabi@1.11.1': + optional: true + + '@unrs/resolver-binding-android-arm64@1.11.1': + optional: true + + '@unrs/resolver-binding-darwin-arm64@1.11.1': + optional: true + + '@unrs/resolver-binding-darwin-x64@1.11.1': + optional: true + + '@unrs/resolver-binding-freebsd-x64@1.11.1': + optional: true + + '@unrs/resolver-binding-linux-arm-gnueabihf@1.11.1': + optional: true + + '@unrs/resolver-binding-linux-arm-musleabihf@1.11.1': + optional: true + + '@unrs/resolver-binding-linux-arm64-gnu@1.11.1': + optional: true + + '@unrs/resolver-binding-linux-arm64-musl@1.11.1': + optional: true + + '@unrs/resolver-binding-linux-ppc64-gnu@1.11.1': + optional: true + + '@unrs/resolver-binding-linux-riscv64-gnu@1.11.1': + optional: true + + '@unrs/resolver-binding-linux-riscv64-musl@1.11.1': + optional: true + + '@unrs/resolver-binding-linux-s390x-gnu@1.11.1': + optional: true + + '@unrs/resolver-binding-linux-x64-gnu@1.11.1': + optional: true + + '@unrs/resolver-binding-linux-x64-musl@1.11.1': + optional: true + + '@unrs/resolver-binding-wasm32-wasi@1.11.1': + dependencies: + '@napi-rs/wasm-runtime': 0.2.12 + optional: true + + '@unrs/resolver-binding-win32-arm64-msvc@1.11.1': + optional: true + + '@unrs/resolver-binding-win32-ia32-msvc@1.11.1': + optional: true + + '@unrs/resolver-binding-win32-x64-msvc@1.11.1': + optional: true + acorn-jsx@5.3.2(acorn@8.15.0): dependencies: acorn: 8.15.0 @@ -3530,13 +3299,6 @@ snapshots: json-schema-traverse: 0.4.1 uri-js: 4.4.1 - ajv@6.14.0: - dependencies: - fast-deep-equal: 3.1.3 - fast-json-stable-stringify: 2.1.0 - json-schema-traverse: 0.4.1 - uri-js: 4.4.1 - ansi-regex@5.0.1: {} ansi-styles@4.3.0: @@ -3545,29 +3307,13 @@ snapshots: argparse@2.0.1: {} - aria-query@5.1.3: - dependencies: - deep-equal: 2.2.3 - - array-buffer-byte-length@1.0.1: - dependencies: - call-bind: 1.0.7 - is-array-buffer: 3.0.4 + aria-query@5.3.2: {} array-buffer-byte-length@1.0.2: dependencies: call-bound: 1.0.4 is-array-buffer: 3.0.5 - array-includes@3.1.8: - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.23.3 - es-object-atoms: 1.0.0 - get-intrinsic: 1.2.4 - is-string: 1.0.7 - array-includes@3.1.9: dependencies: call-bind: 1.0.8 @@ -3581,12 +3327,12 @@ snapshots: array.prototype.findlast@1.2.5: dependencies: - call-bind: 1.0.7 + call-bind: 1.0.8 define-properties: 1.2.1 - es-abstract: 1.23.3 + es-abstract: 1.24.0 es-errors: 1.3.0 - es-object-atoms: 1.0.0 - es-shim-unscopables: 1.0.2 + es-object-atoms: 1.1.1 + es-shim-unscopables: 1.1.0 array.prototype.findlastindex@1.2.6: dependencies: @@ -3598,52 +3344,27 @@ snapshots: es-object-atoms: 1.1.1 es-shim-unscopables: 1.1.0 - array.prototype.flat@1.3.2: - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.23.3 - es-shim-unscopables: 1.0.2 - array.prototype.flat@1.3.3: dependencies: call-bind: 1.0.8 define-properties: 1.2.1 es-abstract: 1.24.0 - es-shim-unscopables: 1.0.2 - - array.prototype.flatmap@1.3.2: - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.23.3 - es-shim-unscopables: 1.0.2 + es-shim-unscopables: 1.1.0 array.prototype.flatmap@1.3.3: dependencies: call-bind: 1.0.8 define-properties: 1.2.1 es-abstract: 1.24.0 - es-shim-unscopables: 1.0.2 + es-shim-unscopables: 1.1.0 array.prototype.tosorted@1.1.4: 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 - - arraybuffer.prototype.slice@1.0.3: - dependencies: - array-buffer-byte-length: 1.0.1 - call-bind: 1.0.7 + call-bind: 1.0.8 define-properties: 1.2.1 - es-abstract: 1.23.3 + es-abstract: 1.24.0 es-errors: 1.3.0 - get-intrinsic: 1.2.4 - is-array-buffer: 3.0.4 - is-shared-array-buffer: 1.0.3 + es-shim-unscopables: 1.1.0 arraybuffer.prototype.slice@1.0.4: dependencies: @@ -3659,21 +3380,21 @@ snapshots: available-typed-arrays@1.0.7: dependencies: - possible-typed-array-names: 1.0.0 + possible-typed-array-names: 1.1.0 - axe-core@4.10.0: {} + axe-core@4.11.0: {} axobject-query@4.1.0: {} babel-plugin-macros@3.1.0: dependencies: - '@babel/runtime': 7.28.6 + '@babel/runtime': 7.28.4 cosmiconfig: 7.1.0 - resolve: 1.22.8 + resolve: 1.22.11 balanced-match@1.0.2: {} - baseline-browser-mapping@2.10.0: {} + baseline-browser-mapping@2.9.12: {} bin-links@6.0.0: dependencies: @@ -3681,7 +3402,7 @@ snapshots: npm-normalize-package-bin: 5.0.0 proc-log: 6.1.0 read-cmd-shim: 6.0.0 - write-file-atomic: 7.0.1 + write-file-atomic: 7.0.0 brace-expansion@1.1.12: dependencies: @@ -3701,19 +3422,11 @@ snapshots: es-errors: 1.3.0 function-bind: 1.1.2 - call-bind@1.0.7: - dependencies: - es-define-property: 1.0.0 - es-errors: 1.3.0 - function-bind: 1.1.2 - get-intrinsic: 1.2.4 - set-function-length: 1.2.2 - call-bind@1.0.8: dependencies: call-bind-apply-helpers: 1.0.2 - es-define-property: 1.0.0 - get-intrinsic: 1.2.4 + es-define-property: 1.0.1 + get-intrinsic: 1.3.0 set-function-length: 1.2.2 call-bound@1.0.4: @@ -3725,7 +3438,7 @@ snapshots: camelize@1.0.1: {} - caniuse-lite@1.0.30001660: {} + caniuse-lite@1.0.30001757: {} chalk@4.1.2: dependencies: @@ -3789,44 +3502,24 @@ snapshots: css-color-keywords: 1.0.0 postcss-value-parser: 4.2.0 - csstype@3.1.3: {} - csstype@3.2.3: {} damerau-levenshtein@1.0.8: {} data-uri-to-buffer@4.0.1: {} - data-view-buffer@1.0.1: - dependencies: - call-bind: 1.0.7 - es-errors: 1.3.0 - is-data-view: 1.0.1 - data-view-buffer@1.0.2: dependencies: call-bound: 1.0.4 es-errors: 1.3.0 is-data-view: 1.0.2 - data-view-byte-length@1.0.1: - dependencies: - call-bind: 1.0.7 - es-errors: 1.3.0 - is-data-view: 1.0.1 - data-view-byte-length@1.0.2: dependencies: call-bound: 1.0.4 es-errors: 1.3.0 is-data-view: 1.0.2 - data-view-byte-offset@1.0.0: - dependencies: - call-bind: 1.0.7 - es-errors: 1.3.0 - is-data-view: 1.0.1 - data-view-byte-offset@1.0.1: dependencies: call-bound: 1.0.4 @@ -3837,38 +3530,17 @@ snapshots: dependencies: ms: 2.1.3 - debug@4.4.1: + debug@4.4.3: dependencies: ms: 2.1.3 - deep-equal@2.2.3: - dependencies: - array-buffer-byte-length: 1.0.1 - call-bind: 1.0.7 - es-get-iterator: 1.1.3 - get-intrinsic: 1.2.4 - is-arguments: 1.1.1 - is-array-buffer: 3.0.4 - is-date-object: 1.0.5 - is-regex: 1.1.4 - is-shared-array-buffer: 1.0.3 - isarray: 2.0.5 - object-is: 1.1.6 - object-keys: 1.1.1 - object.assign: 4.1.5 - regexp.prototype.flags: 1.5.2 - side-channel: 1.0.6 - which-boxed-primitive: 1.0.2 - which-collection: 1.0.2 - which-typed-array: 1.1.15 - deep-is@0.1.4: {} define-data-property@1.1.4: dependencies: - es-define-property: 1.0.0 + es-define-property: 1.0.1 es-errors: 1.3.0 - gopd: 1.0.1 + gopd: 1.2.0 define-properties@1.2.1: dependencies: @@ -3885,10 +3557,10 @@ snapshots: dom-helpers@5.2.1: dependencies: - '@babel/runtime': 7.28.6 + '@babel/runtime': 7.28.4 csstype: 3.2.3 - dotenv@17.3.1: {} + dotenv@17.2.3: {} dunder-proto@1.0.1: dependencies: @@ -3900,64 +3572,10 @@ snapshots: emoji-regex@9.2.2: {} - enhanced-resolve@5.17.1: - dependencies: - graceful-fs: 4.2.11 - tapable: 2.2.1 - error-ex@1.3.4: dependencies: is-arrayish: 0.2.1 - es-abstract@1.23.3: - dependencies: - array-buffer-byte-length: 1.0.1 - arraybuffer.prototype.slice: 1.0.3 - available-typed-arrays: 1.0.7 - call-bind: 1.0.7 - data-view-buffer: 1.0.1 - data-view-byte-length: 1.0.1 - data-view-byte-offset: 1.0.0 - es-define-property: 1.0.0 - es-errors: 1.3.0 - es-object-atoms: 1.0.0 - es-set-tostringtag: 2.0.3 - es-to-primitive: 1.2.1 - function.prototype.name: 1.1.6 - get-intrinsic: 1.2.4 - get-symbol-description: 1.0.2 - globalthis: 1.0.4 - gopd: 1.0.1 - has-property-descriptors: 1.0.2 - has-proto: 1.0.3 - has-symbols: 1.0.3 - hasown: 2.0.2 - internal-slot: 1.0.7 - is-array-buffer: 3.0.4 - is-callable: 1.2.7 - is-data-view: 1.0.1 - is-negative-zero: 2.0.3 - is-regex: 1.1.4 - is-shared-array-buffer: 1.0.3 - is-string: 1.0.7 - is-typed-array: 1.1.13 - is-weakref: 1.0.2 - object-inspect: 1.13.2 - object-keys: 1.1.1 - object.assign: 4.1.5 - regexp.prototype.flags: 1.5.2 - safe-array-concat: 1.1.2 - safe-regex-test: 1.0.3 - string.prototype.trim: 1.2.9 - string.prototype.trimend: 1.0.8 - string.prototype.trimstart: 1.0.8 - typed-array-buffer: 1.0.2 - typed-array-byte-length: 1.0.1 - typed-array-byte-offset: 1.0.2 - typed-array-length: 1.0.6 - unbox-primitive: 1.0.2 - which-typed-array: 1.1.15 - es-abstract@1.24.0: dependencies: array-buffer-byte-length: 1.0.2 @@ -4015,43 +3633,10 @@ snapshots: unbox-primitive: 1.1.0 which-typed-array: 1.1.19 - es-define-property@1.0.0: - dependencies: - get-intrinsic: 1.2.4 - es-define-property@1.0.1: {} es-errors@1.3.0: {} - es-get-iterator@1.1.3: - dependencies: - call-bind: 1.0.7 - get-intrinsic: 1.2.4 - has-symbols: 1.0.3 - is-arguments: 1.1.1 - is-map: 2.0.3 - is-set: 2.0.3 - is-string: 1.0.7 - isarray: 2.0.5 - stop-iteration-iterator: 1.0.0 - - es-iterator-helpers@1.0.19: - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.23.3 - es-errors: 1.3.0 - es-set-tostringtag: 2.0.3 - function-bind: 1.1.2 - get-intrinsic: 1.2.4 - globalthis: 1.0.4 - has-property-descriptors: 1.0.2 - has-proto: 1.0.3 - has-symbols: 1.0.3 - internal-slot: 1.0.7 - iterator.prototype: 1.1.2 - safe-array-concat: 1.1.2 - es-iterator-helpers@1.2.1: dependencies: call-bind: 1.0.8 @@ -4059,7 +3644,7 @@ snapshots: define-properties: 1.2.1 es-abstract: 1.24.0 es-errors: 1.3.0 - es-set-tostringtag: 2.0.3 + es-set-tostringtag: 2.1.0 function-bind: 1.1.2 get-intrinsic: 1.3.0 globalthis: 1.0.4 @@ -4071,20 +3656,10 @@ snapshots: iterator.prototype: 1.1.5 safe-array-concat: 1.1.3 - es-object-atoms@1.0.0: - dependencies: - es-errors: 1.3.0 - es-object-atoms@1.1.1: dependencies: es-errors: 1.3.0 - es-set-tostringtag@2.0.3: - dependencies: - get-intrinsic: 1.3.0 - has-tostringtag: 1.0.2 - hasown: 2.0.2 - es-set-tostringtag@2.1.0: dependencies: es-errors: 1.3.0 @@ -4092,104 +3667,79 @@ snapshots: has-tostringtag: 1.0.2 hasown: 2.0.2 - es-shim-unscopables@1.0.2: - dependencies: - hasown: 2.0.2 - es-shim-unscopables@1.1.0: dependencies: hasown: 2.0.2 - es-to-primitive@1.2.1: - dependencies: - is-callable: 1.2.7 - is-date-object: 1.0.5 - is-symbol: 1.0.4 - es-to-primitive@1.3.0: dependencies: is-callable: 1.2.7 - is-date-object: 1.0.5 - is-symbol: 1.0.4 + is-date-object: 1.1.0 + is-symbol: 1.1.1 escalade@3.2.0: {} escape-string-regexp@4.0.0: {} - eslint-config-next@15.5.2(eslint@9.39.4)(typescript@5.6.2): + eslint-config-next@15.5.2(eslint@9.39.1)(typescript@5.9.3): dependencies: '@next/eslint-plugin-next': 15.5.2 - '@rushstack/eslint-patch': 1.10.4 - '@typescript-eslint/eslint-plugin': 8.41.0(@typescript-eslint/parser@8.41.0(eslint@9.39.4)(typescript@5.6.2))(eslint@9.39.4)(typescript@5.6.2) - '@typescript-eslint/parser': 8.41.0(eslint@9.39.4)(typescript@5.6.2) - eslint: 9.39.4 + '@rushstack/eslint-patch': 1.15.0 + '@typescript-eslint/eslint-plugin': 8.48.0(@typescript-eslint/parser@8.48.0(eslint@9.39.1)(typescript@5.9.3))(eslint@9.39.1)(typescript@5.9.3) + '@typescript-eslint/parser': 8.48.0(eslint@9.39.1)(typescript@5.9.3) + eslint: 9.39.1 eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@8.41.0(eslint@9.39.4)(typescript@5.6.2))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.32.0)(eslint@9.39.4) - eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.41.0(eslint@9.39.4)(typescript@5.6.2))(eslint-import-resolver-typescript@3.6.3)(eslint@9.39.4) - eslint-plugin-jsx-a11y: 6.10.0(eslint@9.39.4) - eslint-plugin-react: 7.37.5(eslint@9.39.4) - eslint-plugin-react-hooks: 5.2.0(eslint@9.39.4) + eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0)(eslint@9.39.1) + eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.48.0(eslint@9.39.1)(typescript@5.9.3))(eslint-import-resolver-typescript@3.10.1)(eslint@9.39.1) + eslint-plugin-jsx-a11y: 6.10.2(eslint@9.39.1) + eslint-plugin-react: 7.37.5(eslint@9.39.1) + eslint-plugin-react-hooks: 5.2.0(eslint@9.39.1) optionalDependencies: - typescript: 5.6.2 + typescript: 5.9.3 transitivePeerDependencies: - eslint-import-resolver-webpack - eslint-plugin-import-x - supports-color - eslint-config-prettier@10.1.8(eslint@9.39.4): + eslint-config-prettier@10.1.8(eslint@9.39.1): dependencies: - eslint: 9.39.4 + eslint: 9.39.1 eslint-import-resolver-node@0.3.9: dependencies: debug: 3.2.7 - is-core-module: 2.15.1 - resolve: 1.22.8 + is-core-module: 2.16.1 + resolve: 1.22.11 transitivePeerDependencies: - supports-color - eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.41.0(eslint@9.39.4)(typescript@5.6.2))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.32.0)(eslint@9.39.4): + eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0)(eslint@9.39.1): dependencies: '@nolyfill/is-core-module': 1.0.39 - debug: 4.4.1 - enhanced-resolve: 5.17.1 - eslint: 9.39.4 - eslint-module-utils: 2.11.0(@typescript-eslint/parser@8.41.0(eslint@9.39.4)(typescript@5.6.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3)(eslint@9.39.4) - fast-glob: 3.3.2 - get-tsconfig: 4.8.1 - is-bun-module: 1.2.1 - is-glob: 4.0.3 + debug: 4.4.3 + eslint: 9.39.1 + get-tsconfig: 4.13.0 + is-bun-module: 2.0.0 + stable-hash: 0.0.5 + tinyglobby: 0.2.15 + unrs-resolver: 1.11.1 optionalDependencies: - eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.41.0(eslint@9.39.4)(typescript@5.6.2))(eslint-import-resolver-typescript@3.6.3)(eslint@9.39.4) - transitivePeerDependencies: - - '@typescript-eslint/parser' - - eslint-import-resolver-node - - eslint-import-resolver-webpack - - supports-color - - eslint-module-utils@2.11.0(@typescript-eslint/parser@8.41.0(eslint@9.39.4)(typescript@5.6.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3)(eslint@9.39.4): - dependencies: - debug: 3.2.7 - optionalDependencies: - '@typescript-eslint/parser': 8.41.0(eslint@9.39.4)(typescript@5.6.2) - eslint: 9.39.4 - eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@8.41.0(eslint@9.39.4)(typescript@5.6.2))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.32.0)(eslint@9.39.4) + eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.48.0(eslint@9.39.1)(typescript@5.9.3))(eslint-import-resolver-typescript@3.10.1)(eslint@9.39.1) transitivePeerDependencies: - supports-color - eslint-module-utils@2.12.1(@typescript-eslint/parser@8.41.0(eslint@9.39.4)(typescript@5.6.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3)(eslint@9.39.4): + eslint-module-utils@2.12.1(@typescript-eslint/parser@8.48.0(eslint@9.39.1)(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1)(eslint@9.39.1): dependencies: debug: 3.2.7 optionalDependencies: - '@typescript-eslint/parser': 8.41.0(eslint@9.39.4)(typescript@5.6.2) - eslint: 9.39.4 + '@typescript-eslint/parser': 8.48.0(eslint@9.39.1)(typescript@5.9.3) + eslint: 9.39.1 eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@8.41.0(eslint@9.39.4)(typescript@5.6.2))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.32.0)(eslint@9.39.4) + eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0)(eslint@9.39.1) transitivePeerDependencies: - supports-color - eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.41.0(eslint@9.39.4)(typescript@5.6.2))(eslint-import-resolver-typescript@3.6.3)(eslint@9.39.4): + eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.48.0(eslint@9.39.1)(typescript@5.9.3))(eslint-import-resolver-typescript@3.10.1)(eslint@9.39.1): dependencies: '@rtsao/scc': 1.1.0 array-includes: 3.1.9 @@ -4198,9 +3748,9 @@ snapshots: array.prototype.flatmap: 1.3.3 debug: 3.2.7 doctrine: 2.1.0 - eslint: 9.39.4 + eslint: 9.39.1 eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.41.0(eslint@9.39.4)(typescript@5.6.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3)(eslint@9.39.4) + eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.48.0(eslint@9.39.1)(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1)(eslint@9.39.1) hasown: 2.0.2 is-core-module: 2.16.1 is-glob: 4.0.3 @@ -4212,54 +3762,53 @@ snapshots: string.prototype.trimend: 1.0.9 tsconfig-paths: 3.15.0 optionalDependencies: - '@typescript-eslint/parser': 8.41.0(eslint@9.39.4)(typescript@5.6.2) + '@typescript-eslint/parser': 8.48.0(eslint@9.39.1)(typescript@5.9.3) transitivePeerDependencies: - eslint-import-resolver-typescript - eslint-import-resolver-webpack - supports-color - eslint-plugin-jsx-a11y@6.10.0(eslint@9.39.4): + eslint-plugin-jsx-a11y@6.10.2(eslint@9.39.1): dependencies: - aria-query: 5.1.3 - array-includes: 3.1.8 - array.prototype.flatmap: 1.3.2 + aria-query: 5.3.2 + array-includes: 3.1.9 + array.prototype.flatmap: 1.3.3 ast-types-flow: 0.0.8 - axe-core: 4.10.0 + axe-core: 4.11.0 axobject-query: 4.1.0 damerau-levenshtein: 1.0.8 emoji-regex: 9.2.2 - es-iterator-helpers: 1.0.19 - eslint: 9.39.4 + eslint: 9.39.1 hasown: 2.0.2 jsx-ast-utils: 3.3.5 language-tags: 1.0.9 minimatch: 3.1.2 object.fromentries: 2.0.8 - safe-regex-test: 1.0.3 - string.prototype.includes: 2.0.0 + safe-regex-test: 1.1.0 + string.prototype.includes: 2.0.1 - eslint-plugin-prettier@5.5.4(eslint-config-prettier@10.1.8(eslint@9.39.4))(eslint@9.39.4)(prettier@3.3.3): + eslint-plugin-prettier@5.5.4(eslint-config-prettier@10.1.8(eslint@9.39.1))(eslint@9.39.1)(prettier@3.7.3): dependencies: - eslint: 9.39.4 - prettier: 3.3.3 + eslint: 9.39.1 + prettier: 3.7.3 prettier-linter-helpers: 1.0.0 synckit: 0.11.11 optionalDependencies: - eslint-config-prettier: 10.1.8(eslint@9.39.4) + eslint-config-prettier: 10.1.8(eslint@9.39.1) - eslint-plugin-react-hooks@5.2.0(eslint@9.39.4): + eslint-plugin-react-hooks@5.2.0(eslint@9.39.1): dependencies: - eslint: 9.39.4 + eslint: 9.39.1 - eslint-plugin-react@7.37.5(eslint@9.39.4): + eslint-plugin-react@7.37.5(eslint@9.39.1): dependencies: - array-includes: 3.1.8 + array-includes: 3.1.9 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 - eslint: 9.39.4 + eslint: 9.39.1 estraverse: 5.3.0 hasown: 2.0.2 jsx-ast-utils: 3.3.5 @@ -4282,24 +3831,24 @@ snapshots: eslint-visitor-keys@4.2.1: {} - eslint@9.39.4: + eslint@9.39.1: dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.4) - '@eslint-community/regexpp': 4.12.1 - '@eslint/config-array': 0.21.2 + '@eslint-community/eslint-utils': 4.9.0(eslint@9.39.1) + '@eslint-community/regexpp': 4.12.2 + '@eslint/config-array': 0.21.1 '@eslint/config-helpers': 0.4.2 '@eslint/core': 0.17.0 - '@eslint/eslintrc': 3.3.5 - '@eslint/js': 9.39.4 + '@eslint/eslintrc': 3.3.3 + '@eslint/js': 9.39.1 '@eslint/plugin-kit': 0.4.1 - '@humanfs/node': 0.16.6 + '@humanfs/node': 0.16.7 '@humanwhocodes/module-importer': 1.0.1 '@humanwhocodes/retry': 0.4.3 '@types/estree': 1.0.8 - ajv: 6.14.0 + ajv: 6.12.6 chalk: 4.1.2 cross-spawn: 7.0.6 - debug: 4.4.1 + debug: 4.4.3 escape-string-regexp: 4.0.0 eslint-scope: 8.4.0 eslint-visitor-keys: 4.2.1 @@ -4315,7 +3864,7 @@ snapshots: is-glob: 4.0.3 json-stable-stringify-without-jsonify: 1.0.1 lodash.merge: 4.6.2 - minimatch: 3.1.5 + minimatch: 3.1.2 natural-compare: 1.4.0 optionator: 0.9.4 transitivePeerDependencies: @@ -4351,21 +3900,17 @@ snapshots: merge2: 1.4.1 micromatch: 4.0.8 - fast-glob@3.3.2: - dependencies: - '@nodelib/fs.stat': 2.0.5 - '@nodelib/fs.walk': 1.2.8 - glob-parent: 5.1.2 - merge2: 1.4.1 - micromatch: 4.0.8 - fast-json-stable-stringify@2.1.0: {} fast-levenshtein@2.0.6: {} - fastq@1.17.1: + fastq@1.19.1: dependencies: - reusify: 1.0.4 + reusify: 1.1.0 + + fdir@6.5.0(picomatch@4.0.3): + optionalDependencies: + picomatch: 4.0.3 fetch-blob@3.2.0: dependencies: @@ -4394,10 +3939,6 @@ snapshots: flatted@3.3.3: {} - for-each@0.3.3: - dependencies: - is-callable: 1.2.7 - for-each@0.3.5: dependencies: is-callable: 1.2.7 @@ -4408,13 +3949,6 @@ snapshots: function-bind@1.1.2: {} - function.prototype.name@1.1.6: - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.23.3 - functions-have-names: 1.2.3 - function.prototype.name@1.1.8: dependencies: call-bind: 1.0.8 @@ -4426,15 +3960,9 @@ snapshots: functions-have-names@1.2.3: {} - get-caller-file@2.0.5: {} + generator-function@2.0.1: {} - get-intrinsic@1.2.4: - dependencies: - es-errors: 1.3.0 - function-bind: 1.1.2 - has-proto: 1.0.3 - has-symbols: 1.0.3 - hasown: 2.0.2 + get-caller-file@2.0.5: {} get-intrinsic@1.3.0: dependencies: @@ -4454,19 +3982,13 @@ snapshots: dunder-proto: 1.0.1 es-object-atoms: 1.1.1 - get-symbol-description@1.0.2: - dependencies: - call-bind: 1.0.7 - es-errors: 1.3.0 - get-intrinsic: 1.2.4 - get-symbol-description@1.1.0: dependencies: call-bound: 1.0.4 es-errors: 1.3.0 get-intrinsic: 1.3.0 - get-tsconfig@4.8.1: + get-tsconfig@4.13.0: dependencies: resolve-pkg-maps: 1.0.0 @@ -4485,37 +4007,27 @@ snapshots: define-properties: 1.2.1 gopd: 1.2.0 - gopd@1.0.1: - dependencies: - get-intrinsic: 1.2.4 - gopd@1.2.0: {} - graceful-fs@4.2.11: {} - graphemer@1.4.0: {} - has-bigints@1.0.2: {} + has-bigints@1.1.0: {} has-flag@4.0.0: {} has-property-descriptors@1.0.2: dependencies: - es-define-property: 1.0.0 - - has-proto@1.0.3: {} + es-define-property: 1.0.1 has-proto@1.2.0: dependencies: dunder-proto: 1.0.1 - has-symbols@1.0.3: {} - has-symbols@1.1.0: {} has-tostringtag@1.0.2: dependencies: - has-symbols: 1.0.3 + has-symbols: 1.1.0 hasown@2.0.2: dependencies: @@ -4528,11 +4040,13 @@ snapshots: https-proxy-agent@7.0.6: dependencies: agent-base: 7.1.4 - debug: 4.4.1 + debug: 4.4.3 transitivePeerDependencies: - supports-color - husky@9.1.6: {} + husky@9.1.7: {} + + iceberg-js@0.8.0: {} ignore@5.3.2: {} @@ -4547,30 +4061,12 @@ snapshots: imurmurhash@0.1.4: {} - index-to-position@1.2.0: {} - - internal-slot@1.0.7: - dependencies: - es-errors: 1.3.0 - hasown: 2.0.2 - side-channel: 1.0.6 - internal-slot@1.1.0: dependencies: es-errors: 1.3.0 hasown: 2.0.2 side-channel: 1.1.0 - is-arguments@1.1.1: - dependencies: - call-bind: 1.0.7 - has-tostringtag: 1.0.2 - - is-array-buffer@3.0.4: - dependencies: - call-bind: 1.0.7 - get-intrinsic: 1.2.4 - is-array-buffer@3.0.5: dependencies: call-bind: 1.0.8 @@ -4583,52 +4079,31 @@ snapshots: dependencies: has-tostringtag: 1.0.2 - is-bigint@1.0.4: - dependencies: - has-bigints: 1.0.2 - is-bigint@1.1.0: dependencies: - has-bigints: 1.0.2 - - is-boolean-object@1.1.2: - dependencies: - call-bind: 1.0.7 - has-tostringtag: 1.0.2 + has-bigints: 1.1.0 is-boolean-object@1.2.2: dependencies: call-bound: 1.0.4 has-tostringtag: 1.0.2 - is-bun-module@1.2.1: + is-bun-module@2.0.0: dependencies: - semver: 7.6.3 + semver: 7.7.3 is-callable@1.2.7: {} - is-core-module@2.15.1: - dependencies: - hasown: 2.0.2 - is-core-module@2.16.1: dependencies: hasown: 2.0.2 - is-data-view@1.0.1: - dependencies: - is-typed-array: 1.1.13 - is-data-view@1.0.2: dependencies: call-bound: 1.0.4 get-intrinsic: 1.3.0 is-typed-array: 1.1.15 - is-date-object@1.0.5: - dependencies: - has-tostringtag: 1.0.2 - is-date-object@1.1.0: dependencies: call-bound: 1.0.4 @@ -4636,19 +4111,19 @@ snapshots: is-extglob@2.1.1: {} - is-finalizationregistry@1.0.2: - dependencies: - call-bind: 1.0.8 - is-finalizationregistry@1.1.1: dependencies: call-bound: 1.0.4 is-fullwidth-code-point@3.0.0: {} - is-generator-function@1.0.10: + is-generator-function@1.1.2: dependencies: + call-bound: 1.0.4 + generator-function: 2.0.1 + get-proto: 1.0.1 has-tostringtag: 1.0.2 + safe-regex-test: 1.1.0 is-glob@4.0.3: dependencies: @@ -4658,10 +4133,6 @@ snapshots: is-negative-zero@2.0.3: {} - is-number-object@1.0.7: - dependencies: - has-tostringtag: 1.0.2 - is-number-object@1.1.1: dependencies: call-bound: 1.0.4 @@ -4669,11 +4140,6 @@ snapshots: is-number@7.0.0: {} - is-regex@1.1.4: - dependencies: - call-bind: 1.0.7 - has-tostringtag: 1.0.2 - is-regex@1.2.1: dependencies: call-bound: 1.0.4 @@ -4683,76 +4149,44 @@ snapshots: is-set@2.0.3: {} - is-shared-array-buffer@1.0.3: - dependencies: - call-bind: 1.0.7 - is-shared-array-buffer@1.0.4: dependencies: call-bound: 1.0.4 - is-string@1.0.7: - dependencies: - has-tostringtag: 1.0.2 - is-string@1.1.1: dependencies: call-bound: 1.0.4 has-tostringtag: 1.0.2 - is-symbol@1.0.4: - dependencies: - has-symbols: 1.0.3 - is-symbol@1.1.1: dependencies: call-bound: 1.0.4 has-symbols: 1.1.0 safe-regex-test: 1.1.0 - is-typed-array@1.1.13: - dependencies: - which-typed-array: 1.1.15 - is-typed-array@1.1.15: dependencies: which-typed-array: 1.1.19 is-weakmap@2.0.2: {} - is-weakref@1.0.2: - dependencies: - call-bind: 1.0.7 - is-weakref@1.1.1: dependencies: call-bound: 1.0.4 - is-weakset@2.0.3: + is-weakset@2.0.4: dependencies: - call-bind: 1.0.8 + call-bound: 1.0.4 get-intrinsic: 1.3.0 isarray@2.0.5: {} isexe@2.0.0: {} - isows@1.0.7(ws@8.18.3): - dependencies: - ws: 8.18.3 - - iterator.prototype@1.1.2: - dependencies: - define-properties: 1.2.1 - get-intrinsic: 1.2.4 - has-symbols: 1.0.3 - reflect.getprototypeof: 1.0.6 - set-function-name: 2.0.2 - iterator.prototype@1.1.5: dependencies: define-data-property: 1.1.4 - es-object-atoms: 1.0.0 + es-object-atoms: 1.1.1 get-intrinsic: 1.3.0 get-proto: 1.0.1 has-symbols: 1.1.0 @@ -4760,10 +4194,6 @@ snapshots: js-tokens@4.0.0: {} - js-yaml@4.1.0: - dependencies: - argparse: 2.0.1 - js-yaml@4.1.1: dependencies: argparse: 2.0.1 @@ -4784,9 +4214,9 @@ snapshots: jsx-ast-utils@3.3.5: dependencies: - array-includes: 3.1.8 - array.prototype.flat: 1.3.2 - object.assign: 4.1.5 + array-includes: 3.1.9 + array.prototype.flat: 1.3.3 + object.assign: 4.1.7 object.values: 1.2.1 keyv@4.5.4: @@ -4835,10 +4265,6 @@ snapshots: dependencies: brace-expansion: 1.1.12 - minimatch@3.1.5: - dependencies: - brace-expansion: 1.1.12 - minimatch@9.0.5: dependencies: brace-expansion: 2.0.2 @@ -4855,14 +4281,16 @@ snapshots: nanoid@3.3.11: {} + napi-postinstall@0.3.4: {} + natural-compare@1.4.0: {} next@16.1.1(react-dom@19.2.4(react@19.2.4))(react@19.2.4): dependencies: '@next/env': 16.1.1 '@swc/helpers': 0.5.15 - baseline-browser-mapping: 2.10.0 - caniuse-lite: 1.0.30001660 + baseline-browser-mapping: 2.9.12 + caniuse-lite: 1.0.30001757 postcss: 8.4.31 react: 19.2.4 react-dom: 19.2.4(react@19.2.4) @@ -4891,28 +4319,14 @@ snapshots: npm-normalize-package-bin@5.0.0: {} - npm@11.11.0: {} + npm@11.10.0: {} object-assign@4.1.1: {} - object-inspect@1.13.2: {} - object-inspect@1.13.4: {} - object-is@1.1.6: - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - object-keys@1.1.1: {} - object.assign@4.1.5: - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - has-symbols: 1.0.3 - object-keys: 1.1.1 - object.assign@4.1.7: dependencies: call-bind: 1.0.8 @@ -4931,23 +4345,23 @@ snapshots: object.fromentries@2.0.8: dependencies: - call-bind: 1.0.7 + call-bind: 1.0.8 define-properties: 1.2.1 - es-abstract: 1.23.3 - es-object-atoms: 1.0.0 + es-abstract: 1.24.0 + es-object-atoms: 1.1.1 object.groupby@1.0.3: dependencies: - call-bind: 1.0.7 + call-bind: 1.0.8 define-properties: 1.2.1 - es-abstract: 1.23.3 + es-abstract: 1.24.0 object.values@1.2.1: dependencies: call-bind: 1.0.8 call-bound: 1.0.4 define-properties: 1.2.1 - es-object-atoms: 1.0.0 + es-object-atoms: 1.1.1 optionator@0.9.4: dependencies: @@ -4983,12 +4397,6 @@ snapshots: json-parse-even-better-errors: 2.3.1 lines-and-columns: 1.2.4 - parse-json@8.3.0: - dependencies: - '@babel/code-frame': 7.27.1 - index-to-position: 1.2.0 - type-fest: 4.41.0 - path-exists@4.0.0: {} path-key@3.1.1: {} @@ -5001,7 +4409,9 @@ snapshots: picomatch@2.3.1: {} - possible-typed-array-names@1.0.0: {} + picomatch@4.0.3: {} + + possible-typed-array-names@1.1.0: {} postcss-value-parser@4.2.0: {} @@ -5023,7 +4433,7 @@ snapshots: dependencies: fast-diff: 1.3.0 - prettier@3.3.3: {} + prettier@3.7.3: {} proc-log@6.1.0: {} @@ -5042,34 +4452,34 @@ snapshots: react: 19.2.4 scheduler: 0.27.0 - react-icons@5.6.0(react@19.2.4): + react-icons@5.5.0(react@19.2.4): dependencies: react: 19.2.4 react-is@16.13.1: {} - react-is@19.2.4: {} + react-is@19.2.3: {} - react-select@5.10.2(@types/react@19.1.12)(react-dom@19.2.4(react@19.2.4))(react@19.2.4): + react-select@5.10.2(@types/react@19.2.7)(react-dom@19.2.4(react@19.2.4))(react@19.2.4): dependencies: - '@babel/runtime': 7.28.6 + '@babel/runtime': 7.28.4 '@emotion/cache': 11.14.0 - '@emotion/react': 11.14.0(@types/react@19.1.12)(react@19.2.4) - '@floating-ui/dom': 1.7.6 - '@types/react-transition-group': 4.4.12(@types/react@19.1.12) + '@emotion/react': 11.14.0(@types/react@19.2.7)(react@19.2.4) + '@floating-ui/dom': 1.7.4 + '@types/react-transition-group': 4.4.12(@types/react@19.2.7) memoize-one: 6.0.0 prop-types: 15.8.1 react: 19.2.4 react-dom: 19.2.4(react@19.2.4) react-transition-group: 4.4.5(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - use-isomorphic-layout-effect: 1.2.1(@types/react@19.1.12)(react@19.2.4) + use-isomorphic-layout-effect: 1.2.1(@types/react@19.2.7)(react@19.2.4) transitivePeerDependencies: - '@types/react' - supports-color react-transition-group@4.4.5(react-dom@19.2.4(react@19.2.4))(react@19.2.4): dependencies: - '@babel/runtime': 7.28.6 + '@babel/runtime': 7.28.4 dom-helpers: 5.2.1 loose-envify: 1.4.0 prop-types: 15.8.1 @@ -5091,23 +4501,6 @@ snapshots: get-proto: 1.0.1 which-builtin-type: 1.2.1 - reflect.getprototypeof@1.0.6: - dependencies: - call-bind: 1.0.8 - define-properties: 1.2.1 - es-abstract: 1.24.0 - es-errors: 1.3.0 - get-intrinsic: 1.3.0 - globalthis: 1.0.4 - which-builtin-type: 1.1.4 - - regexp.prototype.flags@1.5.2: - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-errors: 1.3.0 - set-function-name: 2.0.2 - regexp.prototype.flags@1.5.4: dependencies: call-bind: 1.0.8 @@ -5125,19 +4518,19 @@ snapshots: resolve-pkg-maps@1.0.0: {} - resolve@1.22.8: + resolve@1.22.11: dependencies: - is-core-module: 2.15.1 + is-core-module: 2.16.1 path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 resolve@2.0.0-next.5: dependencies: - is-core-module: 2.15.1 + is-core-module: 2.16.1 path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 - reusify@1.0.4: {} + reusify@1.1.0: {} run-parallel@1.2.0: dependencies: @@ -5147,13 +4540,6 @@ snapshots: dependencies: tslib: 2.8.1 - safe-array-concat@1.1.2: - dependencies: - call-bind: 1.0.7 - get-intrinsic: 1.2.4 - has-symbols: 1.0.3 - isarray: 2.0.5 - safe-array-concat@1.1.3: dependencies: call-bind: 1.0.8 @@ -5167,12 +4553,6 @@ snapshots: es-errors: 1.3.0 isarray: 2.0.5 - safe-regex-test@1.0.3: - dependencies: - call-bind: 1.0.7 - es-errors: 1.3.0 - is-regex: 1.1.4 - safe-regex-test@1.1.0: dependencies: call-bound: 1.0.4 @@ -5183,20 +4563,15 @@ snapshots: semver@6.3.1: {} - semver@7.6.3: {} - - semver@7.7.2: {} - - semver@7.7.4: - optional: true + semver@7.7.3: {} set-function-length@1.2.2: dependencies: define-data-property: 1.1.4 es-errors: 1.3.0 function-bind: 1.1.2 - get-intrinsic: 1.2.4 - gopd: 1.0.1 + get-intrinsic: 1.3.0 + gopd: 1.2.0 has-property-descriptors: 1.0.2 set-function-name@2.0.2: @@ -5216,9 +4591,9 @@ snapshots: sharp@0.34.5: dependencies: - '@img/colour': 1.1.0 + '@img/colour': 1.0.0 detect-libc: 2.1.2 - semver: 7.7.4 + semver: 7.7.3 optionalDependencies: '@img/sharp-darwin-arm64': 0.34.5 '@img/sharp-darwin-x64': 0.34.5 @@ -5274,13 +4649,6 @@ snapshots: object-inspect: 1.13.4 side-channel-map: 1.0.1 - side-channel@1.0.6: - dependencies: - call-bind: 1.0.7 - es-errors: 1.3.0 - get-intrinsic: 1.2.4 - object-inspect: 1.13.2 - side-channel@1.1.0: dependencies: es-errors: 1.3.0 @@ -5295,9 +4663,7 @@ snapshots: source-map@0.5.7: {} - stop-iteration-iterator@1.0.0: - dependencies: - internal-slot: 1.0.7 + stable-hash@0.0.5: {} stop-iteration-iterator@1.1.0: dependencies: @@ -5310,10 +4676,11 @@ snapshots: is-fullwidth-code-point: 3.0.0 strip-ansi: 6.0.1 - string.prototype.includes@2.0.0: + string.prototype.includes@2.0.1: dependencies: + call-bind: 1.0.8 define-properties: 1.2.1 - es-abstract: 1.23.3 + es-abstract: 1.24.0 string.prototype.matchall@4.0.12: dependencies: @@ -5322,7 +4689,7 @@ snapshots: define-properties: 1.2.1 es-abstract: 1.24.0 es-errors: 1.3.0 - es-object-atoms: 1.0.0 + es-object-atoms: 1.1.1 get-intrinsic: 1.3.0 gopd: 1.2.0 has-symbols: 1.1.0 @@ -5334,7 +4701,7 @@ snapshots: string.prototype.repeat@1.0.0: dependencies: define-properties: 1.2.1 - es-abstract: 1.23.3 + es-abstract: 1.24.0 string.prototype.trim@1.2.10: dependencies: @@ -5346,31 +4713,18 @@ snapshots: es-object-atoms: 1.1.1 has-property-descriptors: 1.0.2 - string.prototype.trim@1.2.9: - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.23.3 - es-object-atoms: 1.0.0 - - string.prototype.trimend@1.0.8: - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-object-atoms: 1.0.0 - string.prototype.trimend@1.0.9: dependencies: call-bind: 1.0.8 call-bound: 1.0.4 define-properties: 1.2.1 - es-object-atoms: 1.0.0 + es-object-atoms: 1.1.1 string.prototype.trimstart@1.0.8: dependencies: - call-bind: 1.0.7 + call-bind: 1.0.8 define-properties: 1.2.1 - es-object-atoms: 1.0.0 + es-object-atoms: 1.1.1 strip-ansi@6.0.1: dependencies: @@ -5404,12 +4758,12 @@ snapshots: stylis@4.3.6: {} - supabase@2.77.0: + supabase@2.76.15: dependencies: bin-links: 6.0.0 https-proxy-agent: 7.0.6 node-fetch: 3.3.2 - tar: 7.5.10 + tar: 7.5.9 transitivePeerDependencies: - supports-color @@ -5429,9 +4783,7 @@ snapshots: tabbable@6.4.0: {} - tapable@2.2.1: {} - - tar@7.5.10: + tar@7.5.9: dependencies: '@isaacs/fs-minipass': 4.0.1 chownr: 3.0.0 @@ -5439,17 +4791,20 @@ snapshots: minizlib: 3.1.0 yallist: 5.0.0 + tinyglobby@0.2.15: + dependencies: + fdir: 6.5.0(picomatch@4.0.3) + picomatch: 4.0.3 + to-regex-range@5.0.1: dependencies: is-number: 7.0.0 - tr46@0.0.3: {} - tree-kill@1.2.2: {} - ts-api-utils@2.1.0(typescript@5.6.2): + ts-api-utils@2.1.0(typescript@5.9.3): dependencies: - typescript: 5.6.2 + typescript: 5.9.3 tsconfig-paths@3.15.0: dependencies: @@ -5464,100 +4819,83 @@ snapshots: dependencies: prelude-ls: 1.2.1 - type-fest@4.41.0: {} - - typed-array-buffer@1.0.2: - dependencies: - call-bind: 1.0.7 - es-errors: 1.3.0 - is-typed-array: 1.1.13 - typed-array-buffer@1.0.3: dependencies: call-bound: 1.0.4 es-errors: 1.3.0 is-typed-array: 1.1.15 - typed-array-byte-length@1.0.1: - dependencies: - call-bind: 1.0.7 - for-each: 0.3.3 - gopd: 1.0.1 - has-proto: 1.0.3 - is-typed-array: 1.1.13 - typed-array-byte-length@1.0.3: dependencies: call-bind: 1.0.8 - for-each: 0.3.3 + for-each: 0.3.5 gopd: 1.2.0 has-proto: 1.2.0 is-typed-array: 1.1.15 - typed-array-byte-offset@1.0.2: - dependencies: - available-typed-arrays: 1.0.7 - call-bind: 1.0.7 - for-each: 0.3.3 - gopd: 1.0.1 - has-proto: 1.0.3 - is-typed-array: 1.1.13 - typed-array-byte-offset@1.0.4: dependencies: available-typed-arrays: 1.0.7 call-bind: 1.0.8 - for-each: 0.3.3 + for-each: 0.3.5 gopd: 1.2.0 has-proto: 1.2.0 is-typed-array: 1.1.15 reflect.getprototypeof: 1.0.10 - typed-array-length@1.0.6: - dependencies: - call-bind: 1.0.7 - for-each: 0.3.3 - gopd: 1.0.1 - has-proto: 1.0.3 - is-typed-array: 1.1.13 - possible-typed-array-names: 1.0.0 - typed-array-length@1.0.7: dependencies: call-bind: 1.0.8 - for-each: 0.3.3 + for-each: 0.3.5 gopd: 1.2.0 is-typed-array: 1.1.15 - possible-typed-array-names: 1.0.0 - reflect.getprototypeof: 1.0.6 + possible-typed-array-names: 1.1.0 + reflect.getprototypeof: 1.0.10 - typescript@5.6.2: {} - - unbox-primitive@1.0.2: - dependencies: - call-bind: 1.0.7 - has-bigints: 1.0.2 - has-symbols: 1.0.3 - which-boxed-primitive: 1.0.2 + typescript@5.9.3: {} unbox-primitive@1.1.0: dependencies: call-bound: 1.0.4 - has-bigints: 1.0.2 + has-bigints: 1.1.0 has-symbols: 1.1.0 which-boxed-primitive: 1.1.1 - undici-types@6.19.8: {} + undici-types@6.21.0: {} + + unrs-resolver@1.11.1: + dependencies: + napi-postinstall: 0.3.4 + optionalDependencies: + '@unrs/resolver-binding-android-arm-eabi': 1.11.1 + '@unrs/resolver-binding-android-arm64': 1.11.1 + '@unrs/resolver-binding-darwin-arm64': 1.11.1 + '@unrs/resolver-binding-darwin-x64': 1.11.1 + '@unrs/resolver-binding-freebsd-x64': 1.11.1 + '@unrs/resolver-binding-linux-arm-gnueabihf': 1.11.1 + '@unrs/resolver-binding-linux-arm-musleabihf': 1.11.1 + '@unrs/resolver-binding-linux-arm64-gnu': 1.11.1 + '@unrs/resolver-binding-linux-arm64-musl': 1.11.1 + '@unrs/resolver-binding-linux-ppc64-gnu': 1.11.1 + '@unrs/resolver-binding-linux-riscv64-gnu': 1.11.1 + '@unrs/resolver-binding-linux-riscv64-musl': 1.11.1 + '@unrs/resolver-binding-linux-s390x-gnu': 1.11.1 + '@unrs/resolver-binding-linux-x64-gnu': 1.11.1 + '@unrs/resolver-binding-linux-x64-musl': 1.11.1 + '@unrs/resolver-binding-wasm32-wasi': 1.11.1 + '@unrs/resolver-binding-win32-arm64-msvc': 1.11.1 + '@unrs/resolver-binding-win32-ia32-msvc': 1.11.1 + '@unrs/resolver-binding-win32-x64-msvc': 1.11.1 uri-js@4.4.1: dependencies: punycode: 2.3.1 - use-isomorphic-layout-effect@1.2.1(@types/react@19.1.12)(react@19.2.4): + use-isomorphic-layout-effect@1.2.1(@types/react@19.2.7)(react@19.2.4): dependencies: react: 19.2.4 optionalDependencies: - '@types/react': 19.1.12 + '@types/react': 19.2.7 use-sync-external-store@1.6.0(react@19.2.4): dependencies: @@ -5565,21 +4903,6 @@ snapshots: web-streams-polyfill@3.3.3: {} - webidl-conversions@3.0.1: {} - - whatwg-url@5.0.0: - dependencies: - tr46: 0.0.3 - webidl-conversions: 3.0.1 - - which-boxed-primitive@1.0.2: - dependencies: - is-bigint: 1.0.4 - is-boolean-object: 1.1.2 - is-number-object: 1.0.7 - is-string: 1.0.7 - is-symbol: 1.0.4 - which-boxed-primitive@1.1.1: dependencies: is-bigint: 1.1.0 @@ -5588,21 +4911,6 @@ snapshots: is-string: 1.1.1 is-symbol: 1.1.1 - which-builtin-type@1.1.4: - dependencies: - function.prototype.name: 1.1.8 - has-tostringtag: 1.0.2 - is-async-function: 2.0.0 - is-date-object: 1.0.5 - is-finalizationregistry: 1.0.2 - is-generator-function: 1.0.10 - is-regex: 1.2.1 - is-weakref: 1.1.1 - isarray: 2.0.5 - which-boxed-primitive: 1.0.2 - which-collection: 1.0.2 - which-typed-array: 1.1.19 - which-builtin-type@1.2.1: dependencies: call-bound: 1.0.4 @@ -5611,7 +4919,7 @@ snapshots: is-async-function: 2.0.0 is-date-object: 1.1.0 is-finalizationregistry: 1.1.1 - is-generator-function: 1.0.10 + is-generator-function: 1.1.2 is-regex: 1.2.1 is-weakref: 1.1.1 isarray: 2.0.5 @@ -5624,15 +4932,7 @@ snapshots: is-map: 2.0.3 is-set: 2.0.3 is-weakmap: 2.0.2 - is-weakset: 2.0.3 - - which-typed-array@1.1.15: - dependencies: - available-typed-arrays: 1.0.7 - call-bind: 1.0.7 - for-each: 0.3.3 - gopd: 1.0.1 - has-tostringtag: 1.0.2 + is-weakset: 2.0.4 which-typed-array@1.1.19: dependencies: @@ -5656,8 +4956,9 @@ snapshots: string-width: 4.2.3 strip-ansi: 6.0.1 - write-file-atomic@7.0.1: + write-file-atomic@7.0.0: dependencies: + imurmurhash: 0.1.4 signal-exit: 4.1.0 ws@8.18.3: {} From ea88f8f666e9bd85e50b89d9a28487c89dbe14d7 Mon Sep 17 00:00:00 2001 From: dionyichia Date: Mon, 6 Apr 2026 16:12:47 -0700 Subject: [PATCH 13/13] updated setting prompt answers to from sequential to parrallel, added style fix for checkboxes, and set struct for onToggle --- app/auth/change-password/page.tsx | 3 +-- .../components/CheckboxPromptParticipant.tsx | 16 +++++++----- .../components/PromptRenderer.tsx | 2 +- app/participants/components/styles.ts | 1 + app/participants/session-flow/page.tsx | 25 +++++++++++-------- 5 files changed, 27 insertions(+), 20 deletions(-) diff --git a/app/auth/change-password/page.tsx b/app/auth/change-password/page.tsx index 06a1a417..5c2aa1a5 100644 --- a/app/auth/change-password/page.tsx +++ b/app/auth/change-password/page.tsx @@ -81,8 +81,7 @@ export default function ChangePassword() { name="password" placeholder="New Password" onChange={e => ( - setPassword(e.target.value), - setPasswordTouched(true) + setPassword(e.target.value), setPasswordTouched(true) )} type={showPassword ? "text" : "password"} value={password} diff --git a/app/participants/components/CheckboxPromptParticipant.tsx b/app/participants/components/CheckboxPromptParticipant.tsx index 8f5022b7..0aa33a7e 100644 --- a/app/participants/components/CheckboxPromptParticipant.tsx +++ b/app/participants/components/CheckboxPromptParticipant.tsx @@ -8,27 +8,31 @@ import { type Props = { options: PromptOption[]; - value: string[]; + values: string[]; onChange: (value: string[]) => void; }; export default function CheckboxPromptParticipant({ options, - value, + values, onChange, }: Props) { function toggle(id: string) { - if (value.includes(id)) { - onChange(value.filter(v => v !== id)); + const set = new Set(values); + + if (set.has(id)) { + set.delete(id); } else { - onChange([...value, id]); + set.add(id); } + + onChange(Array.from(set)); } return ( {options.map(o => { - const selected = value.includes(o.option_id); + const selected = values.includes(o.option_id); return ( )} diff --git a/app/participants/components/styles.ts b/app/participants/components/styles.ts index ebbed7c9..476b1cea 100644 --- a/app/participants/components/styles.ts +++ b/app/participants/components/styles.ts @@ -53,6 +53,7 @@ export const CheckboxParticipantStyled = styled.div` display: flex; flex-direction: column; width: 100%; + gap: 8px; .MuiFormGroup-root { gap: 8px; diff --git a/app/participants/session-flow/page.tsx b/app/participants/session-flow/page.tsx index 29bb60b8..e0eb6f0c 100644 --- a/app/participants/session-flow/page.tsx +++ b/app/participants/session-flow/page.tsx @@ -277,17 +277,20 @@ export default function ParticipantFlowPage() { } const values = Array.isArray(value) ? value : [value]; - for (const v of values) { - const result = await createPromptAnswer( - userId, - prompt_id, - sessionId, - rolePhase.phase_id, - v, - prompt_type, - ); - console.log("inserted", v, result); - } + + // Updated to parrallelise DB updates + await Promise.allSettled( + values.map(v => + createPromptAnswer( + userId, + prompt_id, + sessionId, + rolePhase.phase_id, + v, + prompt_type, + ), + ), + ); console.log("saving answer ", prompt_id, values);