@ckb-ccc/connector 0.0.5-alpha.0 → 0.0.5-alpha.2

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 (49) hide show
  1. package/dist/advancedBarrel.d.ts +1 -0
  2. package/dist/advancedBarrel.d.ts.map +1 -1
  3. package/dist/advancedBarrel.js +1 -0
  4. package/dist/assets/chains/ckb.sm.svg.d.ts +2 -0
  5. package/dist/assets/chains/ckb.sm.svg.d.ts.map +1 -0
  6. package/dist/assets/chains/ckb.sm.svg.js +2 -0
  7. package/dist/assets/copy.svg.d.ts +2 -0
  8. package/dist/assets/copy.svg.d.ts.map +1 -0
  9. package/dist/assets/copy.svg.js +2 -0
  10. package/dist/assets/diconnect.svg.d.ts +2 -0
  11. package/dist/assets/diconnect.svg.d.ts.map +1 -0
  12. package/dist/assets/diconnect.svg.js +2 -0
  13. package/dist/assets/left.svg.d.ts +2 -0
  14. package/dist/assets/left.svg.d.ts.map +1 -0
  15. package/dist/assets/left.svg.js +2 -0
  16. package/dist/assets/swap.svg.d.ts +2 -0
  17. package/dist/assets/swap.svg.d.ts.map +1 -0
  18. package/dist/assets/swap.svg.js +2 -0
  19. package/dist/connector/index.d.ts +12 -0
  20. package/dist/connector/index.d.ts.map +1 -1
  21. package/dist/connector/index.js +278 -39
  22. package/dist/scenes/connected.d.ts +4 -0
  23. package/dist/scenes/connected.d.ts.map +1 -0
  24. package/dist/scenes/connected.js +71 -0
  25. package/dist/scenes/networks.d.ts +3 -0
  26. package/dist/scenes/networks.d.ts.map +1 -0
  27. package/dist/scenes/networks.js +38 -0
  28. package/dist/scenes/signers.d.ts.map +1 -1
  29. package/dist/scenes/signers.js +5 -2
  30. package/dist/scenes/wallets.d.ts +1 -1
  31. package/dist/scenes/wallets.d.ts.map +1 -1
  32. package/dist/scenes/wallets.js +9 -44
  33. package/dist/signerOpenLink/index.d.ts +13 -0
  34. package/dist/signerOpenLink/index.d.ts.map +1 -0
  35. package/dist/signerOpenLink/index.js +26 -0
  36. package/package.json +3 -3
  37. package/src/advancedBarrel.ts +1 -0
  38. package/src/assets/chains/ckb.sm.svg.ts +5 -0
  39. package/src/assets/copy.svg.ts +5 -0
  40. package/src/assets/diconnect.svg.ts +5 -0
  41. package/src/assets/left.svg.ts +5 -0
  42. package/src/assets/swap.svg.ts +5 -0
  43. package/src/connector/index.ts +331 -56
  44. package/src/scenes/connected.ts +87 -0
  45. package/src/scenes/networks.ts +47 -0
  46. package/src/scenes/signers.ts +5 -2
  47. package/src/scenes/wallets.ts +20 -63
  48. package/src/signerOpenLink/index.ts +35 -0
  49. package/dist.commonjs/tsconfig.commonjs.tsbuildinfo +0 -1
@@ -1,4 +1,5 @@
1
1
  export * from "@ckb-ccc/ccc/advancedBarrel";
2
2
  export * from "./scenes";
3
+ export * from "./signerOpenLink";
3
4
  export * from "./types";
4
5
  //# sourceMappingURL=advancedBarrel.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"advancedBarrel.d.ts","sourceRoot":"","sources":["../src/advancedBarrel.ts"],"names":[],"mappings":"AAAA,cAAc,6BAA6B,CAAC;AAC5C,cAAc,UAAU,CAAC;AACzB,cAAc,SAAS,CAAC"}
1
+ {"version":3,"file":"advancedBarrel.d.ts","sourceRoot":"","sources":["../src/advancedBarrel.ts"],"names":[],"mappings":"AAAA,cAAc,6BAA6B,CAAC;AAC5C,cAAc,UAAU,CAAC;AACzB,cAAc,kBAAkB,CAAC;AACjC,cAAc,SAAS,CAAC"}
@@ -1,3 +1,4 @@
1
1
  export * from "@ckb-ccc/ccc/advancedBarrel";
2
2
  export * from "./scenes";
3
+ export * from "./signerOpenLink";
3
4
  export * from "./types";
@@ -0,0 +1,2 @@
1
+ export declare const CKB_SM_SVG: string;
2
+ //# sourceMappingURL=ckb.sm.svg.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ckb.sm.svg.d.ts","sourceRoot":"","sources":["../../../src/assets/chains/ckb.sm.svg.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,UAAU,QAEtB,CAAC"}
@@ -0,0 +1,2 @@
1
+ import { encodeSvgToImgSrc } from "../utils";
2
+ export const CKB_SM_SVG = encodeSvgToImgSrc('<svg width="19" height="18" viewBox="0 0 19 18" fill="none" xmlns="http://www.w3.org/2000/svg"><g clip-path="url(#clip0_221_415)"><path d="M0.666992 9C0.666992 11.3869 1.6152 13.6761 3.30303 15.364C4.99086 17.0518 7.28004 18 9.66699 18C12.0539 18 14.3431 17.0518 16.031 15.364C17.7188 13.6761 18.667 11.3869 18.667 9C18.667 6.61305 17.7188 4.32387 16.031 2.63604C14.3431 0.948212 12.0539 0 9.66699 0C7.28004 0 4.99086 0.948212 3.30303 2.63604C1.6152 4.32387 0.666992 6.61305 0.666992 9Z" fill="#333333"/><path d="M5.51318 4.84619V12.9231H7.60395V8.52235H9.20549L5.51318 4.84619Z" fill="white"/><path d="M11.73 4.84619V9.24696H10.1284L13.8207 12.9231V4.84619H11.73Z" fill="white"/></g><defs><clipPath id="clip0_221_415"><rect width="18" height="18" fill="white" transform="translate(0.666992)"/></clipPath></defs></svg>');
@@ -0,0 +1,2 @@
1
+ export declare const COPY_SVG: string;
2
+ //# sourceMappingURL=copy.svg.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"copy.svg.d.ts","sourceRoot":"","sources":["../../src/assets/copy.svg.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,QAAQ,QAEpB,CAAC"}
@@ -0,0 +1,2 @@
1
+ import { encodeSvgToImgSrc } from "./utils";
2
+ export const COPY_SVG = encodeSvgToImgSrc('<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M19 13.5657V6.10526C19 5.49737 18.5091 5 17.9091 5H10.5454C9.94543 5 9.45452 5.49737 9.45452 6.10526V13.5657C9.45452 14.1736 9.94543 14.671 10.5454 14.671H17.9091C18.5091 14.671 19 14.1736 19 13.5657Z" fill="#999999"/><path d="M14.5455 15.8684H9.18183C8.58183 15.8684 8.09092 15.3711 8.09092 14.7632V9.329H6.09091C5.49091 9.329 5 9.82637 5 10.4343V17.8947C5 18.5026 5.49091 19 6.09091 19H13.4546C14.0546 19 14.5455 18.5026 14.5455 17.8947V15.8684Z" fill="#999999"/></svg>');
@@ -0,0 +1,2 @@
1
+ export declare const DISCONNECT_SVG: string;
2
+ //# sourceMappingURL=diconnect.svg.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"diconnect.svg.d.ts","sourceRoot":"","sources":["../../src/assets/diconnect.svg.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,cAAc,QAE1B,CAAC"}
@@ -0,0 +1,2 @@
1
+ import { encodeSvgToImgSrc } from "./utils";
2
+ export const DISCONNECT_SVG = encodeSvgToImgSrc('<svg width="32" height="32" viewBox="0 0 32 32" fill="none" xmlns="http://www.w3.org/2000/svg"> <rect width="32" height="32" rx="8" fill="#DDDDDD"/><path d="M20.375 16.875H14.25V15.125H20.375L19.5 13.375H21.25L23 16L21.25 18.625H19.5L20.375 16.875ZM20.9509 11.051L19.7128 12.2886C19.226 11.8 18.6473 11.4125 18.0101 11.1484C17.3729 10.8844 16.6897 10.749 16 10.75C13.1006 10.75 10.75 13.1006 10.75 16C10.75 18.8994 13.1006 21.25 16 21.25C17.4107 21.25 18.7309 20.6923 19.71 19.7147L20.9462 20.9532C20.297 21.6031 19.5259 22.1184 18.6771 22.4696C17.8283 22.8209 16.9186 23.0011 16 23C12.1341 23 9 19.8659 9 16C9 12.1341 12.1341 9 16 9C17.8816 9 19.647 9.74667 20.9509 11.051Z" fill="#666666"/></svg>');
@@ -0,0 +1,2 @@
1
+ export declare const LEFT_SVG: string;
2
+ //# sourceMappingURL=left.svg.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"left.svg.d.ts","sourceRoot":"","sources":["../../src/assets/left.svg.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,QAAQ,QAEpB,CAAC"}
@@ -0,0 +1,2 @@
1
+ import { encodeSvgToImgSrc } from "./utils";
2
+ export const LEFT_SVG = encodeSvgToImgSrc('<svg width="8" height="14" viewBox="0 0 8 14" xmlns="http://www.w3.org/2000/svg"><path d="M6.74554 13.5C6.54646 13.5 6.35454 13.4177 6.21275 13.2695L0.720203 7.55253C0.426599 7.24573 0.426599 6.75035 0.720203 6.44355L6.21275 0.725059C6.50779 0.422747 6.98185 0.42574 7.27402 0.729549C7.5662 1.03485 7.56763 1.52723 7.27832 1.83404L2.31999 6.99729L7.27975 12.162C7.49459 12.3865 7.55904 12.7233 7.44303 13.0166C7.32415 13.3084 7.0506 13.5 6.74554 13.5Z" stroke="#1E1E1E" stroke-width="1"/></svg>');
@@ -0,0 +1,2 @@
1
+ export declare const SWAP_SVG: string;
2
+ //# sourceMappingURL=swap.svg.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"swap.svg.d.ts","sourceRoot":"","sources":["../../src/assets/swap.svg.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,QAAQ,QAEpB,CAAC"}
@@ -0,0 +1,2 @@
1
+ import { encodeSvgToImgSrc } from "./utils";
2
+ export const SWAP_SVG = encodeSvgToImgSrc('<svg width="13" height="12" viewBox="0 0 13 12" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M9.30688 5.22537L11.1669 3.36536L9.30688 1.50537" stroke="#666666" stroke-width="1.33333" stroke-linecap="round" stroke-linejoin="round"/><path d="M2.16699 3.36523H11.167" stroke="#666666" stroke-width="1.33333" stroke-linecap="round" stroke-linejoin="round"/><path d="M4.02698 6.77539L2.16699 8.63541L4.02698 10.4954" stroke="#666666" stroke-width="1.33333" stroke-linecap="round" stroke-linejoin="round"/><path d="M11.167 8.63525H2.16699" stroke="#666666" stroke-width="1.33333" stroke-linecap="round" stroke-linejoin="round"/></svg>');
@@ -1,10 +1,14 @@
1
1
  import { ccc } from "@ckb-ccc/ccc";
2
2
  import { LitElement, PropertyValues } from "lit";
3
+ import { Ref } from "lit/directives/ref.js";
3
4
  export declare class WebComponentConnector extends LitElement {
4
5
  private wallets;
6
+ signerFilter?: (signerInfo: ccc.SignerInfo, wallet: ccc.Wallet) => Promise<boolean>;
5
7
  private resetListeners;
6
8
  isOpen: boolean;
7
9
  setIsOpen(isOpen: boolean): void;
10
+ name?: string;
11
+ icon?: string;
8
12
  client: ccc.Client;
9
13
  setClient(client: ccc.Client): void;
10
14
  private scene;
@@ -14,6 +18,10 @@ export declare class WebComponentConnector extends LitElement {
14
18
  private signerName?;
15
19
  wallet?: ccc.Wallet;
16
20
  signer?: ccc.SignerInfo;
21
+ private recommendAddress?;
22
+ private internalAddress?;
23
+ private balance?;
24
+ private updateSignerInfo;
17
25
  private prepareSigner;
18
26
  disconnect(): void;
19
27
  private loadConnection;
@@ -22,7 +30,11 @@ export declare class WebComponentConnector extends LitElement {
22
30
  willUpdate(changedProperties: PropertyValues): void;
23
31
  private reloadSigners;
24
32
  private addSigner;
33
+ mainRef: Ref<HTMLDivElement>;
34
+ headerRef: Ref<HTMLDivElement>;
35
+ bodyRef: Ref<HTMLDivElement>;
25
36
  render(): import("lit").TemplateResult<1>;
37
+ updated(): void;
26
38
  private closedHandler;
27
39
  private signerSelectedHandler;
28
40
  static styles: import("lit").CSSResult;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/connector/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,cAAc,CAAC;AACnC,OAAO,EAAE,UAAU,EAAE,cAAc,EAAa,MAAM,KAAK,CAAC;AAqB5D,qBACa,qBAAsB,SAAQ,UAAU;IAEnD,OAAO,CAAC,OAAO,CAA2B;IAE1C,OAAO,CAAC,cAAc,CAAsB;IAGrC,MAAM,EAAE,OAAO,CAAS;IACxB,SAAS,CAAC,MAAM,EAAE,OAAO;IAKzB,MAAM,EAAE,GAAG,CAAC,MAAM,CAAiC;IACnD,SAAS,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM;IAKnC,OAAO,CAAC,KAAK,CAAiC;IAE9C,OAAO,CAAC,cAAc,CAAC,CAAoB;IAE3C,OAAO,CAAC,cAAc,CAAC,CAAiB;IAGxC,OAAO,CAAC,UAAU,CAAC,CAAS;IAE5B,OAAO,CAAC,UAAU,CAAC,CAAS;IAErB,MAAM,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC;IAEpB,MAAM,CAAC,EAAE,GAAG,CAAC,UAAU,CAAC;IAC/B,OAAO,CAAC,aAAa;IAad,UAAU;IAOjB,OAAO,CAAC,cAAc;IAYtB,OAAO,CAAC,cAAc;IAUtB,iBAAiB,IAAI,IAAI;IAMzB,UAAU,CAAC,iBAAiB,EAAE,cAAc,GAAG,IAAI;IA0BnD,OAAO,CAAC,aAAa;IAyDrB,OAAO,CAAC,SAAS;IA+BjB,MAAM;IAwDN,OAAO,CAAC,aAAa,CAanB;IAEF,OAAO,CAAC,qBAAqB,CAkB3B;IAEF,MAAM,CAAC,MAAM,0BAiIX;CACH"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/connector/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,cAAc,CAAC;AACnC,OAAO,EAAE,UAAU,EAAE,cAAc,EAAa,MAAM,KAAK,CAAC;AAE5D,OAAO,EAAE,GAAG,EAAkB,MAAM,uBAAuB,CAAC;AA0B5D,qBACa,qBAAsB,SAAQ,UAAU;IAEnD,OAAO,CAAC,OAAO,CAA2B;IAEnC,YAAY,CAAC,EAAE,CACpB,UAAU,EAAE,GAAG,CAAC,UAAU,EAC1B,MAAM,EAAE,GAAG,CAAC,MAAM,KACf,OAAO,CAAC,OAAO,CAAC,CAAC;IAEtB,OAAO,CAAC,cAAc,CAAsB;IAGrC,MAAM,EAAE,OAAO,CAAS;IACxB,SAAS,CAAC,MAAM,EAAE,OAAO;IAKzB,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd,IAAI,CAAC,EAAE,MAAM,CAAC;IAGd,MAAM,EAAE,GAAG,CAAC,MAAM,CAAiC;IACnD,SAAS,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM;IAKnC,OAAO,CAAC,KAAK,CAAiC;IAE9C,OAAO,CAAC,cAAc,CAAC,CAAoB;IAE3C,OAAO,CAAC,cAAc,CAAC,CAAiB;IAGxC,OAAO,CAAC,UAAU,CAAC,CAAS;IAE5B,OAAO,CAAC,UAAU,CAAC,CAAS;IAErB,MAAM,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC;IAEpB,MAAM,CAAC,EAAE,GAAG,CAAC,UAAU,CAAC;IAG/B,OAAO,CAAC,gBAAgB,CAAC,CAAS;IAElC,OAAO,CAAC,eAAe,CAAC,CAAS;IAEjC,OAAO,CAAC,OAAO,CAAC,CAAU;YAEZ,gBAAgB;YAShB,aAAa;IAYpB,UAAU;IAQjB,OAAO,CAAC,cAAc;IAYtB,OAAO,CAAC,cAAc;IAUtB,iBAAiB,IAAI,IAAI;IAMzB,UAAU,CAAC,iBAAiB,EAAE,cAAc,GAAG,IAAI;IAoCnD,OAAO,CAAC,aAAa;YA2FP,SAAS;IAyCvB,OAAO,EAAE,GAAG,CAAC,cAAc,CAAC,CAAe;IAC3C,SAAS,EAAE,GAAG,CAAC,cAAc,CAAC,CAAe;IAC7C,OAAO,EAAE,GAAG,CAAC,cAAc,CAAC,CAAe;IAE3C,MAAM;IA2GN,OAAO;IAUP,OAAO,CAAC,aAAa,CAgBnB;IAEF,OAAO,CAAC,qBAAqB,CAoB3B;IAEF,MAAM,CAAC,MAAM,0BAsPX;CACH"}
@@ -7,18 +7,25 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
7
7
  import { ccc } from "@ckb-ccc/ccc";
8
8
  import { LitElement, css, html } from "lit";
9
9
  import { customElement, property, state } from "lit/decorators.js";
10
+ import { createRef, ref } from "lit/directives/ref.js";
10
11
  import { CLOSE_SVG } from "../assets/close.svg";
11
12
  import { JOY_ID_SVG } from "../assets/joy-id.svg";
13
+ import { LEFT_SVG } from "../assets/left.svg";
14
+ import { METAMASK_SVG } from "../assets/metamask.svg";
12
15
  import { OKX_SVG } from "../assets/okx.svg";
13
16
  import { UNI_SAT_SVG } from "../assets/uni-sat.svg";
14
17
  import { WillUpdateEvent } from "../events";
15
18
  import { generateConnectingScene, generateSignersScene, generateWalletsScene, } from "../scenes";
19
+ import { generateConnectedScene } from "../scenes/connected";
20
+ import { generateNetworksScene } from "../scenes/networks";
21
+ import { SignerOpenLink } from "../signerOpenLink";
16
22
  var Scene;
17
23
  (function (Scene) {
18
24
  Scene["SelectingWallets"] = "SelectingWallets";
19
25
  Scene["SelectingSigners"] = "SelectingSigners";
20
26
  Scene["Connecting"] = "Connecting";
21
27
  Scene["Connected"] = "Connected";
28
+ Scene["SwitchingNetworks"] = "SwitchingNetworks";
22
29
  })(Scene || (Scene = {}));
23
30
  let WebComponentConnector = class WebComponentConnector extends LitElement {
24
31
  constructor() {
@@ -28,6 +35,9 @@ let WebComponentConnector = class WebComponentConnector extends LitElement {
28
35
  this.isOpen = false;
29
36
  this.client = new ccc.ClientPublicTestnet();
30
37
  this.scene = Scene.SelectingWallets;
38
+ this.mainRef = createRef();
39
+ this.headerRef = createRef();
40
+ this.bodyRef = createRef();
31
41
  this.closedHandler = () => {
32
42
  if ([
33
43
  Scene.SelectingSigners,
@@ -38,6 +48,9 @@ let WebComponentConnector = class WebComponentConnector extends LitElement {
38
48
  this.selectedSigner = undefined;
39
49
  this.selectedWallet = undefined;
40
50
  }
51
+ else if ([Scene.SwitchingNetworks].includes(this.scene)) {
52
+ this.scene = Scene.Connected;
53
+ }
41
54
  this.isOpen = false;
42
55
  };
43
56
  this.signerSelectedHandler = (wallet, signer) => {
@@ -49,6 +62,8 @@ let WebComponentConnector = class WebComponentConnector extends LitElement {
49
62
  if (!(await signer.signer.isConnected())) {
50
63
  return;
51
64
  }
65
+ this.recommendAddress = await signer.signer.getRecommendedAddress();
66
+ this.balance = await signer.signer.getBalance();
52
67
  this.scene = Scene.Connected;
53
68
  this.walletName = wallet.name;
54
69
  this.signerName = signer.name;
@@ -63,22 +78,30 @@ let WebComponentConnector = class WebComponentConnector extends LitElement {
63
78
  setClient(client) {
64
79
  this.client = client;
65
80
  }
66
- prepareSigner() {
67
- (async () => {
68
- if (this.signer && (await this.signer.signer.isConnected())) {
69
- this.scene = Scene.Connected;
70
- return;
71
- }
72
- this.wallet = undefined;
73
- this.signer = undefined;
74
- this.scene = Scene.SelectingWallets;
75
- })();
81
+ async updateSignerInfo() {
82
+ if (!this.signer) {
83
+ return;
84
+ }
85
+ this.recommendAddress = await this.signer.signer.getRecommendedAddress();
86
+ this.balance = await this.signer.signer.getBalance();
87
+ this.internalAddress = await this.signer.signer.getInternalAddress();
88
+ }
89
+ async prepareSigner() {
90
+ if (this.signer && (await this.signer.signer.isConnected())) {
91
+ await this.updateSignerInfo();
92
+ this.scene = Scene.Connected;
93
+ return;
94
+ }
95
+ this.wallet = undefined;
96
+ this.signer = undefined;
97
+ this.scene = Scene.SelectingWallets;
76
98
  }
77
99
  disconnect() {
78
100
  this.signer?.signer?.disconnect();
79
101
  this.walletName = undefined;
80
102
  this.signerName = undefined;
81
103
  this.saveConnection();
104
+ this.closedHandler();
82
105
  }
83
106
  loadConnection() {
84
107
  const { signerName, walletName, } = JSON.parse(window.localStorage.getItem("ccc-connection-info") ?? "{}");
@@ -97,17 +120,26 @@ let WebComponentConnector = class WebComponentConnector extends LitElement {
97
120
  this.reloadSigners();
98
121
  }
99
122
  willUpdate(changedProperties) {
100
- if (changedProperties.has("client")) {
123
+ if (changedProperties.has("client") ||
124
+ changedProperties.has("signerFilter")) {
101
125
  this.reloadSigners();
102
126
  }
103
127
  if (changedProperties.has("walletName") ||
104
- changedProperties.has("wallets")) {
105
- this.wallet = this.wallets.find(({ name }) => name === this.walletName);
106
- }
107
- if (changedProperties.has("signerName") ||
128
+ changedProperties.has("wallets") ||
129
+ changedProperties.has("signerName") ||
108
130
  changedProperties.has("wallet")) {
109
- const wallet = this.wallets.find(({ name }) => name === this.walletName);
110
- this.signer = wallet?.signers.find(({ name }) => name === this.signerName);
131
+ (async () => {
132
+ const wallet = this.wallets.find(({ name }) => name === this.walletName);
133
+ const signer = wallet?.signers.find(({ name }) => name === this.signerName);
134
+ if (signer && (await signer.signer.isConnected())) {
135
+ this.wallet = wallet;
136
+ this.signer = signer;
137
+ }
138
+ else {
139
+ this.wallet = undefined;
140
+ this.signer = undefined;
141
+ }
142
+ })();
111
143
  }
112
144
  if (changedProperties.has("signer")) {
113
145
  this.prepareSigner();
@@ -127,45 +159,76 @@ let WebComponentConnector = class WebComponentConnector extends LitElement {
127
159
  })();
128
160
  this.resetListeners.forEach((listener) => listener());
129
161
  this.resetListeners = [];
130
- ccc.JoyId.getJoyIdSigners(this.client).forEach(({ signer, type, name }) => {
131
- this.addSigner("JoyID", name, JOY_ID_SVG, type, signer);
162
+ const name = this.name ??
163
+ document.querySelector("head title").text;
164
+ const icon = this.icon ??
165
+ document.querySelector('link[rel="icon"]').href;
166
+ ccc.JoyId.getJoyIdSigners(this.client, name, icon).forEach(({ signer, name }) => {
167
+ this.addSigner("JoyID", name, JOY_ID_SVG, signer);
132
168
  });
133
169
  const uniSatSigner = ccc.UniSat.getUniSatSigner(this.client);
134
170
  if (uniSatSigner) {
135
- this.addSigner("UniSat", "BTC", UNI_SAT_SVG, ccc.SignerType.BTC, uniSatSigner);
171
+ this.addSigner("UniSat", "BTC", UNI_SAT_SVG, uniSatSigner);
136
172
  }
137
173
  const okxBitcoinSigner = ccc.Okx.getOKXBitcoinSigner(this.client);
138
174
  if (okxBitcoinSigner) {
139
- this.addSigner("OKX Wallet", "BTC", OKX_SVG, ccc.SignerType.BTC, okxBitcoinSigner);
175
+ this.addSigner("OKX Wallet", "BTC", OKX_SVG, okxBitcoinSigner);
140
176
  }
141
177
  const eip6963Manager = new ccc.Eip6963.SignerFactory(this.client);
142
178
  this.resetListeners.push(eip6963Manager.subscribeSigners((signer) => {
143
- this.addSigner(`${signer.detail.info.name}`, "EVM", signer.detail.info.icon, ccc.SignerType.EVM, signer);
179
+ this.addSigner(`${signer.detail.info.name}`, "EVM", signer.detail.info.icon, signer);
144
180
  }));
145
- }
146
- addSigner(walletName, signerName, icon, type, signer) {
181
+ // === Dummy signers ===
182
+ this.addSigner("MetaMask", "EVM", METAMASK_SVG, new SignerOpenLink(this.client, `https://metamask.app.link/dapp/${window.location.href}`, ccc.SignerType.EVM));
183
+ [ccc.SignerType.EVM, ccc.SignerType.BTC].forEach((type) => {
184
+ this.addSigner("OKX Wallet", type, OKX_SVG, new SignerOpenLink(this.client, "https://www.okx.com/download?deeplink=" +
185
+ encodeURIComponent("okx://wallet/dapp/url?dappUrl=" +
186
+ encodeURIComponent(window.location.href)), type));
187
+ });
188
+ this.addSigner("UniSat", ccc.SignerType.BTC, UNI_SAT_SVG, new SignerOpenLink(this.client, "https://unisat.io/download", ccc.SignerType.BTC));
189
+ // ===
190
+ }
191
+ async addSigner(walletName, signerName, icon, signer) {
192
+ const signerInfo = { name: signerName, signer };
193
+ if (this.signerFilter &&
194
+ !(await this.signerFilter(signerInfo, { name: walletName, icon }))) {
195
+ return;
196
+ }
147
197
  let updated = false;
148
198
  const wallets = this.wallets.map((wallet) => {
149
199
  if (wallet.name !== walletName) {
150
200
  return wallet;
151
201
  }
152
202
  updated = true;
203
+ const allSigners = [...wallet.signers, signerInfo];
204
+ const signers = allSigners.filter(({ signer }) => !(signer instanceof SignerOpenLink));
153
205
  return {
154
206
  ...wallet,
155
- signers: [...wallet.signers, { type, name: signerName, signer }],
207
+ signers: signers.length !== 0 ? signers : [signerInfo],
156
208
  };
157
209
  });
158
210
  if (!updated) {
159
211
  wallets.push({
160
212
  name: walletName,
161
213
  icon,
162
- signers: [{ type, name: signerName, signer }],
214
+ signers: [signerInfo],
163
215
  });
164
216
  }
165
217
  this.wallets = wallets;
166
218
  }
167
219
  render() {
168
220
  const [title, body] = (() => {
221
+ if (this.scene === Scene.Connected && this.wallet && this.signer) {
222
+ return generateConnectedScene(this.wallet, this.signer, this.recommendAddress, this.internalAddress, this.balance, this.disconnect.bind(this), () => {
223
+ this.scene = Scene.SwitchingNetworks;
224
+ });
225
+ }
226
+ if (this.scene === Scene.SwitchingNetworks) {
227
+ return generateNetworksScene(this.client, (client) => {
228
+ this.setClient(client);
229
+ this.closedHandler();
230
+ });
231
+ }
169
232
  if (this.scene === Scene.SelectingWallets || !this.selectedWallet) {
170
233
  return generateWalletsScene(this.wallets, (wallet) => {
171
234
  this.selectedWallet = wallet;
@@ -177,6 +240,11 @@ let WebComponentConnector = class WebComponentConnector extends LitElement {
177
240
  }
178
241
  return generateConnectingScene(this.selectedWallet, this.selectedSigner, this.signerSelectedHandler);
179
242
  })();
243
+ const canBack = [
244
+ Scene.SelectingSigners,
245
+ Scene.Connecting,
246
+ Scene.SwitchingNetworks,
247
+ ].includes(this.scene);
180
248
  return html `<style>
181
249
  :host {
182
250
  ${this.isOpen ? "" : "display: none;"}
@@ -185,6 +253,7 @@ let WebComponentConnector = class WebComponentConnector extends LitElement {
185
253
  --btn-primary: #f8f8f8;
186
254
  --btn-primary-hover: #efeeee;
187
255
  --btn-secondary: #ddd;
256
+ --btn-secondary-hover: #ccc;
188
257
  color: #1e1e1e;
189
258
  --tip-color: #666;
190
259
  }
@@ -197,16 +266,51 @@ let WebComponentConnector = class WebComponentConnector extends LitElement {
197
266
  }
198
267
  }}
199
268
  >
200
- <div class="main">
201
- <div class="header text-bold fs-big">
202
- <div class="back"></div>
269
+ <div class="main" ${ref(this.mainRef)}>
270
+ <div
271
+ class="header text-bold fs-lg ${title == null
272
+ ? ""
273
+ : "header-divider"}"
274
+ ${ref(this.headerRef)}
275
+ >
276
+ <img
277
+ class="back ${canBack ? "active" : ""}"
278
+ src=${LEFT_SVG}
279
+ @click=${() => {
280
+ if (this.scene === Scene.Connecting) {
281
+ if ((this.selectedWallet?.signers.length ?? 0) <= 1) {
282
+ this.scene = Scene.SelectingWallets;
283
+ }
284
+ else {
285
+ this.scene = Scene.SelectingSigners;
286
+ }
287
+ }
288
+ else if (this.scene === Scene.SelectingSigners) {
289
+ this.scene = Scene.SelectingWallets;
290
+ }
291
+ else if (this.scene === Scene.SwitchingNetworks) {
292
+ this.scene = Scene.Connected;
293
+ }
294
+ }}
295
+ />
203
296
  ${title}
204
- <img class="close" src=${CLOSE_SVG} @click=${this.closedHandler} />
297
+ <img
298
+ class="close active"
299
+ src=${CLOSE_SVG}
300
+ @click=${this.closedHandler}
301
+ />
205
302
  </div>
206
- <div class="body">${body}</div>
303
+ <div class="body" ${ref(this.bodyRef)}>${body}</div>
207
304
  </div>
208
305
  </div>`;
209
306
  }
307
+ updated() {
308
+ if (!this.mainRef.value) {
309
+ return;
310
+ }
311
+ this.mainRef.value.style.height = `${(this.bodyRef.value?.clientHeight ?? 0) +
312
+ (this.headerRef.value?.clientHeight ?? 0)}px`;
313
+ }
210
314
  };
211
315
  WebComponentConnector.styles = css `
212
316
  :host {
@@ -235,9 +339,18 @@ WebComponentConnector.styles = css `
235
339
  color: var(--tip-color);
236
340
  }
237
341
 
238
- .fs-big {
342
+ .fs-sm {
343
+ font-size: 0.8rem;
344
+ }
345
+ .fs-md {
346
+ font-size: 1rem;
347
+ }
348
+ .fs-lg {
239
349
  font-size: 1.2rem;
240
350
  }
351
+ .fs-xl {
352
+ font-size: 1.5rem;
353
+ }
241
354
 
242
355
  .mb-1 {
243
356
  margin-bottom: 0.7rem;
@@ -251,6 +364,18 @@ WebComponentConnector.styles = css `
251
364
  .mt-2 {
252
365
  margin-top: 1rem;
253
366
  }
367
+ .ml-1 {
368
+ margin-left: 0.7rem;
369
+ }
370
+ .ml-2 {
371
+ margin-left: 1em;
372
+ }
373
+ .mr-1 {
374
+ margin-right: 0.7rem;
375
+ }
376
+ .mr-2 {
377
+ margin-right: 1rem;
378
+ }
254
379
 
255
380
  .background {
256
381
  width: 100%;
@@ -265,25 +390,39 @@ WebComponentConnector.styles = css `
265
390
  transform: translate(-50%, -50%);
266
391
  background: var(--background);
267
392
  border-radius: 1.2rem;
393
+ overflow: hidden;
394
+ transition: height 0.15s ease-out;
268
395
  }
269
396
 
270
397
  .header {
271
398
  display: flex;
272
399
  justify-content: space-between;
273
400
  align-items: center;
274
- padding: 1rem 1.3rem;
401
+ padding: 1rem 1.3rem 0.5rem;
402
+ }
403
+
404
+ .header-divider {
405
+ padding-bottom: 1rem;
275
406
  border-bottom: 1px solid var(--divider);
407
+ margin-bottom: 1rem;
276
408
  }
277
409
 
278
410
  .close,
279
411
  .back {
280
412
  width: 0.8rem;
281
413
  height: 0.8rem;
414
+ opacity: 0;
415
+ transition: opacity 0.15s ease-in-out;
416
+ }
417
+
418
+ .close.active,
419
+ .back.active {
420
+ opacity: 1;
282
421
  cursor: pointer;
283
422
  }
284
423
 
285
424
  .body {
286
- padding: 1.4rem 1.3rem;
425
+ padding: 0 1.3rem 1.4rem;
287
426
  min-width: 20rem;
288
427
  display: flex;
289
428
  flex-direction: column;
@@ -298,18 +437,23 @@ WebComponentConnector.styles = css `
298
437
  padding: 0.75rem 1rem;
299
438
  background: var(--btn-primary);
300
439
  border-radius: 0.4rem;
301
- transition: background 0.3s ease-in-out;
440
+ transition: background 0.15s ease-in-out;
302
441
  }
303
-
304
442
  .btn-primary img {
305
443
  width: 2rem;
306
444
  height: 2rem;
307
445
  margin-right: 1rem;
446
+ border-radius: 0.4rem;
308
447
  }
309
-
310
448
  .btn-primary:hover {
311
449
  background: var(--btn-primary-hover);
312
450
  }
451
+ .btn-primary:disabled {
452
+ cursor: not-allowed;
453
+ }
454
+ .btn-primary:disabled:hover {
455
+ background: var(--btn-primary);
456
+ }
313
457
 
314
458
  .btn-secondary {
315
459
  display: flex;
@@ -317,19 +461,28 @@ WebComponentConnector.styles = css `
317
461
  padding: 0.25rem 1rem;
318
462
  background: var(--btn-secondary);
319
463
  border-radius: 9999px;
320
- transition: background 0.3s ease-in-out;
464
+ transition: background 0.15s ease-in-out;
321
465
  }
322
-
323
466
  .btn-secondary img {
324
467
  width: 0.8rem;
325
468
  height: 0.8rem;
326
469
  margin-right: 0.5rem;
327
470
  }
471
+ .btn-secondary:hover {
472
+ background: var(--btn-secondary-hover);
473
+ }
474
+ .btn-secondary:disabled {
475
+ cursor: not-allowed;
476
+ }
477
+ .btn-secondary:disabled:hover {
478
+ background: var(--btn-secondary);
479
+ }
328
480
 
329
481
  .wallet-icon {
330
482
  width: 4rem;
331
483
  height: 4rem;
332
484
  margin-bottom: 0.5rem;
485
+ border-radius: 0.8rem;
333
486
  }
334
487
 
335
488
  .connecting-wallet-icon {
@@ -337,13 +490,90 @@ WebComponentConnector.styles = css `
337
490
  height: 5rem;
338
491
  border-radius: 1rem;
339
492
  }
493
+
494
+ .position-relative {
495
+ position: relative;
496
+ }
497
+ .position-absolute {
498
+ position: absolute;
499
+ }
500
+
501
+ .connected-type-icon {
502
+ position: absolute;
503
+ width: 1.5rem;
504
+ height: 1.5rem;
505
+ right: -0.5rem;
506
+ bottom: -0.5rem;
507
+ }
508
+
509
+ .text-center {
510
+ text-align: center;
511
+ }
512
+
513
+ .cursor-pointer {
514
+ cursor: pointer;
515
+ }
516
+
517
+ .flex {
518
+ display: flex;
519
+ }
520
+ .justify-center {
521
+ justify-content: center;
522
+ }
523
+ .justify-between {
524
+ justify-content: space-between;
525
+ }
526
+ .align-center {
527
+ align-items: center;
528
+ }
529
+
530
+ .switch-btn-container {
531
+ width: 100%;
532
+ padding: 1rem;
533
+ }
534
+
535
+ .switch-line {
536
+ flex: 1;
537
+ height: 1px;
538
+ background-color: var(--divider);
539
+ }
540
+
541
+ .switching-status-dot {
542
+ width: 0.5rem;
543
+ height: 0.5rem;
544
+ background: #0f0;
545
+ border-radius: 50%;
546
+ }
547
+
548
+ .copy-btn {
549
+ width: 1.5rem;
550
+ height: 1.5rem;
551
+ }
552
+
553
+ .copy-btn-sm {
554
+ width: 1rem;
555
+ height: 1rem;
556
+ }
557
+
558
+ .sm-chain-logo {
559
+ width: 1.125rem;
560
+ }
340
561
  `;
341
562
  __decorate([
342
563
  state()
343
564
  ], WebComponentConnector.prototype, "wallets", void 0);
565
+ __decorate([
566
+ property()
567
+ ], WebComponentConnector.prototype, "signerFilter", void 0);
344
568
  __decorate([
345
569
  state()
346
570
  ], WebComponentConnector.prototype, "isOpen", void 0);
571
+ __decorate([
572
+ property()
573
+ ], WebComponentConnector.prototype, "name", void 0);
574
+ __decorate([
575
+ property()
576
+ ], WebComponentConnector.prototype, "icon", void 0);
347
577
  __decorate([
348
578
  property()
349
579
  ], WebComponentConnector.prototype, "client", void 0);
@@ -368,6 +598,15 @@ __decorate([
368
598
  __decorate([
369
599
  state()
370
600
  ], WebComponentConnector.prototype, "signer", void 0);
601
+ __decorate([
602
+ state()
603
+ ], WebComponentConnector.prototype, "recommendAddress", void 0);
604
+ __decorate([
605
+ state()
606
+ ], WebComponentConnector.prototype, "internalAddress", void 0);
607
+ __decorate([
608
+ state()
609
+ ], WebComponentConnector.prototype, "balance", void 0);
371
610
  WebComponentConnector = __decorate([
372
611
  customElement("ccc-connector")
373
612
  ], WebComponentConnector);
@@ -0,0 +1,4 @@
1
+ import { ccc } from "@ckb-ccc/ccc";
2
+ export declare function formatString(str: string | undefined, l?: number, r?: number): string | undefined;
3
+ export declare function generateConnectedScene(wallet: ccc.Wallet, signer: ccc.SignerInfo, recommendedAddress: string | undefined, internalAddress: string | undefined, balance: ccc.Num | undefined, disconnect: () => void, handleSwitchClick: () => void): (import("lit").TemplateResult<1> | undefined)[];
4
+ //# sourceMappingURL=connected.d.ts.map