{"version":3,"sources":["../../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 { createContext } from 'react'\n\nimport type { WebAppNavigationType } from '../../WebAppNavigationType.ts'\nimport { appSettingDefault } from './appSettingDefault.ts'\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  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","import type { EnumValue } from '@xylabs/sdk-js'\nimport { Enum } from '@xylabs/sdk-js'\n\nexport const AppSettingSlug = Enum({\n  Developer: 'developer',\n  NavigationType: 'navigationType',\n  NavigationCollapsed: 'navigationCollapsed',\n  SeedPhrase: 'seedPhrase',\n  MaxAccounts: 'maxAccounts',\n})\n\ntype AppSettingSlug = EnumValue<typeof AppSettingSlug>\n","import { AppSettingSlug } from './Slug.ts'\n\nexport const appSettingDefault = (): Record<string, unknown> => {\n  return {\n    [AppSettingSlug.Developer]: false,\n    [AppSettingSlug.NavigationType]: 'menu',\n    [AppSettingSlug.NavigationCollapsed]: false,\n    [AppSettingSlug.SeedPhrase]: '',\n    [AppSettingSlug.MaxAccounts]: 1,\n  }\n}\n","import type { PropsWithChildren, ProviderProps } from 'react'\nimport React, { useMemo, useState } from 'react'\n\nimport type { WebAppNavigationType } from '../../WebAppNavigationType.ts'\nimport type { AppSettingsContextProps } from './Context.ts'\nimport { AppSettingsContext } from './Context.ts'\nimport { AppSettingsStorage } from './Storage.ts'\n\nexport interface AppSettingsProviderProps<T extends AppSettingsContextProps = AppSettingsContextProps> extends ProviderProps<T> {\n  storage?: AppSettingsStorage\n}\n\nexport const AppSettingsProvider: React.FC<PropsWithChildren<AppSettingsProviderProps>> = ({\n  storage,\n  value,\n  children,\n  ...props\n}) => {\n  const storageMemo = useMemo(() => storage ?? new AppSettingsStorage(), [storage])\n  const [developerMode, setDeveloperMode] = useState(storageMemo.developerMode)\n  const [navigationType, setNavigationType] = useState(storageMemo.navigationType)\n  const [navigationCollapsed, setNavigationCollapsed] = useState(storageMemo.navigationCollapsed)\n  const [seedPhrase, setSeedPhrase] = useState(storageMemo.seedPhrase)\n  const [maxAccounts, setMaxAccounts] = useState(storageMemo.maxAccounts)\n\n  const enableDeveloperMode = (value: boolean) => {\n    storageMemo.developerMode = value\n    setDeveloperMode(storageMemo.developerMode)\n  }\n\n  const changeNavigationType = (value: WebAppNavigationType) => {\n    storageMemo.navigationType = value\n    setNavigationType(value)\n  }\n\n  const changeNavigationCollapsed = (value: boolean) => {\n    storageMemo.navigationCollapsed = value\n    setNavigationCollapsed(value)\n  }\n\n  const changeSeedPhrase = (value: string) => {\n    storageMemo.seedPhrase = value\n    setSeedPhrase(value)\n  }\n\n  const changeMaxAccounts = (value: number) => {\n    storageMemo.maxAccounts = value\n    setMaxAccounts(value)\n  }\n\n  const providerValue = useMemo(() => {\n    return {\n      changeMaxAccounts,\n      changeNavigationCollapsed,\n      changeNavigationType,\n      changeSeedPhrase,\n      developerMode,\n      enableDeveloperMode,\n      maxAccounts,\n      navigationCollapsed,\n      navigationType,\n      seedPhrase,\n      ...value,\n    }\n  }, [changeMaxAccounts,\n    changeNavigationCollapsed,\n    changeNavigationType,\n    changeSeedPhrase,\n    developerMode,\n    enableDeveloperMode,\n    maxAccounts,\n    navigationCollapsed,\n    navigationType,\n    seedPhrase,\n    value])\n\n  return (\n    <AppSettingsContext\n      value={providerValue}\n      {...props}\n    >\n      {children}\n    </AppSettingsContext>\n  )\n}\n","import {\n  assertDefinedEx, assertEx, isString,\n} from '@xylabs/sdk-js'\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 (!isString(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 (!isString(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 = isString(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 (!isString(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 type { WebAppNavigationType } from '../../WebAppNavigationType.ts'\nimport { appSettingDefault } from './appSettingDefault.ts'\nimport { AppSettingSlug } from './Slug.ts'\nimport { AppSettingsStorageBase } from './StorageBase.ts'\n\nexport class AppSettingsStorage extends AppSettingsStorageBase {\n  constructor(prefix = 'AppSettings', defaults?: Record<string, unknown>) {\n    super(prefix, { ...appSettingDefault(), ...defaults })\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 { use } from 'react'\n\nimport { AppSettingsContext } from './Context.ts'\n\nexport const useAppSettings = () => {\n  return use(AppSettingsContext)\n}\n","import type { ReactElement } from 'react'\n\nimport { useAppSettings } from '../contexts/index.ts'\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":["value"]}