@xyo-network/react-app-settings 2.78.0 → 2.78.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/index.ts","../../src/components/DarkModeIconButton.tsx","../../src/contexts/AppSettings/Context.ts","../../src/contexts/AppSettings/Slug.ts","../../src/contexts/AppSettings/appSettingDefault.ts","../../src/contexts/AppSettings/Provider.tsx","../../src/contexts/AppSettings/StorageBase.ts","../../src/contexts/AppSettings/Storage.ts","../../src/contexts/AppSettings/useAppSettings.ts","../../src/components/Developer.tsx"],"sourcesContent":["export * from './components'\nexport * from './contexts'\nexport * from './WebAppNavigationType'\n","import { DarkModeRounded as DarkModeRoundedIcon, LightModeRounded as LightModeRoundedIcon } from '@mui/icons-material'\nimport { IconButton, IconButtonProps } from '@mui/material'\n\nimport { useAppSettings } from '../contexts'\n\nexport const DarkModeIconButton: React.FC<IconButtonProps> = (props) => {\n const { darkMode, enableDarkMode } = useAppSettings()\n\n const handleDarkModeChange = () => {\n enableDarkMode?.(!darkMode)\n }\n\n return (\n <IconButton onClick={handleDarkModeChange} {...props}>\n {darkMode ?\n <DarkModeRoundedIcon />\n : <LightModeRoundedIcon />}\n </IconButton>\n )\n}\n","import { createContext } from 'react'\n\nimport { WebAppNavigationType } from '../../WebAppNavigationType'\nimport { appSettingDefault } from './appSettingDefault'\n\nexport interface AppSettingsContextProps {\n changeMaxAccounts?: (value: number) => void\n changeNavigationCollapsed?: (value: boolean) => void\n changeNavigationType?: (value: WebAppNavigationType) => void\n changeSeedPhrase?: (value: string) => void\n darkMode?: boolean\n developerMode?: boolean\n enableDarkMode?: (value: boolean) => void\n enableDeveloperMode?: (value: boolean) => void\n maxAccounts?: number\n navigationCollapsed?: boolean\n navigationType?: WebAppNavigationType\n seedPhrase?: string\n}\n\nexport const AppSettingsContext = createContext<AppSettingsContextProps>(appSettingDefault())\n","export enum AppSettingSlug {\n DarkMode = 'darkmode',\n Developer = 'developer',\n NavigationType = 'navigationType',\n NavigationCollapsed = 'navigationCollapsed',\n SeedPhrase = 'seedPhrase',\n MaxAccounts = 'maxAccounts',\n}\n","import { AppSettingSlug } from './Slug'\n\nexport const appSettingDefault = (): Record<string, unknown> => {\n return {\n [AppSettingSlug.DarkMode]: false,\n [AppSettingSlug.Developer]: false,\n [AppSettingSlug.NavigationType]: 'menu',\n [AppSettingSlug.NavigationCollapsed]: false,\n [AppSettingSlug.SeedPhrase]: '',\n [AppSettingSlug.MaxAccounts]: 1,\n }\n}\n","import { WithChildren } from '@xylabs/react-shared'\nimport { ProviderProps, useState } from 'react'\n\nimport { WebAppNavigationType } from '../../WebAppNavigationType'\nimport { AppSettingsContext, AppSettingsContextProps } from './Context'\nimport { AppSettingsStorage } from './Storage'\n\nexport interface AppSettingsProviderProps<T extends AppSettingsContextProps = AppSettingsContextProps> extends ProviderProps<T> {\n storage?: AppSettingsStorage\n}\n\nexport const AppSettingsProvider: React.FC<WithChildren<AppSettingsProviderProps>> = ({\n storage = new AppSettingsStorage(),\n value,\n children,\n ...props\n}) => {\n const [developerMode, setDeveloperMode] = useState(storage.developerMode)\n const [darkMode, setDarkMode] = useState(storage.darkMode)\n const [navigationType, setNavigationType] = useState(storage.navigationType)\n const [navigationCollapsed, setNavigationCollapsed] = useState(storage.navigationCollapsed)\n const [seedPhrase, setSeedPhrase] = useState(storage.seedPhrase)\n const [maxAccounts, setMaxAccounts] = useState(storage.maxAccounts)\n\n const enableDeveloperMode = (value: boolean) => {\n storage.developerMode = value\n setDeveloperMode(storage.developerMode)\n }\n\n const enableDarkMode = (value: boolean) => {\n storage.darkMode = value\n setDarkMode(storage.darkMode)\n }\n\n const changeNavigationType = (value: WebAppNavigationType) => {\n storage.navigationType = value\n setNavigationType(value)\n }\n\n const changeNavigationCollapsed = (value: boolean) => {\n storage.navigationCollapsed = value\n setNavigationCollapsed(value)\n }\n\n const changeSeedPhrase = (value: string) => {\n storage.seedPhrase = value\n setSeedPhrase(value)\n }\n\n const changeMaxAccounts = (value: number) => {\n storage.maxAccounts = value\n setMaxAccounts(value)\n }\n\n return (\n <AppSettingsContext.Provider\n value={{\n changeMaxAccounts,\n changeNavigationCollapsed,\n changeNavigationType,\n changeSeedPhrase,\n darkMode,\n developerMode,\n enableDarkMode,\n enableDeveloperMode,\n maxAccounts,\n navigationCollapsed,\n navigationType,\n seedPhrase,\n\n ...value,\n }}\n {...props}\n >\n {children}\n </AppSettingsContext.Provider>\n )\n}\n","import { assertEx } from '@xylabs/assert'\nimport { assertDefinedEx } from '@xyo-network/react-shared'\n\nexport class AppSettingsStorageBase {\n private defaults: Record<string, unknown>\n private prefix: string\n constructor(prefix = 'AppSettings', defaults?: Record<string, unknown>) {\n this.prefix = prefix\n this.defaults = defaults ?? {}\n }\n\n getBoolean(name: string): boolean {\n const storedValue = localStorage.getItem(`${this.prefix}|${name}`)\n if (!storedValue) {\n assertEx(typeof this.defaults[name] === 'boolean', () => 'Default value is not boolean')\n const defaultValue = this.defaults[name] as boolean\n assertEx(defaultValue !== undefined, () => `Missing Default for ${name}`)\n return defaultValue\n }\n return storedValue !== 'false'\n }\n\n getNumber(name: string): number {\n const storedValue = localStorage.getItem(`${this.prefix}|${name}`)\n if (!storedValue) {\n assertEx(typeof this.defaults[name] === 'number', () => 'Default value is not a number')\n const defaultValue = this.defaults[name] as number\n assertEx(defaultValue !== undefined, () => `Missing Default for ${name}`)\n return defaultValue\n }\n return Number.parseFloat(storedValue)\n }\n\n getObject<T>(name: string): T {\n const storedValue = localStorage.getItem(`${this.prefix}|${name}`)\n const parsedStoredValue = storedValue ? JSON.parse(storedValue) : null\n if (!parsedStoredValue) {\n assertEx(typeof this.defaults[name] === 'object', () => 'Default value is not object')\n return assertEx(this.defaults[name] as T, () => `Missing Default for ${name}`)\n }\n return parsedStoredValue as T\n }\n\n getString(name: string) {\n const storedValue = localStorage.getItem(`${this.prefix}|${name}`)\n if (!storedValue) {\n assertDefinedEx(typeof this.defaults[name] === 'string', 'Default value is not string')\n const defaultValue = this.defaults[name] as string\n assertEx(defaultValue !== undefined, () => `Missing Default for ${name}`)\n return defaultValue\n }\n return storedValue\n }\n\n getStringArray(name: string) {\n const storedValue = localStorage.getItem(`${this.prefix}|${name}`)?.split(',')\n if (!storedValue) {\n assertDefinedEx(Array.isArray(this.defaults[name]), 'Default value is not array')\n const defaultValue = this.defaults[name] as string[]\n assertEx(defaultValue !== undefined, () => `Missing Default for ${name}`)\n return defaultValue\n }\n return storedValue\n }\n\n setBoolean(name: string, value: boolean) {\n localStorage.setItem(`${this.prefix}|${name}`, JSON.stringify(value))\n }\n\n setNumber(name: string, value: number) {\n localStorage.setItem(`${this.prefix}|${name}`, JSON.stringify(value))\n }\n\n setObject<T>(name: string, value: T) {\n localStorage.setItem(`${this.prefix}|${name}`, JSON.stringify(value))\n }\n\n setString(name: string, value: string) {\n localStorage.setItem(`${this.prefix}|${name}`, value)\n }\n\n setStringArray(name: string, value: string[]) {\n localStorage.setItem(`${this.prefix}|${name}`, value.join(','))\n }\n}\n","import { WebAppNavigationType } from '../../WebAppNavigationType'\nimport { appSettingDefault } from './appSettingDefault'\nimport { AppSettingSlug } from './Slug'\nimport { AppSettingsStorageBase } from './StorageBase'\n\nexport class AppSettingsStorage extends AppSettingsStorageBase {\n constructor(prefix = 'AppSettings', defaults?: Record<string, unknown>) {\n super(prefix, { ...appSettingDefault(), ...defaults })\n }\n\n get darkMode() {\n return this.getBoolean(AppSettingSlug.DarkMode)\n }\n\n set darkMode(value: boolean) {\n this.setBoolean(AppSettingSlug.DarkMode, value)\n }\n\n get developerMode() {\n return this.getBoolean(AppSettingSlug.Developer)\n }\n\n set developerMode(value: boolean) {\n this.setBoolean(AppSettingSlug.Developer, value)\n }\n\n get maxAccounts() {\n return this.getNumber(AppSettingSlug.MaxAccounts)\n }\n\n set maxAccounts(value: number) {\n this.setNumber(AppSettingSlug.MaxAccounts, value)\n }\n\n get navigationCollapsed() {\n return this.getBoolean(AppSettingSlug.NavigationCollapsed)\n }\n\n set navigationCollapsed(value: boolean) {\n this.setBoolean(AppSettingSlug.NavigationCollapsed, value)\n }\n\n get navigationType() {\n return this.getString(AppSettingSlug.NavigationType) as WebAppNavigationType\n }\n\n set navigationType(value: WebAppNavigationType) {\n this.setString(AppSettingSlug.NavigationType, value)\n }\n\n get seedPhrase() {\n return this.getString(AppSettingSlug.SeedPhrase)\n }\n\n set seedPhrase(value: string) {\n this.setString(AppSettingSlug.SeedPhrase, value)\n }\n}\n","import { useContext } from 'react'\n\nimport { AppSettingsContext } from './Context'\n\nexport const useAppSettings = () => {\n return useContext(AppSettingsContext)\n}\n","import { ReactElement } from 'react'\n\nimport { useAppSettings } from '../contexts'\n\nexport const Developer: React.FC<{ children: ReactElement }> = ({ children = null }) => {\n const { developerMode } = useAppSettings()\n\n return developerMode ? children : null\n}\n"],"mappings":"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","names":["src_exports","__export","AppSettingSlug","AppSettingsContext","AppSettingsProvider","AppSettingsStorage","AppSettingsStorageBase","DarkModeIconButton","Developer","useAppSettings","__toCommonJS","import_icons_material","import_material","import_react","AppSettingSlug","appSettingDefault","AppSettingsContext","appSettingDefault","import_react","import_assert","import_react_shared","AppSettingsStorageBase","prefix","defaults","name","storedValue","defaultValue","parsedStoredValue","_a","value","AppSettingsStorage","AppSettingsStorageBase","prefix","defaults","appSettingDefault","value","import_jsx_runtime","AppSettingsProvider","storage","AppSettingsStorage","value","children","props","developerMode","setDeveloperMode","darkMode","setDarkMode","navigationType","setNavigationType","navigationCollapsed","setNavigationCollapsed","seedPhrase","setSeedPhrase","maxAccounts","setMaxAccounts","enableDeveloperMode","enableDarkMode","changeNavigationType","changeNavigationCollapsed","changeSeedPhrase","changeMaxAccounts","AppSettingsContext","import_react","useAppSettings","AppSettingsContext","import_jsx_runtime","DarkModeIconButton","props","darkMode","enableDarkMode","useAppSettings","DarkModeRoundedIcon","LightModeRoundedIcon","Developer","children","developerMode","useAppSettings"]}
1
+ {"version":3,"sources":["../../src/index.ts","../../src/components/DarkModeIconButton.tsx","../../src/contexts/AppSettings/Context.ts","../../src/contexts/AppSettings/Slug.ts","../../src/contexts/AppSettings/appSettingDefault.ts","../../src/contexts/AppSettings/Provider.tsx","../../src/contexts/AppSettings/StorageBase.ts","../../src/contexts/AppSettings/Storage.ts","../../src/contexts/AppSettings/useAppSettings.ts","../../src/components/Developer.tsx"],"sourcesContent":["export * from './components'\nexport * from './contexts'\nexport * from './WebAppNavigationType'\n","import { DarkModeRounded as DarkModeRoundedIcon, LightModeRounded as LightModeRoundedIcon } from '@mui/icons-material'\nimport { IconButton, IconButtonProps } from '@mui/material'\n\nimport { useAppSettings } from '../contexts'\n\nexport const DarkModeIconButton: React.FC<IconButtonProps> = (props) => {\n const { darkMode, enableDarkMode } = useAppSettings()\n\n const handleDarkModeChange = () => {\n enableDarkMode?.(!darkMode)\n }\n\n return (\n <IconButton onClick={handleDarkModeChange} {...props}>\n {darkMode ?\n <DarkModeRoundedIcon />\n : <LightModeRoundedIcon />}\n </IconButton>\n )\n}\n","import { createContext } from 'react'\n\nimport { WebAppNavigationType } from '../../WebAppNavigationType'\nimport { appSettingDefault } from './appSettingDefault'\n\nexport interface AppSettingsContextProps {\n changeMaxAccounts?: (value: number) => void\n changeNavigationCollapsed?: (value: boolean) => void\n changeNavigationType?: (value: WebAppNavigationType) => void\n changeSeedPhrase?: (value: string) => void\n darkMode?: boolean\n developerMode?: boolean\n enableDarkMode?: (value: boolean) => void\n enableDeveloperMode?: (value: boolean) => void\n maxAccounts?: number\n navigationCollapsed?: boolean\n navigationType?: WebAppNavigationType\n seedPhrase?: string\n}\n\nexport const AppSettingsContext = createContext<AppSettingsContextProps>(appSettingDefault())\n","export enum AppSettingSlug {\n DarkMode = 'darkmode',\n Developer = 'developer',\n NavigationType = 'navigationType',\n NavigationCollapsed = 'navigationCollapsed',\n SeedPhrase = 'seedPhrase',\n MaxAccounts = 'maxAccounts',\n}\n","import { AppSettingSlug } from './Slug'\n\nexport const appSettingDefault = (): Record<string, unknown> => {\n return {\n [AppSettingSlug.DarkMode]: false,\n [AppSettingSlug.Developer]: false,\n [AppSettingSlug.NavigationType]: 'menu',\n [AppSettingSlug.NavigationCollapsed]: false,\n [AppSettingSlug.SeedPhrase]: '',\n [AppSettingSlug.MaxAccounts]: 1,\n }\n}\n","import { WithChildren } from '@xylabs/react-shared'\nimport { ProviderProps, useState } from 'react'\n\nimport { WebAppNavigationType } from '../../WebAppNavigationType'\nimport { AppSettingsContext, AppSettingsContextProps } from './Context'\nimport { AppSettingsStorage } from './Storage'\n\nexport interface AppSettingsProviderProps<T extends AppSettingsContextProps = AppSettingsContextProps> extends ProviderProps<T> {\n storage?: AppSettingsStorage\n}\n\nexport const AppSettingsProvider: React.FC<WithChildren<AppSettingsProviderProps>> = ({\n storage = new AppSettingsStorage(),\n value,\n children,\n ...props\n}) => {\n const [developerMode, setDeveloperMode] = useState(storage.developerMode)\n const [darkMode, setDarkMode] = useState(storage.darkMode)\n const [navigationType, setNavigationType] = useState(storage.navigationType)\n const [navigationCollapsed, setNavigationCollapsed] = useState(storage.navigationCollapsed)\n const [seedPhrase, setSeedPhrase] = useState(storage.seedPhrase)\n const [maxAccounts, setMaxAccounts] = useState(storage.maxAccounts)\n\n const enableDeveloperMode = (value: boolean) => {\n storage.developerMode = value\n setDeveloperMode(storage.developerMode)\n }\n\n const enableDarkMode = (value: boolean) => {\n storage.darkMode = value\n setDarkMode(storage.darkMode)\n }\n\n const changeNavigationType = (value: WebAppNavigationType) => {\n storage.navigationType = value\n setNavigationType(value)\n }\n\n const changeNavigationCollapsed = (value: boolean) => {\n storage.navigationCollapsed = value\n setNavigationCollapsed(value)\n }\n\n const changeSeedPhrase = (value: string) => {\n storage.seedPhrase = value\n setSeedPhrase(value)\n }\n\n const changeMaxAccounts = (value: number) => {\n storage.maxAccounts = value\n setMaxAccounts(value)\n }\n\n return (\n <AppSettingsContext.Provider\n value={{\n changeMaxAccounts,\n changeNavigationCollapsed,\n changeNavigationType,\n changeSeedPhrase,\n darkMode,\n developerMode,\n enableDarkMode,\n enableDeveloperMode,\n maxAccounts,\n navigationCollapsed,\n navigationType,\n seedPhrase,\n\n ...value,\n }}\n {...props}\n >\n {children}\n </AppSettingsContext.Provider>\n )\n}\n","import { assertEx } from '@xylabs/assert'\nimport { assertDefinedEx } from '@xyo-network/react-shared'\n\nexport class AppSettingsStorageBase {\n private defaults: Record<string, unknown>\n private prefix: string\n constructor(prefix = 'AppSettings', defaults?: Record<string, unknown>) {\n this.prefix = prefix\n this.defaults = defaults ?? {}\n }\n\n getBoolean(name: string): boolean {\n const storedValue = localStorage.getItem(`${this.prefix}|${name}`)\n if (!storedValue) {\n assertEx(typeof this.defaults[name] === 'boolean', () => 'Default value is not boolean')\n const defaultValue = this.defaults[name] as boolean\n assertEx(defaultValue !== undefined, () => `Missing Default for ${name}`)\n return defaultValue\n }\n return storedValue !== 'false'\n }\n\n getNumber(name: string): number {\n const storedValue = localStorage.getItem(`${this.prefix}|${name}`)\n if (!storedValue) {\n assertEx(typeof this.defaults[name] === 'number', () => 'Default value is not a number')\n const defaultValue = this.defaults[name] as number\n assertEx(defaultValue !== undefined, () => `Missing Default for ${name}`)\n return defaultValue\n }\n return Number.parseFloat(storedValue)\n }\n\n getObject<T>(name: string): T {\n const storedValue = localStorage.getItem(`${this.prefix}|${name}`)\n const parsedStoredValue = storedValue ? JSON.parse(storedValue) : null\n if (!parsedStoredValue) {\n assertEx(typeof this.defaults[name] === 'object', () => 'Default value is not object')\n return assertEx(this.defaults[name] as T, () => `Missing Default for ${name}`)\n }\n return parsedStoredValue as T\n }\n\n getString(name: string) {\n const storedValue = localStorage.getItem(`${this.prefix}|${name}`)\n if (!storedValue) {\n assertDefinedEx(typeof this.defaults[name] === 'string', 'Default value is not string')\n const defaultValue = this.defaults[name] as string\n assertEx(defaultValue !== undefined, () => `Missing Default for ${name}`)\n return defaultValue\n }\n return storedValue\n }\n\n getStringArray(name: string) {\n const storedValue = localStorage.getItem(`${this.prefix}|${name}`)?.split(',')\n if (!storedValue) {\n assertDefinedEx(Array.isArray(this.defaults[name]), 'Default value is not array')\n const defaultValue = this.defaults[name] as string[]\n assertEx(defaultValue !== undefined, () => `Missing Default for ${name}`)\n return defaultValue\n }\n return storedValue\n }\n\n setBoolean(name: string, value: boolean) {\n localStorage.setItem(`${this.prefix}|${name}`, JSON.stringify(value))\n }\n\n setNumber(name: string, value: number) {\n localStorage.setItem(`${this.prefix}|${name}`, JSON.stringify(value))\n }\n\n setObject<T>(name: string, value: T) {\n localStorage.setItem(`${this.prefix}|${name}`, JSON.stringify(value))\n }\n\n setString(name: string, value: string) {\n localStorage.setItem(`${this.prefix}|${name}`, value)\n }\n\n setStringArray(name: string, value: string[]) {\n localStorage.setItem(`${this.prefix}|${name}`, value.join(','))\n }\n}\n","import { WebAppNavigationType } from '../../WebAppNavigationType'\nimport { appSettingDefault } from './appSettingDefault'\nimport { AppSettingSlug } from './Slug'\nimport { AppSettingsStorageBase } from './StorageBase'\n\nexport class AppSettingsStorage extends AppSettingsStorageBase {\n constructor(prefix = 'AppSettings', defaults?: Record<string, unknown>) {\n super(prefix, { ...appSettingDefault(), ...defaults })\n }\n\n get darkMode() {\n return this.getBoolean(AppSettingSlug.DarkMode)\n }\n\n set darkMode(value: boolean) {\n this.setBoolean(AppSettingSlug.DarkMode, value)\n }\n\n get developerMode() {\n return this.getBoolean(AppSettingSlug.Developer)\n }\n\n set developerMode(value: boolean) {\n this.setBoolean(AppSettingSlug.Developer, value)\n }\n\n get maxAccounts() {\n return this.getNumber(AppSettingSlug.MaxAccounts)\n }\n\n set maxAccounts(value: number) {\n this.setNumber(AppSettingSlug.MaxAccounts, value)\n }\n\n get navigationCollapsed() {\n return this.getBoolean(AppSettingSlug.NavigationCollapsed)\n }\n\n set navigationCollapsed(value: boolean) {\n this.setBoolean(AppSettingSlug.NavigationCollapsed, value)\n }\n\n get navigationType() {\n return this.getString(AppSettingSlug.NavigationType) as WebAppNavigationType\n }\n\n set navigationType(value: WebAppNavigationType) {\n this.setString(AppSettingSlug.NavigationType, value)\n }\n\n get seedPhrase() {\n return this.getString(AppSettingSlug.SeedPhrase)\n }\n\n set seedPhrase(value: string) {\n this.setString(AppSettingSlug.SeedPhrase, value)\n }\n}\n","import { useContext } from 'react'\n\nimport { AppSettingsContext } from './Context'\n\nexport const useAppSettings = () => {\n return useContext(AppSettingsContext)\n}\n","import { ReactElement } from 'react'\n\nimport { useAppSettings } from '../contexts'\n\nexport const Developer: React.FC<{ children: ReactElement }> = ({ children = null }) => {\n const { developerMode } = useAppSettings()\n\n return developerMode ? children : null\n}\n"],"mappings":"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","names":["AppSettingSlug","import_react","value","import_react","import_jsx_runtime","DarkModeRoundedIcon","LightModeRoundedIcon"]}
@@ -1,2 +1,250 @@
1
- import{DarkModeRounded as O,LightModeRounded as w}from"@mui/icons-material";import{IconButton as E}from"@mui/material";import{createContext as R}from"react";var B=(a=>(a.DarkMode="darkmode",a.Developer="developer",a.NavigationType="navigationType",a.NavigationCollapsed="navigationCollapsed",a.SeedPhrase="seedPhrase",a.MaxAccounts="maxAccounts",a))(B||{});var l=()=>({darkmode:!1,developer:!1,navigationType:"menu",navigationCollapsed:!1,seedPhrase:"",maxAccounts:1});var d=R(l());import{useState as i}from"react";import{assertEx as s}from"@xylabs/assert";import{assertDefinedEx as v}from"@xyo-network/react-shared";var g=class{defaults;prefix;constructor(e="AppSettings",t){this.prefix=e,this.defaults=t??{}}getBoolean(e){let t=localStorage.getItem(`${this.prefix}|${e}`);if(!t){s(typeof this.defaults[e]=="boolean",()=>"Default value is not boolean");let n=this.defaults[e];return s(n!==void 0,()=>`Missing Default for ${e}`),n}return t!=="false"}getNumber(e){let t=localStorage.getItem(`${this.prefix}|${e}`);if(!t){s(typeof this.defaults[e]=="number",()=>"Default value is not a number");let n=this.defaults[e];return s(n!==void 0,()=>`Missing Default for ${e}`),n}return Number.parseFloat(t)}getObject(e){let t=localStorage.getItem(`${this.prefix}|${e}`),n=t?JSON.parse(t):null;return n||(s(typeof this.defaults[e]=="object",()=>"Default value is not object"),s(this.defaults[e],()=>`Missing Default for ${e}`))}getString(e){let t=localStorage.getItem(`${this.prefix}|${e}`);if(!t){v(typeof this.defaults[e]=="string","Default value is not string");let n=this.defaults[e];return s(n!==void 0,()=>`Missing Default for ${e}`),n}return t}getStringArray(e){var n;let t=(n=localStorage.getItem(`${this.prefix}|${e}`))==null?void 0:n.split(",");if(!t){v(Array.isArray(this.defaults[e]),"Default value is not array");let p=this.defaults[e];return s(p!==void 0,()=>`Missing Default for ${e}`),p}return t}setBoolean(e,t){localStorage.setItem(`${this.prefix}|${e}`,JSON.stringify(t))}setNumber(e,t){localStorage.setItem(`${this.prefix}|${e}`,JSON.stringify(t))}setObject(e,t){localStorage.setItem(`${this.prefix}|${e}`,JSON.stringify(t))}setString(e,t){localStorage.setItem(`${this.prefix}|${e}`,t)}setStringArray(e,t){localStorage.setItem(`${this.prefix}|${e}`,t.join(","))}};var u=class extends g{constructor(e="AppSettings",t){super(e,{...l(),...t})}get darkMode(){return this.getBoolean("darkmode")}set darkMode(e){this.setBoolean("darkmode",e)}get developerMode(){return this.getBoolean("developer")}set developerMode(e){this.setBoolean("developer",e)}get maxAccounts(){return this.getNumber("maxAccounts")}set maxAccounts(e){this.setNumber("maxAccounts",e)}get navigationCollapsed(){return this.getBoolean("navigationCollapsed")}set navigationCollapsed(e){this.setBoolean("navigationCollapsed",e)}get navigationType(){return this.getString("navigationType")}set navigationType(e){this.setString("navigationType",e)}get seedPhrase(){return this.getString("seedPhrase")}set seedPhrase(e){this.setString("seedPhrase",e)}};import{jsx as V}from"react/jsx-runtime";var te=({storage:o=new u,value:e,children:t,...n})=>{let[p,h]=i(o.developerMode),[a,m]=i(o.darkMode),[x,b]=i(o.navigationType),[S,M]=i(o.navigationCollapsed),[A,y]=i(o.seedPhrase),[C,D]=i(o.maxAccounts),P=r=>{o.developerMode=r,h(o.developerMode)},N=r=>{o.darkMode=r,m(o.darkMode)},T=r=>{o.navigationType=r,b(r)},k=r=>{o.navigationCollapsed=r,M(r)},$=r=>{o.seedPhrase=r,y(r)},I=r=>{o.maxAccounts=r,D(r)};return V(d.Provider,{value:{changeMaxAccounts:I,changeNavigationCollapsed:k,changeNavigationType:T,changeSeedPhrase:$,darkMode:a,developerMode:p,enableDarkMode:N,enableDeveloperMode:P,maxAccounts:C,navigationCollapsed:S,navigationType:x,seedPhrase:A,...e},...n,children:t})};import{useContext as W}from"react";var c=()=>W(d);import{jsx as f}from"react/jsx-runtime";var ge=o=>{let{darkMode:e,enableDarkMode:t}=c();return f(E,{onClick:()=>{t==null||t(!e)},...o,children:e?f(O,{}):f(w,{})})};var ve=({children:o=null})=>{let{developerMode:e}=c();return e?o:null};export{B as AppSettingSlug,d as AppSettingsContext,te as AppSettingsProvider,u as AppSettingsStorage,g as AppSettingsStorageBase,ge as DarkModeIconButton,ve as Developer,c as useAppSettings};
1
+ // src/components/DarkModeIconButton.tsx
2
+ import { DarkModeRounded as DarkModeRoundedIcon, LightModeRounded as LightModeRoundedIcon } from "@mui/icons-material";
3
+ import { IconButton } from "@mui/material";
4
+
5
+ // src/contexts/AppSettings/Context.ts
6
+ import { createContext } from "react";
7
+
8
+ // src/contexts/AppSettings/Slug.ts
9
+ var AppSettingSlug = /* @__PURE__ */ ((AppSettingSlug2) => {
10
+ AppSettingSlug2["DarkMode"] = "darkmode";
11
+ AppSettingSlug2["Developer"] = "developer";
12
+ AppSettingSlug2["NavigationType"] = "navigationType";
13
+ AppSettingSlug2["NavigationCollapsed"] = "navigationCollapsed";
14
+ AppSettingSlug2["SeedPhrase"] = "seedPhrase";
15
+ AppSettingSlug2["MaxAccounts"] = "maxAccounts";
16
+ return AppSettingSlug2;
17
+ })(AppSettingSlug || {});
18
+
19
+ // src/contexts/AppSettings/appSettingDefault.ts
20
+ var appSettingDefault = () => {
21
+ return {
22
+ ["darkmode" /* DarkMode */]: false,
23
+ ["developer" /* Developer */]: false,
24
+ ["navigationType" /* NavigationType */]: "menu",
25
+ ["navigationCollapsed" /* NavigationCollapsed */]: false,
26
+ ["seedPhrase" /* SeedPhrase */]: "",
27
+ ["maxAccounts" /* MaxAccounts */]: 1
28
+ };
29
+ };
30
+
31
+ // src/contexts/AppSettings/Context.ts
32
+ var AppSettingsContext = createContext(appSettingDefault());
33
+
34
+ // src/contexts/AppSettings/Provider.tsx
35
+ import { useState } from "react";
36
+
37
+ // src/contexts/AppSettings/StorageBase.ts
38
+ import { assertEx } from "@xylabs/assert";
39
+ import { assertDefinedEx } from "@xyo-network/react-shared";
40
+ var AppSettingsStorageBase = class {
41
+ defaults;
42
+ prefix;
43
+ constructor(prefix = "AppSettings", defaults) {
44
+ this.prefix = prefix;
45
+ this.defaults = defaults ?? {};
46
+ }
47
+ getBoolean(name) {
48
+ const storedValue = localStorage.getItem(`${this.prefix}|${name}`);
49
+ if (!storedValue) {
50
+ assertEx(typeof this.defaults[name] === "boolean", () => "Default value is not boolean");
51
+ const defaultValue = this.defaults[name];
52
+ assertEx(defaultValue !== void 0, () => `Missing Default for ${name}`);
53
+ return defaultValue;
54
+ }
55
+ return storedValue !== "false";
56
+ }
57
+ getNumber(name) {
58
+ const storedValue = localStorage.getItem(`${this.prefix}|${name}`);
59
+ if (!storedValue) {
60
+ assertEx(typeof this.defaults[name] === "number", () => "Default value is not a number");
61
+ const defaultValue = this.defaults[name];
62
+ assertEx(defaultValue !== void 0, () => `Missing Default for ${name}`);
63
+ return defaultValue;
64
+ }
65
+ return Number.parseFloat(storedValue);
66
+ }
67
+ getObject(name) {
68
+ const storedValue = localStorage.getItem(`${this.prefix}|${name}`);
69
+ const parsedStoredValue = storedValue ? JSON.parse(storedValue) : null;
70
+ if (!parsedStoredValue) {
71
+ assertEx(typeof this.defaults[name] === "object", () => "Default value is not object");
72
+ return assertEx(this.defaults[name], () => `Missing Default for ${name}`);
73
+ }
74
+ return parsedStoredValue;
75
+ }
76
+ getString(name) {
77
+ const storedValue = localStorage.getItem(`${this.prefix}|${name}`);
78
+ if (!storedValue) {
79
+ assertDefinedEx(typeof this.defaults[name] === "string", "Default value is not string");
80
+ const defaultValue = this.defaults[name];
81
+ assertEx(defaultValue !== void 0, () => `Missing Default for ${name}`);
82
+ return defaultValue;
83
+ }
84
+ return storedValue;
85
+ }
86
+ getStringArray(name) {
87
+ var _a;
88
+ const storedValue = (_a = localStorage.getItem(`${this.prefix}|${name}`)) == null ? void 0 : _a.split(",");
89
+ if (!storedValue) {
90
+ assertDefinedEx(Array.isArray(this.defaults[name]), "Default value is not array");
91
+ const defaultValue = this.defaults[name];
92
+ assertEx(defaultValue !== void 0, () => `Missing Default for ${name}`);
93
+ return defaultValue;
94
+ }
95
+ return storedValue;
96
+ }
97
+ setBoolean(name, value) {
98
+ localStorage.setItem(`${this.prefix}|${name}`, JSON.stringify(value));
99
+ }
100
+ setNumber(name, value) {
101
+ localStorage.setItem(`${this.prefix}|${name}`, JSON.stringify(value));
102
+ }
103
+ setObject(name, value) {
104
+ localStorage.setItem(`${this.prefix}|${name}`, JSON.stringify(value));
105
+ }
106
+ setString(name, value) {
107
+ localStorage.setItem(`${this.prefix}|${name}`, value);
108
+ }
109
+ setStringArray(name, value) {
110
+ localStorage.setItem(`${this.prefix}|${name}`, value.join(","));
111
+ }
112
+ };
113
+
114
+ // src/contexts/AppSettings/Storage.ts
115
+ var AppSettingsStorage = class extends AppSettingsStorageBase {
116
+ constructor(prefix = "AppSettings", defaults) {
117
+ super(prefix, { ...appSettingDefault(), ...defaults });
118
+ }
119
+ get darkMode() {
120
+ return this.getBoolean("darkmode" /* DarkMode */);
121
+ }
122
+ set darkMode(value) {
123
+ this.setBoolean("darkmode" /* DarkMode */, value);
124
+ }
125
+ get developerMode() {
126
+ return this.getBoolean("developer" /* Developer */);
127
+ }
128
+ set developerMode(value) {
129
+ this.setBoolean("developer" /* Developer */, value);
130
+ }
131
+ get maxAccounts() {
132
+ return this.getNumber("maxAccounts" /* MaxAccounts */);
133
+ }
134
+ set maxAccounts(value) {
135
+ this.setNumber("maxAccounts" /* MaxAccounts */, value);
136
+ }
137
+ get navigationCollapsed() {
138
+ return this.getBoolean("navigationCollapsed" /* NavigationCollapsed */);
139
+ }
140
+ set navigationCollapsed(value) {
141
+ this.setBoolean("navigationCollapsed" /* NavigationCollapsed */, value);
142
+ }
143
+ get navigationType() {
144
+ return this.getString("navigationType" /* NavigationType */);
145
+ }
146
+ set navigationType(value) {
147
+ this.setString("navigationType" /* NavigationType */, value);
148
+ }
149
+ get seedPhrase() {
150
+ return this.getString("seedPhrase" /* SeedPhrase */);
151
+ }
152
+ set seedPhrase(value) {
153
+ this.setString("seedPhrase" /* SeedPhrase */, value);
154
+ }
155
+ };
156
+
157
+ // src/contexts/AppSettings/Provider.tsx
158
+ import { jsx } from "react/jsx-runtime";
159
+ var AppSettingsProvider = ({
160
+ storage = new AppSettingsStorage(),
161
+ value,
162
+ children,
163
+ ...props
164
+ }) => {
165
+ const [developerMode, setDeveloperMode] = useState(storage.developerMode);
166
+ const [darkMode, setDarkMode] = useState(storage.darkMode);
167
+ const [navigationType, setNavigationType] = useState(storage.navigationType);
168
+ const [navigationCollapsed, setNavigationCollapsed] = useState(storage.navigationCollapsed);
169
+ const [seedPhrase, setSeedPhrase] = useState(storage.seedPhrase);
170
+ const [maxAccounts, setMaxAccounts] = useState(storage.maxAccounts);
171
+ const enableDeveloperMode = (value2) => {
172
+ storage.developerMode = value2;
173
+ setDeveloperMode(storage.developerMode);
174
+ };
175
+ const enableDarkMode = (value2) => {
176
+ storage.darkMode = value2;
177
+ setDarkMode(storage.darkMode);
178
+ };
179
+ const changeNavigationType = (value2) => {
180
+ storage.navigationType = value2;
181
+ setNavigationType(value2);
182
+ };
183
+ const changeNavigationCollapsed = (value2) => {
184
+ storage.navigationCollapsed = value2;
185
+ setNavigationCollapsed(value2);
186
+ };
187
+ const changeSeedPhrase = (value2) => {
188
+ storage.seedPhrase = value2;
189
+ setSeedPhrase(value2);
190
+ };
191
+ const changeMaxAccounts = (value2) => {
192
+ storage.maxAccounts = value2;
193
+ setMaxAccounts(value2);
194
+ };
195
+ return /* @__PURE__ */ jsx(
196
+ AppSettingsContext.Provider,
197
+ {
198
+ value: {
199
+ changeMaxAccounts,
200
+ changeNavigationCollapsed,
201
+ changeNavigationType,
202
+ changeSeedPhrase,
203
+ darkMode,
204
+ developerMode,
205
+ enableDarkMode,
206
+ enableDeveloperMode,
207
+ maxAccounts,
208
+ navigationCollapsed,
209
+ navigationType,
210
+ seedPhrase,
211
+ ...value
212
+ },
213
+ ...props,
214
+ children
215
+ }
216
+ );
217
+ };
218
+
219
+ // src/contexts/AppSettings/useAppSettings.ts
220
+ import { useContext } from "react";
221
+ var useAppSettings = () => {
222
+ return useContext(AppSettingsContext);
223
+ };
224
+
225
+ // src/components/DarkModeIconButton.tsx
226
+ import { jsx as jsx2 } from "react/jsx-runtime";
227
+ var DarkModeIconButton = (props) => {
228
+ const { darkMode, enableDarkMode } = useAppSettings();
229
+ const handleDarkModeChange = () => {
230
+ enableDarkMode == null ? void 0 : enableDarkMode(!darkMode);
231
+ };
232
+ return /* @__PURE__ */ jsx2(IconButton, { onClick: handleDarkModeChange, ...props, children: darkMode ? /* @__PURE__ */ jsx2(DarkModeRoundedIcon, {}) : /* @__PURE__ */ jsx2(LightModeRoundedIcon, {}) });
233
+ };
234
+
235
+ // src/components/Developer.tsx
236
+ var Developer = ({ children = null }) => {
237
+ const { developerMode } = useAppSettings();
238
+ return developerMode ? children : null;
239
+ };
240
+ export {
241
+ AppSettingSlug,
242
+ AppSettingsContext,
243
+ AppSettingsProvider,
244
+ AppSettingsStorage,
245
+ AppSettingsStorageBase,
246
+ DarkModeIconButton,
247
+ Developer,
248
+ useAppSettings
249
+ };
2
250
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/components/DarkModeIconButton.tsx","../../src/contexts/AppSettings/Context.ts","../../src/contexts/AppSettings/Slug.ts","../../src/contexts/AppSettings/appSettingDefault.ts","../../src/contexts/AppSettings/Provider.tsx","../../src/contexts/AppSettings/StorageBase.ts","../../src/contexts/AppSettings/Storage.ts","../../src/contexts/AppSettings/useAppSettings.ts","../../src/components/Developer.tsx"],"sourcesContent":["import { DarkModeRounded as DarkModeRoundedIcon, LightModeRounded as LightModeRoundedIcon } from '@mui/icons-material'\nimport { IconButton, IconButtonProps } from '@mui/material'\n\nimport { useAppSettings } from '../contexts'\n\nexport const DarkModeIconButton: React.FC<IconButtonProps> = (props) => {\n const { darkMode, enableDarkMode } = useAppSettings()\n\n const handleDarkModeChange = () => {\n enableDarkMode?.(!darkMode)\n }\n\n return (\n <IconButton onClick={handleDarkModeChange} {...props}>\n {darkMode ?\n <DarkModeRoundedIcon />\n : <LightModeRoundedIcon />}\n </IconButton>\n )\n}\n","import { createContext } from 'react'\n\nimport { WebAppNavigationType } from '../../WebAppNavigationType'\nimport { appSettingDefault } from './appSettingDefault'\n\nexport interface AppSettingsContextProps {\n changeMaxAccounts?: (value: number) => void\n changeNavigationCollapsed?: (value: boolean) => void\n changeNavigationType?: (value: WebAppNavigationType) => void\n changeSeedPhrase?: (value: string) => void\n darkMode?: boolean\n developerMode?: boolean\n enableDarkMode?: (value: boolean) => void\n enableDeveloperMode?: (value: boolean) => void\n maxAccounts?: number\n navigationCollapsed?: boolean\n navigationType?: WebAppNavigationType\n seedPhrase?: string\n}\n\nexport const AppSettingsContext = createContext<AppSettingsContextProps>(appSettingDefault())\n","export enum AppSettingSlug {\n DarkMode = 'darkmode',\n Developer = 'developer',\n NavigationType = 'navigationType',\n NavigationCollapsed = 'navigationCollapsed',\n SeedPhrase = 'seedPhrase',\n MaxAccounts = 'maxAccounts',\n}\n","import { AppSettingSlug } from './Slug'\n\nexport const appSettingDefault = (): Record<string, unknown> => {\n return {\n [AppSettingSlug.DarkMode]: false,\n [AppSettingSlug.Developer]: false,\n [AppSettingSlug.NavigationType]: 'menu',\n [AppSettingSlug.NavigationCollapsed]: false,\n [AppSettingSlug.SeedPhrase]: '',\n [AppSettingSlug.MaxAccounts]: 1,\n }\n}\n","import { WithChildren } from '@xylabs/react-shared'\nimport { ProviderProps, useState } from 'react'\n\nimport { WebAppNavigationType } from '../../WebAppNavigationType'\nimport { AppSettingsContext, AppSettingsContextProps } from './Context'\nimport { AppSettingsStorage } from './Storage'\n\nexport interface AppSettingsProviderProps<T extends AppSettingsContextProps = AppSettingsContextProps> extends ProviderProps<T> {\n storage?: AppSettingsStorage\n}\n\nexport const AppSettingsProvider: React.FC<WithChildren<AppSettingsProviderProps>> = ({\n storage = new AppSettingsStorage(),\n value,\n children,\n ...props\n}) => {\n const [developerMode, setDeveloperMode] = useState(storage.developerMode)\n const [darkMode, setDarkMode] = useState(storage.darkMode)\n const [navigationType, setNavigationType] = useState(storage.navigationType)\n const [navigationCollapsed, setNavigationCollapsed] = useState(storage.navigationCollapsed)\n const [seedPhrase, setSeedPhrase] = useState(storage.seedPhrase)\n const [maxAccounts, setMaxAccounts] = useState(storage.maxAccounts)\n\n const enableDeveloperMode = (value: boolean) => {\n storage.developerMode = value\n setDeveloperMode(storage.developerMode)\n }\n\n const enableDarkMode = (value: boolean) => {\n storage.darkMode = value\n setDarkMode(storage.darkMode)\n }\n\n const changeNavigationType = (value: WebAppNavigationType) => {\n storage.navigationType = value\n setNavigationType(value)\n }\n\n const changeNavigationCollapsed = (value: boolean) => {\n storage.navigationCollapsed = value\n setNavigationCollapsed(value)\n }\n\n const changeSeedPhrase = (value: string) => {\n storage.seedPhrase = value\n setSeedPhrase(value)\n }\n\n const changeMaxAccounts = (value: number) => {\n storage.maxAccounts = value\n setMaxAccounts(value)\n }\n\n return (\n <AppSettingsContext.Provider\n value={{\n changeMaxAccounts,\n changeNavigationCollapsed,\n changeNavigationType,\n changeSeedPhrase,\n darkMode,\n developerMode,\n enableDarkMode,\n enableDeveloperMode,\n maxAccounts,\n navigationCollapsed,\n navigationType,\n seedPhrase,\n\n ...value,\n }}\n {...props}\n >\n {children}\n </AppSettingsContext.Provider>\n )\n}\n","import { assertEx } from '@xylabs/assert'\nimport { assertDefinedEx } from '@xyo-network/react-shared'\n\nexport class AppSettingsStorageBase {\n private defaults: Record<string, unknown>\n private prefix: string\n constructor(prefix = 'AppSettings', defaults?: Record<string, unknown>) {\n this.prefix = prefix\n this.defaults = defaults ?? {}\n }\n\n getBoolean(name: string): boolean {\n const storedValue = localStorage.getItem(`${this.prefix}|${name}`)\n if (!storedValue) {\n assertEx(typeof this.defaults[name] === 'boolean', () => 'Default value is not boolean')\n const defaultValue = this.defaults[name] as boolean\n assertEx(defaultValue !== undefined, () => `Missing Default for ${name}`)\n return defaultValue\n }\n return storedValue !== 'false'\n }\n\n getNumber(name: string): number {\n const storedValue = localStorage.getItem(`${this.prefix}|${name}`)\n if (!storedValue) {\n assertEx(typeof this.defaults[name] === 'number', () => 'Default value is not a number')\n const defaultValue = this.defaults[name] as number\n assertEx(defaultValue !== undefined, () => `Missing Default for ${name}`)\n return defaultValue\n }\n return Number.parseFloat(storedValue)\n }\n\n getObject<T>(name: string): T {\n const storedValue = localStorage.getItem(`${this.prefix}|${name}`)\n const parsedStoredValue = storedValue ? JSON.parse(storedValue) : null\n if (!parsedStoredValue) {\n assertEx(typeof this.defaults[name] === 'object', () => 'Default value is not object')\n return assertEx(this.defaults[name] as T, () => `Missing Default for ${name}`)\n }\n return parsedStoredValue as T\n }\n\n getString(name: string) {\n const storedValue = localStorage.getItem(`${this.prefix}|${name}`)\n if (!storedValue) {\n assertDefinedEx(typeof this.defaults[name] === 'string', 'Default value is not string')\n const defaultValue = this.defaults[name] as string\n assertEx(defaultValue !== undefined, () => `Missing Default for ${name}`)\n return defaultValue\n }\n return storedValue\n }\n\n getStringArray(name: string) {\n const storedValue = localStorage.getItem(`${this.prefix}|${name}`)?.split(',')\n if (!storedValue) {\n assertDefinedEx(Array.isArray(this.defaults[name]), 'Default value is not array')\n const defaultValue = this.defaults[name] as string[]\n assertEx(defaultValue !== undefined, () => `Missing Default for ${name}`)\n return defaultValue\n }\n return storedValue\n }\n\n setBoolean(name: string, value: boolean) {\n localStorage.setItem(`${this.prefix}|${name}`, JSON.stringify(value))\n }\n\n setNumber(name: string, value: number) {\n localStorage.setItem(`${this.prefix}|${name}`, JSON.stringify(value))\n }\n\n setObject<T>(name: string, value: T) {\n localStorage.setItem(`${this.prefix}|${name}`, JSON.stringify(value))\n }\n\n setString(name: string, value: string) {\n localStorage.setItem(`${this.prefix}|${name}`, value)\n }\n\n setStringArray(name: string, value: string[]) {\n localStorage.setItem(`${this.prefix}|${name}`, value.join(','))\n }\n}\n","import { WebAppNavigationType } from '../../WebAppNavigationType'\nimport { appSettingDefault } from './appSettingDefault'\nimport { AppSettingSlug } from './Slug'\nimport { AppSettingsStorageBase } from './StorageBase'\n\nexport class AppSettingsStorage extends AppSettingsStorageBase {\n constructor(prefix = 'AppSettings', defaults?: Record<string, unknown>) {\n super(prefix, { ...appSettingDefault(), ...defaults })\n }\n\n get darkMode() {\n return this.getBoolean(AppSettingSlug.DarkMode)\n }\n\n set darkMode(value: boolean) {\n this.setBoolean(AppSettingSlug.DarkMode, value)\n }\n\n get developerMode() {\n return this.getBoolean(AppSettingSlug.Developer)\n }\n\n set developerMode(value: boolean) {\n this.setBoolean(AppSettingSlug.Developer, value)\n }\n\n get maxAccounts() {\n return this.getNumber(AppSettingSlug.MaxAccounts)\n }\n\n set maxAccounts(value: number) {\n this.setNumber(AppSettingSlug.MaxAccounts, value)\n }\n\n get navigationCollapsed() {\n return this.getBoolean(AppSettingSlug.NavigationCollapsed)\n }\n\n set navigationCollapsed(value: boolean) {\n this.setBoolean(AppSettingSlug.NavigationCollapsed, value)\n }\n\n get navigationType() {\n return this.getString(AppSettingSlug.NavigationType) as WebAppNavigationType\n }\n\n set navigationType(value: WebAppNavigationType) {\n this.setString(AppSettingSlug.NavigationType, value)\n }\n\n get seedPhrase() {\n return this.getString(AppSettingSlug.SeedPhrase)\n }\n\n set seedPhrase(value: string) {\n this.setString(AppSettingSlug.SeedPhrase, value)\n }\n}\n","import { useContext } from 'react'\n\nimport { AppSettingsContext } from './Context'\n\nexport const useAppSettings = () => {\n return useContext(AppSettingsContext)\n}\n","import { ReactElement } from 'react'\n\nimport { useAppSettings } from '../contexts'\n\nexport const Developer: React.FC<{ children: ReactElement }> = ({ children = null }) => {\n const { developerMode } = useAppSettings()\n\n return developerMode ? children : null\n}\n"],"mappings":"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","names":["DarkModeRoundedIcon","LightModeRoundedIcon","IconButton","createContext","AppSettingSlug","appSettingDefault","AppSettingsContext","createContext","appSettingDefault","useState","assertEx","assertDefinedEx","AppSettingsStorageBase","prefix","defaults","name","storedValue","defaultValue","parsedStoredValue","_a","value","AppSettingsStorage","AppSettingsStorageBase","prefix","defaults","appSettingDefault","value","jsx","AppSettingsProvider","storage","AppSettingsStorage","value","children","props","developerMode","setDeveloperMode","useState","darkMode","setDarkMode","navigationType","setNavigationType","navigationCollapsed","setNavigationCollapsed","seedPhrase","setSeedPhrase","maxAccounts","setMaxAccounts","enableDeveloperMode","enableDarkMode","changeNavigationType","changeNavigationCollapsed","changeSeedPhrase","changeMaxAccounts","AppSettingsContext","useContext","useAppSettings","useContext","AppSettingsContext","jsx","DarkModeIconButton","props","darkMode","enableDarkMode","useAppSettings","IconButton","DarkModeRoundedIcon","LightModeRoundedIcon","Developer","children","developerMode","useAppSettings"]}
1
+ {"version":3,"sources":["../../src/components/DarkModeIconButton.tsx","../../src/contexts/AppSettings/Context.ts","../../src/contexts/AppSettings/Slug.ts","../../src/contexts/AppSettings/appSettingDefault.ts","../../src/contexts/AppSettings/Provider.tsx","../../src/contexts/AppSettings/StorageBase.ts","../../src/contexts/AppSettings/Storage.ts","../../src/contexts/AppSettings/useAppSettings.ts","../../src/components/Developer.tsx"],"sourcesContent":["import { DarkModeRounded as DarkModeRoundedIcon, LightModeRounded as LightModeRoundedIcon } from '@mui/icons-material'\nimport { IconButton, IconButtonProps } from '@mui/material'\n\nimport { useAppSettings } from '../contexts'\n\nexport const DarkModeIconButton: React.FC<IconButtonProps> = (props) => {\n const { darkMode, enableDarkMode } = useAppSettings()\n\n const handleDarkModeChange = () => {\n enableDarkMode?.(!darkMode)\n }\n\n return (\n <IconButton onClick={handleDarkModeChange} {...props}>\n {darkMode ?\n <DarkModeRoundedIcon />\n : <LightModeRoundedIcon />}\n </IconButton>\n )\n}\n","import { createContext } from 'react'\n\nimport { WebAppNavigationType } from '../../WebAppNavigationType'\nimport { appSettingDefault } from './appSettingDefault'\n\nexport interface AppSettingsContextProps {\n changeMaxAccounts?: (value: number) => void\n changeNavigationCollapsed?: (value: boolean) => void\n changeNavigationType?: (value: WebAppNavigationType) => void\n changeSeedPhrase?: (value: string) => void\n darkMode?: boolean\n developerMode?: boolean\n enableDarkMode?: (value: boolean) => void\n enableDeveloperMode?: (value: boolean) => void\n maxAccounts?: number\n navigationCollapsed?: boolean\n navigationType?: WebAppNavigationType\n seedPhrase?: string\n}\n\nexport const AppSettingsContext = createContext<AppSettingsContextProps>(appSettingDefault())\n","export enum AppSettingSlug {\n DarkMode = 'darkmode',\n Developer = 'developer',\n NavigationType = 'navigationType',\n NavigationCollapsed = 'navigationCollapsed',\n SeedPhrase = 'seedPhrase',\n MaxAccounts = 'maxAccounts',\n}\n","import { AppSettingSlug } from './Slug'\n\nexport const appSettingDefault = (): Record<string, unknown> => {\n return {\n [AppSettingSlug.DarkMode]: false,\n [AppSettingSlug.Developer]: false,\n [AppSettingSlug.NavigationType]: 'menu',\n [AppSettingSlug.NavigationCollapsed]: false,\n [AppSettingSlug.SeedPhrase]: '',\n [AppSettingSlug.MaxAccounts]: 1,\n }\n}\n","import { WithChildren } from '@xylabs/react-shared'\nimport { ProviderProps, useState } from 'react'\n\nimport { WebAppNavigationType } from '../../WebAppNavigationType'\nimport { AppSettingsContext, AppSettingsContextProps } from './Context'\nimport { AppSettingsStorage } from './Storage'\n\nexport interface AppSettingsProviderProps<T extends AppSettingsContextProps = AppSettingsContextProps> extends ProviderProps<T> {\n storage?: AppSettingsStorage\n}\n\nexport const AppSettingsProvider: React.FC<WithChildren<AppSettingsProviderProps>> = ({\n storage = new AppSettingsStorage(),\n value,\n children,\n ...props\n}) => {\n const [developerMode, setDeveloperMode] = useState(storage.developerMode)\n const [darkMode, setDarkMode] = useState(storage.darkMode)\n const [navigationType, setNavigationType] = useState(storage.navigationType)\n const [navigationCollapsed, setNavigationCollapsed] = useState(storage.navigationCollapsed)\n const [seedPhrase, setSeedPhrase] = useState(storage.seedPhrase)\n const [maxAccounts, setMaxAccounts] = useState(storage.maxAccounts)\n\n const enableDeveloperMode = (value: boolean) => {\n storage.developerMode = value\n setDeveloperMode(storage.developerMode)\n }\n\n const enableDarkMode = (value: boolean) => {\n storage.darkMode = value\n setDarkMode(storage.darkMode)\n }\n\n const changeNavigationType = (value: WebAppNavigationType) => {\n storage.navigationType = value\n setNavigationType(value)\n }\n\n const changeNavigationCollapsed = (value: boolean) => {\n storage.navigationCollapsed = value\n setNavigationCollapsed(value)\n }\n\n const changeSeedPhrase = (value: string) => {\n storage.seedPhrase = value\n setSeedPhrase(value)\n }\n\n const changeMaxAccounts = (value: number) => {\n storage.maxAccounts = value\n setMaxAccounts(value)\n }\n\n return (\n <AppSettingsContext.Provider\n value={{\n changeMaxAccounts,\n changeNavigationCollapsed,\n changeNavigationType,\n changeSeedPhrase,\n darkMode,\n developerMode,\n enableDarkMode,\n enableDeveloperMode,\n maxAccounts,\n navigationCollapsed,\n navigationType,\n seedPhrase,\n\n ...value,\n }}\n {...props}\n >\n {children}\n </AppSettingsContext.Provider>\n )\n}\n","import { assertEx } from '@xylabs/assert'\nimport { assertDefinedEx } from '@xyo-network/react-shared'\n\nexport class AppSettingsStorageBase {\n private defaults: Record<string, unknown>\n private prefix: string\n constructor(prefix = 'AppSettings', defaults?: Record<string, unknown>) {\n this.prefix = prefix\n this.defaults = defaults ?? {}\n }\n\n getBoolean(name: string): boolean {\n const storedValue = localStorage.getItem(`${this.prefix}|${name}`)\n if (!storedValue) {\n assertEx(typeof this.defaults[name] === 'boolean', () => 'Default value is not boolean')\n const defaultValue = this.defaults[name] as boolean\n assertEx(defaultValue !== undefined, () => `Missing Default for ${name}`)\n return defaultValue\n }\n return storedValue !== 'false'\n }\n\n getNumber(name: string): number {\n const storedValue = localStorage.getItem(`${this.prefix}|${name}`)\n if (!storedValue) {\n assertEx(typeof this.defaults[name] === 'number', () => 'Default value is not a number')\n const defaultValue = this.defaults[name] as number\n assertEx(defaultValue !== undefined, () => `Missing Default for ${name}`)\n return defaultValue\n }\n return Number.parseFloat(storedValue)\n }\n\n getObject<T>(name: string): T {\n const storedValue = localStorage.getItem(`${this.prefix}|${name}`)\n const parsedStoredValue = storedValue ? JSON.parse(storedValue) : null\n if (!parsedStoredValue) {\n assertEx(typeof this.defaults[name] === 'object', () => 'Default value is not object')\n return assertEx(this.defaults[name] as T, () => `Missing Default for ${name}`)\n }\n return parsedStoredValue as T\n }\n\n getString(name: string) {\n const storedValue = localStorage.getItem(`${this.prefix}|${name}`)\n if (!storedValue) {\n assertDefinedEx(typeof this.defaults[name] === 'string', 'Default value is not string')\n const defaultValue = this.defaults[name] as string\n assertEx(defaultValue !== undefined, () => `Missing Default for ${name}`)\n return defaultValue\n }\n return storedValue\n }\n\n getStringArray(name: string) {\n const storedValue = localStorage.getItem(`${this.prefix}|${name}`)?.split(',')\n if (!storedValue) {\n assertDefinedEx(Array.isArray(this.defaults[name]), 'Default value is not array')\n const defaultValue = this.defaults[name] as string[]\n assertEx(defaultValue !== undefined, () => `Missing Default for ${name}`)\n return defaultValue\n }\n return storedValue\n }\n\n setBoolean(name: string, value: boolean) {\n localStorage.setItem(`${this.prefix}|${name}`, JSON.stringify(value))\n }\n\n setNumber(name: string, value: number) {\n localStorage.setItem(`${this.prefix}|${name}`, JSON.stringify(value))\n }\n\n setObject<T>(name: string, value: T) {\n localStorage.setItem(`${this.prefix}|${name}`, JSON.stringify(value))\n }\n\n setString(name: string, value: string) {\n localStorage.setItem(`${this.prefix}|${name}`, value)\n }\n\n setStringArray(name: string, value: string[]) {\n localStorage.setItem(`${this.prefix}|${name}`, value.join(','))\n }\n}\n","import { WebAppNavigationType } from '../../WebAppNavigationType'\nimport { appSettingDefault } from './appSettingDefault'\nimport { AppSettingSlug } from './Slug'\nimport { AppSettingsStorageBase } from './StorageBase'\n\nexport class AppSettingsStorage extends AppSettingsStorageBase {\n constructor(prefix = 'AppSettings', defaults?: Record<string, unknown>) {\n super(prefix, { ...appSettingDefault(), ...defaults })\n }\n\n get darkMode() {\n return this.getBoolean(AppSettingSlug.DarkMode)\n }\n\n set darkMode(value: boolean) {\n this.setBoolean(AppSettingSlug.DarkMode, value)\n }\n\n get developerMode() {\n return this.getBoolean(AppSettingSlug.Developer)\n }\n\n set developerMode(value: boolean) {\n this.setBoolean(AppSettingSlug.Developer, value)\n }\n\n get maxAccounts() {\n return this.getNumber(AppSettingSlug.MaxAccounts)\n }\n\n set maxAccounts(value: number) {\n this.setNumber(AppSettingSlug.MaxAccounts, value)\n }\n\n get navigationCollapsed() {\n return this.getBoolean(AppSettingSlug.NavigationCollapsed)\n }\n\n set navigationCollapsed(value: boolean) {\n this.setBoolean(AppSettingSlug.NavigationCollapsed, value)\n }\n\n get navigationType() {\n return this.getString(AppSettingSlug.NavigationType) as WebAppNavigationType\n }\n\n set navigationType(value: WebAppNavigationType) {\n this.setString(AppSettingSlug.NavigationType, value)\n }\n\n get seedPhrase() {\n return this.getString(AppSettingSlug.SeedPhrase)\n }\n\n set seedPhrase(value: string) {\n this.setString(AppSettingSlug.SeedPhrase, value)\n }\n}\n","import { useContext } from 'react'\n\nimport { AppSettingsContext } from './Context'\n\nexport const useAppSettings = () => {\n return useContext(AppSettingsContext)\n}\n","import { ReactElement } from 'react'\n\nimport { useAppSettings } from '../contexts'\n\nexport const Developer: React.FC<{ children: ReactElement }> = ({ children = null }) => {\n const { developerMode } = useAppSettings()\n\n return developerMode ? children : null\n}\n"],"mappings":"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","names":["AppSettingSlug","value","jsx"]}
package/package.json CHANGED
@@ -10,9 +10,9 @@
10
10
  "url": "https://github.com/XYOracleNetwork/sdk-xyo-react-js/issues"
11
11
  },
12
12
  "dependencies": {
13
- "@xylabs/assert": "^3.5.1",
13
+ "@xylabs/assert": "^3.5.2",
14
14
  "@xylabs/react-shared": "^3.1.7",
15
- "@xyo-network/react-shared": "~2.78.0"
15
+ "@xyo-network/react-shared": "^2.78.2"
16
16
  },
17
17
  "peerDependencies": {
18
18
  "@mui/icons-material": "^5",
@@ -22,7 +22,7 @@
22
22
  "react-dom": "^18.2.0"
23
23
  },
24
24
  "devDependencies": {
25
- "@xylabs/ts-scripts-yarn3": "^3.11.8",
25
+ "@xylabs/ts-scripts-yarn3": "^3.11.12",
26
26
  "typescript": "^5.5.2"
27
27
  },
28
28
  "description": "Common React library for all XYO projects that use React",
@@ -76,6 +76,6 @@
76
76
  },
77
77
  "sideEffects": false,
78
78
  "types": "dist/browser/index.d.ts",
79
- "version": "2.78.0",
79
+ "version": "2.78.2",
80
80
  "type": "module"
81
81
  }