@ckb-ccc/connector 0.0.4-alpha.8 → 0.0.5-alpha.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 (111) hide show
  1. package/README.md +6 -0
  2. package/dist/advancedBarrel.d.ts +1 -0
  3. package/dist/advancedBarrel.d.ts.map +1 -1
  4. package/dist/advancedBarrel.js +1 -0
  5. package/dist/assets/chains/ckb.svg.d.ts +2 -0
  6. package/dist/assets/chains/ckb.svg.d.ts.map +1 -0
  7. package/dist/assets/chains/ckb.svg.js +2 -0
  8. package/dist/assets/chains/index.d.ts +1 -0
  9. package/dist/assets/chains/index.d.ts.map +1 -1
  10. package/dist/assets/chains/index.js +1 -0
  11. package/dist/assets/joy-id.svg.d.ts +2 -0
  12. package/dist/assets/joy-id.svg.d.ts.map +1 -0
  13. package/dist/assets/joy-id.svg.js +2 -0
  14. package/dist/assets/metamask.svg.d.ts +2 -0
  15. package/dist/assets/metamask.svg.d.ts.map +1 -0
  16. package/dist/assets/metamask.svg.js +2 -0
  17. package/dist/barrel.d.ts +1 -2
  18. package/dist/barrel.d.ts.map +1 -1
  19. package/dist/barrel.js +1 -2
  20. package/dist/connector/index.d.ts +19 -8
  21. package/dist/connector/index.d.ts.map +1 -1
  22. package/dist/connector/index.js +162 -59
  23. package/dist/events/index.d.ts +1 -12
  24. package/dist/events/index.d.ts.map +1 -1
  25. package/dist/events/index.js +2 -15
  26. package/dist/scenes/connecting.d.ts +2 -1
  27. package/dist/scenes/connecting.d.ts.map +1 -1
  28. package/dist/scenes/signers.d.ts +2 -1
  29. package/dist/scenes/signers.d.ts.map +1 -1
  30. package/dist/scenes/signers.js +3 -2
  31. package/dist/scenes/wallets.d.ts +2 -1
  32. package/dist/scenes/wallets.d.ts.map +1 -1
  33. package/dist/scenes/wallets.js +44 -9
  34. package/dist/types/index.d.ts +10 -0
  35. package/dist/types/index.d.ts.map +1 -0
  36. package/dist/types/index.js +1 -0
  37. package/dist.commonjs/advanced.d.ts +3 -0
  38. package/dist.commonjs/advanced.d.ts.map +1 -0
  39. package/dist.commonjs/advanced.js +56 -0
  40. package/dist.commonjs/advancedBarrel.d.ts +4 -0
  41. package/dist.commonjs/advancedBarrel.d.ts.map +1 -0
  42. package/dist.commonjs/advancedBarrel.js +35 -0
  43. package/dist.commonjs/assets/chains/btc.svg.d.ts +2 -0
  44. package/dist.commonjs/assets/chains/btc.svg.d.ts.map +1 -0
  45. package/dist.commonjs/assets/chains/btc.svg.js +7 -0
  46. package/dist.commonjs/assets/chains/eth.svg.d.ts +2 -0
  47. package/dist.commonjs/assets/chains/eth.svg.d.ts.map +1 -0
  48. package/dist.commonjs/assets/chains/eth.svg.js +7 -0
  49. package/dist.commonjs/assets/chains/index.d.ts +3 -0
  50. package/dist.commonjs/assets/chains/index.d.ts.map +1 -0
  51. package/dist.commonjs/assets/chains/index.js +34 -0
  52. package/dist.commonjs/assets/close.svg.d.ts +2 -0
  53. package/dist.commonjs/assets/close.svg.d.ts.map +1 -0
  54. package/dist.commonjs/assets/close.svg.js +7 -0
  55. package/dist.commonjs/assets/okx.svg.d.ts +2 -0
  56. package/dist.commonjs/assets/okx.svg.d.ts.map +1 -0
  57. package/dist.commonjs/assets/okx.svg.js +7 -0
  58. package/dist.commonjs/assets/retry.svg.d.ts +2 -0
  59. package/dist.commonjs/assets/retry.svg.d.ts.map +1 -0
  60. package/dist.commonjs/assets/retry.svg.js +7 -0
  61. package/dist.commonjs/assets/uni-sat.svg.d.ts +2 -0
  62. package/dist.commonjs/assets/uni-sat.svg.d.ts.map +1 -0
  63. package/dist.commonjs/assets/uni-sat.svg.js +7 -0
  64. package/dist.commonjs/assets/utils.d.ts +2 -0
  65. package/dist.commonjs/assets/utils.d.ts.map +1 -0
  66. package/dist.commonjs/assets/utils.js +7 -0
  67. package/dist.commonjs/barrel.d.ts +4 -0
  68. package/dist.commonjs/barrel.d.ts.map +1 -0
  69. package/dist.commonjs/barrel.js +35 -0
  70. package/dist.commonjs/connector/index.d.ts +33 -0
  71. package/dist.commonjs/connector/index.d.ts.map +1 -0
  72. package/dist.commonjs/connector/index.js +452 -0
  73. package/dist.commonjs/events/index.d.ts +4 -0
  74. package/dist.commonjs/events/index.d.ts.map +1 -0
  75. package/dist.commonjs/events/index.js +9 -0
  76. package/dist.commonjs/index.d.ts +3 -0
  77. package/dist.commonjs/index.d.ts.map +1 -0
  78. package/dist.commonjs/index.js +56 -0
  79. package/dist.commonjs/scenes/connecting.d.ts +10 -0
  80. package/dist.commonjs/scenes/connecting.d.ts.map +1 -0
  81. package/dist.commonjs/scenes/connecting.js +27 -0
  82. package/dist.commonjs/scenes/index.d.ts +4 -0
  83. package/dist.commonjs/scenes/index.d.ts.map +1 -0
  84. package/dist.commonjs/scenes/index.js +35 -0
  85. package/dist.commonjs/scenes/signers.d.ts +11 -0
  86. package/dist.commonjs/scenes/signers.d.ts.map +1 -0
  87. package/dist.commonjs/scenes/signers.js +39 -0
  88. package/dist.commonjs/scenes/wallets.d.ts +8 -0
  89. package/dist.commonjs/scenes/wallets.d.ts.map +1 -0
  90. package/dist.commonjs/scenes/wallets.js +30 -0
  91. package/dist.commonjs/tsconfig.commonjs.tsbuildinfo +1 -0
  92. package/dist.commonjs/types/index.d.ts +5 -0
  93. package/dist.commonjs/types/index.d.ts.map +1 -0
  94. package/dist.commonjs/types/index.js +2 -0
  95. package/package.json +3 -3
  96. package/src/advancedBarrel.ts +1 -0
  97. package/src/assets/chains/ckb.svg.ts +5 -0
  98. package/src/assets/chains/index.ts +1 -0
  99. package/src/assets/joy-id.svg.ts +5 -0
  100. package/src/assets/metamask.svg.ts +5 -0
  101. package/src/barrel.ts +1 -2
  102. package/src/connector/index.ts +217 -69
  103. package/src/events/index.ts +2 -20
  104. package/src/scenes/connecting.ts +6 -2
  105. package/src/scenes/signers.ts +9 -4
  106. package/src/scenes/wallets.ts +69 -22
  107. package/src/types/index.ts +11 -0
  108. package/dist/status/index.d.ts +0 -6
  109. package/dist/status/index.d.ts.map +0 -1
  110. package/dist/status/index.js +0 -6
  111. package/src/status/index.ts +0 -5
package/README.md CHANGED
@@ -1,3 +1,9 @@
1
+ <p align="center">
2
+ <a href="https://ckbccc-demo.vercel.app/">
3
+ <img alt="Logo" src="https://raw.githubusercontent.com/ckb-ecofund/ccc/master/assets/logo.svg" width="20%" />
4
+ </a>
5
+ </p>
6
+
1
7
  <h1 align="center" style="font-size: 48px;">
2
8
  CCC Connector
3
9
  </h1>
@@ -1,3 +1,4 @@
1
1
  export * from "@ckb-ccc/ccc/advancedBarrel";
2
2
  export * from "./scenes";
3
+ export * from "./types";
3
4
  //# 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"}
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,2 +1,3 @@
1
1
  export * from "@ckb-ccc/ccc/advancedBarrel";
2
2
  export * from "./scenes";
3
+ export * from "./types";
@@ -0,0 +1,2 @@
1
+ export declare const CKB_SVG: string;
2
+ //# sourceMappingURL=ckb.svg.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ckb.svg.d.ts","sourceRoot":"","sources":["../../../src/assets/chains/ckb.svg.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,OAAO,QAEnB,CAAC"}
@@ -0,0 +1,2 @@
1
+ import { encodeSvgToImgSrc } from "../utils";
2
+ export const CKB_SVG = encodeSvgToImgSrc('<svg width="668" height="666.66669" xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg"><polygon points="170.265,206.318 223.416,206.318 223.416,93.897 264.161,93.897 170.265,0 " transform="matrix(1.8256046,0,0,1.8256046,-166.4037,144.47964)" /><polygon points="324.79,112.422 284.046,112.422 377.941,206.318 377.941,0 324.79,0 " transform="matrix(1.8256046,0,0,1.8256046,-166.4037,144.47964)" /></svg>');
@@ -1,3 +1,4 @@
1
1
  export * from "./btc.svg";
2
+ export * from "./ckb.svg";
2
3
  export * from "./eth.svg";
3
4
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/assets/chains/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAC;AAC1B,cAAc,WAAW,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/assets/chains/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAC;AAC1B,cAAc,WAAW,CAAC;AAC1B,cAAc,WAAW,CAAC"}
@@ -1,2 +1,3 @@
1
1
  export * from "./btc.svg";
2
+ export * from "./ckb.svg";
2
3
  export * from "./eth.svg";
@@ -0,0 +1,2 @@
1
+ export declare const JOY_ID_SVG: string;
2
+ //# sourceMappingURL=joy-id.svg.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"joy-id.svg.d.ts","sourceRoot":"","sources":["../../src/assets/joy-id.svg.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,UAAU,QAEtB,CAAC"}
@@ -0,0 +1,2 @@
1
+ import { encodeSvgToImgSrc } from "./utils";
2
+ export const JOY_ID_SVG = encodeSvgToImgSrc('<svg xmlns="http://www.w3.org/2000/svg" width="420" height="420" viewBox="0 0 420 420" fill="none"><circle cx="210" cy="210" r="210" fill="#333333"/><path d="M271.127 204.419C279.096 204.419 285.555 197.959 285.555 189.991C285.555 182.022 279.096 175.562 271.127 175.562C263.159 175.562 256.699 182.022 256.699 189.991C256.699 197.959 263.159 204.419 271.127 204.419Z" fill="#8CDD00"/><path d="M173.995 175.562C166.773 175.562 160.91 181.425 160.91 188.648C160.91 195.87 166.773 201.733 173.995 201.733C181.218 201.733 187.081 195.87 187.081 188.648C187.064 181.425 181.218 175.562 173.995 175.562Z" fill="#8CDD00"/><path d="M213.43 164.836L198.969 233.586C197.626 240.006 191.878 244.657 185.327 244.657C181.086 244.657 177.139 242.757 174.47 239.465C172.39 236.894 171.342 233.734 171.391 230.491L145.27 237.238C146.383 244.084 149.2 250.618 153.687 256.203C161.434 265.816 172.963 271.335 185.311 271.335C204.407 271.335 221.111 257.775 225.041 239.089L240.665 164.852H213.43V164.836Z" fill="#C1C1C1"/><path d="M335.83 115.983C327.068 105.19 314.065 99 300.161 99H267.981L262.363 125.662H300.161C305.991 125.662 311.445 128.249 315.113 132.786C318.782 137.306 320.207 143.185 319.011 148.884L313.394 175.562H340.645L345.116 154.387C347.965 140.778 344.592 126.775 335.83 115.983Z" fill="#8CDD00"/><path d="M295.216 261.999C291.285 280.669 274.597 294.212 255.518 294.212H226.875L221.258 320.874H255.518C287.126 320.874 314.803 298.421 321.304 267.485L326.021 245.049H298.77L295.216 261.999Z" fill="#8CDD00"/><path d="M98.8061 152.39L93.9258 175.58H121.177L124.894 157.892C128.825 139.223 145.513 125.679 164.592 125.679H192.04L197.657 99.0176H164.592C132.985 99.0012 105.308 121.454 98.8061 152.39Z" fill="#8CDD00"/><path d="M104.998 287.072C101.33 282.552 99.9049 276.673 101.1 270.974L106.079 247.342L77.2555 254.777L74.9956 265.487C72.1296 279.097 75.5196 293.099 84.2813 303.891C93.0429 314.684 106.046 320.874 119.95 320.874H150.935L156.553 294.212H119.95C114.12 294.196 108.666 291.608 104.998 287.072Z" fill="#8CDD00"/></svg>');
@@ -0,0 +1,2 @@
1
+ export declare const METAMASK_SVG: string;
2
+ //# sourceMappingURL=metamask.svg.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"metamask.svg.d.ts","sourceRoot":"","sources":["../../src/assets/metamask.svg.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,YAAY,QAExB,CAAC"}
@@ -0,0 +1,2 @@
1
+ import { encodeSvgToImgSrc } from "./utils";
2
+ export const METAMASK_SVG = encodeSvgToImgSrc(`<svg xmlns="http://www.w3.org/2000/svg" xml:space="preserve" id="Layer_1" x="0" y="0" version="1.1" viewBox="0 0 318.6 318.6"><style>.st1,.st6{fill:#e4761b;stroke:#e4761b;stroke-linecap:round;stroke-linejoin:round}.st6{fill:#f6851b;stroke:#f6851b}</style><path fill="#e2761b" stroke="#e2761b" stroke-linecap="round" stroke-linejoin="round" d="m274.1 35.5-99.5 73.9L193 65.8z"/><path d="m44.4 35.5 98.7 74.6-17.5-44.3zm193.9 171.3-26.5 40.6 56.7 15.6 16.3-55.3zm-204.4.9L50.1 263l56.7-15.6-26.5-40.6z" class="st1"/><path d="m103.6 138.2-15.8 23.9 56.3 2.5-2-60.5zm111.3 0-39-34.8-1.3 61.2 56.2-2.5zM106.8 247.4l33.8-16.5-29.2-22.8zm71.1-16.5 33.9 16.5-4.7-39.3z" class="st1"/><path fill="#d7c1b3" stroke="#d7c1b3" stroke-linecap="round" stroke-linejoin="round" d="m211.8 247.4-33.9-16.5 2.7 22.1-.3 9.3zm-105 0 31.5 14.9-.2-9.3 2.5-22.1z"/><path fill="#233447" stroke="#233447" stroke-linecap="round" stroke-linejoin="round" d="m138.8 193.5-28.2-8.3 19.9-9.1zm40.9 0 8.3-17.4 20 9.1z"/><path fill="#cd6116" stroke="#cd6116" stroke-linecap="round" stroke-linejoin="round" d="m106.8 247.4 4.8-40.6-31.3.9zM207 206.8l4.8 40.6 26.5-39.7zm23.8-44.7-56.2 2.5 5.2 28.9 8.3-17.4 20 9.1zm-120.2 23.1 20-9.1 8.2 17.4 5.3-28.9-56.3-2.5z"/><path fill="#e4751f" stroke="#e4751f" stroke-linecap="round" stroke-linejoin="round" d="m87.8 162.1 23.6 46-.8-22.9zm120.3 23.1-1 22.9 23.7-46zm-64-20.6-5.3 28.9 6.6 34.1 1.5-44.9zm30.5 0-2.7 18 1.2 45 6.7-34.1z"/><path d="m179.8 193.5-6.7 34.1 4.8 3.3 29.2-22.8 1-22.9zm-69.2-8.3.8 22.9 29.2 22.8 4.8-3.3-6.6-34.1z" class="st6"/><path fill="#c0ad9e" stroke="#c0ad9e" stroke-linecap="round" stroke-linejoin="round" d="m180.3 262.3.3-9.3-2.5-2.2h-37.7l-2.3 2.2.2 9.3-31.5-14.9 11 9 22.3 15.5h38.3l22.4-15.5 11-9z"/><path fill="#161616" stroke="#161616" stroke-linecap="round" stroke-linejoin="round" d="m177.9 230.9-4.8-3.3h-27.7l-4.8 3.3-2.5 22.1 2.3-2.2h37.7l2.5 2.2z"/><path fill="#763d16" stroke="#763d16" stroke-linecap="round" stroke-linejoin="round" d="m278.3 114.2 8.5-40.8-12.7-37.9-96.2 71.4 37 31.3 52.3 15.3 11.6-13.5-5-3.6 8-7.3-6.2-4.8 8-6.1zM31.8 73.4l8.5 40.8-5.4 4 8 6.1-6.1 4.8 8 7.3-5 3.6 11.5 13.5 52.3-15.3 37-31.3-96.2-71.4z"/><path d="m267.2 153.5-52.3-15.3 15.9 23.9-23.7 46 31.2-.4h46.5zm-163.6-15.3-52.3 15.3-17.4 54.2h46.4l31.1.4-23.6-46zm71 26.4 3.3-57.7 15.2-41.1h-67.5l15 41.1 3.5 57.7 1.2 18.2.1 44.8h27.7l.2-44.8z" class="st6"/><script xmlns=""/></svg>`);
package/dist/barrel.d.ts CHANGED
@@ -1,5 +1,4 @@
1
- export * from "@ckb-ccc/ccc";
1
+ export * from "@ckb-ccc/ccc/barrel";
2
2
  export * from "./connector";
3
3
  export * from "./events";
4
- export * from "./status";
5
4
  //# sourceMappingURL=barrel.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"barrel.d.ts","sourceRoot":"","sources":["../src/barrel.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,UAAU,CAAC;AACzB,cAAc,UAAU,CAAC"}
1
+ {"version":3,"file":"barrel.d.ts","sourceRoot":"","sources":["../src/barrel.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAC;AACpC,cAAc,aAAa,CAAC;AAC5B,cAAc,UAAU,CAAC"}
package/dist/barrel.js CHANGED
@@ -1,4 +1,3 @@
1
- export * from "@ckb-ccc/ccc";
1
+ export * from "@ckb-ccc/ccc/barrel";
2
2
  export * from "./connector";
3
3
  export * from "./events";
4
- export * from "./status";
@@ -1,19 +1,30 @@
1
1
  import { ccc } from "@ckb-ccc/ccc";
2
- import { LitElement } from "lit";
3
- import { ConnectorStatus } from "../status";
2
+ import { LitElement, PropertyValues } from "lit";
4
3
  export declare class WebComponentConnector extends LitElement {
5
4
  private wallets;
6
- private existedEip6963;
5
+ private resetListeners;
7
6
  isOpen: boolean;
7
+ setIsOpen(isOpen: boolean): void;
8
+ client: ccc.Client;
9
+ setClient(client: ccc.Client): void;
10
+ private scene;
11
+ private selectedWallet?;
12
+ private selectedSigner?;
13
+ private walletName?;
14
+ private signerName?;
8
15
  wallet?: ccc.Wallet;
9
16
  signer?: ccc.SignerInfo;
10
- status: ConnectorStatus;
17
+ private prepareSigner;
18
+ disconnect(): void;
19
+ private loadConnection;
20
+ private saveConnection;
11
21
  connectedCallback(): void;
12
- addSigner(name: string, icon: string, type: ccc.SignerType, signer: ccc.Signer): void;
22
+ willUpdate(changedProperties: PropertyValues): void;
23
+ private reloadSigners;
24
+ private addSigner;
13
25
  render(): import("lit").TemplateResult<1>;
14
- private onClose;
15
- private onWalletSelected;
16
- private onSignerSelected;
26
+ private closedHandler;
27
+ private signerSelectedHandler;
17
28
  static styles: import("lit").CSSResult;
18
29
  }
19
30
  //# sourceMappingURL=index.d.ts.map
@@ -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,EAAa,MAAM,KAAK,CAAC;AAW5C,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAE5C,qBACa,qBAAsB,SAAQ,UAAU;IAEnD,OAAO,CAAC,OAAO,CAAoB;IACnC,OAAO,CAAC,cAAc,CAAgB;IAG/B,MAAM,EAAE,OAAO,CAAS;IAGxB,MAAM,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC;IAEpB,MAAM,CAAC,EAAE,GAAG,CAAC,UAAU,CAAC;IAExB,MAAM,EAAE,eAAe,CAAmC;IAEjE,iBAAiB,IAAI,IAAI;IAkCzB,SAAS,CACP,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,GAAG,CAAC,UAAU,EACpB,MAAM,EAAE,GAAG,CAAC,MAAM;IAkBpB,MAAM;IAmDN,OAAO,CAAC,OAAO,CAGb;IAEF,OAAO,CAAC,gBAAgB,CAEtB;IAEF,OAAO,CAAC,gBAAgB,CAStB;IAEF,MAAM,CAAC,MAAM,0BAqIX;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;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"}
@@ -8,81 +8,174 @@ 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
10
  import { CLOSE_SVG } from "../assets/close.svg";
11
+ import { JOY_ID_SVG } from "../assets/joy-id.svg";
11
12
  import { OKX_SVG } from "../assets/okx.svg";
12
13
  import { UNI_SAT_SVG } from "../assets/uni-sat.svg";
13
- import { CloseEvent, SignerChangedEvent, StatusChangedEvent } from "../events";
14
+ import { WillUpdateEvent } from "../events";
14
15
  import { generateConnectingScene, generateSignersScene, generateWalletsScene, } from "../scenes";
15
- import { ConnectorStatus } from "../status";
16
+ var Scene;
17
+ (function (Scene) {
18
+ Scene["SelectingWallets"] = "SelectingWallets";
19
+ Scene["SelectingSigners"] = "SelectingSigners";
20
+ Scene["Connecting"] = "Connecting";
21
+ Scene["Connected"] = "Connected";
22
+ })(Scene || (Scene = {}));
16
23
  let WebComponentConnector = class WebComponentConnector extends LitElement {
17
24
  constructor() {
18
25
  super(...arguments);
19
26
  this.wallets = [];
20
- this.existedEip6963 = [];
27
+ this.resetListeners = [];
21
28
  this.isOpen = false;
22
- this.status = ConnectorStatus.SelectingSigner;
23
- this.onClose = () => {
24
- this.dispatchEvent(new SignerChangedEvent());
25
- this.dispatchEvent(new CloseEvent());
26
- };
27
- this.onWalletSelected = (wallet) => {
28
- this.dispatchEvent(new SignerChangedEvent(wallet, this.signer));
29
+ this.client = new ccc.ClientPublicTestnet();
30
+ this.scene = Scene.SelectingWallets;
31
+ this.closedHandler = () => {
32
+ if ([
33
+ Scene.SelectingSigners,
34
+ Scene.SelectingWallets,
35
+ Scene.Connecting,
36
+ ].includes(this.scene)) {
37
+ this.scene = Scene.SelectingWallets;
38
+ this.selectedSigner = undefined;
39
+ this.selectedWallet = undefined;
40
+ }
41
+ this.isOpen = false;
29
42
  };
30
- this.onSignerSelected = (wallet, signer) => {
31
- this.dispatchEvent(new StatusChangedEvent(ConnectorStatus.Connecting));
32
- this.dispatchEvent(new SignerChangedEvent(wallet, signer));
43
+ this.signerSelectedHandler = (wallet, signer) => {
44
+ this.scene = Scene.Connecting;
45
+ this.selectedWallet = wallet;
46
+ this.selectedSigner = signer;
33
47
  (async () => {
34
48
  await signer.signer.connect();
35
- this.dispatchEvent(new StatusChangedEvent(ConnectorStatus.Idle));
36
- this.dispatchEvent(new CloseEvent());
49
+ if (!(await signer.signer.isConnected())) {
50
+ return;
51
+ }
52
+ this.scene = Scene.Connected;
53
+ this.walletName = wallet.name;
54
+ this.signerName = signer.name;
55
+ this.saveConnection();
56
+ this.closedHandler();
37
57
  })();
38
58
  };
39
59
  }
60
+ setIsOpen(isOpen) {
61
+ this.isOpen = isOpen;
62
+ }
63
+ setClient(client) {
64
+ this.client = client;
65
+ }
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
+ })();
76
+ }
77
+ disconnect() {
78
+ this.signer?.signer?.disconnect();
79
+ this.walletName = undefined;
80
+ this.signerName = undefined;
81
+ this.saveConnection();
82
+ }
83
+ loadConnection() {
84
+ const { signerName, walletName, } = JSON.parse(window.localStorage.getItem("ccc-connection-info") ?? "{}");
85
+ this.signerName = signerName;
86
+ this.walletName = walletName;
87
+ }
88
+ saveConnection() {
89
+ window.localStorage.setItem("ccc-connection-info", JSON.stringify({
90
+ signerName: this.signerName,
91
+ walletName: this.walletName,
92
+ }));
93
+ }
40
94
  connectedCallback() {
41
95
  super.connectedCallback();
42
- const client = new ccc.ClientPublicTestnet();
43
- const uniSatSigner = ccc.UniSat.getUniSatSigner(client);
44
- if (uniSatSigner) {
45
- this.addSigner("UniSat", UNI_SAT_SVG, ccc.SignerType.BTC, uniSatSigner);
96
+ this.loadConnection();
97
+ this.reloadSigners();
98
+ }
99
+ willUpdate(changedProperties) {
100
+ if (changedProperties.has("client")) {
101
+ this.reloadSigners();
46
102
  }
47
- const okxBitcoinSigner = ccc.Okx.getOKXBitcoinSigner(client);
48
- if (okxBitcoinSigner) {
49
- this.addSigner("OKX Wallet", OKX_SVG, ccc.SignerType.BTC, okxBitcoinSigner);
103
+ if (changedProperties.has("walletName") ||
104
+ changedProperties.has("wallets")) {
105
+ this.wallet = this.wallets.find(({ name }) => name === this.walletName);
106
+ }
107
+ if (changedProperties.has("signerName") ||
108
+ changedProperties.has("wallet")) {
109
+ const wallet = this.wallets.find(({ name }) => name === this.walletName);
110
+ this.signer = wallet?.signers.find(({ name }) => name === this.signerName);
50
111
  }
51
- const eip6963Manager = new ccc.Eip6963.SignerFactory(client);
52
- eip6963Manager.subscribeSigners((signer) => {
53
- if (this.existedEip6963.indexOf(signer.detail.info.uuid) !== -1) {
112
+ if (changedProperties.has("signer")) {
113
+ this.prepareSigner();
114
+ }
115
+ this.dispatchEvent(new WillUpdateEvent());
116
+ }
117
+ reloadSigners() {
118
+ this.wallets = [];
119
+ (async () => {
120
+ if (!this.signer) {
54
121
  return;
55
122
  }
56
- this.existedEip6963.push(signer.detail.info.uuid);
57
- this.addSigner(`${signer.detail.info.name}`, signer.detail.info.icon, ccc.SignerType.EVM, signer);
123
+ this.signer = {
124
+ ...this.signer,
125
+ signer: await this.signer.signer.replaceClient(this.client),
126
+ };
127
+ })();
128
+ this.resetListeners.forEach((listener) => listener());
129
+ this.resetListeners = [];
130
+ ccc.JoyId.getJoyIdSigners(this.client).forEach(({ signer, type, name }) => {
131
+ this.addSigner("JoyID", name, JOY_ID_SVG, type, signer);
58
132
  });
59
- }
60
- addSigner(name, icon, type, signer) {
61
- const wallet = this.wallets.find((wallet) => wallet.name === name);
62
- if (wallet) {
63
- wallet.signers.push({ type, signer });
64
- this.wallets = [...this.wallets];
133
+ const uniSatSigner = ccc.UniSat.getUniSatSigner(this.client);
134
+ if (uniSatSigner) {
135
+ this.addSigner("UniSat", "BTC", UNI_SAT_SVG, ccc.SignerType.BTC, uniSatSigner);
65
136
  }
66
- else {
67
- this.wallets = [
68
- ...this.wallets,
69
- {
70
- name,
71
- icon,
72
- signers: [{ type, signer }],
73
- },
74
- ];
137
+ const okxBitcoinSigner = ccc.Okx.getOKXBitcoinSigner(this.client);
138
+ if (okxBitcoinSigner) {
139
+ this.addSigner("OKX Wallet", "BTC", OKX_SVG, ccc.SignerType.BTC, okxBitcoinSigner);
75
140
  }
141
+ const eip6963Manager = new ccc.Eip6963.SignerFactory(this.client);
142
+ this.resetListeners.push(eip6963Manager.subscribeSigners((signer) => {
143
+ this.addSigner(`${signer.detail.info.name}`, "EVM", signer.detail.info.icon, ccc.SignerType.EVM, signer);
144
+ }));
145
+ }
146
+ addSigner(walletName, signerName, icon, type, signer) {
147
+ let updated = false;
148
+ const wallets = this.wallets.map((wallet) => {
149
+ if (wallet.name !== walletName) {
150
+ return wallet;
151
+ }
152
+ updated = true;
153
+ return {
154
+ ...wallet,
155
+ signers: [...wallet.signers, { type, name: signerName, signer }],
156
+ };
157
+ });
158
+ if (!updated) {
159
+ wallets.push({
160
+ name: walletName,
161
+ icon,
162
+ signers: [{ type, name: signerName, signer }],
163
+ });
164
+ }
165
+ this.wallets = wallets;
76
166
  }
77
167
  render() {
78
168
  const [title, body] = (() => {
79
- if (!this.wallet) {
80
- return generateWalletsScene(this.wallets, this.onWalletSelected, this.onSignerSelected);
169
+ if (this.scene === Scene.SelectingWallets || !this.selectedWallet) {
170
+ return generateWalletsScene(this.wallets, (wallet) => {
171
+ this.selectedWallet = wallet;
172
+ this.scene = Scene.SelectingSigners;
173
+ }, this.signerSelectedHandler);
81
174
  }
82
- if (!this.signer) {
83
- return generateSignersScene(this.wallet, this.onSignerSelected);
175
+ if (this.scene === Scene.SelectingSigners || !this.selectedSigner) {
176
+ return generateSignersScene(this.selectedWallet, this.signerSelectedHandler);
84
177
  }
85
- return generateConnectingScene(this.wallet, this.signer, this.onSignerSelected);
178
+ return generateConnectingScene(this.selectedWallet, this.selectedSigner, this.signerSelectedHandler);
86
179
  })();
87
180
  return html `<style>
88
181
  :host {
@@ -92,7 +185,6 @@ let WebComponentConnector = class WebComponentConnector extends LitElement {
92
185
  --btn-primary: #f8f8f8;
93
186
  --btn-primary-hover: #efeeee;
94
187
  --btn-secondary: #ddd;
95
- --btn-icon: #e9e4de;
96
188
  color: #1e1e1e;
97
189
  --tip-color: #666;
98
190
  }
@@ -101,7 +193,7 @@ let WebComponentConnector = class WebComponentConnector extends LitElement {
101
193
  class="background"
102
194
  @click=${(event) => {
103
195
  if (event.target === event.currentTarget) {
104
- this.onClose();
196
+ this.closedHandler();
105
197
  }
106
198
  }}
107
199
  >
@@ -109,7 +201,7 @@ let WebComponentConnector = class WebComponentConnector extends LitElement {
109
201
  <div class="header text-bold fs-big">
110
202
  <div class="back"></div>
111
203
  ${title}
112
- <img class="close" src=${CLOSE_SVG} @click=${this.onClose} />
204
+ <img class="close" src=${CLOSE_SVG} @click=${this.closedHandler} />
113
205
  </div>
114
206
  <div class="body">${body}</div>
115
207
  </div>
@@ -213,8 +305,6 @@ WebComponentConnector.styles = css `
213
305
  width: 2rem;
214
306
  height: 2rem;
215
307
  margin-right: 1rem;
216
- border-radius: 0.4rem;
217
- background: var(--btn-icon);
218
308
  }
219
309
 
220
310
  .btn-primary:hover {
@@ -240,8 +330,6 @@ WebComponentConnector.styles = css `
240
330
  width: 4rem;
241
331
  height: 4rem;
242
332
  margin-bottom: 0.5rem;
243
- border-radius: 0.8rem;
244
- background: var(--btn-icon);
245
333
  }
246
334
 
247
335
  .connecting-wallet-icon {
@@ -254,17 +342,32 @@ __decorate([
254
342
  state()
255
343
  ], WebComponentConnector.prototype, "wallets", void 0);
256
344
  __decorate([
257
- property()
345
+ state()
258
346
  ], WebComponentConnector.prototype, "isOpen", void 0);
259
347
  __decorate([
260
348
  property()
349
+ ], WebComponentConnector.prototype, "client", void 0);
350
+ __decorate([
351
+ state()
352
+ ], WebComponentConnector.prototype, "scene", void 0);
353
+ __decorate([
354
+ state()
355
+ ], WebComponentConnector.prototype, "selectedWallet", void 0);
356
+ __decorate([
357
+ state()
358
+ ], WebComponentConnector.prototype, "selectedSigner", void 0);
359
+ __decorate([
360
+ state()
361
+ ], WebComponentConnector.prototype, "walletName", void 0);
362
+ __decorate([
363
+ state()
364
+ ], WebComponentConnector.prototype, "signerName", void 0);
365
+ __decorate([
366
+ state()
261
367
  ], WebComponentConnector.prototype, "wallet", void 0);
262
368
  __decorate([
263
- property()
369
+ state()
264
370
  ], WebComponentConnector.prototype, "signer", void 0);
265
- __decorate([
266
- property()
267
- ], WebComponentConnector.prototype, "status", void 0);
268
371
  WebComponentConnector = __decorate([
269
372
  customElement("ccc-connector")
270
373
  ], WebComponentConnector);
@@ -1,15 +1,4 @@
1
- import { ccc } from "@ckb-ccc/ccc";
2
- import { ConnectorStatus } from "../status";
3
- export declare class SignerChangedEvent extends Event {
4
- readonly wallet?: ccc.Wallet | undefined;
5
- readonly signerInfo?: ccc.SignerInfo | undefined;
6
- constructor(wallet?: ccc.Wallet | undefined, signerInfo?: ccc.SignerInfo | undefined);
7
- }
8
- export declare class StatusChangedEvent extends Event {
9
- readonly status: ConnectorStatus;
10
- constructor(status: ConnectorStatus);
11
- }
12
- export declare class CloseEvent extends Event {
1
+ export declare class WillUpdateEvent extends Event {
13
2
  constructor();
14
3
  }
15
4
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/events/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,cAAc,CAAC;AACnC,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAE5C,qBAAa,kBAAmB,SAAQ,KAAK;aAEzB,MAAM,CAAC;aACP,UAAU,CAAC;gBADX,MAAM,CAAC,wBAAY,EACnB,UAAU,CAAC,4BAAgB;CAI9C;AAED,qBAAa,kBAAmB,SAAQ,KAAK;aACf,MAAM,EAAE,eAAe;gBAAvB,MAAM,EAAE,eAAe;CAGpD;AAED,qBAAa,UAAW,SAAQ,KAAK;;CAIpC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/events/index.ts"],"names":[],"mappings":"AAAA,qBAAa,eAAgB,SAAQ,KAAK;;CAIzC"}
@@ -1,18 +1,5 @@
1
- export class SignerChangedEvent extends Event {
2
- constructor(wallet, signerInfo) {
3
- super("signerChanged", { composed: true });
4
- this.wallet = wallet;
5
- this.signerInfo = signerInfo;
6
- }
7
- }
8
- export class StatusChangedEvent extends Event {
9
- constructor(status) {
10
- super("statusChanged", { composed: true });
11
- this.status = status;
12
- }
13
- }
14
- export class CloseEvent extends Event {
1
+ export class WillUpdateEvent extends Event {
15
2
  constructor() {
16
- super("close", { composed: true });
3
+ super("willUpdate", { composed: true });
17
4
  }
18
5
  }
@@ -1,3 +1,4 @@
1
1
  import { ccc } from "@ckb-ccc/ccc";
2
- export declare function generateConnectingScene(wallet: ccc.Wallet, signer: ccc.SignerInfo, onSignerSelected: (wallet: ccc.Wallet, signer: ccc.SignerInfo) => unknown): (string | import("lit").TemplateResult<1>)[];
2
+ import { WalletWithSigners } from "../types";
3
+ export declare function generateConnectingScene(wallet: WalletWithSigners, signer: ccc.SignerInfo, onSignerSelected: (wallet: WalletWithSigners, signer: ccc.SignerInfo) => unknown): (string | import("lit").TemplateResult<1>)[];
3
4
  //# sourceMappingURL=connecting.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"connecting.d.ts","sourceRoot":"","sources":["../../src/scenes/connecting.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,cAAc,CAAC;AAInC,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,GAAG,CAAC,MAAM,EAClB,MAAM,EAAE,GAAG,CAAC,UAAU,EACtB,gBAAgB,EAAE,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,CAAC,UAAU,KAAK,OAAO,gDAqB1E"}
1
+ {"version":3,"file":"connecting.d.ts","sourceRoot":"","sources":["../../src/scenes/connecting.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,cAAc,CAAC;AAGnC,OAAO,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAE7C,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,iBAAiB,EACzB,MAAM,EAAE,GAAG,CAAC,UAAU,EACtB,gBAAgB,EAAE,CAChB,MAAM,EAAE,iBAAiB,EACzB,MAAM,EAAE,GAAG,CAAC,UAAU,KACnB,OAAO,gDAqBb"}
@@ -1,4 +1,5 @@
1
1
  import { ccc } from "@ckb-ccc/ccc";
2
+ import { WalletWithSigners } from "../types";
2
3
  export declare function signerTypeToIcon(type: ccc.SignerType): string;
3
- export declare function generateSignersScene(wallet: ccc.Wallet, onSignerSelected: (wallet: ccc.Wallet, signer: ccc.SignerInfo) => unknown): (string | import("lit").TemplateResult<1>)[];
4
+ export declare function generateSignersScene(wallet: WalletWithSigners, onSignerSelected: (wallet: WalletWithSigners, signer: ccc.SignerInfo) => unknown): (string | import("lit").TemplateResult<1>)[];
4
5
  //# sourceMappingURL=signers.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"signers.d.ts","sourceRoot":"","sources":["../../src/scenes/signers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,cAAc,CAAC;AAKnC,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,GAAG,CAAC,UAAU,GAAG,MAAM,CAK7D;AAED,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,GAAG,CAAC,MAAM,EAClB,gBAAgB,EAAE,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,CAAC,UAAU,KAAK,OAAO,gDAyB1E"}
1
+ {"version":3,"file":"signers.d.ts","sourceRoot":"","sources":["../../src/scenes/signers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,cAAc,CAAC;AAInC,OAAO,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAE7C,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,GAAG,CAAC,UAAU,GAAG,MAAM,CAM7D;AAED,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,iBAAiB,EACzB,gBAAgB,EAAE,CAChB,MAAM,EAAE,iBAAiB,EACzB,MAAM,EAAE,GAAG,CAAC,UAAU,KACnB,OAAO,gDAyBb"}
@@ -1,11 +1,12 @@
1
1
  import { ccc } from "@ckb-ccc/ccc";
2
2
  import { html } from "lit";
3
3
  import { repeat } from "lit/directives/repeat.js";
4
- import { BTC_SVG, ETH_SVG } from "../assets/chains";
4
+ import { BTC_SVG, CKB_SVG, ETH_SVG } from "../assets/chains";
5
5
  export function signerTypeToIcon(type) {
6
6
  return {
7
7
  [ccc.SignerType.BTC]: BTC_SVG,
8
8
  [ccc.SignerType.EVM]: ETH_SVG,
9
+ [ccc.SignerType.CKB]: CKB_SVG,
9
10
  }[type];
10
11
  }
11
12
  export function generateSignersScene(wallet, onSignerSelected) {
@@ -22,7 +23,7 @@ export function generateSignersScene(wallet, onSignerSelected) {
22
23
  }}
23
24
  >
24
25
  <img src=${signerTypeToIcon(signer.type)} alt=${signer.type} />
25
- ${signer.type}
26
+ ${signer.name}
26
27
  </button>
27
28
  `)}
28
29
  `,
@@ -1,3 +1,4 @@
1
1
  import { ccc } from "@ckb-ccc/ccc";
2
- export declare function generateWalletsScene(wallets: ccc.Wallet[], onWalletSelected: (wallet: ccc.Wallet) => unknown, onSignerSelected: (wallet: ccc.Wallet, signer: ccc.SignerInfo) => unknown): unknown[];
2
+ import { WalletWithSigners } from "../types";
3
+ export declare function generateWalletsScene(wallets: WalletWithSigners[], onWalletSelected: (wallet: WalletWithSigners) => unknown, onSignerSelected: (wallet: WalletWithSigners, signer: ccc.SignerInfo) => unknown): (string | import("lit").TemplateResult<1>)[];
3
4
  //# sourceMappingURL=wallets.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"wallets.d.ts","sourceRoot":"","sources":["../../src/scenes/wallets.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,cAAc,CAAC;AAInC,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,EACrB,gBAAgB,EAAE,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,KAAK,OAAO,EACjD,gBAAgB,EAAE,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,CAAC,UAAU,KAAK,OAAO,aAwB1E"}
1
+ {"version":3,"file":"wallets.d.ts","sourceRoot":"","sources":["../../src/scenes/wallets.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,cAAc,CAAC;AAMnC,OAAO,EAAc,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAEzD,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,iBAAiB,EAAE,EAC5B,gBAAgB,EAAE,CAAC,MAAM,EAAE,iBAAiB,KAAK,OAAO,EACxD,gBAAgB,EAAE,CAChB,MAAM,EAAE,iBAAiB,EACzB,MAAM,EAAE,GAAG,CAAC,UAAU,KACnB,OAAO,gDAgEb"}
@@ -1,12 +1,45 @@
1
1
  import { html } from "lit";
2
2
  import { repeat } from "lit/directives/repeat.js";
3
+ import { METAMASK_SVG } from "../assets/metamask.svg";
4
+ import { OKX_SVG } from "../assets/okx.svg";
5
+ import { UNI_SAT_SVG } from "../assets/uni-sat.svg";
3
6
  export function generateWalletsScene(wallets, onWalletSelected, onSignerSelected) {
7
+ const recommendedWallets = [
8
+ {
9
+ name: "MetaMask",
10
+ icon: METAMASK_SVG,
11
+ downloadLink: `https://metamask.app.link/dapp/${window.location.href}`,
12
+ },
13
+ {
14
+ name: "OKX Wallet",
15
+ icon: OKX_SVG,
16
+ downloadLink: "https://www.okx.com/zh-hans/download",
17
+ },
18
+ {
19
+ name: "UniSat",
20
+ icon: UNI_SAT_SVG,
21
+ downloadLink: "https://unisat.io/",
22
+ },
23
+ ];
24
+ const missingWallets = recommendedWallets.filter((recommendedWallet) => !wallets.some((wallet) => wallet.name === recommendedWallet.name));
25
+ const additionalButtons = missingWallets.map((wallet) => html `
26
+ <button
27
+ class="btn-primary mb-1"
28
+ @click=${() => {
29
+ window.open(wallet.downloadLink, "_blank");
30
+ }}
31
+ >
32
+ <img src=${wallet.icon} alt=${wallet.name} />
33
+ ${wallet.name}
34
+ </button>
35
+ `);
4
36
  return [
5
37
  "Connect Wallet",
6
- repeat(wallets, (wallet) => wallet.name, (wallet) => html `
7
- <button
8
- class="btn-primary mb-1"
9
- @click=${async () => {
38
+ html `
39
+ ${repeat(wallets, (wallet) => wallet.name, (wallet) => html `
40
+ <button
41
+ class="btn-primary mb-1"
42
+ @click=${async () => {
10
43
  if (wallet.signers.length === 1) {
11
44
  onSignerSelected(wallet, wallet.signers[0]);
12
45
  }
@@ -14,10 +47,12 @@ export function generateWalletsScene(wallets, onWalletSelected, onSignerSelected
14
47
  onWalletSelected(wallet);
15
48
  }
16
49
  }}
17
- >
18
- <img src=${wallet.icon} alt=${wallet.name} />
19
- ${wallet.name}
20
- </button>
21
- `),
50
+ >
51
+ <img src=${wallet.icon} alt=${wallet.name} />
52
+ ${wallet.name}
53
+ </button>
54
+ `)}
55
+ ${additionalButtons}
56
+ `,
22
57
  ];
23
58
  }