From 64c919cefbedfd6432182e1bab0eab765f919150 Mon Sep 17 00:00:00 2001
From: FionaDmello <40391218+FionaDmello@users.noreply.github.com>
Date: Thu, 5 Dec 2024 15:50:48 +0100
Subject: [PATCH 01/37] new page for details created, routing set on click of
 record title

---
 src/app/[locale]/details/page.tsx             | 27 +++++++++++++++++++
 src/components/app/results/ListResults.tsx    |  8 +++++-
 .../app/results/ListResults/ResultItem.tsx    | 16 ++++++++---
 3 files changed, 46 insertions(+), 5 deletions(-)
 create mode 100644 src/app/[locale]/details/page.tsx

diff --git a/src/app/[locale]/details/page.tsx b/src/app/[locale]/details/page.tsx
new file mode 100644
index 0000000..fcb6ef2
--- /dev/null
+++ b/src/app/[locale]/details/page.tsx
@@ -0,0 +1,27 @@
+"use client";
+
+import { useSearchParams } from "next/navigation";
+import React, { Suspense } from "react";
+
+const DetailsComponent = () => {
+  const resultParams = useSearchParams();
+  const category = resultParams.get("category");
+  const searchText = resultParams.get("searchText") ?? undefined;
+  const detailsText = resultParams.get("detailsText") ?? undefined;
+
+  return (
+    <>
+      <div>{category}</div>
+      <div>{searchText}</div>
+      <div>{detailsText}</div>
+    </>
+  );
+};
+
+export default function Details() {
+  return (
+    <Suspense>
+      <DetailsComponent />
+    </Suspense>
+  );
+}
diff --git a/src/components/app/results/ListResults.tsx b/src/components/app/results/ListResults.tsx
index 824254d..5a5f38e 100644
--- a/src/components/app/results/ListResults.tsx
+++ b/src/components/app/results/ListResults.tsx
@@ -141,7 +141,13 @@ const ListResultsComponent = ({ activeCategory }: Props) => {
               <div className="flex flex-col py-5 xl:py-8">
                 {results.length ? (
                   results.map((item: ResultItemType) => (
-                    <ResultItem key={item.id} item={item} idx={item.id} />
+                    <ResultItem
+                      key={item.id}
+                      item={item}
+                      idx={item.id}
+                      activeCategory={activeCategory}
+                      searchText={searchText}
+                    />
                   ))
                 ) : (
                   <NoResults />
diff --git a/src/components/app/results/ListResults/ResultItem.tsx b/src/components/app/results/ListResults/ResultItem.tsx
index f097bd3..c3b5ec1 100644
--- a/src/components/app/results/ListResults/ResultItem.tsx
+++ b/src/components/app/results/ListResults/ResultItem.tsx
@@ -7,14 +7,17 @@ import ExternalLink from "@/components/ExternalLink";
 import Relationships from "@/components/app/results/ListResults/ResultItem/Relationships";
 import { Link } from "@/i18n";
 import ExternalLinkIcon from "@/resources/images/svg/ExternalLinkIcon";
-import type { ResultItem as ResultItemType } from "@/types/types";
+import RightArrowIcon from "@/resources/images/svg/RightArrowIcon";
+import type { Category, ResultItem as ResultItemType } from "@/types/types";
 
 type Props = {
   item: ResultItemType;
   idx: string;
+  searchText: string | undefined;
+  activeCategory: Category;
 };
 
-const ResultItem = ({ item, idx }: Props) => {
+const ResultItem = ({ item, idx, searchText, activeCategory }: Props) => {
   const t = useTranslations("ResultItem");
   const s = useTranslations("BackendIds");
   const descRef = useRef<HTMLParagraphElement>(null);
@@ -98,7 +101,10 @@ const ResultItem = ({ item, idx }: Props) => {
       key={idx}
       className="my-2 space-y-2 rounded-xl border-2 border-primary-helmholtz-hellblau/20 px-5 py-5 shadow-lg shadow-secondary-helmholtz-highlightblau bg-white"
     >
-      <div className="inline-flex align-middle items-center pb-2">
+      <Link
+        className="inline-flex align-middle items-center pb-2 text-primary-helmholtz-dunkelblau h-5 hover:transition-all hover:translate-x-3"
+        href={`/details?category=${activeCategory.id}${searchText ? `&searchText=${searchText}` : ``}&detailsText=${item.name}`}
+      >
         {titleIconHref ? (
           <span className="mr-1">
             <Image
@@ -113,7 +119,9 @@ const ResultItem = ({ item, idx }: Props) => {
         <div className="font-semibold" rel="noreferrer">
           {item.name}
         </div>
-      </div>
+        <RightArrowIcon />
+      </Link>
+
       <div className="text-sm">
         <span className="font-semibold">{s("txt_identifier")}: </span>
         {displayLinkItem(item.txt_identifier ?? item.id)}
-- 
GitLab


From 9d4b6f1c456f3b21b8ab251a4d3096b99de9fff7 Mon Sep 17 00:00:00 2001
From: FionaDmello <40391218+FionaDmello@users.noreply.github.com>
Date: Thu, 12 Dec 2024 19:33:03 +0100
Subject: [PATCH 02/37] made details a sub-result and implemented simple
 reducer and context based state handling (not working)

---
 src/app/[locale]/details/page.tsx             | 27 -------------
 src/app/[locale]/results/details/page.tsx     | 38 +++++++++++++++++++
 .../app/results/Details/DetailsItemCard.tsx   | 33 ++++++++++++++++
 .../app/results/ListResults/ResultItem.tsx    | 33 +++++++++++++---
 src/context/detailsItem.tsx                   | 22 +++++++++++
 5 files changed, 120 insertions(+), 33 deletions(-)
 delete mode 100644 src/app/[locale]/details/page.tsx
 create mode 100644 src/app/[locale]/results/details/page.tsx
 create mode 100644 src/components/app/results/Details/DetailsItemCard.tsx
 create mode 100644 src/context/detailsItem.tsx

diff --git a/src/app/[locale]/details/page.tsx b/src/app/[locale]/details/page.tsx
deleted file mode 100644
index fcb6ef2..0000000
--- a/src/app/[locale]/details/page.tsx
+++ /dev/null
@@ -1,27 +0,0 @@
-"use client";
-
-import { useSearchParams } from "next/navigation";
-import React, { Suspense } from "react";
-
-const DetailsComponent = () => {
-  const resultParams = useSearchParams();
-  const category = resultParams.get("category");
-  const searchText = resultParams.get("searchText") ?? undefined;
-  const detailsText = resultParams.get("detailsText") ?? undefined;
-
-  return (
-    <>
-      <div>{category}</div>
-      <div>{searchText}</div>
-      <div>{detailsText}</div>
-    </>
-  );
-};
-
-export default function Details() {
-  return (
-    <Suspense>
-      <DetailsComponent />
-    </Suspense>
-  );
-}
diff --git a/src/app/[locale]/results/details/page.tsx b/src/app/[locale]/results/details/page.tsx
new file mode 100644
index 0000000..c3f2ab5
--- /dev/null
+++ b/src/app/[locale]/results/details/page.tsx
@@ -0,0 +1,38 @@
+"use client";
+
+import React, { Suspense, useReducer } from "react";
+
+import BackBar from "@/components/app/results/BackBar";
+import DetailsItemCard from "@/components/app/results/Details/DetailsItemCard";
+import {
+  detailsReducer,
+  DetailsItemContext,
+  DetailsItemDispatchContext,
+} from "@/context/detailsItem";
+
+const DetailsComponent = () => {
+  // this component needs and uses the detailsItemContext
+  const [detailsItem, dispatch] = useReducer(detailsReducer, {});
+
+  //const resultParams = useSearchParams();
+  // const category = resultParams.get("category") as string;
+  // const searchText = resultParams.get("searchText") ?? undefined;
+  // const detailsText = resultParams.get("detailsText") ?? undefined;
+
+  return (
+    <DetailsItemContext.Provider value={detailsItem}>
+      <DetailsItemDispatchContext.Provider value={dispatch}>
+        <BackBar />
+        <DetailsItemCard />
+      </DetailsItemDispatchContext.Provider>
+    </DetailsItemContext.Provider>
+  );
+};
+
+export default function Details() {
+  return (
+    <Suspense>
+      <DetailsComponent />
+    </Suspense>
+  );
+}
diff --git a/src/components/app/results/Details/DetailsItemCard.tsx b/src/components/app/results/Details/DetailsItemCard.tsx
new file mode 100644
index 0000000..99cd257
--- /dev/null
+++ b/src/components/app/results/Details/DetailsItemCard.tsx
@@ -0,0 +1,33 @@
+"use client";
+import React, { useContext, useState, useEffect } from "react";
+
+import { DetailsItemContext } from "@/context/detailsItem";
+import { ResultItem } from "@/types/types";
+
+const DetailsItemCard = () => {
+  const detailsItemFromReducer = useContext<ResultItem | object>(DetailsItemContext);
+  const [detailsItem, setDetailsItem] = useState<ResultItem | null>(null);
+
+  useEffect(() => {
+    console.log("In details card:", detailsItemFromReducer);
+    const isResultItem = (obj: object | ResultItem): obj is ResultItem =>
+      Object.keys(detailsItemFromReducer).length > 0;
+
+    if (isResultItem(detailsItemFromReducer)) {
+      setDetailsItem(detailsItemFromReducer);
+    }
+  }, [detailsItemFromReducer]);
+
+  return (
+    <>
+      {detailsItem ? (
+        <>
+          <div>{detailsItem.name}</div>
+          <div>{detailsItem.id}</div>
+        </>
+      ) : null}
+    </>
+  );
+};
+
+export default DetailsItemCard;
diff --git a/src/components/app/results/ListResults/ResultItem.tsx b/src/components/app/results/ListResults/ResultItem.tsx
index c3b5ec1..fa6ca19 100644
--- a/src/components/app/results/ListResults/ResultItem.tsx
+++ b/src/components/app/results/ListResults/ResultItem.tsx
@@ -1,10 +1,14 @@
+"use client";
+
 import Image from "next/image";
+import { useRouter } from "next/navigation";
 import { useTranslations } from "next-intl";
-import { useEffect, useRef, useState } from "react";
+import { useEffect, useRef, useState, useReducer } from "react";
 
 import { INSTITUTE_ROR_LOGOS } from "@/app/api/config/config";
 import ExternalLink from "@/components/ExternalLink";
 import Relationships from "@/components/app/results/ListResults/ResultItem/Relationships";
+import { detailsReducer } from "@/context/detailsItem";
 import { Link } from "@/i18n";
 import ExternalLinkIcon from "@/resources/images/svg/ExternalLinkIcon";
 import RightArrowIcon from "@/resources/images/svg/RightArrowIcon";
@@ -13,13 +17,18 @@ import type { Category, ResultItem as ResultItemType } from "@/types/types";
 type Props = {
   item: ResultItemType;
   idx: string;
-  searchText: string | undefined;
-  activeCategory: Category;
+  searchText?: string;
+  activeCategory?: Category;
 };
 
 const ResultItem = ({ item, idx, searchText, activeCategory }: Props) => {
+  // create a item context
+  // const detailsItemContext =  createContext(item)
+  const [detailsItem, dispatch] = useReducer(detailsReducer, {});
+  const router = useRouter();
   const t = useTranslations("ResultItem");
   const s = useTranslations("BackendIds");
+
   const descRef = useRef<HTMLParagraphElement>(null);
   const [descShowMore, setDescShowMore] = useState(false);
   const [descShowReadMore, setDescShowReadMore] = useState(false);
@@ -96,14 +105,26 @@ const ResultItem = ({ item, idx, searchText, activeCategory }: Props) => {
     return filteredArr.length > 0 ? <Relationships filteredArr={filteredArr} type={type} /> : null;
   };
 
+  const handleOnClick = () => {
+    console.log("current detailsItem:", detailsItem);
+    // action object
+    dispatch({
+      type: "setDetailsRequested",
+      item,
+    });
+    router.push(
+      `/results/details?category=${activeCategory?.id}${searchText ? `&searchText=${searchText}` : ``}&detailsText=${item.id}`
+    );
+  };
+
   return (
     <div
       key={idx}
       className="my-2 space-y-2 rounded-xl border-2 border-primary-helmholtz-hellblau/20 px-5 py-5 shadow-lg shadow-secondary-helmholtz-highlightblau bg-white"
     >
-      <Link
+      <button
         className="inline-flex align-middle items-center pb-2 text-primary-helmholtz-dunkelblau h-5 hover:transition-all hover:translate-x-3"
-        href={`/details?category=${activeCategory.id}${searchText ? `&searchText=${searchText}` : ``}&detailsText=${item.name}`}
+        onClick={handleOnClick}
       >
         {titleIconHref ? (
           <span className="mr-1">
@@ -120,7 +141,7 @@ const ResultItem = ({ item, idx, searchText, activeCategory }: Props) => {
           {item.name}
         </div>
         <RightArrowIcon />
-      </Link>
+      </button>
 
       <div className="text-sm">
         <span className="font-semibold">{s("txt_identifier")}: </span>
diff --git a/src/context/detailsItem.tsx b/src/context/detailsItem.tsx
new file mode 100644
index 0000000..d769b22
--- /dev/null
+++ b/src/context/detailsItem.tsx
@@ -0,0 +1,22 @@
+"use client";
+
+import { createContext } from "react";
+
+import { ResultItem } from "@/types/types";
+
+export const detailsReducer = (
+  detailsItem: ResultItem | object,
+  action: { type: "setDetailsRequested" | "getDetailsRequested"; item?: ResultItem }
+) => {
+  switch (action.type) {
+    case "setDetailsRequested":
+      return { ...action.item };
+    case "getDetailsRequested":
+      return detailsItem !== null ? { ...detailsItem } : {};
+    default:
+      throw Error("Unknown action:", action.type);
+  }
+};
+
+export const DetailsItemContext = createContext<ResultItem | object>({});
+export const DetailsItemDispatchContext = createContext<ResultItem | object | null>(null);
-- 
GitLab


From 406565c308bea3bb23d9dc78a2e88b0b0b4bb829 Mon Sep 17 00:00:00 2001
From: FionaDmello <40391218+FionaDmello@users.noreply.github.com>
Date: Fri, 13 Dec 2024 12:54:08 +0100
Subject: [PATCH 03/37] used jotai to share state on navigating to new view,
 shows selected result details

---
 package-lock.json                             |   27 +-
 package.json                                  |    1 +
 src/app/[locale]/results/details/page.tsx     |   34 +-
 .../app/results/Details/DetailsItemCard.tsx   |   32 +-
 .../app/results/ListResults/ResultItem.tsx    |   30 +-
 src/context/detailsItem.tsx                   |   22 -
 src/state/atoms.tsx                           |    5 +
 yarn.lock                                     | 1728 ++++++++---------
 8 files changed, 912 insertions(+), 967 deletions(-)
 delete mode 100644 src/context/detailsItem.tsx
 create mode 100644 src/state/atoms.tsx

diff --git a/package-lock.json b/package-lock.json
index 3ac9a93..2ea095f 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -11,6 +11,7 @@
       "dependencies": {
         "@headlessui/react": "^1.7.18",
         "@headlessui/tailwindcss": "^0.1.3",
+        "jotai": "^2.10.3",
         "next": "14.1.0",
         "next-intl": "^3.19.1",
         "react": "^18",
@@ -2287,7 +2288,7 @@
     },
     "node_modules/@types/prop-types": {
       "version": "15.7.12",
-      "dev": true,
+      "devOptional": true,
       "license": "MIT"
     },
     "node_modules/@types/qs": {
@@ -2302,7 +2303,7 @@
     },
     "node_modules/@types/react": {
       "version": "18.3.2",
-      "dev": true,
+      "devOptional": true,
       "license": "MIT",
       "dependencies": {
         "@types/prop-types": "*",
@@ -3445,7 +3446,7 @@
     },
     "node_modules/csstype": {
       "version": "3.1.3",
-      "dev": true,
+      "devOptional": true,
       "license": "MIT"
     },
     "node_modules/damerau-levenshtein": {
@@ -6369,6 +6370,26 @@
         "jiti": "bin/jiti.js"
       }
     },
+    "node_modules/jotai": {
+      "version": "2.10.3",
+      "resolved": "https://registry.npmjs.org/jotai/-/jotai-2.10.3.tgz",
+      "integrity": "sha512-Nnf4IwrLhNfuz2JOQLI0V/AgwcpxvVy8Ec8PidIIDeRi4KCFpwTFIpHAAcU+yCgnw/oASYElq9UY0YdUUegsSA==",
+      "engines": {
+        "node": ">=12.20.0"
+      },
+      "peerDependencies": {
+        "@types/react": ">=17.0.0",
+        "react": ">=17.0.0"
+      },
+      "peerDependenciesMeta": {
+        "@types/react": {
+          "optional": true
+        },
+        "react": {
+          "optional": true
+        }
+      }
+    },
     "node_modules/js-tokens": {
       "version": "4.0.0",
       "license": "MIT"
diff --git a/package.json b/package.json
index efac38f..37f7a7a 100644
--- a/package.json
+++ b/package.json
@@ -28,6 +28,7 @@
   "dependencies": {
     "@headlessui/react": "^1.7.18",
     "@headlessui/tailwindcss": "^0.1.3",
+    "jotai": "^2.10.3",
     "next": "14.1.0",
     "next-intl": "^3.19.1",
     "react": "^18",
diff --git a/src/app/[locale]/results/details/page.tsx b/src/app/[locale]/results/details/page.tsx
index c3f2ab5..a2f90dd 100644
--- a/src/app/[locale]/results/details/page.tsx
+++ b/src/app/[locale]/results/details/page.tsx
@@ -1,31 +1,27 @@
 "use client";
 
-import React, { Suspense, useReducer } from "react";
+import { useSearchParams } from "next/navigation";
+import React, { Suspense } from "react";
 
 import BackBar from "@/components/app/results/BackBar";
 import DetailsItemCard from "@/components/app/results/Details/DetailsItemCard";
-import {
-  detailsReducer,
-  DetailsItemContext,
-  DetailsItemDispatchContext,
-} from "@/context/detailsItem";
 
-const DetailsComponent = () => {
-  // this component needs and uses the detailsItemContext
-  const [detailsItem, dispatch] = useReducer(detailsReducer, {});
+//import { ResultItem } from "@/types/types";
 
-  //const resultParams = useSearchParams();
-  // const category = resultParams.get("category") as string;
-  // const searchText = resultParams.get("searchText") ?? undefined;
-  // const detailsText = resultParams.get("detailsText") ?? undefined;
+const DetailsComponent = () => {
+  const searchParams = useSearchParams();
+  const activeCategory = searchParams.get("category");
+  const searchText = searchParams.get("searchText") ?? undefined;
+  const detailsText = searchParams.get("detailsText") ?? undefined;
 
   return (
-    <DetailsItemContext.Provider value={detailsItem}>
-      <DetailsItemDispatchContext.Provider value={dispatch}>
-        <BackBar />
-        <DetailsItemCard />
-      </DetailsItemDispatchContext.Provider>
-    </DetailsItemContext.Provider>
+    <div className="flex flex-col md:px-10 lg:px-16 py-5 mb-8 bg-whitesmoke h-full">
+      <BackBar />
+      <DetailsItemCard />
+      <div>{activeCategory}</div>
+      <div>{searchText}</div>
+      <div>{detailsText}</div>
+    </div>
   );
 };
 
diff --git a/src/components/app/results/Details/DetailsItemCard.tsx b/src/components/app/results/Details/DetailsItemCard.tsx
index 99cd257..c5f4ca8 100644
--- a/src/components/app/results/Details/DetailsItemCard.tsx
+++ b/src/components/app/results/Details/DetailsItemCard.tsx
@@ -1,30 +1,30 @@
 "use client";
-import React, { useContext, useState, useEffect } from "react";
+import { useAtomValue } from "jotai";
+import React, { useState, useEffect } from "react";
 
-import { DetailsItemContext } from "@/context/detailsItem";
-import { ResultItem } from "@/types/types";
+import { detailsItemAtom } from "@/state/atoms";
+import { ResultItem as ResultItemType } from "@/types/types";
+
+import ResultItem from "../ListResults/ResultItem";
 
 const DetailsItemCard = () => {
-  const detailsItemFromReducer = useContext<ResultItem | object>(DetailsItemContext);
-  const [detailsItem, setDetailsItem] = useState<ResultItem | null>(null);
+  const detailsItemAtomValue: ResultItemType | undefined = useAtomValue(detailsItemAtom);
+  const [detailsItem, setDetailsItem] = useState<ResultItemType | undefined>();
 
   useEffect(() => {
-    console.log("In details card:", detailsItemFromReducer);
-    const isResultItem = (obj: object | ResultItem): obj is ResultItem =>
-      Object.keys(detailsItemFromReducer).length > 0;
+    const isResultItem = (
+      detailsItemAtomValue?: ResultItemType
+    ): detailsItemAtomValue is ResultItemType => detailsItemAtomValue !== undefined;
 
-    if (isResultItem(detailsItemFromReducer)) {
-      setDetailsItem(detailsItemFromReducer);
-    }
-  }, [detailsItemFromReducer]);
+    if (isResultItem(detailsItemAtomValue)) setDetailsItem(detailsItemAtomValue);
+  }, [detailsItemAtomValue]);
 
   return (
     <>
       {detailsItem ? (
-        <>
-          <div>{detailsItem.name}</div>
-          <div>{detailsItem.id}</div>
-        </>
+        <div className="p-4">
+          <ResultItem item={detailsItem} idx={detailsItem.id} inDetailsPage />
+        </div>
       ) : null}
     </>
   );
diff --git a/src/components/app/results/ListResults/ResultItem.tsx b/src/components/app/results/ListResults/ResultItem.tsx
index fa6ca19..6316785 100644
--- a/src/components/app/results/ListResults/ResultItem.tsx
+++ b/src/components/app/results/ListResults/ResultItem.tsx
@@ -1,17 +1,18 @@
 "use client";
 
+import { useSetAtom } from "jotai";
 import Image from "next/image";
 import { useRouter } from "next/navigation";
 import { useTranslations } from "next-intl";
-import { useEffect, useRef, useState, useReducer } from "react";
+import { useEffect, useRef, useState } from "react";
 
 import { INSTITUTE_ROR_LOGOS } from "@/app/api/config/config";
 import ExternalLink from "@/components/ExternalLink";
 import Relationships from "@/components/app/results/ListResults/ResultItem/Relationships";
-import { detailsReducer } from "@/context/detailsItem";
 import { Link } from "@/i18n";
 import ExternalLinkIcon from "@/resources/images/svg/ExternalLinkIcon";
 import RightArrowIcon from "@/resources/images/svg/RightArrowIcon";
+import { detailsItemAtom } from "@/state/atoms";
 import type { Category, ResultItem as ResultItemType } from "@/types/types";
 
 type Props = {
@@ -19,12 +20,11 @@ type Props = {
   idx: string;
   searchText?: string;
   activeCategory?: Category;
+  inDetailsPage?: boolean;
 };
 
-const ResultItem = ({ item, idx, searchText, activeCategory }: Props) => {
-  // create a item context
-  // const detailsItemContext =  createContext(item)
-  const [detailsItem, dispatch] = useReducer(detailsReducer, {});
+const ResultItem = ({ item, idx, searchText, activeCategory, inDetailsPage }: Props) => {
+  const setDetailsItem = useSetAtom(detailsItemAtom);
   const router = useRouter();
   const t = useTranslations("ResultItem");
   const s = useTranslations("BackendIds");
@@ -105,13 +105,8 @@ const ResultItem = ({ item, idx, searchText, activeCategory }: Props) => {
     return filteredArr.length > 0 ? <Relationships filteredArr={filteredArr} type={type} /> : null;
   };
 
-  const handleOnClick = () => {
-    console.log("current detailsItem:", detailsItem);
-    // action object
-    dispatch({
-      type: "setDetailsRequested",
-      item,
-    });
+  const handleDetailSearch = () => {
+    setDetailsItem(() => item);
     router.push(
       `/results/details?category=${activeCategory?.id}${searchText ? `&searchText=${searchText}` : ``}&detailsText=${item.id}`
     );
@@ -123,8 +118,9 @@ const ResultItem = ({ item, idx, searchText, activeCategory }: Props) => {
       className="my-2 space-y-2 rounded-xl border-2 border-primary-helmholtz-hellblau/20 px-5 py-5 shadow-lg shadow-secondary-helmholtz-highlightblau bg-white"
     >
       <button
-        className="inline-flex align-middle items-center pb-2 text-primary-helmholtz-dunkelblau h-5 hover:transition-all hover:translate-x-3"
-        onClick={handleOnClick}
+        className={`${inDetailsPage ? "" : "hover:transition-all hover:translate-x-3"} inline-flex align-middle items-center pb-2 text-primary-helmholtz-dunkelblau h-5`}
+        onClick={handleDetailSearch}
+        disabled={inDetailsPage}
       >
         {titleIconHref ? (
           <span className="mr-1">
@@ -140,7 +136,7 @@ const ResultItem = ({ item, idx, searchText, activeCategory }: Props) => {
         <div className="font-semibold" rel="noreferrer">
           {item.name}
         </div>
-        <RightArrowIcon />
+        {inDetailsPage ?? <RightArrowIcon />}
       </button>
 
       <div className="text-sm">
@@ -252,7 +248,7 @@ const ResultItem = ({ item, idx, searchText, activeCategory }: Props) => {
           </p>
           {descShowReadMore ? (
             <button
-              className="py-0.75  float-right rounded-full border-[1px] border-secondary-helmholtz-mint px-2 text-xs hover:border-primary-helmholtz-hellblau"
+              className="py-0.75 float-right rounded-full border-[1px] border-secondary-helmholtz-mint px-2 text-xs hover:border-primary-helmholtz-hellblau"
               onClick={() => setDescShowMore(!descShowMore)}
             >
               {descShowMore ? t("show_less") : t("show_more")}
diff --git a/src/context/detailsItem.tsx b/src/context/detailsItem.tsx
deleted file mode 100644
index d769b22..0000000
--- a/src/context/detailsItem.tsx
+++ /dev/null
@@ -1,22 +0,0 @@
-"use client";
-
-import { createContext } from "react";
-
-import { ResultItem } from "@/types/types";
-
-export const detailsReducer = (
-  detailsItem: ResultItem | object,
-  action: { type: "setDetailsRequested" | "getDetailsRequested"; item?: ResultItem }
-) => {
-  switch (action.type) {
-    case "setDetailsRequested":
-      return { ...action.item };
-    case "getDetailsRequested":
-      return detailsItem !== null ? { ...detailsItem } : {};
-    default:
-      throw Error("Unknown action:", action.type);
-  }
-};
-
-export const DetailsItemContext = createContext<ResultItem | object>({});
-export const DetailsItemDispatchContext = createContext<ResultItem | object | null>(null);
diff --git a/src/state/atoms.tsx b/src/state/atoms.tsx
new file mode 100644
index 0000000..6aade35
--- /dev/null
+++ b/src/state/atoms.tsx
@@ -0,0 +1,5 @@
+import { atom } from "jotai";
+
+import { ResultItem } from "@/types/types";
+
+export const detailsItemAtom = atom<ResultItem>();
diff --git a/yarn.lock b/yarn.lock
index 0c14da5..00f1331 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -6,9 +6,9 @@ __metadata:
   cacheKey: 10c0
 
 "@adobe/css-tools@npm:^4.4.0":
-  version: 4.4.0
-  resolution: "@adobe/css-tools@npm:4.4.0"
-  checksum: 10c0/d65ddc719389bf469097df80fb16a8af48a973dea4b57565789d70ac8e7ab4987e6dc0095da3ed5dc16c1b6f8960214a7590312eeda8abd543d91fd0f59e6c94
+  version: 4.4.1
+  resolution: "@adobe/css-tools@npm:4.4.1"
+  checksum: 10c0/1a68ad9af490f45fce7b6e50dd2d8ac0c546d74431649c0d42ee4ceb1a9fa057fae0a7ef1e148effa12d84ec00ed71869ebfe0fb1dcdcc80bfcb6048c12abcc0
   languageName: node
   linkType: hard
 
@@ -29,163 +29,142 @@ __metadata:
   languageName: node
   linkType: hard
 
-"@babel/code-frame@npm:^7.0.0, @babel/code-frame@npm:^7.10.4, @babel/code-frame@npm:^7.12.13, @babel/code-frame@npm:^7.24.7":
-  version: 7.24.7
-  resolution: "@babel/code-frame@npm:7.24.7"
+"@babel/code-frame@npm:^7.0.0, @babel/code-frame@npm:^7.10.4, @babel/code-frame@npm:^7.12.13, @babel/code-frame@npm:^7.25.9, @babel/code-frame@npm:^7.26.0, @babel/code-frame@npm:^7.26.2":
+  version: 7.26.2
+  resolution: "@babel/code-frame@npm:7.26.2"
   dependencies:
-    "@babel/highlight": "npm:^7.24.7"
+    "@babel/helper-validator-identifier": "npm:^7.25.9"
+    js-tokens: "npm:^4.0.0"
     picocolors: "npm:^1.0.0"
-  checksum: 10c0/ab0af539473a9f5aeaac7047e377cb4f4edd255a81d84a76058595f8540784cc3fbe8acf73f1e073981104562490aabfb23008cd66dc677a456a4ed5390fdde6
+  checksum: 10c0/7d79621a6849183c415486af99b1a20b84737e8c11cd55b6544f688c51ce1fd710e6d869c3dd21232023da272a79b91efb3e83b5bc2dc65c1187c5fcd1b72ea8
   languageName: node
   linkType: hard
 
-"@babel/compat-data@npm:^7.25.2":
-  version: 7.25.4
-  resolution: "@babel/compat-data@npm:7.25.4"
-  checksum: 10c0/50d79734d584a28c69d6f5b99adfaa064d0f41609a378aef04eb06accc5b44f8520e68549eba3a082478180957b7d5783f1bfb1672e4ae8574e797ce8bae79fa
+"@babel/compat-data@npm:^7.25.9":
+  version: 7.26.3
+  resolution: "@babel/compat-data@npm:7.26.3"
+  checksum: 10c0/d63e71845c34dfad8d7ff8c15b562e620dbf60e68e3abfa35681d24d612594e8e5ec9790d831a287ecd79ce00f48e7ffddc85c5ce94af7242d45917b9c1a5f90
   languageName: node
   linkType: hard
 
 "@babel/core@npm:^7.11.6, @babel/core@npm:^7.12.3, @babel/core@npm:^7.23.9":
-  version: 7.25.2
-  resolution: "@babel/core@npm:7.25.2"
+  version: 7.26.0
+  resolution: "@babel/core@npm:7.26.0"
   dependencies:
     "@ampproject/remapping": "npm:^2.2.0"
-    "@babel/code-frame": "npm:^7.24.7"
-    "@babel/generator": "npm:^7.25.0"
-    "@babel/helper-compilation-targets": "npm:^7.25.2"
-    "@babel/helper-module-transforms": "npm:^7.25.2"
-    "@babel/helpers": "npm:^7.25.0"
-    "@babel/parser": "npm:^7.25.0"
-    "@babel/template": "npm:^7.25.0"
-    "@babel/traverse": "npm:^7.25.2"
-    "@babel/types": "npm:^7.25.2"
+    "@babel/code-frame": "npm:^7.26.0"
+    "@babel/generator": "npm:^7.26.0"
+    "@babel/helper-compilation-targets": "npm:^7.25.9"
+    "@babel/helper-module-transforms": "npm:^7.26.0"
+    "@babel/helpers": "npm:^7.26.0"
+    "@babel/parser": "npm:^7.26.0"
+    "@babel/template": "npm:^7.25.9"
+    "@babel/traverse": "npm:^7.25.9"
+    "@babel/types": "npm:^7.26.0"
     convert-source-map: "npm:^2.0.0"
     debug: "npm:^4.1.0"
     gensync: "npm:^1.0.0-beta.2"
     json5: "npm:^2.2.3"
     semver: "npm:^6.3.1"
-  checksum: 10c0/a425fa40e73cb72b6464063a57c478bc2de9dbcc19c280f1b55a3d88b35d572e87e8594e7d7b4880331addb6faef641bbeb701b91b41b8806cd4deae5d74f401
+  checksum: 10c0/91de73a7ff5c4049fbc747930aa039300e4d2670c2a91f5aa622f1b4868600fc89b01b6278385fbcd46f9574186fa3d9b376a9e7538e50f8d118ec13cfbcb63e
   languageName: node
   linkType: hard
 
-"@babel/generator@npm:^7.25.0, @babel/generator@npm:^7.25.6, @babel/generator@npm:^7.7.2":
-  version: 7.25.6
-  resolution: "@babel/generator@npm:7.25.6"
+"@babel/generator@npm:^7.26.0, @babel/generator@npm:^7.26.3, @babel/generator@npm:^7.7.2":
+  version: 7.26.3
+  resolution: "@babel/generator@npm:7.26.3"
   dependencies:
-    "@babel/types": "npm:^7.25.6"
+    "@babel/parser": "npm:^7.26.3"
+    "@babel/types": "npm:^7.26.3"
     "@jridgewell/gen-mapping": "npm:^0.3.5"
     "@jridgewell/trace-mapping": "npm:^0.3.25"
-    jsesc: "npm:^2.5.1"
-  checksum: 10c0/f89282cce4ddc63654470b98086994d219407d025497f483eb03ba102086e11e2b685b27122f6ff2e1d93b5b5fa0c3a6b7e974fbf2e4a75b685041a746a4291e
+    jsesc: "npm:^3.0.2"
+  checksum: 10c0/54f260558e3e4ec8942da3cde607c35349bb983c3a7c5121243f96893fba3e8cd62e1f1773b2051f936f8c8a10987b758d5c7d76dbf2784e95bb63ab4843fa00
   languageName: node
   linkType: hard
 
-"@babel/helper-compilation-targets@npm:^7.25.2":
-  version: 7.25.2
-  resolution: "@babel/helper-compilation-targets@npm:7.25.2"
+"@babel/helper-compilation-targets@npm:^7.25.9":
+  version: 7.25.9
+  resolution: "@babel/helper-compilation-targets@npm:7.25.9"
   dependencies:
-    "@babel/compat-data": "npm:^7.25.2"
-    "@babel/helper-validator-option": "npm:^7.24.8"
-    browserslist: "npm:^4.23.1"
+    "@babel/compat-data": "npm:^7.25.9"
+    "@babel/helper-validator-option": "npm:^7.25.9"
+    browserslist: "npm:^4.24.0"
     lru-cache: "npm:^5.1.1"
     semver: "npm:^6.3.1"
-  checksum: 10c0/de10e986b5322c9f807350467dc845ec59df9e596a5926a3b5edbb4710d8e3b8009d4396690e70b88c3844fe8ec4042d61436dd4b92d1f5f75655cf43ab07e99
+  checksum: 10c0/a6b26a1e4222e69ef8e62ee19374308f060b007828bc11c65025ecc9e814aba21ff2175d6d3f8bf53c863edd728ee8f94ba7870f8f90a37d39552ad9933a8aaa
   languageName: node
   linkType: hard
 
-"@babel/helper-module-imports@npm:^7.24.7":
-  version: 7.24.7
-  resolution: "@babel/helper-module-imports@npm:7.24.7"
+"@babel/helper-module-imports@npm:^7.25.9":
+  version: 7.25.9
+  resolution: "@babel/helper-module-imports@npm:7.25.9"
   dependencies:
-    "@babel/traverse": "npm:^7.24.7"
-    "@babel/types": "npm:^7.24.7"
-  checksum: 10c0/97c57db6c3eeaea31564286e328a9fb52b0313c5cfcc7eee4bc226aebcf0418ea5b6fe78673c0e4a774512ec6c86e309d0f326e99d2b37bfc16a25a032498af0
+    "@babel/traverse": "npm:^7.25.9"
+    "@babel/types": "npm:^7.25.9"
+  checksum: 10c0/078d3c2b45d1f97ffe6bb47f61961be4785d2342a4156d8b42c92ee4e1b7b9e365655dd6cb25329e8fe1a675c91eeac7e3d04f0c518b67e417e29d6e27b6aa70
   languageName: node
   linkType: hard
 
-"@babel/helper-module-transforms@npm:^7.25.2":
-  version: 7.25.2
-  resolution: "@babel/helper-module-transforms@npm:7.25.2"
+"@babel/helper-module-transforms@npm:^7.26.0":
+  version: 7.26.0
+  resolution: "@babel/helper-module-transforms@npm:7.26.0"
   dependencies:
-    "@babel/helper-module-imports": "npm:^7.24.7"
-    "@babel/helper-simple-access": "npm:^7.24.7"
-    "@babel/helper-validator-identifier": "npm:^7.24.7"
-    "@babel/traverse": "npm:^7.25.2"
+    "@babel/helper-module-imports": "npm:^7.25.9"
+    "@babel/helper-validator-identifier": "npm:^7.25.9"
+    "@babel/traverse": "npm:^7.25.9"
   peerDependencies:
     "@babel/core": ^7.0.0
-  checksum: 10c0/adaa15970ace0aee5934b5a633789b5795b6229c6a9cf3e09a7e80aa33e478675eee807006a862aa9aa517935d81f88a6db8a9f5936e3a2a40ec75f8062bc329
+  checksum: 10c0/ee111b68a5933481d76633dad9cdab30c41df4479f0e5e1cc4756dc9447c1afd2c9473b5ba006362e35b17f4ebddd5fca090233bef8dfc84dca9d9127e56ec3a
   languageName: node
   linkType: hard
 
-"@babel/helper-plugin-utils@npm:^7.0.0, @babel/helper-plugin-utils@npm:^7.10.4, @babel/helper-plugin-utils@npm:^7.12.13, @babel/helper-plugin-utils@npm:^7.14.5, @babel/helper-plugin-utils@npm:^7.24.7, @babel/helper-plugin-utils@npm:^7.24.8, @babel/helper-plugin-utils@npm:^7.8.0":
-  version: 7.24.8
-  resolution: "@babel/helper-plugin-utils@npm:7.24.8"
-  checksum: 10c0/0376037f94a3bfe6b820a39f81220ac04f243eaee7193774b983e956c1750883ff236b30785795abbcda43fac3ece74750566830c2daa4d6e3870bb0dff34c2d
-  languageName: node
-  linkType: hard
-
-"@babel/helper-simple-access@npm:^7.24.7":
-  version: 7.24.7
-  resolution: "@babel/helper-simple-access@npm:7.24.7"
-  dependencies:
-    "@babel/traverse": "npm:^7.24.7"
-    "@babel/types": "npm:^7.24.7"
-  checksum: 10c0/7230e419d59a85f93153415100a5faff23c133d7442c19e0cd070da1784d13cd29096ee6c5a5761065c44e8164f9f80e3a518c41a0256df39e38f7ad6744fed7
+"@babel/helper-plugin-utils@npm:^7.0.0, @babel/helper-plugin-utils@npm:^7.10.4, @babel/helper-plugin-utils@npm:^7.12.13, @babel/helper-plugin-utils@npm:^7.14.5, @babel/helper-plugin-utils@npm:^7.25.9, @babel/helper-plugin-utils@npm:^7.8.0":
+  version: 7.25.9
+  resolution: "@babel/helper-plugin-utils@npm:7.25.9"
+  checksum: 10c0/483066a1ba36ff16c0116cd24f93de05de746a603a777cd695ac7a1b034928a65a4ecb35f255761ca56626435d7abdb73219eba196f9aa83b6c3c3169325599d
   languageName: node
   linkType: hard
 
-"@babel/helper-string-parser@npm:^7.24.8":
-  version: 7.24.8
-  resolution: "@babel/helper-string-parser@npm:7.24.8"
-  checksum: 10c0/6361f72076c17fabf305e252bf6d580106429014b3ab3c1f5c4eb3e6d465536ea6b670cc0e9a637a77a9ad40454d3e41361a2909e70e305116a23d68ce094c08
+"@babel/helper-string-parser@npm:^7.25.9":
+  version: 7.25.9
+  resolution: "@babel/helper-string-parser@npm:7.25.9"
+  checksum: 10c0/7244b45d8e65f6b4338a6a68a8556f2cb161b782343e97281a5f2b9b93e420cad0d9f5773a59d79f61d0c448913d06f6a2358a87f2e203cf112e3c5b53522ee6
   languageName: node
   linkType: hard
 
-"@babel/helper-validator-identifier@npm:^7.24.7":
-  version: 7.24.7
-  resolution: "@babel/helper-validator-identifier@npm:7.24.7"
-  checksum: 10c0/87ad608694c9477814093ed5b5c080c2e06d44cb1924ae8320474a74415241223cc2a725eea2640dd783ff1e3390e5f95eede978bc540e870053152e58f1d651
+"@babel/helper-validator-identifier@npm:^7.25.9":
+  version: 7.25.9
+  resolution: "@babel/helper-validator-identifier@npm:7.25.9"
+  checksum: 10c0/4fc6f830177b7b7e887ad3277ddb3b91d81e6c4a24151540d9d1023e8dc6b1c0505f0f0628ae653601eb4388a8db45c1c14b2c07a9173837aef7e4116456259d
   languageName: node
   linkType: hard
 
-"@babel/helper-validator-option@npm:^7.24.8":
-  version: 7.24.8
-  resolution: "@babel/helper-validator-option@npm:7.24.8"
-  checksum: 10c0/73db93a34ae89201351288bee7623eed81a54000779462a986105b54ffe82069e764afd15171a428b82e7c7a9b5fec10b5d5603b216317a414062edf5c67a21f
+"@babel/helper-validator-option@npm:^7.25.9":
+  version: 7.25.9
+  resolution: "@babel/helper-validator-option@npm:7.25.9"
+  checksum: 10c0/27fb195d14c7dcb07f14e58fe77c44eea19a6a40a74472ec05c441478fa0bb49fa1c32b2d64be7a38870ee48ef6601bdebe98d512f0253aea0b39756c4014f3e
   languageName: node
   linkType: hard
 
-"@babel/helpers@npm:^7.25.0":
-  version: 7.25.6
-  resolution: "@babel/helpers@npm:7.25.6"
+"@babel/helpers@npm:^7.26.0":
+  version: 7.26.0
+  resolution: "@babel/helpers@npm:7.26.0"
   dependencies:
-    "@babel/template": "npm:^7.25.0"
-    "@babel/types": "npm:^7.25.6"
-  checksum: 10c0/448c1cdabccca42fd97a252f73f1e4bcd93776dbf24044f3b4f49b756bf2ece73ee6df05177473bb74ea7456dddd18d6f481e4d96d2cc7839d078900d48c696c
-  languageName: node
-  linkType: hard
-
-"@babel/highlight@npm:^7.24.7":
-  version: 7.24.7
-  resolution: "@babel/highlight@npm:7.24.7"
-  dependencies:
-    "@babel/helper-validator-identifier": "npm:^7.24.7"
-    chalk: "npm:^2.4.2"
-    js-tokens: "npm:^4.0.0"
-    picocolors: "npm:^1.0.0"
-  checksum: 10c0/674334c571d2bb9d1c89bdd87566383f59231e16bcdcf5bb7835babdf03c9ae585ca0887a7b25bdf78f303984af028df52831c7989fecebb5101cc132da9393a
+    "@babel/template": "npm:^7.25.9"
+    "@babel/types": "npm:^7.26.0"
+  checksum: 10c0/343333cced6946fe46617690a1d0789346960910225ce359021a88a60a65bc0d791f0c5d240c0ed46cf8cc63b5fd7df52734ff14e43b9c32feae2b61b1647097
   languageName: node
   linkType: hard
 
-"@babel/parser@npm:^7.1.0, @babel/parser@npm:^7.14.7, @babel/parser@npm:^7.20.7, @babel/parser@npm:^7.23.9, @babel/parser@npm:^7.25.0, @babel/parser@npm:^7.25.6":
-  version: 7.25.6
-  resolution: "@babel/parser@npm:7.25.6"
+"@babel/parser@npm:^7.1.0, @babel/parser@npm:^7.14.7, @babel/parser@npm:^7.20.7, @babel/parser@npm:^7.23.9, @babel/parser@npm:^7.25.9, @babel/parser@npm:^7.26.0, @babel/parser@npm:^7.26.3":
+  version: 7.26.3
+  resolution: "@babel/parser@npm:7.26.3"
   dependencies:
-    "@babel/types": "npm:^7.25.6"
+    "@babel/types": "npm:^7.26.3"
   bin:
     parser: ./bin/babel-parser.js
-  checksum: 10c0/f88a0e895dbb096fd37c4527ea97d12b5fc013720602580a941ac3a339698872f0c911e318c292b184c36b5fbe23b612f05aff9d24071bc847c7b1c21552c41d
+  checksum: 10c0/48f736374e61cfd10ddbf7b80678514ae1f16d0e88bc793d2b505d73d9b987ea786fc8c2f7ee8f8b8c467df062030eb07fd0eb2168f0f541ca1f542775852cad
   languageName: node
   linkType: hard
 
@@ -234,13 +213,13 @@ __metadata:
   linkType: hard
 
 "@babel/plugin-syntax-import-attributes@npm:^7.24.7":
-  version: 7.25.6
-  resolution: "@babel/plugin-syntax-import-attributes@npm:7.25.6"
+  version: 7.26.0
+  resolution: "@babel/plugin-syntax-import-attributes@npm:7.26.0"
   dependencies:
-    "@babel/helper-plugin-utils": "npm:^7.24.8"
+    "@babel/helper-plugin-utils": "npm:^7.25.9"
   peerDependencies:
     "@babel/core": ^7.0.0-0
-  checksum: 10c0/0e9359cf2d117476310961dfcfd7204ed692e933707da10d6194153d3996cd2ea5b7635fc90d720dce3612083af89966bb862561064a509c350320dc98644751
+  checksum: 10c0/e594c185b12bfe0bbe7ca78dfeebe870e6d569a12128cac86f3164a075fe0ff70e25ddbd97fd0782906b91f65560c9dc6957716b7b4a68aba2516c9b7455e352
   languageName: node
   linkType: hard
 
@@ -267,13 +246,13 @@ __metadata:
   linkType: hard
 
 "@babel/plugin-syntax-jsx@npm:^7.7.2":
-  version: 7.24.7
-  resolution: "@babel/plugin-syntax-jsx@npm:7.24.7"
+  version: 7.25.9
+  resolution: "@babel/plugin-syntax-jsx@npm:7.25.9"
   dependencies:
-    "@babel/helper-plugin-utils": "npm:^7.24.7"
+    "@babel/helper-plugin-utils": "npm:^7.25.9"
   peerDependencies:
     "@babel/core": ^7.0.0-0
-  checksum: 10c0/f44d927a9ae8d5ef016ff5b450e1671e56629ddc12e56b938e41fd46e141170d9dfc9a53d6cb2b9a20a7dd266a938885e6a3981c60c052a2e1daed602ac80e51
+  checksum: 10c0/d56597aff4df39d3decda50193b6dfbe596ca53f437ff2934622ce19a743bf7f43492d3fb3308b0289f5cee2b825d99ceb56526a2b9e7b68bf04901546c5618c
   languageName: node
   linkType: hard
 
@@ -366,59 +345,58 @@ __metadata:
   linkType: hard
 
 "@babel/plugin-syntax-typescript@npm:^7.7.2":
-  version: 7.25.4
-  resolution: "@babel/plugin-syntax-typescript@npm:7.25.4"
+  version: 7.25.9
+  resolution: "@babel/plugin-syntax-typescript@npm:7.25.9"
   dependencies:
-    "@babel/helper-plugin-utils": "npm:^7.24.8"
+    "@babel/helper-plugin-utils": "npm:^7.25.9"
   peerDependencies:
     "@babel/core": ^7.0.0-0
-  checksum: 10c0/199919d44c73e5edee9ffd311cf638f88d26a810189e32d338c46c7600441fd5c4a2e431f9be377707cbf318410895304e90b83bf8d9011d205150fa7f260e63
+  checksum: 10c0/5192ebe11bd46aea68b7a60fd9555465c59af7e279e71126788e59121b86e00b505816685ab4782abe159232b0f73854e804b54449820b0d950b397ee158caa2
   languageName: node
   linkType: hard
 
 "@babel/runtime@npm:^7.12.5":
-  version: 7.25.6
-  resolution: "@babel/runtime@npm:7.25.6"
+  version: 7.26.0
+  resolution: "@babel/runtime@npm:7.26.0"
   dependencies:
     regenerator-runtime: "npm:^0.14.0"
-  checksum: 10c0/d6143adf5aa1ce79ed374e33fdfd74fa975055a80bc6e479672ab1eadc4e4bfd7484444e17dd063a1d180e051f3ec62b357c7a2b817e7657687b47313158c3d2
+  checksum: 10c0/12c01357e0345f89f4f7e8c0e81921f2a3e3e101f06e8eaa18a382b517376520cd2fa8c237726eb094dab25532855df28a7baaf1c26342b52782f6936b07c287
   languageName: node
   linkType: hard
 
-"@babel/template@npm:^7.25.0, @babel/template@npm:^7.3.3":
-  version: 7.25.0
-  resolution: "@babel/template@npm:7.25.0"
+"@babel/template@npm:^7.25.9, @babel/template@npm:^7.3.3":
+  version: 7.25.9
+  resolution: "@babel/template@npm:7.25.9"
   dependencies:
-    "@babel/code-frame": "npm:^7.24.7"
-    "@babel/parser": "npm:^7.25.0"
-    "@babel/types": "npm:^7.25.0"
-  checksum: 10c0/4e31afd873215744c016e02b04f43b9fa23205d6d0766fb2e93eb4091c60c1b88897936adb895fb04e3c23de98dfdcbe31bc98daaa1a4e0133f78bb948e1209b
+    "@babel/code-frame": "npm:^7.25.9"
+    "@babel/parser": "npm:^7.25.9"
+    "@babel/types": "npm:^7.25.9"
+  checksum: 10c0/ebe677273f96a36c92cc15b7aa7b11cc8bc8a3bb7a01d55b2125baca8f19cae94ff3ce15f1b1880fb8437f3a690d9f89d4e91f16fc1dc4d3eb66226d128983ab
   languageName: node
   linkType: hard
 
-"@babel/traverse@npm:^7.24.7, @babel/traverse@npm:^7.25.2":
-  version: 7.25.6
-  resolution: "@babel/traverse@npm:7.25.6"
+"@babel/traverse@npm:^7.25.9":
+  version: 7.26.4
+  resolution: "@babel/traverse@npm:7.26.4"
   dependencies:
-    "@babel/code-frame": "npm:^7.24.7"
-    "@babel/generator": "npm:^7.25.6"
-    "@babel/parser": "npm:^7.25.6"
-    "@babel/template": "npm:^7.25.0"
-    "@babel/types": "npm:^7.25.6"
+    "@babel/code-frame": "npm:^7.26.2"
+    "@babel/generator": "npm:^7.26.3"
+    "@babel/parser": "npm:^7.26.3"
+    "@babel/template": "npm:^7.25.9"
+    "@babel/types": "npm:^7.26.3"
     debug: "npm:^4.3.1"
     globals: "npm:^11.1.0"
-  checksum: 10c0/964304c6fa46bd705428ba380bf73177eeb481c3f26d82ea3d0661242b59e0dd4329d23886035e9ca9a4ceb565c03a76fd615109830687a27bcd350059d6377e
+  checksum: 10c0/cf25d0eda9505daa0f0832ad786b9e28c9d967e823aaf7fbe425250ab198c656085495aa6bed678b27929e095c84eea9fd778b851a31803da94c9bc4bf4eaef7
   languageName: node
   linkType: hard
 
-"@babel/types@npm:^7.0.0, @babel/types@npm:^7.20.7, @babel/types@npm:^7.24.7, @babel/types@npm:^7.25.0, @babel/types@npm:^7.25.2, @babel/types@npm:^7.25.6, @babel/types@npm:^7.3.3":
-  version: 7.25.6
-  resolution: "@babel/types@npm:7.25.6"
+"@babel/types@npm:^7.0.0, @babel/types@npm:^7.20.7, @babel/types@npm:^7.25.9, @babel/types@npm:^7.26.0, @babel/types@npm:^7.26.3, @babel/types@npm:^7.3.3":
+  version: 7.26.3
+  resolution: "@babel/types@npm:7.26.3"
   dependencies:
-    "@babel/helper-string-parser": "npm:^7.24.8"
-    "@babel/helper-validator-identifier": "npm:^7.24.7"
-    to-fast-properties: "npm:^2.0.0"
-  checksum: 10c0/89d45fbee24e27a05dca2d08300a26b905bd384a480448823f6723c72d3a30327c517476389b7280ce8cb9a2c48ef8f47da7f9f6d326faf6f53fd6b68237bdc4
+    "@babel/helper-string-parser": "npm:^7.25.9"
+    "@babel/helper-validator-identifier": "npm:^7.25.9"
+  checksum: 10c0/966c5242c5e55c8704bf7a7418e7be2703a0afa4d19a8480999d5a4ef13d095dd60686615fe5983cb7593b4b06ba3a7de8d6ca501c1d78bdd233a10d90be787b
   languageName: node
   linkType: hard
 
@@ -439,29 +417,29 @@ __metadata:
   linkType: hard
 
 "@emnapi/runtime@npm:^1.2.0":
-  version: 1.2.0
-  resolution: "@emnapi/runtime@npm:1.2.0"
+  version: 1.3.1
+  resolution: "@emnapi/runtime@npm:1.3.1"
   dependencies:
     tslib: "npm:^2.4.0"
-  checksum: 10c0/7005ff8b67724c9e61b6cd79a3decbdb2ce25d24abd4d3d187472f200ee6e573329c30264335125fb136bd813aa9cf9f4f7c9391d04b07dd1e63ce0a3427be57
+  checksum: 10c0/060ffede50f1b619c15083312b80a9e62a5b0c87aa8c1b54854c49766c9d69f8d1d3d87bd963a647071263a320db41b25eaa50b74d6a80dcc763c23dbeaafd6c
   languageName: node
   linkType: hard
 
 "@eslint-community/eslint-utils@npm:^4.2.0, @eslint-community/eslint-utils@npm:^4.4.0":
-  version: 4.4.0
-  resolution: "@eslint-community/eslint-utils@npm:4.4.0"
+  version: 4.4.1
+  resolution: "@eslint-community/eslint-utils@npm:4.4.1"
   dependencies:
-    eslint-visitor-keys: "npm:^3.3.0"
+    eslint-visitor-keys: "npm:^3.4.3"
   peerDependencies:
     eslint: ^6.0.0 || ^7.0.0 || >=8.0.0
-  checksum: 10c0/7e559c4ce59cd3a06b1b5a517b593912e680a7f981ae7affab0d01d709e99cd5647019be8fafa38c350305bc32f1f7d42c7073edde2ab536c745e365f37b607e
+  checksum: 10c0/2aa0ac2fc50ff3f234408b10900ed4f1a0b19352f21346ad4cc3d83a1271481bdda11097baa45d484dd564c895e0762a27a8240be7a256b3ad47129e96528252
   languageName: node
   linkType: hard
 
 "@eslint-community/regexpp@npm:^4.5.1, @eslint-community/regexpp@npm:^4.6.1":
-  version: 4.11.1
-  resolution: "@eslint-community/regexpp@npm:4.11.1"
-  checksum: 10c0/fbcc1cb65ef5ed5b92faa8dc542e035269065e7ebcc0b39c81a4fe98ad35cfff20b3c8df048641de15a7757e07d69f85e2579c1a5055f993413ba18c055654f8
+  version: 4.12.1
+  resolution: "@eslint-community/regexpp@npm:4.12.1"
+  checksum: 10c0/a03d98c246bcb9109aec2c08e4d10c8d010256538dcb3f56610191607214523d4fb1b00aa81df830b6dffb74c5fa0be03642513a289c567949d3e550ca11cdf6
   languageName: node
   linkType: hard
 
@@ -499,7 +477,7 @@ __metadata:
   languageName: node
   linkType: hard
 
-"@formatjs/fast-memoize@npm:2.2.0, @formatjs/fast-memoize@npm:^2.2.0":
+"@formatjs/fast-memoize@npm:2.2.0":
   version: 2.2.0
   resolution: "@formatjs/fast-memoize@npm:2.2.0"
   dependencies:
@@ -508,6 +486,15 @@ __metadata:
   languageName: node
   linkType: hard
 
+"@formatjs/fast-memoize@npm:^2.2.0":
+  version: 2.2.5
+  resolution: "@formatjs/fast-memoize@npm:2.2.5"
+  dependencies:
+    tslib: "npm:2"
+  checksum: 10c0/3a2b930d8d866d9e8a008b974f859875b2c920a1a5c472090658bed132a1e1a3c9ba68ce460e87a7bc15caea95e514e84c75c0bc3735f9422ede2b1b5aef9e76
+  languageName: node
+  linkType: hard
+
 "@formatjs/icu-messageformat-parser@npm:2.7.8":
   version: 2.7.8
   resolution: "@formatjs/icu-messageformat-parser@npm:2.7.8"
@@ -774,6 +761,15 @@ __metadata:
   languageName: node
   linkType: hard
 
+"@isaacs/fs-minipass@npm:^4.0.0":
+  version: 4.0.1
+  resolution: "@isaacs/fs-minipass@npm:4.0.1"
+  dependencies:
+    minipass: "npm:^7.0.4"
+  checksum: 10c0/c25b6dc1598790d5b55c0947a9b7d111cfa92594db5296c3b907e2f533c033666f692a3939eadac17b1c7c40d362d0b0635dc874cbfe3e70db7c2b07cc97a5d2
+  languageName: node
+  linkType: hard
+
 "@istanbuljs/load-nyc-config@npm:^1.0.0":
   version: 1.1.0
   resolution: "@istanbuljs/load-nyc-config@npm:1.1.0"
@@ -1025,13 +1021,13 @@ __metadata:
   linkType: hard
 
 "@jridgewell/gen-mapping@npm:^0.3.2, @jridgewell/gen-mapping@npm:^0.3.5":
-  version: 0.3.5
-  resolution: "@jridgewell/gen-mapping@npm:0.3.5"
+  version: 0.3.8
+  resolution: "@jridgewell/gen-mapping@npm:0.3.8"
   dependencies:
     "@jridgewell/set-array": "npm:^1.2.1"
     "@jridgewell/sourcemap-codec": "npm:^1.4.10"
     "@jridgewell/trace-mapping": "npm:^0.3.24"
-  checksum: 10c0/1be4fd4a6b0f41337c4f5fdf4afc3bd19e39c3691924817108b82ffcb9c9e609c273f936932b9fba4b3a298ce2eb06d9bff4eb1cc3bd81c4f4ee1b4917e25feb
+  checksum: 10c0/c668feaf86c501d7c804904a61c23c67447b2137b813b9ce03eca82cb9d65ac7006d766c218685d76e3d72828279b6ee26c347aa1119dab23fbaf36aed51585a
   languageName: node
   linkType: hard
 
@@ -1189,25 +1185,25 @@ __metadata:
   languageName: node
   linkType: hard
 
-"@npmcli/agent@npm:^2.0.0":
-  version: 2.2.2
-  resolution: "@npmcli/agent@npm:2.2.2"
+"@npmcli/agent@npm:^3.0.0":
+  version: 3.0.0
+  resolution: "@npmcli/agent@npm:3.0.0"
   dependencies:
     agent-base: "npm:^7.1.0"
     http-proxy-agent: "npm:^7.0.0"
     https-proxy-agent: "npm:^7.0.1"
     lru-cache: "npm:^10.0.1"
     socks-proxy-agent: "npm:^8.0.3"
-  checksum: 10c0/325e0db7b287d4154ecd164c0815c08007abfb07653cc57bceded17bb7fd240998a3cbdbe87d700e30bef494885eccc725ab73b668020811d56623d145b524ae
+  checksum: 10c0/efe37b982f30740ee77696a80c196912c274ecd2cb243bc6ae7053a50c733ce0f6c09fda085145f33ecf453be19654acca74b69e81eaad4c90f00ccffe2f9271
   languageName: node
   linkType: hard
 
-"@npmcli/fs@npm:^3.1.0":
-  version: 3.1.1
-  resolution: "@npmcli/fs@npm:3.1.1"
+"@npmcli/fs@npm:^4.0.0":
+  version: 4.0.0
+  resolution: "@npmcli/fs@npm:4.0.0"
   dependencies:
     semver: "npm:^7.3.5"
-  checksum: 10c0/c37a5b4842bfdece3d14dfdb054f73fe15ed2d3da61b34ff76629fb5b1731647c49166fd2a8bf8b56fcfa51200382385ea8909a3cbecdad612310c114d3f6c99
+  checksum: 10c0/c90935d5ce670c87b6b14fab04a965a3b8137e585f8b2a6257263bd7f97756dd736cb165bb470e5156a9e718ecd99413dccc54b1138c1a46d6ec7cf325982fe5
   languageName: node
   linkType: hard
 
@@ -1274,21 +1270,21 @@ __metadata:
   linkType: hard
 
 "@tanstack/react-virtual@npm:^3.0.0-beta.60":
-  version: 3.10.8
-  resolution: "@tanstack/react-virtual@npm:3.10.8"
+  version: 3.11.1
+  resolution: "@tanstack/react-virtual@npm:3.11.1"
   dependencies:
-    "@tanstack/virtual-core": "npm:3.10.8"
+    "@tanstack/virtual-core": "npm:3.10.9"
   peerDependencies:
-    react: ^16.8.0 || ^17.0.0 || ^18.0.0
-    react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0
-  checksum: 10c0/b7aec88ef48f604d3e7245b9996ba42f06e6ee2c1a45146cb96814cb3873a4c888bf86d26d10284c847a5ed97e16dc9430c380387abc1231c2e43c00f6ebadff
+    react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0
+    react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0
+  checksum: 10c0/5eafab335de0c65daa8ad8fe732c506bea922861032aad35732ca65ff16fdbb111bd4e72fafc0d3f4449a793ceba4ed0fcadb27390bda6f5c8ba4a55737d556d
   languageName: node
   linkType: hard
 
-"@tanstack/virtual-core@npm:3.10.8":
-  version: 3.10.8
-  resolution: "@tanstack/virtual-core@npm:3.10.8"
-  checksum: 10c0/ddb97cd03d84b343b38a2c14d85e33c788f4af622fccc0fdf997caf4e83e47e8f67b099b854c7dc4337d7662f647625ab3247cd8aa1bc9d4dda701bda83245f6
+"@tanstack/virtual-core@npm:3.10.9":
+  version: 3.10.9
+  resolution: "@tanstack/virtual-core@npm:3.10.9"
+  checksum: 10c0/960cde330235daff5403e0da23837ac30a0f95a02c8866692f8382d03b675d6802e129436b0b3e7e737d8a5347ef2cadec448ba4c0878462228c094440d0207b
   languageName: node
   linkType: hard
 
@@ -1309,8 +1305,8 @@ __metadata:
   linkType: hard
 
 "@testing-library/jest-dom@npm:^6.4.2":
-  version: 6.5.0
-  resolution: "@testing-library/jest-dom@npm:6.5.0"
+  version: 6.6.3
+  resolution: "@testing-library/jest-dom@npm:6.6.3"
   dependencies:
     "@adobe/css-tools": "npm:^4.4.0"
     aria-query: "npm:^5.0.0"
@@ -1319,7 +1315,7 @@ __metadata:
     dom-accessibility-api: "npm:^0.6.3"
     lodash: "npm:^4.17.21"
     redent: "npm:^3.0.0"
-  checksum: 10c0/fd5936a547f04608d8de15a7de3ae26516f21023f8f45169b10c8c8847015fd20ec259b7309f08aa1031bcbc37c6e5e6f532d1bb85ef8f91bad654193ec66a4c
+  checksum: 10c0/5566b6c0b7b0709bc244aec3aa3dc9e5f4663e8fb2b99d8cd456fc07279e59db6076cbf798f9d3099a98fca7ef4cd50e4e1f4c4dec5a60a8fad8d24a638a5bf6
   languageName: node
   linkType: hard
 
@@ -1420,49 +1416,6 @@ __metadata:
   languageName: node
   linkType: hard
 
-"@types/body-parser@npm:*":
-  version: 1.19.5
-  resolution: "@types/body-parser@npm:1.19.5"
-  dependencies:
-    "@types/connect": "npm:*"
-    "@types/node": "npm:*"
-  checksum: 10c0/aebeb200f25e8818d8cf39cd0209026750d77c9b85381cdd8deeb50913e4d18a1ebe4b74ca9b0b4d21952511eeaba5e9fbbf739b52731a2061e206ec60d568df
-  languageName: node
-  linkType: hard
-
-"@types/connect@npm:*":
-  version: 3.4.38
-  resolution: "@types/connect@npm:3.4.38"
-  dependencies:
-    "@types/node": "npm:*"
-  checksum: 10c0/2e1cdba2c410f25649e77856505cd60223250fa12dff7a503e492208dbfdd25f62859918f28aba95315251fd1f5e1ffbfca1e25e73037189ab85dd3f8d0a148c
-  languageName: node
-  linkType: hard
-
-"@types/express-serve-static-core@npm:^4.17.33":
-  version: 4.19.5
-  resolution: "@types/express-serve-static-core@npm:4.19.5"
-  dependencies:
-    "@types/node": "npm:*"
-    "@types/qs": "npm:*"
-    "@types/range-parser": "npm:*"
-    "@types/send": "npm:*"
-  checksum: 10c0/ba8d8d976ab797b2602c60e728802ff0c98a00f13d420d82770f3661b67fa36ea9d3be0b94f2ddd632afe1fbc6e41620008b01db7e4fabdd71a2beb5539b0725
-  languageName: node
-  linkType: hard
-
-"@types/express@npm:^4.17.21":
-  version: 4.17.21
-  resolution: "@types/express@npm:4.17.21"
-  dependencies:
-    "@types/body-parser": "npm:*"
-    "@types/express-serve-static-core": "npm:^4.17.33"
-    "@types/qs": "npm:*"
-    "@types/serve-static": "npm:*"
-  checksum: 10c0/12e562c4571da50c7d239e117e688dc434db1bac8be55613294762f84fd77fbd0658ccd553c7d3ab02408f385bc93980992369dd30e2ecd2c68c358e6af8fabf
-  languageName: node
-  linkType: hard
-
 "@types/graceful-fs@npm:^4.1.3":
   version: 4.1.9
   resolution: "@types/graceful-fs@npm:4.1.9"
@@ -1472,13 +1425,6 @@ __metadata:
   languageName: node
   linkType: hard
 
-"@types/http-errors@npm:*":
-  version: 2.0.4
-  resolution: "@types/http-errors@npm:2.0.4"
-  checksum: 10c0/494670a57ad4062fee6c575047ad5782506dd35a6b9ed3894cea65830a94367bd84ba302eb3dde331871f6d70ca287bfedb1b2cf658e6132cd2cbd427ab56836
-  languageName: node
-  linkType: hard
-
 "@types/isomorphic-fetch@npm:^0.0.39":
   version: 0.0.39
   resolution: "@types/isomorphic-fetch@npm:0.0.39"
@@ -1512,12 +1458,12 @@ __metadata:
   linkType: hard
 
 "@types/jest@npm:^29.5.12":
-  version: 29.5.13
-  resolution: "@types/jest@npm:29.5.13"
+  version: 29.5.14
+  resolution: "@types/jest@npm:29.5.14"
   dependencies:
     expect: "npm:^29.0.0"
     pretty-format: "npm:^29.0.0"
-  checksum: 10c0/9c31af0b155387b9860908830de63c6b79011d7c87c8b61b39da124e26e55423dd51b006749aafe4f0ef3a065016619a1f93ef4b055157d43727f448e67824b7
+  checksum: 10c0/18e0712d818890db8a8dab3d91e9ea9f7f19e3f83c2e50b312f557017dc81466207a71f3ed79cf4428e813ba939954fa26ffa0a9a7f153181ba174581b1c2aed
   languageName: node
   linkType: hard
 
@@ -1546,68 +1492,38 @@ __metadata:
   languageName: node
   linkType: hard
 
-"@types/mime@npm:^1":
-  version: 1.3.5
-  resolution: "@types/mime@npm:1.3.5"
-  checksum: 10c0/c2ee31cd9b993804df33a694d5aa3fa536511a49f2e06eeab0b484fef59b4483777dbb9e42a4198a0809ffbf698081fdbca1e5c2218b82b91603dfab10a10fbc
-  languageName: node
-  linkType: hard
-
-"@types/node@npm:*":
-  version: 22.5.5
-  resolution: "@types/node@npm:22.5.5"
+"@types/node@npm:*, @types/node@npm:^20":
+  version: 20.17.5
+  resolution: "@types/node@npm:20.17.5"
   dependencies:
     undici-types: "npm:~6.19.2"
-  checksum: 10c0/ead9495cfc6b1da5e7025856dcce2591e9bae635357410c0d2dd619fce797d2a1d402887580ca4b336cb78168b195224869967de370a23f61663cf1e4836121c
-  languageName: node
-  linkType: hard
-
-"@types/node@npm:^20":
-  version: 20.16.5
-  resolution: "@types/node@npm:20.16.5"
-  dependencies:
-    undici-types: "npm:~6.19.2"
-  checksum: 10c0/6af7994129815010bcbc4cf8221865559c8116ff43e74a6549525c2108267596fc2d18aff5d5ecfe089fb60a119f975631343e2c65c52bfa0955ed9dc56733d6
+  checksum: 10c0/6e6bf7f84365a2ee95a369c48cdb47a93aae2b5029d19660183ba944d7bdbc193e54167076d64a3a11ff28e307b84c90eda350edf8e2029195d1fc27ae6055f4
   languageName: node
   linkType: hard
 
 "@types/prop-types@npm:*":
-  version: 15.7.13
-  resolution: "@types/prop-types@npm:15.7.13"
-  checksum: 10c0/1b20fc67281902c6743379960247bc161f3f0406ffc0df8e7058745a85ea1538612109db0406290512947f9632fe9e10e7337bf0ce6338a91d6c948df16a7c61
-  languageName: node
-  linkType: hard
-
-"@types/qs@npm:*":
-  version: 6.9.16
-  resolution: "@types/qs@npm:6.9.16"
-  checksum: 10c0/a4e871b80fff623755e356fd1f225aea45ff7a29da30f99fddee1a05f4f5f33485b314ab5758145144ed45708f97e44595aa9a8368e9bbc083932f931b12dbb6
-  languageName: node
-  linkType: hard
-
-"@types/range-parser@npm:*":
-  version: 1.2.7
-  resolution: "@types/range-parser@npm:1.2.7"
-  checksum: 10c0/361bb3e964ec5133fa40644a0b942279ed5df1949f21321d77de79f48b728d39253e5ce0408c9c17e4e0fd95ca7899da36841686393b9f7a1e209916e9381a3c
+  version: 15.7.14
+  resolution: "@types/prop-types@npm:15.7.14"
+  checksum: 10c0/1ec775160bfab90b67a782d735952158c7e702ca4502968aa82565bd8e452c2de8601c8dfe349733073c31179116cf7340710160d3836aa8a1ef76d1532893b1
   languageName: node
   linkType: hard
 
 "@types/react-dom@npm:^18, @types/react-dom@npm:^18.0.0":
-  version: 18.3.0
-  resolution: "@types/react-dom@npm:18.3.0"
-  dependencies:
-    "@types/react": "npm:*"
-  checksum: 10c0/6c90d2ed72c5a0e440d2c75d99287e4b5df3e7b011838cdc03ae5cd518ab52164d86990e73246b9d812eaf02ec351d74e3b4f5bd325bf341e13bf980392fd53b
+  version: 18.3.5
+  resolution: "@types/react-dom@npm:18.3.5"
+  peerDependencies:
+    "@types/react": ^18.0.0
+  checksum: 10c0/b163d35a6b32a79f5782574a7aeb12a31a647e248792bf437e6d596e2676961c394c5e3c6e91d1ce44ae90441dbaf93158efb4f051c0d61e2612f1cb04ce4faa
   languageName: node
   linkType: hard
 
-"@types/react@npm:*, @types/react@npm:^18":
-  version: 18.3.8
-  resolution: "@types/react@npm:18.3.8"
+"@types/react@npm:^18":
+  version: 18.3.16
+  resolution: "@types/react@npm:18.3.16"
   dependencies:
     "@types/prop-types": "npm:*"
     csstype: "npm:^3.0.2"
-  checksum: 10c0/367312c9fe276639ecb142265e090a4dd04bb39f8d718cbab546de3f1ddcfddeff415e1147d0fc40f734badaa7420b7b109d511bd4304b2c4c9c36164612fdf8
+  checksum: 10c0/9113d3003865eda07be0fb596f5bd8d7784b8900675090c56e75bdee45499f0b0de2481cbbeb5980c3b4ad18f234a49f39c9e62fd7b89a4e8530c74789f739bd
   languageName: node
   linkType: hard
 
@@ -1618,27 +1534,6 @@ __metadata:
   languageName: node
   linkType: hard
 
-"@types/send@npm:*":
-  version: 0.17.4
-  resolution: "@types/send@npm:0.17.4"
-  dependencies:
-    "@types/mime": "npm:^1"
-    "@types/node": "npm:*"
-  checksum: 10c0/7f17fa696cb83be0a104b04b424fdedc7eaba1c9a34b06027239aba513b398a0e2b7279778af521f516a397ced417c96960e5f50fcfce40c4bc4509fb1a5883c
-  languageName: node
-  linkType: hard
-
-"@types/serve-static@npm:*":
-  version: 1.15.7
-  resolution: "@types/serve-static@npm:1.15.7"
-  dependencies:
-    "@types/http-errors": "npm:*"
-    "@types/node": "npm:*"
-    "@types/send": "npm:*"
-  checksum: 10c0/26ec864d3a626ea627f8b09c122b623499d2221bbf2f470127f4c9ebfe92bd8a6bb5157001372d4c4bd0dd37a1691620217d9dc4df5aa8f779f3fd996b1c60ae
-  languageName: node
-  linkType: hard
-
 "@types/stack-utils@npm:^2.0.0":
   version: 2.0.3
   resolution: "@types/stack-utils@npm:2.0.3"
@@ -1802,9 +1697,9 @@ __metadata:
   linkType: hard
 
 "@ungap/structured-clone@npm:^1.2.0":
-  version: 1.2.0
-  resolution: "@ungap/structured-clone@npm:1.2.0"
-  checksum: 10c0/8209c937cb39119f44eb63cf90c0b73e7c754209a6411c707be08e50e29ee81356dca1a848a405c8bdeebfe2f5e4f831ad310ae1689eeef65e7445c090c6657d
+  version: 1.2.1
+  resolution: "@ungap/structured-clone@npm:1.2.1"
+  checksum: 10c0/127afbcc75ff1532f7b1eb85ee992f9faa70e8d5bb2558da05355d423b966fc279d0a485bf19da2883280e7c299ae4170809a72e78eab086da71c6bcdda5d1e2
   languageName: node
   linkType: hard
 
@@ -1861,11 +1756,11 @@ __metadata:
   linkType: hard
 
 "acorn@npm:^8.1.0, acorn@npm:^8.11.0, acorn@npm:^8.4.1, acorn@npm:^8.8.1, acorn@npm:^8.9.0":
-  version: 8.12.1
-  resolution: "acorn@npm:8.12.1"
+  version: 8.14.0
+  resolution: "acorn@npm:8.14.0"
   bin:
     acorn: bin/acorn
-  checksum: 10c0/51fb26cd678f914e13287e886da2d7021f8c2bc0ccc95e03d3e0447ee278dd3b40b9c57dc222acd5881adcf26f3edc40901a4953403232129e3876793cd17386
+  checksum: 10c0/6d4ee461a7734b2f48836ee0fbb752903606e576cc100eb49340295129ca0b452f3ba91ddd4424a1d4406a98adfb2ebb6bd0ff4c49d7a0930c10e462719bbfd7
   languageName: node
   linkType: hard
 
@@ -1878,22 +1773,10 @@ __metadata:
   languageName: node
   linkType: hard
 
-"agent-base@npm:^7.0.2, agent-base@npm:^7.1.0, agent-base@npm:^7.1.1":
-  version: 7.1.1
-  resolution: "agent-base@npm:7.1.1"
-  dependencies:
-    debug: "npm:^4.3.4"
-  checksum: 10c0/e59ce7bed9c63bf071a30cc471f2933862044c97fd9958967bfe22521d7a0f601ce4ed5a8c011799d0c726ca70312142ae193bbebb60f576b52be19d4a363b50
-  languageName: node
-  linkType: hard
-
-"aggregate-error@npm:^3.0.0":
-  version: 3.1.0
-  resolution: "aggregate-error@npm:3.1.0"
-  dependencies:
-    clean-stack: "npm:^2.0.0"
-    indent-string: "npm:^4.0.0"
-  checksum: 10c0/a42f67faa79e3e6687a4923050e7c9807db3848a037076f791d10e092677d65c1d2d863b7848560699f40fc0502c19f40963fb1cd1fb3d338a7423df8e45e039
+"agent-base@npm:^7.1.0, agent-base@npm:^7.1.2":
+  version: 7.1.3
+  resolution: "agent-base@npm:7.1.3"
+  checksum: 10c0/6192b580c5b1d8fb399b9c62bf8343d76654c2dd62afcb9a52b2cf44a8b6ace1e3b704d3fe3547d91555c857d3df02603341ff2cb961b9cfe2b12f9f3c38ee11
   languageName: node
   linkType: hard
 
@@ -1932,15 +1815,6 @@ __metadata:
   languageName: node
   linkType: hard
 
-"ansi-styles@npm:^3.2.1":
-  version: 3.2.1
-  resolution: "ansi-styles@npm:3.2.1"
-  dependencies:
-    color-convert: "npm:^1.9.0"
-  checksum: 10c0/ece5a8ef069fcc5298f67e3f4771a663129abd174ea2dfa87923a2be2abf6cd367ef72ac87942da00ce85bd1d651d4cd8595aebdb1b385889b89b205860e977b
-  languageName: node
-  linkType: hard
-
 "ansi-styles@npm:^4.0.0, ansi-styles@npm:^4.1.0":
   version: 4.3.0
   resolution: "ansi-styles@npm:4.3.0"
@@ -2011,7 +1885,7 @@ __metadata:
   languageName: node
   linkType: hard
 
-"aria-query@npm:5.1.3, aria-query@npm:~5.1.3":
+"aria-query@npm:5.1.3":
   version: 5.1.3
   resolution: "aria-query@npm:5.1.3"
   dependencies:
@@ -2020,7 +1894,7 @@ __metadata:
   languageName: node
   linkType: hard
 
-"aria-query@npm:^5.0.0":
+"aria-query@npm:^5.0.0, aria-query@npm:^5.3.2":
   version: 5.3.2
   resolution: "aria-query@npm:5.3.2"
   checksum: 10c0/003c7e3e2cff5540bf7a7893775fc614de82b0c5dde8ae823d47b7a28a9d4da1f7ed85f340bdb93d5649caa927755f0e31ecc7ab63edfdfc00c8ef07e505e03e
@@ -2181,9 +2055,9 @@ __metadata:
   linkType: hard
 
 "axe-core@npm:^4.10.0":
-  version: 4.10.0
-  resolution: "axe-core@npm:4.10.0"
-  checksum: 10c0/732c171d48caaace5e784895c4dacb8ca6155e9d98045138ebe3952f78457dd05b92c57d05b41ce2a570aff87dbd0471e8398d2c0f6ebe79617b746c8f658998
+  version: 4.10.2
+  resolution: "axe-core@npm:4.10.2"
+  checksum: 10c0/0e20169077de96946a547fce0df39d9aeebe0077f9d3eeff4896518b96fde857f80b98f0d4279274a7178791744dd5a54bb4f322de45b4f561ffa2586ff9a09d
   languageName: node
   linkType: hard
 
@@ -2315,17 +2189,17 @@ __metadata:
   languageName: node
   linkType: hard
 
-"browserslist@npm:^4.23.1, browserslist@npm:^4.23.3":
-  version: 4.23.3
-  resolution: "browserslist@npm:4.23.3"
+"browserslist@npm:^4.23.3, browserslist@npm:^4.24.0":
+  version: 4.24.2
+  resolution: "browserslist@npm:4.24.2"
   dependencies:
-    caniuse-lite: "npm:^1.0.30001646"
-    electron-to-chromium: "npm:^1.5.4"
+    caniuse-lite: "npm:^1.0.30001669"
+    electron-to-chromium: "npm:^1.5.41"
     node-releases: "npm:^2.0.18"
-    update-browserslist-db: "npm:^1.1.0"
+    update-browserslist-db: "npm:^1.1.1"
   bin:
     browserslist: cli.js
-  checksum: 10c0/3063bfdf812815346447f4796c8f04601bf5d62003374305fd323c2a463e42776475bcc5309264e39bcf9a8605851e53560695991a623be988138b3ff8c66642
+  checksum: 10c0/d747c9fb65ed7b4f1abcae4959405707ed9a7b835639f8a9ba0da2911995a6ab9b0648fd05baf2a4d4e3cf7f9fdbad56d3753f91881e365992c1d49c8d88ff7a
   languageName: node
   linkType: hard
 
@@ -2354,11 +2228,11 @@ __metadata:
   languageName: node
   linkType: hard
 
-"cacache@npm:^18.0.0":
-  version: 18.0.4
-  resolution: "cacache@npm:18.0.4"
+"cacache@npm:^19.0.1":
+  version: 19.0.1
+  resolution: "cacache@npm:19.0.1"
   dependencies:
-    "@npmcli/fs": "npm:^3.1.0"
+    "@npmcli/fs": "npm:^4.0.0"
     fs-minipass: "npm:^3.0.0"
     glob: "npm:^10.2.2"
     lru-cache: "npm:^10.0.1"
@@ -2366,24 +2240,43 @@ __metadata:
     minipass-collect: "npm:^2.0.1"
     minipass-flush: "npm:^1.0.5"
     minipass-pipeline: "npm:^1.2.4"
-    p-map: "npm:^4.0.0"
-    ssri: "npm:^10.0.0"
-    tar: "npm:^6.1.11"
-    unique-filename: "npm:^3.0.0"
-  checksum: 10c0/6c055bafed9de4f3dcc64ac3dc7dd24e863210902b7c470eb9ce55a806309b3efff78033e3d8b4f7dcc5d467f2db43c6a2857aaaf26f0094b8a351d44c42179f
+    p-map: "npm:^7.0.2"
+    ssri: "npm:^12.0.0"
+    tar: "npm:^7.4.3"
+    unique-filename: "npm:^4.0.0"
+  checksum: 10c0/01f2134e1bd7d3ab68be851df96c8d63b492b1853b67f2eecb2c37bb682d37cb70bb858a16f2f0554d3c0071be6dfe21456a1ff6fa4b7eed996570d6a25ffe9c
   languageName: node
   linkType: hard
 
-"call-bind@npm:^1.0.2, call-bind@npm:^1.0.5, call-bind@npm:^1.0.6, call-bind@npm:^1.0.7":
-  version: 1.0.7
-  resolution: "call-bind@npm:1.0.7"
+"call-bind-apply-helpers@npm:^1.0.0, call-bind-apply-helpers@npm:^1.0.1":
+  version: 1.0.1
+  resolution: "call-bind-apply-helpers@npm:1.0.1"
   dependencies:
-    es-define-property: "npm:^1.0.0"
     es-errors: "npm:^1.3.0"
     function-bind: "npm:^1.1.2"
+  checksum: 10c0/acb2ab68bf2718e68a3e895f0d0b73ccc9e45b9b6f210f163512ba76f91dab409eb8792f6dae188356f9095747512a3101646b3dea9d37fb8c7c6bf37796d18c
+  languageName: node
+  linkType: hard
+
+"call-bind@npm:^1.0.2, call-bind@npm:^1.0.5, call-bind@npm:^1.0.6, call-bind@npm:^1.0.7, call-bind@npm:^1.0.8":
+  version: 1.0.8
+  resolution: "call-bind@npm:1.0.8"
+  dependencies:
+    call-bind-apply-helpers: "npm:^1.0.0"
+    es-define-property: "npm:^1.0.0"
     get-intrinsic: "npm:^1.2.4"
-    set-function-length: "npm:^1.2.1"
-  checksum: 10c0/a3ded2e423b8e2a265983dba81c27e125b48eefb2655e7dfab6be597088da3d47c47976c24bc51b8fd9af1061f8f87b4ab78a314f3c77784b2ae2ba535ad8b8d
+    set-function-length: "npm:^1.2.2"
+  checksum: 10c0/a13819be0681d915144467741b69875ae5f4eba8961eb0bf322aab63ec87f8250eb6d6b0dcbb2e1349876412a56129ca338592b3829ef4343527f5f18a0752d4
+  languageName: node
+  linkType: hard
+
+"call-bound@npm:^1.0.2":
+  version: 1.0.2
+  resolution: "call-bound@npm:1.0.2"
+  dependencies:
+    call-bind: "npm:^1.0.8"
+    get-intrinsic: "npm:^1.2.5"
+  checksum: 10c0/19761e1ce55578f9c41bed06b162de22058d0228cd9c14215d8db73716594ef61b87e5e7486855ea04becd86f55ed08ed81e2c25a4a56962ca12e6b0e772f141
   languageName: node
   linkType: hard
 
@@ -2415,21 +2308,10 @@ __metadata:
   languageName: node
   linkType: hard
 
-"caniuse-lite@npm:^1.0.30001579, caniuse-lite@npm:^1.0.30001646":
-  version: 1.0.30001663
-  resolution: "caniuse-lite@npm:1.0.30001663"
-  checksum: 10c0/6508e27bf7fdec657f26f318b1ab64ace6e1208ef9fedaf0975bc89046e0c683bfba837f108840ada1686ff09b8ffd01e05ac791dcf598b8f16eefb636875cf2
-  languageName: node
-  linkType: hard
-
-"chalk@npm:^2.4.2":
-  version: 2.4.2
-  resolution: "chalk@npm:2.4.2"
-  dependencies:
-    ansi-styles: "npm:^3.2.1"
-    escape-string-regexp: "npm:^1.0.5"
-    supports-color: "npm:^5.3.0"
-  checksum: 10c0/e6543f02ec877732e3a2d1c3c3323ddb4d39fbab687c23f526e25bd4c6a9bf3b83a696e8c769d078e04e5754921648f7821b2a2acfd16c550435fd630026e073
+"caniuse-lite@npm:^1.0.30001579, caniuse-lite@npm:^1.0.30001646, caniuse-lite@npm:^1.0.30001669":
+  version: 1.0.30001688
+  resolution: "caniuse-lite@npm:1.0.30001688"
+  checksum: 10c0/2ef3145ac69ea5faf403b613912a3a72006db2e004e58abcf40dc89904aa05568032b5a6dcfb267556944fd380a9b018ad645f93d84e543bed3471e4950a89f4
   languageName: node
   linkType: hard
 
@@ -2460,7 +2342,7 @@ __metadata:
   languageName: node
   linkType: hard
 
-"chokidar@npm:^3.5.3":
+"chokidar@npm:^3.6.0":
   version: 3.6.0
   resolution: "chokidar@npm:3.6.0"
   dependencies:
@@ -2479,10 +2361,10 @@ __metadata:
   languageName: node
   linkType: hard
 
-"chownr@npm:^2.0.0":
-  version: 2.0.0
-  resolution: "chownr@npm:2.0.0"
-  checksum: 10c0/594754e1303672171cc04e50f6c398ae16128eb134a88f801bf5354fd96f205320f23536a045d9abd8b51024a149696e51231565891d4efdab8846021ecf88e6
+"chownr@npm:^3.0.0":
+  version: 3.0.0
+  resolution: "chownr@npm:3.0.0"
+  checksum: 10c0/43925b87700f7e3893296c8e9c56cc58f926411cce3a6e5898136daaf08f08b9a8eb76d37d3267e707d0dcc17aed2e2ebdf5848c0c3ce95cf910a919935c1b10
   languageName: node
   linkType: hard
 
@@ -2500,13 +2382,6 @@ __metadata:
   languageName: node
   linkType: hard
 
-"clean-stack@npm:^2.0.0":
-  version: 2.2.0
-  resolution: "clean-stack@npm:2.2.0"
-  checksum: 10c0/1f90262d5f6230a17e27d0c190b09d47ebe7efdd76a03b5a1127863f7b3c9aec4c3e6c8bb3a7bbf81d553d56a1fd35728f5a8ef4c63f867ac8d690109742a8c1
-  languageName: node
-  linkType: hard
-
 "client-only@npm:0.0.1, client-only@npm:^0.0.1":
   version: 0.0.1
   resolution: "client-only@npm:0.0.1"
@@ -2539,15 +2414,6 @@ __metadata:
   languageName: node
   linkType: hard
 
-"color-convert@npm:^1.9.0":
-  version: 1.9.3
-  resolution: "color-convert@npm:1.9.3"
-  dependencies:
-    color-name: "npm:1.1.3"
-  checksum: 10c0/5ad3c534949a8c68fca8fbc6f09068f435f0ad290ab8b2f76841b9e6af7e0bb57b98cb05b0e19fe33f5d91e5a8611ad457e5f69e0a484caad1f7487fd0e8253c
-  languageName: node
-  linkType: hard
-
 "color-convert@npm:^2.0.1":
   version: 2.0.1
   resolution: "color-convert@npm:2.0.1"
@@ -2557,13 +2423,6 @@ __metadata:
   languageName: node
   linkType: hard
 
-"color-name@npm:1.1.3":
-  version: 1.1.3
-  resolution: "color-name@npm:1.1.3"
-  checksum: 10c0/566a3d42cca25b9b3cd5528cd7754b8e89c0eb646b7f214e8e2eaddb69994ac5f0557d9c175eb5d8f0ad73531140d9c47525085ee752a91a2ab15ab459caf6d6
-  languageName: node
-  linkType: hard
-
 "color-name@npm:^1.0.0, color-name@npm:~1.1.4":
   version: 1.1.4
   resolution: "color-name@npm:1.1.4"
@@ -2655,13 +2514,13 @@ __metadata:
   linkType: hard
 
 "cross-spawn@npm:^7.0.0, cross-spawn@npm:^7.0.2, cross-spawn@npm:^7.0.3":
-  version: 7.0.3
-  resolution: "cross-spawn@npm:7.0.3"
+  version: 7.0.6
+  resolution: "cross-spawn@npm:7.0.6"
   dependencies:
     path-key: "npm:^3.1.0"
     shebang-command: "npm:^2.0.0"
     which: "npm:^2.0.1"
-  checksum: 10c0/5738c312387081c98d69c98e105b6327b069197f864a60593245d64c8089c8a0a744e16349281210d56835bb9274130d825a78b2ad6853ca13cfbeffc0c31750
+  checksum: 10c0/053ea8b2135caff68a9e81470e845613e374e7309a47731e81639de3eaeb90c3d01af0e0b44d2ab9d50b43467223b88567dfeb3262db942dc063b9976718ffc1
   languageName: node
   linkType: hard
 
@@ -2762,7 +2621,7 @@ __metadata:
   languageName: node
   linkType: hard
 
-"debug@npm:4, debug@npm:^4.1.0, debug@npm:^4.1.1, debug@npm:^4.3.1, debug@npm:^4.3.2, debug@npm:^4.3.4, debug@npm:^4.3.5":
+"debug@npm:4, debug@npm:^4.1.0, debug@npm:^4.1.1, debug@npm:^4.3.1, debug@npm:^4.3.2, debug@npm:^4.3.4":
   version: 4.3.7
   resolution: "debug@npm:4.3.7"
   dependencies:
@@ -2783,6 +2642,18 @@ __metadata:
   languageName: node
   linkType: hard
 
+"debug@npm:^4.3.7":
+  version: 4.4.0
+  resolution: "debug@npm:4.4.0"
+  dependencies:
+    ms: "npm:^2.1.3"
+  peerDependenciesMeta:
+    supports-color:
+      optional: true
+  checksum: 10c0/db94f1a182bf886f57b4755f85b3a74c39b5114b9377b7ab375dc2cfa3454f09490cc6c30f829df3fc8042bc8b8995f6567ce5cd96f3bc3688bd24027197d9de
+  languageName: node
+  linkType: hard
+
 "decimal.js@npm:^10.4.2":
   version: 10.4.3
   resolution: "decimal.js@npm:10.4.3"
@@ -2970,6 +2841,17 @@ __metadata:
   languageName: node
   linkType: hard
 
+"dunder-proto@npm:^1.0.0":
+  version: 1.0.0
+  resolution: "dunder-proto@npm:1.0.0"
+  dependencies:
+    call-bind-apply-helpers: "npm:^1.0.0"
+    es-errors: "npm:^1.3.0"
+    gopd: "npm:^1.2.0"
+  checksum: 10c0/b321e5cbf64f0a4c786b0b3dc187eb5197a83f6e05a1e11b86db25251b3ae6747c4b805d9e0a4fbf481d22a86a539dc75f82d883daeac7fc2ce4bd72ff5ef5a2
+  languageName: node
+  linkType: hard
+
 "eastasianwidth@npm:^0.2.0":
   version: 0.2.0
   resolution: "eastasianwidth@npm:0.2.0"
@@ -2977,10 +2859,10 @@ __metadata:
   languageName: node
   linkType: hard
 
-"electron-to-chromium@npm:^1.5.4":
-  version: 1.5.27
-  resolution: "electron-to-chromium@npm:1.5.27"
-  checksum: 10c0/4a057f469a01829884f2a51f3fc60af7e6a718b15009e4875df122fcdf13babea475ba029af1652a6875b4acfca730c48b13caac5d477d648e622699d3b662bf
+"electron-to-chromium@npm:^1.5.41":
+  version: 1.5.73
+  resolution: "electron-to-chromium@npm:1.5.73"
+  checksum: 10c0/b97118d469f2b3b7a816932004cd36d82879829904ca4a8daf70eaefbe686a23afa6e39e0ad0cdc39d00a9ebab97160d072b786fdeb6964f13fb15aa688958f1
   languageName: node
   linkType: hard
 
@@ -3024,7 +2906,7 @@ __metadata:
   languageName: node
   linkType: hard
 
-"entities@npm:^4.4.0":
+"entities@npm:^4.5.0":
   version: 4.5.0
   resolution: "entities@npm:4.5.0"
   checksum: 10c0/5b039739f7621f5d1ad996715e53d964035f75ad3b9a4d38c6b3804bb226e282ffeae2443624d8fdd9c47d8e926ae9ac009c54671243f0c3294c26af7cc85250
@@ -3054,9 +2936,9 @@ __metadata:
   languageName: node
   linkType: hard
 
-"es-abstract@npm:^1.17.5, es-abstract@npm:^1.22.1, es-abstract@npm:^1.22.3, es-abstract@npm:^1.23.0, es-abstract@npm:^1.23.1, es-abstract@npm:^1.23.2, es-abstract@npm:^1.23.3":
-  version: 1.23.3
-  resolution: "es-abstract@npm:1.23.3"
+"es-abstract@npm:^1.17.5, es-abstract@npm:^1.22.1, es-abstract@npm:^1.22.3, es-abstract@npm:^1.23.2, es-abstract@npm:^1.23.3, es-abstract@npm:^1.23.5":
+  version: 1.23.5
+  resolution: "es-abstract@npm:1.23.5"
   dependencies:
     array-buffer-byte-length: "npm:^1.0.1"
     arraybuffer.prototype.slice: "npm:^1.0.3"
@@ -3073,7 +2955,7 @@ __metadata:
     function.prototype.name: "npm:^1.1.6"
     get-intrinsic: "npm:^1.2.4"
     get-symbol-description: "npm:^1.0.2"
-    globalthis: "npm:^1.0.3"
+    globalthis: "npm:^1.0.4"
     gopd: "npm:^1.0.1"
     has-property-descriptors: "npm:^1.0.2"
     has-proto: "npm:^1.0.3"
@@ -3089,10 +2971,10 @@ __metadata:
     is-string: "npm:^1.0.7"
     is-typed-array: "npm:^1.1.13"
     is-weakref: "npm:^1.0.2"
-    object-inspect: "npm:^1.13.1"
+    object-inspect: "npm:^1.13.3"
     object-keys: "npm:^1.1.1"
     object.assign: "npm:^4.1.5"
-    regexp.prototype.flags: "npm:^1.5.2"
+    regexp.prototype.flags: "npm:^1.5.3"
     safe-array-concat: "npm:^1.1.2"
     safe-regex-test: "npm:^1.0.3"
     string.prototype.trim: "npm:^1.2.9"
@@ -3104,16 +2986,14 @@ __metadata:
     typed-array-length: "npm:^1.0.6"
     unbox-primitive: "npm:^1.0.2"
     which-typed-array: "npm:^1.1.15"
-  checksum: 10c0/d27e9afafb225c6924bee9971a7f25f20c314f2d6cb93a63cada4ac11dcf42040896a6c22e5fb8f2a10767055ed4ddf400be3b1eb12297d281726de470b75666
+  checksum: 10c0/1f6f91da9cf7ee2c81652d57d3046621d598654d1d1b05c1578bafe5c4c2d3d69513901679bdca2de589f620666ec21de337e4935cec108a4ed0871d5ef04a5d
   languageName: node
   linkType: hard
 
-"es-define-property@npm:^1.0.0":
-  version: 1.0.0
-  resolution: "es-define-property@npm:1.0.0"
-  dependencies:
-    get-intrinsic: "npm:^1.2.4"
-  checksum: 10c0/6bf3191feb7ea2ebda48b577f69bdfac7a2b3c9bcf97307f55fd6ef1bbca0b49f0c219a935aca506c993d8c5d8bddd937766cb760cd5e5a1071351f2df9f9aa4
+"es-define-property@npm:^1.0.0, es-define-property@npm:^1.0.1":
+  version: 1.0.1
+  resolution: "es-define-property@npm:1.0.1"
+  checksum: 10c0/3f54eb49c16c18707949ff25a1456728c883e81259f045003499efba399c08bad00deebf65cccde8c0e07908c1a225c9d472b7107e558f2a48e28d530e34527c
   languageName: node
   linkType: hard
 
@@ -3141,9 +3021,9 @@ __metadata:
   languageName: node
   linkType: hard
 
-"es-iterator-helpers@npm:^1.0.19":
-  version: 1.0.19
-  resolution: "es-iterator-helpers@npm:1.0.19"
+"es-iterator-helpers@npm:^1.1.0":
+  version: 1.2.0
+  resolution: "es-iterator-helpers@npm:1.2.0"
   dependencies:
     call-bind: "npm:^1.0.7"
     define-properties: "npm:^1.2.1"
@@ -3152,14 +3032,15 @@ __metadata:
     es-set-tostringtag: "npm:^2.0.3"
     function-bind: "npm:^1.1.2"
     get-intrinsic: "npm:^1.2.4"
-    globalthis: "npm:^1.0.3"
+    globalthis: "npm:^1.0.4"
+    gopd: "npm:^1.0.1"
     has-property-descriptors: "npm:^1.0.2"
     has-proto: "npm:^1.0.3"
     has-symbols: "npm:^1.0.3"
     internal-slot: "npm:^1.0.7"
-    iterator.prototype: "npm:^1.1.2"
+    iterator.prototype: "npm:^1.1.3"
     safe-array-concat: "npm:^1.1.2"
-  checksum: 10c0/ae8f0241e383b3d197383b9842c48def7fce0255fb6ed049311b686ce295595d9e389b466f6a1b7d4e7bb92d82f5e716d6fae55e20c1040249bf976743b038c5
+  checksum: 10c0/2bd60580dfeae353f5b80445d2808da745e97eeacdb663a8c4d99a12046873830a06d377e9d5e88fe54eece7c94319a5ce5a01220e24d71394ceca8d3ef621d7
   languageName: node
   linkType: hard
 
@@ -3193,30 +3074,23 @@ __metadata:
   linkType: hard
 
 "es-to-primitive@npm:^1.2.1":
-  version: 1.2.1
-  resolution: "es-to-primitive@npm:1.2.1"
+  version: 1.3.0
+  resolution: "es-to-primitive@npm:1.3.0"
   dependencies:
-    is-callable: "npm:^1.1.4"
-    is-date-object: "npm:^1.0.1"
-    is-symbol: "npm:^1.0.2"
-  checksum: 10c0/0886572b8dc075cb10e50c0af62a03d03a68e1e69c388bd4f10c0649ee41b1fbb24840a1b7e590b393011b5cdbe0144b776da316762653685432df37d6de60f1
+    is-callable: "npm:^1.2.7"
+    is-date-object: "npm:^1.0.5"
+    is-symbol: "npm:^1.0.4"
+  checksum: 10c0/c7e87467abb0b438639baa8139f701a06537d2b9bc758f23e8622c3b42fd0fdb5bde0f535686119e446dd9d5e4c0f238af4e14960f4771877cf818d023f6730b
   languageName: node
   linkType: hard
 
-"escalade@npm:^3.1.1, escalade@npm:^3.1.2":
+"escalade@npm:^3.1.1, escalade@npm:^3.2.0":
   version: 3.2.0
   resolution: "escalade@npm:3.2.0"
   checksum: 10c0/ced4dd3a78e15897ed3be74e635110bbf3b08877b0a41be50dcb325ee0e0b5f65fc2d50e9845194d7c4633f327e2e1c6cce00a71b617c5673df0374201d67f65
   languageName: node
   linkType: hard
 
-"escape-string-regexp@npm:^1.0.5":
-  version: 1.0.5
-  resolution: "escape-string-regexp@npm:1.0.5"
-  checksum: 10c0/a968ad453dd0c2724e14a4f20e177aaf32bb384ab41b674a8454afe9a41c5e6fe8903323e0a1052f56289d04bd600f81278edf140b0fcc02f5cac98d0f5b5371
-  languageName: node
-  linkType: hard
-
 "escape-string-regexp@npm:^2.0.0":
   version: 2.0.0
   resolution: "escape-string-regexp@npm:2.0.0"
@@ -3317,17 +3191,17 @@ __metadata:
   linkType: hard
 
 "eslint-import-resolver-typescript@npm:^3.5.2":
-  version: 3.6.3
-  resolution: "eslint-import-resolver-typescript@npm:3.6.3"
+  version: 3.7.0
+  resolution: "eslint-import-resolver-typescript@npm:3.7.0"
   dependencies:
     "@nolyfill/is-core-module": "npm:1.0.39"
-    debug: "npm:^4.3.5"
+    debug: "npm:^4.3.7"
     enhanced-resolve: "npm:^5.15.0"
-    eslint-module-utils: "npm:^2.8.1"
     fast-glob: "npm:^3.3.2"
     get-tsconfig: "npm:^4.7.5"
     is-bun-module: "npm:^1.0.2"
     is-glob: "npm:^4.0.3"
+    stable-hash: "npm:^0.0.4"
   peerDependencies:
     eslint: "*"
     eslint-plugin-import: "*"
@@ -3337,19 +3211,19 @@ __metadata:
       optional: true
     eslint-plugin-import-x:
       optional: true
-  checksum: 10c0/5933b00791b7b077725b9ba9a85327d2e2dc7c8944c18a868feb317a0bf0e1e77aed2254c9c5e24dcc49360d119331d2c15281837f4269592965ace380a75111
+  checksum: 10c0/b1dec542a31486b3b5730f71f08a8ee2ac4915dbc4aa1493fd15bc8fcadcb029772ab39a425824c235045b3a7e629290a339d4a7e7f3dd32b24e715106352d40
   languageName: node
   linkType: hard
 
-"eslint-module-utils@npm:^2.8.1, eslint-module-utils@npm:^2.9.0":
-  version: 2.11.0
-  resolution: "eslint-module-utils@npm:2.11.0"
+"eslint-module-utils@npm:^2.12.0":
+  version: 2.12.0
+  resolution: "eslint-module-utils@npm:2.12.0"
   dependencies:
     debug: "npm:^3.2.7"
   peerDependenciesMeta:
     eslint:
       optional: true
-  checksum: 10c0/c1b02e83429878ab22596f17a5ac138e51a520e96a5ef89a5a6698769a2d174ab28302d45eb563c0fc418d21a5842e328c37a6e8f294bf2e64e675ba55203dd7
+  checksum: 10c0/4d8b46dcd525d71276f9be9ffac1d2be61c9d54cc53c992e6333cf957840dee09381842b1acbbb15fc6b255ebab99cd481c5007ab438e5455a14abe1a0468558
   languageName: node
   linkType: hard
 
@@ -3366,18 +3240,18 @@ __metadata:
   linkType: hard
 
 "eslint-plugin-i18next@npm:^6.0.3":
-  version: 6.1.0
-  resolution: "eslint-plugin-i18next@npm:6.1.0"
+  version: 6.1.1
+  resolution: "eslint-plugin-i18next@npm:6.1.1"
   dependencies:
     lodash: "npm:^4.17.21"
     requireindex: "npm:~1.1.0"
-  checksum: 10c0/06c36df0de8cc0043c54c3e881d89b51558ed0b8c9dbff6f9cc9028e8df789a254921b7fad1427ce25790bbd8b99089ae413f95742e3536992be6e709cdee302
+  checksum: 10c0/38b29ad0a8385ab4b9cb7667b8ae082fdf59757d697c2532a324a216ebaa0e0b309ef4088741e42aff8160e186b5076cfa0cc159e0fd869aaf79f443608ea8d8
   languageName: node
   linkType: hard
 
 "eslint-plugin-import@npm:^2.27.5, eslint-plugin-import@npm:^2.28.1":
-  version: 2.30.0
-  resolution: "eslint-plugin-import@npm:2.30.0"
+  version: 2.31.0
+  resolution: "eslint-plugin-import@npm:2.31.0"
   dependencies:
     "@rtsao/scc": "npm:^1.1.0"
     array-includes: "npm:^3.1.8"
@@ -3387,7 +3261,7 @@ __metadata:
     debug: "npm:^3.2.7"
     doctrine: "npm:^2.1.0"
     eslint-import-resolver-node: "npm:^0.3.9"
-    eslint-module-utils: "npm:^2.9.0"
+    eslint-module-utils: "npm:^2.12.0"
     hasown: "npm:^2.0.2"
     is-core-module: "npm:^2.15.1"
     is-glob: "npm:^4.0.3"
@@ -3396,18 +3270,19 @@ __metadata:
     object.groupby: "npm:^1.0.3"
     object.values: "npm:^1.2.0"
     semver: "npm:^6.3.1"
+    string.prototype.trimend: "npm:^1.0.8"
     tsconfig-paths: "npm:^3.15.0"
   peerDependencies:
-    eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8
-  checksum: 10c0/4c9dcb1f27505c4d5dd891d2b551f56c70786d136aa3992a77e785bdc67c9f60200a2c7fb0ce55b7647fe550b12bc433d5dfa59e2c00ab44227791c5ab86badf
+    eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9
+  checksum: 10c0/e21d116ddd1900e091ad120b3eb68c5dd5437fe2c930f1211781cd38b246f090a6b74d5f3800b8255a0ed29782591521ad44eb21c5534960a8f1fb4040fd913a
   languageName: node
   linkType: hard
 
 "eslint-plugin-jsx-a11y@npm:^6.7.1":
-  version: 6.10.0
-  resolution: "eslint-plugin-jsx-a11y@npm:6.10.0"
+  version: 6.10.2
+  resolution: "eslint-plugin-jsx-a11y@npm:6.10.2"
   dependencies:
-    aria-query: "npm:~5.1.3"
+    aria-query: "npm:^5.3.2"
     array-includes: "npm:^3.1.8"
     array.prototype.flatmap: "npm:^1.3.2"
     ast-types-flow: "npm:^0.0.8"
@@ -3415,17 +3290,16 @@ __metadata:
     axobject-query: "npm:^4.1.0"
     damerau-levenshtein: "npm:^1.0.8"
     emoji-regex: "npm:^9.2.2"
-    es-iterator-helpers: "npm:^1.0.19"
     hasown: "npm:^2.0.2"
     jsx-ast-utils: "npm:^3.3.5"
     language-tags: "npm:^1.0.9"
     minimatch: "npm:^3.1.2"
     object.fromentries: "npm:^2.0.8"
     safe-regex-test: "npm:^1.0.3"
-    string.prototype.includes: "npm:^2.0.0"
+    string.prototype.includes: "npm:^2.0.1"
   peerDependencies:
     eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9
-  checksum: 10c0/9f8e29a3317fb6a82e2ecd333fe0fab3a69fff786d087eb65dc723d6e954473ab681d14a252d7cb2971f5e7f68816cb6f7731766558e1833a77bd73af1b5ab34
+  checksum: 10c0/d93354e03b0cf66f018d5c50964e074dffe4ddf1f9b535fa020d19c4ae45f89c1a16e9391ca61ac3b19f7042c751ac0d361a056a65cbd1de24718a53ff8daa6e
   languageName: node
   linkType: hard
 
@@ -3484,15 +3358,15 @@ __metadata:
   linkType: hard
 
 "eslint-plugin-react@npm:^7.32.2, eslint-plugin-react@npm:^7.33.2":
-  version: 7.36.1
-  resolution: "eslint-plugin-react@npm:7.36.1"
+  version: 7.37.2
+  resolution: "eslint-plugin-react@npm:7.37.2"
   dependencies:
     array-includes: "npm:^3.1.8"
     array.prototype.findlast: "npm:^1.2.5"
     array.prototype.flatmap: "npm:^1.3.2"
     array.prototype.tosorted: "npm:^1.1.4"
     doctrine: "npm:^2.1.0"
-    es-iterator-helpers: "npm:^1.0.19"
+    es-iterator-helpers: "npm:^1.1.0"
     estraverse: "npm:^5.3.0"
     hasown: "npm:^2.0.2"
     jsx-ast-utils: "npm:^2.4.1 || ^3.0.0"
@@ -3507,7 +3381,7 @@ __metadata:
     string.prototype.repeat: "npm:^1.0.0"
   peerDependencies:
     eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7
-  checksum: 10c0/8cb37f7fb351213bc44263580ff77627e14e27870fd81dae593e3de2826340b9bd8bbac7ae00fd5de69751a0660b2e51bd26760596f4ae85548f6b1bd76706e6
+  checksum: 10c0/01c498f263c201698bf653973760f86a07fa0cdec56c044f3eaa5ddaae71c64326015dfa5fde76ca8c5386ffe789fc79932624b614e13b6a1ad789fee3f7c491
   languageName: node
   linkType: hard
 
@@ -3559,7 +3433,7 @@ __metadata:
   languageName: node
   linkType: hard
 
-"eslint-visitor-keys@npm:^3.3.0, eslint-visitor-keys@npm:^3.4.1, eslint-visitor-keys@npm:^3.4.3":
+"eslint-visitor-keys@npm:^3.4.1, eslint-visitor-keys@npm:^3.4.3":
   version: 3.4.3
   resolution: "eslint-visitor-keys@npm:3.4.3"
   checksum: 10c0/92708e882c0a5ffd88c23c0b404ac1628cf20104a108c745f240a13c332a11aac54f49a22d5762efbffc18ecbc9a580d1b7ad034bf5f3cc3307e5cbff2ec9820
@@ -3725,7 +3599,7 @@ __metadata:
   languageName: node
   linkType: hard
 
-"fast-glob@npm:^3.2.9, fast-glob@npm:^3.3.0, fast-glob@npm:^3.3.2":
+"fast-glob@npm:^3.2.9, fast-glob@npm:^3.3.2":
   version: 3.3.2
   resolution: "fast-glob@npm:3.3.2"
   dependencies:
@@ -3820,9 +3694,9 @@ __metadata:
   linkType: hard
 
 "flatted@npm:^3.2.9":
-  version: 3.3.1
-  resolution: "flatted@npm:3.3.1"
-  checksum: 10c0/324166b125ee07d4ca9bcf3a5f98d915d5db4f39d711fba640a3178b959919aae1f7cfd8aabcfef5826ed8aa8a2aa14cc85b2d7d18ff638ddf4ae3df39573eaf
+  version: 3.3.2
+  resolution: "flatted@npm:3.3.2"
+  checksum: 10c0/24cc735e74d593b6c767fe04f2ef369abe15b62f6906158079b9874bdb3ee5ae7110bb75042e70cd3f99d409d766f357caf78d5ecee9780206f5fdc5edbad334
   languageName: node
   linkType: hard
 
@@ -3846,13 +3720,13 @@ __metadata:
   linkType: hard
 
 "form-data@npm:^4.0.0":
-  version: 4.0.0
-  resolution: "form-data@npm:4.0.0"
+  version: 4.0.1
+  resolution: "form-data@npm:4.0.1"
   dependencies:
     asynckit: "npm:^0.4.0"
     combined-stream: "npm:^1.0.8"
     mime-types: "npm:^2.1.12"
-  checksum: 10c0/cb6f3ac49180be03ff07ba3ff125f9eba2ff0b277fb33c7fc47569fc5e616882c5b1c69b9904c4c4187e97dd0419dd03b134174756f296dec62041e6527e2c6e
+  checksum: 10c0/bb102d570be8592c23f4ea72d7df9daa50c7792eb0cf1c5d7e506c1706e7426a4e4ae48a35b109e91c85f1c0ec63774a21ae252b66f4eb981cb8efef7d0463c8
   languageName: node
   linkType: hard
 
@@ -3870,15 +3744,6 @@ __metadata:
   languageName: node
   linkType: hard
 
-"fs-minipass@npm:^2.0.0":
-  version: 2.1.0
-  resolution: "fs-minipass@npm:2.1.0"
-  dependencies:
-    minipass: "npm:^3.0.0"
-  checksum: 10c0/703d16522b8282d7299337539c3ed6edddd1afe82435e4f5b76e34a79cd74e488a8a0e26a636afc2440e1a23b03878e2122e3a2cfe375a5cf63c37d92b86a004
-  languageName: node
-  linkType: hard
-
 "fs-minipass@npm:^3.0.0":
   version: 3.0.3
   resolution: "fs-minipass@npm:3.0.3"
@@ -3954,16 +3819,21 @@ __metadata:
   languageName: node
   linkType: hard
 
-"get-intrinsic@npm:^1.1.3, get-intrinsic@npm:^1.2.1, get-intrinsic@npm:^1.2.2, get-intrinsic@npm:^1.2.3, get-intrinsic@npm:^1.2.4":
-  version: 1.2.4
-  resolution: "get-intrinsic@npm:1.2.4"
+"get-intrinsic@npm:^1.1.3, get-intrinsic@npm:^1.2.1, get-intrinsic@npm:^1.2.2, get-intrinsic@npm:^1.2.3, get-intrinsic@npm:^1.2.4, get-intrinsic@npm:^1.2.5, get-intrinsic@npm:^1.2.6":
+  version: 1.2.6
+  resolution: "get-intrinsic@npm:1.2.6"
   dependencies:
+    call-bind-apply-helpers: "npm:^1.0.1"
+    dunder-proto: "npm:^1.0.0"
+    es-define-property: "npm:^1.0.1"
     es-errors: "npm:^1.3.0"
+    es-object-atoms: "npm:^1.0.0"
     function-bind: "npm:^1.1.2"
-    has-proto: "npm:^1.0.1"
-    has-symbols: "npm:^1.0.3"
-    hasown: "npm:^2.0.0"
-  checksum: 10c0/0a9b82c16696ed6da5e39b1267104475c47e3a9bdbe8b509dfe1710946e38a87be70d759f4bb3cda042d76a41ef47fe769660f3b7c0d1f68750299344ffb15b7
+    gopd: "npm:^1.2.0"
+    has-symbols: "npm:^1.1.0"
+    hasown: "npm:^2.0.2"
+    math-intrinsics: "npm:^1.0.0"
+  checksum: 10c0/0f1ea6d807d97d074e8a31ac698213a12757fcfa9a8f4778263d2e4702c40fe83198aadd3dba2e99aabc2e4cf8a38345545dbb0518297d3df8b00b56a156c32a
   languageName: node
   linkType: hard
 
@@ -4034,7 +3904,7 @@ __metadata:
   languageName: node
   linkType: hard
 
-"glob@npm:^10.2.2, glob@npm:^10.3.10":
+"glob@npm:^10.2.2, glob@npm:^10.3.10, glob@npm:^10.3.7":
   version: 10.4.5
   resolution: "glob@npm:10.4.5"
   dependencies:
@@ -4080,7 +3950,7 @@ __metadata:
   languageName: node
   linkType: hard
 
-"globalthis@npm:^1.0.3":
+"globalthis@npm:^1.0.4":
   version: 1.0.4
   resolution: "globalthis@npm:1.0.4"
   dependencies:
@@ -4104,12 +3974,10 @@ __metadata:
   languageName: node
   linkType: hard
 
-"gopd@npm:^1.0.1":
-  version: 1.0.1
-  resolution: "gopd@npm:1.0.1"
-  dependencies:
-    get-intrinsic: "npm:^1.1.3"
-  checksum: 10c0/505c05487f7944c552cee72087bf1567debb470d4355b1335f2c262d218ebbff805cd3715448fe29b4b380bae6912561d0467233e4165830efd28da241418c63
+"gopd@npm:^1.0.1, gopd@npm:^1.2.0":
+  version: 1.2.0
+  resolution: "gopd@npm:1.2.0"
+  checksum: 10c0/50fff1e04ba2b7737c097358534eacadad1e68d24cccee3272e04e007bed008e68d2614f3987788428fd192a5ae3889d08fb2331417e4fc4a9ab366b2043cead
   languageName: node
   linkType: hard
 
@@ -4127,20 +3995,13 @@ __metadata:
   languageName: node
   linkType: hard
 
-"has-bigints@npm:^1.0.1, has-bigints@npm:^1.0.2":
+"has-bigints@npm:^1.0.2":
   version: 1.0.2
   resolution: "has-bigints@npm:1.0.2"
   checksum: 10c0/724eb1485bfa3cdff6f18d95130aa190561f00b3fcf9f19dc640baf8176b5917c143b81ec2123f8cddb6c05164a198c94b13e1377c497705ccc8e1a80306e83b
   languageName: node
   linkType: hard
 
-"has-flag@npm:^3.0.0":
-  version: 3.0.0
-  resolution: "has-flag@npm:3.0.0"
-  checksum: 10c0/1c6c83b14b8b1b3c25b0727b8ba3e3b647f99e9e6e13eb7322107261de07a4c1be56fc0d45678fc376e09772a3a1642ccdaf8fc69bdf123b6c086598397ce473
-  languageName: node
-  linkType: hard
-
 "has-flag@npm:^4.0.0":
   version: 4.0.0
   resolution: "has-flag@npm:4.0.0"
@@ -4157,17 +4018,19 @@ __metadata:
   languageName: node
   linkType: hard
 
-"has-proto@npm:^1.0.1, has-proto@npm:^1.0.3":
-  version: 1.0.3
-  resolution: "has-proto@npm:1.0.3"
-  checksum: 10c0/35a6989f81e9f8022c2f4027f8b48a552de714938765d019dbea6bb547bd49ce5010a3c7c32ec6ddac6e48fc546166a3583b128f5a7add8b058a6d8b4afec205
+"has-proto@npm:^1.0.3":
+  version: 1.2.0
+  resolution: "has-proto@npm:1.2.0"
+  dependencies:
+    dunder-proto: "npm:^1.0.0"
+  checksum: 10c0/46538dddab297ec2f43923c3d35237df45d8c55a6fc1067031e04c13ed8a9a8f94954460632fd4da84c31a1721eefee16d901cbb1ae9602bab93bb6e08f93b95
   languageName: node
   linkType: hard
 
-"has-symbols@npm:^1.0.2, has-symbols@npm:^1.0.3":
-  version: 1.0.3
-  resolution: "has-symbols@npm:1.0.3"
-  checksum: 10c0/e6922b4345a3f37069cdfe8600febbca791c94988c01af3394d86ca3360b4b93928bbf395859158f88099cb10b19d98e3bbab7c9ff2c1bd09cf665ee90afa2c3
+"has-symbols@npm:^1.0.3, has-symbols@npm:^1.1.0":
+  version: 1.1.0
+  resolution: "has-symbols@npm:1.1.0"
+  checksum: 10c0/dde0a734b17ae51e84b10986e651c664379018d10b91b6b0e9b293eddb32f0f069688c841fb40f19e9611546130153e0a2a48fd7f512891fb000ddfa36f5a20e
   languageName: node
   linkType: hard
 
@@ -4244,12 +4107,12 @@ __metadata:
   linkType: hard
 
 "https-proxy-agent@npm:^7.0.1":
-  version: 7.0.5
-  resolution: "https-proxy-agent@npm:7.0.5"
+  version: 7.0.6
+  resolution: "https-proxy-agent@npm:7.0.6"
   dependencies:
-    agent-base: "npm:^7.0.2"
+    agent-base: "npm:^7.1.2"
     debug: "npm:4"
-  checksum: 10c0/2490e3acec397abeb88807db52cac59102d5ed758feee6df6112ab3ccd8325e8a1ce8bce6f4b66e5470eca102d31e425ace904242e4fa28dbe0c59c4bafa7b2c
+  checksum: 10c0/f729219bc735edb621fa30e6e84e60ee5d00802b8247aac0d7b79b0bd6d4b3294737a337b93b86a0bd9e68099d031858a39260c976dc14cdbba238ba1f8779ac
   languageName: node
   linkType: hard
 
@@ -4261,11 +4124,11 @@ __metadata:
   linkType: hard
 
 "husky@npm:^9.0.11":
-  version: 9.1.6
-  resolution: "husky@npm:9.1.6"
+  version: 9.1.7
+  resolution: "husky@npm:9.1.7"
   bin:
     husky: bin.js
-  checksum: 10c0/705673db4a247c1febd9c5df5f6a3519106cf0335845027bb50a15fba9b1f542cb2610932ede96fd08008f6d9f49db0f15560509861808b0031cdc0e7c798bac
+  checksum: 10c0/35bb110a71086c48906aa7cd3ed4913fb913823715359d65e32e0b964cb1e255593b0ae8014a5005c66a68e6fa66c38dcfa8056dbbdfb8b0187c0ffe7ee3a58f
   languageName: node
   linkType: hard
 
@@ -4372,12 +4235,12 @@ __metadata:
   linkType: hard
 
 "is-arguments@npm:^1.1.1":
-  version: 1.1.1
-  resolution: "is-arguments@npm:1.1.1"
+  version: 1.2.0
+  resolution: "is-arguments@npm:1.2.0"
   dependencies:
-    call-bind: "npm:^1.0.2"
-    has-tostringtag: "npm:^1.0.0"
-  checksum: 10c0/5ff1f341ee4475350adfc14b2328b38962564b7c2076be2f5bac7bd9b61779efba99b9f844a7b82ba7654adccf8e8eb19d1bb0cc6d1c1a085e498f6793d4328f
+    call-bound: "npm:^1.0.2"
+    has-tostringtag: "npm:^1.0.2"
+  checksum: 10c0/6377344b31e9fcb707c6751ee89b11f132f32338e6a782ec2eac9393b0cbd32235dad93052998cda778ee058754860738341d8114910d50ada5615912bb929fc
   languageName: node
   linkType: hard
 
@@ -4414,12 +4277,12 @@ __metadata:
   languageName: node
   linkType: hard
 
-"is-bigint@npm:^1.0.1":
-  version: 1.0.4
-  resolution: "is-bigint@npm:1.0.4"
+"is-bigint@npm:^1.1.0":
+  version: 1.1.0
+  resolution: "is-bigint@npm:1.1.0"
   dependencies:
-    has-bigints: "npm:^1.0.1"
-  checksum: 10c0/eb9c88e418a0d195ca545aff2b715c9903d9b0a5033bc5922fec600eb0c3d7b1ee7f882dbf2e0d5a6e694e42391be3683e4368737bd3c4a77f8ac293e7773696
+    has-bigints: "npm:^1.0.2"
+  checksum: 10c0/f4f4b905ceb195be90a6ea7f34323bf1c18e3793f18922e3e9a73c684c29eeeeff5175605c3a3a74cc38185fe27758f07efba3dbae812e5c5afbc0d2316b40e4
   languageName: node
   linkType: hard
 
@@ -4432,26 +4295,26 @@ __metadata:
   languageName: node
   linkType: hard
 
-"is-boolean-object@npm:^1.1.0":
-  version: 1.1.2
-  resolution: "is-boolean-object@npm:1.1.2"
+"is-boolean-object@npm:^1.2.0":
+  version: 1.2.1
+  resolution: "is-boolean-object@npm:1.2.1"
   dependencies:
-    call-bind: "npm:^1.0.2"
-    has-tostringtag: "npm:^1.0.0"
-  checksum: 10c0/6090587f8a8a8534c0f816da868bc94f32810f08807aa72fa7e79f7e11c466d281486ffe7a788178809c2aa71fe3e700b167fe80dd96dad68026bfff8ebf39f7
+    call-bound: "npm:^1.0.2"
+    has-tostringtag: "npm:^1.0.2"
+  checksum: 10c0/2ef601d255a39fdbde79cfe6be80c27b47430ed6712407f29b17d002e20f64c1e3d6692f1d842ba16bf1e9d8ddf1c4f13cac3ed7d9a4a21290f44879ebb4e8f5
   languageName: node
   linkType: hard
 
 "is-bun-module@npm:^1.0.2":
-  version: 1.2.1
-  resolution: "is-bun-module@npm:1.2.1"
+  version: 1.3.0
+  resolution: "is-bun-module@npm:1.3.0"
   dependencies:
     semver: "npm:^7.6.3"
-  checksum: 10c0/819e63cd4468265a3e89cdc241554e37aeb85e40375a56dd559c022f4395491273267a0f843274fda6cad1eac3b0f8dc6d9e06cc349e33e2bf45098761184736
+  checksum: 10c0/2966744188fcd28e0123c52158c7073973f88babfa9ab04e2846ec5862d6b0f8f398df6413429d930f7c5ee6111ce2cbfb3eb8652d9ec42d4a37dc5089a866fb
   languageName: node
   linkType: hard
 
-"is-callable@npm:^1.1.3, is-callable@npm:^1.1.4, is-callable@npm:^1.2.7":
+"is-callable@npm:^1.1.3, is-callable@npm:^1.2.7":
   version: 1.2.7
   resolution: "is-callable@npm:1.2.7"
   checksum: 10c0/ceebaeb9d92e8adee604076971dd6000d38d6afc40bb843ea8e45c5579b57671c3f3b50d7f04869618242c6cee08d1b67806a8cb8edaaaf7c0748b3720d6066f
@@ -4468,20 +4331,23 @@ __metadata:
   linkType: hard
 
 "is-data-view@npm:^1.0.1":
-  version: 1.0.1
-  resolution: "is-data-view@npm:1.0.1"
+  version: 1.0.2
+  resolution: "is-data-view@npm:1.0.2"
   dependencies:
+    call-bound: "npm:^1.0.2"
+    get-intrinsic: "npm:^1.2.6"
     is-typed-array: "npm:^1.1.13"
-  checksum: 10c0/a3e6ec84efe303da859107aed9b970e018e2bee7ffcb48e2f8096921a493608134240e672a2072577e5f23a729846241d9634806e8a0e51d9129c56d5f65442d
+  checksum: 10c0/ef3548a99d7e7f1370ce21006baca6d40c73e9f15c941f89f0049c79714c873d03b02dae1c64b3f861f55163ecc16da06506c5b8a1d4f16650b3d9351c380153
   languageName: node
   linkType: hard
 
-"is-date-object@npm:^1.0.1, is-date-object@npm:^1.0.5":
-  version: 1.0.5
-  resolution: "is-date-object@npm:1.0.5"
+"is-date-object@npm:^1.0.5, is-date-object@npm:^1.1.0":
+  version: 1.1.0
+  resolution: "is-date-object@npm:1.1.0"
   dependencies:
-    has-tostringtag: "npm:^1.0.0"
-  checksum: 10c0/eed21e5dcc619c48ccef804dfc83a739dbb2abee6ca202838ee1bd5f760fe8d8a93444f0d49012ad19bb7c006186e2884a1b92f6e1c056da7fd23d0a9ad5992e
+    call-bound: "npm:^1.0.2"
+    has-tostringtag: "npm:^1.0.2"
+  checksum: 10c0/1a4d199c8e9e9cac5128d32e6626fa7805175af9df015620ac0d5d45854ccf348ba494679d872d37301032e35a54fc7978fba1687e8721b2139aea7870cafa2f
   languageName: node
   linkType: hard
 
@@ -4492,12 +4358,12 @@ __metadata:
   languageName: node
   linkType: hard
 
-"is-finalizationregistry@npm:^1.0.2":
-  version: 1.0.2
-  resolution: "is-finalizationregistry@npm:1.0.2"
+"is-finalizationregistry@npm:^1.1.0":
+  version: 1.1.0
+  resolution: "is-finalizationregistry@npm:1.1.0"
   dependencies:
-    call-bind: "npm:^1.0.2"
-  checksum: 10c0/81caecc984d27b1a35c68741156fc651fb1fa5e3e6710d21410abc527eb226d400c0943a167922b2e920f6b3e58b0dede9aa795882b038b85f50b3a4b877db86
+    call-bind: "npm:^1.0.7"
+  checksum: 10c0/1cd94236bfb6e060fe2b973c8726a2782727f7d495b3e8e1d51d3e619c5a3345413706f555956eb5b12af15eba0414118f64a1b19d793ec36b5e6767a13836ac
   languageName: node
   linkType: hard
 
@@ -4533,13 +4399,6 @@ __metadata:
   languageName: node
   linkType: hard
 
-"is-lambda@npm:^1.0.1":
-  version: 1.0.1
-  resolution: "is-lambda@npm:1.0.1"
-  checksum: 10c0/85fee098ae62ba6f1e24cf22678805473c7afd0fb3978a3aa260e354cb7bcb3a5806cf0a98403188465efedec41ab4348e8e4e79305d409601323855b3839d4d
-  languageName: node
-  linkType: hard
-
 "is-map@npm:^2.0.2, is-map@npm:^2.0.3":
   version: 2.0.3
   resolution: "is-map@npm:2.0.3"
@@ -4554,12 +4413,13 @@ __metadata:
   languageName: node
   linkType: hard
 
-"is-number-object@npm:^1.0.4":
-  version: 1.0.7
-  resolution: "is-number-object@npm:1.0.7"
+"is-number-object@npm:^1.1.0":
+  version: 1.1.0
+  resolution: "is-number-object@npm:1.1.0"
   dependencies:
-    has-tostringtag: "npm:^1.0.0"
-  checksum: 10c0/aad266da1e530f1804a2b7bd2e874b4869f71c98590b3964f9d06cc9869b18f8d1f4778f838ecd2a11011bce20aeecb53cb269ba916209b79c24580416b74b1b
+    call-bind: "npm:^1.0.7"
+    has-tostringtag: "npm:^1.0.2"
+  checksum: 10c0/29d575b5c54ff13f824858d8f7da4cf27131c59858744ec94e96be7b7d2de81038971c15a2636b38fa9eece3797c14bf8de898e1b30afc2f5c1df5cea9f06a8e
   languageName: node
   linkType: hard
 
@@ -4584,13 +4444,15 @@ __metadata:
   languageName: node
   linkType: hard
 
-"is-regex@npm:^1.1.4":
-  version: 1.1.4
-  resolution: "is-regex@npm:1.1.4"
+"is-regex@npm:^1.1.4, is-regex@npm:^1.2.1":
+  version: 1.2.1
+  resolution: "is-regex@npm:1.2.1"
   dependencies:
-    call-bind: "npm:^1.0.2"
-    has-tostringtag: "npm:^1.0.0"
-  checksum: 10c0/bb72aae604a69eafd4a82a93002058c416ace8cde95873589a97fc5dac96a6c6c78a9977d487b7b95426a8f5073969124dd228f043f9f604f041f32fcc465fc1
+    call-bound: "npm:^1.0.2"
+    gopd: "npm:^1.2.0"
+    has-tostringtag: "npm:^1.0.2"
+    hasown: "npm:^2.0.2"
+  checksum: 10c0/1d3715d2b7889932349241680032e85d0b492cfcb045acb75ffc2c3085e8d561184f1f7e84b6f8321935b4aea39bc9c6ba74ed595b57ce4881a51dfdbc214e04
   languageName: node
   linkType: hard
 
@@ -4617,21 +4479,24 @@ __metadata:
   languageName: node
   linkType: hard
 
-"is-string@npm:^1.0.5, is-string@npm:^1.0.7":
-  version: 1.0.7
-  resolution: "is-string@npm:1.0.7"
+"is-string@npm:^1.0.7, is-string@npm:^1.1.0":
+  version: 1.1.0
+  resolution: "is-string@npm:1.1.0"
   dependencies:
-    has-tostringtag: "npm:^1.0.0"
-  checksum: 10c0/905f805cbc6eedfa678aaa103ab7f626aac9ebbdc8737abb5243acaa61d9820f8edc5819106b8fcd1839e33db21de9f0116ae20de380c8382d16dc2a601921f6
+    call-bind: "npm:^1.0.7"
+    has-tostringtag: "npm:^1.0.2"
+  checksum: 10c0/2781bce7bfdb00276d000a7aafccad8038a7b5cb06abbfc638417a705dd41bca259977af78731dc8a87f170783c94c9f684bc086fc4856b623c1fd942c509b6b
   languageName: node
   linkType: hard
 
-"is-symbol@npm:^1.0.2, is-symbol@npm:^1.0.3":
-  version: 1.0.4
-  resolution: "is-symbol@npm:1.0.4"
+"is-symbol@npm:^1.0.4, is-symbol@npm:^1.1.0":
+  version: 1.1.1
+  resolution: "is-symbol@npm:1.1.1"
   dependencies:
-    has-symbols: "npm:^1.0.2"
-  checksum: 10c0/9381dd015f7c8906154dbcbf93fad769de16b4b961edc94f88d26eb8c555935caa23af88bda0c93a18e65560f6d7cca0fd5a3f8a8e1df6f1abbb9bead4502ef7
+    call-bound: "npm:^1.0.2"
+    has-symbols: "npm:^1.1.0"
+    safe-regex-test: "npm:^1.1.0"
+  checksum: 10c0/f08f3e255c12442e833f75a9e2b84b2d4882fdfd920513cf2a4a2324f0a5b076c8fd913778e3ea5d258d5183e9d92c0cd20e04b03ab3df05316b049b2670af1e
   languageName: node
   linkType: hard
 
@@ -4766,16 +4631,17 @@ __metadata:
   languageName: node
   linkType: hard
 
-"iterator.prototype@npm:^1.1.2":
-  version: 1.1.2
-  resolution: "iterator.prototype@npm:1.1.2"
+"iterator.prototype@npm:^1.1.3":
+  version: 1.1.4
+  resolution: "iterator.prototype@npm:1.1.4"
   dependencies:
-    define-properties: "npm:^1.2.1"
-    get-intrinsic: "npm:^1.2.1"
-    has-symbols: "npm:^1.0.3"
-    reflect.getprototypeof: "npm:^1.0.4"
-    set-function-name: "npm:^2.0.1"
-  checksum: 10c0/a32151326095e916f306990d909f6bbf23e3221999a18ba686419535dcd1749b10ded505e89334b77dc4c7a58a8508978f0eb16c2c8573e6d412eb7eb894ea79
+    define-data-property: "npm:^1.1.4"
+    es-object-atoms: "npm:^1.0.0"
+    get-intrinsic: "npm:^1.2.6"
+    has-symbols: "npm:^1.1.0"
+    reflect.getprototypeof: "npm:^1.0.8"
+    set-function-name: "npm:^2.0.2"
+  checksum: 10c0/e63fcb5c1094192f43795b836fae9149a7dc2d445425958045e8e193df428407f909efca21bfdf0d885668ae8204681984afac7dd75478118e62f3cd3959c538
   languageName: node
   linkType: hard
 
@@ -5265,7 +5131,7 @@ __metadata:
   languageName: node
   linkType: hard
 
-"jiti@npm:^1.21.0":
+"jiti@npm:^1.21.6":
   version: 1.21.6
   resolution: "jiti@npm:1.21.6"
   bin:
@@ -5274,6 +5140,21 @@ __metadata:
   languageName: node
   linkType: hard
 
+"jotai@npm:^2.10.3":
+  version: 2.10.3
+  resolution: "jotai@npm:2.10.3"
+  peerDependencies:
+    "@types/react": ">=17.0.0"
+    react: ">=17.0.0"
+  peerDependenciesMeta:
+    "@types/react":
+      optional: true
+    react:
+      optional: true
+  checksum: 10c0/64f6536aaa91f77dacd8d9714fb846f254bfed6e5354b3005375433d72844f3ae1d6d893ee4dd423d5bddd109d393dd338e562da914605b31190989a3d47db35
+  languageName: node
+  linkType: hard
+
 "js-tokens@npm:^3.0.0 || ^4.0.0, js-tokens@npm:^4.0.0":
   version: 4.0.0
   resolution: "js-tokens@npm:4.0.0"
@@ -5350,12 +5231,12 @@ __metadata:
   languageName: node
   linkType: hard
 
-"jsesc@npm:^2.5.1":
-  version: 2.5.2
-  resolution: "jsesc@npm:2.5.2"
+"jsesc@npm:^3.0.2":
+  version: 3.1.0
+  resolution: "jsesc@npm:3.1.0"
   bin:
     jsesc: bin/jsesc
-  checksum: 10c0/dbf59312e0ebf2b4405ef413ec2b25abb5f8f4d9bc5fb8d9f90381622ebca5f2af6a6aa9a8578f65903f9e33990a6dc798edd0ce5586894bf0e9e31803a1de88
+  checksum: 10c0/531779df5ec94f47e462da26b4cbf05eb88a83d9f08aac2ba04206508fc598527a153d08bd462bae82fc78b3eaa1a908e1a4a79f886e9238641c4cdefaf118b1
   languageName: node
   linkType: hard
 
@@ -5468,13 +5349,6 @@ __metadata:
   languageName: node
   linkType: hard
 
-"lilconfig@npm:^2.1.0":
-  version: 2.1.0
-  resolution: "lilconfig@npm:2.1.0"
-  checksum: 10c0/64645641aa8d274c99338e130554abd6a0190533c0d9eb2ce7ebfaf2e05c7d9961f3ffe2bfa39efd3b60c521ba3dd24fa236fe2775fc38501bf82bf49d4678b8
-  languageName: node
-  linkType: hard
-
 "lilconfig@npm:^3.0.0":
   version: 3.1.2
   resolution: "lilconfig@npm:3.1.2"
@@ -5482,6 +5356,13 @@ __metadata:
   languageName: node
   linkType: hard
 
+"lilconfig@npm:^3.1.3":
+  version: 3.1.3
+  resolution: "lilconfig@npm:3.1.3"
+  checksum: 10c0/f5604e7240c5c275743561442fbc5abf2a84ad94da0f5adc71d25e31fa8483048de3dcedcb7a44112a942fed305fd75841cdf6c9681c7f640c63f1049e9a5dcc
+  languageName: node
+  linkType: hard
+
 "lines-and-columns@npm:^1.1.6":
   version: 1.2.4
   resolution: "lines-and-columns@npm:1.2.4"
@@ -5573,23 +5454,22 @@ __metadata:
   languageName: node
   linkType: hard
 
-"make-fetch-happen@npm:^13.0.0":
-  version: 13.0.1
-  resolution: "make-fetch-happen@npm:13.0.1"
+"make-fetch-happen@npm:^14.0.3":
+  version: 14.0.3
+  resolution: "make-fetch-happen@npm:14.0.3"
   dependencies:
-    "@npmcli/agent": "npm:^2.0.0"
-    cacache: "npm:^18.0.0"
+    "@npmcli/agent": "npm:^3.0.0"
+    cacache: "npm:^19.0.1"
     http-cache-semantics: "npm:^4.1.1"
-    is-lambda: "npm:^1.0.1"
     minipass: "npm:^7.0.2"
-    minipass-fetch: "npm:^3.0.0"
+    minipass-fetch: "npm:^4.0.0"
     minipass-flush: "npm:^1.0.5"
     minipass-pipeline: "npm:^1.2.4"
-    negotiator: "npm:^0.6.3"
-    proc-log: "npm:^4.2.0"
+    negotiator: "npm:^1.0.0"
+    proc-log: "npm:^5.0.0"
     promise-retry: "npm:^2.0.1"
-    ssri: "npm:^10.0.0"
-  checksum: 10c0/df5f4dbb6d98153b751bccf4dc4cc500de85a96a9331db9805596c46aa9f99d9555983954e6c1266d9f981ae37a9e4647f42b9a4bb5466f867f4012e582c9e7e
+    ssri: "npm:^12.0.0"
+  checksum: 10c0/c40efb5e5296e7feb8e37155bde8eb70bc57d731b1f7d90e35a092fde403d7697c56fb49334d92d330d6f1ca29a98142036d6480a12681133a0a1453164cb2f0
   languageName: node
   linkType: hard
 
@@ -5602,6 +5482,13 @@ __metadata:
   languageName: node
   linkType: hard
 
+"math-intrinsics@npm:^1.0.0":
+  version: 1.0.0
+  resolution: "math-intrinsics@npm:1.0.0"
+  checksum: 10c0/470ee2f267b4b3698eb9faa7f0bcf88696d87e2eeab25bba867dc676c09ddbae9b6f2e8ac7a2c1f0c9c2c5299c2a89f4f1f6d0e70d682725e2e7fca7507eef9f
+  languageName: node
+  linkType: hard
+
 "media-typer@npm:0.3.0":
   version: 0.3.0
   resolution: "media-typer@npm:0.3.0"
@@ -5637,7 +5524,7 @@ __metadata:
   languageName: node
   linkType: hard
 
-"micromatch@npm:^4.0.4, micromatch@npm:^4.0.5":
+"micromatch@npm:^4.0.4, micromatch@npm:^4.0.8":
   version: 4.0.8
   resolution: "micromatch@npm:4.0.8"
   dependencies:
@@ -5729,18 +5616,18 @@ __metadata:
   languageName: node
   linkType: hard
 
-"minipass-fetch@npm:^3.0.0":
-  version: 3.0.5
-  resolution: "minipass-fetch@npm:3.0.5"
+"minipass-fetch@npm:^4.0.0":
+  version: 4.0.0
+  resolution: "minipass-fetch@npm:4.0.0"
   dependencies:
     encoding: "npm:^0.1.13"
     minipass: "npm:^7.0.3"
     minipass-sized: "npm:^1.0.3"
-    minizlib: "npm:^2.1.2"
+    minizlib: "npm:^3.0.1"
   dependenciesMeta:
     encoding:
       optional: true
-  checksum: 10c0/9d702d57f556274286fdd97e406fc38a2f5c8d15e158b498d7393b1105974b21249289ec571fa2b51e038a4872bfc82710111cf75fae98c662f3d6f95e72152b
+  checksum: 10c0/7fa30ce7c373fb6f94c086b374fff1589fd7e78451855d2d06c2e2d9df936d131e73e952163063016592ed3081444bd8d1ea608533313b0149156ce23311da4b
   languageName: node
   linkType: hard
 
@@ -5780,36 +5667,29 @@ __metadata:
   languageName: node
   linkType: hard
 
-"minipass@npm:^5.0.0":
-  version: 5.0.0
-  resolution: "minipass@npm:5.0.0"
-  checksum: 10c0/a91d8043f691796a8ac88df039da19933ef0f633e3d7f0d35dcd5373af49131cf2399bfc355f41515dc495e3990369c3858cd319e5c2722b4753c90bf3152462
-  languageName: node
-  linkType: hard
-
-"minipass@npm:^5.0.0 || ^6.0.2 || ^7.0.0, minipass@npm:^7.0.2, minipass@npm:^7.0.3, minipass@npm:^7.1.2":
+"minipass@npm:^5.0.0 || ^6.0.2 || ^7.0.0, minipass@npm:^7.0.2, minipass@npm:^7.0.3, minipass@npm:^7.0.4, minipass@npm:^7.1.2":
   version: 7.1.2
   resolution: "minipass@npm:7.1.2"
   checksum: 10c0/b0fd20bb9fb56e5fa9a8bfac539e8915ae07430a619e4b86ff71f5fc757ef3924b23b2c4230393af1eda647ed3d75739e4e0acb250a6b1eb277cf7f8fe449557
   languageName: node
   linkType: hard
 
-"minizlib@npm:^2.1.1, minizlib@npm:^2.1.2":
-  version: 2.1.2
-  resolution: "minizlib@npm:2.1.2"
+"minizlib@npm:^3.0.1":
+  version: 3.0.1
+  resolution: "minizlib@npm:3.0.1"
   dependencies:
-    minipass: "npm:^3.0.0"
-    yallist: "npm:^4.0.0"
-  checksum: 10c0/64fae024e1a7d0346a1102bb670085b17b7f95bf6cfdf5b128772ec8faf9ea211464ea4add406a3a6384a7d87a0cd1a96263692134323477b4fb43659a6cab78
+    minipass: "npm:^7.0.4"
+    rimraf: "npm:^5.0.5"
+  checksum: 10c0/82f8bf70da8af656909a8ee299d7ed3b3372636749d29e105f97f20e88971be31f5ed7642f2e898f00283b68b701cc01307401cdc209b0efc5dd3818220e5093
   languageName: node
   linkType: hard
 
-"mkdirp@npm:^1.0.3":
-  version: 1.0.4
-  resolution: "mkdirp@npm:1.0.4"
+"mkdirp@npm:^3.0.1":
+  version: 3.0.1
+  resolution: "mkdirp@npm:3.0.1"
   bin:
-    mkdirp: bin/cmd.js
-  checksum: 10c0/46ea0f3ffa8bc6a5bc0c7081ffc3907777f0ed6516888d40a518c5111f8366d97d2678911ad1a6882bf592fa9de6c784fea32e1687bb94e1f4944170af48a5cf
+    mkdirp: dist/cjs/src/bin.js
+  checksum: 10c0/9f2b975e9246351f5e3a40dcfac99fcd0baa31fbfab615fe059fb11e51f10e4803c63de1f384c54d656e4db31d000e4767e9ef076a22e12a641357602e31d57d
   languageName: node
   linkType: hard
 
@@ -5832,11 +5712,11 @@ __metadata:
   linkType: hard
 
 "nanoid@npm:^3.3.6, nanoid@npm:^3.3.7":
-  version: 3.3.7
-  resolution: "nanoid@npm:3.3.7"
+  version: 3.3.8
+  resolution: "nanoid@npm:3.3.8"
   bin:
     nanoid: bin/nanoid.cjs
-  checksum: 10c0/e3fb661aa083454f40500473bb69eedb85dc160e763150b9a2c567c7e9ff560ce028a9f833123b618a6ea742e311138b591910e795614a629029e86e180660f3
+  checksum: 10c0/4b1bb29f6cfebf3be3bc4ad1f1296fb0a10a3043a79f34fbffe75d1621b4318319211cd420549459018ea3592f0d2f159247a6f874911d6d26eaaadda2478120
   languageName: node
   linkType: hard
 
@@ -5847,24 +5727,31 @@ __metadata:
   languageName: node
   linkType: hard
 
-"negotiator@npm:0.6.3, negotiator@npm:^0.6.3":
+"negotiator@npm:0.6.3":
   version: 0.6.3
   resolution: "negotiator@npm:0.6.3"
   checksum: 10c0/3ec9fd413e7bf071c937ae60d572bc67155262068ed522cf4b3be5edbe6ddf67d095ec03a3a14ebf8fc8e95f8e1d61be4869db0dbb0de696f6b837358bd43fc2
   languageName: node
   linkType: hard
 
+"negotiator@npm:^1.0.0":
+  version: 1.0.0
+  resolution: "negotiator@npm:1.0.0"
+  checksum: 10c0/4c559dd52669ea48e1914f9d634227c561221dd54734070791f999c52ed0ff36e437b2e07d5c1f6e32909fc625fe46491c16e4a8f0572567d4dd15c3a4fda04b
+  languageName: node
+  linkType: hard
+
 "next-intl@npm:^3.19.1":
-  version: 3.19.4
-  resolution: "next-intl@npm:3.19.4"
+  version: 3.26.1
+  resolution: "next-intl@npm:3.26.1"
   dependencies:
     "@formatjs/intl-localematcher": "npm:^0.5.4"
-    negotiator: "npm:^0.6.3"
-    use-intl: "npm:^3.19.4"
+    negotiator: "npm:^1.0.0"
+    use-intl: "npm:^3.26.1"
   peerDependencies:
-    next: ^10.0.0 || ^11.0.0 || ^12.0.0 || ^13.0.0 || ^14.0.0
-    react: ^16.8.0 || ^17.0.0 || ^18.0.0
-  checksum: 10c0/a8dd185b9d290903eed8b63c55490842dcda969c591553d4994fcacce647e8a3816e73edeb61cb098c73e89e303501c077e2efdad953e2f5c7e786f3edc058c0
+    next: ^10.0.0 || ^11.0.0 || ^12.0.0 || ^13.0.0 || ^14.0.0 || ^15.0.0
+    react: ^16.8.0 || ^17.0.0 || ^18.0.0 || >=19.0.0-rc <19.0.0 || ^19.0.0
+  checksum: 10c0/dfb67e132d62feda76be6d84ed8100edcbad2599b1cc355a2f854cdd5ab6722d767585f7dce79c759aca27dadef5b9a3273dedff6bb12d397409cfd15cc5cd78
   languageName: node
   linkType: hard
 
@@ -5938,22 +5825,22 @@ __metadata:
   linkType: hard
 
 "node-gyp@npm:latest":
-  version: 10.2.0
-  resolution: "node-gyp@npm:10.2.0"
+  version: 11.0.0
+  resolution: "node-gyp@npm:11.0.0"
   dependencies:
     env-paths: "npm:^2.2.0"
     exponential-backoff: "npm:^3.1.1"
     glob: "npm:^10.3.10"
     graceful-fs: "npm:^4.2.6"
-    make-fetch-happen: "npm:^13.0.0"
-    nopt: "npm:^7.0.0"
-    proc-log: "npm:^4.1.0"
+    make-fetch-happen: "npm:^14.0.3"
+    nopt: "npm:^8.0.0"
+    proc-log: "npm:^5.0.0"
     semver: "npm:^7.3.5"
-    tar: "npm:^6.2.1"
-    which: "npm:^4.0.0"
+    tar: "npm:^7.4.3"
+    which: "npm:^5.0.0"
   bin:
     node-gyp: bin/node-gyp.js
-  checksum: 10c0/00630d67dbd09a45aee0a5d55c05e3916ca9e6d427ee4f7bc392d2d3dc5fad7449b21fc098dd38260a53d9dcc9c879b36704a1994235d4707e7271af7e9a835b
+  checksum: 10c0/a3b885bbee2d271f1def32ba2e30ffcf4562a3db33af06b8b365e053153e2dd2051b9945783c3c8e852d26a0f20f65b251c7e83361623383a99635c0280ee573
   languageName: node
   linkType: hard
 
@@ -5965,11 +5852,9 @@ __metadata:
   linkType: hard
 
 "node-mocks-http@npm:^1.14.1":
-  version: 1.16.0
-  resolution: "node-mocks-http@npm:1.16.0"
+  version: 1.16.2
+  resolution: "node-mocks-http@npm:1.16.2"
   dependencies:
-    "@types/express": "npm:^4.17.21"
-    "@types/node": "npm:*"
     accepts: "npm:^1.3.7"
     content-disposition: "npm:^0.5.3"
     depd: "npm:^1.1.0"
@@ -5980,25 +5865,33 @@ __metadata:
     parseurl: "npm:^1.3.3"
     range-parser: "npm:^1.2.0"
     type-is: "npm:^1.6.18"
-  checksum: 10c0/b48e6c9115912790963a833e7e29d20f42e87d1ec33f76bf81c000e90246db720f9051f4adbd5aa3fa863b3f5fca090e0fd4463060064845e8e34b6b38a966d7
+  peerDependencies:
+    "@types/express": ^4.17.21 || ^5.0.0
+    "@types/node": "*"
+  peerDependenciesMeta:
+    "@types/express":
+      optional: true
+    "@types/node":
+      optional: true
+  checksum: 10c0/0d94f2c179a2a9b42c042d554faaed348083213400e9da0b0b25ce4498eb4f4d9467550402f53b2e5d1f1bbf5444c7d6c232ca377b56e5af9fbde9c9d85ad8fa
   languageName: node
   linkType: hard
 
 "node-releases@npm:^2.0.18":
-  version: 2.0.18
-  resolution: "node-releases@npm:2.0.18"
-  checksum: 10c0/786ac9db9d7226339e1dc84bbb42007cb054a346bd9257e6aa154d294f01bc6a6cddb1348fa099f079be6580acbb470e3c048effd5f719325abd0179e566fd27
+  version: 2.0.19
+  resolution: "node-releases@npm:2.0.19"
+  checksum: 10c0/52a0dbd25ccf545892670d1551690fe0facb6a471e15f2cfa1b20142a5b255b3aa254af5f59d6ecb69c2bec7390bc643c43aa63b13bf5e64b6075952e716b1aa
   languageName: node
   linkType: hard
 
-"nopt@npm:^7.0.0":
-  version: 7.2.1
-  resolution: "nopt@npm:7.2.1"
+"nopt@npm:^8.0.0":
+  version: 8.0.0
+  resolution: "nopt@npm:8.0.0"
   dependencies:
     abbrev: "npm:^2.0.0"
   bin:
     nopt: bin/nopt.js
-  checksum: 10c0/a069c7c736767121242037a22a788863accfa932ab285a1eb569eb8cd534b09d17206f68c37f096ae785647435e0c5a5a0a67b42ec743e481a455e5ae6a6df81
+  checksum: 10c0/19cb986f79abaca2d0f0b560021da7b32ee6fcc3de48f3eaeb0c324d36755c17754f886a754c091f01f740c17caf7d6aea8237b7fbaf39f476ae5e30a249f18f
   languageName: node
   linkType: hard
 
@@ -6026,9 +5919,9 @@ __metadata:
   linkType: hard
 
 "nwsapi@npm:^2.2.2":
-  version: 2.2.12
-  resolution: "nwsapi@npm:2.2.12"
-  checksum: 10c0/95e9623d63df111405503df8c5d800e26f71675d319e2c9c70cddfa31e5ace1d3f8b6d98d354544fc156a1506d920ec291e303fab761e4f99296868e199a466e
+  version: 2.2.16
+  resolution: "nwsapi@npm:2.2.16"
+  checksum: 10c0/0aa0637f4d51043d0183d994e08336bae996b03b42984381bf09ebdf3ff4909c018eda6b2a8aba0a08f3ea8303db8a0dad0608b38dc0bff15fd87017286ae21a
   languageName: node
   linkType: hard
 
@@ -6046,10 +5939,10 @@ __metadata:
   languageName: node
   linkType: hard
 
-"object-inspect@npm:^1.13.1":
-  version: 1.13.2
-  resolution: "object-inspect@npm:1.13.2"
-  checksum: 10c0/b97835b4c91ec37b5fd71add84f21c3f1047d1d155d00c0fcd6699516c256d4fcc6ff17a1aced873197fe447f91a3964178fd2a67a1ee2120cdaf60e81a050b4
+"object-inspect@npm:^1.13.3":
+  version: 1.13.3
+  resolution: "object-inspect@npm:1.13.3"
+  checksum: 10c0/cc3f15213406be89ffdc54b525e115156086796a515410a8d390215915db9f23c8eab485a06f1297402f440a33715fe8f71a528c1dcbad6e1a3bcaf5a46921d4
   languageName: node
   linkType: hard
 
@@ -6195,12 +6088,10 @@ __metadata:
   languageName: node
   linkType: hard
 
-"p-map@npm:^4.0.0":
-  version: 4.0.0
-  resolution: "p-map@npm:4.0.0"
-  dependencies:
-    aggregate-error: "npm:^3.0.0"
-  checksum: 10c0/592c05bd6262c466ce269ff172bb8de7c6975afca9b50c975135b974e9bdaafbfe80e61aaaf5be6d1200ba08b30ead04b88cfa7e25ff1e3b93ab28c9f62a2c75
+"p-map@npm:^7.0.2":
+  version: 7.0.3
+  resolution: "p-map@npm:7.0.3"
+  checksum: 10c0/46091610da2b38ce47bcd1d8b4835a6fa4e832848a6682cf1652bc93915770f4617afc844c10a77d1b3e56d2472bb2d5622353fa3ead01a7f42b04fc8e744a5c
   languageName: node
   linkType: hard
 
@@ -6212,9 +6103,9 @@ __metadata:
   linkType: hard
 
 "package-json-from-dist@npm:^1.0.0":
-  version: 1.0.0
-  resolution: "package-json-from-dist@npm:1.0.0"
-  checksum: 10c0/e3ffaf6ac1040ab6082a658230c041ad14e72fabe99076a2081bb1d5d41210f11872403fc09082daf4387fc0baa6577f96c9c0e94c90c394fd57794b66aa4033
+  version: 1.0.1
+  resolution: "package-json-from-dist@npm:1.0.1"
+  checksum: 10c0/62ba2785eb655fec084a257af34dbe24292ab74516d6aecef97ef72d4897310bc6898f6c85b5cd22770eaa1ce60d55a0230e150fb6a966e3ecd6c511e23d164b
   languageName: node
   linkType: hard
 
@@ -6240,11 +6131,11 @@ __metadata:
   linkType: hard
 
 "parse5@npm:^7.0.0, parse5@npm:^7.1.1":
-  version: 7.1.2
-  resolution: "parse5@npm:7.1.2"
+  version: 7.2.1
+  resolution: "parse5@npm:7.2.1"
   dependencies:
-    entities: "npm:^4.4.0"
-  checksum: 10c0/297d7af8224f4b5cb7f6617ecdae98eeaed7f8cbd78956c42785e230505d5a4f07cef352af10d3006fa5c1544b76b57784d3a22d861ae071bbc460c649482bf4
+    entities: "npm:^4.5.0"
+  checksum: 10c0/829d37a0c709215a887e410a7118d754f8e1afd7edb529db95bc7bbf8045fb0266a7b67801331d8e8d9d073ea75793624ec27ce9ff3b96862c3b9008f4d68e80
   languageName: node
   linkType: hard
 
@@ -6300,10 +6191,10 @@ __metadata:
   languageName: node
   linkType: hard
 
-"picocolors@npm:^1.0.0, picocolors@npm:^1.0.1, picocolors@npm:^1.1.0":
-  version: 1.1.0
-  resolution: "picocolors@npm:1.1.0"
-  checksum: 10c0/86946f6032148801ef09c051c6fb13b5cf942eaf147e30ea79edb91dd32d700934edebe782a1078ff859fb2b816792e97ef4dab03d7f0b804f6b01a0df35e023
+"picocolors@npm:^1.0.0, picocolors@npm:^1.0.1, picocolors@npm:^1.1.0, picocolors@npm:^1.1.1":
+  version: 1.1.1
+  resolution: "picocolors@npm:1.1.1"
+  checksum: 10c0/e2e3e8170ab9d7c7421969adaa7e1b31434f789afb9b3f115f6b96d91945041ac3ceb02e9ec6fe6510ff036bcc0bf91e69a1772edc0b707e12b19c0f2d6bcf58
   languageName: node
   linkType: hard
 
@@ -6368,7 +6259,7 @@ __metadata:
   languageName: node
   linkType: hard
 
-"postcss-load-config@npm:^4.0.1":
+"postcss-load-config@npm:^4.0.2":
   version: 4.0.2
   resolution: "postcss-load-config@npm:4.0.2"
   dependencies:
@@ -6386,7 +6277,7 @@ __metadata:
   languageName: node
   linkType: hard
 
-"postcss-nested@npm:^6.0.1":
+"postcss-nested@npm:^6.2.0":
   version: 6.2.0
   resolution: "postcss-nested@npm:6.2.0"
   dependencies:
@@ -6397,7 +6288,7 @@ __metadata:
   languageName: node
   linkType: hard
 
-"postcss-selector-parser@npm:^6.0.11, postcss-selector-parser@npm:^6.1.1":
+"postcss-selector-parser@npm:^6.1.1, postcss-selector-parser@npm:^6.1.2":
   version: 6.1.2
   resolution: "postcss-selector-parser@npm:6.1.2"
   dependencies:
@@ -6414,7 +6305,7 @@ __metadata:
   languageName: node
   linkType: hard
 
-"postcss@npm:8.4.31":
+"postcss@npm:8.4.31, postcss@npm:^8":
   version: 8.4.31
   resolution: "postcss@npm:8.4.31"
   dependencies:
@@ -6425,14 +6316,14 @@ __metadata:
   languageName: node
   linkType: hard
 
-"postcss@npm:^8, postcss@npm:^8.4.23":
-  version: 8.4.47
-  resolution: "postcss@npm:8.4.47"
+"postcss@npm:^8.4.47":
+  version: 8.4.49
+  resolution: "postcss@npm:8.4.49"
   dependencies:
     nanoid: "npm:^3.3.7"
-    picocolors: "npm:^1.1.0"
+    picocolors: "npm:^1.1.1"
     source-map-js: "npm:^1.2.1"
-  checksum: 10c0/929f68b5081b7202709456532cee2a145c1843d391508c5a09de2517e8c4791638f71dd63b1898dba6712f8839d7a6da046c72a5e44c162e908f5911f57b5f44
+  checksum: 10c0/f1b3f17aaf36d136f59ec373459f18129908235e65dbdc3aee5eef8eba0756106f52de5ec4682e29a2eab53eb25170e7e871b3e4b52a8f1de3d344a514306be3
   languageName: node
   linkType: hard
 
@@ -6453,11 +6344,11 @@ __metadata:
   linkType: hard
 
 "prettier@npm:^3.2.5":
-  version: 3.3.3
-  resolution: "prettier@npm:3.3.3"
+  version: 3.4.2
+  resolution: "prettier@npm:3.4.2"
   bin:
     prettier: bin/prettier.cjs
-  checksum: 10c0/b85828b08e7505716324e4245549b9205c0cacb25342a030ba8885aba2039a115dbcf75a0b7ca3b37bc9d101ee61fab8113fc69ca3359f2a226f1ecc07ad2e26
+  checksum: 10c0/99e076a26ed0aba4ebc043880d0f08bbb8c59a4c6641cdee6cdadf2205bdd87aa1d7823f50c3aea41e015e99878d37c58d7b5f0e663bba0ef047f94e36b96446
   languageName: node
   linkType: hard
 
@@ -6483,10 +6374,10 @@ __metadata:
   languageName: node
   linkType: hard
 
-"proc-log@npm:^4.1.0, proc-log@npm:^4.2.0":
-  version: 4.2.0
-  resolution: "proc-log@npm:4.2.0"
-  checksum: 10c0/17db4757c2a5c44c1e545170e6c70a26f7de58feb985091fb1763f5081cab3d01b181fb2dd240c9f4a4255a1d9227d163d5771b7e69c9e49a561692db865efb9
+"proc-log@npm:^5.0.0":
+  version: 5.0.0
+  resolution: "proc-log@npm:5.0.0"
+  checksum: 10c0/bbe5edb944b0ad63387a1d5b1911ae93e05ce8d0f60de1035b218cdcceedfe39dbd2c697853355b70f1a090f8f58fe90da487c85216bf9671f9499d1a897e9e3
   languageName: node
   linkType: hard
 
@@ -6522,13 +6413,15 @@ __metadata:
   linkType: hard
 
 "psl@npm:^1.1.33":
-  version: 1.9.0
-  resolution: "psl@npm:1.9.0"
-  checksum: 10c0/6a3f805fdab9442f44de4ba23880c4eba26b20c8e8e0830eff1cb31007f6825dace61d17203c58bfe36946842140c97a1ba7f67bc63ca2d88a7ee052b65d97ab
+  version: 1.15.0
+  resolution: "psl@npm:1.15.0"
+  dependencies:
+    punycode: "npm:^2.3.1"
+  checksum: 10c0/d8d45a99e4ca62ca12ac3c373e63d80d2368d38892daa40cfddaa1eb908be98cd549ac059783ef3a56cfd96d57ae8e2fd9ae53d1378d90d42bc661ff924e102a
   languageName: node
   linkType: hard
 
-"punycode@npm:^2.1.0, punycode@npm:^2.1.1":
+"punycode@npm:^2.1.0, punycode@npm:^2.1.1, punycode@npm:^2.3.1":
   version: 2.3.1
   resolution: "punycode@npm:2.3.1"
   checksum: 10c0/14f76a8206bc3464f794fb2e3d3cc665ae416c01893ad7a02b23766eb07159144ee612ad67af5e84fa4479ccfe67678c4feb126b0485651b302babf66f04f9e9
@@ -6644,18 +6537,19 @@ __metadata:
   languageName: node
   linkType: hard
 
-"reflect.getprototypeof@npm:^1.0.4":
-  version: 1.0.6
-  resolution: "reflect.getprototypeof@npm:1.0.6"
+"reflect.getprototypeof@npm:^1.0.6, reflect.getprototypeof@npm:^1.0.8":
+  version: 1.0.8
+  resolution: "reflect.getprototypeof@npm:1.0.8"
   dependencies:
-    call-bind: "npm:^1.0.7"
+    call-bind: "npm:^1.0.8"
     define-properties: "npm:^1.2.1"
-    es-abstract: "npm:^1.23.1"
+    dunder-proto: "npm:^1.0.0"
+    es-abstract: "npm:^1.23.5"
     es-errors: "npm:^1.3.0"
     get-intrinsic: "npm:^1.2.4"
-    globalthis: "npm:^1.0.3"
-    which-builtin-type: "npm:^1.1.3"
-  checksum: 10c0/baf4ef8ee6ff341600f4720b251cf5a6cb552d6a6ab0fdc036988c451bf16f920e5feb0d46bd4f530a5cce568f1f7aca2d77447ca798920749cfc52783c39b55
+    gopd: "npm:^1.2.0"
+    which-builtin-type: "npm:^1.2.0"
+  checksum: 10c0/720479dd7a72a20d66efaca507ed7c7e18403d24ce764f436130464d4a516a12ed8a9a2714dcabc3e1296f9a31f914ba1095e2371619df23d3ac56c4f8c8bae1
   languageName: node
   linkType: hard
 
@@ -6666,15 +6560,15 @@ __metadata:
   languageName: node
   linkType: hard
 
-"regexp.prototype.flags@npm:^1.5.1, regexp.prototype.flags@npm:^1.5.2":
-  version: 1.5.2
-  resolution: "regexp.prototype.flags@npm:1.5.2"
+"regexp.prototype.flags@npm:^1.5.1, regexp.prototype.flags@npm:^1.5.2, regexp.prototype.flags@npm:^1.5.3":
+  version: 1.5.3
+  resolution: "regexp.prototype.flags@npm:1.5.3"
   dependencies:
-    call-bind: "npm:^1.0.6"
+    call-bind: "npm:^1.0.7"
     define-properties: "npm:^1.2.1"
     es-errors: "npm:^1.3.0"
-    set-function-name: "npm:^2.0.1"
-  checksum: 10c0/0f3fc4f580d9c349f8b560b012725eb9c002f36daa0041b3fbf6f4238cb05932191a4d7d5db3b5e2caa336d5150ad0402ed2be81f711f9308fe7e1a9bf9bd552
+    set-function-name: "npm:^2.0.2"
+  checksum: 10c0/e1a7c7dc42cc91abf73e47a269c4b3a8f225321b7f617baa25821f6a123a91d23a73b5152f21872c566e699207e1135d075d2251cd3e84cc96d82a910adf6020
   languageName: node
   linkType: hard
 
@@ -6737,13 +6631,13 @@ __metadata:
   linkType: hard
 
 "resolve.exports@npm:^2.0.0":
-  version: 2.0.2
-  resolution: "resolve.exports@npm:2.0.2"
-  checksum: 10c0/cc4cffdc25447cf34730f388dca5021156ba9302a3bad3d7f168e790dc74b2827dff603f1bc6ad3d299bac269828dca96dd77e036dc9fba6a2a1807c47ab5c98
+  version: 2.0.3
+  resolution: "resolve.exports@npm:2.0.3"
+  checksum: 10c0/1ade1493f4642a6267d0a5e68faeac20b3d220f18c28b140343feb83694d8fed7a286852aef43689d16042c61e2ddb270be6578ad4a13990769e12065191200d
   languageName: node
   linkType: hard
 
-"resolve@npm:^1.1.7, resolve@npm:^1.10.1, resolve@npm:^1.20.0, resolve@npm:^1.22.2, resolve@npm:^1.22.4":
+"resolve@npm:^1.1.7, resolve@npm:^1.10.1, resolve@npm:^1.20.0, resolve@npm:^1.22.4, resolve@npm:^1.22.8":
   version: 1.22.8
   resolution: "resolve@npm:1.22.8"
   dependencies:
@@ -6769,7 +6663,7 @@ __metadata:
   languageName: node
   linkType: hard
 
-"resolve@patch:resolve@npm%3A^1.1.7#optional!builtin<compat/resolve>, resolve@patch:resolve@npm%3A^1.10.1#optional!builtin<compat/resolve>, resolve@patch:resolve@npm%3A^1.20.0#optional!builtin<compat/resolve>, resolve@patch:resolve@npm%3A^1.22.2#optional!builtin<compat/resolve>, resolve@patch:resolve@npm%3A^1.22.4#optional!builtin<compat/resolve>":
+"resolve@patch:resolve@npm%3A^1.1.7#optional!builtin<compat/resolve>, resolve@patch:resolve@npm%3A^1.10.1#optional!builtin<compat/resolve>, resolve@patch:resolve@npm%3A^1.20.0#optional!builtin<compat/resolve>, resolve@patch:resolve@npm%3A^1.22.4#optional!builtin<compat/resolve>, resolve@patch:resolve@npm%3A^1.22.8#optional!builtin<compat/resolve>":
   version: 1.22.8
   resolution: "resolve@patch:resolve@npm%3A1.22.8#optional!builtin<compat/resolve>::version=1.22.8&hash=c3c19d"
   dependencies:
@@ -6820,6 +6714,17 @@ __metadata:
   languageName: node
   linkType: hard
 
+"rimraf@npm:^5.0.5":
+  version: 5.0.10
+  resolution: "rimraf@npm:5.0.10"
+  dependencies:
+    glob: "npm:^10.3.7"
+  bin:
+    rimraf: dist/esm/bin.mjs
+  checksum: 10c0/7da4fd0e15118ee05b918359462cfa1e7fe4b1228c7765195a45b55576e8c15b95db513b8466ec89129666f4af45ad978a3057a02139afba1a63512a2d9644cc
+  languageName: node
+  linkType: hard
+
 "run-parallel@npm:^1.1.9":
   version: 1.2.0
   resolution: "run-parallel@npm:1.2.0"
@@ -6830,14 +6735,15 @@ __metadata:
   linkType: hard
 
 "safe-array-concat@npm:^1.1.2":
-  version: 1.1.2
-  resolution: "safe-array-concat@npm:1.1.2"
+  version: 1.1.3
+  resolution: "safe-array-concat@npm:1.1.3"
   dependencies:
-    call-bind: "npm:^1.0.7"
-    get-intrinsic: "npm:^1.2.4"
-    has-symbols: "npm:^1.0.3"
+    call-bind: "npm:^1.0.8"
+    call-bound: "npm:^1.0.2"
+    get-intrinsic: "npm:^1.2.6"
+    has-symbols: "npm:^1.1.0"
     isarray: "npm:^2.0.5"
-  checksum: 10c0/12f9fdb01c8585e199a347eacc3bae7b5164ae805cdc8c6707199dbad5b9e30001a50a43c4ee24dc9ea32dbb7279397850e9208a7e217f4d8b1cf5d90129dec9
+  checksum: 10c0/43c86ffdddc461fb17ff8a17c5324f392f4868f3c7dd2c6a5d9f5971713bc5fd755667212c80eab9567595f9a7509cc2f83e590ddaebd1bd19b780f9c79f9a8d
   languageName: node
   linkType: hard
 
@@ -6848,14 +6754,14 @@ __metadata:
   languageName: node
   linkType: hard
 
-"safe-regex-test@npm:^1.0.3":
-  version: 1.0.3
-  resolution: "safe-regex-test@npm:1.0.3"
+"safe-regex-test@npm:^1.0.3, safe-regex-test@npm:^1.1.0":
+  version: 1.1.0
+  resolution: "safe-regex-test@npm:1.1.0"
   dependencies:
-    call-bind: "npm:^1.0.6"
+    call-bound: "npm:^1.0.2"
     es-errors: "npm:^1.3.0"
-    is-regex: "npm:^1.1.4"
-  checksum: 10c0/900bf7c98dc58f08d8523b7012b468e4eb757afa624f198902c0643d7008ba777b0bdc35810ba0b758671ce887617295fb742b3f3968991b178ceca54cb07603
+    is-regex: "npm:^1.2.1"
+  checksum: 10c0/f2c25281bbe5d39cddbbce7f86fca5ea9b3ce3354ea6cd7c81c31b006a5a9fff4286acc5450a3b9122c56c33eba69c56b9131ad751457b2b4a585825e6a10665
   languageName: node
   linkType: hard
 
@@ -6902,7 +6808,7 @@ __metadata:
   languageName: node
   linkType: hard
 
-"set-function-length@npm:^1.2.1":
+"set-function-length@npm:^1.2.2":
   version: 1.2.2
   resolution: "set-function-length@npm:1.2.2"
   dependencies:
@@ -6916,7 +6822,7 @@ __metadata:
   languageName: node
   linkType: hard
 
-"set-function-name@npm:^2.0.1, set-function-name@npm:^2.0.2":
+"set-function-name@npm:^2.0.2":
   version: 2.0.2
   resolution: "set-function-name@npm:2.0.2"
   dependencies:
@@ -7013,15 +6919,51 @@ __metadata:
   languageName: node
   linkType: hard
 
+"side-channel-list@npm:^1.0.0":
+  version: 1.0.0
+  resolution: "side-channel-list@npm:1.0.0"
+  dependencies:
+    es-errors: "npm:^1.3.0"
+    object-inspect: "npm:^1.13.3"
+  checksum: 10c0/644f4ac893456c9490ff388bf78aea9d333d5e5bfc64cfb84be8f04bf31ddc111a8d4b83b85d7e7e8a7b845bc185a9ad02c052d20e086983cf59f0be517d9b3d
+  languageName: node
+  linkType: hard
+
+"side-channel-map@npm:^1.0.1":
+  version: 1.0.1
+  resolution: "side-channel-map@npm:1.0.1"
+  dependencies:
+    call-bound: "npm:^1.0.2"
+    es-errors: "npm:^1.3.0"
+    get-intrinsic: "npm:^1.2.5"
+    object-inspect: "npm:^1.13.3"
+  checksum: 10c0/010584e6444dd8a20b85bc926d934424bd809e1a3af941cace229f7fdcb751aada0fb7164f60c2e22292b7fa3c0ff0bce237081fd4cdbc80de1dc68e95430672
+  languageName: node
+  linkType: hard
+
+"side-channel-weakmap@npm:^1.0.2":
+  version: 1.0.2
+  resolution: "side-channel-weakmap@npm:1.0.2"
+  dependencies:
+    call-bound: "npm:^1.0.2"
+    es-errors: "npm:^1.3.0"
+    get-intrinsic: "npm:^1.2.5"
+    object-inspect: "npm:^1.13.3"
+    side-channel-map: "npm:^1.0.1"
+  checksum: 10c0/71362709ac233e08807ccd980101c3e2d7efe849edc51455030327b059f6c4d292c237f94dc0685031dd11c07dd17a68afde235d6cf2102d949567f98ab58185
+  languageName: node
+  linkType: hard
+
 "side-channel@npm:^1.0.4, side-channel@npm:^1.0.6":
-  version: 1.0.6
-  resolution: "side-channel@npm:1.0.6"
+  version: 1.1.0
+  resolution: "side-channel@npm:1.1.0"
   dependencies:
-    call-bind: "npm:^1.0.7"
     es-errors: "npm:^1.3.0"
-    get-intrinsic: "npm:^1.2.4"
-    object-inspect: "npm:^1.13.1"
-  checksum: 10c0/d2afd163dc733cc0a39aa6f7e39bf0c436293510dbccbff446733daeaf295857dbccf94297092ec8c53e2503acac30f0b78830876f0485991d62a90e9cad305f
+    object-inspect: "npm:^1.13.3"
+    side-channel-list: "npm:^1.0.0"
+    side-channel-map: "npm:^1.0.1"
+    side-channel-weakmap: "npm:^1.0.2"
+  checksum: 10c0/cb20dad41eb032e6c24c0982e1e5a24963a28aa6122b4f05b3f3d6bf8ae7fd5474ef382c8f54a6a3ab86e0cac4d41a23bd64ede3970e5bfb50326ba02a7996e6
   languageName: node
   linkType: hard
 
@@ -7070,13 +7012,13 @@ __metadata:
   linkType: hard
 
 "socks-proxy-agent@npm:^8.0.3":
-  version: 8.0.4
-  resolution: "socks-proxy-agent@npm:8.0.4"
+  version: 8.0.5
+  resolution: "socks-proxy-agent@npm:8.0.5"
   dependencies:
-    agent-base: "npm:^7.1.1"
+    agent-base: "npm:^7.1.2"
     debug: "npm:^4.3.4"
     socks: "npm:^2.8.3"
-  checksum: 10c0/345593bb21b95b0508e63e703c84da11549f0a2657d6b4e3ee3612c312cb3a907eac10e53b23ede3557c6601d63252103494caa306b66560f43af7b98f53957a
+  checksum: 10c0/5d2c6cecba6821389aabf18728325730504bf9bb1d9e342e7987a5d13badd7a98838cc9a55b8ed3cb866ad37cc23e1086f09c4d72d93105ce9dfe76330e9d2a6
   languageName: node
   linkType: hard
 
@@ -7128,12 +7070,19 @@ __metadata:
   languageName: node
   linkType: hard
 
-"ssri@npm:^10.0.0":
-  version: 10.0.6
-  resolution: "ssri@npm:10.0.6"
+"ssri@npm:^12.0.0":
+  version: 12.0.0
+  resolution: "ssri@npm:12.0.0"
   dependencies:
     minipass: "npm:^7.0.3"
-  checksum: 10c0/e5a1e23a4057a86a97971465418f22ea89bd439ac36ade88812dd920e4e61873e8abd6a9b72a03a67ef50faa00a2daf1ab745c5a15b46d03e0544a0296354227
+  checksum: 10c0/caddd5f544b2006e88fa6b0124d8d7b28208b83c72d7672d5ade44d794525d23b540f3396108c4eb9280dcb7c01f0bef50682f5b4b2c34291f7c5e211fd1417d
+  languageName: node
+  linkType: hard
+
+"stable-hash@npm:^0.0.4":
+  version: 0.0.4
+  resolution: "stable-hash@npm:0.0.4"
+  checksum: 10c0/53d010d2a1b014fb60d398c095f43912c353b7b44774e55222bb26fd428bc75b73d7bdfcae509ce927c23ca9c5aff2dc1bc82f191d30e57a879550bc2952bdb0
   languageName: node
   linkType: hard
 
@@ -7194,13 +7143,14 @@ __metadata:
   languageName: node
   linkType: hard
 
-"string.prototype.includes@npm:^2.0.0":
-  version: 2.0.0
-  resolution: "string.prototype.includes@npm:2.0.0"
+"string.prototype.includes@npm:^2.0.1":
+  version: 2.0.1
+  resolution: "string.prototype.includes@npm:2.0.1"
   dependencies:
-    define-properties: "npm:^1.1.3"
-    es-abstract: "npm:^1.17.5"
-  checksum: 10c0/32dff118c9e9dcc87e240b05462fa8ee7248d9e335c0015c1442fe18152261508a2146d9bb87ddae56abab69148a83c61dfaea33f53853812a6a2db737689ed2
+    call-bind: "npm:^1.0.7"
+    define-properties: "npm:^1.2.1"
+    es-abstract: "npm:^1.23.3"
+  checksum: 10c0/25ce9c9b49128352a2618fbe8758b46f945817a58a4420f4799419e40a8d28f116e176c7590d767d5327a61e75c8f32c86171063f48e389b9fdd325f1bd04ee5
   languageName: node
   linkType: hard
 
@@ -7235,25 +7185,29 @@ __metadata:
   linkType: hard
 
 "string.prototype.trim@npm:^1.2.9":
-  version: 1.2.9
-  resolution: "string.prototype.trim@npm:1.2.9"
+  version: 1.2.10
+  resolution: "string.prototype.trim@npm:1.2.10"
   dependencies:
-    call-bind: "npm:^1.0.7"
+    call-bind: "npm:^1.0.8"
+    call-bound: "npm:^1.0.2"
+    define-data-property: "npm:^1.1.4"
     define-properties: "npm:^1.2.1"
-    es-abstract: "npm:^1.23.0"
+    es-abstract: "npm:^1.23.5"
     es-object-atoms: "npm:^1.0.0"
-  checksum: 10c0/dcef1a0fb61d255778155006b372dff8cc6c4394bc39869117e4241f41a2c52899c0d263ffc7738a1f9e61488c490b05c0427faa15151efad721e1a9fb2663c2
+    has-property-descriptors: "npm:^1.0.2"
+  checksum: 10c0/8a8854241c4b54a948e992eb7dd6b8b3a97185112deb0037a134f5ba57541d8248dd610c966311887b6c2fd1181a3877bffb14d873ce937a344535dabcc648f8
   languageName: node
   linkType: hard
 
 "string.prototype.trimend@npm:^1.0.8":
-  version: 1.0.8
-  resolution: "string.prototype.trimend@npm:1.0.8"
+  version: 1.0.9
+  resolution: "string.prototype.trimend@npm:1.0.9"
   dependencies:
-    call-bind: "npm:^1.0.7"
+    call-bind: "npm:^1.0.8"
+    call-bound: "npm:^1.0.2"
     define-properties: "npm:^1.2.1"
     es-object-atoms: "npm:^1.0.0"
-  checksum: 10c0/0a0b54c17c070551b38e756ae271865ac6cc5f60dabf2e7e343cceae7d9b02e1a1120a824e090e79da1b041a74464e8477e2da43e2775c85392be30a6f60963c
+  checksum: 10c0/59e1a70bf9414cb4c536a6e31bef5553c8ceb0cf44d8b4d0ed65c9653358d1c64dd0ec203b100df83d0413bbcde38b8c5d49e14bc4b86737d74adc593a0d35b6
   languageName: node
   linkType: hard
 
@@ -7339,7 +7293,7 @@ __metadata:
   languageName: node
   linkType: hard
 
-"sucrase@npm:^3.32.0":
+"sucrase@npm:^3.35.0":
   version: 3.35.0
   resolution: "sucrase@npm:3.35.0"
   dependencies:
@@ -7357,15 +7311,6 @@ __metadata:
   languageName: node
   linkType: hard
 
-"supports-color@npm:^5.3.0":
-  version: 5.5.0
-  resolution: "supports-color@npm:5.5.0"
-  dependencies:
-    has-flag: "npm:^3.0.0"
-  checksum: 10c0/6ae5ff319bfbb021f8a86da8ea1f8db52fac8bd4d499492e30ec17095b58af11f0c55f8577390a749b1c4dde691b6a0315dab78f5f54c9b3d83f8fb5905c1c05
-  languageName: node
-  linkType: hard
-
 "supports-color@npm:^7.1.0":
   version: 7.2.0
   resolution: "supports-color@npm:7.2.0"
@@ -7399,45 +7344,45 @@ __metadata:
   linkType: hard
 
 "synckit@npm:^0.9.1":
-  version: 0.9.1
-  resolution: "synckit@npm:0.9.1"
+  version: 0.9.2
+  resolution: "synckit@npm:0.9.2"
   dependencies:
     "@pkgr/core": "npm:^0.1.0"
     tslib: "npm:^2.6.2"
-  checksum: 10c0/d8b89e1bf30ba3ffb469d8418c836ad9c0c062bf47028406b4d06548bc66af97155ea2303b96c93bf5c7c0f0d66153a6fbd6924c76521b434e6a9898982abc2e
+  checksum: 10c0/e0c262817444e5b872708adb6f5ad37951ba33f6b2d1d4477d45db1f57573a784618ceed5e6614e0225db330632b1f6b95bb74d21e4d013e45ad4bde03d0cb59
   languageName: node
   linkType: hard
 
 "tailwindcss@npm:^3.3.0":
-  version: 3.4.12
-  resolution: "tailwindcss@npm:3.4.12"
+  version: 3.4.16
+  resolution: "tailwindcss@npm:3.4.16"
   dependencies:
     "@alloc/quick-lru": "npm:^5.2.0"
     arg: "npm:^5.0.2"
-    chokidar: "npm:^3.5.3"
+    chokidar: "npm:^3.6.0"
     didyoumean: "npm:^1.2.2"
     dlv: "npm:^1.1.3"
-    fast-glob: "npm:^3.3.0"
+    fast-glob: "npm:^3.3.2"
     glob-parent: "npm:^6.0.2"
     is-glob: "npm:^4.0.3"
-    jiti: "npm:^1.21.0"
-    lilconfig: "npm:^2.1.0"
-    micromatch: "npm:^4.0.5"
+    jiti: "npm:^1.21.6"
+    lilconfig: "npm:^3.1.3"
+    micromatch: "npm:^4.0.8"
     normalize-path: "npm:^3.0.0"
     object-hash: "npm:^3.0.0"
-    picocolors: "npm:^1.0.0"
-    postcss: "npm:^8.4.23"
+    picocolors: "npm:^1.1.1"
+    postcss: "npm:^8.4.47"
     postcss-import: "npm:^15.1.0"
     postcss-js: "npm:^4.0.1"
-    postcss-load-config: "npm:^4.0.1"
-    postcss-nested: "npm:^6.0.1"
-    postcss-selector-parser: "npm:^6.0.11"
-    resolve: "npm:^1.22.2"
-    sucrase: "npm:^3.32.0"
+    postcss-load-config: "npm:^4.0.2"
+    postcss-nested: "npm:^6.2.0"
+    postcss-selector-parser: "npm:^6.1.2"
+    resolve: "npm:^1.22.8"
+    sucrase: "npm:^3.35.0"
   bin:
     tailwind: lib/cli.js
     tailwindcss: lib/cli.js
-  checksum: 10c0/9ed1449d3b98ce54c6c3a6c3354121a14b39d8dba28815ea1b0fc5a0b32422a744545ba357690468912a1a781593bc7da3d4e56367abed284a300ae1fb0ab42b
+  checksum: 10c0/f716ff38e0ea6f25c2b3d811e0aaac07f627193e8527d8ad945d5088d4a188ac1eb1e8ee9aef76d8525e756ffbb8369d717013d3ffc2f49fabaa94cb1e6784c1
   languageName: node
   linkType: hard
 
@@ -7448,17 +7393,17 @@ __metadata:
   languageName: node
   linkType: hard
 
-"tar@npm:^6.1.11, tar@npm:^6.2.1":
-  version: 6.2.1
-  resolution: "tar@npm:6.2.1"
+"tar@npm:^7.4.3":
+  version: 7.4.3
+  resolution: "tar@npm:7.4.3"
   dependencies:
-    chownr: "npm:^2.0.0"
-    fs-minipass: "npm:^2.0.0"
-    minipass: "npm:^5.0.0"
-    minizlib: "npm:^2.1.1"
-    mkdirp: "npm:^1.0.3"
-    yallist: "npm:^4.0.0"
-  checksum: 10c0/a5eca3eb50bc11552d453488344e6507156b9193efd7635e98e867fab275d527af53d8866e2370cd09dfe74378a18111622ace35af6a608e5223a7d27fe99537
+    "@isaacs/fs-minipass": "npm:^4.0.0"
+    chownr: "npm:^3.0.0"
+    minipass: "npm:^7.1.2"
+    minizlib: "npm:^3.0.1"
+    mkdirp: "npm:^3.0.1"
+    yallist: "npm:^5.0.0"
+  checksum: 10c0/d4679609bb2a9b48eeaf84632b6d844128d2412b95b6de07d53d8ee8baf4ca0857c9331dfa510390a0727b550fd543d4d1a10995ad86cdf078423fbb8d99831d
   languageName: node
   linkType: hard
 
@@ -7512,13 +7457,6 @@ __metadata:
   languageName: node
   linkType: hard
 
-"to-fast-properties@npm:^2.0.0":
-  version: 2.0.0
-  resolution: "to-fast-properties@npm:2.0.0"
-  checksum: 10c0/b214d21dbfb4bce3452b6244b336806ffea9c05297148d32ebb428d5c43ce7545bdfc65a1ceb58c9ef4376a65c0cb2854d645f33961658b3e3b4f84910ddcdd7
-  languageName: node
-  linkType: hard
-
 "to-regex-range@npm:^5.0.1":
   version: 5.0.1
   resolution: "to-regex-range@npm:5.0.1"
@@ -7557,11 +7495,11 @@ __metadata:
   linkType: hard
 
 "ts-api-utils@npm:^1.0.1":
-  version: 1.3.0
-  resolution: "ts-api-utils@npm:1.3.0"
+  version: 1.4.3
+  resolution: "ts-api-utils@npm:1.4.3"
   peerDependencies:
     typescript: ">=4.2.0"
-  checksum: 10c0/f54a0ba9ed56ce66baea90a3fa087a484002e807f28a8ccb2d070c75e76bde64bd0f6dce98b3802834156306050871b67eec325cb4e918015a360a3f0868c77c
+  checksum: 10c0/e65dc6e7e8141140c23e1dc94984bf995d4f6801919c71d6dc27cf0cd51b100a91ffcfe5217626193e5bea9d46831e8586febdc7e172df3f1091a7384299e23a
   languageName: node
   linkType: hard
 
@@ -7622,10 +7560,10 @@ __metadata:
   languageName: node
   linkType: hard
 
-"tslib@npm:^2.4.0, tslib@npm:^2.6.2":
-  version: 2.7.0
-  resolution: "tslib@npm:2.7.0"
-  checksum: 10c0/469e1d5bf1af585742128827000711efa61010b699cb040ab1800bcd3ccdd37f63ec30642c9e07c4439c1db6e46345582614275daca3e0f4abae29b0083f04a6
+"tslib@npm:2, tslib@npm:^2.4.0, tslib@npm:^2.6.2":
+  version: 2.8.1
+  resolution: "tslib@npm:2.8.1"
+  checksum: 10c0/9c4759110a19c53f992d9aae23aac5ced636e99887b51b9e61def52611732872ff7668757d4e4c61f19691e36f4da981cd9485e869b4a7408d689f6bf1f14e62
   languageName: node
   linkType: hard
 
@@ -7694,8 +7632,8 @@ __metadata:
   linkType: hard
 
 "typed-array-byte-offset@npm:^1.0.2":
-  version: 1.0.2
-  resolution: "typed-array-byte-offset@npm:1.0.2"
+  version: 1.0.3
+  resolution: "typed-array-byte-offset@npm:1.0.3"
   dependencies:
     available-typed-arrays: "npm:^1.0.7"
     call-bind: "npm:^1.0.7"
@@ -7703,41 +7641,42 @@ __metadata:
     gopd: "npm:^1.0.1"
     has-proto: "npm:^1.0.3"
     is-typed-array: "npm:^1.1.13"
-  checksum: 10c0/d2628bc739732072e39269389a758025f75339de2ed40c4f91357023c5512d237f255b633e3106c461ced41907c1bf9a533c7e8578066b0163690ca8bc61b22f
+    reflect.getprototypeof: "npm:^1.0.6"
+  checksum: 10c0/5da29585f96671c0521475226d3227000b3e01d1e99208b66bb05b75c7c8f4d0e9cc2e79920f3bfbc792a00102df1daa2608a2753e3f291b671d5a80245bde5b
   languageName: node
   linkType: hard
 
 "typed-array-length@npm:^1.0.6":
-  version: 1.0.6
-  resolution: "typed-array-length@npm:1.0.6"
+  version: 1.0.7
+  resolution: "typed-array-length@npm:1.0.7"
   dependencies:
     call-bind: "npm:^1.0.7"
     for-each: "npm:^0.3.3"
     gopd: "npm:^1.0.1"
-    has-proto: "npm:^1.0.3"
     is-typed-array: "npm:^1.1.13"
     possible-typed-array-names: "npm:^1.0.0"
-  checksum: 10c0/74253d7dc488eb28b6b2711cf31f5a9dcefc9c41b0681fd1c178ed0a1681b4468581a3626d39cd4df7aee3d3927ab62be06aa9ca74e5baf81827f61641445b77
+    reflect.getprototypeof: "npm:^1.0.6"
+  checksum: 10c0/e38f2ae3779584c138a2d8adfa8ecf749f494af3cd3cdafe4e688ce51418c7d2c5c88df1bd6be2bbea099c3f7cea58c02ca02ed438119e91f162a9de23f61295
   languageName: node
   linkType: hard
 
 "typescript@npm:^5":
-  version: 5.6.2
-  resolution: "typescript@npm:5.6.2"
+  version: 5.7.2
+  resolution: "typescript@npm:5.7.2"
   bin:
     tsc: bin/tsc
     tsserver: bin/tsserver
-  checksum: 10c0/3ed8297a8c7c56b7fec282532503d1ac795239d06e7c4966b42d4330c6cf433a170b53bcf93a130a7f14ccc5235de5560df4f1045eb7f3550b46ebed16d3c5e5
+  checksum: 10c0/a873118b5201b2ef332127ef5c63fb9d9c155e6fdbe211cbd9d8e65877283797cca76546bad742eea36ed7efbe3424a30376818f79c7318512064e8625d61622
   languageName: node
   linkType: hard
 
 "typescript@patch:typescript@npm%3A^5#optional!builtin<compat/typescript>":
-  version: 5.6.2
-  resolution: "typescript@patch:typescript@npm%3A5.6.2#optional!builtin<compat/typescript>::version=5.6.2&hash=b45daf"
+  version: 5.7.2
+  resolution: "typescript@patch:typescript@npm%3A5.7.2#optional!builtin<compat/typescript>::version=5.7.2&hash=b45daf"
   bin:
     tsc: bin/tsc
     tsserver: bin/tsserver
-  checksum: 10c0/e6c1662e4852e22fe4bbdca471dca3e3edc74f6f1df043135c44a18a7902037023ccb0abdfb754595ca9028df8920f2f8492c00fc3cbb4309079aae8b7de71cd
+  checksum: 10c0/c891ccf04008bc1305ba34053db951f8a4584b4a1bf2f68fd972c4a354df3dc5e62c8bfed4f6ac2d12e5b3b1c49af312c83a651048f818cd5b4949d17baacd79
   languageName: node
   linkType: hard
 
@@ -7784,6 +7723,7 @@ __metadata:
     isomorphic-fetch: "npm:^3.0.0"
     jest: "npm:^29.7.0"
     jest-environment-jsdom: "npm:^29.7.0"
+    jotai: "npm:^2.10.3"
     next: "npm:14.1.0"
     next-intl: "npm:^3.19.1"
     node-mocks-http: "npm:^1.14.1"
@@ -7801,21 +7741,21 @@ __metadata:
   languageName: unknown
   linkType: soft
 
-"unique-filename@npm:^3.0.0":
-  version: 3.0.0
-  resolution: "unique-filename@npm:3.0.0"
+"unique-filename@npm:^4.0.0":
+  version: 4.0.0
+  resolution: "unique-filename@npm:4.0.0"
   dependencies:
-    unique-slug: "npm:^4.0.0"
-  checksum: 10c0/6363e40b2fa758eb5ec5e21b3c7fb83e5da8dcfbd866cc0c199d5534c42f03b9ea9ab069769cc388e1d7ab93b4eeef28ef506ab5f18d910ef29617715101884f
+    unique-slug: "npm:^5.0.0"
+  checksum: 10c0/38ae681cceb1408ea0587b6b01e29b00eee3c84baee1e41fd5c16b9ed443b80fba90c40e0ba69627e30855570a34ba8b06702d4a35035d4b5e198bf5a64c9ddc
   languageName: node
   linkType: hard
 
-"unique-slug@npm:^4.0.0":
-  version: 4.0.0
-  resolution: "unique-slug@npm:4.0.0"
+"unique-slug@npm:^5.0.0":
+  version: 5.0.0
+  resolution: "unique-slug@npm:5.0.0"
   dependencies:
     imurmurhash: "npm:^0.1.4"
-  checksum: 10c0/cb811d9d54eb5821b81b18205750be84cb015c20a4a44280794e915f5a0a70223ce39066781a354e872df3572e8155c228f43ff0cce94c7cbf4da2cc7cbdd635
+  checksum: 10c0/d324c5a44887bd7e105ce800fcf7533d43f29c48757ac410afd42975de82cc38ea2035c0483f4de82d186691bf3208ef35c644f73aa2b1b20b8e651be5afd293
   languageName: node
   linkType: hard
 
@@ -7826,17 +7766,17 @@ __metadata:
   languageName: node
   linkType: hard
 
-"update-browserslist-db@npm:^1.1.0":
-  version: 1.1.0
-  resolution: "update-browserslist-db@npm:1.1.0"
+"update-browserslist-db@npm:^1.1.1":
+  version: 1.1.1
+  resolution: "update-browserslist-db@npm:1.1.1"
   dependencies:
-    escalade: "npm:^3.1.2"
-    picocolors: "npm:^1.0.1"
+    escalade: "npm:^3.2.0"
+    picocolors: "npm:^1.1.0"
   peerDependencies:
     browserslist: ">= 4.21.0"
   bin:
     update-browserslist-db: cli.js
-  checksum: 10c0/a7452de47785842736fb71547651c5bbe5b4dc1e3722ccf48a704b7b34e4dcf633991eaa8e4a6a517ffb738b3252eede3773bef673ef9021baa26b056d63a5b9
+  checksum: 10c0/536a2979adda2b4be81b07e311bd2f3ad5e978690987956bc5f514130ad50cac87cd22c710b686d79731e00fbee8ef43efe5fcd72baa241045209195d43dcc80
   languageName: node
   linkType: hard
 
@@ -7859,15 +7799,15 @@ __metadata:
   languageName: node
   linkType: hard
 
-"use-intl@npm:^3.19.4":
-  version: 3.19.4
-  resolution: "use-intl@npm:3.19.4"
+"use-intl@npm:^3.26.1":
+  version: 3.26.1
+  resolution: "use-intl@npm:3.26.1"
   dependencies:
     "@formatjs/fast-memoize": "npm:^2.2.0"
     intl-messageformat: "npm:^10.5.14"
   peerDependencies:
-    react: ^16.8.0 || ^17.0.0 || ^18.0.0
-  checksum: 10c0/f109d4e3e157cd64fb7c0c2e2f7ed62c009a9461e2b3eb17abc812515a9888bc783319392e7fec27c8aca85aa12cba1989ba74ae3a7b3a12f4ab37529e008e65
+    react: ^16.8.0 || ^17.0.0 || ^18.0.0 || >=19.0.0-rc <19.0.0 || ^19.0.0
+  checksum: 10c0/a6dd5681f393642da5b90e804237220eb7100102b78683def51cb8ffae6c7d7a6924699a0964ea62ab3198ea8b05182fe58b1832a4a700d4f948667641e66a3e
   languageName: node
   linkType: hard
 
@@ -7971,36 +7911,37 @@ __metadata:
   languageName: node
   linkType: hard
 
-"which-boxed-primitive@npm:^1.0.2":
-  version: 1.0.2
-  resolution: "which-boxed-primitive@npm:1.0.2"
+"which-boxed-primitive@npm:^1.0.2, which-boxed-primitive@npm:^1.1.0":
+  version: 1.1.0
+  resolution: "which-boxed-primitive@npm:1.1.0"
   dependencies:
-    is-bigint: "npm:^1.0.1"
-    is-boolean-object: "npm:^1.1.0"
-    is-number-object: "npm:^1.0.4"
-    is-string: "npm:^1.0.5"
-    is-symbol: "npm:^1.0.3"
-  checksum: 10c0/0a62a03c00c91dd4fb1035b2f0733c341d805753b027eebd3a304b9cb70e8ce33e25317add2fe9b5fea6f53a175c0633ae701ff812e604410ddd049777cd435e
+    is-bigint: "npm:^1.1.0"
+    is-boolean-object: "npm:^1.2.0"
+    is-number-object: "npm:^1.1.0"
+    is-string: "npm:^1.1.0"
+    is-symbol: "npm:^1.1.0"
+  checksum: 10c0/ee4e4bcf0026aeeda1b28d005ddfcf1d8d6025d1cf04b2271f8dbbdd13df9357ba7da657ec2d886520bccf8d93d9535454e44f38f201c5461a2fe7c838b455de
   languageName: node
   linkType: hard
 
-"which-builtin-type@npm:^1.1.3":
-  version: 1.1.4
-  resolution: "which-builtin-type@npm:1.1.4"
+"which-builtin-type@npm:^1.2.0":
+  version: 1.2.1
+  resolution: "which-builtin-type@npm:1.2.1"
   dependencies:
+    call-bound: "npm:^1.0.2"
     function.prototype.name: "npm:^1.1.6"
     has-tostringtag: "npm:^1.0.2"
     is-async-function: "npm:^2.0.0"
-    is-date-object: "npm:^1.0.5"
-    is-finalizationregistry: "npm:^1.0.2"
+    is-date-object: "npm:^1.1.0"
+    is-finalizationregistry: "npm:^1.1.0"
     is-generator-function: "npm:^1.0.10"
-    is-regex: "npm:^1.1.4"
+    is-regex: "npm:^1.2.1"
     is-weakref: "npm:^1.0.2"
     isarray: "npm:^2.0.5"
-    which-boxed-primitive: "npm:^1.0.2"
+    which-boxed-primitive: "npm:^1.1.0"
     which-collection: "npm:^1.0.2"
-    which-typed-array: "npm:^1.1.15"
-  checksum: 10c0/a4a76d20d869a81b1dbb4adea31edc7e6c1a4466d3ab7c2cd757c9219d48d3723b04076c85583257b0f0f8e3ebe5af337248b8ceed57b9051cb97bce5bd881d1
+    which-typed-array: "npm:^1.1.16"
+  checksum: 10c0/8dcf323c45e5c27887800df42fbe0431d0b66b1163849bb7d46b5a730ad6a96ee8bfe827d078303f825537844ebf20c02459de41239a0a9805e2fcb3cae0d471
   languageName: node
   linkType: hard
 
@@ -8016,16 +7957,16 @@ __metadata:
   languageName: node
   linkType: hard
 
-"which-typed-array@npm:^1.1.13, which-typed-array@npm:^1.1.14, which-typed-array@npm:^1.1.15":
-  version: 1.1.15
-  resolution: "which-typed-array@npm:1.1.15"
+"which-typed-array@npm:^1.1.13, which-typed-array@npm:^1.1.14, which-typed-array@npm:^1.1.15, which-typed-array@npm:^1.1.16":
+  version: 1.1.16
+  resolution: "which-typed-array@npm:1.1.16"
   dependencies:
     available-typed-arrays: "npm:^1.0.7"
     call-bind: "npm:^1.0.7"
     for-each: "npm:^0.3.3"
     gopd: "npm:^1.0.1"
     has-tostringtag: "npm:^1.0.2"
-  checksum: 10c0/4465d5348c044032032251be54d8988270e69c6b7154f8fcb2a47ff706fe36f7624b3a24246b8d9089435a8f4ec48c1c1025c5d6b499456b9e5eff4f48212983
+  checksum: 10c0/a9075293200db4fbce7c24d52731843542c5a19edfc66e31aa2cbefa788b5caa7ef05008f6e60d2c38d8198add6b92d0ddc2937918c5c308be398b1ebd8721af
   languageName: node
   linkType: hard
 
@@ -8040,14 +7981,14 @@ __metadata:
   languageName: node
   linkType: hard
 
-"which@npm:^4.0.0":
-  version: 4.0.0
-  resolution: "which@npm:4.0.0"
+"which@npm:^5.0.0":
+  version: 5.0.0
+  resolution: "which@npm:5.0.0"
   dependencies:
     isexe: "npm:^3.1.1"
   bin:
     node-which: bin/which.js
-  checksum: 10c0/449fa5c44ed120ccecfe18c433296a4978a7583bf2391c50abce13f76878d2476defde04d0f79db8165bdf432853c1f8389d0485ca6e8ebce3bbcded513d5e6a
+  checksum: 10c0/e556e4cd8b7dbf5df52408c9a9dd5ac6518c8c5267c8953f5b0564073c66ed5bf9503b14d876d0e9c7844d4db9725fb0dcf45d6e911e17e26ab363dc3965ae7b
   languageName: node
   linkType: hard
 
@@ -8147,12 +8088,19 @@ __metadata:
   languageName: node
   linkType: hard
 
+"yallist@npm:^5.0.0":
+  version: 5.0.0
+  resolution: "yallist@npm:5.0.0"
+  checksum: 10c0/a499c81ce6d4a1d260d4ea0f6d49ab4da09681e32c3f0472dee16667ed69d01dae63a3b81745a24bd78476ec4fcf856114cb4896ace738e01da34b2c42235416
+  languageName: node
+  linkType: hard
+
 "yaml@npm:^2.3.4":
-  version: 2.5.1
-  resolution: "yaml@npm:2.5.1"
+  version: 2.6.1
+  resolution: "yaml@npm:2.6.1"
   bin:
     yaml: bin.mjs
-  checksum: 10c0/40fba5682898dbeeb3319e358a968fe886509fab6f58725732a15f8dda3abac509f91e76817c708c9959a15f786f38ff863c1b88062d7c1162c5334a7d09cb4a
+  checksum: 10c0/aebf07f61c72b38c74d2b60c3a3ccf89ee4da45bcd94b2bfb7899ba07a5257625a7c9f717c65a6fc511563d48001e01deb1d9e55f0133f3e2edf86039c8c1be7
   languageName: node
   linkType: hard
 
@@ -8193,8 +8141,8 @@ __metadata:
   linkType: hard
 
 "zod@npm:^3.22.4":
-  version: 3.23.8
-  resolution: "zod@npm:3.23.8"
-  checksum: 10c0/8f14c87d6b1b53c944c25ce7a28616896319d95bc46a9660fe441adc0ed0a81253b02b5abdaeffedbeb23bdd25a0bf1c29d2c12dd919aef6447652dd295e3e69
+  version: 3.24.1
+  resolution: "zod@npm:3.24.1"
+  checksum: 10c0/0223d21dbaa15d8928fe0da3b54696391d8e3e1e2d0283a1a070b5980a1dbba945ce631c2d1eccc088fdbad0f2dfa40155590bf83732d3ac4fcca2cc9237591b
   languageName: node
   linkType: hard
-- 
GitLab


From e46ddbdeb019ddcb6bcfb1606721ef59de11560d Mon Sep 17 00:00:00 2001
From: FionaDmello <40391218+FionaDmello@users.noreply.github.com>
Date: Fri, 13 Dec 2024 15:47:25 +0100
Subject: [PATCH 04/37] refactored code in category bar to handle api call,
 reused component in details view

---
 src/app/[locale]/results/details/page.tsx     |   6 +-
 src/app/[locale]/results/page.tsx             | 102 +++-----------
 src/components/app/results/CategoryBar.tsx    | 131 +++++++++++++-----
 .../app/results/Details/RelatedResults.tsx    |  26 ++++
 src/components/layout/Error.tsx               |   2 +-
 src/components/layout/Spinner.tsx             |   2 +-
 6 files changed, 151 insertions(+), 118 deletions(-)
 create mode 100644 src/components/app/results/Details/RelatedResults.tsx

diff --git a/src/app/[locale]/results/details/page.tsx b/src/app/[locale]/results/details/page.tsx
index a2f90dd..38434d5 100644
--- a/src/app/[locale]/results/details/page.tsx
+++ b/src/app/[locale]/results/details/page.tsx
@@ -5,12 +5,13 @@ import React, { Suspense } from "react";
 
 import BackBar from "@/components/app/results/BackBar";
 import DetailsItemCard from "@/components/app/results/Details/DetailsItemCard";
+import RelatedResults from "@/components/app/results/Details/RelatedResults";
 
 //import { ResultItem } from "@/types/types";
 
 const DetailsComponent = () => {
   const searchParams = useSearchParams();
-  const activeCategory = searchParams.get("category");
+  const currentlyActiveCategory = searchParams.get("category");
   const searchText = searchParams.get("searchText") ?? undefined;
   const detailsText = searchParams.get("detailsText") ?? undefined;
 
@@ -18,7 +19,8 @@ const DetailsComponent = () => {
     <div className="flex flex-col md:px-10 lg:px-16 py-5 mb-8 bg-whitesmoke h-full">
       <BackBar />
       <DetailsItemCard />
-      <div>{activeCategory}</div>
+      <RelatedResults />
+      <div>{currentlyActiveCategory}</div>
       <div>{searchText}</div>
       <div>{detailsText}</div>
     </div>
diff --git a/src/app/[locale]/results/page.tsx b/src/app/[locale]/results/page.tsx
index c65a6fd..70edcad 100644
--- a/src/app/[locale]/results/page.tsx
+++ b/src/app/[locale]/results/page.tsx
@@ -1,102 +1,38 @@
 "use client";
 
-import { useSearchParams } from "next/navigation";
-import React, { Suspense, useEffect, useRef, useState } from "react";
+import React, { Suspense, useState } from "react";
 
 import BackBar from "@/components/app/results/BackBar";
 import CategoryBar from "@/components/app/results/CategoryBar";
 import ListResults from "@/components/app/results/ListResults";
 import Error from "@/components/layout/Error";
 import MobileSearch from "@/components/layout/MobileSearch";
-import Spinner from "@/components/layout/Spinner";
 import type { Category } from "@/types/types";
-import { getAllCategories, getCategoryCounts } from "@/utils/apiCall";
 
 const ResultsComponent = () => {
-  const resultParams = useSearchParams();
-
-  const [categories, setCategories] = useState<Category[]>([]);
-  const [baseCategories, setBaseCategories] = useState<Category[]>([]);
-  const [activeCategory, setCategory] = useState<Category>();
-  const [categoryLoading, setCategoryLoading] = useState(true);
+  //const resultParams = useSearchParams();
   const [hasBcError, setHasBcError] = useState(false);
   const [hasSearchError, setHasSearchError] = useState(false);
-
-  const firstRender = useRef(true);
-
-  const category = resultParams.get("category");
-  const searchText = resultParams.get("searchText") ?? undefined;
-
-  useEffect(() => {
-    const loadCategories = async () => {
-      setCategoryLoading(true);
-      try {
-        const categories = await getAllCategories();
-        setBaseCategories(categories);
-      } catch (error) {
-        setHasBcError(true);
-      } finally {
-        setCategoryLoading(false);
-      }
-    };
-
-    loadCategories().catch(console.error);
-  }, []);
-
-  useEffect(() => {
-    if (!activeCategory && categories.length) {
-      setCategory(categories[0]);
-    }
-  }, [activeCategory, categories]);
-
-  useEffect(() => {
-    categories.forEach((cat: Category) => (cat.id === category ? setCategory(cat) : null));
-  }, [category, categories]);
-
-  useEffect(() => {
-    const updateCategoryCount = async () => {
-      try {
-        setHasSearchError(false);
-        const categoryCounts = await getCategoryCounts(searchText);
-        const categories = structuredClone(baseCategories);
-
-        categories.forEach((cat: Category) => (cat.count = categoryCounts[cat.id] ?? 0));
-        setCategories(categories);
-      } catch (error) {
-        console.error("Failed to fetch category counts", error);
-        setHasSearchError(true);
-      } finally {
-        setCategoryLoading(false);
-      }
-    };
-
-    if (firstRender.current) {
-      firstRender.current = false;
-    } else {
-      updateCategoryCount().catch(console.error);
-    }
-  }, [baseCategories, searchText]);
+  const [activeCategory, setActiveCategory] = useState<Category>();
 
   return (
     <div className="grow flex flex-col justify-start">
-      {categoryLoading ? (
-        <Spinner />
-      ) : hasBcError || hasSearchError ? (
-        <Error />
-      ) : (
-        <>
-          <CategoryBar
-            categories={categories}
-            category={activeCategory}
-            setCategory={setCategory}
-          />
-          <div className="flex flex-col md:px-10 lg:px-16 py-5 mb-8 bg-whitesmoke h-full">
-            <BackBar />
-            <MobileSearch />
-            {activeCategory && <ListResults activeCategory={activeCategory} />}
-          </div>
-        </>
-      )}
+      <>
+        <CategoryBar
+          activeCategory={activeCategory}
+          hasBcError={hasBcError}
+          hasSearchError={hasSearchError}
+          setActiveCategory={setActiveCategory}
+          setHasBcError={setHasBcError}
+          setHasSearchError={setHasSearchError}
+        />
+        <div className="flex flex-col md:px-10 lg:px-16 py-5 mb-8 bg-whitesmoke h-full">
+          <BackBar />
+          <MobileSearch />
+          {activeCategory && <ListResults activeCategory={activeCategory} />}
+        </div>
+      </>
+      {hasBcError || hasSearchError ? <Error /> : null}
     </div>
   );
 };
diff --git a/src/components/app/results/CategoryBar.tsx b/src/components/app/results/CategoryBar.tsx
index b3dfd54..1b91cf5 100644
--- a/src/components/app/results/CategoryBar.tsx
+++ b/src/components/app/results/CategoryBar.tsx
@@ -1,49 +1,118 @@
+"use client";
 import { useSearchParams } from "next/navigation";
 import { useTranslations } from "next-intl";
-import { Dispatch, SetStateAction, Suspense } from "react";
+import { Dispatch, SetStateAction, Suspense, useEffect, useState, useRef } from "react";
 
 import { Link } from "@/i18n";
 import type { Category } from "@/types/types";
+import { getAllCategories, getCategoryCounts } from "@/utils/apiCall";
 
 type Props = {
-  categories: Category[];
-  category?: Category;
-  setCategory: Dispatch<SetStateAction<Category | undefined>>;
+  activeCategory?: Category;
+  hasBcError: boolean;
+  hasSearchError: boolean;
+  setActiveCategory: Dispatch<SetStateAction<Category | undefined>>;
+  setHasBcError: Dispatch<SetStateAction<boolean>>;
+  setHasSearchError: Dispatch<SetStateAction<boolean>>;
 };
 
-const CategoryBarComponent = ({ categories, category, setCategory }: Props) => {
+const CategoryBarComponent = ({
+  activeCategory,
+  hasBcError,
+  hasSearchError,
+  setActiveCategory,
+  setHasBcError,
+  setHasSearchError,
+}: Props) => {
   const c = useTranslations("Categories");
   const resultParams = useSearchParams();
-  const searchText = resultParams.get("searchText");
+  //const searchText = resultParams.get("searchText");
   const formatter = Intl.NumberFormat("en", { notation: "compact" });
+
+  const [categories, setCategories] = useState<Category[]>([]);
+  const [baseCategories, setBaseCategories] = useState<Category[]>([]);
+
+  const firstRender = useRef(true);
+
+  const category = resultParams.get("category");
+  const searchText = resultParams.get("searchText") ?? undefined;
   const search = searchText ? `&searchText=${searchText}` : "";
 
+  useEffect(() => {
+    const loadCategories = async () => {
+      try {
+        const categories = await getAllCategories();
+        setBaseCategories(categories);
+      } catch (error) {
+        setHasBcError(true);
+      }
+    };
+
+    loadCategories().catch(console.error);
+  }, [setHasBcError]);
+
+  useEffect(() => {
+    if (!activeCategory && categories.length) {
+      setActiveCategory(categories[0]);
+    }
+  }, [activeCategory, categories, setActiveCategory]);
+
+  useEffect(() => {
+    categories.forEach((cat: Category) => (cat.id === category ? setActiveCategory(cat) : null));
+  }, [category, categories, setActiveCategory]);
+
+  useEffect(() => {
+    const updateCategoryCount = async () => {
+      try {
+        setHasSearchError(false);
+        const categoryCounts = await getCategoryCounts(searchText);
+        const categories = structuredClone(baseCategories);
+
+        categories.forEach((cat: Category) => (cat.count = categoryCounts[cat.id] ?? 0));
+        setCategories(categories);
+      } catch (error) {
+        console.error("Failed to fetch category counts", error);
+        setHasSearchError(true);
+      }
+    };
+
+    if (firstRender.current) {
+      firstRender.current = false;
+    } else {
+      updateCategoryCount().catch(console.error);
+    }
+  }, [baseCategories, searchText, setHasSearchError, setHasBcError]);
+
   return (
-    <div className="bg-primary-helmholtz-dunkelblau text-primary-helmholtz-weiss grid grid-cols-2 md:grid-cols-4 lg:grid-cols-5 xl:grid-cols-6 2xl:flex gap-y-2 gap-x-2 xl:gap-x-6 px-4 pt-2 pb-3 md:px-10 lg:px-16 xl:pt-4 xl:min-h-24">
-      {categories.map((o, idx) => (
-        <Link
-          href={`/results?category=${o.id}${search}`}
-          shallow
-          onClick={() => setCategory(o)}
-          key={idx}
-          className={`${
-            o.id === category?.id
-              ? "font-semibold underline decoration-secondary-helmholtz-mint underline-offset-[20px]"
-              : "text-blue-100 hover:rounded-full hover:bg-white/[0.12] hover:font-medium hover:py-3 hover:px-2"
-          } flex place-content-center cursor-pointer text-md w-full flex-1 py-2 font-normal text-primary-helmholtz-weiss `}
-        >
-          <div className="xl:basis-1/4 2xl:basis-1/5 mr-2 ">
-            {/* count indicator for category */}
-            <span className="inline-flex h-11 w-11 place-content-center rounded-full bg-primary-helmholtz-hellblau object-contain align-middle">
-              <span className="self-center font-medium text-primary-helmholtz-weiss">
-                {formatter.format(o.count)}
-              </span>
-            </span>
-          </div>
-          <div className="basis-2/3 self-center text-left">{c(o.id, { count: o.count })}</div>
-        </Link>
-      ))}
-    </div>
+    <>
+      {hasBcError || hasSearchError ? null : (
+        <div className="bg-primary-helmholtz-dunkelblau text-primary-helmholtz-weiss grid grid-cols-2 md:grid-cols-4 lg:grid-cols-5 xl:grid-cols-6 2xl:flex gap-y-2 gap-x-2 xl:gap-x-6 px-4 pt-2 pb-3 md:px-10 lg:px-16 xl:pt-4 xl:min-h-24">
+          {categories.map((o, idx) => (
+            <Link
+              href={`/results?category=${o.id}${search}`}
+              shallow
+              onClick={() => setActiveCategory(o)}
+              key={idx}
+              className={`${
+                o.id === activeCategory?.id
+                  ? "font-semibold underline decoration-secondary-helmholtz-mint underline-offset-[20px]"
+                  : "text-blue-100 hover:rounded-full hover:bg-white/[0.12] hover:font-medium hover:py-3 hover:px-2"
+              } flex place-content-center cursor-pointer text-md w-full flex-1 py-2 font-normal text-primary-helmholtz-weiss `}
+            >
+              <div className="xl:basis-1/4 2xl:basis-1/5 mr-2 ">
+                {/* count indicator for category */}
+                <span className="inline-flex h-11 w-11 place-content-center rounded-full bg-primary-helmholtz-hellblau object-contain align-middle">
+                  <span className="self-center font-medium text-primary-helmholtz-weiss">
+                    {formatter.format(o.count)}
+                  </span>
+                </span>
+              </div>
+              <div className="basis-2/3 self-center text-left">{c(o.id, { count: o.count })}</div>
+            </Link>
+          ))}
+        </div>
+      )}
+    </>
   );
 };
 
diff --git a/src/components/app/results/Details/RelatedResults.tsx b/src/components/app/results/Details/RelatedResults.tsx
new file mode 100644
index 0000000..4fa0e54
--- /dev/null
+++ b/src/components/app/results/Details/RelatedResults.tsx
@@ -0,0 +1,26 @@
+import React, { useState } from "react";
+
+import Error from "@/components/layout/Error";
+import { Category } from "@/types/types";
+
+import CategoryBar from "../CategoryBar";
+const RelatedResults = () => {
+  const [hasBcError, setHasBcError] = useState(false);
+  const [hasSearchError, setHasSearchError] = useState(false);
+  const [activeCategory, setActiveCategory] = useState<Category>();
+  return (
+    <div className="m-4 space-y-2 rounded-xl border-2 border-primary-helmholtz-hellblau/20 px-5 py-4 shadow-lg shadow-secondary-helmholtz-highlightblau bg-white">
+      <CategoryBar
+        activeCategory={activeCategory}
+        hasBcError={hasBcError}
+        hasSearchError={hasSearchError}
+        setActiveCategory={setActiveCategory}
+        setHasBcError={setHasBcError}
+        setHasSearchError={setHasSearchError}
+      />
+      {hasBcError || hasSearchError ? <Error /> : null}
+    </div>
+  );
+};
+
+export default RelatedResults;
diff --git a/src/components/layout/Error.tsx b/src/components/layout/Error.tsx
index 472b2d6..0b940c1 100644
--- a/src/components/layout/Error.tsx
+++ b/src/components/layout/Error.tsx
@@ -4,7 +4,7 @@ import React from "react";
 import ErrorWarning from "@/resources/images/misc/error-warning.png";
 const Error = () => {
   return (
-    <div className="grow flex flex-col justify-center items-center p-10 ">
+    <div className="grow flex flex-col justify-center items-center p-10 bg-whitesmoke h-full">
       {/* TODO: change the font on the icon */}
       <Image
         src={ErrorWarning || ""}
diff --git a/src/components/layout/Spinner.tsx b/src/components/layout/Spinner.tsx
index a2ee151..e06cbfe 100644
--- a/src/components/layout/Spinner.tsx
+++ b/src/components/layout/Spinner.tsx
@@ -1,5 +1,5 @@
 const Spinner = () => (
-  <div className="grow flex flex-col p-10">
+  <div className="grow flex flex-col p-10 bg-whitesmoke h-full">
     <svg
       className="m-auto align-middle max-h-20 max-w-20 animate-spin text-secondary-helmholtz-mint"
       xmlns="http://www.w3.org/2000/svg"
-- 
GitLab


From 035bb867eb152d3904381d20a94c9f6650fdb40d Mon Sep 17 00:00:00 2001
From: FionaDmello <40391218+FionaDmello@users.noreply.github.com>
Date: Fri, 13 Dec 2024 17:09:01 +0100
Subject: [PATCH 05/37] updated workflow of category bar to show only
 unselected categories in details view and all categories in normal results
 view

---
 src/components/app/results/CategoryBar.tsx    | 31 ++++++++++++++-----
 .../app/results/Details/RelatedResults.tsx    |  8 ++++-
 2 files changed, 30 insertions(+), 9 deletions(-)

diff --git a/src/components/app/results/CategoryBar.tsx b/src/components/app/results/CategoryBar.tsx
index 1b91cf5..7614a8e 100644
--- a/src/components/app/results/CategoryBar.tsx
+++ b/src/components/app/results/CategoryBar.tsx
@@ -14,12 +14,14 @@ type Props = {
   setActiveCategory: Dispatch<SetStateAction<Category | undefined>>;
   setHasBcError: Dispatch<SetStateAction<boolean>>;
   setHasSearchError: Dispatch<SetStateAction<boolean>>;
+  inDetailsView?: boolean;
 };
 
 const CategoryBarComponent = ({
   activeCategory,
   hasBcError,
   hasSearchError,
+  inDetailsView,
   setActiveCategory,
   setHasBcError,
   setHasSearchError,
@@ -28,28 +30,35 @@ const CategoryBarComponent = ({
   const resultParams = useSearchParams();
   //const searchText = resultParams.get("searchText");
   const formatter = Intl.NumberFormat("en", { notation: "compact" });
-
+  //const [category, setCategory] = useState<Category>();
   const [categories, setCategories] = useState<Category[]>([]);
   const [baseCategories, setBaseCategories] = useState<Category[]>([]);
 
   const firstRender = useRef(true);
 
-  const category = resultParams.get("category");
+  const currentlyActivecategory = resultParams.get("category") ?? undefined;
   const searchText = resultParams.get("searchText") ?? undefined;
+  const detailsText = resultParams.get("detailsText") ?? undefined;
+
+  const details = detailsText ? `&detailsText=${detailsText}` : "";
   const search = searchText ? `&searchText=${searchText}` : "";
 
   useEffect(() => {
     const loadCategories = async () => {
       try {
-        const categories = await getAllCategories();
-        setBaseCategories(categories);
+        const allCategories = await getAllCategories();
+        if (inDetailsView && currentlyActivecategory) {
+          setBaseCategories(allCategories.filter((cat) => cat.id !== currentlyActivecategory));
+        } else {
+          setBaseCategories(allCategories);
+        }
       } catch (error) {
         setHasBcError(true);
       }
     };
 
     loadCategories().catch(console.error);
-  }, [setHasBcError]);
+  }, [inDetailsView, currentlyActivecategory, setHasBcError]);
 
   useEffect(() => {
     if (!activeCategory && categories.length) {
@@ -58,8 +67,10 @@ const CategoryBarComponent = ({
   }, [activeCategory, categories, setActiveCategory]);
 
   useEffect(() => {
-    categories.forEach((cat: Category) => (cat.id === category ? setActiveCategory(cat) : null));
-  }, [category, categories, setActiveCategory]);
+    categories.forEach((cat: Category) =>
+      cat.id === currentlyActivecategory ? setActiveCategory(cat) : null
+    );
+  }, [currentlyActivecategory, categories, setActiveCategory]);
 
   useEffect(() => {
     const updateCategoryCount = async () => {
@@ -89,7 +100,11 @@ const CategoryBarComponent = ({
         <div className="bg-primary-helmholtz-dunkelblau text-primary-helmholtz-weiss grid grid-cols-2 md:grid-cols-4 lg:grid-cols-5 xl:grid-cols-6 2xl:flex gap-y-2 gap-x-2 xl:gap-x-6 px-4 pt-2 pb-3 md:px-10 lg:px-16 xl:pt-4 xl:min-h-24">
           {categories.map((o, idx) => (
             <Link
-              href={`/results?category=${o.id}${search}`}
+              href={
+                inDetailsView
+                  ? `/results/details?&category=${currentlyActivecategory}${search}${details}`
+                  : `/results?category=${o.id}${search}`
+              }
               shallow
               onClick={() => setActiveCategory(o)}
               key={idx}
diff --git a/src/components/app/results/Details/RelatedResults.tsx b/src/components/app/results/Details/RelatedResults.tsx
index 4fa0e54..b68c5cd 100644
--- a/src/components/app/results/Details/RelatedResults.tsx
+++ b/src/components/app/results/Details/RelatedResults.tsx
@@ -1,4 +1,4 @@
-import React, { useState } from "react";
+import React, { useState, useEffect } from "react";
 
 import Error from "@/components/layout/Error";
 import { Category } from "@/types/types";
@@ -8,6 +8,11 @@ const RelatedResults = () => {
   const [hasBcError, setHasBcError] = useState(false);
   const [hasSearchError, setHasSearchError] = useState(false);
   const [activeCategory, setActiveCategory] = useState<Category>();
+
+  useEffect(() => {
+    console.log("new active category in details view", activeCategory);
+  }, [activeCategory]);
+
   return (
     <div className="m-4 space-y-2 rounded-xl border-2 border-primary-helmholtz-hellblau/20 px-5 py-4 shadow-lg shadow-secondary-helmholtz-highlightblau bg-white">
       <CategoryBar
@@ -17,6 +22,7 @@ const RelatedResults = () => {
         setActiveCategory={setActiveCategory}
         setHasBcError={setHasBcError}
         setHasSearchError={setHasSearchError}
+        inDetailsView
       />
       {hasBcError || hasSearchError ? <Error /> : null}
     </div>
-- 
GitLab


From 2a088c6ee4dcb9616cd5fb82ebf8e6698a28c836 Mon Sep 17 00:00:00 2001
From: FionaDmello <40391218+FionaDmello@users.noreply.github.com>
Date: Fri, 13 Dec 2024 17:12:49 +0100
Subject: [PATCH 06/37] code clean up

---
 src/app/[locale]/results/page.tsx               |  1 -
 src/components/app/results/CategoryBar.tsx      | 17 ++++++++---------
 .../app/results/Details/RelatedResults.tsx      |  4 ----
 3 files changed, 8 insertions(+), 14 deletions(-)

diff --git a/src/app/[locale]/results/page.tsx b/src/app/[locale]/results/page.tsx
index 70edcad..32b3524 100644
--- a/src/app/[locale]/results/page.tsx
+++ b/src/app/[locale]/results/page.tsx
@@ -10,7 +10,6 @@ import MobileSearch from "@/components/layout/MobileSearch";
 import type { Category } from "@/types/types";
 
 const ResultsComponent = () => {
-  //const resultParams = useSearchParams();
   const [hasBcError, setHasBcError] = useState(false);
   const [hasSearchError, setHasSearchError] = useState(false);
   const [activeCategory, setActiveCategory] = useState<Category>();
diff --git a/src/components/app/results/CategoryBar.tsx b/src/components/app/results/CategoryBar.tsx
index 7614a8e..ea072d5 100644
--- a/src/components/app/results/CategoryBar.tsx
+++ b/src/components/app/results/CategoryBar.tsx
@@ -27,22 +27,21 @@ const CategoryBarComponent = ({
   setHasSearchError,
 }: Props) => {
   const c = useTranslations("Categories");
-  const resultParams = useSearchParams();
-  //const searchText = resultParams.get("searchText");
-  const formatter = Intl.NumberFormat("en", { notation: "compact" });
-  //const [category, setCategory] = useState<Category>();
-  const [categories, setCategories] = useState<Category[]>([]);
-  const [baseCategories, setBaseCategories] = useState<Category[]>([]);
-
-  const firstRender = useRef(true);
 
+  const resultParams = useSearchParams();
   const currentlyActivecategory = resultParams.get("category") ?? undefined;
   const searchText = resultParams.get("searchText") ?? undefined;
   const detailsText = resultParams.get("detailsText") ?? undefined;
-
   const details = detailsText ? `&detailsText=${detailsText}` : "";
   const search = searchText ? `&searchText=${searchText}` : "";
 
+  const formatter = Intl.NumberFormat("en", { notation: "compact" });
+
+  const [categories, setCategories] = useState<Category[]>([]);
+  const [baseCategories, setBaseCategories] = useState<Category[]>([]);
+
+  const firstRender = useRef(true);
+
   useEffect(() => {
     const loadCategories = async () => {
       try {
diff --git a/src/components/app/results/Details/RelatedResults.tsx b/src/components/app/results/Details/RelatedResults.tsx
index b68c5cd..678a317 100644
--- a/src/components/app/results/Details/RelatedResults.tsx
+++ b/src/components/app/results/Details/RelatedResults.tsx
@@ -9,10 +9,6 @@ const RelatedResults = () => {
   const [hasSearchError, setHasSearchError] = useState(false);
   const [activeCategory, setActiveCategory] = useState<Category>();
 
-  useEffect(() => {
-    console.log("new active category in details view", activeCategory);
-  }, [activeCategory]);
-
   return (
     <div className="m-4 space-y-2 rounded-xl border-2 border-primary-helmholtz-hellblau/20 px-5 py-4 shadow-lg shadow-secondary-helmholtz-highlightblau bg-white">
       <CategoryBar
-- 
GitLab


From dbf5bfce3ae70983df5bdba7ce371e2fe7d29a65 Mon Sep 17 00:00:00 2001
From: FionaDmello <40391218+FionaDmello@users.noreply.github.com>
Date: Fri, 13 Dec 2024 17:14:19 +0100
Subject: [PATCH 07/37] some more code clean up and formatting

---
 src/app/[locale]/results/details/page.tsx             | 2 --
 src/components/app/results/CategoryBar.tsx            | 2 +-
 src/components/app/results/Details/RelatedResults.tsx | 2 +-
 3 files changed, 2 insertions(+), 4 deletions(-)

diff --git a/src/app/[locale]/results/details/page.tsx b/src/app/[locale]/results/details/page.tsx
index 38434d5..e640d6f 100644
--- a/src/app/[locale]/results/details/page.tsx
+++ b/src/app/[locale]/results/details/page.tsx
@@ -7,8 +7,6 @@ import BackBar from "@/components/app/results/BackBar";
 import DetailsItemCard from "@/components/app/results/Details/DetailsItemCard";
 import RelatedResults from "@/components/app/results/Details/RelatedResults";
 
-//import { ResultItem } from "@/types/types";
-
 const DetailsComponent = () => {
   const searchParams = useSearchParams();
   const currentlyActiveCategory = searchParams.get("category");
diff --git a/src/components/app/results/CategoryBar.tsx b/src/components/app/results/CategoryBar.tsx
index ea072d5..2874684 100644
--- a/src/components/app/results/CategoryBar.tsx
+++ b/src/components/app/results/CategoryBar.tsx
@@ -11,10 +11,10 @@ type Props = {
   activeCategory?: Category;
   hasBcError: boolean;
   hasSearchError: boolean;
+  inDetailsView?: boolean;
   setActiveCategory: Dispatch<SetStateAction<Category | undefined>>;
   setHasBcError: Dispatch<SetStateAction<boolean>>;
   setHasSearchError: Dispatch<SetStateAction<boolean>>;
-  inDetailsView?: boolean;
 };
 
 const CategoryBarComponent = ({
diff --git a/src/components/app/results/Details/RelatedResults.tsx b/src/components/app/results/Details/RelatedResults.tsx
index 678a317..a6aaead 100644
--- a/src/components/app/results/Details/RelatedResults.tsx
+++ b/src/components/app/results/Details/RelatedResults.tsx
@@ -1,4 +1,4 @@
-import React, { useState, useEffect } from "react";
+import React, { useState } from "react";
 
 import Error from "@/components/layout/Error";
 import { Category } from "@/types/types";
-- 
GitLab


From 3f513dd57967cded3d0f367a61f8897b3cc479b6 Mon Sep 17 00:00:00 2001
From: FionaDmello <40391218+FionaDmello@users.noreply.github.com>
Date: Mon, 6 Jan 2025 12:10:51 +0100
Subject: [PATCH 08/37] run an alternate search for related items and display
 them under the new category bar

---
 src/components/app/results/CategoryBar.tsx            |  9 +++++++--
 src/components/app/results/Details/RelatedResults.tsx |  3 +++
 src/components/app/results/ListResults.tsx            | 10 ++++++++--
 src/components/app/results/ListResults/ResultItem.tsx |  2 +-
 4 files changed, 19 insertions(+), 5 deletions(-)

diff --git a/src/components/app/results/CategoryBar.tsx b/src/components/app/results/CategoryBar.tsx
index 2874684..98f169c 100644
--- a/src/components/app/results/CategoryBar.tsx
+++ b/src/components/app/results/CategoryBar.tsx
@@ -74,8 +74,13 @@ const CategoryBarComponent = ({
   useEffect(() => {
     const updateCategoryCount = async () => {
       try {
+        const updatedSearchText =
+          searchText || detailsText
+            ? (searchText ? searchText : "") + " " + (detailsText ? detailsText : "")
+            : undefined;
+
         setHasSearchError(false);
-        const categoryCounts = await getCategoryCounts(searchText);
+        const categoryCounts = await getCategoryCounts(updatedSearchText);
         const categories = structuredClone(baseCategories);
 
         categories.forEach((cat: Category) => (cat.count = categoryCounts[cat.id] ?? 0));
@@ -91,7 +96,7 @@ const CategoryBarComponent = ({
     } else {
       updateCategoryCount().catch(console.error);
     }
-  }, [baseCategories, searchText, setHasSearchError, setHasBcError]);
+  }, [baseCategories, searchText, detailsText, setHasSearchError, setHasBcError]);
 
   return (
     <>
diff --git a/src/components/app/results/Details/RelatedResults.tsx b/src/components/app/results/Details/RelatedResults.tsx
index a6aaead..bacba36 100644
--- a/src/components/app/results/Details/RelatedResults.tsx
+++ b/src/components/app/results/Details/RelatedResults.tsx
@@ -1,9 +1,11 @@
 import React, { useState } from "react";
 
+import ListResults from "@/components/app/results/ListResults";
 import Error from "@/components/layout/Error";
 import { Category } from "@/types/types";
 
 import CategoryBar from "../CategoryBar";
+
 const RelatedResults = () => {
   const [hasBcError, setHasBcError] = useState(false);
   const [hasSearchError, setHasSearchError] = useState(false);
@@ -20,6 +22,7 @@ const RelatedResults = () => {
         setHasSearchError={setHasSearchError}
         inDetailsView
       />
+      {activeCategory && <ListResults activeCategory={activeCategory} />}
       {hasBcError || hasSearchError ? <Error /> : null}
     </div>
   );
diff --git a/src/components/app/results/ListResults.tsx b/src/components/app/results/ListResults.tsx
index 5a5f38e..f702a33 100644
--- a/src/components/app/results/ListResults.tsx
+++ b/src/components/app/results/ListResults.tsx
@@ -28,6 +28,7 @@ const ListResultsComponent = ({ activeCategory }: Props) => {
   const [availableFilters, setAvailableFilters] = useState<FilterEntity[]>([]);
   const [selectedFilters, setSelectedFilters] = useState<FilterEntity[]>([]);
   const searchText = resultParams.get("searchText") ?? undefined;
+  const detailsText = resultParams.get("detailsText") ?? undefined;
   // define this here to make it possible to change later
   const resultsPerPage = 10;
 
@@ -59,10 +60,15 @@ const ListResultsComponent = ({ activeCategory }: Props) => {
   useEffect(() => {
     const updateResultList = async () => {
       setDataLoading(true);
+      const updatedSearchText =
+        searchText || detailsText
+          ? (searchText ? searchText : "") + " " + (detailsText ? detailsText : "")
+          : undefined;
+
       try {
         const searchResult = await search(
           activeCategory?.id,
-          searchText,
+          updatedSearchText,
           resultsPerPage,
           start,
           selectedFilters
@@ -87,7 +93,7 @@ const ListResultsComponent = ({ activeCategory }: Props) => {
     };
 
     updateResultList().catch(console.error);
-  }, [activeCategory, searchText, start, resultsPerPage, selectedFilters]);
+  }, [activeCategory, searchText, detailsText, start, resultsPerPage, selectedFilters]);
 
   return (
     <>
diff --git a/src/components/app/results/ListResults/ResultItem.tsx b/src/components/app/results/ListResults/ResultItem.tsx
index 6316785..8b523f9 100644
--- a/src/components/app/results/ListResults/ResultItem.tsx
+++ b/src/components/app/results/ListResults/ResultItem.tsx
@@ -108,7 +108,7 @@ const ResultItem = ({ item, idx, searchText, activeCategory, inDetailsPage }: Pr
   const handleDetailSearch = () => {
     setDetailsItem(() => item);
     router.push(
-      `/results/details?category=${activeCategory?.id}${searchText ? `&searchText=${searchText}` : ``}&detailsText=${item.id}`
+      `/results/details?category=${activeCategory?.id}${searchText ? `&searchText=${searchText}` : ``}&detailsText=${item.name}`
     );
   };
 
-- 
GitLab


From 4f801c4e48ce73f17133bef46d3cdb1aea378492 Mon Sep 17 00:00:00 2001
From: FionaDmello <40391218+FionaDmello@users.noreply.github.com>
Date: Mon, 6 Jan 2025 12:24:34 +0100
Subject: [PATCH 09/37] code clean up and implemented resetting of page number
 on change of category by user

---
 src/app/[locale]/results/details/page.tsx             | 11 -----------
 src/components/app/results/BackBar.tsx                |  1 +
 src/components/app/results/CategoryBar.tsx            |  1 +
 src/components/app/results/Details/RelatedResults.tsx |  1 +
 src/components/app/results/ListResults.tsx            |  6 ++++++
 5 files changed, 9 insertions(+), 11 deletions(-)

diff --git a/src/app/[locale]/results/details/page.tsx b/src/app/[locale]/results/details/page.tsx
index e640d6f..7411f9e 100644
--- a/src/app/[locale]/results/details/page.tsx
+++ b/src/app/[locale]/results/details/page.tsx
@@ -1,6 +1,3 @@
-"use client";
-
-import { useSearchParams } from "next/navigation";
 import React, { Suspense } from "react";
 
 import BackBar from "@/components/app/results/BackBar";
@@ -8,19 +5,11 @@ import DetailsItemCard from "@/components/app/results/Details/DetailsItemCard";
 import RelatedResults from "@/components/app/results/Details/RelatedResults";
 
 const DetailsComponent = () => {
-  const searchParams = useSearchParams();
-  const currentlyActiveCategory = searchParams.get("category");
-  const searchText = searchParams.get("searchText") ?? undefined;
-  const detailsText = searchParams.get("detailsText") ?? undefined;
-
   return (
     <div className="flex flex-col md:px-10 lg:px-16 py-5 mb-8 bg-whitesmoke h-full">
       <BackBar />
       <DetailsItemCard />
       <RelatedResults />
-      <div>{currentlyActiveCategory}</div>
-      <div>{searchText}</div>
-      <div>{detailsText}</div>
     </div>
   );
 };
diff --git a/src/components/app/results/BackBar.tsx b/src/components/app/results/BackBar.tsx
index 75c78c8..f88b68b 100644
--- a/src/components/app/results/BackBar.tsx
+++ b/src/components/app/results/BackBar.tsx
@@ -1,3 +1,4 @@
+"use client";
 import { useRouter } from "next/navigation";
 import React from "react";
 
diff --git a/src/components/app/results/CategoryBar.tsx b/src/components/app/results/CategoryBar.tsx
index 98f169c..b82b669 100644
--- a/src/components/app/results/CategoryBar.tsx
+++ b/src/components/app/results/CategoryBar.tsx
@@ -1,4 +1,5 @@
 "use client";
+
 import { useSearchParams } from "next/navigation";
 import { useTranslations } from "next-intl";
 import { Dispatch, SetStateAction, Suspense, useEffect, useState, useRef } from "react";
diff --git a/src/components/app/results/Details/RelatedResults.tsx b/src/components/app/results/Details/RelatedResults.tsx
index bacba36..4d617c7 100644
--- a/src/components/app/results/Details/RelatedResults.tsx
+++ b/src/components/app/results/Details/RelatedResults.tsx
@@ -1,3 +1,4 @@
+"use client";
 import React, { useState } from "react";
 
 import ListResults from "@/components/app/results/ListResults";
diff --git a/src/components/app/results/ListResults.tsx b/src/components/app/results/ListResults.tsx
index f702a33..3ad13a8 100644
--- a/src/components/app/results/ListResults.tsx
+++ b/src/components/app/results/ListResults.tsx
@@ -1,3 +1,5 @@
+"use client";
+
 import { useSearchParams } from "next/navigation";
 import { useTranslations } from "next-intl";
 import React, { Suspense, useEffect, useState } from "react";
@@ -57,6 +59,10 @@ const ListResultsComponent = ({ activeCategory }: Props) => {
     return withEnrichedRecords;
   };
 
+  useEffect(() => {
+    setPage(0);
+  }, [activeCategory]);
+
   useEffect(() => {
     const updateResultList = async () => {
       setDataLoading(true);
-- 
GitLab


From 5ec271497ef443de5fd063853353a3c6595c9bf0 Mon Sep 17 00:00:00 2001
From: FionaDmello <40391218+FionaDmello@users.noreply.github.com>
Date: Tue, 7 Jan 2025 11:23:07 +0100
Subject: [PATCH 10/37] handle loading of information in the views

---
 src/app/[locale]/results/page.tsx             | 23 ++++++--
 src/components/app/results/CategoryBar.tsx    | 19 ++++++-
 .../app/results/Details/RelatedResults.tsx    | 33 +++++++----
 src/components/app/results/ListResults.tsx    | 56 ++++++++++---------
 4 files changed, 86 insertions(+), 45 deletions(-)

diff --git a/src/app/[locale]/results/page.tsx b/src/app/[locale]/results/page.tsx
index 32b3524..5a0f928 100644
--- a/src/app/[locale]/results/page.tsx
+++ b/src/app/[locale]/results/page.tsx
@@ -7,11 +7,14 @@ import CategoryBar from "@/components/app/results/CategoryBar";
 import ListResults from "@/components/app/results/ListResults";
 import Error from "@/components/layout/Error";
 import MobileSearch from "@/components/layout/MobileSearch";
+import Spinner from "@/components/layout/Spinner";
 import type { Category } from "@/types/types";
 
 const ResultsComponent = () => {
   const [hasBcError, setHasBcError] = useState(false);
   const [hasSearchError, setHasSearchError] = useState(false);
+  const [categoryLoading, setCategoryLoading] = useState(true);
+  const [resultsLoading, setResultsLoading] = useState(true);
   const [activeCategory, setActiveCategory] = useState<Category>();
 
   return (
@@ -19,19 +22,31 @@ const ResultsComponent = () => {
       <>
         <CategoryBar
           activeCategory={activeCategory}
+          categoryLoading={categoryLoading}
+          setCategoryLoading={setCategoryLoading}
           hasBcError={hasBcError}
           hasSearchError={hasSearchError}
           setActiveCategory={setActiveCategory}
           setHasBcError={setHasBcError}
           setHasSearchError={setHasSearchError}
+          inDetailsView={false}
         />
         <div className="flex flex-col md:px-10 lg:px-16 py-5 mb-8 bg-whitesmoke h-full">
-          <BackBar />
-          <MobileSearch />
-          {activeCategory && <ListResults activeCategory={activeCategory} />}
+          {!categoryLoading && !resultsLoading ? (
+            <>
+              <BackBar />
+              <MobileSearch />
+            </>
+          ) : null}
+
+          {activeCategory && (
+            <ListResults activeCategory={activeCategory} setResultsLoading={setResultsLoading} />
+          )}
         </div>
       </>
-      {hasBcError || hasSearchError ? <Error /> : null}
+
+      {(categoryLoading || resultsLoading) && <Spinner />}
+      {(hasBcError || hasSearchError) && <Error />}
     </div>
   );
 };
diff --git a/src/components/app/results/CategoryBar.tsx b/src/components/app/results/CategoryBar.tsx
index b82b669..d2bb399 100644
--- a/src/components/app/results/CategoryBar.tsx
+++ b/src/components/app/results/CategoryBar.tsx
@@ -10,20 +10,24 @@ import { getAllCategories, getCategoryCounts } from "@/utils/apiCall";
 
 type Props = {
   activeCategory?: Category;
+  categoryLoading: boolean;
   hasBcError: boolean;
   hasSearchError: boolean;
   inDetailsView?: boolean;
   setActiveCategory: Dispatch<SetStateAction<Category | undefined>>;
   setHasBcError: Dispatch<SetStateAction<boolean>>;
   setHasSearchError: Dispatch<SetStateAction<boolean>>;
+  setCategoryLoading: Dispatch<SetStateAction<boolean>>;
 };
 
 const CategoryBarComponent = ({
   activeCategory,
+  categoryLoading,
   hasBcError,
   hasSearchError,
   inDetailsView,
   setActiveCategory,
+  setCategoryLoading,
   setHasBcError,
   setHasSearchError,
 }: Props) => {
@@ -75,12 +79,12 @@ const CategoryBarComponent = ({
   useEffect(() => {
     const updateCategoryCount = async () => {
       try {
+        setHasSearchError(false);
         const updatedSearchText =
           searchText || detailsText
             ? (searchText ? searchText : "") + " " + (detailsText ? detailsText : "")
             : undefined;
 
-        setHasSearchError(false);
         const categoryCounts = await getCategoryCounts(updatedSearchText);
         const categories = structuredClone(baseCategories);
 
@@ -89,6 +93,8 @@ const CategoryBarComponent = ({
       } catch (error) {
         console.error("Failed to fetch category counts", error);
         setHasSearchError(true);
+      } finally {
+        setCategoryLoading(false);
       }
     };
 
@@ -97,11 +103,18 @@ const CategoryBarComponent = ({
     } else {
       updateCategoryCount().catch(console.error);
     }
-  }, [baseCategories, searchText, detailsText, setHasSearchError, setHasBcError]);
+  }, [
+    baseCategories,
+    searchText,
+    detailsText,
+    setCategoryLoading,
+    setHasSearchError,
+    setHasBcError,
+  ]);
 
   return (
     <>
-      {hasBcError || hasSearchError ? null : (
+      {categoryLoading || hasBcError || hasSearchError ? null : (
         <div className="bg-primary-helmholtz-dunkelblau text-primary-helmholtz-weiss grid grid-cols-2 md:grid-cols-4 lg:grid-cols-5 xl:grid-cols-6 2xl:flex gap-y-2 gap-x-2 xl:gap-x-6 px-4 pt-2 pb-3 md:px-10 lg:px-16 xl:pt-4 xl:min-h-24">
           {categories.map((o, idx) => (
             <Link
diff --git a/src/components/app/results/Details/RelatedResults.tsx b/src/components/app/results/Details/RelatedResults.tsx
index 4d617c7..1c5228a 100644
--- a/src/components/app/results/Details/RelatedResults.tsx
+++ b/src/components/app/results/Details/RelatedResults.tsx
@@ -3,28 +3,39 @@ import React, { useState } from "react";
 
 import ListResults from "@/components/app/results/ListResults";
 import Error from "@/components/layout/Error";
+import Spinner from "@/components/layout/Spinner";
 import { Category } from "@/types/types";
 
 import CategoryBar from "../CategoryBar";
 
 const RelatedResults = () => {
+  const [categoryLoading, setCategoryLoading] = useState(true);
+  const [resultsLoading, setResultsLoading] = useState(true);
   const [hasBcError, setHasBcError] = useState(false);
   const [hasSearchError, setHasSearchError] = useState(false);
   const [activeCategory, setActiveCategory] = useState<Category>();
 
   return (
     <div className="m-4 space-y-2 rounded-xl border-2 border-primary-helmholtz-hellblau/20 px-5 py-4 shadow-lg shadow-secondary-helmholtz-highlightblau bg-white">
-      <CategoryBar
-        activeCategory={activeCategory}
-        hasBcError={hasBcError}
-        hasSearchError={hasSearchError}
-        setActiveCategory={setActiveCategory}
-        setHasBcError={setHasBcError}
-        setHasSearchError={setHasSearchError}
-        inDetailsView
-      />
-      {activeCategory && <ListResults activeCategory={activeCategory} />}
-      {hasBcError || hasSearchError ? <Error /> : null}
+      <>
+        <CategoryBar
+          activeCategory={activeCategory}
+          categoryLoading={categoryLoading}
+          setCategoryLoading={setCategoryLoading}
+          hasBcError={hasBcError}
+          hasSearchError={hasSearchError}
+          setActiveCategory={setActiveCategory}
+          setHasBcError={setHasBcError}
+          setHasSearchError={setHasSearchError}
+          inDetailsView
+        />
+        {activeCategory && (
+          <ListResults activeCategory={activeCategory} setResultsLoading={setResultsLoading} />
+        )}
+      </>
+
+      {(categoryLoading || resultsLoading) ?? <Spinner />}
+      {(hasBcError || hasSearchError) ?? <Error />}
     </div>
   );
 };
diff --git a/src/components/app/results/ListResults.tsx b/src/components/app/results/ListResults.tsx
index 3ad13a8..dfa0581 100644
--- a/src/components/app/results/ListResults.tsx
+++ b/src/components/app/results/ListResults.tsx
@@ -2,7 +2,7 @@
 
 import { useSearchParams } from "next/navigation";
 import { useTranslations } from "next-intl";
-import React, { Suspense, useEffect, useState } from "react";
+import React, { Suspense, useEffect, useState, Dispatch, SetStateAction } from "react";
 
 import Filters from "@/components/app/results/ListResults/Filters";
 import NoResults from "@/components/app/results/ListResults/NoResults";
@@ -10,19 +10,18 @@ import Pagination from "@/components/app/results/ListResults/Pagination";
 import ResultItem from "@/components/app/results/ListResults/ResultItem";
 import SelectedFiltersBar from "@/components/app/results/ListResults/SelectedFiltersBar";
 import Error from "@/components/layout/Error";
-import Spinner from "@/components/layout/Spinner";
 import type { Category, FilterEntity, ResultItem as ResultItemType } from "@/types/types";
 import { search, getRorInfo } from "@/utils/apiCall";
 
 type Props = {
   activeCategory: Category;
+  setResultsLoading: Dispatch<SetStateAction<boolean>>;
 };
 
-const ListResultsComponent = ({ activeCategory }: Props) => {
+const ListResultsComponent = ({ activeCategory, setResultsLoading }: Props) => {
   const t = useTranslations("ListResults");
   const s = useTranslations("Categories");
   const resultParams = useSearchParams();
-  const [dataLoading, setDataLoading] = useState(true);
   const [hasError, setHasError] = useState(false);
   const [start, setStart] = useState(0);
   const [results, setResults] = useState<ResultItemType[]>([]);
@@ -65,7 +64,6 @@ const ListResultsComponent = ({ activeCategory }: Props) => {
 
   useEffect(() => {
     const updateResultList = async () => {
-      setDataLoading(true);
       const updatedSearchText =
         searchText || detailsText
           ? (searchText ? searchText : "") + " " + (detailsText ? detailsText : "")
@@ -87,19 +85,26 @@ const ListResultsComponent = ({ activeCategory }: Props) => {
         } else {
           setResults(searchResult.records);
         }
-
         setSearchCount(searchResult.totalCount);
         setAvailableFilters(searchResult.filters);
       } catch (error) {
         console.log("Error on updating result list", error);
         setHasError(true);
       } finally {
-        setDataLoading(false);
+        setResultsLoading(false);
       }
     };
 
     updateResultList().catch(console.error);
-  }, [activeCategory, searchText, detailsText, start, resultsPerPage, selectedFilters]);
+  }, [
+    activeCategory,
+    searchText,
+    detailsText,
+    start,
+    resultsPerPage,
+    selectedFilters,
+    setResultsLoading,
+  ]);
 
   return (
     <>
@@ -147,25 +152,22 @@ const ListResultsComponent = ({ activeCategory }: Props) => {
               pageCount={searchCount / resultsPerPage}
               onPageChange={setPage}
             />
-            {dataLoading ? (
-              <Spinner />
-            ) : (
-              <div className="flex flex-col py-5 xl:py-8">
-                {results.length ? (
-                  results.map((item: ResultItemType) => (
-                    <ResultItem
-                      key={item.id}
-                      item={item}
-                      idx={item.id}
-                      activeCategory={activeCategory}
-                      searchText={searchText}
-                    />
-                  ))
-                ) : (
-                  <NoResults />
-                )}
-              </div>
-            )}
+
+            <div className="flex flex-col py-5 xl:py-8">
+              {results.length ? (
+                results.map((item: ResultItemType) => (
+                  <ResultItem
+                    key={item.id}
+                    item={item}
+                    idx={item.id}
+                    activeCategory={activeCategory}
+                    searchText={searchText}
+                  />
+                ))
+              ) : (
+                <NoResults />
+              )}
+            </div>
             <Pagination
               currentPage={start / 10}
               pageCount={searchCount / resultsPerPage}
-- 
GitLab


From 5bc10c7a13385ccf0b08c1660332f57a07e1f2a8 Mon Sep 17 00:00:00 2001
From: FionaDmello <40391218+FionaDmello@users.noreply.github.com>
Date: Tue, 7 Jan 2025 15:34:36 +0100
Subject: [PATCH 11/37] update tab selector indicator automatically on load of
 the new details item

---
 src/app/[locale]/results/page.tsx                     | 6 +++++-
 src/components/app/results/CategoryBar.tsx            | 4 +++-
 src/components/app/results/Details/RelatedResults.tsx | 6 +++++-
 src/components/app/results/ListResults.tsx            | 6 ++++--
 4 files changed, 17 insertions(+), 5 deletions(-)

diff --git a/src/app/[locale]/results/page.tsx b/src/app/[locale]/results/page.tsx
index 5a0f928..cd67949 100644
--- a/src/app/[locale]/results/page.tsx
+++ b/src/app/[locale]/results/page.tsx
@@ -40,7 +40,11 @@ const ResultsComponent = () => {
           ) : null}
 
           {activeCategory && (
-            <ListResults activeCategory={activeCategory} setResultsLoading={setResultsLoading} />
+            <ListResults
+              activeCategory={activeCategory}
+              resultsLoading={resultsLoading}
+              setResultsLoading={setResultsLoading}
+            />
           )}
         </div>
       </>
diff --git a/src/components/app/results/CategoryBar.tsx b/src/components/app/results/CategoryBar.tsx
index d2bb399..b0c4ef6 100644
--- a/src/components/app/results/CategoryBar.tsx
+++ b/src/components/app/results/CategoryBar.tsx
@@ -74,7 +74,8 @@ const CategoryBarComponent = ({
     categories.forEach((cat: Category) =>
       cat.id === currentlyActivecategory ? setActiveCategory(cat) : null
     );
-  }, [currentlyActivecategory, categories, setActiveCategory]);
+    inDetailsView && setActiveCategory(categories[0]);
+  }, [currentlyActivecategory, categories, inDetailsView, setActiveCategory]);
 
   useEffect(() => {
     const updateCategoryCount = async () => {
@@ -95,6 +96,7 @@ const CategoryBarComponent = ({
         setHasSearchError(true);
       } finally {
         setCategoryLoading(false);
+        // console.log("here", categories);
       }
     };
 
diff --git a/src/components/app/results/Details/RelatedResults.tsx b/src/components/app/results/Details/RelatedResults.tsx
index 1c5228a..f623297 100644
--- a/src/components/app/results/Details/RelatedResults.tsx
+++ b/src/components/app/results/Details/RelatedResults.tsx
@@ -30,7 +30,11 @@ const RelatedResults = () => {
           inDetailsView
         />
         {activeCategory && (
-          <ListResults activeCategory={activeCategory} setResultsLoading={setResultsLoading} />
+          <ListResults
+            activeCategory={activeCategory}
+            resultsLoading={resultsLoading}
+            setResultsLoading={setResultsLoading}
+          />
         )}
       </>
 
diff --git a/src/components/app/results/ListResults.tsx b/src/components/app/results/ListResults.tsx
index dfa0581..55701f3 100644
--- a/src/components/app/results/ListResults.tsx
+++ b/src/components/app/results/ListResults.tsx
@@ -15,10 +15,11 @@ import { search, getRorInfo } from "@/utils/apiCall";
 
 type Props = {
   activeCategory: Category;
+  resultsLoading: boolean;
   setResultsLoading: Dispatch<SetStateAction<boolean>>;
 };
 
-const ListResultsComponent = ({ activeCategory, setResultsLoading }: Props) => {
+const ListResultsComponent = ({ activeCategory, resultsLoading, setResultsLoading }: Props) => {
   const t = useTranslations("ListResults");
   const s = useTranslations("Categories");
   const resultParams = useSearchParams();
@@ -60,6 +61,7 @@ const ListResultsComponent = ({ activeCategory, setResultsLoading }: Props) => {
 
   useEffect(() => {
     setPage(0);
+    setSelectedFilters([]);
   }, [activeCategory]);
 
   useEffect(() => {
@@ -108,7 +110,7 @@ const ListResultsComponent = ({ activeCategory, setResultsLoading }: Props) => {
 
   return (
     <>
-      {hasError ? (
+      {resultsLoading ? null : hasError ? (
         <Error />
       ) : (
         <div
-- 
GitLab


From 0b7a7be5b7f28f2f09d18eb684a8e02d6e017663 Mon Sep 17 00:00:00 2001
From: FionaDmello <40391218+FionaDmello@users.noreply.github.com>
Date: Wed, 8 Jan 2025 13:01:28 +0100
Subject: [PATCH 12/37] changed atom format to handle routing history, added
 translation for texts related to details view

---
 .../app/results/Details/DetailsItemCard.tsx   | 24 ++++++++++---------
 .../app/results/Details/RelatedResults.tsx    |  7 ++++++
 src/components/app/results/ListResults.tsx    | 12 +++++++---
 .../app/results/ListResults/ResultItem.tsx    |  4 ++--
 src/locales/de.json                           |  3 +++
 src/locales/en.json                           |  3 +++
 src/{state => utils}/atoms.tsx                |  2 +-
 7 files changed, 38 insertions(+), 17 deletions(-)
 rename src/{state => utils}/atoms.tsx (58%)

diff --git a/src/components/app/results/Details/DetailsItemCard.tsx b/src/components/app/results/Details/DetailsItemCard.tsx
index c5f4ca8..ca10382 100644
--- a/src/components/app/results/Details/DetailsItemCard.tsx
+++ b/src/components/app/results/Details/DetailsItemCard.tsx
@@ -1,27 +1,29 @@
 "use client";
+
 import { useAtomValue } from "jotai";
-import React, { useState, useEffect } from "react";
+import { useSearchParams } from "next/navigation";
+import React from "react";
 
-import { detailsItemAtom } from "@/state/atoms";
 import { ResultItem as ResultItemType } from "@/types/types";
+import { detailsItemAtom } from "@/utils/atoms";
 
 import ResultItem from "../ListResults/ResultItem";
 
 const DetailsItemCard = () => {
-  const detailsItemAtomValue: ResultItemType | undefined = useAtomValue(detailsItemAtom);
-  const [detailsItem, setDetailsItem] = useState<ResultItemType | undefined>();
+  const detailsText = useSearchParams().get("detailsText");
+  const detailsItemAtomValue: ResultItemType[] = useAtomValue(detailsItemAtom);
 
-  useEffect(() => {
-    const isResultItem = (
-      detailsItemAtomValue?: ResultItemType
-    ): detailsItemAtomValue is ResultItemType => detailsItemAtomValue !== undefined;
+  const detailsItem = detailsItemAtomValue.filter(
+    (item?: ResultItemType) => item?.name.toLocaleLowerCase() === detailsText?.toLowerCase()
+  )[0];
 
-    if (isResultItem(detailsItemAtomValue)) setDetailsItem(detailsItemAtomValue);
-  }, [detailsItemAtomValue]);
+  const isResultItem = (
+    detailsItemAtomValue?: ResultItemType
+  ): detailsItemAtomValue is ResultItemType => detailsItemAtomValue !== undefined;
 
   return (
     <>
-      {detailsItem ? (
+      {isResultItem(detailsItem) ? (
         <div className="p-4">
           <ResultItem item={detailsItem} idx={detailsItem.id} inDetailsPage />
         </div>
diff --git a/src/components/app/results/Details/RelatedResults.tsx b/src/components/app/results/Details/RelatedResults.tsx
index f623297..d322c8c 100644
--- a/src/components/app/results/Details/RelatedResults.tsx
+++ b/src/components/app/results/Details/RelatedResults.tsx
@@ -1,4 +1,5 @@
 "use client";
+import { useTranslations } from "next-intl";
 import React, { useState } from "react";
 
 import ListResults from "@/components/app/results/ListResults";
@@ -9,6 +10,7 @@ import { Category } from "@/types/types";
 import CategoryBar from "../CategoryBar";
 
 const RelatedResults = () => {
+  const d = useTranslations("DetailsView");
   const [categoryLoading, setCategoryLoading] = useState(true);
   const [resultsLoading, setResultsLoading] = useState(true);
   const [hasBcError, setHasBcError] = useState(false);
@@ -18,6 +20,11 @@ const RelatedResults = () => {
   return (
     <div className="m-4 space-y-2 rounded-xl border-2 border-primary-helmholtz-hellblau/20 px-5 py-4 shadow-lg shadow-secondary-helmholtz-highlightblau bg-white">
       <>
+        {!categoryLoading && !resultsLoading ? (
+          <p className="text-sm font-semibold text-primary-helmholtz-dunkelblau cursor-default">
+            {d("other_items")}
+          </p>
+        ) : null}
         <CategoryBar
           activeCategory={activeCategory}
           categoryLoading={categoryLoading}
diff --git a/src/components/app/results/ListResults.tsx b/src/components/app/results/ListResults.tsx
index 55701f3..235e851 100644
--- a/src/components/app/results/ListResults.tsx
+++ b/src/components/app/results/ListResults.tsx
@@ -1,5 +1,5 @@
 "use client";
-
+import { useSetAtom } from "jotai";
 import { useSearchParams } from "next/navigation";
 import { useTranslations } from "next-intl";
 import React, { Suspense, useEffect, useState, Dispatch, SetStateAction } from "react";
@@ -12,6 +12,7 @@ import SelectedFiltersBar from "@/components/app/results/ListResults/SelectedFil
 import Error from "@/components/layout/Error";
 import type { Category, FilterEntity, ResultItem as ResultItemType } from "@/types/types";
 import { search, getRorInfo } from "@/utils/apiCall";
+import { detailsItemAtom } from "@/utils/atoms";
 
 type Props = {
   activeCategory: Category;
@@ -22,13 +23,17 @@ type Props = {
 const ListResultsComponent = ({ activeCategory, resultsLoading, setResultsLoading }: Props) => {
   const t = useTranslations("ListResults");
   const s = useTranslations("Categories");
-  const resultParams = useSearchParams();
+
+  const setDetailsItem = useSetAtom(detailsItemAtom);
+
   const [hasError, setHasError] = useState(false);
   const [start, setStart] = useState(0);
   const [results, setResults] = useState<ResultItemType[]>([]);
   const [searchCount, setSearchCount] = useState(0);
   const [availableFilters, setAvailableFilters] = useState<FilterEntity[]>([]);
   const [selectedFilters, setSelectedFilters] = useState<FilterEntity[]>([]);
+
+  const resultParams = useSearchParams();
   const searchText = resultParams.get("searchText") ?? undefined;
   const detailsText = resultParams.get("detailsText") ?? undefined;
   // define this here to make it possible to change later
@@ -62,7 +67,8 @@ const ListResultsComponent = ({ activeCategory, resultsLoading, setResultsLoadin
   useEffect(() => {
     setPage(0);
     setSelectedFilters([]);
-  }, [activeCategory]);
+    !detailsText && setDetailsItem(() => []);
+  }, [detailsText, activeCategory, setDetailsItem]);
 
   useEffect(() => {
     const updateResultList = async () => {
diff --git a/src/components/app/results/ListResults/ResultItem.tsx b/src/components/app/results/ListResults/ResultItem.tsx
index 8b523f9..4f593b0 100644
--- a/src/components/app/results/ListResults/ResultItem.tsx
+++ b/src/components/app/results/ListResults/ResultItem.tsx
@@ -12,8 +12,8 @@ import Relationships from "@/components/app/results/ListResults/ResultItem/Relat
 import { Link } from "@/i18n";
 import ExternalLinkIcon from "@/resources/images/svg/ExternalLinkIcon";
 import RightArrowIcon from "@/resources/images/svg/RightArrowIcon";
-import { detailsItemAtom } from "@/state/atoms";
 import type { Category, ResultItem as ResultItemType } from "@/types/types";
+import { detailsItemAtom } from "@/utils/atoms";
 
 type Props = {
   item: ResultItemType;
@@ -106,7 +106,7 @@ const ResultItem = ({ item, idx, searchText, activeCategory, inDetailsPage }: Pr
   };
 
   const handleDetailSearch = () => {
-    setDetailsItem(() => item);
+    setDetailsItem((prev) => [...prev, ...[item]]);
     router.push(
       `/results/details?category=${activeCategory?.id}${searchText ? `&searchText=${searchText}` : ``}&detailsText=${item.name}`
     );
diff --git a/src/locales/de.json b/src/locales/de.json
index 101963e..8517cc4 100644
--- a/src/locales/de.json
+++ b/src/locales/de.json
@@ -202,5 +202,8 @@
     "automated_decision": "Als verantwortungsbewusstes Unternehmen verzichten wir auf automatische Entscheidungsfindung und Profiling.",
     "amendment_heading": "14. Änderung der Datenschutzerklärung",
     "amendment": "Wir können unsere Datenschutzerklärung von Zeit zu Zeit aktualisieren. Aktualisierungen unserer Datenschutzerklärung werden auf unserer Website veröffentlicht. Alle Änderungen treten mit der Veröffentlichung auf unserer Website in Kraft. Wir empfehlen Ihnen daher, die Website regelmäßig zu besuchen, um sich über mögliche Aktualisierungen zu informieren. Diese Datenschutzerklärung wurde mit dem Datenschutzerklärungs-Generator der externen Datenschutzbeauftragten erstellt, der in Zusammenarbeit mit der RC GmbH, die gebrauchte Notebooks vertreibt, und den Medienrechtlern von WBS-LAW entwickelt wurde."
+  },
+  "DetailsView": {
+    "other_items": "ANDERE ZUGEHÖRIGE ARTIKEL"
   }
 }
diff --git a/src/locales/en.json b/src/locales/en.json
index 0d51403..8013bb9 100644
--- a/src/locales/en.json
+++ b/src/locales/en.json
@@ -202,5 +202,8 @@
     "automated_decision": "As a responsible company, we do not use automatic decision-making or profiling.",
     "amendment_heading": "14. Amendment of Privacy Statement",
     "amendment": "We may update our Privacy Statement from time to time. Updates of our Privacy Statement will be published on our Website. Any amendments become effective upon publication on our Website. We therefore recommend that you regularly visit the site to keep yourself informed on possible updates. This Privacy Policy has been generated by the Privacy Policy Generator of the External Data Protection Officers that was developed in cooperation with RC GmbH, which sells used notebooks and the Media Law Lawyers from WBS-LAW."
+  },
+  "DetailsView": {
+    "other_items": "OTHER RELATED ITEMS"
   }
 }
diff --git a/src/state/atoms.tsx b/src/utils/atoms.tsx
similarity index 58%
rename from src/state/atoms.tsx
rename to src/utils/atoms.tsx
index 6aade35..5e9c3c5 100644
--- a/src/state/atoms.tsx
+++ b/src/utils/atoms.tsx
@@ -2,4 +2,4 @@ import { atom } from "jotai";
 
 import { ResultItem } from "@/types/types";
 
-export const detailsItemAtom = atom<ResultItem>();
+export const detailsItemAtom = atom<ResultItem[]>([]);
-- 
GitLab


From 6161d49bb8b6baf5f19e0ecf5df18c7c4e501892 Mon Sep 17 00:00:00 2001
From: FionaDmello <40391218+FionaDmello@users.noreply.github.com>
Date: Wed, 8 Jan 2025 13:47:12 +0100
Subject: [PATCH 13/37] handle saving only relevant navigations in the router
 stack for smooth back navigations

---
 src/components/app/results/CategoryBar.tsx | 1 +
 1 file changed, 1 insertion(+)

diff --git a/src/components/app/results/CategoryBar.tsx b/src/components/app/results/CategoryBar.tsx
index b0c4ef6..44565b8 100644
--- a/src/components/app/results/CategoryBar.tsx
+++ b/src/components/app/results/CategoryBar.tsx
@@ -126,6 +126,7 @@ const CategoryBarComponent = ({
                   : `/results?category=${o.id}${search}`
               }
               shallow
+              replace={!!(inDetailsView && activeCategory?.id !== currentlyActivecategory)}
               onClick={() => setActiveCategory(o)}
               key={idx}
               className={`${
-- 
GitLab


From 6e0d739c062b044372c2e77a64bc2d70e2364020 Mon Sep 17 00:00:00 2001
From: FionaDmello <40391218+FionaDmello@users.noreply.github.com>
Date: Wed, 8 Jan 2025 13:54:25 +0100
Subject: [PATCH 14/37] minor divider style bug fix

---
 src/components/app/results/ListResults.tsx | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/components/app/results/ListResults.tsx b/src/components/app/results/ListResults.tsx
index 235e851..664c3b0 100644
--- a/src/components/app/results/ListResults.tsx
+++ b/src/components/app/results/ListResults.tsx
@@ -124,7 +124,7 @@ const ListResultsComponent = ({ activeCategory, resultsLoading, setResultsLoadin
             availableFilters.length !== 0
               ? "md:divide-x-2 md:divide-primary-helmholtz-hellblau"
               : ""
-          } md:grid md:grid-cols-12 md:min-h-full`}
+          } md:grid md:grid-cols-12`}
         >
           <div
             className={`${
-- 
GitLab


From b1c3262516bbcc49290757e72a3f6dae20a5be31 Mon Sep 17 00:00:00 2001
From: FionaDmello <40391218+FionaDmello@users.noreply.github.com>
Date: Thu, 9 Jan 2025 11:41:08 +0100
Subject: [PATCH 15/37] truncate example values in mobile view on search card,
 bug fix with filter component size in mobile view

---
 src/components/app/results/ListResults.tsx | 2 +-
 src/components/layout/Search.tsx           | 2 +-
 src/components/layout/Spinner.tsx          | 2 +-
 3 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/src/components/app/results/ListResults.tsx b/src/components/app/results/ListResults.tsx
index 664c3b0..bda2a05 100644
--- a/src/components/app/results/ListResults.tsx
+++ b/src/components/app/results/ListResults.tsx
@@ -128,7 +128,7 @@ const ListResultsComponent = ({ activeCategory, resultsLoading, setResultsLoadin
         >
           <div
             className={`${
-              availableFilters.length !== 0 ? "md:col-span-4 lg:col-span-3 min-h-full" : "hidden"
+              availableFilters.length !== 0 ? "md:col-span-4 lg:col-span-3 md:min-h-full" : "hidden"
             }  flex flex-col px-4 xl:px-6`}
           >
             <Filters
diff --git a/src/components/layout/Search.tsx b/src/components/layout/Search.tsx
index 3b1252c..2c6d9a7 100644
--- a/src/components/layout/Search.tsx
+++ b/src/components/layout/Search.tsx
@@ -94,7 +94,7 @@ const SearchComponent = ({ exampleTrigger, placeholder }: Props) => {
         </div>
       </form>
 
-      <div className="flex md:basis-11/12 space-x-2 pl-2 pt-3 items-center">
+      <div className="flex md:basis-11/12 space-x-2 pl-2 pt-3 items-center truncate">
         <div className="font-bold text-primary-helmholtz-dunkelblau pr-2">{exampleTrigger}</div>
         <div className="flex flex-wrap gap-x-8 gap-y-2 flex-row md:flex-nowrap md:gap-x-10 md:grow md:justify-between h-5">
           {exampleSearch.map((query, ix) => (
diff --git a/src/components/layout/Spinner.tsx b/src/components/layout/Spinner.tsx
index e06cbfe..b78807f 100644
--- a/src/components/layout/Spinner.tsx
+++ b/src/components/layout/Spinner.tsx
@@ -1,5 +1,5 @@
 const Spinner = () => (
-  <div className="grow flex flex-col p-10 bg-whitesmoke h-full">
+  <div className="grow flex flex-col p-10 pt-5 bg-whitesmoke h-full">
     <svg
       className="m-auto align-middle max-h-20 max-w-20 animate-spin text-secondary-helmholtz-mint"
       xmlns="http://www.w3.org/2000/svg"
-- 
GitLab


From 697770061de7392a246a0a863bd12a378eedae0d Mon Sep 17 00:00:00 2001
From: FionaDmello <40391218+FionaDmello@users.noreply.github.com>
Date: Tue, 14 Jan 2025 13:35:12 +0100
Subject: [PATCH 16/37] title of resultitem card made fully responsive

---
 src/components/app/results/ListResults.tsx    |  3 ++-
 .../app/results/ListResults/ResultItem.tsx    | 21 ++++++++++++++-----
 src/resources/images/svg/RightArrowIcon.tsx   |  2 +-
 3 files changed, 19 insertions(+), 7 deletions(-)

diff --git a/src/components/app/results/ListResults.tsx b/src/components/app/results/ListResults.tsx
index bda2a05..d58ca94 100644
--- a/src/components/app/results/ListResults.tsx
+++ b/src/components/app/results/ListResults.tsx
@@ -124,7 +124,7 @@ const ListResultsComponent = ({ activeCategory, resultsLoading, setResultsLoadin
             availableFilters.length !== 0
               ? "md:divide-x-2 md:divide-primary-helmholtz-hellblau"
               : ""
-          } md:grid md:grid-cols-12`}
+          } md:grid md:grid-cols-12 overscroll-x-none overflow-x-hidden`}
         >
           <div
             className={`${
@@ -170,6 +170,7 @@ const ListResultsComponent = ({ activeCategory, resultsLoading, setResultsLoadin
                     idx={item.id}
                     activeCategory={activeCategory}
                     searchText={searchText}
+                    associatedToFilters={availableFilters.length !== 0}
                   />
                 ))
               ) : (
diff --git a/src/components/app/results/ListResults/ResultItem.tsx b/src/components/app/results/ListResults/ResultItem.tsx
index 4f593b0..8da6216 100644
--- a/src/components/app/results/ListResults/ResultItem.tsx
+++ b/src/components/app/results/ListResults/ResultItem.tsx
@@ -21,9 +21,17 @@ type Props = {
   searchText?: string;
   activeCategory?: Category;
   inDetailsPage?: boolean;
+  associatedToFilters: boolean;
 };
 
-const ResultItem = ({ item, idx, searchText, activeCategory, inDetailsPage }: Props) => {
+const ResultItem = ({
+  item,
+  idx,
+  searchText,
+  activeCategory,
+  inDetailsPage,
+  associatedToFilters,
+}: Props) => {
   const setDetailsItem = useSetAtom(detailsItemAtom);
   const router = useRouter();
   const t = useTranslations("ResultItem");
@@ -115,10 +123,10 @@ const ResultItem = ({ item, idx, searchText, activeCategory, inDetailsPage }: Pr
   return (
     <div
       key={idx}
-      className="my-2 space-y-2 rounded-xl border-2 border-primary-helmholtz-hellblau/20 px-5 py-5 shadow-lg shadow-secondary-helmholtz-highlightblau bg-white"
+      className="my-2 space-y-2 rounded-xl border-2 border-primary-helmholtz-hellblau/20 px-5 py-5 shadow-lg shadow-secondary-helmholtz-highlightblau bg-white size-auto"
     >
       <button
-        className={`${inDetailsPage ? "" : "hover:transition-all hover:translate-x-3"} inline-flex align-middle items-center pb-2 text-primary-helmholtz-dunkelblau h-5`}
+        className={`${inDetailsPage ? "" : "hover:transition-all hover:translate-x-3"} inline-flex align-middle items-center pb-2 text-primary-helmholtz-dunkelblau`}
         onClick={handleDetailSearch}
         disabled={inDetailsPage}
       >
@@ -133,9 +141,12 @@ const ResultItem = ({ item, idx, searchText, activeCategory, inDetailsPage }: Pr
             />
           </span>
         ) : null}
-        <div className="font-semibold" rel="noreferrer">
+        <p
+          className={`${associatedToFilters ? "md:basis-10/12" : "md:flex-none lg:line-clamp-none"} ${inDetailsPage ? "line-clamp-none" : ""} basis-10/12 line-clamp-1 flex-1 font-semibold text-left`}
+          rel="noreferrer"
+        >
           {item.name}
-        </div>
+        </p>
         {inDetailsPage ?? <RightArrowIcon />}
       </button>
 
diff --git a/src/resources/images/svg/RightArrowIcon.tsx b/src/resources/images/svg/RightArrowIcon.tsx
index 4c7c156..6a6faad 100644
--- a/src/resources/images/svg/RightArrowIcon.tsx
+++ b/src/resources/images/svg/RightArrowIcon.tsx
@@ -7,7 +7,7 @@ const RightArrowIcon = () => {
       viewBox="0 0 24 24"
       strokeWidth="1.5"
       stroke="currentColor"
-      className="w-5 h-5 p-2"
+      className="w-5 h-5"
     >
       <path
         strokeLinecap="round"
-- 
GitLab


From 28aff05c8412c2fbfb8a5e132092ee15c2a08230 Mon Sep 17 00:00:00 2001
From: FionaDmello <40391218+FionaDmello@users.noreply.github.com>
Date: Tue, 14 Jan 2025 16:39:49 +0100
Subject: [PATCH 17/37] made styling of resultitem components a little more
 mobile friendly

---
 .../app/results/ListResults/ResultItem.tsx    | 24 ++++++++++---------
 1 file changed, 13 insertions(+), 11 deletions(-)

diff --git a/src/components/app/results/ListResults/ResultItem.tsx b/src/components/app/results/ListResults/ResultItem.tsx
index 8da6216..5a09273 100644
--- a/src/components/app/results/ListResults/ResultItem.tsx
+++ b/src/components/app/results/ListResults/ResultItem.tsx
@@ -64,15 +64,17 @@ const ResultItem = ({
 
   const renderLinkItem = (url: string, isEmail = false) =>
     isExternalLink(url) ? (
-      <Link
-        href={isEmail ? `mailto:${url}` : `${url}`}
-        rel="noreferrer"
-        target={isEmail ? "_self" : "_blank"}
-        className="inline-flex gap-x-0.5 text-wrap hover:underline hover:decoration-solid hover:decoration-primary-helmholtz-hellblau hover:text-primary-helmholtz-hellblau visited:underline visited:decoration-solid visited:decoration-primary-helmholtz-dunkelblau visited:text-primary-helmholtz-dunkelblau h-3"
-      >
-        {url}
-        <ExternalLinkIcon />
-      </Link>
+      <>
+        <Link
+          href={isEmail ? `mailto:${url}` : `${url}`}
+          rel="noreferrer"
+          target={isEmail ? "_self" : "_blank"}
+          className={`${associatedToFilters ? "" : "md:flex-none lg:line-clamp-none"} ${inDetailsPage ? "line-clamp-none" : ""} line-clamp-2 inline-flex text-left gap-x-0.5 hover:underline hover:decoration-solid hover:decoration-primary-helmholtz-hellblau hover:text-primary-helmholtz-hellblau visited:underline visited:decoration-solid visited:decoration-primary-helmholtz-dunkelblau visited:text-primary-helmholtz-dunkelblau size-auto `}
+        >
+          {url}
+          <ExternalLinkIcon />
+        </Link>
+      </>
     ) : (
       <span className="cursor-default">{url}</span>
     );
@@ -80,7 +82,7 @@ const ResultItem = ({
   const displayLinkItem = (displayItem: string | string[], isEmail = false) =>
     Array.isArray(displayItem)
       ? displayItem.map((url, idx) => (
-          <span key={idx}>
+          <span key={idx} className="">
             {renderLinkItem(url, isEmail)}
             {idx === displayItem.length - 1 ? null : `, `}
           </span>
@@ -157,7 +159,7 @@ const ResultItem = ({
 
       {item.txt_sameAs ? (
         <div className="text-sm">
-          <span className="font-semibold">{s("txt_sameAs")}: </span>
+          <span className="font-semibold ">{s("txt_sameAs")}: </span>
           {displayLinkItem(item.txt_sameAs)}
         </div>
       ) : null}
-- 
GitLab


From d4298ad0a1aaa3d8b2604a5d48b9f54cf950e652 Mon Sep 17 00:00:00 2001
From: FionaDmello <40391218+FionaDmello@users.noreply.github.com>
Date: Thu, 16 Jan 2025 13:44:26 +0100
Subject: [PATCH 18/37] default styling for mobile view in results page
 implemented

---
 src/app/[locale]/globals.css                  |  3 ++
 .../app/results/ListResults/ResultItem.tsx    | 52 +++++++++++--------
 2 files changed, 33 insertions(+), 22 deletions(-)

diff --git a/src/app/[locale]/globals.css b/src/app/[locale]/globals.css
index a22dd0d..de8b0ec 100644
--- a/src/app/[locale]/globals.css
+++ b/src/app/[locale]/globals.css
@@ -9,4 +9,7 @@
   #smallScreenSearch {
     @apply m-10 p-10 rounded-lg drop-shadow bg-left-bottom border-2 lg:hidden;
   }
+  .forText {
+    @apply text-ellipsis overflow-x-hidden line-clamp-1 md:overflow-x-visible md:line-clamp-none;
+  }
 }
diff --git a/src/components/app/results/ListResults/ResultItem.tsx b/src/components/app/results/ListResults/ResultItem.tsx
index 5a09273..a89011b 100644
--- a/src/components/app/results/ListResults/ResultItem.tsx
+++ b/src/components/app/results/ListResults/ResultItem.tsx
@@ -64,17 +64,22 @@ const ResultItem = ({
 
   const renderLinkItem = (url: string, isEmail = false) =>
     isExternalLink(url) ? (
-      <>
-        <Link
-          href={isEmail ? `mailto:${url}` : `${url}`}
-          rel="noreferrer"
-          target={isEmail ? "_self" : "_blank"}
-          className={`${associatedToFilters ? "" : "md:flex-none lg:line-clamp-none"} ${inDetailsPage ? "line-clamp-none" : ""} line-clamp-2 inline-flex text-left gap-x-0.5 hover:underline hover:decoration-solid hover:decoration-primary-helmholtz-hellblau hover:text-primary-helmholtz-hellblau visited:underline visited:decoration-solid visited:decoration-primary-helmholtz-dunkelblau visited:text-primary-helmholtz-dunkelblau size-auto `}
-        >
-          {url}
+      <Link
+        href={isEmail ? `mailto:${url}` : `${url}`}
+        rel="noreferrer"
+        target={isEmail ? "_self" : "_blank"}
+        className={`${associatedToFilters ? "" : ""} ${inDetailsPage ? "bg-red-500" : "forText w-[98%] inline-block relative md:inline-flex md:w-auto"} 
+         text-left gap-x-0.5 hover:underline hover:decoration-solid
+         hover:decoration-primary-helmholtz-hellblau hover:text-primary-helmholtz-hellblau 
+         visited:underline visited:decoration-solid visited:decoration-primary-helmholtz-dunkelblau
+        visited:text-primary-helmholtz-dunkelblau 
+        border-2 border-green-800`}
+      >
+        {url}
+        <div className="absolute top-0 right-0 md:static">
           <ExternalLinkIcon />
-        </Link>
-      </>
+        </div>
+      </Link>
     ) : (
       <span className="cursor-default">{url}</span>
     );
@@ -82,10 +87,13 @@ const ResultItem = ({
   const displayLinkItem = (displayItem: string | string[], isEmail = false) =>
     Array.isArray(displayItem)
       ? displayItem.map((url, idx) => (
-          <span key={idx} className="">
+          <div
+            key={idx}
+            className={`${isExternalLink(url) ? "grow" : "grow-0"} items-end border-2 border-blue-600 inline-flex gap-x-1 truncate`}
+          >
             {renderLinkItem(url, isEmail)}
             {idx === displayItem.length - 1 ? null : `, `}
-          </span>
+          </div>
         ))
       : renderLinkItem(displayItem, isEmail);
 
@@ -125,7 +133,7 @@ const ResultItem = ({
   return (
     <div
       key={idx}
-      className="my-2 space-y-2 rounded-xl border-2 border-primary-helmholtz-hellblau/20 px-5 py-5 shadow-lg shadow-secondary-helmholtz-highlightblau bg-white size-auto"
+      className="flex flex-col my-2 space-y-2 rounded-xl border-2 border-primary-helmholtz-hellblau/20 px-5 py-5 shadow-lg shadow-secondary-helmholtz-highlightblau bg-white size-auto"
     >
       <button
         className={`${inDetailsPage ? "" : "hover:transition-all hover:translate-x-3"} inline-flex align-middle items-center pb-2 text-primary-helmholtz-dunkelblau`}
@@ -144,7 +152,7 @@ const ResultItem = ({
           </span>
         ) : null}
         <p
-          className={`${associatedToFilters ? "md:basis-10/12" : "md:flex-none lg:line-clamp-none"} ${inDetailsPage ? "line-clamp-none" : ""} basis-10/12 line-clamp-1 flex-1 font-semibold text-left`}
+          className={`${associatedToFilters ? "md:basis-10/12" : "lg:flex-none lg:line-clamp-none"} ${inDetailsPage ? "line-clamp-none" : ""} basis-10/12 line-clamp-1 flex-1 font-semibold text-left`}
           rel="noreferrer"
         >
           {item.name}
@@ -152,19 +160,19 @@ const ResultItem = ({
         {inDetailsPage ?? <RightArrowIcon />}
       </button>
 
-      <div className="text-sm">
+      <div className="text-sm inline-flex flex-wrap items-center border-2 border-yellow-800">
         <span className="font-semibold">{s("txt_identifier")}: </span>
         {displayLinkItem(item.txt_identifier ?? item.id)}
       </div>
 
       {item.txt_sameAs ? (
-        <div className="text-sm">
-          <span className="font-semibold ">{s("txt_sameAs")}: </span>
+        <div className="text-sm inline-flex flex-wrap items-center border-2 border-yellow-800">
+          <span className="font-semibold">{s("txt_sameAs")}: </span>
           {displayLinkItem(item.txt_sameAs)}
         </div>
       ) : null}
       {item.txt_email ? (
-        <div className="text-sm">
+        <div className="text-sm ">
           <span className="font-semibold">{s("txt_email")}: </span>
           {displayLinkItem(item.txt_email, true)}
         </div>
@@ -209,13 +217,13 @@ const ResultItem = ({
         </div>
       ) : null}
       {item.txt_license ? (
-        <div className="text-sm">
+        <div className="text-sm inline-flex flex-wrap items-center border-2 border-yellow-800">
           <span className="font-semibold">{s("txt_license")}: </span>
           {displayLinkItem(item.txt_license)}
         </div>
       ) : null}
       {item.txt_url ? (
-        <div className="text-sm">
+        <div className="text-sm inline-flex flex-wrap items-center border-2 border-yellow-800">
           <span className="font-semibold">{s("txt_url")}: </span>
           {displayLinkItem(item.txt_url)}
         </div>
@@ -278,7 +286,7 @@ const ResultItem = ({
           </div>
         ) : null}
         {item.links ? (
-          <div className="text-sm">
+          <div className="text-sm inline-flex flex-wrap items-center border-2 border-yellow-800">
             <span className="font-semibold">{s("links")}: </span>
             {displayLinkItem(item.links)}
           </div>
@@ -308,7 +316,7 @@ const ResultItem = ({
           </div>
         ) : null}
         {item.wikipedia_url ? (
-          <div className="text-sm">
+          <div className="text-sm inline-flex flex-wrap items-center border-2 border-yellow-800">
             <span className="font-semibold">{s("wikipedia_url")}: </span>
             {displayLinkItem(item.wikipedia_url)}
           </div>
-- 
GitLab


From 64706db7f9bf2275f03b1972c031d79998e2c12d Mon Sep 17 00:00:00 2001
From: FionaDmello <40391218+FionaDmello@users.noreply.github.com>
Date: Thu, 16 Jan 2025 16:24:01 +0100
Subject: [PATCH 19/37] moderate fixes for styling to scale when dynamic
 filters are present in results view

---
 src/app/[locale]/globals.css                  |  6 ++++-
 .../app/results/ListResults/ResultItem.tsx    | 23 +++++++++++--------
 2 files changed, 18 insertions(+), 11 deletions(-)

diff --git a/src/app/[locale]/globals.css b/src/app/[locale]/globals.css
index de8b0ec..17289e0 100644
--- a/src/app/[locale]/globals.css
+++ b/src/app/[locale]/globals.css
@@ -10,6 +10,10 @@
     @apply m-10 p-10 rounded-lg drop-shadow bg-left-bottom border-2 lg:hidden;
   }
   .forText {
-    @apply text-ellipsis overflow-x-hidden line-clamp-1 md:overflow-x-visible md:line-clamp-none;
+    @apply overflow-clip text-ellipsis;
+  }
+
+  .test {
+    @apply inline-block !important;
   }
 }
diff --git a/src/components/app/results/ListResults/ResultItem.tsx b/src/components/app/results/ListResults/ResultItem.tsx
index a89011b..0ccba00 100644
--- a/src/components/app/results/ListResults/ResultItem.tsx
+++ b/src/components/app/results/ListResults/ResultItem.tsx
@@ -68,15 +68,18 @@ const ResultItem = ({
         href={isEmail ? `mailto:${url}` : `${url}`}
         rel="noreferrer"
         target={isEmail ? "_self" : "_blank"}
-        className={`${associatedToFilters ? "" : ""} ${inDetailsPage ? "bg-red-500" : "forText w-[98%] inline-block relative md:inline-flex md:w-auto"} 
-         text-left gap-x-0.5 hover:underline hover:decoration-solid
-         hover:decoration-primary-helmholtz-hellblau hover:text-primary-helmholtz-hellblau 
-         visited:underline visited:decoration-solid visited:decoration-primary-helmholtz-dunkelblau
-        visited:text-primary-helmholtz-dunkelblau 
-        border-2 border-green-800`}
+        className={`text-left gap-x-0.5 hover:underline hover:decoration-solid
+        hover:decoration-primary-helmholtz-hellblau hover:text-primary-helmholtz-hellblau 
+        visited:underline visited:decoration-solid visited:decoration-primary-helmholtz-dunkelblau
+      visited:text-primary-helmholtz-dunkelblau 
+        border-2 border-green-800
+        max-w-[98%] inline-block relative truncate md:inline-flex md:w-auto 
+        ${associatedToFilters ? "md:w-20 md:test md:relative md:truncate lg:inline-flex lg:w-auto" : ""} `}
       >
         {url}
-        <div className="absolute top-0 right-0 md:static">
+        <div
+          className={`absolute top-0 right-0 md:static ${associatedToFilters ? "bg-green-500 md:absolute md:top-0 md:right-0 lg:static" : ""} `}
+        >
           <ExternalLinkIcon />
         </div>
       </Link>
@@ -172,7 +175,7 @@ const ResultItem = ({
         </div>
       ) : null}
       {item.txt_email ? (
-        <div className="text-sm ">
+        <div className="text-sm inline-flex flex-wrap items-center border-2 border-yellow-800">
           <span className="font-semibold">{s("txt_email")}: </span>
           {displayLinkItem(item.txt_email, true)}
         </div>
@@ -229,7 +232,7 @@ const ResultItem = ({
         </div>
       ) : null}
       {item.txt_codeRepository ? (
-        <div className="text-sm">
+        <div className="text-sm inline-flex flex-wrap items-center border-2 border-yellow-800">
           <span className="font-semibold">{s("txt_codeRepository")}: </span>
           {displayLinkItem(item.txt_codeRepository)}
         </div>
@@ -280,7 +283,7 @@ const ResultItem = ({
 
       <>
         {item.email_address ? (
-          <div className="text-sm">
+          <div className="text-sm inline-flex flex-wrap items-center border-2 border-yellow-800">
             <span className="font-semibold">{s("txt_email")}: </span>
             {displayLinkItem(item.email_address)}
           </div>
-- 
GitLab


From d604a2a86f64c130c19ffaec18316b7b7a1c2512 Mon Sep 17 00:00:00 2001
From: FionaDmello <40391218+FionaDmello@users.noreply.github.com>
Date: Mon, 20 Jan 2025 12:56:50 +0100
Subject: [PATCH 20/37] intermediate changes to link responsivity

---
 src/app/[locale]/globals.css                          |  6 +++++-
 src/components/app/results/ListResults/ResultItem.tsx | 10 ++++++----
 2 files changed, 11 insertions(+), 5 deletions(-)

diff --git a/src/app/[locale]/globals.css b/src/app/[locale]/globals.css
index 17289e0..e1e105a 100644
--- a/src/app/[locale]/globals.css
+++ b/src/app/[locale]/globals.css
@@ -10,10 +10,14 @@
     @apply m-10 p-10 rounded-lg drop-shadow bg-left-bottom border-2 lg:hidden;
   }
   .forText {
-    @apply overflow-clip text-ellipsis;
+    @apply truncate !important;
   }
 
   .test {
     @apply inline-block !important;
   }
+
+  .noTest {
+    @apply inline-flex !important;
+  }
 }
diff --git a/src/components/app/results/ListResults/ResultItem.tsx b/src/components/app/results/ListResults/ResultItem.tsx
index 0ccba00..982adeb 100644
--- a/src/components/app/results/ListResults/ResultItem.tsx
+++ b/src/components/app/results/ListResults/ResultItem.tsx
@@ -65,6 +65,7 @@ const ResultItem = ({
   const renderLinkItem = (url: string, isEmail = false) =>
     isExternalLink(url) ? (
       <Link
+        id="external-link"
         href={isEmail ? `mailto:${url}` : `${url}`}
         rel="noreferrer"
         target={isEmail ? "_self" : "_blank"}
@@ -73,18 +74,19 @@ const ResultItem = ({
         visited:underline visited:decoration-solid visited:decoration-primary-helmholtz-dunkelblau
       visited:text-primary-helmholtz-dunkelblau 
         border-2 border-green-800
-        max-w-[98%] inline-block relative truncate md:inline-flex md:w-auto 
-        ${associatedToFilters ? "md:w-20 md:test md:relative md:truncate lg:inline-flex lg:w-auto" : ""} `}
+        max-w-full inline-block relative truncate md:inline-flex md:w-auto 
+        ${associatedToFilters ?? "md:max-w-full md:test md:relative xl:noTest xl:w-auto"} `}
       >
         {url}
         <div
-          className={`absolute top-0 right-0 md:static ${associatedToFilters ? "bg-green-500 md:absolute md:top-0 md:right-0 lg:static" : ""} `}
+          id="external-link-icon-container"
+          className={`absolute top-0 -right-2 md:static ${associatedToFilters ? "bg-green-500 md:absolute md:top-0 md:right-0 xl:static" : ""} `}
         >
           <ExternalLinkIcon />
         </div>
       </Link>
     ) : (
-      <span className="cursor-default">{url}</span>
+      <span className="cursor-default truncate">{url}</span>
     );
 
   const displayLinkItem = (displayItem: string | string[], isEmail = false) =>
-- 
GitLab


From 7e7e442b34016e3b4101020f880bd2c908de8de1 Mon Sep 17 00:00:00 2001
From: FionaDmello <40391218+FionaDmello@users.noreply.github.com>
Date: Mon, 20 Jan 2025 14:21:16 +0100
Subject: [PATCH 21/37] simplified styling for links in different views

---
 src/app/[locale]/globals.css                        |  2 +-
 .../app/results/ListResults/ResultItem.tsx          | 13 ++++++-------
 2 files changed, 7 insertions(+), 8 deletions(-)

diff --git a/src/app/[locale]/globals.css b/src/app/[locale]/globals.css
index e1e105a..7ae4a37 100644
--- a/src/app/[locale]/globals.css
+++ b/src/app/[locale]/globals.css
@@ -10,7 +10,7 @@
     @apply m-10 p-10 rounded-lg drop-shadow bg-left-bottom border-2 lg:hidden;
   }
   .forText {
-    @apply truncate !important;
+    @apply overflow-hidden text-ellipsis ;
   }
 
   .test {
diff --git a/src/components/app/results/ListResults/ResultItem.tsx b/src/components/app/results/ListResults/ResultItem.tsx
index 982adeb..374350e 100644
--- a/src/components/app/results/ListResults/ResultItem.tsx
+++ b/src/components/app/results/ListResults/ResultItem.tsx
@@ -74,16 +74,15 @@ const ResultItem = ({
         visited:underline visited:decoration-solid visited:decoration-primary-helmholtz-dunkelblau
       visited:text-primary-helmholtz-dunkelblau 
         border-2 border-green-800
-        max-w-full inline-block relative truncate md:inline-flex md:w-auto 
-        ${associatedToFilters ?? "md:max-w-full md:test md:relative xl:noTest xl:w-auto"} `}
+        truncate`}
       >
         {url}
-        <div
-          id="external-link-icon-container"
-          className={`absolute top-0 -right-2 md:static ${associatedToFilters ? "bg-green-500 md:absolute md:top-0 md:right-0 xl:static" : ""} `}
+        <span
+          id="external-link-icon-container "
+          className={`inline-flex  ${associatedToFilters ? "bg-green-500 " : ""} `}
         >
           <ExternalLinkIcon />
-        </div>
+        </span>
       </Link>
     ) : (
       <span className="cursor-default truncate">{url}</span>
@@ -157,7 +156,7 @@ const ResultItem = ({
           </span>
         ) : null}
         <p
-          className={`${associatedToFilters ? "md:basis-10/12" : "lg:flex-none lg:line-clamp-none"} ${inDetailsPage ? "line-clamp-none" : ""} basis-10/12 line-clamp-1 flex-1 font-semibold text-left`}
+          className={`${associatedToFilters ? "" : ""} ${inDetailsPage ? "" : ""} truncate font-semibold text-left`}
           rel="noreferrer"
         >
           {item.name}
-- 
GitLab


From 88c31a3219ef0ce0e5edb59c4f0ec748a4a7b853 Mon Sep 17 00:00:00 2001
From: FionaDmello <40391218+FionaDmello@users.noreply.github.com>
Date: Mon, 20 Jan 2025 15:01:58 +0100
Subject: [PATCH 22/37] much simplified styling for links and item title in
 results view and details view on all screens

---
 src/app/[locale]/globals.css                  | 11 -------
 .../app/results/ListResults/ResultItem.tsx    | 33 ++++++++-----------
 2 files changed, 14 insertions(+), 30 deletions(-)

diff --git a/src/app/[locale]/globals.css b/src/app/[locale]/globals.css
index 7ae4a37..a22dd0d 100644
--- a/src/app/[locale]/globals.css
+++ b/src/app/[locale]/globals.css
@@ -9,15 +9,4 @@
   #smallScreenSearch {
     @apply m-10 p-10 rounded-lg drop-shadow bg-left-bottom border-2 lg:hidden;
   }
-  .forText {
-    @apply overflow-hidden text-ellipsis ;
-  }
-
-  .test {
-    @apply inline-block !important;
-  }
-
-  .noTest {
-    @apply inline-flex !important;
-  }
 }
diff --git a/src/components/app/results/ListResults/ResultItem.tsx b/src/components/app/results/ListResults/ResultItem.tsx
index 374350e..85ba38a 100644
--- a/src/components/app/results/ListResults/ResultItem.tsx
+++ b/src/components/app/results/ListResults/ResultItem.tsx
@@ -72,15 +72,10 @@ const ResultItem = ({
         className={`text-left gap-x-0.5 hover:underline hover:decoration-solid
         hover:decoration-primary-helmholtz-hellblau hover:text-primary-helmholtz-hellblau 
         visited:underline visited:decoration-solid visited:decoration-primary-helmholtz-dunkelblau
-      visited:text-primary-helmholtz-dunkelblau 
-        border-2 border-green-800
-        truncate`}
+      visited:text-primary-helmholtz-dunkelblau truncate`}
       >
         {url}
-        <span
-          id="external-link-icon-container "
-          className={`inline-flex  ${associatedToFilters ? "bg-green-500 " : ""} `}
-        >
+        <span className="inline-flex">
           <ExternalLinkIcon />
         </span>
       </Link>
@@ -93,7 +88,7 @@ const ResultItem = ({
       ? displayItem.map((url, idx) => (
           <div
             key={idx}
-            className={`${isExternalLink(url) ? "grow" : "grow-0"} items-end border-2 border-blue-600 inline-flex gap-x-1 truncate`}
+            className={`${isExternalLink(url) ? "grow" : "grow-0"} items-end inline-flex gap-x-1 truncate`}
           >
             {renderLinkItem(url, isEmail)}
             {idx === displayItem.length - 1 ? null : `, `}
@@ -140,7 +135,7 @@ const ResultItem = ({
       className="flex flex-col my-2 space-y-2 rounded-xl border-2 border-primary-helmholtz-hellblau/20 px-5 py-5 shadow-lg shadow-secondary-helmholtz-highlightblau bg-white size-auto"
     >
       <button
-        className={`${inDetailsPage ? "" : "hover:transition-all hover:translate-x-3"} inline-flex align-middle items-center pb-2 text-primary-helmholtz-dunkelblau`}
+        className={`${inDetailsPage ? "" : "hover:transition-all hover:translate-x-3"} inline-flex align-middle items-center pb-2 text-primary-helmholtz-dunkelblau ${associatedToFilters ? "" : "inline-flex"}`}
         onClick={handleDetailSearch}
         disabled={inDetailsPage}
       >
@@ -156,7 +151,7 @@ const ResultItem = ({
           </span>
         ) : null}
         <p
-          className={`${associatedToFilters ? "" : ""} ${inDetailsPage ? "" : ""} truncate font-semibold text-left`}
+          className={`${inDetailsPage ? "inline-flex" : " truncate"} font-semibold text-left w-[98%] `}
           rel="noreferrer"
         >
           {item.name}
@@ -164,19 +159,19 @@ const ResultItem = ({
         {inDetailsPage ?? <RightArrowIcon />}
       </button>
 
-      <div className="text-sm inline-flex flex-wrap items-center border-2 border-yellow-800">
+      <div className="text-sm inline-flex flex-wrap items-center">
         <span className="font-semibold">{s("txt_identifier")}: </span>
         {displayLinkItem(item.txt_identifier ?? item.id)}
       </div>
 
       {item.txt_sameAs ? (
-        <div className="text-sm inline-flex flex-wrap items-center border-2 border-yellow-800">
+        <div className="text-sm inline-flex flex-wrap items-center">
           <span className="font-semibold">{s("txt_sameAs")}: </span>
           {displayLinkItem(item.txt_sameAs)}
         </div>
       ) : null}
       {item.txt_email ? (
-        <div className="text-sm inline-flex flex-wrap items-center border-2 border-yellow-800">
+        <div className="text-sm inline-flex flex-wrap items-center">
           <span className="font-semibold">{s("txt_email")}: </span>
           {displayLinkItem(item.txt_email, true)}
         </div>
@@ -221,19 +216,19 @@ const ResultItem = ({
         </div>
       ) : null}
       {item.txt_license ? (
-        <div className="text-sm inline-flex flex-wrap items-center border-2 border-yellow-800">
+        <div className="text-sm inline-flex flex-wrap items-center">
           <span className="font-semibold">{s("txt_license")}: </span>
           {displayLinkItem(item.txt_license)}
         </div>
       ) : null}
       {item.txt_url ? (
-        <div className="text-sm inline-flex flex-wrap items-center border-2 border-yellow-800">
+        <div className="text-sm inline-flex flex-wrap items-center">
           <span className="font-semibold">{s("txt_url")}: </span>
           {displayLinkItem(item.txt_url)}
         </div>
       ) : null}
       {item.txt_codeRepository ? (
-        <div className="text-sm inline-flex flex-wrap items-center border-2 border-yellow-800">
+        <div className="text-sm inline-flex flex-wrap items-center">
           <span className="font-semibold">{s("txt_codeRepository")}: </span>
           {displayLinkItem(item.txt_codeRepository)}
         </div>
@@ -284,13 +279,13 @@ const ResultItem = ({
 
       <>
         {item.email_address ? (
-          <div className="text-sm inline-flex flex-wrap items-center border-2 border-yellow-800">
+          <div className="text-sm inline-flex flex-wrap items-center">
             <span className="font-semibold">{s("txt_email")}: </span>
             {displayLinkItem(item.email_address)}
           </div>
         ) : null}
         {item.links ? (
-          <div className="text-sm inline-flex flex-wrap items-center border-2 border-yellow-800">
+          <div className="text-sm inline-flex flex-wrap items-center">
             <span className="font-semibold">{s("links")}: </span>
             {displayLinkItem(item.links)}
           </div>
@@ -320,7 +315,7 @@ const ResultItem = ({
           </div>
         ) : null}
         {item.wikipedia_url ? (
-          <div className="text-sm inline-flex flex-wrap items-center border-2 border-yellow-800">
+          <div className="text-sm inline-flex flex-wrap items-center">
             <span className="font-semibold">{s("wikipedia_url")}: </span>
             {displayLinkItem(item.wikipedia_url)}
           </div>
-- 
GitLab


From 656cc9a6dd7c297d924b0d21f0c66b85c1580375 Mon Sep 17 00:00:00 2001
From: FionaDmello <40391218+FionaDmello@users.noreply.github.com>
Date: Mon, 20 Jan 2025 15:30:51 +0100
Subject: [PATCH 23/37] truncated relationships text in mobile view

---
 .../app/results/ListResults/ResultItem/Relationships.tsx  | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/src/components/app/results/ListResults/ResultItem/Relationships.tsx b/src/components/app/results/ListResults/ResultItem/Relationships.tsx
index 5d45ecc..199734b 100644
--- a/src/components/app/results/ListResults/ResultItem/Relationships.tsx
+++ b/src/components/app/results/ListResults/ResultItem/Relationships.tsx
@@ -35,18 +35,18 @@ const Relationships = ({ filteredArr, type }: Props) => {
     <div className="mt-2 cursor-default">
       <span className="font-semibold">{s(`${type.toLowerCase()}`)}: </span>
 
-      <p ref={relRef} className={relShowMore ? "" : "line-clamp-2 "}>
+      <p ref={relRef} className={relShowMore ? "" : "line-clamp-2"}>
         {filteredArr.map((displayItem, idx: number) => {
           const iconArr = INSTITUTE_ROR_LOGOS.filter((o) => o.id === displayItem.id);
           const iconHref = iconArr.pop()?.logo || "";
 
           return (
-            <span key={displayItem.id} className="">
+            <span key={displayItem.id} className="inline-flex items-end">
               <Link
                 href={displayItem.id}
                 rel="noreferrer"
                 target="_blank"
-                className="mx-0.5 leading-loose inline-flex gap-x-0.5 align-middle items-center hover:underline hover:decoration-solid hover:decoration-primary-helmholtz-hellblau hover:text-primary-helmholtz-hellblau visited:underline visited:decoration-solid visited:decoration-primary-helmholtz-dunkelblau visited:text-primary-helmholtz-dunkelblau"
+                className="mx-0.5 leading-loose inline-flex gap-x-0.5 align-middle hover:underline hover:decoration-solid hover:decoration-primary-helmholtz-hellblau hover:text-primary-helmholtz-hellblau visited:underline visited:decoration-solid visited:decoration-primary-helmholtz-dunkelblau visited:text-primary-helmholtz-dunkelblau"
               >
                 {iconHref ? (
                   <Image
@@ -57,7 +57,7 @@ const Relationships = ({ filteredArr, type }: Props) => {
                     height={16}
                   />
                 ) : null}
-                {displayItem.label}
+                <p className="line-clamp-1">{displayItem.label}</p>
                 <ExternalLinkIcon />
               </Link>
               {idx === filteredArr.length - 1 ? null : `, `}
-- 
GitLab


From c20fffafcff84c93d247f4f603b2ca182be34975 Mon Sep 17 00:00:00 2001
From: FionaDmello <40391218+FionaDmello@users.noreply.github.com>
Date: Wed, 22 Jan 2025 16:23:27 +0100
Subject: [PATCH 24/37] increase details items title size and add underline

---
 .../app/results/ListResults/ResultItem.tsx    | 22 +++++++++----------
 1 file changed, 11 insertions(+), 11 deletions(-)

diff --git a/src/components/app/results/ListResults/ResultItem.tsx b/src/components/app/results/ListResults/ResultItem.tsx
index 85ba38a..b946d4c 100644
--- a/src/components/app/results/ListResults/ResultItem.tsx
+++ b/src/components/app/results/ListResults/ResultItem.tsx
@@ -135,7 +135,7 @@ const ResultItem = ({
       className="flex flex-col my-2 space-y-2 rounded-xl border-2 border-primary-helmholtz-hellblau/20 px-5 py-5 shadow-lg shadow-secondary-helmholtz-highlightblau bg-white size-auto"
     >
       <button
-        className={`${inDetailsPage ? "" : "hover:transition-all hover:translate-x-3"} inline-flex align-middle items-center pb-2 text-primary-helmholtz-dunkelblau ${associatedToFilters ? "" : "inline-flex"}`}
+        className={`${inDetailsPage ? "" : "hover:transition-all hover:translate-x-3"} inline-flex align-middle items-center pb-2 text-primary-helmholtz-dunkelblau ${associatedToFilters ? "" : "inline-flex"} mb-2`}
         onClick={handleDetailSearch}
         disabled={inDetailsPage}
       >
@@ -151,7 +151,7 @@ const ResultItem = ({
           </span>
         ) : null}
         <p
-          className={`${inDetailsPage ? "inline-flex" : " truncate"} font-semibold text-left w-[98%] `}
+          className={`${inDetailsPage ? "inline-flex text-2xl underline underline-offset-8 decoration-primary-helmholtz-hellblau" : " truncate"} font-semibold text-left w-[98%] `}
           rel="noreferrer"
         >
           {item.name}
@@ -159,19 +159,19 @@ const ResultItem = ({
         {inDetailsPage ?? <RightArrowIcon />}
       </button>
 
-      <div className="text-sm inline-flex flex-wrap items-center">
+      <div className="text-sm inline-flex flex-wrap items-center gap-x-1">
         <span className="font-semibold">{s("txt_identifier")}: </span>
         {displayLinkItem(item.txt_identifier ?? item.id)}
       </div>
 
       {item.txt_sameAs ? (
-        <div className="text-sm inline-flex flex-wrap items-center">
+        <div className="text-sm inline-flex flex-wrap items-center gap-x-1">
           <span className="font-semibold">{s("txt_sameAs")}: </span>
           {displayLinkItem(item.txt_sameAs)}
         </div>
       ) : null}
       {item.txt_email ? (
-        <div className="text-sm inline-flex flex-wrap items-center">
+        <div className="text-sm inline-flex flex-wrap items-center gap-x-1">
           <span className="font-semibold">{s("txt_email")}: </span>
           {displayLinkItem(item.txt_email, true)}
         </div>
@@ -216,19 +216,19 @@ const ResultItem = ({
         </div>
       ) : null}
       {item.txt_license ? (
-        <div className="text-sm inline-flex flex-wrap items-center">
+        <div className="text-sm inline-flex flex-wrap items-center gap-x-1">
           <span className="font-semibold">{s("txt_license")}: </span>
           {displayLinkItem(item.txt_license)}
         </div>
       ) : null}
       {item.txt_url ? (
-        <div className="text-sm inline-flex flex-wrap items-center">
+        <div className="text-sm inline-flex flex-wrap items-center gap-x-1">
           <span className="font-semibold">{s("txt_url")}: </span>
           {displayLinkItem(item.txt_url)}
         </div>
       ) : null}
       {item.txt_codeRepository ? (
-        <div className="text-sm inline-flex flex-wrap items-center">
+        <div className="text-sm inline-flex flex-wrap items-center gap-x-1">
           <span className="font-semibold">{s("txt_codeRepository")}: </span>
           {displayLinkItem(item.txt_codeRepository)}
         </div>
@@ -279,13 +279,13 @@ const ResultItem = ({
 
       <>
         {item.email_address ? (
-          <div className="text-sm inline-flex flex-wrap items-center">
+          <div className="text-sm inline-flex flex-wrap items-center gap-x-1">
             <span className="font-semibold">{s("txt_email")}: </span>
             {displayLinkItem(item.email_address)}
           </div>
         ) : null}
         {item.links ? (
-          <div className="text-sm inline-flex flex-wrap items-center">
+          <div className="text-sm inline-flex flex-wrap items-center gap-x-1">
             <span className="font-semibold">{s("links")}: </span>
             {displayLinkItem(item.links)}
           </div>
@@ -315,7 +315,7 @@ const ResultItem = ({
           </div>
         ) : null}
         {item.wikipedia_url ? (
-          <div className="text-sm inline-flex flex-wrap items-center">
+          <div className="text-sm inline-flex flex-wrap items-center gap-x-1">
             <span className="font-semibold">{s("wikipedia_url")}: </span>
             {displayLinkItem(item.wikipedia_url)}
           </div>
-- 
GitLab


From 5275816f45e6eb88b951a4e4d68d9594d6115276 Mon Sep 17 00:00:00 2001
From: FionaDmello <40391218+FionaDmello@users.noreply.github.com>
Date: Wed, 22 Jan 2025 17:11:28 +0100
Subject: [PATCH 25/37] minor correction to underline spacing and text in
 details view

---
 src/components/app/results/ListResults/ResultItem.tsx | 4 ++--
 src/locales/en.json                                   | 2 +-
 2 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/src/components/app/results/ListResults/ResultItem.tsx b/src/components/app/results/ListResults/ResultItem.tsx
index b946d4c..f9a5549 100644
--- a/src/components/app/results/ListResults/ResultItem.tsx
+++ b/src/components/app/results/ListResults/ResultItem.tsx
@@ -135,7 +135,7 @@ const ResultItem = ({
       className="flex flex-col my-2 space-y-2 rounded-xl border-2 border-primary-helmholtz-hellblau/20 px-5 py-5 shadow-lg shadow-secondary-helmholtz-highlightblau bg-white size-auto"
     >
       <button
-        className={`${inDetailsPage ? "" : "hover:transition-all hover:translate-x-3"} inline-flex align-middle items-center pb-2 text-primary-helmholtz-dunkelblau ${associatedToFilters ? "" : "inline-flex"} mb-2`}
+        className={`${inDetailsPage ? "" : "hover:transition-all hover:translate-x-3"} inline-flex align-middle items-center pb-2 text-primary-helmholtz-dunkelblau ${associatedToFilters ? "" : "inline-flex"} ${inDetailsPage ? "mb-5" : ""}`}
         onClick={handleDetailSearch}
         disabled={inDetailsPage}
       >
@@ -151,7 +151,7 @@ const ResultItem = ({
           </span>
         ) : null}
         <p
-          className={`${inDetailsPage ? "inline-flex text-2xl underline underline-offset-8 decoration-primary-helmholtz-hellblau" : " truncate"} font-semibold text-left w-[98%] `}
+          className={`${inDetailsPage ? "inline-flex text-2xl underline underline-offset-[16px] decoration-secondary-helmholtz-mint" : " truncate"} font-semibold text-left w-[98%] `}
           rel="noreferrer"
         >
           {item.name}
diff --git a/src/locales/en.json b/src/locales/en.json
index 8013bb9..6235bc8 100644
--- a/src/locales/en.json
+++ b/src/locales/en.json
@@ -204,6 +204,6 @@
     "amendment": "We may update our Privacy Statement from time to time. Updates of our Privacy Statement will be published on our Website. Any amendments become effective upon publication on our Website. We therefore recommend that you regularly visit the site to keep yourself informed on possible updates. This Privacy Policy has been generated by the Privacy Policy Generator of the External Data Protection Officers that was developed in cooperation with RC GmbH, which sells used notebooks and the Media Law Lawyers from WBS-LAW."
   },
   "DetailsView": {
-    "other_items": "OTHER RELATED ITEMS"
+    "other_items": "RELATED ENTRIES"
   }
 }
-- 
GitLab


From dad5fdef9c602d8a4a1165a8351f2027d476310b Mon Sep 17 00:00:00 2001
From: FionaDmello <40391218+FionaDmello@users.noreply.github.com>
Date: Wed, 22 Jan 2025 17:11:39 +0100
Subject: [PATCH 26/37] minor correction to underline spacing and text in
 details view

---
 src/components/app/results/ListResults/ResultItem.tsx | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/components/app/results/ListResults/ResultItem.tsx b/src/components/app/results/ListResults/ResultItem.tsx
index f9a5549..10f33d3 100644
--- a/src/components/app/results/ListResults/ResultItem.tsx
+++ b/src/components/app/results/ListResults/ResultItem.tsx
@@ -151,7 +151,7 @@ const ResultItem = ({
           </span>
         ) : null}
         <p
-          className={`${inDetailsPage ? "inline-flex text-2xl underline underline-offset-[16px] decoration-secondary-helmholtz-mint" : " truncate"} font-semibold text-left w-[98%] `}
+          className={`${inDetailsPage ? "inline-flex text-2xl underline underline-offset-[16px] decoration-primary-helmholtz-hellblau" : " truncate"} font-semibold text-left w-[98%] `}
           rel="noreferrer"
         >
           {item.name}
-- 
GitLab


From bb8713c643bd32788036da140a033584cfef12c8 Mon Sep 17 00:00:00 2001
From: FionaDmello <40391218+FionaDmello@users.noreply.github.com>
Date: Mon, 17 Feb 2025 13:04:54 +0100
Subject: [PATCH 27/37] review comment fixes related to mistaken absolute path

---
 src/components/app/results/Details/DetailsItemCard.tsx | 3 +--
 src/components/app/results/ListResults/ResultItem.tsx  | 2 +-
 2 files changed, 2 insertions(+), 3 deletions(-)

diff --git a/src/components/app/results/Details/DetailsItemCard.tsx b/src/components/app/results/Details/DetailsItemCard.tsx
index ca10382..56ab0cd 100644
--- a/src/components/app/results/Details/DetailsItemCard.tsx
+++ b/src/components/app/results/Details/DetailsItemCard.tsx
@@ -4,11 +4,10 @@ import { useAtomValue } from "jotai";
 import { useSearchParams } from "next/navigation";
 import React from "react";
 
+import ResultItem from "@/components/app/results/ListResults/ResultItem";
 import { ResultItem as ResultItemType } from "@/types/types";
 import { detailsItemAtom } from "@/utils/atoms";
 
-import ResultItem from "../ListResults/ResultItem";
-
 const DetailsItemCard = () => {
   const detailsText = useSearchParams().get("detailsText");
   const detailsItemAtomValue: ResultItemType[] = useAtomValue(detailsItemAtom);
diff --git a/src/components/app/results/ListResults/ResultItem.tsx b/src/components/app/results/ListResults/ResultItem.tsx
index 10f33d3..c485f1b 100644
--- a/src/components/app/results/ListResults/ResultItem.tsx
+++ b/src/components/app/results/ListResults/ResultItem.tsx
@@ -21,7 +21,7 @@ type Props = {
   searchText?: string;
   activeCategory?: Category;
   inDetailsPage?: boolean;
-  associatedToFilters: boolean;
+  associatedToFilters?: boolean;
 };
 
 const ResultItem = ({
-- 
GitLab


From 620f01d7dcee70d63af55a9725e49ad68034a3f0 Mon Sep 17 00:00:00 2001
From: FionaDmello <40391218+FionaDmello@users.noreply.github.com>
Date: Mon, 17 Feb 2025 17:26:20 +0100
Subject: [PATCH 28/37] added all available logo urls and created container to
 display image or large screens

---
 next.config.mjs                               |  97 +++++
 src/app/api/config/config.ts                  |  60 ++-
 .../app/results/ListResults/ResultItem.tsx    | 388 +++++++++---------
 .../ListResults/ResultItem/Relationships.tsx  |   2 +-
 4 files changed, 342 insertions(+), 205 deletions(-)

diff --git a/next.config.mjs b/next.config.mjs
index 0fc7d23..d9d2c22 100644
--- a/next.config.mjs
+++ b/next.config.mjs
@@ -17,12 +17,24 @@ const nextConfig = {
         pathname:
           "/typo3conf/ext/dreipc_hgf/Resources/Public/Frontend/Build/assets/icons/favicons/icon-228x228.png",
       },
+      {
+        protocol: "https",
+        hostname: "www.upload.wikimedia.org",
+        port: "",
+        pathname: "/wikipedia/commons/9/94/Helmholtz_Association's_Logo.svg",
+      },
       {
         protocol: "https",
         hostname: "www.awi.de",
         port: "",
         pathname: "/_assets/978631966794c5093250775de182779d/Images/AWI/favicon.ico",
       },
+      {
+        protocol: "https",
+        hostname: "www.wikidata.org",
+        port: "",
+        pathname: "/wiki/Q536656#/media/File:AWI_Logo_2017.svg",
+      },
       {
         protocol: "https",
         hostname: "www.geomar.de",
@@ -42,54 +54,109 @@ const nextConfig = {
         port: "",
         pathname: "/sites/default/files/favicons/favicon-16x16.png",
       },
+      {
+        protocol: "https",
+        hostname: "www.wikidata.org",
+        port: "",
+        pathname: "/wiki/Q1912019#/media/File:MDC_Logo_V1_RGB_blue.svg",
+      },
       {
         protocol: "https",
         hostname: "www.desy.de",
         port: "",
         pathname: "/++resource++desy/images/desy_logo_3c_web.svg",
       },
+      {
+        protocol: "https",
+        hostname: "www.wikidata.org",
+        port: "",
+        pathname: "/wiki/Q311801#/media/File:Desy_logo_3c_web.svg",
+      },
       {
         protocol: "https",
         hostname: "www.helmholtz-hzi.de",
         port: "",
         pathname: "/_assets/ae8a1fe32f30b295243325c1db1b8058/Icons/Favicons/HZI/favicon-16x16.png",
       },
+      {
+        protocol: "https",
+        hostname: "www.wikidata.org",
+        port: "",
+        pathname: "/wiki/Q1603242#/media/File:Helmholtz-Zentrum_für_Infektionsforschung_GmbH.jpg",
+      },
       {
         protocol: "https",
         hostname: "www.gfz-potsdam.de",
         port: "",
         pathname: "/typo3conf/ext/gfz_www_sitepackage/Resources/Public/Icons/favicon.ico",
       },
+      {
+        protocol: "https",
+        hostname: "www.wikidata.org",
+        port: "",
+        pathname: "/wiki/Q1205654#/media/File:Deutsches-GeoForschungsZentrum-Logo.svg",
+      },
       {
         protocol: "https",
         hostname: "www.helmholtz-berlin.de",
         port: "",
         pathname: "/favicon.ico",
       },
+      {
+        protocol: "https",
+        hostname: "www.wikidata.org",
+        port: "",
+        pathname:
+          "/wiki/Q314578#/media/File:Helmholtz-Zentrum_Berlin_für_Materialien_und_Energie_Logo.svg",
+      },
       {
         protocol: "https",
         hostname: "www.ufz.de",
         port: "",
         pathname: "/static/custom/weblayout/DefaultInternetLayout/img/favicon.ico",
       },
+      {
+        protocol: "https",
+        hostname: "www.wikidata.org",
+        port: "",
+        pathname: "/wiki/Q880999#/media/File:UFZ_Logo_RGB_DE.png",
+      },
       {
         protocol: "https",
         hostname: "www.hzdr.de",
         port: "",
         pathname: "/favicon-16x16.png",
       },
+      {
+        protocol: "https",
+        hostname: "www.wikidata.org",
+        port: "",
+        pathname: "/wiki/Q883545#/media/File:HZDR-LOGO.png",
+      },
       {
         protocol: "https",
         hostname: "www.dlr.de",
         port: "",
         pathname: "/icon.svg",
       },
+      {
+        protocol: "https",
+        hostname: "www.wikidata.org",
+        port: "",
+        pathname: "/wiki/Q157332#/media/File:DLR_Logo.svg",
+      },
       {
         protocol: "https",
         hostname: "www.gsi.de",
         port: "",
         pathname: "/favicon.ico",
       },
+      {
+        protocol: "https",
+        hostname: "www.wikidata.org",
+        port: "",
+        pathname: "/wiki/Q703993#/media/File:GSI_Logo.svg",
+      },
       {
         protocol: "https",
         hostname: "www.helmholtz-munich.de",
@@ -97,18 +164,36 @@ const nextConfig = {
         pathname:
           "/typo3conf/ext/helmholtz_sitepackage/Resources/Public/Icons/Favicons/favicon-16x16.png",
       },
+      {
+        protocol: "https",
+        hostname: "www.upload.wikimedia.org",
+        port: "",
+        pathname: "/wikipedia/commons/5/51/Helmholtz_Zentrum_München_logo.svg",
+      },
       {
         protocol: "https",
         hostname: "www.kit.edu",
         port: "",
         pathname: "/img/intern/favicon.ico",
       },
+      {
+        protocol: "https",
+        hostname: "www.wikidata.org",
+        port: "",
+        pathname: "/wiki/Q309988#/media/File:Logo_KIT.svg",
+      },
       {
         protocol: "https",
         hostname: "www.dkfz.de",
         port: "",
         pathname: "/global/img/favicon.ico",
       },
+      {
+        protocol: "https",
+        hostname: "www.wikidata.org",
+        port: "",
+        pathname: "/wiki/Q449325#/media/File:Deutsches_Krebsforschungszentrum_Logo.svg",
+      },
       {
         protocol: "https",
         hostname: "cispa.de",
@@ -121,12 +206,24 @@ const nextConfig = {
         port: "",
         pathname: "/typo3conf/ext/fe_website/Resources/Public/AppIcons/favicon-16x16.png",
       },
+      {
+        protocol: "https",
+        hostname: "www.wikidata.org",
+        port: "",
+        pathname: "/wiki/Q1206136#/media/File:DZNE_Logo_CMYK.svg",
+      },
       {
         protocol: "https",
         hostname: "www.fz-juelich.de",
         port: "",
         pathname: "/icon.svg",
       },
+      {
+        protocol: "https",
+        hostname: "www.upload.wikimedia.org",
+        port: "",
+        pathname: "/wikipedia/commons/4/40/Logo_des_Forschungszentrums_Jülich_seit_2018.svg",
+      },
     ],
   },
 };
diff --git a/src/app/api/config/config.ts b/src/app/api/config/config.ts
index b1561db..e588572 100644
--- a/src/app/api/config/config.ts
+++ b/src/app/api/config/config.ts
@@ -252,79 +252,101 @@ export const INSTITUTE_ROR_LOGOS = [
   // Helmholtz Association
   {
     id: "https://ror.org/0281dp749",
-    logo: "https://www.helmholtz.de/typo3conf/ext/dreipc_hgf/Resources/Public/Frontend/Build/assets/icons/favicons/icon-228x228.png",
+    favicon:
+      "https://www.helmholtz.de/typo3conf/ext/dreipc_hgf/Resources/Public/Frontend/Build/assets/icons/favicons/icon-228x228.png",
+    logo: "https://upload.wikimedia.org/wikipedia/commons/9/94/Helmholtz_Association%27s_Logo.svg",
   },
   // 18 Helmholtz Centers
   {
     id: "https://ror.org/02h2x0161",
-    logo: "https://www.geomar.de/typo3conf/ext/geomar_provider/Resources/Public/Graphics/favicon/favicon-16x16.png",
+    favicon:
+      "https://www.geomar.de/typo3conf/ext/geomar_provider/Resources/Public/Graphics/favicon/favicon-16x16.png",
   },
   {
     id: "https://ror.org/03qjp1d79",
-    logo: "https://hereon.de/favicon-16x16.png",
+    favicon: "https://hereon.de/favicon-16x16.png",
   },
   {
     id: "https://ror.org/04p5ggc03",
-    logo: "https://www.mdc-berlin.de/sites/default/files/favicons/favicon-16x16.png",
+    favicon: "https://www.mdc-berlin.de/sites/default/files/favicons/favicon-16x16.png",
+    logo: "https://www.wikidata.org/wiki/Q1912019#/media/File:MDC_Logo_V1_RGB_blue.svg",
   },
   {
     id: "https://ror.org/01js2sh04",
-    logo: "https://www.desy.de/++resource++desy/images/desy_logo_3c_web.svg",
+    favicon: "https://www.desy.de/++resource++desy/images/desy_logo_3c_web.svg",
+    logo: "https://www.wikidata.org/wiki/Q311801#/media/File:Desy_logo_3c_web.svg",
   },
   {
     id: "https://ror.org/032e6b942",
-    logo: "https://www.awi.de/_assets/978631966794c5093250775de182779d/Images/AWI/favicon.ico",
+    favicon: "https://www.awi.de/_assets/978631966794c5093250775de182779d/Images/AWI/favicon.ico",
+    logo: "https://www.wikidata.org/wiki/Q536656#/media/File:AWI_Logo_2017.svg",
   },
   {
     id: "https://ror.org/03d0p2685",
-    logo: "https://www.helmholtz-hzi.de/_assets/ae8a1fe32f30b295243325c1db1b8058/Icons/Favicons/HZI/favicon-16x16.png",
+    favicon:
+      "https://www.helmholtz-hzi.de/_assets/ae8a1fe32f30b295243325c1db1b8058/Icons/Favicons/HZI/favicon-16x16.png",
+    logo: "https://www.wikidata.org/wiki/Q1603242#/media/File:Helmholtz-Zentrum_f%C3%BCr_Infektionsforschung_GmbH.jpg",
   },
   {
     id: "https://ror.org/04z8jg394",
-    logo: "https://www.gfz-potsdam.de/typo3conf/ext/gfz_www_sitepackage/Resources/Public/Icons/favicon.ico",
+    favicon:
+      "https://www.gfz-potsdam.de/typo3conf/ext/gfz_www_sitepackage/Resources/Public/Icons/favicon.ico",
+    logo: "https://www.wikidata.org/wiki/Q1205654#/media/File:Deutsches-GeoForschungsZentrum-Logo.svg",
   },
   {
     id: "https://ror.org/02aj13c28",
-    logo: "https://www.helmholtz-berlin.de/favicon.ico",
+    favicon: "https://www.helmholtz-berlin.de/favicon.ico",
+    logo: "https://www.wikidata.org/wiki/Q314578#/media/File:Helmholtz-Zentrum_Berlin_f%C3%BCr_Materialien_und_Energie_Logo.svg",
   },
   {
     id: "https://ror.org/000h6jb29",
-    logo: "https://www.ufz.de/static/custom/weblayout/DefaultInternetLayout/img/favicon.ico",
+    favicon: "https://www.ufz.de/static/custom/weblayout/DefaultInternetLayout/img/favicon.ico",
+    logo: "https://www.wikidata.org/wiki/Q880999#/media/File:UFZ_Logo_RGB_DE.png",
   },
   {
     id: "https://ror.org/01zy2cs03",
-    logo: "https://www.hzdr.de/favicon-16x16.png",
+    favicon: "https://www.hzdr.de/favicon-16x16.png",
+    logo: "https://www.wikidata.org/wiki/Q883545#/media/File:HZDR-LOGO.png",
   },
   {
     id: "https://ror.org/04bwf3e34",
-    logo: "https://www.dlr.de/icon.svg",
+    favicon: "https://www.dlr.de/icon.svg",
+    logo: "https://www.wikidata.org/wiki/Q157332#/media/File:DLR_Logo.svg",
   },
   {
     id: "https://ror.org/02k8cbn47",
-    logo: "https://www.gsi.de/favicon.ico",
+    favicon: "https://www.gsi.de/favicon.ico",
+    logo: "https://www.wikidata.org/wiki/Q703993#/media/File:GSI_Logo.svg",
   },
   {
     id: "https://ror.org/00cfam450",
-    logo: "https://www.helmholtz-munich.de/typo3conf/ext/helmholtz_sitepackage/Resources/Public/Icons/Favicons/favicon-16x16.png",
+    favicon:
+      "https://www.helmholtz-munich.de/typo3conf/ext/helmholtz_sitepackage/Resources/Public/Icons/Favicons/favicon-16x16.png",
+    logo: "https://upload.wikimedia.org/wikipedia/commons/5/51/Helmholtz_Zentrum_M%C3%BCnchen_logo.svg",
   },
   {
     id: "https://ror.org/04t3en479",
-    logo: "https://www.kit.edu/img/intern/favicon.ico",
+    favicon: "https://www.kit.edu/img/intern/favicon.ico",
+    logo: "https://www.wikidata.org/wiki/Q309988#/media/File:Logo_KIT.svg",
   },
   {
     id: "https://ror.org/04cdgtt98",
-    logo: "https://www.dkfz.de/global/img/favicon.ico",
+    favicon: "https://www.dkfz.de/global/img/favicon.ico",
+    logo: "https://www.wikidata.org/wiki/Q449325#/media/File:Deutsches_Krebsforschungszentrum_Logo.svg",
   },
   {
     id: "https://ror.org/02njgxr09",
-    logo: "https://cispa.de/images/cispa-logo-on-bright.svg",
+    favicon: "https://cispa.de/images/cispa-logo-on-bright.svg",
   },
   {
     id: "https://ror.org/043j0f473",
-    logo: "https://www.dzne.de/typo3conf/ext/fe_website/Resources/Public/AppIcons/favicon-16x16.png",
+    favicon:
+      "https://www.dzne.de/typo3conf/ext/fe_website/Resources/Public/AppIcons/favicon-16x16.png",
+    logo: "https://www.wikidata.org/wiki/Q1206136#/media/File:DZNE_Logo_CMYK.svg",
   },
   {
     id: "https://ror.org/02nv7yv05",
-    logo: "https://www.fz-juelich.de/icon.svg",
+    favicon: "https://www.fz-juelich.de/icon.svg",
+    logo: "https://upload.wikimedia.org/wikipedia/commons/4/40/Logo_des_Forschungszentrums_J%C3%BClich_seit_2018.svg",
   },
 ];
diff --git a/src/components/app/results/ListResults/ResultItem.tsx b/src/components/app/results/ListResults/ResultItem.tsx
index c485f1b..cca4391 100644
--- a/src/components/app/results/ListResults/ResultItem.tsx
+++ b/src/components/app/results/ListResults/ResultItem.tsx
@@ -41,6 +41,7 @@ const ResultItem = ({
   const [descShowMore, setDescShowMore] = useState(false);
   const [descShowReadMore, setDescShowReadMore] = useState(false);
   const [titleIconHref, setTitleIconHref] = useState<string>("");
+  const [logoHref, setLogoHref] = useState<string>("");
 
   useEffect(() => {
     const element = descRef.current;
@@ -55,8 +56,10 @@ const ResultItem = ({
       }
     }
 
-    const iconArr = INSTITUTE_ROR_LOGOS.filter((o) => o.id === item.id);
-    setTitleIconHref(iconArr.pop()?.logo || "");
+    const iconArr = INSTITUTE_ROR_LOGOS.filter((o) => o.id === item.id).pop();
+    console.log(iconArr);
+    setTitleIconHref(iconArr?.favicon || "");
+    setLogoHref(iconArr?.logo || "");
   }, [item]);
 
   const displayTextItem = (displayItem: string | string[]) =>
@@ -131,218 +134,233 @@ const ResultItem = ({
 
   return (
     <div
-      key={idx}
-      className="flex flex-col my-2 space-y-2 rounded-xl border-2 border-primary-helmholtz-hellblau/20 px-5 py-5 shadow-lg shadow-secondary-helmholtz-highlightblau bg-white size-auto"
+      className={`flex ${inDetailsPage && logoHref !== "" ? "" : "flex-col"}  my-2 space-y-2 rounded-xl border-2 border-primary-helmholtz-hellblau/20 p-5 shadow-lg shadow-secondary-helmholtz-highlightblau bg-white size-auto`}
     >
-      <button
-        className={`${inDetailsPage ? "" : "hover:transition-all hover:translate-x-3"} inline-flex align-middle items-center pb-2 text-primary-helmholtz-dunkelblau ${associatedToFilters ? "" : "inline-flex"} ${inDetailsPage ? "mb-5" : ""}`}
-        onClick={handleDetailSearch}
-        disabled={inDetailsPage}
+      <div
+        className={`${inDetailsPage && logoHref !== "" ? "border-2 border-red-400 space-y-2 p-5 mt-2 basis-1/3" : "hidden"}`}
       >
-        {titleIconHref ? (
-          <span className="mr-1">
-            <Image
-              src={titleIconHref}
-              className="object-contain w-5 h-5"
-              alt="Institute icon"
-              width={16}
-              height={16}
-            />
-          </span>
-        ) : null}
-        <p
-          className={`${inDetailsPage ? "inline-flex text-2xl underline underline-offset-[16px] decoration-primary-helmholtz-hellblau" : " truncate"} font-semibold text-left w-[98%] `}
-          rel="noreferrer"
-        >
-          {item.name}
-        </p>
-        {inDetailsPage ?? <RightArrowIcon />}
-      </button>
-
-      <div className="text-sm inline-flex flex-wrap items-center gap-x-1">
-        <span className="font-semibold">{s("txt_identifier")}: </span>
-        {displayLinkItem(item.txt_identifier ?? item.id)}
+        <Image
+          src={logoHref}
+          className="object-contain w-20 h-20"
+          alt="Institute logo"
+          width={80}
+          height={80}
+        />
       </div>
-
-      {item.txt_sameAs ? (
-        <div className="text-sm inline-flex flex-wrap items-center gap-x-1">
-          <span className="font-semibold">{s("txt_sameAs")}: </span>
-          {displayLinkItem(item.txt_sameAs)}
-        </div>
-      ) : null}
-      {item.txt_email ? (
-        <div className="text-sm inline-flex flex-wrap items-center gap-x-1">
-          <span className="font-semibold">{s("txt_email")}: </span>
-          {displayLinkItem(item.txt_email, true)}
-        </div>
-      ) : null}
-      {item.txt_affiliation ? (
-        <div className="text-sm">
-          <span className="font-semibold">{s("txt_affiliation")}: </span>
-          {displayTextItem(item.txt_affiliation)}
-        </div>
-      ) : null}
-      {item.txt_author ? (
-        <div
-          className="text-sm truncate max-h-full cursor-default"
-          title={displayTextItem(item.txt_author)}
-        >
-          <span className="font-semibold">{s("txt_author")}: </span>
-          {displayTextItem(item.txt_author)}
-        </div>
-      ) : null}
-      {item.txt_creator ? (
-        <div
-          className="text-sm truncate max-h-full cursor-default"
-          title={displayTextItem(item.txt_creator)}
-        >
-          <span className="font-semibold">{s("txt_creator")}: </span>
-          {displayTextItem(item.txt_creator)}
-        </div>
-      ) : null}
-      {item.txt_contributor ? (
-        <div
-          className="text-sm truncate max-h-full cursor-default"
-          title={displayTextItem(item.txt_contributor)}
+      <div
+        key={idx}
+        className={`flex flex-col ${inDetailsPage && logoHref !== "" ? "basis-2/3" : ""} my-2 space-y-2 p-5 border-2 border-red-500`}
+      >
+        <button
+          className={`${inDetailsPage ? "" : "hover:transition-all hover:translate-x-3"} inline-flex align-middle items-center pb-2 text-primary-helmholtz-dunkelblau ${associatedToFilters ? "" : "inline-flex"} ${inDetailsPage ? "mb-5" : ""}`}
+          onClick={handleDetailSearch}
+          disabled={inDetailsPage}
         >
-          <span className="font-semibold">{s("txt_contributor")}: </span>
-          {displayTextItem(item.txt_contributor)}
-        </div>
-      ) : null}
-      {item.txt_version ? (
-        <div className="text-sm cursor-default">
-          <span className="font-semibold">{s("txt_version")}: </span>
-          {displayTextItem(item.txt_version)}
-        </div>
-      ) : null}
-      {item.txt_license ? (
-        <div className="text-sm inline-flex flex-wrap items-center gap-x-1">
-          <span className="font-semibold">{s("txt_license")}: </span>
-          {displayLinkItem(item.txt_license)}
-        </div>
-      ) : null}
-      {item.txt_url ? (
-        <div className="text-sm inline-flex flex-wrap items-center gap-x-1">
-          <span className="font-semibold">{s("txt_url")}: </span>
-          {displayLinkItem(item.txt_url)}
-        </div>
-      ) : null}
-      {item.txt_codeRepository ? (
-        <div className="text-sm inline-flex flex-wrap items-center gap-x-1">
-          <span className="font-semibold">{s("txt_codeRepository")}: </span>
-          {displayLinkItem(item.txt_codeRepository)}
-        </div>
-      ) : null}
-      {item.txt_provider ? (
-        <div className="text-sm cursor-default">
-          <span className="font-semibold">{s("txt_provider")}: </span>
-          {displayTextItem(item.txt_provider)}
-        </div>
-      ) : null}
-      {item.txt_publisher ? (
-        <div className="text-sm cursor-default">
-          <span className="font-semibold">{s("txt_publisher")}: </span>
-          {displayTextItem(item.txt_publisher)}
-        </div>
-      ) : null}
-      {item.txt_includedInDataCatalog ? (
-        <div className="text-sm cursor-default">
-          <span className="font-semibold">{s("txt_includedInDataCatalog")}: </span>
-          {displayTextItem(item.txt_includedInDataCatalog)}
-        </div>
-      ) : null}
-      {item.txt_keywords ? (
-        <div className="flex flex-wrap space-x-1 space-y-1 text-sm cursor-default">
-          <span className="pt-3 font-semibold">{s("txt_keywords")}: </span>
-          {displayKeywords(item.txt_keywords)}
-        </div>
-      ) : null}
-      {item.description ? (
-        <div className="text-sm">
-          <span className="font-semibold">{s("description")}: </span>
+          {titleIconHref ? (
+            <span className="mr-1">
+              <Image
+                src={titleIconHref}
+                className="object-contain w-5 h-5"
+                alt="Institute icon"
+                width={16}
+                height={16}
+              />
+            </span>
+          ) : null}
           <p
-            ref={descRef}
-            className={descShowMore ? "cursor-default" : "line-clamp-2 cursor-default"}
+            className={`${inDetailsPage ? "inline-flex text-2xl underline underline-offset-[16px] decoration-primary-helmholtz-hellblau" : " truncate"} font-semibold text-left w-[98%] `}
+            rel="noreferrer"
           >
-            {item.description}
+            {item.name}
           </p>
-          {descShowReadMore ? (
-            <button
-              className="py-0.75 float-right rounded-full border-[1px] border-secondary-helmholtz-mint px-2 text-xs hover:border-primary-helmholtz-hellblau"
-              onClick={() => setDescShowMore(!descShowMore)}
-            >
-              {descShowMore ? t("show_less") : t("show_more")}
-            </button>
-          ) : null}
+          {inDetailsPage ?? <RightArrowIcon />}
+        </button>
+
+        <div className="text-sm inline-flex flex-wrap items-center gap-x-1">
+          <span className="font-semibold">{s("txt_identifier")}: </span>
+          {displayLinkItem(item.txt_identifier ?? item.id)}
         </div>
-      ) : null}
 
-      <>
-        {item.email_address ? (
+        {item.txt_sameAs ? (
           <div className="text-sm inline-flex flex-wrap items-center gap-x-1">
-            <span className="font-semibold">{s("txt_email")}: </span>
-            {displayLinkItem(item.email_address)}
+            <span className="font-semibold">{s("txt_sameAs")}: </span>
+            {displayLinkItem(item.txt_sameAs)}
           </div>
         ) : null}
-        {item.links ? (
+        {item.txt_email ? (
           <div className="text-sm inline-flex flex-wrap items-center gap-x-1">
-            <span className="font-semibold">{s("links")}: </span>
-            {displayLinkItem(item.links)}
+            <span className="font-semibold">{s("txt_email")}: </span>
+            {displayLinkItem(item.txt_email, true)}
           </div>
         ) : null}
-        {item.status ? (
-          <div className="text-sm capitalize">
-            <span className="font-semibold">{s("status")}: </span>
-            {displayTextItem(item.status)}
+        {item.txt_affiliation ? (
+          <div className="text-sm">
+            <span className="font-semibold">{s("txt_affiliation")}: </span>
+            {displayTextItem(item.txt_affiliation)}
           </div>
         ) : null}
-        {item.established ? (
-          <div className="text-sm">
-            <span className="font-semibold">{s("established")}: </span>
-            {displayTextItem(item.established.toString())}
+        {item.txt_author ? (
+          <div
+            className="text-sm truncate max-h-full cursor-default"
+            title={displayTextItem(item.txt_author)}
+          >
+            <span className="font-semibold">{s("txt_author")}: </span>
+            {displayTextItem(item.txt_author)}
           </div>
         ) : null}
-        {item.acronyms && item.acronyms.length > 0 ? (
-          <div className="text-sm">
-            <span className="font-semibold">{s("acronyms")}: </span>
-            {displayTextItem(item.acronyms)}
+        {item.txt_creator ? (
+          <div
+            className="text-sm truncate max-h-full cursor-default"
+            title={displayTextItem(item.txt_creator)}
+          >
+            <span className="font-semibold">{s("txt_creator")}: </span>
+            {displayTextItem(item.txt_creator)}
           </div>
         ) : null}
-        {item.types && item.types.length > 0 ? (
-          <div className="text-sm">
-            <span className="font-semibold">{s("types")}: </span>
-            {displayTextItem(item.types)}
+        {item.txt_contributor ? (
+          <div
+            className="text-sm truncate max-h-full cursor-default"
+            title={displayTextItem(item.txt_contributor)}
+          >
+            <span className="font-semibold">{s("txt_contributor")}: </span>
+            {displayTextItem(item.txt_contributor)}
+          </div>
+        ) : null}
+        {item.txt_version ? (
+          <div className="text-sm cursor-default">
+            <span className="font-semibold">{s("txt_version")}: </span>
+            {displayTextItem(item.txt_version)}
           </div>
         ) : null}
-        {item.wikipedia_url ? (
+        {item.txt_license ? (
           <div className="text-sm inline-flex flex-wrap items-center gap-x-1">
-            <span className="font-semibold">{s("wikipedia_url")}: </span>
-            {displayLinkItem(item.wikipedia_url)}
+            <span className="font-semibold">{s("txt_license")}: </span>
+            {displayLinkItem(item.txt_license)}
           </div>
         ) : null}
-        {item.relationships && item.relationships.length > 0 ? (
-          <div className="text-sm ">
-            <div className="font-semibold">{s("relationships")}:</div>
-            <div className="flex flex-col pl-8 text-sm">
-              {displayRelationships(item.relationships, "Parent")}
-              {displayRelationships(item.relationships, "Child")}
-              {displayRelationships(item.relationships, "Related")}
-            </div>
+        {item.txt_url ? (
+          <div className="text-sm inline-flex flex-wrap items-center gap-x-1">
+            <span className="font-semibold">{s("txt_url")}: </span>
+            {displayLinkItem(item.txt_url)}
+          </div>
+        ) : null}
+        {item.txt_codeRepository ? (
+          <div className="text-sm inline-flex flex-wrap items-center gap-x-1">
+            <span className="font-semibold">{s("txt_codeRepository")}: </span>
+            {displayLinkItem(item.txt_codeRepository)}
+          </div>
+        ) : null}
+        {item.txt_provider ? (
+          <div className="text-sm cursor-default">
+            <span className="font-semibold">{s("txt_provider")}: </span>
+            {displayTextItem(item.txt_provider)}
+          </div>
+        ) : null}
+        {item.txt_publisher ? (
+          <div className="text-sm cursor-default">
+            <span className="font-semibold">{s("txt_publisher")}: </span>
+            {displayTextItem(item.txt_publisher)}
+          </div>
+        ) : null}
+        {item.txt_includedInDataCatalog ? (
+          <div className="text-sm cursor-default">
+            <span className="font-semibold">{s("txt_includedInDataCatalog")}: </span>
+            {displayTextItem(item.txt_includedInDataCatalog)}
+          </div>
+        ) : null}
+        {item.txt_keywords ? (
+          <div className="flex flex-wrap space-x-1 space-y-1 text-sm cursor-default">
+            <span className="pt-3 font-semibold">{s("txt_keywords")}: </span>
+            {displayKeywords(item.txt_keywords)}
+          </div>
+        ) : null}
+        {item.description ? (
+          <div className="text-sm">
+            <span className="font-semibold">{s("description")}: </span>
+            <p
+              ref={descRef}
+              className={descShowMore ? "cursor-default" : "line-clamp-2 cursor-default"}
+            >
+              {item.description}
+            </p>
+            {descShowReadMore ? (
+              <button
+                className="py-0.75 float-right rounded-full border-[1px] border-secondary-helmholtz-mint px-2 text-xs hover:border-primary-helmholtz-hellblau"
+                onClick={() => setDescShowMore(!descShowMore)}
+              >
+                {descShowMore ? t("show_less") : t("show_more")}
+              </button>
+            ) : null}
           </div>
         ) : null}
-      </>
 
-      <div className="place-content-center pt-6">
-        <ExternalLink
-          key={item.id}
-          href={`/api/source?id=${encodeURIComponent(item.id)}`}
-          className="text-xs hover:underline"
-        >
-          <span className="inline-flex gap-x-1 h-3">
-            {t("view_source")}
-            <ExternalLinkIcon />
-          </span>
-        </ExternalLink>
+        <>
+          {item.email_address ? (
+            <div className="text-sm inline-flex flex-wrap items-center gap-x-1">
+              <span className="font-semibold">{s("txt_email")}: </span>
+              {displayLinkItem(item.email_address)}
+            </div>
+          ) : null}
+          {item.links ? (
+            <div className="text-sm inline-flex flex-wrap items-center gap-x-1">
+              <span className="font-semibold">{s("links")}: </span>
+              {displayLinkItem(item.links)}
+            </div>
+          ) : null}
+          {item.status ? (
+            <div className="text-sm capitalize">
+              <span className="font-semibold">{s("status")}: </span>
+              {displayTextItem(item.status)}
+            </div>
+          ) : null}
+          {item.established ? (
+            <div className="text-sm">
+              <span className="font-semibold">{s("established")}: </span>
+              {displayTextItem(item.established.toString())}
+            </div>
+          ) : null}
+          {item.acronyms && item.acronyms.length > 0 ? (
+            <div className="text-sm">
+              <span className="font-semibold">{s("acronyms")}: </span>
+              {displayTextItem(item.acronyms)}
+            </div>
+          ) : null}
+          {item.types && item.types.length > 0 ? (
+            <div className="text-sm">
+              <span className="font-semibold">{s("types")}: </span>
+              {displayTextItem(item.types)}
+            </div>
+          ) : null}
+          {item.wikipedia_url ? (
+            <div className="text-sm inline-flex flex-wrap items-center gap-x-1">
+              <span className="font-semibold">{s("wikipedia_url")}: </span>
+              {displayLinkItem(item.wikipedia_url)}
+            </div>
+          ) : null}
+          {item.relationships && item.relationships.length > 0 ? (
+            <div className="text-sm ">
+              <div className="font-semibold">{s("relationships")}:</div>
+              <div className="flex flex-col pl-8 text-sm">
+                {displayRelationships(item.relationships, "Parent")}
+                {displayRelationships(item.relationships, "Child")}
+                {displayRelationships(item.relationships, "Related")}
+              </div>
+            </div>
+          ) : null}
+        </>
+
+        <div className="place-content-center pt-6">
+          <ExternalLink
+            key={item.id}
+            href={`/api/source?id=${encodeURIComponent(item.id)}`}
+            className="text-xs hover:underline"
+          >
+            <span className="inline-flex gap-x-1 h-3">
+              {t("view_source")}
+              <ExternalLinkIcon />
+            </span>
+          </ExternalLink>
+        </div>
       </div>
     </div>
   );
diff --git a/src/components/app/results/ListResults/ResultItem/Relationships.tsx b/src/components/app/results/ListResults/ResultItem/Relationships.tsx
index 199734b..e813e47 100644
--- a/src/components/app/results/ListResults/ResultItem/Relationships.tsx
+++ b/src/components/app/results/ListResults/ResultItem/Relationships.tsx
@@ -38,7 +38,7 @@ const Relationships = ({ filteredArr, type }: Props) => {
       <p ref={relRef} className={relShowMore ? "" : "line-clamp-2"}>
         {filteredArr.map((displayItem, idx: number) => {
           const iconArr = INSTITUTE_ROR_LOGOS.filter((o) => o.id === displayItem.id);
-          const iconHref = iconArr.pop()?.logo || "";
+          const iconHref = iconArr.pop()?.favicon || "";
 
           return (
             <span key={displayItem.id} className="inline-flex items-end">
-- 
GitLab


From 8241310f7343adff3b096edea853fe6b5ff76b9e Mon Sep 17 00:00:00 2001
From: FionaDmello <40391218+FionaDmello@users.noreply.github.com>
Date: Tue, 18 Feb 2025 12:48:04 +0100
Subject: [PATCH 29/37] updated urls for logos from wikimedia that actually
 work

---
 next.config.mjs                               | 48 +++++++++----------
 src/app/api/config/config.ts                  | 12 ++---
 .../app/results/ListResults/ResultItem.tsx    | 28 +++++------
 3 files changed, 44 insertions(+), 44 deletions(-)

diff --git a/next.config.mjs b/next.config.mjs
index d9d2c22..4b7fd1e 100644
--- a/next.config.mjs
+++ b/next.config.mjs
@@ -56,9 +56,9 @@ const nextConfig = {
       },
       {
         protocol: "https",
-        hostname: "www.wikidata.org",
+        hostname: "upload.wikimedia.org",
         port: "",
-        pathname: "/wiki/Q1912019#/media/File:MDC_Logo_V1_RGB_blue.svg",
+        pathname: "/wikipedia/commons/3/3f/MDC_Logo_V1_RGB_blue.svg",
       },
       {
         protocol: "https",
@@ -68,9 +68,9 @@ const nextConfig = {
       },
       {
         protocol: "https",
-        hostname: "www.wikidata.org",
+        hostname: "upload.wikimedia.org",
         port: "",
-        pathname: "/wiki/Q311801#/media/File:Desy_logo_3c_web.svg",
+        pathname: "/wikipedia/commons/5/55/Desy_logo_3c_web.svg",
       },
       {
         protocol: "https",
@@ -80,9 +80,9 @@ const nextConfig = {
       },
       {
         protocol: "https",
-        hostname: "www.wikidata.org",
+        hostname: "upload.wikimedia.org",
         port: "",
-        pathname: "/wiki/Q1603242#/media/File:Helmholtz-Zentrum_für_Infektionsforschung_GmbH.jpg",
+        pathname: "/wikipedia/commons/c/cd/Helmholtz-Zentrum_für_Infektionsforschung_GmbH.jpg",
       },
       {
         protocol: "https",
@@ -92,9 +92,9 @@ const nextConfig = {
       },
       {
         protocol: "https",
-        hostname: "www.wikidata.org",
+        hostname: "upload.wikimedia.org",
         port: "",
-        pathname: "/wiki/Q1205654#/media/File:Deutsches-GeoForschungsZentrum-Logo.svg",
+        pathname: "/wikipedia/commons/8/86/Deutsches-GeoForschungsZentrum-Logo.svg",
       },
       {
         protocol: "https",
@@ -104,10 +104,10 @@ const nextConfig = {
       },
       {
         protocol: "https",
-        hostname: "www.wikidata.org",
+        hostname: "upload.wikimedia.org",
         port: "",
         pathname:
-          "/wiki/Q314578#/media/File:Helmholtz-Zentrum_Berlin_für_Materialien_und_Energie_Logo.svg",
+          "/wikipedia/commons/6/6b/Helmholtz-Zentrum_Berlin_für_Materialien_und_Energie_Logo.svg",
       },
       {
         protocol: "https",
@@ -117,9 +117,9 @@ const nextConfig = {
       },
       {
         protocol: "https",
-        hostname: "www.wikidata.org",
+        hostname: "upload.wikimedia.org",
         port: "",
-        pathname: "/wiki/Q880999#/media/File:UFZ_Logo_RGB_DE.png",
+        pathname: "/wikipedia/commons/e/ed/UFZ_Logo_RGB_DE.png",
       },
       {
         protocol: "https",
@@ -129,9 +129,9 @@ const nextConfig = {
       },
       {
         protocol: "https",
-        hostname: "www.wikidata.org",
+        hostname: "upload.wikimedia.org",
         port: "",
-        pathname: "/wiki/Q883545#/media/File:HZDR-LOGO.png",
+        pathname: "/wikipedia/commons/e/e5/HZDR-LOGO.png",
       },
       {
         protocol: "https",
@@ -141,9 +141,9 @@ const nextConfig = {
       },
       {
         protocol: "https",
-        hostname: "www.wikidata.org",
+        hostname: "upload.wikimedia.org",
         port: "",
-        pathname: "/wiki/Q157332#/media/File:DLR_Logo.svg",
+        pathname: "/wikipedia/commons/f/f5/DLR_Logo.svg",
       },
       {
         protocol: "https",
@@ -153,9 +153,9 @@ const nextConfig = {
       },
       {
         protocol: "https",
-        hostname: "www.wikidata.org",
+        hostname: "upload.wikimedia.org",
         port: "",
-        pathname: "/wiki/Q703993#/media/File:GSI_Logo.svg",
+        pathname: "/wikipedia/commons/6/6f/GSI_Logo.svg",
       },
       {
         protocol: "https",
@@ -178,9 +178,9 @@ const nextConfig = {
       },
       {
         protocol: "https",
-        hostname: "www.wikidata.org",
+        hostname: "upload.wikimedia.org",
         port: "",
-        pathname: "/wiki/Q309988#/media/File:Logo_KIT.svg",
+        pathname: "/wikipedia/commons/3/3a/Logo_KIT.svg",
       },
       {
         protocol: "https",
@@ -190,9 +190,9 @@ const nextConfig = {
       },
       {
         protocol: "https",
-        hostname: "www.wikidata.org",
+        hostname: "upload.wikimedia.org",
         port: "",
-        pathname: "/wiki/Q449325#/media/File:Deutsches_Krebsforschungszentrum_Logo.svg",
+        pathname: "/wikipedia/commons/d/d9/Deutsches_Krebsforschungszentrum_Logo.svg",
       },
       {
         protocol: "https",
@@ -208,9 +208,9 @@ const nextConfig = {
       },
       {
         protocol: "https",
-        hostname: "www.wikidata.org",
+        hostname: "upload.wikimedia.org",
         port: "",
-        pathname: "/wiki/Q1206136#/media/File:DZNE_Logo_CMYK.svg",
+        pathname: "/wikipedia/commons/2/26/DZNE_Logo_CMYK.svg",
       },
       {
         protocol: "https",
diff --git a/src/app/api/config/config.ts b/src/app/api/config/config.ts
index e588572..da4d5e3 100644
--- a/src/app/api/config/config.ts
+++ b/src/app/api/config/config.ts
@@ -269,12 +269,12 @@ export const INSTITUTE_ROR_LOGOS = [
   {
     id: "https://ror.org/04p5ggc03",
     favicon: "https://www.mdc-berlin.de/sites/default/files/favicons/favicon-16x16.png",
-    logo: "https://www.wikidata.org/wiki/Q1912019#/media/File:MDC_Logo_V1_RGB_blue.svg",
+    logo: "https://upload.wikimedia.org/wikipedia/commons/3/3f/MDC_Logo_V1_RGB_blue.svg",
   },
   {
     id: "https://ror.org/01js2sh04",
     favicon: "https://www.desy.de/++resource++desy/images/desy_logo_3c_web.svg",
-    logo: "https://www.wikidata.org/wiki/Q311801#/media/File:Desy_logo_3c_web.svg",
+    logo: "https://upload.wikimedia.org/wikipedia/commons/5/55/Desy_logo_3c_web.svg",
   },
   {
     id: "https://ror.org/032e6b942",
@@ -285,23 +285,23 @@ export const INSTITUTE_ROR_LOGOS = [
     id: "https://ror.org/03d0p2685",
     favicon:
       "https://www.helmholtz-hzi.de/_assets/ae8a1fe32f30b295243325c1db1b8058/Icons/Favicons/HZI/favicon-16x16.png",
-    logo: "https://www.wikidata.org/wiki/Q1603242#/media/File:Helmholtz-Zentrum_f%C3%BCr_Infektionsforschung_GmbH.jpg",
+    logo: "https://upload.wikimedia.org/wikipedia/commons/c/cd/Helmholtz-Zentrum_f%C3%BCr_Infektionsforschung_GmbH.jpg",
   },
   {
     id: "https://ror.org/04z8jg394",
     favicon:
       "https://www.gfz-potsdam.de/typo3conf/ext/gfz_www_sitepackage/Resources/Public/Icons/favicon.ico",
-    logo: "https://www.wikidata.org/wiki/Q1205654#/media/File:Deutsches-GeoForschungsZentrum-Logo.svg",
+    logo: "https://upload.wikimedia.org/wikipedia/commons/8/86/Deutsches-GeoForschungsZentrum-Logo.svg",
   },
   {
     id: "https://ror.org/02aj13c28",
     favicon: "https://www.helmholtz-berlin.de/favicon.ico",
-    logo: "https://www.wikidata.org/wiki/Q314578#/media/File:Helmholtz-Zentrum_Berlin_f%C3%BCr_Materialien_und_Energie_Logo.svg",
+    logo: "https://upload.wikimedia.org/wikipedia/commons/6/6b/Helmholtz-Zentrum_Berlin_f%C3%BCr_Materialien_und_Energie_Logo.svg",
   },
   {
     id: "https://ror.org/000h6jb29",
     favicon: "https://www.ufz.de/static/custom/weblayout/DefaultInternetLayout/img/favicon.ico",
-    logo: "https://www.wikidata.org/wiki/Q880999#/media/File:UFZ_Logo_RGB_DE.png",
+    logo: "https://upload.wikimedia.org/wikipedia/commons/e/ed/UFZ_Logo_RGB_DE.png",
   },
   {
     id: "https://ror.org/01zy2cs03",
diff --git a/src/components/app/results/ListResults/ResultItem.tsx b/src/components/app/results/ListResults/ResultItem.tsx
index cca4391..e16f352 100644
--- a/src/components/app/results/ListResults/ResultItem.tsx
+++ b/src/components/app/results/ListResults/ResultItem.tsx
@@ -57,7 +57,6 @@ const ResultItem = ({
     }
 
     const iconArr = INSTITUTE_ROR_LOGOS.filter((o) => o.id === item.id).pop();
-    console.log(iconArr);
     setTitleIconHref(iconArr?.favicon || "");
     setLogoHref(iconArr?.logo || "");
   }, [item]);
@@ -134,22 +133,23 @@ const ResultItem = ({
 
   return (
     <div
-      className={`flex ${inDetailsPage && logoHref !== "" ? "" : "flex-col"}  my-2 space-y-2 rounded-xl border-2 border-primary-helmholtz-hellblau/20 p-5 shadow-lg shadow-secondary-helmholtz-highlightblau bg-white size-auto`}
+      className={`flex my-2 space-y-2 rounded-xl border-2 border-primary-helmholtz-hellblau/20 p-5 shadow-lg shadow-secondary-helmholtz-highlightblau bg-white size-auto ${inDetailsPage && logoHref !== "" ? "" : "flex-col"}`}
     >
-      <div
-        className={`${inDetailsPage && logoHref !== "" ? "border-2 border-red-400 space-y-2 p-5 mt-2 basis-1/3" : "hidden"}`}
-      >
-        <Image
-          src={logoHref}
-          className="object-contain w-20 h-20"
-          alt="Institute logo"
-          width={80}
-          height={80}
-        />
-      </div>
+      {inDetailsPage && logoHref !== "" ? (
+        <div className={`border-2 border-red-400 space-y-2 p-5 mt-2 basis-1/3`}>
+          <Image
+            src={logoHref}
+            className={`object-contain w-20 h-20`}
+            alt="Institute logo"
+            width={80}
+            height={80}
+          />
+        </div>
+      ) : null}
+
       <div
         key={idx}
-        className={`flex flex-col ${inDetailsPage && logoHref !== "" ? "basis-2/3" : ""} my-2 space-y-2 p-5 border-2 border-red-500`}
+        className={`flex flex-col my-2 space-y-2 p-5 ${inDetailsPage && logoHref !== "" ? "basis-2/3" : ""} `}
       >
         <button
           className={`${inDetailsPage ? "" : "hover:transition-all hover:translate-x-3"} inline-flex align-middle items-center pb-2 text-primary-helmholtz-dunkelblau ${associatedToFilters ? "" : "inline-flex"} ${inDetailsPage ? "mb-5" : ""}`}
-- 
GitLab


From 299555e4f4cef8df2d38388e16032b878da78c01 Mon Sep 17 00:00:00 2001
From: FionaDmello <40391218+FionaDmello@users.noreply.github.com>
Date: Tue, 18 Feb 2025 15:46:29 +0100
Subject: [PATCH 30/37] displaying institute icons when they exist on large
 screens

---
 next.config.mjs                               | 11 +++++-----
 src/app/api/config/config.ts                  | 20 +++++++++----------
 .../app/results/ListResults/ResultItem.tsx    | 14 ++++++-------
 3 files changed, 23 insertions(+), 22 deletions(-)

diff --git a/next.config.mjs b/next.config.mjs
index 4b7fd1e..1740598 100644
--- a/next.config.mjs
+++ b/next.config.mjs
@@ -31,9 +31,9 @@ const nextConfig = {
       },
       {
         protocol: "https",
-        hostname: "www.wikidata.org",
+        hostname: "upload.wikimedia.org",
         port: "",
-        pathname: "/wiki/Q536656#/media/File:AWI_Logo_2017.svg",
+        pathname: "/wikipedia/commons/f/f7/AWI_Logo_2017.svg",
       },
       {
         protocol: "https",
@@ -86,9 +86,9 @@ const nextConfig = {
       },
       {
         protocol: "https",
-        hostname: "www.gfz-potsdam.de",
+        hostname: "www.gfz.de",
         port: "",
-        pathname: "/typo3conf/ext/gfz_www_sitepackage/Resources/Public/Icons/favicon.ico",
+        pathname: "/_assets/addb558b1d0e21da17cab6423afccec8/Icons/favicon.ico",
       },
       {
         protocol: "https",
@@ -186,7 +186,8 @@ const nextConfig = {
         protocol: "https",
         hostname: "www.dkfz.de",
         port: "",
-        pathname: "/global/img/favicon.ico",
+        pathname:
+          "/_assets/5bd5aaeffedb0553dcc3d3be99b60d08/Frontend/Images/Favicon/favicon-16x16.png",
       },
       {
         protocol: "https",
diff --git a/src/app/api/config/config.ts b/src/app/api/config/config.ts
index da4d5e3..30a16bb 100644
--- a/src/app/api/config/config.ts
+++ b/src/app/api/config/config.ts
@@ -279,7 +279,7 @@ export const INSTITUTE_ROR_LOGOS = [
   {
     id: "https://ror.org/032e6b942",
     favicon: "https://www.awi.de/_assets/978631966794c5093250775de182779d/Images/AWI/favicon.ico",
-    logo: "https://www.wikidata.org/wiki/Q536656#/media/File:AWI_Logo_2017.svg",
+    logo: "https://upload.wikimedia.org/wikipedia/commons/f/f7/AWI_Logo_2017.svg",
   },
   {
     id: "https://ror.org/03d0p2685",
@@ -289,8 +289,7 @@ export const INSTITUTE_ROR_LOGOS = [
   },
   {
     id: "https://ror.org/04z8jg394",
-    favicon:
-      "https://www.gfz-potsdam.de/typo3conf/ext/gfz_www_sitepackage/Resources/Public/Icons/favicon.ico",
+    favicon: "https://www.gfz.de/_assets/addb558b1d0e21da17cab6423afccec8/Icons/favicon.ico",
     logo: "https://upload.wikimedia.org/wikipedia/commons/8/86/Deutsches-GeoForschungsZentrum-Logo.svg",
   },
   {
@@ -306,17 +305,17 @@ export const INSTITUTE_ROR_LOGOS = [
   {
     id: "https://ror.org/01zy2cs03",
     favicon: "https://www.hzdr.de/favicon-16x16.png",
-    logo: "https://www.wikidata.org/wiki/Q883545#/media/File:HZDR-LOGO.png",
+    logo: "https://upload.wikimedia.org/wikipedia/commons/e/e5/HZDR-LOGO.png",
   },
   {
     id: "https://ror.org/04bwf3e34",
     favicon: "https://www.dlr.de/icon.svg",
-    logo: "https://www.wikidata.org/wiki/Q157332#/media/File:DLR_Logo.svg",
+    logo: "https://upload.wikimedia.org/wikipedia/commons/f/f5/DLR_Logo.svg",
   },
   {
     id: "https://ror.org/02k8cbn47",
     favicon: "https://www.gsi.de/favicon.ico",
-    logo: "https://www.wikidata.org/wiki/Q703993#/media/File:GSI_Logo.svg",
+    logo: "https://upload.wikimedia.org/wikipedia/commons/6/6f/GSI_Logo.svg",
   },
   {
     id: "https://ror.org/00cfam450",
@@ -327,12 +326,13 @@ export const INSTITUTE_ROR_LOGOS = [
   {
     id: "https://ror.org/04t3en479",
     favicon: "https://www.kit.edu/img/intern/favicon.ico",
-    logo: "https://www.wikidata.org/wiki/Q309988#/media/File:Logo_KIT.svg",
+    logo: "https://upload.wikimedia.org/wikipedia/commons/3/3a/Logo_KIT.svg",
   },
   {
     id: "https://ror.org/04cdgtt98",
-    favicon: "https://www.dkfz.de/global/img/favicon.ico",
-    logo: "https://www.wikidata.org/wiki/Q449325#/media/File:Deutsches_Krebsforschungszentrum_Logo.svg",
+    favicon:
+      "https://www.dkfz.de/_assets/5bd5aaeffedb0553dcc3d3be99b60d08/Frontend/Images/Favicon/favicon-16x16.png",
+    logo: "https://upload.wikimedia.org/wikipedia/commons/d/d9/Deutsches_Krebsforschungszentrum_Logo.svg",
   },
   {
     id: "https://ror.org/02njgxr09",
@@ -342,7 +342,7 @@ export const INSTITUTE_ROR_LOGOS = [
     id: "https://ror.org/043j0f473",
     favicon:
       "https://www.dzne.de/typo3conf/ext/fe_website/Resources/Public/AppIcons/favicon-16x16.png",
-    logo: "https://www.wikidata.org/wiki/Q1206136#/media/File:DZNE_Logo_CMYK.svg",
+    logo: "https://upload.wikimedia.org/wikipedia/commons/2/26/DZNE_Logo_CMYK.svg",
   },
   {
     id: "https://ror.org/02nv7yv05",
diff --git a/src/components/app/results/ListResults/ResultItem.tsx b/src/components/app/results/ListResults/ResultItem.tsx
index e16f352..dc194dc 100644
--- a/src/components/app/results/ListResults/ResultItem.tsx
+++ b/src/components/app/results/ListResults/ResultItem.tsx
@@ -133,23 +133,23 @@ const ResultItem = ({
 
   return (
     <div
-      className={`flex my-2 space-y-2 rounded-xl border-2 border-primary-helmholtz-hellblau/20 p-5 shadow-lg shadow-secondary-helmholtz-highlightblau bg-white size-auto ${inDetailsPage && logoHref !== "" ? "" : "flex-col"}`}
+      className={`flex my-2 space-y-2 rounded-xl border-2 border-primary-helmholtz-hellblau/20 p-5 shadow-lg shadow-secondary-helmholtz-highlightblau bg-white size-auto ${inDetailsPage && logoHref !== "" ? "xl:gap-x-10" : "xl:flex-col"}`}
     >
       {inDetailsPage && logoHref !== "" ? (
-        <div className={`border-2 border-red-400 space-y-2 p-5 mt-2 basis-1/3`}>
+        <div className="hidden xl:space-y-2 xl:p-5 xl:mt-2 xl:basis-1/3 xl:flex">
           <Image
             src={logoHref}
-            className={`object-contain w-20 h-20`}
+            className="object-contain place-self-center self-center"
             alt="Institute logo"
-            width={80}
-            height={80}
+            width={1000}
+            height={1000}
           />
         </div>
       ) : null}
 
       <div
         key={idx}
-        className={`flex flex-col my-2 space-y-2 p-5 ${inDetailsPage && logoHref !== "" ? "basis-2/3" : ""} `}
+        className={`flex flex-col my-2 space-y-2 p-5 ${inDetailsPage && logoHref !== "" ? "xl:basis-2/3" : ""} `}
       >
         <button
           className={`${inDetailsPage ? "" : "hover:transition-all hover:translate-x-3"} inline-flex align-middle items-center pb-2 text-primary-helmholtz-dunkelblau ${associatedToFilters ? "" : "inline-flex"} ${inDetailsPage ? "mb-5" : ""}`}
@@ -168,7 +168,7 @@ const ResultItem = ({
             </span>
           ) : null}
           <p
-            className={`${inDetailsPage ? "inline-flex text-2xl underline underline-offset-[16px] decoration-primary-helmholtz-hellblau" : " truncate"} font-semibold text-left w-[98%] `}
+            className={`${inDetailsPage ? "inline-flex text-2xl underline underline-offset-[6px] xl:underline-offset-[8px] decoration-primary-helmholtz-hellblau" : "truncate"} font-semibold text-left w-[98%]`}
             rel="noreferrer"
           >
             {item.name}
-- 
GitLab


From eb89521a1aefbb1ec30afa643d6c973732718ac5 Mon Sep 17 00:00:00 2001
From: FionaDmello <40391218+FionaDmello@users.noreply.github.com>
Date: Tue, 25 Feb 2025 15:09:42 +0100
Subject: [PATCH 31/37] fixes to tsconfig

---
 tsconfig.json | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/tsconfig.json b/tsconfig.json
index ff836d9..1eb4d30 100644
--- a/tsconfig.json
+++ b/tsconfig.json
@@ -22,7 +22,8 @@
       "@/*": ["./src/*"],
       "@api/*": ["./src/app/api/*"]
     },
-    "downlevelIteration": true
+    "downlevelIteration": true,
+    "target": "ES2017"
   },
   "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts"],
   "exclude": ["node_modules"]
-- 
GitLab


From a3a3b87628573c225de54a654185f7bfd774eb88 Mon Sep 17 00:00:00 2001
From: FionaDmello <40391218+FionaDmello@users.noreply.github.com>
Date: Mon, 10 Mar 2025 12:35:58 +0100
Subject: [PATCH 32/37] removed the required check on established property of
 ror result item as it is not required and simplified the type

---
 package.json       |  2 +-
 src/types/types.ts | 19 ++++---------------
 yarn.lock          |  4 ++--
 3 files changed, 7 insertions(+), 18 deletions(-)

diff --git a/package.json b/package.json
index 37f7a7a..607aaf8 100644
--- a/package.json
+++ b/package.json
@@ -34,7 +34,7 @@
     "react": "^18",
     "react-dom": "^18",
     "react-paginate": "^8.2.0",
-    "sharp": "^0.33.4",
+    "sharp": "^0.33.5",
     "zod": "^3.22.4"
   },
   "devDependencies": {
diff --git a/src/types/types.ts b/src/types/types.ts
index fb271d2..846c537 100644
--- a/src/types/types.ts
+++ b/src/types/types.ts
@@ -93,7 +93,7 @@ export type ResultConfig = {
 
 export type ResultKeys = { keys: ResultItemKeys[] };
 
-type RorResultItemBase = {
+export type RorResultItem = {
   id: string;
   name: string;
   acronyms?: string[];
@@ -103,7 +103,7 @@ type RorResultItemBase = {
     country_code: string;
   };
   email_address?: string | null;
-  established: number;
+  established?: number;
   external_ids?: {
     FundRef?: {
       preferred: null | string;
@@ -126,28 +126,17 @@ type RorResultItemBase = {
       all: string[];
     };
   };
-  links: string[];
+  links?: string[];
   relationships?: {
     label: string;
     type: "Parent" | "Child" | "Related";
     id: string;
   }[];
-  status: string;
+  status?: string;
   types?: string[];
   wikipedia_url?: string;
 };
 
-/*
-definition of Required Utility in TS - https://www.typescriptlang.org/docs/handbook/utility-types.html#requiredtype
-type Required<T> = {
-  [P in keyof T]-?: T[P]
-}
-used in to create a generic type that enforces "required" on a particular property - https://www.emmanuelgautier.com/blog/snippets/typescript-required-properties
-*/
-type WithRequired<T, K extends keyof T> = T & { [P in K]-?: T[P] };
-
-export type RorResultItem = WithRequired<RorResultItemBase, "established">;
-
 export type ResultItem = ResultDocs & ResultConfig & ResultKeys & RorResultItem;
 
 // useless for now, later if we type the entities this will help
diff --git a/yarn.lock b/yarn.lock
index 00f1331..1b44694 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -6834,7 +6834,7 @@ __metadata:
   languageName: node
   linkType: hard
 
-"sharp@npm:^0.33.4":
+"sharp@npm:^0.33.5":
   version: 0.33.5
   resolution: "sharp@npm:0.33.5"
   dependencies:
@@ -7732,7 +7732,7 @@ __metadata:
     react: "npm:^18"
     react-dom: "npm:^18"
     react-paginate: "npm:^8.2.0"
-    sharp: "npm:^0.33.4"
+    sharp: "npm:^0.33.5"
     tailwindcss: "npm:^3.3.0"
     test-listen: "npm:^1.1.0"
     ts-node: "npm:^10.9.2"
-- 
GitLab


From 62afa5710b8289600f1d006f5c8b2ca031bd4299 Mon Sep 17 00:00:00 2001
From: FionaDmello <40391218+FionaDmello@users.noreply.github.com>
Date: Mon, 10 Mar 2025 13:23:03 +0100
Subject: [PATCH 33/37] fixed a relative import

---
 src/components/app/results/Details/RelatedResults.tsx | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/components/app/results/Details/RelatedResults.tsx b/src/components/app/results/Details/RelatedResults.tsx
index d322c8c..fcd5804 100644
--- a/src/components/app/results/Details/RelatedResults.tsx
+++ b/src/components/app/results/Details/RelatedResults.tsx
@@ -7,7 +7,7 @@ import Error from "@/components/layout/Error";
 import Spinner from "@/components/layout/Spinner";
 import { Category } from "@/types/types";
 
-import CategoryBar from "../CategoryBar";
+import CategoryBar from "@/components/app/results/CategoryBar";
 
 const RelatedResults = () => {
   const d = useTranslations("DetailsView");
-- 
GitLab


From 51a5d7982ce0cf4644bd475e859a2865c850b904 Mon Sep 17 00:00:00 2001
From: FionaDmello <40391218+FionaDmello@users.noreply.github.com>
Date: Mon, 10 Mar 2025 14:20:04 +0100
Subject: [PATCH 34/37] fixing issues from merge of dev into this branch

---
 src/app/[locale]/layout.tsx                    |  8 ++++++++
 src/components/app/Categories.tsx              |  3 ++-
 src/components/app/results/CategoryBar.tsx     |  3 ++-
 .../app/results/Details/RelatedResults.tsx     |  3 +--
 .../app/results/ListResults/ResultItem.tsx     |  3 ++-
 .../ListResults/ResultItem/Relationships.tsx   |  7 ++++---
 src/components/layout/Header.tsx               |  3 ++-
 src/components/layout/Search.tsx               |  3 ++-
 src/i18n/request.ts                            | 18 ++++++++++++++++++
 src/i18n/routing.ts                            | 12 ++++++++++++
 src/utils/apiCall.ts                           |  5 ++---
 11 files changed, 55 insertions(+), 13 deletions(-)
 create mode 100644 src/i18n/request.ts
 create mode 100644 src/i18n/routing.ts

diff --git a/src/app/[locale]/layout.tsx b/src/app/[locale]/layout.tsx
index 7e924b6..d8ad8f8 100644
--- a/src/app/[locale]/layout.tsx
+++ b/src/app/[locale]/layout.tsx
@@ -1,11 +1,13 @@
 import type { Metadata, Viewport } from "next";
 import "./globals.css";
+import { notFound } from "next/navigation";
 import { useTranslations, useMessages, NextIntlClientProvider } from "next-intl";
 import React from "react";
 
 import Banner from "@/components/layout/Banner";
 import Footer from "@/components/layout/Footer";
 import Header from "@/components/layout/Header";
+import { routing } from "@/i18n/routing";
 
 const env = process.env.NEXT_PUBLIC_SHOW_BANNER;
 const showBanner = env && (env.toLowerCase() === "true" || env === "1");
@@ -42,6 +44,12 @@ export default function RootLayout({
   params: Promise<{ locale: string }>;
 }>) {
   const { locale } = React.use(params);
+
+  // Ensure that the incoming `locale` is valid
+  if (!routing.locales.includes(locale as any)) {
+    notFound();
+  }
+
   const t = useTranslations("Layout");
   const messages = useMessages();
 
diff --git a/src/components/app/Categories.tsx b/src/components/app/Categories.tsx
index 20d40bf..5554695 100644
--- a/src/components/app/Categories.tsx
+++ b/src/components/app/Categories.tsx
@@ -6,10 +6,11 @@ import { useEffect, useState } from "react";
 
 import Error from "@/components/layout/Error";
 import Spinner from "@/components/layout/Spinner";
-import { Link } from "@/i18n/routing";
 import type { Category } from "@/types/types";
 import { getAllCategories } from "@/utils/apiCall";
 
+import { Link } from "@/i18n/routing";
+
 const Categories = () => {
   const t = useTranslations("Categories");
   const [allCategories, setCategories] = useState<Category[]>([]);
diff --git a/src/components/app/results/CategoryBar.tsx b/src/components/app/results/CategoryBar.tsx
index 6bc4ffa..1d9be55 100644
--- a/src/components/app/results/CategoryBar.tsx
+++ b/src/components/app/results/CategoryBar.tsx
@@ -4,10 +4,11 @@ import { useSearchParams } from "next/navigation";
 import { useTranslations } from "next-intl";
 import { Dispatch, SetStateAction, Suspense, useEffect, useState, useRef } from "react";
 
-import { Link } from "@/i18n/routing";
 import type { Category } from "@/types/types";
 import { getAllCategories, getCategoryCounts } from "@/utils/apiCall";
 
+import { Link } from "@/i18n/routing";
+
 type Props = {
   activeCategory?: Category;
   categoryLoading: boolean;
diff --git a/src/components/app/results/Details/RelatedResults.tsx b/src/components/app/results/Details/RelatedResults.tsx
index fcd5804..451acf2 100644
--- a/src/components/app/results/Details/RelatedResults.tsx
+++ b/src/components/app/results/Details/RelatedResults.tsx
@@ -2,13 +2,12 @@
 import { useTranslations } from "next-intl";
 import React, { useState } from "react";
 
+import CategoryBar from "@/components/app/results/CategoryBar";
 import ListResults from "@/components/app/results/ListResults";
 import Error from "@/components/layout/Error";
 import Spinner from "@/components/layout/Spinner";
 import { Category } from "@/types/types";
 
-import CategoryBar from "@/components/app/results/CategoryBar";
-
 const RelatedResults = () => {
   const d = useTranslations("DetailsView");
   const [categoryLoading, setCategoryLoading] = useState(true);
diff --git a/src/components/app/results/ListResults/ResultItem.tsx b/src/components/app/results/ListResults/ResultItem.tsx
index c63b21c..e3e85e1 100644
--- a/src/components/app/results/ListResults/ResultItem.tsx
+++ b/src/components/app/results/ListResults/ResultItem.tsx
@@ -9,12 +9,13 @@ import { useEffect, useRef, useState } from "react";
 import { INSTITUTE_ROR_LOGOS } from "@/app/api/config/config";
 import ExternalLink from "@/components/ExternalLink";
 import Relationships from "@/components/app/results/ListResults/ResultItem/Relationships";
-import { Link } from "@/i18n/routing";
 import ExternalLinkIcon from "@/resources/images/svg/ExternalLinkIcon";
 import RightArrowIcon from "@/resources/images/svg/RightArrowIcon";
 import type { Category, ResultItem as ResultItemType } from "@/types/types";
 import { detailsItemAtom } from "@/utils/atoms";
 
+import { Link } from "@/i18n/routing";
+
 type Props = {
   item: ResultItemType;
   idx: string;
diff --git a/src/components/app/results/ListResults/ResultItem/Relationships.tsx b/src/components/app/results/ListResults/ResultItem/Relationships.tsx
index fa9762c..27d7ad1 100644
--- a/src/components/app/results/ListResults/ResultItem/Relationships.tsx
+++ b/src/components/app/results/ListResults/ResultItem/Relationships.tsx
@@ -3,9 +3,10 @@ import { useTranslations } from "next-intl";
 import React, { useEffect, useRef, useState } from "react";
 
 import { INSTITUTE_ROR_LOGOS } from "@/app/api/config/config";
-import { Link } from "@/i18n/routing";
 import ExternalLinkIcon from "@/resources/images/svg/ExternalLinkIcon";
 
+import { Link } from "@/i18n/routing";
+
 type Props = {
   filteredArr: { label: string; type: string; id: string }[];
   type: "Parent" | "Child" | "Related";
@@ -35,7 +36,7 @@ const Relationships = ({ filteredArr, type }: Props) => {
     <div className="mt-2 cursor-default">
       <span className="font-semibold">{s(`${type.toLowerCase()}`)}: </span>
 
-      <p ref={relRef} className={relShowMore ? "" : "line-clamp-2"}>
+      <div ref={relRef} className={relShowMore ? "" : "line-clamp-2"}>
         {filteredArr.map((displayItem, idx: number) => {
           const iconArr = INSTITUTE_ROR_LOGOS.filter((o) => o.id === displayItem.id);
           const iconHref = iconArr.pop()?.favicon || "";
@@ -64,7 +65,7 @@ const Relationships = ({ filteredArr, type }: Props) => {
             </span>
           );
         })}
-      </p>
+      </div>
 
       {relShowReadMore ? (
         <button
diff --git a/src/components/layout/Header.tsx b/src/components/layout/Header.tsx
index fc902c4..4a33106 100644
--- a/src/components/layout/Header.tsx
+++ b/src/components/layout/Header.tsx
@@ -2,10 +2,11 @@ import Image from "next/image";
 import { useTranslations } from "next-intl";
 
 import Search from "@/components/layout/Search";
-import { Link } from "@/i18n/routing";
 import logoHGF from "@/resources/images/logo/Logo_HGF-KG_text_brightback.png";
 import unhideLogo from "@/resources/images/logo/unhide_header.png";
 
+import { Link } from "@/i18n/routing";
+
 const Header = () => {
   const t = useTranslations("Search");
   const s = useTranslations("Intro");
diff --git a/src/components/layout/Search.tsx b/src/components/layout/Search.tsx
index c5f5e2f..656f8a4 100644
--- a/src/components/layout/Search.tsx
+++ b/src/components/layout/Search.tsx
@@ -3,11 +3,12 @@
 import { useSearchParams, useRouter } from "next/navigation";
 import { Suspense, useEffect, useState } from "react";
 
-import { Link } from "@/i18n/routing";
 import ClearIcon from "@/resources/images/svg/ClearIcon";
 import RightArrowIcon from "@/resources/images/svg/RightArrowIcon";
 import SearchIcon from "@/resources/images/svg/SearchIcon";
 
+import { Link } from "@/i18n/routing";
+
 type Props = {
   exampleTrigger: string;
   placeholder: string;
diff --git a/src/i18n/request.ts b/src/i18n/request.ts
new file mode 100644
index 0000000..73f0e42
--- /dev/null
+++ b/src/i18n/request.ts
@@ -0,0 +1,18 @@
+import { getRequestConfig } from "next-intl/server";
+
+import { routing } from "@/i18n/routing";
+
+export default getRequestConfig(async ({ requestLocale }) => {
+  // This typically corresponds to the `[locale]` segment
+  let locale = await requestLocale;
+
+  // Ensure that a valid locale is used
+  if (!locale || !routing.locales.includes(locale as any)) {
+    locale = routing.defaultLocale;
+  }
+
+  return {
+    locale,
+    messages: (await import(`@/locales/${locale}.json`)).default,
+  };
+});
diff --git a/src/i18n/routing.ts b/src/i18n/routing.ts
new file mode 100644
index 0000000..7d9aa72
--- /dev/null
+++ b/src/i18n/routing.ts
@@ -0,0 +1,12 @@
+import { createNavigation } from "next-intl/navigation";
+import { defineRouting, LocalePrefix } from "next-intl/routing";
+
+export const i18nConfig = {
+  locales: ["en", "de"],
+  defaultLocale: "en",
+  localeDetection: false,
+  localePrefix: "as-needed" as LocalePrefix,
+};
+export const routing = defineRouting(i18nConfig);
+
+export const { Link } = createNavigation(routing);
diff --git a/src/utils/apiCall.ts b/src/utils/apiCall.ts
index ed95087..4a6de7d 100644
--- a/src/utils/apiCall.ts
+++ b/src/utils/apiCall.ts
@@ -59,14 +59,13 @@ export async function getCategoryCounts(searchText?: string): Promise<Record<str
 }
 
 export async function getRorInfo(rorId: string): Promise<RorResultItem> {
-  const rorItem: RorResultItem = { id: "", name: "", status: "", established: 0, links: [] };
+  const rorItem: RorResultItem = { id: "", name: "", status: "" };
   const response = await fetch(`https://api.ror.org/organizations/${rorId}`, {
     headers: {
       Accept: "application/json",
     },
   });
-  const rorResult: RorResultItem = { ...rorItem, ...(await response.json()) };
-  return rorResult;
+  return { ...rorItem, ...(await response.json()) };
 }
 
 export async function search(
-- 
GitLab


From c6ac89035522e1083cdc884e1735490a614cf96d Mon Sep 17 00:00:00 2001
From: FionaDmello <40391218+FionaDmello@users.noreply.github.com>
Date: Mon, 10 Mar 2025 14:24:50 +0100
Subject: [PATCH 35/37] import statement corrections for i18n based Link
 component

---
 package.json                                                  | 2 +-
 src/components/app/Categories.tsx                             | 3 +--
 src/components/app/results/CategoryBar.tsx                    | 3 +--
 src/components/app/results/ListResults/ResultItem.tsx         | 3 +--
 .../app/results/ListResults/ResultItem/Relationships.tsx      | 3 +--
 src/components/layout/Header.tsx                              | 3 +--
 src/components/layout/Search.tsx                              | 3 +--
 yarn.lock                                                     | 4 ++--
 8 files changed, 9 insertions(+), 15 deletions(-)

diff --git a/package.json b/package.json
index 4ce7040..32f8767 100644
--- a/package.json
+++ b/package.json
@@ -34,7 +34,7 @@
     "react": "^18",
     "react-dom": "^18",
     "react-paginate": "^8",
-    "sharp": "^0.33",
+    "sharp": "^0.33.5",
     "zod": "^3"
   },
   "devDependencies": {
diff --git a/src/components/app/Categories.tsx b/src/components/app/Categories.tsx
index 5554695..20d40bf 100644
--- a/src/components/app/Categories.tsx
+++ b/src/components/app/Categories.tsx
@@ -6,11 +6,10 @@ import { useEffect, useState } from "react";
 
 import Error from "@/components/layout/Error";
 import Spinner from "@/components/layout/Spinner";
+import { Link } from "@/i18n/routing";
 import type { Category } from "@/types/types";
 import { getAllCategories } from "@/utils/apiCall";
 
-import { Link } from "@/i18n/routing";
-
 const Categories = () => {
   const t = useTranslations("Categories");
   const [allCategories, setCategories] = useState<Category[]>([]);
diff --git a/src/components/app/results/CategoryBar.tsx b/src/components/app/results/CategoryBar.tsx
index 1d9be55..6bc4ffa 100644
--- a/src/components/app/results/CategoryBar.tsx
+++ b/src/components/app/results/CategoryBar.tsx
@@ -4,11 +4,10 @@ import { useSearchParams } from "next/navigation";
 import { useTranslations } from "next-intl";
 import { Dispatch, SetStateAction, Suspense, useEffect, useState, useRef } from "react";
 
+import { Link } from "@/i18n/routing";
 import type { Category } from "@/types/types";
 import { getAllCategories, getCategoryCounts } from "@/utils/apiCall";
 
-import { Link } from "@/i18n/routing";
-
 type Props = {
   activeCategory?: Category;
   categoryLoading: boolean;
diff --git a/src/components/app/results/ListResults/ResultItem.tsx b/src/components/app/results/ListResults/ResultItem.tsx
index e3e85e1..c63b21c 100644
--- a/src/components/app/results/ListResults/ResultItem.tsx
+++ b/src/components/app/results/ListResults/ResultItem.tsx
@@ -9,13 +9,12 @@ import { useEffect, useRef, useState } from "react";
 import { INSTITUTE_ROR_LOGOS } from "@/app/api/config/config";
 import ExternalLink from "@/components/ExternalLink";
 import Relationships from "@/components/app/results/ListResults/ResultItem/Relationships";
+import { Link } from "@/i18n/routing";
 import ExternalLinkIcon from "@/resources/images/svg/ExternalLinkIcon";
 import RightArrowIcon from "@/resources/images/svg/RightArrowIcon";
 import type { Category, ResultItem as ResultItemType } from "@/types/types";
 import { detailsItemAtom } from "@/utils/atoms";
 
-import { Link } from "@/i18n/routing";
-
 type Props = {
   item: ResultItemType;
   idx: string;
diff --git a/src/components/app/results/ListResults/ResultItem/Relationships.tsx b/src/components/app/results/ListResults/ResultItem/Relationships.tsx
index 27d7ad1..de00642 100644
--- a/src/components/app/results/ListResults/ResultItem/Relationships.tsx
+++ b/src/components/app/results/ListResults/ResultItem/Relationships.tsx
@@ -3,9 +3,8 @@ import { useTranslations } from "next-intl";
 import React, { useEffect, useRef, useState } from "react";
 
 import { INSTITUTE_ROR_LOGOS } from "@/app/api/config/config";
-import ExternalLinkIcon from "@/resources/images/svg/ExternalLinkIcon";
-
 import { Link } from "@/i18n/routing";
+import ExternalLinkIcon from "@/resources/images/svg/ExternalLinkIcon";
 
 type Props = {
   filteredArr: { label: string; type: string; id: string }[];
diff --git a/src/components/layout/Header.tsx b/src/components/layout/Header.tsx
index 4a33106..fc902c4 100644
--- a/src/components/layout/Header.tsx
+++ b/src/components/layout/Header.tsx
@@ -2,11 +2,10 @@ import Image from "next/image";
 import { useTranslations } from "next-intl";
 
 import Search from "@/components/layout/Search";
+import { Link } from "@/i18n/routing";
 import logoHGF from "@/resources/images/logo/Logo_HGF-KG_text_brightback.png";
 import unhideLogo from "@/resources/images/logo/unhide_header.png";
 
-import { Link } from "@/i18n/routing";
-
 const Header = () => {
   const t = useTranslations("Search");
   const s = useTranslations("Intro");
diff --git a/src/components/layout/Search.tsx b/src/components/layout/Search.tsx
index 656f8a4..c5f5e2f 100644
--- a/src/components/layout/Search.tsx
+++ b/src/components/layout/Search.tsx
@@ -3,12 +3,11 @@
 import { useSearchParams, useRouter } from "next/navigation";
 import { Suspense, useEffect, useState } from "react";
 
+import { Link } from "@/i18n/routing";
 import ClearIcon from "@/resources/images/svg/ClearIcon";
 import RightArrowIcon from "@/resources/images/svg/RightArrowIcon";
 import SearchIcon from "@/resources/images/svg/SearchIcon";
 
-import { Link } from "@/i18n/routing";
-
 type Props = {
   exampleTrigger: string;
   placeholder: string;
diff --git a/yarn.lock b/yarn.lock
index 2feb766..41356b1 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -6977,7 +6977,7 @@ __metadata:
   languageName: node
   linkType: hard
 
-"sharp@npm:^0.33, sharp@npm:^0.33.5":
+"sharp@npm:^0.33.5":
   version: 0.33.5
   resolution: "sharp@npm:0.33.5"
   dependencies:
@@ -7901,7 +7901,7 @@ __metadata:
     react: "npm:^18"
     react-dom: "npm:^18"
     react-paginate: "npm:^8"
-    sharp: "npm:^0.33"
+    sharp: "npm:^0.33.5"
     tailwindcss: "npm:^3.3.0"
     test-listen: "npm:^1.1.0"
     ts-node: "npm:^10.9.2"
-- 
GitLab


From ce2cd3f9bb25da4f8d1d9faf90a205b066827ea5 Mon Sep 17 00:00:00 2001
From: FionaDmello <40391218+FionaDmello@users.noreply.github.com>
Date: Mon, 10 Mar 2025 14:26:07 +0100
Subject: [PATCH 36/37] removed an unnecessary variable declaration

---
 .env                                       | 2 ++
 src/components/app/results/CategoryBar.tsx | 2 +-
 2 files changed, 3 insertions(+), 1 deletion(-)
 create mode 100644 .env

diff --git a/.env b/.env
new file mode 100644
index 0000000..ad78553
--- /dev/null
+++ b/.env
@@ -0,0 +1,2 @@
+NEXT_PRIVATE_SOLR_SERVICE_URL=http://localhost:8983/solr/unhide/select?
+NEXT_PUBLIC_SHOW_BANNER=false
\ No newline at end of file
diff --git a/src/components/app/results/CategoryBar.tsx b/src/components/app/results/CategoryBar.tsx
index 6bc4ffa..c58ed43 100644
--- a/src/components/app/results/CategoryBar.tsx
+++ b/src/components/app/results/CategoryBar.tsx
@@ -56,7 +56,7 @@ const CategoryBarComponent = ({
         } else {
           setBaseCategories(allCategories);
         }
-      } catch (error) {
+      } catch {
         setHasBcError(true);
       }
     };
-- 
GitLab


From c2f193a4f08d32c0ce162c2e58f9855c278efcb9 Mon Sep 17 00:00:00 2001
From: FionaDmello <40391218+FionaDmello@users.noreply.github.com>
Date: Mon, 10 Mar 2025 14:29:07 +0100
Subject: [PATCH 37/37] removed a mistakenly sent .env file

---
 .env | 2 --
 1 file changed, 2 deletions(-)
 delete mode 100644 .env

diff --git a/.env b/.env
deleted file mode 100644
index ad78553..0000000
--- a/.env
+++ /dev/null
@@ -1,2 +0,0 @@
-NEXT_PRIVATE_SOLR_SERVICE_URL=http://localhost:8983/solr/unhide/select?
-NEXT_PUBLIC_SHOW_BANNER=false
\ No newline at end of file
-- 
GitLab