@polkahub/ledger 0.1.0-pre.3 → 0.1.0-pre.6

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.
@@ -4,43 +4,30 @@ import { useSetSelectedAccount } from '@polkahub/select-account';
4
4
  import { SourceButton, Button, CardPlaceholder, Checkbox } from '@polkahub/ui-components';
5
5
  import { state, useStateObservable } from '@react-rxjs/core';
6
6
  import { createSignal } from '@react-rxjs/utils';
7
- import { Trash2, ChevronLeft, Usb } from 'lucide-react';
8
- import { useContext, useEffect } from 'react';
7
+ import { Trash2, Usb, TriangleAlert, ChevronLeft, ChevronRight } from 'lucide-react';
8
+ import { useContext } from 'react';
9
9
  import { debounceTime, map, concatMap, filter, take, switchMap, startWith, catchError } from 'rxjs';
10
10
  import ledgerImg from './assets/ledger.webp.js';
11
11
  import { ledgerProviderId } from './provider.js';
12
12
 
13
13
  const ManageLedger = () => {
14
- const { setContent } = useContext(ModalContext);
14
+ const { pushContent } = useContext(ModalContext);
15
15
  const ledgerProvider = usePlugin(ledgerProviderId);
16
16
  return /* @__PURE__ */ jsx(
17
17
  SourceButton,
18
18
  {
19
19
  label: "Ledger",
20
- onClick: () => setContent(/* @__PURE__ */ jsx(LedgerAccounts, { setContent })),
20
+ onClick: () => pushContent({ title: "Ledger Accounts", element: /* @__PURE__ */ jsx(LedgerAccounts, {}) }),
21
21
  disabled: !ledgerProvider,
22
22
  children: /* @__PURE__ */ jsx("img", { src: ledgerImg, alt: "Ledger", className: "h-10 rounded" })
23
23
  }
24
24
  );
25
25
  };
26
- const LedgerAccounts = ({ setContent }) => {
26
+ const LedgerAccounts = () => {
27
+ const { pushContent, popContent } = useContext(ModalContext);
27
28
  const ledgerProvider = usePlugin(ledgerProviderId);
28
29
  const ledgerAccounts = useStateObservable(ledgerProvider.accounts$);
29
30
  const setAccount = useSetSelectedAccount();
30
- useEffect(() => {
31
- if (ledgerAccounts.length === 0) {
32
- setContent(
33
- /* @__PURE__ */ jsx(
34
- ImportAccounts,
35
- {
36
- onClose: (accounts) => setContent(
37
- accounts.length ? /* @__PURE__ */ jsx(LedgerAccounts, { setContent }) : null
38
- )
39
- }
40
- )
41
- );
42
- }
43
- }, [ledgerAccounts, setContent]);
44
31
  return /* @__PURE__ */ jsxs("div", { className: "space-y-4", children: [
45
32
  ledgerAccounts.length ? /* @__PURE__ */ jsxs("div", { children: [
46
33
  /* @__PURE__ */ jsx("h3", { className: "font-medium text-muted-foreground", children: "Added addresses" }),
@@ -76,39 +63,21 @@ const LedgerAccounts = ({ setContent }) => {
76
63
  },
77
64
  `${acc.address}-${acc.deviceId}-${acc.index}`
78
65
  )) })
79
- ] }) : null,
80
- /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between flex-wrap-reverse gap-2", children: [
81
- /* @__PURE__ */ jsxs(
82
- Button,
83
- {
84
- onClick: () => setContent(null),
85
- variant: "secondary",
86
- type: "button",
87
- children: [
88
- /* @__PURE__ */ jsx(ChevronLeft, {}),
89
- "Back"
90
- ]
91
- }
92
- ),
93
- /* @__PURE__ */ jsxs(
94
- Button,
95
- {
96
- type: "button",
97
- onClick: () => setContent(
98
- /* @__PURE__ */ jsx(
99
- ImportAccounts,
100
- {
101
- onClose: () => setContent(/* @__PURE__ */ jsx(LedgerAccounts, { setContent }))
102
- }
103
- )
104
- ),
105
- children: [
106
- /* @__PURE__ */ jsx(Usb, {}),
107
- "Import accounts"
108
- ]
109
- }
110
- )
111
- ] })
66
+ ] }) : /* @__PURE__ */ jsx("div", { className: "text-sm text-muted-foreground text-center", children: "No accounts imported" }),
67
+ /* @__PURE__ */ jsx("div", { className: "flex justify-end", children: /* @__PURE__ */ jsxs(
68
+ Button,
69
+ {
70
+ type: "button",
71
+ onClick: () => pushContent({
72
+ title: "Import Ledger Accounts",
73
+ element: /* @__PURE__ */ jsx(ImportAccounts, { onClose: popContent })
74
+ }),
75
+ children: [
76
+ /* @__PURE__ */ jsx(Usb, {}),
77
+ "Import accounts"
78
+ ]
79
+ }
80
+ ) })
112
81
  ] });
113
82
  };
114
83
  const PAGE_SIZE = 5;
@@ -137,12 +106,15 @@ const pageAccounts$ = state(
137
106
  return { ...value };
138
107
  }),
139
108
  startWith({ ...value }),
140
- catchError((ex) => [
141
- {
142
- ...value,
143
- error: ex.message
144
- }
145
- ])
109
+ catchError((ex) => {
110
+ console.error(ex);
111
+ return [
112
+ {
113
+ ...value,
114
+ error: ex.message
115
+ }
116
+ ];
117
+ })
146
118
  );
147
119
  })
148
120
  ),
@@ -151,9 +123,7 @@ const pageAccounts$ = state(
151
123
  error: null
152
124
  }
153
125
  );
154
- const ImportAccounts = ({
155
- onClose
156
- }) => {
126
+ const ImportAccounts = ({ onClose }) => {
157
127
  const { id } = usePolkaHubContext();
158
128
  const ledgerProvider = usePlugin(ledgerProviderId);
159
129
  const ledgerAccounts = useStateObservable(ledgerProvider.accounts$);
@@ -161,11 +131,18 @@ const ImportAccounts = ({
161
131
  const { accounts, error } = useStateObservable(pageAccounts$(id));
162
132
  const allLoading = accounts.every((v) => v == null);
163
133
  const allLoaded = accounts.every((v) => v != null);
134
+ const PLACEHOLDER_HEIGHT = 232;
164
135
  return /* @__PURE__ */ jsxs("div", { className: "space-y-2", children: [
165
- error ? /* @__PURE__ */ jsxs("div", { children: [
166
- "Error: ",
167
- error
168
- ] }) : allLoading ? /* @__PURE__ */ jsx(CardPlaceholder, { height: 152 }) : /* @__PURE__ */ jsx("ul", { className: "space-y-2", children: accounts.map((acc, i) => /* @__PURE__ */ jsx("li", { className: "flex gap-2 items-center", children: acc ? /* @__PURE__ */ jsxs(Fragment, { children: [
136
+ error ? /* @__PURE__ */ jsxs("div", { className: "space-y-2", style: { height: PLACEHOLDER_HEIGHT }, children: [
137
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-1", children: [
138
+ /* @__PURE__ */ jsx(TriangleAlert, { className: "text-destructive" }),
139
+ /* @__PURE__ */ jsxs("p", { children: [
140
+ "Error: ",
141
+ error
142
+ ] })
143
+ ] }),
144
+ /* @__PURE__ */ jsx(Button, { type: "button", onClick: () => setPage(page), children: "Retry" })
145
+ ] }) : allLoading ? /* @__PURE__ */ jsx(CardPlaceholder, { height: PLACEHOLDER_HEIGHT }) : /* @__PURE__ */ jsx("ul", { className: "space-y-2", children: accounts.map((acc, i) => /* @__PURE__ */ jsx("li", { className: "flex gap-2 items-center", children: acc ? /* @__PURE__ */ jsxs(Fragment, { children: [
169
146
  /* @__PURE__ */ jsxs("div", { className: "text-xs text-muted-foreground tabular-nums", children: [
170
147
  acc.index,
171
148
  "."
@@ -188,29 +165,37 @@ const ImportAccounts = ({
188
165
  /* @__PURE__ */ jsx(AddressIdentity, { addr: acc.address }),
189
166
  /* @__PURE__ */ jsx("div", { className: "grow" }),
190
167
  /* @__PURE__ */ jsx(AddressBalance, { addr: acc.address })
191
- ] }) : /* @__PURE__ */ jsx("div", { className: "bg-muted w-full rounded shadow animate-pulse h-6" }) }, i)) }),
168
+ ] }) : /* @__PURE__ */ jsx("div", { className: "bg-muted w-full rounded shadow animate-pulse h-10" }) }, i)) }),
192
169
  /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between", children: [
193
- /* @__PURE__ */ jsxs(
194
- Button,
195
- {
196
- onClick: () => onClose(ledgerAccounts),
197
- variant: "secondary",
198
- type: "button",
199
- children: [
200
- /* @__PURE__ */ jsx(ChevronLeft, {}),
201
- "Back"
202
- ]
203
- }
204
- ),
205
- allLoaded ? /* @__PURE__ */ jsx(
206
- Button,
207
- {
208
- onClick: () => setPage(page + 1),
209
- variant: "secondary",
210
- type: "button",
211
- children: "Next Page"
212
- }
213
- ) : null
170
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
171
+ /* @__PURE__ */ jsxs(
172
+ Button,
173
+ {
174
+ onClick: () => setPage(page - 1),
175
+ variant: "secondary",
176
+ type: "button",
177
+ disabled: !allLoaded || page == 0,
178
+ children: [
179
+ /* @__PURE__ */ jsx(ChevronLeft, {}),
180
+ "Prev"
181
+ ]
182
+ }
183
+ ),
184
+ /* @__PURE__ */ jsxs(
185
+ Button,
186
+ {
187
+ onClick: () => setPage(page + 1),
188
+ variant: "secondary",
189
+ type: "button",
190
+ disabled: !allLoaded,
191
+ children: [
192
+ "Next",
193
+ /* @__PURE__ */ jsx(ChevronRight, {})
194
+ ]
195
+ }
196
+ )
197
+ ] }),
198
+ /* @__PURE__ */ jsx(Button, { onClick: onClose, type: "button", children: "Done" })
214
199
  ] })
215
200
  ] });
216
201
  };
@@ -1 +1 @@
1
- {"version":3,"file":"ManageLedger.js","sources":["../src/ManageLedger.tsx"],"sourcesContent":["import {\n AddressBalance,\n AddressIdentity,\n ModalContext,\n plugin$,\n usePlugin,\n usePolkaHubContext,\n} from \"@polkahub/context\";\nimport { useSetSelectedAccount } from \"@polkahub/select-account\";\nimport {\n Button,\n CardPlaceholder,\n Checkbox,\n SourceButton,\n} from \"@polkahub/ui-components\";\nimport { state, useStateObservable } from \"@react-rxjs/core\";\nimport { createSignal } from \"@react-rxjs/utils\";\nimport { ChevronLeft, Trash2, Usb } from \"lucide-react\";\nimport { FC, ReactElement, useContext, useEffect } from \"react\";\nimport {\n catchError,\n concatMap,\n debounceTime,\n filter,\n map,\n Observable,\n startWith,\n switchMap,\n take,\n} from \"rxjs\";\nimport ledgerImg from \"./assets/ledger.webp\";\nimport {\n LedgerAccount,\n LedgerAccountInfo,\n LedgerProvider,\n ledgerProviderId,\n} from \"./provider\";\n\nexport const ManageLedger = () => {\n const { setContent } = useContext(ModalContext)!;\n const ledgerProvider = usePlugin<LedgerProvider>(ledgerProviderId);\n\n return (\n <SourceButton\n label=\"Ledger\"\n onClick={() => setContent(<LedgerAccounts setContent={setContent} />)}\n disabled={!ledgerProvider}\n >\n <img src={ledgerImg} alt=\"Ledger\" className=\"h-10 rounded\" />\n </SourceButton>\n );\n};\n\nconst LedgerAccounts: FC<{\n setContent: (element: ReactElement | null) => void;\n}> = ({ setContent }) => {\n const ledgerProvider = usePlugin<LedgerProvider>(ledgerProviderId)!;\n const ledgerAccounts = useStateObservable(ledgerProvider.accounts$);\n const setAccount = useSetSelectedAccount();\n\n useEffect(() => {\n if (ledgerAccounts.length === 0) {\n setContent(\n <ImportAccounts\n onClose={(accounts) =>\n setContent(\n accounts.length ? (\n <LedgerAccounts setContent={setContent} />\n ) : null\n )\n }\n />\n );\n }\n }, [ledgerAccounts, setContent]);\n\n return (\n <div className=\"space-y-4\">\n {ledgerAccounts.length ? (\n <div>\n <h3 className=\"font-medium text-muted-foreground\">Added addresses</h3>\n <ul className=\"space-y-2\">\n {ledgerAccounts.map((acc) => (\n <li\n key={`${acc.address}-${acc.deviceId}-${acc.index}`}\n className=\"flex gap-2 items-center\"\n >\n <Button\n variant=\"outline\"\n className=\"text-destructive\"\n type=\"button\"\n onClick={() => ledgerProvider.removeAccount(acc)}\n >\n <Trash2 />\n </Button>\n <AddressIdentity addr={acc.address} />\n <div className=\"grow\" />\n <AddressBalance addr={acc.address} />\n {setAccount && (\n <Button\n variant=\"secondary\"\n onClick={() => {\n setAccount(acc);\n }}\n >\n Select\n </Button>\n )}\n </li>\n ))}\n </ul>\n </div>\n ) : null}\n <div className=\"flex items-center justify-between flex-wrap-reverse gap-2\">\n <Button\n onClick={() => setContent(null)}\n variant=\"secondary\"\n type=\"button\"\n >\n <ChevronLeft />\n Back\n </Button>\n <Button\n type=\"button\"\n onClick={() =>\n setContent(\n <ImportAccounts\n onClose={() =>\n setContent(<LedgerAccounts setContent={setContent} />)\n }\n />\n )\n }\n >\n <Usb />\n Import accounts\n </Button>\n </div>\n </div>\n );\n};\n\nconst PAGE_SIZE = 5;\n\nconst [pageChange$, setPage] = createSignal<number>();\nconst page$ = state(pageChange$, 0);\ntype PageAccounts = {\n accounts: Array<LedgerAccountInfo | null>;\n error: string | null;\n};\nconst pageAccounts$ = state(\n (ctxId: string) =>\n page$.pipe(\n // React might mess it up with a double re-render.\n debounceTime(200),\n map((page) =>\n new Array(PAGE_SIZE).fill(0).map((_, i) => page * PAGE_SIZE + i)\n ),\n concatMap((idxs): Observable<PageAccounts> => {\n const value: PageAccounts = {\n accounts: idxs.map(() => null),\n error: null,\n };\n\n return plugin$<LedgerProvider>(ctxId, ledgerProviderId).pipe(\n filter((v) => v != null),\n take(1),\n switchMap((ledgerProvider) =>\n ledgerProvider.getLedgerAccounts$(idxs)\n ),\n map((account, i) => {\n value.accounts[i] = account;\n\n return { ...value };\n }),\n startWith({ ...value }),\n catchError((ex) => [\n {\n ...value,\n error: ex.message,\n },\n ])\n );\n })\n ),\n {\n accounts: new Array(PAGE_SIZE).fill(null),\n error: null,\n } as PageAccounts\n);\n\nconst ImportAccounts: FC<{ onClose: (accounts: LedgerAccount[]) => void }> = ({\n onClose,\n}) => {\n const { id } = usePolkaHubContext();\n const ledgerProvider = usePlugin<LedgerProvider>(ledgerProviderId)!;\n const ledgerAccounts = useStateObservable(ledgerProvider.accounts$);\n const page = useStateObservable(page$);\n const { accounts, error } = useStateObservable(pageAccounts$(id));\n\n const allLoading = accounts.every((v) => v == null);\n const allLoaded = accounts.every((v) => v != null);\n\n return (\n <div className=\"space-y-2\">\n {error ? (\n <div>Error: {error}</div>\n ) : allLoading ? (\n <CardPlaceholder height={152} />\n ) : (\n <ul className=\"space-y-2\">\n {accounts.map((acc, i) => (\n <li key={i} className=\"flex gap-2 items-center\">\n {acc ? (\n <>\n <div className=\"text-xs text-muted-foreground tabular-nums\">\n {acc.index}.\n </div>\n <Checkbox\n checked={ledgerAccounts.some(\n (v) =>\n v.deviceId === acc.deviceId &&\n v.index === acc.index &&\n v.address === acc.address\n )}\n onCheckedChange={(chk) => {\n if (chk) {\n ledgerProvider.addAccount(acc);\n } else {\n ledgerProvider.removeAccount(acc);\n }\n }}\n />\n <AddressIdentity addr={acc.address} />\n <div className=\"grow\" />\n <AddressBalance addr={acc.address} />\n </>\n ) : (\n <div className=\"bg-muted w-full rounded shadow animate-pulse h-6\" />\n )}\n </li>\n ))}\n </ul>\n )}\n <div className=\"flex items-center justify-between\">\n <Button\n onClick={() => onClose(ledgerAccounts)}\n variant=\"secondary\"\n type=\"button\"\n >\n <ChevronLeft />\n Back\n </Button>\n {allLoaded ? (\n <Button\n onClick={() => setPage(page + 1)}\n variant=\"secondary\"\n type=\"button\"\n >\n Next Page\n </Button>\n ) : null}\n </div>\n </div>\n );\n};\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ManageLedger.js","sources":["../src/ManageLedger.tsx"],"sourcesContent":["import {\n AddressBalance,\n AddressIdentity,\n ModalContext,\n plugin$,\n usePlugin,\n usePolkaHubContext,\n} from \"@polkahub/context\";\nimport { useSetSelectedAccount } from \"@polkahub/select-account\";\nimport {\n Button,\n CardPlaceholder,\n Checkbox,\n SourceButton,\n} from \"@polkahub/ui-components\";\nimport { state, useStateObservable } from \"@react-rxjs/core\";\nimport { createSignal } from \"@react-rxjs/utils\";\nimport {\n ChevronLeft,\n ChevronRight,\n Trash2,\n TriangleAlert,\n Usb,\n} from \"lucide-react\";\nimport { FC, useContext } from \"react\";\nimport {\n catchError,\n concatMap,\n debounceTime,\n filter,\n map,\n Observable,\n startWith,\n switchMap,\n take,\n} from \"rxjs\";\nimport ledgerImg from \"./assets/ledger.webp\";\nimport {\n LedgerAccountInfo,\n LedgerProvider,\n ledgerProviderId,\n} from \"./provider\";\n\nexport const ManageLedger = () => {\n const { pushContent } = useContext(ModalContext)!;\n const ledgerProvider = usePlugin<LedgerProvider>(ledgerProviderId);\n\n return (\n <SourceButton\n label=\"Ledger\"\n onClick={() =>\n pushContent({ title: \"Ledger Accounts\", element: <LedgerAccounts /> })\n }\n disabled={!ledgerProvider}\n >\n <img src={ledgerImg} alt=\"Ledger\" className=\"h-10 rounded\" />\n </SourceButton>\n );\n};\n\nconst LedgerAccounts: FC = () => {\n const { pushContent, popContent } = useContext(ModalContext)!;\n const ledgerProvider = usePlugin<LedgerProvider>(ledgerProviderId)!;\n const ledgerAccounts = useStateObservable(ledgerProvider.accounts$);\n const setAccount = useSetSelectedAccount();\n\n return (\n <div className=\"space-y-4\">\n {ledgerAccounts.length ? (\n <div>\n <h3 className=\"font-medium text-muted-foreground\">Added addresses</h3>\n <ul className=\"space-y-2\">\n {ledgerAccounts.map((acc) => (\n <li\n key={`${acc.address}-${acc.deviceId}-${acc.index}`}\n className=\"flex gap-2 items-center\"\n >\n <Button\n variant=\"outline\"\n className=\"text-destructive\"\n type=\"button\"\n onClick={() => ledgerProvider.removeAccount(acc)}\n >\n <Trash2 />\n </Button>\n <AddressIdentity addr={acc.address} />\n <div className=\"grow\" />\n <AddressBalance addr={acc.address} />\n {setAccount && (\n <Button\n variant=\"secondary\"\n onClick={() => {\n setAccount(acc);\n }}\n >\n Select\n </Button>\n )}\n </li>\n ))}\n </ul>\n </div>\n ) : (\n <div className=\"text-sm text-muted-foreground text-center\">\n No accounts imported\n </div>\n )}\n <div className=\"flex justify-end\">\n <Button\n type=\"button\"\n onClick={() =>\n pushContent({\n title: \"Import Ledger Accounts\",\n element: <ImportAccounts onClose={popContent} />,\n })\n }\n >\n <Usb />\n Import accounts\n </Button>\n </div>\n </div>\n );\n};\n\nconst PAGE_SIZE = 5;\n\nconst [pageChange$, setPage] = createSignal<number>();\nconst page$ = state(pageChange$, 0);\ntype PageAccounts = {\n accounts: Array<LedgerAccountInfo | null>;\n error: string | null;\n};\nconst pageAccounts$ = state(\n (ctxId: string) =>\n page$.pipe(\n // React might mess it up with a double re-render.\n debounceTime(200),\n map((page) =>\n new Array(PAGE_SIZE).fill(0).map((_, i) => page * PAGE_SIZE + i)\n ),\n concatMap((idxs): Observable<PageAccounts> => {\n const value: PageAccounts = {\n accounts: idxs.map(() => null),\n error: null,\n };\n\n return plugin$<LedgerProvider>(ctxId, ledgerProviderId).pipe(\n filter((v) => v != null),\n take(1),\n switchMap((ledgerProvider) =>\n ledgerProvider.getLedgerAccounts$(idxs)\n ),\n map((account, i) => {\n value.accounts[i] = account;\n\n return { ...value };\n }),\n startWith({ ...value }),\n catchError((ex) => {\n console.error(ex);\n return [\n {\n ...value,\n error: ex.message,\n },\n ];\n })\n );\n })\n ),\n {\n accounts: new Array(PAGE_SIZE).fill(null),\n error: null,\n } as PageAccounts\n);\n\nconst ImportAccounts: FC<{ onClose: () => void }> = ({ onClose }) => {\n const { id } = usePolkaHubContext();\n const ledgerProvider = usePlugin<LedgerProvider>(ledgerProviderId)!;\n const ledgerAccounts = useStateObservable(ledgerProvider.accounts$);\n const page = useStateObservable(page$);\n const { accounts, error } = useStateObservable(pageAccounts$(id));\n\n const allLoading = accounts.every((v) => v == null);\n const allLoaded = accounts.every((v) => v != null);\n\n const PLACEHOLDER_HEIGHT = 232;\n\n return (\n <div className=\"space-y-2\">\n {error ? (\n <div className=\"space-y-2\" style={{ height: PLACEHOLDER_HEIGHT }}>\n <div className=\"flex items-center gap-1\">\n <TriangleAlert className=\"text-destructive\" />\n <p>Error: {error}</p>\n </div>\n <Button type=\"button\" onClick={() => setPage(page)}>\n Retry\n </Button>\n </div>\n ) : allLoading ? (\n <CardPlaceholder height={PLACEHOLDER_HEIGHT} />\n ) : (\n <ul className=\"space-y-2\">\n {accounts.map((acc, i) => (\n <li key={i} className=\"flex gap-2 items-center\">\n {acc ? (\n <>\n <div className=\"text-xs text-muted-foreground tabular-nums\">\n {acc.index}.\n </div>\n <Checkbox\n checked={ledgerAccounts.some(\n (v) =>\n v.deviceId === acc.deviceId &&\n v.index === acc.index &&\n v.address === acc.address\n )}\n onCheckedChange={(chk) => {\n if (chk) {\n ledgerProvider.addAccount(acc);\n } else {\n ledgerProvider.removeAccount(acc);\n }\n }}\n />\n <AddressIdentity addr={acc.address} />\n <div className=\"grow\" />\n <AddressBalance addr={acc.address} />\n </>\n ) : (\n <div className=\"bg-muted w-full rounded shadow animate-pulse h-10\" />\n )}\n </li>\n ))}\n </ul>\n )}\n <div className=\"flex items-center justify-between\">\n <div className=\"flex items-center gap-2\">\n <Button\n onClick={() => setPage(page - 1)}\n variant=\"secondary\"\n type=\"button\"\n disabled={!allLoaded || page == 0}\n >\n <ChevronLeft />\n Prev\n </Button>\n <Button\n onClick={() => setPage(page + 1)}\n variant=\"secondary\"\n type=\"button\"\n disabled={!allLoaded}\n >\n Next\n <ChevronRight />\n </Button>\n </div>\n <Button onClick={onClose} type=\"button\">\n Done\n </Button>\n </div>\n </div>\n );\n};\n"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@polkahub/ledger",
3
- "version": "0.1.0-pre.3",
3
+ "version": "0.1.0-pre.6",
4
4
  "license": "MIT",
5
5
  "sideEffects": false,
6
6
  "type": "module",
@@ -27,13 +27,14 @@
27
27
  "@polkadot-api/ledger-signer": "^0.2.12",
28
28
  "@react-rxjs/core": "^0.10.8",
29
29
  "@react-rxjs/utils": "^0.9.7",
30
+ "buffer": "^6.0.3",
30
31
  "lucide-react": "^0.548.0",
31
32
  "polkadot-api": "^1.20.0",
32
33
  "rxjs": "^7.8.2",
33
- "@polkahub/context": "0.1.0-pre.3",
34
- "@polkahub/plugin": "0.1.0-pre.3",
35
- "@polkahub/ui-components": "0.1.0-pre.3",
36
- "@polkahub/select-account": "0.1.0-pre.3"
34
+ "@polkahub/context": "0.1.0-pre.5",
35
+ "@polkahub/select-account": "0.1.0-pre.5",
36
+ "@polkahub/plugin": "0.1.0-pre.5",
37
+ "@polkahub/ui-components": "0.1.0-pre.5"
37
38
  },
38
39
  "peerDependencies": {
39
40
  "@types/react": "^19.2.2",