@shieldedtech/moth-tui 0.2.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 (194) hide show
  1. package/README.md +65 -0
  2. package/dist/app.d.ts +7 -0
  3. package/dist/app.d.ts.map +1 -0
  4. package/dist/app.js +474 -0
  5. package/dist/app.js.map +1 -0
  6. package/dist/components/BackHint.d.ts +5 -0
  7. package/dist/components/BackHint.d.ts.map +1 -0
  8. package/dist/components/BackHint.js +6 -0
  9. package/dist/components/BackHint.js.map +1 -0
  10. package/dist/components/BalanceTable.d.ts +9 -0
  11. package/dist/components/BalanceTable.d.ts.map +1 -0
  12. package/dist/components/BalanceTable.js +8 -0
  13. package/dist/components/BalanceTable.js.map +1 -0
  14. package/dist/components/ConfirmationModal.d.ts +8 -0
  15. package/dist/components/ConfirmationModal.d.ts.map +1 -0
  16. package/dist/components/ConfirmationModal.js +33 -0
  17. package/dist/components/ConfirmationModal.js.map +1 -0
  18. package/dist/components/HelpFooter.d.ts +16 -0
  19. package/dist/components/HelpFooter.d.ts.map +1 -0
  20. package/dist/components/HelpFooter.js +7 -0
  21. package/dist/components/HelpFooter.js.map +1 -0
  22. package/dist/components/Loader.d.ts +5 -0
  23. package/dist/components/Loader.d.ts.map +1 -0
  24. package/dist/components/Loader.js +7 -0
  25. package/dist/components/Loader.js.map +1 -0
  26. package/dist/components/SectionHeader.d.ts +19 -0
  27. package/dist/components/SectionHeader.d.ts.map +1 -0
  28. package/dist/components/SectionHeader.js +11 -0
  29. package/dist/components/SectionHeader.js.map +1 -0
  30. package/dist/components/Select.d.ts +35 -0
  31. package/dist/components/Select.d.ts.map +1 -0
  32. package/dist/components/Select.js +49 -0
  33. package/dist/components/Select.js.map +1 -0
  34. package/dist/components/TxStatus.d.ts +8 -0
  35. package/dist/components/TxStatus.d.ts.map +1 -0
  36. package/dist/components/TxStatus.js +22 -0
  37. package/dist/components/TxStatus.js.map +1 -0
  38. package/dist/hooks/useBalance.d.ts +19 -0
  39. package/dist/hooks/useBalance.d.ts.map +1 -0
  40. package/dist/hooks/useBalance.js +119 -0
  41. package/dist/hooks/useBalance.js.map +1 -0
  42. package/dist/hooks/useChainStatus.d.ts +13 -0
  43. package/dist/hooks/useChainStatus.d.ts.map +1 -0
  44. package/dist/hooks/useChainStatus.js +97 -0
  45. package/dist/hooks/useChainStatus.js.map +1 -0
  46. package/dist/hooks/useDaemonHost.d.ts +30 -0
  47. package/dist/hooks/useDaemonHost.d.ts.map +1 -0
  48. package/dist/hooks/useDaemonHost.js +122 -0
  49. package/dist/hooks/useDaemonHost.js.map +1 -0
  50. package/dist/hooks/useLogs.d.ts +11 -0
  51. package/dist/hooks/useLogs.d.ts.map +1 -0
  52. package/dist/hooks/useLogs.js +44 -0
  53. package/dist/hooks/useLogs.js.map +1 -0
  54. package/dist/hooks/useNetwork.d.ts +14 -0
  55. package/dist/hooks/useNetwork.d.ts.map +1 -0
  56. package/dist/hooks/useNetwork.js +100 -0
  57. package/dist/hooks/useNetwork.js.map +1 -0
  58. package/dist/hooks/useWallet.d.ts +29 -0
  59. package/dist/hooks/useWallet.d.ts.map +1 -0
  60. package/dist/hooks/useWallet.js +135 -0
  61. package/dist/hooks/useWallet.js.map +1 -0
  62. package/dist/index.d.ts +4 -0
  63. package/dist/index.d.ts.map +1 -0
  64. package/dist/index.js +2 -0
  65. package/dist/index.js.map +1 -0
  66. package/dist/navigation/index.d.ts +3 -0
  67. package/dist/navigation/index.d.ts.map +1 -0
  68. package/dist/navigation/index.js +2 -0
  69. package/dist/navigation/index.js.map +1 -0
  70. package/dist/navigation/types.d.ts +84 -0
  71. package/dist/navigation/types.d.ts.map +1 -0
  72. package/dist/navigation/types.js +3 -0
  73. package/dist/navigation/types.js.map +1 -0
  74. package/dist/navigation/useStackNavigator.d.ts +3 -0
  75. package/dist/navigation/useStackNavigator.d.ts.map +1 -0
  76. package/dist/navigation/useStackNavigator.js +20 -0
  77. package/dist/navigation/useStackNavigator.js.map +1 -0
  78. package/dist/persistent-log.d.ts +5 -0
  79. package/dist/persistent-log.d.ts.map +1 -0
  80. package/dist/persistent-log.js +55 -0
  81. package/dist/persistent-log.js.map +1 -0
  82. package/dist/screens/contract.d.ts +8 -0
  83. package/dist/screens/contract.d.ts.map +1 -0
  84. package/dist/screens/contract.js +104 -0
  85. package/dist/screens/contract.js.map +1 -0
  86. package/dist/screens/dashboard/DashboardHub.d.ts +35 -0
  87. package/dist/screens/dashboard/DashboardHub.d.ts.map +1 -0
  88. package/dist/screens/dashboard/DashboardHub.js +67 -0
  89. package/dist/screens/dashboard/DashboardHub.js.map +1 -0
  90. package/dist/screens/dashboard/StateView.d.ts +24 -0
  91. package/dist/screens/dashboard/StateView.d.ts.map +1 -0
  92. package/dist/screens/dashboard/StateView.js +79 -0
  93. package/dist/screens/dashboard/StateView.js.map +1 -0
  94. package/dist/screens/dashboard/index.d.ts +3 -0
  95. package/dist/screens/dashboard/index.d.ts.map +1 -0
  96. package/dist/screens/dashboard/index.js +3 -0
  97. package/dist/screens/dashboard/index.js.map +1 -0
  98. package/dist/screens/deploy.d.ts +8 -0
  99. package/dist/screens/deploy.d.ts.map +1 -0
  100. package/dist/screens/deploy.js +125 -0
  101. package/dist/screens/deploy.js.map +1 -0
  102. package/dist/screens/dust.d.ts +21 -0
  103. package/dist/screens/dust.d.ts.map +1 -0
  104. package/dist/screens/dust.js +289 -0
  105. package/dist/screens/dust.js.map +1 -0
  106. package/dist/screens/keys.d.ts +21 -0
  107. package/dist/screens/keys.d.ts.map +1 -0
  108. package/dist/screens/keys.js +126 -0
  109. package/dist/screens/keys.js.map +1 -0
  110. package/dist/screens/logs.d.ts +10 -0
  111. package/dist/screens/logs.d.ts.map +1 -0
  112. package/dist/screens/logs.js +62 -0
  113. package/dist/screens/logs.js.map +1 -0
  114. package/dist/screens/mint.d.ts +13 -0
  115. package/dist/screens/mint.d.ts.map +1 -0
  116. package/dist/screens/mint.js +151 -0
  117. package/dist/screens/mint.js.map +1 -0
  118. package/dist/screens/network.d.ts +12 -0
  119. package/dist/screens/network.d.ts.map +1 -0
  120. package/dist/screens/network.js +117 -0
  121. package/dist/screens/network.js.map +1 -0
  122. package/dist/screens/onboarding/InitializingScreen.d.ts +10 -0
  123. package/dist/screens/onboarding/InitializingScreen.d.ts.map +1 -0
  124. package/dist/screens/onboarding/InitializingScreen.js +7 -0
  125. package/dist/screens/onboarding/InitializingScreen.js.map +1 -0
  126. package/dist/screens/onboarding/MnemonicDisplayScreen.d.ts +9 -0
  127. package/dist/screens/onboarding/MnemonicDisplayScreen.d.ts.map +1 -0
  128. package/dist/screens/onboarding/MnemonicDisplayScreen.js +23 -0
  129. package/dist/screens/onboarding/MnemonicDisplayScreen.js.map +1 -0
  130. package/dist/screens/onboarding/NameScreen.d.ts +9 -0
  131. package/dist/screens/onboarding/NameScreen.d.ts.map +1 -0
  132. package/dist/screens/onboarding/NameScreen.js +32 -0
  133. package/dist/screens/onboarding/NameScreen.js.map +1 -0
  134. package/dist/screens/onboarding/NetworkSelectScreen.d.ts +9 -0
  135. package/dist/screens/onboarding/NetworkSelectScreen.d.ts.map +1 -0
  136. package/dist/screens/onboarding/NetworkSelectScreen.js +20 -0
  137. package/dist/screens/onboarding/NetworkSelectScreen.js.map +1 -0
  138. package/dist/screens/onboarding/OnboardingHost.d.ts +15 -0
  139. package/dist/screens/onboarding/OnboardingHost.d.ts.map +1 -0
  140. package/dist/screens/onboarding/OnboardingHost.js +42 -0
  141. package/dist/screens/onboarding/OnboardingHost.js.map +1 -0
  142. package/dist/screens/onboarding/PassphraseScreen.d.ts +9 -0
  143. package/dist/screens/onboarding/PassphraseScreen.d.ts.map +1 -0
  144. package/dist/screens/onboarding/PassphraseScreen.js +46 -0
  145. package/dist/screens/onboarding/PassphraseScreen.js.map +1 -0
  146. package/dist/screens/onboarding/SeedEntryScreen.d.ts +9 -0
  147. package/dist/screens/onboarding/SeedEntryScreen.d.ts.map +1 -0
  148. package/dist/screens/onboarding/SeedEntryScreen.js +49 -0
  149. package/dist/screens/onboarding/SeedEntryScreen.js.map +1 -0
  150. package/dist/screens/onboarding/SeedSourceScreen.d.ts +9 -0
  151. package/dist/screens/onboarding/SeedSourceScreen.d.ts.map +1 -0
  152. package/dist/screens/onboarding/SeedSourceScreen.js +22 -0
  153. package/dist/screens/onboarding/SeedSourceScreen.js.map +1 -0
  154. package/dist/screens/onboarding/UnlockScreen.d.ts +9 -0
  155. package/dist/screens/onboarding/UnlockScreen.d.ts.map +1 -0
  156. package/dist/screens/onboarding/UnlockScreen.js +29 -0
  157. package/dist/screens/onboarding/UnlockScreen.js.map +1 -0
  158. package/dist/screens/onboarding/WalletSelectScreen.d.ts +9 -0
  159. package/dist/screens/onboarding/WalletSelectScreen.d.ts.map +1 -0
  160. package/dist/screens/onboarding/WalletSelectScreen.js +30 -0
  161. package/dist/screens/onboarding/WalletSelectScreen.js.map +1 -0
  162. package/dist/screens/onboarding/index.d.ts +2 -0
  163. package/dist/screens/onboarding/index.d.ts.map +1 -0
  164. package/dist/screens/onboarding/index.js +2 -0
  165. package/dist/screens/onboarding/index.js.map +1 -0
  166. package/dist/screens/send.d.ts +12 -0
  167. package/dist/screens/send.d.ts.map +1 -0
  168. package/dist/screens/send.js +187 -0
  169. package/dist/screens/send.js.map +1 -0
  170. package/dist/settings.d.ts +16 -0
  171. package/dist/settings.d.ts.map +1 -0
  172. package/dist/settings.js +23 -0
  173. package/dist/settings.js.map +1 -0
  174. package/dist/types.d.ts +30 -0
  175. package/dist/types.d.ts.map +1 -0
  176. package/dist/types.js +2 -0
  177. package/dist/types.js.map +1 -0
  178. package/dist/utils/balance.d.ts +48 -0
  179. package/dist/utils/balance.d.ts.map +1 -0
  180. package/dist/utils/balance.js +61 -0
  181. package/dist/utils/balance.js.map +1 -0
  182. package/dist/utils/display.d.ts +3 -0
  183. package/dist/utils/display.d.ts.map +1 -0
  184. package/dist/utils/display.js +17 -0
  185. package/dist/utils/display.js.map +1 -0
  186. package/dist/utils/sync.d.ts +7 -0
  187. package/dist/utils/sync.d.ts.map +1 -0
  188. package/dist/utils/sync.js +11 -0
  189. package/dist/utils/sync.js.map +1 -0
  190. package/dist/utils/synced-wallet-stub.d.ts +3 -0
  191. package/dist/utils/synced-wallet-stub.d.ts.map +1 -0
  192. package/dist/utils/synced-wallet-stub.js +35 -0
  193. package/dist/utils/synced-wallet-stub.js.map +1 -0
  194. package/package.json +42 -0
@@ -0,0 +1,125 @@
1
+ import { jsxs as _jsxs, jsx as _jsx } from "react/jsx-runtime";
2
+ import { useState } from 'react';
3
+ import { Box, Text, useInput } from 'ink';
4
+ import TextInput from 'ink-text-input';
5
+ import { TxStatus } from '../components/TxStatus.js';
6
+ import { SectionHeader } from '../components/SectionHeader.js';
7
+ import { HelpFooter } from '../components/HelpFooter.js';
8
+ const ROWS = ['artifact', 'witnesses', 'projectDir', 'deploy'];
9
+ const LABELS = {
10
+ artifact: 'Artifact',
11
+ witnesses: 'Witnesses',
12
+ projectDir: 'Project',
13
+ deploy: '',
14
+ };
15
+ const PLACEHOLDERS = {
16
+ artifact: './compiled/my-contract',
17
+ witnesses: '(optional)',
18
+ projectDir: '(for SDK deps, blank = auto)',
19
+ };
20
+ export function Deploy({ onDeploy, onBack }) {
21
+ const [highlighted, setHighlighted] = useState(0);
22
+ const [editField, setEditField] = useState(null);
23
+ const [editValue, setEditValue] = useState('');
24
+ const [artifactPath, setArtifactPath] = useState('');
25
+ const [witnessPath, setWitnessPath] = useState('');
26
+ const [projectDir, setProjectDir] = useState('');
27
+ const [progress, setProgress] = useState({ status: 'idle', message: '' });
28
+ const [contractAddress, setContractAddress] = useState('');
29
+ const [error, setError] = useState('');
30
+ const busy = progress.status === 'building' || progress.status === 'proving' || progress.status === 'submitting';
31
+ useInput((_input, key) => {
32
+ if (key.escape) {
33
+ if (editField) {
34
+ setEditField(null);
35
+ return;
36
+ }
37
+ if (busy)
38
+ return;
39
+ onBack();
40
+ return;
41
+ }
42
+ if (editField || busy)
43
+ return;
44
+ if (key.upArrow) {
45
+ setHighlighted(i => (i <= 0 ? ROWS.length - 1 : i - 1));
46
+ return;
47
+ }
48
+ if (key.downArrow) {
49
+ setHighlighted(i => (i >= ROWS.length - 1 ? 0 : i + 1));
50
+ return;
51
+ }
52
+ if (key.return) {
53
+ const row = ROWS[highlighted];
54
+ setError('');
55
+ if (row === 'deploy') {
56
+ submit();
57
+ }
58
+ else {
59
+ const current = row === 'artifact' ? artifactPath
60
+ : row === 'witnesses' ? witnessPath
61
+ : projectDir;
62
+ setEditValue(current);
63
+ setEditField(row);
64
+ }
65
+ }
66
+ });
67
+ const saveEdit = () => {
68
+ const v = editValue.trim();
69
+ if (editField === 'artifact')
70
+ setArtifactPath(v);
71
+ else if (editField === 'witnesses')
72
+ setWitnessPath(v);
73
+ else if (editField === 'projectDir')
74
+ setProjectDir(v);
75
+ setEditField(null);
76
+ };
77
+ const submit = async () => {
78
+ if (!artifactPath.trim()) {
79
+ setError('Artifact path is required');
80
+ return;
81
+ }
82
+ setContractAddress('');
83
+ setProgress({ status: 'proving', message: 'Deploying (this may take a few minutes)...' });
84
+ try {
85
+ const address = await onDeploy(artifactPath.trim(), witnessPath.trim() || undefined, projectDir.trim() || undefined);
86
+ setContractAddress(address);
87
+ setProgress({ status: 'done', message: `Deployed at ${address}` });
88
+ }
89
+ catch (err) {
90
+ setProgress({ status: 'error', message: String(err) });
91
+ }
92
+ };
93
+ const hints = () => {
94
+ if (editField) {
95
+ return [
96
+ { key: 'Enter', label: 'save' },
97
+ { key: 'ESC', label: 'cancel' },
98
+ ];
99
+ }
100
+ if (busy)
101
+ return [];
102
+ const out = [{ key: '↑/↓', label: 'select' }];
103
+ const row = ROWS[highlighted];
104
+ if (row === 'deploy')
105
+ out.push({ key: 'Enter', label: 'deploy' });
106
+ else
107
+ out.push({ key: 'Enter', label: 'edit' });
108
+ out.push({ key: 'ESC', label: 'back' });
109
+ return out;
110
+ };
111
+ const labelWidth = 11;
112
+ const renderRow = (row, content) => {
113
+ const idx = ROWS.indexOf(row);
114
+ const isHi = idx === highlighted;
115
+ return (_jsxs(Box, { children: [_jsxs(Text, { color: isHi ? 'cyan' : undefined, bold: isHi, children: [isHi ? '› ' : ' ', LABELS[row].padEnd(labelWidth)] }), content] }));
116
+ };
117
+ const renderEditableRow = (row, value, emptyDisplay) => {
118
+ if (editField === row) {
119
+ return (_jsxs(Box, { children: [_jsxs(Text, { bold: true, color: "cyan", children: ['› ', LABELS[row].padEnd(labelWidth)] }), _jsx(TextInput, { value: editValue, onChange: setEditValue, onSubmit: saveEdit, placeholder: PLACEHOLDERS[row] })] }));
120
+ }
121
+ return renderRow(row, value ? _jsx(Text, { children: value }) : emptyDisplay);
122
+ };
123
+ return (_jsxs(Box, { flexDirection: "column", padding: 1, children: [_jsx(SectionHeader, { title: "Deploy Contract" }), _jsxs(Box, { flexDirection: "column", paddingLeft: 2, children: [_jsxs(Box, { flexDirection: "column", children: [renderEditableRow('artifact', artifactPath, _jsx(Text, { dimColor: true, italic: true, children: "(required)" })), renderEditableRow('witnesses', witnessPath, _jsx(Text, { dimColor: true, italic: true, children: "(none)" })), renderEditableRow('projectDir', projectDir, _jsx(Text, { dimColor: true, italic: true, children: "(auto)" })), renderRow('deploy', _jsx(Text, { color: highlighted === ROWS.indexOf('deploy') ? 'cyan' : 'green', bold: true, children: "[ Deploy ]" }))] }), progress.status !== 'idle' && (_jsx(Box, { marginTop: 1, children: _jsx(TxStatus, { progress: progress }) })), contractAddress && (_jsxs(Box, { marginTop: 1, flexDirection: "column", children: [_jsx(Text, { bold: true, color: "green", children: "Contract deployed:" }), _jsx(Text, { children: contractAddress })] })), error && _jsx(Box, { marginTop: 1, children: _jsx(Text, { color: "red", children: error }) }), _jsx(HelpFooter, { hints: hints() })] })] }));
124
+ }
125
+ //# sourceMappingURL=deploy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deploy.js","sourceRoot":"","sources":["../../src/screens/deploy.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ import React from 'react';
2
+ import { type NightUtxo } from '@shieldedtech/moth-wallet';
3
+ export type DustActionResult = {
4
+ success: true;
5
+ txId: string;
6
+ } | {
7
+ success: false;
8
+ error: string;
9
+ };
10
+ interface DustProps {
11
+ dustAddress: string;
12
+ synced: boolean;
13
+ syncStatus: string;
14
+ loadUtxos: () => Promise<NightUtxo[]>;
15
+ onRegister: (utxos: NightUtxo[], receiver?: string) => Promise<DustActionResult>;
16
+ onDeregister: (utxos: NightUtxo[]) => Promise<DustActionResult>;
17
+ onBack: () => void;
18
+ }
19
+ export declare function Dust({ dustAddress, synced, syncStatus, loadUtxos, onRegister, onDeregister, onBack }: DustProps): React.JSX.Element;
20
+ export {};
21
+ //# sourceMappingURL=dust.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dust.d.ts","sourceRoot":"","sources":["../../src/screens/dust.tsx"],"names":[],"mappings":"AAGA,OAAO,KAA8B,MAAM,OAAO,CAAC;AAInD,OAAO,EAAqC,KAAK,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAI9F,MAAM,MAAM,gBAAgB,GAAG;IAAE,OAAO,EAAE,IAAI,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,OAAO,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAEnG,UAAU,SAAS;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,OAAO,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC;IACtC,UAAU,EAAE,CAAC,KAAK,EAAE,SAAS,EAAE,EAAE,QAAQ,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,gBAAgB,CAAC,CAAC;IACjF,YAAY,EAAE,CAAC,KAAK,EAAE,SAAS,EAAE,KAAK,OAAO,CAAC,gBAAgB,CAAC,CAAC;IAChE,MAAM,EAAE,MAAM,IAAI,CAAC;CACpB;AAkBD,wBAAgB,IAAI,CAAC,EAAE,WAAW,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,EAAE,EAAE,SAAS,qBAma/G"}
@@ -0,0 +1,289 @@
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
+ // DUST screen — register / deregister NIGHT UTXOs for dust generation.
3
+ // Multi-step flow ported from midnight-wallet-cli. See NOTICE for attribution.
4
+ import { useState } from 'react';
5
+ import { Box, Text, useInput } from 'ink';
6
+ import TextInput from 'ink-text-input';
7
+ import Spinner from 'ink-spinner';
8
+ import { formatNight, decodeBech32mAddress } from '@shieldedtech/moth-wallet';
9
+ import { SectionHeader } from '../components/SectionHeader.js';
10
+ import { HelpFooter } from '../components/HelpFooter.js';
11
+ const ACTIONS = [
12
+ { id: 'register', label: 'Register', description: 'enable dust generation on NIGHT UTXOs' },
13
+ { id: 'deregister', label: 'Deregister', description: 'stop dust generation on NIGHT UTXOs' },
14
+ ];
15
+ export function Dust({ dustAddress, synced, syncStatus, loadUtxos, onRegister, onDeregister, onBack }) {
16
+ const [mode, setMode] = useState({ kind: 'action' });
17
+ const [actionIndex, setActionIndex] = useState(0);
18
+ const [cursor, setCursor] = useState(0);
19
+ const [selected, setSelected] = useState(new Set());
20
+ const [useDefault, setUseDefault] = useState(true);
21
+ const [customAddress, setCustomAddress] = useState('');
22
+ const [addressError, setAddressError] = useState();
23
+ const [loadError, setLoadError] = useState();
24
+ // Reset selection state when entering a new selection step
25
+ const beginSelect = (action, eligible) => {
26
+ setCursor(0);
27
+ setSelected(new Set());
28
+ setMode({ kind: 'select', action, eligible });
29
+ };
30
+ const startAction = async (action) => {
31
+ setLoadError(undefined);
32
+ setMode({ kind: 'loading', action });
33
+ try {
34
+ const all = await loadUtxos();
35
+ const eligible = action === 'register'
36
+ ? all.filter(u => !u.registered)
37
+ : all.filter(u => u.registered);
38
+ beginSelect(action, eligible);
39
+ }
40
+ catch (err) {
41
+ setLoadError(err instanceof Error ? err.message : String(err));
42
+ setMode({ kind: 'action' });
43
+ }
44
+ };
45
+ useInput((input, key) => {
46
+ // ESC handling per mode
47
+ if (key.escape) {
48
+ switch (mode.kind) {
49
+ case 'action':
50
+ case 'loading':
51
+ onBack();
52
+ return;
53
+ case 'select':
54
+ setMode({ kind: 'action' });
55
+ return;
56
+ case 'address':
57
+ startAction('register');
58
+ return;
59
+ case 'confirm':
60
+ if (mode.action === 'register') {
61
+ setMode({ kind: 'address', selected: mode.selected });
62
+ }
63
+ else {
64
+ startAction('deregister');
65
+ }
66
+ return;
67
+ case 'processing':
68
+ return; // ignore ESC while submitting
69
+ case 'result':
70
+ onBack();
71
+ return;
72
+ }
73
+ }
74
+ if (mode.kind === 'action') {
75
+ if (!synced)
76
+ return; // gate input until wallet is synced
77
+ if (key.upArrow) {
78
+ setActionIndex(i => (i <= 0 ? ACTIONS.length - 1 : i - 1));
79
+ return;
80
+ }
81
+ if (key.downArrow) {
82
+ setActionIndex(i => (i >= ACTIONS.length - 1 ? 0 : i + 1));
83
+ return;
84
+ }
85
+ if (key.return) {
86
+ startAction(ACTIONS[actionIndex].id);
87
+ return;
88
+ }
89
+ return;
90
+ }
91
+ if (mode.kind === 'select') {
92
+ const { eligible } = mode;
93
+ if (eligible.length === 0) {
94
+ return; // empty state — only ESC works
95
+ }
96
+ const hasSelectAll = eligible.length > 1;
97
+ const total = hasSelectAll ? eligible.length + 1 : eligible.length;
98
+ if (key.upArrow) {
99
+ setCursor(c => (c <= 0 ? total - 1 : c - 1));
100
+ return;
101
+ }
102
+ if (key.downArrow) {
103
+ setCursor(c => (c >= total - 1 ? 0 : c + 1));
104
+ return;
105
+ }
106
+ if (input === ' ') {
107
+ if (hasSelectAll && cursor === 0) {
108
+ if (selected.size === eligible.length)
109
+ setSelected(new Set());
110
+ else
111
+ setSelected(new Set(eligible.map((_, i) => i)));
112
+ }
113
+ else {
114
+ const idx = hasSelectAll ? cursor - 1 : cursor;
115
+ setSelected(prev => {
116
+ const next = new Set(prev);
117
+ if (next.has(idx))
118
+ next.delete(idx);
119
+ else
120
+ next.add(idx);
121
+ return next;
122
+ });
123
+ }
124
+ return;
125
+ }
126
+ if (key.return) {
127
+ if (selected.size === 0)
128
+ return;
129
+ const chosen = eligible.filter((_, i) => selected.has(i));
130
+ if (mode.action === 'register') {
131
+ setUseDefault(true);
132
+ setCustomAddress('');
133
+ setAddressError(undefined);
134
+ setMode({ kind: 'address', selected: chosen });
135
+ }
136
+ else {
137
+ setMode({ kind: 'confirm', action: 'deregister', selected: chosen });
138
+ }
139
+ return;
140
+ }
141
+ return;
142
+ }
143
+ if (mode.kind === 'address') {
144
+ if (input === 'c' && useDefault) {
145
+ setUseDefault(false);
146
+ setCustomAddress('');
147
+ setAddressError(undefined);
148
+ }
149
+ else if (input === 'd' && !useDefault) {
150
+ setUseDefault(true);
151
+ setAddressError(undefined);
152
+ }
153
+ else if (useDefault && key.return) {
154
+ setMode({ kind: 'confirm', action: 'register', selected: mode.selected });
155
+ }
156
+ return;
157
+ }
158
+ if (mode.kind === 'confirm') {
159
+ if (key.return)
160
+ submit();
161
+ return;
162
+ }
163
+ if (mode.kind === 'result') {
164
+ // Any non-escape key returns to action menu so the user can do another op
165
+ setMode({ kind: 'action' });
166
+ return;
167
+ }
168
+ });
169
+ const submitCustomAddress = (value) => {
170
+ const trimmed = value.trim();
171
+ if (!trimmed) {
172
+ setAddressError('Address is required');
173
+ return;
174
+ }
175
+ try {
176
+ const decoded = decodeBech32mAddress(trimmed);
177
+ if (decoded.type !== 'dust') {
178
+ setAddressError(`Expected dust address (mn_dust...), got ${decoded.type}`);
179
+ return;
180
+ }
181
+ }
182
+ catch (err) {
183
+ setAddressError(err instanceof Error ? err.message : 'Invalid dust address');
184
+ return;
185
+ }
186
+ if (mode.kind === 'address') {
187
+ setMode({ kind: 'confirm', action: 'register', selected: mode.selected, receiver: trimmed });
188
+ }
189
+ };
190
+ const submit = async () => {
191
+ if (mode.kind !== 'confirm')
192
+ return;
193
+ const { action, selected: chosen, receiver } = mode;
194
+ setMode({ kind: 'processing', action, stage: 'Building transaction...' });
195
+ const result = action === 'register'
196
+ ? await onRegister(chosen, receiver)
197
+ : await onDeregister(chosen);
198
+ setMode({ kind: 'result', action, result });
199
+ };
200
+ // Render helpers ----------------------------------------------------------
201
+ const renderAction = () => {
202
+ if (!synced) {
203
+ return (_jsxs(Box, { flexDirection: "column", children: [_jsxs(Box, { children: [_jsx(Spinner, { type: "dots" }), _jsx(Text, { color: "yellow", children: " Waiting for wallet sync..." })] }), syncStatus && _jsxs(Text, { dimColor: true, children: [" ", syncStatus] }), _jsx(Box, { marginTop: 1, children: _jsx(Text, { dimColor: true, children: "Dust registration requires a fully synced wallet." }) })] }));
204
+ }
205
+ return (_jsxs(Box, { flexDirection: "column", children: [_jsx(Text, { bold: true, children: "What would you like to do?" }), _jsx(Box, { marginTop: 1, flexDirection: "column", children: ACTIONS.map((a, i) => {
206
+ const isHi = i === actionIndex;
207
+ return (_jsxs(Box, { children: [_jsxs(Text, { color: isHi ? 'cyan' : undefined, bold: isHi, children: [isHi ? '› ' : ' ', a.label.padEnd(12)] }), _jsx(Text, { dimColor: true, children: a.description })] }, a.id));
208
+ }) }), loadError && _jsx(Box, { marginTop: 1, children: _jsx(Text, { color: "red", children: loadError }) })] }));
209
+ };
210
+ const renderLoading = (m) => (_jsxs(Box, { children: [_jsx(Spinner, { type: "dots" }), _jsxs(Text, { children: [" Loading NIGHT UTXOs to ", m.action, "..."] })] }));
211
+ const renderSelect = (m) => {
212
+ const { eligible, action } = m;
213
+ if (eligible.length === 0) {
214
+ return (_jsxs(Box, { flexDirection: "column", children: [_jsx(Text, { color: "yellow", children: action === 'register'
215
+ ? 'No unregistered NIGHT UTXOs available.'
216
+ : 'No registered NIGHT UTXOs available.' }), _jsx(Text, { dimColor: true, children: action === 'register'
217
+ ? 'All your NIGHT UTXOs are already registered for dust generation.'
218
+ : 'You have no NIGHT UTXOs registered for dust generation.' })] }));
219
+ }
220
+ const hasSelectAll = eligible.length > 1;
221
+ const allSelected = selected.size === eligible.length;
222
+ const totalValue = Array.from(selected).reduce((sum, i) => sum + eligible[i].value, 0n);
223
+ return (_jsxs(Box, { flexDirection: "column", children: [_jsxs(Text, { dimColor: true, children: ["Select NIGHT UTXOs to ", action, ":"] }), _jsxs(Box, { marginTop: 1, flexDirection: "column", children: [hasSelectAll && (_jsxs(Box, { children: [_jsx(Text, { color: cursor === 0 ? 'cyan' : undefined, children: cursor === 0 ? '› ' : ' ' }), _jsxs(Text, { children: [allSelected ? '[x]' : '[ ]', " "] }), _jsx(Text, { bold: true, children: "Select all" }), _jsxs(Text, { dimColor: true, children: [" (", eligible.length, " UTXOs)"] })] })), eligible.map((u, i) => {
224
+ const itemIndex = hasSelectAll ? i + 1 : i;
225
+ const isCursor = cursor === itemIndex;
226
+ const isSelected = selected.has(i);
227
+ return (_jsxs(Box, { children: [_jsx(Text, { color: isCursor ? 'cyan' : undefined, children: isCursor ? '› ' : ' ' }), _jsxs(Text, { children: [isSelected ? '[x]' : '[ ]', " "] }), _jsxs(Text, { children: ["UTXO ", i + 1, ": "] }), _jsx(Text, { bold: true, children: formatNight(u.value) }), _jsx(Text, { dimColor: true, children: " NIGHT" })] }, i));
228
+ })] }), _jsxs(Box, { marginTop: 1, children: [_jsx(Text, { dimColor: true, children: "Selected: " }), _jsx(Text, { bold: true, color: selected.size > 0 ? 'green' : undefined, children: selected.size }), _jsxs(Text, { dimColor: true, children: [" UTXO", selected.size !== 1 ? 's' : ''] }), selected.size > 0 && (_jsxs(_Fragment, { children: [_jsx(Text, { dimColor: true, children: " (" }), _jsx(Text, { bold: true, children: formatNight(totalValue) }), _jsx(Text, { dimColor: true, children: " NIGHT)" })] }))] })] }));
229
+ };
230
+ const renderAddress = () => (_jsxs(Box, { flexDirection: "column", children: [_jsx(Text, { bold: true, children: "Dust receiver address" }), useDefault ? (_jsxs(Box, { marginTop: 1, flexDirection: "column", children: [_jsx(Text, { dimColor: true, children: "Using this wallet's dust address:" }), _jsx(Box, { marginTop: 1, children: _jsx(Text, { color: "green", children: dustAddress }) })] })) : (_jsxs(Box, { marginTop: 1, flexDirection: "column", children: [_jsx(Text, { dimColor: true, children: "Custom dust address:" }), _jsx(TextInput, { value: customAddress, onChange: (v) => { setCustomAddress(v); setAddressError(undefined); }, onSubmit: submitCustomAddress, placeholder: "mn_dust..." }), addressError && _jsx(Text, { color: "red", children: addressError })] }))] }));
231
+ const renderConfirm = (m) => {
232
+ const totalValue = m.selected.reduce((sum, u) => sum + u.value, 0n);
233
+ return (_jsxs(Box, { flexDirection: "column", children: [_jsxs(Text, { bold: true, color: "yellow", children: ["Confirm Dust ", m.action === 'register' ? 'Registration' : 'Deregistration'] }), _jsxs(Box, { marginTop: 1, flexDirection: "column", marginLeft: 2, children: [_jsxs(Box, { children: [_jsx(Text, { dimColor: true, children: "UTXOs: " }), _jsx(Text, { bold: true, children: m.selected.length })] }), _jsxs(Box, { children: [_jsx(Text, { dimColor: true, children: "Total NIGHT value: " }), _jsx(Text, { bold: true, children: formatNight(totalValue) }), _jsx(Text, { dimColor: true, children: " NIGHT" })] }), m.action === 'register' && (_jsxs(Box, { marginTop: 1, flexDirection: "column", children: [_jsx(Text, { dimColor: true, children: "Dust receiver:" }), _jsx(Box, { marginLeft: 2, children: _jsx(Text, { color: "green", children: m.receiver ?? dustAddress }) })] })), m.action === 'deregister' && (_jsx(Box, { marginTop: 1, children: _jsx(Text, { dimColor: true, children: "These UTXOs will stop generating dust rewards." }) }))] })] }));
234
+ };
235
+ const renderProcessing = (m) => (_jsxs(Box, { flexDirection: "column", children: [_jsxs(Box, { children: [_jsx(Spinner, { type: "dots" }), _jsxs(Text, { children: [" ", m.action === 'register' ? 'Registering' : 'Deregistering', " NIGHT UTXOs..."] })] }), _jsxs(Text, { dimColor: true, children: [" ", m.stage] })] }));
236
+ const renderResult = (m) => (_jsx(Box, { flexDirection: "column", children: m.result.success ? (_jsxs(_Fragment, { children: [_jsxs(Text, { bold: true, color: "green", children: ["\u2713 ", m.action === 'register' ? 'Registration' : 'Deregistration', " submitted"] }), _jsx(Box, { marginTop: 1, children: _jsx(Text, { dimColor: true, children: "Transaction ID:" }) }), _jsx(Text, { children: m.result.txId })] })) : (_jsxs(_Fragment, { children: [_jsxs(Text, { bold: true, color: "red", children: ["\u2717 ", m.action === 'register' ? 'Registration' : 'Deregistration', " failed"] }), _jsx(Box, { marginTop: 1, children: _jsx(Text, { color: "red", children: m.result.error }) })] })) }));
237
+ const hints = () => {
238
+ switch (mode.kind) {
239
+ case 'action':
240
+ if (!synced)
241
+ return [{ key: 'ESC', label: 'back' }];
242
+ return [
243
+ { key: '↑/↓', label: 'select' },
244
+ { key: 'Enter', label: 'continue' },
245
+ { key: 'ESC', label: 'back' },
246
+ ];
247
+ case 'loading':
248
+ return [{ key: 'ESC', label: 'cancel' }];
249
+ case 'select': {
250
+ if (mode.eligible.length === 0)
251
+ return [{ key: 'ESC', label: 'back' }];
252
+ const out = [
253
+ { key: '↑/↓', label: 'move' },
254
+ { key: 'Space', label: 'toggle' },
255
+ ];
256
+ if (selected.size > 0)
257
+ out.push({ key: 'Enter', label: 'continue' });
258
+ out.push({ key: 'ESC', label: 'back' });
259
+ return out;
260
+ }
261
+ case 'address':
262
+ return useDefault
263
+ ? [
264
+ { key: 'Enter', label: 'use default' },
265
+ { key: 'c', label: 'custom address' },
266
+ { key: 'ESC', label: 'back' },
267
+ ]
268
+ : [
269
+ { key: 'Enter', label: 'submit' },
270
+ { key: 'd', label: 'use default' },
271
+ { key: 'ESC', label: 'back' },
272
+ ];
273
+ case 'confirm':
274
+ return [
275
+ { key: 'Enter', label: 'confirm' },
276
+ { key: 'ESC', label: 'back' },
277
+ ];
278
+ case 'processing':
279
+ return [];
280
+ case 'result':
281
+ return [
282
+ { key: 'Enter', label: 'continue' },
283
+ { key: 'ESC', label: 'back' },
284
+ ];
285
+ }
286
+ };
287
+ return (_jsxs(Box, { flexDirection: "column", padding: 1, children: [_jsx(SectionHeader, { title: "Dust" }), _jsxs(Box, { flexDirection: "column", paddingLeft: 2, children: [mode.kind === 'action' && renderAction(), mode.kind === 'loading' && renderLoading(mode), mode.kind === 'select' && renderSelect(mode), mode.kind === 'address' && renderAddress(), mode.kind === 'confirm' && renderConfirm(mode), mode.kind === 'processing' && renderProcessing(mode), mode.kind === 'result' && renderResult(mode), _jsx(HelpFooter, { hints: hints() })] })] }));
288
+ }
289
+ //# sourceMappingURL=dust.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dust.js","sourceRoot":"","sources":["../../src/screens/dust.tsx"],"names":[],"mappings":";AAAA,uEAAuE;AACvE,+EAA+E;AAE/E,OAAc,EAAa,QAAQ,EAAE,MAAM,OAAO,CAAC;AACnD,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,KAAK,CAAC;AAC1C,OAAO,SAAS,MAAM,gBAAgB,CAAC;AACvC,OAAO,OAAO,MAAM,aAAa,CAAC;AAClC,OAAO,EAAE,WAAW,EAAE,oBAAoB,EAAkB,MAAM,2BAA2B,CAAC;AAC9F,OAAO,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AAC/D,OAAO,EAAE,UAAU,EAAiB,MAAM,6BAA6B,CAAC;AAyBxE,MAAM,OAAO,GAAyD;IACpE,EAAE,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,uCAAuC,EAAE;IAC3F,EAAE,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,qCAAqC,EAAE;CAC9F,CAAC;AAEF,MAAM,UAAU,IAAI,CAAC,EAAE,WAAW,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,EAAa;IAC9G,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,QAAQ,CAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC;IAC3D,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;IAClD,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;IACxC,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,QAAQ,CAAc,IAAI,GAAG,EAAE,CAAC,CAAC;IACjE,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;IACnD,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;IACvD,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,QAAQ,EAAsB,CAAC;IACvE,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,EAAsB,CAAC;IAEjE,2DAA2D;IAC3D,MAAM,WAAW,GAAG,CAAC,MAAc,EAAE,QAAqB,EAAE,EAAE;QAC5D,SAAS,CAAC,CAAC,CAAC,CAAC;QACb,WAAW,CAAC,IAAI,GAAG,EAAE,CAAC,CAAC;QACvB,OAAO,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC;IAChD,CAAC,CAAC;IAEF,MAAM,WAAW,GAAG,KAAK,EAAE,MAAc,EAAE,EAAE;QAC3C,YAAY,CAAC,SAAS,CAAC,CAAC;QACxB,OAAO,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,CAAC;QACrC,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,SAAS,EAAE,CAAC;YAC9B,MAAM,QAAQ,GAAG,MAAM,KAAK,UAAU;gBACpC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC;gBAChC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;YAClC,WAAW,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;QAChC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,YAAY,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;YAC/D,OAAO,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC,CAAC;IAEF,QAAQ,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;QACtB,wBAAwB;QACxB,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;YACf,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC;gBAClB,KAAK,QAAQ,CAAC;gBACd,KAAK,SAAS;oBACZ,MAAM,EAAE,CAAC;oBACT,OAAO;gBACT,KAAK,QAAQ;oBACX,OAAO,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC;oBAC5B,OAAO;gBACT,KAAK,SAAS;oBACZ,WAAW,CAAC,UAAU,CAAC,CAAC;oBACxB,OAAO;gBACT,KAAK,SAAS;oBACZ,IAAI,IAAI,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;wBAC/B,OAAO,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;oBACxD,CAAC;yBAAM,CAAC;wBACN,WAAW,CAAC,YAAY,CAAC,CAAC;oBAC5B,CAAC;oBACD,OAAO;gBACT,KAAK,YAAY;oBACf,OAAO,CAAC,8BAA8B;gBACxC,KAAK,QAAQ;oBACX,MAAM,EAAE,CAAC;oBACT,OAAO;YACX,CAAC;QACH,CAAC;QAED,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC3B,IAAI,CAAC,MAAM;gBAAE,OAAO,CAAC,oCAAoC;YACzD,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC;gBAAC,cAAc,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;gBAAC,OAAO;YAAC,CAAC;YACxF,IAAI,GAAG,CAAC,SAAS,EAAE,CAAC;gBAAC,cAAc,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;gBAAC,OAAO;YAAC,CAAC;YAC1F,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;gBAAC,WAAW,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC;gBAAC,OAAO;YAAC,CAAC;YACjE,OAAO;QACT,CAAC;QAED,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC3B,MAAM,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC;YAC1B,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC1B,OAAO,CAAC,+BAA+B;YACzC,CAAC;YACD,MAAM,YAAY,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;YACzC,MAAM,KAAK,GAAG,YAAY,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC;YACnE,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC;gBAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;gBAAC,OAAO;YAAC,CAAC;YAC1E,IAAI,GAAG,CAAC,SAAS,EAAE,CAAC;gBAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;gBAAC,OAAO;YAAC,CAAC;YAC5E,IAAI,KAAK,KAAK,GAAG,EAAE,CAAC;gBAClB,IAAI,YAAY,IAAI,MAAM,KAAK,CAAC,EAAE,CAAC;oBACjC,IAAI,QAAQ,CAAC,IAAI,KAAK,QAAQ,CAAC,MAAM;wBAAE,WAAW,CAAC,IAAI,GAAG,EAAE,CAAC,CAAC;;wBACzD,WAAW,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBACvD,CAAC;qBAAM,CAAC;oBACN,MAAM,GAAG,GAAG,YAAY,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;oBAC/C,WAAW,CAAC,IAAI,CAAC,EAAE;wBACjB,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC;wBAC3B,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;4BAAE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;;4BAAM,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;wBACxD,OAAO,IAAI,CAAC;oBACd,CAAC,CAAC,CAAC;gBACL,CAAC;gBACD,OAAO;YACT,CAAC;YACD,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;gBACf,IAAI,QAAQ,CAAC,IAAI,KAAK,CAAC;oBAAE,OAAO;gBAChC,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC1D,IAAI,IAAI,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;oBAC/B,aAAa,CAAC,IAAI,CAAC,CAAC;oBACpB,gBAAgB,CAAC,EAAE,CAAC,CAAC;oBACrB,eAAe,CAAC,SAAS,CAAC,CAAC;oBAC3B,OAAO,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC;gBACjD,CAAC;qBAAM,CAAC;oBACN,OAAO,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC;gBACvE,CAAC;gBACD,OAAO;YACT,CAAC;YACD,OAAO;QACT,CAAC;QAED,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YAC5B,IAAI,KAAK,KAAK,GAAG,IAAI,UAAU,EAAE,CAAC;gBAChC,aAAa,CAAC,KAAK,CAAC,CAAC;gBACrB,gBAAgB,CAAC,EAAE,CAAC,CAAC;gBACrB,eAAe,CAAC,SAAS,CAAC,CAAC;YAC7B,CAAC;iBAAM,IAAI,KAAK,KAAK,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;gBACxC,aAAa,CAAC,IAAI,CAAC,CAAC;gBACpB,eAAe,CAAC,SAAS,CAAC,CAAC;YAC7B,CAAC;iBAAM,IAAI,UAAU,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;gBACpC,OAAO,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;YAC5E,CAAC;YACD,OAAO;QACT,CAAC;QAED,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YAC5B,IAAI,GAAG,CAAC,MAAM;gBAAE,MAAM,EAAE,CAAC;YACzB,OAAO;QACT,CAAC;QAED,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC3B,0EAA0E;YAC1E,OAAO,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC;YAC5B,OAAO;QACT,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,MAAM,mBAAmB,GAAG,CAAC,KAAa,EAAE,EAAE;QAC5C,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;QAC7B,IAAI,CAAC,OAAO,EAAE,CAAC;YAAC,eAAe,CAAC,qBAAqB,CAAC,CAAC;YAAC,OAAO;QAAC,CAAC;QACjE,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,oBAAoB,CAAC,OAAO,CAAC,CAAC;YAC9C,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;gBAC5B,eAAe,CAAC,2CAA2C,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;gBAC3E,OAAO;YACT,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,eAAe,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,sBAAsB,CAAC,CAAC;YAC7E,OAAO;QACT,CAAC;QACD,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YAC5B,OAAO,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC;QAC/F,CAAC;IACH,CAAC,CAAC;IAEF,MAAM,MAAM,GAAG,KAAK,IAAI,EAAE;QACxB,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS;YAAE,OAAO;QACpC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC;QACpD,OAAO,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,KAAK,EAAE,yBAAyB,EAAE,CAAC,CAAC;QAC1E,MAAM,MAAM,GAAG,MAAM,KAAK,UAAU;YAClC,CAAC,CAAC,MAAM,UAAU,CAAC,MAAM,EAAE,QAAQ,CAAC;YACpC,CAAC,CAAC,MAAM,YAAY,CAAC,MAAM,CAAC,CAAC;QAC/B,OAAO,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IAC9C,CAAC,CAAC;IAEF,4EAA4E;IAE5E,MAAM,YAAY,GAAG,GAAG,EAAE;QACxB,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,OAAO,CACL,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,aACzB,MAAC,GAAG,eACF,KAAC,OAAO,IAAC,IAAI,EAAC,MAAM,GAAG,EACvB,KAAC,IAAI,IAAC,KAAK,EAAC,QAAQ,4CAAmC,IACnD,EACL,UAAU,IAAI,MAAC,IAAI,IAAC,QAAQ,yBAAI,UAAU,IAAQ,EACnD,KAAC,GAAG,IAAC,SAAS,EAAE,CAAC,YACf,KAAC,IAAI,IAAC,QAAQ,wEAAyD,GACnE,IACF,CACP,CAAC;QACJ,CAAC;QACD,OAAO,CACL,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,aACzB,KAAC,IAAI,IAAC,IAAI,iDAAkC,EAC5C,KAAC,GAAG,IAAC,SAAS,EAAE,CAAC,EAAE,aAAa,EAAC,QAAQ,YACtC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;wBACpB,MAAM,IAAI,GAAG,CAAC,KAAK,WAAW,CAAC;wBAC/B,OAAO,CACL,MAAC,GAAG,eACF,MAAC,IAAI,IAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,aAC/C,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,IAClC,EACP,KAAC,IAAI,IAAC,QAAQ,kBAAE,CAAC,CAAC,WAAW,GAAQ,KAJ7B,CAAC,CAAC,EAAE,CAKR,CACP,CAAC;oBACJ,CAAC,CAAC,GACE,EACL,SAAS,IAAI,KAAC,GAAG,IAAC,SAAS,EAAE,CAAC,YAAE,KAAC,IAAI,IAAC,KAAK,EAAC,KAAK,YAAE,SAAS,GAAQ,GAAM,IACvE,CACP,CAAC;IACJ,CAAC,CAAC;IAEF,MAAM,aAAa,GAAG,CAAC,CAAqC,EAAE,EAAE,CAAC,CAC/D,MAAC,GAAG,eACF,KAAC,OAAO,IAAC,IAAI,EAAC,MAAM,GAAG,EACvB,MAAC,IAAI,2CAA0B,CAAC,CAAC,MAAM,WAAW,IAC9C,CACP,CAAC;IAEF,MAAM,YAAY,GAAG,CAAC,CAAoC,EAAE,EAAE;QAC5D,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC;QAC/B,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC1B,OAAO,CACL,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,aACzB,KAAC,IAAI,IAAC,KAAK,EAAC,QAAQ,YACjB,MAAM,KAAK,UAAU;4BACpB,CAAC,CAAC,wCAAwC;4BAC1C,CAAC,CAAC,sCAAsC,GACrC,EACP,KAAC,IAAI,IAAC,QAAQ,kBACX,MAAM,KAAK,UAAU;4BACpB,CAAC,CAAC,kEAAkE;4BACpE,CAAC,CAAC,yDAAyD,GACxD,IACH,CACP,CAAC;QACJ,CAAC;QACD,MAAM,YAAY,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;QACzC,MAAM,WAAW,GAAG,QAAQ,CAAC,IAAI,KAAK,QAAQ,CAAC,MAAM,CAAC;QACtD,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QACxF,OAAO,CACL,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,aACzB,MAAC,IAAI,IAAC,QAAQ,6CACW,MAAM,SACxB,EACP,MAAC,GAAG,IAAC,SAAS,EAAE,CAAC,EAAE,aAAa,EAAC,QAAQ,aACtC,YAAY,IAAI,CACf,MAAC,GAAG,eACF,KAAC,IAAI,IAAC,KAAK,EAAE,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,YAAG,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,GAAQ,EACnF,MAAC,IAAI,eAAE,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,SAAS,EAC3C,KAAC,IAAI,IAAC,IAAI,iCAAkB,EAC5B,MAAC,IAAI,IAAC,QAAQ,yBAAI,QAAQ,CAAC,MAAM,eAAe,IAC5C,CACP,EACA,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;4BACrB,MAAM,SAAS,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;4BAC3C,MAAM,QAAQ,GAAG,MAAM,KAAK,SAAS,CAAC;4BACtC,MAAM,UAAU,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;4BACnC,OAAO,CACL,MAAC,GAAG,eACF,KAAC,IAAI,IAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,YAAG,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,GAAQ,EAC3E,MAAC,IAAI,eAAE,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,SAAS,EAC1C,MAAC,IAAI,wBAAO,CAAC,GAAG,CAAC,UAAU,EAC3B,KAAC,IAAI,IAAC,IAAI,kBAAE,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,GAAQ,EACxC,KAAC,IAAI,IAAC,QAAQ,6BAAc,KALpB,CAAC,CAML,CACP,CAAC;wBACJ,CAAC,CAAC,IACE,EACN,MAAC,GAAG,IAAC,SAAS,EAAE,CAAC,aACf,KAAC,IAAI,IAAC,QAAQ,iCAAkB,EAChC,KAAC,IAAI,IAAC,IAAI,QAAC,KAAK,EAAE,QAAQ,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,YAAG,QAAQ,CAAC,IAAI,GAAQ,EACjF,MAAC,IAAI,IAAC,QAAQ,4BAAO,QAAQ,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,IAAQ,EAC1D,QAAQ,CAAC,IAAI,GAAG,CAAC,IAAI,CACpB,8BACE,KAAC,IAAI,IAAC,QAAQ,yBAAU,EACxB,KAAC,IAAI,IAAC,IAAI,kBAAE,WAAW,CAAC,UAAU,CAAC,GAAQ,EAC3C,KAAC,IAAI,IAAC,QAAQ,8BAAe,IAC5B,CACJ,IACG,IACF,CACP,CAAC;IACJ,CAAC,CAAC;IAEF,MAAM,aAAa,GAAG,GAAG,EAAE,CAAC,CAC1B,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,aACzB,KAAC,IAAI,IAAC,IAAI,4CAA6B,EACtC,UAAU,CAAC,CAAC,CAAC,CACZ,MAAC,GAAG,IAAC,SAAS,EAAE,CAAC,EAAE,aAAa,EAAC,QAAQ,aACvC,KAAC,IAAI,IAAC,QAAQ,wDAAyC,EACvD,KAAC,GAAG,IAAC,SAAS,EAAE,CAAC,YAAE,KAAC,IAAI,IAAC,KAAK,EAAC,OAAO,YAAE,WAAW,GAAQ,GAAM,IAC7D,CACP,CAAC,CAAC,CAAC,CACF,MAAC,GAAG,IAAC,SAAS,EAAE,CAAC,EAAE,aAAa,EAAC,QAAQ,aACvC,KAAC,IAAI,IAAC,QAAQ,2CAA4B,EAC1C,KAAC,SAAS,IAAC,KAAK,EAAE,aAAa,EAAE,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EACpG,QAAQ,EAAE,mBAAmB,EAAE,WAAW,EAAC,YAAY,GAAG,EAC3D,YAAY,IAAI,KAAC,IAAI,IAAC,KAAK,EAAC,KAAK,YAAE,YAAY,GAAQ,IACpD,CACP,IACG,CACP,CAAC;IAEF,MAAM,aAAa,GAAG,CAAC,CAAqC,EAAE,EAAE;QAC9D,MAAM,UAAU,GAAG,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QACpE,OAAO,CACL,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,aACzB,MAAC,IAAI,IAAC,IAAI,QAAC,KAAK,EAAC,QAAQ,8BACT,CAAC,CAAC,MAAM,KAAK,UAAU,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,gBAAgB,IACpE,EACP,MAAC,GAAG,IAAC,SAAS,EAAE,CAAC,EAAE,aAAa,EAAC,QAAQ,EAAC,UAAU,EAAE,CAAC,aACrD,MAAC,GAAG,eACF,KAAC,IAAI,IAAC,QAAQ,8BAAe,EAC7B,KAAC,IAAI,IAAC,IAAI,kBAAE,CAAC,CAAC,QAAQ,CAAC,MAAM,GAAQ,IACjC,EACN,MAAC,GAAG,eACF,KAAC,IAAI,IAAC,QAAQ,0CAA2B,EACzC,KAAC,IAAI,IAAC,IAAI,kBAAE,WAAW,CAAC,UAAU,CAAC,GAAQ,EAC3C,KAAC,IAAI,IAAC,QAAQ,6BAAc,IACxB,EACL,CAAC,CAAC,MAAM,KAAK,UAAU,IAAI,CAC1B,MAAC,GAAG,IAAC,SAAS,EAAE,CAAC,EAAE,aAAa,EAAC,QAAQ,aACvC,KAAC,IAAI,IAAC,QAAQ,qCAAsB,EACpC,KAAC,GAAG,IAAC,UAAU,EAAE,CAAC,YAAE,KAAC,IAAI,IAAC,KAAK,EAAC,OAAO,YAAE,CAAC,CAAC,QAAQ,IAAI,WAAW,GAAQ,GAAM,IAC5E,CACP,EACA,CAAC,CAAC,MAAM,KAAK,YAAY,IAAI,CAC5B,KAAC,GAAG,IAAC,SAAS,EAAE,CAAC,YACf,KAAC,IAAI,IAAC,QAAQ,qEAAsD,GAChE,CACP,IACG,IACF,CACP,CAAC;IACJ,CAAC,CAAC;IAEF,MAAM,gBAAgB,GAAG,CAAC,CAAwC,EAAE,EAAE,CAAC,CACrE,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,aACzB,MAAC,GAAG,eACF,KAAC,OAAO,IAAC,IAAI,EAAC,MAAM,GAAG,EACvB,MAAC,IAAI,oBAAG,CAAC,CAAC,MAAM,KAAK,UAAU,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,eAAe,uBAAuB,IACpF,EACN,MAAC,IAAI,IAAC,QAAQ,yBAAI,CAAC,CAAC,KAAK,IAAQ,IAC7B,CACP,CAAC;IAEF,MAAM,YAAY,GAAG,CAAC,CAAoC,EAAE,EAAE,CAAC,CAC7D,KAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,YACxB,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAClB,8BACE,MAAC,IAAI,IAAC,IAAI,QAAC,KAAK,EAAC,OAAO,wBACnB,CAAC,CAAC,MAAM,KAAK,UAAU,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,gBAAgB,kBACzD,EACP,KAAC,GAAG,IAAC,SAAS,EAAE,CAAC,YAAE,KAAC,IAAI,IAAC,QAAQ,sCAAuB,GAAM,EAC9D,KAAC,IAAI,cAAE,CAAC,CAAC,MAAM,CAAC,IAAI,GAAQ,IAC3B,CACJ,CAAC,CAAC,CAAC,CACF,8BACE,MAAC,IAAI,IAAC,IAAI,QAAC,KAAK,EAAC,KAAK,wBACjB,CAAC,CAAC,MAAM,KAAK,UAAU,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,gBAAgB,eACzD,EACP,KAAC,GAAG,IAAC,SAAS,EAAE,CAAC,YAAE,KAAC,IAAI,IAAC,KAAK,EAAC,KAAK,YAAE,CAAC,CAAC,MAAM,CAAC,KAAK,GAAQ,GAAM,IACjE,CACJ,GACG,CACP,CAAC;IAEF,MAAM,KAAK,GAAG,GAAe,EAAE;QAC7B,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC;YAClB,KAAK,QAAQ;gBACX,IAAI,CAAC,MAAM;oBAAE,OAAO,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;gBACpD,OAAO;oBACL,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE;oBAC/B,EAAE,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE;oBACnC,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE;iBAC9B,CAAC;YACJ,KAAK,SAAS;gBACZ,OAAO,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;YAC3C,KAAK,QAAQ,CAAC,CAAC,CAAC;gBACd,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC;oBAAE,OAAO,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;gBACvE,MAAM,GAAG,GAAe;oBACtB,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE;oBAC7B,EAAE,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE;iBAClC,CAAC;gBACF,IAAI,QAAQ,CAAC,IAAI,GAAG,CAAC;oBAAE,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC,CAAC;gBACrE,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;gBACxC,OAAO,GAAG,CAAC;YACb,CAAC;YACD,KAAK,SAAS;gBACZ,OAAO,UAAU;oBACf,CAAC,CAAC;wBACE,EAAE,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE;wBACtC,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,gBAAgB,EAAE;wBACrC,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE;qBAC9B;oBACH,CAAC,CAAC;wBACE,EAAE,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE;wBACjC,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,aAAa,EAAE;wBAClC,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE;qBAC9B,CAAC;YACR,KAAK,SAAS;gBACZ,OAAO;oBACL,EAAE,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE;oBAClC,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE;iBAC9B,CAAC;YACJ,KAAK,YAAY;gBACf,OAAO,EAAE,CAAC;YACZ,KAAK,QAAQ;gBACX,OAAO;oBACL,EAAE,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE;oBACnC,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE;iBAC9B,CAAC;QACN,CAAC;IACH,CAAC,CAAC;IAEF,OAAO,CACL,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,EAAC,OAAO,EAAE,CAAC,aACpC,KAAC,aAAa,IAAC,KAAK,EAAC,MAAM,GAAG,EAC9B,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,EAAC,WAAW,EAAE,CAAC,aACvC,IAAI,CAAC,IAAI,KAAK,QAAQ,IAAI,YAAY,EAAE,EACxC,IAAI,CAAC,IAAI,KAAK,SAAS,IAAI,aAAa,CAAC,IAAI,CAAC,EAC9C,IAAI,CAAC,IAAI,KAAK,QAAQ,IAAI,YAAY,CAAC,IAAI,CAAC,EAC5C,IAAI,CAAC,IAAI,KAAK,SAAS,IAAI,aAAa,EAAE,EAC1C,IAAI,CAAC,IAAI,KAAK,SAAS,IAAI,aAAa,CAAC,IAAI,CAAC,EAC9C,IAAI,CAAC,IAAI,KAAK,YAAY,IAAI,gBAAgB,CAAC,IAAI,CAAC,EACpD,IAAI,CAAC,IAAI,KAAK,QAAQ,IAAI,YAAY,CAAC,IAAI,CAAC,EAC7C,KAAC,UAAU,IAAC,KAAK,EAAE,KAAK,EAAE,GAAI,IAC1B,IACF,CACP,CAAC;AACJ,CAAC"}
@@ -0,0 +1,21 @@
1
+ import React from 'react';
2
+ import type { WalletInfo } from '@shieldedtech/moth-wallet';
3
+ interface KeysProps {
4
+ wallets: WalletInfo[];
5
+ isUnlocked: (name: string) => boolean;
6
+ getAddresses: (name: string) => {
7
+ unshielded: string;
8
+ shielded: string;
9
+ dust: string;
10
+ } | null;
11
+ onUnlock: (name: string, passphrase: string) => Promise<void>;
12
+ onLock: (name: string) => void;
13
+ onSwitch: (name: string) => Promise<void>;
14
+ onRemove: (name: string) => Promise<void>;
15
+ onClearCache: (name: string) => void;
16
+ onCreateNew: () => void;
17
+ onBack: () => void;
18
+ }
19
+ export declare function Keys({ wallets, isUnlocked, getAddresses, onUnlock, onLock, onSwitch, onRemove, onClearCache, onCreateNew, onBack, }: KeysProps): React.JSX.Element;
20
+ export {};
21
+ //# sourceMappingURL=keys.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"keys.d.ts","sourceRoot":"","sources":["../../src/screens/keys.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA8B,MAAM,OAAO,CAAC;AAGnD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAI5D,UAAU,SAAS;IACjB,OAAO,EAAE,UAAU,EAAE,CAAC;IACtB,UAAU,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC;IACtC,YAAY,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IAC9F,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9D,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAC/B,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1C,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1C,YAAY,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC,WAAW,EAAE,MAAM,IAAI,CAAC;IACxB,MAAM,EAAE,MAAM,IAAI,CAAC;CACpB;AAID,wBAAgB,IAAI,CAAC,EACnB,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,GAC3G,EAAE,SAAS,qBA6JX"}
@@ -0,0 +1,126 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useEffect, useState } from 'react';
3
+ import { Box, Text, useInput } from 'ink';
4
+ import TextInput from 'ink-text-input';
5
+ import { SectionHeader } from '../components/SectionHeader.js';
6
+ import { HelpFooter } from '../components/HelpFooter.js';
7
+ export function Keys({ wallets, isUnlocked, getAddresses, onUnlock, onLock, onSwitch, onRemove, onClearCache, onCreateNew, onBack, }) {
8
+ const [mode, setMode] = useState('list');
9
+ const createIndex = wallets.length;
10
+ const itemCount = wallets.length + 1;
11
+ const [highlighted, setHighlighted] = useState(() => {
12
+ const active = wallets.findIndex(w => w.active);
13
+ return active >= 0 ? active : 0;
14
+ });
15
+ const [unlockTarget, setUnlockTarget] = useState('');
16
+ const [unlockPass, setUnlockPass] = useState('');
17
+ const [message, setMessage] = useState('');
18
+ const [error, setError] = useState('');
19
+ useEffect(() => {
20
+ if (highlighted >= itemCount) {
21
+ setHighlighted(Math.max(0, itemCount - 1));
22
+ }
23
+ }, [itemCount, highlighted]);
24
+ const hints = () => {
25
+ const out = [{ key: '↑/↓', label: 'select' }];
26
+ if (highlighted === createIndex) {
27
+ out.push({ key: 'Enter', label: 'create' });
28
+ }
29
+ else {
30
+ const w = wallets[highlighted];
31
+ if (w) {
32
+ if (isUnlocked(w.name)) {
33
+ out.push({ key: 'Enter', label: 'switch' });
34
+ out.push({ key: 'l', label: 'lock' });
35
+ }
36
+ else {
37
+ out.push({ key: 'Enter', label: 'unlock' });
38
+ }
39
+ out.push({ key: 'd', label: 'delete' });
40
+ out.push({ key: 'c', label: 'clear cache' });
41
+ }
42
+ }
43
+ out.push({ key: 'ESC', label: 'back' });
44
+ return out;
45
+ };
46
+ useInput((input, key) => {
47
+ if (key.escape) {
48
+ if (mode !== 'list') {
49
+ setMode('list');
50
+ setError('');
51
+ return;
52
+ }
53
+ onBack();
54
+ return;
55
+ }
56
+ if (mode !== 'list')
57
+ return;
58
+ if (key.upArrow) {
59
+ setHighlighted(i => (i <= 0 ? itemCount - 1 : i - 1));
60
+ return;
61
+ }
62
+ if (key.downArrow) {
63
+ setHighlighted(i => (i >= itemCount - 1 ? 0 : i + 1));
64
+ return;
65
+ }
66
+ if (highlighted === createIndex) {
67
+ if (key.return) {
68
+ onCreateNew();
69
+ return;
70
+ }
71
+ return;
72
+ }
73
+ const w = wallets[highlighted];
74
+ if (!w)
75
+ return;
76
+ if (key.return) {
77
+ if (isUnlocked(w.name)) {
78
+ onSwitch(w.name).then(() => setMessage(`Switched to ${w.name}`));
79
+ }
80
+ else {
81
+ setUnlockTarget(w.name);
82
+ setUnlockPass('');
83
+ setError('');
84
+ setMode('unlock');
85
+ }
86
+ return;
87
+ }
88
+ if (input === 'l') {
89
+ if (isUnlocked(w.name)) {
90
+ onLock(w.name);
91
+ setMessage(`Locked ${w.name}`);
92
+ }
93
+ return;
94
+ }
95
+ if (input === 'd') {
96
+ onRemove(w.name).then(() => setMessage(`Removed ${w.name}`));
97
+ return;
98
+ }
99
+ if (input === 'c') {
100
+ onClearCache(w.name);
101
+ setMessage(`Sync cache cleared for ${w.name}`);
102
+ return;
103
+ }
104
+ });
105
+ if (mode === 'unlock') {
106
+ return (_jsxs(Box, { flexDirection: "column", padding: 1, children: [_jsx(SectionHeader, { title: `Unlock Wallet · ${unlockTarget}` }), _jsxs(Box, { flexDirection: "column", paddingLeft: 2, children: [_jsxs(Box, { children: [_jsx(Text, { children: "Passphrase: " }), _jsx(TextInput, { value: unlockPass, onChange: setUnlockPass, mask: "*", onSubmit: async () => {
107
+ try {
108
+ await onUnlock(unlockTarget, unlockPass);
109
+ setMessage(`Unlocked ${unlockTarget}`);
110
+ setMode('list');
111
+ }
112
+ catch {
113
+ setError('Wrong passphrase or corrupted keystore');
114
+ }
115
+ }, placeholder: "********" })] }), error && _jsx(Text, { color: "red", children: error }), _jsx(HelpFooter, { hints: [{ key: 'ESC', label: 'cancel' }] })] })] }));
116
+ }
117
+ return (_jsxs(Box, { flexDirection: "column", padding: 1, children: [_jsx(SectionHeader, { title: "Wallet Keys" }), _jsxs(Box, { flexDirection: "column", paddingLeft: 2, children: [_jsxs(Box, { flexDirection: "column", children: [wallets.map((w, i) => {
118
+ const unlocked = isUnlocked(w.name);
119
+ const addrs = unlocked ? getAddresses(w.name) : null;
120
+ const isHi = i === highlighted;
121
+ return (_jsxs(Box, { flexDirection: "column", marginBottom: addrs ? 1 : 0, children: [_jsx(Box, { children: _jsxs(Text, { color: isHi ? 'cyan' : (w.active ? 'cyan' : undefined), bold: isHi, children: [isHi ? '› ' : ' ', w.name.padEnd(20), unlocked
122
+ ? _jsx(Text, { color: "green", children: " unlocked" })
123
+ : _jsx(Text, { color: "red", children: " locked" }), w.active && ' ← active'] }) }), addrs && (_jsxs(Box, { flexDirection: "column", paddingLeft: 4, children: [_jsxs(Text, { dimColor: true, children: ["unshielded ", addrs.unshielded] }), _jsxs(Text, { dimColor: true, children: ["shielded ", addrs.shielded] }), _jsxs(Text, { dimColor: true, children: ["dust ", addrs.dust] })] }))] }, w.name));
124
+ }), _jsx(Box, { marginTop: wallets.length > 0 ? 1 : 0, children: _jsxs(Text, { color: highlighted === createIndex ? 'cyan' : 'green', bold: highlighted === createIndex, children: [highlighted === createIndex ? '› ' : ' ', "+ Create new wallet"] }) })] }), message && _jsx(Box, { marginTop: 1, children: _jsx(Text, { color: "green", children: message }) }), error && _jsx(Box, { marginTop: 1, children: _jsx(Text, { color: "red", children: error }) }), _jsx(HelpFooter, { hints: hints() })] })] }));
125
+ }
126
+ //# sourceMappingURL=keys.js.map