@ckb-ccc/connector 0.0.14-alpha.1 → 0.0.14-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 (45) hide show
  1. package/CHANGELOG.md +9 -0
  2. package/dist/assets/close.svg.d.ts +1 -1
  3. package/dist/assets/close.svg.d.ts.map +1 -1
  4. package/dist/assets/close.svg.js +15 -2
  5. package/dist/assets/diconnect.svg.d.ts +1 -1
  6. package/dist/assets/diconnect.svg.d.ts.map +1 -1
  7. package/dist/assets/diconnect.svg.js +16 -2
  8. package/dist/assets/left.svg.d.ts +1 -1
  9. package/dist/assets/left.svg.d.ts.map +1 -1
  10. package/dist/assets/left.svg.js +16 -2
  11. package/dist/assets/retry.svg.d.ts +1 -1
  12. package/dist/assets/retry.svg.d.ts.map +1 -1
  13. package/dist/assets/retry.svg.js +15 -2
  14. package/dist/assets/swap.svg.d.ts +2 -0
  15. package/dist/assets/swap.svg.d.ts.map +1 -0
  16. package/dist/assets/swap.svg.js +36 -0
  17. package/dist/components/button-pill.d.ts.map +1 -1
  18. package/dist/components/button-pill.js +2 -1
  19. package/dist/components/button.d.ts.map +1 -1
  20. package/dist/components/button.js +2 -1
  21. package/dist/components/dialog.d.ts.map +1 -1
  22. package/dist/components/dialog.js +15 -10
  23. package/dist/connector/index.d.ts +5 -0
  24. package/dist/connector/index.d.ts.map +1 -1
  25. package/dist/connector/index.js +5 -0
  26. package/dist/scenes/connected.d.ts +10 -0
  27. package/dist/scenes/connected.d.ts.map +1 -1
  28. package/dist/scenes/connected.js +108 -52
  29. package/dist/scenes/selecting/connecting.d.ts.map +1 -1
  30. package/dist/scenes/selecting/connecting.js +2 -1
  31. package/dist/scenes/selecting/index.d.ts.map +1 -1
  32. package/dist/scenes/selecting/index.js +4 -0
  33. package/package.json +2 -2
  34. package/src/assets/close.svg.ts +15 -4
  35. package/src/assets/diconnect.svg.ts +16 -4
  36. package/src/assets/left.svg.ts +16 -4
  37. package/src/assets/retry.svg.ts +15 -4
  38. package/src/assets/swap.svg.ts +37 -0
  39. package/src/components/button-pill.ts +2 -1
  40. package/src/components/button.ts +2 -1
  41. package/src/components/dialog.ts +15 -10
  42. package/src/connector/index.ts +6 -0
  43. package/src/scenes/connected.ts +108 -52
  44. package/src/scenes/selecting/connecting.ts +2 -1
  45. package/src/scenes/selecting/index.ts +4 -0
package/CHANGELOG.md CHANGED
@@ -1,5 +1,14 @@
1
1
  # @ckb-ccc/connector
2
2
 
3
+ ## 0.0.14-alpha.2
4
+
5
+ ### Patch Changes
6
+
7
+ - [#53](https://github.com/ckb-ecofund/ccc/pull/53) [`32bffff`](https://github.com/ckb-ecofund/ccc/commit/32bffff407934ec5d16bf7c5701b128d8b29c452) Thanks [@Hanssen0](https://github.com/Hanssen0)! - feat(connector): select client
8
+
9
+ - Updated dependencies []:
10
+ - @ckb-ccc/ccc@0.0.14-alpha.2
11
+
3
12
  ## 0.0.14-alpha.1
4
13
 
5
14
  ### Patch Changes
@@ -1,2 +1,2 @@
1
- export declare const CLOSE_SVG: string;
1
+ export declare const CLOSE_SVG: import("lit").TemplateResult;
2
2
  //# sourceMappingURL=close.svg.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"close.svg.d.ts","sourceRoot":"","sources":["../../src/assets/close.svg.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,SAAS,QAErB,CAAC"}
1
+ {"version":3,"file":"close.svg.d.ts","sourceRoot":"","sources":["../../src/assets/close.svg.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,SAAS,8BAarB,CAAC"}
@@ -1,2 +1,15 @@
1
- import { encodeSvgToImgSrc } from "./utils.js";
2
- export const CLOSE_SVG = encodeSvgToImgSrc('<svg width="12" height="12" viewBox="0 0 12 12" xmlns="http://www.w3.org/2000/svg"><path d="M10.8989 1.0512C10.5085 0.660741 9.87543 0.660703 9.48493 1.05111L5.94897 4.58624L2.41397 1.05124C2.0235 0.660772 1.39043 0.660773 0.999968 1.05124C0.609503 1.4417 0.609503 2.07477 0.999969 2.46524L4.53497 6.00024L0.999968 9.53524C0.609503 9.9257 0.609503 10.5588 0.999968 10.9492C1.39043 11.3397 2.0235 11.3397 2.41397 10.9492L5.94897 7.41424L9.48493 10.9494C9.87543 11.3398 10.5085 11.3397 10.8989 10.9493C11.2894 10.5588 11.2894 9.92568 10.8989 9.5352L7.36397 6.00024L10.8989 2.46528C11.2894 2.07479 11.2894 1.44168 10.8989 1.0512Z"/></svg>');
1
+ import { html } from "lit/static-html.js";
2
+ export const CLOSE_SVG = html `
3
+ <svg
4
+ width="12"
5
+ height="12"
6
+ viewBox="0 0 12 12"
7
+ xmlns="http://www.w3.org/2000/svg"
8
+ class="primary-icon"
9
+ >
10
+ <path
11
+ d="M10.8989 1.0512C10.5085 0.660741 9.87543 0.660703 9.48493 1.05111L5.94897 4.58624L2.41397 1.05124C2.0235 0.660772 1.39043 0.660773 0.999968 1.05124C0.609503 1.4417 0.609503 2.07477 0.999969 2.46524L4.53497 6.00024L0.999968 9.53524C0.609503 9.9257 0.609503 10.5588 0.999968 10.9492C1.39043 11.3397 2.0235 11.3397 2.41397 10.9492L5.94897 7.41424L9.48493 10.9494C9.87543 11.3398 10.5085 11.3397 10.8989 10.9493C11.2894 10.5588 11.2894 9.92568 10.8989 9.5352L7.36397 6.00024L10.8989 2.46528C11.2894 2.07479 11.2894 1.44168 10.8989 1.0512Z"
12
+ fill="currentColor"
13
+ />
14
+ </svg>
15
+ `;
@@ -1,2 +1,2 @@
1
- export declare const DISCONNECT_SVG: string;
1
+ export declare const DISCONNECT_SVG: import("lit").TemplateResult;
2
2
  //# sourceMappingURL=diconnect.svg.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"diconnect.svg.d.ts","sourceRoot":"","sources":["../../src/assets/diconnect.svg.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,cAAc,QAE1B,CAAC"}
1
+ {"version":3,"file":"diconnect.svg.d.ts","sourceRoot":"","sources":["../../src/assets/diconnect.svg.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,cAAc,8BAc1B,CAAC"}
@@ -1,2 +1,16 @@
1
- import { encodeSvgToImgSrc } from "./utils.js";
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>');
1
+ import { html } from "lit/static-html.js";
2
+ export const DISCONNECT_SVG = html `
3
+ <svg
4
+ width="32"
5
+ height="32"
6
+ viewBox="3 3 26 26"
7
+ fill="none"
8
+ xmlns="http://www.w3.org/2000/svg"
9
+ class="primary-icon"
10
+ >
11
+ <path
12
+ 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"
13
+ fill="currentColor"
14
+ />
15
+ </svg>
16
+ `;
@@ -1,2 +1,2 @@
1
- export declare const LEFT_SVG: string;
1
+ export declare const LEFT_SVG: import("lit").TemplateResult;
2
2
  //# sourceMappingURL=left.svg.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"left.svg.d.ts","sourceRoot":"","sources":["../../src/assets/left.svg.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,QAAQ,QAEpB,CAAC"}
1
+ {"version":3,"file":"left.svg.d.ts","sourceRoot":"","sources":["../../src/assets/left.svg.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,QAAQ,8BAcpB,CAAC"}
@@ -1,2 +1,16 @@
1
- import { encodeSvgToImgSrc } from "./utils.js";
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>');
1
+ import { html } from "lit/static-html.js";
2
+ export const LEFT_SVG = html `
3
+ <svg
4
+ width="8"
5
+ height="14"
6
+ viewBox="0 0 8 14"
7
+ xmlns="http://www.w3.org/2000/svg"
8
+ class="primary-icon"
9
+ >
10
+ <path
11
+ 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"
12
+ fill="currentColor"
13
+ stroke="currentColor"
14
+ />
15
+ </svg>
16
+ `;
@@ -1,2 +1,2 @@
1
- export declare const RETRY_SVG: string;
1
+ export declare const RETRY_SVG: import("lit").TemplateResult;
2
2
  //# sourceMappingURL=retry.svg.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"retry.svg.d.ts","sourceRoot":"","sources":["../../src/assets/retry.svg.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,SAAS,QAErB,CAAC"}
1
+ {"version":3,"file":"retry.svg.d.ts","sourceRoot":"","sources":["../../src/assets/retry.svg.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,SAAS,8BAarB,CAAC"}
@@ -1,2 +1,15 @@
1
- import { encodeSvgToImgSrc } from "./utils.js";
2
- export const RETRY_SVG = encodeSvgToImgSrc('<svg width="12" height="12" viewBox="0 0 12 12" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M11.398 1.16864C11.0369 1.16864 10.7961 1.41021 10.7961 1.77256V2.37648C10.1941 1.531 9.35141 0.866684 8.38828 0.504333C5.37851 -0.82429 1.82699 0.564725 0.502691 3.58432C-0.821607 6.60392 0.562886 10.167 3.57265 11.4957C6.58242 12.8243 10.1339 11.4353 11.4582 8.41568H11.398C11.398 8.05333 11.1573 7.81176 10.7961 7.81176C10.4349 7.81176 10.1941 8.05333 10.1941 8.41568H10.1339C9.59219 9.32156 8.80965 10.0463 7.78633 10.469C5.31832 11.4957 2.54933 10.2878 1.52601 7.81176C0.502691 5.33569 1.7066 2.49727 4.17461 1.531C6.40183 0.564725 8.93004 1.531 10.1339 3.58432H8.99023C8.62906 3.58432 8.38828 3.82589 8.38828 4.18824C8.38828 4.55059 8.62906 4.79216 8.99023 4.79216H11.398C11.7592 4.79216 12 4.55059 12 4.18824V1.77256C12 1.41021 11.7592 1.16864 11.398 1.16864Z" fill="#1E1E1E"/></svg>');
1
+ import { html } from "lit/static-html.js";
2
+ export const RETRY_SVG = html `
3
+ <svg
4
+ width="12"
5
+ height="12"
6
+ viewBox="0 0 12 12"
7
+ xmlns="http://www.w3.org/2000/svg"
8
+ fill="currentColor"
9
+ class="primary-icon"
10
+ >
11
+ <path
12
+ d="M11.398 1.16864C11.0369 1.16864 10.7961 1.41021 10.7961 1.77256V2.37648C10.1941 1.531 9.35141 0.866684 8.38828 0.504333C5.37851 -0.82429 1.82699 0.564725 0.502691 3.58432C-0.821607 6.60392 0.562886 10.167 3.57265 11.4957C6.58242 12.8243 10.1339 11.4353 11.4582 8.41568H11.398C11.398 8.05333 11.1573 7.81176 10.7961 7.81176C10.4349 7.81176 10.1941 8.05333 10.1941 8.41568H10.1339C9.59219 9.32156 8.80965 10.0463 7.78633 10.469C5.31832 11.4957 2.54933 10.2878 1.52601 7.81176C0.502691 5.33569 1.7066 2.49727 4.17461 1.531C6.40183 0.564725 8.93004 1.531 10.1339 3.58432H8.99023C8.62906 3.58432 8.38828 3.82589 8.38828 4.18824C8.38828 4.55059 8.62906 4.79216 8.99023 4.79216H11.398C11.7592 4.79216 12 4.55059 12 4.18824V1.77256C12 1.41021 11.7592 1.16864 11.398 1.16864Z"
13
+ />
14
+ </svg>
15
+ `;
@@ -0,0 +1,2 @@
1
+ export declare const SWAP_SVG: import("lit").TemplateResult;
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,8BAkCpB,CAAC"}
@@ -0,0 +1,36 @@
1
+ import { html } from "lit/static-html.js";
2
+ export const SWAP_SVG = html `
3
+ <svg
4
+ width="13"
5
+ height="12"
6
+ viewBox="0 0 13 12"
7
+ xmlns="http://www.w3.org/2000/svg"
8
+ class="secondary-icon"
9
+ stroke="currentColor"
10
+ >
11
+ <path
12
+ d="M9.30688 5.22537L11.1669 3.36536L9.30688 1.50537"
13
+ stroke-width="1.33333"
14
+ stroke-linecap="round"
15
+ stroke-linejoin="round"
16
+ />
17
+ <path
18
+ d="M2.16699 3.36523H11.167"
19
+ stroke-width="1.33333"
20
+ stroke-linecap="round"
21
+ stroke-linejoin="round"
22
+ />
23
+ <path
24
+ d="M4.02698 6.77539L2.16699 8.63541L4.02698 10.4954"
25
+ stroke-width="1.33333"
26
+ stroke-linecap="round"
27
+ stroke-linejoin="round"
28
+ />
29
+ <path
30
+ d="M11.167 8.63525H2.16699"
31
+ stroke-width="1.33333"
32
+ stroke-linecap="round"
33
+ stroke-linejoin="round"
34
+ />
35
+ </svg>
36
+ `;
@@ -1 +1 @@
1
- {"version":3,"file":"button-pill.d.ts","sourceRoot":"","sources":["../../src/components/button-pill.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,UAAU,EAAE,MAAM,KAAK,CAAC;AAG5C,qBACa,UAAW,SAAQ,UAAU;IACxC,MAAM,CAAC,MAAM,0BAiCX;IAEF,OAAO;IAIP,MAAM;CAGP"}
1
+ {"version":3,"file":"button-pill.d.ts","sourceRoot":"","sources":["../../src/components/button-pill.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,UAAU,EAAE,MAAM,KAAK,CAAC;AAG5C,qBACa,UAAW,SAAQ,UAAU;IACxC,MAAM,CAAC,MAAM,0BAkCX;IAEF,OAAO;IAIP,MAAM;CAGP"}
@@ -42,7 +42,8 @@ ButtonPill.styles = css `
42
42
  background: var(--btn-secondary);
43
43
  }
44
44
 
45
- button ::slotted(img) {
45
+ button ::slotted(img),
46
+ button ::slotted(svg) {
46
47
  width: 0.8rem;
47
48
  height: 0.8rem;
48
49
  margin-right: 0.5rem;
@@ -1 +1 @@
1
- {"version":3,"file":"button.d.ts","sourceRoot":"","sources":["../../src/components/button.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,UAAU,EAAE,MAAM,KAAK,CAAC;AAG5C,qBACa,MAAO,SAAQ,UAAU;IACpC,MAAM,CAAC,MAAM,0BAuCX;IAEF,OAAO;IAIP,MAAM;CAGP"}
1
+ {"version":3,"file":"button.d.ts","sourceRoot":"","sources":["../../src/components/button.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,UAAU,EAAE,MAAM,KAAK,CAAC;AAG5C,qBACa,MAAO,SAAQ,UAAU;IACpC,MAAM,CAAC,MAAM,0BAwCX;IAEF,OAAO;IAIP,MAAM;CAGP"}
@@ -47,7 +47,8 @@ Button.styles = css `
47
47
  background: var(--btn-primary);
48
48
  }
49
49
 
50
- button ::slotted(img) {
50
+ button ::slotted(img),
51
+ button ::slotted(svg) {
51
52
  width: 2rem;
52
53
  height: 2rem;
53
54
  margin-right: 1rem;
@@ -1 +1 @@
1
- {"version":3,"file":"dialog.d.ts","sourceRoot":"","sources":["../../src/components/dialog.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,UAAU,EAAE,MAAM,KAAK,CAAC;AAK5C,qBACa,MAAO,SAAQ,UAAU;IAE7B,OAAO,EAAE,GAAG,GAAG,SAAS,CAAC;IAEzB,MAAM,CAAC,EAAE,MAAM,CAAC;IAEvB,MAAM;IA6BN,MAAM,CAAC,MAAM,0BAuDX;CACH"}
1
+ {"version":3,"file":"dialog.d.ts","sourceRoot":"","sources":["../../src/components/dialog.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,UAAU,EAAE,MAAM,KAAK,CAAC;AAK5C,qBACa,MAAO,SAAQ,UAAU;IAE7B,OAAO,EAAE,GAAG,GAAG,SAAS,CAAC;IAEzB,MAAM,CAAC,EAAE,MAAM,CAAC;IAEvB,MAAM;IA+BN,MAAM,CAAC,MAAM,0BA0DX;CACH"}
@@ -14,21 +14,23 @@ let Dialog = class Dialog extends LitElement {
14
14
  <div
15
15
  class="header text-bold fs-lg ${this.header ? "header-divider" : ""}"
16
16
  >
17
- <img
17
+ <div
18
18
  class="back ${this.canBack !== undefined ? "active" : ""}"
19
- src=${LEFT_SVG}
20
19
  @click=${() => {
21
20
  this.dispatchEvent(new Event("back"));
22
21
  }}
23
- />
22
+ >
23
+ ${LEFT_SVG}
24
+ </div>
24
25
  ${this.header}
25
- <img
26
+ <span
26
27
  class="close active"
27
- src=${CLOSE_SVG}
28
28
  @click=${() => {
29
29
  this.dispatchEvent(new Event("close", { bubbles: true, composed: true }));
30
30
  }}
31
- />
31
+ >
32
+ ${CLOSE_SVG}
33
+ </span>
32
34
  </div>
33
35
  <div class="body">
34
36
  <slot></slot>
@@ -37,6 +39,9 @@ let Dialog = class Dialog extends LitElement {
37
39
  }
38
40
  };
39
41
  Dialog.styles = css `
42
+ .primary-icon {
43
+ color: var(--icon-primary);
44
+ }
40
45
  .text-bold {
41
46
  font-weight: bold;
42
47
  }
@@ -68,16 +73,16 @@ Dialog.styles = css `
68
73
  border-bottom: 1px solid var(--divider);
69
74
  }
70
75
 
71
- .close,
72
- .back {
76
+ .close svg,
77
+ .back svg {
73
78
  width: 0.8rem;
74
79
  height: 0.8rem;
75
80
  opacity: 0;
76
81
  transition: opacity 0.15s ease-in-out;
77
82
  }
78
83
 
79
- .close.active,
80
- .back.active {
84
+ .close.active svg,
85
+ .back.active svg {
81
86
  opacity: 1;
82
87
  cursor: pointer;
83
88
  }
@@ -5,6 +5,11 @@ export declare class WebComponentConnector extends LitElement {
5
5
  icon?: string;
6
6
  preferredNetworks?: ccc.NetworkPreference[];
7
7
  signersController?: ccc.SignersController;
8
+ clientOptions?: {
9
+ icon?: string;
10
+ client: ccc.Client;
11
+ name: string;
12
+ }[];
8
13
  client: ccc.Client;
9
14
  setClient(client: ccc.Client): void;
10
15
  private signersControllerInner;
@@ -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;AAM5D,qBACa,qBAAsB,SAAQ,UAAU;IAE5C,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd,iBAAiB,CAAC,EAAE,GAAG,CAAC,iBAAiB,EAAE,CAAC;IAE5C,iBAAiB,CAAC,EAAE,GAAG,CAAC,iBAAiB,CAAC;IAG1C,MAAM,EAAE,GAAG,CAAC,MAAM,CAAiC;IACnD,SAAS,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM;IAInC,OAAO,CAAC,sBAAsB,CAA+B;IAG7D,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;IAE/B,OAAO,CAAC,wBAAwB,CAAC,CAAa;IAEvC,UAAU;IAQjB,OAAO,CAAC,cAAc;IAYtB,OAAO,CAAC,cAAc;IAUtB,iBAAiB,IAAI,IAAI;IAKzB,UAAU,CAAC,iBAAiB,EAAE,cAAc,GAAG,IAAI;IAoBnD,aAAa;IAQP,YAAY,CAChB,MAAM,EAAE,GAAG,CAAC,MAAM,GAAG,SAAS,EAC9B,UAAU,EAAE,GAAG,CAAC,UAAU,GAAG,SAAS;IAsBxC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAoC;IAC5D,OAAO,CAAC,QAAQ,CAAC,OAAO,CACV;IAEd,MAAM;IAuCN,OAAO;IASP,MAAM,CAAC,MAAM,0BAyBX;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;AAO5D,qBACa,qBAAsB,SAAQ,UAAU;IAE5C,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd,iBAAiB,CAAC,EAAE,GAAG,CAAC,iBAAiB,EAAE,CAAC;IAE5C,iBAAiB,CAAC,EAAE,GAAG,CAAC,iBAAiB,CAAC;IAE1C,aAAa,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAGtE,MAAM,EAAE,GAAG,CAAC,MAAM,CAAiC;IACnD,SAAS,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM;IAInC,OAAO,CAAC,sBAAsB,CAA+B;IAG7D,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;IAE/B,OAAO,CAAC,wBAAwB,CAAC,CAAa;IAEvC,UAAU;IAQjB,OAAO,CAAC,cAAc;IAYtB,OAAO,CAAC,cAAc;IAUtB,iBAAiB,IAAI,IAAI;IAKzB,UAAU,CAAC,iBAAiB,EAAE,cAAc,GAAG,IAAI;IAoBnD,aAAa;IAQP,YAAY,CAChB,MAAM,EAAE,GAAG,CAAC,MAAM,GAAG,SAAS,EAC9B,UAAU,EAAE,GAAG,CAAC,UAAU,GAAG,SAAS;IAsBxC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAoC;IAC5D,OAAO,CAAC,QAAQ,CAAC,OAAO,CACV;IAEd,MAAM;IA0CN,OAAO;IASP,MAAM,CAAC,MAAM,0BAyBX;CACH"}
@@ -97,7 +97,9 @@ let WebComponentConnector = class WebComponentConnector extends LitElement {
97
97
  <ccc-connected-scene
98
98
  .wallet=${this.wallet}
99
99
  .signer=${this.signer.signer}
100
+ .clientOptions=${this.clientOptions}
100
101
  @disconnect=${() => this.disconnect()}
102
+ @select-client=${(e) => this.setClient(e.client)}
101
103
  ${ref(this.bodyRef)}
102
104
  ></ccc-connected-scene>
103
105
  `
@@ -161,6 +163,9 @@ __decorate([
161
163
  __decorate([
162
164
  property()
163
165
  ], WebComponentConnector.prototype, "signersController", void 0);
166
+ __decorate([
167
+ state()
168
+ ], WebComponentConnector.prototype, "clientOptions", void 0);
164
169
  __decorate([
165
170
  state()
166
171
  ], WebComponentConnector.prototype, "client", void 0);
@@ -1,12 +1,22 @@
1
1
  import { ccc } from "@ckb-ccc/ccc";
2
2
  import { LitElement, PropertyValues } from "lit";
3
+ export declare class SelectClientEvent extends Event {
4
+ client: ccc.Client;
5
+ constructor(client: ccc.Client);
6
+ }
3
7
  export declare function formatString(str: string | undefined, l?: number, r?: number): string | undefined;
4
8
  export declare class ConnectedScene extends LitElement {
5
9
  wallet?: ccc.Wallet;
6
10
  signer?: ccc.Signer;
11
+ clientOptions?: {
12
+ icon?: string;
13
+ client: ccc.Client;
14
+ name: string;
15
+ }[];
7
16
  private recommendedAddress?;
8
17
  private internalAddress?;
9
18
  private balance?;
19
+ private selectingClient;
10
20
  willUpdate(changedProperties: PropertyValues<this>): void;
11
21
  render(): import("lit").TemplateResult<1>;
12
22
  static styles: import("lit").CSSResult;
@@ -1 +1 @@
1
- {"version":3,"file":"connected.d.ts","sourceRoot":"","sources":["../../src/scenes/connected.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,cAAc,CAAC;AACnC,OAAO,EAAa,UAAU,EAAE,cAAc,EAAE,MAAM,KAAK,CAAC;AAM5D,wBAAgB,YAAY,CAC1B,GAAG,EAAE,MAAM,GAAG,SAAS,EACvB,CAAC,SAAI,EACL,CAAC,SAAI,GACJ,MAAM,GAAG,SAAS,CAKpB;AAED,qBACa,cAAe,SAAQ,UAAU;IAErC,MAAM,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC;IAEpB,MAAM,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC;IAG3B,OAAO,CAAC,kBAAkB,CAAC,CAAS;IAEpC,OAAO,CAAC,eAAe,CAAC,CAAS;IAEjC,OAAO,CAAC,OAAO,CAAC,CAAU;IAE1B,UAAU,CAAC,iBAAiB,EAAE,cAAc,CAAC,IAAI,CAAC,GAAG,IAAI;IAgBzD,MAAM;IAkEN,MAAM,CAAC,MAAM,0BAmGX;IAEF,OAAO;CAGR"}
1
+ {"version":3,"file":"connected.d.ts","sourceRoot":"","sources":["../../src/scenes/connected.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,cAAc,CAAC;AACnC,OAAO,EAAa,UAAU,EAAE,cAAc,EAAE,MAAM,KAAK,CAAC;AAQ5D,qBAAa,iBAAkB,SAAQ,KAAK;IACvB,MAAM,EAAE,GAAG,CAAC,MAAM;gBAAlB,MAAM,EAAE,GAAG,CAAC,MAAM;CAGtC;AAED,wBAAgB,YAAY,CAC1B,GAAG,EAAE,MAAM,GAAG,SAAS,EACvB,CAAC,SAAI,EACL,CAAC,SAAI,GACJ,MAAM,GAAG,SAAS,CAKpB;AAED,qBACa,cAAe,SAAQ,UAAU;IAErC,MAAM,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC;IAEpB,MAAM,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC;IAEpB,aAAa,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAG7E,OAAO,CAAC,kBAAkB,CAAC,CAAS;IAEpC,OAAO,CAAC,eAAe,CAAC,CAAS;IAEjC,OAAO,CAAC,OAAO,CAAC,CAAU;IAE1B,OAAO,CAAC,eAAe,CAAS;IAEhC,UAAU,CAAC,iBAAiB,EAAE,cAAc,CAAC,IAAI,CAAC,GAAG,IAAI;IAgBzD,MAAM;IA8FN,MAAM,CAAC,MAAM,0BAmHX;IAEF,OAAO;CAGR"}
@@ -7,9 +7,17 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
7
7
  import { ccc } from "@ckb-ccc/ccc";
8
8
  import { css, html, LitElement } from "lit";
9
9
  import { customElement, property, state } from "lit/decorators.js";
10
+ import { repeat } from "lit/directives/repeat.js";
10
11
  import { CKB_SVG } from "../assets/chains/index.js";
11
12
  import { DISCONNECT_SVG } from "../assets/diconnect.svg.js";
13
+ import { SWAP_SVG } from "../assets/swap.svg.js";
12
14
  import { signerTypeToIcon } from "./selecting/signers.js";
15
+ export class SelectClientEvent extends Event {
16
+ constructor(client) {
17
+ super("select-client");
18
+ this.client = client;
19
+ }
20
+ }
13
21
  export function formatString(str, l = 9, r = 6) {
14
22
  if (str && str.length > l + r + 3) {
15
23
  return `${str.slice(0, l)}...${str.slice(-r)}`;
@@ -17,6 +25,10 @@ export function formatString(str, l = 9, r = 6) {
17
25
  return str;
18
26
  }
19
27
  let ConnectedScene = class ConnectedScene extends LitElement {
28
+ constructor() {
29
+ super(...arguments);
30
+ this.selectingClient = false;
31
+ }
20
32
  willUpdate(changedProperties) {
21
33
  if ((!this.recommendedAddress ||
22
34
  !this.internalAddress ||
@@ -35,61 +47,83 @@ let ConnectedScene = class ConnectedScene extends LitElement {
35
47
  if (!wallet || !signer) {
36
48
  return html `<div></div>`;
37
49
  }
38
- return html `
39
- <ccc-dialog>
40
- <div class="position-relative">
41
- <img
42
- class="connecting-wallet-icon"
43
- src=${wallet.icon}
44
- alt=${wallet.name}
45
- />
46
- <img
47
- class="connected-type-icon"
48
- src=${signerTypeToIcon(signer.type)}
49
- alt=${signer.type}
50
- />
51
- </div>
52
-
53
- <ccc-copy-button
54
- value=${recommendedAddress}
55
- class="text-bold fs-xl mt-2"
56
- >
57
- ${formatString(recommendedAddress)}
58
- </ccc-copy-button>
59
- <div class="text-bold fs-md">
60
- ${ccc.fixedPointToString(balance ?? ccc.Zero)} CKB
61
- </div>
62
- <ccc-copy-button
63
- value=${internalAddress}
64
- class="text-bold text-tip fs-md"
65
- style="margin-top: 0.5rem"
66
- >
67
- ${formatString(internalAddress, 11, 9)}
68
- </ccc-copy-button>
69
-
70
- <ccc-button
71
- class="mt-2"
72
- @click=${() => this.dispatchEvent(new Event("disconnect"))}
73
- >
74
- <img src=${DISCONNECT_SVG} alt="disconnect" />
75
- Disconnect
76
- </ccc-button>
77
-
78
- <div class="switch-btn-container">
79
- <div class="switch-line"></div>
80
- <div class="switch-content ml-2 mr-2 fs-sm">
50
+ const body = (() => {
51
+ if (!this.selectingClient || !this.clientOptions) {
52
+ return html `
53
+ <div class="position-relative">
54
+ <img
55
+ class="connecting-wallet-icon"
56
+ src=${wallet.icon}
57
+ alt=${wallet.name}
58
+ />
81
59
  <img
82
- class="mr-1 sm-chain-logo"
83
- src=${CKB_SVG}
84
- alt="Nervos Network"
60
+ class="connected-type-icon"
61
+ src=${signerTypeToIcon(signer.type)}
62
+ alt=${signer.type}
85
63
  />
86
- ${signer.client.addressPrefix === "ckb" ? "Mainnet" : "Testnet"}
87
- ${["ckb", "ckt"].includes(signer.client.addressPrefix)
88
- ? ""
89
- : ` ${signer.client.addressPrefix}`}
90
64
  </div>
91
- <div class="switch-line"></div>
92
- </div>
65
+
66
+ <ccc-copy-button
67
+ value=${recommendedAddress}
68
+ class="text-bold fs-xl mt-2"
69
+ >
70
+ ${formatString(recommendedAddress)}
71
+ </ccc-copy-button>
72
+ <div class="text-bold fs-md">
73
+ ${ccc.fixedPointToString(balance ?? ccc.Zero)} CKB
74
+ </div>
75
+ <ccc-copy-button
76
+ value=${internalAddress}
77
+ class="text-bold text-tip fs-md"
78
+ style="margin-top: 0.5rem"
79
+ >
80
+ ${formatString(internalAddress, 11, 9)}
81
+ </ccc-copy-button>
82
+
83
+ <ccc-button
84
+ class="mt-2"
85
+ @click=${() => this.dispatchEvent(new Event("disconnect"))}
86
+ >
87
+ ${DISCONNECT_SVG}
88
+ Disconnect
89
+ </ccc-button>
90
+
91
+ <div
92
+ class="switch-btn-container ${this.clientOptions
93
+ ? "cursor-pointer"
94
+ : ""}"
95
+ @click=${() => (this.selectingClient = Boolean(this.clientOptions))}
96
+ >
97
+ <div class="switch-line"></div>
98
+ <div class="switch-content ml-2 mr-2 fs-sm">
99
+ <img class="sm-chain-logo" src=${CKB_SVG} alt="Nervos Network" />
100
+ ${signer.client.addressPrefix === "ckb" ? "Mainnet" : "Testnet"}
101
+ ${["ckb", "ckt"].includes(signer.client.addressPrefix)
102
+ ? ""
103
+ : ` ${signer.client.addressPrefix}`}
104
+ ${this.clientOptions ? SWAP_SVG : undefined}
105
+ </div>
106
+ <div class="switch-line"></div>
107
+ </div>
108
+ `;
109
+ }
110
+ return repeat(this.clientOptions, ({ name }) => name, ({ client, name, icon }) => html `
111
+ <ccc-button
112
+ class="mt-1"
113
+ @click=${() => this.dispatchEvent(new SelectClientEvent(client))}
114
+ >
115
+ <img src=${icon ?? CKB_SVG} alt=${name} />
116
+ ${name}
117
+ </ccc-button>
118
+ `);
119
+ })();
120
+ return html `
121
+ <ccc-dialog
122
+ header=${this.selectingClient ? "Select Network" : undefined}
123
+ ?canBack=${this.selectingClient}
124
+ @back=${() => (this.selectingClient = false)}
125
+ >
126
+ ${body}
93
127
  </ccc-dialog>
94
128
  `;
95
129
  }
@@ -104,6 +138,14 @@ ConnectedScene.styles = css `
104
138
  flex-direction: column;
105
139
  align-items: center;
106
140
  }
141
+
142
+ .primary-icon {
143
+ color: var(--icon-primary);
144
+ }
145
+ .secondary-icon {
146
+ color: var(--icon-secondary);
147
+ }
148
+
107
149
  .text-bold {
108
150
  font-weight: bold;
109
151
  }
@@ -128,6 +170,9 @@ ConnectedScene.styles = css `
128
170
  .mt-2 {
129
171
  margin-top: 1rem;
130
172
  }
173
+ .ml-1 {
174
+ margin-left: 0.7em;
175
+ }
131
176
  .ml-2 {
132
177
  margin-left: 1em;
133
178
  }
@@ -165,9 +210,14 @@ ConnectedScene.styles = css `
165
210
  align-items: center;
166
211
  }
167
212
 
213
+ .cursor-pointer {
214
+ cursor: pointer;
215
+ }
216
+
168
217
  .switch-content {
169
218
  display: flex;
170
219
  align-items: center;
220
+ gap: 0.7rem;
171
221
  }
172
222
 
173
223
  .switch-line {
@@ -203,6 +253,9 @@ __decorate([
203
253
  __decorate([
204
254
  property()
205
255
  ], ConnectedScene.prototype, "signer", void 0);
256
+ __decorate([
257
+ property()
258
+ ], ConnectedScene.prototype, "clientOptions", void 0);
206
259
  __decorate([
207
260
  state()
208
261
  ], ConnectedScene.prototype, "recommendedAddress", void 0);
@@ -212,6 +265,9 @@ __decorate([
212
265
  __decorate([
213
266
  state()
214
267
  ], ConnectedScene.prototype, "balance", void 0);
268
+ __decorate([
269
+ state()
270
+ ], ConnectedScene.prototype, "selectingClient", void 0);
215
271
  ConnectedScene = __decorate([
216
272
  customElement("ccc-connected-scene")
217
273
  ], ConnectedScene);
@@ -1 +1 @@
1
- {"version":3,"file":"connecting.d.ts","sourceRoot":"","sources":["../../../src/scenes/selecting/connecting.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,cAAc,CAAC;AAInC,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,GAAG,CAAC,iBAAiB,EAC7B,MAAM,EAAE,GAAG,CAAC,UAAU,EACtB,KAAK,EAAE,MAAM,GAAG,SAAS,EACzB,gBAAgB,EAAE,CAChB,MAAM,EAAE,GAAG,CAAC,iBAAiB,EAC7B,MAAM,EAAE,GAAG,CAAC,UAAU,KACnB,OAAO,gDA2Bb"}
1
+ {"version":3,"file":"connecting.d.ts","sourceRoot":"","sources":["../../../src/scenes/selecting/connecting.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,cAAc,CAAC;AAInC,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,GAAG,CAAC,iBAAiB,EAC7B,MAAM,EAAE,GAAG,CAAC,UAAU,EACtB,KAAK,EAAE,MAAM,GAAG,SAAS,EACzB,gBAAgB,EAAE,CAChB,MAAM,EAAE,GAAG,CAAC,iBAAiB,EAC7B,MAAM,EAAE,GAAG,CAAC,UAAU,KACnB,OAAO,gDA4Bb"}
@@ -21,7 +21,8 @@ export function generateConnectingScene(wallet, signer, error, onSignerSelected)
21
21
  class="mt-2"
22
22
  @click=${() => onSignerSelected(wallet, signer)}
23
23
  >
24
- <img src=${RETRY_SVG} alt="retry" />
24
+
25
+ ${RETRY_SVG}
25
26
  Try again
26
27
  </ccc-button-pill>
27
28
  `,
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/scenes/selecting/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,cAAc,CAAC;AACnC,OAAO,EAAa,UAAU,EAAE,MAAM,KAAK,CAAC;AAM5C,qBAAa,cAAe,SAAQ,KAAK;aAErB,UAAU,EAAE,MAAM;aAClB,UAAU,EAAE,MAAM;gBADlB,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM;CAIrC;AAED,qBACa,cAAe,SAAQ,UAAU;IAErC,OAAO,CAAC,EAAE,GAAG,CAAC,iBAAiB,EAAE,CAAC;IAGzC,OAAO,CAAC,cAAc,CAAC,CAAwB;IAE/C,OAAO,CAAC,cAAc,CAAC,CAAiB;IAExC,OAAO,CAAC,eAAe,CAAC,CAAS;IAEjC,MAAM;IA+CC,OAAO;IAMd,OAAO,CAAC,qBAAqB,CAwC3B;IAEF,MAAM,CAAC,MAAM,0BAsDX;IAEF,OAAO;CAGR"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/scenes/selecting/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,cAAc,CAAC;AACnC,OAAO,EAAa,UAAU,EAAE,MAAM,KAAK,CAAC;AAM5C,qBAAa,cAAe,SAAQ,KAAK;aAErB,UAAU,EAAE,MAAM;aAClB,UAAU,EAAE,MAAM;gBADlB,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM;CAIrC;AAED,qBACa,cAAe,SAAQ,UAAU;IAErC,OAAO,CAAC,EAAE,GAAG,CAAC,iBAAiB,EAAE,CAAC;IAGzC,OAAO,CAAC,cAAc,CAAC,CAAwB;IAE/C,OAAO,CAAC,cAAc,CAAC,CAAiB;IAExC,OAAO,CAAC,eAAe,CAAC,CAAS;IAEjC,MAAM;IA+CC,OAAO;IAMd,OAAO,CAAC,qBAAqB,CAwC3B;IAEF,MAAM,CAAC,MAAM,0BA0DX;IAEF,OAAO;CAGR"}
@@ -94,6 +94,10 @@ let SelectingScene = class SelectingScene extends LitElement {
94
94
  }
95
95
  };
96
96
  SelectingScene.styles = css `
97
+ .primary-icon {
98
+ color: var(--icon-primary);
99
+ }
100
+
97
101
  :host {
98
102
  display: block;
99
103
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ckb-ccc/connector",
3
- "version": "0.0.14-alpha.1",
3
+ "version": "0.0.14-alpha.2",
4
4
  "description": "CCC - CKBer's Codebase. Common Chains Connector UI",
5
5
  "author": "Hanssen0 <hanssen0@hanssen0.com>",
6
6
  "license": "MIT",
@@ -34,7 +34,7 @@
34
34
  },
35
35
  "dependencies": {
36
36
  "lit": "^3.1.3",
37
- "@ckb-ccc/ccc": "0.0.14-alpha.1"
37
+ "@ckb-ccc/ccc": "0.0.14-alpha.2"
38
38
  },
39
39
  "scripts": {
40
40
  "build": "rimraf ./dist && tsc",
@@ -1,5 +1,16 @@
1
- import { encodeSvgToImgSrc } from "./utils.js";
1
+ import { html } from "lit/static-html.js";
2
2
 
3
- export const CLOSE_SVG = encodeSvgToImgSrc(
4
- '<svg width="12" height="12" viewBox="0 0 12 12" xmlns="http://www.w3.org/2000/svg"><path d="M10.8989 1.0512C10.5085 0.660741 9.87543 0.660703 9.48493 1.05111L5.94897 4.58624L2.41397 1.05124C2.0235 0.660772 1.39043 0.660773 0.999968 1.05124C0.609503 1.4417 0.609503 2.07477 0.999969 2.46524L4.53497 6.00024L0.999968 9.53524C0.609503 9.9257 0.609503 10.5588 0.999968 10.9492C1.39043 11.3397 2.0235 11.3397 2.41397 10.9492L5.94897 7.41424L9.48493 10.9494C9.87543 11.3398 10.5085 11.3397 10.8989 10.9493C11.2894 10.5588 11.2894 9.92568 10.8989 9.5352L7.36397 6.00024L10.8989 2.46528C11.2894 2.07479 11.2894 1.44168 10.8989 1.0512Z"/></svg>',
5
- );
3
+ export const CLOSE_SVG = html`
4
+ <svg
5
+ width="12"
6
+ height="12"
7
+ viewBox="0 0 12 12"
8
+ xmlns="http://www.w3.org/2000/svg"
9
+ class="primary-icon"
10
+ >
11
+ <path
12
+ d="M10.8989 1.0512C10.5085 0.660741 9.87543 0.660703 9.48493 1.05111L5.94897 4.58624L2.41397 1.05124C2.0235 0.660772 1.39043 0.660773 0.999968 1.05124C0.609503 1.4417 0.609503 2.07477 0.999969 2.46524L4.53497 6.00024L0.999968 9.53524C0.609503 9.9257 0.609503 10.5588 0.999968 10.9492C1.39043 11.3397 2.0235 11.3397 2.41397 10.9492L5.94897 7.41424L9.48493 10.9494C9.87543 11.3398 10.5085 11.3397 10.8989 10.9493C11.2894 10.5588 11.2894 9.92568 10.8989 9.5352L7.36397 6.00024L10.8989 2.46528C11.2894 2.07479 11.2894 1.44168 10.8989 1.0512Z"
13
+ fill="currentColor"
14
+ />
15
+ </svg>
16
+ `;
@@ -1,5 +1,17 @@
1
- import { encodeSvgToImgSrc } from "./utils.js";
1
+ import { html } from "lit/static-html.js";
2
2
 
3
- export const DISCONNECT_SVG = encodeSvgToImgSrc(
4
- '<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>',
5
- );
3
+ export const DISCONNECT_SVG = html`
4
+ <svg
5
+ width="32"
6
+ height="32"
7
+ viewBox="3 3 26 26"
8
+ fill="none"
9
+ xmlns="http://www.w3.org/2000/svg"
10
+ class="primary-icon"
11
+ >
12
+ <path
13
+ 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"
14
+ fill="currentColor"
15
+ />
16
+ </svg>
17
+ `;
@@ -1,5 +1,17 @@
1
- import { encodeSvgToImgSrc } from "./utils.js";
1
+ import { html } from "lit/static-html.js";
2
2
 
3
- export const LEFT_SVG = encodeSvgToImgSrc(
4
- '<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>',
5
- );
3
+ export const LEFT_SVG = html`
4
+ <svg
5
+ width="8"
6
+ height="14"
7
+ viewBox="0 0 8 14"
8
+ xmlns="http://www.w3.org/2000/svg"
9
+ class="primary-icon"
10
+ >
11
+ <path
12
+ 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"
13
+ fill="currentColor"
14
+ stroke="currentColor"
15
+ />
16
+ </svg>
17
+ `;
@@ -1,5 +1,16 @@
1
- import { encodeSvgToImgSrc } from "./utils.js";
1
+ import { html } from "lit/static-html.js";
2
2
 
3
- export const RETRY_SVG = encodeSvgToImgSrc(
4
- '<svg width="12" height="12" viewBox="0 0 12 12" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M11.398 1.16864C11.0369 1.16864 10.7961 1.41021 10.7961 1.77256V2.37648C10.1941 1.531 9.35141 0.866684 8.38828 0.504333C5.37851 -0.82429 1.82699 0.564725 0.502691 3.58432C-0.821607 6.60392 0.562886 10.167 3.57265 11.4957C6.58242 12.8243 10.1339 11.4353 11.4582 8.41568H11.398C11.398 8.05333 11.1573 7.81176 10.7961 7.81176C10.4349 7.81176 10.1941 8.05333 10.1941 8.41568H10.1339C9.59219 9.32156 8.80965 10.0463 7.78633 10.469C5.31832 11.4957 2.54933 10.2878 1.52601 7.81176C0.502691 5.33569 1.7066 2.49727 4.17461 1.531C6.40183 0.564725 8.93004 1.531 10.1339 3.58432H8.99023C8.62906 3.58432 8.38828 3.82589 8.38828 4.18824C8.38828 4.55059 8.62906 4.79216 8.99023 4.79216H11.398C11.7592 4.79216 12 4.55059 12 4.18824V1.77256C12 1.41021 11.7592 1.16864 11.398 1.16864Z" fill="#1E1E1E"/></svg>',
5
- );
3
+ export const RETRY_SVG = html`
4
+ <svg
5
+ width="12"
6
+ height="12"
7
+ viewBox="0 0 12 12"
8
+ xmlns="http://www.w3.org/2000/svg"
9
+ fill="currentColor"
10
+ class="primary-icon"
11
+ >
12
+ <path
13
+ d="M11.398 1.16864C11.0369 1.16864 10.7961 1.41021 10.7961 1.77256V2.37648C10.1941 1.531 9.35141 0.866684 8.38828 0.504333C5.37851 -0.82429 1.82699 0.564725 0.502691 3.58432C-0.821607 6.60392 0.562886 10.167 3.57265 11.4957C6.58242 12.8243 10.1339 11.4353 11.4582 8.41568H11.398C11.398 8.05333 11.1573 7.81176 10.7961 7.81176C10.4349 7.81176 10.1941 8.05333 10.1941 8.41568H10.1339C9.59219 9.32156 8.80965 10.0463 7.78633 10.469C5.31832 11.4957 2.54933 10.2878 1.52601 7.81176C0.502691 5.33569 1.7066 2.49727 4.17461 1.531C6.40183 0.564725 8.93004 1.531 10.1339 3.58432H8.99023C8.62906 3.58432 8.38828 3.82589 8.38828 4.18824C8.38828 4.55059 8.62906 4.79216 8.99023 4.79216H11.398C11.7592 4.79216 12 4.55059 12 4.18824V1.77256C12 1.41021 11.7592 1.16864 11.398 1.16864Z"
14
+ />
15
+ </svg>
16
+ `;
@@ -0,0 +1,37 @@
1
+ import { html } from "lit/static-html.js";
2
+
3
+ export const SWAP_SVG = html`
4
+ <svg
5
+ width="13"
6
+ height="12"
7
+ viewBox="0 0 13 12"
8
+ xmlns="http://www.w3.org/2000/svg"
9
+ class="secondary-icon"
10
+ stroke="currentColor"
11
+ >
12
+ <path
13
+ d="M9.30688 5.22537L11.1669 3.36536L9.30688 1.50537"
14
+ stroke-width="1.33333"
15
+ stroke-linecap="round"
16
+ stroke-linejoin="round"
17
+ />
18
+ <path
19
+ d="M2.16699 3.36523H11.167"
20
+ stroke-width="1.33333"
21
+ stroke-linecap="round"
22
+ stroke-linejoin="round"
23
+ />
24
+ <path
25
+ d="M4.02698 6.77539L2.16699 8.63541L4.02698 10.4954"
26
+ stroke-width="1.33333"
27
+ stroke-linecap="round"
28
+ stroke-linejoin="round"
29
+ />
30
+ <path
31
+ d="M11.167 8.63525H2.16699"
32
+ stroke-width="1.33333"
33
+ stroke-linecap="round"
34
+ stroke-linejoin="round"
35
+ />
36
+ </svg>
37
+ `;
@@ -31,7 +31,8 @@ export class ButtonPill extends LitElement {
31
31
  background: var(--btn-secondary);
32
32
  }
33
33
 
34
- button ::slotted(img) {
34
+ button ::slotted(img),
35
+ button ::slotted(svg) {
35
36
  width: 0.8rem;
36
37
  height: 0.8rem;
37
38
  margin-right: 0.5rem;
@@ -36,7 +36,8 @@ export class Button extends LitElement {
36
36
  background: var(--btn-primary);
37
37
  }
38
38
 
39
- button ::slotted(img) {
39
+ button ::slotted(img),
40
+ button ::slotted(svg) {
40
41
  width: 2rem;
41
42
  height: 2rem;
42
43
  margin-right: 1rem;
@@ -15,23 +15,25 @@ export class Dialog extends LitElement {
15
15
  <div
16
16
  class="header text-bold fs-lg ${this.header ? "header-divider" : ""}"
17
17
  >
18
- <img
18
+ <div
19
19
  class="back ${this.canBack !== undefined ? "active" : ""}"
20
- src=${LEFT_SVG}
21
20
  @click=${() => {
22
21
  this.dispatchEvent(new Event("back"));
23
22
  }}
24
- />
23
+ >
24
+ ${LEFT_SVG}
25
+ </div>
25
26
  ${this.header}
26
- <img
27
+ <span
27
28
  class="close active"
28
- src=${CLOSE_SVG}
29
29
  @click=${() => {
30
30
  this.dispatchEvent(
31
31
  new Event("close", { bubbles: true, composed: true }),
32
32
  );
33
33
  }}
34
- />
34
+ >
35
+ ${CLOSE_SVG}
36
+ </span>
35
37
  </div>
36
38
  <div class="body">
37
39
  <slot></slot>
@@ -40,6 +42,9 @@ export class Dialog extends LitElement {
40
42
  }
41
43
 
42
44
  static styles = css`
45
+ .primary-icon {
46
+ color: var(--icon-primary);
47
+ }
43
48
  .text-bold {
44
49
  font-weight: bold;
45
50
  }
@@ -71,16 +76,16 @@ export class Dialog extends LitElement {
71
76
  border-bottom: 1px solid var(--divider);
72
77
  }
73
78
 
74
- .close,
75
- .back {
79
+ .close svg,
80
+ .back svg {
76
81
  width: 0.8rem;
77
82
  height: 0.8rem;
78
83
  opacity: 0;
79
84
  transition: opacity 0.15s ease-in-out;
80
85
  }
81
86
 
82
- .close.active,
83
- .back.active {
87
+ .close.active svg,
88
+ .back.active svg {
84
89
  opacity: 1;
85
90
  cursor: pointer;
86
91
  }
@@ -2,6 +2,7 @@ import { ccc } from "@ckb-ccc/ccc";
2
2
  import { LitElement, PropertyValues, css, html } from "lit";
3
3
  import { customElement, property, state } from "lit/decorators.js";
4
4
  import { Ref, createRef, ref } from "lit/directives/ref.js";
5
+ import { SelectClientEvent } from "../scenes/connected.js";
5
6
  import { ConnectedEvent } from "../scenes/selecting/index.js";
6
7
  import { SignersController } from "../signers/index.js";
7
8
 
@@ -15,6 +16,8 @@ export class WebComponentConnector extends LitElement {
15
16
  public preferredNetworks?: ccc.NetworkPreference[];
16
17
  @property()
17
18
  public signersController?: ccc.SignersController;
19
+ @state()
20
+ public clientOptions?: { icon?: string; client: ccc.Client; name: string }[];
18
21
 
19
22
  @state()
20
23
  public client: ccc.Client = new ccc.ClientPublicTestnet();
@@ -145,7 +148,10 @@ export class WebComponentConnector extends LitElement {
145
148
  <ccc-connected-scene
146
149
  .wallet=${this.wallet}
147
150
  .signer=${this.signer.signer}
151
+ .clientOptions=${this.clientOptions}
148
152
  @disconnect=${() => this.disconnect()}
153
+ @select-client=${(e: SelectClientEvent) =>
154
+ this.setClient(e.client)}
149
155
  ${ref(this.bodyRef)}
150
156
  ></ccc-connected-scene>
151
157
  `
@@ -1,10 +1,18 @@
1
1
  import { ccc } from "@ckb-ccc/ccc";
2
2
  import { css, html, LitElement, PropertyValues } from "lit";
3
3
  import { customElement, property, state } from "lit/decorators.js";
4
+ import { repeat } from "lit/directives/repeat.js";
4
5
  import { CKB_SVG } from "../assets/chains/index.js";
5
6
  import { DISCONNECT_SVG } from "../assets/diconnect.svg.js";
7
+ import { SWAP_SVG } from "../assets/swap.svg.js";
6
8
  import { signerTypeToIcon } from "./selecting/signers.js";
7
9
 
10
+ export class SelectClientEvent extends Event {
11
+ constructor(public client: ccc.Client) {
12
+ super("select-client");
13
+ }
14
+ }
15
+
8
16
  export function formatString(
9
17
  str: string | undefined,
10
18
  l = 9,
@@ -22,6 +30,8 @@ export class ConnectedScene extends LitElement {
22
30
  public wallet?: ccc.Wallet;
23
31
  @property()
24
32
  public signer?: ccc.Signer;
33
+ @property()
34
+ public clientOptions?: { icon?: string; client: ccc.Client; name: string }[];
25
35
 
26
36
  @state()
27
37
  private recommendedAddress?: string;
@@ -29,6 +39,8 @@ export class ConnectedScene extends LitElement {
29
39
  private internalAddress?: string;
30
40
  @state()
31
41
  private balance?: ccc.Num;
42
+ @state()
43
+ private selectingClient = false;
32
44
 
33
45
  willUpdate(changedProperties: PropertyValues<this>): void {
34
46
  if (
@@ -53,61 +65,89 @@ export class ConnectedScene extends LitElement {
53
65
  return html`<div></div>`;
54
66
  }
55
67
 
56
- return html`
57
- <ccc-dialog>
58
- <div class="position-relative">
59
- <img
60
- class="connecting-wallet-icon"
61
- src=${wallet.icon}
62
- alt=${wallet.name}
63
- />
64
- <img
65
- class="connected-type-icon"
66
- src=${signerTypeToIcon(signer.type)}
67
- alt=${signer.type}
68
- />
69
- </div>
70
-
71
- <ccc-copy-button
72
- value=${recommendedAddress}
73
- class="text-bold fs-xl mt-2"
74
- >
75
- ${formatString(recommendedAddress)}
76
- </ccc-copy-button>
77
- <div class="text-bold fs-md">
78
- ${ccc.fixedPointToString(balance ?? ccc.Zero)} CKB
79
- </div>
80
- <ccc-copy-button
81
- value=${internalAddress}
82
- class="text-bold text-tip fs-md"
83
- style="margin-top: 0.5rem"
84
- >
85
- ${formatString(internalAddress, 11, 9)}
86
- </ccc-copy-button>
87
-
88
- <ccc-button
89
- class="mt-2"
90
- @click=${() => this.dispatchEvent(new Event("disconnect"))}
91
- >
92
- <img src=${DISCONNECT_SVG} alt="disconnect" />
93
- Disconnect
94
- </ccc-button>
95
-
96
- <div class="switch-btn-container">
97
- <div class="switch-line"></div>
98
- <div class="switch-content ml-2 mr-2 fs-sm">
68
+ const body = (() => {
69
+ if (!this.selectingClient || !this.clientOptions) {
70
+ return html`
71
+ <div class="position-relative">
99
72
  <img
100
- class="mr-1 sm-chain-logo"
101
- src=${CKB_SVG}
102
- alt="Nervos Network"
73
+ class="connecting-wallet-icon"
74
+ src=${wallet.icon}
75
+ alt=${wallet.name}
103
76
  />
104
- ${signer.client.addressPrefix === "ckb" ? "Mainnet" : "Testnet"}
105
- ${["ckb", "ckt"].includes(signer.client.addressPrefix)
106
- ? ""
107
- : ` ${signer.client.addressPrefix}`}
77
+ <img
78
+ class="connected-type-icon"
79
+ src=${signerTypeToIcon(signer.type)}
80
+ alt=${signer.type}
81
+ />
82
+ </div>
83
+
84
+ <ccc-copy-button
85
+ value=${recommendedAddress}
86
+ class="text-bold fs-xl mt-2"
87
+ >
88
+ ${formatString(recommendedAddress)}
89
+ </ccc-copy-button>
90
+ <div class="text-bold fs-md">
91
+ ${ccc.fixedPointToString(balance ?? ccc.Zero)} CKB
108
92
  </div>
109
- <div class="switch-line"></div>
110
- </div>
93
+ <ccc-copy-button
94
+ value=${internalAddress}
95
+ class="text-bold text-tip fs-md"
96
+ style="margin-top: 0.5rem"
97
+ >
98
+ ${formatString(internalAddress, 11, 9)}
99
+ </ccc-copy-button>
100
+
101
+ <ccc-button
102
+ class="mt-2"
103
+ @click=${() => this.dispatchEvent(new Event("disconnect"))}
104
+ >
105
+ ${DISCONNECT_SVG}
106
+ Disconnect
107
+ </ccc-button>
108
+
109
+ <div
110
+ class="switch-btn-container ${this.clientOptions
111
+ ? "cursor-pointer"
112
+ : ""}"
113
+ @click=${() => (this.selectingClient = Boolean(this.clientOptions))}
114
+ >
115
+ <div class="switch-line"></div>
116
+ <div class="switch-content ml-2 mr-2 fs-sm">
117
+ <img class="sm-chain-logo" src=${CKB_SVG} alt="Nervos Network" />
118
+ ${signer.client.addressPrefix === "ckb" ? "Mainnet" : "Testnet"}
119
+ ${["ckb", "ckt"].includes(signer.client.addressPrefix)
120
+ ? ""
121
+ : ` ${signer.client.addressPrefix}`}
122
+ ${this.clientOptions ? SWAP_SVG : undefined}
123
+ </div>
124
+ <div class="switch-line"></div>
125
+ </div>
126
+ `;
127
+ }
128
+
129
+ return repeat(
130
+ this.clientOptions,
131
+ ({ name }) => name,
132
+ ({ client, name, icon }) => html`
133
+ <ccc-button
134
+ class="mt-1"
135
+ @click=${() => this.dispatchEvent(new SelectClientEvent(client))}
136
+ >
137
+ <img src=${icon ?? CKB_SVG} alt=${name} />
138
+ ${name}
139
+ </ccc-button>
140
+ `,
141
+ );
142
+ })();
143
+
144
+ return html`
145
+ <ccc-dialog
146
+ header=${this.selectingClient ? "Select Network" : undefined}
147
+ ?canBack=${this.selectingClient}
148
+ @back=${() => (this.selectingClient = false)}
149
+ >
150
+ ${body}
111
151
  </ccc-dialog>
112
152
  `;
113
153
  }
@@ -119,6 +159,14 @@ export class ConnectedScene extends LitElement {
119
159
  flex-direction: column;
120
160
  align-items: center;
121
161
  }
162
+
163
+ .primary-icon {
164
+ color: var(--icon-primary);
165
+ }
166
+ .secondary-icon {
167
+ color: var(--icon-secondary);
168
+ }
169
+
122
170
  .text-bold {
123
171
  font-weight: bold;
124
172
  }
@@ -143,6 +191,9 @@ export class ConnectedScene extends LitElement {
143
191
  .mt-2 {
144
192
  margin-top: 1rem;
145
193
  }
194
+ .ml-1 {
195
+ margin-left: 0.7em;
196
+ }
146
197
  .ml-2 {
147
198
  margin-left: 1em;
148
199
  }
@@ -180,9 +231,14 @@ export class ConnectedScene extends LitElement {
180
231
  align-items: center;
181
232
  }
182
233
 
234
+ .cursor-pointer {
235
+ cursor: pointer;
236
+ }
237
+
183
238
  .switch-content {
184
239
  display: flex;
185
240
  align-items: center;
241
+ gap: 0.7rem;
186
242
  }
187
243
 
188
244
  .switch-line {
@@ -31,7 +31,8 @@ export function generateConnectingScene(
31
31
  class="mt-2"
32
32
  @click=${() => onSignerSelected(wallet, signer)}
33
33
  >
34
- <img src=${RETRY_SVG} alt="retry" />
34
+
35
+ ${RETRY_SVG}
35
36
  Try again
36
37
  </ccc-button-pill>
37
38
  `,
@@ -122,6 +122,10 @@ export class SelectingScene extends LitElement {
122
122
  };
123
123
 
124
124
  static styles = css`
125
+ .primary-icon {
126
+ color: var(--icon-primary);
127
+ }
128
+
125
129
  :host {
126
130
  display: block;
127
131
  }