core: update many files
All checks were successful
Build and Deploy Next.js + Nginx Docker Image / build-and-deploy (push) Successful in 2m53s
Build and Deploy Next.js + Nginx Docker Image / deploy (push) Successful in 6s

This commit is contained in:
Hossein Salari 2026-02-23 13:41:29 +03:30
parent fe29382158
commit d4a2acba6e
13 changed files with 494 additions and 192 deletions

1
.env Normal file
View File

@ -0,0 +1 @@
NEXT_PUBLIC_BASE_URL=https://api.d.aiengines.ir/rasad/v1

2
.gitignore vendored
View File

@ -31,7 +31,7 @@ yarn-error.log*
.pnpm-debug.log*
# env files (can opt-in for committing if needed)
.env*
.env*.local
# vercel
.vercel

15
components/base/global.js Normal file
View File

@ -0,0 +1,15 @@
import { Global } from "@emotion/react";
export const Fonts = () => (
<Global
styles={`
@font-face {
font-family: Estedad;
src: url('/fonts/estedad.woff2') format('woff2');
font-weight: 400;
font-style: normal;
font-display: swap;
}
`}
/>
);

View File

@ -0,0 +1,36 @@
import keycloak from "@/lib/keycloak";
import { createContext, useContext, useEffect, useState } from "react";
const KeycloakContext = createContext();
let keycloakInitialized = false;
export const KeycloakProvider = ({ children }) => {
const [initialized, setInitialized] = useState(false);
const [authenticated, setAuthenticated] = useState(false);
useEffect(() => {
if (!keycloakInitialized) {
keycloakInitialized = true;
keycloak
.init({
onLoad: "login-required",
checkLoginIframe: false,
flow: "implicit",
})
.then((auth) => {
setAuthenticated(auth);
setInitialized(true);
})
.catch((err) => {});
}
}, []);
return (
<KeycloakContext.Provider value={{ keycloak, authenticated, initialized }}>
{children}
</KeycloakContext.Provider>
);
};
export const useKeycloak = () => useContext(KeycloakContext);

54
lib/api.js Normal file
View File

@ -0,0 +1,54 @@
import axios from "axios";
import keycloak from "./keycloak";
export const baseUrl = process.env.NEXT_PUBLIC_BASE_URL;
const axiosInstance = axios.create({
baseURL: baseUrl,
});
axiosInstance.interceptors.request.use(
async (config) => {
// if (keycloak?.authenticated) {
// config.headers.Authorization = `Bearer ${keycloak.token}`;
// await keycloak.updateToken(30);
// }
return config;
},
(error) => Promise.reject(error),
);
axiosInstance.interceptors.response.use(
(response) => response,
async (error) => {
const originalRequest = error.config;
// if (error?.response?.status === 401 && !originalRequest._retry) {
// originalRequest._retry = true;
// keycloak.login();
// try {
// await keycloak.updateToken(30);
// const newToken = keycloak.token;
// if (newToken) {
// originalRequest.headers["Authorization"] = `Bearer ${newToken}`;
// return axiosInstance(originalRequest);
// }
// } catch (refreshError) {
// localStorage.removeItem("access_account");
// keycloak.logout({ redirectUri: window.location.origin });
// }
// }
return Promise.reject(error);
},
);
// ✅ Fetcher for GET (used in SWR)
export const fetcher = async (url) => {
const fullUrl = url.startsWith("http") ? url : `${baseUrl}${url}`;
const resp = await axiosInstance.get(fullUrl);
return resp.data;
};
export default axiosInstance;

16
lib/keycloak.js Normal file
View File

@ -0,0 +1,16 @@
import Keycloak from "keycloak-js";
const keycloak = new Keycloak({
url: "https://auth.ibagher.ir",
realm: "bi",
clientId: "rasad",
});
export const initKeycloak = () =>
keycloak.init({
onLoad: "login-required",
checkLoginIframe: false, // optional
flow: "implicit", // You can change this to 'standard' if you use authorization code flow
});
export default keycloak;

View File

@ -11,7 +11,9 @@
"@chakra-ui/react": "2",
"@emotion/react": "^11.14.0",
"@emotion/styled": "^11.14.1",
"axios": "^1.13.5",
"framer-motion": "^12.34.3",
"keycloak-js": "^26.2.3",
"next": "16.1.6",
"next-query-params": "^5.1.0",
"react": "19.2.3",

View File

@ -3,17 +3,30 @@ import { ChakraProvider } from "@chakra-ui/react";
import { QueryParamProvider } from "use-query-params";
import { NextAdapter } from "next-query-params";
import { theme } from "@/components/theme";
import { useKeycloak } from "@/contexts/KeycloakContext";
import { SWRConfig } from "swr";
import { fetcher } from "@/lib/api";
import { Fonts } from "@/components/base/global";
const Adapter = (props) => <NextAdapter {...props} shallow={true} />;
export default function App({ Component, pageProps }) {
const Adapter = (props) => <NextAdapter {...props} shallow={true} />;
// const { initialized, authenticated } = useKeycloak();
// if (!initialized) return <Spinner />;
// if (!authenticated) return <div>Redirecting to login...</div>;
return (
<ChakraProvider theme={theme}>
<QueryParamProvider adapter={Adapter} options={{ enableBatching: true }}>
<QueryParamProvider>
<SWRConfig value={{ fetcher }}>
<QueryParamProvider
adapter={Adapter}
options={{ enableBatching: true }}
>
<Fonts />
<Component {...pageProps} />
</QueryParamProvider>
</QueryParamProvider>
</SWRConfig>
</ChakraProvider>
);
}

View File

@ -3,7 +3,10 @@ import { Html, Head, Main, NextScript } from "next/document";
export default function Document() {
return (
<Html lang="en">
<Head />
<Head>
<title>سامانه جامع تولید محتوای هوشمند</title>
<link rel="icon" href="/generative-logo.png" />
</Head>
<body>
<Main />
<NextScript />

View File

@ -12,18 +12,10 @@ import {
TabPanel,
TabPanels,
Icon,
Divider,
HStack,
Image,
Stack,
} from "@chakra-ui/react";
import {
FiFileText,
FiImage,
FiVideo,
FiLayers,
FiSettings,
} from "react-icons/fi";
import { FiImage, FiLayers } from "react-icons/fi";
import { CiVideoOn } from "react-icons/ci";
import {
IoDocumentTextOutline,
@ -31,7 +23,6 @@ import {
IoVideocamOutline,
} from "react-icons/io5";
import { IoIosGitMerge } from "react-icons/io";
import {
NumberParam,
StringParam,
@ -39,7 +30,6 @@ import {
withDefault,
} from "use-query-params";
import { BsChatText } from "react-icons/bs";
// import { StringParam, useQueryParams, withDefault } from "use-query-params";
export default function Home() {
const [filters, setFilters] = useQueryParams({
@ -49,174 +39,153 @@ export default function Home() {
});
return (
<Flex minH="100vh" bg="gray.50" dir="rtl">
{/* Main Content */}
<Box
w="280px"
bg="white"
borderLeft="1px solid"
borderColor="gray.200"
py={8}
>
<VStack align="stretch" spacing={6}>
{/* Brand / Title */}
<Box px={6}>
<Text fontSize="lg" fontWeight="bold">
سرویس ها
</Text>
<Text fontSize="sm" color="gray.500">
داشبورد تولید محتوا
</Text>
</Box>
<Flex direction={"column"} minH="100vh" bg="gray.50" dir="rtl">
{/* Header */}
<AppHeader />
<Divider />
{/* Menu */}
<Tabs
isFitted
variant="soft-rounded"
colorScheme="green"
px={6}
onChange={(e) => setFilters({ model_name: e })}
index={filters?.model_name}
>
<TabList>
<Tab>خانم ستاری</Tab>
<Tab>رکن آبادی</Tab>
</TabList>
<TabPanels>
<TabPanel>
<VStack align="stretch" spacing={2}>
<SidebarItem
icon={FiImage}
label="LLM + LoRA"
name={"llm"}
active={filters?.tab_menu == "llm" ? true : false}
filters={filters}
setFilters={setFilters}
/>
<SidebarItem
icon={BsChatText}
label="LLM Base"
name={"llm_base"}
active={filters?.tab_menu == "llm_base" ? true : false}
filters={filters}
setFilters={setFilters}
/>
<SidebarItem
icon={FiLayers}
label="SDXL + LoRA"
name={"sdxl_lora"}
active={filters?.tab_menu == "sdxl_lora" ? true : false}
filters={filters}
setFilters={setFilters}
/>
<SidebarItem
icon={FiLayers}
label="SDXL"
name={"sdxl"}
active={filters?.tab_menu == "sdxl" ? true : false}
filters={filters}
setFilters={setFilters}
/>
<SidebarItem
icon={CiVideoOn}
label="CogVideo + LoRA"
name={"cogvideo"}
active={filters?.tab_menu == "cogvideo" ? true : false}
filters={filters}
setFilters={setFilters}
/>
<SidebarItem
icon={FiLayers}
label="CogVideo Base"
name={"cogvideo_base"}
active={filters?.tab_menu == "cogvideo_base" ? true : false}
filters={filters}
setFilters={setFilters}
/>
</VStack>
</TabPanel>
<TabPanel>
<VStack align="stretch" spacing={2}>
<SidebarItem
icon={FiImage}
label="LLM + LoRA"
name={"llm"}
active={filters?.tab_menu == "llm" ? true : false}
filters={filters}
setFilters={setFilters}
/>
<SidebarItem
icon={BsChatText}
label="LLM Base"
name={"llm_base"}
active={filters?.tab_menu == "llm_base" ? true : false}
filters={filters}
setFilters={setFilters}
/>
<SidebarItem
icon={FiLayers}
label="SDXL + LoRA"
name={"sdxl_lora"}
active={filters?.tab_menu == "sdxl_lora" ? true : false}
filters={filters}
setFilters={setFilters}
/>
<SidebarItem
icon={FiLayers}
label="SDXL"
name={"sdxl"}
active={filters?.tab_menu == "sdxl" ? true : false}
filters={filters}
setFilters={setFilters}
/>
<SidebarItem
icon={CiVideoOn}
label="CogVideo + LoRA"
name={"cogvideo"}
active={filters?.tab_menu == "cogvideo" ? true : false}
filters={filters}
setFilters={setFilters}
/>
<SidebarItem
icon={FiLayers}
label="CogVideo Base"
name={"cogvideo_base"}
active={filters?.tab_menu == "cogvideo_base" ? true : false}
filters={filters}
setFilters={setFilters}
/>
</VStack>
</TabPanel>
</TabPanels>
</Tabs>
{/* Footer */}
</VStack>
</Box>
<VStack w={"100%"} alignItems={"start"}>
{/* Page Layout */}
<Flex flex="1" minH={0} mt={"92px"}>
{/* Sidebar */}
<Box
w={"100%"}
h={"92px"}
borderBottom={"1px"}
borderBottomColor={"gray.200"}
bgColor={"white"}
as={Stack}
alignItems={"end"}
justifyContent={"center"}
pl={"20px"}
w="280px"
bg="#fdfbff"
borderLeft="1px solid"
borderColor="gray.200"
py={8}
>
<VStack>
<Image src={"./logob.png"} />
<Text fontSize={"xs"} fontWeight={"bold"}>
موسسه تولید سیستم های خبره و هوشمند اسلامی باقرالعلوم(ع)
</Text>
<VStack align="stretch" spacing={6}>
{/* Menu */}
<Tabs
isFitted
variant="soft-rounded"
colorScheme="green"
px={6}
onChange={(e) => setFilters({ model_name: e })}
index={filters?.model_name}
>
<TabList mb={2}>
<Tab>خانم ستاری</Tab>
<Tab>رکن آبادی</Tab>
</TabList>
<TabPanels>
<TabPanel>
<VStack align="stretch" spacing={2}>
<SidebarItem
icon={FiImage}
label="LLM + LoRA"
name={"llm"}
active={filters?.tab_menu == "llm" ? true : false}
filters={filters}
setFilters={setFilters}
/>
<SidebarItem
icon={BsChatText}
label="LLM Base"
name={"llm_base"}
active={filters?.tab_menu == "llm_base" ? true : false}
filters={filters}
setFilters={setFilters}
/>
<SidebarItem
icon={FiLayers}
label="SDXL + LoRA"
name={"sdxl_lora"}
active={filters?.tab_menu == "sdxl_lora" ? true : false}
filters={filters}
setFilters={setFilters}
/>
<SidebarItem
icon={FiLayers}
label="SDXL"
name={"sdxl"}
active={filters?.tab_menu == "sdxl" ? true : false}
filters={filters}
setFilters={setFilters}
/>
<SidebarItem
icon={CiVideoOn}
label="CogVideo + LoRA"
name={"cogvideo"}
active={filters?.tab_menu == "cogvideo" ? true : false}
filters={filters}
setFilters={setFilters}
/>
<SidebarItem
icon={FiLayers}
label="CogVideo Base"
name={"cogvideo_base"}
active={
filters?.tab_menu == "cogvideo_base" ? true : false
}
filters={filters}
setFilters={setFilters}
/>
</VStack>
</TabPanel>
<TabPanel>
<VStack align="stretch" spacing={2}>
<SidebarItem
icon={FiImage}
label="LLM + LoRA"
name={"llm"}
active={filters?.tab_menu == "llm" ? true : false}
filters={filters}
setFilters={setFilters}
/>
<SidebarItem
icon={BsChatText}
label="LLM Base"
name={"llm_base"}
active={filters?.tab_menu == "llm_base" ? true : false}
filters={filters}
setFilters={setFilters}
/>
<SidebarItem
icon={FiLayers}
label="SDXL + LoRA"
name={"sdxl_lora"}
active={filters?.tab_menu == "sdxl_lora" ? true : false}
filters={filters}
setFilters={setFilters}
/>
<SidebarItem
icon={FiLayers}
label="SDXL"
name={"sdxl"}
active={filters?.tab_menu == "sdxl" ? true : false}
filters={filters}
setFilters={setFilters}
/>
<SidebarItem
icon={CiVideoOn}
label="CogVideo + LoRA"
name={"cogvideo"}
active={filters?.tab_menu == "cogvideo" ? true : false}
filters={filters}
setFilters={setFilters}
/>
<SidebarItem
icon={FiLayers}
label="CogVideo Base"
name={"cogvideo_base"}
active={
filters?.tab_menu == "cogvideo_base" ? true : false
}
filters={filters}
setFilters={setFilters}
/>
</VStack>
</TabPanel>
</TabPanels>
</Tabs>
{/* Footer */}
</VStack>
</Box>
<Box flex="1" p={8} w={"100%"}>
{/* Content */}
<Box flex="1" p={8} minW={0}>
<Tabs
variant="soft-rounded"
colorScheme="purple"
@ -264,21 +233,60 @@ export default function Home() {
</TabPanels>
</Tabs>
</Box>
</VStack>
{/* Right Sidebar */}
</Flex>
</Flex>
);
}
function SidebarItem({
icon,
label,
active = false,
filters,
setFilters,
name,
}) {
function AppHeader() {
return (
<Box
w="100%"
h="92px"
borderBottom="1px solid"
borderColor="gray.200"
bg="#fdfbff"
as={HStack}
alignItems="center"
justifyContent="space-between"
px={"20px"}
zIndex={10}
position="fixed"
top={0}
>
<HStack alignItems={"end"} height={"100%"} py={"10px"}>
<Image
src="/generative-logo.png"
w={"80px"}
h={"70px"}
loading="lazy"
/>
<VStack alignItems={"start"} justifyContent={"end"} height={"100%"}>
<Text fontWeight={"bold"} fontSize={"20px"}>
سامانه تولید محتوای هوشمند
</Text>
<Text>
سامانه جامع تولید محتوا با استفاده از مدلهای زبانی و مولد تصویر و
ویدئو
</Text>
</VStack>
</HStack>
<VStack
w={"fit-content"}
alignItems={"center"}
justifyContent={"center"}
py={"10px"}
>
<Image src="./logob.png" />
<Text fontSize="xs" fontWeight="bold">
موسسه تولید سیستم های خبره و هوشمند اسلامی باقرالعلوم(ع)
</Text>
</VStack>
</Box>
);
}
function SidebarItem({ icon, label, active = false, setFilters, name }) {
return (
<Flex
align="center"

BIN
public/generative-logo.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 65 KiB

View File

@ -14,12 +14,12 @@ html,
body {
max-width: 100vw;
overflow-x: hidden;
font-family: Estedad, Arial, Helvetica, sans-serif;
}
body {
color: var(--foreground);
background: var(--background);
font-family: Arial, Helvetica, sans-serif;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}

154
yarn.lock
View File

@ -537,6 +537,20 @@ aria-hidden@^1.2.3:
dependencies:
tslib "^2.0.0"
asynckit@^0.4.0:
version "0.4.0"
resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79"
integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==
axios@^1.13.5:
version "1.13.5"
resolved "https://registry.yarnpkg.com/axios/-/axios-1.13.5.tgz#5e464688fa127e11a660a2c49441c009f6567a43"
integrity sha512-cz4ur7Vb0xS4/KUN0tPWe44eqxrIu31me+fbang3ijiNscE129POzipJJA6zniq2C/Z6sJCjMimjS8Lc/GAs8Q==
dependencies:
follow-redirects "^1.15.11"
form-data "^4.0.5"
proxy-from-env "^1.1.0"
babel-plugin-macros@^3.1.0:
version "3.1.0"
resolved "https://registry.yarnpkg.com/babel-plugin-macros/-/babel-plugin-macros-3.1.0.tgz#9ef6dc74deb934b4db344dc973ee851d148c50c1"
@ -551,6 +565,14 @@ baseline-browser-mapping@^2.8.3:
resolved "https://registry.yarnpkg.com/baseline-browser-mapping/-/baseline-browser-mapping-2.10.0.tgz#5b09935025bf8a80e29130251e337c6a7fc8cbb9"
integrity sha512-lIyg0szRfYbiy67j9KN8IyeD7q7hcmqnJ1ddWmNt19ItGpNN64mnllmxUNFIOdOm6by97jlL6wfpTTJrmnjWAA==
call-bind-apply-helpers@^1.0.1, call-bind-apply-helpers@^1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz#4b5428c222be985d79c3d82657479dbe0b59b2d6"
integrity sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==
dependencies:
es-errors "^1.3.0"
function-bind "^1.1.2"
callsites@^3.0.0:
version "3.1.0"
resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73"
@ -571,6 +593,13 @@ color2k@^2.0.2:
resolved "https://registry.yarnpkg.com/color2k/-/color2k-2.0.3.tgz#a771244f6b6285541c82aa65ff0a0c624046e533"
integrity sha512-zW190nQTIoXcGCaU08DvVNFTmQhUpnJfVuAKfWqUQkflXKpaDdpaYoM0iluLS9lgJNHyBF58KKA2FBEwkD7wog==
combined-stream@^1.0.8:
version "1.0.8"
resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f"
integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==
dependencies:
delayed-stream "~1.0.0"
convert-source-map@^1.5.0:
version "1.9.0"
resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.9.0.tgz#7faae62353fb4213366d0ca98358d22e8368b05f"
@ -606,6 +635,11 @@ debug@^4.3.1:
dependencies:
ms "^2.1.3"
delayed-stream@~1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619"
integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==
dequal@^2.0.3:
version "2.0.3"
resolved "https://registry.yarnpkg.com/dequal/-/dequal-2.0.3.tgz#2644214f1997d39ed0ee0ece72335490a7ac67be"
@ -621,6 +655,15 @@ detect-node-es@^1.1.0:
resolved "https://registry.yarnpkg.com/detect-node-es/-/detect-node-es-1.1.0.tgz#163acdf643330caa0b4cd7c21e7ee7755d6fa493"
integrity sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==
dunder-proto@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/dunder-proto/-/dunder-proto-1.0.1.tgz#d7ae667e1dc83482f8b70fd0f6eefc50da30f58a"
integrity sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==
dependencies:
call-bind-apply-helpers "^1.0.1"
es-errors "^1.3.0"
gopd "^1.2.0"
error-ex@^1.3.1:
version "1.3.4"
resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.4.tgz#b3a8d8bb6f92eecc1629e3e27d3c8607a8a32414"
@ -628,6 +671,33 @@ error-ex@^1.3.1:
dependencies:
is-arrayish "^0.2.1"
es-define-property@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/es-define-property/-/es-define-property-1.0.1.tgz#983eb2f9a6724e9303f61addf011c72e09e0b0fa"
integrity sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==
es-errors@^1.3.0:
version "1.3.0"
resolved "https://registry.yarnpkg.com/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f"
integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==
es-object-atoms@^1.0.0, es-object-atoms@^1.1.1:
version "1.1.1"
resolved "https://registry.yarnpkg.com/es-object-atoms/-/es-object-atoms-1.1.1.tgz#1c4f2c4837327597ce69d2ca190a7fdd172338c1"
integrity sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==
dependencies:
es-errors "^1.3.0"
es-set-tostringtag@^2.1.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz#f31dbbe0c183b00a6d26eb6325c810c0fd18bd4d"
integrity sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==
dependencies:
es-errors "^1.3.0"
get-intrinsic "^1.2.6"
has-tostringtag "^1.0.2"
hasown "^2.0.2"
escape-string-regexp@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34"
@ -645,6 +715,22 @@ focus-lock@^1.3.6:
dependencies:
tslib "^2.0.3"
follow-redirects@^1.15.11:
version "1.15.11"
resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.11.tgz#777d73d72a92f8ec4d2e410eb47352a56b8e8340"
integrity sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==
form-data@^4.0.5:
version "4.0.5"
resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.5.tgz#b49e48858045ff4cbf6b03e1805cebcad3679053"
integrity sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==
dependencies:
asynckit "^0.4.0"
combined-stream "^1.0.8"
es-set-tostringtag "^2.1.0"
hasown "^2.0.2"
mime-types "^2.1.12"
framer-motion@^12.34.3:
version "12.34.3"
resolved "https://registry.yarnpkg.com/framer-motion/-/framer-motion-12.34.3.tgz#946f716bfef710d564bf721f4f364274f6278fd4"
@ -666,11 +752,52 @@ function-bind@^1.1.2:
resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c"
integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==
get-intrinsic@^1.2.6:
version "1.3.0"
resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.3.0.tgz#743f0e3b6964a93a5491ed1bffaae054d7f98d01"
integrity sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==
dependencies:
call-bind-apply-helpers "^1.0.2"
es-define-property "^1.0.1"
es-errors "^1.3.0"
es-object-atoms "^1.1.1"
function-bind "^1.1.2"
get-proto "^1.0.1"
gopd "^1.2.0"
has-symbols "^1.1.0"
hasown "^2.0.2"
math-intrinsics "^1.1.0"
get-nonce@^1.0.0:
version "1.0.1"
resolved "https://registry.yarnpkg.com/get-nonce/-/get-nonce-1.0.1.tgz#fdf3f0278073820d2ce9426c18f07481b1e0cdf3"
integrity sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==
get-proto@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/get-proto/-/get-proto-1.0.1.tgz#150b3f2743869ef3e851ec0c49d15b1d14d00ee1"
integrity sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==
dependencies:
dunder-proto "^1.0.1"
es-object-atoms "^1.0.0"
gopd@^1.2.0:
version "1.2.0"
resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.2.0.tgz#89f56b8217bdbc8802bd299df6d7f1081d7e51a1"
integrity sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==
has-symbols@^1.0.3, has-symbols@^1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.1.0.tgz#fc9c6a783a084951d0b971fe1018de813707a338"
integrity sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==
has-tostringtag@^1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.2.tgz#2cdc42d40bef2e5b4eeab7c01a73c54ce7ab5abc"
integrity sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==
dependencies:
has-symbols "^1.0.3"
hasown@^2.0.2:
version "2.0.2"
resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.2.tgz#003eaf91be7adc372e84ec59dc37252cedb80003"
@ -720,6 +847,11 @@ json-parse-even-better-errors@^2.3.0:
resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d"
integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==
keycloak-js@^26.2.3:
version "26.2.3"
resolved "https://registry.yarnpkg.com/keycloak-js/-/keycloak-js-26.2.3.tgz#f68a7dae060de6a0f87bb6a378d57381cc617c5a"
integrity sha512-widjzw/9T6bHRgEp6H/Se3NCCarU7u5CwFKBcwtu7xfA1IfdZb+7Q7/KGusAnBo34Vtls8Oz9vzSqkQvQ7+b4Q==
lines-and-columns@^1.1.6:
version "1.2.4"
resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632"
@ -737,6 +869,23 @@ loose-envify@^1.4.0:
dependencies:
js-tokens "^3.0.0 || ^4.0.0"
math-intrinsics@^1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/math-intrinsics/-/math-intrinsics-1.1.0.tgz#a0dd74be81e2aa5c2f27e65ce283605ee4e2b7f9"
integrity sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==
mime-db@1.52.0:
version "1.52.0"
resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70"
integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==
mime-types@^2.1.12:
version "2.1.35"
resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a"
integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==
dependencies:
mime-db "1.52.0"
motion-dom@^12.34.3:
version "12.34.3"
resolved "https://registry.yarnpkg.com/motion-dom/-/motion-dom-12.34.3.tgz#56224109a20bf2cb38277bfaedeeda5151ce369d"
@ -843,6 +992,11 @@ prop-types@^15.6.2:
object-assign "^4.1.1"
react-is "^16.13.1"
proxy-from-env@^1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2"
integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==
react-clientside-effect@^1.2.7:
version "1.2.8"
resolved "https://registry.yarnpkg.com/react-clientside-effect/-/react-clientside-effect-1.2.8.tgz#0b90a9d7b2a1823a3a10ed1ea3f651f7e0301cb7"