From e92821b763ed19850464d0dcea1a64c13a02ead4 Mon Sep 17 00:00:00 2001 From: Belmin Mujan Date: Fri, 29 Nov 2024 16:37:11 +0100 Subject: [PATCH 01/21] Converter base shell from js to ts --- .../{cypress.config.js => cypress.config.ts} | 0 .../src/components/AuthorizedRoute/index.tsx | 20 +++++-- .../base-shell/src/containers/App/index.tsx | 12 +++-- .../Layout/{index.jsx => index.tsx} | 33 +++++++----- packages/base-shell/src/index.ts | 6 +++ .../src/providers/AddToHomeScreen/Context.jsx | 5 -- .../src/providers/AddToHomeScreen/Context.tsx | 14 +++++ .../{Provider.jsx => Provider.tsx} | 15 ++++-- .../AddToHomeScreen/{index.jsx => index.tsx} | 0 .../base-shell/src/providers/Auth/Context.tsx | 15 +++++- .../Auth/{Provider.jsx => Provider.tsx} | 16 ++++-- .../src/providers/Locale/Context.jsx | 5 -- .../src/providers/Locale/Context.tsx | 10 ++++ .../Locale/{Provider.jsx => Provider.tsx} | 8 ++- .../base-shell/src/providers/Locale/index.jsx | 9 ---- .../base-shell/src/providers/Locale/index.tsx | 13 +++++ .../src/providers/Online/Context.jsx | 5 -- .../src/providers/Online/Context.tsx | 5 ++ .../src/providers/Online/Provider.jsx | 13 ----- .../src/providers/Online/Provider.tsx | 19 +++++++ .../providers/Online/{index.jsx => index.tsx} | 8 ++- .../src/providers/SimpleValues/Context.jsx | 5 -- .../src/providers/SimpleValues/Context.tsx | 36 +++++++++++++ .../{Provider.jsx => Provider.tsx} | 28 +++++++--- .../src/providers/SimpleValues/index.jsx | 13 ----- .../src/providers/SimpleValues/index.tsx | 19 +++++++ .../src/providers/Update/Context.jsx | 5 -- .../src/providers/Update/Context.tsx | 15 ++++++ .../src/providers/Update/Provider.jsx | 38 -------------- .../src/providers/Update/Provider.tsx | 41 +++++++++++++++ .../providers/Update/{index.jsx => index.tsx} | 6 ++- .../src/providers/{index.js => index.ts} | 0 .../src/utils/{config.js => config.ts} | 2 +- .../src/utils/{index.js => index.ts} | 0 .../src/utils/{locale.js => locale.ts} | 52 ++++++++++--------- .../{vite.config.js => vite.config.ts} | 0 36 files changed, 327 insertions(+), 164 deletions(-) rename packages/base-shell/{cypress.config.js => cypress.config.ts} (100%) rename packages/base-shell/src/containers/Layout/{index.jsx => index.tsx} (77%) delete mode 100644 packages/base-shell/src/providers/AddToHomeScreen/Context.jsx create mode 100644 packages/base-shell/src/providers/AddToHomeScreen/Context.tsx rename packages/base-shell/src/providers/AddToHomeScreen/{Provider.jsx => Provider.tsx} (63%) rename packages/base-shell/src/providers/AddToHomeScreen/{index.jsx => index.tsx} (100%) rename packages/base-shell/src/providers/Auth/{Provider.jsx => Provider.tsx} (74%) delete mode 100644 packages/base-shell/src/providers/Locale/Context.jsx create mode 100644 packages/base-shell/src/providers/Locale/Context.tsx rename packages/base-shell/src/providers/Locale/{Provider.jsx => Provider.tsx} (77%) delete mode 100644 packages/base-shell/src/providers/Locale/index.jsx create mode 100644 packages/base-shell/src/providers/Locale/index.tsx delete mode 100644 packages/base-shell/src/providers/Online/Context.jsx create mode 100644 packages/base-shell/src/providers/Online/Context.tsx delete mode 100644 packages/base-shell/src/providers/Online/Provider.jsx create mode 100644 packages/base-shell/src/providers/Online/Provider.tsx rename packages/base-shell/src/providers/Online/{index.jsx => index.tsx} (50%) delete mode 100644 packages/base-shell/src/providers/SimpleValues/Context.jsx create mode 100644 packages/base-shell/src/providers/SimpleValues/Context.tsx rename packages/base-shell/src/providers/SimpleValues/{Provider.jsx => Provider.tsx} (68%) delete mode 100644 packages/base-shell/src/providers/SimpleValues/index.jsx create mode 100644 packages/base-shell/src/providers/SimpleValues/index.tsx delete mode 100644 packages/base-shell/src/providers/Update/Context.jsx create mode 100644 packages/base-shell/src/providers/Update/Context.tsx delete mode 100644 packages/base-shell/src/providers/Update/Provider.jsx create mode 100644 packages/base-shell/src/providers/Update/Provider.tsx rename packages/base-shell/src/providers/Update/{index.jsx => index.tsx} (57%) rename packages/base-shell/src/providers/{index.js => index.ts} (100%) rename packages/base-shell/src/utils/{config.js => config.ts} (73%) rename packages/base-shell/src/utils/{index.js => index.ts} (100%) rename packages/base-shell/src/utils/{locale.js => locale.ts} (64%) rename packages/base-shell/{vite.config.js => vite.config.ts} (100%) diff --git a/packages/base-shell/cypress.config.js b/packages/base-shell/cypress.config.ts similarity index 100% rename from packages/base-shell/cypress.config.js rename to packages/base-shell/cypress.config.ts diff --git a/packages/base-shell/src/components/AuthorizedRoute/index.tsx b/packages/base-shell/src/components/AuthorizedRoute/index.tsx index e5457a983..687c565f9 100644 --- a/packages/base-shell/src/components/AuthorizedRoute/index.tsx +++ b/packages/base-shell/src/components/AuthorizedRoute/index.tsx @@ -1,11 +1,23 @@ import { Navigate, useLocation } from "react-router-dom"; -import { AppConfig, useAuth, useConfig } from "@ecronix/base-shell"; +import { useAuth, useConfig } from "@ecronix/base-shell"; -export function AuthorizedRoute({ children }: { children: React.ReactNode }) { - const { appConfig } = useConfig() +/** + * @description + * A component that ensures only authenticated user can access page wrapped by this component + * + * @param {React.ReactNode} children - The content to render if the user is authenticated. + * @returns {React.ReactNode} The rendered children or a redirect to the sign-in page. + */ + +export function AuthorizedRoute({ + children, +}: { + children: React.ReactNode; +}): React.ReactNode { + const { appConfig } = useConfig(); const { auth: authConfig } = appConfig || {}; const { signInURL = "/signin" } = authConfig || {}; - const { auth } = useAuth() + const { auth } = useAuth(); const location = useLocation(); if (auth.isAuthenticated) { diff --git a/packages/base-shell/src/containers/App/index.tsx b/packages/base-shell/src/containers/App/index.tsx index 4572478e3..1aa427737 100644 --- a/packages/base-shell/src/containers/App/index.tsx +++ b/packages/base-shell/src/containers/App/index.tsx @@ -11,15 +11,19 @@ export interface AppConfig { LandingPage?: React.ComponentType; }; components?: { + Menu?: React.ComponentType; Loading?: React.ComponentType; }; containers?: { AppContainer?: React.ComponentType; + LayoutContainer?: React.ComponentType; }; [key: string]: any; } -export const AppContainer: React.FC = ({ config: appConfig }) => { +export const AppContainer: React.FC = ({ + config: appConfig, +}) => { const config: AppConfig = { ...appConfig }; const { pages, components, containers } = config; const { LandingPage = false } = pages || {}; @@ -32,14 +36,12 @@ export const AppContainer: React.FC = ({ config: appConfig }) - {LandingPage && ( - } /> - )} + {LandingPage && } />} }> - + } /> diff --git a/packages/base-shell/src/containers/Layout/index.jsx b/packages/base-shell/src/containers/Layout/index.tsx similarity index 77% rename from packages/base-shell/src/containers/Layout/index.jsx rename to packages/base-shell/src/containers/Layout/index.tsx index 70712ceea..639c09637 100644 --- a/packages/base-shell/src/containers/Layout/index.jsx +++ b/packages/base-shell/src/containers/Layout/index.tsx @@ -1,7 +1,12 @@ import React, { Suspense, useEffect, useState } from "react"; import { useRoutes } from "react-router-dom"; import { IntlProvider } from "react-intl"; -import { useLocale, useConfig, getLocaleMessages } from "@ecronix/base-shell"; +import { + useLocale, + useConfig, + getLocaleMessages, + AppConfig, +} from "@ecronix/base-shell"; import { AddToHomeScreenProvider, AuthProvider, @@ -10,9 +15,10 @@ import { SimpleValuesProvider, LocaleProvider, } from "@ecronix/base-shell"; +import { LocaleContextType } from "@ecronix/base-shell/providers/Locale/Context"; export const LayoutContent = ({ appConfig = {} }) => { - const [messages, setMessages] = useState([]); + const [messages, setMessages] = useState>(); const { components, routes = [], @@ -21,36 +27,39 @@ export const LayoutContent = ({ appConfig = {} }) => { getDefaultRoutes, auth, update, - } = appConfig || {}; + }: AppConfig = appConfig || {}; const { persistKey } = auth || {}; const { checkInterval = 5000 } = update || {}; const { Menu, Loading = () =>
Loading...
} = components || {}; const { locales, onError } = confLocale || {}; const { LayoutContainer = React.Fragment } = containers || {}; const defaultRoutes = getDefaultRoutes ? getDefaultRoutes(appConfig) : []; - const { locale = {} } = useLocale(); + const { locale }: LocaleContextType = useLocale(); useEffect(() => { const loadPolyfills = async () => { //loadLocalePolyfill(locale) - if (locale.locales && locale.locales.length > 0) { - for (let i = 0; i < locales.length; i++) { - const l = locales[i]; - if (l.locale === locale) { - if (l.loadData) { - await l.loadData; - } + // if (locale.locales && locale.locales.length > 0) { + for (let i = 0; i < locales.length; i++) { + const l = locales[i]; + if (l.locale === locale) { + if (l.loadData) { + await l.loadData; } } } + // } }; loadPolyfills(); }, [locale, locales]); useEffect(() => { const loadMessages = async () => { - const messages = await getLocaleMessages(locale, locales); + const messages: Record = await getLocaleMessages( + locale, + locales + ); setMessages(messages); }; loadMessages(); diff --git a/packages/base-shell/src/index.ts b/packages/base-shell/src/index.ts index 4e4f9b730..2d6d30f2e 100644 --- a/packages/base-shell/src/index.ts +++ b/packages/base-shell/src/index.ts @@ -2,3 +2,9 @@ export * from "./components"; export * from "./containers"; export * from "./utils"; export * from "./providers"; + +declare global { + interface Window { + update?: () => void; + } +} diff --git a/packages/base-shell/src/providers/AddToHomeScreen/Context.jsx b/packages/base-shell/src/providers/AddToHomeScreen/Context.jsx deleted file mode 100644 index 017737531..000000000 --- a/packages/base-shell/src/providers/AddToHomeScreen/Context.jsx +++ /dev/null @@ -1,5 +0,0 @@ -import React from "react"; - -const Context = React.createContext(null); - -export default Context; diff --git a/packages/base-shell/src/providers/AddToHomeScreen/Context.tsx b/packages/base-shell/src/providers/AddToHomeScreen/Context.tsx new file mode 100644 index 000000000..19e1d8146 --- /dev/null +++ b/packages/base-shell/src/providers/AddToHomeScreen/Context.tsx @@ -0,0 +1,14 @@ +import React from "react"; +import { AddToHomeScreenStateProps } from "./Provider"; +export interface AddToHomeScreenContextType { + deferredPrompt?: Event | undefined; + isAppInstallable?: boolean; + isAppInstalled?: boolean; + setA2HPState: React.Dispatch>; +} + +const Context = React.createContext( + undefined +); + +export default Context; diff --git a/packages/base-shell/src/providers/AddToHomeScreen/Provider.jsx b/packages/base-shell/src/providers/AddToHomeScreen/Provider.tsx similarity index 63% rename from packages/base-shell/src/providers/AddToHomeScreen/Provider.jsx rename to packages/base-shell/src/providers/AddToHomeScreen/Provider.tsx index f6eb5df80..cba7fa4ed 100644 --- a/packages/base-shell/src/providers/AddToHomeScreen/Provider.jsx +++ b/packages/base-shell/src/providers/AddToHomeScreen/Provider.tsx @@ -1,14 +1,21 @@ import React, { useState } from "react"; import Context from "./Context"; -const initialState = { - deferredPrompt: () => {}, +const initialState: AddToHomeScreenStateProps = { + deferredPrompt: undefined, isAppInstallable: false, isAppInstalled: false, }; -const Provider = ({ children }) => { - const [state, setA2HPState] = useState(initialState); +export type AddToHomeScreenStateProps = { + deferredPrompt?: Event | undefined; + isAppInstallable?: boolean; + isAppInstalled?: boolean; +}; + +const Provider: React.FC<{ children: React.ReactNode }> = ({ children }) => { + const [state, setA2HPState] = + useState(initialState); window.addEventListener("beforeinstallprompt", (e) => { // Prevent Chrome 67 and earlier from automatically showing the prompt diff --git a/packages/base-shell/src/providers/AddToHomeScreen/index.jsx b/packages/base-shell/src/providers/AddToHomeScreen/index.tsx similarity index 100% rename from packages/base-shell/src/providers/AddToHomeScreen/index.jsx rename to packages/base-shell/src/providers/AddToHomeScreen/index.tsx diff --git a/packages/base-shell/src/providers/Auth/Context.tsx b/packages/base-shell/src/providers/Auth/Context.tsx index c26f7433f..6f3ee4694 100644 --- a/packages/base-shell/src/providers/Auth/Context.tsx +++ b/packages/base-shell/src/providers/Auth/Context.tsx @@ -4,8 +4,21 @@ export interface AuthContextType { auth: { isAuthenticated: boolean; }; + /** + * @description Set auth to provided auth parameter + * @param auth + */ + setAuth: (auth: any) => void; + + /** + * @description Update auth to provided auth parameter + * @param auth + */ + updateAuth: (auth: any) => void; } -const ConfigContext = React.createContext(undefined); +const ConfigContext = React.createContext( + undefined +); export default ConfigContext; diff --git a/packages/base-shell/src/providers/Auth/Provider.jsx b/packages/base-shell/src/providers/Auth/Provider.tsx similarity index 74% rename from packages/base-shell/src/providers/Auth/Provider.jsx rename to packages/base-shell/src/providers/Auth/Provider.tsx index 31118ea0b..da3f2ccb1 100644 --- a/packages/base-shell/src/providers/Auth/Provider.jsx +++ b/packages/base-shell/src/providers/Auth/Provider.tsx @@ -1,7 +1,12 @@ import React, { useEffect, useReducer } from "react"; import Context from "./Context"; -function reducer(state, action) { +type ReducerAction = { + type: string; + auth: any; +}; + +function reducer(state: any, action: ReducerAction) { const { type, auth } = action; switch (type) { case "SET_AUTH": @@ -13,7 +18,10 @@ function reducer(state, action) { } } -const Provider = ({ persistKey = "auth", children }) => { +const Provider: React.FC<{ + children: React.ReactNode; + persistKey: string; +}> = ({ persistKey = "auth", children }) => { const persistAuth = JSON.parse( localStorage.getItem(persistKey)?.replace("undefined", "{}") || "{}" ); @@ -28,11 +36,11 @@ const Provider = ({ persistKey = "auth", children }) => { } }, [auth, persistKey]); - const setAuth = (auth) => { + const setAuth = (auth: any) => { dispatch({ type: "SET_AUTH", auth }); }; - const updateAuth = (auth) => { + const updateAuth = (auth: any) => { dispatch({ type: "UPDATE_AUTH", auth }); }; diff --git a/packages/base-shell/src/providers/Locale/Context.jsx b/packages/base-shell/src/providers/Locale/Context.jsx deleted file mode 100644 index 017737531..000000000 --- a/packages/base-shell/src/providers/Locale/Context.jsx +++ /dev/null @@ -1,5 +0,0 @@ -import React from "react"; - -const Context = React.createContext(null); - -export default Context; diff --git a/packages/base-shell/src/providers/Locale/Context.tsx b/packages/base-shell/src/providers/Locale/Context.tsx new file mode 100644 index 000000000..adb417898 --- /dev/null +++ b/packages/base-shell/src/providers/Locale/Context.tsx @@ -0,0 +1,10 @@ +import React from "react"; + +export interface LocaleContextType { + locale: string; + setLocale: React.Dispatch>; +} + +const Context = React.createContext(undefined); + +export default Context; diff --git a/packages/base-shell/src/providers/Locale/Provider.jsx b/packages/base-shell/src/providers/Locale/Provider.tsx similarity index 77% rename from packages/base-shell/src/providers/Locale/Provider.jsx rename to packages/base-shell/src/providers/Locale/Provider.tsx index 6081107bf..eebf597bd 100644 --- a/packages/base-shell/src/providers/Locale/Provider.jsx +++ b/packages/base-shell/src/providers/Locale/Provider.tsx @@ -1,7 +1,13 @@ import React, { useState, useEffect } from "react"; import Context from "./Context"; -const Provider = ({ +export interface LocaleProviderProps { + children: React.ReactNode; + defaultLocale?: string; + persistKey?: string; +} + +const Provider: React.FC = ({ children, defaultLocale = "en", persistKey = "locale", diff --git a/packages/base-shell/src/providers/Locale/index.jsx b/packages/base-shell/src/providers/Locale/index.jsx deleted file mode 100644 index 3a17a99b1..000000000 --- a/packages/base-shell/src/providers/Locale/index.jsx +++ /dev/null @@ -1,9 +0,0 @@ -import { useContext } from "react"; -import Context from "./Context"; -import Provider from "./Provider"; - -function useLocale() { - return useContext(Context); -} - -export { useLocale, Context as LocaleContext, Provider as LocaleProvider }; diff --git a/packages/base-shell/src/providers/Locale/index.tsx b/packages/base-shell/src/providers/Locale/index.tsx new file mode 100644 index 000000000..c1e30d97b --- /dev/null +++ b/packages/base-shell/src/providers/Locale/index.tsx @@ -0,0 +1,13 @@ +import { useContext } from "react"; +import Context, { LocaleContextType } from "./Context"; +import Provider from "./Provider"; + +function useLocale(): LocaleContextType { + const context = useContext(Context); + if (!context) { + throw new Error("useLocale must be used within a LocaleProvider"); + } + return context; +} + +export { useLocale, Context as LocaleContext, Provider as LocaleProvider }; diff --git a/packages/base-shell/src/providers/Online/Context.jsx b/packages/base-shell/src/providers/Online/Context.jsx deleted file mode 100644 index 017737531..000000000 --- a/packages/base-shell/src/providers/Online/Context.jsx +++ /dev/null @@ -1,5 +0,0 @@ -import React from "react"; - -const Context = React.createContext(null); - -export default Context; diff --git a/packages/base-shell/src/providers/Online/Context.tsx b/packages/base-shell/src/providers/Online/Context.tsx new file mode 100644 index 000000000..13bd85167 --- /dev/null +++ b/packages/base-shell/src/providers/Online/Context.tsx @@ -0,0 +1,5 @@ +import React from "react"; + +const Context = React.createContext(undefined); + +export default Context; diff --git a/packages/base-shell/src/providers/Online/Provider.jsx b/packages/base-shell/src/providers/Online/Provider.jsx deleted file mode 100644 index 6aef7e1e8..000000000 --- a/packages/base-shell/src/providers/Online/Provider.jsx +++ /dev/null @@ -1,13 +0,0 @@ -import React, { useState } from 'react' -import Context from './Context' - -const Provider = ({ children }) => { - const [isOnline, setOnline] = useState(navigator.onLine) - - window.addEventListener('online', () => setOnline(true)) - window.addEventListener('offline', () => setOnline(false)) - - return {children} -} - -export default Provider diff --git a/packages/base-shell/src/providers/Online/Provider.tsx b/packages/base-shell/src/providers/Online/Provider.tsx new file mode 100644 index 000000000..a40bef5e7 --- /dev/null +++ b/packages/base-shell/src/providers/Online/Provider.tsx @@ -0,0 +1,19 @@ +import React, { useState } from "react"; +import Context from "./Context"; + +export interface OnlineProviderProps { + children: React.ReactNode; + defaultLocale?: string; + persistKey?: string; +} + +const Provider: React.FC = ({ children }) => { + const [isOnline, setOnline] = useState(navigator.onLine); + + window.addEventListener("online", () => setOnline(true)); + window.addEventListener("offline", () => setOnline(false)); + + return {children}; +}; + +export default Provider; diff --git a/packages/base-shell/src/providers/Online/index.jsx b/packages/base-shell/src/providers/Online/index.tsx similarity index 50% rename from packages/base-shell/src/providers/Online/index.jsx rename to packages/base-shell/src/providers/Online/index.tsx index 60d773ff9..b17d938ae 100644 --- a/packages/base-shell/src/providers/Online/index.jsx +++ b/packages/base-shell/src/providers/Online/index.tsx @@ -2,8 +2,12 @@ import { useContext } from "react"; import Context from "./Context"; import Provider from "./Provider"; -function useOnline() { - return useContext(Context); +function useOnline(): boolean { + const context = useContext(Context); + if (!context) { + throw new Error("useOnline must be used within a OnlineProvider"); + } + return context; } export { useOnline, Context as OnlineContext, Provider as OnlineProvider }; diff --git a/packages/base-shell/src/providers/SimpleValues/Context.jsx b/packages/base-shell/src/providers/SimpleValues/Context.jsx deleted file mode 100644 index 017737531..000000000 --- a/packages/base-shell/src/providers/SimpleValues/Context.jsx +++ /dev/null @@ -1,5 +0,0 @@ -import React from "react"; - -const Context = React.createContext(null); - -export default Context; diff --git a/packages/base-shell/src/providers/SimpleValues/Context.tsx b/packages/base-shell/src/providers/SimpleValues/Context.tsx new file mode 100644 index 000000000..9f9fee514 --- /dev/null +++ b/packages/base-shell/src/providers/SimpleValues/Context.tsx @@ -0,0 +1,36 @@ +import React from "react"; + +export interface SimpleValuesContextType { + /** + * Sets a value in the context. + * @param params - The parameters to set a value. + * @param params.key - The key to identify the value. + * @param params.value - The value to set. + * @param boolean params.persist - Whether to persist the value (e.g., in local storage). Defaults to 'false'. + */ + setValue: (key: string, value: any, persist?: boolean) => void; + + /** + * Gets a value from the context by key. + * @param key - The key to retrieve the value for. + * @returns The value corresponding to the key. + */ + getValue: (key: string, defaultValue?: any) => string; + + /** + * Clears a value from the context by key. + * @param key - The key to clear the value for. + */ + clearValue: (key: string) => void; + + /** + * Clears all values from the context. + */ + clearAll: () => void; +} + +const Context = React.createContext( + undefined +); + +export default Context; diff --git a/packages/base-shell/src/providers/SimpleValues/Provider.jsx b/packages/base-shell/src/providers/SimpleValues/Provider.tsx similarity index 68% rename from packages/base-shell/src/providers/SimpleValues/Provider.jsx rename to packages/base-shell/src/providers/SimpleValues/Provider.tsx index b9c33a425..ea7ac925a 100644 --- a/packages/base-shell/src/providers/SimpleValues/Provider.jsx +++ b/packages/base-shell/src/providers/SimpleValues/Provider.tsx @@ -1,12 +1,23 @@ import React, { useEffect, useReducer } from "react"; import Context from "./Context"; -function reducer(state, action) { +type ReducerAction = { + type: string; + key?: string; + value?: any; + persist?: boolean; +}; + +function reducer(state: any, action: ReducerAction) { const { type, key, value, persist } = action; switch (type) { case "add": + if (!key) + throw new Error("Reducer Error: Key must be present when adding"); return { ...state, [key]: { value, persist } }; case "clear": + if (!key) + throw new Error("Reducer Error: Key must be present when clearing"); const { [key]: clearedKey, ...rest } = state; return { ...rest }; case "clear_all": @@ -16,7 +27,7 @@ function reducer(state, action) { } } -function getInitState(persistKey) { +function getInitState(persistKey: string) { let persistedValues = {}; try { persistedValues = @@ -29,12 +40,15 @@ function getInitState(persistKey) { return persistedValues; } -const Provider = ({ children, persistKey = "simple_values" }) => { +const Provider: React.FC<{ + children: React.ReactNode; + persistKey?: string; +}> = ({ children, persistKey = "simple_values" }) => { const [state, dispatch] = useReducer(reducer, getInitState(persistKey)); useEffect(() => { try { - const persistValues = {}; + const persistValues: Record = {}; Object.keys(state).map((k) => { if (state[k].persist) { @@ -50,11 +64,11 @@ const Provider = ({ children, persistKey = "simple_values" }) => { } }, [state, persistKey]); - const setValue = (key, value, persist = false) => { + const setValue = (key: string, value: any, persist = false) => { dispatch({ type: "add", key, value, persist }); }; - const getValue = (key, defaultValue) => { + const getValue = (key: string, defaultValue: any) => { if (state[key] !== undefined) { return state[key].value; } else { @@ -62,7 +76,7 @@ const Provider = ({ children, persistKey = "simple_values" }) => { } }; - const clearValue = (key) => { + const clearValue = (key: string) => { dispatch({ type: "clear", key }); }; diff --git a/packages/base-shell/src/providers/SimpleValues/index.jsx b/packages/base-shell/src/providers/SimpleValues/index.jsx deleted file mode 100644 index 1efc4f654..000000000 --- a/packages/base-shell/src/providers/SimpleValues/index.jsx +++ /dev/null @@ -1,13 +0,0 @@ -import { useContext } from "react"; -import Context from "./Context"; -import Provider from "./Provider"; - -function useSimpleValues() { - return useContext(Context); -} - -export { - useSimpleValues, - Context as SimpleValuesContext, - Provider as SimpleValuesProvider, -}; diff --git a/packages/base-shell/src/providers/SimpleValues/index.tsx b/packages/base-shell/src/providers/SimpleValues/index.tsx new file mode 100644 index 000000000..a9b35cb22 --- /dev/null +++ b/packages/base-shell/src/providers/SimpleValues/index.tsx @@ -0,0 +1,19 @@ +import { useContext } from "react"; +import Context, { SimpleValuesContextType } from "./Context"; +import Provider from "./Provider"; + +function useSimpleValues(): SimpleValuesContextType { + const context = useContext(Context); + if (!context) { + throw new Error( + "useSimpleValues must be used within a SimpleValuesProvider" + ); + } + return context; +} + +export { + useSimpleValues, + Context as SimpleValuesContext, + Provider as SimpleValuesProvider, +}; diff --git a/packages/base-shell/src/providers/Update/Context.jsx b/packages/base-shell/src/providers/Update/Context.jsx deleted file mode 100644 index 017737531..000000000 --- a/packages/base-shell/src/providers/Update/Context.jsx +++ /dev/null @@ -1,5 +0,0 @@ -import React from "react"; - -const Context = React.createContext(null); - -export default Context; diff --git a/packages/base-shell/src/providers/Update/Context.tsx b/packages/base-shell/src/providers/Update/Context.tsx new file mode 100644 index 000000000..d4d5e6172 --- /dev/null +++ b/packages/base-shell/src/providers/Update/Context.tsx @@ -0,0 +1,15 @@ +import React from "react"; + +export interface UpdateContextType { + isUpdateAvailable: boolean; + + /** + * @description Update window + * @param registration + */ + runUpdate: (registration: any) => void; +} + +const Context = React.createContext(undefined); + +export default Context; diff --git a/packages/base-shell/src/providers/Update/Provider.jsx b/packages/base-shell/src/providers/Update/Provider.jsx deleted file mode 100644 index af1f528e0..000000000 --- a/packages/base-shell/src/providers/Update/Provider.jsx +++ /dev/null @@ -1,38 +0,0 @@ -import React, { useState, useEffect } from 'react' -import Context from './Context' - -const runUpdate = (registration) => { - try { - if (registration) { - registration.waiting.postMessage({ type: 'SKIP_WAITING' }) - } - if (window.update) { - window.update && window.update() - } - } catch (error) { - console.log(error) - } -} - -const Provider = ({ children, checkInterval }) => { - const [isUpdateAvailable, setUpdateAvailable] = useState(false) - - const checkUpdate = () => { - if (window.update) { - setUpdateAvailable(true) - } else { - setUpdateAvailable(false) - setTimeout(checkUpdate, checkInterval) - } - } - - useEffect(checkUpdate, [checkUpdate]) - - return ( - - {children} - - ) -} - -export default Provider diff --git a/packages/base-shell/src/providers/Update/Provider.tsx b/packages/base-shell/src/providers/Update/Provider.tsx new file mode 100644 index 000000000..d870dbc1c --- /dev/null +++ b/packages/base-shell/src/providers/Update/Provider.tsx @@ -0,0 +1,41 @@ +import React, { useState, useEffect } from "react"; +import Context from "./Context"; + +const runUpdate = (registration: any) => { + try { + if (registration) { + registration.waiting.postMessage({ type: "SKIP_WAITING" }); + } + if (window.update) { + window.update && window.update(); + } + } catch (error) { + console.log(error); + } +}; + +const Provider: React.FC<{ + children: React.ReactNode; + checkInterval: number; +}> = ({ children, checkInterval }) => { + const [isUpdateAvailable, setUpdateAvailable] = useState(false); + + const checkUpdate = () => { + if (window.update) { + setUpdateAvailable(true); + } else { + setUpdateAvailable(false); + setTimeout(checkUpdate, checkInterval); + } + }; + + useEffect(checkUpdate, [checkUpdate]); + + return ( + + {children} + + ); +}; + +export default Provider; diff --git a/packages/base-shell/src/providers/Update/index.jsx b/packages/base-shell/src/providers/Update/index.tsx similarity index 57% rename from packages/base-shell/src/providers/Update/index.jsx rename to packages/base-shell/src/providers/Update/index.tsx index 3e9df510e..75a31ebf4 100644 --- a/packages/base-shell/src/providers/Update/index.jsx +++ b/packages/base-shell/src/providers/Update/index.tsx @@ -3,7 +3,11 @@ import Context from "./Context"; import Provider from "./Provider"; function useUpdate() { - return useContext(Context); + const context = useContext(Context); + if (!context) { + throw new Error("useUpdate must be used within a UpdateProvider"); + } + return context; } export { useUpdate, Context as UpdateContext, Provider as UpdateProvider }; diff --git a/packages/base-shell/src/providers/index.js b/packages/base-shell/src/providers/index.ts similarity index 100% rename from packages/base-shell/src/providers/index.js rename to packages/base-shell/src/providers/index.ts diff --git a/packages/base-shell/src/utils/config.js b/packages/base-shell/src/utils/config.ts similarity index 73% rename from packages/base-shell/src/utils/config.js rename to packages/base-shell/src/utils/config.ts index 19b597cba..b2a551749 100644 --- a/packages/base-shell/src/utils/config.js +++ b/packages/base-shell/src/utils/config.ts @@ -1,4 +1,4 @@ -export const merge = (obj1, obj2) => { +export const merge = (obj1: Record, obj2: Record) => { let temp = { ...obj1, ...obj2 }; Object.keys(temp).forEach((key) => { diff --git a/packages/base-shell/src/utils/index.js b/packages/base-shell/src/utils/index.ts similarity index 100% rename from packages/base-shell/src/utils/index.js rename to packages/base-shell/src/utils/index.ts diff --git a/packages/base-shell/src/utils/locale.js b/packages/base-shell/src/utils/locale.ts similarity index 64% rename from packages/base-shell/src/utils/locale.js rename to packages/base-shell/src/utils/locale.ts index 8221cff65..e059f7bf2 100644 --- a/packages/base-shell/src/utils/locale.js +++ b/packages/base-shell/src/utils/locale.ts @@ -1,6 +1,6 @@ //import areIntlLocalesSupported from 'intl-locales-supported' //import intl from 'intl' -import { defineMessages } from 'react-intl' +import { defineMessages } from "react-intl"; /* const loadLocalePolyfill = (locale) => { @@ -28,49 +28,53 @@ const loadLocalePolyfill = (locale) => { const getUsersPreferredLanguages = () => { if (navigator.languages !== undefined) { - return navigator.languages + return navigator.languages; } else if (navigator.language !== undefined) { - return [navigator.language] + return [navigator.language]; } else { - return undefined + return undefined; } -} +}; -const parseLanguages = (acceptedLangs, defaultLang = false) => { - const userPref = getUsersPreferredLanguages() +const parseLanguages = (acceptedLangs: string[], defaultLang: string = "") => { + const userPref = getUsersPreferredLanguages(); const match = userPref ? userPref.find((lang) => acceptedLangs.includes(lang)) - : undefined + : undefined; - if (match === undefined && defaultLang !== false) { - return defaultLang + if (match === undefined && defaultLang !== "") { + return defaultLang; } - return match -} + return match; +}; -const getLocaleMessages = async (l, ls) => { +const getLocaleMessages = async ( + l: string, + ls: { locale: string; messages: any }[] +) => { if (ls) { for (let i = 0; i < ls.length; i++) { - if (ls[i]['locale'] === l) { - const { default: messages } = await defineMessages(ls[i].messages) + if (ls[i]["locale"] === l) { + const { default: messages } = await defineMessages(ls[i].messages); - return messages + return messages; } } } - return {} -} + return {}; +}; -const formatMessage = (messages = [], id) => { - return messages[id] || id -} +// TODO possibly unused - unused in base-shell +const formatMessage = (messages = [], id: any) => { + return messages[id] || id; +}; export { - formatMessage, + // formatMessage, getLocaleMessages, //loadLocalePolyfill - parseLanguages -} \ No newline at end of file + parseLanguages, +}; diff --git a/packages/base-shell/vite.config.js b/packages/base-shell/vite.config.ts similarity index 100% rename from packages/base-shell/vite.config.js rename to packages/base-shell/vite.config.ts From f292d3abd67b562211af45cb14047739416251ef Mon Sep 17 00:00:00 2001 From: Belmin Mujan Date: Sat, 30 Nov 2024 13:21:49 +0100 Subject: [PATCH 02/21] Material ui in progress --- .../{cypress.config.js => cypress.config.ts} | 0 .../{getCropImage.jsx => getCropImage.tsx} | 23 +++++-- .../{index.jsx => index.tsx} | 63 +++++++++++++------ .../LayoutContainer/{index.jsx => index.tsx} | 10 ++- .../containers/Menu/{index.jsx => index.tsx} | 0 .../ResponsiveMenu/{index.jsx => index.tsx} | 20 +++++- .../src/containers/{index.js => index.ts} | 0 .../providers/Dialogs/Question/Context.jsx | 5 -- .../providers/Dialogs/Question/Context.tsx | 27 ++++++++ .../Question/{Provider.jsx => Provider.tsx} | 6 +- .../Dialogs/Question/{index.jsx => index.tsx} | 8 ++- .../src/providers/Menu/Context.jsx | 5 -- .../src/providers/Menu/Context.tsx | 12 ++++ .../Menu/{Provider.jsx => Provider.tsx} | 27 ++++++-- .../providers/Menu/{index.jsx => index.tsx} | 0 .../src/providers/Menu/store/actions.jsx | 36 ----------- .../src/providers/Menu/store/actions.tsx | 36 +++++++++++ .../Menu/store/{reducer.jsx => reducer.tsx} | 22 ++++++- .../Menu/store/{types.jsx => types.tsx} | 0 .../src/providers/Theme/Context.jsx | 5 -- .../src/providers/Theme/Context.tsx | 23 +++++++ .../Theme/{Provider.jsx => Provider.tsx} | 13 +++- .../src/providers/Theme/index.jsx | 9 --- .../src/providers/Theme/index.tsx | 14 +++++ .../src/providers/VirtualLists/Context.jsx | 5 -- .../src/providers/VirtualLists/Context.tsx | 21 +++++++ .../{Provider.jsx => Provider.tsx} | 14 +++-- .../VirtualLists/{index.jsx => index.tsx} | 9 ++- .../src/providers/{index.js => index.ts} | 0 .../src/utils/{index.js => index.ts} | 7 ++- 30 files changed, 309 insertions(+), 111 deletions(-) rename packages/material-ui-shell/{cypress.config.js => cypress.config.ts} (100%) rename packages/material-ui-shell/src/containers/ImageUploadDialog/{getCropImage.jsx => getCropImage.tsx} (82%) rename packages/material-ui-shell/src/containers/ImageUploadDialog/{index.jsx => index.tsx} (80%) rename packages/material-ui-shell/src/containers/LayoutContainer/{index.jsx => index.tsx} (93%) rename packages/material-ui-shell/src/containers/Menu/{index.jsx => index.tsx} (100%) rename packages/material-ui-shell/src/containers/ResponsiveMenu/{index.jsx => index.tsx} (86%) rename packages/material-ui-shell/src/containers/{index.js => index.ts} (100%) delete mode 100644 packages/material-ui-shell/src/providers/Dialogs/Question/Context.jsx create mode 100644 packages/material-ui-shell/src/providers/Dialogs/Question/Context.tsx rename packages/material-ui-shell/src/providers/Dialogs/Question/{Provider.jsx => Provider.tsx} (81%) rename packages/material-ui-shell/src/providers/Dialogs/Question/{index.jsx => index.tsx} (56%) delete mode 100644 packages/material-ui-shell/src/providers/Menu/Context.jsx create mode 100644 packages/material-ui-shell/src/providers/Menu/Context.tsx rename packages/material-ui-shell/src/providers/Menu/{Provider.jsx => Provider.tsx} (79%) rename packages/material-ui-shell/src/providers/Menu/{index.jsx => index.tsx} (100%) delete mode 100644 packages/material-ui-shell/src/providers/Menu/store/actions.jsx create mode 100644 packages/material-ui-shell/src/providers/Menu/store/actions.tsx rename packages/material-ui-shell/src/providers/Menu/store/{reducer.jsx => reducer.tsx} (57%) rename packages/material-ui-shell/src/providers/Menu/store/{types.jsx => types.tsx} (100%) delete mode 100644 packages/material-ui-shell/src/providers/Theme/Context.jsx create mode 100644 packages/material-ui-shell/src/providers/Theme/Context.tsx rename packages/material-ui-shell/src/providers/Theme/{Provider.jsx => Provider.tsx} (88%) delete mode 100644 packages/material-ui-shell/src/providers/Theme/index.jsx create mode 100644 packages/material-ui-shell/src/providers/Theme/index.tsx delete mode 100644 packages/material-ui-shell/src/providers/VirtualLists/Context.jsx create mode 100644 packages/material-ui-shell/src/providers/VirtualLists/Context.tsx rename packages/material-ui-shell/src/providers/VirtualLists/{Provider.jsx => Provider.tsx} (63%) rename packages/material-ui-shell/src/providers/VirtualLists/{index.jsx => index.tsx} (55%) rename packages/material-ui-shell/src/providers/{index.js => index.ts} (100%) rename packages/material-ui-shell/src/utils/{index.js => index.ts} (84%) diff --git a/packages/material-ui-shell/cypress.config.js b/packages/material-ui-shell/cypress.config.ts similarity index 100% rename from packages/material-ui-shell/cypress.config.js rename to packages/material-ui-shell/cypress.config.ts diff --git a/packages/material-ui-shell/src/containers/ImageUploadDialog/getCropImage.jsx b/packages/material-ui-shell/src/containers/ImageUploadDialog/getCropImage.tsx similarity index 82% rename from packages/material-ui-shell/src/containers/ImageUploadDialog/getCropImage.jsx rename to packages/material-ui-shell/src/containers/ImageUploadDialog/getCropImage.tsx index d28626133..648a91507 100644 --- a/packages/material-ui-shell/src/containers/ImageUploadDialog/getCropImage.jsx +++ b/packages/material-ui-shell/src/containers/ImageUploadDialog/getCropImage.tsx @@ -1,4 +1,4 @@ -const createImage = (url) => +const createImage = (url: string): Promise => new Promise((resolve, reject) => { const image = new Image() image.addEventListener('load', () => resolve(image)) @@ -7,17 +7,28 @@ const createImage = (url) => image.src = url }) -function getRadianAngle(degreeValue) { +function getRadianAngle(degreeValue: number): number { return (degreeValue * Math.PI) / 180 } +export interface IPixelCrop { + width: number + height: number + x: number + y: number +} + /** * This function was adapted from the one in the ReadMe of https://github.com/DominicTobias/react-image-crop - * @param {File} image - Image File url + * @param {string} imageSrc - Image File url * @param {Object} pixelCrop - pixelCrop Object provided by react-easy-crop * @param {number} rotation - optional rotation parameter */ -export default async function getCroppedImg(imageSrc, pixelCrop, rotation = 0) { +export default async function getCroppedImg( + imageSrc: string, + pixelCrop: IPixelCrop, + rotation: number = 0 +): Promise { const image = await createImage(imageSrc) const canvas = document.createElement('canvas') const ctx = canvas.getContext('2d') @@ -30,6 +41,10 @@ export default async function getCroppedImg(imageSrc, pixelCrop, rotation = 0) { canvas.width = safeArea canvas.height = safeArea + if (!ctx) { + throw new Error('Canvas context is null') + } + // translate canvas context to a central location on image to allow rotating around the center. ctx.translate(safeArea / 2, safeArea / 2) ctx.rotate(getRadianAngle(rotation)) diff --git a/packages/material-ui-shell/src/containers/ImageUploadDialog/index.jsx b/packages/material-ui-shell/src/containers/ImageUploadDialog/index.tsx similarity index 80% rename from packages/material-ui-shell/src/containers/ImageUploadDialog/index.jsx rename to packages/material-ui-shell/src/containers/ImageUploadDialog/index.tsx index 60c629cca..c2fbbdfe8 100644 --- a/packages/material-ui-shell/src/containers/ImageUploadDialog/index.jsx +++ b/packages/material-ui-shell/src/containers/ImageUploadDialog/index.tsx @@ -1,6 +1,6 @@ import Cropper from 'react-easy-crop' -import React, { useState, useCallback, useEffect } from 'react' -import getCroppedImg from './getCropImage' +import React, { useState, useCallback, useEffect, Ref } from 'react' +import getCroppedImg, { IPixelCrop } from './getCropImage' import { useIntl } from 'react-intl' import { useTheme } from '@emotion/react' import { @@ -13,15 +13,20 @@ import { Slide, useMediaQuery, CircularProgress, + SlideProps, } from '@mui/material' import { CloudUpload } from '@mui/icons-material' +import { TransitionProps } from '@mui/material/transitions' -const Transition = React.forwardRef((props, ref) => ( - -)) +type TransitionComponentProps = TransitionProps & { + children: React.ReactElement +} +const Transition = React.forwardRef( + (props, ref) => +) -const getFiles = (ev) => { +const getFiles = (ev: React.DragEvent) => { const files = [] if (ev.dataTransfer.items) { // Use DataTransferItemList interface to access the file(s) @@ -41,30 +46,46 @@ const getFiles = (ev) => { return files } +type ImageUploadDialogContainerProps = { + isOpen: boolean + handleClose: () => void + handleCropSubmit: (image: string) => void + path: string + cropperProps: any +} + export function ImageUploadDialogContainer({ isOpen = false, handleClose, handleCropSubmit, path, cropperProps, -}) { +}: ImageUploadDialogContainerProps) { const intl = useIntl() const theme = useTheme() const [isOver, setIsOver] = useState(false) - const [file, setFile] = useState(false) + const [file, setFile] = useState(null) const fullScreen = useMediaQuery((theme) => theme.breakpoints.down('sm')) - const [croppedImage, setCroppedImage] = useState(false) - const [crop, setCrop] = useState({ x: 0, y: 0 }) + const [croppedImage, setCroppedImage] = useState(null) + const [crop, setCrop] = useState>({ + x: 0, + y: 0, + }) const [zoom, setZoom] = useState(1) - const [croppedAreaPixels, setCroppedAreaPixels] = useState(null) + const [croppedAreaPixels, setCroppedAreaPixels] = useState( + null + ) - const onCropComplete = useCallback((croppedArea, croppedAreaPixels) => { - setCroppedAreaPixels(croppedAreaPixels) - }, []) + const onCropComplete = useCallback( + (_croppedArea: never, croppedAreaPixels: IPixelCrop) => { + setCroppedAreaPixels(croppedAreaPixels) + }, + [] + ) const clear = () => { - setCroppedImage(false) - setFile(false) + setCroppedImage(null) + setFile(null) setCroppedAreaPixels(null) setIsOver(false) } @@ -76,6 +97,10 @@ export function ImageUploadDialogContainer({ const showCroppedImage = useCallback(async () => { try { + if (!file || !croppedAreaPixels) { + throw new Error('Invalid parameters when showing cropped image') + } + const croppedImage = await getCroppedImg(file, croppedAreaPixels, 0) setCroppedImage(croppedImage) @@ -120,10 +145,10 @@ export function ImageUploadDialogContainer({ var reader = new FileReader() reader.onload = (e) => { - setFile(e.target.result) + setFile(e.target?.result as string) } - reader.readAsDataURL(files[0]) + reader.readAsDataURL(files[0]!) } }} onDragOver={(e) => { @@ -163,7 +188,7 @@ export function ImageUploadDialogContainer({ var reader = new FileReader() reader.onload = (e) => { - setFile(e.target.result) + setFile(e.target?.result as string) } reader.readAsDataURL(e.target.files[0]) diff --git a/packages/material-ui-shell/src/containers/LayoutContainer/index.jsx b/packages/material-ui-shell/src/containers/LayoutContainer/index.tsx similarity index 93% rename from packages/material-ui-shell/src/containers/LayoutContainer/index.jsx rename to packages/material-ui-shell/src/containers/LayoutContainer/index.tsx index d8ee6d7ff..791cd6f94 100644 --- a/packages/material-ui-shell/src/containers/LayoutContainer/index.jsx +++ b/packages/material-ui-shell/src/containers/LayoutContainer/index.tsx @@ -22,7 +22,9 @@ import '@fontsource/roboto/400.css' import '@fontsource/roboto/500.css' import '@fontsource/roboto/700.css' -const LayoutContent = ({ children }) => { +const LayoutContent: React.FC<{ children: React.ReactNode }> = ({ + children, +}) => { const intl = useIntl() const { appConfig } = useConfig() const { themeID, isDarkMode, isRTL } = useTheme() @@ -77,7 +79,11 @@ const LayoutContent = ({ children }) => { ) } -export function LayoutContainer({ children }) { +type LCProps = { + children: React.ReactNode +} + +export function LayoutContainer({ children }: LCProps): JSX.Element { const { appConfig } = useConfig() return ( diff --git a/packages/material-ui-shell/src/containers/Menu/index.jsx b/packages/material-ui-shell/src/containers/Menu/index.tsx similarity index 100% rename from packages/material-ui-shell/src/containers/Menu/index.jsx rename to packages/material-ui-shell/src/containers/Menu/index.tsx diff --git a/packages/material-ui-shell/src/containers/ResponsiveMenu/index.jsx b/packages/material-ui-shell/src/containers/ResponsiveMenu/index.tsx similarity index 86% rename from packages/material-ui-shell/src/containers/ResponsiveMenu/index.jsx rename to packages/material-ui-shell/src/containers/ResponsiveMenu/index.tsx index fefe5d7c1..8f7a107ae 100644 --- a/packages/material-ui-shell/src/containers/ResponsiveMenu/index.jsx +++ b/packages/material-ui-shell/src/containers/ResponsiveMenu/index.tsx @@ -5,7 +5,19 @@ import { useConfig } from '@ecronix/base-shell' //const iOS = process.browser && /iPad|iPhone|iPod/.test(navigator.userAgent) -const CustomSwipeableDrawer = styled(SwipeableDrawer)(({ +interface CustomSwipeableDrawerProps { + theme: any + width: number | string + menucontext: { + isDesktop: boolean + isMenuOpen: boolean + isMiniMode: boolean + } +} + +const CustomSwipeableDrawer = styled( + SwipeableDrawer +)(({ theme, width, menucontext: { isDesktop, isMenuOpen, isMiniMode }, @@ -46,7 +58,11 @@ const CustomSwipeableDrawer = styled(SwipeableDrawer)(({ } }) -export function ResponsiveMenuContainer({ children }) { +export function ResponsiveMenuContainer({ + children, +}: { + children: React.ReactNode +}) { const { isRTL } = useAppTheme() const config = useConfig() const width = config?.appConfig?.menu?.width || 240 diff --git a/packages/material-ui-shell/src/containers/index.js b/packages/material-ui-shell/src/containers/index.ts similarity index 100% rename from packages/material-ui-shell/src/containers/index.js rename to packages/material-ui-shell/src/containers/index.ts diff --git a/packages/material-ui-shell/src/providers/Dialogs/Question/Context.jsx b/packages/material-ui-shell/src/providers/Dialogs/Question/Context.jsx deleted file mode 100644 index 1f12dae7e..000000000 --- a/packages/material-ui-shell/src/providers/Dialogs/Question/Context.jsx +++ /dev/null @@ -1,5 +0,0 @@ -import React from 'react' - -export const Context = React.createContext(null) - -export default Context diff --git a/packages/material-ui-shell/src/providers/Dialogs/Question/Context.tsx b/packages/material-ui-shell/src/providers/Dialogs/Question/Context.tsx new file mode 100644 index 000000000..05f20c233 --- /dev/null +++ b/packages/material-ui-shell/src/providers/Dialogs/Question/Context.tsx @@ -0,0 +1,27 @@ +import React from 'react' + +export interface DialogsContextType { + /** + * @description Open dialog - sets isOpen to true, and pass additional props + * @param props + */ + openDialog: (props: any) => void + + /** + * @description Closes dialog - sets isOpen to false + * @param name + * @param offset + */ + closeDialog: () => void + /** + * @description Set processing to true or false + * @param isProcessing + */ + setProcessing: (isProcessing: boolean) => void +} + +export const Context = React.createContext( + undefined +) + +export default Context diff --git a/packages/material-ui-shell/src/providers/Dialogs/Question/Provider.jsx b/packages/material-ui-shell/src/providers/Dialogs/Question/Provider.tsx similarity index 81% rename from packages/material-ui-shell/src/providers/Dialogs/Question/Provider.jsx rename to packages/material-ui-shell/src/providers/Dialogs/Question/Provider.tsx index c41be72cc..ebbc7785d 100644 --- a/packages/material-ui-shell/src/providers/Dialogs/Question/Provider.jsx +++ b/packages/material-ui-shell/src/providers/Dialogs/Question/Provider.tsx @@ -2,11 +2,11 @@ import React, { useState, Fragment } from 'react' import Context from './Context' import QuestionDialog from '../../../components/QuestionDialog' -const Provider = ({ children }) => { +const Provider: React.FC<{ children: React.ReactNode }> = ({ children }) => { const [state, setState] = useState({ isOpen: false }) const [isProcessing, setIsProcessing] = useState(false) - const openDialog = (props) => { + const openDialog = (props: any) => { setState({ isOpen: true, ...props }) } @@ -14,7 +14,7 @@ const Provider = ({ children }) => { setState({ isOpen: false }) } - const setProcessing = (isProcessing) => { + const setProcessing = (isProcessing: boolean) => { setIsProcessing(isProcessing) } diff --git a/packages/material-ui-shell/src/providers/Dialogs/Question/index.jsx b/packages/material-ui-shell/src/providers/Dialogs/Question/index.tsx similarity index 56% rename from packages/material-ui-shell/src/providers/Dialogs/Question/index.jsx rename to packages/material-ui-shell/src/providers/Dialogs/Question/index.tsx index 85e2eeca0..e20dc0343 100644 --- a/packages/material-ui-shell/src/providers/Dialogs/Question/index.jsx +++ b/packages/material-ui-shell/src/providers/Dialogs/Question/index.tsx @@ -3,7 +3,13 @@ import Context from './Context' import Provider from './Provider' function useQuestionsDialog() { - return useContext(Context) + const context = useContext(Context) + if (context === undefined) { + throw new Error( + 'useQuestionsDialog must be used within a QuestionsDialogProvider' + ) + } + return context } export { diff --git a/packages/material-ui-shell/src/providers/Menu/Context.jsx b/packages/material-ui-shell/src/providers/Menu/Context.jsx deleted file mode 100644 index 1f12dae7e..000000000 --- a/packages/material-ui-shell/src/providers/Menu/Context.jsx +++ /dev/null @@ -1,5 +0,0 @@ -import React from 'react' - -export const Context = React.createContext(null) - -export default Context diff --git a/packages/material-ui-shell/src/providers/Menu/Context.tsx b/packages/material-ui-shell/src/providers/Menu/Context.tsx new file mode 100644 index 000000000..0e23120d1 --- /dev/null +++ b/packages/material-ui-shell/src/providers/Menu/Context.tsx @@ -0,0 +1,12 @@ +import React from 'react' +import { MenuReducerState } from './store/reducer' + +export type MenuContextType = MenuReducerState & { + isDesktop: boolean +} + +export const Context = React.createContext( + undefined +) + +export default Context diff --git a/packages/material-ui-shell/src/providers/Menu/Provider.jsx b/packages/material-ui-shell/src/providers/Menu/Provider.tsx similarity index 79% rename from packages/material-ui-shell/src/providers/Menu/Provider.jsx rename to packages/material-ui-shell/src/providers/Menu/Provider.tsx index 23bccd39a..dec46b6b4 100644 --- a/packages/material-ui-shell/src/providers/Menu/Provider.jsx +++ b/packages/material-ui-shell/src/providers/Menu/Provider.tsx @@ -10,7 +10,17 @@ import { } from './store/actions' import reducer from './store/reducer' -const Provider = ({ appConfig, children, persistKey = 'menu' }) => { +type ProviderProps = { + children: React.ReactNode + persistKey?: string + appConfig: any +} + +const Provider: React.FC = ({ + appConfig, + children, + persistKey = 'menu', +}) => { const { menu } = appConfig || {} const { initialAuthMenuOpen, @@ -32,9 +42,16 @@ const Provider = ({ appConfig, children, persistKey = 'menu' }) => { ...savedState, }) + enum togglerTypes { + isAuthMenuOpen = 'isAuthMenuOpen', + isMiniMode = 'isMiniMode', + isMenuOpen = 'isMenuOpen', + isMobileMenuOpen = 'isMobileMenuOpen', + isMiniSwitchVisibility = 'isMiniSwitchVisibility', + } const props = { //setter - toggleThis(value, newValue = null) { + toggleThis(value: togglerTypes, newValue: boolean | null = null) { if (value === 'isAuthMenuOpen') { dispatch( setIsAuthMenuOpen( @@ -83,8 +100,10 @@ const Provider = ({ appConfig, children, persistKey = 'menu' }) => { useEffect(() => { if (useWindowWatcher) { if (!isDesktop) { - props.setMenuOpen(false) - props.setMiniMode(false) + // props.setMenuOpen(false) + // props.setMiniMode(false) + props.toggleThis(togglerTypes.isMiniMode, false) + props.toggleThis(togglerTypes.isMenuOpen, false) } } }, [isDesktop, props, useWindowWatcher]) diff --git a/packages/material-ui-shell/src/providers/Menu/index.jsx b/packages/material-ui-shell/src/providers/Menu/index.tsx similarity index 100% rename from packages/material-ui-shell/src/providers/Menu/index.jsx rename to packages/material-ui-shell/src/providers/Menu/index.tsx diff --git a/packages/material-ui-shell/src/providers/Menu/store/actions.jsx b/packages/material-ui-shell/src/providers/Menu/store/actions.jsx deleted file mode 100644 index 7500837ea..000000000 --- a/packages/material-ui-shell/src/providers/Menu/store/actions.jsx +++ /dev/null @@ -1,36 +0,0 @@ -import * as types from './types' - -export function setIsAuthMenuOpen (payload) { - return { - type: types.SET_IS_AUTH_MENU_OPEN, - payload: payload - } -} - -export function setIsMiniMode (payload) { - return { - type: types.SET_IS_MINI_MODE, - payload: payload - } -} - -export function setIsMenuOpen (payload) { - return { - type: types.SET_IS_MENU_OPEN, - payload: payload - } -} - -export function setIsMobileMenuOpen (payload) { - return { - type: types.SET_IS_MOBILE_MENU_OPEN, - payload: payload - } -} - -export function setIsMiniSwitchVisibility (payload) { - return { - type: types.SET_IS_MINI_SWITCH_VISIBILITY, - payload: payload - } -} diff --git a/packages/material-ui-shell/src/providers/Menu/store/actions.tsx b/packages/material-ui-shell/src/providers/Menu/store/actions.tsx new file mode 100644 index 000000000..d824931d6 --- /dev/null +++ b/packages/material-ui-shell/src/providers/Menu/store/actions.tsx @@ -0,0 +1,36 @@ +import * as types from './types' + +export function setIsAuthMenuOpen(payload: any) { + return { + type: types.SET_IS_AUTH_MENU_OPEN, + payload: payload, + } +} + +export function setIsMiniMode(payload: any) { + return { + type: types.SET_IS_MINI_MODE, + payload: payload, + } +} + +export function setIsMenuOpen(payload: any) { + return { + type: types.SET_IS_MENU_OPEN, + payload: payload, + } +} + +export function setIsMobileMenuOpen(payload: any) { + return { + type: types.SET_IS_MOBILE_MENU_OPEN, + payload: payload, + } +} + +export function setIsMiniSwitchVisibility(payload: any) { + return { + type: types.SET_IS_MINI_SWITCH_VISIBILITY, + payload: payload, + } +} diff --git a/packages/material-ui-shell/src/providers/Menu/store/reducer.jsx b/packages/material-ui-shell/src/providers/Menu/store/reducer.tsx similarity index 57% rename from packages/material-ui-shell/src/providers/Menu/store/reducer.jsx rename to packages/material-ui-shell/src/providers/Menu/store/reducer.tsx index 90e4a05d3..8db14089c 100644 --- a/packages/material-ui-shell/src/providers/Menu/store/reducer.jsx +++ b/packages/material-ui-shell/src/providers/Menu/store/reducer.tsx @@ -1,10 +1,26 @@ import * as types from './types' -export default function reducer(state = {}, action) { +type ReducerAction = { + type: string + payload: boolean +} + +export type MenuReducerState = { + isAuthMenuOpen?: boolean + isMiniMode?: boolean + isMenuOpen?: boolean + isMobileMenuOpen?: boolean + isMiniSwitchVisibility?: boolean +} + +export default function reducer( + state: MenuReducerState = {}, + action: ReducerAction +) { const { type, payload } = action switch (type) { case types.SET_IS_AUTH_MENU_OPEN: - return { ...state, isAuthMenuOpen: payload} + return { ...state, isAuthMenuOpen: payload } case types.SET_IS_MINI_MODE: return { ...state, isMiniMode: payload } case types.SET_IS_MENU_OPEN: @@ -16,4 +32,4 @@ export default function reducer(state = {}, action) { default: return state } -} \ No newline at end of file +} diff --git a/packages/material-ui-shell/src/providers/Menu/store/types.jsx b/packages/material-ui-shell/src/providers/Menu/store/types.tsx similarity index 100% rename from packages/material-ui-shell/src/providers/Menu/store/types.jsx rename to packages/material-ui-shell/src/providers/Menu/store/types.tsx diff --git a/packages/material-ui-shell/src/providers/Theme/Context.jsx b/packages/material-ui-shell/src/providers/Theme/Context.jsx deleted file mode 100644 index 1f12dae7e..000000000 --- a/packages/material-ui-shell/src/providers/Theme/Context.jsx +++ /dev/null @@ -1,5 +0,0 @@ -import React from 'react' - -export const Context = React.createContext(null) - -export default Context diff --git a/packages/material-ui-shell/src/providers/Theme/Context.tsx b/packages/material-ui-shell/src/providers/Theme/Context.tsx new file mode 100644 index 000000000..1c56c37a4 --- /dev/null +++ b/packages/material-ui-shell/src/providers/Theme/Context.tsx @@ -0,0 +1,23 @@ +import React from 'react' + +export interface ThemeContextType { + /** + * @description Changing theme id + * @param auth + */ + setThemeID: (val: string) => void + /** + * @description Toggle dark mode ro RTL in this theme + * @param mode - Parameter mode can be 'isRTL' or 'isDarkMode' and accordingly theme parameters will switch for that param + */ + toggleThisTheme: (mode: 'isRTL' | 'isDarkMode') => void + isDarkMode: boolean + isRTL: boolean + themeID: string +} + +export const Context = React.createContext( + undefined +) + +export default Context diff --git a/packages/material-ui-shell/src/providers/Theme/Provider.jsx b/packages/material-ui-shell/src/providers/Theme/Provider.tsx similarity index 88% rename from packages/material-ui-shell/src/providers/Theme/Provider.jsx rename to packages/material-ui-shell/src/providers/Theme/Provider.tsx index 9eaceee53..a97945308 100644 --- a/packages/material-ui-shell/src/providers/Theme/Provider.jsx +++ b/packages/material-ui-shell/src/providers/Theme/Provider.tsx @@ -1,7 +1,16 @@ import React, { useState, useEffect } from 'react' import Context from './Context' -const Provider = ({ children, persistKey = 'theme', appConfig }) => { +type ProviderProps = { + children: React.ReactNode + persistKey?: string + appConfig: any +} +const Provider: React.FC = ({ + children, + persistKey = 'theme', + appConfig, +}) => { const { theme: themeConfig } = appConfig || {} const { defaultThemeID, defaultIsDarkMode, defaultIsRTL } = themeConfig || {} @@ -13,7 +22,7 @@ const Provider = ({ children, persistKey = 'theme', appConfig }) => { const isDarkModeKey = `${persistKey}:isDarkMode` const isRTLKey = `${persistKey}:isRTL` - const toggleThisTheme = (mode) => { + const toggleThisTheme = (mode: 'isRTL' | 'isDarkMode') => { if (mode === 'isRTL') setIsRTL(!isRTL) if (mode === 'isDarkMode') setIsDarkMode(!isDarkMode) } diff --git a/packages/material-ui-shell/src/providers/Theme/index.jsx b/packages/material-ui-shell/src/providers/Theme/index.jsx deleted file mode 100644 index 1ae6333bd..000000000 --- a/packages/material-ui-shell/src/providers/Theme/index.jsx +++ /dev/null @@ -1,9 +0,0 @@ -import { useContext } from 'react' -import Context from './Context' -import Provider from './Provider' - -function useTheme() { - return useContext(Context) -} - -export { useTheme, Context as ThemeContext, Provider as ThemeProvider } diff --git a/packages/material-ui-shell/src/providers/Theme/index.tsx b/packages/material-ui-shell/src/providers/Theme/index.tsx new file mode 100644 index 000000000..0ec0cd89e --- /dev/null +++ b/packages/material-ui-shell/src/providers/Theme/index.tsx @@ -0,0 +1,14 @@ +import { useContext } from 'react' +import Context, { ThemeContextType } from './Context' +import Provider from './Provider' + +function useTheme(): ThemeContextType { + const context = useContext(Context) + + if (context === undefined) { + throw new Error('useTheme must be used within a ThemeProvider') + } + return context +} + +export { useTheme, Context as ThemeContext, Provider as ThemeProvider } diff --git a/packages/material-ui-shell/src/providers/VirtualLists/Context.jsx b/packages/material-ui-shell/src/providers/VirtualLists/Context.jsx deleted file mode 100644 index 1f12dae7e..000000000 --- a/packages/material-ui-shell/src/providers/VirtualLists/Context.jsx +++ /dev/null @@ -1,5 +0,0 @@ -import React from 'react' - -export const Context = React.createContext(null) - -export default Context diff --git a/packages/material-ui-shell/src/providers/VirtualLists/Context.tsx b/packages/material-ui-shell/src/providers/VirtualLists/Context.tsx new file mode 100644 index 000000000..a30e056bb --- /dev/null +++ b/packages/material-ui-shell/src/providers/VirtualLists/Context.tsx @@ -0,0 +1,21 @@ +import React from 'react' + +export interface VirtualListsContextType { + /** + * @description Set offset + * @param name + * @param offset + */ + setOffset: (name: string, offset: any) => void + /** + * @description Toggle dark mode ro RTL in this theme + * @param name - Get offset by name + */ + getOffset: (name: string) => void +} + +export const Context = React.createContext( + undefined +) + +export default Context diff --git a/packages/material-ui-shell/src/providers/VirtualLists/Provider.jsx b/packages/material-ui-shell/src/providers/VirtualLists/Provider.tsx similarity index 63% rename from packages/material-ui-shell/src/providers/VirtualLists/Provider.jsx rename to packages/material-ui-shell/src/providers/VirtualLists/Provider.tsx index ae3d85d1d..bca1626fd 100644 --- a/packages/material-ui-shell/src/providers/VirtualLists/Provider.jsx +++ b/packages/material-ui-shell/src/providers/VirtualLists/Provider.tsx @@ -1,7 +1,13 @@ import React, { useReducer } from 'react' import Context from './Context' -function reducer(state, action) { +type ReducerAction = { + type: string + name: string + offset: any +} + +function reducer(state: any, action: ReducerAction) { const { type, name, offset } = action switch (type) { case 'SET_OFFSET': @@ -11,14 +17,14 @@ function reducer(state, action) { } } -const Provider = ({ children }) => { +const Provider: React.FC<{ children: React.ReactNode }> = ({ children }) => { const [state, dispatch] = useReducer(reducer, {}) - const setOffset = (name, offset) => { + const setOffset = (name: string, offset: any) => { dispatch({ type: 'SET_OFFSET', name, offset }) } - const getOffset = (name) => { + const getOffset = (name: string) => { return state[name] || 0 } diff --git a/packages/material-ui-shell/src/providers/VirtualLists/index.jsx b/packages/material-ui-shell/src/providers/VirtualLists/index.tsx similarity index 55% rename from packages/material-ui-shell/src/providers/VirtualLists/index.jsx rename to packages/material-ui-shell/src/providers/VirtualLists/index.tsx index f7e41f050..e72989884 100644 --- a/packages/material-ui-shell/src/providers/VirtualLists/index.jsx +++ b/packages/material-ui-shell/src/providers/VirtualLists/index.tsx @@ -3,7 +3,14 @@ import Context from './Context' import Provider from './Provider' function useVirtualLists() { - return useContext(Context) + const context = useContext(Context) + + if (context === undefined) { + throw new Error( + 'useVirtualLists must be used within a VirtualListsProvider' + ) + } + return context } export { diff --git a/packages/material-ui-shell/src/providers/index.js b/packages/material-ui-shell/src/providers/index.ts similarity index 100% rename from packages/material-ui-shell/src/providers/index.js rename to packages/material-ui-shell/src/providers/index.ts diff --git a/packages/material-ui-shell/src/utils/index.js b/packages/material-ui-shell/src/utils/index.ts similarity index 84% rename from packages/material-ui-shell/src/utils/index.js rename to packages/material-ui-shell/src/utils/index.ts index 584cf694a..5eec40a0f 100644 --- a/packages/material-ui-shell/src/utils/index.js +++ b/packages/material-ui-shell/src/utils/index.ts @@ -1,6 +1,11 @@ import { createTheme } from '@mui/material/styles' -export const getThemeSource = (id, ts, isDarkMode, isRTL) => { +export const getThemeSource = ( + id: string, + ts, + isDarkMode: boolean, + isRTL: boolean +) => { if (ts) { for (let i = 0; i < ts.length; i++) { if (ts[i]['id'] === id) { From 98d53ddea1276d96b996d6bfc98a3aa7067eedfc Mon Sep 17 00:00:00 2001 From: Belmin Mujan Date: Sat, 30 Nov 2024 14:31:37 +0100 Subject: [PATCH 03/21] Material ui in progress, providers done --- .../template/src/config/config.jsx | 2 +- .../providers/Dialogs/Question/Provider.tsx | 3 +- .../src/providers/Filter/Context.jsx | 5 -- .../src/providers/Filter/Context.tsx | 9 ++ .../src/providers/Filter/Provider.jsx | 72 ---------------- .../src/providers/Filter/Provider.tsx | 82 +++++++++++++++++++ .../fields/{boolean.jsx => boolean.tsx} | 0 .../Filter/fields/{date.jsx => date.tsx} | 0 .../Filter/fields/{index.js => index.ts} | 0 .../Filter/fields/{number.jsx => number.tsx} | 0 .../Filter/fields/{text.jsx => text.tsx} | 0 .../Filter/fields/{time.jsx => time.tsx} | 6 +- .../providers/Filter/{index.jsx => index.tsx} | 7 +- .../Filter/store/{actions.jsx => actions.tsx} | 21 +++-- .../Filter/store/{reducer.jsx => reducer.tsx} | 20 +++-- .../store/{selectors.jsx => selectors.tsx} | 41 ++++++++-- .../Filter/store/{types.jsx => types.tsx} | 0 .../src/providers/IProviderProps.ts | 5 ++ .../src/providers/Menu/Provider.tsx | 23 ++---- .../src/providers/Menu/index.tsx | 7 +- .../src/providers/Theme/Provider.tsx | 8 +- .../src/providers/VirtualLists/Provider.tsx | 3 +- 22 files changed, 187 insertions(+), 127 deletions(-) delete mode 100644 packages/material-ui-shell/src/providers/Filter/Context.jsx create mode 100644 packages/material-ui-shell/src/providers/Filter/Context.tsx delete mode 100644 packages/material-ui-shell/src/providers/Filter/Provider.jsx create mode 100644 packages/material-ui-shell/src/providers/Filter/Provider.tsx rename packages/material-ui-shell/src/providers/Filter/fields/{boolean.jsx => boolean.tsx} (100%) rename packages/material-ui-shell/src/providers/Filter/fields/{date.jsx => date.tsx} (100%) rename packages/material-ui-shell/src/providers/Filter/fields/{index.js => index.ts} (100%) rename packages/material-ui-shell/src/providers/Filter/fields/{number.jsx => number.tsx} (100%) rename packages/material-ui-shell/src/providers/Filter/fields/{text.jsx => text.tsx} (100%) rename packages/material-ui-shell/src/providers/Filter/fields/{time.jsx => time.tsx} (87%) rename packages/material-ui-shell/src/providers/Filter/{index.jsx => index.tsx} (55%) rename packages/material-ui-shell/src/providers/Filter/store/{actions.jsx => actions.tsx} (60%) rename packages/material-ui-shell/src/providers/Filter/store/{reducer.jsx => reducer.tsx} (82%) rename packages/material-ui-shell/src/providers/Filter/store/{selectors.jsx => selectors.tsx} (66%) rename packages/material-ui-shell/src/providers/Filter/store/{types.jsx => types.tsx} (100%) create mode 100644 packages/material-ui-shell/src/providers/IProviderProps.ts diff --git a/packages/material-ui-shell/create-material-ui-shell/template/src/config/config.jsx b/packages/material-ui-shell/create-material-ui-shell/template/src/config/config.jsx index 865fbc6e5..b610484ef 100644 --- a/packages/material-ui-shell/create-material-ui-shell/template/src/config/config.jsx +++ b/packages/material-ui-shell/create-material-ui-shell/template/src/config/config.jsx @@ -47,7 +47,7 @@ const config = { initialMiniSwitchVisibility: true, MenuHeader, MenuContent: Menu, - useWindowWatcher: false, + useWindowWatcher: true, }, theme: { themes, diff --git a/packages/material-ui-shell/src/providers/Dialogs/Question/Provider.tsx b/packages/material-ui-shell/src/providers/Dialogs/Question/Provider.tsx index ebbc7785d..7a19ea92f 100644 --- a/packages/material-ui-shell/src/providers/Dialogs/Question/Provider.tsx +++ b/packages/material-ui-shell/src/providers/Dialogs/Question/Provider.tsx @@ -1,8 +1,9 @@ import React, { useState, Fragment } from 'react' import Context from './Context' import QuestionDialog from '../../../components/QuestionDialog' +import { IProviderProps } from '../../IProviderProps' -const Provider: React.FC<{ children: React.ReactNode }> = ({ children }) => { +const Provider: React.FC = ({ children }) => { const [state, setState] = useState({ isOpen: false }) const [isProcessing, setIsProcessing] = useState(false) diff --git a/packages/material-ui-shell/src/providers/Filter/Context.jsx b/packages/material-ui-shell/src/providers/Filter/Context.jsx deleted file mode 100644 index 1f12dae7e..000000000 --- a/packages/material-ui-shell/src/providers/Filter/Context.jsx +++ /dev/null @@ -1,5 +0,0 @@ -import React from 'react' - -export const Context = React.createContext(null) - -export default Context diff --git a/packages/material-ui-shell/src/providers/Filter/Context.tsx b/packages/material-ui-shell/src/providers/Filter/Context.tsx new file mode 100644 index 000000000..de744d9d4 --- /dev/null +++ b/packages/material-ui-shell/src/providers/Filter/Context.tsx @@ -0,0 +1,9 @@ +import React from 'react' + +export interface FilterContextType {} + +export const Context = React.createContext( + undefined +) + +export default Context diff --git a/packages/material-ui-shell/src/providers/Filter/Provider.jsx b/packages/material-ui-shell/src/providers/Filter/Provider.jsx deleted file mode 100644 index 679a9aa5f..000000000 --- a/packages/material-ui-shell/src/providers/Filter/Provider.jsx +++ /dev/null @@ -1,72 +0,0 @@ -import React, { useEffect, useReducer } from 'react' -import Context from './Context' -import reducer from './store/reducer' -import { - addFilterQuery, - clearFilter, - closeFilter, - editFilterQuery, - openFilter, - removeFilterQuery, - setFilterSortField, - setFilterSortOrientation, - setSearch, -} from './store/actions' -import { getList, getField } from './store/selectors' - -function getInitState(persistKey) { - let persistedValues = {} - try { - persistedValues = JSON.parse(localStorage.getItem(persistKey)) || {} - } catch (error) { - console.warn(error) - } - return persistedValues -} - -const Provider = ({ children, persistKey = 'mui_filter' }) => { - const [state, dispatch] = useReducer(reducer, getInitState(persistKey)) - - useEffect(() => { - try { - localStorage.setItem(persistKey, JSON.stringify(state)) - } catch (error) { - console.warn(error) - } - }, [state, persistKey]) - - const props = { - openFilter: (name) => dispatch(openFilter(name)), - closeFilter: (name) => dispatch(closeFilter(name)), - clearFilter: (name) => dispatch(clearFilter(name)), - setSearch: (name, search) => dispatch(setSearch(name, search)), - - setFilterSortField: (name, sortField) => - dispatch(setFilterSortField(name, sortField)), - setFilterSortOrientation: (name, sortOrientation) => - dispatch(setFilterSortOrientation(name, sortOrientation)), - addFilterQuery: (name, query) => dispatch(addFilterQuery(name, query)), - removeFilterQuery: (name, index) => - dispatch(removeFilterQuery(name, index)), - editFilterQuery: (name, index, query) => - dispatch(editFilterQuery(name, index, query)), - getList: (name, list, fields) => getList(state[name], list, fields), - isFilterOpen: (name) => (state[name] ? !!state[name].isOpen : false), - getFilterQueries: (name) => - state[name] && state[name].queries ? state[name].queries : [], - getFilter: (name) => (state[name] ? state[name] : {}), - getField: (fieldName, fields) => getField(fieldName, fields), - } - - return ( - - {children} - - ) -} - -export default Provider diff --git a/packages/material-ui-shell/src/providers/Filter/Provider.tsx b/packages/material-ui-shell/src/providers/Filter/Provider.tsx new file mode 100644 index 000000000..854d38fed --- /dev/null +++ b/packages/material-ui-shell/src/providers/Filter/Provider.tsx @@ -0,0 +1,82 @@ +import React, { useEffect, useReducer } from 'react' +import Context from './Context' +import reducer from './store/reducer' +import { + addFilterQuery, + clearFilter, + closeFilter, + editFilterQuery, + openFilter, + removeFilterQuery, + setFilterSortField, + setFilterSortOrientation, + setSearch, +} from './store/actions' +import { getList, getField, FieldType } from './store/selectors' +import { IProviderProps } from '../IProviderProps' + +function getInitState(persistKey: string) { + const pkString = localStorage.getItem(persistKey) + let persistedValues = {} + try { + persistedValues = pkString ? JSON.parse(pkString) : {} + } catch (error) { + console.warn(error) + } + return persistedValues +} + +const Provider: React.FC = ({ + children, + persistKey = 'mui_filter', +}) => { + const [state, dispatch] = useReducer(reducer, getInitState(persistKey)) + + useEffect(() => { + try { + localStorage.setItem(persistKey, JSON.stringify(state)) + } catch (error) { + console.warn(error) + } + }, [state, persistKey]) + + const props = { + openFilter: (name: string) => dispatch(openFilter(name)), + closeFilter: (name: string) => dispatch(closeFilter(name)), + clearFilter: (name: string) => dispatch(clearFilter(name)), + setSearch: (name: string, search: string) => + dispatch(setSearch(name, search)), + + setFilterSortField: (name: string, sortField: string) => + dispatch(setFilterSortField(name, sortField)), + setFilterSortOrientation: (name: string, sortOrientation: 1 | -1) => + dispatch(setFilterSortOrientation(name, sortOrientation)), + addFilterQuery: (name: string, query: any) => + dispatch(addFilterQuery(name, query)), + removeFilterQuery: (name: string, index: number) => + dispatch(removeFilterQuery(name, index)), + editFilterQuery: (name: string, index: number, query: any) => + dispatch(editFilterQuery(name, index, query)), + getList: (name: string, list: any, fields: FieldType[]) => + getList(state[name], list, fields), + isFilterOpen: (name: string) => + state[name] ? !!state[name].isOpen : false, + getFilterQueries: (name: string) => + state[name] && state[name].queries ? state[name].queries : [], + getFilter: (name: string) => (state[name] ? state[name] : {}), + getField: (fieldName: string, fields: FieldType[]) => + getField(fieldName, fields), + } + + return ( + + {children} + + ) +} + +export default Provider diff --git a/packages/material-ui-shell/src/providers/Filter/fields/boolean.jsx b/packages/material-ui-shell/src/providers/Filter/fields/boolean.tsx similarity index 100% rename from packages/material-ui-shell/src/providers/Filter/fields/boolean.jsx rename to packages/material-ui-shell/src/providers/Filter/fields/boolean.tsx diff --git a/packages/material-ui-shell/src/providers/Filter/fields/date.jsx b/packages/material-ui-shell/src/providers/Filter/fields/date.tsx similarity index 100% rename from packages/material-ui-shell/src/providers/Filter/fields/date.jsx rename to packages/material-ui-shell/src/providers/Filter/fields/date.tsx diff --git a/packages/material-ui-shell/src/providers/Filter/fields/index.js b/packages/material-ui-shell/src/providers/Filter/fields/index.ts similarity index 100% rename from packages/material-ui-shell/src/providers/Filter/fields/index.js rename to packages/material-ui-shell/src/providers/Filter/fields/index.ts diff --git a/packages/material-ui-shell/src/providers/Filter/fields/number.jsx b/packages/material-ui-shell/src/providers/Filter/fields/number.tsx similarity index 100% rename from packages/material-ui-shell/src/providers/Filter/fields/number.jsx rename to packages/material-ui-shell/src/providers/Filter/fields/number.tsx diff --git a/packages/material-ui-shell/src/providers/Filter/fields/text.jsx b/packages/material-ui-shell/src/providers/Filter/fields/text.tsx similarity index 100% rename from packages/material-ui-shell/src/providers/Filter/fields/text.jsx rename to packages/material-ui-shell/src/providers/Filter/fields/text.tsx diff --git a/packages/material-ui-shell/src/providers/Filter/fields/time.jsx b/packages/material-ui-shell/src/providers/Filter/fields/time.tsx similarity index 87% rename from packages/material-ui-shell/src/providers/Filter/fields/time.jsx rename to packages/material-ui-shell/src/providers/Filter/fields/time.tsx index cfd9de22a..099498973 100644 --- a/packages/material-ui-shell/src/providers/Filter/fields/time.jsx +++ b/packages/material-ui-shell/src/providers/Filter/fields/time.tsx @@ -11,7 +11,7 @@ const field = { { value: '>=', label: '>=' }, ], defaultOperator: '=', - filter: (rawValue, q) => { + filter: (rawValue: any, q: { operator: string; value: string }) => { const { operator, value: qv } = q if (qv !== '') { const queryValue = qv ? parseInt(qv.split(':').join('')) : 0 @@ -37,13 +37,13 @@ const field = { return true } }, - sort: (orientation, aRaw, bRaw) => { + sort: (orientation: 1 | -1, aRaw: string, bRaw: string) => { const a = new Date(aRaw).getTime() const b = new Date(bRaw).getTime() var result = a < b ? -1 : a > b ? 1 : 0 return result * orientation }, - render: ({ value = '', isCaseSensitive = false }, onChange) => { + render: ({ value = '', _isCaseSensitive = false }, onChange: any) => { return ( { +export type FieldType = { + name: string + type: 'text' | 'number' | 'bool' | 'time' | 'date' + sort?: any + filter?: any +} +export function getField(name: string, fields: FieldType[] = []) { + let field: FieldType | undefined = fields.find((f) => f.name === name) + if (!field) { + throw new Error('Invalid field provided in getField()') + } + + if (!field) return undefined + fields.map((f: FieldType) => { const { type = 'text' } = f if (f.name === name) { let defaultProps = {} @@ -25,7 +42,17 @@ export function getField(name, fields = []) { return field } -export function getList(filter = {}, list = [], fields = []) { +type FilterType = { + queries?: any + sortField?: string + sortOrientation?: 1 | -1 + search?: any +} +export function getList( + filter: FilterType = {}, + list = [], + fields: FieldType[] = [] +) { let result = [...list] const { queries = [], @@ -72,9 +99,9 @@ export function getList(filter = {}, list = [], fields = []) { } if (sortFieldName && sortFieldName !== '') { - const sortField = getField(sortFieldName, fields) + const sortField: FieldType | undefined = getField(sortFieldName, fields) - if (result !== undefined && sortField.sort !== undefined) { + if (sortField && result !== undefined && sortField.sort !== undefined) { result.sort((a, b) => sortField.sort(sortOrientation, a[sortFieldName], b[sortFieldName]) ) diff --git a/packages/material-ui-shell/src/providers/Filter/store/types.jsx b/packages/material-ui-shell/src/providers/Filter/store/types.tsx similarity index 100% rename from packages/material-ui-shell/src/providers/Filter/store/types.jsx rename to packages/material-ui-shell/src/providers/Filter/store/types.tsx diff --git a/packages/material-ui-shell/src/providers/IProviderProps.ts b/packages/material-ui-shell/src/providers/IProviderProps.ts new file mode 100644 index 000000000..c5c9851ef --- /dev/null +++ b/packages/material-ui-shell/src/providers/IProviderProps.ts @@ -0,0 +1,5 @@ +export type IProviderProps = { + children: React.ReactNode + persistKey?: string + appConfig?: any +} diff --git a/packages/material-ui-shell/src/providers/Menu/Provider.tsx b/packages/material-ui-shell/src/providers/Menu/Provider.tsx index dec46b6b4..7da5bc15f 100644 --- a/packages/material-ui-shell/src/providers/Menu/Provider.tsx +++ b/packages/material-ui-shell/src/providers/Menu/Provider.tsx @@ -9,14 +9,9 @@ import { setIsMiniSwitchVisibility, } from './store/actions' import reducer from './store/reducer' +import { IProviderProps } from '../IProviderProps' -type ProviderProps = { - children: React.ReactNode - persistKey?: string - appConfig: any -} - -const Provider: React.FC = ({ +const Provider: React.FC = ({ appConfig, children, persistKey = 'menu', @@ -31,7 +26,9 @@ const Provider: React.FC = ({ useWindowWatcher, } = menu - const savedState = JSON.parse(localStorage.getItem(persistKey)) + const pkString = localStorage.getItem(persistKey) + + const savedState = pkString !== null ? JSON.parse(pkString) : null const [menuStore, dispatch] = useReducer(reducer, { isAuthMenuOpen: initialAuthMenuOpen, @@ -99,14 +96,10 @@ const Provider: React.FC = ({ useEffect(() => { if (useWindowWatcher) { - if (!isDesktop) { - // props.setMenuOpen(false) - // props.setMiniMode(false) - props.toggleThis(togglerTypes.isMiniMode, false) - props.toggleThis(togglerTypes.isMenuOpen, false) - } + props.toggleThis(togglerTypes.isMiniMode, false) + props.toggleThis(togglerTypes.isMenuOpen, isDesktop) } - }, [isDesktop, props, useWindowWatcher]) + }, [isDesktop, useWindowWatcher]) return ( = ({ +const Provider: React.FC = ({ children, persistKey = 'theme', appConfig, diff --git a/packages/material-ui-shell/src/providers/VirtualLists/Provider.tsx b/packages/material-ui-shell/src/providers/VirtualLists/Provider.tsx index bca1626fd..02dee5467 100644 --- a/packages/material-ui-shell/src/providers/VirtualLists/Provider.tsx +++ b/packages/material-ui-shell/src/providers/VirtualLists/Provider.tsx @@ -1,5 +1,6 @@ import React, { useReducer } from 'react' import Context from './Context' +import { IProviderProps } from '../IProviderProps' type ReducerAction = { type: string @@ -17,7 +18,7 @@ function reducer(state: any, action: ReducerAction) { } } -const Provider: React.FC<{ children: React.ReactNode }> = ({ children }) => { +const Provider: React.FC = ({ children }) => { const [state, dispatch] = useReducer(reducer, {}) const setOffset = (name: string, offset: any) => { From 7d6b5fe0e7421b0fc88eb4c90f8b97e4e3efcb95 Mon Sep 17 00:00:00 2001 From: Belmin Mujan Date: Sat, 30 Nov 2024 22:25:48 +0100 Subject: [PATCH 04/21] Material shell providers typed --- .../src/providers/Filter/Context.tsx | 22 ++++++++++++++++++- .../src/providers/Filter/Provider.tsx | 7 ++++-- .../src/providers/Filter/fields/boolean.tsx | 16 +++++++++++--- .../src/providers/Filter/fields/date.tsx | 18 ++++++++++++--- .../src/providers/Filter/fields/number.tsx | 15 +++++++++---- .../src/providers/Filter/fields/text.tsx | 13 ++++++++--- .../src/providers/Filter/fields/time.tsx | 3 ++- .../src/providers/Filter/store/actions.tsx | 3 ++- .../src/providers/Filter/store/selectors.tsx | 4 ++-- .../src/providers/common.type.ts | 2 ++ 10 files changed, 83 insertions(+), 20 deletions(-) create mode 100644 packages/material-ui-shell/src/providers/common.type.ts diff --git a/packages/material-ui-shell/src/providers/Filter/Context.tsx b/packages/material-ui-shell/src/providers/Filter/Context.tsx index de744d9d4..7e668450d 100644 --- a/packages/material-ui-shell/src/providers/Filter/Context.tsx +++ b/packages/material-ui-shell/src/providers/Filter/Context.tsx @@ -1,6 +1,26 @@ +import { SortOrientationType } from '@ecronix/material-ui-shell/providers/common.type' import React from 'react' +import { FieldType } from './store/selectors' -export interface FilterContextType {} +export interface FilterContextType { + openFilter: (name: string) => void + closeFilter: (name: string) => void + clearFilter: (name: string) => void + setSearch: (name: string, search: string) => void + setFilterSortField: (name: string, sortField: string) => void + setFilterSortOrientation: ( + name: string, + sortOrientation: SortOrientationType + ) => void + addFilterQuery: (name: string, query: any) => void + removeFilterQuery: (name: string, index: number) => void + editFilterQuery: (name: string, index: number, query: any) => void + getList: (name: string, list: any, fields: FieldType[]) => any + isFilterOpen: (name: string) => boolean + getFilterQueries: (name: string) => any[] + getFilter: (name: string) => any + getField: (fieldName: string, fields: FieldType[]) => any +} export const Context = React.createContext( undefined diff --git a/packages/material-ui-shell/src/providers/Filter/Provider.tsx b/packages/material-ui-shell/src/providers/Filter/Provider.tsx index 854d38fed..fb61c1dae 100644 --- a/packages/material-ui-shell/src/providers/Filter/Provider.tsx +++ b/packages/material-ui-shell/src/providers/Filter/Provider.tsx @@ -14,6 +14,7 @@ import { } from './store/actions' import { getList, getField, FieldType } from './store/selectors' import { IProviderProps } from '../IProviderProps' +import { SortOrientationType } from '@ecronix/material-ui-shell/providers/common.type' function getInitState(persistKey: string) { const pkString = localStorage.getItem(persistKey) @@ -49,8 +50,10 @@ const Provider: React.FC = ({ setFilterSortField: (name: string, sortField: string) => dispatch(setFilterSortField(name, sortField)), - setFilterSortOrientation: (name: string, sortOrientation: 1 | -1) => - dispatch(setFilterSortOrientation(name, sortOrientation)), + setFilterSortOrientation: ( + name: string, + sortOrientation: SortOrientationType + ) => dispatch(setFilterSortOrientation(name, sortOrientation)), addFilterQuery: (name: string, query: any) => dispatch(addFilterQuery(name, query)), removeFilterQuery: (name: string, index: number) => diff --git a/packages/material-ui-shell/src/providers/Filter/fields/boolean.tsx b/packages/material-ui-shell/src/providers/Filter/fields/boolean.tsx index 1f774b2cb..46ca80f36 100644 --- a/packages/material-ui-shell/src/providers/Filter/fields/boolean.tsx +++ b/packages/material-ui-shell/src/providers/Filter/fields/boolean.tsx @@ -1,5 +1,9 @@ import React from 'react' import { Switch } from '@mui/material' +import { + Operators, + SortOrientationType, +} from '@ecronix/material-ui-shell/providers/common.type' const field = { operators: [ @@ -7,7 +11,10 @@ const field = { { value: '!=', label: '!=' }, ], defaultOperator: '=', - filter: (value, q) => { + filter: ( + value: boolean, + q: { operator: Operators; value: boolean | string } + ) => { const { operator, value: qv } = q if (qv !== '') { const queryValue = !!qv @@ -23,10 +30,13 @@ const field = { return true } }, - sort: (orientation, a, b) => { + sort: (orientation: SortOrientationType, a: number, b: number) => { return (a - b) * orientation }, - render: ({ value = '' }, onChange) => { + render: ( + { value = '' }, + onChange: ({ value }: { value: boolean }) => void + ) => { return (
=', label: '>=' }, ], defaultOperator: '=', - filter: (rawValue, q) => { + + filter: ( + rawValue: any, + q: { operator: Operators; value: number | string } + ) => { const { operator, value: qv } = q + if (qv !== '') { const queryValue = new Date(qv).getTime() const value = new Date(rawValue).getTime() @@ -36,13 +45,16 @@ const field = { return true } }, - sort: (orientation, aRaw, bRaw) => { + sort: (orientation: SortOrientationType, aRaw: string, bRaw: string) => { const a = new Date(aRaw).getTime() const b = new Date(bRaw).getTime() var result = a < b ? -1 : a > b ? 1 : 0 return result * orientation }, - render: ({ value = '', isCaseSensitive = false }, onChange) => { + render: ( + { value = '', _isCaseSensitive = false }, + onChange: (data: any) => void + ) => { return ( { + render: ({ value = '' }, onChange: (data: any) => void) => { return ( { + filter: ( + rawValue = '', + q: { operator: string; value: string; isCaseSensitive: boolean } + ) => { const { operator, value: qv, isCaseSensitive = false } = q if (qv !== '') { @@ -49,11 +53,14 @@ const field = { return true } }, - sort: (orientation, a, b) => { + sort: (orientation: SortOrientationType, a: number, b: number) => { var result = a < b ? -1 : a > b ? 1 : 0 return result * orientation }, - render: ({ value = '', isCaseSensitive = false }, onChange) => { + render: ( + { value = '', isCaseSensitive = false }, + onChange: (data: any) => void + ) => { return ( { + sort: (orientation: SortOrientationType, aRaw: string, bRaw: string) => { const a = new Date(aRaw).getTime() const b = new Date(bRaw).getTime() var result = a < b ? -1 : a > b ? 1 : 0 diff --git a/packages/material-ui-shell/src/providers/Filter/store/actions.tsx b/packages/material-ui-shell/src/providers/Filter/store/actions.tsx index 0ed36d44a..854a133c4 100644 --- a/packages/material-ui-shell/src/providers/Filter/store/actions.tsx +++ b/packages/material-ui-shell/src/providers/Filter/store/actions.tsx @@ -1,3 +1,4 @@ +import { SortOrientationType } from '@ecronix/material-ui-shell/providers/common.type' import * as types from './types' export function openFilter(name: string) { @@ -33,7 +34,7 @@ export function setFilterSortField(name: string, sortField: string) { export function setFilterSortOrientation( name: string, - sortOrientation: 1 | -1 + sortOrientation: SortOrientationType ) { return { type: types.ON_FILTER_SORT_FIELD_CHANGED, diff --git a/packages/material-ui-shell/src/providers/Filter/store/selectors.tsx b/packages/material-ui-shell/src/providers/Filter/store/selectors.tsx index 931f7da82..030374d15 100644 --- a/packages/material-ui-shell/src/providers/Filter/store/selectors.tsx +++ b/packages/material-ui-shell/src/providers/Filter/store/selectors.tsx @@ -1,3 +1,4 @@ +import { SortOrientationType } from '@ecronix/material-ui-shell/providers/common.type' import { boolField, dateField, @@ -18,7 +19,6 @@ export function getField(name: string, fields: FieldType[] = []) { throw new Error('Invalid field provided in getField()') } - if (!field) return undefined fields.map((f: FieldType) => { const { type = 'text' } = f if (f.name === name) { @@ -45,7 +45,7 @@ export function getField(name: string, fields: FieldType[] = []) { type FilterType = { queries?: any sortField?: string - sortOrientation?: 1 | -1 + sortOrientation?: SortOrientationType search?: any } export function getList( diff --git a/packages/material-ui-shell/src/providers/common.type.ts b/packages/material-ui-shell/src/providers/common.type.ts new file mode 100644 index 000000000..4dff261c0 --- /dev/null +++ b/packages/material-ui-shell/src/providers/common.type.ts @@ -0,0 +1,2 @@ +export type SortOrientationType = 1 | -1 +export type Operators = '=' | '>' | '<' | '!=' | '<=' | '>=' | 'like' | '!like' From c7bd787a8db6d614d8bed101144e4c81a5aac0ae Mon Sep 17 00:00:00 2001 From: Belmin Mujan Date: Sun, 1 Dec 2024 00:36:56 +0100 Subject: [PATCH 05/21] Material ui types mostly done --- .../base-shell/src/providers/Auth/Context.tsx | 4 ++ packages/material-ui-shell/package.json | 1 + packages/material-ui-shell/src/common.type.ts | 35 +++++++++++++++++ .../FilterDrawer/{index.jsx => index.tsx} | 19 ++++++++-- .../Loading/{index.jsx => index.tsx} | 0 .../MenuHeader/{index.jsx => index.tsx} | 38 ++++++++++++++----- .../QuestionDialog/{index.jsx => index.tsx} | 9 +++-- .../Scrollbar/{index.jsx => index.tsx} | 4 +- .../SearchField/{index.jsx => index.tsx} | 25 ++++++++---- .../UpdateDialog/{index.jsx => index.tsx} | 18 +++++---- .../src/components/{index.js => index.ts} | 0 .../containers/ImageUploadDialog/index.tsx | 8 +--- .../src/containers/ResponsiveMenu/index.tsx | 14 +++---- .../{index.jsx => index.tsx} | 17 ++++++--- .../UpdateContainer/{index.jsx => index.tsx} | 6 +-- .../VirtualList/{index.jsx => index.tsx} | 26 +++++++++---- .../LandingPage/{index.jsx => index.tsx} | 0 .../pages/ListPage/{index.jsx => index.tsx} | 20 +++++++++- .../src/pages/Page/{index.jsx => index.tsx} | 32 ++++++++++------ .../PageNotFound/{index.jsx => index.tsx} | 2 +- .../providers/Dialogs/Question/Provider.tsx | 2 +- .../src/providers/Filter/Context.tsx | 6 ++- .../src/providers/Filter/Provider.tsx | 9 +++-- .../src/providers/Filter/fields/boolean.tsx | 5 ++- .../src/providers/Filter/fields/date.tsx | 5 ++- .../src/providers/Filter/fields/number.tsx | 5 ++- .../src/providers/Filter/fields/text.tsx | 7 +++- .../src/providers/Filter/fields/time.tsx | 7 +++- .../src/providers/Filter/store/actions.tsx | 2 +- .../src/providers/Filter/store/selectors.tsx | 15 +++----- .../src/providers/IProviderProps.ts | 5 --- .../src/providers/Menu/Context.tsx | 17 ++++++++- .../src/providers/Menu/Provider.tsx | 21 ++++------ .../src/providers/Menu/store/actions.tsx | 10 ++--- .../src/providers/Menu/store/reducer.tsx | 11 +----- .../src/providers/Theme/Provider.tsx | 2 +- .../src/providers/VirtualLists/Provider.tsx | 2 +- .../src/providers/common.type.ts | 2 - packages/material-ui-shell/src/utils/index.ts | 3 +- 39 files changed, 269 insertions(+), 145 deletions(-) create mode 100644 packages/material-ui-shell/src/common.type.ts rename packages/material-ui-shell/src/components/FilterDrawer/{index.jsx => index.tsx} (93%) rename packages/material-ui-shell/src/components/Loading/{index.jsx => index.tsx} (100%) rename packages/material-ui-shell/src/components/MenuHeader/{index.jsx => index.tsx} (85%) rename packages/material-ui-shell/src/components/QuestionDialog/{index.jsx => index.tsx} (84%) rename packages/material-ui-shell/src/components/Scrollbar/{index.jsx => index.tsx} (92%) rename packages/material-ui-shell/src/components/SearchField/{index.jsx => index.tsx} (81%) rename packages/material-ui-shell/src/components/UpdateDialog/{index.jsx => index.tsx} (85%) rename packages/material-ui-shell/src/components/{index.js => index.ts} (100%) rename packages/material-ui-shell/src/containers/SelectableMenuList/{index.jsx => index.tsx} (94%) rename packages/material-ui-shell/src/containers/UpdateContainer/{index.jsx => index.tsx} (90%) rename packages/material-ui-shell/src/containers/VirtualList/{index.jsx => index.tsx} (73%) rename packages/material-ui-shell/src/pages/LandingPage/{index.jsx => index.tsx} (100%) rename packages/material-ui-shell/src/pages/ListPage/{index.jsx => index.tsx} (82%) rename packages/material-ui-shell/src/pages/Page/{index.jsx => index.tsx} (82%) rename packages/material-ui-shell/src/pages/PageNotFound/{index.jsx => index.tsx} (96%) delete mode 100644 packages/material-ui-shell/src/providers/IProviderProps.ts delete mode 100644 packages/material-ui-shell/src/providers/common.type.ts diff --git a/packages/base-shell/src/providers/Auth/Context.tsx b/packages/base-shell/src/providers/Auth/Context.tsx index 6f3ee4694..317330405 100644 --- a/packages/base-shell/src/providers/Auth/Context.tsx +++ b/packages/base-shell/src/providers/Auth/Context.tsx @@ -3,7 +3,11 @@ import React from "react"; export interface AuthContextType { auth: { isAuthenticated: boolean; + photoURL: string; + displayName: string; + email: string; }; + /** * @description Set auth to provided auth parameter * @param auth diff --git a/packages/material-ui-shell/package.json b/packages/material-ui-shell/package.json index 4a32450b8..caafb2f34 100644 --- a/packages/material-ui-shell/package.json +++ b/packages/material-ui-shell/package.json @@ -50,6 +50,7 @@ "@fontsource/roboto": "^5.1.0", "@mui/icons-material": "^6.1.4", "@mui/material": "^6.1.4", + "@types/react-window": "^1.8.8", "@vitejs/plugin-react": "^4.3.2", "cypress": "^13.15.0", "glob": "^11.0.0", diff --git a/packages/material-ui-shell/src/common.type.ts b/packages/material-ui-shell/src/common.type.ts new file mode 100644 index 000000000..2b6eaa436 --- /dev/null +++ b/packages/material-ui-shell/src/common.type.ts @@ -0,0 +1,35 @@ +import { AppConfig } from '@ecronix/base-shell' +import { TransitionProps } from '@mui/material/transitions' + +export type TransitionComponentProps = TransitionProps & { + children: React.ReactElement +} + +export type IProviderProps = { + children: React.ReactNode + persistKey?: string + appConfig?: AppConfig +} + +export type SortOrientationType = 1 | -1 +export type Operators = '=' | '>' | '<' | '!=' | '<=' | '>=' | 'like' | '!like' +export type OperatorType = { label: string; value: string } +export type FieldType = { + name: string + label?: string + type: 'text' | 'number' | 'bool' | 'time' | 'date' + sort?: any + filter?: any +} + +export type ThemeType = { + id: string + color: string + source: { + palette: { + primary: string + secondary: string + error: string + } + } +} diff --git a/packages/material-ui-shell/src/components/FilterDrawer/index.jsx b/packages/material-ui-shell/src/components/FilterDrawer/index.tsx similarity index 93% rename from packages/material-ui-shell/src/components/FilterDrawer/index.jsx rename to packages/material-ui-shell/src/components/FilterDrawer/index.tsx index 8e6f71c69..ee422c30a 100644 --- a/packages/material-ui-shell/src/components/FilterDrawer/index.jsx +++ b/packages/material-ui-shell/src/components/FilterDrawer/index.tsx @@ -15,8 +15,19 @@ import { Add, ClearAll, SortByAlpha, Close, Delete } from '@mui/icons-material' import { useFilter } from '@ecronix/material-ui-shell' import { useIntl } from 'react-intl' import Scrollbar from '../Scrollbar' +import { FieldType, OperatorType } from '@ecronix/material-ui-shell/common.type' -export default function FilterDrawer({ name, width = 250, fields = [] }) { +type FilterDrawerProps = { + name: string + width?: number + fields: FieldType[] +} + +export default function FilterDrawer({ + name, + width = 250, + fields = [], +}: FilterDrawerProps) { const intl = useIntl() const { isFilterOpen, @@ -124,7 +135,7 @@ export default function FilterDrawer({ name, width = 250, fields = [] }) {
- {queries.map((q, i) => { + {queries.map((q: any, i: number) => { const field = getField(q.field, fields) return ( @@ -180,7 +191,7 @@ export default function FilterDrawer({ name, width = 250, fields = [] }) { } displayEmpty > - {field.operators.map((o) => ( + {field.operators.map((o: OperatorType) => ( {o.label} @@ -194,7 +205,7 @@ export default function FilterDrawer({ name, width = 250, fields = [] }) {
{field && - field.render(q, (changes) => + field.render(q, (changes: any) => editFilterQuery(name, i, { ...q, ...changes }) )} diff --git a/packages/material-ui-shell/src/components/Loading/index.jsx b/packages/material-ui-shell/src/components/Loading/index.tsx similarity index 100% rename from packages/material-ui-shell/src/components/Loading/index.jsx rename to packages/material-ui-shell/src/components/Loading/index.tsx diff --git a/packages/material-ui-shell/src/components/MenuHeader/index.jsx b/packages/material-ui-shell/src/components/MenuHeader/index.tsx similarity index 85% rename from packages/material-ui-shell/src/components/MenuHeader/index.jsx rename to packages/material-ui-shell/src/components/MenuHeader/index.tsx index d7d8a3eaa..dd3148af7 100644 --- a/packages/material-ui-shell/src/components/MenuHeader/index.jsx +++ b/packages/material-ui-shell/src/components/MenuHeader/index.tsx @@ -22,6 +22,19 @@ import { BrightnessHigh as BrightnessHighIcon, } from '@mui/icons-material' import { useTheme } from '@mui/material/styles' +import { togglerTypes } from '@ecronix/material-ui-shell/providers/Menu/Context' + +type AvatarConstructorType = + | { + src?: never + alt?: never + avatar: string | JSX.Element + } + | { + src: string + alt: string + avatar?: never + } export default function MenuHeader() { const { auth } = useAuth() @@ -39,12 +52,17 @@ export default function MenuHeader() { } = menuContext || {} const isAuthenticated = auth.isAuthenticated - const AvatarConstructor = ({ src, alt, avatar }) => { + const AvatarConstructor: React.FC = ({ + src, + alt, + avatar, + }) => { return ( - toggleThis('isAuthMenuOpen')}> - + toggleThis(togglerTypes.isAuthMenuOpen)}> + {/* {avatar} - + */} + {avatar ? {avatar} : } ) } @@ -119,8 +137,8 @@ export default function MenuHeader() { {isMiniSwitchVisibility && ( { - toggleThis('isMiniMode', true) - toggleThis('isMenuOpen', false) + toggleThis(togglerTypes.isMiniMode, true) + toggleThis(togglerTypes.isMenuOpen, false) }} > @@ -129,7 +147,7 @@ export default function MenuHeader() { { - toggleThis('isMenuOpen', false) + toggleThis(togglerTypes.isMenuOpen, false) }} > {isRTL ? ( @@ -147,7 +165,7 @@ export default function MenuHeader() { {isAuthenticated && ( { - toggleThis('isAuthMenuOpen') + toggleThis(togglerTypes.isAuthMenuOpen) }} > {!isMenuOpen && @@ -177,7 +195,7 @@ export default function MenuHeader() { textOverflow: 'ellipsis', }} secondaryTypographyProps={{ - color: (t) => theme.palette.grey.A100, + color: theme.palette.grey.A100, width: 80, textOverflow: 'ellipsis', }} @@ -188,7 +206,7 @@ export default function MenuHeader() { {isMenuOpen && ( { - toggleThis('isAuthMenuOpen') + toggleThis(togglerTypes.isAuthMenuOpen) }} > diff --git a/packages/material-ui-shell/src/components/QuestionDialog/index.jsx b/packages/material-ui-shell/src/components/QuestionDialog/index.tsx similarity index 84% rename from packages/material-ui-shell/src/components/QuestionDialog/index.jsx rename to packages/material-ui-shell/src/components/QuestionDialog/index.tsx index afacdd75d..5c19eb3cf 100644 --- a/packages/material-ui-shell/src/components/QuestionDialog/index.jsx +++ b/packages/material-ui-shell/src/components/QuestionDialog/index.tsx @@ -12,10 +12,11 @@ import { Slide, useMediaQuery, } from '@mui/material' +import { TransitionComponentProps } from '@ecronix/material-ui-shell/common.type' -const Transition = React.forwardRef((props, ref) => ( - -)) +const Transition = React.forwardRef( + (props, ref) => +) export default function QuestionDialog({ isProcessing = false, @@ -24,7 +25,7 @@ export default function QuestionDialog({ message = '', title = '', action = '', - handleAction = () => {}, + handleAction = (handleClose: () => void) => {}, handleClose = () => {}, ...rest }) { diff --git a/packages/material-ui-shell/src/components/Scrollbar/index.jsx b/packages/material-ui-shell/src/components/Scrollbar/index.tsx similarity index 92% rename from packages/material-ui-shell/src/components/Scrollbar/index.jsx rename to packages/material-ui-shell/src/components/Scrollbar/index.tsx index a2f3dc792..793efb66f 100644 --- a/packages/material-ui-shell/src/components/Scrollbar/index.jsx +++ b/packages/material-ui-shell/src/components/Scrollbar/index.tsx @@ -2,12 +2,12 @@ import React, { useCallback } from 'react' import { Scrollbars } from 'react-custom-scrollbars-2' import { useTheme as useAppTheme } from '@ecronix/material-ui-shell' -export default function Scrollbar(props) { +export default function Scrollbar(props: any) { const { forwardedRef = () => {}, ...rest } = props const { isRTL } = useAppTheme() const refSetter = useCallback( - (scrollbarsRef) => { + (scrollbarsRef: any) => { if (scrollbarsRef) { forwardedRef(scrollbarsRef.view) } else { diff --git a/packages/material-ui-shell/src/components/SearchField/index.jsx b/packages/material-ui-shell/src/components/SearchField/index.tsx similarity index 81% rename from packages/material-ui-shell/src/components/SearchField/index.jsx rename to packages/material-ui-shell/src/components/SearchField/index.tsx index 7154c4593..8aa15fb80 100644 --- a/packages/material-ui-shell/src/components/SearchField/index.jsx +++ b/packages/material-ui-shell/src/components/SearchField/index.tsx @@ -3,9 +3,9 @@ import { Search as SearchIcon } from '@mui/icons-material' import { styled, alpha } from '@mui/material/styles' import { InputBase } from '@mui/material' -let timeout = null +let timeout: NodeJS.Timeout | null = null -const Search = styled('div')(({ theme, isOpen }) => { +const Search = styled('div')<{ isOpen: boolean }>(({ theme, isOpen }) => { return { position: 'relative', borderRadius: theme.shape.borderRadius, @@ -34,7 +34,10 @@ const SearchIconWrapper = styled('div')(({ theme }) => ({ justifyContent: 'center', })) -const StyledInputBase = styled(InputBase)(({ theme, isOpen }) => { +const StyledInputBase = styled(InputBase)<{ isOpen: boolean }>(({ + theme, + isOpen, +}) => { return { color: 'inherit', '& .MuiInputBase-input': { @@ -53,12 +56,18 @@ const StyledInputBase = styled(InputBase)(({ theme, isOpen }) => { } }) +type SearchFieldProps = { + onChange: (v: string) => void + initialValue: string + alwaysOpen?: boolean + deferTime?: number +} export default function SearchField({ onChange, initialValue = '', alwaysOpen, deferTime = 1000, -}) { +}: SearchFieldProps) { const [value, setValue] = useState('') useEffect(() => { setValue(initialValue) @@ -68,7 +77,7 @@ export default function SearchField({ const hasValue = value && value !== '' const isOpen = hasValue || alwaysOpen - const handleChange = (v) => { + const handleChange = (v: string) => { if (timeout) { clearTimeout(timeout) } @@ -83,16 +92,16 @@ export default function SearchField({ } return ( - + { + ref={(node: HTMLElement | null) => { if (node && initialValue && initialValue !== '') { node.focus() } diff --git a/packages/material-ui-shell/src/components/UpdateDialog/index.jsx b/packages/material-ui-shell/src/components/UpdateDialog/index.tsx similarity index 85% rename from packages/material-ui-shell/src/components/UpdateDialog/index.jsx rename to packages/material-ui-shell/src/components/UpdateDialog/index.tsx index afedb4ec8..bc18a39a2 100644 --- a/packages/material-ui-shell/src/components/UpdateDialog/index.jsx +++ b/packages/material-ui-shell/src/components/UpdateDialog/index.tsx @@ -1,4 +1,4 @@ -import React from 'react' +import React, { useState } from 'react' import { useIntl } from 'react-intl' import { useTheme } from '@mui/material/styles' import { @@ -11,16 +11,20 @@ import { useMediaQuery, } from '@mui/material' -export default function UpdateDialog({ isUpdateAvailable, runUpdate }) { - const [open, setOpen] = React.useState(undefined) +type UpdateDialogProps = { + isUpdateAvailable: boolean + runUpdate: () => void +} + +export default function UpdateDialog({ + isUpdateAvailable, + runUpdate, +}: UpdateDialogProps) { + const [open, setOpen] = useState(undefined) const intl = useIntl() const theme = useTheme() const fullScreen = useMediaQuery(theme.breakpoints.down('sm')) - const handleClickOpen = () => { - setOpen(true) - } - const handleClose = () => { setOpen(false) } diff --git a/packages/material-ui-shell/src/components/index.js b/packages/material-ui-shell/src/components/index.ts similarity index 100% rename from packages/material-ui-shell/src/components/index.js rename to packages/material-ui-shell/src/components/index.ts diff --git a/packages/material-ui-shell/src/containers/ImageUploadDialog/index.tsx b/packages/material-ui-shell/src/containers/ImageUploadDialog/index.tsx index c2fbbdfe8..f22fbdbcf 100644 --- a/packages/material-ui-shell/src/containers/ImageUploadDialog/index.tsx +++ b/packages/material-ui-shell/src/containers/ImageUploadDialog/index.tsx @@ -1,5 +1,5 @@ import Cropper from 'react-easy-crop' -import React, { useState, useCallback, useEffect, Ref } from 'react' +import React, { useState, useCallback, useEffect } from 'react' import getCroppedImg, { IPixelCrop } from './getCropImage' import { useIntl } from 'react-intl' import { useTheme } from '@emotion/react' @@ -13,15 +13,11 @@ import { Slide, useMediaQuery, CircularProgress, - SlideProps, } from '@mui/material' import { CloudUpload } from '@mui/icons-material' -import { TransitionProps } from '@mui/material/transitions' +import { TransitionComponentProps } from '@ecronix/material-ui-shell/common.type' -type TransitionComponentProps = TransitionProps & { - children: React.ReactElement -} const Transition = React.forwardRef( (props, ref) => ) diff --git a/packages/material-ui-shell/src/containers/ResponsiveMenu/index.tsx b/packages/material-ui-shell/src/containers/ResponsiveMenu/index.tsx index 8f7a107ae..cf280e006 100644 --- a/packages/material-ui-shell/src/containers/ResponsiveMenu/index.tsx +++ b/packages/material-ui-shell/src/containers/ResponsiveMenu/index.tsx @@ -2,17 +2,17 @@ import React from 'react' import { SwipeableDrawer, styled } from '@mui/material' import { useMenu, useTheme as useAppTheme } from '@ecronix/material-ui-shell' import { useConfig } from '@ecronix/base-shell' +import { + MenuContextType, + togglerTypes, +} from '@ecronix/material-ui-shell/providers/Menu/Context' //const iOS = process.browser && /iPad|iPhone|iPod/.test(navigator.userAgent) interface CustomSwipeableDrawerProps { - theme: any + theme?: any width: number | string - menucontext: { - isDesktop: boolean - isMenuOpen: boolean - isMiniMode: boolean - } + menucontext: MenuContextType } const CustomSwipeableDrawer = styled( @@ -71,7 +71,7 @@ export function ResponsiveMenuContainer({ menuContext || {} const handleDrawerToggle = () => { - toggleThis('isMobileMenuOpen') + toggleThis(togglerTypes.isMobileMenuOpen) } return ( diff --git a/packages/material-ui-shell/src/containers/SelectableMenuList/index.jsx b/packages/material-ui-shell/src/containers/SelectableMenuList/index.tsx similarity index 94% rename from packages/material-ui-shell/src/containers/SelectableMenuList/index.jsx rename to packages/material-ui-shell/src/containers/SelectableMenuList/index.tsx index d765f5736..c2fcb0198 100644 --- a/packages/material-ui-shell/src/containers/SelectableMenuList/index.jsx +++ b/packages/material-ui-shell/src/containers/SelectableMenuList/index.tsx @@ -19,18 +19,24 @@ import { } from '@mui/material' import { useLocation } from 'react-router-dom' +type PropTypes = { + onIndexChange: () => void + useMinified: boolean + items: any[] + index: number +} export function SelectableMenuListContainer({ onIndexChange, useMinified, items, index, -}) { +}: PropTypes) { const [state, setState] = useState({}) const { isRTL } = useAppTheme() const { isMiniMode } = useMenu() const { pathname = '' } = useLocation() - const loopItems = useCallback((items, previousItems = [], title) => { + const loopItems = useCallback((items, previousItems = [], title: string) => { items.map((i) => { const { value = 'none', nestedItems = [], primaryText = '' } = i if (pathname === value) { @@ -118,13 +124,14 @@ export function SelectableMenuListContainer({ if (item !== undefined) { if (item.subheader !== undefined) { + // Removed inset={item.inset} doesn't exist return ( -
+
{item.subheader}
) } else if (item.divider !== undefined) { - return + return // Removed inset={item.inset} doesn't exist } else { return ( { if (e.button === 1) { var win = window.open(`${item.value}`, '_blank') - win.focus() + win?.focus() } }} > diff --git a/packages/material-ui-shell/src/containers/UpdateContainer/index.jsx b/packages/material-ui-shell/src/containers/UpdateContainer/index.tsx similarity index 90% rename from packages/material-ui-shell/src/containers/UpdateContainer/index.jsx rename to packages/material-ui-shell/src/containers/UpdateContainer/index.tsx index e75a2d4e7..03a49148d 100644 --- a/packages/material-ui-shell/src/containers/UpdateContainer/index.jsx +++ b/packages/material-ui-shell/src/containers/UpdateContainer/index.tsx @@ -1,6 +1,6 @@ import React, { Fragment, useEffect } from 'react' import { useConfig } from '@ecronix/base-shell' -import { useSnackbar } from 'notistack' +import { SnackbarKey, useSnackbar } from 'notistack' import { useIntl } from 'react-intl' import { Button } from '@mui/material' @@ -8,14 +8,14 @@ const runUpdate = () => { window.update && window.update() } -export function UpdateContainer({ children }) { +export function UpdateContainer({ children }: { children: React.ReactNode }) { const intl = useIntl() const { appConfig } = useConfig() const { enqueueSnackbar, closeSnackbar } = useSnackbar() const { update } = appConfig || {} const { checkInterval = 3000, repeatInterval = 300000 } = update || {} - const action = (key) => ( + const action = (key: SnackbarKey) => (
)} diff --git a/packages/rmw-shell/src/pages/Users/User.tsx b/packages/rmw-shell/src/pages/Users/User.tsx index fc6d8f1d6..9160d27bb 100644 --- a/packages/rmw-shell/src/pages/Users/User.tsx +++ b/packages/rmw-shell/src/pages/Users/User.tsx @@ -26,7 +26,6 @@ import { SearchField, useFilter } from "@ecronix/material-ui-shell"; import FormControlLabel from "@mui/material/FormControlLabel"; import Switch from "@mui/material/Switch"; import { getDatabase, ref, set } from "firebase/database"; -import { AuthType } from "@ecronix/base-shell/dist/types/providers/Auth/Context"; export function UserPage() { const intl = useIntl(); diff --git a/packages/rmw-shell/src/providers/Firebase/Docs/Provider.tsx b/packages/rmw-shell/src/providers/Firebase/Docs/Provider.tsx index 2031d2c1b..629def129 100644 --- a/packages/rmw-shell/src/providers/Firebase/Docs/Provider.tsx +++ b/packages/rmw-shell/src/providers/Firebase/Docs/Provider.tsx @@ -5,7 +5,6 @@ import { onSnapshot, getFirestore, DocumentData, - DocumentReference, } from "firebase/firestore"; import { IProviderProps } from "@ecronix/material-ui-shell"; import { ActionTypeBase } from "../../index.js"; @@ -95,7 +94,7 @@ const Provider = ({ if (typeof path === "string") { return doc(db, "/", ...path.split("/")); } else if (path instanceof Array) { - return doc(db, "/", ...path); // TODO how to test this + return doc(db, "/", ...path); // TODO how to test this = added "/" as starting path per docs } else { return path; } diff --git a/packages/rmw-shell/src/providers/Firebase/Paths/Context.tsx b/packages/rmw-shell/src/providers/Firebase/Paths/Context.tsx index b0116a91e..5a5a7a034 100644 --- a/packages/rmw-shell/src/providers/Firebase/Paths/Context.tsx +++ b/packages/rmw-shell/src/providers/Firebase/Paths/Context.tsx @@ -3,9 +3,9 @@ export type PathsContextType = { watchPath: ( path: string, onChange?: (data: Object | string | number | boolean | null) => void - ) => void; + ) => any; unwatchPath: (path: string) => void; - getPath: (path: string, defaultValue?: string | Object) => string; + getPath: (path: string, defaultValue?: any) => any; clearPath: (path: string) => void; clearAllPaths: () => void; isPathLoading: (path: string) => void; diff --git a/packages/rmw-shell/src/providers/Firebase/Paths/Provider.tsx b/packages/rmw-shell/src/providers/Firebase/Paths/Provider.tsx index d45d4d370..0c6598221 100644 --- a/packages/rmw-shell/src/providers/Firebase/Paths/Provider.tsx +++ b/packages/rmw-shell/src/providers/Firebase/Paths/Provider.tsx @@ -23,6 +23,16 @@ type ActionType = ActionTypeBase & { type: ActionTypes; path: string; }; +type StateType = { + error?: boolean; + hasError?: boolean; + isLoading?: boolean; + value: { + admins?: any; + members?: any; + name?: string; + }; +}; function reducer(state: DocumentData, action: ActionType) { const { type, @@ -134,7 +144,7 @@ const Provider = ({ ); const getPath = useCallback( - (path: string, defaultValue?: string | Object): string => { + (path: string, defaultValue?: any): any => { return state[path] ? state[path].value : defaultValue; }, [state] diff --git a/packages/rmw-shell/src/providers/Firebase/Storage/Context.tsx b/packages/rmw-shell/src/providers/Firebase/Storage/Context.tsx index 6e5ba4d16..03a336b15 100644 --- a/packages/rmw-shell/src/providers/Firebase/Storage/Context.tsx +++ b/packages/rmw-shell/src/providers/Firebase/Storage/Context.tsx @@ -35,7 +35,7 @@ export type StorageContextType = { ) => void; isUploading: (path: string) => boolean; getDownloadURL: (path: string) => string | null; - clearUpload: (path?: string) => void; + clearUpload: (path: string) => void; clearAllUploads: () => void; hasUploadError: (path: string) => boolean; getUploadError: (path: string) => string | Error; From b500702b920f37c2cadfb885fac691c9f5f0afbb Mon Sep 17 00:00:00 2001 From: Belmin Mujan Date: Wed, 18 Dec 2024 19:26:42 +0100 Subject: [PATCH 11/21] Base shell docs --- packages/base-shell/package.json | 5 ++- .../src/components/AuthorizedRoute/index.tsx | 18 ++++++-- .../components/UnauthorizedRoute/index.tsx | 24 +++++++++- .../base-shell/src/containers/App/index.tsx | 15 +++++++ .../src/providers/AddToHomeScreen/Context.tsx | 5 +++ .../src/providers/AddToHomeScreen/index.tsx | 26 +++++++++-- .../base-shell/src/providers/Auth/Context.tsx | 3 ++ .../base-shell/src/providers/Auth/index.tsx | 1 - .../src/providers/Config/Context.tsx | 7 ++- .../base-shell/src/providers/Config/index.tsx | 17 ++++++- .../src/providers/Locale/Context.tsx | 9 ++++ .../base-shell/src/providers/Locale/index.tsx | 15 +++++++ .../src/providers/Online/Provider.tsx | 2 - .../base-shell/src/providers/Online/index.tsx | 12 +++++ .../src/providers/SimpleValues/index.tsx | 21 ++++++++- .../src/providers/Update/Context.tsx | 5 ++- .../base-shell/src/providers/Update/index.tsx | 17 ++++++- packages/base-shell/src/utils/config.ts | 7 +++ packages/base-shell/src/utils/locale.ts | 45 +++++++++++++++++++ 19 files changed, 236 insertions(+), 18 deletions(-) diff --git a/packages/base-shell/package.json b/packages/base-shell/package.json index 45b08ed0d..969bc2245 100644 --- a/packages/base-shell/package.json +++ b/packages/base-shell/package.json @@ -59,5 +59,8 @@ "react-most-wanted", "base-shell" ], - "gitHead": "a90224fcc897992ad6bb85e613ae50a24aa2a936" + "gitHead": "a90224fcc897992ad6bb85e613ae50a24aa2a936", + "dependencies": { + "@rollup/rollup-darwin-x64": "^4.27.4" + } } diff --git a/packages/base-shell/src/components/AuthorizedRoute/index.tsx b/packages/base-shell/src/components/AuthorizedRoute/index.tsx index 687c565f9..25b5644b6 100644 --- a/packages/base-shell/src/components/AuthorizedRoute/index.tsx +++ b/packages/base-shell/src/components/AuthorizedRoute/index.tsx @@ -2,11 +2,21 @@ import { Navigate, useLocation } from "react-router-dom"; import { useAuth, useConfig } from "@ecronix/base-shell"; /** - * @description - * A component that ensures only authenticated user can access page wrapped by this component + * A route component that renders its children for authenticated users only. * - * @param {React.ReactNode} children - The content to render if the user is authenticated. - * @returns {React.ReactNode} The rendered children or a redirect to the sign-in page. + * If the user is authenticated, the children components are rendered. + * If unauthenticated, the user is redirected to the sign-in page with the + * current path included as a query parameter for redirection after login. + * + * @param {object} props - The properties passed to the `AuthorizedRoute` component. + * @param {React.ReactNode} props.children - The components to render if the user is authenticated. + * + * @returns {JSX.Element} The rendered children for authorized users or a `` component for redirection. + * + * @example + * + * + * */ export function AuthorizedRoute({ diff --git a/packages/base-shell/src/components/UnauthorizedRoute/index.tsx b/packages/base-shell/src/components/UnauthorizedRoute/index.tsx index db076c4cf..8ad8c2e63 100644 --- a/packages/base-shell/src/components/UnauthorizedRoute/index.tsx +++ b/packages/base-shell/src/components/UnauthorizedRoute/index.tsx @@ -3,7 +3,29 @@ import { Navigate } from "react-router-dom"; import { useAuth, useConfig } from "@ecronix/base-shell"; import { useLocation } from "react-router-dom"; -export function UnauthorizedRoute({ children, redirectTo = "/", ...rest }: any) { +/** + * A route component that renders its children for unauthorized users only. + * + * If the user is authenticated, they are redirected to the specified path. + * If unauthenticated, the children components are rendered. + * + * @param {object} props - The properties passed to the `UnauthorizedRoute` component. + * @param {React.ReactNode} props.children - The components to render if the user is not authenticated. + * @param {string} [props.redirectTo="/"] - The default path to redirect to if the user is authenticated. + * @param rest - Additional props passed to the component. + * + * @returns {JSX.Element} The rendered children for unauthorized users or a `` component for redirection. + * + * @example + * + * + * + */ +export function UnauthorizedRoute({ + children, + redirectTo = "/", + ...rest +}: any): JSX.Element { const { appConfig } = useConfig(); let location = useLocation(); const { auth: authConfig } = appConfig || {}; diff --git a/packages/base-shell/src/containers/App/index.tsx b/packages/base-shell/src/containers/App/index.tsx index 1aa427737..1614d3ac7 100644 --- a/packages/base-shell/src/containers/App/index.tsx +++ b/packages/base-shell/src/containers/App/index.tsx @@ -21,6 +21,21 @@ export interface AppConfig { [key: string]: any; } +/** + * React component that serves as the main container for the application. + * + * This component receives configuration data as props and manages the + * high-level layout or setup for the application. + * + * @param {AppContainerProps} props - The properties passed to the `AppContainer` component. + * @param {AppConfig} props.config - The application configuration object. + * + * @returns The rendered application container with embedded router and Loading component. + * + * @example + * + * + */ export const AppContainer: React.FC = ({ config: appConfig, }) => { diff --git a/packages/base-shell/src/providers/AddToHomeScreen/Context.tsx b/packages/base-shell/src/providers/AddToHomeScreen/Context.tsx index 19e1d8146..ccabac87e 100644 --- a/packages/base-shell/src/providers/AddToHomeScreen/Context.tsx +++ b/packages/base-shell/src/providers/AddToHomeScreen/Context.tsx @@ -4,6 +4,11 @@ export interface AddToHomeScreenContextType { deferredPrompt?: Event | undefined; isAppInstallable?: boolean; isAppInstalled?: boolean; + + /** + * @description Updates addToHomeScreenContext with provided data + * @param {AddToHomeScreenStateProps} + */ setA2HPState: React.Dispatch>; } diff --git a/packages/base-shell/src/providers/AddToHomeScreen/index.tsx b/packages/base-shell/src/providers/AddToHomeScreen/index.tsx index 19977875d..c03e164ea 100644 --- a/packages/base-shell/src/providers/AddToHomeScreen/index.tsx +++ b/packages/base-shell/src/providers/AddToHomeScreen/index.tsx @@ -1,9 +1,29 @@ import { useContext } from "react"; -import Context from "./Context"; +import Context, { AddToHomeScreenContextType } from "./Context"; import Provider from "./Provider"; -function useAddToHomeScreen() { - return useContext(Context); +/** + * Custom hook for addToHomeScreenContext + * + * @function + * @returns {AddToHomeScreenContext} The locale context value. + * @throws {Error} If used outside of AddToHomeScreenProvider + * @example + * const a2HSContext = useAddToHomeScreen(); + * + * @description + * This hook provides access to AddToHomeScreenContext. + * + * @see {@link AddToHomeScreenContextType} for the shape of the returned context + */ +function useAddToHomeScreen(): AddToHomeScreenContextType { + const context = useContext(Context); + if (!context) { + throw new Error( + "useAddToHomeScreen must be used within a AddToHomeScreenProvider" + ); + } + return context; } export { diff --git a/packages/base-shell/src/providers/Auth/Context.tsx b/packages/base-shell/src/providers/Auth/Context.tsx index 1575d4333..ca92e647a 100644 --- a/packages/base-shell/src/providers/Auth/Context.tsx +++ b/packages/base-shell/src/providers/Auth/Context.tsx @@ -15,6 +15,9 @@ export type AuthUser = { // TODO Fix isAuthGranted import everywhere export interface IAuthContext { + /** + * @description Authorized user object + */ auth: AuthUser; /** diff --git a/packages/base-shell/src/providers/Auth/index.tsx b/packages/base-shell/src/providers/Auth/index.tsx index db22b8e9d..0e24fcfe0 100644 --- a/packages/base-shell/src/providers/Auth/index.tsx +++ b/packages/base-shell/src/providers/Auth/index.tsx @@ -23,7 +23,6 @@ import Provider from "./Provider"; * - login: A function to log in the user * - logout: A function to log out the user * - * @see {@link AuthProvider} for providing the authentication context * @see {@link IAuthContext} for the shape of the returned context */ function useAuth(): IAuthContext { diff --git a/packages/base-shell/src/providers/Config/Context.tsx b/packages/base-shell/src/providers/Config/Context.tsx index d07cd1fe7..b96ec74ff 100644 --- a/packages/base-shell/src/providers/Config/Context.tsx +++ b/packages/base-shell/src/providers/Config/Context.tsx @@ -2,9 +2,14 @@ import { AppConfig } from "@ecronix/base-shell"; import React from "react"; export interface ConfigContextType { + /** + * @description App configuration + */ appConfig: AppConfig; } -const ConfigContext = React.createContext(undefined); +const ConfigContext = React.createContext( + undefined +); export default ConfigContext; diff --git a/packages/base-shell/src/providers/Config/index.tsx b/packages/base-shell/src/providers/Config/index.tsx index be7200aec..05a07197b 100644 --- a/packages/base-shell/src/providers/Config/index.tsx +++ b/packages/base-shell/src/providers/Config/index.tsx @@ -2,11 +2,26 @@ import React, { useContext } from "react"; import Context, { ConfigContextType } from "./Context"; import Provider from "./Provider"; +/** + * Custom hook to access the config provider + * + * @function + * @returns {ConfigContextType} The configuration context. + * @throws {Error} If used outside of an ConfigProvider. + * @example + * const { appConfig } = useConfig(); + * + * @description + * This hook provides access to the configuration context. It provides json object containing all configuration data + * and must be used withing ConfigProvider + * + * @see {@link ConfigContextType} for the shape of the returned context + */ function useConfig(): ConfigContextType { const context = useContext(Context); if (context === undefined) { - throw new Error('useConfig must be used within a ConfigProvider'); + throw new Error("useConfig must be used within a ConfigProvider"); } return context; diff --git a/packages/base-shell/src/providers/Locale/Context.tsx b/packages/base-shell/src/providers/Locale/Context.tsx index adb417898..7a2cd04d3 100644 --- a/packages/base-shell/src/providers/Locale/Context.tsx +++ b/packages/base-shell/src/providers/Locale/Context.tsx @@ -1,7 +1,16 @@ import React from "react"; export interface LocaleContextType { + /** + * Current locale settings - defaults to 'en' + * @type {string} + */ locale: string; + + /** + * Method to update locale settings + * @param {string} locale - New provided locale string + */ setLocale: React.Dispatch>; } diff --git a/packages/base-shell/src/providers/Locale/index.tsx b/packages/base-shell/src/providers/Locale/index.tsx index c1e30d97b..fa53456d4 100644 --- a/packages/base-shell/src/providers/Locale/index.tsx +++ b/packages/base-shell/src/providers/Locale/index.tsx @@ -2,6 +2,21 @@ import { useContext } from "react"; import Context, { LocaleContextType } from "./Context"; import Provider from "./Provider"; +/** + * Custom hook for accessing locale context + * + * @function + * @returns {LocaleContextType} The locale context value. + * @throws {Error} If used outside of LocaleContext + * @example + * const { setLocale, locale = "en" } = useLocale(); + * + * @description + * This hook provides access localization context. It provides locale value and method to update locale value. + * + * @see {@link LocaleProvider} for providing localization context + * @see {@link LocaleContextType} for the shape of the returned context + */ function useLocale(): LocaleContextType { const context = useContext(Context); if (!context) { diff --git a/packages/base-shell/src/providers/Online/Provider.tsx b/packages/base-shell/src/providers/Online/Provider.tsx index a40bef5e7..94e05dfb7 100644 --- a/packages/base-shell/src/providers/Online/Provider.tsx +++ b/packages/base-shell/src/providers/Online/Provider.tsx @@ -3,8 +3,6 @@ import Context from "./Context"; export interface OnlineProviderProps { children: React.ReactNode; - defaultLocale?: string; - persistKey?: string; } const Provider: React.FC = ({ children }) => { diff --git a/packages/base-shell/src/providers/Online/index.tsx b/packages/base-shell/src/providers/Online/index.tsx index b17d938ae..611af8e60 100644 --- a/packages/base-shell/src/providers/Online/index.tsx +++ b/packages/base-shell/src/providers/Online/index.tsx @@ -2,6 +2,18 @@ import { useContext } from "react"; import Context from "./Context"; import Provider from "./Provider"; +/** + * Custom hook to access the online listener provider. + * + * @function + * @returns {boolean} Boolean value regarding if client is online or offline + * @throws {Error} If used outside of an OnlineProvider. + * @example + * const isOnline = useOnline(); + * + * @description + * This hook provides access to the online listener context. It returns true if client is online. + */ function useOnline(): boolean { const context = useContext(Context); if (!context) { diff --git a/packages/base-shell/src/providers/SimpleValues/index.tsx b/packages/base-shell/src/providers/SimpleValues/index.tsx index a9b35cb22..2905ced18 100644 --- a/packages/base-shell/src/providers/SimpleValues/index.tsx +++ b/packages/base-shell/src/providers/SimpleValues/index.tsx @@ -1,7 +1,26 @@ import { useContext } from "react"; import Context, { SimpleValuesContextType } from "./Context"; import Provider from "./Provider"; - +/** + * Custom hook to access the simple values context. + * + * @function + * @returns {SimpleValuesContextType} The simple values context value. + * @throws {Error} If used outside of an SimpleValuesProvider. + * @example + * const { setValue, getValue, clearAll, clearValue } = useSimpleValues(); + * + * @description + * This hook provides access to the simple values context. It must be used inside SimpleValuesProvider. + * It provides set of methods for manipulating values. + * It provides following methods + * - setValue + * - getValue + * - clearAll + * - clearValue + * + * @see {@link SimpleValuesContextType} for the shape of the returned context + */ function useSimpleValues(): SimpleValuesContextType { const context = useContext(Context); if (!context) { diff --git a/packages/base-shell/src/providers/Update/Context.tsx b/packages/base-shell/src/providers/Update/Context.tsx index d4d5e6172..20b2dfaae 100644 --- a/packages/base-shell/src/providers/Update/Context.tsx +++ b/packages/base-shell/src/providers/Update/Context.tsx @@ -1,10 +1,13 @@ import React from "react"; export interface UpdateContextType { + /** + * @description Value indicating if update is available or not + */ isUpdateAvailable: boolean; /** - * @description Update window + * @description Method for updating window * @param registration */ runUpdate: (registration: any) => void; diff --git a/packages/base-shell/src/providers/Update/index.tsx b/packages/base-shell/src/providers/Update/index.tsx index 75a31ebf4..0651e21d1 100644 --- a/packages/base-shell/src/providers/Update/index.tsx +++ b/packages/base-shell/src/providers/Update/index.tsx @@ -1,8 +1,21 @@ import { useContext } from "react"; -import Context from "./Context"; +import Context, { UpdateContextType } from "./Context"; import Provider from "./Provider"; -function useUpdate() { +/** + * Custom hook to access the update context. + * + * @function + * @returns {UpdateContextType} The update context value. + * @throws {Error} If used outside of an UpdateProvider. + * + * @description + * This hook provides access to the update context. It must be used within UpdateProvider. + * + * + * @see {@link UpdateContextType} for the shape of the returned context + */ +function useUpdate(): UpdateContextType { const context = useContext(Context); if (!context) { throw new Error("useUpdate must be used within a UpdateProvider"); diff --git a/packages/base-shell/src/utils/config.ts b/packages/base-shell/src/utils/config.ts index b2a551749..15d9bc503 100644 --- a/packages/base-shell/src/utils/config.ts +++ b/packages/base-shell/src/utils/config.ts @@ -1,3 +1,10 @@ +/** + * @function + * @description Method for merging two different objects. It accepts 2 objects and returns new object. + * @param {Record} obj1 First object + * @param {Record} obj2 Second object + * @returns New object created from merging provided objects + */ export const merge = (obj1: Record, obj2: Record) => { let temp = { ...obj1, ...obj2 }; diff --git a/packages/base-shell/src/utils/locale.ts b/packages/base-shell/src/utils/locale.ts index e059f7bf2..f2eda16de 100644 --- a/packages/base-shell/src/utils/locale.ts +++ b/packages/base-shell/src/utils/locale.ts @@ -36,6 +36,26 @@ const getUsersPreferredLanguages = () => { } }; +/** + * Determines the best matching language based on user preferences and accepted languages. + * + * This function attempts to find a match between the user's preferred languages and a list + * of accepted languages. If no match is found and a default language is provided, it returns + * the default language. Otherwise, it returns `undefined`. + * + * @param acceptedLangs - An array of language codes (e.g., ['en', 'fr', 'de']) that are supported by the application. + * @param defaultLang - (Optional) A default language code to fall back to if no match is found. + * Defaults to an empty string. + * + * @returns A string representing the matched language or the default language if no match is found. + * If no match is found and no default language is provided, it returns `undefined`. + * + * @example + * const acceptedLangs = ['en', 'fr', 'de']; + * const defaultLang = 'en'; + * + * const preferredLang = parseLanguages(acceptedLangs, defaultLang); + */ const parseLanguages = (acceptedLangs: string[], defaultLang: string = "") => { const userPref = getUsersPreferredLanguages(); @@ -50,6 +70,31 @@ const parseLanguages = (acceptedLangs: string[], defaultLang: string = "") => { return match; }; +/** + * Asynchronously retrieves localized messages for a specified locale. + * + * This function searches through a list of locale objects to find a matching locale. + * If a match is found, it dynamically imports and resolves the corresponding + * messages using the `defineMessages` function from react-intl. If no match is found or the list + * of locales is not provided, it returns an empty object. + * + * @param {string} l - The locale string to search for (e.g., 'en', 'fr'). + * @param ls - An array of locale objects, where each object contains: + * - `locale`: The locale identifier as a string. + * - `messages`: The path or reference to the locale's message definitions. + * + * @returns A promise that resolves to the localized messages for the given locale. + * If the locale is not found, the promise resolves to an empty object. + * + * @example + * const { locale }: LocaleContextType = useLocale(); + * + * getLocaleMessages(locale, locales).then((messages) => { + * console.log(messages); + * }); + * + * @see {defineMessages} - Method from react-intl + */ const getLocaleMessages = async ( l: string, ls: { locale: string; messages: any }[] From 4938a7760cf312bd375765aa9ea516e9f29e6740 Mon Sep 17 00:00:00 2001 From: Belmin Mujan Date: Wed, 18 Dec 2024 21:24:38 +0100 Subject: [PATCH 12/21] Material ui shell docs --- .../src/components/FilterDrawer/index.tsx | 18 +++++++++- .../src/components/Loading/index.tsx | 6 +++- .../src/components/MenuHeader/index.tsx | 11 +++++- .../src/components/QuestionDialog/index.tsx | 34 ++++++++++++++++++- .../src/components/Scrollbar/index.tsx | 18 ++++++++++ .../src/components/SearchField/index.tsx | 22 ++++++++++++ .../src/components/UpdateDialog/index.tsx | 21 ++++++++++++ .../containers/ImageUploadDialog/index.tsx | 16 +++++++++ .../src/containers/LayoutContainer/index.tsx | 18 ++++++++++ .../src/containers/Menu/index.tsx | 15 ++++++++ .../src/containers/ResponsiveMenu/index.tsx | 4 +++ .../containers/SelectableMenuList/index.tsx | 24 ++++++++++++- .../src/containers/UpdateContainer/index.tsx | 16 +++++++++ .../src/containers/VirtualList/index.tsx | 13 ++++--- 14 files changed, 227 insertions(+), 9 deletions(-) diff --git a/packages/material-ui-shell/src/components/FilterDrawer/index.tsx b/packages/material-ui-shell/src/components/FilterDrawer/index.tsx index ee422c30a..009bb8ab6 100644 --- a/packages/material-ui-shell/src/components/FilterDrawer/index.tsx +++ b/packages/material-ui-shell/src/components/FilterDrawer/index.tsx @@ -23,11 +23,27 @@ type FilterDrawerProps = { fields: FieldType[] } +/** + * A functional React component for rendering a filter drawer. + * + * The `FilterDrawer` is a customizable drawer that displays filter fields + * based on the provided configuration. It supports optional width customization. + * + * @param {FilterDrawerProps} props - The properties passed to the `FilterDrawer` component. + * @param {string} props.name - The name of the filter drawer, used for identification purposes. + * @param {number} [props.width=250] - The width of the drawer in pixels. Defaults to 250px. + * @param {FieldType[]} props.fields - An array of field definitions to display within the drawer. + * + * @returns {JSX.Element} The rendered filter drawer component. + * + * @example + * + */ export default function FilterDrawer({ name, width = 250, fields = [], -}: FilterDrawerProps) { +}: FilterDrawerProps): JSX.Element { const intl = useIntl() const { isFilterOpen, diff --git a/packages/material-ui-shell/src/components/Loading/index.tsx b/packages/material-ui-shell/src/components/Loading/index.tsx index c4dd7c8c3..24320017b 100644 --- a/packages/material-ui-shell/src/components/Loading/index.tsx +++ b/packages/material-ui-shell/src/components/Loading/index.tsx @@ -1,7 +1,11 @@ import React from 'react' import CircularProgress from '@mui/material/CircularProgress' -export default function Loading() { +/** + * @description Circular loading indicator. + * @returns CircularProgress component with size of 50 + */ +export default function Loading(): JSX.Element { return (
( (props, ref) => ) +type QuestionDialogProps = { + isProcessing?: boolean + isOpen?: boolean + id?: string + message?: string + title?: string + action?: string + handleAction?: (handleClose: () => void) => void + handleClose?: () => void + [key: string]: any +} + +/** + * @description Quection dialog react component. Uses Dialog from @mui/material as base component + * The `QuestionDialog` component displays a customizable dialog with a title, message, + * and action buttons. It supports asynchronous actions and allows for custom closing behavior. + * + * + * @param {QuestionDialogProps} props - The properties passed to the `QuestionDialog` component. + * @param {boolean} [props.isProcessing=false] - Indicates whether the dialog is in a loading or processing state. + * @param {boolean} [props.isOpen=false] - Determines whether the dialog is open or closed. + * @param {string} [props.id=''] - An optional identifier for the dialog instance. + * @param {string} [props.message=''] - The message displayed in the dialog body. + * @param {string} [props.title=''] - The title of the dialog. + * @param {string} [props.action=''] - The label for the action button. + * @param {(handleClose: () => void) => void} [props.handleAction] - Callback executed when the action button is clicked. + * Receives the `handleClose` function as an argument to allow closing the dialog. + * @param {() => void} [props.handleClose] - Callback executed when the dialog is closed. + * @param rest - Additional props passed to the dialog component. + * + * @returns React component Question dialog + */ export default function QuestionDialog({ isProcessing = false, isOpen = false, @@ -28,7 +60,7 @@ export default function QuestionDialog({ handleAction = (handleClose: () => void) => {}, handleClose = () => {}, ...rest -}) { +}: QuestionDialogProps) { const intl = useIntl() const theme = useTheme() const fullScreen = useMediaQuery(theme.breakpoints.down('sm')) diff --git a/packages/material-ui-shell/src/components/Scrollbar/index.tsx b/packages/material-ui-shell/src/components/Scrollbar/index.tsx index 793efb66f..ffc9a21e8 100644 --- a/packages/material-ui-shell/src/components/Scrollbar/index.tsx +++ b/packages/material-ui-shell/src/components/Scrollbar/index.tsx @@ -2,6 +2,24 @@ import React, { useCallback } from 'react' import { Scrollbars } from 'react-custom-scrollbars-2' import { useTheme as useAppTheme } from '@ecronix/material-ui-shell' +/** + * A functional React component that wraps around a custom scrollbar implementation. + * + * The `Scrollbar` component provides a customizable scrollbar with support for RTL (right-to-left) + * layouts and dynamic reference forwarding. It uses react-custom-scrollbars-2 package as base. + * + * @param {ScrollbarProps} props - The properties passed to the `Scrollbar` component. + * @param {(ref: any) => void} [props.forwardedRef=() => {}] - A callback function for setting the forwarded reference + * to the scrollable view. + * @param rest - Additional props passed to the underlying `Scrollbars` component. + * + * @returns The rendered scrollbar component. + * + * @example + * + * + * + */ export default function Scrollbar(props: any) { const { forwardedRef = () => {}, ...rest } = props const { isRTL } = useAppTheme() diff --git a/packages/material-ui-shell/src/components/SearchField/index.tsx b/packages/material-ui-shell/src/components/SearchField/index.tsx index c9da40ade..c3c437dec 100644 --- a/packages/material-ui-shell/src/components/SearchField/index.tsx +++ b/packages/material-ui-shell/src/components/SearchField/index.tsx @@ -60,6 +60,28 @@ type SearchFieldProps = { alwaysOpen?: boolean deferTime?: number } + +/** + * React component for a search input field with deferred updates. + * + * The `SearchField` component provides an input field for searching with customizable + * initial value, deferred execution of the `onChange` callback, and options to always keep the field open. + * + * @param {SearchFieldProps} props - The properties passed to the `SearchField` component. + * @param props.onChange - A callback function that is triggered when the input value changes. + * The callback is executed after a specified delay (`deferTime`). + * @param {string} props.initialValue - The initial value of the search input field. + * @param {boolean} [props.alwaysOpen=false] - If true, the search input is always displayed as open. + * @param {number} [props.deferTime=1000] - The delay (in milliseconds) before the `onChange` callback is executed. + * + * @returns The rendered search input field. + * + * @example + * console.log('Search input changed:', value)} + * /> + */ export default function SearchField({ onChange, initialValue = '', diff --git a/packages/material-ui-shell/src/components/UpdateDialog/index.tsx b/packages/material-ui-shell/src/components/UpdateDialog/index.tsx index bc18a39a2..9c2108028 100644 --- a/packages/material-ui-shell/src/components/UpdateDialog/index.tsx +++ b/packages/material-ui-shell/src/components/UpdateDialog/index.tsx @@ -16,6 +16,27 @@ type UpdateDialogProps = { runUpdate: () => void } +/** + * A functional React component that renders a dialog to notify the user about an available update. + * + * The `UpdateDialog` component provides options to proceed with an update or postpone it. + * It handles various UI states including responsiveness and localization. + * + * @param {UpdateDialogProps} props - The properties passed to the `UpdateDialog` component. + * @param {boolean} props.isUpdateAvailable - Indicates whether an update is available. If true, the dialog opens. + * @param props.runUpdate - Callback function to run the update when the "Update" button is clicked. + * + * @returns The rendered update dialog component. + * + * @example + * { + * console.log('Running update...'); + * }} + * /> + */ + export default function UpdateDialog({ isUpdateAvailable, runUpdate, diff --git a/packages/material-ui-shell/src/containers/ImageUploadDialog/index.tsx b/packages/material-ui-shell/src/containers/ImageUploadDialog/index.tsx index f22fbdbcf..a40c0d550 100644 --- a/packages/material-ui-shell/src/containers/ImageUploadDialog/index.tsx +++ b/packages/material-ui-shell/src/containers/ImageUploadDialog/index.tsx @@ -50,6 +50,22 @@ type ImageUploadDialogContainerProps = { cropperProps: any } +/** + * + * @description Dialog for uploading image + * @example + * setImageDialogOpen(false)} + * handleCropSubmit={handleImageChange} + * /> + * + * @param {ImageUploadDialogContainerProps} props + * @param {boolean} props.isOpen - Boolean flag indicating if Dialog is open + * @param props.handleClose - Method for closing Dialog + * @param props.handleCropSubmit - Method for submitting Dialog + * @param {string} props.path - Path of image - on change clear all states on Dialog + */ export function ImageUploadDialogContainer({ isOpen = false, handleClose, diff --git a/packages/material-ui-shell/src/containers/LayoutContainer/index.tsx b/packages/material-ui-shell/src/containers/LayoutContainer/index.tsx index aa3214ebe..8f1f49c77 100644 --- a/packages/material-ui-shell/src/containers/LayoutContainer/index.tsx +++ b/packages/material-ui-shell/src/containers/LayoutContainer/index.tsx @@ -85,6 +85,24 @@ type LCProps = { children: React.ReactNode } +/** + * A functional React component that provides a layout container for the application. + * LayoutContainer is provided in app configuration under container section + * + * The `LayoutContainer` component is responsible for wrapping the children with necessary providers + * such as the `MenuProvider` and `AppThemeProvider`. It also integrates the `LayoutContent` component + * for setting up the theme and other configurations. + * + * @param {LCProps} props - The properties passed to the `LayoutContainer` component. + * @param {React.ReactNode} props.children - The child elements to be rendered inside the container. + * + * @returns The rendered layout container with applied theme and menu context. + * + * @example + * + * + * + */ export function LayoutContainer({ children }: LCProps): JSX.Element { const { appConfig } = useConfig() diff --git a/packages/material-ui-shell/src/containers/Menu/index.tsx b/packages/material-ui-shell/src/containers/Menu/index.tsx index 0b4623f03..251495d0d 100644 --- a/packages/material-ui-shell/src/containers/Menu/index.tsx +++ b/packages/material-ui-shell/src/containers/Menu/index.tsx @@ -2,6 +2,21 @@ import React from 'react' import { ResponsiveMenuContainer } from '@ecronix/material-ui-shell' import { useConfig } from '@ecronix/base-shell' +/** + * React component rendering MenuHeader and MenuContent. It loads data from config using useConfig hook. + * It renders MenuHeader and MenuContent component if they are provided in application configuration under + * menu scetion. As main wrapper it sets BaseMenu component defined in app config under menu section + * + * If MenuContainer is not provided it uses ResponsiveMenuContainer from material-ui-shell + * + * @example + * appConfig: { + * components: { + * Menu: MenuContainer + * } + * } + * @see {ResponsiveMenuContainer} - for fallback component + */ export function MenuContainer() { const { appConfig } = useConfig() const { menu } = appConfig || {} diff --git a/packages/material-ui-shell/src/containers/ResponsiveMenu/index.tsx b/packages/material-ui-shell/src/containers/ResponsiveMenu/index.tsx index cf280e006..b82163ab2 100644 --- a/packages/material-ui-shell/src/containers/ResponsiveMenu/index.tsx +++ b/packages/material-ui-shell/src/containers/ResponsiveMenu/index.tsx @@ -58,6 +58,10 @@ const CustomSwipeableDrawer = styled( } }) +/** + * @description Wraps provided component in swipable drawer from @mui/material + * @param props.children - Children passed in compontent + */ export function ResponsiveMenuContainer({ children, }: { diff --git a/packages/material-ui-shell/src/containers/SelectableMenuList/index.tsx b/packages/material-ui-shell/src/containers/SelectableMenuList/index.tsx index 8ca0ec3b8..25dd7ecff 100644 --- a/packages/material-ui-shell/src/containers/SelectableMenuList/index.tsx +++ b/packages/material-ui-shell/src/containers/SelectableMenuList/index.tsx @@ -4,7 +4,6 @@ import { KeyboardArrowLeft as KeyboardArrowLeftIcon, KeyboardArrowRight, ArrowBack, - Login, } from '@mui/icons-material' import { Divider, @@ -37,6 +36,29 @@ type StateType = { title?: string index?: number | string } + +/** + * @description Menu list container component takeing in account RTL properties from theme and + * isMiniMode property from menu context + * @param {PropTypes} props - properties passed in component + * @param props.onIndexChange - method triggered on index change on List component from @mui/material + * @param {boolean} props.useMinfied - defines if minified menu should be displayed + * @param props.items - Menu items to be renderd + * @param props.index - optional parameter + * + * @example + * + * @returns + * + * @see {useMenu} - for referencing isMiniMode + * @see {useAppTheme} - for referencing isRTL + */ export function SelectableMenuListContainer({ onIndexChange, useMinified, diff --git a/packages/material-ui-shell/src/containers/UpdateContainer/index.tsx b/packages/material-ui-shell/src/containers/UpdateContainer/index.tsx index 03a49148d..b180028e4 100644 --- a/packages/material-ui-shell/src/containers/UpdateContainer/index.tsx +++ b/packages/material-ui-shell/src/containers/UpdateContainer/index.tsx @@ -8,6 +8,22 @@ const runUpdate = () => { window.update && window.update() } +/** + * @description React component that manages the update process. + * The `UpdateContainer` component checks for updates periodically and shows a notification + * if an update is available. It provides buttons to either update immediately or defer the update. + * The update process is handled by a global `window.update` function, if available. + * + * @param {UpdateContainerProps} props - The properties passed to the `UpdateContainer` component. + * @param {React.ReactNode} props.children - The child elements to be rendered inside the container. + * + * @returns The rendered update container which wraps its children. + * + * @example + * + * + * + */ export function UpdateContainer({ children }: { children: React.ReactNode }) { const intl = useIntl() const { appConfig } = useConfig() diff --git a/packages/material-ui-shell/src/containers/VirtualList/index.tsx b/packages/material-ui-shell/src/containers/VirtualList/index.tsx index f6959e9cc..1cd1f42d2 100644 --- a/packages/material-ui-shell/src/containers/VirtualList/index.tsx +++ b/packages/material-ui-shell/src/containers/VirtualList/index.tsx @@ -1,9 +1,13 @@ // @ts-ignore import AutoSizer from 'lp-react-virtualized-auto-sizer-react-18' import { List } from '@mui/material' -import React, { useEffect, MutableRefObject } from 'react' +import React, { useEffect, MutableRefObject, ComponentType } from 'react' import Scrollbar from '../../components/Scrollbar' -import { FixedSizeList, FixedSizeList as FixedSizeListType } from 'react-window' +import { + FixedSizeList, + FixedSizeList as FixedSizeListType, + ReactElementType, +} from 'react-window' import { useState } from 'react' import { @@ -68,7 +72,8 @@ export function VirtualListContainer(props: VirtualListContainerProps) { {({ height, width }: { height: number; width: number }) => { return ( - { if (r) { @@ -80,7 +85,7 @@ export function VirtualListContainer(props: VirtualListContainerProps) { itemCount={list.length} itemSize={100} width={width} - outerElementType={CustomScrollbarsVirtualList} + outerElementType={CustomScrollbarsVirtualList as ReactElementType} {...listProps} > {(p) => } From a9555c18e317000b7178fc3160f56ba8ed0f7905 Mon Sep 17 00:00:00 2001 From: Belmin Mujan Date: Wed, 18 Dec 2024 22:55:43 +0100 Subject: [PATCH 13/21] Working on docs --- .../src/pages/ListPage/index.tsx | 39 +++++++- .../src/pages/Page/index.tsx | 30 ++++++ .../src/pages/PageNotFound/index.tsx | 3 + .../src/providers/Dialogs/Question/index.tsx | 17 +++- .../src/providers/Filter/Context.tsx | 99 ++++++++++++++++++- .../src/providers/Filter/store/actions.tsx | 61 ++++++++++++ .../src/providers/Menu/Context.tsx | 1 + .../src/providers/Menu/index.tsx | 25 ++++- .../src/providers/Menu/store/actions.tsx | 60 +++++++++++ .../src/providers/Theme/Context.tsx | 12 +++ .../src/providers/Theme/index.tsx | 13 +++ .../src/providers/VirtualLists/Context.tsx | 2 +- .../src/providers/VirtualLists/index.tsx | 21 +++- 13 files changed, 374 insertions(+), 9 deletions(-) diff --git a/packages/material-ui-shell/src/pages/ListPage/index.tsx b/packages/material-ui-shell/src/pages/ListPage/index.tsx index ed888b77d..e75d40a06 100644 --- a/packages/material-ui-shell/src/pages/ListPage/index.tsx +++ b/packages/material-ui-shell/src/pages/ListPage/index.tsx @@ -10,7 +10,6 @@ type ListPageProps = { fields?: any list?: any getPageProps: (data: any) => {} - listContainerStyle?: any listProps: any Row: React.FC name: string @@ -23,6 +22,44 @@ type ListPageProps = { parseList?: (data: any) => void } +/** + * `ListPage` component that renders a page containing a list of items with optional search, filter, and custom top/bottom content. + * It provides functionality for managing list data, applying search filters, and rendering custom row components. + * + * @example + * return ( + * ({ title: 'My List Page', data })} + * listProps={{ someProp: 'value' }} + * Row={RowComponent} + * disableSearch={false} + * disableFilter={false} + * top={} + * bottom={} + * parseList={(data) => data.filter(item => item.active)} + * /> + * ) + * + * @param {Object} props - Component props. + * @param {any[]} [props.fields=[]] - Fields to be used for filtering or displaying data in the list. + * @param {any[]} [props.list=[]] - The source list of items to display. + * @param {(data: any) => {}} props.getPageProps - A function to get additional page props (e.g., title, other page settings). + * @param {any} props.listProps - Properties to pass to the list rendering component. + * @param {React.FC} props.Row - The row component to render each item in the list. + * @param {string} props.name - The name identifier for the list, used for managing search and filters. + * @param {string | null} [props.trailing=null] - Optional content to render at the trailing (right) side of the app bar. + * @param {React.ReactNode | null} [props.leading=null] - Optional content to render at the leading (left) side of the app bar. + * @param {boolean} [props.disableSearch=false] - Flag to disable the search functionality. + * @param {boolean} [props.disableFilter=false] - Flag to disable the filter functionality. + * @param {React.ReactNode} [props.top=null] - Optional content to display at the top of the list page. + * @param {React.ReactNode} [props.bottom=null] - Optional content to display at the bottom of the list page. + * @param {(data: any) => any} [props.parseList=(l) => l] - A function to parse or transform the list data before rendering. + * + * @returns The rendered `ListPage` component with a list, optional filters, search, and custom content. + */ export function ListPage(props: ListPageProps) { const { fields = [], diff --git a/packages/material-ui-shell/src/pages/Page/index.tsx b/packages/material-ui-shell/src/pages/Page/index.tsx index 1a940f8ed..1f0b60470 100644 --- a/packages/material-ui-shell/src/pages/Page/index.tsx +++ b/packages/material-ui-shell/src/pages/Page/index.tsx @@ -23,6 +23,36 @@ type PageProps = { contentStyle?: any tabs?: any } + +/** + * `Page` component that provides a layout structure with an app bar, optional back button, + * loading indicator, offline status, and customizable content area. + * + * @component + * @example + * return ( + * console.log('Back button clicked')} + * isLoading={false} + * appBarContent={} + * tabs={
My Custom Tabs
} + * > + *
This is the content of the page.
+ *
+ * ) + * + * @param {Object} props - Component props. + * @param {React.ReactNode} props.children - The content to render within the page. + * @param {string | String} [props.pageTitle] - The title to display in the app bar. + * @param [props.onBackClick] - A callback function to handle the back button click event. + * @param {boolean} [props.isLoading] - A flag to indicate whether the page is in a loading state. + * @param {React.ReactNode} [props.appBarContent=null] - Content to be placed within the app bar (e.g., buttons, icons). + * @param {React.CSSProperties} [props.contentStyle] - Additional styles to apply to the content area of the page. + * @param {React.ReactNode} [props.tabs=null] - Tabs content to be rendered below the app bar (optional). + * + * @returns The rendered `Page` component. + */ export function Page({ children, pageTitle, diff --git a/packages/material-ui-shell/src/pages/PageNotFound/index.tsx b/packages/material-ui-shell/src/pages/PageNotFound/index.tsx index 5a28b3b35..41fa0af7b 100644 --- a/packages/material-ui-shell/src/pages/PageNotFound/index.tsx +++ b/packages/material-ui-shell/src/pages/PageNotFound/index.tsx @@ -4,6 +4,9 @@ import { Page } from '@ecronix/material-ui-shell' import React from 'react' import { useIntl } from 'react-intl' +/** + * @description Renders not found page + */ export const NotFoundPage: React.FC = () => { const intl = useIntl() diff --git a/packages/material-ui-shell/src/providers/Dialogs/Question/index.tsx b/packages/material-ui-shell/src/providers/Dialogs/Question/index.tsx index e20dc0343..dd630544b 100644 --- a/packages/material-ui-shell/src/providers/Dialogs/Question/index.tsx +++ b/packages/material-ui-shell/src/providers/Dialogs/Question/index.tsx @@ -1,8 +1,21 @@ import { useContext } from 'react' -import Context from './Context' +import Context, { DialogsContextType } from './Context' import Provider from './Provider' -function useQuestionsDialog() { +/** + * Custom hook to access the question dialog context. + * + * @function + * @returns {DialogsContextType} The theme context value. + * @throws {Error} If used outside of an QuestionsDialogProvider. + * @example + * const { openDialog, closeDialog, setProcessing } = useQuestionsDialog(); + * + * @description Gives you access to questions dialog. It must be used within QuestionsDialogProvider and it provides you + * with methods for opening and closing dialog, as well as handling processing + * + */ +function useQuestionsDialog(): DialogsContextType { const context = useContext(Context) if (context === undefined) { throw new Error( diff --git a/packages/material-ui-shell/src/providers/Filter/Context.tsx b/packages/material-ui-shell/src/providers/Filter/Context.tsx index 7cfa93826..7b1af19e3 100644 --- a/packages/material-ui-shell/src/providers/Filter/Context.tsx +++ b/packages/material-ui-shell/src/providers/Filter/Context.tsx @@ -5,25 +5,122 @@ import { } from '@ecronix/material-ui-shell/common.type' export interface FilterContextType { + /** + * Opens the filter panel for the specified list. + * + * @param {string} name - The name of the list for which the filter panel should be opened. + */ openFilter: (name: string) => void + + /** + * Closes the filter panel for the specified list. + * + * @param {string} name - The name of the list for which the filter panel should be closed. + */ closeFilter: (name: string) => void + + /** + * Clears the filter queries for the specified list. + * + * @param {string} name - The name of the list whose filters should be cleared. + */ clearFilter: (name: string) => void + + /** + * Sets the search query for the specified list. + * + * @param {string} name - The name of the list for which the search query should be set. + * @param {string} search - The search query string. + */ setSearch: (name: string, search: string) => void + + /** + * Sets the field by which the list should be sorted. + * + * @param {string} name - The name of the list for which the sort field should be set. + * @param {string} sortField - The field to sort by. + */ setFilterSortField: (name: string, sortField: string) => void + + /** + * Sets the sort orientation (ascending or descending) for the specified list. + * + * @param {string} name - The name of the list for which the sort orientation should be set. + * @param {SortOrientationType} sortOrientation - The sort orientation (e.g., 'asc' or 'desc'). + */ setFilterSortOrientation: ( name: string, sortOrientation: SortOrientationType ) => void + + /** + * Adds a new filter query to the specified list. + * + * @param {string} name - The name of the list to which the filter query should be added. + * @param {any} query - The filter query to be added. + */ addFilterQuery: (name: string, query: any) => void + + /** + * Removes a filter query from the specified list by index. + * + * @param {string} name - The name of the list from which the filter query should be removed. + * @param {number} index - The index of the filter query to be removed. + */ removeFilterQuery: (name: string, index: number) => void + + /** + * Edits an existing filter query for the specified list. + * + * @param {string} name - The name of the list for which the filter query should be edited. + * @param {number} index - The index of the filter query to be edited. + * @param {any} query - The new filter query. + */ editFilterQuery: (name: string, index: number, query: any) => void + + /** + * Retrieves the filtered and sorted list for the specified list. + * + * @param {string} name - The name of the list to retrieve the filtered and sorted data. + * @param {any} list - The original list to apply filters and sorting to. + * @param {FieldType[]} fields - The fields that should be considered for filtering and sorting. + * @returns {any} The filtered and sorted list. + */ getList: (name: string, list: any, fields: FieldType[]) => any + + /** + * Checks whether the filter panel is open for the specified list. + * + * @param {string} name - The name of the list to check the filter panel state. + * @returns {boolean} `true` if the filter panel is open, `false` otherwise. + */ isFilterOpen: (name: string) => boolean + + /** + * Retrieves the filter queries for the specified list. + * + * @param {string} name - The name of the list to retrieve the filter queries for. + * @returns {any[]} An array of filter queries for the specified list. + */ getFilterQueries: (name: string) => any[] + + /** + * Retrieves the current filter state for the specified list. + * + * @param {string} name - The name of the list to retrieve the filter state for. + * @returns {any} The current filter state for the specified list. + */ getFilter: (name: string) => any + + /** + * Retrieves the field object by its name from the list of fields. + * + * @param {string} fieldName - The name of the field to retrieve. + * @param {FieldType[]} fields - The list of fields to search from. + * @returns {any} The field object corresponding to the provided field name. + */ getField: (fieldName: string, fields: FieldType[]) => any } - export const Context = React.createContext( undefined ) diff --git a/packages/material-ui-shell/src/providers/Filter/store/actions.tsx b/packages/material-ui-shell/src/providers/Filter/store/actions.tsx index 4088993ab..8cc1c9f0a 100644 --- a/packages/material-ui-shell/src/providers/Filter/store/actions.tsx +++ b/packages/material-ui-shell/src/providers/Filter/store/actions.tsx @@ -1,6 +1,12 @@ import { SortOrientationType } from '@ecronix/material-ui-shell/common.type' import * as types from './types' +/** + * Opens the filter panel for the specified list. + * + * @param {string} name - The name of the list for which the filter panel should be opened. + * @returns The action object with the type `ON_FILTER_IS_OPEN`, the list name, and a payload indicating that the filter is open. + */ export function openFilter(name: string) { return { type: types.ON_FILTER_IS_OPEN, @@ -9,6 +15,12 @@ export function openFilter(name: string) { } } +/** + * Closes the filter panel for the specified list. + * + * @param {string} name - The name of the list for which the filter panel should be closed. + * @returns The action object with the type `ON_FILTER_IS_CLOSE`, the list name, and a payload indicating that the filter is closed. + */ export function closeFilter(name: string) { return { type: types.ON_FILTER_IS_CLOSE, @@ -17,6 +29,12 @@ export function closeFilter(name: string) { } } +/** + * Clears all filter queries for the specified list. + * + * @param {string} name - The name of the list for which the filter queries should be cleared. + * @returns The action object with the type `ON_CLEAR` and the list name. + */ export function clearFilter(name: string) { return { type: types.ON_CLEAR, @@ -24,6 +42,13 @@ export function clearFilter(name: string) { } } +/** + * Sets the sorting field for the specified list. + * + * @param {string} name - The name of the list for which the sort field should be set. + * @param {string} sortField - The field to sort by. + * @returns The action object with the type `ON_FILTER_SORT_FIELD_CHANGED`, the list name, and the new sort field. + */ export function setFilterSortField(name: string, sortField: string) { return { type: types.ON_FILTER_SORT_FIELD_CHANGED, @@ -32,6 +57,13 @@ export function setFilterSortField(name: string, sortField: string) { } } +/** + * Sets the sorting orientation (ascending or descending) for the specified list. + * + * @param {string} name - The name of the list for which the sort orientation should be set. + * @param {SortOrientationType} sortOrientation - The sort orientation (e.g., 'asc' or 'desc'). + * @returns The action object with the type `ON_FILTER_SORT_FIELD_CHANGED`, the list name, and the new sort orientation. + */ export function setFilterSortOrientation( name: string, sortOrientation: SortOrientationType @@ -43,6 +75,13 @@ export function setFilterSortOrientation( } } +/** + * Adds a new filter query to the specified list. + * + * @param {string} name - The name of the list to which the filter query should be added. + * @param {any} query - The filter query to be added. + * @returns The action object with the type `ON_ADD_FILTER_QUERY`, the list name, and the new query as payload. + */ export function addFilterQuery(name: string, query: any) { return { type: types.ON_ADD_FILTER_QUERY, @@ -51,6 +90,13 @@ export function addFilterQuery(name: string, query: any) { } } +/** + * Sets the search query for the specified list. + * + * @param {string} name - The name of the list for which the search query should be set. + * @param {string} search - The search query string. + * @returns The action object with the type `ON_SET_SEARCH`, the list name, and the search query as payload. + */ export function setSearch(name: string, search: string) { return { type: types.ON_SET_SEARCH, @@ -59,6 +105,14 @@ export function setSearch(name: string, search: string) { } } +/** + * Edits an existing filter query for the specified list. + * + * @param {string} name - The name of the list for which the filter query should be edited. + * @param {number} index - The index of the filter query to be edited. + * @param {any} query - The updated filter query. + * @returns The action object with the type `ON_EDIT_FILTER_QUERY`, the list name, the index of the query, and the new query. + */ export function editFilterQuery(name: string, index: number, query: any) { return { type: types.ON_EDIT_FILTER_QUERY, @@ -68,6 +122,13 @@ export function editFilterQuery(name: string, index: number, query: any) { } } +/** + * Removes a filter query from the specified list by index. + * + * @param {string} name - The name of the list from which the filter query should be removed. + * @param {number} index - The index of the filter query to be removed. + * @returns The action object with the type `ON_REMOVE_FILTER_QUERY`, the list name, and the index of the query to be removed. + */ export function removeFilterQuery(name: string, index: number) { return { type: types.ON_REMOVE_FILTER_QUERY, diff --git a/packages/material-ui-shell/src/providers/Menu/Context.tsx b/packages/material-ui-shell/src/providers/Menu/Context.tsx index 995240e3f..79e9e0426 100644 --- a/packages/material-ui-shell/src/providers/Menu/Context.tsx +++ b/packages/material-ui-shell/src/providers/Menu/Context.tsx @@ -9,6 +9,7 @@ export enum togglerTypes { } export type MenuContextType = { + /** Method for updating context values. Use `togglerTypes` enum to access properties. Provide new value to set to specified property */ toggleThis: (value: togglerTypes, newValue?: boolean | null) => void isDesktop: boolean isAuthMenuOpen?: boolean diff --git a/packages/material-ui-shell/src/providers/Menu/index.tsx b/packages/material-ui-shell/src/providers/Menu/index.tsx index 59a5cb4cc..e67dd7f1d 100644 --- a/packages/material-ui-shell/src/providers/Menu/index.tsx +++ b/packages/material-ui-shell/src/providers/Menu/index.tsx @@ -1,8 +1,29 @@ import { useContext } from 'react' -import Context from './Context' +import Context, { MenuContextType } from './Context' import Provider from './Provider' -function useMenu() { +/** + * Custom hook to access the menu context. + * + * @function + * @returns {MenuContextType} The menu context value. + * @throws {Error} If used outside of an MenuProvider. + * @example + * const menuContext = useMenu() + * + * @description Gives you access to menu context. Provides you with set of properties and method to update those + * properties. Possible to change properties defined in `togglerTypes` enum. + * Provides you with properties: + * - isDesktop: boolean + * - isAuthMenuOpen?: boolean + * - isMiniMode?: boolean + * - isMenuOpen?: boolean + * - isMobileMenuOpen?: boolean + * - isMiniSwitchVisibility?: boolean + * + * @see {togglerTypes} to check possible values to change with method + */ +function useMenu(): MenuContextType { const context = useContext(Context) if (context === undefined) { diff --git a/packages/material-ui-shell/src/providers/Menu/store/actions.tsx b/packages/material-ui-shell/src/providers/Menu/store/actions.tsx index 859d1e6ba..3a98dd16d 100644 --- a/packages/material-ui-shell/src/providers/Menu/store/actions.tsx +++ b/packages/material-ui-shell/src/providers/Menu/store/actions.tsx @@ -1,5 +1,17 @@ import * as types from './types' +/** + * @description This is used in Context Provider + * Action creator for setting the state of whether the authentication menu is open. + * + * This action is dispatched to update the `isAuthMenuOpen` state in the global menu store. + * + * @param {boolean} payload - The new value indicating whether the authentication menu should be open (`true`) or closed (`false`). + * @returns The action object to be dispatched with the `type` and `payload`. + * + * @example + * dispatch(setIsAuthMenuOpen(true)); + */ export function setIsAuthMenuOpen(payload: boolean) { return { type: types.SET_IS_AUTH_MENU_OPEN, @@ -7,6 +19,18 @@ export function setIsAuthMenuOpen(payload: boolean) { } } +/** + * @description This is used in Context Provider + * Action creator for setting the state of whether the menu is in mini (collapsed) mode. + * + * This action is dispatched to update the `isMiniMode` state in the global menu store. + * + * @param {boolean} payload - The new value indicating whether the menu should be in mini mode (`true`) or not (`false`). + * @returns The action object to be dispatched with the `type` and `payload`. + * + * @example + * dispatch(setIsMiniMode(false)); + */ export function setIsMiniMode(payload: boolean) { return { type: types.SET_IS_MINI_MODE, @@ -14,6 +38,18 @@ export function setIsMiniMode(payload: boolean) { } } +/** + * @description This is used in Context Provider + * Action creator for setting the state of whether the menu is open. + * + * This action is dispatched to update the `isMenuOpen` state in the global menu store. + * + * @param {boolean} payload - The new value indicating whether the menu should be open (`true`) or closed (`false`). + * @returns The action object to be dispatched with the `type` and `payload`. + * + * @example + * dispatch(setIsMenuOpen(true)); + */ export function setIsMenuOpen(payload: boolean) { return { type: types.SET_IS_MENU_OPEN, @@ -21,6 +57,18 @@ export function setIsMenuOpen(payload: boolean) { } } +/** + * @description This is used in Context Provider + * Action creator for setting the state of whether the mobile version of the menu is open. + * + * This action is dispatched to update the `isMobileMenuOpen` state in the global menu store. + * + * @param {boolean} payload - The new value indicating whether the mobile menu should be open (`true`) or closed (`false`). + * @returns The action object to be dispatched with the `type` and `payload`. + * + * @example + * dispatch(setIsMobileMenuOpen(true)); + */ export function setIsMobileMenuOpen(payload: boolean) { return { type: types.SET_IS_MOBILE_MENU_OPEN, @@ -28,6 +76,18 @@ export function setIsMobileMenuOpen(payload: boolean) { } } +/** + * @description This is used in Context Provider + * Action creator for setting the state of whether the mini switch (for switching between menu modes) is visible. + * + * This action is dispatched to update the `isMiniSwitchVisibility` state in the global menu store. + * + * @param {boolean} payload - The new value indicating whether the mini switch should be visible (`true`) or not (`false`). + * @returns The action object to be dispatched with the `type` and `payload`. + * + * @example + * dispatch(setIsMiniSwitchVisibility(false)); + */ export function setIsMiniSwitchVisibility(payload: boolean) { return { type: types.SET_IS_MINI_SWITCH_VISIBILITY, diff --git a/packages/material-ui-shell/src/providers/Theme/Context.tsx b/packages/material-ui-shell/src/providers/Theme/Context.tsx index 1c56c37a4..193c72b1d 100644 --- a/packages/material-ui-shell/src/providers/Theme/Context.tsx +++ b/packages/material-ui-shell/src/providers/Theme/Context.tsx @@ -11,8 +11,20 @@ export interface ThemeContextType { * @param mode - Parameter mode can be 'isRTL' or 'isDarkMode' and accordingly theme parameters will switch for that param */ toggleThisTheme: (mode: 'isRTL' | 'isDarkMode') => void + + /** + * @description Boolean value definig if dark mode is enabled + */ isDarkMode: boolean + + /** + * @description Boolean value definig if RTL is enabled + */ isRTL: boolean + + /** + * @description Id of theme + */ themeID: string } diff --git a/packages/material-ui-shell/src/providers/Theme/index.tsx b/packages/material-ui-shell/src/providers/Theme/index.tsx index 0ec0cd89e..326bf0129 100644 --- a/packages/material-ui-shell/src/providers/Theme/index.tsx +++ b/packages/material-ui-shell/src/providers/Theme/index.tsx @@ -2,6 +2,19 @@ import { useContext } from 'react' import Context, { ThemeContextType } from './Context' import Provider from './Provider' +/** + * Custom hook to access the theme context. + * + * @function + * @returns {ThemeContextType} The theme context value. + * @throws {Error} If used outside of an ThemeProvider. + * @example + * const theme = useTheme() + * + * @description Gives you access to theme context. Theme context provides you with set of methods and properties that define + * look of the App. + * Default values are provided in application configuration file. + */ function useTheme(): ThemeContextType { const context = useContext(Context) diff --git a/packages/material-ui-shell/src/providers/VirtualLists/Context.tsx b/packages/material-ui-shell/src/providers/VirtualLists/Context.tsx index a30e056bb..2c334d8a2 100644 --- a/packages/material-ui-shell/src/providers/VirtualLists/Context.tsx +++ b/packages/material-ui-shell/src/providers/VirtualLists/Context.tsx @@ -2,7 +2,7 @@ import React from 'react' export interface VirtualListsContextType { /** - * @description Set offset + * @description Set offset for provided name to provided value * @param name * @param offset */ diff --git a/packages/material-ui-shell/src/providers/VirtualLists/index.tsx b/packages/material-ui-shell/src/providers/VirtualLists/index.tsx index e72989884..a362aa2b9 100644 --- a/packages/material-ui-shell/src/providers/VirtualLists/index.tsx +++ b/packages/material-ui-shell/src/providers/VirtualLists/index.tsx @@ -1,8 +1,25 @@ import { useContext } from 'react' -import Context from './Context' +import Context, { VirtualListsContextType } from './Context' import Provider from './Provider' -function useVirtualLists() { +/** + * Custom hook to access virtual lists. + * + * @function + * @returns {VirtualListsContextType} Virtual list context value. + * @throws {Error} If used outside of an VirtualListsProvider. + * @example + * const { getOffset, setOffset } = useVirtualLists() + * + * @description + * This hook provides access to the virtual lists context. It must be used withgin VirutalListsProvider. + * It provides methods for setting and getting offset by name: + * - setOffset + * - getOffset + * + * @see {VirtualListsContextType} for methods reference + */ +function useVirtualLists(): VirtualListsContextType { const context = useContext(Context) if (context === undefined) { From bac283c534c26619d8291601c7e16481f27ff5cd Mon Sep 17 00:00:00 2001 From: Belmin Mujan Date: Thu, 2 Jan 2025 00:06:53 +0100 Subject: [PATCH 14/21] Null check --- packages/base-shell/package-lock.json | 4065 ----------------- .../src/providers/Firebase/Cols/Provider.tsx | 2 +- .../src/providers/Firebase/Docs/Provider.tsx | 2 +- .../src/providers/Firebase/Lists/Provider.tsx | 2 +- .../src/providers/Firebase/Paths/Provider.tsx | 10 +- 5 files changed, 8 insertions(+), 4073 deletions(-) delete mode 100644 packages/base-shell/package-lock.json diff --git a/packages/base-shell/package-lock.json b/packages/base-shell/package-lock.json deleted file mode 100644 index 8b4ac9b5d..000000000 --- a/packages/base-shell/package-lock.json +++ /dev/null @@ -1,4065 +0,0 @@ -{ - "name": "@ecronix/base-shell", - "version": "2.6.62", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "@ecronix/base-shell", - "version": "2.6.62", - "license": "MIT", - "devDependencies": { - "@types/react": "^18.3.11", - "@types/react-dom": "^18.3.1", - "@vitejs/plugin-react": "^4.3.1", - "cypress": "^13.15.0", - "intl": "^1.2.5", - "react": "^18.2.0", - "react-dom": "^18.2.0", - "react-intl": "^6.7.0", - "react-router-dom": "^6.26.2", - "rollup-plugin-visualizer": "^5.12.0", - "start-server-and-test": "^2.0.8", - "typescript": "^5.6.3", - "vite": "^5.4.8", - "vite-plugin-externalize-deps": "^0.8.0" - }, - "peerDependencies": { - "intl": "1.x", - "react": "17.x || 18.x", - "react-dom": "17.x || 18.x", - "react-intl": "6.x", - "react-router-dom": "6.x" - } - }, - "node_modules/@ampproject/remapping": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", - "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", - "dev": true, - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.24" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/code-frame": { - "version": "7.26.2", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.2.tgz", - "integrity": "sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==", - "dev": true, - "dependencies": { - "@babel/helper-validator-identifier": "^7.25.9", - "js-tokens": "^4.0.0", - "picocolors": "^1.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/compat-data": { - "version": "7.26.2", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.26.2.tgz", - "integrity": "sha512-Z0WgzSEa+aUcdiJuCIqgujCshpMWgUpgOxXotrYPSA53hA3qopNaqcJpyr0hVb1FeWdnqFA35/fUtXgBK8srQg==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/core": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.26.0.tgz", - "integrity": "sha512-i1SLeK+DzNnQ3LL/CswPCa/E5u4lh1k6IAEphON8F+cXt0t9euTshDru0q7/IqMa1PMPz5RnHuHscF8/ZJsStg==", - "dev": true, - "dependencies": { - "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.26.0", - "@babel/generator": "^7.26.0", - "@babel/helper-compilation-targets": "^7.25.9", - "@babel/helper-module-transforms": "^7.26.0", - "@babel/helpers": "^7.26.0", - "@babel/parser": "^7.26.0", - "@babel/template": "^7.25.9", - "@babel/traverse": "^7.25.9", - "@babel/types": "^7.26.0", - "convert-source-map": "^2.0.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.3", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" - } - }, - "node_modules/@babel/generator": { - "version": "7.26.2", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.26.2.tgz", - "integrity": "sha512-zevQbhbau95nkoxSq3f/DC/SC+EEOUZd3DYqfSkMhY2/wfSeaHV1Ew4vk8e+x8lja31IbyuUa2uQ3JONqKbysw==", - "dev": true, - "dependencies": { - "@babel/parser": "^7.26.2", - "@babel/types": "^7.26.0", - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.25", - "jsesc": "^3.0.2" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-compilation-targets": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.9.tgz", - "integrity": "sha512-j9Db8Suy6yV/VHa4qzrj9yZfZxhLWQdVnRlXxmKLYlhWUVB1sB2G5sxuWYXk/whHD9iW76PmNzxZ4UCnTQTVEQ==", - "dev": true, - "dependencies": { - "@babel/compat-data": "^7.25.9", - "@babel/helper-validator-option": "^7.25.9", - "browserslist": "^4.24.0", - "lru-cache": "^5.1.1", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-imports": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.25.9.tgz", - "integrity": "sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==", - "dev": true, - "dependencies": { - "@babel/traverse": "^7.25.9", - "@babel/types": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-transforms": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.26.0.tgz", - "integrity": "sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==", - "dev": true, - "dependencies": { - "@babel/helper-module-imports": "^7.25.9", - "@babel/helper-validator-identifier": "^7.25.9", - "@babel/traverse": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-plugin-utils": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.25.9.tgz", - "integrity": "sha512-kSMlyUVdWe25rEsRGviIgOWnoT/nfABVWlqt9N19/dIPWViAOW2s9wznP5tURbs/IDuNk4gPy3YdYRgH3uxhBw==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-string-parser": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz", - "integrity": "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz", - "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-option": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.25.9.tgz", - "integrity": "sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helpers": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.26.0.tgz", - "integrity": "sha512-tbhNuIxNcVb21pInl3ZSjksLCvgdZy9KwJ8brv993QtIVKJBBkYXz4q4ZbAv31GdnC+R90np23L5FbEBlthAEw==", - "dev": true, - "dependencies": { - "@babel/template": "^7.25.9", - "@babel/types": "^7.26.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/parser": { - "version": "7.26.2", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.2.tgz", - "integrity": "sha512-DWMCZH9WA4Maitz2q21SRKHo9QXZxkDsbNZoVD62gusNtNBBqDg9i7uOhASfTfIGNzW+O+r7+jAlM8dwphcJKQ==", - "dev": true, - "dependencies": { - "@babel/types": "^7.26.0" - }, - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/plugin-transform-react-jsx-self": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.25.9.tgz", - "integrity": "sha512-y8quW6p0WHkEhmErnfe58r7x0A70uKphQm8Sp8cV7tjNQwK56sNVK0M73LK3WuYmsuyrftut4xAkjjgU0twaMg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-jsx-source": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.25.9.tgz", - "integrity": "sha512-+iqjT8xmXhhYv4/uiYd8FNQsraMFZIfxVSqxxVSZP0WbbSAWvBXAul0m/zu+7Vv4O/3WtApy9pmaTMiumEZgfg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/template": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.25.9.tgz", - "integrity": "sha512-9DGttpmPvIxBb/2uwpVo3dqJ+O6RooAFOS+lB+xDqoE2PVCE8nfoHMdZLpfCQRLwvohzXISPZcgxt80xLfsuwg==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.25.9", - "@babel/parser": "^7.25.9", - "@babel/types": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/traverse": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.9.tgz", - "integrity": "sha512-ZCuvfwOwlz/bawvAuvcj8rrithP2/N55Tzz342AkTvq4qaWbGfmCk/tKhNaV2cthijKrPAA8SRJV5WWe7IBMJw==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.25.9", - "@babel/generator": "^7.25.9", - "@babel/parser": "^7.25.9", - "@babel/template": "^7.25.9", - "@babel/types": "^7.25.9", - "debug": "^4.3.1", - "globals": "^11.1.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/types": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.0.tgz", - "integrity": "sha512-Z/yiTPj+lDVnF7lWeKCIJzaIkI0vYO87dMpZ4bg4TDrFe4XXLFWL1TbXU27gBP3QccxV9mZICCrnjnYlJjXHOA==", - "dev": true, - "dependencies": { - "@babel/helper-string-parser": "^7.25.9", - "@babel/helper-validator-identifier": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@colors/colors": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", - "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==", - "dev": true, - "optional": true, - "engines": { - "node": ">=0.1.90" - } - }, - "node_modules/@cypress/request": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/@cypress/request/-/request-3.0.6.tgz", - "integrity": "sha512-fi0eVdCOtKu5Ed6+E8mYxUF6ZTFJDZvHogCBelM0xVXmrDEkyM22gRArQzq1YcHPm1V47Vf/iAD+WgVdUlJCGg==", - "dev": true, - "dependencies": { - "aws-sign2": "~0.7.0", - "aws4": "^1.8.0", - "caseless": "~0.12.0", - "combined-stream": "~1.0.6", - "extend": "~3.0.2", - "forever-agent": "~0.6.1", - "form-data": "~4.0.0", - "http-signature": "~1.4.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.19", - "performance-now": "^2.1.0", - "qs": "6.13.0", - "safe-buffer": "^5.1.2", - "tough-cookie": "^5.0.0", - "tunnel-agent": "^0.6.0", - "uuid": "^8.3.2" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/@cypress/xvfb": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@cypress/xvfb/-/xvfb-1.2.4.tgz", - "integrity": "sha512-skbBzPggOVYCbnGgV+0dmBdW/s77ZkAOXIC1knS8NagwDjBrNC1LuXtQJeiN6l+m7lzmHtaoUw/ctJKdqkG57Q==", - "dev": true, - "dependencies": { - "debug": "^3.1.0", - "lodash.once": "^4.1.1" - } - }, - "node_modules/@cypress/xvfb/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/@esbuild/aix-ppc64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz", - "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==", - "cpu": [ - "ppc64" - ], - "dev": true, - "optional": true, - "os": [ - "aix" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/android-arm": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.21.5.tgz", - "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/android-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz", - "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/android-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.5.tgz", - "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/darwin-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz", - "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/darwin-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz", - "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/freebsd-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz", - "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/freebsd-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz", - "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-arm": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz", - "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz", - "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-ia32": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz", - "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-loong64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz", - "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==", - "cpu": [ - "loong64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-mips64el": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz", - "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==", - "cpu": [ - "mips64el" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-ppc64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz", - "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==", - "cpu": [ - "ppc64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-riscv64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz", - "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==", - "cpu": [ - "riscv64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-s390x": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz", - "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==", - "cpu": [ - "s390x" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz", - "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/netbsd-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz", - "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/openbsd-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz", - "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/sunos-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz", - "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "sunos" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/win32-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz", - "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/win32-ia32": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz", - "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/win32-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz", - "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@formatjs/ecma402-abstract": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/@formatjs/ecma402-abstract/-/ecma402-abstract-2.2.4.tgz", - "integrity": "sha512-lFyiQDVvSbQOpU+WFd//ILolGj4UgA/qXrKeZxdV14uKiAUiPAtX6XAn7WBCRi7Mx6I7EybM9E5yYn4BIpZWYg==", - "dev": true, - "dependencies": { - "@formatjs/fast-memoize": "2.2.3", - "@formatjs/intl-localematcher": "0.5.8", - "tslib": "2" - } - }, - "node_modules/@formatjs/fast-memoize": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/@formatjs/fast-memoize/-/fast-memoize-2.2.3.tgz", - "integrity": "sha512-3jeJ+HyOfu8osl3GNSL4vVHUuWFXR03Iz9jjgI7RwjG6ysu/Ymdr0JRCPHfF5yGbTE6JCrd63EpvX1/WybYRbA==", - "dev": true, - "dependencies": { - "tslib": "2" - } - }, - "node_modules/@formatjs/icu-messageformat-parser": { - "version": "2.9.4", - "resolved": "https://registry.npmjs.org/@formatjs/icu-messageformat-parser/-/icu-messageformat-parser-2.9.4.tgz", - "integrity": "sha512-Tbvp5a9IWuxUcpWNIW6GlMQYEc4rwNHR259uUFoKWNN1jM9obf9Ul0e+7r7MvFOBNcN+13K7NuKCKqQiAn1QEg==", - "dev": true, - "dependencies": { - "@formatjs/ecma402-abstract": "2.2.4", - "@formatjs/icu-skeleton-parser": "1.8.8", - "tslib": "2" - } - }, - "node_modules/@formatjs/icu-skeleton-parser": { - "version": "1.8.8", - "resolved": "https://registry.npmjs.org/@formatjs/icu-skeleton-parser/-/icu-skeleton-parser-1.8.8.tgz", - "integrity": "sha512-vHwK3piXwamFcx5YQdCdJxUQ1WdTl6ANclt5xba5zLGDv5Bsur7qz8AD7BevaKxITwpgDeU0u8My3AIibW9ywA==", - "dev": true, - "dependencies": { - "@formatjs/ecma402-abstract": "2.2.4", - "tslib": "2" - } - }, - "node_modules/@formatjs/intl": { - "version": "2.10.15", - "resolved": "https://registry.npmjs.org/@formatjs/intl/-/intl-2.10.15.tgz", - "integrity": "sha512-i6+xVqT+6KCz7nBfk4ybMXmbKO36tKvbMKtgFz9KV+8idYFyFbfwKooYk8kGjyA5+T5f1kEPQM5IDLXucTAQ9g==", - "dev": true, - "dependencies": { - "@formatjs/ecma402-abstract": "2.2.4", - "@formatjs/fast-memoize": "2.2.3", - "@formatjs/icu-messageformat-parser": "2.9.4", - "@formatjs/intl-displaynames": "6.8.5", - "@formatjs/intl-listformat": "7.7.5", - "intl-messageformat": "10.7.7", - "tslib": "2" - }, - "peerDependencies": { - "typescript": "^4.7 || 5" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@formatjs/intl-displaynames": { - "version": "6.8.5", - "resolved": "https://registry.npmjs.org/@formatjs/intl-displaynames/-/intl-displaynames-6.8.5.tgz", - "integrity": "sha512-85b+GdAKCsleS6cqVxf/Aw/uBd+20EM0wDpgaxzHo3RIR3bxF4xCJqH/Grbzx8CXurTgDDZHPdPdwJC+May41w==", - "dev": true, - "dependencies": { - "@formatjs/ecma402-abstract": "2.2.4", - "@formatjs/intl-localematcher": "0.5.8", - "tslib": "2" - } - }, - "node_modules/@formatjs/intl-listformat": { - "version": "7.7.5", - "resolved": "https://registry.npmjs.org/@formatjs/intl-listformat/-/intl-listformat-7.7.5.tgz", - "integrity": "sha512-Wzes10SMNeYgnxYiKsda4rnHP3Q3II4XT2tZyOgnH5fWuHDtIkceuWlRQNsvrI3uiwP4hLqp2XdQTCsfkhXulg==", - "dev": true, - "dependencies": { - "@formatjs/ecma402-abstract": "2.2.4", - "@formatjs/intl-localematcher": "0.5.8", - "tslib": "2" - } - }, - "node_modules/@formatjs/intl-localematcher": { - "version": "0.5.8", - "resolved": "https://registry.npmjs.org/@formatjs/intl-localematcher/-/intl-localematcher-0.5.8.tgz", - "integrity": "sha512-I+WDNWWJFZie+jkfkiK5Mp4hEDyRSEvmyfYadflOno/mmKJKcB17fEpEH0oJu/OWhhCJ8kJBDz2YMd/6cDl7Mg==", - "dev": true, - "dependencies": { - "tslib": "2" - } - }, - "node_modules/@hapi/hoek": { - "version": "9.3.0", - "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.3.0.tgz", - "integrity": "sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==", - "dev": true - }, - "node_modules/@hapi/topo": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-5.1.0.tgz", - "integrity": "sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==", - "dev": true, - "dependencies": { - "@hapi/hoek": "^9.0.0" - } - }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", - "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", - "dev": true, - "dependencies": { - "@jridgewell/set-array": "^1.2.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.24" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", - "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", - "dev": true, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/set-array": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", - "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", - "dev": true, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", - "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", - "dev": true - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.25", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", - "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", - "dev": true, - "dependencies": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" - } - }, - "node_modules/@remix-run/router": { - "version": "1.21.0", - "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.21.0.tgz", - "integrity": "sha512-xfSkCAchbdG5PnbrKqFWwia4Bi61nH+wm8wLEqfHDyp7Y3dZzgqS2itV8i4gAq9pC2HsTpwyBC6Ds8VHZ96JlA==", - "dev": true, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.27.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.27.4.tgz", - "integrity": "sha512-2Y3JT6f5MrQkICUyRVCw4oa0sutfAsgaSsb0Lmmy1Wi2y7X5vT9Euqw4gOsCyy0YfKURBg35nhUKZS4mDcfULw==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ] - }, - "node_modules/@rollup/rollup-android-arm64": { - "version": "4.27.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.27.4.tgz", - "integrity": "sha512-wzKRQXISyi9UdCVRqEd0H4cMpzvHYt1f/C3CoIjES6cG++RHKhrBj2+29nPF0IB5kpy9MS71vs07fvrNGAl/iA==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ] - }, - "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.27.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.27.4.tgz", - "integrity": "sha512-PlNiRQapift4LNS8DPUHuDX/IdXiLjf8mc5vdEmUR0fF/pyy2qWwzdLjB+iZquGr8LuN4LnUoSEvKRwjSVYz3Q==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.27.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.27.4.tgz", - "integrity": "sha512-o9bH2dbdgBDJaXWJCDTNDYa171ACUdzpxSZt+u/AAeQ20Nk5x+IhA+zsGmrQtpkLiumRJEYef68gcpn2ooXhSQ==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/@rollup/rollup-freebsd-arm64": { - "version": "4.27.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.27.4.tgz", - "integrity": "sha512-NBI2/i2hT9Q+HySSHTBh52da7isru4aAAo6qC3I7QFVsuhxi2gM8t/EI9EVcILiHLj1vfi+VGGPaLOUENn7pmw==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ] - }, - "node_modules/@rollup/rollup-freebsd-x64": { - "version": "4.27.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.27.4.tgz", - "integrity": "sha512-wYcC5ycW2zvqtDYrE7deary2P2UFmSh85PUpAx+dwTCO9uw3sgzD6Gv9n5X4vLaQKsrfTSZZ7Z7uynQozPVvWA==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ] - }, - "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.27.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.27.4.tgz", - "integrity": "sha512-9OwUnK/xKw6DyRlgx8UizeqRFOfi9mf5TYCw1uolDaJSbUmBxP85DE6T4ouCMoN6pXw8ZoTeZCSEfSaYo+/s1w==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-arm-musleabihf": { - "version": "4.27.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.27.4.tgz", - "integrity": "sha512-Vgdo4fpuphS9V24WOV+KwkCVJ72u7idTgQaBoLRD0UxBAWTF9GWurJO9YD9yh00BzbkhpeXtm6na+MvJU7Z73A==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.27.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.27.4.tgz", - "integrity": "sha512-pleyNgyd1kkBkw2kOqlBx+0atfIIkkExOTiifoODo6qKDSpnc6WzUY5RhHdmTdIJXBdSnh6JknnYTtmQyobrVg==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.27.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.27.4.tgz", - "integrity": "sha512-caluiUXvUuVyCHr5DxL8ohaaFFzPGmgmMvwmqAITMpV/Q+tPoaHZ/PWa3t8B2WyoRcIIuu1hkaW5KkeTDNSnMA==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { - "version": "4.27.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.27.4.tgz", - "integrity": "sha512-FScrpHrO60hARyHh7s1zHE97u0KlT/RECzCKAdmI+LEoC1eDh/RDji9JgFqyO+wPDb86Oa/sXkily1+oi4FzJQ==", - "cpu": [ - "ppc64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.27.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.27.4.tgz", - "integrity": "sha512-qyyprhyGb7+RBfMPeww9FlHwKkCXdKHeGgSqmIXw9VSUtvyFZ6WZRtnxgbuz76FK7LyoN8t/eINRbPUcvXB5fw==", - "cpu": [ - "riscv64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.27.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.27.4.tgz", - "integrity": "sha512-PFz+y2kb6tbh7m3A7nA9++eInGcDVZUACulf/KzDtovvdTizHpZaJty7Gp0lFwSQcrnebHOqxF1MaKZd7psVRg==", - "cpu": [ - "s390x" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.27.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.27.4.tgz", - "integrity": "sha512-Ni8mMtfo+o/G7DVtweXXV/Ol2TFf63KYjTtoZ5f078AUgJTmaIJnj4JFU7TK/9SVWTaSJGxPi5zMDgK4w+Ez7Q==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.27.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.27.4.tgz", - "integrity": "sha512-5AeeAF1PB9TUzD+3cROzFTnAJAcVUGLuR8ng0E0WXGkYhp6RD6L+6szYVX+64Rs0r72019KHZS1ka1q+zU/wUw==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.27.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.27.4.tgz", - "integrity": "sha512-yOpVsA4K5qVwu2CaS3hHxluWIK5HQTjNV4tWjQXluMiiiu4pJj4BN98CvxohNCpcjMeTXk/ZMJBRbgRg8HBB6A==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.27.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.27.4.tgz", - "integrity": "sha512-KtwEJOaHAVJlxV92rNYiG9JQwQAdhBlrjNRp7P9L8Cb4Rer3in+0A+IPhJC9y68WAi9H0sX4AiG2NTsVlmqJeQ==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.27.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.27.4.tgz", - "integrity": "sha512-3j4jx1TppORdTAoBJRd+/wJRGCPC0ETWkXOecJ6PPZLj6SptXkrXcNqdj0oclbKML6FkQltdz7bBA3rUSirZug==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@sideway/address": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.5.tgz", - "integrity": "sha512-IqO/DUQHUkPeixNQ8n0JA6102hT9CmaljNTPmQ1u8MEhBo/R4Q8eKLN/vGZxuebwOroDB4cbpjheD4+/sKFK4Q==", - "dev": true, - "dependencies": { - "@hapi/hoek": "^9.0.0" - } - }, - "node_modules/@sideway/formula": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@sideway/formula/-/formula-3.0.1.tgz", - "integrity": "sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg==", - "dev": true - }, - "node_modules/@sideway/pinpoint": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@sideway/pinpoint/-/pinpoint-2.0.0.tgz", - "integrity": "sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==", - "dev": true - }, - "node_modules/@types/babel__core": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", - "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", - "dev": true, - "dependencies": { - "@babel/parser": "^7.20.7", - "@babel/types": "^7.20.7", - "@types/babel__generator": "*", - "@types/babel__template": "*", - "@types/babel__traverse": "*" - } - }, - "node_modules/@types/babel__generator": { - "version": "7.6.8", - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.8.tgz", - "integrity": "sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==", - "dev": true, - "dependencies": { - "@babel/types": "^7.0.0" - } - }, - "node_modules/@types/babel__template": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", - "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", - "dev": true, - "dependencies": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0" - } - }, - "node_modules/@types/babel__traverse": { - "version": "7.20.6", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.6.tgz", - "integrity": "sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==", - "dev": true, - "dependencies": { - "@babel/types": "^7.20.7" - } - }, - "node_modules/@types/estree": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz", - "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==", - "dev": true - }, - "node_modules/@types/hoist-non-react-statics": { - "version": "3.3.5", - "resolved": "https://registry.npmjs.org/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.5.tgz", - "integrity": "sha512-SbcrWzkKBw2cdwRTwQAswfpB9g9LJWfjtUeW/jvNwbhC8cpmmNYVePa+ncbUe0rGTQ7G3Ff6mYUN2VMfLVr+Sg==", - "dev": true, - "dependencies": { - "@types/react": "*", - "hoist-non-react-statics": "^3.3.0" - } - }, - "node_modules/@types/node": { - "version": "22.10.1", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.10.1.tgz", - "integrity": "sha512-qKgsUwfHZV2WCWLAnVP1JqnpE6Im6h3Y0+fYgMTasNQ7V++CBX5OT1as0g0f+OyubbFqhf6XVNIsmN4IIhEgGQ==", - "dev": true, - "optional": true, - "dependencies": { - "undici-types": "~6.20.0" - } - }, - "node_modules/@types/prop-types": { - "version": "15.7.13", - "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.13.tgz", - "integrity": "sha512-hCZTSvwbzWGvhqxp/RqVqwU999pBf2vp7hzIjiYOsl8wqOmUxkQ6ddw1cV3l8811+kdUFus/q4d1Y3E3SyEifA==", - "dev": true - }, - "node_modules/@types/react": { - "version": "18.3.12", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.12.tgz", - "integrity": "sha512-D2wOSq/d6Agt28q7rSI3jhU7G6aiuzljDGZ2hTZHIkrTLUI+AF3WMeKkEZ9nN2fkBAlcktT6vcZjDFiIhMYEQw==", - "dev": true, - "dependencies": { - "@types/prop-types": "*", - "csstype": "^3.0.2" - } - }, - "node_modules/@types/react-dom": { - "version": "18.3.1", - "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.3.1.tgz", - "integrity": "sha512-qW1Mfv8taImTthu4KoXgDfLuk4bydU6Q/TkADnDWWHwi4NX4BR+LWfTp2sVmTqRrsHvyDDTelgelxJ+SsejKKQ==", - "dev": true, - "dependencies": { - "@types/react": "*" - } - }, - "node_modules/@types/sinonjs__fake-timers": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-8.1.1.tgz", - "integrity": "sha512-0kSuKjAS0TrGLJ0M/+8MaFkGsQhZpB6pxOmvS3K8FYI72K//YmdfoW9X2qPsAKh1mkwxGD5zib9s1FIFed6E8g==", - "dev": true - }, - "node_modules/@types/sizzle": { - "version": "2.3.9", - "resolved": "https://registry.npmjs.org/@types/sizzle/-/sizzle-2.3.9.tgz", - "integrity": "sha512-xzLEyKB50yqCUPUJkIsrVvoWNfFUbIZI+RspLWt8u+tIW/BetMBZtgV2LY/2o+tYH8dRvQ+eoPf3NdhQCcLE2w==", - "dev": true - }, - "node_modules/@types/yauzl": { - "version": "2.10.3", - "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.3.tgz", - "integrity": "sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==", - "dev": true, - "optional": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@vitejs/plugin-react": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.3.4.tgz", - "integrity": "sha512-SCCPBJtYLdE8PX/7ZQAs1QAZ8Jqwih+0VBLum1EGqmCCQal+MIUqLCzj3ZUy8ufbC0cAM4LRlSTm7IQJwWT4ug==", - "dev": true, - "dependencies": { - "@babel/core": "^7.26.0", - "@babel/plugin-transform-react-jsx-self": "^7.25.9", - "@babel/plugin-transform-react-jsx-source": "^7.25.9", - "@types/babel__core": "^7.20.5", - "react-refresh": "^0.14.2" - }, - "engines": { - "node": "^14.18.0 || >=16.0.0" - }, - "peerDependencies": { - "vite": "^4.2.0 || ^5.0.0 || ^6.0.0" - } - }, - "node_modules/aggregate-error": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", - "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", - "dev": true, - "dependencies": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/ansi-colors": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", - "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/ansi-escapes": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", - "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", - "dev": true, - "dependencies": { - "type-fest": "^0.21.3" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/arch": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/arch/-/arch-2.2.0.tgz", - "integrity": "sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/arg": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", - "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", - "dev": true - }, - "node_modules/asn1": { - "version": "0.2.6", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", - "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", - "dev": true, - "dependencies": { - "safer-buffer": "~2.1.0" - } - }, - "node_modules/assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==", - "dev": true, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/astral-regex": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", - "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/async": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz", - "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==", - "dev": true - }, - "node_modules/asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", - "dev": true - }, - "node_modules/at-least-node": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", - "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", - "dev": true, - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/aws-sign2": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/aws4": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.13.2.tgz", - "integrity": "sha512-lHe62zvbTB5eEABUVi/AwVh0ZKY9rMMDhmm+eeyuuUQbQ3+J+fONVQOZyj+DdrvD4BY33uYniyRJ4UJIaSKAfw==", - "dev": true - }, - "node_modules/axios": { - "version": "1.7.8", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.8.tgz", - "integrity": "sha512-Uu0wb7KNqK2t5K+YQyVCLM76prD5sRFjKHbJYCP1J7JFGEQ6nN7HWn9+04LAeiJ3ji54lgS/gZCH1oxyrf1SPw==", - "dev": true, - "dependencies": { - "follow-redirects": "^1.15.6", - "form-data": "^4.0.0", - "proxy-from-env": "^1.1.0" - } - }, - "node_modules/axios/node_modules/proxy-from-env": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", - "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", - "dev": true - }, - "node_modules/base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/bcrypt-pbkdf": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", - "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==", - "dev": true, - "dependencies": { - "tweetnacl": "^0.14.3" - } - }, - "node_modules/blob-util": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/blob-util/-/blob-util-2.0.2.tgz", - "integrity": "sha512-T7JQa+zsXXEa6/8ZhHcQEW1UFfVM49Ts65uBkFL6fz2QmrElqmbajIDJvuA0tEhRe5eIjpV9ZF+0RfZR9voJFQ==", - "dev": true - }, - "node_modules/bluebird": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", - "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", - "dev": true - }, - "node_modules/browserslist": { - "version": "4.24.2", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.2.tgz", - "integrity": "sha512-ZIc+Q62revdMcqC6aChtW4jz3My3klmCO1fEmINZY/8J3EpBg5/A/D0AKmBveUh6pgoeycoMkVMko84tuYS+Gg==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { - "caniuse-lite": "^1.0.30001669", - "electron-to-chromium": "^1.5.41", - "node-releases": "^2.0.18", - "update-browserslist-db": "^1.1.1" - }, - "bin": { - "browserslist": "cli.js" - }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" - } - }, - "node_modules/buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "node_modules/buffer-crc32": { - "version": "0.2.13", - "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", - "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/cachedir": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/cachedir/-/cachedir-2.4.0.tgz", - "integrity": "sha512-9EtFOZR8g22CL7BWjJ9BUx1+A/djkofnyW3aOXZORNW2kxoUpx2h+uN2cOqwPmFhnpVmxg+KW2OjOSgChTEvsQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/call-bind": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", - "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", - "dev": true, - "dependencies": { - "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.4", - "set-function-length": "^1.2.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/caniuse-lite": { - "version": "1.0.30001684", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001684.tgz", - "integrity": "sha512-G1LRwLIQjBQoyq0ZJGqGIJUXzJ8irpbjHLpVRXDvBEScFJ9b17sgK6vlx0GAJFE21okD7zXl08rRRUfq6HdoEQ==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/caniuse-lite" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ] - }, - "node_modules/caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==", - "dev": true - }, - "node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/chalk/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/check-more-types": { - "version": "2.24.0", - "resolved": "https://registry.npmjs.org/check-more-types/-/check-more-types-2.24.0.tgz", - "integrity": "sha512-Pj779qHxV2tuapviy1bSZNEL1maXr13bPYpsvSDB68HlYcYuhlDrmGd63i0JHMCLKzc7rUSNIrpdJlhVlNwrxA==", - "dev": true, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/ci-info": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.1.0.tgz", - "integrity": "sha512-HutrvTNsF48wnxkzERIXOe5/mlcfFcbfCmwcg6CJnizbSue78AbDt+1cgl26zwn61WFxhcPykPfZrbqjGmBb4A==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/sibiraj-s" - } - ], - "engines": { - "node": ">=8" - } - }, - "node_modules/clean-stack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/cli-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", - "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", - "dev": true, - "dependencies": { - "restore-cursor": "^3.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cli-table3": { - "version": "0.6.5", - "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.5.tgz", - "integrity": "sha512-+W/5efTR7y5HRD7gACw9yQjqMVvEMLBHmboM/kPWam+H+Hmyrgjh6YncVKK122YZkXrLudzTuAukUw9FnMf7IQ==", - "dev": true, - "dependencies": { - "string-width": "^4.2.0" - }, - "engines": { - "node": "10.* || >= 12.*" - }, - "optionalDependencies": { - "@colors/colors": "1.5.0" - } - }, - "node_modules/cli-truncate": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz", - "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==", - "dev": true, - "dependencies": { - "slice-ansi": "^3.0.0", - "string-width": "^4.2.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/cliui": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", - "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", - "dev": true, - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/colorette": { - "version": "2.0.20", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", - "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", - "dev": true - }, - "node_modules/combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dev": true, - "dependencies": { - "delayed-stream": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/commander": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz", - "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==", - "dev": true, - "engines": { - "node": ">= 6" - } - }, - "node_modules/common-tags": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.8.2.tgz", - "integrity": "sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==", - "dev": true, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/convert-source-map": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", - "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", - "dev": true - }, - "node_modules/core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==", - "dev": true - }, - "node_modules/cross-spawn": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", - "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", - "dev": true, - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/csstype": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", - "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", - "dev": true - }, - "node_modules/cypress": { - "version": "13.16.0", - "resolved": "https://registry.npmjs.org/cypress/-/cypress-13.16.0.tgz", - "integrity": "sha512-g6XcwqnvzXrqiBQR/5gN+QsyRmKRhls1y5E42fyOvsmU7JuY+wM6uHJWj4ZPttjabzbnRvxcik2WemR8+xT6FA==", - "dev": true, - "hasInstallScript": true, - "dependencies": { - "@cypress/request": "^3.0.6", - "@cypress/xvfb": "^1.2.4", - "@types/sinonjs__fake-timers": "8.1.1", - "@types/sizzle": "^2.3.2", - "arch": "^2.2.0", - "blob-util": "^2.0.2", - "bluebird": "^3.7.2", - "buffer": "^5.7.1", - "cachedir": "^2.3.0", - "chalk": "^4.1.0", - "check-more-types": "^2.24.0", - "ci-info": "^4.0.0", - "cli-cursor": "^3.1.0", - "cli-table3": "~0.6.1", - "commander": "^6.2.1", - "common-tags": "^1.8.0", - "dayjs": "^1.10.4", - "debug": "^4.3.4", - "enquirer": "^2.3.6", - "eventemitter2": "6.4.7", - "execa": "4.1.0", - "executable": "^4.1.1", - "extract-zip": "2.0.1", - "figures": "^3.2.0", - "fs-extra": "^9.1.0", - "getos": "^3.2.1", - "is-installed-globally": "~0.4.0", - "lazy-ass": "^1.6.0", - "listr2": "^3.8.3", - "lodash": "^4.17.21", - "log-symbols": "^4.0.0", - "minimist": "^1.2.8", - "ospath": "^1.2.2", - "pretty-bytes": "^5.6.0", - "process": "^0.11.10", - "proxy-from-env": "1.0.0", - "request-progress": "^3.0.0", - "semver": "^7.5.3", - "supports-color": "^8.1.1", - "tmp": "~0.2.3", - "tree-kill": "1.2.2", - "untildify": "^4.0.0", - "yauzl": "^2.10.0" - }, - "bin": { - "cypress": "bin/cypress" - }, - "engines": { - "node": "^16.0.0 || ^18.0.0 || >=20.0.0" - } - }, - "node_modules/cypress/node_modules/semver": { - "version": "7.6.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", - "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==", - "dev": true, - "dependencies": { - "assert-plus": "^1.0.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/dayjs": { - "version": "1.11.13", - "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.13.tgz", - "integrity": "sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg==", - "dev": true - }, - "node_modules/debug": { - "version": "4.3.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", - "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", - "dev": true, - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/define-data-property": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", - "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", - "dev": true, - "dependencies": { - "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "gopd": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/define-lazy-prop": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", - "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", - "dev": true, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/duplexer": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", - "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", - "dev": true - }, - "node_modules/ecc-jsbn": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", - "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==", - "dev": true, - "dependencies": { - "jsbn": "~0.1.0", - "safer-buffer": "^2.1.0" - } - }, - "node_modules/electron-to-chromium": { - "version": "1.5.66", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.66.tgz", - "integrity": "sha512-pI2QF6+i+zjPbqRzJwkMvtvkdI7MjVbSh2g8dlMguDJIXEPw+kwasS1Jl+YGPEBfGVxsVgGUratAKymPdPo2vQ==", - "dev": true - }, - "node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "node_modules/end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "dev": true, - "dependencies": { - "once": "^1.4.0" - } - }, - "node_modules/enquirer": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.4.1.tgz", - "integrity": "sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==", - "dev": true, - "dependencies": { - "ansi-colors": "^4.1.1", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/es-define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", - "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", - "dev": true, - "dependencies": { - "get-intrinsic": "^1.2.4" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-errors": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", - "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", - "dev": true, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/esbuild": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz", - "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==", - "dev": true, - "hasInstallScript": true, - "bin": { - "esbuild": "bin/esbuild" - }, - "engines": { - "node": ">=12" - }, - "optionalDependencies": { - "@esbuild/aix-ppc64": "0.21.5", - "@esbuild/android-arm": "0.21.5", - "@esbuild/android-arm64": "0.21.5", - "@esbuild/android-x64": "0.21.5", - "@esbuild/darwin-arm64": "0.21.5", - "@esbuild/darwin-x64": "0.21.5", - "@esbuild/freebsd-arm64": "0.21.5", - "@esbuild/freebsd-x64": "0.21.5", - "@esbuild/linux-arm": "0.21.5", - "@esbuild/linux-arm64": "0.21.5", - "@esbuild/linux-ia32": "0.21.5", - "@esbuild/linux-loong64": "0.21.5", - "@esbuild/linux-mips64el": "0.21.5", - "@esbuild/linux-ppc64": "0.21.5", - "@esbuild/linux-riscv64": "0.21.5", - "@esbuild/linux-s390x": "0.21.5", - "@esbuild/linux-x64": "0.21.5", - "@esbuild/netbsd-x64": "0.21.5", - "@esbuild/openbsd-x64": "0.21.5", - "@esbuild/sunos-x64": "0.21.5", - "@esbuild/win32-arm64": "0.21.5", - "@esbuild/win32-ia32": "0.21.5", - "@esbuild/win32-x64": "0.21.5" - } - }, - "node_modules/escalade": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", - "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/event-stream": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/event-stream/-/event-stream-3.3.4.tgz", - "integrity": "sha512-QHpkERcGsR0T7Qm3HNJSyXKEEj8AHNxkY3PK8TS2KJvQ7NiSHe3DDpwVKKtoYprL/AreyzFBeIkBIWChAqn60g==", - "dev": true, - "dependencies": { - "duplexer": "~0.1.1", - "from": "~0", - "map-stream": "~0.1.0", - "pause-stream": "0.0.11", - "split": "0.3", - "stream-combiner": "~0.0.4", - "through": "~2.3.1" - } - }, - "node_modules/eventemitter2": { - "version": "6.4.7", - "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-6.4.7.tgz", - "integrity": "sha512-tYUSVOGeQPKt/eC1ABfhHy5Xd96N3oIijJvN3O9+TsC28T5V9yX9oEfEK5faP0EFSNVOG97qtAS68GBrQB2hDg==", - "dev": true - }, - "node_modules/execa": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", - "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", - "dev": true, - "dependencies": { - "cross-spawn": "^7.0.0", - "get-stream": "^5.0.0", - "human-signals": "^1.1.1", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.0", - "onetime": "^5.1.0", - "signal-exit": "^3.0.2", - "strip-final-newline": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "node_modules/executable": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/executable/-/executable-4.1.1.tgz", - "integrity": "sha512-8iA79xD3uAch729dUG8xaaBBFGaEa0wdD2VkYLFHwlqosEj/jT66AzcreRDSgV7ehnNLBW2WR5jIXwGKjVdTLg==", - "dev": true, - "dependencies": { - "pify": "^2.2.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", - "dev": true - }, - "node_modules/extract-zip": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", - "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", - "dev": true, - "dependencies": { - "debug": "^4.1.1", - "get-stream": "^5.1.0", - "yauzl": "^2.10.0" - }, - "bin": { - "extract-zip": "cli.js" - }, - "engines": { - "node": ">= 10.17.0" - }, - "optionalDependencies": { - "@types/yauzl": "^2.9.1" - } - }, - "node_modules/extsprintf": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==", - "dev": true, - "engines": [ - "node >=0.6.0" - ] - }, - "node_modules/fd-slicer": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", - "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", - "dev": true, - "dependencies": { - "pend": "~1.2.0" - } - }, - "node_modules/figures": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", - "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", - "dev": true, - "dependencies": { - "escape-string-regexp": "^1.0.5" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/follow-redirects": { - "version": "1.15.9", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.9.tgz", - "integrity": "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/RubenVerborgh" - } - ], - "engines": { - "node": ">=4.0" - }, - "peerDependenciesMeta": { - "debug": { - "optional": true - } - } - }, - "node_modules/forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/form-data": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.1.tgz", - "integrity": "sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw==", - "dev": true, - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/from": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/from/-/from-0.1.7.tgz", - "integrity": "sha512-twe20eF1OxVxp/ML/kq2p1uc6KvFK/+vs8WjEbeKmV2He22MKm7YF2ANIt+EOqhJ5L3K/SuuPhk0hWQDjOM23g==", - "dev": true - }, - "node_modules/fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "dev": true, - "dependencies": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/fsevents": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", - "dev": true, - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/function-bind": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", - "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/gensync": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true, - "engines": { - "node": "6.* || 8.* || >= 10.*" - } - }, - "node_modules/get-intrinsic": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", - "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", - "dev": true, - "dependencies": { - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3", - "hasown": "^2.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "dev": true, - "dependencies": { - "pump": "^3.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/getos": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/getos/-/getos-3.2.1.tgz", - "integrity": "sha512-U56CfOK17OKgTVqozZjUKNdkfEv6jk5WISBJ8SHoagjE6L69zOwl3Z+O8myjY9MEW3i2HPWQBt/LTbCgcC973Q==", - "dev": true, - "dependencies": { - "async": "^3.2.0" - } - }, - "node_modules/getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==", - "dev": true, - "dependencies": { - "assert-plus": "^1.0.0" - } - }, - "node_modules/global-dirs": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.1.tgz", - "integrity": "sha512-NBcGGFbBA9s1VzD41QXDG+3++t9Mn5t1FpLdhESY6oKY4gYTFpX4wO3sqGUa0Srjtbfj3szX0RnemmrVRUdULA==", - "dev": true, - "dependencies": { - "ini": "2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/gopd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", - "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", - "dev": true, - "dependencies": { - "get-intrinsic": "^1.1.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", - "dev": true - }, - "node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/has-property-descriptors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", - "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", - "dev": true, - "dependencies": { - "es-define-property": "^1.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-proto": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", - "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/hasown": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", - "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", - "dev": true, - "dependencies": { - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/hoist-non-react-statics": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", - "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", - "dev": true, - "dependencies": { - "react-is": "^16.7.0" - } - }, - "node_modules/http-signature": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.4.0.tgz", - "integrity": "sha512-G5akfn7eKbpDN+8nPS/cb57YeA1jLTVxjpCj7tmm3QKPdyDy7T+qSC40e9ptydSWvkwjSXw1VbkpyEm39ukeAg==", - "dev": true, - "dependencies": { - "assert-plus": "^1.0.0", - "jsprim": "^2.0.2", - "sshpk": "^1.18.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/human-signals": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", - "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", - "dev": true, - "engines": { - "node": ">=8.12.0" - } - }, - "node_modules/ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/ini": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", - "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/intl": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/intl/-/intl-1.2.5.tgz", - "integrity": "sha512-rK0KcPHeBFBcqsErKSpvZnrOmWOj+EmDkyJ57e90YWaQNqbcivcqmKDlHEeNprDWOsKzPsh1BfSpPQdDvclHVw==", - "dev": true - }, - "node_modules/intl-messageformat": { - "version": "10.7.7", - "resolved": "https://registry.npmjs.org/intl-messageformat/-/intl-messageformat-10.7.7.tgz", - "integrity": "sha512-F134jIoeYMro/3I0h08D0Yt4N9o9pjddU/4IIxMMURqbAtI2wu70X8hvG1V48W49zXHXv3RKSF/po+0fDfsGjA==", - "dev": true, - "dependencies": { - "@formatjs/ecma402-abstract": "2.2.4", - "@formatjs/fast-memoize": "2.2.3", - "@formatjs/icu-messageformat-parser": "2.9.4", - "tslib": "2" - } - }, - "node_modules/is-docker": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", - "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", - "dev": true, - "bin": { - "is-docker": "cli.js" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-installed-globally": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.4.0.tgz", - "integrity": "sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==", - "dev": true, - "dependencies": { - "global-dirs": "^3.0.0", - "is-path-inside": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-path-inside": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", - "dev": true - }, - "node_modules/is-unicode-supported": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", - "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", - "dev": true, - "dependencies": { - "is-docker": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true - }, - "node_modules/isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==", - "dev": true - }, - "node_modules/joi": { - "version": "17.13.3", - "resolved": "https://registry.npmjs.org/joi/-/joi-17.13.3.tgz", - "integrity": "sha512-otDA4ldcIx+ZXsKHWmp0YizCweVRZG96J10b0FevjfuncLO1oX59THoAmHkNubYJ+9gWsYsp5k8v4ib6oDv1fA==", - "dev": true, - "dependencies": { - "@hapi/hoek": "^9.3.0", - "@hapi/topo": "^5.1.0", - "@sideway/address": "^4.1.5", - "@sideway/formula": "^3.0.1", - "@sideway/pinpoint": "^2.0.0" - } - }, - "node_modules/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true - }, - "node_modules/jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==", - "dev": true - }, - "node_modules/jsesc": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.0.2.tgz", - "integrity": "sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==", - "dev": true, - "bin": { - "jsesc": "bin/jsesc" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/json-schema": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", - "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==", - "dev": true - }, - "node_modules/json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", - "dev": true - }, - "node_modules/json5": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", - "dev": true, - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dev": true, - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/jsprim": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-2.0.2.tgz", - "integrity": "sha512-gqXddjPqQ6G40VdnI6T6yObEC+pDNvyP95wdQhkWkg7crHH3km5qP1FsOXEkzEQwnz6gz5qGTn1c2Y52wP3OyQ==", - "dev": true, - "engines": [ - "node >=0.6.0" - ], - "dependencies": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.4.0", - "verror": "1.10.0" - } - }, - "node_modules/lazy-ass": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/lazy-ass/-/lazy-ass-1.6.0.tgz", - "integrity": "sha512-cc8oEVoctTvsFZ/Oje/kGnHbpWHYBe8IAJe4C0QNc3t8uM/0Y8+erSz/7Y1ALuXTEZTMvxXwO6YbX1ey3ujiZw==", - "dev": true, - "engines": { - "node": "> 0.8" - } - }, - "node_modules/listr2": { - "version": "3.14.0", - "resolved": "https://registry.npmjs.org/listr2/-/listr2-3.14.0.tgz", - "integrity": "sha512-TyWI8G99GX9GjE54cJ+RrNMcIFBfwMPxc3XTFiAYGN4s10hWROGtOg7+O6u6LE3mNkyld7RSLE6nrKBvTfcs3g==", - "dev": true, - "dependencies": { - "cli-truncate": "^2.1.0", - "colorette": "^2.0.16", - "log-update": "^4.0.0", - "p-map": "^4.0.0", - "rfdc": "^1.3.0", - "rxjs": "^7.5.1", - "through": "^2.3.8", - "wrap-ansi": "^7.0.0" - }, - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "enquirer": ">= 2.3.0 < 3" - }, - "peerDependenciesMeta": { - "enquirer": { - "optional": true - } - } - }, - "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - }, - "node_modules/lodash.once": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", - "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==", - "dev": true - }, - "node_modules/log-symbols": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", - "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", - "dev": true, - "dependencies": { - "chalk": "^4.1.0", - "is-unicode-supported": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/log-update": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/log-update/-/log-update-4.0.0.tgz", - "integrity": "sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==", - "dev": true, - "dependencies": { - "ansi-escapes": "^4.3.0", - "cli-cursor": "^3.1.0", - "slice-ansi": "^4.0.0", - "wrap-ansi": "^6.2.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/log-update/node_modules/slice-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", - "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/slice-ansi?sponsor=1" - } - }, - "node_modules/log-update/node_modules/wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "dev": true, - "dependencies": { - "js-tokens": "^3.0.0 || ^4.0.0" - }, - "bin": { - "loose-envify": "cli.js" - } - }, - "node_modules/lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "dev": true, - "dependencies": { - "yallist": "^3.0.2" - } - }, - "node_modules/map-stream": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/map-stream/-/map-stream-0.1.0.tgz", - "integrity": "sha512-CkYQrPYZfWnu/DAmVCpTSX/xHpKZ80eKh2lAkyA6AJTef6bW+6JpbQZN5rofum7da+SyN1bi5ctTm+lTfcCW3g==", - "dev": true - }, - "node_modules/merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true - }, - "node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "dev": true, - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/minimist": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true - }, - "node_modules/nanoid": { - "version": "3.3.8", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.8.tgz", - "integrity": "sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } - }, - "node_modules/node-releases": { - "version": "2.0.18", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.18.tgz", - "integrity": "sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==", - "dev": true - }, - "node_modules/npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dev": true, - "dependencies": { - "path-key": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/object-inspect": { - "version": "1.13.3", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.3.tgz", - "integrity": "sha512-kDCGIbxkDSXE3euJZZXzc6to7fCrKHNI/hSRQnRuQ+BWjFNzZwiFF8fj/6o2t2G9/jTj8PSIYTfCLelLZEeRpA==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dev": true, - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, - "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/open": { - "version": "8.4.2", - "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz", - "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", - "dev": true, - "dependencies": { - "define-lazy-prop": "^2.0.0", - "is-docker": "^2.1.1", - "is-wsl": "^2.2.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ospath": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/ospath/-/ospath-1.2.2.tgz", - "integrity": "sha512-o6E5qJV5zkAbIDNhGSIlyOhScKXgQrSRMilfph0clDfM0nEnBOlKlH4sWDmG95BW/CvwNz0vmm7dJVtU2KlMiA==", - "dev": true - }, - "node_modules/p-map": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", - "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", - "dev": true, - "dependencies": { - "aggregate-error": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/pause-stream": { - "version": "0.0.11", - "resolved": "https://registry.npmjs.org/pause-stream/-/pause-stream-0.0.11.tgz", - "integrity": "sha512-e3FBlXLmN/D1S+zHzanP4E/4Z60oFAa3O051qt1pxa7DEJWKAyil6upYVXCWadEnuoqa4Pkc9oUx9zsxYeRv8A==", - "dev": true, - "dependencies": { - "through": "~2.3" - } - }, - "node_modules/pend": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", - "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", - "dev": true - }, - "node_modules/performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==", - "dev": true - }, - "node_modules/picocolors": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", - "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", - "dev": true - }, - "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true, - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/postcss": { - "version": "8.4.49", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.49.tgz", - "integrity": "sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { - "nanoid": "^3.3.7", - "picocolors": "^1.1.1", - "source-map-js": "^1.2.1" - }, - "engines": { - "node": "^10 || ^12 || >=14" - } - }, - "node_modules/pretty-bytes": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz", - "integrity": "sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==", - "dev": true, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/process": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", - "dev": true, - "engines": { - "node": ">= 0.6.0" - } - }, - "node_modules/proxy-from-env": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.0.0.tgz", - "integrity": "sha512-F2JHgJQ1iqwnHDcQjVBsq3n/uoaFL+iPW/eAeL7kVxy/2RrWaN4WroKjjvbsoRtv0ftelNyC01bjRhn/bhcf4A==", - "dev": true - }, - "node_modules/ps-tree": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/ps-tree/-/ps-tree-1.2.0.tgz", - "integrity": "sha512-0VnamPPYHl4uaU/nSFeZZpR21QAWRz+sRv4iW9+v/GS/J5U5iZB5BNN6J0RMoOvdx2gWM2+ZFMIm58q24e4UYA==", - "dev": true, - "dependencies": { - "event-stream": "=3.3.4" - }, - "bin": { - "ps-tree": "bin/ps-tree.js" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/pump": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.2.tgz", - "integrity": "sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw==", - "dev": true, - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "node_modules/qs": { - "version": "6.13.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", - "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", - "dev": true, - "dependencies": { - "side-channel": "^1.0.6" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/react": { - "version": "18.3.1", - "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz", - "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==", - "dev": true, - "dependencies": { - "loose-envify": "^1.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/react-dom": { - "version": "18.3.1", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz", - "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==", - "dev": true, - "dependencies": { - "loose-envify": "^1.1.0", - "scheduler": "^0.23.2" - }, - "peerDependencies": { - "react": "^18.3.1" - } - }, - "node_modules/react-intl": { - "version": "6.8.9", - "resolved": "https://registry.npmjs.org/react-intl/-/react-intl-6.8.9.tgz", - "integrity": "sha512-TUfj5E7lyUDvz/GtovC9OMh441kBr08rtIbgh3p0R8iF3hVY+V2W9Am7rb8BpJ/29BH1utJOqOOhmvEVh3GfZg==", - "dev": true, - "dependencies": { - "@formatjs/ecma402-abstract": "2.2.4", - "@formatjs/icu-messageformat-parser": "2.9.4", - "@formatjs/intl": "2.10.15", - "@formatjs/intl-displaynames": "6.8.5", - "@formatjs/intl-listformat": "7.7.5", - "@types/hoist-non-react-statics": "3", - "@types/react": "16 || 17 || 18", - "hoist-non-react-statics": "3", - "intl-messageformat": "10.7.7", - "tslib": "2" - }, - "peerDependencies": { - "react": "^16.6.0 || 17 || 18", - "typescript": "^4.7 || 5" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", - "dev": true - }, - "node_modules/react-refresh": { - "version": "0.14.2", - "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.14.2.tgz", - "integrity": "sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/react-router": { - "version": "6.28.0", - "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.28.0.tgz", - "integrity": "sha512-HrYdIFqdrnhDw0PqG/AKjAqEqM7AvxCz0DQ4h2W8k6nqmc5uRBYDag0SBxx9iYz5G8gnuNVLzUe13wl9eAsXXg==", - "dev": true, - "dependencies": { - "@remix-run/router": "1.21.0" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "react": ">=16.8" - } - }, - "node_modules/react-router-dom": { - "version": "6.28.0", - "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.28.0.tgz", - "integrity": "sha512-kQ7Unsl5YdyOltsPGl31zOjLrDv+m2VcIEcIHqYYD3Lp0UppLjrzcfJqDJwXxFw3TH/yvapbnUvPlAj7Kx5nbg==", - "dev": true, - "dependencies": { - "@remix-run/router": "1.21.0", - "react-router": "6.28.0" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "react": ">=16.8", - "react-dom": ">=16.8" - } - }, - "node_modules/request-progress": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/request-progress/-/request-progress-3.0.0.tgz", - "integrity": "sha512-MnWzEHHaxHO2iWiQuHrUPBi/1WeBf5PkxQqNyNvLl9VAYSdXkP8tQ3pBSeCPD+yw0v0Aq1zosWLz0BdeXpWwZg==", - "dev": true, - "dependencies": { - "throttleit": "^1.0.0" - } - }, - "node_modules/require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/restore-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", - "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", - "dev": true, - "dependencies": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/rfdc": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.4.1.tgz", - "integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==", - "dev": true - }, - "node_modules/rollup": { - "version": "4.27.4", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.27.4.tgz", - "integrity": "sha512-RLKxqHEMjh/RGLsDxAEsaLO3mWgyoU6x9w6n1ikAzet4B3gI2/3yP6PWY2p9QzRTh6MfEIXB3MwsOY0Iv3vNrw==", - "dev": true, - "dependencies": { - "@types/estree": "1.0.6" - }, - "bin": { - "rollup": "dist/bin/rollup" - }, - "engines": { - "node": ">=18.0.0", - "npm": ">=8.0.0" - }, - "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.27.4", - "@rollup/rollup-android-arm64": "4.27.4", - "@rollup/rollup-darwin-arm64": "4.27.4", - "@rollup/rollup-darwin-x64": "4.27.4", - "@rollup/rollup-freebsd-arm64": "4.27.4", - "@rollup/rollup-freebsd-x64": "4.27.4", - "@rollup/rollup-linux-arm-gnueabihf": "4.27.4", - "@rollup/rollup-linux-arm-musleabihf": "4.27.4", - "@rollup/rollup-linux-arm64-gnu": "4.27.4", - "@rollup/rollup-linux-arm64-musl": "4.27.4", - "@rollup/rollup-linux-powerpc64le-gnu": "4.27.4", - "@rollup/rollup-linux-riscv64-gnu": "4.27.4", - "@rollup/rollup-linux-s390x-gnu": "4.27.4", - "@rollup/rollup-linux-x64-gnu": "4.27.4", - "@rollup/rollup-linux-x64-musl": "4.27.4", - "@rollup/rollup-win32-arm64-msvc": "4.27.4", - "@rollup/rollup-win32-ia32-msvc": "4.27.4", - "@rollup/rollup-win32-x64-msvc": "4.27.4", - "fsevents": "~2.3.2" - } - }, - "node_modules/rollup-plugin-visualizer": { - "version": "5.12.0", - "resolved": "https://registry.npmjs.org/rollup-plugin-visualizer/-/rollup-plugin-visualizer-5.12.0.tgz", - "integrity": "sha512-8/NU9jXcHRs7Nnj07PF2o4gjxmm9lXIrZ8r175bT9dK8qoLlvKTwRMArRCMgpMGlq8CTLugRvEmyMeMXIU2pNQ==", - "dev": true, - "dependencies": { - "open": "^8.4.0", - "picomatch": "^2.3.1", - "source-map": "^0.7.4", - "yargs": "^17.5.1" - }, - "bin": { - "rollup-plugin-visualizer": "dist/bin/cli.js" - }, - "engines": { - "node": ">=14" - }, - "peerDependencies": { - "rollup": "2.x || 3.x || 4.x" - }, - "peerDependenciesMeta": { - "rollup": { - "optional": true - } - } - }, - "node_modules/rxjs": { - "version": "7.8.1", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", - "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", - "dev": true, - "dependencies": { - "tslib": "^2.1.0" - } - }, - "node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true - }, - "node_modules/scheduler": { - "version": "0.23.2", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz", - "integrity": "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==", - "dev": true, - "dependencies": { - "loose-envify": "^1.1.0" - } - }, - "node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/set-function-length": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", - "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", - "dev": true, - "dependencies": { - "define-data-property": "^1.1.4", - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.4", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/side-channel": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", - "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.7", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.4", - "object-inspect": "^1.13.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true - }, - "node_modules/slice-ansi": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz", - "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/source-map": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", - "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/source-map-js": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", - "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/split": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/split/-/split-0.3.3.tgz", - "integrity": "sha512-wD2AeVmxXRBoX44wAycgjVpMhvbwdI2aZjCkvfNcH1YqHQvJVa1duWc73OyVGJUc05fhFaTZeQ/PYsrmyH0JVA==", - "dev": true, - "dependencies": { - "through": "2" - }, - "engines": { - "node": "*" - } - }, - "node_modules/sshpk": { - "version": "1.18.0", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.18.0.tgz", - "integrity": "sha512-2p2KJZTSqQ/I3+HX42EpYOa2l3f8Erv8MWKsy2I9uf4wA7yFIkXRffYdsx86y6z4vHtV8u7g+pPlr8/4ouAxsQ==", - "dev": true, - "dependencies": { - "asn1": "~0.2.3", - "assert-plus": "^1.0.0", - "bcrypt-pbkdf": "^1.0.0", - "dashdash": "^1.12.0", - "ecc-jsbn": "~0.1.1", - "getpass": "^0.1.1", - "jsbn": "~0.1.0", - "safer-buffer": "^2.0.2", - "tweetnacl": "~0.14.0" - }, - "bin": { - "sshpk-conv": "bin/sshpk-conv", - "sshpk-sign": "bin/sshpk-sign", - "sshpk-verify": "bin/sshpk-verify" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/start-server-and-test": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/start-server-and-test/-/start-server-and-test-2.0.8.tgz", - "integrity": "sha512-v2fV6NV2F7tL1ocwfI4Wpait+IKjRbT5l3ZZ+ZikXdMLmxYsS8ynGAsCQAUVXkVyGyS+UibsRnvgHkMvJIvCsw==", - "dev": true, - "dependencies": { - "arg": "^5.0.2", - "bluebird": "3.7.2", - "check-more-types": "2.24.0", - "debug": "4.3.7", - "execa": "5.1.1", - "lazy-ass": "1.6.0", - "ps-tree": "1.2.0", - "wait-on": "8.0.1" - }, - "bin": { - "server-test": "src/bin/start.js", - "start-server-and-test": "src/bin/start.js", - "start-test": "src/bin/start.js" - }, - "engines": { - "node": ">=16" - } - }, - "node_modules/start-server-and-test/node_modules/execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", - "dev": true, - "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "node_modules/start-server-and-test/node_modules/get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/start-server-and-test/node_modules/human-signals": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", - "dev": true, - "engines": { - "node": ">=10.17.0" - } - }, - "node_modules/stream-combiner": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/stream-combiner/-/stream-combiner-0.0.4.tgz", - "integrity": "sha512-rT00SPnTVyRsaSz5zgSPma/aHSOic5U1prhYdRy5HS2kTZviFpmDgzilbtsJsxiroqACmayynDN/9VzIbX5DOw==", - "dev": true, - "dependencies": { - "duplexer": "~0.1.1" - } - }, - "node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, - "node_modules/throttleit": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/throttleit/-/throttleit-1.0.1.tgz", - "integrity": "sha512-vDZpf9Chs9mAdfY046mcPt8fg5QSZr37hEH4TXYBnDF+izxgrbRGUAAaBvIk/fJm9aOFCGFd1EsNg5AZCbnQCQ==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", - "dev": true - }, - "node_modules/tldts": { - "version": "6.1.64", - "resolved": "https://registry.npmjs.org/tldts/-/tldts-6.1.64.tgz", - "integrity": "sha512-ph4AE5BXWIOsSy9stpoeo7bYe/Cy7VfpciIH4RhVZUPItCJmhqWCN0EVzxd8BOHiyNb42vuJc6NWTjJkg91Tuw==", - "dev": true, - "dependencies": { - "tldts-core": "^6.1.64" - }, - "bin": { - "tldts": "bin/cli.js" - } - }, - "node_modules/tldts-core": { - "version": "6.1.64", - "resolved": "https://registry.npmjs.org/tldts-core/-/tldts-core-6.1.64.tgz", - "integrity": "sha512-uqnl8vGV16KsyflHOzqrYjjArjfXaU6rMPXYy2/ZWoRKCkXtghgB4VwTDXUG+t0OTGeSewNAG31/x1gCTfLt+Q==", - "dev": true - }, - "node_modules/tmp": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.3.tgz", - "integrity": "sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w==", - "dev": true, - "engines": { - "node": ">=14.14" - } - }, - "node_modules/tough-cookie": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-5.0.0.tgz", - "integrity": "sha512-FRKsF7cz96xIIeMZ82ehjC3xW2E+O2+v11udrDYewUbszngYhsGa8z6YUMMzO9QJZzzyd0nGGXnML/TReX6W8Q==", - "dev": true, - "dependencies": { - "tldts": "^6.1.32" - }, - "engines": { - "node": ">=16" - } - }, - "node_modules/tree-kill": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", - "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", - "dev": true, - "bin": { - "tree-kill": "cli.js" - } - }, - "node_modules/tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "dev": true - }, - "node_modules/tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", - "dev": true, - "dependencies": { - "safe-buffer": "^5.0.1" - }, - "engines": { - "node": "*" - } - }, - "node_modules/tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==", - "dev": true - }, - "node_modules/type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/typescript": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.7.2.tgz", - "integrity": "sha512-i5t66RHxDvVN40HfDd1PsEThGNnlMCMT3jMUuoh9/0TaqWevNontacunWyN02LA9/fIbEWlcHZcgTKb9QoaLfg==", - "dev": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=14.17" - } - }, - "node_modules/undici-types": { - "version": "6.20.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.20.0.tgz", - "integrity": "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==", - "dev": true, - "optional": true - }, - "node_modules/universalify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", - "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", - "dev": true, - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/untildify": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/untildify/-/untildify-4.0.0.tgz", - "integrity": "sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/update-browserslist-db": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.1.tgz", - "integrity": "sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { - "escalade": "^3.2.0", - "picocolors": "^1.1.0" - }, - "bin": { - "update-browserslist-db": "cli.js" - }, - "peerDependencies": { - "browserslist": ">= 4.21.0" - } - }, - "node_modules/uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "dev": true, - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/verror": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==", - "dev": true, - "engines": [ - "node >=0.6.0" - ], - "dependencies": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" - } - }, - "node_modules/vite": { - "version": "5.4.11", - "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.11.tgz", - "integrity": "sha512-c7jFQRklXua0mTzneGW9QVyxFjUgwcihC4bXEtujIo2ouWCe1Ajt/amn2PCxYnhYfd5k09JX3SB7OYWFKYqj8Q==", - "dev": true, - "dependencies": { - "esbuild": "^0.21.3", - "postcss": "^8.4.43", - "rollup": "^4.20.0" - }, - "bin": { - "vite": "bin/vite.js" - }, - "engines": { - "node": "^18.0.0 || >=20.0.0" - }, - "funding": { - "url": "https://github.com/vitejs/vite?sponsor=1" - }, - "optionalDependencies": { - "fsevents": "~2.3.3" - }, - "peerDependencies": { - "@types/node": "^18.0.0 || >=20.0.0", - "less": "*", - "lightningcss": "^1.21.0", - "sass": "*", - "sass-embedded": "*", - "stylus": "*", - "sugarss": "*", - "terser": "^5.4.0" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - }, - "less": { - "optional": true - }, - "lightningcss": { - "optional": true - }, - "sass": { - "optional": true - }, - "sass-embedded": { - "optional": true - }, - "stylus": { - "optional": true - }, - "sugarss": { - "optional": true - }, - "terser": { - "optional": true - } - } - }, - "node_modules/vite-plugin-externalize-deps": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/vite-plugin-externalize-deps/-/vite-plugin-externalize-deps-0.8.0.tgz", - "integrity": "sha512-MdC8kRNQ1ZjhUicU2HcqGVhL0UUFqv83Zp1JZdHjE82PoPR8wsSWZ3axpot7B6img3sW6g8shYJikE0CKA0chA==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/voracious" - }, - "peerDependencies": { - "vite": "^2.0.0 || ^3.0.0 || ^4.0.0 || ^5.0.0" - } - }, - "node_modules/wait-on": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/wait-on/-/wait-on-8.0.1.tgz", - "integrity": "sha512-1wWQOyR2LVVtaqrcIL2+OM+x7bkpmzVROa0Nf6FryXkS+er5Sa1kzFGjzZRqLnHa3n1rACFLeTwUqE1ETL9Mig==", - "dev": true, - "dependencies": { - "axios": "^1.7.7", - "joi": "^17.13.3", - "lodash": "^4.17.21", - "minimist": "^1.2.8", - "rxjs": "^7.8.1" - }, - "bin": { - "wait-on": "bin/wait-on" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true - }, - "node_modules/y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true - }, - "node_modules/yargs": { - "version": "17.7.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", - "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", - "dev": true, - "dependencies": { - "cliui": "^8.0.1", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", - "y18n": "^5.0.5", - "yargs-parser": "^21.1.1" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/yargs-parser": { - "version": "21.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", - "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", - "dev": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/yauzl": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", - "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", - "dev": true, - "dependencies": { - "buffer-crc32": "~0.2.3", - "fd-slicer": "~1.1.0" - } - } - } -} \ No newline at end of file diff --git a/packages/rmw-shell/src/providers/Firebase/Cols/Provider.tsx b/packages/rmw-shell/src/providers/Firebase/Cols/Provider.tsx index 7dd28302c..2e74bbda1 100644 --- a/packages/rmw-shell/src/providers/Firebase/Cols/Provider.tsx +++ b/packages/rmw-shell/src/providers/Firebase/Cols/Provider.tsx @@ -54,7 +54,7 @@ function reducer(state: DocumentData, action: ActionType) { } = action; switch (type) { case ActionTypes.LOADING_CHANGED: - return { ...state, [path]: { ...state[path], isLoading } }; + return { ...state, [path]: { ...state?.[path], isLoading } }; case ActionTypes.ERROR: return { ...state, diff --git a/packages/rmw-shell/src/providers/Firebase/Docs/Provider.tsx b/packages/rmw-shell/src/providers/Firebase/Docs/Provider.tsx index 629def129..2ca7892a4 100644 --- a/packages/rmw-shell/src/providers/Firebase/Docs/Provider.tsx +++ b/packages/rmw-shell/src/providers/Firebase/Docs/Provider.tsx @@ -32,7 +32,7 @@ function reducer(state: DocumentData, action: ActionType) { } = action; switch (type) { case ActionTypes.LOADING_CHANGED: - return { ...state, [path]: { ...state[path], isLoading } }; + return { ...state, [path]: { ...state?.[path], isLoading } }; case ActionTypes.ERROR: return { ...state, diff --git a/packages/rmw-shell/src/providers/Firebase/Lists/Provider.tsx b/packages/rmw-shell/src/providers/Firebase/Lists/Provider.tsx index 5046264ad..abdf590f0 100644 --- a/packages/rmw-shell/src/providers/Firebase/Lists/Provider.tsx +++ b/packages/rmw-shell/src/providers/Firebase/Lists/Provider.tsx @@ -69,7 +69,7 @@ function reducer(state: DocumentData, action: ActionType) { } = action; switch (type) { case ActionTypes.LOADING_CHANGED: - return { ...state, [path]: { ...state[path], isLoading } }; + return { ...state, [path]: { ...state?.[path], isLoading } }; case ActionTypes.ERROR: return { ...state, diff --git a/packages/rmw-shell/src/providers/Firebase/Paths/Provider.tsx b/packages/rmw-shell/src/providers/Firebase/Paths/Provider.tsx index 0c6598221..fde79133e 100644 --- a/packages/rmw-shell/src/providers/Firebase/Paths/Provider.tsx +++ b/packages/rmw-shell/src/providers/Firebase/Paths/Provider.tsx @@ -44,7 +44,7 @@ function reducer(state: DocumentData, action: ActionType) { } = action; switch (type) { case ActionTypes.LOADING_CHANGED: - return { ...state, [path]: { ...state[path], isLoading } }; + return { ...state, [path]: { ...state?.[path], isLoading } }; case ActionTypes.ERROR_CHANGED: return { ...state, @@ -145,28 +145,28 @@ const Provider = ({ const getPath = useCallback( (path: string, defaultValue?: any): any => { - return state[path] ? state[path].value : defaultValue; + return state?.[path] ? state[path].value : defaultValue; }, [state] ); const isPathLoading = useCallback( (path: string): boolean => { - return state[path] ? state[path].isLoading : false; + return state?.[path] ? state[path].isLoading : false; }, [state] ); const getPathError = useCallback( (path: string) => { - return state[path] ? state[path].error : false; + return state?.[path] ? state[path].error : false; }, [state] ); const hasPathError = useCallback( (path: string): boolean => { - return state[path] ? state[path].hasError : false; + return state?.[path] ? state[path].hasError : false; }, [state] ); From 1e80003c5a83933c9b9b49b5a787d761a829fd2a Mon Sep 17 00:00:00 2001 From: Belmin Mujan Date: Thu, 2 Jan 2025 00:13:03 +0100 Subject: [PATCH 15/21] Fix package.json, remove rollup --- packages/base-shell/package.json | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/packages/base-shell/package.json b/packages/base-shell/package.json index 969bc2245..45b08ed0d 100644 --- a/packages/base-shell/package.json +++ b/packages/base-shell/package.json @@ -59,8 +59,5 @@ "react-most-wanted", "base-shell" ], - "gitHead": "a90224fcc897992ad6bb85e613ae50a24aa2a936", - "dependencies": { - "@rollup/rollup-darwin-x64": "^4.27.4" - } + "gitHead": "a90224fcc897992ad6bb85e613ae50a24aa2a936" } From 2899eb793fd9510ef6194c1b1dc983f2386573f9 Mon Sep 17 00:00:00 2001 From: Belmin Mujan Date: Thu, 2 Jan 2025 00:16:10 +0100 Subject: [PATCH 16/21] Fix package-lock --- package-lock.json | 60 +++++++++++++++++++++++++++++++++++------------ 1 file changed, 45 insertions(+), 15 deletions(-) diff --git a/package-lock.json b/package-lock.json index c783dec8f..61c4721c1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1173,6 +1173,42 @@ "integrity": "sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==", "dev": true }, + "node_modules/@types/react": { + "version": "19.0.2", + "resolved": "https://registry.npmjs.org/@types/react/-/react-19.0.2.tgz", + "integrity": "sha512-USU8ZI/xyKJwFTpjSVIrSeHBVAGagkHQKPNbxeWwql/vDmnTIBgx+TJnhFnj1NXgz8XfprU0egV2dROLGpsBEg==", + "dev": true, + "dependencies": { + "csstype": "^3.0.2" + } + }, + "node_modules/@types/react-helmet": { + "version": "6.1.11", + "resolved": "https://registry.npmjs.org/@types/react-helmet/-/react-helmet-6.1.11.tgz", + "integrity": "sha512-0QcdGLddTERotCXo3VFlUSWO3ztraw8nZ6e3zJSgG7apwV5xt+pJUS8ewPBqT4NYB1optGLprNQzFleIY84u/g==", + "dev": true, + "dependencies": { + "@types/react": "*" + } + }, + "node_modules/@types/react-linkify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@types/react-linkify/-/react-linkify-1.0.4.tgz", + "integrity": "sha512-NOMw4X3kjvjY0lT5kXQdxZCXpPNi2hOuuqG+Kz+5EOQpi9rDUJJDitdE1j2JRNmrTnNIjrLnYG0HKyuOWN/uKA==", + "dev": true, + "dependencies": { + "@types/react": "*" + } + }, + "node_modules/@types/react-window": { + "version": "1.8.8", + "resolved": "https://registry.npmjs.org/@types/react-window/-/react-window-1.8.8.tgz", + "integrity": "sha512-8Ls660bHR1AUA2kuRvVG9D/4XpRC6wjAaPT9dil7Ckc76eP9TKWZwwmgfq8Q1LANX3QNDnoU4Zp48A3w+zK69Q==", + "dev": true, + "dependencies": { + "@types/react": "*" + } + }, "node_modules/@yarnpkg/lockfile": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz", @@ -2057,6 +2093,12 @@ "node": ">=4" } }, + "node_modules/csstype": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", + "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", + "dev": true + }, "node_modules/dargs": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/dargs/-/dargs-7.0.0.tgz", @@ -7685,11 +7727,6 @@ "dev": true, "license": "MIT" }, - "packages/base-shell/node_modules/csstype": { - "version": "3.1.3", - "dev": true, - "license": "MIT" - }, "packages/base-shell/node_modules/cypress": { "version": "13.16.0", "dev": true, @@ -9148,6 +9185,7 @@ "@fontsource/roboto": "^5.1.0", "@mui/icons-material": "^6.1.4", "@mui/material": "^6.1.4", + "@types/react-window": "^1.8.8", "@vitejs/plugin-react": "^4.3.2", "cypress": "^13.15.0", "glob": "^11.0.0", @@ -10867,11 +10905,6 @@ "node": ">=10" } }, - "packages/material-ui-shell/node_modules/csstype": { - "version": "3.1.3", - "dev": true, - "license": "MIT" - }, "packages/material-ui-shell/node_modules/cypress": { "version": "13.16.0", "dev": true, @@ -14047,6 +14080,8 @@ "@mui/material": "^6.1.4", "@mui/styles": "^6.1.4", "@mui/x-date-pickers": "^7.20.0", + "@types/react-helmet": "^6.1.11", + "@types/react-linkify": "^1.0.4", "@vitejs/plugin-react": "^4.3.2", "chart.js": "^4.4.5", "cypress": "^13.15.0", @@ -16409,11 +16444,6 @@ "is-in-browser": "^1.0.2" } }, - "packages/rmw-shell/node_modules/csstype": { - "version": "3.1.3", - "dev": true, - "license": "MIT" - }, "packages/rmw-shell/node_modules/cypress": { "version": "13.16.0", "dev": true, From ea82f2717d1d7d415ca784058a58ec676752b08f Mon Sep 17 00:00:00 2001 From: Belmin Mujan Date: Thu, 2 Jan 2025 14:36:12 +0100 Subject: [PATCH 17/21] Fix ts final issues --- package-lock.json | 248 + package.json | 3 +- .../template/package-lock.json | 5180 ----------------- packages/rmw-shell/package.json | 1 + .../src/components/ChatMessage/index.tsx | 8 +- packages/rmw-shell/src/pages/SignIn/index.tsx | 1 + 6 files changed, 257 insertions(+), 5184 deletions(-) delete mode 100644 packages/material-ui-shell/create-material-ui-shell/template/package-lock.json diff --git a/package-lock.json b/package-lock.json index 61c4721c1..bbd984beb 100644 --- a/package-lock.json +++ b/package-lock.json @@ -14,6 +14,7 @@ "lerna": "^8.1.8" }, "optionalDependencies": { + "@rollup/rollup-darwin-x64": "^4.29.1", "@rollup/rollup-linux-x64-gnu": "*" } }, @@ -1008,6 +1009,161 @@ "node": ">=14" } }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.27.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.27.4.tgz", + "integrity": "sha512-2Y3JT6f5MrQkICUyRVCw4oa0sutfAsgaSsb0Lmmy1Wi2y7X5vT9Euqw4gOsCyy0YfKURBg35nhUKZS4mDcfULw==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.27.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.27.4.tgz", + "integrity": "sha512-wzKRQXISyi9UdCVRqEd0H4cMpzvHYt1f/C3CoIjES6cG++RHKhrBj2+29nPF0IB5kpy9MS71vs07fvrNGAl/iA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.29.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.29.1.tgz", + "integrity": "sha512-j/Ej1oanzPjmN0tirRd5K2/nncAhS9W6ICzgxV+9Y5ZsP0hiGhHJXZ2JQ53iSSjj8m6cRY6oB1GMzNn2EUt6Ng==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.27.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.27.4.tgz", + "integrity": "sha512-NBI2/i2hT9Q+HySSHTBh52da7isru4aAAo6qC3I7QFVsuhxi2gM8t/EI9EVcILiHLj1vfi+VGGPaLOUENn7pmw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.27.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.27.4.tgz", + "integrity": "sha512-wYcC5ycW2zvqtDYrE7deary2P2UFmSh85PUpAx+dwTCO9uw3sgzD6Gv9n5X4vLaQKsrfTSZZ7Z7uynQozPVvWA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.27.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.27.4.tgz", + "integrity": "sha512-9OwUnK/xKw6DyRlgx8UizeqRFOfi9mf5TYCw1uolDaJSbUmBxP85DE6T4ouCMoN6pXw8ZoTeZCSEfSaYo+/s1w==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.27.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.27.4.tgz", + "integrity": "sha512-Vgdo4fpuphS9V24WOV+KwkCVJ72u7idTgQaBoLRD0UxBAWTF9GWurJO9YD9yh00BzbkhpeXtm6na+MvJU7Z73A==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.27.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.27.4.tgz", + "integrity": "sha512-pleyNgyd1kkBkw2kOqlBx+0atfIIkkExOTiifoODo6qKDSpnc6WzUY5RhHdmTdIJXBdSnh6JknnYTtmQyobrVg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.27.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.27.4.tgz", + "integrity": "sha512-caluiUXvUuVyCHr5DxL8ohaaFFzPGmgmMvwmqAITMpV/Q+tPoaHZ/PWa3t8B2WyoRcIIuu1hkaW5KkeTDNSnMA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { + "version": "4.27.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.27.4.tgz", + "integrity": "sha512-FScrpHrO60hARyHh7s1zHE97u0KlT/RECzCKAdmI+LEoC1eDh/RDji9JgFqyO+wPDb86Oa/sXkily1+oi4FzJQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.27.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.27.4.tgz", + "integrity": "sha512-qyyprhyGb7+RBfMPeww9FlHwKkCXdKHeGgSqmIXw9VSUtvyFZ6WZRtnxgbuz76FK7LyoN8t/eINRbPUcvXB5fw==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.27.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.27.4.tgz", + "integrity": "sha512-PFz+y2kb6tbh7m3A7nA9++eInGcDVZUACulf/KzDtovvdTizHpZaJty7Gp0lFwSQcrnebHOqxF1MaKZd7psVRg==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, "node_modules/@rollup/rollup-linux-x64-gnu": { "version": "4.27.4", "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.27.4.tgz", @@ -1020,6 +1176,58 @@ "linux" ] }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.27.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.27.4.tgz", + "integrity": "sha512-5AeeAF1PB9TUzD+3cROzFTnAJAcVUGLuR8ng0E0WXGkYhp6RD6L+6szYVX+64Rs0r72019KHZS1ka1q+zU/wUw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.27.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.27.4.tgz", + "integrity": "sha512-yOpVsA4K5qVwu2CaS3hHxluWIK5HQTjNV4tWjQXluMiiiu4pJj4BN98CvxohNCpcjMeTXk/ZMJBRbgRg8HBB6A==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.27.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.27.4.tgz", + "integrity": "sha512-KtwEJOaHAVJlxV92rNYiG9JQwQAdhBlrjNRp7P9L8Cb4Rer3in+0A+IPhJC9y68WAi9H0sX4AiG2NTsVlmqJeQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.27.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.27.4.tgz", + "integrity": "sha512-3j4jx1TppORdTAoBJRd+/wJRGCPC0ETWkXOecJ6PPZLj6SptXkrXcNqdj0oclbKML6FkQltdz7bBA3rUSirZug==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, "node_modules/@sigstore/bundle": { "version": "2.3.2", "resolved": "https://registry.npmjs.org/@sigstore/bundle/-/bundle-2.3.2.tgz", @@ -7306,6 +7514,19 @@ "darwin" ] }, + "packages/base-shell/node_modules/@rollup/rollup-darwin-x64": { + "version": "4.27.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.27.4.tgz", + "integrity": "sha512-o9bH2dbdgBDJaXWJCDTNDYa171ACUdzpxSZt+u/AAeQ20Nk5x+IhA+zsGmrQtpkLiumRJEYef68gcpn2ooXhSQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ] + }, "packages/base-shell/node_modules/@sideway/address": { "version": "4.1.5", "dev": true, @@ -10085,6 +10306,19 @@ "darwin" ] }, + "packages/material-ui-shell/node_modules/@rollup/rollup-darwin-x64": { + "version": "4.27.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.27.4.tgz", + "integrity": "sha512-o9bH2dbdgBDJaXWJCDTNDYa171ACUdzpxSZt+u/AAeQ20Nk5x+IhA+zsGmrQtpkLiumRJEYef68gcpn2ooXhSQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ] + }, "packages/material-ui-shell/node_modules/@sideway/address": { "version": "4.1.5", "dev": true, @@ -14080,6 +14314,7 @@ "@mui/material": "^6.1.4", "@mui/styles": "^6.1.4", "@mui/x-date-pickers": "^7.20.0", + "@types/react": "^18.3.12", "@types/react-helmet": "^6.1.11", "@types/react-linkify": "^1.0.4", "@vitejs/plugin-react": "^4.3.2", @@ -15784,6 +16019,19 @@ "darwin" ] }, + "packages/rmw-shell/node_modules/@rollup/rollup-darwin-x64": { + "version": "4.27.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.27.4.tgz", + "integrity": "sha512-o9bH2dbdgBDJaXWJCDTNDYa171ACUdzpxSZt+u/AAeQ20Nk5x+IhA+zsGmrQtpkLiumRJEYef68gcpn2ooXhSQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ] + }, "packages/rmw-shell/node_modules/@sideway/address": { "version": "4.1.5", "dev": true, diff --git a/package.json b/package.json index c5da8bd1b..1056f9a55 100644 --- a/package.json +++ b/package.json @@ -10,6 +10,7 @@ "lerna": "^8.1.8" }, "optionalDependencies": { - "@rollup/rollup-linux-x64-gnu": "*" + "@rollup/rollup-linux-x64-gnu": "*", + "@rollup/rollup-darwin-x64": "^4.29.1" } } diff --git a/packages/material-ui-shell/create-material-ui-shell/template/package-lock.json b/packages/material-ui-shell/create-material-ui-shell/template/package-lock.json deleted file mode 100644 index 09c64cc21..000000000 --- a/packages/material-ui-shell/create-material-ui-shell/template/package-lock.json +++ /dev/null @@ -1,5180 +0,0 @@ -{ - "name": "material-ui-shell-template", - "version": "1.0.40", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "material-ui-shell-template", - "version": "1.0.40", - "license": "ISC", - "dependencies": { - "@ecronix/material-ui-shell": "^3.5.53" - }, - "devDependencies": { - "@vitejs/plugin-react": "^4", - "vite": "^5" - } - }, - "../..": { - "name": "@ecronix/material-ui-shell", - "version": "3.5.51", - "license": "MIT", - "devDependencies": { - "@ecronix/base-shell": "^2.6.60", - "@emotion/react": "^11.13.3", - "@emotion/styled": "^11.13.0", - "@fontsource/roboto": "^5.1.0", - "@mui/icons-material": "^6.1.4", - "@mui/material": "^6.1.4", - "@vitejs/plugin-react": "^4.3.2", - "cypress": "^13.15.0", - "glob": "^11.0.0", - "intl": "^1.2.5", - "jss-rtl": "^0.3.0", - "lp-react-virtualized-auto-sizer-react-18": "^1.0.7", - "notistack": "^3.0.1", - "prettier": "^3.3.3", - "raw-loader": "^4.0.2", - "react": "^18.3.1", - "react-custom-scrollbars-2": "^4.5.0", - "react-dom": "^18.3.1", - "react-easy-crop": "^5.1.0", - "react-intl": "^6.8.0", - "react-ios-pwa-prompt": "^2.0.6", - "react-markdown": "^9.0.1", - "react-router-dom": "^6.27.0", - "react-window": "^1.8.10", - "rollup-plugin-visualizer": "^5.12.0", - "start-server-and-test": "^2.0.8", - "vite": "^5.4.9", - "vite-plugin-externalize-deps": "^0.8.0" - }, - "peerDependencies": { - "@ecronix/base-shell": "2.x", - "@emotion/react": "11.x", - "@emotion/styled": "11.x", - "@fontsource/roboto": "5.x", - "@mui/icons-material": "6.x", - "@mui/material": "6.x", - "intl": "1.x", - "jss-rtl": "0.x", - "lp-react-virtualized-auto-sizer-react-18": "1.x", - "notistack": "3.x", - "react": "16.x || 17.x || 18.x", - "react-custom-scrollbars-2": "4.x", - "react-dom": "16.x || 17.x || 18.x", - "react-easy-crop": "5.x", - "react-intl": "6.x", - "react-ios-pwa-prompt": "2.x", - "react-markdown": "^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 || ^9.0.0", - "react-router-dom": "6.x", - "react-window": "1.x" - } - }, - "../../node_modules/@ampproject/remapping": { - "version": "2.3.0", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.24" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "../../node_modules/@babel/compat-data": { - "version": "7.26.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "../../node_modules/@babel/core": { - "version": "7.26.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.26.0", - "@babel/generator": "^7.26.0", - "@babel/helper-compilation-targets": "^7.25.9", - "@babel/helper-module-transforms": "^7.26.0", - "@babel/helpers": "^7.26.0", - "@babel/parser": "^7.26.0", - "@babel/template": "^7.25.9", - "@babel/traverse": "^7.25.9", - "@babel/types": "^7.26.0", - "convert-source-map": "^2.0.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.3", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" - } - }, - "../../node_modules/@babel/core/node_modules/convert-source-map": { - "version": "2.0.0", - "dev": true, - "license": "MIT" - }, - "../../node_modules/@babel/generator": { - "version": "7.26.2", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/parser": "^7.26.2", - "@babel/types": "^7.26.0", - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.25", - "jsesc": "^3.0.2" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "../../node_modules/@babel/helper-compilation-targets": { - "version": "7.25.9", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/compat-data": "^7.25.9", - "@babel/helper-validator-option": "^7.25.9", - "browserslist": "^4.24.0", - "lru-cache": "^5.1.1", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "../../node_modules/@babel/helper-module-imports": { - "version": "7.25.9", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/traverse": "^7.25.9", - "@babel/types": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "../../node_modules/@babel/helper-module-transforms": { - "version": "7.26.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-module-imports": "^7.25.9", - "@babel/helper-validator-identifier": "^7.25.9", - "@babel/traverse": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "../../node_modules/@babel/helper-plugin-utils": { - "version": "7.25.9", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "../../node_modules/@babel/helper-string-parser": { - "version": "7.25.9", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "../../node_modules/@babel/helper-validator-option": { - "version": "7.25.9", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "../../node_modules/@babel/helpers": { - "version": "7.26.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/template": "^7.25.9", - "@babel/types": "^7.26.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "../../node_modules/@babel/parser": { - "version": "7.26.2", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.26.0" - }, - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "../../node_modules/@babel/plugin-transform-react-jsx-self": { - "version": "7.25.9", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "../../node_modules/@babel/plugin-transform-react-jsx-source": { - "version": "7.25.9", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "../../node_modules/@babel/runtime": { - "version": "7.26.0", - "dev": true, - "license": "MIT", - "dependencies": { - "regenerator-runtime": "^0.14.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "../../node_modules/@babel/template": { - "version": "7.25.9", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.25.9", - "@babel/parser": "^7.25.9", - "@babel/types": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "../../node_modules/@babel/traverse": { - "version": "7.25.9", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.25.9", - "@babel/generator": "^7.25.9", - "@babel/parser": "^7.25.9", - "@babel/template": "^7.25.9", - "@babel/types": "^7.25.9", - "debug": "^4.3.1", - "globals": "^11.1.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "../../node_modules/@babel/types": { - "version": "7.26.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-string-parser": "^7.25.9", - "@babel/helper-validator-identifier": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "../../node_modules/@colors/colors": { - "version": "1.5.0", - "dev": true, - "license": "MIT", - "optional": true, - "engines": { - "node": ">=0.1.90" - } - }, - "../../node_modules/@cypress/request": { - "version": "3.0.6", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "aws-sign2": "~0.7.0", - "aws4": "^1.8.0", - "caseless": "~0.12.0", - "combined-stream": "~1.0.6", - "extend": "~3.0.2", - "forever-agent": "~0.6.1", - "form-data": "~4.0.0", - "http-signature": "~1.4.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.19", - "performance-now": "^2.1.0", - "qs": "6.13.0", - "safe-buffer": "^5.1.2", - "tough-cookie": "^5.0.0", - "tunnel-agent": "^0.6.0", - "uuid": "^8.3.2" - }, - "engines": { - "node": ">= 6" - } - }, - "../../node_modules/@cypress/xvfb": { - "version": "1.2.4", - "dev": true, - "license": "MIT", - "dependencies": { - "debug": "^3.1.0", - "lodash.once": "^4.1.1" - } - }, - "../../node_modules/@cypress/xvfb/node_modules/debug": { - "version": "3.2.7", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "^2.1.1" - } - }, - "../../node_modules/@emotion/babel-plugin": { - "version": "11.13.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-module-imports": "^7.16.7", - "@babel/runtime": "^7.18.3", - "@emotion/hash": "^0.9.2", - "@emotion/memoize": "^0.9.0", - "@emotion/serialize": "^1.3.3", - "babel-plugin-macros": "^3.1.0", - "convert-source-map": "^1.5.0", - "escape-string-regexp": "^4.0.0", - "find-root": "^1.1.0", - "source-map": "^0.5.7", - "stylis": "4.2.0" - } - }, - "../../node_modules/@emotion/cache": { - "version": "11.13.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@emotion/memoize": "^0.9.0", - "@emotion/sheet": "^1.4.0", - "@emotion/utils": "^1.4.2", - "@emotion/weak-memoize": "^0.4.0", - "stylis": "4.2.0" - } - }, - "../../node_modules/@emotion/hash": { - "version": "0.9.2", - "dev": true, - "license": "MIT" - }, - "../../node_modules/@emotion/is-prop-valid": { - "version": "1.3.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@emotion/memoize": "^0.9.0" - } - }, - "../../node_modules/@emotion/memoize": { - "version": "0.9.0", - "dev": true, - "license": "MIT" - }, - "../../node_modules/@emotion/react": { - "version": "11.13.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.18.3", - "@emotion/babel-plugin": "^11.13.5", - "@emotion/cache": "^11.13.5", - "@emotion/serialize": "^1.3.3", - "@emotion/use-insertion-effect-with-fallbacks": "^1.1.0", - "@emotion/utils": "^1.4.2", - "@emotion/weak-memoize": "^0.4.0", - "hoist-non-react-statics": "^3.3.1" - }, - "peerDependencies": { - "react": ">=16.8.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "../../node_modules/@emotion/serialize": { - "version": "1.3.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@emotion/hash": "^0.9.2", - "@emotion/memoize": "^0.9.0", - "@emotion/unitless": "^0.10.0", - "@emotion/utils": "^1.4.2", - "csstype": "^3.0.2" - } - }, - "../../node_modules/@emotion/sheet": { - "version": "1.4.0", - "dev": true, - "license": "MIT" - }, - "../../node_modules/@emotion/styled": { - "version": "11.13.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.18.3", - "@emotion/babel-plugin": "^11.13.5", - "@emotion/is-prop-valid": "^1.3.0", - "@emotion/serialize": "^1.3.3", - "@emotion/use-insertion-effect-with-fallbacks": "^1.1.0", - "@emotion/utils": "^1.4.2" - }, - "peerDependencies": { - "@emotion/react": "^11.0.0-rc.0", - "react": ">=16.8.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "../../node_modules/@emotion/unitless": { - "version": "0.10.0", - "dev": true, - "license": "MIT" - }, - "../../node_modules/@emotion/use-insertion-effect-with-fallbacks": { - "version": "1.1.0", - "dev": true, - "license": "MIT", - "peerDependencies": { - "react": ">=16.8.0" - } - }, - "../../node_modules/@emotion/utils": { - "version": "1.4.2", - "dev": true, - "license": "MIT" - }, - "../../node_modules/@emotion/weak-memoize": { - "version": "0.4.0", - "dev": true, - "license": "MIT" - }, - "../../node_modules/@esbuild/darwin-arm64": { - "version": "0.21.5", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "../../node_modules/@fontsource/roboto": { - "version": "5.1.0", - "dev": true, - "license": "Apache-2.0" - }, - "../../node_modules/@formatjs/ecma402-abstract": { - "version": "2.2.4", - "dev": true, - "license": "MIT", - "dependencies": { - "@formatjs/fast-memoize": "2.2.3", - "@formatjs/intl-localematcher": "0.5.8", - "tslib": "2" - } - }, - "../../node_modules/@formatjs/fast-memoize": { - "version": "2.2.3", - "dev": true, - "license": "MIT", - "dependencies": { - "tslib": "2" - } - }, - "../../node_modules/@formatjs/icu-messageformat-parser": { - "version": "2.9.4", - "dev": true, - "license": "MIT", - "dependencies": { - "@formatjs/ecma402-abstract": "2.2.4", - "@formatjs/icu-skeleton-parser": "1.8.8", - "tslib": "2" - } - }, - "../../node_modules/@formatjs/icu-skeleton-parser": { - "version": "1.8.8", - "dev": true, - "license": "MIT", - "dependencies": { - "@formatjs/ecma402-abstract": "2.2.4", - "tslib": "2" - } - }, - "../../node_modules/@formatjs/intl": { - "version": "2.10.15", - "dev": true, - "license": "MIT", - "dependencies": { - "@formatjs/ecma402-abstract": "2.2.4", - "@formatjs/fast-memoize": "2.2.3", - "@formatjs/icu-messageformat-parser": "2.9.4", - "@formatjs/intl-displaynames": "6.8.5", - "@formatjs/intl-listformat": "7.7.5", - "intl-messageformat": "10.7.7", - "tslib": "2" - }, - "peerDependencies": { - "typescript": "^4.7 || 5" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "../../node_modules/@formatjs/intl-displaynames": { - "version": "6.8.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@formatjs/ecma402-abstract": "2.2.4", - "@formatjs/intl-localematcher": "0.5.8", - "tslib": "2" - } - }, - "../../node_modules/@formatjs/intl-listformat": { - "version": "7.7.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@formatjs/ecma402-abstract": "2.2.4", - "@formatjs/intl-localematcher": "0.5.8", - "tslib": "2" - } - }, - "../../node_modules/@formatjs/intl-localematcher": { - "version": "0.5.8", - "dev": true, - "license": "MIT", - "dependencies": { - "tslib": "2" - } - }, - "../../node_modules/@hapi/hoek": { - "version": "9.3.0", - "dev": true, - "license": "BSD-3-Clause" - }, - "../../node_modules/@hapi/topo": { - "version": "5.1.0", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "@hapi/hoek": "^9.0.0" - } - }, - "../../node_modules/@jridgewell/gen-mapping": { - "version": "0.3.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/set-array": "^1.2.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.24" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "../../node_modules/@jridgewell/resolve-uri": { - "version": "3.1.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.0.0" - } - }, - "../../node_modules/@jridgewell/set-array": { - "version": "1.2.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.0.0" - } - }, - "../../node_modules/@jridgewell/sourcemap-codec": { - "version": "1.5.0", - "dev": true, - "license": "MIT" - }, - "../../node_modules/@jridgewell/trace-mapping": { - "version": "0.3.25", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" - } - }, - "../../node_modules/@mui/core-downloads-tracker": { - "version": "6.1.8", - "dev": true, - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/mui-org" - } - }, - "../../node_modules/@mui/icons-material": { - "version": "6.1.8", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.26.0" - }, - "engines": { - "node": ">=14.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/mui-org" - }, - "peerDependencies": { - "@mui/material": "^6.1.8", - "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0", - "react": "^17.0.0 || ^18.0.0 || ^19.0.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "../../node_modules/@mui/material": { - "version": "6.1.8", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.26.0", - "@mui/core-downloads-tracker": "^6.1.8", - "@mui/system": "^6.1.8", - "@mui/types": "^7.2.19", - "@mui/utils": "^6.1.8", - "@popperjs/core": "^2.11.8", - "@types/react-transition-group": "^4.4.11", - "clsx": "^2.1.1", - "csstype": "^3.1.3", - "prop-types": "^15.8.1", - "react-is": "^18.3.1", - "react-transition-group": "^4.4.5" - }, - "engines": { - "node": ">=14.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/mui-org" - }, - "peerDependencies": { - "@emotion/react": "^11.5.0", - "@emotion/styled": "^11.3.0", - "@mui/material-pigment-css": "^6.1.8", - "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0", - "react": "^17.0.0 || ^18.0.0 || ^19.0.0", - "react-dom": "^17.0.0 || ^18.0.0 || ^19.0.0" - }, - "peerDependenciesMeta": { - "@emotion/react": { - "optional": true - }, - "@emotion/styled": { - "optional": true - }, - "@mui/material-pigment-css": { - "optional": true - }, - "@types/react": { - "optional": true - } - } - }, - "../../node_modules/@mui/private-theming": { - "version": "6.1.8", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.26.0", - "@mui/utils": "^6.1.8", - "prop-types": "^15.8.1" - }, - "engines": { - "node": ">=14.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/mui-org" - }, - "peerDependencies": { - "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0", - "react": "^17.0.0 || ^18.0.0 || ^19.0.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "../../node_modules/@mui/styled-engine": { - "version": "6.1.8", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.26.0", - "@emotion/cache": "^11.13.1", - "@emotion/serialize": "^1.3.2", - "@emotion/sheet": "^1.4.0", - "csstype": "^3.1.3", - "prop-types": "^15.8.1" - }, - "engines": { - "node": ">=14.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/mui-org" - }, - "peerDependencies": { - "@emotion/react": "^11.4.1", - "@emotion/styled": "^11.3.0", - "react": "^17.0.0 || ^18.0.0 || ^19.0.0" - }, - "peerDependenciesMeta": { - "@emotion/react": { - "optional": true - }, - "@emotion/styled": { - "optional": true - } - } - }, - "../../node_modules/@mui/system": { - "version": "6.1.8", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.26.0", - "@mui/private-theming": "^6.1.8", - "@mui/styled-engine": "^6.1.8", - "@mui/types": "^7.2.19", - "@mui/utils": "^6.1.8", - "clsx": "^2.1.1", - "csstype": "^3.1.3", - "prop-types": "^15.8.1" - }, - "engines": { - "node": ">=14.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/mui-org" - }, - "peerDependencies": { - "@emotion/react": "^11.5.0", - "@emotion/styled": "^11.3.0", - "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0", - "react": "^17.0.0 || ^18.0.0 || ^19.0.0" - }, - "peerDependenciesMeta": { - "@emotion/react": { - "optional": true - }, - "@emotion/styled": { - "optional": true - }, - "@types/react": { - "optional": true - } - } - }, - "../../node_modules/@mui/types": { - "version": "7.2.19", - "dev": true, - "license": "MIT", - "peerDependencies": { - "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "../../node_modules/@mui/utils": { - "version": "6.1.8", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.26.0", - "@mui/types": "^7.2.19", - "@types/prop-types": "^15.7.13", - "clsx": "^2.1.1", - "prop-types": "^15.8.1", - "react-is": "^18.3.1" - }, - "engines": { - "node": ">=14.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/mui-org" - }, - "peerDependencies": { - "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0", - "react": "^17.0.0 || ^18.0.0 || ^19.0.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "../../node_modules/@popperjs/core": { - "version": "2.11.8", - "dev": true, - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/popperjs" - } - }, - "../../node_modules/@remix-run/router": { - "version": "1.21.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=14.0.0" - } - }, - "../../node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.27.4", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ] - }, - "../../node_modules/@sideway/address": { - "version": "4.1.5", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "@hapi/hoek": "^9.0.0" - } - }, - "../../node_modules/@sideway/formula": { - "version": "3.0.1", - "dev": true, - "license": "BSD-3-Clause" - }, - "../../node_modules/@sideway/pinpoint": { - "version": "2.0.0", - "dev": true, - "license": "BSD-3-Clause" - }, - "../../node_modules/@types/babel__core": { - "version": "7.20.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/parser": "^7.20.7", - "@babel/types": "^7.20.7", - "@types/babel__generator": "*", - "@types/babel__template": "*", - "@types/babel__traverse": "*" - } - }, - "../../node_modules/@types/babel__generator": { - "version": "7.6.8", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.0.0" - } - }, - "../../node_modules/@types/babel__template": { - "version": "7.4.4", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0" - } - }, - "../../node_modules/@types/babel__traverse": { - "version": "7.20.6", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.20.7" - } - }, - "../../node_modules/@types/debug": { - "version": "4.1.12", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/ms": "*" - } - }, - "../../node_modules/@types/estree": { - "version": "1.0.6", - "dev": true, - "license": "MIT" - }, - "../../node_modules/@types/estree-jsx": { - "version": "1.0.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/estree": "*" - } - }, - "../../node_modules/@types/hast": { - "version": "3.0.4", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/unist": "*" - } - }, - "../../node_modules/@types/hoist-non-react-statics": { - "version": "3.3.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/react": "*", - "hoist-non-react-statics": "^3.3.0" - } - }, - "../../node_modules/@types/json-schema": { - "version": "7.0.15", - "dev": true, - "license": "MIT" - }, - "../../node_modules/@types/mdast": { - "version": "4.0.4", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/unist": "*" - } - }, - "../../node_modules/@types/ms": { - "version": "0.7.34", - "dev": true, - "license": "MIT" - }, - "../../node_modules/@types/node": { - "version": "22.10.0", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "undici-types": "~6.20.0" - } - }, - "../../node_modules/@types/parse-json": { - "version": "4.0.2", - "dev": true, - "license": "MIT" - }, - "../../node_modules/@types/prop-types": { - "version": "15.7.13", - "dev": true, - "license": "MIT" - }, - "../../node_modules/@types/react": { - "version": "18.3.12", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/prop-types": "*", - "csstype": "^3.0.2" - } - }, - "../../node_modules/@types/react-transition-group": { - "version": "4.4.11", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/react": "*" - } - }, - "../../node_modules/@types/sinonjs__fake-timers": { - "version": "8.1.1", - "dev": true, - "license": "MIT" - }, - "../../node_modules/@types/sizzle": { - "version": "2.3.9", - "dev": true, - "license": "MIT" - }, - "../../node_modules/@types/unist": { - "version": "3.0.3", - "dev": true, - "license": "MIT" - }, - "../../node_modules/@types/yauzl": { - "version": "2.10.3", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "@types/node": "*" - } - }, - "../../node_modules/@ungap/structured-clone": { - "version": "1.2.0", - "dev": true, - "license": "ISC" - }, - "../../node_modules/@vitejs/plugin-react": { - "version": "4.3.4", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/core": "^7.26.0", - "@babel/plugin-transform-react-jsx-self": "^7.25.9", - "@babel/plugin-transform-react-jsx-source": "^7.25.9", - "@types/babel__core": "^7.20.5", - "react-refresh": "^0.14.2" - }, - "engines": { - "node": "^14.18.0 || >=16.0.0" - }, - "peerDependencies": { - "vite": "^4.2.0 || ^5.0.0 || ^6.0.0" - } - }, - "../../node_modules/add-px-to-style": { - "version": "1.0.0", - "dev": true, - "license": "MIT" - }, - "../../node_modules/ajv": { - "version": "6.12.6", - "dev": true, - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "../../node_modules/ajv-keywords": { - "version": "3.5.2", - "dev": true, - "license": "MIT", - "peerDependencies": { - "ajv": "^6.9.1" - } - }, - "../../node_modules/arch": { - "version": "2.2.0", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, - "../../node_modules/arg": { - "version": "5.0.2", - "dev": true, - "license": "MIT" - }, - "../../node_modules/asn1": { - "version": "0.2.6", - "dev": true, - "license": "MIT", - "dependencies": { - "safer-buffer": "~2.1.0" - } - }, - "../../node_modules/assert-plus": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.8" - } - }, - "../../node_modules/astral-regex": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "../../node_modules/at-least-node": { - "version": "1.0.0", - "dev": true, - "license": "ISC", - "engines": { - "node": ">= 4.0.0" - } - }, - "../../node_modules/aws-sign2": { - "version": "0.7.0", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "*" - } - }, - "../../node_modules/aws4": { - "version": "1.13.2", - "dev": true, - "license": "MIT" - }, - "../../node_modules/babel-plugin-macros": { - "version": "3.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.12.5", - "cosmiconfig": "^7.0.0", - "resolve": "^1.19.0" - }, - "engines": { - "node": ">=10", - "npm": ">=6" - } - }, - "../../node_modules/bail": { - "version": "2.0.2", - "dev": true, - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "../../node_modules/bcrypt-pbkdf": { - "version": "1.0.2", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "tweetnacl": "^0.14.3" - } - }, - "../../node_modules/big.js": { - "version": "5.2.2", - "dev": true, - "license": "MIT", - "engines": { - "node": "*" - } - }, - "../../node_modules/blob-util": { - "version": "2.0.2", - "dev": true, - "license": "Apache-2.0" - }, - "../../node_modules/bluebird": { - "version": "3.7.2", - "dev": true, - "license": "MIT" - }, - "../../node_modules/brace-expansion": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "../../node_modules/browserslist": { - "version": "4.24.2", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "dependencies": { - "caniuse-lite": "^1.0.30001669", - "electron-to-chromium": "^1.5.41", - "node-releases": "^2.0.18", - "update-browserslist-db": "^1.1.1" - }, - "bin": { - "browserslist": "cli.js" - }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" - } - }, - "../../node_modules/buffer-crc32": { - "version": "0.2.13", - "dev": true, - "license": "MIT", - "engines": { - "node": "*" - } - }, - "../../node_modules/cachedir": { - "version": "2.4.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "../../node_modules/call-bind": { - "version": "1.0.7", - "dev": true, - "license": "MIT", - "dependencies": { - "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.4", - "set-function-length": "^1.2.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "../../node_modules/caniuse-lite": { - "version": "1.0.30001684", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/caniuse-lite" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "CC-BY-4.0" - }, - "../../node_modules/caseless": { - "version": "0.12.0", - "dev": true, - "license": "Apache-2.0" - }, - "../../node_modules/ccount": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "../../node_modules/chalk": { - "version": "4.1.2", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "../../node_modules/chalk/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "../../node_modules/character-entities": { - "version": "2.0.2", - "dev": true, - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "../../node_modules/character-entities-html4": { - "version": "2.1.0", - "dev": true, - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "../../node_modules/character-entities-legacy": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "../../node_modules/character-reference-invalid": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "../../node_modules/check-more-types": { - "version": "2.24.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8.0" - } - }, - "../../node_modules/ci-info": { - "version": "4.1.0", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/sibiraj-s" - } - ], - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "../../node_modules/cli-table3": { - "version": "0.6.5", - "dev": true, - "license": "MIT", - "dependencies": { - "string-width": "^4.2.0" - }, - "engines": { - "node": "10.* || >= 12.*" - }, - "optionalDependencies": { - "@colors/colors": "1.5.0" - } - }, - "../../node_modules/cli-truncate": { - "version": "2.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "slice-ansi": "^3.0.0", - "string-width": "^4.2.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "../../node_modules/clsx": { - "version": "2.1.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "../../node_modules/colorette": { - "version": "2.0.20", - "dev": true, - "license": "MIT" - }, - "../../node_modules/comma-separated-tokens": { - "version": "2.0.3", - "dev": true, - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "../../node_modules/commander": { - "version": "6.2.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 6" - } - }, - "../../node_modules/common-tags": { - "version": "1.8.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4.0.0" - } - }, - "../../node_modules/convert-source-map": { - "version": "1.9.0", - "dev": true, - "license": "MIT" - }, - "../../node_modules/core-util-is": { - "version": "1.0.2", - "dev": true, - "license": "MIT" - }, - "../../node_modules/cosmiconfig": { - "version": "7.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.2.1", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.10.0" - }, - "engines": { - "node": ">=10" - } - }, - "../../node_modules/csstype": { - "version": "3.1.3", - "dev": true, - "license": "MIT" - }, - "../../node_modules/cypress": { - "version": "13.16.0", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "dependencies": { - "@cypress/request": "^3.0.6", - "@cypress/xvfb": "^1.2.4", - "@types/sinonjs__fake-timers": "8.1.1", - "@types/sizzle": "^2.3.2", - "arch": "^2.2.0", - "blob-util": "^2.0.2", - "bluebird": "^3.7.2", - "buffer": "^5.7.1", - "cachedir": "^2.3.0", - "chalk": "^4.1.0", - "check-more-types": "^2.24.0", - "ci-info": "^4.0.0", - "cli-cursor": "^3.1.0", - "cli-table3": "~0.6.1", - "commander": "^6.2.1", - "common-tags": "^1.8.0", - "dayjs": "^1.10.4", - "debug": "^4.3.4", - "enquirer": "^2.3.6", - "eventemitter2": "6.4.7", - "execa": "4.1.0", - "executable": "^4.1.1", - "extract-zip": "2.0.1", - "figures": "^3.2.0", - "fs-extra": "^9.1.0", - "getos": "^3.2.1", - "is-installed-globally": "~0.4.0", - "lazy-ass": "^1.6.0", - "listr2": "^3.8.3", - "lodash": "^4.17.21", - "log-symbols": "^4.0.0", - "minimist": "^1.2.8", - "ospath": "^1.2.2", - "pretty-bytes": "^5.6.0", - "process": "^0.11.10", - "proxy-from-env": "1.0.0", - "request-progress": "^3.0.0", - "semver": "^7.5.3", - "supports-color": "^8.1.1", - "tmp": "~0.2.3", - "tree-kill": "1.2.2", - "untildify": "^4.0.0", - "yauzl": "^2.10.0" - }, - "bin": { - "cypress": "bin/cypress" - }, - "engines": { - "node": "^16.0.0 || ^18.0.0 || >=20.0.0" - } - }, - "../../node_modules/cypress/node_modules/semver": { - "version": "7.6.3", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "../../node_modules/dashdash": { - "version": "1.14.1", - "dev": true, - "license": "MIT", - "dependencies": { - "assert-plus": "^1.0.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "../../node_modules/dayjs": { - "version": "1.11.13", - "dev": true, - "license": "MIT" - }, - "../../node_modules/decode-named-character-reference": { - "version": "1.0.2", - "dev": true, - "license": "MIT", - "dependencies": { - "character-entities": "^2.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "../../node_modules/define-data-property": { - "version": "1.1.4", - "dev": true, - "license": "MIT", - "dependencies": { - "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "gopd": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "../../node_modules/dequal": { - "version": "2.0.3", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "../../node_modules/devlop": { - "version": "1.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "dequal": "^2.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "../../node_modules/dom-css": { - "version": "2.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "add-px-to-style": "1.0.0", - "prefix-style": "2.0.1", - "to-camel-case": "1.0.0" - } - }, - "../../node_modules/dom-helpers": { - "version": "5.2.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.8.7", - "csstype": "^3.0.2" - } - }, - "../../node_modules/ecc-jsbn": { - "version": "0.1.2", - "dev": true, - "license": "MIT", - "dependencies": { - "jsbn": "~0.1.0", - "safer-buffer": "^2.1.0" - } - }, - "../../node_modules/electron-to-chromium": { - "version": "1.5.65", - "dev": true, - "license": "ISC" - }, - "../../node_modules/emojis-list": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "../../node_modules/enquirer": { - "version": "2.4.1", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-colors": "^4.1.1", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "../../node_modules/es-define-property": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "get-intrinsic": "^1.2.4" - }, - "engines": { - "node": ">= 0.4" - } - }, - "../../node_modules/es-errors": { - "version": "1.3.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "../../node_modules/esbuild": { - "version": "0.21.5", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "bin": { - "esbuild": "bin/esbuild" - }, - "engines": { - "node": ">=12" - }, - "optionalDependencies": { - "@esbuild/aix-ppc64": "0.21.5", - "@esbuild/android-arm": "0.21.5", - "@esbuild/android-arm64": "0.21.5", - "@esbuild/android-x64": "0.21.5", - "@esbuild/darwin-arm64": "0.21.5", - "@esbuild/darwin-x64": "0.21.5", - "@esbuild/freebsd-arm64": "0.21.5", - "@esbuild/freebsd-x64": "0.21.5", - "@esbuild/linux-arm": "0.21.5", - "@esbuild/linux-arm64": "0.21.5", - "@esbuild/linux-ia32": "0.21.5", - "@esbuild/linux-loong64": "0.21.5", - "@esbuild/linux-mips64el": "0.21.5", - "@esbuild/linux-ppc64": "0.21.5", - "@esbuild/linux-riscv64": "0.21.5", - "@esbuild/linux-s390x": "0.21.5", - "@esbuild/linux-x64": "0.21.5", - "@esbuild/netbsd-x64": "0.21.5", - "@esbuild/openbsd-x64": "0.21.5", - "@esbuild/sunos-x64": "0.21.5", - "@esbuild/win32-arm64": "0.21.5", - "@esbuild/win32-ia32": "0.21.5", - "@esbuild/win32-x64": "0.21.5" - } - }, - "../../node_modules/escape-string-regexp": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "../../node_modules/estree-util-is-identifier-name": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "../../node_modules/event-stream": { - "version": "3.3.4", - "dev": true, - "license": "MIT", - "dependencies": { - "duplexer": "~0.1.1", - "from": "~0", - "map-stream": "~0.1.0", - "pause-stream": "0.0.11", - "split": "0.3", - "stream-combiner": "~0.0.4", - "through": "~2.3.1" - } - }, - "../../node_modules/eventemitter2": { - "version": "6.4.7", - "dev": true, - "license": "MIT" - }, - "../../node_modules/execa": { - "version": "4.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "cross-spawn": "^7.0.0", - "get-stream": "^5.0.0", - "human-signals": "^1.1.1", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.0", - "onetime": "^5.1.0", - "signal-exit": "^3.0.2", - "strip-final-newline": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "../../node_modules/executable": { - "version": "4.1.1", - "dev": true, - "license": "MIT", - "dependencies": { - "pify": "^2.2.0" - }, - "engines": { - "node": ">=4" - } - }, - "../../node_modules/extend": { - "version": "3.0.2", - "dev": true, - "license": "MIT" - }, - "../../node_modules/extract-zip": { - "version": "2.0.1", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "debug": "^4.1.1", - "get-stream": "^5.1.0", - "yauzl": "^2.10.0" - }, - "bin": { - "extract-zip": "cli.js" - }, - "engines": { - "node": ">= 10.17.0" - }, - "optionalDependencies": { - "@types/yauzl": "^2.9.1" - } - }, - "../../node_modules/extsprintf": { - "version": "1.3.0", - "dev": true, - "engines": [ - "node >=0.6.0" - ], - "license": "MIT" - }, - "../../node_modules/fast-deep-equal": { - "version": "3.1.3", - "dev": true, - "license": "MIT" - }, - "../../node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "dev": true, - "license": "MIT" - }, - "../../node_modules/fd-slicer": { - "version": "1.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "pend": "~1.2.0" - } - }, - "../../node_modules/find-root": { - "version": "1.1.0", - "dev": true, - "license": "MIT" - }, - "../../node_modules/forever-agent": { - "version": "0.6.1", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "*" - } - }, - "../../node_modules/from": { - "version": "0.1.7", - "dev": true, - "license": "MIT" - }, - "../../node_modules/fs-extra": { - "version": "9.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "../../node_modules/fsevents": { - "version": "2.3.3", - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "../../node_modules/gensync": { - "version": "1.0.0-beta.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "../../node_modules/get-intrinsic": { - "version": "1.2.4", - "dev": true, - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3", - "hasown": "^2.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "../../node_modules/get-stream": { - "version": "5.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "pump": "^3.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "../../node_modules/getos": { - "version": "3.2.1", - "dev": true, - "license": "MIT", - "dependencies": { - "async": "^3.2.0" - } - }, - "../../node_modules/getpass": { - "version": "0.1.7", - "dev": true, - "license": "MIT", - "dependencies": { - "assert-plus": "^1.0.0" - } - }, - "../../node_modules/glob": { - "version": "11.0.0", - "dev": true, - "license": "ISC", - "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^4.0.1", - "minimatch": "^10.0.0", - "minipass": "^7.1.2", - "package-json-from-dist": "^1.0.0", - "path-scurry": "^2.0.0" - }, - "bin": { - "glob": "dist/esm/bin.mjs" - }, - "engines": { - "node": "20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "../../node_modules/global-dirs": { - "version": "3.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "ini": "2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "../../node_modules/globals": { - "version": "11.12.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "../../node_modules/goober": { - "version": "2.1.16", - "dev": true, - "license": "MIT", - "peerDependencies": { - "csstype": "^3.0.10" - } - }, - "../../node_modules/gopd": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "get-intrinsic": "^1.1.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "../../node_modules/has-property-descriptors": { - "version": "1.0.2", - "dev": true, - "license": "MIT", - "dependencies": { - "es-define-property": "^1.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "../../node_modules/has-proto": { - "version": "1.0.3", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "../../node_modules/has-symbols": { - "version": "1.0.3", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "../../node_modules/hast-util-to-jsx-runtime": { - "version": "2.3.2", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/estree": "^1.0.0", - "@types/hast": "^3.0.0", - "@types/unist": "^3.0.0", - "comma-separated-tokens": "^2.0.0", - "devlop": "^1.0.0", - "estree-util-is-identifier-name": "^3.0.0", - "hast-util-whitespace": "^3.0.0", - "mdast-util-mdx-expression": "^2.0.0", - "mdast-util-mdx-jsx": "^3.0.0", - "mdast-util-mdxjs-esm": "^2.0.0", - "property-information": "^6.0.0", - "space-separated-tokens": "^2.0.0", - "style-to-object": "^1.0.0", - "unist-util-position": "^5.0.0", - "vfile-message": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "../../node_modules/hast-util-whitespace": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/hast": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "../../node_modules/hoist-non-react-statics": { - "version": "3.3.2", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "react-is": "^16.7.0" - } - }, - "../../node_modules/hoist-non-react-statics/node_modules/react-is": { - "version": "16.13.1", - "dev": true, - "license": "MIT" - }, - "../../node_modules/html-url-attributes": { - "version": "3.0.1", - "dev": true, - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "../../node_modules/http-signature": { - "version": "1.4.0", - "dev": true, - "license": "MIT", - "dependencies": { - "assert-plus": "^1.0.0", - "jsprim": "^2.0.2", - "sshpk": "^1.18.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "../../node_modules/human-signals": { - "version": "1.1.1", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=8.12.0" - } - }, - "../../node_modules/ini": { - "version": "2.0.0", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=10" - } - }, - "../../node_modules/inline-style-parser": { - "version": "0.2.4", - "dev": true, - "license": "MIT" - }, - "../../node_modules/intl": { - "version": "1.2.5", - "dev": true, - "license": "MIT" - }, - "../../node_modules/intl-messageformat": { - "version": "10.7.7", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "@formatjs/ecma402-abstract": "2.2.4", - "@formatjs/fast-memoize": "2.2.3", - "@formatjs/icu-messageformat-parser": "2.9.4", - "tslib": "2" - } - }, - "../../node_modules/is-alphabetical": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "../../node_modules/is-alphanumerical": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "is-alphabetical": "^2.0.0", - "is-decimal": "^2.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "../../node_modules/is-decimal": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "../../node_modules/is-hexadecimal": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "../../node_modules/is-installed-globally": { - "version": "0.4.0", - "dev": true, - "license": "MIT", - "dependencies": { - "global-dirs": "^3.0.0", - "is-path-inside": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "../../node_modules/is-path-inside": { - "version": "3.0.3", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "../../node_modules/is-plain-obj": { - "version": "4.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "../../node_modules/is-stream": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "../../node_modules/is-typedarray": { - "version": "1.0.0", - "dev": true, - "license": "MIT" - }, - "../../node_modules/isstream": { - "version": "0.1.2", - "dev": true, - "license": "MIT" - }, - "../../node_modules/jackspeak": { - "version": "4.0.2", - "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "@isaacs/cliui": "^8.0.2" - }, - "engines": { - "node": "20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "../../node_modules/joi": { - "version": "17.13.3", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "@hapi/hoek": "^9.3.0", - "@hapi/topo": "^5.1.0", - "@sideway/address": "^4.1.5", - "@sideway/formula": "^3.0.1", - "@sideway/pinpoint": "^2.0.0" - } - }, - "../../node_modules/jsbn": { - "version": "0.1.1", - "dev": true, - "license": "MIT" - }, - "../../node_modules/jsesc": { - "version": "3.0.2", - "dev": true, - "license": "MIT", - "bin": { - "jsesc": "bin/jsesc" - }, - "engines": { - "node": ">=6" - } - }, - "../../node_modules/json-schema": { - "version": "0.4.0", - "dev": true, - "license": "(AFL-2.1 OR BSD-3-Clause)" - }, - "../../node_modules/json-schema-traverse": { - "version": "0.4.1", - "dev": true, - "license": "MIT" - }, - "../../node_modules/jsprim": { - "version": "2.0.2", - "dev": true, - "engines": [ - "node >=0.6.0" - ], - "license": "MIT", - "dependencies": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.4.0", - "verror": "1.10.0" - } - }, - "../../node_modules/jss-rtl": { - "version": "0.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "rtl-css-js": "^1.13.1" - }, - "peerDependencies": { - "jss": "^10.0.0" - } - }, - "../../node_modules/lazy-ass": { - "version": "1.6.0", - "dev": true, - "license": "MIT", - "engines": { - "node": "> 0.8" - } - }, - "../../node_modules/listr2": { - "version": "3.14.0", - "dev": true, - "license": "MIT", - "dependencies": { - "cli-truncate": "^2.1.0", - "colorette": "^2.0.16", - "log-update": "^4.0.0", - "p-map": "^4.0.0", - "rfdc": "^1.3.0", - "rxjs": "^7.5.1", - "through": "^2.3.8", - "wrap-ansi": "^7.0.0" - }, - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "enquirer": ">= 2.3.0 < 3" - }, - "peerDependenciesMeta": { - "enquirer": { - "optional": true - } - } - }, - "../../node_modules/listr2/node_modules/wrap-ansi": { - "version": "7.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "../../node_modules/loader-utils": { - "version": "2.0.4", - "dev": true, - "license": "MIT", - "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" - }, - "engines": { - "node": ">=8.9.0" - } - }, - "../../node_modules/lodash.once": { - "version": "4.1.1", - "dev": true, - "license": "MIT" - }, - "../../node_modules/log-update": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-escapes": "^4.3.0", - "cli-cursor": "^3.1.0", - "slice-ansi": "^4.0.0", - "wrap-ansi": "^6.2.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "../../node_modules/log-update/node_modules/slice-ansi": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/slice-ansi?sponsor=1" - } - }, - "../../node_modules/log-update/node_modules/wrap-ansi": { - "version": "6.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "../../node_modules/longest-streak": { - "version": "3.1.0", - "dev": true, - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "../../node_modules/loose-envify": { - "version": "1.4.0", - "dev": true, - "license": "MIT", - "dependencies": { - "js-tokens": "^3.0.0 || ^4.0.0" - }, - "bin": { - "loose-envify": "cli.js" - } - }, - "../../node_modules/lp-react-virtualized-auto-sizer-react-18": { - "version": "1.0.7", - "dev": true, - "license": "MIT", - "engines": { - "node": ">8.0.0" - }, - "peerDependencies": { - "react": "^15.3.0 || ^16.0.0-alpha || ^17.0.0 || ^18.0.0", - "react-dom": "^15.3.0 || ^16.0.0-alpha || ^17.0.0|| ^18.0.0" - } - }, - "../../node_modules/lru-cache": { - "version": "5.1.1", - "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^3.0.2" - } - }, - "../../node_modules/map-stream": { - "version": "0.1.0", - "dev": true - }, - "../../node_modules/mdast-util-from-markdown": { - "version": "2.0.2", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/mdast": "^4.0.0", - "@types/unist": "^3.0.0", - "decode-named-character-reference": "^1.0.0", - "devlop": "^1.0.0", - "mdast-util-to-string": "^4.0.0", - "micromark": "^4.0.0", - "micromark-util-decode-numeric-character-reference": "^2.0.0", - "micromark-util-decode-string": "^2.0.0", - "micromark-util-normalize-identifier": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0", - "unist-util-stringify-position": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "../../node_modules/mdast-util-mdx-expression": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/estree-jsx": "^1.0.0", - "@types/hast": "^3.0.0", - "@types/mdast": "^4.0.0", - "devlop": "^1.0.0", - "mdast-util-from-markdown": "^2.0.0", - "mdast-util-to-markdown": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "../../node_modules/mdast-util-mdx-jsx": { - "version": "3.1.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/estree-jsx": "^1.0.0", - "@types/hast": "^3.0.0", - "@types/mdast": "^4.0.0", - "@types/unist": "^3.0.0", - "ccount": "^2.0.0", - "devlop": "^1.1.0", - "mdast-util-from-markdown": "^2.0.0", - "mdast-util-to-markdown": "^2.0.0", - "parse-entities": "^4.0.0", - "stringify-entities": "^4.0.0", - "unist-util-stringify-position": "^4.0.0", - "vfile-message": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "../../node_modules/mdast-util-mdxjs-esm": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/estree-jsx": "^1.0.0", - "@types/hast": "^3.0.0", - "@types/mdast": "^4.0.0", - "devlop": "^1.0.0", - "mdast-util-from-markdown": "^2.0.0", - "mdast-util-to-markdown": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "../../node_modules/mdast-util-phrasing": { - "version": "4.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/mdast": "^4.0.0", - "unist-util-is": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "../../node_modules/mdast-util-to-hast": { - "version": "13.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/hast": "^3.0.0", - "@types/mdast": "^4.0.0", - "@ungap/structured-clone": "^1.0.0", - "devlop": "^1.0.0", - "micromark-util-sanitize-uri": "^2.0.0", - "trim-lines": "^3.0.0", - "unist-util-position": "^5.0.0", - "unist-util-visit": "^5.0.0", - "vfile": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "../../node_modules/mdast-util-to-markdown": { - "version": "2.1.2", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/mdast": "^4.0.0", - "@types/unist": "^3.0.0", - "longest-streak": "^3.0.0", - "mdast-util-phrasing": "^4.0.0", - "mdast-util-to-string": "^4.0.0", - "micromark-util-classify-character": "^2.0.0", - "micromark-util-decode-string": "^2.0.0", - "unist-util-visit": "^5.0.0", - "zwitch": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "../../node_modules/mdast-util-to-string": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/mdast": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "../../node_modules/memoize-one": { - "version": "5.2.1", - "dev": true, - "license": "MIT" - }, - "../../node_modules/micromark": { - "version": "4.0.1", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "@types/debug": "^4.0.0", - "debug": "^4.0.0", - "decode-named-character-reference": "^1.0.0", - "devlop": "^1.0.0", - "micromark-core-commonmark": "^2.0.0", - "micromark-factory-space": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-chunked": "^2.0.0", - "micromark-util-combine-extensions": "^2.0.0", - "micromark-util-decode-numeric-character-reference": "^2.0.0", - "micromark-util-encode": "^2.0.0", - "micromark-util-normalize-identifier": "^2.0.0", - "micromark-util-resolve-all": "^2.0.0", - "micromark-util-sanitize-uri": "^2.0.0", - "micromark-util-subtokenize": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "../../node_modules/micromark-core-commonmark": { - "version": "2.0.2", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "decode-named-character-reference": "^1.0.0", - "devlop": "^1.0.0", - "micromark-factory-destination": "^2.0.0", - "micromark-factory-label": "^2.0.0", - "micromark-factory-space": "^2.0.0", - "micromark-factory-title": "^2.0.0", - "micromark-factory-whitespace": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-chunked": "^2.0.0", - "micromark-util-classify-character": "^2.0.0", - "micromark-util-html-tag-name": "^2.0.0", - "micromark-util-normalize-identifier": "^2.0.0", - "micromark-util-resolve-all": "^2.0.0", - "micromark-util-subtokenize": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "../../node_modules/micromark-factory-destination": { - "version": "2.0.1", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-character": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "../../node_modules/micromark-factory-label": { - "version": "2.0.1", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "devlop": "^1.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "../../node_modules/micromark-factory-space": { - "version": "2.0.1", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-character": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "../../node_modules/micromark-factory-title": { - "version": "2.0.1", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-factory-space": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "../../node_modules/micromark-factory-whitespace": { - "version": "2.0.1", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-factory-space": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "../../node_modules/micromark-util-character": { - "version": "2.1.1", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "../../node_modules/micromark-util-chunked": { - "version": "2.0.1", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-symbol": "^2.0.0" - } - }, - "../../node_modules/micromark-util-classify-character": { - "version": "2.0.1", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-character": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "../../node_modules/micromark-util-combine-extensions": { - "version": "2.0.1", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-chunked": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "../../node_modules/micromark-util-decode-numeric-character-reference": { - "version": "2.0.2", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-symbol": "^2.0.0" - } - }, - "../../node_modules/micromark-util-decode-string": { - "version": "2.0.1", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "decode-named-character-reference": "^1.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-decode-numeric-character-reference": "^2.0.0", - "micromark-util-symbol": "^2.0.0" - } - }, - "../../node_modules/micromark-util-encode": { - "version": "2.0.1", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT" - }, - "../../node_modules/micromark-util-html-tag-name": { - "version": "2.0.1", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT" - }, - "../../node_modules/micromark-util-normalize-identifier": { - "version": "2.0.1", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-symbol": "^2.0.0" - } - }, - "../../node_modules/micromark-util-resolve-all": { - "version": "2.0.1", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-types": "^2.0.0" - } - }, - "../../node_modules/micromark-util-sanitize-uri": { - "version": "2.0.1", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-character": "^2.0.0", - "micromark-util-encode": "^2.0.0", - "micromark-util-symbol": "^2.0.0" - } - }, - "../../node_modules/micromark-util-subtokenize": { - "version": "2.0.3", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "devlop": "^1.0.0", - "micromark-util-chunked": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "../../node_modules/micromark-util-symbol": { - "version": "2.0.1", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT" - }, - "../../node_modules/micromark-util-types": { - "version": "2.0.1", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT" - }, - "../../node_modules/minimatch": { - "version": "10.0.1", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": "20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "../../node_modules/nanoid": { - "version": "3.3.8", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } - }, - "../../node_modules/node-releases": { - "version": "2.0.18", - "dev": true, - "license": "MIT" - }, - "../../node_modules/normalize-wheel": { - "version": "1.0.1", - "dev": true, - "license": "BSD-3-Clause" - }, - "../../node_modules/notistack": { - "version": "3.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "clsx": "^1.1.0", - "goober": "^2.0.33" - }, - "engines": { - "node": ">=12.0.0", - "npm": ">=6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/notistack" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0", - "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" - } - }, - "../../node_modules/notistack/node_modules/clsx": { - "version": "1.2.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "../../node_modules/object-assign": { - "version": "4.1.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "../../node_modules/object-inspect": { - "version": "1.13.3", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "../../node_modules/ospath": { - "version": "1.2.2", - "dev": true, - "license": "MIT" - }, - "../../node_modules/parse-entities": { - "version": "4.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/unist": "^2.0.0", - "character-entities": "^2.0.0", - "character-entities-legacy": "^3.0.0", - "character-reference-invalid": "^2.0.0", - "decode-named-character-reference": "^1.0.0", - "is-alphanumerical": "^2.0.0", - "is-decimal": "^2.0.0", - "is-hexadecimal": "^2.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "../../node_modules/parse-entities/node_modules/@types/unist": { - "version": "2.0.11", - "dev": true, - "license": "MIT" - }, - "../../node_modules/path-scurry": { - "version": "2.0.0", - "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "lru-cache": "^11.0.0", - "minipass": "^7.1.2" - }, - "engines": { - "node": "20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "../../node_modules/path-scurry/node_modules/lru-cache": { - "version": "11.0.2", - "dev": true, - "license": "ISC", - "engines": { - "node": "20 || >=22" - } - }, - "../../node_modules/pause-stream": { - "version": "0.0.11", - "dev": true, - "license": [ - "MIT", - "Apache2" - ], - "dependencies": { - "through": "~2.3" - } - }, - "../../node_modules/pend": { - "version": "1.2.0", - "dev": true, - "license": "MIT" - }, - "../../node_modules/performance-now": { - "version": "2.1.0", - "dev": true, - "license": "MIT" - }, - "../../node_modules/pify": { - "version": "2.3.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "../../node_modules/postcss": { - "version": "8.4.49", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "dependencies": { - "nanoid": "^3.3.7", - "picocolors": "^1.1.1", - "source-map-js": "^1.2.1" - }, - "engines": { - "node": "^10 || ^12 || >=14" - } - }, - "../../node_modules/prefix-style": { - "version": "2.0.1", - "dev": true, - "license": "MIT" - }, - "../../node_modules/prettier": { - "version": "3.4.1", - "dev": true, - "license": "MIT", - "bin": { - "prettier": "bin/prettier.cjs" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/prettier/prettier?sponsor=1" - } - }, - "../../node_modules/pretty-bytes": { - "version": "5.6.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "../../node_modules/process": { - "version": "0.11.10", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6.0" - } - }, - "../../node_modules/prop-types": { - "version": "15.8.1", - "dev": true, - "license": "MIT", - "dependencies": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.13.1" - } - }, - "../../node_modules/prop-types/node_modules/react-is": { - "version": "16.13.1", - "dev": true, - "license": "MIT" - }, - "../../node_modules/property-information": { - "version": "6.5.0", - "dev": true, - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "../../node_modules/proxy-from-env": { - "version": "1.0.0", - "dev": true, - "license": "MIT" - }, - "../../node_modules/ps-tree": { - "version": "1.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "event-stream": "=3.3.4" - }, - "bin": { - "ps-tree": "bin/ps-tree.js" - }, - "engines": { - "node": ">= 0.10" - } - }, - "../../node_modules/pump": { - "version": "3.0.2", - "dev": true, - "license": "MIT", - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "../../node_modules/punycode": { - "version": "2.3.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "../../node_modules/qs": { - "version": "6.13.0", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "side-channel": "^1.0.6" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "../../node_modules/raf": { - "version": "3.4.1", - "dev": true, - "license": "MIT", - "dependencies": { - "performance-now": "^2.1.0" - } - }, - "../../node_modules/raw-loader": { - "version": "4.0.2", - "dev": true, - "license": "MIT", - "dependencies": { - "loader-utils": "^2.0.0", - "schema-utils": "^3.0.0" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^4.0.0 || ^5.0.0" - } - }, - "../../node_modules/react": { - "version": "18.3.1", - "dev": true, - "license": "MIT", - "dependencies": { - "loose-envify": "^1.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "../../node_modules/react-custom-scrollbars-2": { - "version": "4.5.0", - "dev": true, - "license": "MIT", - "dependencies": { - "dom-css": "^2.0.0", - "prop-types": "^15.5.10", - "raf": "^3.1.0" - }, - "peerDependencies": { - "react": "^0.14.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0", - "react-dom": "^0.14.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0" - } - }, - "../../node_modules/react-dom": { - "version": "18.3.1", - "dev": true, - "license": "MIT", - "dependencies": { - "loose-envify": "^1.1.0", - "scheduler": "^0.23.2" - }, - "peerDependencies": { - "react": "^18.3.1" - } - }, - "../../node_modules/react-easy-crop": { - "version": "5.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "normalize-wheel": "^1.0.1", - "tslib": "^2.0.1" - }, - "peerDependencies": { - "react": ">=16.4.0", - "react-dom": ">=16.4.0" - } - }, - "../../node_modules/react-intl": { - "version": "6.8.9", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "@formatjs/ecma402-abstract": "2.2.4", - "@formatjs/icu-messageformat-parser": "2.9.4", - "@formatjs/intl": "2.10.15", - "@formatjs/intl-displaynames": "6.8.5", - "@formatjs/intl-listformat": "7.7.5", - "@types/hoist-non-react-statics": "3", - "@types/react": "16 || 17 || 18", - "hoist-non-react-statics": "3", - "intl-messageformat": "10.7.7", - "tslib": "2" - }, - "peerDependencies": { - "react": "^16.6.0 || 17 || 18", - "typescript": "^4.7 || 5" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "../../node_modules/react-ios-pwa-prompt": { - "version": "2.0.6", - "dev": true, - "peerDependencies": { - "react": ">=16.8.0", - "react-dom": ">=16.8.0" - } - }, - "../../node_modules/react-markdown": { - "version": "9.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/hast": "^3.0.0", - "devlop": "^1.0.0", - "hast-util-to-jsx-runtime": "^2.0.0", - "html-url-attributes": "^3.0.0", - "mdast-util-to-hast": "^13.0.0", - "remark-parse": "^11.0.0", - "remark-rehype": "^11.0.0", - "unified": "^11.0.0", - "unist-util-visit": "^5.0.0", - "vfile": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - }, - "peerDependencies": { - "@types/react": ">=18", - "react": ">=18" - } - }, - "../../node_modules/react-refresh": { - "version": "0.14.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "../../node_modules/react-router": { - "version": "6.28.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@remix-run/router": "1.21.0" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "react": ">=16.8" - } - }, - "../../node_modules/react-router-dom": { - "version": "6.28.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@remix-run/router": "1.21.0", - "react-router": "6.28.0" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "react": ">=16.8", - "react-dom": ">=16.8" - } - }, - "../../node_modules/react-transition-group": { - "version": "4.4.5", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "@babel/runtime": "^7.5.5", - "dom-helpers": "^5.0.1", - "loose-envify": "^1.4.0", - "prop-types": "^15.6.2" - }, - "peerDependencies": { - "react": ">=16.6.0", - "react-dom": ">=16.6.0" - } - }, - "../../node_modules/react-window": { - "version": "1.8.10", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.0.0", - "memoize-one": ">=3.1.1 <6" - }, - "engines": { - "node": ">8.0.0" - }, - "peerDependencies": { - "react": "^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0", - "react-dom": "^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0" - } - }, - "../../node_modules/regenerator-runtime": { - "version": "0.14.1", - "dev": true, - "license": "MIT" - }, - "../../node_modules/remark-parse": { - "version": "11.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/mdast": "^4.0.0", - "mdast-util-from-markdown": "^2.0.0", - "micromark-util-types": "^2.0.0", - "unified": "^11.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "../../node_modules/remark-rehype": { - "version": "11.1.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/hast": "^3.0.0", - "@types/mdast": "^4.0.0", - "mdast-util-to-hast": "^13.0.0", - "unified": "^11.0.0", - "vfile": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "../../node_modules/request-progress": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "throttleit": "^1.0.0" - } - }, - "../../node_modules/rfdc": { - "version": "1.4.1", - "dev": true, - "license": "MIT" - }, - "../../node_modules/rollup": { - "version": "4.27.4", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/estree": "1.0.6" - }, - "bin": { - "rollup": "dist/bin/rollup" - }, - "engines": { - "node": ">=18.0.0", - "npm": ">=8.0.0" - }, - "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.27.4", - "@rollup/rollup-android-arm64": "4.27.4", - "@rollup/rollup-darwin-arm64": "4.27.4", - "@rollup/rollup-darwin-x64": "4.27.4", - "@rollup/rollup-freebsd-arm64": "4.27.4", - "@rollup/rollup-freebsd-x64": "4.27.4", - "@rollup/rollup-linux-arm-gnueabihf": "4.27.4", - "@rollup/rollup-linux-arm-musleabihf": "4.27.4", - "@rollup/rollup-linux-arm64-gnu": "4.27.4", - "@rollup/rollup-linux-arm64-musl": "4.27.4", - "@rollup/rollup-linux-powerpc64le-gnu": "4.27.4", - "@rollup/rollup-linux-riscv64-gnu": "4.27.4", - "@rollup/rollup-linux-s390x-gnu": "4.27.4", - "@rollup/rollup-linux-x64-gnu": "4.27.4", - "@rollup/rollup-linux-x64-musl": "4.27.4", - "@rollup/rollup-win32-arm64-msvc": "4.27.4", - "@rollup/rollup-win32-ia32-msvc": "4.27.4", - "@rollup/rollup-win32-x64-msvc": "4.27.4", - "fsevents": "~2.3.2" - } - }, - "../../node_modules/rollup-plugin-visualizer": { - "version": "5.12.0", - "dev": true, - "license": "MIT", - "dependencies": { - "open": "^8.4.0", - "picomatch": "^2.3.1", - "source-map": "^0.7.4", - "yargs": "^17.5.1" - }, - "bin": { - "rollup-plugin-visualizer": "dist/bin/cli.js" - }, - "engines": { - "node": ">=14" - }, - "peerDependencies": { - "rollup": "2.x || 3.x || 4.x" - }, - "peerDependenciesMeta": { - "rollup": { - "optional": true - } - } - }, - "../../node_modules/rollup-plugin-visualizer/node_modules/source-map": { - "version": "0.7.4", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">= 8" - } - }, - "../../node_modules/rtl-css-js": { - "version": "1.16.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.1.2" - } - }, - "../../node_modules/scheduler": { - "version": "0.23.2", - "dev": true, - "license": "MIT", - "dependencies": { - "loose-envify": "^1.1.0" - } - }, - "../../node_modules/schema-utils": { - "version": "3.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "../../node_modules/semver": { - "version": "6.3.1", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, - "../../node_modules/set-function-length": { - "version": "1.2.2", - "dev": true, - "license": "MIT", - "dependencies": { - "define-data-property": "^1.1.4", - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.4", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "../../node_modules/side-channel": { - "version": "1.0.6", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.4", - "object-inspect": "^1.13.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "../../node_modules/slice-ansi": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "../../node_modules/source-map": { - "version": "0.5.7", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "../../node_modules/source-map-js": { - "version": "1.2.1", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "../../node_modules/space-separated-tokens": { - "version": "2.0.2", - "dev": true, - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "../../node_modules/split": { - "version": "0.3.3", - "dev": true, - "license": "MIT", - "dependencies": { - "through": "2" - }, - "engines": { - "node": "*" - } - }, - "../../node_modules/sshpk": { - "version": "1.18.0", - "dev": true, - "license": "MIT", - "dependencies": { - "asn1": "~0.2.3", - "assert-plus": "^1.0.0", - "bcrypt-pbkdf": "^1.0.0", - "dashdash": "^1.12.0", - "ecc-jsbn": "~0.1.1", - "getpass": "^0.1.1", - "jsbn": "~0.1.0", - "safer-buffer": "^2.0.2", - "tweetnacl": "~0.14.0" - }, - "bin": { - "sshpk-conv": "bin/sshpk-conv", - "sshpk-sign": "bin/sshpk-sign", - "sshpk-verify": "bin/sshpk-verify" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "../../node_modules/start-server-and-test": { - "version": "2.0.8", - "dev": true, - "license": "MIT", - "dependencies": { - "arg": "^5.0.2", - "bluebird": "3.7.2", - "check-more-types": "2.24.0", - "debug": "4.3.7", - "execa": "5.1.1", - "lazy-ass": "1.6.0", - "ps-tree": "1.2.0", - "wait-on": "8.0.1" - }, - "bin": { - "server-test": "src/bin/start.js", - "start-server-and-test": "src/bin/start.js", - "start-test": "src/bin/start.js" - }, - "engines": { - "node": ">=16" - } - }, - "../../node_modules/start-server-and-test/node_modules/execa": { - "version": "5.1.1", - "dev": true, - "license": "MIT", - "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "../../node_modules/start-server-and-test/node_modules/get-stream": { - "version": "6.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "../../node_modules/start-server-and-test/node_modules/human-signals": { - "version": "2.1.0", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=10.17.0" - } - }, - "../../node_modules/stream-combiner": { - "version": "0.0.4", - "dev": true, - "license": "MIT", - "dependencies": { - "duplexer": "~0.1.1" - } - }, - "../../node_modules/stringify-entities": { - "version": "4.0.4", - "dev": true, - "license": "MIT", - "dependencies": { - "character-entities-html4": "^2.0.0", - "character-entities-legacy": "^3.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "../../node_modules/style-to-object": { - "version": "1.0.8", - "dev": true, - "license": "MIT", - "dependencies": { - "inline-style-parser": "0.2.4" - } - }, - "../../node_modules/stylis": { - "version": "4.2.0", - "dev": true, - "license": "MIT" - }, - "../../node_modules/supports-color": { - "version": "8.1.1", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, - "../../node_modules/throttleit": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "../../node_modules/tldts": { - "version": "6.1.64", - "dev": true, - "license": "MIT", - "dependencies": { - "tldts-core": "^6.1.64" - }, - "bin": { - "tldts": "bin/cli.js" - } - }, - "../../node_modules/tldts-core": { - "version": "6.1.64", - "dev": true, - "license": "MIT" - }, - "../../node_modules/to-camel-case": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "to-space-case": "^1.0.0" - } - }, - "../../node_modules/to-no-case": { - "version": "1.0.2", - "dev": true, - "license": "MIT" - }, - "../../node_modules/to-space-case": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "to-no-case": "^1.0.0" - } - }, - "../../node_modules/tough-cookie": { - "version": "5.0.0", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "tldts": "^6.1.32" - }, - "engines": { - "node": ">=16" - } - }, - "../../node_modules/tree-kill": { - "version": "1.2.2", - "dev": true, - "license": "MIT", - "bin": { - "tree-kill": "cli.js" - } - }, - "../../node_modules/trim-lines": { - "version": "3.0.1", - "dev": true, - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "../../node_modules/trough": { - "version": "2.2.0", - "dev": true, - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "../../node_modules/tunnel-agent": { - "version": "0.6.0", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "safe-buffer": "^5.0.1" - }, - "engines": { - "node": "*" - } - }, - "../../node_modules/tweetnacl": { - "version": "0.14.5", - "dev": true, - "license": "Unlicense" - }, - "../../node_modules/undici-types": { - "version": "6.20.0", - "dev": true, - "license": "MIT", - "optional": true - }, - "../../node_modules/unified": { - "version": "11.0.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/unist": "^3.0.0", - "bail": "^2.0.0", - "devlop": "^1.0.0", - "extend": "^3.0.0", - "is-plain-obj": "^4.0.0", - "trough": "^2.0.0", - "vfile": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "../../node_modules/unist-util-is": { - "version": "6.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/unist": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "../../node_modules/unist-util-position": { - "version": "5.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/unist": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "../../node_modules/unist-util-stringify-position": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/unist": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "../../node_modules/unist-util-visit": { - "version": "5.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/unist": "^3.0.0", - "unist-util-is": "^6.0.0", - "unist-util-visit-parents": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "../../node_modules/unist-util-visit-parents": { - "version": "6.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/unist": "^3.0.0", - "unist-util-is": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "../../node_modules/untildify": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "../../node_modules/update-browserslist-db": { - "version": "1.1.1", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "dependencies": { - "escalade": "^3.2.0", - "picocolors": "^1.1.0" - }, - "bin": { - "update-browserslist-db": "cli.js" - }, - "peerDependencies": { - "browserslist": ">= 4.21.0" - } - }, - "../../node_modules/uri-js": { - "version": "4.4.1", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "punycode": "^2.1.0" - } - }, - "../../node_modules/uuid": { - "version": "8.3.2", - "dev": true, - "license": "MIT", - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "../../node_modules/verror": { - "version": "1.10.0", - "dev": true, - "engines": [ - "node >=0.6.0" - ], - "license": "MIT", - "dependencies": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" - } - }, - "../../node_modules/vfile": { - "version": "6.0.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/unist": "^3.0.0", - "vfile-message": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "../../node_modules/vfile-message": { - "version": "4.0.2", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/unist": "^3.0.0", - "unist-util-stringify-position": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "../../node_modules/vite": { - "version": "5.4.11", - "dev": true, - "license": "MIT", - "dependencies": { - "esbuild": "^0.21.3", - "postcss": "^8.4.43", - "rollup": "^4.20.0" - }, - "bin": { - "vite": "bin/vite.js" - }, - "engines": { - "node": "^18.0.0 || >=20.0.0" - }, - "funding": { - "url": "https://github.com/vitejs/vite?sponsor=1" - }, - "optionalDependencies": { - "fsevents": "~2.3.3" - }, - "peerDependencies": { - "@types/node": "^18.0.0 || >=20.0.0", - "less": "*", - "lightningcss": "^1.21.0", - "sass": "*", - "sass-embedded": "*", - "stylus": "*", - "sugarss": "*", - "terser": "^5.4.0" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - }, - "less": { - "optional": true - }, - "lightningcss": { - "optional": true - }, - "sass": { - "optional": true - }, - "sass-embedded": { - "optional": true - }, - "stylus": { - "optional": true - }, - "sugarss": { - "optional": true - }, - "terser": { - "optional": true - } - } - }, - "../../node_modules/vite-plugin-externalize-deps": { - "version": "0.8.0", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/voracious" - }, - "peerDependencies": { - "vite": "^2.0.0 || ^3.0.0 || ^4.0.0 || ^5.0.0" - } - }, - "../../node_modules/wait-on": { - "version": "8.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "axios": "^1.7.7", - "joi": "^17.13.3", - "lodash": "^4.17.21", - "minimist": "^1.2.8", - "rxjs": "^7.8.1" - }, - "bin": { - "wait-on": "bin/wait-on" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "../../node_modules/yallist": { - "version": "3.1.1", - "dev": true, - "license": "ISC" - }, - "../../node_modules/yaml": { - "version": "1.10.2", - "dev": true, - "license": "ISC", - "engines": { - "node": ">= 6" - } - }, - "../../node_modules/yauzl": { - "version": "2.10.0", - "dev": true, - "license": "MIT", - "dependencies": { - "buffer-crc32": "~0.2.3", - "fd-slicer": "~1.1.0" - } - }, - "../../node_modules/zwitch": { - "version": "2.0.4", - "dev": true, - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/@ampproject/remapping": { - "version": "2.3.0", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.24" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/code-frame": { - "version": "7.26.2", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-validator-identifier": "^7.25.9", - "js-tokens": "^4.0.0", - "picocolors": "^1.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/compat-data": { - "version": "7.26.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/core": { - "version": "7.26.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.26.0", - "@babel/generator": "^7.26.0", - "@babel/helper-compilation-targets": "^7.25.9", - "@babel/helper-module-transforms": "^7.26.0", - "@babel/helpers": "^7.26.0", - "@babel/parser": "^7.26.0", - "@babel/template": "^7.25.9", - "@babel/traverse": "^7.25.9", - "@babel/types": "^7.26.0", - "convert-source-map": "^2.0.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.3", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" - } - }, - "node_modules/@babel/generator": { - "version": "7.26.2", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/parser": "^7.26.2", - "@babel/types": "^7.26.0", - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.25", - "jsesc": "^3.0.2" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-compilation-targets": { - "version": "7.25.9", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/compat-data": "^7.25.9", - "@babel/helper-validator-option": "^7.25.9", - "browserslist": "^4.24.0", - "lru-cache": "^5.1.1", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-imports": { - "version": "7.25.9", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/traverse": "^7.25.9", - "@babel/types": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-transforms": { - "version": "7.26.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-module-imports": "^7.25.9", - "@babel/helper-validator-identifier": "^7.25.9", - "@babel/traverse": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-plugin-utils": { - "version": "7.25.9", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-string-parser": { - "version": "7.25.9", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.25.9", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-option": { - "version": "7.25.9", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helpers": { - "version": "7.26.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/template": "^7.25.9", - "@babel/types": "^7.26.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/parser": { - "version": "7.26.2", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.26.0" - }, - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/plugin-transform-react-jsx-self": { - "version": "7.25.9", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-jsx-source": { - "version": "7.25.9", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/template": { - "version": "7.25.9", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.25.9", - "@babel/parser": "^7.25.9", - "@babel/types": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/traverse": { - "version": "7.25.9", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.25.9", - "@babel/generator": "^7.25.9", - "@babel/parser": "^7.25.9", - "@babel/template": "^7.25.9", - "@babel/types": "^7.25.9", - "debug": "^4.3.1", - "globals": "^11.1.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/types": { - "version": "7.26.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-string-parser": "^7.25.9", - "@babel/helper-validator-identifier": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@ecronix/material-ui-shell": { - "resolved": "../..", - "link": true - }, - "node_modules/@esbuild/darwin-arm64": { - "version": "0.21.5", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/set-array": "^1.2.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.24" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/set-array": { - "version": "1.2.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.5.0", - "dev": true, - "license": "MIT" - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.25", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" - } - }, - "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.27.4", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/@types/babel__core": { - "version": "7.20.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/parser": "^7.20.7", - "@babel/types": "^7.20.7", - "@types/babel__generator": "*", - "@types/babel__template": "*", - "@types/babel__traverse": "*" - } - }, - "node_modules/@types/babel__generator": { - "version": "7.6.8", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.0.0" - } - }, - "node_modules/@types/babel__template": { - "version": "7.4.4", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0" - } - }, - "node_modules/@types/babel__traverse": { - "version": "7.20.6", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.20.7" - } - }, - "node_modules/@types/estree": { - "version": "1.0.6", - "dev": true, - "license": "MIT" - }, - "node_modules/@vitejs/plugin-react": { - "version": "4.3.4", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/core": "^7.26.0", - "@babel/plugin-transform-react-jsx-self": "^7.25.9", - "@babel/plugin-transform-react-jsx-source": "^7.25.9", - "@types/babel__core": "^7.20.5", - "react-refresh": "^0.14.2" - }, - "engines": { - "node": "^14.18.0 || >=16.0.0" - }, - "peerDependencies": { - "vite": "^4.2.0 || ^5.0.0 || ^6.0.0" - } - }, - "node_modules/browserslist": { - "version": "4.24.2", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "dependencies": { - "caniuse-lite": "^1.0.30001669", - "electron-to-chromium": "^1.5.41", - "node-releases": "^2.0.18", - "update-browserslist-db": "^1.1.1" - }, - "bin": { - "browserslist": "cli.js" - }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" - } - }, - "node_modules/caniuse-lite": { - "version": "1.0.30001684", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/caniuse-lite" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "CC-BY-4.0" - }, - "node_modules/convert-source-map": { - "version": "2.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/debug": { - "version": "4.3.7", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/electron-to-chromium": { - "version": "1.5.66", - "dev": true, - "license": "ISC" - }, - "node_modules/esbuild": { - "version": "0.21.5", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "bin": { - "esbuild": "bin/esbuild" - }, - "engines": { - "node": ">=12" - }, - "optionalDependencies": { - "@esbuild/aix-ppc64": "0.21.5", - "@esbuild/android-arm": "0.21.5", - "@esbuild/android-arm64": "0.21.5", - "@esbuild/android-x64": "0.21.5", - "@esbuild/darwin-arm64": "0.21.5", - "@esbuild/darwin-x64": "0.21.5", - "@esbuild/freebsd-arm64": "0.21.5", - "@esbuild/freebsd-x64": "0.21.5", - "@esbuild/linux-arm": "0.21.5", - "@esbuild/linux-arm64": "0.21.5", - "@esbuild/linux-ia32": "0.21.5", - "@esbuild/linux-loong64": "0.21.5", - "@esbuild/linux-mips64el": "0.21.5", - "@esbuild/linux-ppc64": "0.21.5", - "@esbuild/linux-riscv64": "0.21.5", - "@esbuild/linux-s390x": "0.21.5", - "@esbuild/linux-x64": "0.21.5", - "@esbuild/netbsd-x64": "0.21.5", - "@esbuild/openbsd-x64": "0.21.5", - "@esbuild/sunos-x64": "0.21.5", - "@esbuild/win32-arm64": "0.21.5", - "@esbuild/win32-ia32": "0.21.5", - "@esbuild/win32-x64": "0.21.5" - } - }, - "node_modules/escalade": { - "version": "3.2.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/fsevents": { - "version": "2.3.3", - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/gensync": { - "version": "1.0.0-beta.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/globals": { - "version": "11.12.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/js-tokens": { - "version": "4.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/jsesc": { - "version": "3.0.2", - "dev": true, - "license": "MIT", - "bin": { - "jsesc": "bin/jsesc" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/json5": { - "version": "2.2.3", - "dev": true, - "license": "MIT", - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/lru-cache": { - "version": "5.1.1", - "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^3.0.2" - } - }, - "node_modules/ms": { - "version": "2.1.3", - "dev": true, - "license": "MIT" - }, - "node_modules/nanoid": { - "version": "3.3.8", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } - }, - "node_modules/node-releases": { - "version": "2.0.18", - "dev": true, - "license": "MIT" - }, - "node_modules/picocolors": { - "version": "1.1.1", - "dev": true, - "license": "ISC" - }, - "node_modules/postcss": { - "version": "8.4.49", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "dependencies": { - "nanoid": "^3.3.7", - "picocolors": "^1.1.1", - "source-map-js": "^1.2.1" - }, - "engines": { - "node": "^10 || ^12 || >=14" - } - }, - "node_modules/react-refresh": { - "version": "0.14.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/rollup": { - "version": "4.27.4", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/estree": "1.0.6" - }, - "bin": { - "rollup": "dist/bin/rollup" - }, - "engines": { - "node": ">=18.0.0", - "npm": ">=8.0.0" - }, - "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.27.4", - "@rollup/rollup-android-arm64": "4.27.4", - "@rollup/rollup-darwin-arm64": "4.27.4", - "@rollup/rollup-darwin-x64": "4.27.4", - "@rollup/rollup-freebsd-arm64": "4.27.4", - "@rollup/rollup-freebsd-x64": "4.27.4", - "@rollup/rollup-linux-arm-gnueabihf": "4.27.4", - "@rollup/rollup-linux-arm-musleabihf": "4.27.4", - "@rollup/rollup-linux-arm64-gnu": "4.27.4", - "@rollup/rollup-linux-arm64-musl": "4.27.4", - "@rollup/rollup-linux-powerpc64le-gnu": "4.27.4", - "@rollup/rollup-linux-riscv64-gnu": "4.27.4", - "@rollup/rollup-linux-s390x-gnu": "4.27.4", - "@rollup/rollup-linux-x64-gnu": "4.27.4", - "@rollup/rollup-linux-x64-musl": "4.27.4", - "@rollup/rollup-win32-arm64-msvc": "4.27.4", - "@rollup/rollup-win32-ia32-msvc": "4.27.4", - "@rollup/rollup-win32-x64-msvc": "4.27.4", - "fsevents": "~2.3.2" - } - }, - "node_modules/semver": { - "version": "6.3.1", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/source-map-js": { - "version": "1.2.1", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/update-browserslist-db": { - "version": "1.1.1", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "dependencies": { - "escalade": "^3.2.0", - "picocolors": "^1.1.0" - }, - "bin": { - "update-browserslist-db": "cli.js" - }, - "peerDependencies": { - "browserslist": ">= 4.21.0" - } - }, - "node_modules/vite": { - "version": "5.4.11", - "dev": true, - "license": "MIT", - "dependencies": { - "esbuild": "^0.21.3", - "postcss": "^8.4.43", - "rollup": "^4.20.0" - }, - "bin": { - "vite": "bin/vite.js" - }, - "engines": { - "node": "^18.0.0 || >=20.0.0" - }, - "funding": { - "url": "https://github.com/vitejs/vite?sponsor=1" - }, - "optionalDependencies": { - "fsevents": "~2.3.3" - }, - "peerDependencies": { - "@types/node": "^18.0.0 || >=20.0.0", - "less": "*", - "lightningcss": "^1.21.0", - "sass": "*", - "sass-embedded": "*", - "stylus": "*", - "sugarss": "*", - "terser": "^5.4.0" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - }, - "less": { - "optional": true - }, - "lightningcss": { - "optional": true - }, - "sass": { - "optional": true - }, - "sass-embedded": { - "optional": true - }, - "stylus": { - "optional": true - }, - "sugarss": { - "optional": true - }, - "terser": { - "optional": true - } - } - }, - "node_modules/yallist": { - "version": "3.1.1", - "dev": true, - "license": "ISC" - } - } -} \ No newline at end of file diff --git a/packages/rmw-shell/package.json b/packages/rmw-shell/package.json index 7f43c8cd1..84da81d83 100644 --- a/packages/rmw-shell/package.json +++ b/packages/rmw-shell/package.json @@ -72,6 +72,7 @@ "@mui/material": "^6.1.4", "@mui/styles": "^6.1.4", "@mui/x-date-pickers": "^7.20.0", + "@types/react": "^18.3.12", "@types/react-helmet": "^6.1.11", "@types/react-linkify": "^1.0.4", "@vitejs/plugin-react": "^4.3.2", diff --git a/packages/rmw-shell/src/components/ChatMessage/index.tsx b/packages/rmw-shell/src/components/ChatMessage/index.tsx index 65520c48d..ec7d34144 100644 --- a/packages/rmw-shell/src/components/ChatMessage/index.tsx +++ b/packages/rmw-shell/src/components/ChatMessage/index.tsx @@ -232,10 +232,12 @@ export function ChatMessage({ // Even properties exist in documentation examples // http://tasti.github.io/react-linkify/ // It does not exist in Class and it doesn't work + // @ts-ignore {message} diff --git a/packages/rmw-shell/src/pages/SignIn/index.tsx b/packages/rmw-shell/src/pages/SignIn/index.tsx index 788aaa611..ad0f83e2d 100644 --- a/packages/rmw-shell/src/pages/SignIn/index.tsx +++ b/packages/rmw-shell/src/pages/SignIn/index.tsx @@ -34,6 +34,7 @@ export function SignInPage() { return ( + {/* @ts-ignore */} Date: Thu, 2 Jan 2025 16:36:58 +0100 Subject: [PATCH 18/21] Test workflow fetch depth --- .github/workflows/tests.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 1e6829846..30f92ca4d 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -9,6 +9,8 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 + with: + fetch-depth: 0 - name: Use Node.js uses: actions/setup-node@v4 with: From 6c37eaf9f9aaf21482e9c55cbaa046f0bc576d95 Mon Sep 17 00:00:00 2001 From: Belmin Mujan Date: Thu, 2 Jan 2025 16:39:11 +0100 Subject: [PATCH 19/21] Test workflow fetch depth --- .github/workflows/tests.yml | 2 -- 1 file changed, 2 deletions(-) diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 30f92ca4d..1e6829846 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -9,8 +9,6 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - with: - fetch-depth: 0 - name: Use Node.js uses: actions/setup-node@v4 with: From d97200ae54ba9f25154cec9be76fef8d3a9878a0 Mon Sep 17 00:00:00 2001 From: Belmin Mujan Date: Thu, 2 Jan 2025 21:56:11 +0100 Subject: [PATCH 20/21] work --- package-lock.json | 13 ------------- package.json | 3 +-- .../{vite.config.js => vite.config.ts} | 0 3 files changed, 1 insertion(+), 15 deletions(-) rename packages/material-ui-shell/{vite.config.js => vite.config.ts} (100%) diff --git a/package-lock.json b/package-lock.json index bbd984beb..8e92fea66 100644 --- a/package-lock.json +++ b/package-lock.json @@ -14,7 +14,6 @@ "lerna": "^8.1.8" }, "optionalDependencies": { - "@rollup/rollup-darwin-x64": "^4.29.1", "@rollup/rollup-linux-x64-gnu": "*" } }, @@ -1035,18 +1034,6 @@ "android" ] }, - "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.29.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.29.1.tgz", - "integrity": "sha512-j/Ej1oanzPjmN0tirRd5K2/nncAhS9W6ICzgxV+9Y5ZsP0hiGhHJXZ2JQ53iSSjj8m6cRY6oB1GMzNn2EUt6Ng==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "darwin" - ] - }, "node_modules/@rollup/rollup-freebsd-arm64": { "version": "4.27.4", "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.27.4.tgz", diff --git a/package.json b/package.json index 1056f9a55..c5da8bd1b 100644 --- a/package.json +++ b/package.json @@ -10,7 +10,6 @@ "lerna": "^8.1.8" }, "optionalDependencies": { - "@rollup/rollup-linux-x64-gnu": "*", - "@rollup/rollup-darwin-x64": "^4.29.1" + "@rollup/rollup-linux-x64-gnu": "*" } } diff --git a/packages/material-ui-shell/vite.config.js b/packages/material-ui-shell/vite.config.ts similarity index 100% rename from packages/material-ui-shell/vite.config.js rename to packages/material-ui-shell/vite.config.ts From daa317606469820febaa8f6a4eaaac52cc7f0f35 Mon Sep 17 00:00:00 2001 From: Belmin Mujan Date: Sat, 4 Jan 2025 16:08:58 +0100 Subject: [PATCH 21/21] RTL fix --- .../src/providers/Theme/Provider.tsx | 8 ++++---- .../template/src/config/menuItems.jsx | 2 +- .../src/providers/Firebase/Lists/Provider.tsx | 14 +++++++------- 3 files changed, 12 insertions(+), 12 deletions(-) diff --git a/packages/material-ui-shell/src/providers/Theme/Provider.tsx b/packages/material-ui-shell/src/providers/Theme/Provider.tsx index 7c17cb3a4..6376c441c 100644 --- a/packages/material-ui-shell/src/providers/Theme/Provider.tsx +++ b/packages/material-ui-shell/src/providers/Theme/Provider.tsx @@ -18,16 +18,16 @@ const Provider: React.FC = ({ const isDarkModeKey = `${persistKey}:isDarkMode` const isRTLKey = `${persistKey}:isRTL` + const persistThemeID = localStorage.getItem(themeIDKey) + const persistIsDarkMode = localStorage.getItem(isDarkModeKey) + const persistIsRTL = localStorage.getItem(isRTLKey) + const toggleThisTheme = (mode: 'isRTL' | 'isDarkMode') => { if (mode === 'isRTL') setIsRTL(!isRTL) if (mode === 'isDarkMode') setIsDarkMode(!isDarkMode) } useEffect(() => { - const persistThemeID = localStorage.getItem(themeIDKey) - const persistIsDarkMode = localStorage.getItem(isDarkModeKey) - const persistIsRTL = localStorage.getItem(isRTLKey) - if (persistThemeID) { setThemeID(persistThemeID) } diff --git a/packages/rmw-shell/create-rmw-shell/template/src/config/menuItems.jsx b/packages/rmw-shell/create-rmw-shell/template/src/config/menuItems.jsx index 1400946b6..af6c39c99 100644 --- a/packages/rmw-shell/create-rmw-shell/template/src/config/menuItems.jsx +++ b/packages/rmw-shell/create-rmw-shell/template/src/config/menuItems.jsx @@ -332,7 +332,7 @@ const getMenuItems = (props) => { visible: true, onClick: () => { toggleThisTheme("isRTL"); - window.location.reload(false); + // window.location.reload(false); }, primaryText: `${isRTL ? "LTR" : "RTL"} mode`, leftIcon: isRTL ? : , diff --git a/packages/rmw-shell/src/providers/Firebase/Lists/Provider.tsx b/packages/rmw-shell/src/providers/Firebase/Lists/Provider.tsx index abdf590f0..6f9a081f3 100644 --- a/packages/rmw-shell/src/providers/Firebase/Lists/Provider.tsx +++ b/packages/rmw-shell/src/providers/Firebase/Lists/Provider.tsx @@ -73,12 +73,12 @@ function reducer(state: DocumentData, action: ActionType) { case ActionTypes.ERROR: return { ...state, - [path]: { ...state[path], error, hasError, isLoading }, + [path]: { ...state?.[path], error, hasError, isLoading }, }; case ActionTypes.VALUE_CHANGE: return { ...state, - [path]: { ...state[path], value, isLoading, error, hasError }, + [path]: { ...state?.[path], value, isLoading, error, hasError }, }; case ActionTypes.CLEAR: const { [path]: clearedKey, ...rest } = state; @@ -87,7 +87,7 @@ function reducer(state: DocumentData, action: ActionType) { case ActionTypes.CHILD_CHANGED: case ActionTypes.CHILD_REMOVED: console.log("state[path]", state[path]); - if (state[path]) { + if (state?.[path]) { return { ...state, //TO DO: a bug happens if state[path] is undefined @@ -266,28 +266,28 @@ const Provider = ({ const getList = useCallback( (path: string): any[] => { - return state[path] && state[path].value ? state[path].value : []; + return state?.[path] && state[path]?.value ? state[path].value : []; }, [state] ); const isListLoading = useCallback( (path: string) => { - return state[path] ? state[path].isLoading : false; + return state?.[path] ? state[path].isLoading : false; }, [state] ); const getListError = useCallback( (path: string) => { - return state[path] ? state[path].error : false; + return state?.[path] ? state[path].error : false; }, [state] ); const hasListError = useCallback( (path: string) => { - return state[path] ? state[path].hasError : false; + return state?.[path] ? state[path].hasError : false; }, [state] );