@alextheman/components 5.4.3 → 5.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.cts CHANGED
@@ -1,14 +1,16 @@
1
1
  import * as react_jsx_runtime from 'react/jsx-runtime';
2
2
  import { CollapseProps } from '@mui/material/Collapse';
3
- import { SxProps, Theme } from '@mui/material/styles';
3
+ import { SxProps, PaletteMode, Theme } from '@mui/material/styles';
4
4
  import * as react from 'react';
5
- import { ReactNode, ElementType, Dispatch, SetStateAction, JSX, ComponentType, CSSProperties } from 'react';
5
+ import { ReactNode, ElementType, Dispatch, SetStateAction, JSX, ComponentProps, ComponentType, CSSProperties } from 'react';
6
6
  import { ButtonOwnProps, ButtonProps } from '@mui/material/Button';
7
7
  import { LinkProps } from '@mui/material/Link';
8
8
  import { OverridableComponent, CommonProps } from '@mui/material/OverridableComponent';
9
9
  import { SvgIconTypeMap } from '@mui/material/SvgIcon';
10
10
  import { ListItemButtonProps } from '@mui/material/ListItemButton';
11
+ import { OptionalOnCondition } from '@alextheman/utility';
11
12
  import { TypographyProps } from '@mui/material/Typography';
13
+ import { LiveProvider } from 'react-live';
12
14
  import { SwitchProps } from '@mui/material/Switch';
13
15
  import { AlertColor } from '@mui/material/Alert';
14
16
 
@@ -99,6 +101,10 @@ interface ListItemInternalLinkProps extends Omit<ListItemButtonProps, "href"> {
99
101
  }
100
102
  declare function ListItemInternalLink({ children, ...listItemButtonProps }: ListItemInternalLinkProps): react_jsx_runtime.JSX.Element;
101
103
 
104
+ interface ContextHookOptions<S extends boolean = true> {
105
+ strict?: S;
106
+ }
107
+
102
108
  interface LoaderProviderBaseProps<T> {
103
109
  /** The current loading status (true if loading, false if not) */
104
110
  isLoading: boolean;
@@ -126,7 +132,7 @@ type LoaderContextValue<T> = LoaderProviderPropsWithNoError<T> | LoaderProviderP
126
132
  type LoaderProviderProps<T> = LoaderContextValue<T> & {
127
133
  children: ReactNode;
128
134
  };
129
- declare function useLoader<T>(): LoaderContextValue<T>;
135
+ declare function useLoader<T, Strict extends boolean = true>({ strict, }?: ContextHookOptions<Strict>): OptionalOnCondition<Strict, LoaderContextValue<T>>;
130
136
  /** A provider for a context that deals with state management when fetching data from an API.
131
137
  * This may be used over Loader if you require more control over the placement of the error message and data display.
132
138
  */
@@ -185,14 +191,16 @@ type LoaderErrorProps = LoaderErrorPropsWithUndefinedOrNull | LoaderErrorPropsWi
185
191
  /** The component responsible for showing any errors provided by LoaderProvider. */
186
192
  declare function LoaderError({ errorComponent: propsErrorComponent, undefinedComponent, nullComponent, nullableComponent, logError: propsLogError, }: LoaderErrorProps): string | number | bigint | boolean | Iterable<ReactNode> | Promise<string | number | bigint | boolean | react.ReactPortal | react.ReactElement<unknown, string | react.JSXElementConstructor<any>> | Iterable<ReactNode> | null | undefined> | react_jsx_runtime.JSX.Element | null | undefined;
187
193
 
188
- declare function useMode(): {
189
- toggleMode: () => void;
190
- mode: string;
191
- };
194
+ /** @deprecated Please use `PaletteMode` from `@mui/material/styles` instead. */
192
195
  type Mode = "light" | "dark";
196
+ interface ModeContextValue {
197
+ toggleMode: () => void;
198
+ mode: PaletteMode;
199
+ }
200
+ declare function useMode<Strict extends boolean = true>({ strict, }?: ContextHookOptions<Strict>): OptionalOnCondition<Strict, ModeContextValue>;
193
201
  interface ModeProviderProps {
194
202
  children: ReactNode;
195
- mode?: Mode;
203
+ mode?: PaletteMode;
196
204
  }
197
205
  declare function ModeProvider({ children, mode: modeProp }: ModeProviderProps): react_jsx_runtime.JSX.Element;
198
206
 
@@ -206,7 +214,7 @@ interface ScreenSizeContextValue {
206
214
  windowWidth: number;
207
215
  windowHeight: number;
208
216
  }
209
- declare function useScreenSize(): ScreenSizeContextValue;
217
+ declare function useScreenSize<Strict extends boolean = true>({ strict, }?: ContextHookOptions<Strict>): OptionalOnCondition<Strict, ScreenSizeContextValue>;
210
218
  declare function ScreenSizeProvider({ children, largeScreenWidth, largeScreenHeight }: ScreenSizeProps): react_jsx_runtime.JSX.Element;
211
219
 
212
220
  interface SnackbarProviderProps {
@@ -216,7 +224,7 @@ interface SnackbarProviderProps {
216
224
  interface SnackbarContextValue {
217
225
  addSnackbar: (message: string, severity?: AlertColor, duration?: number) => void;
218
226
  }
219
- declare function useSnackbar(): SnackbarContextValue;
227
+ declare function useSnackbar<Strict extends boolean = true>({ strict, }?: ContextHookOptions<Strict>): OptionalOnCondition<Strict, SnackbarContextValue>;
220
228
  declare function SnackbarProvider({ children, autoHideDuration }: SnackbarProviderProps): react_jsx_runtime.JSX.Element;
221
229
 
222
230
  type LoaderProps<T> = Omit<LoaderProviderProps<T>, "children"> & Omit<LoaderErrorProps, "errorComponent"> & Omit<LoaderDataProps<T>, "showOnError" | "onUndefined" | "onNull" | "onNullable">;
@@ -258,15 +266,10 @@ interface PopoverTextProps extends TypographyProps {
258
266
  }
259
267
  declare function PopoverText({ text, sx, ...typographyProps }: PopoverTextProps): react_jsx_runtime.JSX.Element;
260
268
 
261
- interface ReactPlaygroundProps {
262
- code: string;
263
- scope?: Record<string, unknown>;
269
+ interface ReactPlaygroundProps extends ComponentProps<typeof LiveProvider> {
264
270
  previewStyles?: SxProps<Theme>;
265
- noInline?: boolean;
266
- enableTypeScript?: boolean;
267
- language?: string;
268
271
  }
269
- declare function ReactPlayground({ code, scope, previewStyles, noInline, enableTypeScript, language, }: ReactPlaygroundProps): react_jsx_runtime.JSX.Element;
272
+ declare function ReactPlayground({ code, previewStyles, ...liveProviderProps }: ReactPlaygroundProps): react_jsx_runtime.JSX.Element;
270
273
 
271
274
  interface SkeletonRowProps {
272
275
  columns: number;
@@ -293,4 +296,4 @@ declare function SwitchWithIcons({ checkedIcon: CheckedIcon, checkedIconStyles,
293
296
 
294
297
  declare function useHash<S extends string>(initialHash: S | undefined): [S, Dispatch<SetStateAction<S>>];
295
298
 
296
- export { CollapsableItem, type CollapsableItemProps, DarkModeToggle, DropdownMenu, type DropdownMenuProps, ExternalLink, type ExternalLinkProps, FileInput, FileInputList, type FileInputListProps, type FileInputProps, FileType, IconWithPopover, type IconWithPopoverProps, InternalLink, type InternalLinkProps, ListItemInternalLink, type ListItemInternalLinkProps, Loader, type LoaderContextValue, LoaderData, type LoaderDataBaseProps, type LoaderDataProps, type LoaderDataPropsOnNullable, type LoaderDataPropsOnUndefinedOrNull, LoaderError, type LoaderErrorBaseProps, type LoaderErrorProps, type LoaderErrorPropsWithNullable, type LoaderErrorPropsWithUndefinedOrNull, type LoaderProps, LoaderProvider, type LoaderProviderBaseProps, type LoaderProviderProps, type LoaderProviderPropsWithError, type LoaderProviderPropsWithNoError, type Mode, ModeProvider, type ModeProviderProps, type NavItemBottom, type NavMenuItem, NavigationBottom, type NavigationBottomProps, NavigationDrawer, type NavigationDrawerProps, PopoverText, type PopoverTextProps, ReactPlayground, type ReactPlaygroundProps, type ScreenSizeContextValue, type ScreenSizeProps, ScreenSizeProvider, SkeletonRow, type SkeletonRowProps, SnackbarProvider, type SnackbarProviderProps, SubmitButton, type SubmitButtonProps, SwitchWithIcons, type SwitchWithIconsProps, useHash, useLoader, useMode, useScreenSize, useSnackbar };
299
+ export { CollapsableItem, type CollapsableItemProps, type ContextHookOptions, DarkModeToggle, DropdownMenu, type DropdownMenuProps, ExternalLink, type ExternalLinkProps, FileInput, FileInputList, type FileInputListProps, type FileInputProps, FileType, IconWithPopover, type IconWithPopoverProps, InternalLink, type InternalLinkProps, ListItemInternalLink, type ListItemInternalLinkProps, Loader, type LoaderContextValue, LoaderData, type LoaderDataBaseProps, type LoaderDataProps, type LoaderDataPropsOnNullable, type LoaderDataPropsOnUndefinedOrNull, LoaderError, type LoaderErrorBaseProps, type LoaderErrorProps, type LoaderErrorPropsWithNullable, type LoaderErrorPropsWithUndefinedOrNull, type LoaderProps, LoaderProvider, type LoaderProviderBaseProps, type LoaderProviderProps, type LoaderProviderPropsWithError, type LoaderProviderPropsWithNoError, type Mode, ModeProvider, type ModeProviderProps, type NavItemBottom, type NavMenuItem, NavigationBottom, type NavigationBottomProps, NavigationDrawer, type NavigationDrawerProps, PopoverText, type PopoverTextProps, ReactPlayground, type ReactPlaygroundProps, type ScreenSizeContextValue, type ScreenSizeProps, ScreenSizeProvider, SkeletonRow, type SkeletonRowProps, SnackbarProvider, type SnackbarProviderProps, SubmitButton, type SubmitButtonProps, SwitchWithIcons, type SwitchWithIconsProps, useHash, useLoader, useMode, useScreenSize, useSnackbar };
package/dist/index.d.ts CHANGED
@@ -1,14 +1,16 @@
1
1
  import * as react_jsx_runtime from 'react/jsx-runtime';
2
2
  import { CollapseProps } from '@mui/material/Collapse';
3
- import { SxProps, Theme } from '@mui/material/styles';
3
+ import { SxProps, PaletteMode, Theme } from '@mui/material/styles';
4
4
  import * as react from 'react';
5
- import { ReactNode, ElementType, Dispatch, SetStateAction, JSX, ComponentType, CSSProperties } from 'react';
5
+ import { ReactNode, ElementType, Dispatch, SetStateAction, JSX, ComponentProps, ComponentType, CSSProperties } from 'react';
6
6
  import { ButtonOwnProps, ButtonProps } from '@mui/material/Button';
7
7
  import { LinkProps } from '@mui/material/Link';
8
8
  import { OverridableComponent, CommonProps } from '@mui/material/OverridableComponent';
9
9
  import { SvgIconTypeMap } from '@mui/material/SvgIcon';
10
10
  import { ListItemButtonProps } from '@mui/material/ListItemButton';
11
+ import { OptionalOnCondition } from '@alextheman/utility';
11
12
  import { TypographyProps } from '@mui/material/Typography';
13
+ import { LiveProvider } from 'react-live';
12
14
  import { SwitchProps } from '@mui/material/Switch';
13
15
  import { AlertColor } from '@mui/material/Alert';
14
16
 
@@ -99,6 +101,10 @@ interface ListItemInternalLinkProps extends Omit<ListItemButtonProps, "href"> {
99
101
  }
100
102
  declare function ListItemInternalLink({ children, ...listItemButtonProps }: ListItemInternalLinkProps): react_jsx_runtime.JSX.Element;
101
103
 
104
+ interface ContextHookOptions<S extends boolean = true> {
105
+ strict?: S;
106
+ }
107
+
102
108
  interface LoaderProviderBaseProps<T> {
103
109
  /** The current loading status (true if loading, false if not) */
104
110
  isLoading: boolean;
@@ -126,7 +132,7 @@ type LoaderContextValue<T> = LoaderProviderPropsWithNoError<T> | LoaderProviderP
126
132
  type LoaderProviderProps<T> = LoaderContextValue<T> & {
127
133
  children: ReactNode;
128
134
  };
129
- declare function useLoader<T>(): LoaderContextValue<T>;
135
+ declare function useLoader<T, Strict extends boolean = true>({ strict, }?: ContextHookOptions<Strict>): OptionalOnCondition<Strict, LoaderContextValue<T>>;
130
136
  /** A provider for a context that deals with state management when fetching data from an API.
131
137
  * This may be used over Loader if you require more control over the placement of the error message and data display.
132
138
  */
@@ -185,14 +191,16 @@ type LoaderErrorProps = LoaderErrorPropsWithUndefinedOrNull | LoaderErrorPropsWi
185
191
  /** The component responsible for showing any errors provided by LoaderProvider. */
186
192
  declare function LoaderError({ errorComponent: propsErrorComponent, undefinedComponent, nullComponent, nullableComponent, logError: propsLogError, }: LoaderErrorProps): string | number | bigint | boolean | Iterable<ReactNode> | Promise<string | number | bigint | boolean | react.ReactPortal | react.ReactElement<unknown, string | react.JSXElementConstructor<any>> | Iterable<ReactNode> | null | undefined> | react_jsx_runtime.JSX.Element | null | undefined;
187
193
 
188
- declare function useMode(): {
189
- toggleMode: () => void;
190
- mode: string;
191
- };
194
+ /** @deprecated Please use `PaletteMode` from `@mui/material/styles` instead. */
192
195
  type Mode = "light" | "dark";
196
+ interface ModeContextValue {
197
+ toggleMode: () => void;
198
+ mode: PaletteMode;
199
+ }
200
+ declare function useMode<Strict extends boolean = true>({ strict, }?: ContextHookOptions<Strict>): OptionalOnCondition<Strict, ModeContextValue>;
193
201
  interface ModeProviderProps {
194
202
  children: ReactNode;
195
- mode?: Mode;
203
+ mode?: PaletteMode;
196
204
  }
197
205
  declare function ModeProvider({ children, mode: modeProp }: ModeProviderProps): react_jsx_runtime.JSX.Element;
198
206
 
@@ -206,7 +214,7 @@ interface ScreenSizeContextValue {
206
214
  windowWidth: number;
207
215
  windowHeight: number;
208
216
  }
209
- declare function useScreenSize(): ScreenSizeContextValue;
217
+ declare function useScreenSize<Strict extends boolean = true>({ strict, }?: ContextHookOptions<Strict>): OptionalOnCondition<Strict, ScreenSizeContextValue>;
210
218
  declare function ScreenSizeProvider({ children, largeScreenWidth, largeScreenHeight }: ScreenSizeProps): react_jsx_runtime.JSX.Element;
211
219
 
212
220
  interface SnackbarProviderProps {
@@ -216,7 +224,7 @@ interface SnackbarProviderProps {
216
224
  interface SnackbarContextValue {
217
225
  addSnackbar: (message: string, severity?: AlertColor, duration?: number) => void;
218
226
  }
219
- declare function useSnackbar(): SnackbarContextValue;
227
+ declare function useSnackbar<Strict extends boolean = true>({ strict, }?: ContextHookOptions<Strict>): OptionalOnCondition<Strict, SnackbarContextValue>;
220
228
  declare function SnackbarProvider({ children, autoHideDuration }: SnackbarProviderProps): react_jsx_runtime.JSX.Element;
221
229
 
222
230
  type LoaderProps<T> = Omit<LoaderProviderProps<T>, "children"> & Omit<LoaderErrorProps, "errorComponent"> & Omit<LoaderDataProps<T>, "showOnError" | "onUndefined" | "onNull" | "onNullable">;
@@ -258,15 +266,10 @@ interface PopoverTextProps extends TypographyProps {
258
266
  }
259
267
  declare function PopoverText({ text, sx, ...typographyProps }: PopoverTextProps): react_jsx_runtime.JSX.Element;
260
268
 
261
- interface ReactPlaygroundProps {
262
- code: string;
263
- scope?: Record<string, unknown>;
269
+ interface ReactPlaygroundProps extends ComponentProps<typeof LiveProvider> {
264
270
  previewStyles?: SxProps<Theme>;
265
- noInline?: boolean;
266
- enableTypeScript?: boolean;
267
- language?: string;
268
271
  }
269
- declare function ReactPlayground({ code, scope, previewStyles, noInline, enableTypeScript, language, }: ReactPlaygroundProps): react_jsx_runtime.JSX.Element;
272
+ declare function ReactPlayground({ code, previewStyles, ...liveProviderProps }: ReactPlaygroundProps): react_jsx_runtime.JSX.Element;
270
273
 
271
274
  interface SkeletonRowProps {
272
275
  columns: number;
@@ -293,4 +296,4 @@ declare function SwitchWithIcons({ checkedIcon: CheckedIcon, checkedIconStyles,
293
296
 
294
297
  declare function useHash<S extends string>(initialHash: S | undefined): [S, Dispatch<SetStateAction<S>>];
295
298
 
296
- export { CollapsableItem, type CollapsableItemProps, DarkModeToggle, DropdownMenu, type DropdownMenuProps, ExternalLink, type ExternalLinkProps, FileInput, FileInputList, type FileInputListProps, type FileInputProps, FileType, IconWithPopover, type IconWithPopoverProps, InternalLink, type InternalLinkProps, ListItemInternalLink, type ListItemInternalLinkProps, Loader, type LoaderContextValue, LoaderData, type LoaderDataBaseProps, type LoaderDataProps, type LoaderDataPropsOnNullable, type LoaderDataPropsOnUndefinedOrNull, LoaderError, type LoaderErrorBaseProps, type LoaderErrorProps, type LoaderErrorPropsWithNullable, type LoaderErrorPropsWithUndefinedOrNull, type LoaderProps, LoaderProvider, type LoaderProviderBaseProps, type LoaderProviderProps, type LoaderProviderPropsWithError, type LoaderProviderPropsWithNoError, type Mode, ModeProvider, type ModeProviderProps, type NavItemBottom, type NavMenuItem, NavigationBottom, type NavigationBottomProps, NavigationDrawer, type NavigationDrawerProps, PopoverText, type PopoverTextProps, ReactPlayground, type ReactPlaygroundProps, type ScreenSizeContextValue, type ScreenSizeProps, ScreenSizeProvider, SkeletonRow, type SkeletonRowProps, SnackbarProvider, type SnackbarProviderProps, SubmitButton, type SubmitButtonProps, SwitchWithIcons, type SwitchWithIconsProps, useHash, useLoader, useMode, useScreenSize, useSnackbar };
299
+ export { CollapsableItem, type CollapsableItemProps, type ContextHookOptions, DarkModeToggle, DropdownMenu, type DropdownMenuProps, ExternalLink, type ExternalLinkProps, FileInput, FileInputList, type FileInputListProps, type FileInputProps, FileType, IconWithPopover, type IconWithPopoverProps, InternalLink, type InternalLinkProps, ListItemInternalLink, type ListItemInternalLinkProps, Loader, type LoaderContextValue, LoaderData, type LoaderDataBaseProps, type LoaderDataProps, type LoaderDataPropsOnNullable, type LoaderDataPropsOnUndefinedOrNull, LoaderError, type LoaderErrorBaseProps, type LoaderErrorProps, type LoaderErrorPropsWithNullable, type LoaderErrorPropsWithUndefinedOrNull, type LoaderProps, LoaderProvider, type LoaderProviderBaseProps, type LoaderProviderProps, type LoaderProviderPropsWithError, type LoaderProviderPropsWithNoError, type Mode, ModeProvider, type ModeProviderProps, type NavItemBottom, type NavMenuItem, NavigationBottom, type NavigationBottomProps, NavigationDrawer, type NavigationDrawerProps, PopoverText, type PopoverTextProps, ReactPlayground, type ReactPlaygroundProps, type ScreenSizeContextValue, type ScreenSizeProps, ScreenSizeProvider, SkeletonRow, type SkeletonRowProps, SnackbarProvider, type SnackbarProviderProps, SubmitButton, type SubmitButtonProps, SwitchWithIcons, type SwitchWithIconsProps, useHash, useLoader, useMode, useScreenSize, useSnackbar };
package/dist/index.js CHANGED
@@ -1,3 +1,3 @@
1
- var Ie=Object.defineProperty,Ce=Object.defineProperties;var ke=Object.getOwnPropertyDescriptors;var B=Object.getOwnPropertySymbols;var q=Object.prototype.hasOwnProperty,Q=Object.prototype.propertyIsEnumerable;var Y=(e,o,r)=>o in e?Ie(e,o,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[o]=r,s=(e,o)=>{for(var r in o||(o={}))q.call(o,r)&&Y(e,r,o[r]);if(B)for(var r of B(o))Q.call(o,r)&&Y(e,r,o[r]);return e},f=(e,o)=>Ce(e,ke(o));var x=(e,o)=>{var r={};for(var n in e)q.call(e,n)&&o.indexOf(n)<0&&(r[n]=e[n]);if(e!=null&&B)for(var n of B(e))o.indexOf(n)<0&&Q.call(e,n)&&(r[n]=e[n]);return r};var Z=(e,o,r)=>new Promise((n,a)=>{var t=d=>{try{i(r.next(d))}catch(u){a(u)}},p=d=>{try{i(r.throw(d))}catch(u){a(u)}},i=d=>d.done?n(d.value):Promise.resolve(d.value).then(t,p);i((r=r.apply(e,o)).next())});import Te from"@mui/icons-material/ArrowDropDown";import Ne from"@mui/icons-material/ArrowDropUp";import Be from"@mui/material/Box";import O from"@mui/material/ButtonBase";import Ee from"@mui/material/Collapse";import{useEffect as Re,useState as De}from"react";import{jsx as A,jsxs as j}from"react/jsx-runtime";function Me({isInitiallyOpen:e,onOpen:o,onClose:r,children:n,buttonStyles:a,buttonContents:t,buttonComponent:p=O,collapseProps:i,openIcon:d=A(Ne,{}),closedIcon:u=A(Te,{}),useDefaultStyling:c=p===O}){let[l,m]=De(!!e);return Re(()=>{l&&o?o():!l&&r&&r()},[l]),j(Be,{children:[j(p,{onClick:()=>{m(P=>!P)},sx:c?s({width:"100%",display:"flex",alignItems:"center",justifyContent:"center",paddingY:1.5,paddingX:2,textAlign:"center","&:hover":p===O?{backgroundColor:"action.hover"}:null},a):a,"aria-expanded":l,children:[t,l?d:u]}),A(Ee,f(s({in:l},i),{children:n}))]})}var Oe=Me;import xo from"@mui/icons-material/DarkMode";import Po from"@mui/icons-material/LightMode";import go from"@mui/material/IconButton";import vo from"@mui/material/Tooltip";import Ae from"@mui/material/CircularProgress";import{createContext as We,useContext as Fe}from"react";import{jsx as ee}from"react/jsx-runtime";var oe=We(void 0);function I(){let e=Fe(oe);if(!e)throw new Error("LOADER_CONTEXT_NOT_SET");return e}function ze(n){var a=n,{children:e,loadingComponent:o=ee(Ae,{})}=a,r=x(a,["children","loadingComponent"]);return ee(oe.Provider,{value:s({loadingComponent:o},r),children:e})}var W=ze;import{Fragment as v,jsx as y}from"react/jsx-runtime";function Ue({children:e,dataParser:o,loadingComponent:r,onNullable:n,onUndefined:a,onNull:t}){let{isLoading:p,data:i,dataParser:d,loadingComponent:u,error:c}=I(),l=o!=null?o:d;if(p)return y(v,{children:r!=null?r:u});if(c)return y(v,{});if(i==null){if(n){let m=n();return m!=null?m:y(v,{})}if(i===void 0&&a){let m=a();return m!=null?m:y(v,{})}if(i===null&&t){let m=t();return m!=null?m:y(v,{})}return y(v,{})}return l?typeof e=="function"?y(v,{children:e(l(i))}):y(v,{children:e}):typeof e=="function"?y(v,{children:e(i)}):y(v,{children:e})}var F=Ue;import re from"@mui/material/Alert";import{useRef as He}from"react";import{Fragment as C,jsx as b}from"react/jsx-runtime";function Ve({errorComponent:e,undefinedComponent:o,nullComponent:r,nullableComponent:n,logError:a}){var P;let{isLoading:t,data:p,error:i,errorComponent:d,logError:u}=I(),c=a!=null?a:u,l=He(!1),m=e!=null?e:d;return i?(c&&!l.current&&(console.error(i),l.current=!0),typeof m=="function"?m(i):m?b(C,{children:m}):b(re,{severity:"error",children:(P=i==null?void 0:i.message)!=null?P:"An unknown error has occured. Please try again later."})):!t&&p==null?n?(c&&!l.current&&(console.error("Data is nullable after loading."),l.current=!0),b(C,{children:n})):p===void 0&&(c&&!l.current&&(console.error("Data is undefined after loading. This could either be an issue with the query or you have not passed in the data to LoaderProvider. Please double-check that you have provided data."),l.current=!0),o)?b(C,{children:o}):p===null&&(c&&!l.current&&(console.error("Data is null after loading."),l.current=!0),r)?b(C,{children:r}):b(re,{severity:"error",children:"Failed to load data. Please try again later."}):b(C,{})}var z=Ve;import Xe from"@mui/material/CssBaseline";import{createTheme as $e,ThemeProvider as _e}from"@mui/material/styles";import{createContext as Ge,useContext as Je,useMemo as Ke,useState as Ye}from"react";import{jsx as te,jsxs as Ze}from"react/jsx-runtime";var ne=Ge({toggleMode:()=>{},mode:"dark"});function k(){return Je(ne)}function qe({children:e,mode:o="dark"}){let[r,n]=Ye(o),a=Ke(()=>$e({palette:{mode:r}}),[r]);return te(ne.Provider,{value:{mode:r,toggleMode:()=>{n(t=>t==="light"?"dark":"light")}},children:Ze(_e,{theme:a,children:[te(Xe,{}),e]})})}var Qe=qe;import{createContext as je,useContext as eo,useEffect as ae,useState as U}from"react";import{jsx as no}from"react/jsx-runtime";var ie=je({windowWidth:0,windowHeight:0,isLargeScreen:!1});function oo(){return eo(ie)}function ro({children:e,largeScreenWidth:o,largeScreenHeight:r}){let[n,a]=U(window.innerWidth),[t,p]=U(window.innerHeight);function i(c,l,m=669,P=600){return c>m&&l>P}let[d,u]=U(i(window.innerWidth,window.innerHeight,o,r));return ae(()=>{function c(){a(window.innerWidth),p(window.innerHeight)}return c(),window.addEventListener("resize",c),()=>{window.removeEventListener("resize",c)}},[]),ae(()=>{u(i(n,t,o,r))},[n,t,o,r]),no(ie.Provider,{value:{isLargeScreen:d,windowWidth:n,windowHeight:t},children:e})}var to=ro;import{wait as ao}from"@alextheman/utility";import io from"@mui/material/Alert";import po from"@mui/material/Snackbar";import{createContext as so,useContext as lo,useState as E}from"react";import{jsx as pe,jsxs as fo}from"react/jsx-runtime";var se=so(void 0);function mo(){let e=lo(se);if(!e)throw new Error("SNACKBAR_CONTEXT_NOT_SET");return e}function co({children:e,autoHideDuration:o=5e3}){let[r,n]=E(!1),[a,t]=E(o),[p,i]=E(""),[d,u]=E("info");function c(m,P,h){n(!0),t(h!=null?h:o),u(P!=null?P:"info"),i(m)}function l(){return Z(this,null,function*(){n(!1),yield ao(.2),i("")})}return fo(se.Provider,{value:{addSnackbar:c},children:[pe(po,{open:r,autoHideDuration:a,onClose:l,children:pe(io,{onClose:l,severity:d,children:p})}),e]})}var uo=co;import{jsx as R}from"react/jsx-runtime";function yo(){let{mode:e,toggleMode:o}=k();return R(vo,{title:`Enable ${e==="dark"?"light":"dark"} mode`,children:R(go,{sx:{marginLeft:"auto"},onClick:o,"aria-label":`Enable ${e==="dark"?"light":"dark"} mode`,children:e==="dark"?R(Po,{}):R(xo,{})})})}var ho=yo;import Lo from"@mui/icons-material/ArrowDropDown";import bo from"@mui/icons-material/ArrowDropUp";import de from"@mui/material/Box";import le from"@mui/material/Button";import So from"@mui/material/Menu";import{useEffect as wo,useMemo as Io,useState as Co}from"react";import{jsx as T,jsxs as No}from"react/jsx-runtime";function ko({children:e,button:o=le,buttonChildren:r="Menu",buttonProps:n,isOpenIcon:a=T(bo,{}),isClosedIcon:t=T(Lo,{}),onOpen:p,onClose:i}){let[d,u]=Co(null),c=Io(()=>!!d,[d]),l=f(s({},n),{onClick:m=>{u(m.currentTarget)},"aria-controls":c?"dropdown-menu":void 0,"aria-haspopup":"true","aria-expanded":c});return o===le&&(l.endIcon=c?a:t),wo(()=>{c&&p?p():!c&&i&&i()},[c,p,i]),No(de,{children:[T(o,f(s({},l),{children:r})),T(So,{id:"dropdown-menu",anchorEl:d,open:c,onClose:()=>{u(null)},children:typeof e=="function"?T(de,{children:e(()=>{u(null)})}):e})]})}var To=ko;import Bo from"@mui/material/Link";import{jsx as Do}from"react/jsx-runtime";function Eo(n){var a=n,{href:e,children:o}=a,r=x(a,["href","children"]);return Do(Bo,f(s({component:"a",href:e,target:"_blank",rel:"noopener noreferrer"},r),{children:o}))}var Ro=Eo;import Mo from"@mui/icons-material/CloudUpload";import Oo from"@mui/material/Button";import{styled as me}from"@mui/material/styles";import{useState as Ao}from"react";import{jsx as H,jsxs as Ho}from"react/jsx-runtime";var Wo={PDF:"application/pdf",PNG:"image/png",JPEG:"image/jpeg",JPG:"image/jpg",XLSX:"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",DOCX:"application/vnd.openxmlformats-officedocument.wordprocessingml.document",MP3:"audio/mp3",MP4:"video/mp4",WAV:"audio/wav"},Fo=me("input")({clip:"rect(0 0 0 0)",clipPath:"inset(50%)",height:1,overflow:"hidden",position:"absolute",bottom:0,left:0,whiteSpace:"nowrap",width:1}),zo=me("div")(({theme:e,$dragging:o})=>({border:"2px dashed",borderColor:o?e.palette.primary.main:"#ccc",backgroundColor:o?e.palette.action.hover:"transparent",borderRadius:8,padding:"1.5rem",textAlign:"center",transition:"border-color 0.2s",cursor:"pointer"}));function Uo(p){var i=p,{onFileInput:e,label:o="Upload files",multiple:r,accept:n,useDropzone:a}=i,t=x(i,["onFileInput","label","multiple","accept","useDropzone"]);var l;let[d,u]=Ao(!1),c=Ho(Oo,f(s({variant:"contained",component:"label","aria-label":"File upload button",onKeyDown:m=>{var P;(m.key==="Enter"||m.key===" ")&&(m.preventDefault(),(P=document.getElementById("file-input"))==null||P.click())}},t),{startIcon:(l=t.startIcon)!=null?l:H(Mo,{}),children:[o,H(Fo,{id:"file-input",type:"file",onChange:m=>{var h;let P=m.target;e(Array.from((h=P.files)!=null?h:[])),P.value=""},multiple:r,accept:n==null?void 0:n.join(","),disabled:t.disabled})]}));return a?H(zo,{$dragging:d,onDragOver:m=>{m.preventDefault(),!t.disabled&&u(!0)},onDragLeave:m=>{m.preventDefault(),u(!1)},onDrop:m=>{var h;if(m.preventDefault(),u(!1),t.disabled)return;let P=Array.from((h=m.dataTransfer.files)!=null?h:[]);e(P)},children:c}):c}var V=Uo;import Vo from"@mui/icons-material/Delete";import Xo from"@mui/material/Box";import $o from"@mui/material/IconButton";import _o from"@mui/material/List";import Go from"@mui/material/ListItem";import Jo from"@mui/material/ListItemText";import{jsx as w,jsxs as qo}from"react/jsx-runtime";function Ko(n){var a=n,{files:e,setFiles:o}=a,r=x(a,["files","setFiles"]);function t(i){o(d=>[...d,...i])}let p=f(s({},r),{onFileInput:t});return(p==null?void 0:p.multiple)===void 0&&(p.multiple=!0),qo(Xo,{children:[w(V,s({},p)),w(_o,{children:e.map(i=>w(Go,{secondaryAction:w($o,{"aria-label":"Delete",edge:"end",onClick:()=>{o(d=>d.filter(u=>u!==i))},children:w(Vo,{})}),children:w(Jo,{primary:i.name})},i.name))})]})}var Yo=Ko;import Qo from"@mui/material/Box";import Zo from"@mui/material/Popover";import{useId as jo,useState as er}from"react";import{jsx as ce,jsxs as tr}from"react/jsx-runtime";function or({icon:e,onOpen:o,onClose:r,iconProps:n,children:a}){let[t,p]=er(null),i=!!t,d=jo();function u(l){p(l.currentTarget),o&&o()}function c(){p(null),r&&r()}return tr(Qo,{children:[ce(e,s({"aria-owns":i?d:void 0,"aria-haspopup":"true",onMouseEnter:u,onMouseLeave:c},n)),ce(Zo,{id:d,sx:{pointerEvents:"none"},open:i,anchorEl:t,anchorOrigin:{vertical:"bottom",horizontal:"left"},transformOrigin:{vertical:"top",horizontal:"left"},onClose:c,disableRestoreFocus:!0,children:a})]})}var rr=or;import nr from"@mui/material/Link";import{Link as ar}from"react-router-dom";import{jsx as pr}from"react/jsx-runtime";function ir(n){var a=n,{to:e,children:o}=a,r=x(a,["to","children"]);return pr(nr,f(s({component:ar,to:e},r),{children:o}))}var X=ir;import sr from"@mui/material/ListItemButton";import{jsx as mr}from"react/jsx-runtime";function dr(r){var n=r,{children:e}=n,o=x(n,["children"]);return mr(sr,f(s({component:X},o),{children:e}))}var lr=dr;import cr from"@mui/material/CircularProgress";import{jsx as $,jsxs as xr}from"react/jsx-runtime";function ur(i){var d=i,{children:e,errorComponent:o,undefinedComponent:r,nullComponent:n,nullableComponent:a,loadingComponent:t=$(cr,{})}=d,p=x(d,["children","errorComponent","undefinedComponent","nullComponent","nullableComponent","loadingComponent"]);return xr(W,f(s({loadingComponent:t},p),{children:[$(z,{errorComponent:o,undefinedComponent:r,nullComponent:n,nullableComponent:a}),$(F,{children:e})]}))}var fr=ur;import Pr from"@mui/material/BottomNavigation";import gr from"@mui/material/BottomNavigationAction";import vr from"@mui/material/Box";import yr from"@mui/material/Paper";import{useState as hr}from"react";import{Link as Lr}from"react-router-dom";import{Fragment as wr,jsx as D,jsxs as Ir}from"react/jsx-runtime";function br({children:e,navItems:o}){let[r,n]=hr("");return Ir(wr,{children:[D(vr,{sx:{paddingBottom:7},children:e}),D(yr,{sx:{position:"fixed",bottom:0,left:0,right:0},children:D(Pr,{showLabels:!0,value:r,onChange:(a,t)=>{n(t)},children:o.map(a=>D(gr,f(s({},a),{component:Lr}),a.value))})})]})}var Sr=br;import{truncate as ue}from"@alextheman/utility";import Cr from"@mui/icons-material/ChevronLeft";import kr from"@mui/icons-material/ChevronRight";import Tr from"@mui/icons-material/Menu";import Nr from"@mui/material/AppBar";import fe from"@mui/material/Box";import Br from"@mui/material/CssBaseline";import xe from"@mui/material/Divider";import Er from"@mui/material/Drawer";import Pe from"@mui/material/IconButton";import Rr from"@mui/material/List";import Dr from"@mui/material/ListItem";import Mr from"@mui/material/ListItemButton";import Or from"@mui/material/ListItemIcon";import Ar from"@mui/material/ListItemText";import{styled as G,useTheme as Wr}from"@mui/material/styles";import Fr from"@mui/material/Toolbar";import _ from"@mui/material/Typography";import{Fragment as zr,useState as Ur}from"react";import{Link as Hr,useLocation as Vr}from"react-router-dom";import{jsx as g,jsxs as S}from"react/jsx-runtime";var M=240;function ge(e){return{width:M,transition:e.transitions.create("width",{easing:e.transitions.easing.sharp,duration:e.transitions.duration.enteringScreen}),overflowX:"hidden"}}function ve(e){return{transition:e.transitions.create("width",{easing:e.transitions.easing.sharp,duration:e.transitions.duration.leavingScreen}),overflowX:"hidden",width:`calc(${e.spacing(7)} + 1px)`,[e.breakpoints.up("sm")]:{width:`calc(${e.spacing(8)} + 1px)`}}}var ye=G("div")(({theme:e})=>s({display:"flex",alignItems:"center",justifyContent:"flex-end",padding:e.spacing(0,1)},e.mixins.toolbar)),Xr=G(Nr,{shouldForwardProp:e=>e!=="open"})(({theme:e})=>({zIndex:e.zIndex.drawer+1,transition:e.transitions.create(["width","margin"],{easing:e.transitions.easing.sharp,duration:e.transitions.duration.leavingScreen}),variants:[{props:({open:o})=>o,style:{marginLeft:M,width:`calc(100% - ${M}px)`,transition:e.transitions.create(["width","margin"],{easing:e.transitions.easing.sharp,duration:e.transitions.duration.enteringScreen})}}]})),$r=G(Er,{shouldForwardProp:e=>e!=="open"})(({theme:e})=>({width:M,flexShrink:0,whiteSpace:"nowrap",boxSizing:"border-box",variants:[{props:({open:o})=>o,style:f(s({},ge(e)),{"& .MuiDrawer-paper":ge(e)})},{props:({open:o})=>!o,style:f(s({},ve(e)),{"& .MuiDrawer-paper":ve(e)})}]}));function _r({title:e,navItems:o,children:r,headerElements:n}){let a=Wr(),[t,p]=Ur(!0),i=Vr();function d(){p(!0)}function u(){p(!1)}return S(fe,{sx:{display:"flex"},children:[g(Br,{}),g(Xr,{position:"fixed",open:t,children:S(Fr,{children:[g(Pe,{color:"inherit","aria-label":"open drawer",onClick:d,edge:"start",sx:[{marginRight:5},t&&{display:"none"}],children:g(Tr,{})}),g(_,{variant:"h6",noWrap:!0,component:"div",children:e}),n]})}),S($r,{variant:"permanent",open:t,children:[g(ye,{children:g(Pe,{onClick:u,children:a.direction==="rtl"?g(kr,{}):g(Cr,{})})}),g(xe,{}),o.map(c=>S(zr,{children:[S(Rr,{children:[g(_,{variant:t?"h5":"h6",paddingLeft:t?2:1,children:t?c.category:ue(c.category,4)}),c.options.map(l=>g(Dr,{disablePadding:!0,sx:{display:"block"},children:S(Mr,{sx:[{minHeight:48,px:2.5},t?{justifyContent:"initial"}:{justifyContent:"center"}],component:Hr,to:l.to,selected:i.pathname===l.to,children:[g(Or,{sx:[{minWidth:0,justifyContent:"center"},t?{mr:3}:{mr:"auto"}],children:l.icon?l.icon:t?null:g(_,{children:ue(l.label,4)})}),g(Ar,{primary:l.label,sx:[t?{opacity:1}:{opacity:0}]})]})},l.to))]}),g(xe,{})]},c.category))]}),S(fe,{component:"main",sx:{flexGrow:1,p:3},children:[g(ye,{}),r]})]})}var Gr=_r;import Jr from"@mui/material/Typography";import{Fragment as qr,jsx as he}from"react/jsx-runtime";function Kr(n){var a=n,{text:e,sx:o}=a,r=x(a,["text","sx"]);return he(qr,{children:e.split(`
2
- `).map((t,p)=>he(Jr,f(s({sx:s({margin:1},o)},r),{children:t}),p))})}var Yr=Kr;import J from"@mui/material/Box";import Le from"@mui/material/Typography";import{stripIndent as Qr}from"common-tags";import{LiveEditor as Zr,LiveError as jr,LivePreview as et,LiveProvider as ot}from"react-live";import{jsx as L,jsxs as be}from"react/jsx-runtime";function rt({code:e,scope:o,previewStyles:r,noInline:n,enableTypeScript:a,language:t}){let{mode:p}=k(),i={backgroundColor:p==="dark"?"black":"white",border:.3,borderRadius:1,padding:2,borderColor:"darkgray"},d=r?s(s({},i),r):s({},i);return L(J,{sx:{borderRadius:1,border:.5,padding:2},children:be(ot,{code:Qr(e),scope:o,noInline:n,enableTypeScript:a,language:t,children:[L(Le,{variant:"h5",children:"Code"}),L(J,{sx:{border:.3,borderRadius:.3,borderColor:"darkgray"},children:L(Zr,{})}),L("br",{}),L(Le,{variant:"h5",children:"Result"}),be(J,{sx:d,children:[L(et,{}),L(jr,{})]})]})})}var tt=rt;import{fillArray as nt}from"@alextheman/utility";import at from"@mui/material/Skeleton";import it from"@mui/material/TableCell";import pt from"@mui/material/TableRow";import{jsx as K}from"react/jsx-runtime";function st({columns:e}){return K(pt,{children:nt(o=>K(it,{children:K(at,{})},o),e)})}var dt=st;import lt from"@mui/material/Button";import{useFormContext as mt}from"react-hook-form";import{jsx as ft}from"react/jsx-runtime";function ct(n){var a=n,{disableClean:e,label:o}=a,r=x(a,["disableClean","label"]);let{formState:{disabled:t,isDirty:p,isSubmitting:i}}=mt();return ft(lt,f(s({color:"primary",disabled:r.disabled||e&&!p||t,loading:i,type:"submit",variant:"contained"},r),{children:o}))}var ut=ct;import Se from"@mui/material/Box";import{styled as xt}from"@mui/material/styles";import Pt from"@mui/material/Switch";import{jsx as N}from"react/jsx-runtime";var gt=xt(Pt)(()=>({padding:8,"& .MuiSwitch-track":{borderRadius:11,"&::before, &::after":{content:'""',position:"absolute",top:"50%",transform:"translateY(-50%)",fontSize:16,width:28,height:28}}}));function vt(t){var p=t,{checkedIcon:e,checkedIconStyles:o,uncheckedIcon:r,uncheckedIconStyles:n}=p,a=x(p,["checkedIcon","checkedIconStyles","uncheckedIcon","uncheckedIconStyles"]);let i={borderRadius:"50%",borderColor:"white",backgroundColor:"white",display:"flex",alignItems:"center",justifyContent:"center",padding:.25},d={color:"black",maxWidth:16.5,maxHeight:16.5};return N(gt,s({checkedIcon:N(Se,{sx:i,children:N(e,{style:s(s({},d),o)})}),icon:N(Se,{sx:i,children:N(r,{style:s(s({},d),n)})})},a))}var yt=vt;import{useCallback as we,useEffect as ht,useState as Lt}from"react";function bt(e){let[o,r]=Lt(()=>{let t=window.location.hash.replace("#","");return e&&t===""?e:t}),n=we(()=>{let t=window.location.hash.replace("#","");r(e&&t===""?e:t)},[r,e]);ht(()=>(window.addEventListener("hashchange",n),()=>{window.removeEventListener("hashchange",n)}),[n]);let a=we(t=>{let p=typeof t=="function"?t(o):t;p!==o&&(window.location.hash=p)},[o]);return[o,a]}var St=bt;export{Oe as CollapsableItem,ho as DarkModeToggle,To as DropdownMenu,Ro as ExternalLink,V as FileInput,Yo as FileInputList,Wo as FileType,rr as IconWithPopover,X as InternalLink,lr as ListItemInternalLink,fr as Loader,F as LoaderData,z as LoaderError,W as LoaderProvider,Qe as ModeProvider,Sr as NavigationBottom,Gr as NavigationDrawer,Yr as PopoverText,tt as ReactPlayground,to as ScreenSizeProvider,dt as SkeletonRow,uo as SnackbarProvider,ut as SubmitButton,yt as SwitchWithIcons,St as useHash,I as useLoader,k as useMode,oo as useScreenSize,mo as useSnackbar};
1
+ var Ce=Object.defineProperty,Ie=Object.defineProperties;var ke=Object.getOwnPropertyDescriptors;var B=Object.getOwnPropertySymbols;var q=Object.prototype.hasOwnProperty,Z=Object.prototype.propertyIsEnumerable;var Y=(e,o,r)=>o in e?Ce(e,o,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[o]=r,s=(e,o)=>{for(var r in o||(o={}))q.call(o,r)&&Y(e,r,o[r]);if(B)for(var r of B(o))Z.call(o,r)&&Y(e,r,o[r]);return e},u=(e,o)=>Ie(e,ke(o));var x=(e,o)=>{var r={};for(var n in e)q.call(e,n)&&o.indexOf(n)<0&&(r[n]=e[n]);if(e!=null&&B)for(var n of B(e))o.indexOf(n)<0&&Z.call(e,n)&&(r[n]=e[n]);return r};var Q=(e,o,r)=>new Promise((n,i)=>{var t=l=>{try{a(r.next(l))}catch(f){i(f)}},p=l=>{try{a(r.throw(l))}catch(f){i(f)}},a=l=>l.done?n(l.value):Promise.resolve(l.value).then(t,p);a((r=r.apply(e,o)).next())});import Ne from"@mui/icons-material/ArrowDropDown";import Te from"@mui/icons-material/ArrowDropUp";import Be from"@mui/material/Box";import M from"@mui/material/ButtonBase";import Oe from"@mui/material/Collapse";import{useEffect as De,useState as Re}from"react";import{jsx as A,jsxs as j}from"react/jsx-runtime";function Ee({isInitiallyOpen:e,onOpen:o,onClose:r,children:n,buttonStyles:i,buttonContents:t,buttonComponent:p=M,collapseProps:a,openIcon:l=A(Te,{}),closedIcon:f=A(Ne,{}),useDefaultStyling:c=p===M}){let[d,m]=Re(!!e);return De(()=>{d&&o?o():!d&&r&&r()},[d]),j(Be,{children:[j(p,{onClick:()=>{m(P=>!P)},sx:c?s({width:"100%",display:"flex",alignItems:"center",justifyContent:"center",paddingY:1.5,paddingX:2,textAlign:"center","&:hover":p===M?{backgroundColor:"action.hover"}:null},i):i,"aria-expanded":d,children:[t,d?l:f]}),A(Oe,u(s({in:d},a),{children:n}))]})}var Me=Ee;import xo from"@mui/icons-material/DarkMode";import Po from"@mui/icons-material/LightMode";import yo from"@mui/material/IconButton";import vo from"@mui/material/Tooltip";import Ae from"@mui/material/CircularProgress";import{createContext as Fe,useContext as We}from"react";import{jsx as ee}from"react/jsx-runtime";var oe=Fe(void 0);function C({strict:e=!0}={}){let o=We(oe);if(e&&!o)throw new Error("LOADER_PROVIDER_NOT_FOUND");return o}function Ve(n){var i=n,{children:e,loadingComponent:o=ee(Ae,{})}=i,r=x(i,["children","loadingComponent"]);return ee(oe.Provider,{value:s({loadingComponent:o},r),children:e})}var F=Ve;import{Fragment as v,jsx as h}from"react/jsx-runtime";function ze({children:e,dataParser:o,loadingComponent:r,onNullable:n,onUndefined:i,onNull:t}){let{isLoading:p,data:a,dataParser:l,loadingComponent:f,error:c}=C(),d=o!=null?o:l;if(p)return h(v,{children:r!=null?r:f});if(c)return h(v,{});if(a==null){if(n){let m=n();return m!=null?m:h(v,{})}if(a===void 0&&i){let m=i();return m!=null?m:h(v,{})}if(a===null&&t){let m=t();return m!=null?m:h(v,{})}return h(v,{})}return d?typeof e=="function"?h(v,{children:e(d(a))}):h(v,{children:e}):typeof e=="function"?h(v,{children:e(a)}):h(v,{children:e})}var W=ze;import re from"@mui/material/Alert";import{useRef as He}from"react";import{Fragment as I,jsx as S}from"react/jsx-runtime";function Ue({errorComponent:e,undefinedComponent:o,nullComponent:r,nullableComponent:n,logError:i}){var P;let{isLoading:t,data:p,error:a,errorComponent:l,logError:f}=C(),c=i!=null?i:f,d=He(!1),m=e!=null?e:l;return a?(c&&!d.current&&(console.error(a),d.current=!0),typeof m=="function"?m(a):m?S(I,{children:m}):S(re,{severity:"error",children:(P=a==null?void 0:a.message)!=null?P:"An unknown error has occured. Please try again later."})):!t&&p==null?n?(c&&!d.current&&(console.error("Data is nullable after loading."),d.current=!0),S(I,{children:n})):p===void 0&&(c&&!d.current&&(console.error("Data is undefined after loading. This could either be an issue with the query or you have not passed in the data to LoaderProvider. Please double-check that you have provided data."),d.current=!0),o)?S(I,{children:o}):p===null&&(c&&!d.current&&(console.error("Data is null after loading."),d.current=!0),r)?S(I,{children:r}):S(re,{severity:"error",children:"Failed to load data. Please try again later."}):S(I,{})}var V=Ue;import _e from"@mui/material/CssBaseline";import{createTheme as $e,ThemeProvider as Xe}from"@mui/material/styles";import{createContext as Ge,useContext as Je,useMemo as Ke,useState as Ye}from"react";import{jsx as te,jsxs as Qe}from"react/jsx-runtime";var ne=Ge({toggleMode:()=>{},mode:"dark"});function k({strict:e=!0}={}){let o=Je(ne);if(e&&!o)throw new Error("MODE_PROVIDER_NOT_FOUND");return o}function qe({children:e,mode:o="dark"}){let[r,n]=Ye(o),i=Ke(()=>$e({palette:{mode:r}}),[r]);return te(ne.Provider,{value:{mode:r,toggleMode:()=>{n(t=>t==="light"?"dark":"light")}},children:Qe(Xe,{theme:i,children:[te(_e,{}),e]})})}var Ze=qe;import{createContext as je,useContext as eo,useEffect as ie,useState as z}from"react";import{jsx as no}from"react/jsx-runtime";var ae=je({windowWidth:0,windowHeight:0,isLargeScreen:!1});function oo({strict:e=!0}={}){let o=eo(ae);if(e&&!o)throw new Error("SCREEN_SIZE_PROVIDER_NOT_FOUND");return o}function ro({children:e,largeScreenWidth:o,largeScreenHeight:r}){let[n,i]=z(window.innerWidth),[t,p]=z(window.innerHeight);function a(c,d,m=669,P=600){return c>m&&d>P}let[l,f]=z(a(window.innerWidth,window.innerHeight,o,r));return ie(()=>{function c(){i(window.innerWidth),p(window.innerHeight)}return c(),window.addEventListener("resize",c),()=>{window.removeEventListener("resize",c)}},[]),ie(()=>{f(a(n,t,o,r))},[n,t,o,r]),no(ae.Provider,{value:{isLargeScreen:l,windowWidth:n,windowHeight:t},children:e})}var to=ro;import{wait as io}from"@alextheman/utility";import ao from"@mui/material/Alert";import po from"@mui/material/Snackbar";import{createContext as so,useContext as lo,useState as O}from"react";import{jsx as pe,jsxs as fo}from"react/jsx-runtime";var se=so(void 0);function mo({strict:e=!0}={}){let o=lo(se);if(e&&!o)throw new Error("SNACKBAR_PROVIDER_NOT_FOUND");return o}function co({children:e,autoHideDuration:o=5e3}){let[r,n]=O(!1),[i,t]=O(o),[p,a]=O(""),[l,f]=O("info");function c(m,P,g){n(!0),t(g!=null?g:o),f(P!=null?P:"info"),a(m)}function d(){return Q(this,null,function*(){n(!1),yield io(.2),a("")})}return fo(se.Provider,{value:{addSnackbar:c},children:[pe(po,{open:r,autoHideDuration:i,onClose:d,children:pe(ao,{onClose:d,severity:l,children:p})}),e]})}var uo=co;import{jsx as D}from"react/jsx-runtime";function ho(){let{mode:e,toggleMode:o}=k();return D(vo,{title:`Enable ${e==="dark"?"light":"dark"} mode`,children:D(yo,{sx:{marginLeft:"auto"},onClick:o,"aria-label":`Enable ${e==="dark"?"light":"dark"} mode`,children:e==="dark"?D(Po,{}):D(xo,{})})})}var go=ho;import Lo from"@mui/icons-material/ArrowDropDown";import So from"@mui/icons-material/ArrowDropUp";import de from"@mui/material/Box";import le from"@mui/material/Button";import bo from"@mui/material/Menu";import{useEffect as wo,useMemo as Co,useState as Io}from"react";import{jsx as N,jsxs as To}from"react/jsx-runtime";function ko({children:e,button:o=le,buttonChildren:r="Menu",buttonProps:n,isOpenIcon:i=N(So,{}),isClosedIcon:t=N(Lo,{}),onOpen:p,onClose:a}){let[l,f]=Io(null),c=Co(()=>!!l,[l]),d=u(s({},n),{onClick:m=>{f(m.currentTarget)},"aria-controls":c?"dropdown-menu":void 0,"aria-haspopup":"true","aria-expanded":c});return o===le&&(d.endIcon=c?i:t),wo(()=>{c&&p?p():!c&&a&&a()},[c,p,a]),To(de,{children:[N(o,u(s({},d),{children:r})),N(bo,{id:"dropdown-menu",anchorEl:l,open:c,onClose:()=>{f(null)},children:typeof e=="function"?N(de,{children:e(()=>{f(null)})}):e})]})}var No=ko;import Bo from"@mui/material/Link";import{jsx as Ro}from"react/jsx-runtime";function Oo(n){var i=n,{href:e,children:o}=i,r=x(i,["href","children"]);return Ro(Bo,u(s({component:"a",href:e,target:"_blank",rel:"noopener noreferrer"},r),{children:o}))}var Do=Oo;import Eo from"@mui/icons-material/CloudUpload";import Mo from"@mui/material/Button";import{styled as me}from"@mui/material/styles";import{useState as Ao}from"react";import{jsx as H,jsxs as Ho}from"react/jsx-runtime";var Fo={PDF:"application/pdf",PNG:"image/png",JPEG:"image/jpeg",JPG:"image/jpg",XLSX:"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",DOCX:"application/vnd.openxmlformats-officedocument.wordprocessingml.document",MP3:"audio/mp3",MP4:"video/mp4",WAV:"audio/wav"},Wo=me("input")({clip:"rect(0 0 0 0)",clipPath:"inset(50%)",height:1,overflow:"hidden",position:"absolute",bottom:0,left:0,whiteSpace:"nowrap",width:1}),Vo=me("div")(({theme:e,$dragging:o})=>({border:"2px dashed",borderColor:o?e.palette.primary.main:"#ccc",backgroundColor:o?e.palette.action.hover:"transparent",borderRadius:8,padding:"1.5rem",textAlign:"center",transition:"border-color 0.2s",cursor:"pointer"}));function zo(p){var a=p,{onFileInput:e,label:o="Upload files",multiple:r,accept:n,useDropzone:i}=a,t=x(a,["onFileInput","label","multiple","accept","useDropzone"]);var d;let[l,f]=Ao(!1),c=Ho(Mo,u(s({variant:"contained",component:"label","aria-label":"File upload button",onKeyDown:m=>{var P;(m.key==="Enter"||m.key===" ")&&(m.preventDefault(),(P=document.getElementById("file-input"))==null||P.click())}},t),{startIcon:(d=t.startIcon)!=null?d:H(Eo,{}),children:[o,H(Wo,{id:"file-input",type:"file",onChange:m=>{var g;let P=m.target;e(Array.from((g=P.files)!=null?g:[])),P.value=""},multiple:r,accept:n==null?void 0:n.join(","),disabled:t.disabled})]}));return i?H(Vo,{$dragging:l,onDragOver:m=>{m.preventDefault(),!t.disabled&&f(!0)},onDragLeave:m=>{m.preventDefault(),f(!1)},onDrop:m=>{var g;if(m.preventDefault(),f(!1),t.disabled)return;let P=Array.from((g=m.dataTransfer.files)!=null?g:[]);e(P)},children:c}):c}var U=zo;import Uo from"@mui/icons-material/Delete";import _o from"@mui/material/Box";import $o from"@mui/material/IconButton";import Xo from"@mui/material/List";import Go from"@mui/material/ListItem";import Jo from"@mui/material/ListItemText";import{jsx as w,jsxs as qo}from"react/jsx-runtime";function Ko(n){var i=n,{files:e,setFiles:o}=i,r=x(i,["files","setFiles"]);function t(a){o(l=>[...l,...a])}let p=u(s({},r),{onFileInput:t});return(p==null?void 0:p.multiple)===void 0&&(p.multiple=!0),qo(_o,{children:[w(U,s({},p)),w(Xo,{children:e.map(a=>w(Go,{secondaryAction:w($o,{"aria-label":"Delete",edge:"end",onClick:()=>{o(l=>l.filter(f=>f!==a))},children:w(Uo,{})}),children:w(Jo,{primary:a.name})},a.name))})]})}var Yo=Ko;import Zo from"@mui/material/Box";import Qo from"@mui/material/Popover";import{useId as jo,useState as er}from"react";import{jsx as ce,jsxs as tr}from"react/jsx-runtime";function or({icon:e,onOpen:o,onClose:r,iconProps:n,children:i}){let[t,p]=er(null),a=!!t,l=jo();function f(d){p(d.currentTarget),o&&o()}function c(){p(null),r&&r()}return tr(Zo,{children:[ce(e,s({"aria-owns":a?l:void 0,"aria-haspopup":"true",onMouseEnter:f,onMouseLeave:c},n)),ce(Qo,{id:l,sx:{pointerEvents:"none"},open:a,anchorEl:t,anchorOrigin:{vertical:"bottom",horizontal:"left"},transformOrigin:{vertical:"top",horizontal:"left"},onClose:c,disableRestoreFocus:!0,children:i})]})}var rr=or;import nr from"@mui/material/Link";import{Link as ir}from"react-router-dom";import{jsx as pr}from"react/jsx-runtime";function ar(n){var i=n,{to:e,children:o}=i,r=x(i,["to","children"]);return pr(nr,u(s({component:ir,to:e},r),{children:o}))}var _=ar;import sr from"@mui/material/ListItemButton";import{jsx as mr}from"react/jsx-runtime";function dr(r){var n=r,{children:e}=n,o=x(n,["children"]);return mr(sr,u(s({component:_},o),{children:e}))}var lr=dr;import cr from"@mui/material/CircularProgress";import{jsx as $,jsxs as xr}from"react/jsx-runtime";function ur(a){var l=a,{children:e,errorComponent:o,undefinedComponent:r,nullComponent:n,nullableComponent:i,loadingComponent:t=$(cr,{})}=l,p=x(l,["children","errorComponent","undefinedComponent","nullComponent","nullableComponent","loadingComponent"]);return xr(F,u(s({loadingComponent:t},p),{children:[$(V,{errorComponent:o,undefinedComponent:r,nullComponent:n,nullableComponent:i}),$(W,{children:e})]}))}var fr=ur;import Pr from"@mui/material/BottomNavigation";import yr from"@mui/material/BottomNavigationAction";import vr from"@mui/material/Box";import hr from"@mui/material/Paper";import{useState as gr}from"react";import{Link as Lr}from"react-router-dom";import{Fragment as wr,jsx as R,jsxs as Cr}from"react/jsx-runtime";function Sr({children:e,navItems:o}){let[r,n]=gr("");return Cr(wr,{children:[R(vr,{sx:{paddingBottom:7},children:e}),R(hr,{sx:{position:"fixed",bottom:0,left:0,right:0},children:R(Pr,{showLabels:!0,value:r,onChange:(i,t)=>{n(t)},children:o.map(i=>R(yr,u(s({},i),{component:Lr}),i.value))})})]})}var br=Sr;import{truncate as ue}from"@alextheman/utility";import Ir from"@mui/icons-material/ChevronLeft";import kr from"@mui/icons-material/ChevronRight";import Nr from"@mui/icons-material/Menu";import Tr from"@mui/material/AppBar";import fe from"@mui/material/Box";import Br from"@mui/material/CssBaseline";import xe from"@mui/material/Divider";import Or from"@mui/material/Drawer";import Pe from"@mui/material/IconButton";import Dr from"@mui/material/List";import Rr from"@mui/material/ListItem";import Er from"@mui/material/ListItemButton";import Mr from"@mui/material/ListItemIcon";import Ar from"@mui/material/ListItemText";import{styled as G,useTheme as Fr}from"@mui/material/styles";import Wr from"@mui/material/Toolbar";import X from"@mui/material/Typography";import{Fragment as Vr,useState as zr}from"react";import{Link as Hr,useLocation as Ur}from"react-router-dom";import{jsx as y,jsxs as b}from"react/jsx-runtime";var E=240;function ye(e){return{width:E,transition:e.transitions.create("width",{easing:e.transitions.easing.sharp,duration:e.transitions.duration.enteringScreen}),overflowX:"hidden"}}function ve(e){return{transition:e.transitions.create("width",{easing:e.transitions.easing.sharp,duration:e.transitions.duration.leavingScreen}),overflowX:"hidden",width:`calc(${e.spacing(7)} + 1px)`,[e.breakpoints.up("sm")]:{width:`calc(${e.spacing(8)} + 1px)`}}}var he=G("div")(({theme:e})=>s({display:"flex",alignItems:"center",justifyContent:"flex-end",padding:e.spacing(0,1)},e.mixins.toolbar)),_r=G(Tr,{shouldForwardProp:e=>e!=="open"})(({theme:e})=>({zIndex:e.zIndex.drawer+1,transition:e.transitions.create(["width","margin"],{easing:e.transitions.easing.sharp,duration:e.transitions.duration.leavingScreen}),variants:[{props:({open:o})=>o,style:{marginLeft:E,width:`calc(100% - ${E}px)`,transition:e.transitions.create(["width","margin"],{easing:e.transitions.easing.sharp,duration:e.transitions.duration.enteringScreen})}}]})),$r=G(Or,{shouldForwardProp:e=>e!=="open"})(({theme:e})=>({width:E,flexShrink:0,whiteSpace:"nowrap",boxSizing:"border-box",variants:[{props:({open:o})=>o,style:u(s({},ye(e)),{"& .MuiDrawer-paper":ye(e)})},{props:({open:o})=>!o,style:u(s({},ve(e)),{"& .MuiDrawer-paper":ve(e)})}]}));function Xr({title:e,navItems:o,children:r,headerElements:n}){let i=Fr(),[t,p]=zr(!0),a=Ur();function l(){p(!0)}function f(){p(!1)}return b(fe,{sx:{display:"flex"},children:[y(Br,{}),y(_r,{position:"fixed",open:t,children:b(Wr,{children:[y(Pe,{color:"inherit","aria-label":"open drawer",onClick:l,edge:"start",sx:[{marginRight:5},t&&{display:"none"}],children:y(Nr,{})}),y(X,{variant:"h6",noWrap:!0,component:"div",children:e}),n]})}),b($r,{variant:"permanent",open:t,children:[y(he,{children:y(Pe,{onClick:f,children:i.direction==="rtl"?y(kr,{}):y(Ir,{})})}),y(xe,{}),o.map(c=>b(Vr,{children:[b(Dr,{children:[y(X,{variant:t?"h5":"h6",paddingLeft:t?2:1,children:t?c.category:ue(c.category,4)}),c.options.map(d=>y(Rr,{disablePadding:!0,sx:{display:"block"},children:b(Er,{sx:[{minHeight:48,px:2.5},t?{justifyContent:"initial"}:{justifyContent:"center"}],component:Hr,to:d.to,selected:a.pathname===d.to,children:[y(Mr,{sx:[{minWidth:0,justifyContent:"center"},t?{mr:3}:{mr:"auto"}],children:d.icon?d.icon:t?null:y(X,{children:ue(d.label,4)})}),y(Ar,{primary:d.label,sx:[t?{opacity:1}:{opacity:0}]})]})},d.to))]}),y(xe,{})]},c.category))]}),b(fe,{component:"main",sx:{flexGrow:1,p:3},children:[y(he,{}),r]})]})}var Gr=Xr;import Jr from"@mui/material/Typography";import{Fragment as qr,jsx as ge}from"react/jsx-runtime";function Kr(n){var i=n,{text:e,sx:o}=i,r=x(i,["text","sx"]);return ge(qr,{children:e.split(`
2
+ `).map((t,p)=>ge(Jr,u(s({sx:s({margin:1},o)},r),{children:t}),p))})}var Yr=Kr;import J from"@mui/material/Box";import Le from"@mui/material/Typography";import{stripIndent as Zr}from"common-tags";import{LiveEditor as Qr,LiveError as jr,LivePreview as et,LiveProvider as ot}from"react-live";import{jsx as L,jsxs as Se}from"react/jsx-runtime";function rt(n){var i=n,{code:e,previewStyles:o}=i,r=x(i,["code","previewStyles"]);let{mode:t}=k(),p={backgroundColor:t==="dark"?"black":"white",border:.3,borderRadius:1,padding:2,borderColor:"darkgray"},a=o?s(s({},p),o):s({},p);return L(J,{sx:{borderRadius:1,border:.5,padding:2},children:Se(ot,u(s({},r),{code:Zr(e!=null?e:""),children:[L(Le,{variant:"h5",children:"Code"}),L(J,{sx:{border:.3,borderRadius:.3,borderColor:"darkgray"},children:L(Qr,{})}),L("br",{}),L(Le,{variant:"h5",children:"Result"}),Se(J,{sx:a,children:[L(et,{}),L(jr,{})]})]}))})}var tt=rt;import{fillArray as nt}from"@alextheman/utility";import it from"@mui/material/Skeleton";import at from"@mui/material/TableCell";import pt from"@mui/material/TableRow";import{jsx as K}from"react/jsx-runtime";function st({columns:e}){return K(pt,{children:nt(o=>K(at,{children:K(it,{})},o),e)})}var dt=st;import lt from"@mui/material/Button";import{useFormContext as mt}from"react-hook-form";import{jsx as ft}from"react/jsx-runtime";function ct(n){var i=n,{disableClean:e,label:o}=i,r=x(i,["disableClean","label"]);let{formState:{disabled:t,isDirty:p,isSubmitting:a}}=mt();return ft(lt,u(s({color:"primary",disabled:r.disabled||e&&!p||t,loading:a,type:"submit",variant:"contained"},r),{children:o}))}var ut=ct;import be from"@mui/material/Box";import{styled as xt}from"@mui/material/styles";import Pt from"@mui/material/Switch";import{jsx as T}from"react/jsx-runtime";var yt=xt(Pt)(()=>({padding:8,"& .MuiSwitch-track":{borderRadius:11,"&::before, &::after":{content:'""',position:"absolute",top:"50%",transform:"translateY(-50%)",fontSize:16,width:28,height:28}}}));function vt(t){var p=t,{checkedIcon:e,checkedIconStyles:o,uncheckedIcon:r,uncheckedIconStyles:n}=p,i=x(p,["checkedIcon","checkedIconStyles","uncheckedIcon","uncheckedIconStyles"]);let a={borderRadius:"50%",borderColor:"white",backgroundColor:"white",display:"flex",alignItems:"center",justifyContent:"center",padding:.25},l={color:"black",maxWidth:16.5,maxHeight:16.5};return T(yt,s({checkedIcon:T(be,{sx:a,children:T(e,{style:s(s({},l),o)})}),icon:T(be,{sx:a,children:T(r,{style:s(s({},l),n)})})},i))}var ht=vt;import{useCallback as we,useEffect as gt,useState as Lt}from"react";function St(e){let[o,r]=Lt(()=>{let t=window.location.hash.replace("#","");return e&&t===""?e:t}),n=we(()=>{let t=window.location.hash.replace("#","");r(e&&t===""?e:t)},[r,e]);gt(()=>(window.addEventListener("hashchange",n),()=>{window.removeEventListener("hashchange",n)}),[n]);let i=we(t=>{let p=typeof t=="function"?t(o):t;p!==o&&(window.location.hash=p)},[o]);return[o,i]}var bt=St;export{Me as CollapsableItem,go as DarkModeToggle,No as DropdownMenu,Do as ExternalLink,U as FileInput,Yo as FileInputList,Fo as FileType,rr as IconWithPopover,_ as InternalLink,lr as ListItemInternalLink,fr as Loader,W as LoaderData,V as LoaderError,F as LoaderProvider,Ze as ModeProvider,br as NavigationBottom,Gr as NavigationDrawer,Yr as PopoverText,tt as ReactPlayground,to as ScreenSizeProvider,dt as SkeletonRow,uo as SnackbarProvider,ut as SubmitButton,ht as SwitchWithIcons,bt as useHash,C as useLoader,k as useMode,oo as useScreenSize,mo as useSnackbar};
3
3
  //# sourceMappingURL=index.js.map