@hsuite/native-connect-angular 1.0.0 → 2.1.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 (162) hide show
  1. package/coverage/coverage-summary.json +49 -49
  2. package/coverage/index.html +122 -122
  3. package/coverage/lcov-report/index.html +122 -122
  4. package/coverage/lcov-report/lib/components/account-selector/account-actions/account-actions.component.ts.html +1 -1
  5. package/coverage/lcov-report/lib/components/account-selector/account-actions/index.html +1 -1
  6. package/coverage/lcov-report/lib/components/account-selector/account-filter/account-filter.component.ts.html +1 -1
  7. package/coverage/lcov-report/lib/components/account-selector/account-filter/index.html +1 -1
  8. package/coverage/lcov-report/lib/components/account-selector/account-formatting.service.ts.html +1 -1
  9. package/coverage/lcov-report/lib/components/account-selector/account-grouping.service.ts.html +1 -1
  10. package/coverage/lcov-report/lib/components/account-selector/account-list/account-list.component.ts.html +1 -1
  11. package/coverage/lcov-report/lib/components/account-selector/account-list/index.html +1 -1
  12. package/coverage/lcov-report/lib/components/account-selector/account-selector.component.ts.html +1 -1
  13. package/coverage/lcov-report/lib/components/account-selector/account-selector.service.ts.html +1 -1
  14. package/coverage/lcov-report/lib/components/account-selector/index.html +1 -1
  15. package/coverage/lcov-report/lib/components/wallet-account-display/index.html +1 -1
  16. package/coverage/lcov-report/lib/components/wallet-account-display/wallet-account-display.component.ts.html +1 -1
  17. package/coverage/lcov-report/lib/components/wallet-connect-button/index.html +21 -21
  18. package/coverage/lcov-report/lib/components/wallet-connect-button/wallet-connect-button.component.ts.html +475 -451
  19. package/coverage/lcov-report/lib/components/wallet-connect-prompt/index.html +1 -1
  20. package/coverage/lcov-report/lib/components/wallet-connect-prompt/wallet-connect-prompt.component.ts.html +1 -1
  21. package/coverage/lcov-report/lib/components/wallet-connected-guard/index.html +1 -1
  22. package/coverage/lcov-report/lib/components/wallet-connected-guard/wallet-connected-guard.component.ts.html +1 -1
  23. package/coverage/lcov-report/lib/components/wallet-connection-modal/connection-method-step/connection-method-step.component.ts.html +148 -148
  24. package/coverage/lcov-report/lib/components/wallet-connection-modal/connection-method-step/index.html +17 -17
  25. package/coverage/lcov-report/lib/components/wallet-connection-modal/index.html +21 -21
  26. package/coverage/lcov-report/lib/components/wallet-connection-modal/qr-pairing-step/index.html +17 -17
  27. package/coverage/lcov-report/lib/components/wallet-connection-modal/qr-pairing-step/qr-pairing-step.component.ts.html +838 -838
  28. package/coverage/lcov-report/lib/components/wallet-connection-modal/wallet-connection-modal.component.ts.html +1182 -987
  29. package/coverage/lcov-report/lib/components/wallet-session-display/index.html +1 -1
  30. package/coverage/lcov-report/lib/components/wallet-session-display/wallet-session-display.component.ts.html +1 -1
  31. package/coverage/lcov-report/lib/components/wallet-transaction-status/index.html +1 -1
  32. package/coverage/lcov-report/lib/components/wallet-transaction-status/wallet-transaction-status.component.ts.html +1 -1
  33. package/coverage/lcov-report/lib/directives/index.html +1 -1
  34. package/coverage/lcov-report/lib/directives/wallet-connected.directive.ts.html +1 -1
  35. package/coverage/lcov-report/lib/directives/wallet-context.directive.ts.html +1 -1
  36. package/coverage/lcov-report/lib/directives/wallet-events.directive.ts.html +1 -1
  37. package/coverage/lcov-report/lib/hsuite-wallet.module.ts.html +1 -1
  38. package/coverage/lcov-report/lib/index.html +1 -1
  39. package/coverage/lcov-report/lib/models/connection-config.model.ts.html +1 -1
  40. package/coverage/lcov-report/lib/models/index.html +1 -1
  41. package/coverage/lcov-report/lib/models/provider-types.ts.html +1 -1
  42. package/coverage/lcov-report/lib/providers/base-wallet-provider.ts.html +20 -20
  43. package/coverage/lcov-report/lib/providers/hsuite-native/channel-client.service.ts.html +637 -637
  44. package/coverage/lcov-report/lib/providers/hsuite-native/index.html +19 -19
  45. package/coverage/lcov-report/lib/providers/hsuite-native-provider.ts.html +1 -1
  46. package/coverage/lcov-report/lib/providers/index.html +18 -18
  47. package/coverage/lcov-report/lib/providers/p2p-native/index.html +20 -20
  48. package/coverage/lcov-report/lib/providers/p2p-native/p2p-native.provider.ts.html +993 -993
  49. package/coverage/lcov-report/lib/providers/p2p-native/p2p-session-manager.ts.html +1 -1
  50. package/coverage/lcov-report/lib/providers/wallet-error-handler.ts.html +1 -1
  51. package/coverage/lcov-report/lib/providers/walletconnect/core/index.html +65 -65
  52. package/coverage/lcov-report/lib/providers/walletconnect/core/session-health.ts.html +240 -240
  53. package/coverage/lcov-report/lib/providers/walletconnect/core/walletconnect-client-manager.ts.html +559 -559
  54. package/coverage/lcov-report/lib/providers/walletconnect/core/walletconnect-provider.ts.html +1104 -1104
  55. package/coverage/lcov-report/lib/providers/walletconnect/core/walletconnect-session-store.ts.html +493 -493
  56. package/coverage/lcov-report/lib/providers/walletconnect/core/walletconnect-signing-orchestrator.ts.html +366 -366
  57. package/coverage/lcov-report/lib/providers/walletconnect/signers/hedera-signer.ts.html +730 -730
  58. package/coverage/lcov-report/lib/providers/walletconnect/signers/index.html +43 -43
  59. package/coverage/lcov-report/lib/providers/walletconnect/signers/signer-factory.ts.html +234 -234
  60. package/coverage/lcov-report/lib/providers/walletconnect/signers/xrpl-signer.ts.html +650 -650
  61. package/coverage/lcov-report/lib/services/index.html +31 -31
  62. package/coverage/lcov-report/lib/services/logger.service.ts.html +4 -4
  63. package/coverage/lcov-report/lib/services/transaction-builders/base-transaction-builder.service.ts.html +1 -1
  64. package/coverage/lcov-report/lib/services/transaction-builders/hedera-amount-utils.ts.html +155 -155
  65. package/coverage/lcov-report/lib/services/transaction-builders/hedera-transaction-builder.service.ts.html +2156 -2156
  66. package/coverage/lcov-report/lib/services/transaction-builders/index.html +43 -43
  67. package/coverage/lcov-report/lib/services/transaction-builders/xrpl-transaction-builder.service.ts.html +1674 -1674
  68. package/coverage/lcov-report/lib/services/transaction.service.ts.html +4 -7
  69. package/coverage/lcov-report/lib/services/unified-wallet.service.ts.html +7 -10
  70. package/coverage/lcov-report/lib/services/wallet-context.service.ts.html +1 -1
  71. package/coverage/lcov-report/lib/services/wallet-event-bus.service.ts.html +249 -249
  72. package/coverage/lcov-report/lib/services/wallet-providers.service.ts.html +4 -7
  73. package/coverage/lcov-report/lib/transports/chrome-extension-transport.ts.html +1 -1
  74. package/coverage/lcov-report/lib/transports/index.html +1 -1
  75. package/coverage/lcov-report/lib/utils/index.html +1 -1
  76. package/coverage/lcov-report/lib/utils/ledger-icons.util.ts.html +1 -1
  77. package/coverage/lcov.info +14420 -14977
  78. package/coverage/lib/components/account-selector/account-actions/account-actions.component.ts.html +1 -1
  79. package/coverage/lib/components/account-selector/account-actions/index.html +1 -1
  80. package/coverage/lib/components/account-selector/account-filter/account-filter.component.ts.html +1 -1
  81. package/coverage/lib/components/account-selector/account-filter/index.html +1 -1
  82. package/coverage/lib/components/account-selector/account-formatting.service.ts.html +1 -1
  83. package/coverage/lib/components/account-selector/account-grouping.service.ts.html +1 -1
  84. package/coverage/lib/components/account-selector/account-list/account-list.component.ts.html +1 -1
  85. package/coverage/lib/components/account-selector/account-list/index.html +1 -1
  86. package/coverage/lib/components/account-selector/account-selector.component.ts.html +1 -1
  87. package/coverage/lib/components/account-selector/account-selector.service.ts.html +1 -1
  88. package/coverage/lib/components/account-selector/index.html +1 -1
  89. package/coverage/lib/components/wallet-account-display/index.html +1 -1
  90. package/coverage/lib/components/wallet-account-display/wallet-account-display.component.ts.html +1 -1
  91. package/coverage/lib/components/wallet-connect-button/index.html +21 -21
  92. package/coverage/lib/components/wallet-connect-button/wallet-connect-button.component.ts.html +475 -451
  93. package/coverage/lib/components/wallet-connect-prompt/index.html +1 -1
  94. package/coverage/lib/components/wallet-connect-prompt/wallet-connect-prompt.component.ts.html +1 -1
  95. package/coverage/lib/components/wallet-connected-guard/index.html +1 -1
  96. package/coverage/lib/components/wallet-connected-guard/wallet-connected-guard.component.ts.html +1 -1
  97. package/coverage/lib/components/wallet-connection-modal/connection-method-step/connection-method-step.component.ts.html +148 -148
  98. package/coverage/lib/components/wallet-connection-modal/connection-method-step/index.html +17 -17
  99. package/coverage/lib/components/wallet-connection-modal/index.html +21 -21
  100. package/coverage/lib/components/wallet-connection-modal/qr-pairing-step/index.html +17 -17
  101. package/coverage/lib/components/wallet-connection-modal/qr-pairing-step/qr-pairing-step.component.ts.html +838 -838
  102. package/coverage/lib/components/wallet-connection-modal/wallet-connection-modal.component.ts.html +1182 -987
  103. package/coverage/lib/components/wallet-session-display/index.html +1 -1
  104. package/coverage/lib/components/wallet-session-display/wallet-session-display.component.ts.html +1 -1
  105. package/coverage/lib/components/wallet-transaction-status/index.html +1 -1
  106. package/coverage/lib/components/wallet-transaction-status/wallet-transaction-status.component.ts.html +1 -1
  107. package/coverage/lib/directives/index.html +1 -1
  108. package/coverage/lib/directives/wallet-connected.directive.ts.html +1 -1
  109. package/coverage/lib/directives/wallet-context.directive.ts.html +1 -1
  110. package/coverage/lib/directives/wallet-events.directive.ts.html +1 -1
  111. package/coverage/lib/hsuite-wallet.module.ts.html +1 -1
  112. package/coverage/lib/index.html +1 -1
  113. package/coverage/lib/models/connection-config.model.ts.html +1 -1
  114. package/coverage/lib/models/index.html +1 -1
  115. package/coverage/lib/models/provider-types.ts.html +1 -1
  116. package/coverage/lib/providers/base-wallet-provider.ts.html +20 -20
  117. package/coverage/lib/providers/hsuite-native/channel-client.service.ts.html +637 -637
  118. package/coverage/lib/providers/hsuite-native/index.html +19 -19
  119. package/coverage/lib/providers/hsuite-native-provider.ts.html +1 -1
  120. package/coverage/lib/providers/index.html +18 -18
  121. package/coverage/lib/providers/p2p-native/index.html +20 -20
  122. package/coverage/lib/providers/p2p-native/p2p-native.provider.ts.html +993 -993
  123. package/coverage/lib/providers/p2p-native/p2p-session-manager.ts.html +1 -1
  124. package/coverage/lib/providers/wallet-error-handler.ts.html +1 -1
  125. package/coverage/lib/providers/walletconnect/core/index.html +65 -65
  126. package/coverage/lib/providers/walletconnect/core/session-health.ts.html +240 -240
  127. package/coverage/lib/providers/walletconnect/core/walletconnect-client-manager.ts.html +559 -559
  128. package/coverage/lib/providers/walletconnect/core/walletconnect-provider.ts.html +1104 -1104
  129. package/coverage/lib/providers/walletconnect/core/walletconnect-session-store.ts.html +493 -493
  130. package/coverage/lib/providers/walletconnect/core/walletconnect-signing-orchestrator.ts.html +366 -366
  131. package/coverage/lib/providers/walletconnect/signers/hedera-signer.ts.html +730 -730
  132. package/coverage/lib/providers/walletconnect/signers/index.html +43 -43
  133. package/coverage/lib/providers/walletconnect/signers/signer-factory.ts.html +234 -234
  134. package/coverage/lib/providers/walletconnect/signers/xrpl-signer.ts.html +650 -650
  135. package/coverage/lib/services/index.html +31 -31
  136. package/coverage/lib/services/logger.service.ts.html +4 -4
  137. package/coverage/lib/services/transaction-builders/base-transaction-builder.service.ts.html +1 -1
  138. package/coverage/lib/services/transaction-builders/hedera-amount-utils.ts.html +155 -155
  139. package/coverage/lib/services/transaction-builders/hedera-transaction-builder.service.ts.html +2156 -2156
  140. package/coverage/lib/services/transaction-builders/index.html +43 -43
  141. package/coverage/lib/services/transaction-builders/xrpl-transaction-builder.service.ts.html +1674 -1674
  142. package/coverage/lib/services/transaction.service.ts.html +4 -7
  143. package/coverage/lib/services/unified-wallet.service.ts.html +7 -10
  144. package/coverage/lib/services/wallet-context.service.ts.html +1 -1
  145. package/coverage/lib/services/wallet-event-bus.service.ts.html +249 -249
  146. package/coverage/lib/services/wallet-providers.service.ts.html +4 -7
  147. package/coverage/lib/transports/chrome-extension-transport.ts.html +1 -1
  148. package/coverage/lib/transports/index.html +1 -1
  149. package/coverage/lib/utils/index.html +1 -1
  150. package/coverage/lib/utils/ledger-icons.util.ts.html +1 -1
  151. package/dist/fesm2022/hsuite-native-connect-angular.mjs +85 -20
  152. package/dist/fesm2022/hsuite-native-connect-angular.mjs.map +1 -1
  153. package/dist/index.d.ts +33 -3
  154. package/package.json +4 -4
  155. package/src/lib/components/wallet-connect-button/wallet-connect-button.component.spec.ts +89 -0
  156. package/src/lib/components/wallet-connect-button/wallet-connect-button.component.ts +8 -0
  157. package/src/lib/components/wallet-connection-modal/wallet-connection-modal.component.html +1 -6
  158. package/src/lib/components/wallet-connection-modal/wallet-connection-modal.component.spec.ts +173 -0
  159. package/src/lib/components/wallet-connection-modal/wallet-connection-modal.component.ts +84 -19
  160. package/src/lib/services/transaction.service.ts +0 -1
  161. package/src/lib/services/unified-wallet.service.ts +0 -1
  162. package/src/lib/services/wallet-providers.service.ts +0 -1
@@ -23,30 +23,30 @@
23
23
  <div class='clearfix'>
24
24
 
25
25
  <div class='fl pad1y space-right2'>
26
- <span class="strong">0% </span>
26
+ <span class="strong">68.55% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>0/730</span>
28
+ <span class='fraction'>545/795</span>
29
29
  </div>
30
30
 
31
31
 
32
32
  <div class='fl pad1y space-right2'>
33
- <span class="strong">0% </span>
33
+ <span class="strong">45.23% </span>
34
34
  <span class="quiet">Branches</span>
35
- <span class='fraction'>0/1</span>
35
+ <span class='fraction'>19/42</span>
36
36
  </div>
37
37
 
38
38
 
39
39
  <div class='fl pad1y space-right2'>
40
- <span class="strong">0% </span>
40
+ <span class="strong">54.54% </span>
41
41
  <span class="quiet">Functions</span>
42
- <span class='fraction'>0/1</span>
42
+ <span class='fraction'>12/22</span>
43
43
  </div>
44
44
 
45
45
 
46
46
  <div class='fl pad1y space-right2'>
47
- <span class="strong">0% </span>
47
+ <span class="strong">68.55% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>0/730</span>
49
+ <span class='fraction'>545/795</span>
50
50
  </div>
51
51
 
52
52
 
@@ -61,7 +61,7 @@
61
61
  </div>
62
62
  </template>
63
63
  </div>
64
- <div class='status-line low'></div>
64
+ <div class='status-line medium'></div>
65
65
  <pre><table class="coverage">
66
66
  <tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a>
67
67
  <a name='L2'></a><a href='#L2'>2</a>
@@ -793,7 +793,286 @@
793
793
  <a name='L728'></a><a href='#L728'>728</a>
794
794
  <a name='L729'></a><a href='#L729'>729</a>
795
795
  <a name='L730'></a><a href='#L730'>730</a>
796
- <a name='L731'></a><a href='#L731'>731</a></td><td class="line-coverage quiet"><span class="cline-any cline-no">&nbsp;</span>
796
+ <a name='L731'></a><a href='#L731'>731</a>
797
+ <a name='L732'></a><a href='#L732'>732</a>
798
+ <a name='L733'></a><a href='#L733'>733</a>
799
+ <a name='L734'></a><a href='#L734'>734</a>
800
+ <a name='L735'></a><a href='#L735'>735</a>
801
+ <a name='L736'></a><a href='#L736'>736</a>
802
+ <a name='L737'></a><a href='#L737'>737</a>
803
+ <a name='L738'></a><a href='#L738'>738</a>
804
+ <a name='L739'></a><a href='#L739'>739</a>
805
+ <a name='L740'></a><a href='#L740'>740</a>
806
+ <a name='L741'></a><a href='#L741'>741</a>
807
+ <a name='L742'></a><a href='#L742'>742</a>
808
+ <a name='L743'></a><a href='#L743'>743</a>
809
+ <a name='L744'></a><a href='#L744'>744</a>
810
+ <a name='L745'></a><a href='#L745'>745</a>
811
+ <a name='L746'></a><a href='#L746'>746</a>
812
+ <a name='L747'></a><a href='#L747'>747</a>
813
+ <a name='L748'></a><a href='#L748'>748</a>
814
+ <a name='L749'></a><a href='#L749'>749</a>
815
+ <a name='L750'></a><a href='#L750'>750</a>
816
+ <a name='L751'></a><a href='#L751'>751</a>
817
+ <a name='L752'></a><a href='#L752'>752</a>
818
+ <a name='L753'></a><a href='#L753'>753</a>
819
+ <a name='L754'></a><a href='#L754'>754</a>
820
+ <a name='L755'></a><a href='#L755'>755</a>
821
+ <a name='L756'></a><a href='#L756'>756</a>
822
+ <a name='L757'></a><a href='#L757'>757</a>
823
+ <a name='L758'></a><a href='#L758'>758</a>
824
+ <a name='L759'></a><a href='#L759'>759</a>
825
+ <a name='L760'></a><a href='#L760'>760</a>
826
+ <a name='L761'></a><a href='#L761'>761</a>
827
+ <a name='L762'></a><a href='#L762'>762</a>
828
+ <a name='L763'></a><a href='#L763'>763</a>
829
+ <a name='L764'></a><a href='#L764'>764</a>
830
+ <a name='L765'></a><a href='#L765'>765</a>
831
+ <a name='L766'></a><a href='#L766'>766</a>
832
+ <a name='L767'></a><a href='#L767'>767</a>
833
+ <a name='L768'></a><a href='#L768'>768</a>
834
+ <a name='L769'></a><a href='#L769'>769</a>
835
+ <a name='L770'></a><a href='#L770'>770</a>
836
+ <a name='L771'></a><a href='#L771'>771</a>
837
+ <a name='L772'></a><a href='#L772'>772</a>
838
+ <a name='L773'></a><a href='#L773'>773</a>
839
+ <a name='L774'></a><a href='#L774'>774</a>
840
+ <a name='L775'></a><a href='#L775'>775</a>
841
+ <a name='L776'></a><a href='#L776'>776</a>
842
+ <a name='L777'></a><a href='#L777'>777</a>
843
+ <a name='L778'></a><a href='#L778'>778</a>
844
+ <a name='L779'></a><a href='#L779'>779</a>
845
+ <a name='L780'></a><a href='#L780'>780</a>
846
+ <a name='L781'></a><a href='#L781'>781</a>
847
+ <a name='L782'></a><a href='#L782'>782</a>
848
+ <a name='L783'></a><a href='#L783'>783</a>
849
+ <a name='L784'></a><a href='#L784'>784</a>
850
+ <a name='L785'></a><a href='#L785'>785</a>
851
+ <a name='L786'></a><a href='#L786'>786</a>
852
+ <a name='L787'></a><a href='#L787'>787</a>
853
+ <a name='L788'></a><a href='#L788'>788</a>
854
+ <a name='L789'></a><a href='#L789'>789</a>
855
+ <a name='L790'></a><a href='#L790'>790</a>
856
+ <a name='L791'></a><a href='#L791'>791</a>
857
+ <a name='L792'></a><a href='#L792'>792</a>
858
+ <a name='L793'></a><a href='#L793'>793</a>
859
+ <a name='L794'></a><a href='#L794'>794</a>
860
+ <a name='L795'></a><a href='#L795'>795</a>
861
+ <a name='L796'></a><a href='#L796'>796</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">1x</span>
862
+ <span class="cline-any cline-yes">1x</span>
863
+ <span class="cline-any cline-yes">1x</span>
864
+ <span class="cline-any cline-yes">1x</span>
865
+ <span class="cline-any cline-yes">1x</span>
866
+ <span class="cline-any cline-yes">1x</span>
867
+ <span class="cline-any cline-yes">1x</span>
868
+ <span class="cline-any cline-yes">1x</span>
869
+ <span class="cline-any cline-yes">1x</span>
870
+ <span class="cline-any cline-yes">1x</span>
871
+ <span class="cline-any cline-yes">1x</span>
872
+ <span class="cline-any cline-yes">1x</span>
873
+ <span class="cline-any cline-yes">1x</span>
874
+ <span class="cline-any cline-yes">1x</span>
875
+ <span class="cline-any cline-yes">1x</span>
876
+ <span class="cline-any cline-yes">1x</span>
877
+ <span class="cline-any cline-yes">1x</span>
878
+ <span class="cline-any cline-yes">1x</span>
879
+ <span class="cline-any cline-yes">1x</span>
880
+ <span class="cline-any cline-yes">1x</span>
881
+ <span class="cline-any cline-yes">1x</span>
882
+ <span class="cline-any cline-yes">1x</span>
883
+ <span class="cline-any cline-yes">1x</span>
884
+ <span class="cline-any cline-yes">1x</span>
885
+ <span class="cline-any cline-yes">1x</span>
886
+ <span class="cline-any cline-yes">1x</span>
887
+ <span class="cline-any cline-yes">1x</span>
888
+ <span class="cline-any cline-yes">1x</span>
889
+ <span class="cline-any cline-yes">1x</span>
890
+ <span class="cline-any cline-yes">1x</span>
891
+ <span class="cline-any cline-yes">1x</span>
892
+ <span class="cline-any cline-yes">1x</span>
893
+ <span class="cline-any cline-yes">1x</span>
894
+ <span class="cline-any cline-yes">1x</span>
895
+ <span class="cline-any cline-yes">1x</span>
896
+ <span class="cline-any cline-yes">1x</span>
897
+ <span class="cline-any cline-yes">1x</span>
898
+ <span class="cline-any cline-yes">1x</span>
899
+ <span class="cline-any cline-yes">1x</span>
900
+ <span class="cline-any cline-yes">1x</span>
901
+ <span class="cline-any cline-yes">1x</span>
902
+ <span class="cline-any cline-yes">1x</span>
903
+ <span class="cline-any cline-yes">1x</span>
904
+ <span class="cline-any cline-yes">1x</span>
905
+ <span class="cline-any cline-yes">1x</span>
906
+ <span class="cline-any cline-yes">1x</span>
907
+ <span class="cline-any cline-yes">1x</span>
908
+ <span class="cline-any cline-yes">1x</span>
909
+ <span class="cline-any cline-yes">1x</span>
910
+ <span class="cline-any cline-yes">1x</span>
911
+ <span class="cline-any cline-yes">1x</span>
912
+ <span class="cline-any cline-yes">1x</span>
913
+ <span class="cline-any cline-yes">1x</span>
914
+ <span class="cline-any cline-yes">2x</span>
915
+ <span class="cline-any cline-yes">1x</span>
916
+ <span class="cline-any cline-yes">1x</span>
917
+ <span class="cline-any cline-yes">1x</span>
918
+ <span class="cline-any cline-yes">1x</span>
919
+ <span class="cline-any cline-yes">1x</span>
920
+ <span class="cline-any cline-yes">1x</span>
921
+ <span class="cline-any cline-yes">1x</span>
922
+ <span class="cline-any cline-yes">1x</span>
923
+ <span class="cline-any cline-yes">1x</span>
924
+ <span class="cline-any cline-yes">1x</span>
925
+ <span class="cline-any cline-yes">1x</span>
926
+ <span class="cline-any cline-yes">1x</span>
927
+ <span class="cline-any cline-yes">1x</span>
928
+ <span class="cline-any cline-yes">1x</span>
929
+ <span class="cline-any cline-yes">1x</span>
930
+ <span class="cline-any cline-yes">1x</span>
931
+ <span class="cline-any cline-yes">1x</span>
932
+ <span class="cline-any cline-yes">1x</span>
933
+ <span class="cline-any cline-yes">1x</span>
934
+ <span class="cline-any cline-yes">1x</span>
935
+ <span class="cline-any cline-yes">1x</span>
936
+ <span class="cline-any cline-yes">1x</span>
937
+ <span class="cline-any cline-yes">1x</span>
938
+ <span class="cline-any cline-yes">1x</span>
939
+ <span class="cline-any cline-yes">1x</span>
940
+ <span class="cline-any cline-yes">1x</span>
941
+ <span class="cline-any cline-yes">1x</span>
942
+ <span class="cline-any cline-yes">1x</span>
943
+ <span class="cline-any cline-yes">1x</span>
944
+ <span class="cline-any cline-yes">1x</span>
945
+ <span class="cline-any cline-yes">1x</span>
946
+ <span class="cline-any cline-yes">1x</span>
947
+ <span class="cline-any cline-yes">1x</span>
948
+ <span class="cline-any cline-yes">1x</span>
949
+ <span class="cline-any cline-yes">1x</span>
950
+ <span class="cline-any cline-yes">1x</span>
951
+ <span class="cline-any cline-yes">1x</span>
952
+ <span class="cline-any cline-yes">1x</span>
953
+ <span class="cline-any cline-yes">1x</span>
954
+ <span class="cline-any cline-yes">1x</span>
955
+ <span class="cline-any cline-yes">1x</span>
956
+ <span class="cline-any cline-yes">1x</span>
957
+ <span class="cline-any cline-yes">1x</span>
958
+ <span class="cline-any cline-yes">1x</span>
959
+ <span class="cline-any cline-yes">1x</span>
960
+ <span class="cline-any cline-yes">1x</span>
961
+ <span class="cline-any cline-yes">1x</span>
962
+ <span class="cline-any cline-yes">1x</span>
963
+ <span class="cline-any cline-yes">1x</span>
964
+ <span class="cline-any cline-yes">1x</span>
965
+ <span class="cline-any cline-yes">1x</span>
966
+ <span class="cline-any cline-yes">1x</span>
967
+ <span class="cline-any cline-yes">1x</span>
968
+ <span class="cline-any cline-yes">1x</span>
969
+ <span class="cline-any cline-yes">1x</span>
970
+ <span class="cline-any cline-yes">1x</span>
971
+ <span class="cline-any cline-yes">1x</span>
972
+ <span class="cline-any cline-yes">1x</span>
973
+ <span class="cline-any cline-yes">1x</span>
974
+ <span class="cline-any cline-yes">1x</span>
975
+ <span class="cline-any cline-yes">1x</span>
976
+ <span class="cline-any cline-yes">1x</span>
977
+ <span class="cline-any cline-yes">1x</span>
978
+ <span class="cline-any cline-yes">1x</span>
979
+ <span class="cline-any cline-yes">1x</span>
980
+ <span class="cline-any cline-yes">1x</span>
981
+ <span class="cline-any cline-yes">1x</span>
982
+ <span class="cline-any cline-yes">1x</span>
983
+ <span class="cline-any cline-yes">1x</span>
984
+ <span class="cline-any cline-yes">1x</span>
985
+ <span class="cline-any cline-yes">10x</span>
986
+ <span class="cline-any cline-yes">10x</span>
987
+ <span class="cline-any cline-yes">10x</span>
988
+ <span class="cline-any cline-yes">10x</span>
989
+ <span class="cline-any cline-yes">10x</span>
990
+ <span class="cline-any cline-yes">10x</span>
991
+ <span class="cline-any cline-yes">10x</span>
992
+ <span class="cline-any cline-yes">10x</span>
993
+ <span class="cline-any cline-yes">10x</span>
994
+ <span class="cline-any cline-yes">10x</span>
995
+ <span class="cline-any cline-yes">10x</span>
996
+ <span class="cline-any cline-yes">10x</span>
997
+ <span class="cline-any cline-yes">10x</span>
998
+ <span class="cline-any cline-yes">10x</span>
999
+ <span class="cline-any cline-yes">10x</span>
1000
+ <span class="cline-any cline-yes">10x</span>
1001
+ <span class="cline-any cline-yes">10x</span>
1002
+ <span class="cline-any cline-yes">10x</span>
1003
+ <span class="cline-any cline-yes">10x</span>
1004
+ <span class="cline-any cline-yes">10x</span>
1005
+ <span class="cline-any cline-yes">10x</span>
1006
+ <span class="cline-any cline-yes">10x</span>
1007
+ <span class="cline-any cline-yes">10x</span>
1008
+ <span class="cline-any cline-yes">10x</span>
1009
+ <span class="cline-any cline-yes">10x</span>
1010
+ <span class="cline-any cline-yes">10x</span>
1011
+ <span class="cline-any cline-yes">10x</span>
1012
+ <span class="cline-any cline-yes">10x</span>
1013
+ <span class="cline-any cline-yes">10x</span>
1014
+ <span class="cline-any cline-yes">10x</span>
1015
+ <span class="cline-any cline-yes">10x</span>
1016
+ <span class="cline-any cline-yes">10x</span>
1017
+ <span class="cline-any cline-yes">10x</span>
1018
+ <span class="cline-any cline-yes">10x</span>
1019
+ <span class="cline-any cline-yes">10x</span>
1020
+ <span class="cline-any cline-yes">10x</span>
1021
+ <span class="cline-any cline-yes">10x</span>
1022
+ <span class="cline-any cline-yes">10x</span>
1023
+ <span class="cline-any cline-yes">10x</span>
1024
+ <span class="cline-any cline-yes">10x</span>
1025
+ <span class="cline-any cline-yes">10x</span>
1026
+ <span class="cline-any cline-yes">10x</span>
1027
+ <span class="cline-any cline-yes">10x</span>
1028
+ <span class="cline-any cline-yes">10x</span>
1029
+ <span class="cline-any cline-yes">10x</span>
1030
+ <span class="cline-any cline-yes">10x</span>
1031
+ <span class="cline-any cline-yes">10x</span>
1032
+ <span class="cline-any cline-yes">10x</span>
1033
+ <span class="cline-any cline-yes">10x</span>
1034
+ <span class="cline-any cline-yes">10x</span>
1035
+ <span class="cline-any cline-yes">10x</span>
1036
+ <span class="cline-any cline-yes">10x</span>
1037
+ <span class="cline-any cline-yes">10x</span>
1038
+ <span class="cline-any cline-yes">10x</span>
1039
+ <span class="cline-any cline-yes">10x</span>
1040
+ <span class="cline-any cline-yes">10x</span>
1041
+ <span class="cline-any cline-yes">10x</span>
1042
+ <span class="cline-any cline-yes">10x</span>
1043
+ <span class="cline-any cline-yes">10x</span>
1044
+ <span class="cline-any cline-yes">10x</span>
1045
+ <span class="cline-any cline-yes">10x</span>
1046
+ <span class="cline-any cline-yes">10x</span>
1047
+ <span class="cline-any cline-yes">10x</span>
1048
+ <span class="cline-any cline-yes">10x</span>
1049
+ <span class="cline-any cline-yes">10x</span>
1050
+ <span class="cline-any cline-yes">10x</span>
1051
+ <span class="cline-any cline-yes">10x</span>
1052
+ <span class="cline-any cline-yes">10x</span>
1053
+ <span class="cline-any cline-yes">10x</span>
1054
+ <span class="cline-any cline-yes">10x</span>
1055
+ <span class="cline-any cline-yes">10x</span>
1056
+ <span class="cline-any cline-yes">10x</span>
1057
+ <span class="cline-any cline-yes">10x</span>
1058
+ <span class="cline-any cline-yes">10x</span>
1059
+ <span class="cline-any cline-yes">10x</span>
1060
+ <span class="cline-any cline-yes">10x</span>
1061
+ <span class="cline-any cline-yes">10x</span>
1062
+ <span class="cline-any cline-yes">10x</span>
1063
+ <span class="cline-any cline-yes">10x</span>
1064
+ <span class="cline-any cline-yes">10x</span>
1065
+ <span class="cline-any cline-yes">10x</span>
1066
+ <span class="cline-any cline-yes">10x</span>
1067
+ <span class="cline-any cline-yes">10x</span>
1068
+ <span class="cline-any cline-yes">10x</span>
1069
+ <span class="cline-any cline-yes">10x</span>
1070
+ <span class="cline-any cline-yes">10x</span>
1071
+ <span class="cline-any cline-yes">10x</span>
1072
+ <span class="cline-any cline-yes">10x</span>
1073
+ <span class="cline-any cline-yes">10x</span>
1074
+ <span class="cline-any cline-yes">10x</span>
1075
+ <span class="cline-any cline-yes">10x</span>
797
1076
  <span class="cline-any cline-no">&nbsp;</span>
798
1077
  <span class="cline-any cline-no">&nbsp;</span>
799
1078
  <span class="cline-any cline-no">&nbsp;</span>
@@ -826,6 +1105,30 @@
826
1105
  <span class="cline-any cline-no">&nbsp;</span>
827
1106
  <span class="cline-any cline-no">&nbsp;</span>
828
1107
  <span class="cline-any cline-no">&nbsp;</span>
1108
+ <span class="cline-any cline-yes">10x</span>
1109
+ <span class="cline-any cline-yes">10x</span>
1110
+ <span class="cline-any cline-yes">10x</span>
1111
+ <span class="cline-any cline-yes">10x</span>
1112
+ <span class="cline-any cline-yes">10x</span>
1113
+ <span class="cline-any cline-yes">10x</span>
1114
+ <span class="cline-any cline-yes">10x</span>
1115
+ <span class="cline-any cline-yes">10x</span>
1116
+ <span class="cline-any cline-yes">10x</span>
1117
+ <span class="cline-any cline-yes">10x</span>
1118
+ <span class="cline-any cline-yes">10x</span>
1119
+ <span class="cline-any cline-yes">10x</span>
1120
+ <span class="cline-any cline-yes">10x</span>
1121
+ <span class="cline-any cline-yes">10x</span>
1122
+ <span class="cline-any cline-yes">10x</span>
1123
+ <span class="cline-any cline-yes">10x</span>
1124
+ <span class="cline-any cline-yes">10x</span>
1125
+ <span class="cline-any cline-yes">10x</span>
1126
+ <span class="cline-any cline-yes">10x</span>
1127
+ <span class="cline-any cline-yes">10x</span>
1128
+ <span class="cline-any cline-yes">10x</span>
1129
+ <span class="cline-any cline-yes">10x</span>
1130
+ <span class="cline-any cline-yes">10x</span>
1131
+ <span class="cline-any cline-yes">10x</span>
829
1132
  <span class="cline-any cline-no">&nbsp;</span>
830
1133
  <span class="cline-any cline-no">&nbsp;</span>
831
1134
  <span class="cline-any cline-no">&nbsp;</span>
@@ -848,6 +1151,10 @@
848
1151
  <span class="cline-any cline-no">&nbsp;</span>
849
1152
  <span class="cline-any cline-no">&nbsp;</span>
850
1153
  <span class="cline-any cline-no">&nbsp;</span>
1154
+ <span class="cline-any cline-yes">10x</span>
1155
+ <span class="cline-any cline-yes">10x</span>
1156
+ <span class="cline-any cline-yes">10x</span>
1157
+ <span class="cline-any cline-yes">10x</span>
851
1158
  <span class="cline-any cline-no">&nbsp;</span>
852
1159
  <span class="cline-any cline-no">&nbsp;</span>
853
1160
  <span class="cline-any cline-no">&nbsp;</span>
@@ -861,6 +1168,9 @@
861
1168
  <span class="cline-any cline-no">&nbsp;</span>
862
1169
  <span class="cline-any cline-no">&nbsp;</span>
863
1170
  <span class="cline-any cline-no">&nbsp;</span>
1171
+ <span class="cline-any cline-yes">10x</span>
1172
+ <span class="cline-any cline-yes">10x</span>
1173
+ <span class="cline-any cline-yes">10x</span>
864
1174
  <span class="cline-any cline-no">&nbsp;</span>
865
1175
  <span class="cline-any cline-no">&nbsp;</span>
866
1176
  <span class="cline-any cline-no">&nbsp;</span>
@@ -878,33 +1188,220 @@
878
1188
  <span class="cline-any cline-no">&nbsp;</span>
879
1189
  <span class="cline-any cline-no">&nbsp;</span>
880
1190
  <span class="cline-any cline-no">&nbsp;</span>
1191
+ <span class="cline-any cline-yes">10x</span>
1192
+ <span class="cline-any cline-yes">10x</span>
1193
+ <span class="cline-any cline-yes">10x</span>
1194
+ <span class="cline-any cline-yes">10x</span>
1195
+ <span class="cline-any cline-yes">10x</span>
1196
+ <span class="cline-any cline-yes">10x</span>
1197
+ <span class="cline-any cline-yes">10x</span>
1198
+ <span class="cline-any cline-yes">10x</span>
1199
+ <span class="cline-any cline-yes">10x</span>
1200
+ <span class="cline-any cline-yes">10x</span>
1201
+ <span class="cline-any cline-yes">10x</span>
1202
+ <span class="cline-any cline-yes">10x</span>
1203
+ <span class="cline-any cline-yes">10x</span>
1204
+ <span class="cline-any cline-yes">2x</span>
1205
+ <span class="cline-any cline-yes">2x</span>
1206
+ <span class="cline-any cline-yes">2x</span>
1207
+ <span class="cline-any cline-yes">2x</span>
1208
+ <span class="cline-any cline-yes">2x</span>
1209
+ <span class="cline-any cline-yes">2x</span>
1210
+ <span class="cline-any cline-yes">2x</span>
881
1211
  <span class="cline-any cline-no">&nbsp;</span>
1212
+ <span class="cline-any cline-yes">2x</span>
1213
+ <span class="cline-any cline-yes">2x</span>
1214
+ <span class="cline-any cline-yes">2x</span>
1215
+ <span class="cline-any cline-yes">2x</span>
882
1216
  <span class="cline-any cline-no">&nbsp;</span>
883
1217
  <span class="cline-any cline-no">&nbsp;</span>
1218
+ <span class="cline-any cline-yes">2x</span>
1219
+ <span class="cline-any cline-yes">2x</span>
1220
+ <span class="cline-any cline-yes">2x</span>
884
1221
  <span class="cline-any cline-no">&nbsp;</span>
885
1222
  <span class="cline-any cline-no">&nbsp;</span>
886
1223
  <span class="cline-any cline-no">&nbsp;</span>
1224
+ <span class="cline-any cline-yes">2x</span>
1225
+ <span class="cline-any cline-yes">2x</span>
1226
+ <span class="cline-any cline-yes">2x</span>
1227
+ <span class="cline-any cline-yes">2x</span>
1228
+ <span class="cline-any cline-yes">1x</span>
1229
+ <span class="cline-any cline-yes">1x</span>
1230
+ <span class="cline-any cline-yes">1x</span>
1231
+ <span class="cline-any cline-yes">10x</span>
1232
+ <span class="cline-any cline-yes">10x</span>
1233
+ <span class="cline-any cline-yes">10x</span>
1234
+ <span class="cline-any cline-yes">10x</span>
1235
+ <span class="cline-any cline-yes">10x</span>
1236
+ <span class="cline-any cline-yes">10x</span>
1237
+ <span class="cline-any cline-yes">10x</span>
1238
+ <span class="cline-any cline-yes">1x</span>
1239
+ <span class="cline-any cline-yes">1x</span>
1240
+ <span class="cline-any cline-yes">1x</span>
1241
+ <span class="cline-any cline-yes">1x</span>
1242
+ <span class="cline-any cline-yes">1x</span>
1243
+ <span class="cline-any cline-yes">1x</span>
1244
+ <span class="cline-any cline-yes">1x</span>
1245
+ <span class="cline-any cline-yes">1x</span>
1246
+ <span class="cline-any cline-yes">1x</span>
1247
+ <span class="cline-any cline-yes">1x</span>
1248
+ <span class="cline-any cline-yes">1x</span>
887
1249
  <span class="cline-any cline-no">&nbsp;</span>
1250
+ <span class="cline-any cline-yes">1x</span>
1251
+ <span class="cline-any cline-yes">1x</span>
1252
+ <span class="cline-any cline-yes">1x</span>
888
1253
  <span class="cline-any cline-no">&nbsp;</span>
1254
+ <span class="cline-any cline-yes">1x</span>
889
1255
  <span class="cline-any cline-no">&nbsp;</span>
890
1256
  <span class="cline-any cline-no">&nbsp;</span>
1257
+ <span class="cline-any cline-yes">1x</span>
891
1258
  <span class="cline-any cline-no">&nbsp;</span>
892
1259
  <span class="cline-any cline-no">&nbsp;</span>
1260
+ <span class="cline-any cline-yes">1x</span>
893
1261
  <span class="cline-any cline-no">&nbsp;</span>
894
1262
  <span class="cline-any cline-no">&nbsp;</span>
1263
+ <span class="cline-any cline-yes">1x</span>
1264
+ <span class="cline-any cline-no">&nbsp;</span>
1265
+ <span class="cline-any cline-yes">1x</span>
1266
+ <span class="cline-any cline-yes">10x</span>
1267
+ <span class="cline-any cline-yes">10x</span>
1268
+ <span class="cline-any cline-yes">10x</span>
1269
+ <span class="cline-any cline-yes">10x</span>
1270
+ <span class="cline-any cline-yes">10x</span>
1271
+ <span class="cline-any cline-yes">10x</span>
1272
+ <span class="cline-any cline-yes">10x</span>
1273
+ <span class="cline-any cline-yes">10x</span>
1274
+ <span class="cline-any cline-yes">10x</span>
1275
+ <span class="cline-any cline-yes">1x</span>
1276
+ <span class="cline-any cline-yes">1x</span>
1277
+ <span class="cline-any cline-no">&nbsp;</span>
1278
+ <span class="cline-any cline-no">&nbsp;</span>
1279
+ <span class="cline-any cline-yes">1x</span>
1280
+ <span class="cline-any cline-yes">1x</span>
1281
+ <span class="cline-any cline-no">&nbsp;</span>
1282
+ <span class="cline-any cline-yes">1x</span>
1283
+ <span class="cline-any cline-yes">10x</span>
1284
+ <span class="cline-any cline-yes">10x</span>
1285
+ <span class="cline-any cline-yes">10x</span>
1286
+ <span class="cline-any cline-yes">10x</span>
1287
+ <span class="cline-any cline-yes">10x</span>
1288
+ <span class="cline-any cline-yes">10x</span>
1289
+ <span class="cline-any cline-yes">10x</span>
1290
+ <span class="cline-any cline-yes">10x</span>
1291
+ <span class="cline-any cline-yes">10x</span>
1292
+ <span class="cline-any cline-yes">10x</span>
1293
+ <span class="cline-any cline-yes">10x</span>
1294
+ <span class="cline-any cline-yes">10x</span>
1295
+ <span class="cline-any cline-yes">10x</span>
1296
+ <span class="cline-any cline-no">&nbsp;</span>
1297
+ <span class="cline-any cline-yes">10x</span>
1298
+ <span class="cline-any cline-yes">10x</span>
1299
+ <span class="cline-any cline-yes">10x</span>
1300
+ <span class="cline-any cline-yes">10x</span>
1301
+ <span class="cline-any cline-yes">10x</span>
1302
+ <span class="cline-any cline-yes">10x</span>
1303
+ <span class="cline-any cline-yes">10x</span>
1304
+ <span class="cline-any cline-yes">10x</span>
1305
+ <span class="cline-any cline-yes">10x</span>
1306
+ <span class="cline-any cline-yes">10x</span>
1307
+ <span class="cline-any cline-yes">10x</span>
1308
+ <span class="cline-any cline-yes">10x</span>
1309
+ <span class="cline-any cline-yes">7x</span>
1310
+ <span class="cline-any cline-yes">7x</span>
1311
+ <span class="cline-any cline-yes">7x</span>
1312
+ <span class="cline-any cline-yes">10x</span>
1313
+ <span class="cline-any cline-yes">10x</span>
1314
+ <span class="cline-any cline-yes">10x</span>
1315
+ <span class="cline-any cline-yes">10x</span>
1316
+ <span class="cline-any cline-yes">10x</span>
1317
+ <span class="cline-any cline-yes">10x</span>
1318
+ <span class="cline-any cline-yes">10x</span>
1319
+ <span class="cline-any cline-no">&nbsp;</span>
1320
+ <span class="cline-any cline-no">&nbsp;</span>
1321
+ <span class="cline-any cline-yes">10x</span>
1322
+ <span class="cline-any cline-yes">10x</span>
1323
+ <span class="cline-any cline-yes">10x</span>
1324
+ <span class="cline-any cline-yes">10x</span>
1325
+ <span class="cline-any cline-yes">10x</span>
1326
+ <span class="cline-any cline-yes">10x</span>
1327
+ <span class="cline-any cline-yes">10x</span>
1328
+ <span class="cline-any cline-yes">1x</span>
1329
+ <span class="cline-any cline-yes">1x</span>
1330
+ <span class="cline-any cline-yes">1x</span>
1331
+ <span class="cline-any cline-yes">1x</span>
1332
+ <span class="cline-any cline-yes">10x</span>
1333
+ <span class="cline-any cline-yes">10x</span>
1334
+ <span class="cline-any cline-yes">10x</span>
1335
+ <span class="cline-any cline-yes">10x</span>
1336
+ <span class="cline-any cline-yes">10x</span>
1337
+ <span class="cline-any cline-yes">10x</span>
1338
+ <span class="cline-any cline-yes">2x</span>
1339
+ <span class="cline-any cline-yes">2x</span>
1340
+ <span class="cline-any cline-yes">10x</span>
1341
+ <span class="cline-any cline-yes">10x</span>
1342
+ <span class="cline-any cline-yes">10x</span>
1343
+ <span class="cline-any cline-yes">10x</span>
1344
+ <span class="cline-any cline-yes">10x</span>
1345
+ <span class="cline-any cline-yes">10x</span>
1346
+ <span class="cline-any cline-yes">10x</span>
1347
+ <span class="cline-any cline-yes">10x</span>
1348
+ <span class="cline-any cline-yes">1x</span>
1349
+ <span class="cline-any cline-yes">1x</span>
1350
+ <span class="cline-any cline-yes">1x</span>
1351
+ <span class="cline-any cline-yes">1x</span>
1352
+ <span class="cline-any cline-yes">1x</span>
1353
+ <span class="cline-any cline-yes">1x</span>
895
1354
  <span class="cline-any cline-no">&nbsp;</span>
896
1355
  <span class="cline-any cline-no">&nbsp;</span>
897
1356
  <span class="cline-any cline-no">&nbsp;</span>
1357
+ <span class="cline-any cline-yes">1x</span>
1358
+ <span class="cline-any cline-yes">10x</span>
1359
+ <span class="cline-any cline-yes">10x</span>
1360
+ <span class="cline-any cline-yes">10x</span>
1361
+ <span class="cline-any cline-yes">10x</span>
1362
+ <span class="cline-any cline-yes">10x</span>
1363
+ <span class="cline-any cline-yes">10x</span>
1364
+ <span class="cline-any cline-yes">3x</span>
1365
+ <span class="cline-any cline-yes">3x</span>
1366
+ <span class="cline-any cline-yes">10x</span>
1367
+ <span class="cline-any cline-yes">10x</span>
1368
+ <span class="cline-any cline-yes">10x</span>
1369
+ <span class="cline-any cline-yes">10x</span>
1370
+ <span class="cline-any cline-yes">10x</span>
1371
+ <span class="cline-any cline-yes">10x</span>
1372
+ <span class="cline-any cline-yes">10x</span>
898
1373
  <span class="cline-any cline-no">&nbsp;</span>
899
1374
  <span class="cline-any cline-no">&nbsp;</span>
900
1375
  <span class="cline-any cline-no">&nbsp;</span>
1376
+ <span class="cline-any cline-yes">10x</span>
1377
+ <span class="cline-any cline-yes">10x</span>
1378
+ <span class="cline-any cline-yes">10x</span>
1379
+ <span class="cline-any cline-yes">10x</span>
1380
+ <span class="cline-any cline-yes">10x</span>
1381
+ <span class="cline-any cline-yes">10x</span>
901
1382
  <span class="cline-any cline-no">&nbsp;</span>
902
1383
  <span class="cline-any cline-no">&nbsp;</span>
1384
+ <span class="cline-any cline-yes">10x</span>
1385
+ <span class="cline-any cline-yes">10x</span>
1386
+ <span class="cline-any cline-yes">10x</span>
1387
+ <span class="cline-any cline-yes">10x</span>
1388
+ <span class="cline-any cline-yes">10x</span>
1389
+ <span class="cline-any cline-yes">10x</span>
1390
+ <span class="cline-any cline-yes">10x</span>
903
1391
  <span class="cline-any cline-no">&nbsp;</span>
904
1392
  <span class="cline-any cline-no">&nbsp;</span>
905
1393
  <span class="cline-any cline-no">&nbsp;</span>
906
1394
  <span class="cline-any cline-no">&nbsp;</span>
1395
+ <span class="cline-any cline-yes">10x</span>
1396
+ <span class="cline-any cline-yes">10x</span>
1397
+ <span class="cline-any cline-yes">10x</span>
1398
+ <span class="cline-any cline-yes">10x</span>
1399
+ <span class="cline-any cline-yes">10x</span>
1400
+ <span class="cline-any cline-yes">1x</span>
1401
+ <span class="cline-any cline-yes">1x</span>
1402
+ <span class="cline-any cline-yes">1x</span>
907
1403
  <span class="cline-any cline-no">&nbsp;</span>
1404
+ <span class="cline-any cline-yes">1x</span>
908
1405
  <span class="cline-any cline-no">&nbsp;</span>
909
1406
  <span class="cline-any cline-no">&nbsp;</span>
910
1407
  <span class="cline-any cline-no">&nbsp;</span>
@@ -913,11 +1410,33 @@
913
1410
  <span class="cline-any cline-no">&nbsp;</span>
914
1411
  <span class="cline-any cline-no">&nbsp;</span>
915
1412
  <span class="cline-any cline-no">&nbsp;</span>
1413
+ <span class="cline-any cline-yes">1x</span>
1414
+ <span class="cline-any cline-yes">1x</span>
1415
+ <span class="cline-any cline-yes">1x</span>
916
1416
  <span class="cline-any cline-no">&nbsp;</span>
917
1417
  <span class="cline-any cline-no">&nbsp;</span>
1418
+ <span class="cline-any cline-yes">1x</span>
1419
+ <span class="cline-any cline-yes">1x</span>
1420
+ <span class="cline-any cline-yes">1x</span>
1421
+ <span class="cline-any cline-yes">1x</span>
1422
+ <span class="cline-any cline-yes">1x</span>
918
1423
  <span class="cline-any cline-no">&nbsp;</span>
919
1424
  <span class="cline-any cline-no">&nbsp;</span>
920
1425
  <span class="cline-any cline-no">&nbsp;</span>
1426
+ <span class="cline-any cline-yes">1x</span>
1427
+ <span class="cline-any cline-yes">10x</span>
1428
+ <span class="cline-any cline-yes">10x</span>
1429
+ <span class="cline-any cline-yes">10x</span>
1430
+ <span class="cline-any cline-yes">10x</span>
1431
+ <span class="cline-any cline-yes">10x</span>
1432
+ <span class="cline-any cline-yes">2x</span>
1433
+ <span class="cline-any cline-yes">2x</span>
1434
+ <span class="cline-any cline-yes">2x</span>
1435
+ <span class="cline-any cline-yes">2x</span>
1436
+ <span class="cline-any cline-yes">2x</span>
1437
+ <span class="cline-any cline-yes">1x</span>
1438
+ <span class="cline-any cline-yes">1x</span>
1439
+ <span class="cline-any cline-yes">2x</span>
921
1440
  <span class="cline-any cline-no">&nbsp;</span>
922
1441
  <span class="cline-any cline-no">&nbsp;</span>
923
1442
  <span class="cline-any cline-no">&nbsp;</span>
@@ -940,6 +1459,35 @@
940
1459
  <span class="cline-any cline-no">&nbsp;</span>
941
1460
  <span class="cline-any cline-no">&nbsp;</span>
942
1461
  <span class="cline-any cline-no">&nbsp;</span>
1462
+ <span class="cline-any cline-yes">2x</span>
1463
+ <span class="cline-any cline-yes">10x</span>
1464
+ <span class="cline-any cline-yes">10x</span>
1465
+ <span class="cline-any cline-yes">10x</span>
1466
+ <span class="cline-any cline-yes">10x</span>
1467
+ <span class="cline-any cline-yes">10x</span>
1468
+ <span class="cline-any cline-yes">1x</span>
1469
+ <span class="cline-any cline-yes">1x</span>
1470
+ <span class="cline-any cline-yes">1x</span>
1471
+ <span class="cline-any cline-yes">1x</span>
1472
+ <span class="cline-any cline-yes">1x</span>
1473
+ <span class="cline-any cline-yes">1x</span>
1474
+ <span class="cline-any cline-yes">1x</span>
1475
+ <span class="cline-any cline-yes">1x</span>
1476
+ <span class="cline-any cline-yes">1x</span>
1477
+ <span class="cline-any cline-yes">1x</span>
1478
+ <span class="cline-any cline-yes">1x</span>
1479
+ <span class="cline-any cline-yes">1x</span>
1480
+ <span class="cline-any cline-yes">1x</span>
1481
+ <span class="cline-any cline-yes">1x</span>
1482
+ <span class="cline-any cline-yes">1x</span>
1483
+ <span class="cline-any cline-yes">1x</span>
1484
+ <span class="cline-any cline-yes">1x</span>
1485
+ <span class="cline-any cline-yes">1x</span>
1486
+ <span class="cline-any cline-yes">1x</span>
1487
+ <span class="cline-any cline-yes">1x</span>
1488
+ <span class="cline-any cline-yes">1x</span>
1489
+ <span class="cline-any cline-yes">1x</span>
1490
+ <span class="cline-any cline-yes">1x</span>
943
1491
  <span class="cline-any cline-no">&nbsp;</span>
944
1492
  <span class="cline-any cline-no">&nbsp;</span>
945
1493
  <span class="cline-any cline-no">&nbsp;</span>
@@ -963,6 +1511,11 @@
963
1511
  <span class="cline-any cline-no">&nbsp;</span>
964
1512
  <span class="cline-any cline-no">&nbsp;</span>
965
1513
  <span class="cline-any cline-no">&nbsp;</span>
1514
+ <span class="cline-any cline-yes">1x</span>
1515
+ <span class="cline-any cline-yes">1x</span>
1516
+ <span class="cline-any cline-yes">1x</span>
1517
+ <span class="cline-any cline-yes">1x</span>
1518
+ <span class="cline-any cline-yes">1x</span>
966
1519
  <span class="cline-any cline-no">&nbsp;</span>
967
1520
  <span class="cline-any cline-no">&nbsp;</span>
968
1521
  <span class="cline-any cline-no">&nbsp;</span>
@@ -973,8 +1526,27 @@
973
1526
  <span class="cline-any cline-no">&nbsp;</span>
974
1527
  <span class="cline-any cline-no">&nbsp;</span>
975
1528
  <span class="cline-any cline-no">&nbsp;</span>
1529
+ <span class="cline-any cline-yes">1x</span>
1530
+ <span class="cline-any cline-yes">10x</span>
1531
+ <span class="cline-any cline-yes">10x</span>
1532
+ <span class="cline-any cline-yes">10x</span>
1533
+ <span class="cline-any cline-yes">10x</span>
1534
+ <span class="cline-any cline-yes">10x</span>
976
1535
  <span class="cline-any cline-no">&nbsp;</span>
977
1536
  <span class="cline-any cline-no">&nbsp;</span>
1537
+ <span class="cline-any cline-yes">10x</span>
1538
+ <span class="cline-any cline-yes">10x</span>
1539
+ <span class="cline-any cline-yes">10x</span>
1540
+ <span class="cline-any cline-yes">10x</span>
1541
+ <span class="cline-any cline-yes">10x</span>
1542
+ <span class="cline-any cline-yes">10x</span>
1543
+ <span class="cline-any cline-yes">10x</span>
1544
+ <span class="cline-any cline-yes">10x</span>
1545
+ <span class="cline-any cline-yes">10x</span>
1546
+ <span class="cline-any cline-yes">10x</span>
1547
+ <span class="cline-any cline-yes">10x</span>
1548
+ <span class="cline-any cline-yes">10x</span>
1549
+ <span class="cline-any cline-yes">10x</span>
978
1550
  <span class="cline-any cline-no">&nbsp;</span>
979
1551
  <span class="cline-any cline-no">&nbsp;</span>
980
1552
  <span class="cline-any cline-no">&nbsp;</span>
@@ -1003,6 +1575,12 @@
1003
1575
  <span class="cline-any cline-no">&nbsp;</span>
1004
1576
  <span class="cline-any cline-no">&nbsp;</span>
1005
1577
  <span class="cline-any cline-no">&nbsp;</span>
1578
+ <span class="cline-any cline-yes">10x</span>
1579
+ <span class="cline-any cline-yes">10x</span>
1580
+ <span class="cline-any cline-yes">10x</span>
1581
+ <span class="cline-any cline-yes">10x</span>
1582
+ <span class="cline-any cline-yes">10x</span>
1583
+ <span class="cline-any cline-yes">10x</span>
1006
1584
  <span class="cline-any cline-no">&nbsp;</span>
1007
1585
  <span class="cline-any cline-no">&nbsp;</span>
1008
1586
  <span class="cline-any cline-no">&nbsp;</span>
@@ -1025,700 +1603,271 @@
1025
1603
  <span class="cline-any cline-no">&nbsp;</span>
1026
1604
  <span class="cline-any cline-no">&nbsp;</span>
1027
1605
  <span class="cline-any cline-no">&nbsp;</span>
1606
+ <span class="cline-any cline-yes">10x</span>
1607
+ <span class="cline-any cline-yes">10x</span>
1608
+ <span class="cline-any cline-yes">10x</span>
1609
+ <span class="cline-any cline-yes">10x</span>
1610
+ <span class="cline-any cline-yes">10x</span>
1028
1611
  <span class="cline-any cline-no">&nbsp;</span>
1029
1612
  <span class="cline-any cline-no">&nbsp;</span>
1030
1613
  <span class="cline-any cline-no">&nbsp;</span>
1031
1614
  <span class="cline-any cline-no">&nbsp;</span>
1615
+ <span class="cline-any cline-yes">10x</span>
1616
+ <span class="cline-any cline-yes">10x</span>
1617
+ <span class="cline-any cline-yes">10x</span>
1618
+ <span class="cline-any cline-yes">10x</span>
1619
+ <span class="cline-any cline-yes">10x</span>
1032
1620
  <span class="cline-any cline-no">&nbsp;</span>
1033
1621
  <span class="cline-any cline-no">&nbsp;</span>
1034
1622
  <span class="cline-any cline-no">&nbsp;</span>
1035
1623
  <span class="cline-any cline-no">&nbsp;</span>
1624
+ <span class="cline-any cline-yes">10x</span>
1625
+ <span class="cline-any cline-yes">10x</span>
1626
+ <span class="cline-any cline-yes">10x</span>
1627
+ <span class="cline-any cline-yes">10x</span>
1628
+ <span class="cline-any cline-yes">10x</span>
1036
1629
  <span class="cline-any cline-no">&nbsp;</span>
1037
1630
  <span class="cline-any cline-no">&nbsp;</span>
1038
1631
  <span class="cline-any cline-no">&nbsp;</span>
1039
1632
  <span class="cline-any cline-no">&nbsp;</span>
1040
- <span class="cline-any cline-no">&nbsp;</span>
1041
- <span class="cline-any cline-no">&nbsp;</span>
1042
- <span class="cline-any cline-no">&nbsp;</span>
1043
- <span class="cline-any cline-no">&nbsp;</span>
1044
- <span class="cline-any cline-no">&nbsp;</span>
1045
- <span class="cline-any cline-no">&nbsp;</span>
1046
- <span class="cline-any cline-no">&nbsp;</span>
1047
- <span class="cline-any cline-no">&nbsp;</span>
1048
- <span class="cline-any cline-no">&nbsp;</span>
1049
- <span class="cline-any cline-no">&nbsp;</span>
1050
- <span class="cline-any cline-no">&nbsp;</span>
1051
- <span class="cline-any cline-no">&nbsp;</span>
1052
- <span class="cline-any cline-no">&nbsp;</span>
1053
- <span class="cline-any cline-no">&nbsp;</span>
1054
- <span class="cline-any cline-no">&nbsp;</span>
1055
- <span class="cline-any cline-no">&nbsp;</span>
1056
- <span class="cline-any cline-no">&nbsp;</span>
1057
- <span class="cline-any cline-no">&nbsp;</span>
1058
- <span class="cline-any cline-no">&nbsp;</span>
1059
- <span class="cline-any cline-no">&nbsp;</span>
1060
- <span class="cline-any cline-no">&nbsp;</span>
1061
- <span class="cline-any cline-no">&nbsp;</span>
1062
- <span class="cline-any cline-no">&nbsp;</span>
1063
- <span class="cline-any cline-no">&nbsp;</span>
1064
- <span class="cline-any cline-no">&nbsp;</span>
1065
- <span class="cline-any cline-no">&nbsp;</span>
1066
- <span class="cline-any cline-no">&nbsp;</span>
1067
- <span class="cline-any cline-no">&nbsp;</span>
1068
- <span class="cline-any cline-no">&nbsp;</span>
1069
- <span class="cline-any cline-no">&nbsp;</span>
1070
- <span class="cline-any cline-no">&nbsp;</span>
1071
- <span class="cline-any cline-no">&nbsp;</span>
1072
- <span class="cline-any cline-no">&nbsp;</span>
1073
- <span class="cline-any cline-no">&nbsp;</span>
1074
- <span class="cline-any cline-no">&nbsp;</span>
1075
- <span class="cline-any cline-no">&nbsp;</span>
1076
- <span class="cline-any cline-no">&nbsp;</span>
1077
- <span class="cline-any cline-no">&nbsp;</span>
1078
- <span class="cline-any cline-no">&nbsp;</span>
1079
- <span class="cline-any cline-no">&nbsp;</span>
1080
- <span class="cline-any cline-no">&nbsp;</span>
1081
- <span class="cline-any cline-no">&nbsp;</span>
1082
- <span class="cline-any cline-no">&nbsp;</span>
1083
- <span class="cline-any cline-no">&nbsp;</span>
1084
- <span class="cline-any cline-no">&nbsp;</span>
1085
- <span class="cline-any cline-no">&nbsp;</span>
1086
- <span class="cline-any cline-no">&nbsp;</span>
1087
- <span class="cline-any cline-no">&nbsp;</span>
1088
- <span class="cline-any cline-no">&nbsp;</span>
1089
- <span class="cline-any cline-no">&nbsp;</span>
1090
- <span class="cline-any cline-no">&nbsp;</span>
1091
- <span class="cline-any cline-no">&nbsp;</span>
1092
- <span class="cline-any cline-no">&nbsp;</span>
1093
- <span class="cline-any cline-no">&nbsp;</span>
1094
- <span class="cline-any cline-no">&nbsp;</span>
1095
- <span class="cline-any cline-no">&nbsp;</span>
1096
- <span class="cline-any cline-no">&nbsp;</span>
1097
- <span class="cline-any cline-no">&nbsp;</span>
1098
- <span class="cline-any cline-no">&nbsp;</span>
1099
- <span class="cline-any cline-no">&nbsp;</span>
1100
- <span class="cline-any cline-no">&nbsp;</span>
1101
- <span class="cline-any cline-no">&nbsp;</span>
1102
- <span class="cline-any cline-no">&nbsp;</span>
1103
- <span class="cline-any cline-no">&nbsp;</span>
1104
- <span class="cline-any cline-no">&nbsp;</span>
1105
- <span class="cline-any cline-no">&nbsp;</span>
1106
- <span class="cline-any cline-no">&nbsp;</span>
1107
- <span class="cline-any cline-no">&nbsp;</span>
1108
- <span class="cline-any cline-no">&nbsp;</span>
1109
- <span class="cline-any cline-no">&nbsp;</span>
1110
- <span class="cline-any cline-no">&nbsp;</span>
1111
- <span class="cline-any cline-no">&nbsp;</span>
1112
- <span class="cline-any cline-no">&nbsp;</span>
1113
- <span class="cline-any cline-no">&nbsp;</span>
1114
- <span class="cline-any cline-no">&nbsp;</span>
1115
- <span class="cline-any cline-no">&nbsp;</span>
1116
- <span class="cline-any cline-no">&nbsp;</span>
1117
- <span class="cline-any cline-no">&nbsp;</span>
1118
- <span class="cline-any cline-no">&nbsp;</span>
1119
- <span class="cline-any cline-no">&nbsp;</span>
1120
- <span class="cline-any cline-no">&nbsp;</span>
1121
- <span class="cline-any cline-no">&nbsp;</span>
1122
- <span class="cline-any cline-no">&nbsp;</span>
1123
- <span class="cline-any cline-no">&nbsp;</span>
1124
- <span class="cline-any cline-no">&nbsp;</span>
1125
- <span class="cline-any cline-no">&nbsp;</span>
1126
- <span class="cline-any cline-no">&nbsp;</span>
1127
- <span class="cline-any cline-no">&nbsp;</span>
1128
- <span class="cline-any cline-no">&nbsp;</span>
1129
- <span class="cline-any cline-no">&nbsp;</span>
1130
- <span class="cline-any cline-no">&nbsp;</span>
1131
- <span class="cline-any cline-no">&nbsp;</span>
1132
- <span class="cline-any cline-no">&nbsp;</span>
1133
- <span class="cline-any cline-no">&nbsp;</span>
1134
- <span class="cline-any cline-no">&nbsp;</span>
1135
- <span class="cline-any cline-no">&nbsp;</span>
1136
- <span class="cline-any cline-no">&nbsp;</span>
1137
- <span class="cline-any cline-no">&nbsp;</span>
1138
- <span class="cline-any cline-no">&nbsp;</span>
1139
- <span class="cline-any cline-no">&nbsp;</span>
1140
- <span class="cline-any cline-no">&nbsp;</span>
1141
- <span class="cline-any cline-no">&nbsp;</span>
1142
- <span class="cline-any cline-no">&nbsp;</span>
1143
- <span class="cline-any cline-no">&nbsp;</span>
1144
- <span class="cline-any cline-no">&nbsp;</span>
1145
- <span class="cline-any cline-no">&nbsp;</span>
1146
- <span class="cline-any cline-no">&nbsp;</span>
1147
- <span class="cline-any cline-no">&nbsp;</span>
1148
- <span class="cline-any cline-no">&nbsp;</span>
1149
- <span class="cline-any cline-no">&nbsp;</span>
1150
- <span class="cline-any cline-no">&nbsp;</span>
1151
- <span class="cline-any cline-no">&nbsp;</span>
1152
- <span class="cline-any cline-no">&nbsp;</span>
1153
- <span class="cline-any cline-no">&nbsp;</span>
1154
- <span class="cline-any cline-no">&nbsp;</span>
1155
- <span class="cline-any cline-no">&nbsp;</span>
1156
- <span class="cline-any cline-no">&nbsp;</span>
1157
- <span class="cline-any cline-no">&nbsp;</span>
1158
- <span class="cline-any cline-no">&nbsp;</span>
1159
- <span class="cline-any cline-no">&nbsp;</span>
1160
- <span class="cline-any cline-no">&nbsp;</span>
1161
- <span class="cline-any cline-no">&nbsp;</span>
1162
- <span class="cline-any cline-no">&nbsp;</span>
1163
- <span class="cline-any cline-no">&nbsp;</span>
1164
- <span class="cline-any cline-no">&nbsp;</span>
1165
- <span class="cline-any cline-no">&nbsp;</span>
1166
- <span class="cline-any cline-no">&nbsp;</span>
1167
- <span class="cline-any cline-no">&nbsp;</span>
1168
- <span class="cline-any cline-no">&nbsp;</span>
1169
- <span class="cline-any cline-no">&nbsp;</span>
1170
- <span class="cline-any cline-no">&nbsp;</span>
1171
- <span class="cline-any cline-no">&nbsp;</span>
1172
- <span class="cline-any cline-no">&nbsp;</span>
1173
- <span class="cline-any cline-no">&nbsp;</span>
1174
- <span class="cline-any cline-no">&nbsp;</span>
1175
- <span class="cline-any cline-no">&nbsp;</span>
1176
- <span class="cline-any cline-no">&nbsp;</span>
1177
- <span class="cline-any cline-no">&nbsp;</span>
1178
- <span class="cline-any cline-no">&nbsp;</span>
1179
- <span class="cline-any cline-no">&nbsp;</span>
1180
- <span class="cline-any cline-no">&nbsp;</span>
1181
- <span class="cline-any cline-no">&nbsp;</span>
1182
- <span class="cline-any cline-no">&nbsp;</span>
1183
- <span class="cline-any cline-no">&nbsp;</span>
1184
- <span class="cline-any cline-no">&nbsp;</span>
1185
- <span class="cline-any cline-no">&nbsp;</span>
1186
- <span class="cline-any cline-no">&nbsp;</span>
1187
- <span class="cline-any cline-no">&nbsp;</span>
1188
- <span class="cline-any cline-no">&nbsp;</span>
1189
- <span class="cline-any cline-no">&nbsp;</span>
1190
- <span class="cline-any cline-no">&nbsp;</span>
1191
- <span class="cline-any cline-no">&nbsp;</span>
1192
- <span class="cline-any cline-no">&nbsp;</span>
1193
- <span class="cline-any cline-no">&nbsp;</span>
1194
- <span class="cline-any cline-no">&nbsp;</span>
1195
- <span class="cline-any cline-no">&nbsp;</span>
1196
- <span class="cline-any cline-no">&nbsp;</span>
1197
- <span class="cline-any cline-no">&nbsp;</span>
1198
- <span class="cline-any cline-no">&nbsp;</span>
1199
- <span class="cline-any cline-no">&nbsp;</span>
1200
- <span class="cline-any cline-no">&nbsp;</span>
1201
- <span class="cline-any cline-no">&nbsp;</span>
1202
- <span class="cline-any cline-no">&nbsp;</span>
1203
- <span class="cline-any cline-no">&nbsp;</span>
1204
- <span class="cline-any cline-no">&nbsp;</span>
1205
- <span class="cline-any cline-no">&nbsp;</span>
1206
- <span class="cline-any cline-no">&nbsp;</span>
1207
- <span class="cline-any cline-no">&nbsp;</span>
1208
- <span class="cline-any cline-no">&nbsp;</span>
1209
- <span class="cline-any cline-no">&nbsp;</span>
1210
- <span class="cline-any cline-no">&nbsp;</span>
1211
- <span class="cline-any cline-no">&nbsp;</span>
1212
- <span class="cline-any cline-no">&nbsp;</span>
1213
- <span class="cline-any cline-no">&nbsp;</span>
1214
- <span class="cline-any cline-no">&nbsp;</span>
1215
- <span class="cline-any cline-no">&nbsp;</span>
1216
- <span class="cline-any cline-no">&nbsp;</span>
1217
- <span class="cline-any cline-no">&nbsp;</span>
1218
- <span class="cline-any cline-no">&nbsp;</span>
1219
- <span class="cline-any cline-no">&nbsp;</span>
1220
- <span class="cline-any cline-no">&nbsp;</span>
1221
- <span class="cline-any cline-no">&nbsp;</span>
1222
- <span class="cline-any cline-no">&nbsp;</span>
1223
- <span class="cline-any cline-no">&nbsp;</span>
1224
- <span class="cline-any cline-no">&nbsp;</span>
1225
- <span class="cline-any cline-no">&nbsp;</span>
1226
- <span class="cline-any cline-no">&nbsp;</span>
1227
- <span class="cline-any cline-no">&nbsp;</span>
1228
- <span class="cline-any cline-no">&nbsp;</span>
1229
- <span class="cline-any cline-no">&nbsp;</span>
1230
- <span class="cline-any cline-no">&nbsp;</span>
1231
- <span class="cline-any cline-no">&nbsp;</span>
1232
- <span class="cline-any cline-no">&nbsp;</span>
1233
- <span class="cline-any cline-no">&nbsp;</span>
1234
- <span class="cline-any cline-no">&nbsp;</span>
1235
- <span class="cline-any cline-no">&nbsp;</span>
1236
- <span class="cline-any cline-no">&nbsp;</span>
1237
- <span class="cline-any cline-no">&nbsp;</span>
1238
- <span class="cline-any cline-no">&nbsp;</span>
1239
- <span class="cline-any cline-no">&nbsp;</span>
1240
- <span class="cline-any cline-no">&nbsp;</span>
1241
- <span class="cline-any cline-no">&nbsp;</span>
1242
- <span class="cline-any cline-no">&nbsp;</span>
1243
- <span class="cline-any cline-no">&nbsp;</span>
1244
- <span class="cline-any cline-no">&nbsp;</span>
1245
- <span class="cline-any cline-no">&nbsp;</span>
1246
- <span class="cline-any cline-no">&nbsp;</span>
1247
- <span class="cline-any cline-no">&nbsp;</span>
1248
- <span class="cline-any cline-no">&nbsp;</span>
1249
- <span class="cline-any cline-no">&nbsp;</span>
1250
- <span class="cline-any cline-no">&nbsp;</span>
1251
- <span class="cline-any cline-no">&nbsp;</span>
1252
- <span class="cline-any cline-no">&nbsp;</span>
1253
- <span class="cline-any cline-no">&nbsp;</span>
1254
- <span class="cline-any cline-no">&nbsp;</span>
1255
- <span class="cline-any cline-no">&nbsp;</span>
1256
- <span class="cline-any cline-no">&nbsp;</span>
1257
- <span class="cline-any cline-no">&nbsp;</span>
1258
- <span class="cline-any cline-no">&nbsp;</span>
1259
- <span class="cline-any cline-no">&nbsp;</span>
1260
- <span class="cline-any cline-no">&nbsp;</span>
1261
- <span class="cline-any cline-no">&nbsp;</span>
1262
- <span class="cline-any cline-no">&nbsp;</span>
1263
- <span class="cline-any cline-no">&nbsp;</span>
1264
- <span class="cline-any cline-no">&nbsp;</span>
1265
- <span class="cline-any cline-no">&nbsp;</span>
1266
- <span class="cline-any cline-no">&nbsp;</span>
1267
- <span class="cline-any cline-no">&nbsp;</span>
1268
- <span class="cline-any cline-no">&nbsp;</span>
1269
- <span class="cline-any cline-no">&nbsp;</span>
1270
- <span class="cline-any cline-no">&nbsp;</span>
1271
- <span class="cline-any cline-no">&nbsp;</span>
1272
- <span class="cline-any cline-no">&nbsp;</span>
1273
- <span class="cline-any cline-no">&nbsp;</span>
1274
- <span class="cline-any cline-no">&nbsp;</span>
1275
- <span class="cline-any cline-no">&nbsp;</span>
1276
- <span class="cline-any cline-no">&nbsp;</span>
1277
- <span class="cline-any cline-no">&nbsp;</span>
1278
- <span class="cline-any cline-no">&nbsp;</span>
1279
- <span class="cline-any cline-no">&nbsp;</span>
1280
- <span class="cline-any cline-no">&nbsp;</span>
1281
- <span class="cline-any cline-no">&nbsp;</span>
1282
- <span class="cline-any cline-no">&nbsp;</span>
1283
- <span class="cline-any cline-no">&nbsp;</span>
1284
- <span class="cline-any cline-no">&nbsp;</span>
1285
- <span class="cline-any cline-no">&nbsp;</span>
1286
- <span class="cline-any cline-no">&nbsp;</span>
1287
- <span class="cline-any cline-no">&nbsp;</span>
1288
- <span class="cline-any cline-no">&nbsp;</span>
1289
- <span class="cline-any cline-no">&nbsp;</span>
1290
- <span class="cline-any cline-no">&nbsp;</span>
1291
- <span class="cline-any cline-no">&nbsp;</span>
1292
- <span class="cline-any cline-no">&nbsp;</span>
1293
- <span class="cline-any cline-no">&nbsp;</span>
1294
- <span class="cline-any cline-no">&nbsp;</span>
1295
- <span class="cline-any cline-no">&nbsp;</span>
1296
- <span class="cline-any cline-no">&nbsp;</span>
1297
- <span class="cline-any cline-no">&nbsp;</span>
1298
- <span class="cline-any cline-no">&nbsp;</span>
1299
- <span class="cline-any cline-no">&nbsp;</span>
1300
- <span class="cline-any cline-no">&nbsp;</span>
1301
- <span class="cline-any cline-no">&nbsp;</span>
1302
- <span class="cline-any cline-no">&nbsp;</span>
1303
- <span class="cline-any cline-no">&nbsp;</span>
1304
- <span class="cline-any cline-no">&nbsp;</span>
1305
- <span class="cline-any cline-no">&nbsp;</span>
1306
- <span class="cline-any cline-no">&nbsp;</span>
1307
- <span class="cline-any cline-no">&nbsp;</span>
1308
- <span class="cline-any cline-no">&nbsp;</span>
1309
- <span class="cline-any cline-no">&nbsp;</span>
1310
- <span class="cline-any cline-no">&nbsp;</span>
1311
- <span class="cline-any cline-no">&nbsp;</span>
1312
- <span class="cline-any cline-no">&nbsp;</span>
1313
- <span class="cline-any cline-no">&nbsp;</span>
1314
- <span class="cline-any cline-no">&nbsp;</span>
1315
- <span class="cline-any cline-no">&nbsp;</span>
1316
- <span class="cline-any cline-no">&nbsp;</span>
1317
- <span class="cline-any cline-no">&nbsp;</span>
1318
- <span class="cline-any cline-no">&nbsp;</span>
1319
- <span class="cline-any cline-no">&nbsp;</span>
1320
- <span class="cline-any cline-no">&nbsp;</span>
1321
- <span class="cline-any cline-no">&nbsp;</span>
1322
- <span class="cline-any cline-no">&nbsp;</span>
1323
- <span class="cline-any cline-no">&nbsp;</span>
1324
- <span class="cline-any cline-no">&nbsp;</span>
1325
- <span class="cline-any cline-no">&nbsp;</span>
1326
- <span class="cline-any cline-no">&nbsp;</span>
1327
- <span class="cline-any cline-no">&nbsp;</span>
1328
- <span class="cline-any cline-no">&nbsp;</span>
1329
- <span class="cline-any cline-no">&nbsp;</span>
1330
- <span class="cline-any cline-no">&nbsp;</span>
1331
- <span class="cline-any cline-no">&nbsp;</span>
1332
- <span class="cline-any cline-no">&nbsp;</span>
1333
- <span class="cline-any cline-no">&nbsp;</span>
1334
- <span class="cline-any cline-no">&nbsp;</span>
1335
- <span class="cline-any cline-no">&nbsp;</span>
1336
- <span class="cline-any cline-no">&nbsp;</span>
1337
- <span class="cline-any cline-no">&nbsp;</span>
1338
- <span class="cline-any cline-no">&nbsp;</span>
1339
- <span class="cline-any cline-no">&nbsp;</span>
1340
- <span class="cline-any cline-no">&nbsp;</span>
1341
- <span class="cline-any cline-no">&nbsp;</span>
1342
- <span class="cline-any cline-no">&nbsp;</span>
1343
- <span class="cline-any cline-no">&nbsp;</span>
1344
- <span class="cline-any cline-no">&nbsp;</span>
1345
- <span class="cline-any cline-no">&nbsp;</span>
1346
- <span class="cline-any cline-no">&nbsp;</span>
1347
- <span class="cline-any cline-no">&nbsp;</span>
1348
- <span class="cline-any cline-no">&nbsp;</span>
1349
- <span class="cline-any cline-no">&nbsp;</span>
1350
- <span class="cline-any cline-no">&nbsp;</span>
1351
- <span class="cline-any cline-no">&nbsp;</span>
1352
- <span class="cline-any cline-no">&nbsp;</span>
1353
- <span class="cline-any cline-no">&nbsp;</span>
1354
- <span class="cline-any cline-no">&nbsp;</span>
1355
- <span class="cline-any cline-no">&nbsp;</span>
1356
- <span class="cline-any cline-no">&nbsp;</span>
1357
- <span class="cline-any cline-no">&nbsp;</span>
1358
- <span class="cline-any cline-no">&nbsp;</span>
1359
- <span class="cline-any cline-no">&nbsp;</span>
1360
- <span class="cline-any cline-no">&nbsp;</span>
1361
- <span class="cline-any cline-no">&nbsp;</span>
1362
- <span class="cline-any cline-no">&nbsp;</span>
1363
- <span class="cline-any cline-no">&nbsp;</span>
1364
- <span class="cline-any cline-no">&nbsp;</span>
1365
- <span class="cline-any cline-no">&nbsp;</span>
1366
- <span class="cline-any cline-no">&nbsp;</span>
1367
- <span class="cline-any cline-no">&nbsp;</span>
1368
- <span class="cline-any cline-no">&nbsp;</span>
1369
- <span class="cline-any cline-no">&nbsp;</span>
1370
- <span class="cline-any cline-no">&nbsp;</span>
1371
- <span class="cline-any cline-no">&nbsp;</span>
1372
- <span class="cline-any cline-no">&nbsp;</span>
1373
- <span class="cline-any cline-no">&nbsp;</span>
1374
- <span class="cline-any cline-no">&nbsp;</span>
1375
- <span class="cline-any cline-no">&nbsp;</span>
1376
- <span class="cline-any cline-no">&nbsp;</span>
1377
- <span class="cline-any cline-no">&nbsp;</span>
1378
- <span class="cline-any cline-no">&nbsp;</span>
1379
- <span class="cline-any cline-no">&nbsp;</span>
1380
- <span class="cline-any cline-no">&nbsp;</span>
1381
- <span class="cline-any cline-no">&nbsp;</span>
1382
- <span class="cline-any cline-no">&nbsp;</span>
1383
- <span class="cline-any cline-no">&nbsp;</span>
1384
- <span class="cline-any cline-no">&nbsp;</span>
1385
- <span class="cline-any cline-no">&nbsp;</span>
1386
- <span class="cline-any cline-no">&nbsp;</span>
1387
- <span class="cline-any cline-no">&nbsp;</span>
1388
- <span class="cline-any cline-no">&nbsp;</span>
1389
- <span class="cline-any cline-no">&nbsp;</span>
1390
- <span class="cline-any cline-no">&nbsp;</span>
1391
- <span class="cline-any cline-no">&nbsp;</span>
1392
- <span class="cline-any cline-no">&nbsp;</span>
1393
- <span class="cline-any cline-no">&nbsp;</span>
1394
- <span class="cline-any cline-no">&nbsp;</span>
1395
- <span class="cline-any cline-no">&nbsp;</span>
1396
- <span class="cline-any cline-no">&nbsp;</span>
1397
- <span class="cline-any cline-no">&nbsp;</span>
1398
- <span class="cline-any cline-no">&nbsp;</span>
1399
- <span class="cline-any cline-no">&nbsp;</span>
1400
- <span class="cline-any cline-no">&nbsp;</span>
1401
- <span class="cline-any cline-no">&nbsp;</span>
1402
- <span class="cline-any cline-no">&nbsp;</span>
1403
- <span class="cline-any cline-no">&nbsp;</span>
1404
- <span class="cline-any cline-no">&nbsp;</span>
1405
- <span class="cline-any cline-no">&nbsp;</span>
1406
- <span class="cline-any cline-no">&nbsp;</span>
1407
- <span class="cline-any cline-no">&nbsp;</span>
1408
- <span class="cline-any cline-no">&nbsp;</span>
1409
- <span class="cline-any cline-no">&nbsp;</span>
1410
- <span class="cline-any cline-no">&nbsp;</span>
1411
- <span class="cline-any cline-no">&nbsp;</span>
1412
- <span class="cline-any cline-no">&nbsp;</span>
1413
- <span class="cline-any cline-no">&nbsp;</span>
1414
- <span class="cline-any cline-no">&nbsp;</span>
1415
- <span class="cline-any cline-no">&nbsp;</span>
1416
- <span class="cline-any cline-no">&nbsp;</span>
1417
- <span class="cline-any cline-no">&nbsp;</span>
1418
- <span class="cline-any cline-no">&nbsp;</span>
1419
- <span class="cline-any cline-no">&nbsp;</span>
1420
- <span class="cline-any cline-no">&nbsp;</span>
1421
- <span class="cline-any cline-no">&nbsp;</span>
1422
- <span class="cline-any cline-no">&nbsp;</span>
1423
- <span class="cline-any cline-no">&nbsp;</span>
1424
- <span class="cline-any cline-no">&nbsp;</span>
1425
- <span class="cline-any cline-no">&nbsp;</span>
1426
- <span class="cline-any cline-no">&nbsp;</span>
1427
- <span class="cline-any cline-no">&nbsp;</span>
1428
- <span class="cline-any cline-no">&nbsp;</span>
1429
- <span class="cline-any cline-no">&nbsp;</span>
1430
- <span class="cline-any cline-no">&nbsp;</span>
1431
- <span class="cline-any cline-no">&nbsp;</span>
1432
- <span class="cline-any cline-no">&nbsp;</span>
1433
- <span class="cline-any cline-no">&nbsp;</span>
1434
- <span class="cline-any cline-no">&nbsp;</span>
1435
- <span class="cline-any cline-no">&nbsp;</span>
1436
- <span class="cline-any cline-no">&nbsp;</span>
1437
- <span class="cline-any cline-no">&nbsp;</span>
1438
- <span class="cline-any cline-no">&nbsp;</span>
1439
- <span class="cline-any cline-no">&nbsp;</span>
1440
- <span class="cline-any cline-no">&nbsp;</span>
1441
- <span class="cline-any cline-no">&nbsp;</span>
1442
- <span class="cline-any cline-no">&nbsp;</span>
1443
- <span class="cline-any cline-no">&nbsp;</span>
1444
- <span class="cline-any cline-no">&nbsp;</span>
1445
- <span class="cline-any cline-no">&nbsp;</span>
1446
- <span class="cline-any cline-no">&nbsp;</span>
1447
- <span class="cline-any cline-no">&nbsp;</span>
1448
- <span class="cline-any cline-no">&nbsp;</span>
1449
- <span class="cline-any cline-no">&nbsp;</span>
1450
- <span class="cline-any cline-no">&nbsp;</span>
1451
- <span class="cline-any cline-no">&nbsp;</span>
1452
- <span class="cline-any cline-no">&nbsp;</span>
1453
- <span class="cline-any cline-no">&nbsp;</span>
1454
- <span class="cline-any cline-no">&nbsp;</span>
1455
- <span class="cline-any cline-no">&nbsp;</span>
1456
- <span class="cline-any cline-no">&nbsp;</span>
1457
- <span class="cline-any cline-no">&nbsp;</span>
1458
- <span class="cline-any cline-no">&nbsp;</span>
1459
- <span class="cline-any cline-no">&nbsp;</span>
1460
- <span class="cline-any cline-no">&nbsp;</span>
1461
- <span class="cline-any cline-no">&nbsp;</span>
1462
- <span class="cline-any cline-no">&nbsp;</span>
1463
- <span class="cline-any cline-no">&nbsp;</span>
1464
- <span class="cline-any cline-no">&nbsp;</span>
1465
- <span class="cline-any cline-no">&nbsp;</span>
1466
- <span class="cline-any cline-no">&nbsp;</span>
1467
- <span class="cline-any cline-no">&nbsp;</span>
1468
- <span class="cline-any cline-no">&nbsp;</span>
1469
- <span class="cline-any cline-no">&nbsp;</span>
1470
- <span class="cline-any cline-no">&nbsp;</span>
1471
- <span class="cline-any cline-no">&nbsp;</span>
1472
- <span class="cline-any cline-no">&nbsp;</span>
1473
- <span class="cline-any cline-no">&nbsp;</span>
1474
- <span class="cline-any cline-no">&nbsp;</span>
1475
- <span class="cline-any cline-no">&nbsp;</span>
1476
- <span class="cline-any cline-no">&nbsp;</span>
1477
- <span class="cline-any cline-no">&nbsp;</span>
1478
- <span class="cline-any cline-no">&nbsp;</span>
1479
- <span class="cline-any cline-no">&nbsp;</span>
1480
- <span class="cline-any cline-no">&nbsp;</span>
1481
- <span class="cline-any cline-no">&nbsp;</span>
1482
- <span class="cline-any cline-no">&nbsp;</span>
1483
- <span class="cline-any cline-no">&nbsp;</span>
1484
- <span class="cline-any cline-no">&nbsp;</span>
1485
- <span class="cline-any cline-no">&nbsp;</span>
1486
- <span class="cline-any cline-no">&nbsp;</span>
1487
- <span class="cline-any cline-no">&nbsp;</span>
1488
- <span class="cline-any cline-no">&nbsp;</span>
1489
- <span class="cline-any cline-no">&nbsp;</span>
1490
- <span class="cline-any cline-no">&nbsp;</span>
1491
- <span class="cline-any cline-no">&nbsp;</span>
1492
- <span class="cline-any cline-no">&nbsp;</span>
1493
- <span class="cline-any cline-no">&nbsp;</span>
1494
- <span class="cline-any cline-no">&nbsp;</span>
1495
- <span class="cline-any cline-no">&nbsp;</span>
1496
- <span class="cline-any cline-no">&nbsp;</span>
1497
- <span class="cline-any cline-no">&nbsp;</span>
1498
- <span class="cline-any cline-no">&nbsp;</span>
1499
- <span class="cline-any cline-no">&nbsp;</span>
1500
- <span class="cline-any cline-no">&nbsp;</span>
1501
- <span class="cline-any cline-no">&nbsp;</span>
1502
- <span class="cline-any cline-no">&nbsp;</span>
1503
- <span class="cline-any cline-no">&nbsp;</span>
1504
- <span class="cline-any cline-no">&nbsp;</span>
1505
- <span class="cline-any cline-no">&nbsp;</span>
1506
- <span class="cline-any cline-no">&nbsp;</span>
1507
- <span class="cline-any cline-no">&nbsp;</span>
1508
- <span class="cline-any cline-no">&nbsp;</span>
1509
- <span class="cline-any cline-no">&nbsp;</span>
1510
- <span class="cline-any cline-no">&nbsp;</span>
1511
- <span class="cline-any cline-no">&nbsp;</span>
1512
- <span class="cline-any cline-no">&nbsp;</span>
1513
- <span class="cline-any cline-no">&nbsp;</span>
1514
- <span class="cline-any cline-no">&nbsp;</span>
1515
- <span class="cline-any cline-no">&nbsp;</span>
1516
- <span class="cline-any cline-no">&nbsp;</span>
1517
- <span class="cline-any cline-no">&nbsp;</span>
1518
- <span class="cline-any cline-no">&nbsp;</span>
1519
- <span class="cline-any cline-no">&nbsp;</span>
1520
- <span class="cline-any cline-no">&nbsp;</span>
1521
- <span class="cline-any cline-no">&nbsp;</span>
1522
- <span class="cline-any cline-no">&nbsp;</span>
1523
- <span class="cline-any cline-no">&nbsp;</span>
1524
- <span class="cline-any cline-no">&nbsp;</span>
1525
- <span class="cline-any cline-no">&nbsp;</span>
1526
- <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js"><span class="cstat-no" title="statement not covered" >/**<span class="fstat-no" title="function not covered" ><span class="branch-0 cbranch-no" title="branch not covered" ></span></span></span>
1527
- <span class="cstat-no" title="statement not covered" > * @file wallet-connection-modal.component.ts</span>
1528
- <span class="cstat-no" title="statement not covered" > * @description Multi-protocol wallet connection modal with step-by-step flow</span>
1529
- <span class="cstat-no" title="statement not covered" > *</span>
1530
- <span class="cstat-no" title="statement not covered" > * Provides a beautiful, user-friendly interface for connecting wallets across</span>
1531
- <span class="cstat-no" title="statement not covered" > * multiple protocols (HSuite Native, WalletConnect) and ledgers (Hedera, XRPL).</span>
1532
- <span class="cstat-no" title="statement not covered" > *</span>
1533
- <span class="cstat-no" title="statement not covered" > * Features:</span>
1534
- <span class="cstat-no" title="statement not covered" > * - Step-by-step connection wizard with direct selection (no Next button)</span>
1535
- <span class="cstat-no" title="statement not covered" > * - Dynamic step indicator showing only relevant steps per protocol path</span>
1536
- <span class="cstat-no" title="statement not covered" > * - Network selection (Mainnet, Testnet)</span>
1537
- <span class="cstat-no" title="statement not covered" > * - Protocol selection (HSuite Native vs WalletConnect)</span>
1538
- <span class="cstat-no" title="statement not covered" > * - Connection method selection (Desktop or Mobile QR)</span>
1539
- <span class="cstat-no" title="statement not covered" > * - Ledger selection (Hedera, XRPL) for WalletConnect</span>
1540
- <span class="cstat-no" title="statement not covered" > * - QR code display for mobile P2P connections</span>
1541
- <span class="cstat-no" title="statement not covered" > * - Beautiful animations and loading states</span>
1542
- <span class="cstat-no" title="statement not covered" > *</span>
1543
- <span class="cstat-no" title="statement not covered" > * Step Paths:</span>
1544
- <span class="cstat-no" title="statement not covered" > * - HSuite Native + Desktop: Network → Protocol → Method (3 steps)</span>
1545
- <span class="cstat-no" title="statement not covered" > * - HSuite Native + Mobile QR: Network → Protocol → Method → QR Pairing (4 steps)</span>
1546
- <span class="cstat-no" title="statement not covered" > * - WalletConnect: Network → Protocol → Ledger → Connect (4 steps)</span>
1547
- <span class="cstat-no" title="statement not covered" > */</span>
1548
- <span class="cstat-no" title="statement not covered" ></span>
1549
- <span class="cstat-no" title="statement not covered" >import { CommonModule } from '@angular/common';</span>
1550
- <span class="cstat-no" title="statement not covered" >import { Component, Input, Output, EventEmitter, signal, computed, inject } from '@angular/core';</span>
1551
- <span class="cstat-no" title="statement not covered" >import { getLogger } from '@hsuite/native-connect-sdk';</span>
1552
- <span class="cstat-no" title="statement not covered" >import { IonicModule, ModalController, Platform } from '@ionic/angular';</span>
1553
- <span class="cstat-no" title="statement not covered" ></span>
1554
- <span class="cstat-no" title="statement not covered" >import type { WalletConnectV2Config } from '../../models/provider-types';</span>
1555
- <span class="cstat-no" title="statement not covered" >import { DEFAULT_WALLET_URL } from '../../models/provider-types';</span>
1556
- <span class="cstat-no" title="statement not covered" >import { P2PNativeProvider } from '../../providers/p2p-native/p2p-native.provider';</span>
1557
- <span class="cstat-no" title="statement not covered" >import { UnifiedWalletService } from '../../services/unified-wallet.service';</span>
1558
- <span class="cstat-no" title="statement not covered" ></span>
1559
- <span class="cstat-no" title="statement not covered" >import {</span>
1560
- <span class="cstat-no" title="statement not covered" > ConnectionMethodStepComponent,</span>
1561
- <span class="cstat-no" title="statement not covered" > type ConnectionMethodOption,</span>
1562
- <span class="cstat-no" title="statement not covered" >} from './connection-method-step/connection-method-step.component';</span>
1563
- <span class="cstat-no" title="statement not covered" >import { QrPairingStepComponent } from './qr-pairing-step/qr-pairing-step.component';</span>
1564
- <span class="cstat-no" title="statement not covered" ></span>
1565
- <span class="cstat-no" title="statement not covered" >const logger = getLogger().scoped?.('WalletConnectionModal') ?? getLogger();</span>
1566
- <span class="cstat-no" title="statement not covered" ></span>
1567
- <span class="cstat-no" title="statement not covered" >/**</span>
1568
- <span class="cstat-no" title="statement not covered" > * Connection step enumeration for the wizard flow</span>
1569
- <span class="cstat-no" title="statement not covered" > */</span>
1570
- <span class="cstat-no" title="statement not covered" >enum ConnectionStep {</span>
1571
- <span class="cstat-no" title="statement not covered" > NetworkSelection = 1,</span>
1572
- <span class="cstat-no" title="statement not covered" > ProtocolSelection = 2,</span>
1573
- <span class="cstat-no" title="statement not covered" > ConnectionMethodSelection = 3,</span>
1574
- <span class="cstat-no" title="statement not covered" > LedgerSelection = 4,</span>
1575
- <span class="cstat-no" title="statement not covered" > QrPairing = 5,</span>
1576
- <span class="cstat-no" title="statement not covered" > ConnectionProgress = 6,</span>
1577
- <span class="cstat-no" title="statement not covered" >}</span>
1578
- <span class="cstat-no" title="statement not covered" ></span>
1579
- <span class="cstat-no" title="statement not covered" >/**</span>
1580
- <span class="cstat-no" title="statement not covered" > * Connection method type.</span>
1581
- <span class="cstat-no" title="statement not covered" > * - desktop: Uses extension if available, otherwise opens PWA in new tab (SDK auto-selects)</span>
1582
- <span class="cstat-no" title="statement not covered" > * - mobile-qr: Two-way QR scan for cross-device P2P connection</span>
1583
- <span class="cstat-no" title="statement not covered" > */</span>
1584
- <span class="cstat-no" title="statement not covered" >type ConnectionMethod = 'desktop' | 'mobile-qr';</span>
1585
- <span class="cstat-no" title="statement not covered" ></span>
1586
- <span class="cstat-no" title="statement not covered" >/**</span>
1587
- <span class="cstat-no" title="statement not covered" > * Network configuration options</span>
1588
- <span class="cstat-no" title="statement not covered" > */</span>
1589
- <span class="cstat-no" title="statement not covered" >interface NetworkOption {</span>
1590
- <span class="cstat-no" title="statement not covered" > id: string;</span>
1591
- <span class="cstat-no" title="statement not covered" > name: string;</span>
1592
- <span class="cstat-no" title="statement not covered" > description: string;</span>
1593
- <span class="cstat-no" title="statement not covered" > icon?: string;</span>
1594
- <span class="cstat-no" title="statement not covered" > recommended?: boolean;</span>
1595
- <span class="cstat-no" title="statement not covered" >}</span>
1596
- <span class="cstat-no" title="statement not covered" ></span>
1597
- <span class="cstat-no" title="statement not covered" >/**</span>
1598
- <span class="cstat-no" title="statement not covered" > * Protocol configuration options</span>
1599
- <span class="cstat-no" title="statement not covered" > */</span>
1600
- <span class="cstat-no" title="statement not covered" >interface ProtocolOption {</span>
1601
- <span class="cstat-no" title="statement not covered" > id: 'hsuite-native' | 'walletconnect';</span>
1602
- <span class="cstat-no" title="statement not covered" > name: string;</span>
1603
- <span class="cstat-no" title="statement not covered" > description: string;</span>
1604
- <span class="cstat-no" title="statement not covered" > icon: string;</span>
1605
- <span class="cstat-no" title="statement not covered" > features: string[];</span>
1606
- <span class="cstat-no" title="statement not covered" >}</span>
1607
- <span class="cstat-no" title="statement not covered" ></span>
1608
- <span class="cstat-no" title="statement not covered" >/**</span>
1609
- <span class="cstat-no" title="statement not covered" > * Ledger configuration options</span>
1610
- <span class="cstat-no" title="statement not covered" > */</span>
1611
- <span class="cstat-no" title="statement not covered" >interface LedgerOption {</span>
1612
- <span class="cstat-no" title="statement not covered" > id: 'hedera' | 'xrpl';</span>
1613
- <span class="cstat-no" title="statement not covered" > name: string;</span>
1614
- <span class="cstat-no" title="statement not covered" > description: string;</span>
1615
- <span class="cstat-no" title="statement not covered" > icon: string;</span>
1616
- <span class="cstat-no" title="statement not covered" >}</span>
1617
- <span class="cstat-no" title="statement not covered" ></span>
1618
- <span class="cstat-no" title="statement not covered" >/**</span>
1619
- <span class="cstat-no" title="statement not covered" > * Step configuration for dynamic step indicator.</span>
1620
- <span class="cstat-no" title="statement not covered" > * Defines the total steps and labels based on selected protocol path.</span>
1621
- <span class="cstat-no" title="statement not covered" > */</span>
1622
- <span class="cstat-no" title="statement not covered" >interface StepConfig {</span>
1623
- <span class="cstat-no" title="statement not covered" > /** Total number of steps in the current path */</span>
1624
- <span class="cstat-no" title="statement not covered" > total: number;</span>
1625
- <span class="cstat-no" title="statement not covered" > /** Labels for each step in the progress indicator */</span>
1626
- <span class="cstat-no" title="statement not covered" > labels: string[];</span>
1627
- <span class="cstat-no" title="statement not covered" >}</span>
1628
- <span class="cstat-no" title="statement not covered" ></span>
1629
- <span class="cstat-no" title="statement not covered" >/**</span>
1630
- <span class="cstat-no" title="statement not covered" > * Main wallet connection modal component.</span>
1631
- <span class="cstat-no" title="statement not covered" > * Orchestrates the multi-step connection flow.</span>
1632
- <span class="cstat-no" title="statement not covered" > */</span>
1633
- <span class="cstat-no" title="statement not covered" >@Component({</span>
1634
- <span class="cstat-no" title="statement not covered" > selector: 'hsuite-wallet-connection-modal',</span>
1635
- <span class="cstat-no" title="statement not covered" > standalone: true,</span>
1636
- <span class="cstat-no" title="statement not covered" > imports: [CommonModule, IonicModule, ConnectionMethodStepComponent, QrPairingStepComponent],</span>
1637
- <span class="cstat-no" title="statement not covered" > templateUrl: './wallet-connection-modal.component.html',</span>
1638
- <span class="cstat-no" title="statement not covered" > styleUrls: ['./wallet-connection-modal.component.scss'],</span>
1639
- <span class="cstat-no" title="statement not covered" >})</span>
1640
- <span class="cstat-no" title="statement not covered" >export class WalletConnectionModalComponent {</span>
1641
- <span class="cstat-no" title="statement not covered" > /**</span>
1642
- <span class="cstat-no" title="statement not covered" > * WalletConnect project ID (required for WalletConnect)</span>
1643
- <span class="cstat-no" title="statement not covered" > */</span>
1644
- <span class="cstat-no" title="statement not covered" > @Input() projectId?: string;</span>
1645
- <span class="cstat-no" title="statement not covered" ></span>
1646
- <span class="cstat-no" title="statement not covered" > /**</span>
1647
- <span class="cstat-no" title="statement not covered" > * App name for WalletConnect metadata</span>
1648
- <span class="cstat-no" title="statement not covered" > */</span>
1649
- <span class="cstat-no" title="statement not covered" > @Input() appName: string = 'HSuite Demo';</span>
1650
- <span class="cstat-no" title="statement not covered" ></span>
1651
- <span class="cstat-no" title="statement not covered" > /**</span>
1652
- <span class="cstat-no" title="statement not covered" > * App description for WalletConnect metadata</span>
1653
- <span class="cstat-no" title="statement not covered" > */</span>
1654
- <span class="cstat-no" title="statement not covered" > @Input() appDescription: string = 'Multi-chain wallet connection';</span>
1655
- <span class="cstat-no" title="statement not covered" ></span>
1656
- <span class="cstat-no" title="statement not covered" > /**</span>
1657
- <span class="cstat-no" title="statement not covered" > * Wallet URL for HSuite Native connection</span>
1658
- <span class="cstat-no" title="statement not covered" > */</span>
1659
- <span class="cstat-no" title="statement not covered" > @Input() walletUrl: string = DEFAULT_WALLET_URL;</span>
1660
- <span class="cstat-no" title="statement not covered" ></span>
1661
- <span class="cstat-no" title="statement not covered" > /**</span>
1662
- <span class="cstat-no" title="statement not covered" > * Event emitted when connection is successful</span>
1663
- <span class="cstat-no" title="statement not covered" > */</span>
1664
- <span class="cstat-no" title="statement not covered" > @Output() connected = new EventEmitter&lt;unknown&gt;();</span>
1665
- <span class="cstat-no" title="statement not covered" ></span>
1666
- <span class="cstat-no" title="statement not covered" > // Note: answerScannerRequested removed - new Nostr-first flow doesn't need answer scanning</span>
1667
- <span class="cstat-no" title="statement not covered" ></span>
1668
- <span class="cstat-no" title="statement not covered" > private readonly platform = inject(Platform);</span>
1669
- <span class="cstat-no" title="statement not covered" > private readonly p2pNativeProvider = inject(P2PNativeProvider);</span>
1670
- <span class="cstat-no" title="statement not covered" ></span>
1671
- <span class="cstat-no" title="statement not covered" > // Step management</span>
1672
- <span class="cstat-no" title="statement not covered" > readonly currentStep = signal&lt;ConnectionStep&gt;(ConnectionStep.NetworkSelection);</span>
1673
- <span class="cstat-no" title="statement not covered" > readonly ConnectionStep = ConnectionStep;</span>
1674
- <span class="cstat-no" title="statement not covered" ></span>
1675
- <span class="cstat-no" title="statement not covered" > // Selection state</span>
1676
- <span class="cstat-no" title="statement not covered" > readonly selectedNetwork = signal&lt;string&gt;('testnet');</span>
1677
- <span class="cstat-no" title="statement not covered" > readonly selectedProtocol = signal&lt;'hsuite-native' | 'walletconnect' | null&gt;(null);</span>
1678
- <span class="cstat-no" title="statement not covered" > readonly selectedConnectionMethod = signal&lt;ConnectionMethod | null&gt;(null);</span>
1679
- <span class="cstat-no" title="statement not covered" > readonly selectedLedger = signal&lt;'hedera' | 'xrpl' | null&gt;(null);</span>
1680
- <span class="cstat-no" title="statement not covered" ></span>
1681
- <span class="cstat-no" title="statement not covered" > // Loading state</span>
1682
- <span class="cstat-no" title="statement not covered" > readonly isConnecting = signal&lt;boolean&gt;(false);</span>
1683
- <span class="cstat-no" title="statement not covered" > readonly connectionError = signal&lt;string | null&gt;(null);</span>
1684
- <span class="cstat-no" title="statement not covered" ></span>
1685
- <span class="cstat-no" title="statement not covered" > // QR Pairing state</span>
1686
- <span class="cstat-no" title="statement not covered" > readonly pairingOffer = signal&lt;string&gt;('');</span>
1687
- <span class="cstat-no" title="statement not covered" > readonly isGeneratingOffer = signal&lt;boolean&gt;(false);</span>
1688
- <span class="cstat-no" title="statement not covered" ></span>
1689
- <span class="cstat-no" title="statement not covered" > /**</span>
1690
- <span class="cstat-no" title="statement not covered" > * Indicates we're waiting for the wallet to scan the QR and connect via Nostr.</span>
1691
- <span class="cstat-no" title="statement not covered" > */</span>
1692
- <span class="cstat-no" title="statement not covered" > readonly isWaitingForWallet = signal&lt;boolean&gt;(false);</span>
1693
- <span class="cstat-no" title="statement not covered" ></span>
1694
- <span class="cstat-no" title="statement not covered" > /**</span>
1695
- <span class="cstat-no" title="statement not covered" > * Indicates we're waiting for the wallet user to approve the session.</span>
1696
- <span class="cstat-no" title="statement not covered" > * Nostr connection is established, but session approval is pending.</span>
1697
- <span class="cstat-no" title="statement not covered" > */</span>
1698
- <span class="cstat-no" title="statement not covered" > readonly isWaitingForApproval = signal&lt;boolean&gt;(false);</span>
1699
- <span class="cstat-no" title="statement not covered" ></span>
1700
- <span class="cstat-no" title="statement not covered" > // Platform detection</span>
1701
- <span class="cstat-no" title="statement not covered" > readonly isMobile = signal&lt;boolean&gt;(this.detectMobile());</span>
1702
- <span class="cstat-no" title="statement not covered" > readonly isExtensionAvailable = signal&lt;boolean&gt;(this.detectExtension());</span>
1703
- <span class="cstat-no" title="statement not covered" ></span>
1704
- <span class="cstat-no" title="statement not covered" > // Configuration options</span>
1705
- <span class="cstat-no" title="statement not covered" > readonly networkOptions: NetworkOption[] = [</span>
1706
- <span class="cstat-no" title="statement not covered" > {</span>
1707
- <span class="cstat-no" title="statement not covered" > id: 'mainnet',</span>
1708
- <span class="cstat-no" title="statement not covered" > name: 'Mainnet',</span>
1709
- <span class="cstat-no" title="statement not covered" > description: 'Production network with real assets',</span>
1710
- <span class="cstat-no" title="statement not covered" > icon: 'shield-checkmark',</span>
1711
- <span class="cstat-no" title="statement not covered" > },</span>
1712
- <span class="cstat-no" title="statement not covered" > {</span>
1713
- <span class="cstat-no" title="statement not covered" > id: 'testnet',</span>
1714
- <span class="cstat-no" title="statement not covered" > name: 'Testnet',</span>
1715
- <span class="cstat-no" title="statement not covered" > description: 'Test network for development',</span>
1716
- <span class="cstat-no" title="statement not covered" > icon: 'flask',</span>
1717
- <span class="cstat-no" title="statement not covered" > recommended: true,</span>
1718
- <span class="cstat-no" title="statement not covered" > },</span>
1719
- <span class="cstat-no" title="statement not covered" > ];</span>
1720
- <span class="cstat-no" title="statement not covered" ></span>
1721
- <span class="cstat-no" title="statement not covered" > readonly protocolOptions = computed&lt;ProtocolOption[]&gt;(() =&gt; {</span>
1633
+ <span class="cline-any cline-yes">10x</span>
1634
+ <span class="cline-any cline-yes">10x</span>
1635
+ <span class="cline-any cline-yes">10x</span>
1636
+ <span class="cline-any cline-yes">10x</span>
1637
+ <span class="cline-any cline-yes">10x</span>
1638
+ <span class="cline-any cline-yes">10x</span>
1639
+ <span class="cline-any cline-yes">10x</span>
1640
+ <span class="cline-any cline-yes">10x</span>
1641
+ <span class="cline-any cline-yes">10x</span>
1642
+ <span class="cline-any cline-yes">10x</span>
1643
+ <span class="cline-any cline-yes">10x</span>
1644
+ <span class="cline-any cline-yes">10x</span>
1645
+ <span class="cline-any cline-yes">10x</span>
1646
+ <span class="cline-any cline-yes">10x</span>
1647
+ <span class="cline-any cline-yes">10x</span>
1648
+ <span class="cline-any cline-yes">10x</span>
1649
+ <span class="cline-any cline-yes">10x</span>
1650
+ <span class="cline-any cline-yes">10x</span>
1651
+ <span class="cline-any cline-yes">10x</span>
1652
+ <span class="cline-any cline-yes">10x</span>
1653
+ <span class="cline-any cline-yes">10x</span>
1654
+ <span class="cline-any cline-yes">10x</span>
1655
+ <span class="cline-any cline-yes">10x</span>
1656
+ <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">/**
1657
+ * @file wallet-connection-modal.component.ts
1658
+ * @description Multi-protocol wallet connection modal with step-by-step flow
1659
+ *
1660
+ * Provides a beautiful, user-friendly interface for connecting wallets across
1661
+ * multiple protocols (HSuite Native, WalletConnect) and ledgers (Hedera, XRPL).
1662
+ *
1663
+ * Features:
1664
+ * - Step-by-step connection wizard with direct selection (no Next button)
1665
+ * - Dynamic step indicator showing only relevant steps per protocol path
1666
+ * - Network selection (Mainnet, Testnet)
1667
+ * - Protocol selection (HSuite Native vs WalletConnect)
1668
+ * - Connection method selection (Desktop or Mobile QR)
1669
+ * - Ledger selection (Hedera, XRPL) for WalletConnect
1670
+ * - QR code display for mobile P2P connections
1671
+ * - Beautiful animations and loading states
1672
+ *
1673
+ * Step Paths:
1674
+ * - HSuite Native + Desktop: Network → Protocol → Method (3 steps)
1675
+ * - HSuite Native + Mobile QR: Network → Protocol → Method → QR Pairing (4 steps)
1676
+ * - WalletConnect: Network → Protocol → Ledger → Connect (4 steps)
1677
+ */
1678
+ &nbsp;
1679
+ import { CommonModule } from '@angular/common';
1680
+ import {
1681
+ Component,
1682
+ Input,
1683
+ Output,
1684
+ EventEmitter,
1685
+ OnInit,
1686
+ signal,
1687
+ computed,
1688
+ inject,
1689
+ } from '@angular/core';
1690
+ import { getLogger } from '@hsuite/native-connect-sdk';
1691
+ import { IonicModule, ModalController, Platform } from '@ionic/angular';
1692
+ &nbsp;
1693
+ import type { WalletConnectV2Config } from '../../models/provider-types';
1694
+ import { DEFAULT_WALLET_URL } from '../../models/provider-types';
1695
+ import { P2PNativeProvider } from '../../providers/p2p-native/p2p-native.provider';
1696
+ import { UnifiedWalletService } from '../../services/unified-wallet.service';
1697
+ &nbsp;
1698
+ import {
1699
+ ConnectionMethodStepComponent,
1700
+ type ConnectionMethodOption,
1701
+ } from './connection-method-step/connection-method-step.component';
1702
+ import { QrPairingStepComponent } from './qr-pairing-step/qr-pairing-step.component';
1703
+ &nbsp;
1704
+ const logger = getLogger().scoped?.('WalletConnectionModal'<span class="branch-0 cbranch-no" title="branch not covered" >) ?? getLogger();</span>
1705
+ &nbsp;
1706
+ /**
1707
+ * Connection step enumeration for the wizard flow
1708
+ */
1709
+ enum ConnectionStep {
1710
+ NetworkSelection = 1,
1711
+ ProtocolSelection = 2,
1712
+ ConnectionMethodSelection = 3,
1713
+ LedgerSelection = 4,
1714
+ QrPairing = 5,
1715
+ ConnectionProgress = 6,
1716
+ }
1717
+ &nbsp;
1718
+ /**
1719
+ * Connection method type.
1720
+ * - desktop: Uses extension if available, otherwise opens PWA in new tab (SDK auto-selects)
1721
+ * - mobile-qr: Two-way QR scan for cross-device P2P connection
1722
+ */
1723
+ type ConnectionMethod = 'desktop' | 'mobile-qr';
1724
+ &nbsp;
1725
+ /**
1726
+ * Network configuration options
1727
+ */
1728
+ interface NetworkOption {
1729
+ id: string;
1730
+ name: string;
1731
+ description: string;
1732
+ icon?: string;
1733
+ recommended?: boolean;
1734
+ }
1735
+ &nbsp;
1736
+ /**
1737
+ * Protocol configuration options
1738
+ */
1739
+ interface ProtocolOption {
1740
+ id: 'hsuite-native' | 'walletconnect';
1741
+ name: string;
1742
+ description: string;
1743
+ icon: string;
1744
+ features: string[];
1745
+ }
1746
+ &nbsp;
1747
+ /**
1748
+ * Ledger configuration options
1749
+ */
1750
+ interface LedgerOption {
1751
+ id: 'hedera' | 'xrpl';
1752
+ name: string;
1753
+ description: string;
1754
+ icon: string;
1755
+ }
1756
+ &nbsp;
1757
+ /**
1758
+ * Step configuration for dynamic step indicator.
1759
+ * Defines the total steps and labels based on selected protocol path.
1760
+ */
1761
+ interface StepConfig {
1762
+ /** Total number of steps in the current path */
1763
+ total: number;
1764
+ /** Labels for each step in the progress indicator */
1765
+ labels: string[];
1766
+ }
1767
+ &nbsp;
1768
+ /**
1769
+ * Main wallet connection modal component.
1770
+ * Orchestrates the multi-step connection flow.
1771
+ */
1772
+ @Component({
1773
+ selector: 'hsuite-wallet-connection-modal',
1774
+ standalone: true,
1775
+ imports: [CommonModule, IonicModule, ConnectionMethodStepComponent, QrPairingStepComponent],
1776
+ templateUrl: './wallet-connection-modal.component.html',
1777
+ styleUrls: ['./wallet-connection-modal.component.scss'],
1778
+ })
1779
+ export class WalletConnectionModalComponent implements OnInit {
1780
+ /**
1781
+ * WalletConnect project ID (required for WalletConnect)
1782
+ */
1783
+ @Input() projectId?: string;
1784
+ &nbsp;
1785
+ /**
1786
+ * Pins the connection network and hides the network-selection step.
1787
+ *
1788
+ * When set to `'mainnet'` or `'testnet'`, the host dApp decides the network
1789
+ * and the user is never shown the network picker — the modal opens directly
1790
+ * on protocol selection. When omitted (default), the user chooses the network
1791
+ * as the first step.
1792
+ */
1793
+ @Input() network?: 'mainnet' | 'testnet';
1794
+ &nbsp;
1795
+ /**
1796
+ * App name for WalletConnect metadata
1797
+ */
1798
+ @Input() appName: string = 'HSuite Demo';
1799
+ &nbsp;
1800
+ /**
1801
+ * App description for WalletConnect metadata
1802
+ */
1803
+ @Input() appDescription: string = 'Multi-chain wallet connection';
1804
+ &nbsp;
1805
+ /**
1806
+ * Wallet URL for HSuite Native connection
1807
+ */
1808
+ @Input() walletUrl: string = DEFAULT_WALLET_URL;
1809
+ &nbsp;
1810
+ /**
1811
+ * Event emitted when connection is successful
1812
+ */
1813
+ @Output() connected = new EventEmitter&lt;unknown&gt;();
1814
+ &nbsp;
1815
+ // Note: answerScannerRequested removed - new Nostr-first flow doesn't need answer scanning
1816
+ &nbsp;
1817
+ private readonly platform = inject(Platform);
1818
+ private readonly p2pNativeProvider = inject(P2PNativeProvider);
1819
+ &nbsp;
1820
+ // Step management
1821
+ readonly currentStep = signal&lt;ConnectionStep&gt;(ConnectionStep.NetworkSelection);
1822
+ readonly ConnectionStep = ConnectionStep;
1823
+ &nbsp;
1824
+ // Selection state
1825
+ readonly selectedNetwork = signal&lt;string&gt;('testnet');
1826
+ readonly selectedProtocol = signal&lt;'hsuite-native' | 'walletconnect' | null&gt;(null);
1827
+ readonly selectedConnectionMethod = signal&lt;ConnectionMethod | null&gt;(null);
1828
+ readonly selectedLedger = signal&lt;'hedera' | 'xrpl' | null&gt;(null);
1829
+ &nbsp;
1830
+ // Loading state
1831
+ readonly isConnecting = signal&lt;boolean&gt;(false);
1832
+ readonly connectionError = signal&lt;string | null&gt;(null);
1833
+ &nbsp;
1834
+ // QR Pairing state
1835
+ readonly pairingOffer = signal&lt;string&gt;('');
1836
+ readonly isGeneratingOffer = signal&lt;boolean&gt;(false);
1837
+ &nbsp;
1838
+ /**
1839
+ * Indicates we're waiting for the wallet to scan the QR and connect via Nostr.
1840
+ */
1841
+ readonly isWaitingForWallet = signal&lt;boolean&gt;(false);
1842
+ &nbsp;
1843
+ /**
1844
+ * Indicates we're waiting for the wallet user to approve the session.
1845
+ * Nostr connection is established, but session approval is pending.
1846
+ */
1847
+ readonly isWaitingForApproval = signal&lt;boolean&gt;(false);
1848
+ &nbsp;
1849
+ // Platform detection
1850
+ readonly isMobile = signal&lt;boolean&gt;(this.detectMobile());
1851
+ readonly isExtensionAvailable = signal&lt;boolean&gt;(this.detectExtension());
1852
+ &nbsp;
1853
+ // Configuration options
1854
+ readonly networkOptions: NetworkOption[] = [
1855
+ {
1856
+ id: 'mainnet',
1857
+ name: 'Mainnet',
1858
+ description: 'Production network with real assets',
1859
+ icon: 'shield-checkmark',
1860
+ },
1861
+ {
1862
+ id: 'testnet',
1863
+ name: 'Testnet',
1864
+ description: 'Test network for development',
1865
+ icon: 'flask',
1866
+ recommended: true,
1867
+ },
1868
+ ];
1869
+ &nbsp;
1870
+ readonly protocolOptions = computed&lt;ProtocolOption[]&gt;(() =&gt; {
1722
1871
  <span class="cstat-no" title="statement not covered" > const options: ProtocolOption[] = [</span>
1723
1872
  <span class="cstat-no" title="statement not covered" > {</span>
1724
1873
  <span class="cstat-no" title="statement not covered" > id: 'hsuite-native',</span>
@@ -1751,30 +1900,30 @@
1751
1900
  <span class="cstat-no" title="statement not covered" > }</span>
1752
1901
  <span class="cstat-no" title="statement not covered" ></span>
1753
1902
  <span class="cstat-no" title="statement not covered" > return options;</span>
1754
- <span class="cstat-no" title="statement not covered" > });</span>
1755
- <span class="cstat-no" title="statement not covered" ></span>
1756
- <span class="cstat-no" title="statement not covered" > readonly ledgerOptions: LedgerOption[] = [</span>
1757
- <span class="cstat-no" title="statement not covered" > {</span>
1758
- <span class="cstat-no" title="statement not covered" > id: 'hedera',</span>
1759
- <span class="cstat-no" title="statement not covered" > name: 'Hedera',</span>
1760
- <span class="cstat-no" title="statement not covered" > description: 'Hedera Hashgraph network',</span>
1761
- <span class="cstat-no" title="statement not covered" > icon: 'logo-bitcoin', // Placeholder, use actual Hedera icon</span>
1762
- <span class="cstat-no" title="statement not covered" > },</span>
1763
- <span class="cstat-no" title="statement not covered" > {</span>
1764
- <span class="cstat-no" title="statement not covered" > id: 'xrpl',</span>
1765
- <span class="cstat-no" title="statement not covered" > name: 'XRP Ledger',</span>
1766
- <span class="cstat-no" title="statement not covered" > description: 'XRP Ledger network',</span>
1767
- <span class="cstat-no" title="statement not covered" > icon: 'logo-usd', // Placeholder, use actual XRPL icon</span>
1768
- <span class="cstat-no" title="statement not covered" > },</span>
1769
- <span class="cstat-no" title="statement not covered" > ];</span>
1770
- <span class="cstat-no" title="statement not covered" ></span>
1771
- <span class="cstat-no" title="statement not covered" > /**</span>
1772
- <span class="cstat-no" title="statement not covered" > * Connection method options for HSuite Native.</span>
1773
- <span class="cstat-no" title="statement not covered" > * Simplified to two options:</span>
1774
- <span class="cstat-no" title="statement not covered" > * - HSuite Wallet (desktop): SDK auto-selects extension or PWA</span>
1775
- <span class="cstat-no" title="statement not covered" > * - Mobile Wallet (QR): Cross-device P2P connection</span>
1776
- <span class="cstat-no" title="statement not covered" > */</span>
1777
- <span class="cstat-no" title="statement not covered" > readonly connectionMethodOptions = computed&lt;ConnectionMethodOption[]&gt;(() =&gt; [</span>
1903
+ });
1904
+ &nbsp;
1905
+ readonly ledgerOptions: LedgerOption[] = [
1906
+ {
1907
+ id: 'hedera',
1908
+ name: 'Hedera',
1909
+ description: 'Hedera Hashgraph network',
1910
+ icon: 'logo-bitcoin', // Placeholder, use actual Hedera icon
1911
+ },
1912
+ {
1913
+ id: 'xrpl',
1914
+ name: 'XRP Ledger',
1915
+ description: 'XRP Ledger network',
1916
+ icon: 'logo-usd', // Placeholder, use actual XRPL icon
1917
+ },
1918
+ ];
1919
+ &nbsp;
1920
+ /**
1921
+ * Connection method options for HSuite Native.
1922
+ * Simplified to two options:
1923
+ * - HSuite Wallet (desktop): SDK auto-selects extension or PWA
1924
+ * - Mobile Wallet (QR): Cross-device P2P connection
1925
+ */
1926
+ readonly connectionMethodOptions = computed&lt;ConnectionMethodOption[]&gt;(() =&gt; [
1778
1927
  <span class="cstat-no" title="statement not covered" > {</span>
1779
1928
  <span class="cstat-no" title="statement not covered" > id: 'desktop',</span>
1780
1929
  <span class="cstat-no" title="statement not covered" > name: 'HSuite Wallet',</span>
@@ -1797,10 +1946,10 @@
1797
1946
  <span class="cstat-no" title="statement not covered" > recommended: this.isMobile(),</span>
1798
1947
  <span class="cstat-no" title="statement not covered" > features: ['Cross-device', 'P2P', 'No server needed'],</span>
1799
1948
  <span class="cstat-no" title="statement not covered" > },</span>
1800
- <span class="cstat-no" title="statement not covered" > ]);</span>
1801
- <span class="cstat-no" title="statement not covered" ></span>
1802
- <span class="cstat-no" title="statement not covered" > // Computed properties</span>
1803
- <span class="cstat-no" title="statement not covered" > readonly canProceed = computed(() =&gt; {</span>
1949
+ ]);
1950
+ &nbsp;
1951
+ // Computed properties
1952
+ readonly canProceed = computed(() =&gt; {
1804
1953
  <span class="cstat-no" title="statement not covered" > const step = this.currentStep();</span>
1805
1954
  <span class="cstat-no" title="statement not covered" > switch (step) {</span>
1806
1955
  <span class="cstat-no" title="statement not covered" > case ConnectionStep.NetworkSelection:</span>
@@ -1814,9 +1963,9 @@
1814
1963
  <span class="cstat-no" title="statement not covered" > default:</span>
1815
1964
  <span class="cstat-no" title="statement not covered" > return false;</span>
1816
1965
  <span class="cstat-no" title="statement not covered" > }</span>
1817
- <span class="cstat-no" title="statement not covered" > });</span>
1818
- <span class="cstat-no" title="statement not covered" ></span>
1819
- <span class="cstat-no" title="statement not covered" > readonly stepTitle = computed(() =&gt; {</span>
1966
+ });
1967
+ &nbsp;
1968
+ readonly stepTitle = computed(() =&gt; {
1820
1969
  <span class="cstat-no" title="statement not covered" > const step = this.currentStep();</span>
1821
1970
  <span class="cstat-no" title="statement not covered" > switch (step) {</span>
1822
1971
  <span class="cstat-no" title="statement not covered" > case ConnectionStep.NetworkSelection:</span>
@@ -1834,178 +1983,220 @@
1834
1983
  <span class="cstat-no" title="statement not covered" > default:</span>
1835
1984
  <span class="cstat-no" title="statement not covered" > return '';</span>
1836
1985
  <span class="cstat-no" title="statement not covered" > }</span>
1837
- <span class="cstat-no" title="statement not covered" > });</span>
1838
- <span class="cstat-no" title="statement not covered" ></span>
1839
- <span class="cstat-no" title="statement not covered" > /**</span>
1840
- <span class="cstat-no" title="statement not covered" > * Dynamic step configuration based on selected protocol and connection method.</span>
1841
- <span class="cstat-no" title="statement not covered" > * Returns the total number of steps and labels for the progress indicator.</span>
1842
- <span class="cstat-no" title="statement not covered" > *</span>
1843
- <span class="cstat-no" title="statement not covered" > * Step Paths:</span>
1844
- <span class="cstat-no" title="statement not covered" > * - Initial (no protocol): 3 placeholder steps</span>
1845
- <span class="cstat-no" title="statement not covered" > * - HSuite Native + Desktop: 3 steps (Network, Protocol, Method)</span>
1846
- <span class="cstat-no" title="statement not covered" > * - HSuite Native + Mobile QR: 4 steps (Network, Protocol, Method, Pair)</span>
1847
- <span class="cstat-no" title="statement not covered" > * - WalletConnect: 4 steps (Network, Protocol, Ledger, Connect)</span>
1848
- <span class="cstat-no" title="statement not covered" > */</span>
1849
- <span class="cstat-no" title="statement not covered" > readonly stepConfig = computed&lt;StepConfig&gt;(() =&gt; {</span>
1850
- <span class="cstat-no" title="statement not covered" > const protocol = this.selectedProtocol();</span>
1851
- <span class="cstat-no" title="statement not covered" > const method = this.selectedConnectionMethod();</span>
1852
- <span class="cstat-no" title="statement not covered" ></span>
1853
- <span class="cstat-no" title="statement not covered" > // Initial state: show 3 placeholder steps until protocol is selected</span>
1854
- <span class="cstat-no" title="statement not covered" > if (!protocol) {</span>
1855
- <span class="cstat-no" title="statement not covered" > return { total: 3, labels: ['Network', 'Protocol', '...'] };</span>
1856
- <span class="cstat-no" title="statement not covered" > }</span>
1857
- <span class="cstat-no" title="statement not covered" ></span>
1858
- <span class="cstat-no" title="statement not covered" > // HSuite Native path</span>
1859
- <span class="cstat-no" title="statement not covered" > if (protocol === 'hsuite-native') {</span>
1860
- <span class="cstat-no" title="statement not covered" > // If mobile QR is selected, we need 4 steps</span>
1861
- <span class="cstat-no" title="statement not covered" > if (method === 'mobile-qr') {</span>
1862
- <span class="cstat-no" title="statement not covered" > return { total: 4, labels: ['Network', 'Protocol', 'Method', 'Pair'] };</span>
1863
- <span class="cstat-no" title="statement not covered" > }</span>
1864
- <span class="cstat-no" title="statement not covered" > // Desktop connection is 3 steps (connects immediately after method selection)</span>
1865
- <span class="cstat-no" title="statement not covered" > return { total: 3, labels: ['Network', 'Protocol', 'Method'] };</span>
1986
+ });
1987
+ &nbsp;
1988
+ /**
1989
+ * Dynamic step configuration based on selected protocol and connection method.
1990
+ * Returns the total number of steps and labels for the progress indicator.
1991
+ *
1992
+ * Step Paths:
1993
+ * - Initial (no protocol): 3 placeholder steps
1994
+ * - HSuite Native + Desktop: 3 steps (Network, Protocol, Method)
1995
+ * - HSuite Native + Mobile QR: 4 steps (Network, Protocol, Method, Pair)
1996
+ * - WalletConnect: 4 steps (Network, Protocol, Ledger, Connect)
1997
+ */
1998
+ readonly stepConfig = computed&lt;StepConfig&gt;(() =&gt; {
1999
+ const protocol = this.selectedProtocol();
2000
+ const method = this.selectedConnectionMethod();
2001
+ &nbsp;
2002
+ let base: StepConfig;
2003
+ &nbsp;
2004
+ // Initial state: show 3 placeholder steps until protocol is selected
2005
+ if (!protocol) <span class="branch-0 cbranch-no" title="branch not covered" >{</span>
2006
+ <span class="cstat-no" title="statement not covered" > base = { total: 3, labels: ['Network', 'Protocol', '...'] };</span>
2007
+ } else if (protocol === 'hsuite-native') {
2008
+ // HSuite Native path
2009
+ base =
2010
+ method === <span class="branch-0 cbranch-no" title="branch not covered" >'mobile-qr'</span>
2011
+ <span class="cstat-no" title="statement not covered" > ? // Mobile QR needs 4 steps</span>
2012
+ <span class="cstat-no" title="statement not covered" > { total: 4, labels: ['Network', 'Protocol', 'Method', 'Pair'] }</span>
2013
+ : // Desktop connects immediately after method selection (3 steps)
2014
+ { total: 3, labels: ['Network', 'Protocol', 'Method'] };
2015
+ <span class="branch-0 cbranch-no" title="branch not covered" > } else {</span>
2016
+ <span class="cstat-no" title="statement not covered" > // WalletConnect path: 4 steps</span>
2017
+ <span class="cstat-no" title="statement not covered" > base = { total: 4, labels: ['Network', 'Protocol', 'Ledger', 'Connect'] };</span>
1866
2018
  <span class="cstat-no" title="statement not covered" > }</span>
1867
- <span class="cstat-no" title="statement not covered" ></span>
1868
- <span class="cstat-no" title="statement not covered" > // WalletConnect path: 4 steps</span>
1869
- <span class="cstat-no" title="statement not covered" > return { total: 4, labels: ['Network', 'Protocol', 'Ledger', 'Connect'] };</span>
1870
- <span class="cstat-no" title="statement not covered" > });</span>
1871
- <span class="cstat-no" title="statement not covered" ></span>
1872
- <span class="cstat-no" title="statement not covered" > /**</span>
1873
- <span class="cstat-no" title="statement not covered" > * Maps the internal ConnectionStep enum to display position (1-based).</span>
1874
- <span class="cstat-no" title="statement not covered" > * Different protocol paths have different step mappings.</span>
1875
- <span class="cstat-no" title="statement not covered" > */</span>
1876
- <span class="cstat-no" title="statement not covered" > readonly displayStep = computed&lt;number&gt;(() =&gt; {</span>
1877
- <span class="cstat-no" title="statement not covered" > const step = this.currentStep();</span>
1878
- <span class="cstat-no" title="statement not covered" > // Protocol could be used for protocol-specific step mapping in the future</span>
1879
- <span class="cstat-no" title="statement not covered" > const _protocol = this.selectedProtocol();</span>
1880
- <span class="cstat-no" title="statement not covered" ></span>
1881
- <span class="cstat-no" title="statement not covered" > // Map internal step to display position based on protocol path</span>
1882
- <span class="cstat-no" title="statement not covered" > switch (step) {</span>
1883
- <span class="cstat-no" title="statement not covered" > case ConnectionStep.NetworkSelection:</span>
2019
+ &nbsp;
2020
+ // When the network is pinned by the host dApp the network step is never
2021
+ // shown drop it from the indicator so the numbering stays accurate.
2022
+ if (this.network) {
2023
+ return { total: base.total - 1, labels: base.labels.slice(1) };
2024
+ }
2025
+ return base;
2026
+ });
2027
+ &nbsp;
2028
+ /**
2029
+ * Maps the internal ConnectionStep enum to display position (1-based).
2030
+ * Different protocol paths have different step mappings.
2031
+ */
2032
+ readonly displayStep = computed&lt;number&gt;(() =&gt; {
2033
+ const step = this.currentStep();
2034
+ // Protocol could be used for protocol-specific step mapping in the future
2035
+ const _protocol = this.selectedProtocol();
2036
+ &nbsp;
2037
+ // When the network is pinned the network step is removed, so every
2038
+ // subsequent step shifts down one position in the indicator.
2039
+ const networkOffset = this.network ? <span class="branch-0 cbranch-no" title="branch not covered" >1 : 0;</span>
2040
+ &nbsp;
2041
+ // Map internal step to display position based on protocol path
2042
+ switch (step) {
2043
+ <span class="branch-0 cbranch-no" title="branch not covered" > case ConnectionStep.NetworkSelection:</span>
1884
2044
  <span class="cstat-no" title="statement not covered" > return 1;</span>
1885
- <span class="cstat-no" title="statement not covered" > case ConnectionStep.ProtocolSelection:</span>
1886
- <span class="cstat-no" title="statement not covered" > return 2;</span>
1887
- <span class="cstat-no" title="statement not covered" > case ConnectionStep.ConnectionMethodSelection:</span>
1888
- <span class="cstat-no" title="statement not covered" > return 3;</span>
1889
- <span class="cstat-no" title="statement not covered" > case ConnectionStep.LedgerSelection:</span>
2045
+ case ConnectionStep.ProtocolSelection:
2046
+ return 2 - networkOffset;
2047
+ <span class="branch-0 cbranch-no" title="branch not covered" > case ConnectionStep.ConnectionMethodSelection:</span>
2048
+ <span class="cstat-no" title="statement not covered" > return 3 - networkOffset;</span>
2049
+ <span class="branch-0 cbranch-no" title="branch not covered" > case ConnectionStep.LedgerSelection:</span>
1890
2050
  <span class="cstat-no" title="statement not covered" > // WalletConnect ledger selection is step 3</span>
1891
- <span class="cstat-no" title="statement not covered" > return 3;</span>
1892
- <span class="cstat-no" title="statement not covered" > case ConnectionStep.QrPairing:</span>
2051
+ <span class="cstat-no" title="statement not covered" > return 3 - networkOffset;</span>
2052
+ <span class="branch-0 cbranch-no" title="branch not covered" > case ConnectionStep.QrPairing:</span>
1893
2053
  <span class="cstat-no" title="statement not covered" > // QR pairing is step 4 for both paths that use it</span>
1894
- <span class="cstat-no" title="statement not covered" > return 4;</span>
1895
- <span class="cstat-no" title="statement not covered" > case ConnectionStep.ConnectionProgress:</span>
2054
+ <span class="cstat-no" title="statement not covered" > return 4 - networkOffset;</span>
2055
+ <span class="branch-0 cbranch-no" title="branch not covered" > case ConnectionStep.ConnectionProgress:</span>
1896
2056
  <span class="cstat-no" title="statement not covered" > // Connection progress is always the last step</span>
1897
2057
  <span class="cstat-no" title="statement not covered" > return this.stepConfig().total;</span>
1898
- <span class="cstat-no" title="statement not covered" > default:</span>
2058
+ <span class="branch-0 cbranch-no" title="branch not covered" > default:</span>
1899
2059
  <span class="cstat-no" title="statement not covered" > return 1;</span>
2060
+ }
2061
+ });
2062
+ &nbsp;
2063
+ /**
2064
+ * Whether a back affordance should be offered for the current step.
2065
+ * The first reachable step has no back target — that is protocol selection
2066
+ * when the network is pinned, otherwise network selection. The connection
2067
+ * progress step manages its own retry navigation instead.
2068
+ */
2069
+ readonly canGoBack = computed&lt;boolean&gt;(() =&gt; {
2070
+ const step = this.currentStep();
2071
+ if (step === ConnectionStep.ConnectionProgress) <span class="branch-0 cbranch-no" title="branch not covered" >{</span>
2072
+ <span class="cstat-no" title="statement not covered" > return false;</span>
1900
2073
  <span class="cstat-no" title="statement not covered" > }</span>
1901
- <span class="cstat-no" title="statement not covered" > });</span>
1902
- <span class="cstat-no" title="statement not covered" ></span>
1903
- <span class="cstat-no" title="statement not covered" > /**</span>
1904
- <span class="cstat-no" title="statement not covered" > *</span>
1905
- <span class="cstat-no" title="statement not covered" > * @param modalController</span>
1906
- <span class="cstat-no" title="statement not covered" > * @param unifiedWalletService</span>
1907
- <span class="cstat-no" title="statement not covered" > */</span>
1908
- <span class="cstat-no" title="statement not covered" > constructor(</span>
1909
- <span class="cstat-no" title="statement not covered" > private modalController: ModalController,</span>
1910
- <span class="cstat-no" title="statement not covered" > private unifiedWalletService: UnifiedWalletService,</span>
1911
- <span class="cstat-no" title="statement not covered" > ) {</span>
1912
- <span class="cstat-no" title="statement not covered" > // Set up mobile provider connection callback</span>
1913
- <span class="cstat-no" title="statement not covered" > this.p2pNativeProvider.onPeerConnected(() =&gt; {</span>
2074
+ const firstStep = this.network
2075
+ ? <span class="branch-0 cbranch-no" title="branch not covered" >ConnectionStep.ProtocolSelection</span>
2076
+ <span class="cstat-no" title="statement not covered" > : ConnectionStep.NetworkSelection;</span>
2077
+ return step &gt; firstStep;
2078
+ });
2079
+ &nbsp;
2080
+ /**
2081
+ *
2082
+ * @param modalController
2083
+ * @param unifiedWalletService
2084
+ */
2085
+ constructor(
2086
+ private modalController: ModalController,
2087
+ private unifiedWalletService: UnifiedWalletService,
2088
+ ) {
2089
+ // Set up mobile provider connection callback
2090
+ this.p2pNativeProvider.onPeerConnected(() =&gt; {
1914
2091
  <span class="cstat-no" title="statement not covered" > this.onMobileConnected();</span>
1915
- <span class="cstat-no" title="statement not covered" > });</span>
1916
- <span class="cstat-no" title="statement not covered" > }</span>
1917
- <span class="cstat-no" title="statement not covered" ></span>
1918
- <span class="cstat-no" title="statement not covered" > /**</span>
1919
- <span class="cstat-no" title="statement not covered" > * Select a network option (internal, use selectNetworkAndProceed for UI)</span>
1920
- <span class="cstat-no" title="statement not covered" > * @param networkId</span>
1921
- <span class="cstat-no" title="statement not covered" > */</span>
1922
- <span class="cstat-no" title="statement not covered" > selectNetwork(networkId: string): void {</span>
1923
- <span class="cstat-no" title="statement not covered" > this.selectedNetwork.set(networkId);</span>
1924
- <span class="cstat-no" title="statement not covered" > }</span>
1925
- <span class="cstat-no" title="statement not covered" ></span>
1926
- <span class="cstat-no" title="statement not covered" > /**</span>
1927
- <span class="cstat-no" title="statement not covered" > * Select a network and automatically proceed to the next step.</span>
1928
- <span class="cstat-no" title="statement not covered" > * This enables direct selection behavior without requiring a "Next" button.</span>
1929
- <span class="cstat-no" title="statement not covered" > * @param networkId - The network ID to select ('mainnet' or 'testnet')</span>
1930
- <span class="cstat-no" title="statement not covered" > */</span>
1931
- <span class="cstat-no" title="statement not covered" > selectNetworkAndProceed(networkId: string): void {</span>
2092
+ });
2093
+ }
2094
+ &nbsp;
2095
+ /**
2096
+ * Apply the pinned network (if any) before the first render.
2097
+ *
2098
+ * When the host dApp provides a {@link network}, lock the selection to it and
2099
+ * skip straight to protocol selection so the user never sees — and cannot
2100
+ * change — the network. With no input, the modal opens on network selection.
2101
+ */
2102
+ ngOnInit(): void {
2103
+ if (this.network) {
2104
+ this.selectedNetwork.set(this.network);
2105
+ this.currentStep.set(ConnectionStep.ProtocolSelection);
2106
+ }
2107
+ }
2108
+ &nbsp;
2109
+ /**
2110
+ * Select a network option (internal, use selectNetworkAndProceed for UI)
2111
+ * @param networkId
2112
+ */
2113
+ <span class="fstat-no" title="function not covered" > selectNetwork(networkId: string): void {</span>
1932
2114
  <span class="cstat-no" title="statement not covered" > this.selectedNetwork.set(networkId);</span>
1933
- <span class="cstat-no" title="statement not covered" > // Auto-advance to protocol selection</span>
1934
- <span class="cstat-no" title="statement not covered" > this.currentStep.set(ConnectionStep.ProtocolSelection);</span>
1935
2115
  <span class="cstat-no" title="statement not covered" > }</span>
1936
- <span class="cstat-no" title="statement not covered" ></span>
1937
- <span class="cstat-no" title="statement not covered" > /**</span>
1938
- <span class="cstat-no" title="statement not covered" > * Select a protocol option (internal, use selectProtocolAndProceed for UI)</span>
1939
- <span class="cstat-no" title="statement not covered" > * @param protocolId</span>
1940
- <span class="cstat-no" title="statement not covered" > */</span>
1941
- <span class="cstat-no" title="statement not covered" > selectProtocol(protocolId: 'hsuite-native' | 'walletconnect'): void {</span>
1942
- <span class="cstat-no" title="statement not covered" > this.selectedProtocol.set(protocolId);</span>
1943
- <span class="cstat-no" title="statement not covered" > }</span>
1944
- <span class="cstat-no" title="statement not covered" ></span>
1945
- <span class="cstat-no" title="statement not covered" > /**</span>
1946
- <span class="cstat-no" title="statement not covered" > * Select a protocol and automatically proceed to the appropriate next step.</span>
1947
- <span class="cstat-no" title="statement not covered" > * - HSuite Native → Connection Method Selection</span>
1948
- <span class="cstat-no" title="statement not covered" > * - WalletConnect → Ledger Selection</span>
1949
- <span class="cstat-no" title="statement not covered" > * @param protocolId - The protocol ID to select</span>
1950
- <span class="cstat-no" title="statement not covered" > */</span>
1951
- <span class="cstat-no" title="statement not covered" > selectProtocolAndProceed(protocolId: 'hsuite-native' | 'walletconnect'): void {</span>
1952
- <span class="cstat-no" title="statement not covered" > this.selectedProtocol.set(protocolId);</span>
1953
- <span class="cstat-no" title="statement not covered" ></span>
1954
- <span class="cstat-no" title="statement not covered" > if (protocolId === 'hsuite-native') {</span>
1955
- <span class="cstat-no" title="statement not covered" > // HSuite Native: Go to connection method selection</span>
1956
- <span class="cstat-no" title="statement not covered" > this.currentStep.set(ConnectionStep.ConnectionMethodSelection);</span>
1957
- <span class="cstat-no" title="statement not covered" > } else {</span>
2116
+ &nbsp;
2117
+ /**
2118
+ * Select a network and automatically proceed to the next step.
2119
+ * This enables direct selection behavior without requiring a "Next" button.
2120
+ * @param networkId - The network ID to select ('mainnet' or 'testnet')
2121
+ */
2122
+ selectNetworkAndProceed(networkId: string): void {
2123
+ this.selectedNetwork.set(networkId);
2124
+ // Auto-advance to protocol selection
2125
+ this.currentStep.set(ConnectionStep.ProtocolSelection);
2126
+ }
2127
+ &nbsp;
2128
+ /**
2129
+ * Select a protocol option (internal, use selectProtocolAndProceed for UI)
2130
+ * @param protocolId
2131
+ */
2132
+ selectProtocol(protocolId: 'hsuite-native' | 'walletconnect'): void {
2133
+ this.selectedProtocol.set(protocolId);
2134
+ }
2135
+ &nbsp;
2136
+ /**
2137
+ * Select a protocol and automatically proceed to the appropriate next step.
2138
+ * - HSuite Native → Connection Method Selection
2139
+ * - WalletConnect → Ledger Selection
2140
+ * @param protocolId - The protocol ID to select
2141
+ */
2142
+ selectProtocolAndProceed(protocolId: 'hsuite-native' | 'walletconnect'): void {
2143
+ this.selectedProtocol.set(protocolId);
2144
+ &nbsp;
2145
+ if (protocolId === 'hsuite-native') {
2146
+ // HSuite Native: Go to connection method selection
2147
+ this.currentStep.set(ConnectionStep.ConnectionMethodSelection);
2148
+ <span class="branch-0 cbranch-no" title="branch not covered" > } else {</span>
1958
2149
  <span class="cstat-no" title="statement not covered" > // WalletConnect: Go to ledger selection</span>
1959
2150
  <span class="cstat-no" title="statement not covered" > this.currentStep.set(ConnectionStep.LedgerSelection);</span>
1960
2151
  <span class="cstat-no" title="statement not covered" > }</span>
1961
- <span class="cstat-no" title="statement not covered" > }</span>
1962
- <span class="cstat-no" title="statement not covered" ></span>
1963
- <span class="cstat-no" title="statement not covered" > /**</span>
1964
- <span class="cstat-no" title="statement not covered" > * Select a connection method (internal)</span>
1965
- <span class="cstat-no" title="statement not covered" > * @param methodId</span>
1966
- <span class="cstat-no" title="statement not covered" > */</span>
1967
- <span class="cstat-no" title="statement not covered" > selectConnectionMethod(methodId: string): void {</span>
1968
- <span class="cstat-no" title="statement not covered" > this.selectedConnectionMethod.set(methodId as ConnectionMethod);</span>
1969
- <span class="cstat-no" title="statement not covered" > }</span>
1970
- <span class="cstat-no" title="statement not covered" ></span>
1971
- <span class="cstat-no" title="statement not covered" > /**</span>
1972
- <span class="cstat-no" title="statement not covered" > * Handle connection method selection from step component.</span>
1973
- <span class="cstat-no" title="statement not covered" > * Automatically proceeds to connect or QR pairing based on method.</span>
1974
- <span class="cstat-no" title="statement not covered" > * @param methodId</span>
1975
- <span class="cstat-no" title="statement not covered" > */</span>
1976
- <span class="cstat-no" title="statement not covered" > onConnectionMethodSelected(methodId: string): void {</span>
2152
+ }
2153
+ &nbsp;
2154
+ /**
2155
+ * Select a connection method (internal)
2156
+ * @param methodId
2157
+ */
2158
+ selectConnectionMethod(methodId: string): void {
2159
+ this.selectedConnectionMethod.set(methodId as ConnectionMethod);
2160
+ }
2161
+ &nbsp;
2162
+ /**
2163
+ * Handle connection method selection from step component.
2164
+ * Automatically proceeds to connect or QR pairing based on method.
2165
+ * @param methodId
2166
+ */
2167
+ <span class="fstat-no" title="function not covered" > onConnectionMethodSelected(methodId: string): void {</span>
1977
2168
  <span class="cstat-no" title="statement not covered" > this.selectConnectionMethod(methodId);</span>
1978
2169
  <span class="cstat-no" title="statement not covered" > void this.next();</span>
1979
2170
  <span class="cstat-no" title="statement not covered" > }</span>
1980
- <span class="cstat-no" title="statement not covered" ></span>
1981
- <span class="cstat-no" title="statement not covered" > /**</span>
1982
- <span class="cstat-no" title="statement not covered" > * Select a ledger option (internal, use selectLedgerAndConnect for UI)</span>
1983
- <span class="cstat-no" title="statement not covered" > * @param ledgerId</span>
1984
- <span class="cstat-no" title="statement not covered" > */</span>
1985
- <span class="cstat-no" title="statement not covered" > selectLedger(ledgerId: 'hedera' | 'xrpl'): void {</span>
2171
+ &nbsp;
2172
+ /**
2173
+ * Select a ledger option (internal, use selectLedgerAndConnect for UI)
2174
+ * @param ledgerId
2175
+ */
2176
+ <span class="fstat-no" title="function not covered" > selectLedger(ledgerId: 'hedera' | 'xrpl'): void {</span>
1986
2177
  <span class="cstat-no" title="statement not covered" > this.selectedLedger.set(ledgerId);</span>
1987
2178
  <span class="cstat-no" title="statement not covered" > }</span>
1988
- <span class="cstat-no" title="statement not covered" ></span>
1989
- <span class="cstat-no" title="statement not covered" > /**</span>
1990
- <span class="cstat-no" title="statement not covered" > * Select a ledger and automatically initiate connection.</span>
1991
- <span class="cstat-no" title="statement not covered" > * This enables direct selection behavior for WalletConnect ledger step.</span>
1992
- <span class="cstat-no" title="statement not covered" > * @param ledgerId - The ledger ID to select ('hedera' or 'xrpl')</span>
1993
- <span class="cstat-no" title="statement not covered" > */</span>
1994
- <span class="cstat-no" title="statement not covered" > selectLedgerAndConnect(ledgerId: 'hedera' | 'xrpl'): void {</span>
2179
+ &nbsp;
2180
+ /**
2181
+ * Select a ledger and automatically initiate connection.
2182
+ * This enables direct selection behavior for WalletConnect ledger step.
2183
+ * @param ledgerId - The ledger ID to select ('hedera' or 'xrpl')
2184
+ */
2185
+ <span class="fstat-no" title="function not covered" > selectLedgerAndConnect(ledgerId: 'hedera' | 'xrpl'): void {</span>
1995
2186
  <span class="cstat-no" title="statement not covered" > this.selectedLedger.set(ledgerId);</span>
1996
2187
  <span class="cstat-no" title="statement not covered" > // Auto-connect with the selected ledger</span>
1997
2188
  <span class="cstat-no" title="statement not covered" > void this.connect();</span>
1998
2189
  <span class="cstat-no" title="statement not covered" > }</span>
1999
- <span class="cstat-no" title="statement not covered" ></span>
2000
- <span class="cstat-no" title="statement not covered" > /**</span>
2001
- <span class="cstat-no" title="statement not covered" > * Proceed to the next step in the wizard</span>
2002
- <span class="cstat-no" title="statement not covered" > */</span>
2003
- <span class="cstat-no" title="statement not covered" > async next(): Promise&lt;void&gt; {</span>
2004
- <span class="cstat-no" title="statement not covered" > const currentStep = this.currentStep();</span>
2005
- <span class="cstat-no" title="statement not covered" ></span>
2006
- <span class="cstat-no" title="statement not covered" > if (currentStep === ConnectionStep.NetworkSelection) {</span>
2190
+ &nbsp;
2191
+ /**
2192
+ * Proceed to the next step in the wizard
2193
+ */
2194
+ async next(): Promise&lt;void&gt; {
2195
+ const currentStep = this.currentStep();
2196
+ &nbsp;
2197
+ if (currentStep === ConnectionStep.NetworkSelection) <span class="branch-0 cbranch-no" title="branch not covered" >{</span>
2007
2198
  <span class="cstat-no" title="statement not covered" > this.currentStep.set(ConnectionStep.ProtocolSelection);</span>
2008
- <span class="cstat-no" title="statement not covered" > } else if (currentStep === ConnectionStep.ProtocolSelection) {</span>
2199
+ } else if (currentStep === ConnectionStep.ProtocolSelection) <span class="branch-0 cbranch-no" title="branch not covered" >{</span>
2009
2200
  <span class="cstat-no" title="statement not covered" > const protocol = this.selectedProtocol();</span>
2010
2201
  <span class="cstat-no" title="statement not covered" > if (protocol === 'hsuite-native') {</span>
2011
2202
  <span class="cstat-no" title="statement not covered" > // HSuite Native: Show connection method selection</span>
@@ -2014,29 +2205,33 @@
2014
2205
  <span class="cstat-no" title="statement not covered" > // WalletConnect: Show ledger selection</span>
2015
2206
  <span class="cstat-no" title="statement not covered" > this.currentStep.set(ConnectionStep.LedgerSelection);</span>
2016
2207
  <span class="cstat-no" title="statement not covered" > }</span>
2017
- <span class="cstat-no" title="statement not covered" > } else if (currentStep === ConnectionStep.ConnectionMethodSelection) {</span>
2018
- <span class="cstat-no" title="statement not covered" > const method = this.selectedConnectionMethod();</span>
2019
- <span class="cstat-no" title="statement not covered" > if (method === 'mobile-qr') {</span>
2208
+ } else if (currentStep === ConnectionStep.ConnectionMethodSelection) {
2209
+ const method = this.selectedConnectionMethod();
2210
+ if (method === 'mobile-qr') <span class="branch-0 cbranch-no" title="branch not covered" >{</span>
2020
2211
  <span class="cstat-no" title="statement not covered" > // Mobile QR: Show QR pairing step</span>
2021
2212
  <span class="cstat-no" title="statement not covered" > await this.initiateQrPairing();</span>
2022
- <span class="cstat-no" title="statement not covered" > } else {</span>
2023
- <span class="cstat-no" title="statement not covered" > // Desktop: Connect directly (SDK auto-selects extension or PWA)</span>
2024
- <span class="cstat-no" title="statement not covered" > await this.connect();</span>
2025
- <span class="cstat-no" title="statement not covered" > }</span>
2026
- <span class="cstat-no" title="statement not covered" > } else if (currentStep === ConnectionStep.LedgerSelection) {</span>
2213
+ } else {
2214
+ // Desktop: Connect directly (SDK auto-selects extension or PWA)
2215
+ await this.connect();
2216
+ }
2217
+ <span class="branch-0 cbranch-no" title="branch not covered" > } else if (currentStep === ConnectionStep.LedgerSelection) {</span>
2027
2218
  <span class="cstat-no" title="statement not covered" > // Connect with selected ledger</span>
2028
2219
  <span class="cstat-no" title="statement not covered" > await this.connect();</span>
2029
2220
  <span class="cstat-no" title="statement not covered" > }</span>
2030
- <span class="cstat-no" title="statement not covered" > }</span>
2031
- <span class="cstat-no" title="statement not covered" ></span>
2032
- <span class="cstat-no" title="statement not covered" > /**</span>
2033
- <span class="cstat-no" title="statement not covered" > * Go back to the previous step</span>
2034
- <span class="cstat-no" title="statement not covered" > */</span>
2035
- <span class="cstat-no" title="statement not covered" > back(): void {</span>
2036
- <span class="cstat-no" title="statement not covered" > const currentStep = this.currentStep();</span>
2037
- <span class="cstat-no" title="statement not covered" > if (currentStep === ConnectionStep.ProtocolSelection) {</span>
2038
- <span class="cstat-no" title="statement not covered" > this.currentStep.set(ConnectionStep.NetworkSelection);</span>
2039
- <span class="cstat-no" title="statement not covered" > } else if (currentStep === ConnectionStep.ConnectionMethodSelection) {</span>
2221
+ }
2222
+ &nbsp;
2223
+ /**
2224
+ * Go back to the previous step
2225
+ */
2226
+ back(): void {
2227
+ const currentStep = this.currentStep();
2228
+ if (currentStep === ConnectionStep.ProtocolSelection) {
2229
+ // When the network is pinned, protocol selection is the first reachable
2230
+ // step there is no network step to return to.
2231
+ if (!this.network) {
2232
+ this.currentStep.set(ConnectionStep.NetworkSelection);
2233
+ }
2234
+ <span class="branch-0 cbranch-no" title="branch not covered" > } else if (currentStep === ConnectionStep.ConnectionMethodSelection) {</span>
2040
2235
  <span class="cstat-no" title="statement not covered" > this.currentStep.set(ConnectionStep.ProtocolSelection);</span>
2041
2236
  <span class="cstat-no" title="statement not covered" > } else if (currentStep === ConnectionStep.LedgerSelection) {</span>
2042
2237
  <span class="cstat-no" title="statement not covered" > this.currentStep.set(ConnectionStep.ProtocolSelection);</span>
@@ -2059,35 +2254,35 @@
2059
2254
  <span class="cstat-no" title="statement not covered" > this.connectionError.set(null);</span>
2060
2255
  <span class="cstat-no" title="statement not covered" > this.isConnecting.set(false);</span>
2061
2256
  <span class="cstat-no" title="statement not covered" > }</span>
2062
- <span class="cstat-no" title="statement not covered" > }</span>
2063
- <span class="cstat-no" title="statement not covered" ></span>
2064
- <span class="cstat-no" title="statement not covered" > /**</span>
2065
- <span class="cstat-no" title="statement not covered" > * Connect to the selected protocol and ledger</span>
2066
- <span class="cstat-no" title="statement not covered" > */</span>
2067
- <span class="cstat-no" title="statement not covered" > private async connect(): Promise&lt;void&gt; {</span>
2068
- <span class="cstat-no" title="statement not covered" > this.currentStep.set(ConnectionStep.ConnectionProgress);</span>
2069
- <span class="cstat-no" title="statement not covered" > this.isConnecting.set(true);</span>
2070
- <span class="cstat-no" title="statement not covered" > this.connectionError.set(null);</span>
2071
- <span class="cstat-no" title="statement not covered" ></span>
2072
- <span class="cstat-no" title="statement not covered" > try {</span>
2073
- <span class="cstat-no" title="statement not covered" > const protocol = this.selectedProtocol();</span>
2074
- <span class="cstat-no" title="statement not covered" > const network = this.selectedNetwork();</span>
2075
- <span class="cstat-no" title="statement not covered" ></span>
2076
- <span class="cstat-no" title="statement not covered" > if (protocol === 'hsuite-native') {</span>
2077
- <span class="cstat-no" title="statement not covered" > // Connect to HSuite Native (multi-chain by default)</span>
2078
- <span class="cstat-no" title="statement not covered" > // Use the input walletUrl and pass targetWindow metadata for consistent window naming</span>
2079
- <span class="cstat-no" title="statement not covered" > await this.unifiedWalletService.connect('hsuite-native', {</span>
2080
- <span class="cstat-no" title="statement not covered" > type: 'hsuite-native',</span>
2081
- <span class="cstat-no" title="statement not covered" > appId: 'hsuite-demo',</span>
2082
- <span class="cstat-no" title="statement not covered" > appName: this.appName,</span>
2083
- <span class="cstat-no" title="statement not covered" > ledgerId: 'multi-chain',</span>
2084
- <span class="cstat-no" title="statement not covered" > networkId: network || 'testnet',</span>
2085
- <span class="cstat-no" title="statement not covered" > walletUrl: this.walletUrl,</span>
2086
- <span class="cstat-no" title="statement not covered" > metadata: {</span>
2087
- <span class="cstat-no" title="statement not covered" > targetWindow: 'hsuite-wallet',</span>
2088
- <span class="cstat-no" title="statement not covered" > },</span>
2089
- <span class="cstat-no" title="statement not covered" > });</span>
2090
- <span class="cstat-no" title="statement not covered" > } else if (protocol === 'walletconnect') {</span>
2257
+ }
2258
+ &nbsp;
2259
+ /**
2260
+ * Connect to the selected protocol and ledger
2261
+ */
2262
+ private async connect(): Promise&lt;void&gt; {
2263
+ this.currentStep.set(ConnectionStep.ConnectionProgress);
2264
+ this.isConnecting.set(true);
2265
+ this.connectionError.set(null);
2266
+ &nbsp;
2267
+ try {
2268
+ const protocol = this.selectedProtocol();
2269
+ const network = this.selectedNetwork();
2270
+ &nbsp;
2271
+ if (protocol === 'hsuite-native') {
2272
+ // Connect to HSuite Native (multi-chain by default)
2273
+ // Use the input walletUrl and pass targetWindow metadata for consistent window naming
2274
+ await this.unifiedWalletService.connect('hsuite-native', {
2275
+ type: 'hsuite-native',
2276
+ appId: 'hsuite-demo',
2277
+ appName: this.appName,
2278
+ ledgerId: 'multi-chain',
2279
+ networkId: <span class="branch-0 cbranch-no" title="branch not covered" >network || 'testnet',</span>
2280
+ walletUrl: this.walletUrl,
2281
+ metadata: {
2282
+ targetWindow: 'hsuite-wallet',
2283
+ },
2284
+ });
2285
+ <span class="branch-0 cbranch-no" title="branch not covered" > } else if (protocol === 'walletconnect') {</span>
2091
2286
  <span class="cstat-no" title="statement not covered" > // Connect to WalletConnect (ledger-specific)</span>
2092
2287
  <span class="cstat-no" title="statement not covered" > const ledger = this.selectedLedger();</span>
2093
2288
  <span class="cstat-no" title="statement not covered" > if (!ledger) {</span>
@@ -2111,11 +2306,11 @@
2111
2306
  <span class="cstat-no" title="statement not covered" ></span>
2112
2307
  <span class="cstat-no" title="statement not covered" > await this.unifiedWalletService.connect('walletconnect-v2', config);</span>
2113
2308
  <span class="cstat-no" title="statement not covered" > }</span>
2114
- <span class="cstat-no" title="statement not covered" ></span>
2115
- <span class="cstat-no" title="statement not covered" > // Success! Emit event and close modal</span>
2116
- <span class="cstat-no" title="statement not covered" > this.connected.emit({ protocol, network });</span>
2117
- <span class="cstat-no" title="statement not covered" > await this.modalController.dismiss({ connected: true });</span>
2118
- <span class="cstat-no" title="statement not covered" > } catch (error) {</span>
2309
+ &nbsp;
2310
+ // Success! Emit event and close modal
2311
+ this.connected.emit({ protocol, network });
2312
+ await this.modalController.dismiss({ connected: true });
2313
+ <span class="branch-0 cbranch-no" title="branch not covered" > } catch (error) {</span>
2119
2314
  <span class="cstat-no" title="statement not covered" > logger.error('Connection failed', {</span>
2120
2315
  <span class="cstat-no" title="statement not covered" > error: error instanceof Error ? error.message : String(error),</span>
2121
2316
  <span class="cstat-no" title="statement not covered" > });</span>
@@ -2126,27 +2321,27 @@
2126
2321
  <span class="cstat-no" title="statement not covered" > // Stay on ConnectionProgress to show the error and "Try Again" button</span>
2127
2322
  <span class="cstat-no" title="statement not covered" > // Don't auto-navigate away - let user click "Try Again" which calls back()</span>
2128
2323
  <span class="cstat-no" title="statement not covered" > }</span>
2129
- <span class="cstat-no" title="statement not covered" > }</span>
2130
- <span class="cstat-no" title="statement not covered" ></span>
2131
- <span class="cstat-no" title="statement not covered" > /**</span>
2132
- <span class="cstat-no" title="statement not covered" > * Close the modal without connecting</span>
2133
- <span class="cstat-no" title="statement not covered" > */</span>
2134
- <span class="cstat-no" title="statement not covered" > async dismiss(): Promise&lt;void&gt; {</span>
2324
+ }
2325
+ &nbsp;
2326
+ /**
2327
+ * Close the modal without connecting
2328
+ */
2329
+ <span class="fstat-no" title="function not covered" > async dismiss(): Promise&lt;void&gt; {</span>
2135
2330
  <span class="cstat-no" title="statement not covered" > await this.modalController.dismiss({ connected: false });</span>
2136
2331
  <span class="cstat-no" title="statement not covered" > }</span>
2137
- <span class="cstat-no" title="statement not covered" ></span>
2138
- <span class="cstat-no" title="statement not covered" > // ========== QR Pairing Methods ==========</span>
2139
- <span class="cstat-no" title="statement not covered" ></span>
2140
- <span class="cstat-no" title="statement not covered" > /**</span>
2141
- <span class="cstat-no" title="statement not covered" > * Initiate QR pairing flow for mobile connection (Nostr-first protocol).</span>
2142
- <span class="cstat-no" title="statement not covered" > *</span>
2143
- <span class="cstat-no" title="statement not covered" > * Flow:</span>
2144
- <span class="cstat-no" title="statement not covered" > * 1. Generate session invite QR code</span>
2145
- <span class="cstat-no" title="statement not covered" > * 2. Wait for wallet to scan and connect via Nostr</span>
2146
- <span class="cstat-no" title="statement not covered" > * 3. Wait for wallet user to approve session</span>
2147
- <span class="cstat-no" title="statement not covered" > * 4. P2P upgrade happens automatically in background</span>
2148
- <span class="cstat-no" title="statement not covered" > */</span>
2149
- <span class="cstat-no" title="statement not covered" > private async initiateQrPairing(): Promise&lt;void&gt; {</span>
2332
+ &nbsp;
2333
+ // ========== QR Pairing Methods ==========
2334
+ &nbsp;
2335
+ /**
2336
+ * Initiate QR pairing flow for mobile connection (Nostr-first protocol).
2337
+ *
2338
+ * Flow:
2339
+ * 1. Generate session invite QR code
2340
+ * 2. Wait for wallet to scan and connect via Nostr
2341
+ * 3. Wait for wallet user to approve session
2342
+ * 4. P2P upgrade happens automatically in background
2343
+ */
2344
+ <span class="fstat-no" title="function not covered" > private async initiateQrPairing(): Promise&lt;void&gt; {</span>
2150
2345
  <span class="cstat-no" title="statement not covered" > this.currentStep.set(ConnectionStep.QrPairing);</span>
2151
2346
  <span class="cstat-no" title="statement not covered" > this.isGeneratingOffer.set(true);</span>
2152
2347
  <span class="cstat-no" title="statement not covered" > this.connectionError.set(null);</span>
@@ -2175,12 +2370,12 @@
2175
2370
  <span class="cstat-no" title="statement not covered" > this.isGeneratingOffer.set(false);</span>
2176
2371
  <span class="cstat-no" title="statement not covered" > }</span>
2177
2372
  <span class="cstat-no" title="statement not covered" > }</span>
2178
- <span class="cstat-no" title="statement not covered" ></span>
2179
- <span class="cstat-no" title="statement not covered" > /**</span>
2180
- <span class="cstat-no" title="statement not covered" > * Wait for wallet to connect via Nostr and approve the session.</span>
2181
- <span class="cstat-no" title="statement not covered" > * This is the new single-QR flow - no answer scanning needed.</span>
2182
- <span class="cstat-no" title="statement not covered" > */</span>
2183
- <span class="cstat-no" title="statement not covered" > private async waitForWalletApproval(): Promise&lt;void&gt; {</span>
2373
+ &nbsp;
2374
+ /**
2375
+ * Wait for wallet to connect via Nostr and approve the session.
2376
+ * This is the new single-QR flow - no answer scanning needed.
2377
+ */
2378
+ <span class="fstat-no" title="function not covered" > private async waitForWalletApproval(): Promise&lt;void&gt; {</span>
2184
2379
  <span class="cstat-no" title="statement not covered" > try {</span>
2185
2380
  <span class="cstat-no" title="statement not covered" > // This blocks until wallet scans QR, connects via Nostr, and user approves</span>
2186
2381
  <span class="cstat-no" title="statement not covered" > const session = await this.p2pNativeProvider.waitForSessionApproval();</span>
@@ -2203,56 +2398,56 @@
2203
2398
  <span class="cstat-no" title="statement not covered" > this.isWaitingForApproval.set(false);</span>
2204
2399
  <span class="cstat-no" title="statement not covered" > }</span>
2205
2400
  <span class="cstat-no" title="statement not covered" > }</span>
2206
- <span class="cstat-no" title="statement not covered" ></span>
2207
- <span class="cstat-no" title="statement not covered" > /**</span>
2208
- <span class="cstat-no" title="statement not covered" > * Handle QR code expiry</span>
2209
- <span class="cstat-no" title="statement not covered" > */</span>
2210
- <span class="cstat-no" title="statement not covered" > onQrExpired(): void {</span>
2401
+ &nbsp;
2402
+ /**
2403
+ * Handle QR code expiry
2404
+ */
2405
+ <span class="fstat-no" title="function not covered" > onQrExpired(): void {</span>
2211
2406
  <span class="cstat-no" title="statement not covered" > logger.debug('QR code expired');</span>
2212
2407
  <span class="cstat-no" title="statement not covered" > this.pairingOffer.set('');</span>
2213
2408
  <span class="cstat-no" title="statement not covered" > this.isWaitingForWallet.set(false);</span>
2214
2409
  <span class="cstat-no" title="statement not covered" > }</span>
2215
- <span class="cstat-no" title="statement not covered" ></span>
2216
- <span class="cstat-no" title="statement not covered" > /**</span>
2217
- <span class="cstat-no" title="statement not covered" > * Refresh the QR pairing offer</span>
2218
- <span class="cstat-no" title="statement not covered" > */</span>
2219
- <span class="cstat-no" title="statement not covered" > async onQrRefresh(): Promise&lt;void&gt; {</span>
2410
+ &nbsp;
2411
+ /**
2412
+ * Refresh the QR pairing offer
2413
+ */
2414
+ <span class="fstat-no" title="function not covered" > async onQrRefresh(): Promise&lt;void&gt; {</span>
2220
2415
  <span class="cstat-no" title="statement not covered" > this.isWaitingForWallet.set(false);</span>
2221
2416
  <span class="cstat-no" title="statement not covered" > this.isWaitingForApproval.set(false);</span>
2222
2417
  <span class="cstat-no" title="statement not covered" > await this.initiateQrPairing();</span>
2223
2418
  <span class="cstat-no" title="statement not covered" > }</span>
2224
- <span class="cstat-no" title="statement not covered" ></span>
2225
- <span class="cstat-no" title="statement not covered" > /**</span>
2226
- <span class="cstat-no" title="statement not covered" > * Handle successful mobile connection</span>
2227
- <span class="cstat-no" title="statement not covered" > */</span>
2228
- <span class="cstat-no" title="statement not covered" > private onMobileConnected(): void {</span>
2419
+ &nbsp;
2420
+ /**
2421
+ * Handle successful mobile connection
2422
+ */
2423
+ private <span class="fstat-no" title="function not covered" >onMobileConnected(): void {</span>
2229
2424
  <span class="cstat-no" title="statement not covered" > logger.info('Mobile wallet connected');</span>
2230
2425
  <span class="cstat-no" title="statement not covered" > this.connected.emit({ protocol: 'mobile-native', method: 'qr' });</span>
2231
2426
  <span class="cstat-no" title="statement not covered" > void this.modalController.dismiss({ connected: true });</span>
2232
2427
  <span class="cstat-no" title="statement not covered" > }</span>
2233
- <span class="cstat-no" title="statement not covered" ></span>
2234
- <span class="cstat-no" title="statement not covered" > // ========== Platform Detection ==========</span>
2235
- <span class="cstat-no" title="statement not covered" ></span>
2236
- <span class="cstat-no" title="statement not covered" > /**</span>
2237
- <span class="cstat-no" title="statement not covered" > * Detect if running on mobile device</span>
2238
- <span class="cstat-no" title="statement not covered" > */</span>
2239
- <span class="cstat-no" title="statement not covered" > private detectMobile(): boolean {</span>
2240
- <span class="cstat-no" title="statement not covered" > return this.platform.is('mobile') || this.platform.is('android') || this.platform.is('ios');</span>
2241
- <span class="cstat-no" title="statement not covered" > }</span>
2242
- <span class="cstat-no" title="statement not covered" ></span>
2243
- <span class="cstat-no" title="statement not covered" > /**</span>
2244
- <span class="cstat-no" title="statement not covered" > * Detect if HSuite extension is available.</span>
2245
- <span class="cstat-no" title="statement not covered" > * Checks for the flag injected by the extension's content script.</span>
2246
- <span class="cstat-no" title="statement not covered" > */</span>
2247
- <span class="cstat-no" title="statement not covered" > private detectExtension(): boolean {</span>
2248
- <span class="cstat-no" title="statement not covered" > if (typeof window === 'undefined') return false;</span>
2249
- <span class="cstat-no" title="statement not covered" > // Check for HSuite extension marker (injected by extension's inject-flags.ts)</span>
2250
- <span class="cstat-no" title="statement not covered" > return (</span>
2251
- <span class="cstat-no" title="statement not covered" > (window as unknown as { __HSUITE_WALLET_EXTENSION__?: boolean })</span>
2252
- <span class="cstat-no" title="statement not covered" > .__HSUITE_WALLET_EXTENSION__ === true</span>
2253
- <span class="cstat-no" title="statement not covered" > );</span>
2254
- <span class="cstat-no" title="statement not covered" > }</span>
2255
- <span class="cstat-no" title="statement not covered" >}</span>
2428
+ &nbsp;
2429
+ // ========== Platform Detection ==========
2430
+ &nbsp;
2431
+ /**
2432
+ * Detect if running on mobile device
2433
+ */
2434
+ private detectMobile(): boolean {
2435
+ return this.platform.is('mobile') || this.platform.is('android') || this.platform.is('ios');
2436
+ }
2437
+ &nbsp;
2438
+ /**
2439
+ * Detect if HSuite extension is available.
2440
+ * Checks for the flag injected by the extension's content script.
2441
+ */
2442
+ private detectExtension(): boolean {
2443
+ if (typeof window === 'undefined') <span class="branch-0 cbranch-no" title="branch not covered" >return false;</span>
2444
+ // Check for HSuite extension marker (injected by extension's inject-flags.ts)
2445
+ return (
2446
+ (window as unknown as { __HSUITE_WALLET_EXTENSION__?: boolean })
2447
+ .__HSUITE_WALLET_EXTENSION__ === true
2448
+ );
2449
+ }
2450
+ }
2256
2451
  &nbsp;</pre></td></tr></table></pre>
2257
2452
 
2258
2453
  <div class='push'></div><!-- for sticky footer -->
@@ -2260,7 +2455,7 @@
2260
2455
  <div class='footer quiet pad2 space-top1 center small'>
2261
2456
  Code coverage generated by
2262
2457
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
2263
- at 2026-06-02T14:30:38.257Z
2458
+ at 2026-06-10T09:00:36.727Z
2264
2459
  </div>
2265
2460
  <script src="../../../prettify.js"></script>
2266
2461
  <script>