diff --git a/.eslintrc.json b/.eslintrc.json deleted file mode 100644 index 7c52faa3c..000000000 --- a/.eslintrc.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "root": true, - "ignorePatterns": ["**/*"], - "plugins": ["@nrwl/nx"], - "overrides": [ - { - "files": ["*.ts", "*.tsx", "*.js", "*.jsx"], - "rules": { - "@nrwl/nx/enforce-module-boundaries": [ - "error", - { - "enforceBuildableLibDependency": true, - "allow": [], - "depConstraints": [ - { - "sourceTag": "*", - "onlyDependOnLibsWithTags": ["*"] - } - ] - } - ] - } - }, - { - "files": ["*.ts", "*.tsx"], - "extends": ["plugin:@nrwl/nx/typescript"], - "rules": {} - }, - { - "files": ["*.js", "*.jsx"], - "extends": ["plugin:@nrwl/nx/javascript"], - "rules": {} - }, - { - "files": ["*.spec.ts", "*.spec.tsx", "*.spec.js", "*.spec.jsx"], - "env": { - "jest": true - }, - "rules": {} - } - ] -} diff --git a/apps/nextjs/animations/Comp.json b/apps/nextjs/animations/Comp.json new file mode 100644 index 000000000..626ee8150 --- /dev/null +++ b/apps/nextjs/animations/Comp.json @@ -0,0 +1 @@ +{"nm":"Comp 1","ddd":0,"h":300,"w":300,"meta":{"g":"LottieFiles AE 1.0.0","tc":"#00000000"},"layers":[{"ty":0,"nm":"Pre-comp 1","sr":1,"st":0,"op":211,"ip":0,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[150,150,0],"ix":1},"s":{"a":0,"k":[41,41,100],"ix":6},"sk":{"a":0,"k":0},"p":{"a":0,"k":[150,150,0],"ix":2},"r":{"a":0,"k":0,"ix":10},"sa":{"a":0,"k":0},"o":{"a":0,"k":100,"ix":11}},"ef":[],"w":300,"h":300,"refId":"comp_0","ind":1}],"v":"4.8.0","fr":60,"op":41,"ip":9,"assets":[{"nm":"","id":"comp_0","layers":[{"ty":4,"nm":"ball4","sr":1,"st":25,"op":71,"ip":40,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6},"sk":{"a":0,"k":0},"p":{"s":true,"x":{"a":0,"k":223,"ix":3},"y":{"a":1,"k":[{"o":{"x":0.534,"y":0},"i":{"x":0.465,"y":1},"s":[169.5],"t":25},{"o":{"x":0.514,"y":0},"i":{"x":0.424,"y":1},"s":[129.5],"t":40},{"o":{"x":0.054,"y":0},"i":{"x":0.465,"y":1},"s":[169.5],"t":55},{"s":[129.5],"t":70}],"ix":4},"z":{"a":0,"k":0}},"r":{"a":0,"k":0,"ix":10},"sa":{"a":0,"k":0},"o":{"a":0,"k":100,"ix":11}},"ef":[],"shapes":[{"ty":"gr","bm":0,"hd":false,"mn":"ADBE Vector Group","nm":"Group 1","ix":1,"cix":2,"np":2,"it":[{"ty":"sh","bm":0,"hd":false,"mn":"ADBE Vector Shape - Group","nm":"Path 1","ix":1,"d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,-14.359],[14.359,0],[0,14.359],[-14.359,0]],"o":[[0,14.359],[-14.359,0],[0,-14.359],[14.359,0]],"v":[[26,0],[0,26],[-26,0],[0,-26]]},"ix":2}},{"ty":"fl","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Fill","nm":"Fill 1","c":{"a":0,"k":[0.9176,0.4824,0.0431],"ix":4},"r":1,"o":{"a":0,"k":100,"ix":5}},{"ty":"tr","a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"sk":{"a":0,"k":0,"ix":4},"p":{"a":0,"k":[0,0],"ix":2},"r":{"a":0,"k":0,"ix":6},"sa":{"a":0,"k":0,"ix":5},"o":{"a":0,"k":100,"ix":7}}]}],"ind":1},{"ty":4,"nm":"ball 4","sr":1,"st":20,"op":66,"ip":35,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6},"sk":{"a":0,"k":0},"p":{"s":true,"x":{"a":0,"k":150,"ix":3},"y":{"a":1,"k":[{"o":{"x":0.534,"y":0},"i":{"x":0.465,"y":1},"s":[169.5],"t":20},{"o":{"x":0.514,"y":0},"i":{"x":0.424,"y":1},"s":[129.5],"t":35},{"o":{"x":0.054,"y":0},"i":{"x":0.465,"y":1},"s":[169.5],"t":50},{"s":[129.5],"t":65}],"ix":4},"z":{"a":0,"k":0}},"r":{"a":0,"k":0,"ix":10},"sa":{"a":0,"k":0},"o":{"a":0,"k":100,"ix":11}},"ef":[],"shapes":[{"ty":"gr","bm":0,"hd":false,"mn":"ADBE Vector Group","nm":"Group 1","ix":1,"cix":2,"np":2,"it":[{"ty":"sh","bm":0,"hd":false,"mn":"ADBE Vector Shape - Group","nm":"Path 1","ix":1,"d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,-14.359],[14.359,0],[0,14.359],[-14.359,0]],"o":[[0,14.359],[-14.359,0],[0,-14.359],[14.359,0]],"v":[[26,0],[0,26],[-26,0],[0,-26]]},"ix":2}},{"ty":"fl","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Fill","nm":"Fill 1","c":{"a":0,"k":[0.9176,0.4824,0.0431],"ix":4},"r":1,"o":{"a":0,"k":100,"ix":5}},{"ty":"tr","a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"sk":{"a":0,"k":0,"ix":4},"p":{"a":0,"k":[0,0],"ix":2},"r":{"a":0,"k":0,"ix":6},"sa":{"a":0,"k":0,"ix":5},"o":{"a":0,"k":100,"ix":7}}]}],"ind":2},{"ty":4,"nm":"ball 3","sr":1,"st":15,"op":61,"ip":30,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6},"sk":{"a":0,"k":0},"p":{"s":true,"x":{"a":0,"k":77,"ix":3},"y":{"a":1,"k":[{"o":{"x":0.534,"y":0},"i":{"x":0.465,"y":1},"s":[169.5],"t":15},{"o":{"x":0.514,"y":0},"i":{"x":0.424,"y":1},"s":[129.5],"t":30},{"o":{"x":0.054,"y":0},"i":{"x":0.465,"y":1},"s":[169.5],"t":45},{"s":[129.5],"t":60}],"ix":4},"z":{"a":0,"k":0}},"r":{"a":0,"k":0,"ix":10},"sa":{"a":0,"k":0},"o":{"a":0,"k":100,"ix":11}},"ef":[],"shapes":[{"ty":"gr","bm":0,"hd":false,"mn":"ADBE Vector Group","nm":"Group 1","ix":1,"cix":2,"np":2,"it":[{"ty":"sh","bm":0,"hd":false,"mn":"ADBE Vector Shape - Group","nm":"Path 1","ix":1,"d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,-14.359],[14.359,0],[0,14.359],[-14.359,0]],"o":[[0,14.359],[-14.359,0],[0,-14.359],[14.359,0]],"v":[[26,0],[0,26],[-26,0],[0,-26]]},"ix":2}},{"ty":"fl","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Fill","nm":"Fill 1","c":{"a":0,"k":[0.9176,0.4824,0.0431],"ix":4},"r":1,"o":{"a":0,"k":100,"ix":5}},{"ty":"tr","a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"sk":{"a":0,"k":0,"ix":4},"p":{"a":0,"k":[0,0],"ix":2},"r":{"a":0,"k":0,"ix":6},"sa":{"a":0,"k":0,"ix":5},"o":{"a":0,"k":100,"ix":7}}]}],"ind":3},{"ty":4,"nm":"ball3","sr":1,"st":-6,"op":40,"ip":9,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6},"sk":{"a":0,"k":0},"p":{"s":true,"x":{"a":0,"k":223,"ix":3},"y":{"a":1,"k":[{"o":{"x":0.534,"y":0},"i":{"x":0.465,"y":1},"s":[169.5],"t":-6},{"o":{"x":0.514,"y":0},"i":{"x":0.424,"y":1},"s":[129.5],"t":9},{"o":{"x":0.054,"y":0},"i":{"x":0.465,"y":1},"s":[169.5],"t":24},{"s":[129.5],"t":39}],"ix":4},"z":{"a":0,"k":0}},"r":{"a":0,"k":0,"ix":10},"sa":{"a":0,"k":0},"o":{"a":0,"k":100,"ix":11}},"ef":[],"shapes":[{"ty":"gr","bm":0,"hd":false,"mn":"ADBE Vector Group","nm":"Group 1","ix":1,"cix":2,"np":2,"it":[{"ty":"sh","bm":0,"hd":false,"mn":"ADBE Vector Shape - Group","nm":"Path 1","ix":1,"d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,-14.359],[14.359,0],[0,14.359],[-14.359,0]],"o":[[0,14.359],[-14.359,0],[0,-14.359],[14.359,0]],"v":[[26,0],[0,26],[-26,0],[0,-26]]},"ix":2}},{"ty":"fl","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Fill","nm":"Fill 1","c":{"a":0,"k":[0.9176,0.4824,0.0431],"ix":4},"r":1,"o":{"a":0,"k":100,"ix":5}},{"ty":"tr","a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"sk":{"a":0,"k":0,"ix":4},"p":{"a":0,"k":[0,0],"ix":2},"r":{"a":0,"k":0,"ix":6},"sa":{"a":0,"k":0,"ix":5},"o":{"a":0,"k":100,"ix":7}}]}],"ind":4},{"ty":4,"nm":"ball 2","sr":1,"st":-11,"op":35,"ip":4,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6},"sk":{"a":0,"k":0},"p":{"s":true,"x":{"a":0,"k":150,"ix":3},"y":{"a":1,"k":[{"o":{"x":0.534,"y":0},"i":{"x":0.465,"y":1},"s":[169.5],"t":-11},{"o":{"x":0.514,"y":0},"i":{"x":0.424,"y":1},"s":[129.5],"t":4},{"o":{"x":0.054,"y":0},"i":{"x":0.465,"y":1},"s":[169.5],"t":19},{"s":[129.5],"t":34}],"ix":4},"z":{"a":0,"k":0}},"r":{"a":0,"k":0,"ix":10},"sa":{"a":0,"k":0},"o":{"a":0,"k":100,"ix":11}},"ef":[],"shapes":[{"ty":"gr","bm":0,"hd":false,"mn":"ADBE Vector Group","nm":"Group 1","ix":1,"cix":2,"np":2,"it":[{"ty":"sh","bm":0,"hd":false,"mn":"ADBE Vector Shape - Group","nm":"Path 1","ix":1,"d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,-14.359],[14.359,0],[0,14.359],[-14.359,0]],"o":[[0,14.359],[-14.359,0],[0,-14.359],[14.359,0]],"v":[[26,0],[0,26],[-26,0],[0,-26]]},"ix":2}},{"ty":"fl","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Fill","nm":"Fill 1","c":{"a":0,"k":[0.9176,0.4824,0.0431],"ix":4},"r":1,"o":{"a":0,"k":100,"ix":5}},{"ty":"tr","a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"sk":{"a":0,"k":0,"ix":4},"p":{"a":0,"k":[0,0],"ix":2},"r":{"a":0,"k":0,"ix":6},"sa":{"a":0,"k":0,"ix":5},"o":{"a":0,"k":100,"ix":7}}]}],"ind":5},{"ty":4,"nm":"ball 1","sr":1,"st":-16,"op":30,"ip":-1,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6},"sk":{"a":0,"k":0},"p":{"s":true,"x":{"a":0,"k":77,"ix":3},"y":{"a":1,"k":[{"o":{"x":0.534,"y":0},"i":{"x":0.465,"y":1},"s":[169.5],"t":-16},{"o":{"x":0.514,"y":0},"i":{"x":0.424,"y":1},"s":[129.5],"t":-1},{"o":{"x":0.054,"y":0},"i":{"x":0.465,"y":1},"s":[169.5],"t":14},{"s":[129.5],"t":29}],"ix":4},"z":{"a":0,"k":0}},"r":{"a":0,"k":0,"ix":10},"sa":{"a":0,"k":0},"o":{"a":0,"k":100,"ix":11}},"ef":[],"shapes":[{"ty":"gr","bm":0,"hd":false,"mn":"ADBE Vector Group","nm":"Group 1","ix":1,"cix":2,"np":2,"it":[{"ty":"sh","bm":0,"hd":false,"mn":"ADBE Vector Shape - Group","nm":"Path 1","ix":1,"d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,-14.359],[14.359,0],[0,14.359],[-14.359,0]],"o":[[0,14.359],[-14.359,0],[0,-14.359],[14.359,0]],"v":[[26,0],[0,26],[-26,0],[0,-26]]},"ix":2}},{"ty":"fl","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Fill","nm":"Fill 1","c":{"a":0,"k":[0.9176,0.4824,0.0431],"ix":4},"r":1,"o":{"a":0,"k":100,"ix":5}},{"ty":"tr","a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"sk":{"a":0,"k":0,"ix":4},"p":{"a":0,"k":[0,0],"ix":2},"r":{"a":0,"k":0,"ix":6},"sa":{"a":0,"k":0,"ix":5},"o":{"a":0,"k":100,"ix":7}}]}],"ind":6}]}]} \ No newline at end of file diff --git a/apps/nextjs/animations/loading.json b/apps/nextjs/animations/loading.json new file mode 100644 index 000000000..f174dbafe --- /dev/null +++ b/apps/nextjs/animations/loading.json @@ -0,0 +1 @@ +{"v":"5.5.5","fr":30,"ip":0,"op":90,"w":300,"h":150,"nm":"Loading-2","ddd":0,"assets":[],"layers":[{"ddd":0,"ind":1,"ty":4,"nm":"icon 2","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":39,"s":[-90]},{"t":79,"s":[270]}],"ix":10},"p":{"a":0,"k":[150,75,0],"ix":2},"a":{"a":0,"k":[53,53,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,-15.464],[15.464,0],[0,15.464],[-15.464,0]],"o":[[0,15.464],[-15.464,0],[0,-15.464],[15.464,0]],"v":[[28,0],[0,28],[-28,0],[0,-28]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.9607843137254902,0.6509803921568628,0.13725490196078433,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":10,"ix":5},"lc":2,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[53,53],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":51,"s":[0]},{"t":79,"s":[100]}],"ix":1},"e":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":39,"s":[0]},{"t":64,"s":[100]}],"ix":2},"o":{"a":0,"k":0,"ix":3},"m":1,"ix":2,"nm":"Trim Paths 1","mn":"ADBE Vector Filter - Trim","hd":false}],"ip":39,"op":79,"st":39,"bm":0},{"ddd":0,"ind":2,"ty":4,"nm":"icon","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":0,"s":[-90]},{"t":40,"s":[270]}],"ix":10},"p":{"a":0,"k":[150,75,0],"ix":2},"a":{"a":0,"k":[53,53,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,-15.464],[15.464,0],[0,15.464],[-15.464,0]],"o":[[0,15.464],[-15.464,0],[0,-15.464],[15.464,0]],"v":[[28,0],[0,28],[-28,0],[0,-28]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.9607843137254902,0.6509803921568628,0.13725490196078433,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":10,"ix":5},"lc":2,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[53,53],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":12,"s":[0]},{"t":40,"s":[100]}],"ix":1},"e":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":0,"s":[0]},{"t":25,"s":[100]}],"ix":2},"o":{"a":0,"k":0,"ix":3},"m":1,"ix":2,"nm":"Trim Paths 1","mn":"ADBE Vector Filter - Trim","hd":false}],"ip":0,"op":40,"st":0,"bm":0}],"markers":[]} \ No newline at end of file diff --git a/apps/nextjs/app/api/voice2measurements/route.ts b/apps/nextjs/app/api/voice2measurements/route.ts new file mode 100644 index 000000000..5fc295ea0 --- /dev/null +++ b/apps/nextjs/app/api/voice2measurements/route.ts @@ -0,0 +1,17 @@ +import { NextRequest, NextResponse } from 'next/server'; +import {handleError} from "@/lib/errorHandler"; +import { haveConversation } from '@/lib/conversation2measurements'; +import { text2measurements } from '@/lib/text2measurements'; + +export async function POST(request: NextRequest) { + let { statement, utcDateTime, timeZoneOffset, text, previousStatements, previousQuestions } = await request.json(); + + if(!statement){statement = text;} + try { + const { questionForUser } = await haveConversation(statement, utcDateTime, timeZoneOffset, previousStatements, previousQuestions); + text2measurements(statement, utcDateTime, timeZoneOffset); + return NextResponse.json({ success: true, question:questionForUser }); + } catch (error) { + return handleError(error, "voice2measurements") + } +} diff --git a/apps/nextjs/app/dashboard/voice2measurements/page.tsx b/apps/nextjs/app/dashboard/voice2measurements/page.tsx new file mode 100644 index 000000000..8183878bc --- /dev/null +++ b/apps/nextjs/app/dashboard/voice2measurements/page.tsx @@ -0,0 +1,294 @@ +'use client'; +import Button from "@/components/buttons/Button"; +import { SendQuery } from "@/core/services/GPTService"; +import useSharedStore from "@/core/store/SharedStore"; +import { SuggestionItem } from "@/core/types/types"; +import { useCallback, useEffect, useState } from "react"; +import "regenerator-runtime/runtime"; +import { MdSettingsVoice,MdOutlineSettingsVoice } from "react-icons/md"; +import SpeechRecognition, { useSpeechRecognition } from 'react-speech-recognition'; +import Lottie from "lottie-react"; +import loadingAnimation from "@/animations/loading.json"; +import List from "@/components/list/List"; +import { useSpeechSynthesis } from 'react-speech-kit'; +import { Message} from "@/core/types/types"; +import { getTimeZoneOffset, getUtcDateTime } from '@/lib/dateTimeWithTimezone'; + +import {Shell} from "@/components/layout/shell"; +import {DashboardHeader} from "@/components/pages/dashboard/dashboard-header"; +import {Icons} from "@/components/icons"; + + + +function isNumber(numStr: string) { + + return !isNaN(Number(numStr)); +} + +export default function Home() { + + const [ifStarted, setIfStarted] = useState(false); + const [ifThinking, setIfThinking] = useState(false); + + const { speak, voices } = useSpeechSynthesis(); + + const { + transcript, + listening, + resetTranscript + } = useSpeechRecognition(); + + const conversation: Message[] = useSharedStore((state) => state.conversation); + const response: string = useSharedStore((state) => state.response); + const suggestions: SuggestionItem[] = useSharedStore((state) => state.suggestions); + + const [input, setInput] = useState(''); + const [messages, setMessages] = useState([]); + const [isLoading, setIsLoading] = useState(false); + + let previousStatements: string = useSharedStore((state) => state.previousStatements); + let previousQuestions: string = useSharedStore((state) => state.previousQuestions); + + const sendMessage = async (input: string) => { + if (input.trim()) { + const response = await fetch('/api/voice2measurements', { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + }, + body: JSON.stringify({ + text: input, + timeZoneOffset: getTimeZoneOffset(), + utcDateTime: getUtcDateTime(), + previousStatements: previousStatements, + previousQuestions: previousQuestions + }), + }); + const data = await response.json(); + + //const parsedData = JSON.parse(data.question); + + // Extract the question from the array + //const question = parsedData.questions[0].question; + + console.log(data.question); + //console.log("PRINTING DATA",data.question); + speak({ text: data.question, voice: voices[0] }); + let ps = previousStatements + if(!previousStatements){ + ps = ""; + } + ps += input; + ps += "\n"; + useSharedStore.setState({ previousStatements: ps}); + + let pq = previousQuestions + if(!previousQuestions){ + pq = ""; + } + pq += data.question; + pq += "\n"; + useSharedStore.setState({ previousQuestions: pq}); + + setIfThinking(false); + } + }; + + async function startConversation () { + + if (!ifStarted) { + //sendConversationToGPT(conversation,true); + setIfStarted(true); + } + } + + function formatPassage(passage: string) { + + const processed = passage.replaceAll("\n","\n
"); + return processed; + } + + function processResponse(gptResponse: string): SuggestionItem[] { + + // to get the list of suggestions returned (they are all separated by an \n) + const suggestions: string[] = gptResponse.split("\n"); + const processed: SuggestionItem[] = []; + + suggestions.forEach((eachSuggestion: string, index: number) => { + + // we do not want the 1st index + // because it is not a suggestion + if (index !== 0) { + + // here we are getting the 1st character of this string + const firstChar: string = eachSuggestion[0]; + + // we then check if the first character is a number + if (isNumber(firstChar)) { + + // if it is a suggestion, we get the place's name with the number in front of it + let splitToken: string = " - "; + if (eachSuggestion.indexOf(":") !== -1) { splitToken = ":"; } + const splitSuggestion: string[] = eachSuggestion.split(splitToken); + const placeNameWithNumber: string = splitSuggestion[0]; + + // we can get the place name from above. + // but it could be followed by a . or a ) + let token: string = "."; + if (placeNameWithNumber.indexOf(")") !== -1) { token = ")"; } + + const splitPlaceName: string[] = placeNameWithNumber.split(token); + const placeName: string = splitPlaceName[1]; + + const placeDesc: string = splitSuggestion[1]; + + const newSuggestion: SuggestionItem = { + id: crypto.randomUUID(), + placeName: placeName, + description: placeDesc + }; + + processed.push(newSuggestion); + } + } + }); + + return processed; + } + + const sendConversationToGPT = useCallback(async (updatedConversations: Message[], ifStart: boolean) => { + + const gptResponse: string = await SendQuery(updatedConversations); + let displayText: string = gptResponse; + + displayText = formatPassage(gptResponse); + + useSharedStore.setState({ response: displayText }); + + // using text-to-speech to have the app speak out the response from GPT + speak({ text: gptResponse, voice: voices[0] }); + + setIfThinking(false); + + if (!ifStart) { + + const suggestions = processResponse(gptResponse); + useSharedStore.setState({ suggestions: suggestions }); + } + + },[speak, voices]); + + function startListening() { + + SpeechRecognition.startListening({ continuous: false }); + } + + function stopListening() { + + SpeechRecognition.stopListening(); + } + + const continueConversation = useCallback( + (text: string) => + { + + setIfThinking(true); + + useSharedStore.setState({ response: ""}); + + // create new GPT message based on the current transcript + const newMessage: Message = { + role: "user", + content: text + }; + + resetTranscript(); + + // updating the conversation in the store + const messages = conversation; + messages.push(newMessage); + useSharedStore.setState({ conversation: messages}); + + // and send the updated conversation to the GPT API service + //sendConversationToGPT(messages, false); //TODO: double check + sendMessage(text); + },[conversation, resetTranscript, sendConversationToGPT]); + + useEffect(() => { + + const timeOut = setTimeout(() => { + if (transcript.length > 0) { + continueConversation(transcript); + } + }, 2500); + + return (()=>{ + clearTimeout(timeOut); + }) + + }, [continueConversation, transcript]); + + return ( +
+
+ { + !ifThinking && +
+

Voice 2 Measurements

+
+ } + +
+ + { + !ifStarted ? <> +
+
+ Use your voice to converse in this GPT-powered app to get lifestyle and health suggestions! +
+
+
+
+ + : + <> + { + ifThinking && +
+ +
+ } + { + (!ifThinking && suggestions.length > 0) ? + <> + + + : +
+ } + { + (!ifThinking && suggestions.length == 0) && + + } + + } +
+ ) +} diff --git a/apps/nextjs/components/buttons/Button.tsx b/apps/nextjs/components/buttons/Button.tsx new file mode 100644 index 000000000..60d94fee0 --- /dev/null +++ b/apps/nextjs/components/buttons/Button.tsx @@ -0,0 +1,28 @@ +'use client'; + +import { useState } from "react"; + +export interface ButtonProps { + + title: string; + callback: () => void; +} + +export default function Button (props: ButtonProps) { + + const [title, setTitle] = useState(props.title); + + const onSubmit = (e: any) => { + + e.preventDefault(); + props.callback(); + } + + return ( +
+ +
+ ) +} \ No newline at end of file diff --git a/apps/nextjs/components/list/List.tsx b/apps/nextjs/components/list/List.tsx new file mode 100644 index 000000000..3d203a55e --- /dev/null +++ b/apps/nextjs/components/list/List.tsx @@ -0,0 +1,24 @@ +import { SuggestionItem } from "@/core/types/types"; +import ListItem from "./ListItem"; + +export interface ListProps { + + listItems: SuggestionItem[]; +} + +export default function List(props: ListProps) { + + return (
+ { + props.listItems.map((each: SuggestionItem, index:number) => { + return + }) + } +
); +} \ No newline at end of file diff --git a/apps/nextjs/components/list/ListItem.tsx b/apps/nextjs/components/list/ListItem.tsx new file mode 100644 index 000000000..1f76c2fec --- /dev/null +++ b/apps/nextjs/components/list/ListItem.tsx @@ -0,0 +1,50 @@ +import Routes from "@/core/routes/routes"; +import { GetImage } from "@/core/services/ImageService"; +import template from "just-template"; +import { useEffect, useState } from "react"; + +export interface ListItemProps { + + id: number; + listImageURL: string; + listTitle: string; + listDesc: string; +} + +export default function ListItem(props: ListItemProps) { + + const [imageLink, setImageLink] = useState(""); + + useEffect(() => { + + retrieveImage(); + + // eslint-disable-next-line react-hooks/exhaustive-deps + }, []); + + async function retrieveImage() { + + const url = template(Routes.GetImage, { + GOOGLE_CUSTOM_SEARCH_KEY: process.env.GOOGLE_CUSTOM_SEARCH_KEY || "", + GOOGLE_SEARCH_ENGINE_ID: process.env.GOOGLE_SEARCH_ENGINE_ID || "", + SEARCH_TERM: props.listTitle + }) + const linkToImage: string = await GetImage(url); + setImageLink(linkToImage); + } + + return (
+
+ {/* eslint-disable-next-line @next/next/no-img-element */} + {props.listTitle} +
+
+
+ {(props.id + 1 + ")")}{props.listTitle} +
+
+ { props.listDesc } +
+
+
); +} \ No newline at end of file diff --git a/apps/nextjs/components/measurements/measurements-list.tsx b/apps/nextjs/components/measurements/measurements-list.tsx index 6b07a2993..438ba5f49 100644 --- a/apps/nextjs/components/measurements/measurements-list.tsx +++ b/apps/nextjs/components/measurements/measurements-list.tsx @@ -25,6 +25,7 @@ export const MeasurementsList: FC = ({ user, variableId, useEffect(() => { setIsLoading(true); // Set loading to true when starting to fetch let url = `/api/dfda/measurements`; + url += `?sort=-updatedAt`; if (variableId) { // Check if variableId is provided url += `?variableId=${variableId}`; } diff --git a/apps/nextjs/config/links.ts b/apps/nextjs/config/links.ts index 8806bd87a..8a6a42a46 100644 --- a/apps/nextjs/config/links.ts +++ b/apps/nextjs/config/links.ts @@ -40,6 +40,11 @@ export const dashboardLinks: Navigation = { href: "/dashboard/text2measurements", icon: "write", }, + { + title: "Voice 2 Measurements", + href: "/dashboard/voice2measurements", + icon: "write", + }, { title: "Profile", href: "/dashboard/settings", diff --git a/apps/nextjs/core/routes/routes.ts b/apps/nextjs/core/routes/routes.ts new file mode 100644 index 000000000..d2c3af6b6 --- /dev/null +++ b/apps/nextjs/core/routes/routes.ts @@ -0,0 +1,7 @@ +enum Routes { + GetImage="https://www.googleapis.com/customsearch/v1?searchType=image&key={{GOOGLE_CUSTOM_SEARCH_KEY}}&cx={{GOOGLE_SEARCH_ENGINE_ID}}&q={{SEARCH_TERM}}", + GetGPTResponse="/api/chat" +} + +export default Routes; + \ No newline at end of file diff --git a/apps/nextjs/core/services/GPTService.ts b/apps/nextjs/core/services/GPTService.ts new file mode 100644 index 000000000..0ff5395b1 --- /dev/null +++ b/apps/nextjs/core/services/GPTService.ts @@ -0,0 +1,18 @@ +import Routes from "../routes/routes"; +import { Message } from "../types/types"; + +export async function SendQuery(conversation: Message[]) { + + const result = await fetch(Routes.GetGPTResponse,{ + method: "POST", + headers: { + 'Content-Type': 'application/json' + }, + body: JSON.stringify({ + conversation + }) + }); + + const response: string = await result.text(); + return response; +} \ No newline at end of file diff --git a/apps/nextjs/core/services/ImageService.ts b/apps/nextjs/core/services/ImageService.ts new file mode 100644 index 000000000..48e2896d0 --- /dev/null +++ b/apps/nextjs/core/services/ImageService.ts @@ -0,0 +1,16 @@ +import { SearchResultItem } from "../types/types"; +import { GoogleSearchResult } from "../types/types"; + +export async function GetImage(url: string) { + + const result = await fetch(url, { + method: "GET" + }); + + const resultString: string = await result.text(); + + const googleSearchResult: GoogleSearchResult = JSON.parse(resultString); + const resultItem: SearchResultItem = googleSearchResult.items[0]; + + return resultItem.link; +} \ No newline at end of file diff --git a/apps/nextjs/core/store/SharedStore.ts b/apps/nextjs/core/store/SharedStore.ts new file mode 100644 index 000000000..4c319b0cd --- /dev/null +++ b/apps/nextjs/core/store/SharedStore.ts @@ -0,0 +1,20 @@ +import { create } from 'zustand'; +import { Message, SuggestionItem } from '../types/types'; + +interface SharedState { + suggestions: SuggestionItem[], + response: string, + conversation: Message[], + previousStatements: string, + previousQuestions: string +} + +const useSharedStore = create((set)=>({ + suggestions: [], + response: "", + conversation: [], + previousStatements: "", + previousQuestions: "" +})); + +export default useSharedStore; \ No newline at end of file diff --git a/apps/nextjs/core/types/types.ts b/apps/nextjs/core/types/types.ts new file mode 100644 index 000000000..49288b9f7 --- /dev/null +++ b/apps/nextjs/core/types/types.ts @@ -0,0 +1,43 @@ +export interface Message { + + role: string; + content: string; +} + +export interface SuggestionItem { + + id: string; + placeName: string; + description: string; + searchResultItem?: SearchResultItem; +} + +export interface GoogleSearchResult { + + kind: string; + items: SearchResultItem[]; +} + +export interface SearchResultItem { + + kind: string; + title: string; + htmlTitle: string; + link: string; + displayLink: string; + snippet: string; + htmlSnippet: string; + mime: string; + fileFormat: string; + image: SearchResultItemImage; +} + +export interface SearchResultItemImage { + contextLink: string; + height: number; + width: number; + byteSize: number; + thumbnailLink: string; + thumbnailHeight: number; + thumbnailWidth: number; +} \ No newline at end of file diff --git a/apps/nextjs/lib/conversation2measurements.ts b/apps/nextjs/lib/conversation2measurements.ts index 51f642012..b2e98d4dc 100644 --- a/apps/nextjs/lib/conversation2measurements.ts +++ b/apps/nextjs/lib/conversation2measurements.ts @@ -1,11 +1,12 @@ import {Measurement} from "@/types/models/Measurement"; -import {textCompletion} from "@/lib/llm"; +import {textCompletion4oMini, textCompletion} from "@/lib/llm"; import {convertToLocalDateTime, getUtcDateTime} from "@/lib/dateTimeWithTimezone"; import {text2measurements} from "@/lib/text2measurements"; // IMPORTANT! Set the runtime to edge export const runtime = 'edge'; +//TODO: add previousQuestions as argument as well export function conversation2MeasurementsPrompt(statement: string, utcDateTime: string | null | undefined, timeZoneOffset: number | null | undefined, @@ -49,7 +50,9 @@ Your responses should be in JSON format and have 2 properties called data and me ${previousStatements ? `The following are the previous statements: ${previousStatements}` : ''} + // Use the current local datetime ${localDateTime} to determine startDateLocal. If specified, also determine startTimeLocal, endDateLocal, and endTimeLocal or just leave them null.\`\`\` +If there is no time or date in user's answer, output local datetime. The following is a user request: """ ${statement} @@ -78,7 +81,7 @@ export async function conversation2measurements(statement: string, return measurements; } -export async function getNextQuestion(currentStatement: string, previousStatements: string | null | undefined): Promise { +export async function getNextQuestion(currentStatement: string, previousStatements: string | null | undefined, previousQuestions:string | null | undefined): Promise { let promptText = ` You are a robot designed to collect diet, treatment, and symptom data from the user. @@ -90,26 +93,29 @@ Immediately begin asking the user the following questions Also, after asking each question and getting a response, check if there's anything else the user want to add to the first question response. For instance, after getting a response to "What did you eat today?", your next question should be, "Did you eat anything else today?". If they respond in the negative, move on to the next question. +Make sure to only return exactly one followup question as plain text. + Here is the current user statement: ${currentStatement} Here are the previous statements in the conversation: ${previousStatements} + These are the questions already asked, so don't ask these questions again: ${previousQuestions} `; - return await textCompletion(promptText, "text"); + return await textCompletion4oMini(promptText, "text"); } export async function haveConversation(statement: string, utcDateTime: string, timeZoneOffset: number, - previousStatements: string | null | undefined): Promise<{ + previousStatements: string | null | undefined, + previousQuestions: string | null | undefined): Promise<{ questionForUser: string; - measurements: Measurement[] }> { - let questionForUser = await getNextQuestion(statement, previousStatements); - const measurements = await text2measurements(statement, utcDateTime, timeZoneOffset); + let questionForUser = await getNextQuestion(statement, previousStatements, previousQuestions); + console.log(questionForUser); + return { questionForUser, - measurements } } diff --git a/apps/nextjs/lib/dateTimeWithTimezone.ts b/apps/nextjs/lib/dateTimeWithTimezone.ts index 919ab5533..83ee95f06 100644 --- a/apps/nextjs/lib/dateTimeWithTimezone.ts +++ b/apps/nextjs/lib/dateTimeWithTimezone.ts @@ -22,21 +22,10 @@ export function getUtcDateTimeWithTimezone(): string { */ export function convertToUTC(localDateTime: string, timezoneOffsetInMinutes: number): string { // Convert the localDateTime string to a Date object + console.log("local date time being used "+ localDateTime); const localDate = new Date(localDateTime); - - // Get the local time zone offset in milliseconds - const localOffset = localDate.getTimezoneOffset() * 60 * 1000; - - // Calculate the UTC time in milliseconds - const utcTime = localDate.getTime() + localOffset; - - // Adjust for the provided timezone offset - const adjustedTime = utcTime + (timezoneOffsetInMinutes * 60 * 1000); - - // Create a new Date object using the adjusted UTC time - const utcDate = new Date(adjustedTime); - - return utcDate.toUTCString(); + console.log("date being used "+ localDate); + return new Date(localDate.getTime() + timezoneOffsetInMinutes * 60000).toISOString(); } export function throwErrorIfDateInFuture(utcDateTime: string) { @@ -79,6 +68,6 @@ export function convertToLocalDateTime( utcDateTime: string | number | Date, timeZoneOffsetInMinutes: number): string { const utcDate = new Date(utcDateTime); - const localDate = new Date(utcDate.getTime() + timeZoneOffsetInMinutes * 60 * 1000); + const localDate = new Date(utcDate.getTime() - timeZoneOffsetInMinutes * 60000); return localDate.toISOString(); } diff --git a/apps/nextjs/lib/llm.ts b/apps/nextjs/lib/llm.ts index 78d262e53..1a47f04a8 100644 --- a/apps/nextjs/lib/llm.ts +++ b/apps/nextjs/lib/llm.ts @@ -33,10 +33,39 @@ export async function textCompletion(promptText: string, returnType: "text" | "j return response.choices[0].message.content; } +export async function textCompletion4oMini(promptText: string, returnType: "text" | "json_object"): Promise { + + // Ask OpenAI for a streaming chat completion given the prompt + const response = await openai.chat.completions.create({ + model: 'gpt-4o-mini', + stream: false, + //max_tokens: 150, + messages: [ + { + role: "system", + content: `You are a helpful assistant that has conversations with the user` + }, + { + role: "user", // user = the dFDA app + content: promptText + }, + + ], + response_format: { type: returnType }, + }); + + if(!response.choices[0].message.content) { + throw new Error('No content in response'); + } + + return response.choices[0].message.content; +} + export async function getDateTimeFromStatementInUserTimezone(statement: string, utcDateTime: string, timeZoneOffset: number): Promise { - const localDateTime = convertToLocalDateTime(utcDateTime, timeZoneOffset); + const localDateTime = convertToLocalDateTime(utcDateTime, timeZoneOffset); //utcDateTime; + console.log("--------local datetime " + localDateTime); const promptText = ` estimate the date and time of the user statement based on the user's current date and time ${localDateTime} and the following user statement: diff --git a/apps/nextjs/package.json b/apps/nextjs/package.json index 93582daee..8821dcff1 100644 --- a/apps/nextjs/package.json +++ b/apps/nextjs/package.json @@ -69,6 +69,8 @@ "gray-matter": "^4.0.3", "highcharts": "^11.4.1", "highcharts-react-official": "^3.2.1", + "just-template": "^2.2.0", + "lottie-react": "^2.4.0", "lucide-react": "^0.259.0", "next": "14.1.0", "next-auth": "^4.24.5", @@ -91,7 +93,10 @@ "react-hot-toast": "^2.4.1", "react-icons": "^5.0.1", "react-markdown": "^8.0.7", + "react-speech-kit": "^3.0.1", + "react-speech-recognition": "^3.10.0", "recharts": "^2.12.0", + "regenerator-runtime": "^0.13.11", "remark": "^15.0.1", "remark-html": "^16.0.1", "replicate": "^0.12.3", @@ -115,16 +120,16 @@ "@types/jest": "^29.5.12", "@types/react": "18.2.55", "@types/react-calendar-heatmap": "^1.6.7", - "eslint": "8.56.0", - "eslint-config-next": "14.1.0", + "@types/react-speech-recognition": "^3.9.1", + "@types/regenerator-runtime": "^0.13.1", "jest": "^29.7.0", "jest-environment-jsdom": "^29.7.0", "prettier": "^3.2.5", "prettier-plugin-tailwindcss": "^0.5.11", "prisma": "^5.9.1", + "rimraf": "^5.0.10", "ts-jest": "^29.1.4", - "ts-node": "latest", - "typescript": "latest" + "ts-node": "latest" }, "trigger.dev": { "endpointId": "the-decentralized-fda-1W-N" diff --git a/apps/nextjs/pnpm-lock.yaml b/apps/nextjs/pnpm-lock.yaml index 51cf16525..c5d56ee21 100644 --- a/apps/nextjs/pnpm-lock.yaml +++ b/apps/nextjs/pnpm-lock.yaml @@ -149,6 +149,12 @@ importers: highcharts-react-official: specifier: ^3.2.1 version: 3.2.1(highcharts@11.4.8)(react@18.2.0) + just-template: + specifier: ^2.2.0 + version: 2.2.0 + lottie-react: + specifier: ^2.4.0 + version: 2.4.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) lucide-react: specifier: ^0.259.0 version: 0.259.0(react@18.2.0) @@ -215,9 +221,18 @@ importers: react-markdown: specifier: ^8.0.7 version: 8.0.7(@types/react@18.2.55)(react@18.2.0) + react-speech-kit: + specifier: ^3.0.1 + version: 3.0.1(prop-types@15.8.1)(react@18.2.0) + react-speech-recognition: + specifier: ^3.10.0 + version: 3.10.0(react@18.2.0) recharts: specifier: ^2.12.0 version: 2.12.7(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + regenerator-runtime: + specifier: ^0.13.11 + version: 0.13.11 remark: specifier: ^15.0.1 version: 15.0.1 @@ -282,12 +297,12 @@ importers: '@types/react-calendar-heatmap': specifier: ^1.6.7 version: 1.6.7 - eslint: - specifier: 8.56.0 - version: 8.56.0 - eslint-config-next: - specifier: 14.1.0 - version: 14.1.0(eslint@8.56.0)(typescript@5.3.3) + '@types/react-speech-recognition': + specifier: ^3.9.1 + version: 3.9.5 + '@types/regenerator-runtime': + specifier: ^0.13.1 + version: 0.13.8 jest: specifier: ^29.7.0 version: 29.7.0(@types/node@20.11.17)(ts-node@10.9.2(@types/node@20.11.17)(typescript@5.3.3)) @@ -303,6 +318,9 @@ importers: prisma: specifier: ^5.9.1 version: 5.20.0 + rimraf: + specifier: ^5.0.10 + version: 5.0.10 ts-jest: specifier: ^29.1.4 version: 29.2.5(@babel/core@7.25.2)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.25.2))(jest@29.7.0(@types/node@20.11.17)(ts-node@10.9.2(@types/node@20.11.17)(typescript@5.3.3)))(typescript@5.3.3) @@ -1131,24 +1149,6 @@ packages: cpu: [x64] os: [win32] - '@eslint-community/eslint-utils@4.4.0': - resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} - 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.11.1': - resolution: {integrity: sha512-m4DVN9ZqskZoLU5GlWZadwDnYo3vAEydiUayB9widCl9ffWx2IvPnp6n3on5rJmziJSw9Bv+Z3ChDVdMwXCY8Q==} - engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} - - '@eslint/eslintrc@2.1.4': - resolution: {integrity: sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - - '@eslint/js@8.56.0': - resolution: {integrity: sha512-gMsVel9D7f2HLkBma9VbtzZRehRogVRfbr++f06nL2vnCGCNlzOD+/MUov/F4p8myyAHspEhVobgjpX64q5m6A==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - '@fastify/busboy@2.1.1': resolution: {integrity: sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA==} engines: {node: '>=14'} @@ -1173,19 +1173,6 @@ packages: peerDependencies: react-hook-form: ^7.0.0 - '@humanwhocodes/config-array@0.11.14': - resolution: {integrity: sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==} - engines: {node: '>=10.10.0'} - deprecated: Use @eslint/config-array instead - - '@humanwhocodes/module-importer@1.0.1': - resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} - engines: {node: '>=12.22'} - - '@humanwhocodes/object-schema@2.0.3': - resolution: {integrity: sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==} - deprecated: Use @eslint/object-schema instead - '@ianvs/prettier-plugin-sort-imports@4.3.1': resolution: {integrity: sha512-ZHwbyjkANZOjaBm3ZosADD2OUYGFzQGxfy67HmGZU94mHqe7g1LCMA7YYKB1Cq+UTPCBqlAYapY0KXAjKEw8Sg==} peerDependencies: @@ -1650,9 +1637,6 @@ packages: '@next/env@14.1.0': resolution: {integrity: sha512-Py8zIo+02ht82brwwhTg36iogzFqGLPXlRGKQw5s+qP/kMNc4MAyDeEwBKDijk6zTIbegEgu8Qy7C1LboslQAw==} - '@next/eslint-plugin-next@14.1.0': - resolution: {integrity: sha512-x4FavbNEeXx/baD/zC/SdrvkjSby8nBn8KcCREqk6UuwvwoAPZmaV8TFCAuo/cpovBRTIY67mHhe86MQQm/68Q==} - '@next/mdx@14.2.13': resolution: {integrity: sha512-UrNXnCMcChqLJDb8kdoWjw3Hyt1E+xGh8n/4U3ro/kkQjiXJ/3k4+Es+L6oxY+zafg1n+6xpK5whROTNAsKAxA==} peerDependencies: @@ -1730,10 +1714,6 @@ packages: resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} engines: {node: '>= 8'} - '@nolyfill/is-core-module@1.0.39': - resolution: {integrity: sha512-nn5ozdjYQpUCZlWGuxcJY/KpxkWQs4DcbMCmKojjyrYDEAGy4Ce19NN4v5MduafTwJlbKc99UA8YhSVqq9yPZA==} - engines: {node: '>=12.4.0'} - '@panva/hkdf@1.2.1': resolution: {integrity: sha512-6oclG6Y3PiDFcoyk8srjLfVKyMfVCKJ27JwNPViuXziFpmdz+MZnZN/aKY0JGXgYuO/VghU0jcOAZgWXZ1Dmrw==} @@ -2504,12 +2484,6 @@ packages: '@radix-ui/rect@1.1.0': resolution: {integrity: sha512-A9+lCBZoaMJlVKcRBz2YByCG+Cp2t6nAnMnNba+XiWxnj6r4JUFqfsgwocMBZU9LPtdxC6wB56ySYpc7LQIoJg==} - '@rtsao/scc@1.1.0': - resolution: {integrity: sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==} - - '@rushstack/eslint-patch@1.10.4': - resolution: {integrity: sha512-WJgX9nzTqknM393q1QJDJmoW28kUfEnybeTfVNcNAPnIx210RXm2DiXiHzfNPJNIUUb1tJnz/l4QGtJ30PgWmA==} - '@sinclair/typebox@0.27.8': resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==} @@ -2684,6 +2658,9 @@ packages: '@types/debug@4.1.12': resolution: {integrity: sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==} + '@types/dom-speech-recognition@0.0.4': + resolution: {integrity: sha512-zf2GwV/G6TdaLwpLDcGTIkHnXf8JEf/viMux+khqKQKDa8/8BAUtXXZS563GnvJ4Fg0PBLGAaFf2GekEVSZ6GQ==} + '@types/estree-jsx@1.0.5': resolution: {integrity: sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg==} @@ -2723,9 +2700,6 @@ packages: '@types/json-schema@7.0.15': resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} - '@types/json5@0.0.29': - resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} - '@types/katex@0.16.7': resolution: {integrity: sha512-HMwFiRujE5PjrgwHQ25+bsLJgowjGjm5Z8FVSf0N6PwgJrwxH0QxzHYDcKsTfV3wva0vzrpqMTJS2jXPr5BMEQ==} @@ -2759,9 +2733,15 @@ packages: '@types/react-dom@18.2.19': resolution: {integrity: sha512-aZvQL6uUbIJpjZk4U8JZGbau9KDeAwMfmhyWorxgBkqDIEf6ROjRozcmPIicqsUwPUjbkDfHKgGee1Lq65APcA==} + '@types/react-speech-recognition@3.9.5': + resolution: {integrity: sha512-m3Sg3Xtj/YcEUu+nLPGwI6oq1wcSblsuyAmXgBfW6Nprfmtl+A+kH4ruPzzFKnFkq6WmmRxdsLvt0nLRAAJtBw==} + '@types/react@18.2.55': resolution: {integrity: sha512-Y2Tz5P4yz23brwm2d7jNon39qoAtMMmalOQv6+fEFt1mT+FcM3D841wDpoUvFXhaYenuROCy3FZYqdTjM7qVyA==} + '@types/regenerator-runtime@0.13.8': + resolution: {integrity: sha512-jjKoBekfYDH331060tZhosdJVDnXIXx+T8Iw2h2T4HEds6Ddb2lr0JxD15+XPKlXwRHRNgZoY+4Fb2ykoqzHBg==} + '@types/retry@0.12.0': resolution: {integrity: sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==} @@ -2789,37 +2769,6 @@ packages: '@types/yargs@17.0.33': resolution: {integrity: sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==} - '@typescript-eslint/parser@6.21.0': - resolution: {integrity: sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ==} - engines: {node: ^16.0.0 || >=18.0.0} - peerDependencies: - eslint: ^7.0.0 || ^8.0.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - - '@typescript-eslint/scope-manager@6.21.0': - resolution: {integrity: sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg==} - engines: {node: ^16.0.0 || >=18.0.0} - - '@typescript-eslint/types@6.21.0': - resolution: {integrity: sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg==} - engines: {node: ^16.0.0 || >=18.0.0} - - '@typescript-eslint/typescript-estree@6.21.0': - resolution: {integrity: sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ==} - engines: {node: ^16.0.0 || >=18.0.0} - peerDependencies: - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - - '@typescript-eslint/visitor-keys@6.21.0': - resolution: {integrity: sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A==} - engines: {node: ^16.0.0 || >=18.0.0} - '@ungap/structured-clone@1.2.0': resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} @@ -3053,41 +3002,6 @@ packages: array-flatten@1.1.1: resolution: {integrity: sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==} - array-includes@3.1.8: - resolution: {integrity: sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==} - engines: {node: '>= 0.4'} - - array-union@2.1.0: - resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} - engines: {node: '>=8'} - - array.prototype.findlast@1.2.5: - resolution: {integrity: sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==} - engines: {node: '>= 0.4'} - - array.prototype.findlastindex@1.2.5: - resolution: {integrity: sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ==} - 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.flatmap@1.3.2: - resolution: {integrity: sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==} - engines: {node: '>= 0.4'} - - array.prototype.tosorted@1.1.4: - 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'} - - ast-types-flow@0.0.8: - resolution: {integrity: sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==} - astring@1.9.0: resolution: {integrity: sha512-LElXdjswlqjWrPpJFg1Fx4wpkOCxj1TDHlSV4PlaRxHGWko024xICaa97ZkMfs6DRKlCguiAI+rbXv5GWwXIkg==} hasBin: true @@ -3534,25 +3448,10 @@ packages: resolution: {integrity: sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==} engines: {node: '>=12'} - damerau-levenshtein@1.0.8: - resolution: {integrity: sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==} - data-urls@3.0.2: resolution: {integrity: sha512-Jy/tj3ldjZJo63sVAvg6LHt2mHvl4V6AgRAmNDtLdm7faqtsx+aJG42rsyCo9JCoRVKwPFzKlIPx3DIibwSIaQ==} engines: {node: '>=12'} - data-view-buffer@1.0.1: - resolution: {integrity: sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==} - 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-offset@1.0.0: - resolution: {integrity: sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==} - engines: {node: '>= 0.4'} - date-fns@3.6.0: resolution: {integrity: sha512-fRHTG8g/Gif+kSh50gaGEdToemgfj74aRX3swtiouboip5JDLAyDE9F11nHMIcvOaXeOC6D7SpNhi7uFyB7Uww==} @@ -3564,14 +3463,6 @@ packages: supports-color: optional: true - debug@3.2.7: - resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - debug@4.3.7: resolution: {integrity: sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==} engines: {node: '>=6.0'} @@ -3610,9 +3501,6 @@ packages: 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==} - deepmerge@4.3.1: resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} engines: {node: '>=0.10.0'} @@ -3692,14 +3580,6 @@ packages: dlv@1.1.3: resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==} - doctrine@2.1.0: - resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==} - engines: {node: '>=0.10.0'} - - doctrine@3.0.0: - resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} - engines: {node: '>=6.0.0'} - dom-accessibility-api@0.5.16: resolution: {integrity: sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==} @@ -3768,10 +3648,6 @@ packages: error-ex@1.3.2: resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} - es-abstract@1.23.3: - resolution: {integrity: sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==} - engines: {node: '>= 0.4'} - es-define-property@1.0.0: resolution: {integrity: sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==} engines: {node: '>= 0.4'} @@ -3783,28 +3659,9 @@ packages: 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-module-lexer@1.5.4: resolution: {integrity: sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw==} - es-object-atoms@1.0.0: - resolution: {integrity: sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==} - engines: {node: '>= 0.4'} - - es-set-tostringtag@2.0.3: - resolution: {integrity: sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==} - engines: {node: '>= 0.4'} - - es-shim-unscopables@1.0.2: - resolution: {integrity: sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==} - - es-to-primitive@1.2.1: - resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==} - engines: {node: '>= 0.4'} - esbuild@0.18.20: resolution: {integrity: sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==} engines: {node: '>=12'} @@ -3825,10 +3682,6 @@ packages: resolution: {integrity: sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==} engines: {node: '>=8'} - escape-string-regexp@4.0.0: - resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} - engines: {node: '>=10'} - escape-string-regexp@5.0.0: resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==} engines: {node: '>=12'} @@ -3838,110 +3691,15 @@ packages: engines: {node: '>=6.0'} hasBin: true - eslint-config-next@14.1.0: - resolution: {integrity: sha512-SBX2ed7DoRFXC6CQSLc/SbLY9Ut6HxNB2wPTcoIWjUMd7aF7O/SIE7111L8FdZ9TXsNV4pulUDnfthpyPtbFUg==} - peerDependencies: - eslint: ^7.23.0 || ^8.0.0 - typescript: '>=3.3.1' - peerDependenciesMeta: - typescript: - optional: true - - 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==} - engines: {node: ^14.18.0 || >=16.0.0} - peerDependencies: - eslint: '*' - eslint-plugin-import: '*' - eslint-plugin-import-x: '*' - peerDependenciesMeta: - eslint-plugin-import: - optional: true - eslint-plugin-import-x: - optional: true - - eslint-module-utils@2.12.0: - resolution: {integrity: sha512-wALZ0HFoytlyh/1+4wuZ9FJCD/leWHQzzrxJ8+rebyReSLk7LApMyd3WJaLVoN+D5+WIdJyDK1c6JnE65V4Zyg==} - 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-plugin-import@2.30.0: - resolution: {integrity: sha512-/mHNE9jINJfiD2EKkg1BKyPyUk4zdnT54YgbOgfjSakWT5oyX/qQLVNTkehyfpcMxZXMy1zyonZ2v7hZTX43Yw==} - engines: {node: '>=4'} - peerDependencies: - '@typescript-eslint/parser': '*' - eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 - peerDependenciesMeta: - '@typescript-eslint/parser': - optional: true - - eslint-plugin-jsx-a11y@6.10.0: - resolution: {integrity: sha512-ySOHvXX8eSN6zz8Bywacm7CvGNhUtdjvqfQDVe6020TUK34Cywkw7m0KsCCk1Qtm9G1FayfTN1/7mMYnYO2Bhg==} - engines: {node: '>=4.0'} - peerDependencies: - eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9 - - eslint-plugin-react-hooks@4.6.2: - resolution: {integrity: sha512-QzliNJq4GinDBcD8gPB5v0wh6g8q3SUi6EFF0x8N/BL9PoVs0atuGc47ozMRyOWAKdwaZ5OnbOEa3WR+dSGKuQ==} - engines: {node: '>=10'} - peerDependencies: - eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 - - eslint-plugin-react@7.37.0: - resolution: {integrity: sha512-IHBePmfWH5lKhJnJ7WB1V+v/GolbB0rjS8XYVCSQCZKaQCAUhMoVoOEn1Ef8Z8Wf0a7l8KTJvuZg5/e4qrZ6nA==} - engines: {node: '>=4'} - peerDependencies: - eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7 - eslint-scope@5.1.1: resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} engines: {node: '>=8.0.0'} - eslint-scope@7.2.2: - resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - - eslint-visitor-keys@3.4.3: - resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - - eslint@8.56.0: - resolution: {integrity: sha512-Go19xM6T9puCOWntie1/P997aXxFsOi37JIHRWI514Hc6ZnaHGKY9xFhrU65RT6CcBEzZoGG1e6Nq+DT04ZtZQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - hasBin: true - - espree@9.6.1: - resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - esprima@4.0.1: resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} engines: {node: '>=4'} hasBin: true - esquery@1.6.0: - resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==} - engines: {node: '>=0.10'} - esrecurse@4.3.0: resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} engines: {node: '>=4.0'} @@ -4060,9 +3818,6 @@ packages: 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==} @@ -4072,10 +3827,6 @@ packages: fb-watchman@2.0.2: resolution: {integrity: sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==} - file-entry-cache@6.0.1: - resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} - engines: {node: ^10.12.0 || >=12.0.0} - filelist@1.0.4: resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==} @@ -4095,21 +3846,10 @@ packages: resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} engines: {node: '>=8'} - find-up@5.0.0: - resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} - engines: {node: '>=10'} - - flat-cache@3.2.0: - resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==} - engines: {node: ^10.12.0 || >=12.0.0} - flat@5.0.2: resolution: {integrity: sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==} hasBin: true - flatted@3.3.1: - resolution: {integrity: sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==} - flowise-embed-react@1.0.2: resolution: {integrity: sha512-M6rDofJWTWI9rtZN7G3oTlqAcQaHoF/IUIoW1YitHsjKly24awq5sky+0Wfkcg4VfoXz3SiLHMZ/XOF4PDuvqA==} peerDependencies: @@ -4176,10 +3916,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'} - functions-have-names@1.2.3: resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} @@ -4211,13 +3947,6 @@ packages: resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} engines: {node: '>=10'} - get-symbol-description@1.0.2: - resolution: {integrity: sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==} - engines: {node: '>= 0.4'} - - get-tsconfig@4.8.1: - resolution: {integrity: sha512-k9PN+cFBmaLWtVz29SkUoqU5O0slLuHJXt/2P+tMVFT+phsSGXGkp9t3rQIqdz0e+06EHNGs3oM6ZX1s2zHxRg==} - git-remote-origin-url@4.0.0: resolution: {integrity: sha512-EAxDksNdjuWgmVW9pVvA9jQDi/dmTaiDONktIy7qiRRhBZUI4FQK1YvBvteuTSX24aNKg9lfgxNYJEeeSXe6DA==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -4240,11 +3969,6 @@ packages: glob-to-regexp@0.4.1: resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==} - glob@10.3.10: - resolution: {integrity: sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==} - engines: {node: '>=16 || 14 >=14.17'} - hasBin: true - glob@10.4.5: resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==} hasBin: true @@ -4257,18 +3981,6 @@ packages: resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} engines: {node: '>=4'} - globals@13.24.0: - resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==} - engines: {node: '>=8'} - - globalthis@1.0.4: - resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==} - engines: {node: '>= 0.4'} - - globby@11.1.0: - resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} - engines: {node: '>=10'} - globby@13.2.2: resolution: {integrity: sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -4287,9 +3999,6 @@ packages: 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==} - gray-matter@4.0.3: resolution: {integrity: sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q==} engines: {node: '>=6.0'} @@ -4407,10 +4116,6 @@ packages: resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} engines: {node: '>= 4'} - import-fresh@3.3.0: - resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} - engines: {node: '>=6'} - import-local@3.2.0: resolution: {integrity: sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==} engines: {node: '>=8'} @@ -4481,10 +4186,6 @@ packages: is-arrayish@0.2.1: resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} - is-async-function@2.0.0: - resolution: {integrity: sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==} - engines: {node: '>= 0.4'} - is-bigint@1.0.4: resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==} @@ -4503,9 +4204,6 @@ packages: resolution: {integrity: sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==} engines: {node: '>=4'} - is-bun-module@1.2.1: - resolution: {integrity: sha512-AmidtEM6D6NmUiLOvvU7+IePxjEjOzra2h0pSrsfSAcXwl/83zLLXDByafUJy9k/rKK0pvXMLdwKwGHlX2Ke6Q==} - is-callable@1.2.7: resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} engines: {node: '>= 0.4'} @@ -4514,10 +4212,6 @@ packages: resolution: {integrity: sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==} 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-date-object@1.0.5: resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} engines: {node: '>= 0.4'} @@ -4541,9 +4235,6 @@ packages: resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} engines: {node: '>=0.10.0'} - is-finalizationregistry@1.0.2: - resolution: {integrity: sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw==} - is-fullwidth-code-point@3.0.0: resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} engines: {node: '>=8'} @@ -4552,10 +4243,6 @@ packages: resolution: {integrity: sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==} engines: {node: '>=6'} - is-generator-function@1.0.10: - resolution: {integrity: sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==} - engines: {node: '>= 0.4'} - is-glob@4.0.3: resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} engines: {node: '>=0.10.0'} @@ -4570,10 +4257,6 @@ packages: resolution: {integrity: sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==} engines: {node: '>= 0.4'} - is-negative-zero@2.0.3: - resolution: {integrity: sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==} - engines: {node: '>= 0.4'} - is-number-object@1.0.7: resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==} engines: {node: '>= 0.4'} @@ -4582,10 +4265,6 @@ packages: resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} engines: {node: '>=0.12.0'} - is-path-inside@3.0.3: - resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} - engines: {node: '>=8'} - is-plain-obj@4.1.0: resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==} engines: {node: '>=12'} @@ -4620,17 +4299,10 @@ packages: resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==} engines: {node: '>= 0.4'} - is-typed-array@1.1.13: - resolution: {integrity: sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==} - engines: {node: '>= 0.4'} - is-weakmap@2.0.2: 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-weakset@2.0.3: resolution: {integrity: sha512-LvIm3/KWzS9oRFHugab7d+M/GcBXuXX5xZkzPmN+NxihdQlZUQ4dWuSV1xR/sq6upL1TJEDrfBgRepHFdBtSNQ==} engines: {node: '>= 0.4'} @@ -4669,13 +4341,6 @@ packages: resolution: {integrity: sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==} engines: {node: '>=8'} - iterator.prototype@1.1.2: - resolution: {integrity: sha512-DR33HMMr8EzwuRL8Y9D3u2BMj8+RqSE850jfGu59kS7tbmPLzGkZmVSfyCFSDxuZiEY6Rzt3T2NA/qU+NwVj1w==} - - jackspeak@2.3.6: - resolution: {integrity: sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==} - engines: {node: '>=14'} - jackspeak@3.4.3: resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} @@ -4865,22 +4530,12 @@ packages: engines: {node: '>=4'} hasBin: true - json-buffer@3.0.1: - resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} - json-parse-even-better-errors@2.3.1: resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} json-schema-traverse@0.4.1: resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} - json-stable-stringify-without-jsonify@1.0.1: - resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} - - json5@1.0.2: - resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==} - hasBin: true - json5@2.2.3: resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} engines: {node: '>=6'} @@ -4893,17 +4548,13 @@ packages: resolution: {integrity: sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==} engines: {node: '>=0.10.0'} - jsx-ast-utils@3.3.5: - resolution: {integrity: sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==} - engines: {node: '>=4.0'} + just-template@2.2.0: + resolution: {integrity: sha512-tYzMAz72bJXRBFKhWnEZrVdBbBqV4/vwNGv6O96LqZv+BjtmUGUBtBkFr+vqGlgHOVIcRalUNdJlumvXSAbuaQ==} katex@0.16.11: resolution: {integrity: sha512-RQrI8rlHY92OLf3rho/Ts8i/XvjgguEjOkO1BEXcU3N8BqPpSzBNwV/G0Ukr+P/l3ivvJUE/Fa/CwbS6HesGNQ==} hasBin: true - keyv@4.5.4: - resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} - kind-of@6.0.3: resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} engines: {node: '>=0.10.0'} @@ -5092,13 +4743,6 @@ packages: openai: optional: true - language-subtag-registry@0.3.23: - resolution: {integrity: sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ==} - - language-tags@1.0.9: - resolution: {integrity: sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==} - engines: {node: '>=0.10'} - layerr@3.0.0: resolution: {integrity: sha512-tv754Ki2dXpPVApOrjTyRo4/QegVb9eVFq4mjqp4+NM5NaX7syQvN5BBNfV/ZpAHCEHV24XdUVrBAoka4jt3pA==} @@ -5106,10 +4750,6 @@ packages: resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==} engines: {node: '>=6'} - levn@0.4.1: - resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} - engines: {node: '>= 0.8.0'} - lilconfig@2.1.0: resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==} engines: {node: '>=10'} @@ -5132,10 +4772,6 @@ packages: resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} engines: {node: '>=8'} - locate-path@6.0.0: - resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} - engines: {node: '>=10'} - lodash.debounce@4.0.8: resolution: {integrity: sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==} @@ -5155,6 +4791,15 @@ packages: resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} hasBin: true + lottie-react@2.4.0: + resolution: {integrity: sha512-pDJGj+AQlnlyHvOHFK7vLdsDcvbuqvwPZdMlJ360wrzGFurXeKPr8SiRCjLf3LrNYKANQtSsh5dz9UYQHuqx4w==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 + + lottie-web@5.12.2: + resolution: {integrity: sha512-uvhvYPC8kGPjXT3MyKMrL3JitEAmDMp30lVkuq/590Mw9ok6pWcFCwXJveo0t5uqYw1UREQHofD+jVpdjBv8wg==} + lowlight@1.20.0: resolution: {integrity: sha512-8Ktj+prEb1RoCPkEOrPMYUN/nCggB7qAWe3a7OpMjWQkh3l2RD5wKRQ+o8Q8YuI9RG/xs95waaI/E6ym/7NsTw==} @@ -5543,17 +5188,10 @@ packages: resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==} engines: {node: '>=10'} - minimatch@9.0.3: - resolution: {integrity: sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==} - engines: {node: '>=16 || 14 >=14.17'} - minimatch@9.0.5: resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} engines: {node: '>=16 || 14 >=14.17'} - minimist@1.2.8: - resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} - minipass@7.1.2: resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} engines: {node: '>=16 || 14 >=14.17'} @@ -5745,22 +5383,6 @@ packages: resolution: {integrity: sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==} engines: {node: '>= 0.4'} - object.entries@1.1.8: - resolution: {integrity: sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ==} - engines: {node: '>= 0.4'} - - object.fromentries@2.0.8: - resolution: {integrity: sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==} - engines: {node: '>= 0.4'} - - object.groupby@1.0.3: - resolution: {integrity: sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==} - engines: {node: '>= 0.4'} - - object.values@1.2.0: - resolution: {integrity: sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==} - engines: {node: '>= 0.4'} - oidc-token-hash@5.0.3: resolution: {integrity: sha512-IF4PcGgzAr6XXSff26Sk/+P4KZFJVuHAJZj3wgO3vX2bMdNVp/QXTP3P7CEm9V1IdG8lDLY3HhiqpsE/nOwpPw==} engines: {node: ^10.13.0 || >=12.0.0} @@ -5805,10 +5427,6 @@ packages: openid-client@5.7.0: resolution: {integrity: sha512-4GCCGZt1i2kTHpwvaC/sCpTpQqDnBzDzuJcJMbH+y1Q5qI8U8RBvoSh28svarXszZHR5BAMXbJPX1PGPRE3VOA==} - optionator@0.9.4: - resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} - engines: {node: '>= 0.8.0'} - p-finally@1.0.0: resolution: {integrity: sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==} engines: {node: '>=4'} @@ -5825,10 +5443,6 @@ packages: resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} engines: {node: '>=8'} - p-locate@5.0.0: - resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} - engines: {node: '>=10'} - p-queue@6.6.2: resolution: {integrity: sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ==} engines: {node: '>=8'} @@ -5848,10 +5462,6 @@ packages: package-json-from-dist@1.0.1: resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==} - parent-module@1.0.1: - resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} - engines: {node: '>=6'} - parse-entities@2.0.0: resolution: {integrity: sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==} @@ -5985,10 +5595,6 @@ packages: preact@10.24.1: resolution: {integrity: sha512-PnBAwFI3Yjxxcxw75n6VId/5TFxNW/81zexzWD9jn1+eSrOP84NdsS38H5IkF/UH3frqRPT+MvuCoVHjTDTnDw==} - prelude-ls@1.2.1: - resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} - engines: {node: '>= 0.8.0'} - prettier-plugin-tailwindcss@0.5.14: resolution: {integrity: sha512-Puaz+wPUAhFp8Lo9HuciYKM2Y2XExESjeT+9NQoVFXZsPPnc9VYss2SpxdQ6vbatmt8/4+SN0oe0I1cPDABg9Q==} engines: {node: '>=14.21.3'} @@ -6259,6 +5865,17 @@ packages: react: ^16.8.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 + react-speech-kit@3.0.1: + resolution: {integrity: sha512-MXNOciISanhmnxpHJkBOev3M3NPDpW1T7nTc/eGw5pO9cXpoUccRxZkmr/IlpTPbPEneDNeTmbwri/YweyctZg==} + peerDependencies: + prop-types: ^15.7.2 + react: ^16.8.0 + + react-speech-recognition@3.10.0: + resolution: {integrity: sha512-EVSr4Ik8l9urwdPiK2r0+ADrLyDDrjB0qBRdUWO+w2MfwEBrj6NuRmy1GD3x7BU/V6/hab0pl8Lupen0zwlJyw==} + peerDependencies: + react: '>=16.8.0' + react-style-singleton@2.2.1: resolution: {integrity: sha512-ZWj0fHEMyWkHzKYUr2Bs/4zU6XLmq9HsgBURm7g5pAVfyn49DgUiNgY2d4lXRlYSiCif9YBGpQleewkcqddc7g==} engines: {node: '>=10'} @@ -6305,10 +5922,6 @@ packages: resolution: {integrity: sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==} engines: {node: '>=8'} - reflect.getprototypeof@1.0.6: - resolution: {integrity: sha512-fmfw4XgoDke3kdI6h4xcUz1dG8uaiv5q9gcEwLS4Pnth2kxT+GZ7YehS1JTMGBQmtV7Y4GFGbs2re2NqhdozUg==} - engines: {node: '>= 0.4'} - refractor@3.6.0: resolution: {integrity: sha512-MY9W41IOWxxk31o+YvFCNyNzdkc9M20NoZK5vq6jkv4I/uh2zkWcfudj0Q1fovjUQJrNewS9NMzeTtqPf+n5EA==} @@ -6319,6 +5932,9 @@ packages: regenerate@1.4.2: resolution: {integrity: sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==} + regenerator-runtime@0.13.11: + resolution: {integrity: sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==} + regenerator-runtime@0.14.1: resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} @@ -6385,17 +6001,10 @@ packages: resolution: {integrity: sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==} engines: {node: '>=8'} - resolve-from@4.0.0: - resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} - engines: {node: '>=4'} - resolve-from@5.0.0: resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} engines: {node: '>=8'} - resolve-pkg-maps@1.0.0: - resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} - resolve.exports@2.0.2: resolution: {integrity: sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==} engines: {node: '>=10'} @@ -6404,10 +6013,6 @@ packages: resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} hasBin: true - resolve@2.0.0-next.5: - resolution: {integrity: sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==} - hasBin: true - retry@0.13.1: resolution: {integrity: sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==} engines: {node: '>= 4'} @@ -6416,9 +6021,8 @@ packages: resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} engines: {iojs: '>=1.0.0', node: '>=0.10.0'} - rimraf@3.0.2: - resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} - deprecated: Rimraf versions prior to v4 are no longer supported + rimraf@5.0.10: + resolution: {integrity: sha512-l0OE8wL34P4nJH/H2ffoaniAokM2qSmrtXHmlpvYr5AVVX8msAyW0l8NVJFDxlSK4u3Uh/f41cQheDVdnYijwQ==} hasBin: true rollup@3.29.5: @@ -6440,17 +6044,9 @@ packages: resolution: {integrity: sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==} engines: {node: '>=6'} - safe-array-concat@1.1.2: - resolution: {integrity: sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==} - engines: {node: '>=0.4'} - safe-buffer@5.2.1: resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} - safe-regex-test@1.0.3: - resolution: {integrity: sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==} - engines: {node: '>= 0.4'} - safer-buffer@2.1.2: resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} @@ -6624,27 +6220,6 @@ packages: resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} engines: {node: '>=12'} - string.prototype.includes@2.0.0: - resolution: {integrity: sha512-E34CkBgyeqNDcrbU76cDjL5JLcVrtSdYq0MEh/B10r17pRP4ciHLwTgnuLV8Ay6cgEMLkcBkFCKyFZ43YldYzg==} - - string.prototype.matchall@4.0.11: - resolution: {integrity: sha512-NUdh0aDavY2og7IbBPenWqR9exH+E26Sv8e0/eTe1tltDGZL+GtBkDAnnyBtmekfK6/Dq3MkcGtzXFEd1LQrtg==} - engines: {node: '>= 0.4'} - - string.prototype.repeat@1.0.0: - resolution: {integrity: sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==} - - 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.trimstart@1.0.8: - resolution: {integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==} - engines: {node: '>= 0.4'} - stringify-entities@4.0.4: resolution: {integrity: sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==} @@ -6660,10 +6235,6 @@ packages: resolution: {integrity: sha512-uCC2VHvQRYu+lMh4My/sFNmF2klFymLX1wHJeXnbEJERpV/ZsVuonzerjfrGpIGF7LBVa1O7i9kjiWvJiFck8g==} engines: {node: '>=0.10.0'} - strip-bom@3.0.0: - resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} - engines: {node: '>=4'} - strip-bom@4.0.0: resolution: {integrity: sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==} engines: {node: '>=8'} @@ -6806,9 +6377,6 @@ packages: resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==} engines: {node: '>=8'} - text-table@0.2.0: - resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} - thenify-all@1.6.0: resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} engines: {node: '>=0.8'} @@ -6855,12 +6423,6 @@ packages: trough@2.2.0: resolution: {integrity: sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==} - ts-api-utils@1.3.0: - resolution: {integrity: sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==} - engines: {node: '>=16'} - peerDependencies: - typescript: '>=4.2.0' - ts-interface-checker@0.1.13: resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} @@ -6915,24 +6477,13 @@ packages: typescript: optional: true - tsconfig-paths@3.15.0: - resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==} - tslib@2.7.0: resolution: {integrity: sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==} - type-check@0.4.0: - resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} - engines: {node: '>= 0.8.0'} - type-detect@4.0.8: resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==} engines: {node: '>=4'} - type-fest@0.20.2: - resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} - engines: {node: '>=10'} - type-fest@0.21.3: resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} engines: {node: '>=10'} @@ -6953,22 +6504,6 @@ packages: resolution: {integrity: sha512-iF/wLLaZWt4Q9WO8stpq3NKilAa4b8hnCD16EirdhaxzAYk80MCb1wnW1il7GhkMNJuhJUD38dxs8q4A/EdxJw==} engines: {node: '>=18'} - typed-array-buffer@1.0.2: - resolution: {integrity: sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==} - engines: {node: '>= 0.4'} - - typed-array-byte-length@1.0.1: - resolution: {integrity: sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==} - engines: {node: '>= 0.4'} - - typed-array-byte-offset@1.0.2: - resolution: {integrity: sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==} - engines: {node: '>= 0.4'} - - typed-array-length@1.0.6: - resolution: {integrity: sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==} - engines: {node: '>= 0.4'} - typescript@5.3.3: resolution: {integrity: sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==} engines: {node: '>=14.17'} @@ -6988,9 +6523,6 @@ packages: resolution: {integrity: sha512-xY7c8LPyzvhvew0Fn+Ek3wBC9STZAuDI/Y5andCKi9AX6/jvfaX45PhsDX8oxgPL0YFp0Jhr8qWMbS/p9375Xg==} engines: {node: '>=16'} - unbox-primitive@1.0.2: - resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} - undici-types@5.26.5: resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} @@ -7279,10 +6811,6 @@ packages: which-boxed-primitive@1.0.2: resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==} - which-builtin-type@1.1.4: - resolution: {integrity: sha512-bppkmBSsHFmIMSl8BO9TbsyzsvGjVoppt8xUiGzwiu/bhDCGxnpOKCxgqj6GuyHE0mINMDecBFPlOm2hzY084w==} - engines: {node: '>= 0.4'} - which-collection@1.0.2: resolution: {integrity: sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==} engines: {node: '>= 0.4'} @@ -7304,10 +6832,6 @@ packages: resolution: {integrity: sha512-o0cyEG0e8GPzT4iGHphIOh0cJOV8fivsXxddQasHPHfoZf1ZexrfeA21w2NaEN1RHE+fXlfISmOE8R9N3u3Qig==} engines: {node: '>=12'} - word-wrap@1.2.5: - resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} - engines: {node: '>=0.10.0'} - wrap-ansi@7.0.0: resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} engines: {node: '>=10'} @@ -8542,36 +8066,13 @@ snapshots: '@esbuild/win32-x64@0.18.20': optional: true - '@eslint-community/eslint-utils@4.4.0(eslint@8.56.0)': - dependencies: - eslint: 8.56.0 - eslint-visitor-keys: 3.4.3 + '@fastify/busboy@2.1.1': {} - '@eslint-community/regexpp@4.11.1': {} + '@floating-ui/core@1.6.8': + dependencies: + '@floating-ui/utils': 0.2.8 - '@eslint/eslintrc@2.1.4': - dependencies: - ajv: 6.12.6 - debug: 4.3.7 - espree: 9.6.1 - globals: 13.24.0 - ignore: 5.3.2 - import-fresh: 3.3.0 - js-yaml: 4.1.0 - minimatch: 3.1.2 - strip-json-comments: 3.1.1 - transitivePeerDependencies: - - supports-color - - '@eslint/js@8.56.0': {} - - '@fastify/busboy@2.1.1': {} - - '@floating-ui/core@1.6.8': - dependencies: - '@floating-ui/utils': 0.2.8 - - '@floating-ui/dom@1.6.11': + '@floating-ui/dom@1.6.11': dependencies: '@floating-ui/core': 1.6.8 '@floating-ui/utils': 0.2.8 @@ -8588,18 +8089,6 @@ snapshots: dependencies: react-hook-form: 7.53.0(react@18.2.0) - '@humanwhocodes/config-array@0.11.14': - dependencies: - '@humanwhocodes/object-schema': 2.0.3 - debug: 4.3.7 - minimatch: 3.1.2 - transitivePeerDependencies: - - supports-color - - '@humanwhocodes/module-importer@1.0.1': {} - - '@humanwhocodes/object-schema@2.0.3': {} - '@ianvs/prettier-plugin-sort-imports@4.3.1(@vue/compiler-sfc@3.5.10)(prettier@3.3.3)': dependencies: '@babel/core': 7.25.2 @@ -9035,10 +8524,6 @@ snapshots: '@next/env@14.1.0': {} - '@next/eslint-plugin-next@14.1.0': - dependencies: - glob: 10.3.10 - '@next/mdx@14.2.13(@mdx-js/loader@3.0.1(webpack@5.95.0))(@mdx-js/react@3.0.1(@types/react@18.2.55)(react@18.2.0))': dependencies: source-map: 0.7.4 @@ -9085,8 +8570,6 @@ snapshots: '@nodelib/fs.scandir': 2.1.5 fastq: 1.17.1 - '@nolyfill/is-core-module@1.0.39': {} - '@panva/hkdf@1.2.1': {} '@pkgjs/parseargs@0.11.0': @@ -9874,10 +9357,6 @@ snapshots: '@radix-ui/rect@1.1.0': {} - '@rtsao/scc@1.1.0': {} - - '@rushstack/eslint-patch@1.10.4': {} - '@sinclair/typebox@0.27.8': {} '@sinonjs/commons@3.0.1': @@ -10079,6 +9558,8 @@ snapshots: dependencies: '@types/ms': 0.7.34 + '@types/dom-speech-recognition@0.0.4': {} + '@types/estree-jsx@1.0.5': dependencies: '@types/estree': 1.0.6 @@ -10126,8 +9607,6 @@ snapshots: '@types/json-schema@7.0.15': {} - '@types/json5@0.0.29': {} - '@types/katex@0.16.7': {} '@types/mdast@3.0.15': @@ -10165,12 +9644,18 @@ snapshots: dependencies: '@types/react': 18.2.55 + '@types/react-speech-recognition@3.9.5': + dependencies: + '@types/dom-speech-recognition': 0.0.4 + '@types/react@18.2.55': dependencies: '@types/prop-types': 15.7.13 '@types/scheduler': 0.23.0 csstype: 3.1.3 + '@types/regenerator-runtime@0.13.8': {} + '@types/retry@0.12.0': {} '@types/scheduler@0.23.0': {} @@ -10191,46 +9676,6 @@ snapshots: dependencies: '@types/yargs-parser': 21.0.3 - '@typescript-eslint/parser@6.21.0(eslint@8.56.0)(typescript@5.3.3)': - dependencies: - '@typescript-eslint/scope-manager': 6.21.0 - '@typescript-eslint/types': 6.21.0 - '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.3.3) - '@typescript-eslint/visitor-keys': 6.21.0 - debug: 4.3.7 - eslint: 8.56.0 - optionalDependencies: - typescript: 5.3.3 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/scope-manager@6.21.0': - dependencies: - '@typescript-eslint/types': 6.21.0 - '@typescript-eslint/visitor-keys': 6.21.0 - - '@typescript-eslint/types@6.21.0': {} - - '@typescript-eslint/typescript-estree@6.21.0(typescript@5.3.3)': - dependencies: - '@typescript-eslint/types': 6.21.0 - '@typescript-eslint/visitor-keys': 6.21.0 - debug: 4.3.7 - globby: 11.1.0 - is-glob: 4.0.3 - minimatch: 9.0.3 - semver: 7.6.3 - ts-api-utils: 1.3.0(typescript@5.3.3) - optionalDependencies: - typescript: 5.3.3 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/visitor-keys@6.21.0': - dependencies: - '@typescript-eslint/types': 6.21.0 - eslint-visitor-keys: 3.4.3 - '@ungap/structured-clone@1.2.0': {} '@vitejs/plugin-react@3.1.0(vite@4.5.5(@types/node@20.11.17)(terser@5.34.1))': @@ -10508,70 +9953,6 @@ snapshots: array-flatten@1.1.1: {} - 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-union@2.1.0: {} - - array.prototype.findlast@1.2.5: - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.23.3 - es-errors: 1.3.0 - es-object-atoms: 1.0.0 - es-shim-unscopables: 1.0.2 - - array.prototype.findlastindex@1.2.5: - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.23.3 - es-errors: 1.3.0 - es-object-atoms: 1.0.0 - es-shim-unscopables: 1.0.2 - - 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.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 - - 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 - define-properties: 1.2.1 - es-abstract: 1.23.3 - es-errors: 1.3.0 - get-intrinsic: 1.2.4 - is-array-buffer: 3.0.4 - is-shared-array-buffer: 1.0.3 - - ast-types-flow@0.0.8: {} - astring@1.9.0: {} async@3.2.6: {} @@ -11032,42 +10413,18 @@ snapshots: d3-timer@3.0.1: {} - damerau-levenshtein@1.0.8: {} - data-urls@3.0.2: dependencies: abab: 2.0.6 whatwg-mimetype: 3.0.0 whatwg-url: 11.0.0 - 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-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-offset@1.0.0: - dependencies: - call-bind: 1.0.7 - es-errors: 1.3.0 - is-data-view: 1.0.1 - date-fns@3.6.0: {} debug@2.6.9: dependencies: ms: 2.0.0 - debug@3.2.7: - dependencies: - ms: 2.1.3 - debug@4.3.7: dependencies: ms: 2.1.3 @@ -11107,8 +10464,6 @@ snapshots: which-collection: 1.0.2 which-typed-array: 1.1.15 - deep-is@0.1.4: {} - deepmerge@4.3.1: {} default-browser-id@3.0.0: @@ -11174,14 +10529,6 @@ snapshots: dlv@1.1.3: {} - doctrine@2.1.0: - dependencies: - esutils: 2.0.3 - - doctrine@3.0.0: - dependencies: - esutils: 2.0.3 - dom-accessibility-api@0.5.16: {} dom-accessibility-api@0.6.3: {} @@ -11242,55 +10589,6 @@ snapshots: 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-define-property@1.0.0: dependencies: get-intrinsic: 1.2.4 @@ -11309,45 +10607,8 @@ snapshots: 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-module-lexer@1.5.4: {} - es-object-atoms@1.0.0: - dependencies: - es-errors: 1.3.0 - - es-set-tostringtag@2.0.3: - dependencies: - get-intrinsic: 1.2.4 - has-tostringtag: 1.0.2 - hasown: 2.0.2 - - es-shim-unscopables@1.0.2: - 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 - esbuild@0.18.20: optionalDependencies: '@esbuild/android-arm': 0.18.20 @@ -11381,8 +10642,6 @@ snapshots: escape-string-regexp@2.0.0: {} - escape-string-regexp@4.0.0: {} - escape-string-regexp@5.0.0: {} escodegen@2.1.0: @@ -11393,204 +10652,13 @@ snapshots: optionalDependencies: source-map: 0.6.1 - eslint-config-next@14.1.0(eslint@8.56.0)(typescript@5.3.3): - dependencies: - '@next/eslint-plugin-next': 14.1.0 - '@rushstack/eslint-patch': 1.10.4 - '@typescript-eslint/parser': 6.21.0(eslint@8.56.0)(typescript@5.3.3) - eslint: 8.56.0 - eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@6.21.0(eslint@8.56.0)(typescript@5.3.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.30.0(eslint@8.56.0))(eslint@8.56.0) - eslint-plugin-import: 2.30.0(@typescript-eslint/parser@6.21.0(eslint@8.56.0)(typescript@5.3.3))(eslint-import-resolver-typescript@3.6.3)(eslint@8.56.0) - eslint-plugin-jsx-a11y: 6.10.0(eslint@8.56.0) - eslint-plugin-react: 7.37.0(eslint@8.56.0) - eslint-plugin-react-hooks: 4.6.2(eslint@8.56.0) - optionalDependencies: - typescript: 5.3.3 - transitivePeerDependencies: - - eslint-import-resolver-webpack - - eslint-plugin-import-x - - supports-color - - eslint-import-resolver-node@0.3.9: - dependencies: - debug: 3.2.7 - is-core-module: 2.15.1 - resolve: 1.22.8 - transitivePeerDependencies: - - supports-color - - eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@6.21.0(eslint@8.56.0)(typescript@5.3.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.30.0(eslint@8.56.0))(eslint@8.56.0): - dependencies: - '@nolyfill/is-core-module': 1.0.39 - debug: 4.3.7 - enhanced-resolve: 5.17.1 - eslint: 8.56.0 - eslint-module-utils: 2.12.0(@typescript-eslint/parser@6.21.0(eslint@8.56.0)(typescript@5.3.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@6.21.0(eslint@8.56.0)(typescript@5.3.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.30.0(eslint@8.56.0))(eslint@8.56.0))(eslint@8.56.0) - fast-glob: 3.3.2 - get-tsconfig: 4.8.1 - is-bun-module: 1.2.1 - is-glob: 4.0.3 - optionalDependencies: - eslint-plugin-import: 2.30.0(@typescript-eslint/parser@6.21.0(eslint@8.56.0)(typescript@5.3.3))(eslint-import-resolver-typescript@3.6.3)(eslint@8.56.0) - transitivePeerDependencies: - - '@typescript-eslint/parser' - - eslint-import-resolver-node - - eslint-import-resolver-webpack - - supports-color - - eslint-module-utils@2.12.0(@typescript-eslint/parser@6.21.0(eslint@8.56.0)(typescript@5.3.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@6.21.0(eslint@8.56.0)(typescript@5.3.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.30.0(eslint@8.56.0))(eslint@8.56.0))(eslint@8.56.0): - dependencies: - debug: 3.2.7 - optionalDependencies: - '@typescript-eslint/parser': 6.21.0(eslint@8.56.0)(typescript@5.3.3) - eslint: 8.56.0 - eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@6.21.0(eslint@8.56.0)(typescript@5.3.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.30.0(eslint@8.56.0))(eslint@8.56.0) - transitivePeerDependencies: - - supports-color - - eslint-plugin-import@2.30.0(@typescript-eslint/parser@6.21.0(eslint@8.56.0)(typescript@5.3.3))(eslint-import-resolver-typescript@3.6.3)(eslint@8.56.0): - dependencies: - '@rtsao/scc': 1.1.0 - array-includes: 3.1.8 - array.prototype.findlastindex: 1.2.5 - array.prototype.flat: 1.3.2 - array.prototype.flatmap: 1.3.2 - debug: 3.2.7 - doctrine: 2.1.0 - eslint: 8.56.0 - eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.12.0(@typescript-eslint/parser@6.21.0(eslint@8.56.0)(typescript@5.3.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@6.21.0(eslint@8.56.0)(typescript@5.3.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.30.0(eslint@8.56.0))(eslint@8.56.0))(eslint@8.56.0) - hasown: 2.0.2 - is-core-module: 2.15.1 - is-glob: 4.0.3 - minimatch: 3.1.2 - object.fromentries: 2.0.8 - object.groupby: 1.0.3 - object.values: 1.2.0 - semver: 6.3.1 - tsconfig-paths: 3.15.0 - optionalDependencies: - '@typescript-eslint/parser': 6.21.0(eslint@8.56.0)(typescript@5.3.3) - transitivePeerDependencies: - - eslint-import-resolver-typescript - - eslint-import-resolver-webpack - - supports-color - - eslint-plugin-jsx-a11y@6.10.0(eslint@8.56.0): - dependencies: - aria-query: 5.1.3 - array-includes: 3.1.8 - array.prototype.flatmap: 1.3.2 - ast-types-flow: 0.0.8 - axe-core: 4.10.0 - axobject-query: 4.1.0 - damerau-levenshtein: 1.0.8 - emoji-regex: 9.2.2 - es-iterator-helpers: 1.0.19 - eslint: 8.56.0 - 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 - - eslint-plugin-react-hooks@4.6.2(eslint@8.56.0): - dependencies: - eslint: 8.56.0 - - eslint-plugin-react@7.37.0(eslint@8.56.0): - dependencies: - array-includes: 3.1.8 - array.prototype.findlast: 1.2.5 - array.prototype.flatmap: 1.3.2 - array.prototype.tosorted: 1.1.4 - doctrine: 2.1.0 - es-iterator-helpers: 1.0.19 - eslint: 8.56.0 - estraverse: 5.3.0 - hasown: 2.0.2 - jsx-ast-utils: 3.3.5 - minimatch: 3.1.2 - object.entries: 1.1.8 - object.fromentries: 2.0.8 - object.values: 1.2.0 - prop-types: 15.8.1 - resolve: 2.0.0-next.5 - semver: 6.3.1 - string.prototype.matchall: 4.0.11 - string.prototype.repeat: 1.0.0 - eslint-scope@5.1.1: dependencies: esrecurse: 4.3.0 estraverse: 4.3.0 - eslint-scope@7.2.2: - dependencies: - esrecurse: 4.3.0 - estraverse: 5.3.0 - - eslint-visitor-keys@3.4.3: {} - - eslint@8.56.0: - dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.56.0) - '@eslint-community/regexpp': 4.11.1 - '@eslint/eslintrc': 2.1.4 - '@eslint/js': 8.56.0 - '@humanwhocodes/config-array': 0.11.14 - '@humanwhocodes/module-importer': 1.0.1 - '@nodelib/fs.walk': 1.2.8 - '@ungap/structured-clone': 1.2.0 - ajv: 6.12.6 - chalk: 4.1.2 - cross-spawn: 7.0.3 - debug: 4.3.7 - doctrine: 3.0.0 - escape-string-regexp: 4.0.0 - eslint-scope: 7.2.2 - eslint-visitor-keys: 3.4.3 - espree: 9.6.1 - esquery: 1.6.0 - esutils: 2.0.3 - fast-deep-equal: 3.1.3 - file-entry-cache: 6.0.1 - find-up: 5.0.0 - glob-parent: 6.0.2 - globals: 13.24.0 - graphemer: 1.4.0 - ignore: 5.3.2 - imurmurhash: 0.1.4 - is-glob: 4.0.3 - is-path-inside: 3.0.3 - js-yaml: 4.1.0 - json-stable-stringify-without-jsonify: 1.0.1 - levn: 0.4.1 - lodash.merge: 4.6.2 - minimatch: 3.1.2 - natural-compare: 1.4.0 - optionator: 0.9.4 - strip-ansi: 6.0.1 - text-table: 0.2.0 - transitivePeerDependencies: - - supports-color - - espree@9.6.1: - dependencies: - acorn: 8.12.1 - acorn-jsx: 5.3.2(acorn@8.12.1) - eslint-visitor-keys: 3.4.3 - esprima@4.0.1: {} - esquery@1.6.0: - dependencies: - estraverse: 5.3.0 - esrecurse@4.3.0: dependencies: estraverse: 5.3.0 @@ -11758,8 +10826,6 @@ snapshots: fast-json-stable-stringify@2.1.0: {} - fast-levenshtein@2.0.6: {} - fastq@1.17.1: dependencies: reusify: 1.0.4 @@ -11772,10 +10838,6 @@ snapshots: dependencies: bser: 2.1.1 - file-entry-cache@6.0.1: - dependencies: - flat-cache: 3.2.0 - filelist@1.0.4: dependencies: minimatch: 5.1.6 @@ -11803,21 +10865,8 @@ snapshots: locate-path: 5.0.0 path-exists: 4.0.0 - find-up@5.0.0: - dependencies: - locate-path: 6.0.0 - path-exists: 4.0.0 - - flat-cache@3.2.0: - dependencies: - flatted: 3.3.1 - keyv: 4.5.4 - rimraf: 3.0.2 - flat@5.0.2: {} - flatted@3.3.1: {} - flowise-embed-react@1.0.2(@types/node@20.11.17)(flowise-embed@1.3.14)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(terser@5.34.1)(typescript@5.3.3): dependencies: '@ladle/react': 2.5.1(@types/node@20.11.17)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(terser@5.34.1)(typescript@5.3.3) @@ -11896,13 +10945,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 - functions-have-names@1.2.3: {} gensync@1.0.0-beta.2: {} @@ -11925,16 +10967,6 @@ snapshots: get-stream@6.0.1: {} - get-symbol-description@1.0.2: - dependencies: - call-bind: 1.0.7 - es-errors: 1.3.0 - get-intrinsic: 1.2.4 - - get-tsconfig@4.8.1: - dependencies: - resolve-pkg-maps: 1.0.0 - git-remote-origin-url@4.0.0: dependencies: gitconfiglocal: 2.1.0 @@ -11955,14 +10987,6 @@ snapshots: glob-to-regexp@0.4.1: {} - glob@10.3.10: - dependencies: - foreground-child: 3.3.0 - jackspeak: 2.3.6 - minimatch: 9.0.5 - minipass: 7.1.2 - path-scurry: 1.11.1 - glob@10.4.5: dependencies: foreground-child: 3.3.0 @@ -11983,24 +11007,6 @@ snapshots: globals@11.12.0: {} - globals@13.24.0: - dependencies: - type-fest: 0.20.2 - - globalthis@1.0.4: - dependencies: - define-properties: 1.2.1 - gopd: 1.0.1 - - globby@11.1.0: - dependencies: - array-union: 2.1.0 - dir-glob: 3.0.1 - fast-glob: 3.3.2 - ignore: 5.3.2 - merge2: 1.4.1 - slash: 3.0.0 - globby@13.2.2: dependencies: dir-glob: 3.0.1 @@ -12021,8 +11027,6 @@ snapshots: graceful-fs@4.2.11: {} - graphemer@1.4.0: {} - gray-matter@4.0.3: dependencies: js-yaml: 3.14.1 @@ -12209,11 +11213,6 @@ snapshots: ignore@5.3.2: {} - import-fresh@3.3.0: - dependencies: - parent-module: 1.0.1 - resolve-from: 4.0.0 - import-local@3.2.0: dependencies: pkg-dir: 4.2.0 @@ -12278,10 +11277,6 @@ snapshots: is-arrayish@0.2.1: {} - is-async-function@2.0.0: - dependencies: - has-tostringtag: 1.0.2 - is-bigint@1.0.4: dependencies: has-bigints: 1.0.2 @@ -12299,20 +11294,12 @@ snapshots: is-buffer@2.0.5: {} - is-bun-module@1.2.1: - dependencies: - semver: 7.6.3 - is-callable@1.2.7: {} is-core-module@2.15.1: dependencies: hasown: 2.0.2 - is-data-view@1.0.1: - dependencies: - is-typed-array: 1.1.13 - is-date-object@1.0.5: dependencies: has-tostringtag: 1.0.2 @@ -12327,18 +11314,10 @@ snapshots: is-extglob@2.1.1: {} - is-finalizationregistry@1.0.2: - dependencies: - call-bind: 1.0.7 - is-fullwidth-code-point@3.0.0: {} is-generator-fn@2.1.0: {} - is-generator-function@1.0.10: - dependencies: - has-tostringtag: 1.0.2 - is-glob@4.0.3: dependencies: is-extglob: 2.1.1 @@ -12349,16 +11328,12 @@ snapshots: is-map@2.0.3: {} - is-negative-zero@2.0.3: {} - is-number-object@1.0.7: dependencies: has-tostringtag: 1.0.2 is-number@7.0.0: {} - is-path-inside@3.0.3: {} - is-plain-obj@4.1.0: {} is-potential-custom-element-name@1.0.1: {} @@ -12388,16 +11363,8 @@ snapshots: dependencies: has-symbols: 1.0.3 - is-typed-array@1.1.13: - dependencies: - which-typed-array: 1.1.15 - is-weakmap@2.0.2: {} - is-weakref@1.0.2: - dependencies: - call-bind: 1.0.7 - is-weakset@2.0.3: dependencies: call-bind: 1.0.7 @@ -12452,20 +11419,6 @@ snapshots: html-escaper: 2.0.2 istanbul-lib-report: 3.0.1 - 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 - - jackspeak@2.3.6: - dependencies: - '@isaacs/cliui': 8.0.2 - optionalDependencies: - '@pkgjs/parseargs': 0.11.0 - jackspeak@3.4.3: dependencies: '@isaacs/cliui': 8.0.2 @@ -12865,18 +11818,10 @@ snapshots: jsesc@2.5.2: {} - json-buffer@3.0.1: {} - json-parse-even-better-errors@2.3.1: {} json-schema-traverse@0.4.1: {} - json-stable-stringify-without-jsonify@1.0.1: {} - - json5@1.0.2: - dependencies: - minimist: 1.2.8 - json5@2.2.3: {} jsonfile@6.1.0: @@ -12887,21 +11832,12 @@ snapshots: jsonpointer@5.0.1: {} - jsx-ast-utils@3.3.5: - dependencies: - array-includes: 3.1.8 - array.prototype.flat: 1.3.2 - object.assign: 4.1.5 - object.values: 1.2.0 + just-template@2.2.0: {} katex@0.16.11: dependencies: commander: 8.3.0 - keyv@4.5.4: - dependencies: - json-buffer: 3.0.1 - kind-of@6.0.3: {} kleur@3.0.3: {} @@ -13018,21 +11954,10 @@ snapshots: optionalDependencies: openai: 4.66.1(zod@3.23.8) - language-subtag-registry@0.3.23: {} - - language-tags@1.0.9: - dependencies: - language-subtag-registry: 0.3.23 - layerr@3.0.0: {} leven@3.1.0: {} - levn@0.4.1: - dependencies: - prelude-ls: 1.2.1 - type-check: 0.4.0 - lilconfig@2.1.0: {} lilconfig@3.1.2: {} @@ -13047,10 +11972,6 @@ snapshots: dependencies: p-locate: 4.1.0 - locate-path@6.0.0: - dependencies: - p-locate: 5.0.0 - lodash.debounce@4.0.8: {} lodash.memoize@4.1.2: {} @@ -13065,6 +11986,14 @@ snapshots: dependencies: js-tokens: 4.0.0 + lottie-react@2.4.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0): + dependencies: + lottie-web: 5.12.2 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + + lottie-web@5.12.2: {} + lowlight@1.20.0: dependencies: fault: 1.0.4 @@ -13900,16 +12829,10 @@ snapshots: dependencies: brace-expansion: 2.0.1 - minimatch@9.0.3: - dependencies: - brace-expansion: 2.0.1 - minimatch@9.0.5: dependencies: brace-expansion: 2.0.1 - minimist@1.2.8: {} - minipass@7.1.2: {} ml-array-mean@1.1.6: @@ -14080,31 +13003,6 @@ snapshots: has-symbols: 1.0.3 object-keys: 1.1.1 - object.entries@1.1.8: - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-object-atoms: 1.0.0 - - object.fromentries@2.0.8: - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.23.3 - es-object-atoms: 1.0.0 - - object.groupby@1.0.3: - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.23.3 - - object.values@1.2.0: - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-object-atoms: 1.0.0 - oidc-token-hash@5.0.3: {} on-finished@2.4.1: @@ -14163,15 +13061,6 @@ snapshots: object-hash: 2.2.0 oidc-token-hash: 5.0.3 - optionator@0.9.4: - dependencies: - deep-is: 0.1.4 - fast-levenshtein: 2.0.6 - levn: 0.4.1 - prelude-ls: 1.2.1 - type-check: 0.4.0 - word-wrap: 1.2.5 - p-finally@1.0.0: {} p-limit@2.3.0: @@ -14186,10 +13075,6 @@ snapshots: dependencies: p-limit: 2.3.0 - p-locate@5.0.0: - dependencies: - p-limit: 3.1.0 - p-queue@6.6.2: dependencies: eventemitter3: 4.0.7 @@ -14208,10 +13093,6 @@ snapshots: package-json-from-dist@1.0.1: {} - parent-module@1.0.1: - dependencies: - callsites: 3.1.0 - parse-entities@2.0.0: dependencies: character-entities: 1.2.4 @@ -14343,8 +13224,6 @@ snapshots: preact@10.24.1: {} - prelude-ls@1.2.1: {} - prettier-plugin-tailwindcss@0.5.14(@ianvs/prettier-plugin-sort-imports@4.3.1(@vue/compiler-sfc@3.5.10)(prettier@3.3.3))(prettier@3.3.3): dependencies: prettier: 3.3.3 @@ -14576,6 +13455,15 @@ snapshots: react-dom: 18.2.0(react@18.2.0) react-transition-group: 4.4.5(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + react-speech-kit@3.0.1(prop-types@15.8.1)(react@18.2.0): + dependencies: + prop-types: 15.8.1 + react: 18.2.0 + + react-speech-recognition@3.10.0(react@18.2.0): + dependencies: + react: 18.2.0 + react-style-singleton@2.2.1(@types/react@18.2.55)(react@18.2.0): dependencies: get-nonce: 1.0.1 @@ -14637,16 +13525,6 @@ snapshots: indent-string: 4.0.0 strip-indent: 3.0.0 - reflect.getprototypeof@1.0.6: - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.23.3 - es-errors: 1.3.0 - get-intrinsic: 1.2.4 - globalthis: 1.0.4 - which-builtin-type: 1.1.4 - refractor@3.6.0: dependencies: hastscript: 6.0.0 @@ -14659,6 +13537,8 @@ snapshots: regenerate@1.4.2: {} + regenerator-runtime@0.13.11: {} + regenerator-runtime@0.14.1: {} regenerator-transform@0.15.2: @@ -14780,12 +13660,8 @@ snapshots: dependencies: resolve-from: 5.0.0 - resolve-from@4.0.0: {} - resolve-from@5.0.0: {} - resolve-pkg-maps@1.0.0: {} - resolve.exports@2.0.2: {} resolve@1.22.8: @@ -14794,19 +13670,13 @@ snapshots: 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 - path-parse: 1.0.7 - supports-preserve-symlinks-flag: 1.0.0 - retry@0.13.1: {} reusify@1.0.4: {} - rimraf@3.0.2: + rimraf@5.0.10: dependencies: - glob: 7.2.3 + glob: 10.4.5 rollup@3.29.5: optionalDependencies: @@ -14828,21 +13698,8 @@ snapshots: dependencies: mri: 1.2.0 - 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-buffer@5.2.1: {} - safe-regex-test@1.0.3: - dependencies: - call-bind: 1.0.7 - es-errors: 1.3.0 - is-regex: 1.1.4 - safer-buffer@2.1.2: {} saxes@6.0.0: @@ -15035,50 +13892,6 @@ snapshots: emoji-regex: 9.2.2 strip-ansi: 7.1.0 - string.prototype.includes@2.0.0: - dependencies: - define-properties: 1.2.1 - es-abstract: 1.23.3 - - string.prototype.matchall@4.0.11: - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.23.3 - es-errors: 1.3.0 - es-object-atoms: 1.0.0 - get-intrinsic: 1.2.4 - gopd: 1.0.1 - has-symbols: 1.0.3 - internal-slot: 1.0.7 - regexp.prototype.flags: 1.5.2 - set-function-name: 2.0.2 - side-channel: 1.0.6 - - string.prototype.repeat@1.0.0: - dependencies: - define-properties: 1.2.1 - es-abstract: 1.23.3 - - 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.trimstart@1.0.8: - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-object-atoms: 1.0.0 - stringify-entities@4.0.4: dependencies: character-entities-html4: 2.1.0 @@ -15094,8 +13907,6 @@ snapshots: strip-bom-string@1.0.0: {} - strip-bom@3.0.0: {} - strip-bom@4.0.0: {} strip-eof@1.0.0: {} @@ -15255,8 +14066,6 @@ snapshots: glob: 7.2.3 minimatch: 3.1.2 - text-table@0.2.0: {} - thenify-all@1.6.0: dependencies: thenify: 3.3.1 @@ -15296,10 +14105,6 @@ snapshots: trough@2.2.0: {} - ts-api-utils@1.3.0(typescript@5.3.3): - dependencies: - typescript: 5.3.3 - ts-interface-checker@0.1.13: {} ts-jest@29.2.5(@babel/core@7.25.2)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.25.2))(jest@29.7.0(@types/node@20.11.17)(ts-node@10.9.2(@types/node@20.11.17)(typescript@5.3.3)))(typescript@5.3.3): @@ -15345,23 +14150,10 @@ snapshots: optionalDependencies: typescript: 5.3.3 - tsconfig-paths@3.15.0: - dependencies: - '@types/json5': 0.0.29 - json5: 1.0.2 - minimist: 1.2.8 - strip-bom: 3.0.0 - tslib@2.7.0: {} - type-check@0.4.0: - dependencies: - prelude-ls: 1.2.1 - type-detect@4.0.8: {} - type-fest@0.20.2: {} - type-fest@0.21.3: {} type-fest@1.4.0: {} @@ -15380,38 +14172,6 @@ snapshots: transitivePeerDependencies: - debug - 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-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-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-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 - typescript@5.3.3: {} typewriter-effect@2.21.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0): @@ -15427,13 +14187,6 @@ snapshots: dependencies: layerr: 3.0.0 - 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 - undici-types@5.26.5: {} undici@5.28.4: @@ -15765,21 +14518,6 @@ snapshots: is-string: 1.0.7 is-symbol: 1.0.4 - which-builtin-type@1.1.4: - dependencies: - function.prototype.name: 1.1.6 - 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.1.4 - is-weakref: 1.0.2 - isarray: 2.0.5 - which-boxed-primitive: 1.0.2 - which-collection: 1.0.2 - which-typed-array: 1.1.15 - which-collection@1.0.2: dependencies: is-map: 2.0.3 @@ -15807,8 +14545,6 @@ snapshots: dependencies: string-width: 5.1.2 - word-wrap@1.2.5: {} - wrap-ansi@7.0.0: dependencies: ansi-styles: 4.3.0 diff --git a/apps/nextjs/types/react-speech-kit.d.ts b/apps/nextjs/types/react-speech-kit.d.ts new file mode 100644 index 000000000..64c13674e --- /dev/null +++ b/apps/nextjs/types/react-speech-kit.d.ts @@ -0,0 +1,2 @@ +// types/react-speech-kit.d.ts +declare module 'react-speech-kit'; diff --git a/docs/fdai-act/right-to-trial-act.md b/docs/fdai-act/right-to-trial-act.md new file mode 100644 index 000000000..59a2af553 --- /dev/null +++ b/docs/fdai-act/right-to-trial-act.md @@ -0,0 +1,951 @@ +# RIGHT TO TRIAL ACT OF 2024 + +## SECTION 1\. SHORT TITLE AND FINDINGS + +### 1.1 Title + +This Act may be cited as the "Right to Trial Act of 2024" + +### 1.2 Core Findings + +Congress finds that: + +1. **Current System Failures** +* Current regulations unnecessarily delay treatment access +* Clinical trials exclude most patients who need treatment +* Artificial restrictions reduce both access and scientific value +* Many regulatory costs make drugs needlessly expensive +* Patients suffer and die waiting for approvals +* Innovation happens globally but access is restricted locally +* Companies are rewarded for expensive treatments over affordable ones +* Prevention is worth less than treatment +* Real-world outcomes are ignored +2. **Solution Framework** +* Give all patients right to participate in decentralized clinical trials +* Replace restricted trials with inclusive public outcome tracking +* Enable treatment access wherever patients are +* Reward both better outcomes AND lower costs +* Learn from all patient experiences +* Modernize FDA role + +## SECTION 2\. PATIENT ACCESS RIGHTS + +### 2.1 Universal Right to Treatment + +Any patient may access any treatment that has: + +* Completed basic safety testing (Phase 1\) +* Published safety data +* Registered for outcome tracking +* Accurate labeling of contents and manufacturing standards + +### 2.2 Access Protection + +Neither FDA nor any state may restrict: + +* Patient treatment choices after safety verification +* Location of treatment administration +* Doctor prescribing rights +* Treatment manufacturing meeting safety standards +* Treatment importing from qualified facilities +* Home-based treatment delivery +* Remote monitoring +* Telemedicine prescribing + +### 2.3 Provider Rights + +Healthcare providers may: + +* Prescribe any registered treatment +* Order from any registered manufacturer +* Import treatments for patients +* Participate in outcome tracking +* Provide home-based care +* Use telemedicine +* Monitor remotely +* Cross state lines + +### 2.4 Location Independence + +Patients may: + +* Receive treatment at home +* Use local healthcare facilities +* Access remote monitoring +* Submit data electronically +* Participate from any location +* Switch treatment locations +* Use mobile providers +* Choose convenience + +## SECTION 3\. TREATMENT OUTCOMES DATABASE (TOD) + +### 3.1 Establishment + +The Treatment Outcomes Database shall: + +* Replace restricted trials with inclusive tracking +* Enable participation from any location +* Support home-based monitoring +* Track real-world treatment outcomes +* Calculate healthcare cost impacts +* Enable treatment comparison +* Support reward calculations + +### 3.2 Universal Data Collection + +Providers must report: + +* Patient conditions (anonymized) +* Treatments used +* Health outcomes +* Adverse events +* Treatment costs +* Quality of life measures +* Location of care +* Access methods + +### 3.3 Inclusive Design + +TOD must support: + +* Remote data entry +* Mobile applications +* Home monitoring devices +* Telemedicine integration +* Patient-reported outcomes +* Caregiver input +* Multiple languages +* Accessibility features + +### 3.4 Public Access + +* All data publicly available (de-identified) +* Standard API for analysis +* Mobile apps for patients +* Cost comparison tools +* Research access +* Subgroup analysis tools +* Real-time updates +* Global availability + +### 3.5 Privacy Protection + +* Standard de-identification +* Secure data handling +* Patient consent for tracking +* Right to access own data +* Local data storage options +* Distributed systems +* End-to-end encryption +* User control + + +# RIGHT TO TRIAL ACT OF 2024 + +## SECTION 1\. SHORT TITLE AND FINDINGS + +### 1\. **Short Title** + +- This Act may be cited as the "Right to Trial Act of 2024." + +### 2\. **Findings** + +Congress finds that: + +a) **Access Barriers:** Current FDA regulations and traditional clinical trial models limit patient access to promising treatments, delaying potential health benefits. + +b) **Real-World Evidence:** Collecting real-world data is essential for evaluating the effectiveness of treatments across diverse populations and conditions. + +c) **Informed Choice:** Transparent outcome data empowers patients and healthcare providers to make informed treatment decisions. + +d) **Innovation and Competition:** Global collaboration and competition can accelerate innovation, reduce costs, and improve treatment options. + +e) **Balanced Approach:** A regulatory framework that combines patient freedom with robust monitoring best serves public health interests. + +f) **Regulatory Costs:** Regulatory user fees imposed on drug manufacturers increase the cost of developing new treatments, which are often passed on to patients in the form of higher drug prices. + +g) **Sickcare System Incentives:** The current "sickcare" system disproportionately rewards the treatment of symptoms rather than the prevention of disability, leading to higher long-term healthcare costs and suboptimal health outcomes. + +## SECTION 2\. TREATMENT ACCESS AND REAL-WORLD DATA COLLECTION + +### 1\. **Patient Rights** + +#### a) **Access to Treatments** + +Any patient with a serious or life-threatening condition may access any treatment that meets the following criteria: + +- + + i) **Phase 1 Safety Completion:** The treatment has successfully completed a Phase 1 clinical trial, demonstrating initial safety in humans. + +ii) **Published Safety Data:** Safety data from the Phase 1 trial is publicly available. + +iii) **Registration with the Treatment Outcomes Database (TOD):** The treatment is registered with the TOD for ongoing data collection. + +iv) **Compliance with Manufacturing and Labeling Standards:** The treatment adheres to Good Manufacturing Practices (GMP) and provides accurate labeling of contents. + +#### b) **Freedom from Restrictions** + +- No federal, state, or local agency may: i) **Limit Patient Access:** Restrict a patient's choice to access treatments meeting the above criteria. + + ii) **Restrict Healthcare Providers:** Prohibit licensed providers from prescribing or administering such treatments. + + iii) **Impede Manufacturing:** Prevent the production of treatments that comply with safety and quality standards. + + iv) **Block Importation:** Restrict the importation of treatments that meet international safety and quality standards. + +### 2\. **Healthcare Provider Responsibilities** + +- Providers administering experimental treatments must: a) **Informed Consent:** Obtain written informed consent from patients, clearly explaining the experimental nature of the treatment, known risks, and alternative options. + + b) **Data Reporting:** Collect and submit treatment and outcome data to the TOD as specified. + + c) **Monitoring:** Observe patients for adverse events and report them promptly. + + d) **Technology Utilization:** Utilize telemedicine and remote monitoring tools to administer and track treatments efficiently. + +## SECTION 3\. TREATMENT OUTCOMES DATABASE (TOD) + +### 1\. **Establishment and Purpose** + +- The TOD is established to: a) **Data Collection:** Aggregate standardized data on treatments to assess safety and effectiveness in real-world settings. + + b) **Transparency:** Provide open access to de-identified data for patients, providers, researchers, and policymakers. + + c) **Performance Metrics and Evaluation:** Track access, data quality, and cost metrics to ensure continuous improvement. + +### 2\. **Data Collection Requirements** + +#### a) **For Healthcare Providers** + +- Submit anonymized patient data, including: i) **Demographics and Medical History** + + ii) **Treatment Protocols:** Dosage, administration method, and duration. + + iii) **Outcomes:** Clinical results, patient-reported outcomes, and quality of life measures. + + iv) **Adverse Events:** Any side effects or complications observed. + +#### b) **For Manufacturers** + +- Report: i) **Comprehensive Safety Data** + + ii) **Manufacturing Standards Compliance** + + iii) **Cost Information:** Production costs and pricing structures. + + iv) **Distribution Data:** Availability and supply chain details. + +### 3\. **Data Privacy and Security** + +- The TOD must comply with all applicable privacy laws, including the Health Insurance Portability and Accountability Act (HIPAA). + +- Data must be de-identified to protect patient confidentiality. + +### 4\. **Data Utilization** + +- Collected data will be used to: a) **Evaluate Effectiveness:** Continuously update treatment effectiveness rankings. + + b) **Identify Safety Signals:** Monitor for adverse events and take appropriate action. + + c) **Inform Decision-Making:** Aid patients and providers in making evidence-based treatment choices. + +## SECTION 4\. GLOBAL MARKET ACCESS AND COMPETITION ENHANCEMENT + +### 1\. **International Cooperation** + +- To enhance access and data collection: a) **Recognition of International Safety Data:** Accept safety data from reputable international regulatory bodies equivalent to Phase 1 trials. + + b) **Harmonized Reporting Standards:** Align data reporting requirements with international standards to facilitate global data sharing. + + c) **Cross-Border Collaboration:** Encourage partnerships between domestic and international researchers, manufacturers, and healthcare providers. + +### 2\. **Price Transparency and Cost Reduction Measures** + +#### a) **Mandatory Disclosure** + +- Manufacturers must disclose the following for each experimental treatment: i) **Base Cost:** The fundamental cost of production and development. + + ii) **Pricing Structure:** Detailed breakdown of how the treatment is priced, including profit margins. + + iii) **Price Comparisons:** Comparative pricing data relative to similar treatments in the domestic and international markets. + +#### b) **Public Access** + +- All pricing information must be made publicly accessible through the TOD to enable comparison and informed decision-making by patients and providers. + +### 3\. **Enhancing Competition** + +#### a) **Facilitating Generic Entry** + +- Streamline the approval process for generic versions of experimental treatments once safety and basic efficacy are established. + +- Implement an abbreviated pathway for generic manufacturers to enter the market, reducing time and costs associated with bringing generics to patients. + +#### b) **Patent Reform** + +- Shorten patent exclusivity periods for experimental treatments that demonstrate clear safety and potential efficacy benefits. + +- Prevent "evergreening" practices where patents are extended without substantial innovation. + +#### c) **Encouraging Parallel Importation** + +- Allow the importation of treatments approved in other countries that meet U.S. safety and quality standards, fostering competition and reducing costs. + +### 4\. **Incentives for Cost Reduction** + +#### a) **Tax Credits** + +- Provide tax credits to manufacturers who price their experimental treatments competitively and transparently. + +#### b) **Volume-Based Discounts** + +- Encourage bulk purchasing agreements for experimental treatments to lower costs through economies of scale. + +#### c) **Efficiency Grants** + +- Offer grants to manufacturers that invest in technologies and processes that reduce production costs without compromising quality. + +## SECTION 5\. SAFETY STANDARDS AND FRAUD PREVENTION + +### 1\. **Minimum Safety Requirements** + +- Treatments must: a) **Complete Phase 1 Trials:** Demonstrate initial safety in human subjects. + + b) **Adhere to GMP:** Follow established manufacturing quality controls. + + c) **Provide Accurate Labeling:** Clearly state contents, dosages, and usage instructions. + + d) **Participate in Ongoing Monitoring:** Engage in continuous safety and effectiveness data collection through the TOD. + +### 2\. **Adverse Event Monitoring** + +- Establish a robust system for: a) **Reporting:** Healthcare providers and patients can report adverse events directly. + + b) **Analysis:** Rapid evaluation of reported events to identify potential safety concerns. + + c) **Action:** Implementing necessary measures, such as treatment modifications or withdrawals, based on emerging safety data. + +### 3\. **Fraud Prevention and Accountability** + +- Enforce strict penalties for: a) **Data Falsification** + + b) **Mislabeling or Misrepresentation** + + c) **Non-Compliance with Reporting Requirements** + +- Violations may result in criminal charges, fines, and disqualification from participating in the program. + +## SECTION 6\. INSURANCE COVERAGE AND COST TRANSPARENCY + +### 1\. **Insurance Options** + +- Insurance providers may: a) **Offer Coverage:** Include experimental treatments in their plans. + + b) **Adjust Pricing:** Use risk-based models to price premiums appropriately. + + c) **Create Specialized Plans:** Develop options tailored to patients seeking experimental treatments. + + d) **Allow Use of HSAs/FSAs:** Permit patients to use Health Savings Accounts or Flexible Spending Accounts for treatment costs. + +### 2\. **Cost Transparency** + +- Manufacturers and providers must: a) **Publish Price Lists:** Clearly state the costs of treatments. + + b) **Disclose Cost Basis:** Provide information on production and development costs. + + c) **Report Insurance Payments:** Share data on insurance reimbursements and patient out-of-pocket expenses. + + d) **Compare International Prices:** Offer context on how domestic prices relate to global markets. + +## SECTION 7\. INFORMED CONSENT AND LIABILITY + +### 1\. **Informed Consent Requirements** + +- Prior to treatment, patients must receive: a) **Clear Disclosure:** Information about the experimental nature of the treatment. + + b) **Risk Assessment:** Known potential risks and uncertainties. + + c) **Alternatives:** Available standard treatments and their comparative risks and benefits. + + d) **Cost Information:** Detailed explanation of financial obligations. + +- Patients must provide written acknowledgment of understanding and consent. + +### 2\. **Liability Framework** + +- **Protections for Providers and Manufacturers** a) **Safe Harbor:** Limited liability for adverse outcomes if all risks were properly disclosed and no negligence occurred. + + b) **Exceptions:** Liability remains for cases involving fraud, willful misconduct, or gross negligence. + + c) **Compliance Requirement:** Liability protections apply only if all reporting and safety monitoring obligations are met. + +## SECTION 8\. IMPLEMENTATION AND REGULATORY ADJUSTMENTS + +### 1\. **Role of the FDA** + +- The FDA shall: a) **Focus on Safety Oversight:** Prioritize monitoring safety data and adverse event reporting. + + b) **Manage the TOD:** Oversee the operation and maintenance of the database. + + c) **Publish Guidance:** Provide information to stakeholders about compliance and best practices. + + d) **Coordinate Internationally:** Engage with global regulatory bodies to harmonize standards and data sharing. + + e) **Elimination of Regulatory User Fees:** + + - **Complete Fee Exemption:** All experimental treatments covered under this Act are exempt from **all** FDA regulatory user fees, including Prescription Drug User Fee Act (PDUFA) fees and any other associated submission fees. + + - **Alternative Funding Mechanism:** Establish the **FDA Regulatory Support Fund (RFSF)**, a dedicated federal fund to support the FDA’s regulatory activities related to the Right to Trial Act. This fund shall be financed through congressional appropriations and other authorized federal funding sources, ensuring the FDA maintains adequate resources for oversight without imposing fees on manufacturers. + +### 2\. **Transition Period** + +- **Timeline** a) **Implementation Start:** The Act takes effect 180 days after enactment. + + b) **Staged Deployment:** Roll out the TOD and new processes in phases to ensure stability. + +- **Provider and Manufacturer Training** a) **Educational Programs:** Offer training on reporting requirements, informed consent procedures, and safety monitoring. + + b) **Resources:** Develop guidance documents and support channels. + +- **Public-Private Partnerships Integration** a) **Collaborative Research Initiatives:** Facilitate partnerships to accelerate treatment development. + + b) **Shared Resources:** Promote resource sharing to enhance efficiency. + +### 3\. **Initial Monitoring** + +- **Evaluation Period:** Assess the implementation's impact on patient safety and data quality. + +- **Adjustments:** Make necessary regulatory adjustments based on observed outcomes. + +## SECTION 9\. FUNDING AND RESOURCES + +### 1\. **Authorization of Appropriations** + +- Congress authorizes funding to: a) **Develop and Maintain the TOD** + + b) **Support FDA's Expanded Role** + + c) **Provide Training and Resources to Providers and Manufacturers** + + d) **Fund the FDA Regulatory Support Fund (RFSF)** + +### 2\. **Grants and Incentives** + +- Offer financial incentives for: a) **Technology Development:** Tools that enhance data collection and patient monitoring. + + b) **Research Collaboration:** Projects that utilize TOD data to improve treatment effectiveness. + +## SECTION 10\. SEVERABILITY + +- If any provision of this Act is held invalid, the remainder of the Act shall not be affected and shall continue to be enforceable. + +## SECTION 11\. SAVINGS SHARING PROGRAM + +### 11.1 **Purpose** + +- To incentivize pharmaceutical companies to develop and bring to market innovative treatments that significantly prevent disability and reduce medical costs that would otherwise be borne by the government, thereby promoting public health and economic efficiency. + +### 11.2 **Definitions** + +- For the purposes of this section: + + 1. **Savings Sharing Program:** A structured incentive program that rewards pharmaceutical companies based on the verified cost savings their treatments generate by preventing disability and reducing government medical expenditures. + + 2. **Cost Savings:** The reduction in government medical expenditures resulting from the use of a pharmaceutical treatment, including but not limited to decreased hospitalizations, reduced need for long-term care, and lower disability-related expenses. + + 3. **Evaluation Period:** The timeframe during which the treatment's impact on public health and government costs is assessed, typically spanning five years post-approval. + + 4. **Independent Assessment Body (IAB):** An autonomous entity responsible for evaluating the performance and calculating the cost savings attributable to approved treatments. + +### 11.3 **Eligibility Criteria** + +- A pharmaceutical treatment is eligible for the Savings Sharing Program if it meets the following criteria: + + 1. **Approval and Registration:** + + - The treatment has received approval from the FDA under the provisions of this Act. + + - The treatment is registered with the Treatment Outcomes Database (TOD). + + + + 2. **Demonstrated Impact:** + + - Clinical and real-world evidence must show that the treatment significantly prevents disability or reduces medical costs. + + - The treatment must address a serious or life-threatening condition with substantial public health implications. + + + + 3. **Data Reporting:** + + - Ongoing data collection and reporting to the TOD are maintained, ensuring accurate assessment of the treatment's impact. + +### 11.4 **Calculation of Rewards** + +#### a) **Cost Savings Assessment** + +- The IAB shall annually assess the cost savings attributed to eligible treatments by analyzing data from the TOD, government healthcare expenditure reports, and other relevant sources. + +- Cost savings include reductions in hospitalization rates, decreased need for long-term care, lower disability benefits payouts, and other measurable financial impacts on government healthcare programs. + +#### b) **Reward Calculation** + +- The reward amount shall be calculated as a percentage of the verified cost savings directly attributable to the treatment. + +- The percentage shall be determined through a competitive bidding process, ensuring fair and transparent allocation of funds. + +- The maximum reward for any single treatment shall not exceed 20% of the total verified cost savings during the Evaluation Period. + +#### c) **Cap on Total Rewards** + +- To ensure fiscal responsibility, the total annual allocation for the Savings Sharing Program shall be capped at a predetermined amount established by Congress, adjusted periodically for inflation and healthcare cost trends. + +### 11.5 **Award Distribution** + +#### a) **Timing** + +- Rewards shall be distributed annually following the completion of each Evaluation Period. + +#### b) **Process** + +- Pharmaceutical companies must submit detailed reports demonstrating their treatment's impact on preventing disability and reducing medical costs. + +- The IAB will verify the submitted data and calculate the corresponding rewards based on the established criteria. + +#### c) **Public Disclosure** + +- Awarded rewards and the corresponding treatments shall be publicly disclosed to maintain transparency and accountability. + +### 11.6 **Oversight and Compliance** + +#### a) **Independent Oversight** + +- An Independent Oversight Committee (IOC) shall be established to monitor the integrity of the reward process, ensuring unbiased assessments and preventing conflicts of interest. + +#### b) **Audit and Review** + +- Regular audits shall be conducted to verify the accuracy of cost savings calculations and the proper allocation of rewards. + +#### c) **Penalties for Misrepresentation** + +- Pharmaceutical companies found to have falsified data or misrepresented the impact of their treatments shall be disqualified from receiving rewards and may face additional penalties, including fines and legal action. + +### 11.7 **Funding for the Savings Sharing Program** + +#### a) **Source of Funds** + +- The Savings Sharing Program shall be funded through a dedicated **Healthcare Innovation Reward Fund (HIRF)**, established by congressional appropriation. + +#### b) **Allocation** + +- Funds allocated to the HIRF shall be used exclusively for rewards, ensuring that pharmaceutical companies receive direct incentives for their contributions to preventing disability and reducing medical costs. + +### 11.8 **Reporting and Transparency** + +#### a) **Annual Reports** + +- The IAB, in collaboration with the IOC, shall publish annual reports detailing the rewards distributed, the treatments awarded, and the associated cost savings. + +#### b) **Stakeholder Engagement** + +- Feedback from healthcare providers, patients, and other stakeholders shall be solicited to continuously improve the Savings Sharing Program and ensure it aligns with public health goals. + +## SECTION 12\. SEVERABILITY + +- If any provision of this Act is held invalid, the remainder of the Act shall not be affected and shall continue to be enforceable. + +--- + +## **Summary of Key Sections** + +1. **Section 1:** Establishes the short title and outlines the findings that justify the Act, including the elimination of regulatory user fees and the shift from a "sickcare" system to a prevention-focused approach. + +2. **Section 2:** Defines patient rights to access experimental treatments and outlines healthcare providers' responsibilities in administering these treatments and reporting data. + +3. **Section 3:** Establishes the Treatment Outcomes Database (TOD) for collecting and utilizing real-world data on treatment effectiveness and safety. + +4. **Section 4:** Enhances global market access and competition through international cooperation, price transparency, and measures to facilitate generic entry and parallel importation. + +5. **Section 5:** Sets minimum safety standards and outlines mechanisms for adverse event monitoring and fraud prevention. + +6. **Section 6:** Expands insurance coverage options for experimental treatments and mandates cost transparency from manufacturers and providers. + +7. **Section 7:** Ensures informed consent and outlines a liability framework that protects providers and manufacturers while holding them accountable for misconduct. + +8. **Section 8:** Details the FDA's role, including the elimination of all regulatory user fees and the establishment of the FDA Regulatory Support Fund (RFSF) to maintain oversight without burdening manufacturers. + +9. **Section 9:** Authorizes funding and resources necessary to implement and sustain the Act's provisions, including maintaining the TOD and supporting the FDA. + +10. **Section 10:** Maintains the Act's enforceability even if certain provisions are found invalid. + +11. **Section 11:** Introduces the Savings Sharing Program, incentivizing pharmaceutical companies to develop treatments that prevent disability and reduce government medical costs through a structured reward system. + +--- + +## **Key Benefits of the Right to Trial Act of 2024** + +1. **Reduced Financial Barriers for Manufacturers:** + + - By completely eliminating regulatory user fees, the Act removes a major cost component for drug manufacturers, encouraging more companies to develop and submit new treatments. + + + +2. **Increased Treatment Accessibility:** + + - Patients gain broader access to experimental treatments sooner, potentially improving health outcomes for those with serious or life-threatening conditions. + + + +3. **Enhanced Data Collection and Transparency:** + + - The Treatment Outcomes Database (TOD) ensures continuous real-world data collection, improving the understanding of treatment effectiveness and safety. + + + +4. **Promoted Competition and Lower Costs:** + + - Price transparency, patent reform, and facilitation of generic entry foster a competitive market, driving down costs and making treatments more affordable for patients. + + + +5. **Sustained Regulatory Oversight:** + + - The FDA Regulatory Support Fund (RFSF) ensures the FDA remains adequately funded to maintain safety oversight without relying on manufacturer fees. + + + +6. **Balanced Regulatory Framework:** + + - The Act balances patient access with necessary safety and efficacy monitoring, maintaining public health protections while promoting innovation. + + + +7. **Global Collaboration:** + + - International cooperation expands access to global innovations and fosters a more unified approach to treatment development and approval. + + + +8. **Incentivizing Prevention:** + + - The Savings Sharing Program rewards treatments that prevent disability and reduce long-term medical costs, shifting incentives from reactive "sickcare" to proactive health management. + +--- + +## **Implementation Considerations** + +### **1\. Establishing the Independent Assessment Body (IAB) and Independent Oversight Committee (IOC)** + +- **Composition:** + + - The IAB should consist of experts in healthcare economics, public health, pharmaceutical development, and data analysis to ensure accurate and unbiased assessments. + + - The IOC should include representatives from diverse stakeholders, including patient advocacy groups, healthcare providers, and industry experts. + +### **2\. Defining Clear Metrics for Cost Savings** + +- Develop standardized metrics and methodologies for calculating cost savings attributable to specific treatments, ensuring consistency and reliability in reward calculations. + +### **3\. Ensuring Adequate Funding for HIRF and RFSF** + +- **Detailed Budgeting:** + + - Clearly outline the funding requirements for both the Healthcare Innovation Reward Fund (HIRF) and the FDA Regulatory Support Fund (RFSF) to cover the elimination of user fees and support regulatory activities. + + +- **Congressional Appropriations:** + + - Secure consistent and sufficient funding through annual appropriations to prevent shortfalls. + +### **4\. Monitoring and Adjusting the FDA’s Funding Needs** + +- Implement regular assessments of the RFSF to ensure it meets the FDA’s regulatory needs effectively. + +- Allow for adjustments based on the evolving landscape of drug development and regulatory requirements. + +### **5\. Transparency and Accountability** + +- **Reporting Requirements:** + + - Mandate the FDA and IAB to publish annual reports detailing the use of funds, rewards distributed, and the impact of awarded treatments. + + +- **Oversight Mechanisms:** + + - Establish oversight committees or audit processes to ensure funds are used appropriately and effectively. + +### **6\. Stakeholder Engagement** + +- **Collaborative Approach:** + + - Engage with pharmaceutical manufacturers, healthcare providers, patient advocacy groups, and other stakeholders during the implementation phase to address challenges and optimize the Act’s provisions. + + +- **Feedback Loops:** + + - Create channels for continuous feedback to inform ongoing adjustments and improvements to the Act. + +### **7\. Long-Term Sustainability** + +- **Future-Proofing:** + + - Design the HIRF and RFSF to be adaptable to future changes in the pharmaceutical landscape, ensuring long-term sustainability. + + +- **Incentivizing Continued Innovation:** + + - Ensure that the elimination of user fees does not inadvertently reduce the incentive for innovation by maintaining other supportive measures within the Act. + +--- + +## **Final Recommendations** + +1. **Integrate Section 11 Seamlessly:** + + - Ensure that the Savings Sharing Program is harmoniously integrated with existing sections of the Act, maintaining coherence and facilitating smooth implementation. + + + +2. **Engage Stakeholders Early:** + + - Involve key stakeholders in the development and refinement of the Savings Sharing Program to ensure it meets diverse needs and garners broad support. + + + +3. **Pilot Programs:** + + - Consider implementing pilot programs to test the effectiveness of the Savings Sharing Program, allowing for data-driven adjustments before full-scale deployment. + + + +4. **Legislative Support:** + + - Garner bipartisan support by highlighting the mutual benefits of the Savings Sharing Program, including enhanced public health outcomes and economic savings, aligning the Act with public health and economic interests. + + + +5. **Maintain Flexibility:** + + - Design the Savings Sharing Program with built-in flexibility to adapt to future advancements in medical research, changes in healthcare economics, and shifts in pharmaceutical industry dynamics. + + +To effectively incentivize pharmaceutical companies to participate in the **Right to Trial Act of 2024** and make treatments available to patients through the new **Treatment Outcomes Database (TOD)**, it is essential to align their financial and strategic interests with public health objectives. By leveraging **Health Dividend Rewards** and restructuring the clinical trial funding model, we can create a compelling value proposition for pharmaceutical manufacturers without relying on grants. Below are detailed strategies to achieve this: + +## **1\. Health Savings Dividend Program** + +### **a. Overview** + +The **Health Dividend Rewards Program** is designed to reward pharmaceutical companies based on the measurable reduction in future healthcare costs resulting from their treatments' ability to prevent disabilities and improve patient outcomes. This performance-based incentive aligns pharma interests with public health goals by linking financial rewards to real-world effectiveness and cost savings. + +### **b. Mechanism** + +1. **Cost Savings Calculation:** + + - **Data Integration:** Utilize data from the **Treatment Outcomes Database (TOD)** to track the long-term health outcomes of patients using experimental treatments. + - **Savings Metrics:** Calculate savings based on reduced hospitalizations, decreased need for long-term care, lower disability benefits payouts, and other relevant healthcare cost reductions. + - **Independent Verification:** An **Independent Assessment Body (IAB)** verifies the accuracy of the cost savings attributed to each treatment. + + + +2. **Reward Allocation:** + + - **Percentage-Based Rewards:** Allocate a percentage of the verified cost savings to the pharmaceutical company responsible for the treatment. For example, a company might receive 15-20% of the total savings their treatment generates. + - **Caps and Floors:** Implement minimum and maximum reward thresholds to ensure fairness and fiscal responsibility. For instance, no single treatment’s reward may exceed 20% of the total verified cost savings. + + + +3. **Payment Schedule:** + + - **Annual Disbursements:** Rewards are distributed annually based on the previous year’s verified savings, providing predictable and timely incentives. + - **Performance Bonuses:** Additional bonuses for treatments that exceed predefined effectiveness and cost-saving benchmarks. + +### **c. Benefits** + +- **Financial Incentive:** Direct financial rewards based on the treatment’s real-world performance, encouraging companies to prioritize efficacy and cost-effectiveness. +- **Market Differentiation:** Treatments that generate higher cost savings can be marketed as more economically beneficial, enhancing their competitive edge. +- **Long-Term Partnership:** Fosters a collaborative relationship between the government and pharmaceutical companies, focused on sustainable healthcare improvements. + +### **d. Implementation Considerations** + +- **Transparent Criteria:** Clearly define the metrics and methodologies for calculating cost savings to ensure transparency and trust among stakeholders. +- **Robust Data Security:** Ensure that all data used for calculating rewards is securely handled and complies with privacy regulations to protect patient information. + +## **2\. Government-Funded Clinical Trials Beyond Phase 1** + +### **a. Overview** + +By shifting the financial burden of Phase 2 and Phase 3 clinical trials to the government, pharmaceutical companies can reduce their upfront costs, making it more attractive to invest in and develop new treatments. This approach not only accelerates the availability of promising therapies but also ensures rigorous evaluation of their safety and efficacy. + +### **b. Mechanism** + +1. **Government-Funded Trials:** + + - **Eligibility Criteria:** Treatments that have successfully completed Phase 1 trials and demonstrate significant potential in treating serious or life-threatening conditions qualify for government funding for Phase 2 and Phase 3 trials. + - **Funding Allocation:** The government allocates funds to cover the costs associated with these clinical trials, including patient recruitment, data collection, and regulatory compliance. + - **Collaborative Research:** Encourage partnerships between pharmaceutical companies and government research institutions to conduct these trials efficiently. + + + +2. **Shared Intellectual Property (IP) Rights:** + + - **IP Agreements:** Implement agreements that allow pharmaceutical companies to retain IP rights while the government funds the subsequent trial phases, ensuring companies can commercially benefit from successful treatments. + - **Revenue Sharing:** Structure agreements where the government receives a percentage of future revenues from successful treatments, aligning long-term financial interests. + + + +3. **Streamlined Approval Process:** + + - **Priority Review:** Provide expedited review processes for treatments funded by the government, reducing time-to-market for effective therapies. + - **Regulatory Support:** Offer additional regulatory guidance and support to ensure smooth and efficient trial progression. + +### **c. Benefits** + +- **Reduced Financial Risk:** Alleviates the high costs associated with late-stage clinical trials, encouraging more companies to develop innovative treatments. +- **Accelerated Availability:** Speeds up the introduction of effective treatments to the market, benefiting patients sooner. +- **Enhanced Quality:** Government oversight ensures that funded trials adhere to the highest standards of safety and efficacy, maintaining public trust. + +### **d. Implementation Considerations** + +- **Funding Stability:** Ensure consistent and adequate government funding for clinical trials to maintain confidence among pharmaceutical companies. +- **Transparent Selection Process:** Establish clear and objective criteria for selecting which treatments receive funding to prevent favoritism and ensure fairness. +- **Performance Monitoring:** Continuously monitor the outcomes of funded trials to assess effectiveness and make necessary adjustments to the program. + +## **3\. Integration with the Treatment Outcomes Database (TOD)** + +### **a. Overview** + +The **Treatment Outcomes Database (TOD)** serves as the backbone for both the Health Savings Dividend Program and the government-funded clinical trials. By centralizing data on treatment outcomes, the TOD enables accurate measurement of cost savings and treatment effectiveness. + +### **b. Mechanism** + +1. **Data Collection and Reporting:** + + - **Standardized Protocols:** Implement standardized data collection protocols to ensure consistency and reliability across all entries. + - **Real-Time Updates:** Enable real-time data reporting from healthcare providers and manufacturers to keep the database current. + + + +2. **Data Utilization:** + + - **Cost Savings Analysis:** Use TOD data to perform detailed analyses of how treatments impact long-term healthcare costs. + - **Outcome Tracking:** Monitor patient outcomes to identify successful treatments and areas needing improvement. + + + +3. **Accessibility and Transparency:** + + - **Open Access:** Provide access to de-identified data for researchers, policymakers, and the public to promote transparency and collaborative innovation. + - **Data Security:** Implement robust security measures to protect sensitive patient information and maintain trust in the system. + +### **c. Benefits** + +- **Comprehensive Insights:** Facilitates a deeper understanding of treatment impacts, driving informed decision-making and policy development. +- **Enhanced Accountability:** Ensures that pharmaceutical companies are held accountable for the real-world performance of their treatments. +- **Facilitated Innovation:** Encourages continuous improvement and innovation based on real-world data and feedback. + +## **4\. Summary of Incentive Structures** + +| Incentive Mechanism | Description | Key Benefits | +| :---- | :---- | :---- | +| **Health Dividend Rewards** | Financial rewards based on verified reductions in future healthcare costs due to treatment efficacy. | Aligns pharma incentives with public health goals, encourages cost-effective and effective treatments. | +| **Government-Funded Phase 2 & 3 Trials** | The government finances late-stage clinical trials, reducing pharma’s financial burden and accelerating treatment availability. | Lowers development costs for pharma, speeds up market entry, ensures high-quality trials. | +| **Shared IP and Revenue Sharing** | Agreements allowing pharma to retain IP rights with a share of future revenues to the government. | Ensures pharma can benefit commercially while contributing to public health savings. | +| **Priority Review and Regulatory Support** | Expedited regulatory processes and additional support for treatments funded by the government. | Reduces time-to-market, enhances regulatory efficiency, and provides clear guidance to pharma. | +| **Integration with TOD for Data-Driven Rewards** | Utilization of TOD data to accurately measure and verify cost savings and treatment effectiveness for rewards distribution. | Ensures transparency, accountability, and data-driven decision-making in rewards allocation. | + +## **5\. Implementation Strategy** + +### **a. Legislative Framework** + +Incorporate the Health Dividend Rewards and government-funded clinical trials into the **Right to Trial Act of 2024** by adding specific sections that outline the structure, eligibility, and operational guidelines for these programs. + +### **b. Stakeholder Collaboration** + +- **Pharmaceutical Companies:** Engage with pharma representatives early in the legislative process to ensure their concerns are addressed and to secure buy-in. +- **Healthcare Providers:** Collaborate with providers to streamline data reporting and utilization within the TOD. +- **Regulatory Bodies:** Work closely with the FDA to ensure regulatory support aligns with the new incentive structures. + +### **c. Communication and Transparency** + +- **Clear Messaging:** Communicate the mutual benefits of the programs to pharmaceutical companies, emphasizing cost savings, revenue opportunities, and enhanced market competitiveness. +- **Public Awareness:** Inform the public about increased access to treatments and the robust data-driven approach ensuring safety and efficacy. + +### **d. Monitoring and Evaluation** + +- **Continuous Assessment:** Regularly evaluate the effectiveness of the Health Dividend Rewards and government-funded trials in achieving desired outcomes. +- **Feedback Loops:** Establish mechanisms for ongoing feedback from pharmaceutical companies and other stakeholders to refine and improve the programs. + +## **6\. Potential Challenges and Mitigation Strategies** + +### **a. Funding Stability for Clinical Trials** + +- **Mitigation:** Secure multi-year funding commitments through legislative appropriations to ensure consistent support for clinical trials. + +### **b. Accurate Measurement of Cost Savings** + +- **Mitigation:** Develop robust methodologies and leverage advanced analytics within the TOD to ensure precise and reliable cost savings calculations. + +### **c. Protecting Pharmaceutical IP** + +- **Mitigation:** Clearly define IP rights and revenue-sharing terms in government-pharma agreements to protect commercial interests while enabling public health benefits. + +### **d. Ensuring High-Quality Data** + +- **Mitigation:** Implement stringent data quality standards and regular audits within the TOD to maintain the integrity and reliability of the collected data. + +## **Conclusion** + +By integrating **Health Dividend Rewards** and restructuring the clinical trial funding model to have the government finance Phase 2 and Phase 3 trials, the **Right to Trial Act of 2024** can effectively incentivize pharmaceutical companies to make experimental treatments available to patients. This approach leverages market mechanisms and performance-based incentives, aligning the financial interests of pharmaceutical manufacturers with the public health goals of increased accessibility, affordability, and innovation. By focusing on reducing future healthcare costs through avoiding disabilities and ensuring that the clinical trial process is financially supported, the Act not only encourages the development and availability of new treatments but also fosters a sustainable and collaborative healthcare ecosystem. + +--- + +**Note:** The success of these strategies hinges on meticulous legislative drafting, stakeholder collaboration, and ongoing monitoring to adapt to emerging challenges and ensure that the incentives remain effective and equitable. + +# Why this hasn't been done + +Implementing a program like the Health Savings Dividend might seem straightforward, but several real-world complexities have likely prevented it from being adopted on a large scale. Here are some of the primary barriers: + +1\. Complexities in Cost Attribution and Savings Verification + +Challenge: Accurately attributing long-term healthcare savings to specific treatments is challenging due to the many factors affecting a patient’s health (e.g., lifestyle, other medications, genetic factors). + +Solution in the Dividend Model: A global Treatment Outcomes Database (TOD) would address this by gathering and analyzing standardized outcome data, but building and maintaining such a database requires extensive coordination, funding, and ongoing commitment. + +2\. Incentive Misalignment in Current Healthcare Structures + +Challenge: The current healthcare system often prioritizes short-term profitability over long-term savings. Pharmaceutical companies, insurers, and providers may not be incentivized to develop or distribute affordable, preventative treatments if these don't provide immediate returns. + +Solution in the Dividend Model: By rewarding companies with a share of net healthcare savings, this model would realign incentives toward affordable treatments that offer long-term health benefits, although shifting entrenched business practices and financial incentives would still take time. + +3\. Complexity of Regulatory and Policy Change + +Challenge: Implementing systemic changes like the Health Savings Dividend would require regulatory updates and new legislation, which can be a lengthy process, especially given competing interests in the healthcare and pharmaceutical sectors. + +Solution in the Dividend Model: Clear legislation outlining dividend structures, funding for TOD development, and pilot programs could incrementally introduce this model. However, overcoming regulatory inertia would require political will and collaboration across sectors. + +4\. Pharmaceutical Revenue Models and Pricing Practices + +Challenge: Pharmaceutical companies rely on high prices to recover R\&D costs, especially in the U.S. where drug prices are significantly higher than in other countries. A model encouraging lower prices challenges this traditional revenue approach. + +Solution in the Dividend Model: By allowing companies to earn dividends based on the long-term healthcare savings their treatments generate, the model provides a lucrative alternative revenue stream, but it requires a shift in pricing strategies and financial forecasting that some companies may resist. + +5\. Data Infrastructure and Privacy Concerns + +Challenge: A robust, privacy-compliant data infrastructure like the TOD would require significant investment and rigorous data protection to safeguard patient information. Building such a system also requires buy-in from healthcare providers, insurers, and patients. + +Solution in the Dividend Model: Investment in secure, de-identified data protocols and clear privacy protections would be essential, and making this data-sharing model optional but incentivized could encourage gradual adoption. + +6\. Uncertainty in Predicting Long-Term Savings + +Challenge: Unlike traditional revenue models, long-term savings predictions can be uncertain, and companies may be wary of relying on dividend payouts tied to savings estimates rather than guaranteed sales revenue. + +Solution in the Dividend Model: Pilot programs, possibly government-backed, could provide a demonstration of the dividend model's reliability, helping to build trust and encourage industry participation. + +Why It’s Worth Exploring Now + +Despite these challenges, the Health Savings Dividend model could be increasingly feasible as data infrastructure improves and the need for cost-effective healthcare solutions grows. With advancements in data analytics, machine learning, and secure data-sharing protocols, we are closer than ever to being able to accurately track and reward long-term healthcare savings. + +In summary, while structural and practical barriers have likely prevented this kind of model from being adopted widely, recent advances in health data analytics and a shift toward value-based care could make it a viable solution to rising healthcare costs. Pilot programs or public-private partnerships could offer a path forward, demonstrating the model’s potential and building momentum for broader adoption.