@unisat/wallet-state 1.0.5 → 1.1.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.
Files changed (99) hide show
  1. package/LICENSE +0 -5
  2. package/lib/index.d.mts +2012 -200
  3. package/lib/index.d.ts +2012 -200
  4. package/lib/index.js +6951 -570
  5. package/lib/index.js.map +1 -1
  6. package/lib/index.mjs +6754 -517
  7. package/lib/index.mjs.map +1 -1
  8. package/lib/types/index.d.mts +1 -1
  9. package/lib/types/index.d.ts +1 -1
  10. package/package.json +19 -15
  11. package/src/.DS_Store +0 -0
  12. package/src/context/ApprovalContext.tsx +27 -0
  13. package/src/context/DeviceContext.tsx +36 -0
  14. package/src/context/I18nContext.tsx +14 -172
  15. package/src/context/NavigationContext.tsx +305 -0
  16. package/src/context/PriceContext.tsx +2 -2
  17. package/src/context/StorageContext.tsx +393 -0
  18. package/src/context/ToolsContext.tsx +50 -0
  19. package/src/context/WalletContext.tsx +119 -108
  20. package/src/context/index.ts +17 -2
  21. package/src/hooks/accounts.ts +11 -5
  22. package/src/hooks/browser.ts +11 -0
  23. package/src/hooks/global.ts +170 -7
  24. package/src/hooks/index.ts +1 -2
  25. package/src/hooks/settings.ts +28 -37
  26. package/src/hooks/transactions.ts +28 -155
  27. package/src/hooks/ui.ts +232 -36
  28. package/src/index.ts +33 -24
  29. package/src/reducers/accounts.ts +19 -2
  30. package/src/reducers/browser.ts +223 -0
  31. package/src/reducers/global.ts +67 -1
  32. package/src/reducers/index.ts +1 -0
  33. package/src/reducers/transactions.ts +0 -9
  34. package/src/reducers/ui.ts +127 -8
  35. package/src/types/index.ts +1 -1
  36. package/src/ui-hooks/index.ts +107 -0
  37. package/src/ui-hooks/useActionOverviewSectionLogic.ts +150 -0
  38. package/src/ui-hooks/useAddressTypeScreenLogic.ts +160 -0
  39. package/src/ui-hooks/useAlkanesBalanceCardLogic.ts +41 -0
  40. package/src/ui-hooks/useAlkanesCollectionListLogic.ts +68 -0
  41. package/src/ui-hooks/useAlkanesListLogic.ts +69 -0
  42. package/src/ui-hooks/useAlkanesNFTListLogic.ts +42 -0
  43. package/src/ui-hooks/useAlkanesNFTScreenLogic.ts +45 -0
  44. package/src/ui-hooks/useAlkanesTokenScreenLogic.ts +130 -0
  45. package/src/ui-hooks/useAmountInputLogic.ts +80 -0
  46. package/src/ui-hooks/useAnnouncementCardLogic.ts +91 -0
  47. package/src/ui-hooks/useBRC20BalanceCardLogic.ts +115 -0
  48. package/src/ui-hooks/useBRC20InscribeTransferLogic.ts +398 -0
  49. package/src/ui-hooks/useBRC20ListLogic.ts +75 -0
  50. package/src/ui-hooks/useBRC20ProgListLogic.ts +77 -0
  51. package/src/ui-hooks/useBRC20SendScreenLogic.ts +411 -0
  52. package/src/ui-hooks/useBRC20SingleStepScreenLogic.ts +208 -0
  53. package/src/ui-hooks/useBRC20TokenScreenLogic.ts +469 -0
  54. package/src/ui-hooks/useBalanceCardLogic.ts +164 -0
  55. package/src/ui-hooks/useBtcDisplayLogic.ts +16 -0
  56. package/src/ui-hooks/useCAT20BalanceCardLogic.ts +35 -0
  57. package/src/ui-hooks/useCAT20ListLogic.ts +83 -0
  58. package/src/ui-hooks/useCAT20TokenScreenLogic.ts +122 -0
  59. package/src/ui-hooks/useCAT721ListLogic.ts +68 -0
  60. package/src/ui-hooks/useCAT721NFTScreenLogic.ts +37 -0
  61. package/src/ui-hooks/useCreatePasswordScreenLogic.ts +92 -0
  62. package/src/ui-hooks/useCreateWalletLogicImportWordsStep.ts +299 -0
  63. package/src/ui-hooks/useEditAccountNameScreenLogic.ts +71 -0
  64. package/src/ui-hooks/useEditContactScreenLogic.ts +162 -0
  65. package/src/ui-hooks/useEditWalletNameScreenLogic.ts +58 -0
  66. package/src/ui-hooks/useExportMnemonicsScreenLogic.ts +75 -0
  67. package/src/ui-hooks/useExportPrivateKeyScreenLogic.ts +64 -0
  68. package/src/ui-hooks/useFeeRateBarLogic.ts +303 -0
  69. package/src/ui-hooks/useInfiniteList.ts +85 -0
  70. package/src/ui-hooks/useInscriptionListLogic.ts +68 -0
  71. package/src/ui-hooks/useLockTimePageLogic.ts +43 -0
  72. package/src/ui-hooks/useNotificationsLogic.ts +115 -0
  73. package/src/ui-hooks/useOrdinalsInscriptionScreenLogic.ts +130 -0
  74. package/src/ui-hooks/useRunesBalanceCardLogic.ts +44 -0
  75. package/src/ui-hooks/useRunesListLogic.ts +74 -0
  76. package/src/ui-hooks/useRunesTokenScreenLogic.ts +149 -0
  77. package/src/ui-hooks/useSecurityCardLogic.ts +0 -0
  78. package/src/ui-hooks/useSendAlkanesNFTScreenLogic.ts +138 -0
  79. package/src/ui-hooks/useSendAlkanesScreenLogic.ts +192 -0
  80. package/src/ui-hooks/useSendCAT20ScreenLogic.ts +297 -0
  81. package/src/ui-hooks/useSendCAT721ScreenLogic.ts +205 -0
  82. package/src/ui-hooks/useSendOrdinalsInscriptionScreenLogic.ts +137 -0
  83. package/src/ui-hooks/useSendRunesScreenLogic.ts +172 -0
  84. package/src/ui-hooks/useSettingsTabScreenLogic.ts +211 -0
  85. package/src/ui-hooks/useSignMessageLogic.ts +302 -0
  86. package/src/ui-hooks/useSignPsbtLogic.ts +517 -0
  87. package/src/ui-hooks/useSplitOrdinalsInscriptionScreenLogic.ts +95 -0
  88. package/src/ui-hooks/useTxConfirmScreenLogic.ts +47 -0
  89. package/src/ui-hooks/useTxCreateScreenLogic.ts +161 -0
  90. package/src/ui-hooks/useTxFailScreenLogic.ts +26 -0
  91. package/src/ui-hooks/useTxSuccessScreenLogic.ts +33 -0
  92. package/src/updater/accounts.ts +11 -11
  93. package/src/utils/bitcoin-utils.ts +17 -8
  94. package/src/utils/eventBus.ts +2 -1
  95. package/src/utils/password-utils.ts +78 -0
  96. package/src/utils/ui-utils.ts +28 -0
  97. package/src/hooks/approval.ts +0 -72
  98. package/src/hooks/i18n.ts +0 -53
  99. package/src/utils/i18n.ts +0 -41
@@ -0,0 +1,137 @@
1
+ import { Inscription } from '@unisat/wallet-shared'
2
+ import { useEffect, useMemo, useState } from 'react'
3
+ import {
4
+ useFeeRateBar,
5
+ useFetchUtxosCallback,
6
+ useI18n,
7
+ useNavigation,
8
+ useOrdinalsTx,
9
+ usePrepareSendOrdinalsInscriptionCallback,
10
+ useTools,
11
+ useWallet,
12
+ } from '..'
13
+ import { getAddressUtxoDust, isValidAddress } from '../utils/bitcoin-utils'
14
+
15
+ export function useSendOrdinalsInscriptionScreenLogic() {
16
+ const [disabled, setDisabled] = useState(true)
17
+ const nav = useNavigation()
18
+
19
+ const { inscription } = nav.getRouteState<'SendOrdinalsInscriptionScreen'>()
20
+ const ordinalsTx = useOrdinalsTx()
21
+ const [toInfo, setToInfo] = useState({
22
+ address: ordinalsTx.toAddress,
23
+ domain: ordinalsTx.toDomain,
24
+ })
25
+ const { t } = useI18n()
26
+
27
+ const fetchBtcUtxos = useFetchUtxosCallback()
28
+ const tools = useTools()
29
+ useEffect(() => {
30
+ tools.showLoading(true)
31
+ fetchBtcUtxos().finally(() => {
32
+ tools.showLoading(false)
33
+ })
34
+ }, [])
35
+
36
+ const [error, setError] = useState('')
37
+ const prepareSendOrdinalsInscription = usePrepareSendOrdinalsInscriptionCallback()
38
+ const { feeRate } = useFeeRateBar()
39
+ const defaultOutputValue = inscription ? inscription.outputValue : 10000
40
+
41
+ const [outputValue, setOutputValue] = useState(defaultOutputValue)
42
+ const [inscriptions, setInscriptions] = useState<Inscription[]>([])
43
+
44
+ const wallet = useWallet()
45
+ useEffect(() => {
46
+ wallet.getInscriptionUtxoDetail(inscription.inscriptionId).then(v => {
47
+ setInscriptions(v.inscriptions)
48
+ })
49
+ }, [])
50
+
51
+ const minOutputValue = useMemo(() => {
52
+ if (toInfo.address) {
53
+ return getAddressUtxoDust(toInfo.address)
54
+ } else {
55
+ return 0
56
+ }
57
+ }, [toInfo.address])
58
+
59
+ useEffect(() => {
60
+ setDisabled(true)
61
+ setError('')
62
+
63
+ if (feeRate <= 0) {
64
+ setError(t('invalid_fee_rate'))
65
+ return
66
+ }
67
+
68
+ let dustUtxo = inscription.outputValue
69
+ try {
70
+ if (toInfo.address) {
71
+ dustUtxo = getAddressUtxoDust(toInfo.address)
72
+ }
73
+ } catch (e) {
74
+ // console.log(e);
75
+ }
76
+
77
+ const maxOffset = inscriptions.reduce((pre, cur) => {
78
+ return Math.max(pre, cur.offset)
79
+ }, 0)
80
+
81
+ const minOutputValue = Math.max(maxOffset + 1, dustUtxo)
82
+
83
+ if (outputValue < minOutputValue) {
84
+ setError(`${t('output_value_must_be_at_least')} ${minOutputValue}`)
85
+ return
86
+ }
87
+
88
+ if (!outputValue) {
89
+ return
90
+ }
91
+
92
+ if (!isValidAddress(toInfo.address)) {
93
+ return
94
+ }
95
+
96
+ setDisabled(false)
97
+ }, [toInfo, feeRate, outputValue, inscriptions])
98
+
99
+ const onAddressInputChange = val => {
100
+ setToInfo(val)
101
+ }
102
+
103
+ const onClickBack = () => {
104
+ nav.goBack()
105
+ }
106
+
107
+ const onClickNext = () => {
108
+ prepareSendOrdinalsInscription({
109
+ toAddressInfo: toInfo,
110
+ inscriptionId: inscription.inscriptionId,
111
+ feeRate,
112
+ outputValue,
113
+ })
114
+ .then(toSignData => {
115
+ nav.navigate('TxConfirmScreen', { toSignData })
116
+ })
117
+ .catch(e => {
118
+ console.log(e)
119
+ setError(e.message)
120
+ })
121
+ }
122
+
123
+ return {
124
+ t,
125
+ onAddressInputChange,
126
+ toInfo,
127
+ outputValue,
128
+ minOutputValue,
129
+ defaultOutputValue,
130
+ setOutputValue,
131
+ inscriptions,
132
+ disabled,
133
+ error,
134
+ onClickBack,
135
+ onClickNext,
136
+ }
137
+ }
@@ -0,0 +1,172 @@
1
+ import { bnUtils } from '@unisat/base-utils'
2
+ import { Inscription } from '@unisat/wallet-shared'
3
+ import BigNumber from 'bignumber.js'
4
+ import { useEffect, useMemo, useState } from 'react'
5
+ import { useI18n, useNavigation, useTools } from 'src/context'
6
+ import {
7
+ useCurrentAccount,
8
+ useFeeRateBar,
9
+ useFetchAssetUtxosRunesCallback,
10
+ useFetchUtxosCallback,
11
+ usePrepareSendRunesCallback,
12
+ useRunesTx,
13
+ } from 'src/hooks'
14
+ import { getAddressUtxoDust, isValidAddress } from 'src/utils/bitcoin-utils'
15
+
16
+ export function useSendRunesScreenLogic() {
17
+ const nav = useNavigation()
18
+ const props = nav.getRouteState<'SendRunesScreen'>()
19
+ const { t } = useI18n()
20
+
21
+ const runeBalance = props.runeBalance
22
+
23
+ const runeInfo = props.runeInfo
24
+
25
+ const runesTx = useRunesTx()
26
+ const [inputAmount, setInputAmount] = useState('')
27
+ const [disabled, setDisabled] = useState(true)
28
+ const [toInfo, setToInfo] = useState<{
29
+ address: string
30
+ domain: string
31
+ inscription?: Inscription
32
+ }>({
33
+ address: runesTx.toAddress,
34
+ domain: runesTx.toDomain,
35
+ inscription: undefined,
36
+ })
37
+
38
+ const [availableBalance, setAvailableBalance] = useState('0')
39
+ const [error, setError] = useState('')
40
+
41
+ const defaultOutputValue = 546
42
+
43
+ const currentAccount = useCurrentAccount()
44
+ const [outputValue, setOutputValue] = useState(defaultOutputValue)
45
+ const minOutputValue = useMemo(() => {
46
+ if (toInfo.address) {
47
+ const dust1 = getAddressUtxoDust(currentAccount.address)
48
+ const dust2 = getAddressUtxoDust(toInfo.address)
49
+ return Math.max(dust1, dust2)
50
+ } else {
51
+ return 0
52
+ }
53
+ }, [toInfo.address, currentAccount.address])
54
+
55
+ const fetchUtxos = useFetchUtxosCallback()
56
+
57
+ const fetchAssetUtxosRunes = useFetchAssetUtxosRunesCallback()
58
+ const tools = useTools()
59
+ useEffect(() => {
60
+ fetchUtxos()
61
+ tools.showLoading(true)
62
+ fetchAssetUtxosRunes(runeInfo.runeid)
63
+ .then(utxos => {
64
+ let balance = new BigNumber(0)
65
+ for (let i = 0; i < utxos.length; i++) {
66
+ const utxo = utxos[i]
67
+ if (utxo.runes) {
68
+ utxo.runes.forEach(rune => {
69
+ if (rune.runeid === runeInfo.runeid) {
70
+ balance = balance.plus(new BigNumber(rune.amount))
71
+ }
72
+ })
73
+ }
74
+ }
75
+ setAvailableBalance(balance.toString())
76
+ })
77
+ .finally(() => {
78
+ tools.showLoading(false)
79
+ })
80
+ }, [])
81
+
82
+ const prepareSendRunes = usePrepareSendRunesCallback()
83
+
84
+ const { feeRate } = useFeeRateBar()
85
+
86
+ useEffect(() => {
87
+ setError('')
88
+ setDisabled(true)
89
+
90
+ if (!isValidAddress(toInfo.address)) {
91
+ return
92
+ }
93
+ if (!inputAmount) {
94
+ return
95
+ }
96
+
97
+ const runeAmount = bnUtils.fromDecimalAmount(inputAmount, runeInfo.divisibility)
98
+ if (feeRate <= 0) {
99
+ return
100
+ }
101
+
102
+ if (bnUtils.compareAmount(runeAmount, '0') <= 0) {
103
+ return
104
+ }
105
+
106
+ if (bnUtils.compareAmount(runeAmount, availableBalance) > 0) {
107
+ setError(t('insufficient_balance'))
108
+ return
109
+ }
110
+
111
+ if (outputValue < minOutputValue) {
112
+ setError(`${t('output_value_must_be_at_least')} ${minOutputValue}`)
113
+ return
114
+ }
115
+
116
+ if (!outputValue) {
117
+ return
118
+ }
119
+
120
+ setDisabled(false)
121
+ }, [toInfo, inputAmount, feeRate, outputValue, minOutputValue, availableBalance])
122
+
123
+ const totalBalanceStr = useMemo(() => {
124
+ return bnUtils.toDecimalAmount(runeBalance.amount, runeBalance.divisibility)
125
+ }, [runeBalance])
126
+ const availableBalanceStr = useMemo(() => {
127
+ return bnUtils.toDecimalAmount(availableBalance, runeBalance?.divisibility)
128
+ }, [availableBalance, runeBalance])
129
+
130
+ const onClickBack = () => {
131
+ nav.goBack()
132
+ }
133
+ const onClickNext = () => {
134
+ const runeAmount = bnUtils.fromDecimalAmount(inputAmount, runeInfo.divisibility)
135
+ prepareSendRunes({
136
+ toAddressInfo: toInfo,
137
+ runeid: runeInfo.runeid,
138
+ runeAmount: runeAmount,
139
+ outputValue: outputValue,
140
+ feeRate,
141
+ })
142
+ .then(toSignData => {
143
+ nav.navigate('TxConfirmScreen', { toSignData })
144
+ })
145
+ .catch(e => {
146
+ console.log(e)
147
+ setError(e.message)
148
+ })
149
+ }
150
+
151
+ return {
152
+ // info
153
+ runeInfo,
154
+ inputAmount,
155
+ totalBalanceStr,
156
+ availableBalanceStr,
157
+
158
+ setInputAmount,
159
+ disabled,
160
+ toInfo,
161
+ setToInfo,
162
+ error,
163
+ defaultOutputValue,
164
+ minOutputValue,
165
+ setOutputValue,
166
+ t,
167
+
168
+ // actions
169
+ onClickBack,
170
+ onClickNext,
171
+ }
172
+ }
@@ -0,0 +1,211 @@
1
+ import { KeyringType } from '@unisat/keyring-service/types'
2
+ import { ADDRESS_TYPES, FEEDBACK_URL, PlatformEnv } from '@unisat/wallet-shared'
3
+ import { useMemo, useState } from 'react'
4
+ import { useDevice, useI18n, useNavigation, useTools, useWallet } from 'src/context'
5
+ import { useChain, useCurrentAccount, useCurrentKeyring, useVersionInfo } from 'src/hooks'
6
+
7
+ export interface SettingsItemType {
8
+ key: string
9
+ label?: string
10
+ value?: string
11
+ desc?: string
12
+ danger?: boolean
13
+ right: boolean
14
+ icon?: string
15
+ badge?: string
16
+ onClick?: () => void
17
+ }
18
+
19
+ export function useSettingsTabScreenLogic() {
20
+ const nav = useNavigation()
21
+ const currentKeyring = useCurrentKeyring()
22
+ const currentAccount = useCurrentAccount()
23
+ const chain = useChain()
24
+ const wallet = useWallet()
25
+ const tools = useTools()
26
+ const [connected, setConnected] = useState(false)
27
+ const versionInfo = useVersionInfo()
28
+ const hasUpdate =
29
+ versionInfo.latestVersion && versionInfo.latestVersion !== versionInfo.currentVesion
30
+ const { t } = useI18n()
31
+
32
+ const { isExtensionInExpandView } = useDevice()
33
+
34
+ const isCustomHdPath = useMemo(() => {
35
+ const item = ADDRESS_TYPES[currentKeyring.addressType]
36
+ return currentKeyring.hdPath !== '' && item.hdPath !== currentKeyring.hdPath
37
+ }, [currentKeyring])
38
+
39
+ const settings_connectedSites: SettingsItemType = useMemo(() => {
40
+ const value = connected ? t('connected') : t('not_connected')
41
+ return {
42
+ key: 'settings_connectedSites',
43
+ label: t('connected_sites'),
44
+ value,
45
+ desc: '',
46
+ right: true,
47
+ icon: 'connectedSites',
48
+ onClick: () => {
49
+ nav.navigate('ConnectedSitesScreen')
50
+ },
51
+ }
52
+ }, [t, connected])
53
+
54
+ const settings_addressBook: SettingsItemType = useMemo(() => {
55
+ return {
56
+ key: 'settings_addressBook',
57
+ label: t('address_book'),
58
+ value: t('addressbook_desc'),
59
+ desc: '',
60
+ right: true,
61
+ icon: 'addressBook',
62
+ onClick: () => {
63
+ // todo
64
+ nav.navigate('ContactsScreen', {})
65
+ },
66
+ }
67
+ }, [t])
68
+ const settings_addressType: SettingsItemType = useMemo(() => {
69
+ let value = ''
70
+ const item = ADDRESS_TYPES[currentKeyring.addressType]
71
+ const hdPath = currentKeyring.hdPath || item.hdPath
72
+ if (currentKeyring.type === KeyringType.SimpleKeyring) {
73
+ value = `${item.name}`
74
+ } else {
75
+ value = `${item.name} (${hdPath}/${currentAccount.index})`
76
+ }
77
+ return {
78
+ key: 'settings_addressType',
79
+ label: t('address_type'),
80
+ value,
81
+ desc: '',
82
+ right: true,
83
+ icon: 'addressType',
84
+ onClick: () => {
85
+ if (isCustomHdPath) {
86
+ tools.showTip(
87
+ t(
88
+ 'the_wallet_currently_uses_a_custom_hd_path_and_does_not_support_switching_address_types'
89
+ )
90
+ )
91
+ return
92
+ }
93
+ nav.navigate('AddressTypeScreen')
94
+ },
95
+ }
96
+ }, [t, isCustomHdPath])
97
+
98
+ const settings_advanced = useMemo(() => {
99
+ return {
100
+ key: 'settings_advanced',
101
+ label: t('settings'),
102
+ value: t('advanced_settings'),
103
+ desc: '',
104
+ right: true,
105
+ icon: 'advance',
106
+ onClick: () => {
107
+ nav.navigate('AdvancedScreen')
108
+ },
109
+ }
110
+ }, [t])
111
+
112
+ const settings_feedback = useMemo(() => {
113
+ return {
114
+ key: 'settings_feedback',
115
+ label: t('feedback'),
116
+ value: t('let_us_know_what_you_think'),
117
+ desc: '',
118
+ route: '',
119
+ right: true,
120
+ icon: 'feedback',
121
+ onClick: () => {
122
+ const addressParam = currentAccount.address
123
+
124
+ let feedbackUrl = FEEDBACK_URL
125
+ feedbackUrl += `?address=${addressParam}&category=wallet`
126
+
127
+ nav.navToUrl(feedbackUrl)
128
+ },
129
+ }
130
+ }, [t])
131
+
132
+ const settings_rateus = useMemo(() => {
133
+ return {
134
+ key: 'settings_rateus',
135
+ label: t('rate_us'),
136
+ value: t('like_our_wallet_wed_love_your_rating'),
137
+ desc: '',
138
+ route: '',
139
+ right: true,
140
+ icon: 'rateUs',
141
+ onClick: () => {
142
+ nav.navToUrl(PlatformEnv.REVIEW_URL)
143
+ },
144
+ }
145
+ }, [t])
146
+
147
+ const settings_aboutus = useMemo(() => {
148
+ return {
149
+ key: 'settings_aboutus',
150
+ label: t('about_us'),
151
+ value: '',
152
+ desc: '',
153
+ right: true,
154
+ icon: 'aboutUsLogo',
155
+ badge: hasUpdate ? t('new_version') : undefined,
156
+ onClick: () => {
157
+ nav.navigate('AboutUsScreen')
158
+ },
159
+ }
160
+ }, [t, hasUpdate])
161
+
162
+ const settings_lockwallet = useMemo(() => {
163
+ return {
164
+ key: 'settings_lockwallet',
165
+ label: '',
166
+ value: '',
167
+ desc: t('lock_immediately'),
168
+ right: false,
169
+ onClick: () => {
170
+ wallet.lockWallet()
171
+
172
+ // Add small delay to ensure lock state updates before navigation
173
+ // Prevents race condition where unlock screen might redirect back to main
174
+ setTimeout(() => {
175
+ nav.navToLock({
176
+ autoUnlockByFace: false,
177
+ })
178
+ }, 10)
179
+ return
180
+ },
181
+ }
182
+ }, [t])
183
+
184
+ const settings_expandview = useMemo(() => {
185
+ if (isExtensionInExpandView) {
186
+ return null
187
+ }
188
+ return {
189
+ key: 'settings_expandview',
190
+ label: '',
191
+ value: '',
192
+ desc: t('expand_view'),
193
+ right: false,
194
+ onClick: () => {
195
+ nav.openExtensionInTab()
196
+ },
197
+ }
198
+ }, [t])
199
+
200
+ return {
201
+ settings_connectedSites,
202
+ settings_addressBook,
203
+ settings_addressType,
204
+ settings_advanced,
205
+ settings_feedback,
206
+ settings_rateus,
207
+ settings_aboutus,
208
+ settings_lockwallet,
209
+ settings_expandview,
210
+ }
211
+ }