@hsuite/native-connect-angular 1.0.0 → 2.1.1
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.
- package/coverage/coverage-summary.json +53 -49
- package/coverage/index.html +100 -100
- package/coverage/lcov-report/index.html +100 -100
- package/coverage/lcov-report/lib/components/account-selector/account-actions/account-actions.component.ts.html +1 -1
- package/coverage/lcov-report/lib/components/account-selector/account-actions/index.html +1 -1
- package/coverage/lcov-report/lib/components/account-selector/account-filter/account-filter.component.ts.html +1 -1
- package/coverage/lcov-report/lib/components/account-selector/account-filter/index.html +1 -1
- package/coverage/lcov-report/lib/components/account-selector/account-formatting.service.ts.html +13 -19
- package/coverage/lcov-report/lib/components/account-selector/account-grouping.service.ts.html +1 -1
- package/coverage/lcov-report/lib/components/account-selector/account-list/account-list.component.ts.html +1 -1
- package/coverage/lcov-report/lib/components/account-selector/account-list/index.html +1 -1
- package/coverage/lcov-report/lib/components/account-selector/account-selector.component.ts.html +1 -1
- package/coverage/lcov-report/lib/components/account-selector/account-selector.service.ts.html +1 -1
- package/coverage/lcov-report/lib/components/account-selector/index.html +5 -5
- package/coverage/lcov-report/lib/components/wallet-account-display/index.html +1 -1
- package/coverage/lcov-report/lib/components/wallet-account-display/wallet-account-display.component.ts.html +10 -10
- package/coverage/lcov-report/lib/components/wallet-connect-button/index.html +21 -21
- package/coverage/lcov-report/lib/components/wallet-connect-button/wallet-connect-button.component.ts.html +475 -451
- package/coverage/lcov-report/lib/components/wallet-connect-prompt/index.html +1 -1
- package/coverage/lcov-report/lib/components/wallet-connect-prompt/wallet-connect-prompt.component.ts.html +1 -1
- package/coverage/lcov-report/lib/components/wallet-connected-guard/index.html +1 -1
- package/coverage/lcov-report/lib/components/wallet-connected-guard/wallet-connected-guard.component.ts.html +1 -1
- package/coverage/lcov-report/lib/components/wallet-connection-modal/connection-method-step/connection-method-step.component.ts.html +148 -148
- package/coverage/lcov-report/lib/components/wallet-connection-modal/connection-method-step/index.html +17 -17
- package/coverage/lcov-report/lib/components/wallet-connection-modal/index.html +21 -21
- package/coverage/lcov-report/lib/components/wallet-connection-modal/qr-pairing-step/index.html +17 -17
- package/coverage/lcov-report/lib/components/wallet-connection-modal/qr-pairing-step/qr-pairing-step.component.ts.html +838 -838
- package/coverage/lcov-report/lib/components/wallet-connection-modal/wallet-connection-modal.component.ts.html +1230 -987
- package/coverage/lcov-report/lib/components/wallet-session-display/index.html +1 -1
- package/coverage/lcov-report/lib/components/wallet-session-display/wallet-session-display.component.ts.html +1 -1
- package/coverage/lcov-report/lib/components/wallet-transaction-status/index.html +1 -1
- package/coverage/lcov-report/lib/components/wallet-transaction-status/wallet-transaction-status.component.ts.html +1 -1
- package/coverage/lcov-report/lib/directives/index.html +1 -1
- package/coverage/lcov-report/lib/directives/wallet-connected.directive.ts.html +1 -1
- package/coverage/lcov-report/lib/directives/wallet-context.directive.ts.html +1 -1
- package/coverage/lcov-report/lib/directives/wallet-events.directive.ts.html +1 -1
- package/coverage/lcov-report/lib/hsuite-wallet.module.ts.html +1 -1
- package/coverage/lcov-report/lib/index.html +1 -1
- package/coverage/lcov-report/lib/models/connection-config.model.ts.html +1 -1
- package/coverage/lcov-report/lib/models/index.html +7 -7
- package/coverage/lcov-report/lib/models/provider-types.ts.html +11 -5
- package/coverage/lcov-report/lib/providers/base-wallet-provider.ts.html +1 -1
- package/coverage/lcov-report/lib/providers/hsuite-native/channel-client.service.ts.html +9 -6
- package/coverage/lcov-report/lib/providers/hsuite-native/index.html +10 -10
- package/coverage/lcov-report/lib/providers/hsuite-native-provider.ts.html +1 -1
- package/coverage/lcov-report/lib/providers/index.html +1 -1
- package/coverage/lcov-report/lib/providers/p2p-native/index.html +7 -7
- package/coverage/lcov-report/lib/providers/p2p-native/p2p-native.provider.ts.html +1 -1
- package/coverage/lcov-report/lib/providers/p2p-native/p2p-session-manager.ts.html +7 -4
- package/coverage/lcov-report/lib/providers/wallet-error-handler.ts.html +1 -1
- package/coverage/lcov-report/lib/providers/walletconnect/core/index.html +10 -10
- package/coverage/lcov-report/lib/providers/walletconnect/core/session-health.ts.html +1 -1
- package/coverage/lcov-report/lib/providers/walletconnect/core/walletconnect-client-manager.ts.html +1 -1
- package/coverage/lcov-report/lib/providers/walletconnect/core/walletconnect-provider.ts.html +10 -7
- package/coverage/lcov-report/lib/providers/walletconnect/core/walletconnect-session-store.ts.html +1 -1
- package/coverage/lcov-report/lib/providers/walletconnect/core/walletconnect-signing-orchestrator.ts.html +1 -1
- package/coverage/lcov-report/lib/providers/walletconnect/signers/hedera-signer.ts.html +1 -1
- package/coverage/lcov-report/lib/providers/walletconnect/signers/index.html +1 -1
- package/coverage/lcov-report/lib/providers/walletconnect/signers/signer-factory.ts.html +49 -49
- package/coverage/lcov-report/lib/providers/walletconnect/signers/xrpl-signer.ts.html +1 -1
- package/coverage/lcov-report/lib/services/hsuite-auth.interceptor.ts.html +568 -0
- package/coverage/lcov-report/lib/services/index.html +50 -20
- package/coverage/lcov-report/lib/services/logger.service.ts.html +4 -4
- package/coverage/lcov-report/lib/services/smart-session.service.ts.html +1264 -0
- package/coverage/lcov-report/lib/services/transaction-builders/active-account-source.ts.html +250 -0
- package/coverage/lcov-report/lib/services/transaction-builders/base-transaction-builder.service.ts.html +1 -1
- package/coverage/lcov-report/lib/services/transaction-builders/hedera-amount-utils.ts.html +1 -1
- package/coverage/lcov-report/lib/services/transaction-builders/hedera-transaction-builder.service.ts.html +318 -318
- package/coverage/lcov-report/lib/services/transaction-builders/index.html +24 -9
- package/coverage/lcov-report/lib/services/transaction-builders/xrpl-transaction-builder.service.ts.html +1 -1
- package/coverage/lcov-report/lib/services/transaction.service.ts.html +7 -10
- package/coverage/lcov-report/lib/services/unified-wallet.service.ts.html +9 -12
- package/coverage/lcov-report/lib/services/wallet-context.service.ts.html +1 -1
- package/coverage/lcov-report/lib/services/wallet-event-bus.service.ts.html +1 -1
- package/coverage/lcov-report/lib/services/wallet-providers.service.ts.html +4 -7
- package/coverage/lcov-report/lib/transports/chrome-extension-transport.ts.html +1 -1
- package/coverage/lcov-report/lib/transports/index.html +1 -1
- package/coverage/lcov-report/lib/utils/index.html +36 -21
- package/coverage/lcov-report/lib/utils/ledger-icons.util.ts.html +254 -161
- package/coverage/lcov-report/lib/utils/ledger-ui-registry.ts.html +676 -0
- package/coverage/lcov.info +3236 -2122
- package/coverage/lib/components/account-selector/account-actions/account-actions.component.ts.html +1 -1
- package/coverage/lib/components/account-selector/account-actions/index.html +1 -1
- package/coverage/lib/components/account-selector/account-filter/account-filter.component.ts.html +1 -1
- package/coverage/lib/components/account-selector/account-filter/index.html +1 -1
- package/coverage/lib/components/account-selector/account-formatting.service.ts.html +13 -19
- package/coverage/lib/components/account-selector/account-grouping.service.ts.html +1 -1
- package/coverage/lib/components/account-selector/account-list/account-list.component.ts.html +1 -1
- package/coverage/lib/components/account-selector/account-list/index.html +1 -1
- package/coverage/lib/components/account-selector/account-selector.component.ts.html +1 -1
- package/coverage/lib/components/account-selector/account-selector.service.ts.html +1 -1
- package/coverage/lib/components/account-selector/index.html +5 -5
- package/coverage/lib/components/wallet-account-display/index.html +1 -1
- package/coverage/lib/components/wallet-account-display/wallet-account-display.component.ts.html +10 -10
- package/coverage/lib/components/wallet-connect-button/index.html +21 -21
- package/coverage/lib/components/wallet-connect-button/wallet-connect-button.component.ts.html +475 -451
- package/coverage/lib/components/wallet-connect-prompt/index.html +1 -1
- package/coverage/lib/components/wallet-connect-prompt/wallet-connect-prompt.component.ts.html +1 -1
- package/coverage/lib/components/wallet-connected-guard/index.html +1 -1
- package/coverage/lib/components/wallet-connected-guard/wallet-connected-guard.component.ts.html +1 -1
- package/coverage/lib/components/wallet-connection-modal/connection-method-step/connection-method-step.component.ts.html +148 -148
- package/coverage/lib/components/wallet-connection-modal/connection-method-step/index.html +17 -17
- package/coverage/lib/components/wallet-connection-modal/index.html +21 -21
- package/coverage/lib/components/wallet-connection-modal/qr-pairing-step/index.html +17 -17
- package/coverage/lib/components/wallet-connection-modal/qr-pairing-step/qr-pairing-step.component.ts.html +838 -838
- package/coverage/lib/components/wallet-connection-modal/wallet-connection-modal.component.ts.html +1230 -987
- package/coverage/lib/components/wallet-session-display/index.html +1 -1
- package/coverage/lib/components/wallet-session-display/wallet-session-display.component.ts.html +1 -1
- package/coverage/lib/components/wallet-transaction-status/index.html +1 -1
- package/coverage/lib/components/wallet-transaction-status/wallet-transaction-status.component.ts.html +1 -1
- package/coverage/lib/directives/index.html +1 -1
- package/coverage/lib/directives/wallet-connected.directive.ts.html +1 -1
- package/coverage/lib/directives/wallet-context.directive.ts.html +1 -1
- package/coverage/lib/directives/wallet-events.directive.ts.html +1 -1
- package/coverage/lib/hsuite-wallet.module.ts.html +1 -1
- package/coverage/lib/index.html +1 -1
- package/coverage/lib/models/connection-config.model.ts.html +1 -1
- package/coverage/lib/models/index.html +7 -7
- package/coverage/lib/models/provider-types.ts.html +11 -5
- package/coverage/lib/providers/base-wallet-provider.ts.html +1 -1
- package/coverage/lib/providers/hsuite-native/channel-client.service.ts.html +9 -6
- package/coverage/lib/providers/hsuite-native/index.html +10 -10
- package/coverage/lib/providers/hsuite-native-provider.ts.html +1 -1
- package/coverage/lib/providers/index.html +1 -1
- package/coverage/lib/providers/p2p-native/index.html +7 -7
- package/coverage/lib/providers/p2p-native/p2p-native.provider.ts.html +1 -1
- package/coverage/lib/providers/p2p-native/p2p-session-manager.ts.html +7 -4
- package/coverage/lib/providers/wallet-error-handler.ts.html +1 -1
- package/coverage/lib/providers/walletconnect/core/index.html +10 -10
- package/coverage/lib/providers/walletconnect/core/session-health.ts.html +1 -1
- package/coverage/lib/providers/walletconnect/core/walletconnect-client-manager.ts.html +1 -1
- package/coverage/lib/providers/walletconnect/core/walletconnect-provider.ts.html +10 -7
- package/coverage/lib/providers/walletconnect/core/walletconnect-session-store.ts.html +1 -1
- package/coverage/lib/providers/walletconnect/core/walletconnect-signing-orchestrator.ts.html +1 -1
- package/coverage/lib/providers/walletconnect/signers/hedera-signer.ts.html +1 -1
- package/coverage/lib/providers/walletconnect/signers/index.html +1 -1
- package/coverage/lib/providers/walletconnect/signers/signer-factory.ts.html +49 -49
- package/coverage/lib/providers/walletconnect/signers/xrpl-signer.ts.html +1 -1
- package/coverage/lib/services/hsuite-auth.interceptor.ts.html +568 -0
- package/coverage/lib/services/index.html +50 -20
- package/coverage/lib/services/logger.service.ts.html +4 -4
- package/coverage/lib/services/smart-session.service.ts.html +1264 -0
- package/coverage/lib/services/transaction-builders/active-account-source.ts.html +250 -0
- package/coverage/lib/services/transaction-builders/base-transaction-builder.service.ts.html +1 -1
- package/coverage/lib/services/transaction-builders/hedera-amount-utils.ts.html +1 -1
- package/coverage/lib/services/transaction-builders/hedera-transaction-builder.service.ts.html +318 -318
- package/coverage/lib/services/transaction-builders/index.html +24 -9
- package/coverage/lib/services/transaction-builders/xrpl-transaction-builder.service.ts.html +1 -1
- package/coverage/lib/services/transaction.service.ts.html +7 -10
- package/coverage/lib/services/unified-wallet.service.ts.html +9 -12
- package/coverage/lib/services/wallet-context.service.ts.html +1 -1
- package/coverage/lib/services/wallet-event-bus.service.ts.html +1 -1
- package/coverage/lib/services/wallet-providers.service.ts.html +4 -7
- package/coverage/lib/transports/chrome-extension-transport.ts.html +1 -1
- package/coverage/lib/transports/index.html +1 -1
- package/coverage/lib/utils/index.html +36 -21
- package/coverage/lib/utils/ledger-icons.util.ts.html +254 -161
- package/coverage/lib/utils/ledger-ui-registry.ts.html +676 -0
- package/dist/fesm2022/hsuite-native-connect-angular.mjs +939 -328
- package/dist/fesm2022/hsuite-native-connect-angular.mjs.map +1 -1
- package/dist/index.d.ts +489 -33
- package/package.json +4 -4
- package/src/index.ts +26 -0
- package/src/lib/components/account-selector/account-formatting.service.ts +8 -10
- package/src/lib/components/wallet-account-display/wallet-account-display.component.ts +9 -9
- package/src/lib/components/wallet-connect-button/wallet-connect-button.component.spec.ts +89 -0
- package/src/lib/components/wallet-connect-button/wallet-connect-button.component.ts +8 -0
- package/src/lib/components/wallet-connection-modal/wallet-connection-modal.component.html +1 -6
- package/src/lib/components/wallet-connection-modal/wallet-connection-modal.component.spec.ts +173 -0
- package/src/lib/components/wallet-connection-modal/wallet-connection-modal.component.ts +118 -37
- package/src/lib/models/provider-types.ts +3 -1
- package/src/lib/models/unified-account.model.ts +4 -1
- package/src/lib/providers/hsuite-native/channel-client.service.ts +1 -0
- package/src/lib/providers/p2p-native/p2p-session-manager.ts +1 -0
- package/src/lib/providers/walletconnect/core/walletconnect-provider.ts +2 -1
- package/src/lib/services/hsuite-auth.interceptor.ts +159 -0
- package/src/lib/services/smart-session.service.ts +378 -0
- package/src/lib/services/transaction-builders/active-account-source.spec.ts +75 -0
- package/src/lib/services/transaction-builders/active-account-source.ts +55 -0
- package/src/lib/services/transaction-builders/hedera-transaction-builder.service.ts +4 -4
- package/src/lib/services/transaction-builders/index.ts +1 -0
- package/src/lib/services/transaction.service.ts +7 -4
- package/src/lib/services/unified-wallet.service.spec.ts +1 -1
- package/src/lib/services/unified-wallet.service.ts +2 -3
- package/src/lib/services/wallet-providers.service.ts +0 -1
- package/src/lib/utils/index.ts +1 -0
- package/src/lib/utils/ledger-icons.util.ts +61 -30
- package/src/lib/utils/ledger-ui-registry.ts +197 -0
package/coverage/lib/components/wallet-connection-modal/wallet-connection-modal.component.ts.html
CHANGED
|
@@ -23,30 +23,30 @@
|
|
|
23
23
|
<div class='clearfix'>
|
|
24
24
|
|
|
25
25
|
<div class='fl pad1y space-right2'>
|
|
26
|
-
<span class="strong">
|
|
26
|
+
<span class="strong">69.17% </span>
|
|
27
27
|
<span class="quiet">Statements</span>
|
|
28
|
-
<span class='fraction'>
|
|
28
|
+
<span class='fraction'>561/811</span>
|
|
29
29
|
</div>
|
|
30
30
|
|
|
31
31
|
|
|
32
32
|
<div class='fl pad1y space-right2'>
|
|
33
|
-
<span class="strong">
|
|
33
|
+
<span class="strong">44.44% </span>
|
|
34
34
|
<span class="quiet">Branches</span>
|
|
35
|
-
<span class='fraction'>
|
|
35
|
+
<span class='fraction'>20/45</span>
|
|
36
36
|
</div>
|
|
37
37
|
|
|
38
38
|
|
|
39
39
|
<div class='fl pad1y space-right2'>
|
|
40
|
-
<span class="strong">
|
|
40
|
+
<span class="strong">54.54% </span>
|
|
41
41
|
<span class="quiet">Functions</span>
|
|
42
|
-
<span class='fraction'>
|
|
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">
|
|
47
|
+
<span class="strong">69.17% </span>
|
|
48
48
|
<span class="quiet">Lines</span>
|
|
49
|
-
<span class='fraction'>
|
|
49
|
+
<span class='fraction'>561/811</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
|
|
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,318 @@
|
|
|
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
|
|
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>
|
|
862
|
+
<a name='L797'></a><a href='#L797'>797</a>
|
|
863
|
+
<a name='L798'></a><a href='#L798'>798</a>
|
|
864
|
+
<a name='L799'></a><a href='#L799'>799</a>
|
|
865
|
+
<a name='L800'></a><a href='#L800'>800</a>
|
|
866
|
+
<a name='L801'></a><a href='#L801'>801</a>
|
|
867
|
+
<a name='L802'></a><a href='#L802'>802</a>
|
|
868
|
+
<a name='L803'></a><a href='#L803'>803</a>
|
|
869
|
+
<a name='L804'></a><a href='#L804'>804</a>
|
|
870
|
+
<a name='L805'></a><a href='#L805'>805</a>
|
|
871
|
+
<a name='L806'></a><a href='#L806'>806</a>
|
|
872
|
+
<a name='L807'></a><a href='#L807'>807</a>
|
|
873
|
+
<a name='L808'></a><a href='#L808'>808</a>
|
|
874
|
+
<a name='L809'></a><a href='#L809'>809</a>
|
|
875
|
+
<a name='L810'></a><a href='#L810'>810</a>
|
|
876
|
+
<a name='L811'></a><a href='#L811'>811</a>
|
|
877
|
+
<a name='L812'></a><a href='#L812'>812</a></td><td class="line-coverage quiet"><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">1x</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">2x</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">1x</span>
|
|
986
|
+
<span class="cline-any cline-yes">1x</span>
|
|
987
|
+
<span class="cline-any cline-yes">1x</span>
|
|
988
|
+
<span class="cline-any cline-yes">1x</span>
|
|
989
|
+
<span class="cline-any cline-yes">1x</span>
|
|
990
|
+
<span class="cline-any cline-yes">1x</span>
|
|
991
|
+
<span class="cline-any cline-yes">1x</span>
|
|
992
|
+
<span class="cline-any cline-yes">1x</span>
|
|
993
|
+
<span class="cline-any cline-yes">1x</span>
|
|
994
|
+
<span class="cline-any cline-yes">1x</span>
|
|
995
|
+
<span class="cline-any cline-yes">1x</span>
|
|
996
|
+
<span class="cline-any cline-yes">1x</span>
|
|
997
|
+
<span class="cline-any cline-yes">1x</span>
|
|
998
|
+
<span class="cline-any cline-yes">1x</span>
|
|
999
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1000
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1001
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1002
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1003
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1004
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1005
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1006
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1007
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1008
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1009
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1010
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1011
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1012
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1013
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1014
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1015
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1016
|
+
<span class="cline-any cline-yes">1x</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>
|
|
1076
|
+
<span class="cline-any cline-yes">10x</span>
|
|
1077
|
+
<span class="cline-any cline-yes">10x</span>
|
|
1078
|
+
<span class="cline-any cline-yes">10x</span>
|
|
1079
|
+
<span class="cline-any cline-yes">10x</span>
|
|
1080
|
+
<span class="cline-any cline-yes">10x</span>
|
|
1081
|
+
<span class="cline-any cline-yes">10x</span>
|
|
1082
|
+
<span class="cline-any cline-yes">10x</span>
|
|
1083
|
+
<span class="cline-any cline-yes">10x</span>
|
|
1084
|
+
<span class="cline-any cline-yes">10x</span>
|
|
1085
|
+
<span class="cline-any cline-yes">10x</span>
|
|
1086
|
+
<span class="cline-any cline-yes">10x</span>
|
|
1087
|
+
<span class="cline-any cline-yes">10x</span>
|
|
1088
|
+
<span class="cline-any cline-yes">10x</span>
|
|
1089
|
+
<span class="cline-any cline-yes">10x</span>
|
|
1090
|
+
<span class="cline-any cline-yes">10x</span>
|
|
1091
|
+
<span class="cline-any cline-yes">10x</span>
|
|
1092
|
+
<span class="cline-any cline-yes">10x</span>
|
|
1093
|
+
<span class="cline-any cline-yes">10x</span>
|
|
1094
|
+
<span class="cline-any cline-yes">10x</span>
|
|
1095
|
+
<span class="cline-any cline-yes">10x</span>
|
|
1096
|
+
<span class="cline-any cline-yes">10x</span>
|
|
1097
|
+
<span class="cline-any cline-yes">10x</span>
|
|
1098
|
+
<span class="cline-any cline-yes">10x</span>
|
|
1099
|
+
<span class="cline-any cline-yes">10x</span>
|
|
1100
|
+
<span class="cline-any cline-yes">10x</span>
|
|
1101
|
+
<span class="cline-any cline-yes">10x</span>
|
|
1102
|
+
<span class="cline-any cline-yes">10x</span>
|
|
1103
|
+
<span class="cline-any cline-yes">10x</span>
|
|
1104
|
+
<span class="cline-any cline-yes">10x</span>
|
|
1105
|
+
<span class="cline-any cline-yes">10x</span>
|
|
1106
|
+
<span class="cline-any cline-yes">10x</span>
|
|
1107
|
+
<span class="cline-any cline-yes">10x</span>
|
|
797
1108
|
<span class="cline-any cline-no"> </span>
|
|
798
1109
|
<span class="cline-any cline-no"> </span>
|
|
799
1110
|
<span class="cline-any cline-no"> </span>
|
|
@@ -826,6 +1137,27 @@
|
|
|
826
1137
|
<span class="cline-any cline-no"> </span>
|
|
827
1138
|
<span class="cline-any cline-no"> </span>
|
|
828
1139
|
<span class="cline-any cline-no"> </span>
|
|
1140
|
+
<span class="cline-any cline-yes">10x</span>
|
|
1141
|
+
<span class="cline-any cline-yes">10x</span>
|
|
1142
|
+
<span class="cline-any cline-yes">10x</span>
|
|
1143
|
+
<span class="cline-any cline-yes">10x</span>
|
|
1144
|
+
<span class="cline-any cline-yes">10x</span>
|
|
1145
|
+
<span class="cline-any cline-yes">20x</span>
|
|
1146
|
+
<span class="cline-any cline-yes">20x</span>
|
|
1147
|
+
<span class="cline-any cline-yes">20x</span>
|
|
1148
|
+
<span class="cline-any cline-yes">20x</span>
|
|
1149
|
+
<span class="cline-any cline-yes">20x</span>
|
|
1150
|
+
<span class="cline-any cline-yes">20x</span>
|
|
1151
|
+
<span class="cline-any cline-yes">20x</span>
|
|
1152
|
+
<span class="cline-any cline-yes">10x</span>
|
|
1153
|
+
<span class="cline-any cline-yes">10x</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>
|
|
1158
|
+
<span class="cline-any cline-yes">10x</span>
|
|
1159
|
+
<span class="cline-any cline-yes">10x</span>
|
|
1160
|
+
<span class="cline-any cline-yes">10x</span>
|
|
829
1161
|
<span class="cline-any cline-no"> </span>
|
|
830
1162
|
<span class="cline-any cline-no"> </span>
|
|
831
1163
|
<span class="cline-any cline-no"> </span>
|
|
@@ -848,6 +1180,10 @@
|
|
|
848
1180
|
<span class="cline-any cline-no"> </span>
|
|
849
1181
|
<span class="cline-any cline-no"> </span>
|
|
850
1182
|
<span class="cline-any cline-no"> </span>
|
|
1183
|
+
<span class="cline-any cline-yes">10x</span>
|
|
1184
|
+
<span class="cline-any cline-yes">10x</span>
|
|
1185
|
+
<span class="cline-any cline-yes">10x</span>
|
|
1186
|
+
<span class="cline-any cline-yes">10x</span>
|
|
851
1187
|
<span class="cline-any cline-no"> </span>
|
|
852
1188
|
<span class="cline-any cline-no"> </span>
|
|
853
1189
|
<span class="cline-any cline-no"> </span>
|
|
@@ -861,6 +1197,9 @@
|
|
|
861
1197
|
<span class="cline-any cline-no"> </span>
|
|
862
1198
|
<span class="cline-any cline-no"> </span>
|
|
863
1199
|
<span class="cline-any cline-no"> </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>
|
|
864
1203
|
<span class="cline-any cline-no"> </span>
|
|
865
1204
|
<span class="cline-any cline-no"> </span>
|
|
866
1205
|
<span class="cline-any cline-no"> </span>
|
|
@@ -878,33 +1217,223 @@
|
|
|
878
1217
|
<span class="cline-any cline-no"> </span>
|
|
879
1218
|
<span class="cline-any cline-no"> </span>
|
|
880
1219
|
<span class="cline-any cline-no"> </span>
|
|
1220
|
+
<span class="cline-any cline-yes">10x</span>
|
|
1221
|
+
<span class="cline-any cline-yes">10x</span>
|
|
1222
|
+
<span class="cline-any cline-yes">10x</span>
|
|
1223
|
+
<span class="cline-any cline-yes">10x</span>
|
|
1224
|
+
<span class="cline-any cline-yes">10x</span>
|
|
1225
|
+
<span class="cline-any cline-yes">10x</span>
|
|
1226
|
+
<span class="cline-any cline-yes">10x</span>
|
|
1227
|
+
<span class="cline-any cline-yes">10x</span>
|
|
1228
|
+
<span class="cline-any cline-yes">10x</span>
|
|
1229
|
+
<span class="cline-any cline-yes">10x</span>
|
|
1230
|
+
<span class="cline-any cline-yes">10x</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">2x</span>
|
|
1234
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1235
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1236
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1237
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1238
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1239
|
+
<span class="cline-any cline-yes">2x</span>
|
|
881
1240
|
<span class="cline-any cline-no"> </span>
|
|
1241
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1242
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1243
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1244
|
+
<span class="cline-any cline-yes">2x</span>
|
|
882
1245
|
<span class="cline-any cline-no"> </span>
|
|
883
1246
|
<span class="cline-any cline-no"> </span>
|
|
1247
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1248
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1249
|
+
<span class="cline-any cline-yes">2x</span>
|
|
884
1250
|
<span class="cline-any cline-no"> </span>
|
|
885
1251
|
<span class="cline-any cline-no"> </span>
|
|
886
1252
|
<span class="cline-any cline-no"> </span>
|
|
1253
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1254
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1255
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1256
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1257
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1258
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1259
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1260
|
+
<span class="cline-any cline-yes">10x</span>
|
|
1261
|
+
<span class="cline-any cline-yes">10x</span>
|
|
1262
|
+
<span class="cline-any cline-yes">10x</span>
|
|
1263
|
+
<span class="cline-any cline-yes">10x</span>
|
|
1264
|
+
<span class="cline-any cline-yes">10x</span>
|
|
1265
|
+
<span class="cline-any cline-yes">10x</span>
|
|
1266
|
+
<span class="cline-any cline-yes">10x</span>
|
|
1267
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1268
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1269
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1270
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1271
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1272
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1273
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1274
|
+
<span class="cline-any cline-yes">1x</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-yes">1x</span>
|
|
887
1278
|
<span class="cline-any cline-no"> </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-yes">1x</span>
|
|
888
1282
|
<span class="cline-any cline-no"> </span>
|
|
1283
|
+
<span class="cline-any cline-yes">1x</span>
|
|
889
1284
|
<span class="cline-any cline-no"> </span>
|
|
890
1285
|
<span class="cline-any cline-no"> </span>
|
|
1286
|
+
<span class="cline-any cline-yes">1x</span>
|
|
891
1287
|
<span class="cline-any cline-no"> </span>
|
|
892
1288
|
<span class="cline-any cline-no"> </span>
|
|
1289
|
+
<span class="cline-any cline-yes">1x</span>
|
|
893
1290
|
<span class="cline-any cline-no"> </span>
|
|
894
1291
|
<span class="cline-any cline-no"> </span>
|
|
1292
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1293
|
+
<span class="cline-any cline-no"> </span>
|
|
1294
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1295
|
+
<span class="cline-any cline-yes">10x</span>
|
|
1296
|
+
<span class="cline-any cline-yes">10x</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">1x</span>
|
|
1305
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1306
|
+
<span class="cline-any cline-no"> </span>
|
|
1307
|
+
<span class="cline-any cline-no"> </span>
|
|
1308
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1309
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1310
|
+
<span class="cline-any cline-no"> </span>
|
|
1311
|
+
<span class="cline-any cline-yes">1x</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-yes">10x</span>
|
|
1320
|
+
<span class="cline-any cline-yes">10x</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-no"> </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">10x</span>
|
|
1329
|
+
<span class="cline-any cline-yes">10x</span>
|
|
1330
|
+
<span class="cline-any cline-yes">10x</span>
|
|
1331
|
+
<span class="cline-any cline-yes">10x</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">10x</span>
|
|
1339
|
+
<span class="cline-any cline-yes">10x</span>
|
|
1340
|
+
<span class="cline-any cline-yes">10x</span>
|
|
1341
|
+
<span class="cline-any cline-yes">7x</span>
|
|
1342
|
+
<span class="cline-any cline-yes">7x</span>
|
|
1343
|
+
<span class="cline-any cline-yes">7x</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">10x</span>
|
|
1349
|
+
<span class="cline-any cline-yes">10x</span>
|
|
1350
|
+
<span class="cline-any cline-yes">10x</span>
|
|
1351
|
+
<span class="cline-any cline-no"> </span>
|
|
1352
|
+
<span class="cline-any cline-no"> </span>
|
|
1353
|
+
<span class="cline-any cline-yes">10x</span>
|
|
1354
|
+
<span class="cline-any cline-yes">10x</span>
|
|
1355
|
+
<span class="cline-any cline-yes">10x</span>
|
|
1356
|
+
<span class="cline-any cline-yes">10x</span>
|
|
1357
|
+
<span class="cline-any cline-yes">10x</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">1x</span>
|
|
1361
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1362
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1363
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1364
|
+
<span class="cline-any cline-yes">10x</span>
|
|
1365
|
+
<span class="cline-any cline-yes">10x</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">2x</span>
|
|
1371
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1372
|
+
<span class="cline-any cline-yes">10x</span>
|
|
1373
|
+
<span class="cline-any cline-yes">10x</span>
|
|
1374
|
+
<span class="cline-any cline-yes">10x</span>
|
|
1375
|
+
<span class="cline-any cline-yes">10x</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">1x</span>
|
|
1381
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1382
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1383
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1384
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1385
|
+
<span class="cline-any cline-yes">1x</span>
|
|
895
1386
|
<span class="cline-any cline-no"> </span>
|
|
896
1387
|
<span class="cline-any cline-no"> </span>
|
|
897
1388
|
<span class="cline-any cline-no"> </span>
|
|
1389
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1390
|
+
<span class="cline-any cline-yes">10x</span>
|
|
1391
|
+
<span class="cline-any cline-yes">10x</span>
|
|
1392
|
+
<span class="cline-any cline-yes">10x</span>
|
|
1393
|
+
<span class="cline-any cline-yes">10x</span>
|
|
1394
|
+
<span class="cline-any cline-yes">10x</span>
|
|
1395
|
+
<span class="cline-any cline-yes">10x</span>
|
|
1396
|
+
<span class="cline-any cline-yes">3x</span>
|
|
1397
|
+
<span class="cline-any cline-yes">3x</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">10x</span>
|
|
1401
|
+
<span class="cline-any cline-yes">10x</span>
|
|
1402
|
+
<span class="cline-any cline-yes">10x</span>
|
|
1403
|
+
<span class="cline-any cline-yes">10x</span>
|
|
1404
|
+
<span class="cline-any cline-yes">10x</span>
|
|
898
1405
|
<span class="cline-any cline-no"> </span>
|
|
899
1406
|
<span class="cline-any cline-no"> </span>
|
|
900
1407
|
<span class="cline-any cline-no"> </span>
|
|
1408
|
+
<span class="cline-any cline-yes">10x</span>
|
|
1409
|
+
<span class="cline-any cline-yes">10x</span>
|
|
1410
|
+
<span class="cline-any cline-yes">10x</span>
|
|
1411
|
+
<span class="cline-any cline-yes">10x</span>
|
|
1412
|
+
<span class="cline-any cline-yes">10x</span>
|
|
1413
|
+
<span class="cline-any cline-yes">10x</span>
|
|
901
1414
|
<span class="cline-any cline-no"> </span>
|
|
902
1415
|
<span class="cline-any cline-no"> </span>
|
|
1416
|
+
<span class="cline-any cline-yes">10x</span>
|
|
1417
|
+
<span class="cline-any cline-yes">10x</span>
|
|
1418
|
+
<span class="cline-any cline-yes">10x</span>
|
|
1419
|
+
<span class="cline-any cline-yes">10x</span>
|
|
1420
|
+
<span class="cline-any cline-yes">10x</span>
|
|
1421
|
+
<span class="cline-any cline-yes">10x</span>
|
|
1422
|
+
<span class="cline-any cline-yes">10x</span>
|
|
903
1423
|
<span class="cline-any cline-no"> </span>
|
|
904
1424
|
<span class="cline-any cline-no"> </span>
|
|
905
1425
|
<span class="cline-any cline-no"> </span>
|
|
906
1426
|
<span class="cline-any cline-no"> </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">1x</span>
|
|
1433
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1434
|
+
<span class="cline-any cline-yes">1x</span>
|
|
907
1435
|
<span class="cline-any cline-no"> </span>
|
|
1436
|
+
<span class="cline-any cline-yes">1x</span>
|
|
908
1437
|
<span class="cline-any cline-no"> </span>
|
|
909
1438
|
<span class="cline-any cline-no"> </span>
|
|
910
1439
|
<span class="cline-any cline-no"> </span>
|
|
@@ -913,11 +1442,33 @@
|
|
|
913
1442
|
<span class="cline-any cline-no"> </span>
|
|
914
1443
|
<span class="cline-any cline-no"> </span>
|
|
915
1444
|
<span class="cline-any cline-no"> </span>
|
|
1445
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1446
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1447
|
+
<span class="cline-any cline-yes">1x</span>
|
|
916
1448
|
<span class="cline-any cline-no"> </span>
|
|
917
1449
|
<span class="cline-any cline-no"> </span>
|
|
1450
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1451
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1452
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1453
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1454
|
+
<span class="cline-any cline-yes">1x</span>
|
|
918
1455
|
<span class="cline-any cline-no"> </span>
|
|
919
1456
|
<span class="cline-any cline-no"> </span>
|
|
920
1457
|
<span class="cline-any cline-no"> </span>
|
|
1458
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1459
|
+
<span class="cline-any cline-yes">10x</span>
|
|
1460
|
+
<span class="cline-any cline-yes">10x</span>
|
|
1461
|
+
<span class="cline-any cline-yes">10x</span>
|
|
1462
|
+
<span class="cline-any cline-yes">10x</span>
|
|
1463
|
+
<span class="cline-any cline-yes">10x</span>
|
|
1464
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1465
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1466
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1467
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1468
|
+
<span class="cline-any cline-yes">2x</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">2x</span>
|
|
921
1472
|
<span class="cline-any cline-no"> </span>
|
|
922
1473
|
<span class="cline-any cline-no"> </span>
|
|
923
1474
|
<span class="cline-any cline-no"> </span>
|
|
@@ -940,6 +1491,35 @@
|
|
|
940
1491
|
<span class="cline-any cline-no"> </span>
|
|
941
1492
|
<span class="cline-any cline-no"> </span>
|
|
942
1493
|
<span class="cline-any cline-no"> </span>
|
|
1494
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1495
|
+
<span class="cline-any cline-yes">10x</span>
|
|
1496
|
+
<span class="cline-any cline-yes">10x</span>
|
|
1497
|
+
<span class="cline-any cline-yes">10x</span>
|
|
1498
|
+
<span class="cline-any cline-yes">10x</span>
|
|
1499
|
+
<span class="cline-any cline-yes">10x</span>
|
|
1500
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1501
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1502
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1503
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1504
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1505
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1506
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1507
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1508
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1509
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1510
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1511
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1512
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1513
|
+
<span class="cline-any cline-yes">1x</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>
|
|
1519
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1520
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1521
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1522
|
+
<span class="cline-any cline-yes">1x</span>
|
|
943
1523
|
<span class="cline-any cline-no"> </span>
|
|
944
1524
|
<span class="cline-any cline-no"> </span>
|
|
945
1525
|
<span class="cline-any cline-no"> </span>
|
|
@@ -963,6 +1543,11 @@
|
|
|
963
1543
|
<span class="cline-any cline-no"> </span>
|
|
964
1544
|
<span class="cline-any cline-no"> </span>
|
|
965
1545
|
<span class="cline-any cline-no"> </span>
|
|
1546
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1547
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1548
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1549
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1550
|
+
<span class="cline-any cline-yes">1x</span>
|
|
966
1551
|
<span class="cline-any cline-no"> </span>
|
|
967
1552
|
<span class="cline-any cline-no"> </span>
|
|
968
1553
|
<span class="cline-any cline-no"> </span>
|
|
@@ -973,8 +1558,27 @@
|
|
|
973
1558
|
<span class="cline-any cline-no"> </span>
|
|
974
1559
|
<span class="cline-any cline-no"> </span>
|
|
975
1560
|
<span class="cline-any cline-no"> </span>
|
|
1561
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1562
|
+
<span class="cline-any cline-yes">10x</span>
|
|
1563
|
+
<span class="cline-any cline-yes">10x</span>
|
|
1564
|
+
<span class="cline-any cline-yes">10x</span>
|
|
1565
|
+
<span class="cline-any cline-yes">10x</span>
|
|
1566
|
+
<span class="cline-any cline-yes">10x</span>
|
|
976
1567
|
<span class="cline-any cline-no"> </span>
|
|
977
1568
|
<span class="cline-any cline-no"> </span>
|
|
1569
|
+
<span class="cline-any cline-yes">10x</span>
|
|
1570
|
+
<span class="cline-any cline-yes">10x</span>
|
|
1571
|
+
<span class="cline-any cline-yes">10x</span>
|
|
1572
|
+
<span class="cline-any cline-yes">10x</span>
|
|
1573
|
+
<span class="cline-any cline-yes">10x</span>
|
|
1574
|
+
<span class="cline-any cline-yes">10x</span>
|
|
1575
|
+
<span class="cline-any cline-yes">10x</span>
|
|
1576
|
+
<span class="cline-any cline-yes">10x</span>
|
|
1577
|
+
<span class="cline-any cline-yes">10x</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>
|
|
978
1582
|
<span class="cline-any cline-no"> </span>
|
|
979
1583
|
<span class="cline-any cline-no"> </span>
|
|
980
1584
|
<span class="cline-any cline-no"> </span>
|
|
@@ -1003,6 +1607,12 @@
|
|
|
1003
1607
|
<span class="cline-any cline-no"> </span>
|
|
1004
1608
|
<span class="cline-any cline-no"> </span>
|
|
1005
1609
|
<span class="cline-any cline-no"> </span>
|
|
1610
|
+
<span class="cline-any cline-yes">10x</span>
|
|
1611
|
+
<span class="cline-any cline-yes">10x</span>
|
|
1612
|
+
<span class="cline-any cline-yes">10x</span>
|
|
1613
|
+
<span class="cline-any cline-yes">10x</span>
|
|
1614
|
+
<span class="cline-any cline-yes">10x</span>
|
|
1615
|
+
<span class="cline-any cline-yes">10x</span>
|
|
1006
1616
|
<span class="cline-any cline-no"> </span>
|
|
1007
1617
|
<span class="cline-any cline-no"> </span>
|
|
1008
1618
|
<span class="cline-any cline-no"> </span>
|
|
@@ -1025,700 +1635,287 @@
|
|
|
1025
1635
|
<span class="cline-any cline-no"> </span>
|
|
1026
1636
|
<span class="cline-any cline-no"> </span>
|
|
1027
1637
|
<span class="cline-any cline-no"> </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>
|
|
1028
1643
|
<span class="cline-any cline-no"> </span>
|
|
1029
1644
|
<span class="cline-any cline-no"> </span>
|
|
1030
1645
|
<span class="cline-any cline-no"> </span>
|
|
1031
1646
|
<span class="cline-any cline-no"> </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>
|
|
1032
1652
|
<span class="cline-any cline-no"> </span>
|
|
1033
1653
|
<span class="cline-any cline-no"> </span>
|
|
1034
1654
|
<span class="cline-any cline-no"> </span>
|
|
1035
1655
|
<span class="cline-any cline-no"> </span>
|
|
1656
|
+
<span class="cline-any cline-yes">10x</span>
|
|
1657
|
+
<span class="cline-any cline-yes">10x</span>
|
|
1658
|
+
<span class="cline-any cline-yes">10x</span>
|
|
1659
|
+
<span class="cline-any cline-yes">10x</span>
|
|
1660
|
+
<span class="cline-any cline-yes">10x</span>
|
|
1036
1661
|
<span class="cline-any cline-no"> </span>
|
|
1037
1662
|
<span class="cline-any cline-no"> </span>
|
|
1038
1663
|
<span class="cline-any cline-no"> </span>
|
|
1039
1664
|
<span class="cline-any cline-no"> </span>
|
|
1040
|
-
<span class="cline-any cline-
|
|
1041
|
-
<span class="cline-any cline-
|
|
1042
|
-
<span class="cline-any cline-
|
|
1043
|
-
<span class="cline-any cline-
|
|
1044
|
-
<span class="cline-any cline-
|
|
1045
|
-
<span class="cline-any cline-
|
|
1046
|
-
<span class="cline-any cline-
|
|
1047
|
-
<span class="cline-any cline-
|
|
1048
|
-
<span class="cline-any cline-
|
|
1049
|
-
<span class="cline-any cline-
|
|
1050
|
-
<span class="cline-any cline-
|
|
1051
|
-
<span class="cline-any cline-
|
|
1052
|
-
<span class="cline-any cline-
|
|
1053
|
-
<span class="cline-any cline-
|
|
1054
|
-
<span class="cline-any cline-
|
|
1055
|
-
<span class="cline-any cline-
|
|
1056
|
-
<span class="cline-any cline-
|
|
1057
|
-
<span class="cline-any cline-
|
|
1058
|
-
<span class="cline-any cline-
|
|
1059
|
-
<span class="cline-any cline-
|
|
1060
|
-
<span class="cline-any cline-
|
|
1061
|
-
<span class="cline-any cline-
|
|
1062
|
-
<span class="cline-any cline-
|
|
1063
|
-
<span class="cline-any cline-
|
|
1064
|
-
|
|
1065
|
-
|
|
1066
|
-
|
|
1067
|
-
|
|
1068
|
-
|
|
1069
|
-
|
|
1070
|
-
|
|
1071
|
-
|
|
1072
|
-
|
|
1073
|
-
|
|
1074
|
-
|
|
1075
|
-
|
|
1076
|
-
|
|
1077
|
-
|
|
1078
|
-
|
|
1079
|
-
|
|
1080
|
-
|
|
1081
|
-
|
|
1082
|
-
|
|
1083
|
-
|
|
1084
|
-
|
|
1085
|
-
|
|
1086
|
-
|
|
1087
|
-
|
|
1088
|
-
|
|
1089
|
-
|
|
1090
|
-
|
|
1091
|
-
|
|
1092
|
-
|
|
1093
|
-
|
|
1094
|
-
|
|
1095
|
-
|
|
1096
|
-
|
|
1097
|
-
|
|
1098
|
-
|
|
1099
|
-
|
|
1100
|
-
|
|
1101
|
-
|
|
1102
|
-
|
|
1103
|
-
|
|
1104
|
-
|
|
1105
|
-
|
|
1106
|
-
|
|
1107
|
-
|
|
1108
|
-
|
|
1109
|
-
|
|
1110
|
-
|
|
1111
|
-
|
|
1112
|
-
|
|
1113
|
-
|
|
1114
|
-
<span class="
|
|
1115
|
-
|
|
1116
|
-
|
|
1117
|
-
|
|
1118
|
-
|
|
1119
|
-
|
|
1120
|
-
|
|
1121
|
-
|
|
1122
|
-
|
|
1123
|
-
|
|
1124
|
-
|
|
1125
|
-
|
|
1126
|
-
|
|
1127
|
-
|
|
1128
|
-
|
|
1129
|
-
|
|
1130
|
-
|
|
1131
|
-
|
|
1132
|
-
|
|
1133
|
-
|
|
1134
|
-
|
|
1135
|
-
|
|
1136
|
-
|
|
1137
|
-
|
|
1138
|
-
|
|
1139
|
-
|
|
1140
|
-
|
|
1141
|
-
|
|
1142
|
-
|
|
1143
|
-
|
|
1144
|
-
|
|
1145
|
-
|
|
1146
|
-
|
|
1147
|
-
|
|
1148
|
-
|
|
1149
|
-
|
|
1150
|
-
|
|
1151
|
-
|
|
1152
|
-
|
|
1153
|
-
|
|
1154
|
-
|
|
1155
|
-
|
|
1156
|
-
|
|
1157
|
-
|
|
1158
|
-
|
|
1159
|
-
|
|
1160
|
-
|
|
1161
|
-
|
|
1162
|
-
|
|
1163
|
-
|
|
1164
|
-
|
|
1165
|
-
|
|
1166
|
-
|
|
1167
|
-
|
|
1168
|
-
|
|
1169
|
-
|
|
1170
|
-
|
|
1171
|
-
|
|
1172
|
-
|
|
1173
|
-
|
|
1174
|
-
|
|
1175
|
-
|
|
1176
|
-
|
|
1177
|
-
|
|
1178
|
-
|
|
1179
|
-
|
|
1180
|
-
|
|
1181
|
-
|
|
1182
|
-
|
|
1183
|
-
|
|
1184
|
-
|
|
1185
|
-
|
|
1186
|
-
|
|
1187
|
-
|
|
1188
|
-
|
|
1189
|
-
|
|
1190
|
-
|
|
1191
|
-
|
|
1192
|
-
|
|
1193
|
-
|
|
1194
|
-
|
|
1195
|
-
|
|
1196
|
-
|
|
1197
|
-
|
|
1198
|
-
|
|
1199
|
-
|
|
1200
|
-
|
|
1201
|
-
|
|
1202
|
-
|
|
1203
|
-
|
|
1204
|
-
|
|
1205
|
-
|
|
1206
|
-
|
|
1207
|
-
|
|
1208
|
-
|
|
1209
|
-
|
|
1210
|
-
|
|
1211
|
-
|
|
1212
|
-
|
|
1213
|
-
|
|
1214
|
-
|
|
1215
|
-
|
|
1216
|
-
|
|
1217
|
-
|
|
1218
|
-
|
|
1219
|
-
|
|
1220
|
-
|
|
1221
|
-
|
|
1222
|
-
|
|
1223
|
-
|
|
1224
|
-
|
|
1225
|
-
|
|
1226
|
-
|
|
1227
|
-
|
|
1228
|
-
|
|
1229
|
-
|
|
1230
|
-
|
|
1231
|
-
|
|
1232
|
-
|
|
1233
|
-
|
|
1234
|
-
|
|
1235
|
-
|
|
1236
|
-
|
|
1237
|
-
|
|
1238
|
-
|
|
1239
|
-
|
|
1240
|
-
|
|
1241
|
-
|
|
1242
|
-
|
|
1243
|
-
|
|
1244
|
-
|
|
1245
|
-
|
|
1246
|
-
|
|
1247
|
-
|
|
1248
|
-
|
|
1249
|
-
|
|
1250
|
-
|
|
1251
|
-
|
|
1252
|
-
|
|
1253
|
-
|
|
1254
|
-
|
|
1255
|
-
|
|
1256
|
-
|
|
1257
|
-
|
|
1258
|
-
|
|
1259
|
-
|
|
1260
|
-
|
|
1261
|
-
|
|
1262
|
-
|
|
1263
|
-
|
|
1264
|
-
|
|
1265
|
-
|
|
1266
|
-
|
|
1267
|
-
|
|
1268
|
-
|
|
1269
|
-
|
|
1270
|
-
|
|
1271
|
-
|
|
1272
|
-
|
|
1273
|
-
|
|
1274
|
-
|
|
1275
|
-
|
|
1276
|
-
|
|
1277
|
-
|
|
1278
|
-
|
|
1279
|
-
|
|
1280
|
-
|
|
1281
|
-
|
|
1282
|
-
|
|
1283
|
-
|
|
1284
|
-
|
|
1285
|
-
|
|
1286
|
-
|
|
1287
|
-
|
|
1288
|
-
|
|
1289
|
-
|
|
1290
|
-
|
|
1291
|
-
|
|
1292
|
-
|
|
1293
|
-
|
|
1294
|
-
<span class="cline-any cline-no"> </span>
|
|
1295
|
-
<span class="cline-any cline-no"> </span>
|
|
1296
|
-
<span class="cline-any cline-no"> </span>
|
|
1297
|
-
<span class="cline-any cline-no"> </span>
|
|
1298
|
-
<span class="cline-any cline-no"> </span>
|
|
1299
|
-
<span class="cline-any cline-no"> </span>
|
|
1300
|
-
<span class="cline-any cline-no"> </span>
|
|
1301
|
-
<span class="cline-any cline-no"> </span>
|
|
1302
|
-
<span class="cline-any cline-no"> </span>
|
|
1303
|
-
<span class="cline-any cline-no"> </span>
|
|
1304
|
-
<span class="cline-any cline-no"> </span>
|
|
1305
|
-
<span class="cline-any cline-no"> </span>
|
|
1306
|
-
<span class="cline-any cline-no"> </span>
|
|
1307
|
-
<span class="cline-any cline-no"> </span>
|
|
1308
|
-
<span class="cline-any cline-no"> </span>
|
|
1309
|
-
<span class="cline-any cline-no"> </span>
|
|
1310
|
-
<span class="cline-any cline-no"> </span>
|
|
1311
|
-
<span class="cline-any cline-no"> </span>
|
|
1312
|
-
<span class="cline-any cline-no"> </span>
|
|
1313
|
-
<span class="cline-any cline-no"> </span>
|
|
1314
|
-
<span class="cline-any cline-no"> </span>
|
|
1315
|
-
<span class="cline-any cline-no"> </span>
|
|
1316
|
-
<span class="cline-any cline-no"> </span>
|
|
1317
|
-
<span class="cline-any cline-no"> </span>
|
|
1318
|
-
<span class="cline-any cline-no"> </span>
|
|
1319
|
-
<span class="cline-any cline-no"> </span>
|
|
1320
|
-
<span class="cline-any cline-no"> </span>
|
|
1321
|
-
<span class="cline-any cline-no"> </span>
|
|
1322
|
-
<span class="cline-any cline-no"> </span>
|
|
1323
|
-
<span class="cline-any cline-no"> </span>
|
|
1324
|
-
<span class="cline-any cline-no"> </span>
|
|
1325
|
-
<span class="cline-any cline-no"> </span>
|
|
1326
|
-
<span class="cline-any cline-no"> </span>
|
|
1327
|
-
<span class="cline-any cline-no"> </span>
|
|
1328
|
-
<span class="cline-any cline-no"> </span>
|
|
1329
|
-
<span class="cline-any cline-no"> </span>
|
|
1330
|
-
<span class="cline-any cline-no"> </span>
|
|
1331
|
-
<span class="cline-any cline-no"> </span>
|
|
1332
|
-
<span class="cline-any cline-no"> </span>
|
|
1333
|
-
<span class="cline-any cline-no"> </span>
|
|
1334
|
-
<span class="cline-any cline-no"> </span>
|
|
1335
|
-
<span class="cline-any cline-no"> </span>
|
|
1336
|
-
<span class="cline-any cline-no"> </span>
|
|
1337
|
-
<span class="cline-any cline-no"> </span>
|
|
1338
|
-
<span class="cline-any cline-no"> </span>
|
|
1339
|
-
<span class="cline-any cline-no"> </span>
|
|
1340
|
-
<span class="cline-any cline-no"> </span>
|
|
1341
|
-
<span class="cline-any cline-no"> </span>
|
|
1342
|
-
<span class="cline-any cline-no"> </span>
|
|
1343
|
-
<span class="cline-any cline-no"> </span>
|
|
1344
|
-
<span class="cline-any cline-no"> </span>
|
|
1345
|
-
<span class="cline-any cline-no"> </span>
|
|
1346
|
-
<span class="cline-any cline-no"> </span>
|
|
1347
|
-
<span class="cline-any cline-no"> </span>
|
|
1348
|
-
<span class="cline-any cline-no"> </span>
|
|
1349
|
-
<span class="cline-any cline-no"> </span>
|
|
1350
|
-
<span class="cline-any cline-no"> </span>
|
|
1351
|
-
<span class="cline-any cline-no"> </span>
|
|
1352
|
-
<span class="cline-any cline-no"> </span>
|
|
1353
|
-
<span class="cline-any cline-no"> </span>
|
|
1354
|
-
<span class="cline-any cline-no"> </span>
|
|
1355
|
-
<span class="cline-any cline-no"> </span>
|
|
1356
|
-
<span class="cline-any cline-no"> </span>
|
|
1357
|
-
<span class="cline-any cline-no"> </span>
|
|
1358
|
-
<span class="cline-any cline-no"> </span>
|
|
1359
|
-
<span class="cline-any cline-no"> </span>
|
|
1360
|
-
<span class="cline-any cline-no"> </span>
|
|
1361
|
-
<span class="cline-any cline-no"> </span>
|
|
1362
|
-
<span class="cline-any cline-no"> </span>
|
|
1363
|
-
<span class="cline-any cline-no"> </span>
|
|
1364
|
-
<span class="cline-any cline-no"> </span>
|
|
1365
|
-
<span class="cline-any cline-no"> </span>
|
|
1366
|
-
<span class="cline-any cline-no"> </span>
|
|
1367
|
-
<span class="cline-any cline-no"> </span>
|
|
1368
|
-
<span class="cline-any cline-no"> </span>
|
|
1369
|
-
<span class="cline-any cline-no"> </span>
|
|
1370
|
-
<span class="cline-any cline-no"> </span>
|
|
1371
|
-
<span class="cline-any cline-no"> </span>
|
|
1372
|
-
<span class="cline-any cline-no"> </span>
|
|
1373
|
-
<span class="cline-any cline-no"> </span>
|
|
1374
|
-
<span class="cline-any cline-no"> </span>
|
|
1375
|
-
<span class="cline-any cline-no"> </span>
|
|
1376
|
-
<span class="cline-any cline-no"> </span>
|
|
1377
|
-
<span class="cline-any cline-no"> </span>
|
|
1378
|
-
<span class="cline-any cline-no"> </span>
|
|
1379
|
-
<span class="cline-any cline-no"> </span>
|
|
1380
|
-
<span class="cline-any cline-no"> </span>
|
|
1381
|
-
<span class="cline-any cline-no"> </span>
|
|
1382
|
-
<span class="cline-any cline-no"> </span>
|
|
1383
|
-
<span class="cline-any cline-no"> </span>
|
|
1384
|
-
<span class="cline-any cline-no"> </span>
|
|
1385
|
-
<span class="cline-any cline-no"> </span>
|
|
1386
|
-
<span class="cline-any cline-no"> </span>
|
|
1387
|
-
<span class="cline-any cline-no"> </span>
|
|
1388
|
-
<span class="cline-any cline-no"> </span>
|
|
1389
|
-
<span class="cline-any cline-no"> </span>
|
|
1390
|
-
<span class="cline-any cline-no"> </span>
|
|
1391
|
-
<span class="cline-any cline-no"> </span>
|
|
1392
|
-
<span class="cline-any cline-no"> </span>
|
|
1393
|
-
<span class="cline-any cline-no"> </span>
|
|
1394
|
-
<span class="cline-any cline-no"> </span>
|
|
1395
|
-
<span class="cline-any cline-no"> </span>
|
|
1396
|
-
<span class="cline-any cline-no"> </span>
|
|
1397
|
-
<span class="cline-any cline-no"> </span>
|
|
1398
|
-
<span class="cline-any cline-no"> </span>
|
|
1399
|
-
<span class="cline-any cline-no"> </span>
|
|
1400
|
-
<span class="cline-any cline-no"> </span>
|
|
1401
|
-
<span class="cline-any cline-no"> </span>
|
|
1402
|
-
<span class="cline-any cline-no"> </span>
|
|
1403
|
-
<span class="cline-any cline-no"> </span>
|
|
1404
|
-
<span class="cline-any cline-no"> </span>
|
|
1405
|
-
<span class="cline-any cline-no"> </span>
|
|
1406
|
-
<span class="cline-any cline-no"> </span>
|
|
1407
|
-
<span class="cline-any cline-no"> </span>
|
|
1408
|
-
<span class="cline-any cline-no"> </span>
|
|
1409
|
-
<span class="cline-any cline-no"> </span>
|
|
1410
|
-
<span class="cline-any cline-no"> </span>
|
|
1411
|
-
<span class="cline-any cline-no"> </span>
|
|
1412
|
-
<span class="cline-any cline-no"> </span>
|
|
1413
|
-
<span class="cline-any cline-no"> </span>
|
|
1414
|
-
<span class="cline-any cline-no"> </span>
|
|
1415
|
-
<span class="cline-any cline-no"> </span>
|
|
1416
|
-
<span class="cline-any cline-no"> </span>
|
|
1417
|
-
<span class="cline-any cline-no"> </span>
|
|
1418
|
-
<span class="cline-any cline-no"> </span>
|
|
1419
|
-
<span class="cline-any cline-no"> </span>
|
|
1420
|
-
<span class="cline-any cline-no"> </span>
|
|
1421
|
-
<span class="cline-any cline-no"> </span>
|
|
1422
|
-
<span class="cline-any cline-no"> </span>
|
|
1423
|
-
<span class="cline-any cline-no"> </span>
|
|
1424
|
-
<span class="cline-any cline-no"> </span>
|
|
1425
|
-
<span class="cline-any cline-no"> </span>
|
|
1426
|
-
<span class="cline-any cline-no"> </span>
|
|
1427
|
-
<span class="cline-any cline-no"> </span>
|
|
1428
|
-
<span class="cline-any cline-no"> </span>
|
|
1429
|
-
<span class="cline-any cline-no"> </span>
|
|
1430
|
-
<span class="cline-any cline-no"> </span>
|
|
1431
|
-
<span class="cline-any cline-no"> </span>
|
|
1432
|
-
<span class="cline-any cline-no"> </span>
|
|
1433
|
-
<span class="cline-any cline-no"> </span>
|
|
1434
|
-
<span class="cline-any cline-no"> </span>
|
|
1435
|
-
<span class="cline-any cline-no"> </span>
|
|
1436
|
-
<span class="cline-any cline-no"> </span>
|
|
1437
|
-
<span class="cline-any cline-no"> </span>
|
|
1438
|
-
<span class="cline-any cline-no"> </span>
|
|
1439
|
-
<span class="cline-any cline-no"> </span>
|
|
1440
|
-
<span class="cline-any cline-no"> </span>
|
|
1441
|
-
<span class="cline-any cline-no"> </span>
|
|
1442
|
-
<span class="cline-any cline-no"> </span>
|
|
1443
|
-
<span class="cline-any cline-no"> </span>
|
|
1444
|
-
<span class="cline-any cline-no"> </span>
|
|
1445
|
-
<span class="cline-any cline-no"> </span>
|
|
1446
|
-
<span class="cline-any cline-no"> </span>
|
|
1447
|
-
<span class="cline-any cline-no"> </span>
|
|
1448
|
-
<span class="cline-any cline-no"> </span>
|
|
1449
|
-
<span class="cline-any cline-no"> </span>
|
|
1450
|
-
<span class="cline-any cline-no"> </span>
|
|
1451
|
-
<span class="cline-any cline-no"> </span>
|
|
1452
|
-
<span class="cline-any cline-no"> </span>
|
|
1453
|
-
<span class="cline-any cline-no"> </span>
|
|
1454
|
-
<span class="cline-any cline-no"> </span>
|
|
1455
|
-
<span class="cline-any cline-no"> </span>
|
|
1456
|
-
<span class="cline-any cline-no"> </span>
|
|
1457
|
-
<span class="cline-any cline-no"> </span>
|
|
1458
|
-
<span class="cline-any cline-no"> </span>
|
|
1459
|
-
<span class="cline-any cline-no"> </span>
|
|
1460
|
-
<span class="cline-any cline-no"> </span>
|
|
1461
|
-
<span class="cline-any cline-no"> </span>
|
|
1462
|
-
<span class="cline-any cline-no"> </span>
|
|
1463
|
-
<span class="cline-any cline-no"> </span>
|
|
1464
|
-
<span class="cline-any cline-no"> </span>
|
|
1465
|
-
<span class="cline-any cline-no"> </span>
|
|
1466
|
-
<span class="cline-any cline-no"> </span>
|
|
1467
|
-
<span class="cline-any cline-no"> </span>
|
|
1468
|
-
<span class="cline-any cline-no"> </span>
|
|
1469
|
-
<span class="cline-any cline-no"> </span>
|
|
1470
|
-
<span class="cline-any cline-no"> </span>
|
|
1471
|
-
<span class="cline-any cline-no"> </span>
|
|
1472
|
-
<span class="cline-any cline-no"> </span>
|
|
1473
|
-
<span class="cline-any cline-no"> </span>
|
|
1474
|
-
<span class="cline-any cline-no"> </span>
|
|
1475
|
-
<span class="cline-any cline-no"> </span>
|
|
1476
|
-
<span class="cline-any cline-no"> </span>
|
|
1477
|
-
<span class="cline-any cline-no"> </span>
|
|
1478
|
-
<span class="cline-any cline-no"> </span>
|
|
1479
|
-
<span class="cline-any cline-no"> </span>
|
|
1480
|
-
<span class="cline-any cline-no"> </span>
|
|
1481
|
-
<span class="cline-any cline-no"> </span>
|
|
1482
|
-
<span class="cline-any cline-no"> </span>
|
|
1483
|
-
<span class="cline-any cline-no"> </span>
|
|
1484
|
-
<span class="cline-any cline-no"> </span>
|
|
1485
|
-
<span class="cline-any cline-no"> </span>
|
|
1486
|
-
<span class="cline-any cline-no"> </span>
|
|
1487
|
-
<span class="cline-any cline-no"> </span>
|
|
1488
|
-
<span class="cline-any cline-no"> </span>
|
|
1489
|
-
<span class="cline-any cline-no"> </span>
|
|
1490
|
-
<span class="cline-any cline-no"> </span>
|
|
1491
|
-
<span class="cline-any cline-no"> </span>
|
|
1492
|
-
<span class="cline-any cline-no"> </span>
|
|
1493
|
-
<span class="cline-any cline-no"> </span>
|
|
1494
|
-
<span class="cline-any cline-no"> </span>
|
|
1495
|
-
<span class="cline-any cline-no"> </span>
|
|
1496
|
-
<span class="cline-any cline-no"> </span>
|
|
1497
|
-
<span class="cline-any cline-no"> </span>
|
|
1498
|
-
<span class="cline-any cline-no"> </span>
|
|
1499
|
-
<span class="cline-any cline-no"> </span>
|
|
1500
|
-
<span class="cline-any cline-no"> </span>
|
|
1501
|
-
<span class="cline-any cline-no"> </span>
|
|
1502
|
-
<span class="cline-any cline-no"> </span>
|
|
1503
|
-
<span class="cline-any cline-no"> </span>
|
|
1504
|
-
<span class="cline-any cline-no"> </span>
|
|
1505
|
-
<span class="cline-any cline-no"> </span>
|
|
1506
|
-
<span class="cline-any cline-no"> </span>
|
|
1507
|
-
<span class="cline-any cline-no"> </span>
|
|
1508
|
-
<span class="cline-any cline-no"> </span>
|
|
1509
|
-
<span class="cline-any cline-no"> </span>
|
|
1510
|
-
<span class="cline-any cline-no"> </span>
|
|
1511
|
-
<span class="cline-any cline-no"> </span>
|
|
1512
|
-
<span class="cline-any cline-no"> </span>
|
|
1513
|
-
<span class="cline-any cline-no"> </span>
|
|
1514
|
-
<span class="cline-any cline-no"> </span>
|
|
1515
|
-
<span class="cline-any cline-no"> </span>
|
|
1516
|
-
<span class="cline-any cline-no"> </span>
|
|
1517
|
-
<span class="cline-any cline-no"> </span>
|
|
1518
|
-
<span class="cline-any cline-no"> </span>
|
|
1519
|
-
<span class="cline-any cline-no"> </span>
|
|
1520
|
-
<span class="cline-any cline-no"> </span>
|
|
1521
|
-
<span class="cline-any cline-no"> </span>
|
|
1522
|
-
<span class="cline-any cline-no"> </span>
|
|
1523
|
-
<span class="cline-any cline-no"> </span>
|
|
1524
|
-
<span class="cline-any cline-no"> </span>
|
|
1525
|
-
<span class="cline-any cline-no"> </span>
|
|
1526
|
-
<span class="cline-any cline-neutral"> </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<unknown>();</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<ConnectionStep>(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<string>('testnet');</span>
|
|
1677
|
-
<span class="cstat-no" title="statement not covered" > readonly selectedProtocol = signal<'hsuite-native' | 'walletconnect' | null>(null);</span>
|
|
1678
|
-
<span class="cstat-no" title="statement not covered" > readonly selectedConnectionMethod = signal<ConnectionMethod | null>(null);</span>
|
|
1679
|
-
<span class="cstat-no" title="statement not covered" > readonly selectedLedger = signal<'hedera' | 'xrpl' | null>(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<boolean>(false);</span>
|
|
1683
|
-
<span class="cstat-no" title="statement not covered" > readonly connectionError = signal<string | null>(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<string>('');</span>
|
|
1687
|
-
<span class="cstat-no" title="statement not covered" > readonly isGeneratingOffer = signal<boolean>(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<boolean>(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<boolean>(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<boolean>(this.detectMobile());</span>
|
|
1702
|
-
<span class="cstat-no" title="statement not covered" > readonly isExtensionAvailable = signal<boolean>(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<ProtocolOption[]>(() => {</span>
|
|
1665
|
+
<span class="cline-any cline-yes">10x</span>
|
|
1666
|
+
<span class="cline-any cline-yes">10x</span>
|
|
1667
|
+
<span class="cline-any cline-yes">10x</span>
|
|
1668
|
+
<span class="cline-any cline-yes">10x</span>
|
|
1669
|
+
<span class="cline-any cline-yes">10x</span>
|
|
1670
|
+
<span class="cline-any cline-yes">10x</span>
|
|
1671
|
+
<span class="cline-any cline-yes">10x</span>
|
|
1672
|
+
<span class="cline-any cline-yes">10x</span>
|
|
1673
|
+
<span class="cline-any cline-yes">10x</span>
|
|
1674
|
+
<span class="cline-any cline-yes">10x</span>
|
|
1675
|
+
<span class="cline-any cline-yes">10x</span>
|
|
1676
|
+
<span class="cline-any cline-yes">10x</span>
|
|
1677
|
+
<span class="cline-any cline-yes">10x</span>
|
|
1678
|
+
<span class="cline-any cline-yes">10x</span>
|
|
1679
|
+
<span class="cline-any cline-yes">10x</span>
|
|
1680
|
+
<span class="cline-any cline-yes">10x</span>
|
|
1681
|
+
<span class="cline-any cline-yes">10x</span>
|
|
1682
|
+
<span class="cline-any cline-yes">10x</span>
|
|
1683
|
+
<span class="cline-any cline-yes">10x</span>
|
|
1684
|
+
<span class="cline-any cline-yes">10x</span>
|
|
1685
|
+
<span class="cline-any cline-yes">10x</span>
|
|
1686
|
+
<span class="cline-any cline-yes">10x</span>
|
|
1687
|
+
<span class="cline-any cline-yes">10x</span>
|
|
1688
|
+
<span class="cline-any cline-neutral"> </span></td><td class="text"><pre class="prettyprint lang-js">/**
|
|
1689
|
+
* @file wallet-connection-modal.component.ts
|
|
1690
|
+
* @description Multi-protocol wallet connection modal with step-by-step flow
|
|
1691
|
+
*
|
|
1692
|
+
* Provides a beautiful, user-friendly interface for connecting wallets across
|
|
1693
|
+
* multiple protocols (HSuite Native, WalletConnect) and ledgers (Hedera, XRPL).
|
|
1694
|
+
*
|
|
1695
|
+
* Features:
|
|
1696
|
+
* - Step-by-step connection wizard with direct selection (no Next button)
|
|
1697
|
+
* - Dynamic step indicator showing only relevant steps per protocol path
|
|
1698
|
+
* - Network selection (Mainnet, Testnet)
|
|
1699
|
+
* - Protocol selection (HSuite Native vs WalletConnect)
|
|
1700
|
+
* - Connection method selection (Desktop or Mobile QR)
|
|
1701
|
+
* - Ledger selection (Hedera, XRPL) for WalletConnect
|
|
1702
|
+
* - QR code display for mobile P2P connections
|
|
1703
|
+
* - Beautiful animations and loading states
|
|
1704
|
+
*
|
|
1705
|
+
* Step Paths:
|
|
1706
|
+
* - HSuite Native + Desktop: Network → Protocol → Method (3 steps)
|
|
1707
|
+
* - HSuite Native + Mobile QR: Network → Protocol → Method → QR Pairing (4 steps)
|
|
1708
|
+
* - WalletConnect: Network → Protocol → Ledger → Connect (4 steps)
|
|
1709
|
+
*/
|
|
1710
|
+
|
|
1711
|
+
import { CommonModule } from '@angular/common';
|
|
1712
|
+
import {
|
|
1713
|
+
Component,
|
|
1714
|
+
Input,
|
|
1715
|
+
Output,
|
|
1716
|
+
EventEmitter,
|
|
1717
|
+
OnInit,
|
|
1718
|
+
signal,
|
|
1719
|
+
computed,
|
|
1720
|
+
inject,
|
|
1721
|
+
} from '@angular/core';
|
|
1722
|
+
import { getLogger } from '@hsuite/native-connect-sdk';
|
|
1723
|
+
import type { SupportedLedger } from '@hsuite/native-connect-sdk';
|
|
1724
|
+
import { IonicModule, ModalController, Platform } from '@ionic/angular';
|
|
1725
|
+
|
|
1726
|
+
import type { WalletConnectV2Config } from '../../models/provider-types';
|
|
1727
|
+
import { DEFAULT_WALLET_URL } from '../../models/provider-types';
|
|
1728
|
+
import { P2PNativeProvider } from '../../providers/p2p-native/p2p-native.provider';
|
|
1729
|
+
import { UnifiedWalletService } from '../../services/unified-wallet.service';
|
|
1730
|
+
import { registerLedgerIcons } from '../../utils/ledger-icons.util';
|
|
1731
|
+
import { LedgerUIRegistry } from '../../utils/ledger-ui-registry';
|
|
1732
|
+
|
|
1733
|
+
import {
|
|
1734
|
+
ConnectionMethodStepComponent,
|
|
1735
|
+
type ConnectionMethodOption,
|
|
1736
|
+
} from './connection-method-step/connection-method-step.component';
|
|
1737
|
+
import { QrPairingStepComponent } from './qr-pairing-step/qr-pairing-step.component';
|
|
1738
|
+
|
|
1739
|
+
const logger = getLogger().scoped?.('WalletConnectionModal'<span class="branch-0 cbranch-no" title="branch not covered" >) ?? getLogger();</span>
|
|
1740
|
+
|
|
1741
|
+
/**
|
|
1742
|
+
* Connection step enumeration for the wizard flow
|
|
1743
|
+
*/
|
|
1744
|
+
enum ConnectionStep {
|
|
1745
|
+
NetworkSelection = 1,
|
|
1746
|
+
ProtocolSelection = 2,
|
|
1747
|
+
ConnectionMethodSelection = 3,
|
|
1748
|
+
LedgerSelection = 4,
|
|
1749
|
+
QrPairing = 5,
|
|
1750
|
+
ConnectionProgress = 6,
|
|
1751
|
+
}
|
|
1752
|
+
|
|
1753
|
+
/**
|
|
1754
|
+
* Connection method type.
|
|
1755
|
+
* - desktop: Uses extension if available, otherwise opens PWA in new tab (SDK auto-selects)
|
|
1756
|
+
* - mobile-qr: Two-way QR scan for cross-device P2P connection
|
|
1757
|
+
*/
|
|
1758
|
+
type ConnectionMethod = 'desktop' | 'mobile-qr';
|
|
1759
|
+
|
|
1760
|
+
/**
|
|
1761
|
+
* Network configuration options
|
|
1762
|
+
*/
|
|
1763
|
+
interface NetworkOption {
|
|
1764
|
+
id: string;
|
|
1765
|
+
name: string;
|
|
1766
|
+
description: string;
|
|
1767
|
+
icon?: string;
|
|
1768
|
+
recommended?: boolean;
|
|
1769
|
+
}
|
|
1770
|
+
|
|
1771
|
+
/**
|
|
1772
|
+
* Protocol configuration options
|
|
1773
|
+
*/
|
|
1774
|
+
interface ProtocolOption {
|
|
1775
|
+
id: 'hsuite-native' | 'walletconnect';
|
|
1776
|
+
name: string;
|
|
1777
|
+
description: string;
|
|
1778
|
+
icon: string;
|
|
1779
|
+
features: string[];
|
|
1780
|
+
}
|
|
1781
|
+
|
|
1782
|
+
/**
|
|
1783
|
+
* Ledger configuration options
|
|
1784
|
+
*/
|
|
1785
|
+
interface LedgerOption {
|
|
1786
|
+
id: SupportedLedger;
|
|
1787
|
+
name: string;
|
|
1788
|
+
description: string;
|
|
1789
|
+
icon: string;
|
|
1790
|
+
}
|
|
1791
|
+
|
|
1792
|
+
/**
|
|
1793
|
+
* Per-ledger copy for the WalletConnect "Choose Blockchain" step.
|
|
1794
|
+
*
|
|
1795
|
+
* Keyed by {@link SupportedLedger} (the closed set of ledgers the WalletConnect
|
|
1796
|
+
* provider brokers) via `satisfies`, so widening that union forces a description
|
|
1797
|
+
* here. Display name and icon come from {@link LedgerUIRegistry}; this map holds
|
|
1798
|
+
* only the connection-flow copy specific to this surface.
|
|
1799
|
+
*/
|
|
1800
|
+
const LEDGER_DESCRIPTIONS = {
|
|
1801
|
+
hedera: 'Hedera Hashgraph network',
|
|
1802
|
+
xrpl: 'XRP Ledger network',
|
|
1803
|
+
} satisfies Record<SupportedLedger, string>;
|
|
1804
|
+
|
|
1805
|
+
/**
|
|
1806
|
+
* Step configuration for dynamic step indicator.
|
|
1807
|
+
* Defines the total steps and labels based on selected protocol path.
|
|
1808
|
+
*/
|
|
1809
|
+
interface StepConfig {
|
|
1810
|
+
/** Total number of steps in the current path */
|
|
1811
|
+
total: number;
|
|
1812
|
+
/** Labels for each step in the progress indicator */
|
|
1813
|
+
labels: string[];
|
|
1814
|
+
}
|
|
1815
|
+
|
|
1816
|
+
/**
|
|
1817
|
+
* Main wallet connection modal component.
|
|
1818
|
+
* Orchestrates the multi-step connection flow.
|
|
1819
|
+
*/
|
|
1820
|
+
@Component({
|
|
1821
|
+
selector: 'hsuite-wallet-connection-modal',
|
|
1822
|
+
standalone: true,
|
|
1823
|
+
imports: [CommonModule, IonicModule, ConnectionMethodStepComponent, QrPairingStepComponent],
|
|
1824
|
+
templateUrl: './wallet-connection-modal.component.html',
|
|
1825
|
+
styleUrls: ['./wallet-connection-modal.component.scss'],
|
|
1826
|
+
})
|
|
1827
|
+
export class WalletConnectionModalComponent implements OnInit {
|
|
1828
|
+
/**
|
|
1829
|
+
* WalletConnect project ID (required for WalletConnect)
|
|
1830
|
+
*/
|
|
1831
|
+
@Input() projectId?: string;
|
|
1832
|
+
|
|
1833
|
+
/**
|
|
1834
|
+
* Pins the connection network and hides the network-selection step.
|
|
1835
|
+
*
|
|
1836
|
+
* When set to `'mainnet'` or `'testnet'`, the host dApp decides the network
|
|
1837
|
+
* and the user is never shown the network picker — the modal opens directly
|
|
1838
|
+
* on protocol selection. When omitted (default), the user chooses the network
|
|
1839
|
+
* as the first step.
|
|
1840
|
+
*/
|
|
1841
|
+
@Input() network?: 'mainnet' | 'testnet';
|
|
1842
|
+
|
|
1843
|
+
/**
|
|
1844
|
+
* App name for WalletConnect metadata
|
|
1845
|
+
*/
|
|
1846
|
+
@Input() appName: string = 'HSuite Demo';
|
|
1847
|
+
|
|
1848
|
+
/**
|
|
1849
|
+
* App description for WalletConnect metadata
|
|
1850
|
+
*/
|
|
1851
|
+
@Input() appDescription: string = 'Multi-chain wallet connection';
|
|
1852
|
+
|
|
1853
|
+
/**
|
|
1854
|
+
* Wallet URL for HSuite Native connection
|
|
1855
|
+
*/
|
|
1856
|
+
@Input() walletUrl: string = DEFAULT_WALLET_URL;
|
|
1857
|
+
|
|
1858
|
+
/**
|
|
1859
|
+
* Event emitted when connection is successful
|
|
1860
|
+
*/
|
|
1861
|
+
@Output() connected = new EventEmitter<unknown>();
|
|
1862
|
+
|
|
1863
|
+
// Note: answerScannerRequested removed - new Nostr-first flow doesn't need answer scanning
|
|
1864
|
+
|
|
1865
|
+
private readonly platform = inject(Platform);
|
|
1866
|
+
private readonly p2pNativeProvider = inject(P2PNativeProvider);
|
|
1867
|
+
|
|
1868
|
+
// Step management
|
|
1869
|
+
readonly currentStep = signal<ConnectionStep>(ConnectionStep.NetworkSelection);
|
|
1870
|
+
readonly ConnectionStep = ConnectionStep;
|
|
1871
|
+
|
|
1872
|
+
// Selection state
|
|
1873
|
+
readonly selectedNetwork = signal<string>('testnet');
|
|
1874
|
+
readonly selectedProtocol = signal<'hsuite-native' | 'walletconnect' | null>(null);
|
|
1875
|
+
readonly selectedConnectionMethod = signal<ConnectionMethod | null>(null);
|
|
1876
|
+
readonly selectedLedger = signal<SupportedLedger | null>(null);
|
|
1877
|
+
|
|
1878
|
+
// Loading state
|
|
1879
|
+
readonly isConnecting = signal<boolean>(false);
|
|
1880
|
+
readonly connectionError = signal<string | null>(null);
|
|
1881
|
+
|
|
1882
|
+
// QR Pairing state
|
|
1883
|
+
readonly pairingOffer = signal<string>('');
|
|
1884
|
+
readonly isGeneratingOffer = signal<boolean>(false);
|
|
1885
|
+
|
|
1886
|
+
/**
|
|
1887
|
+
* Indicates we're waiting for the wallet to scan the QR and connect via Nostr.
|
|
1888
|
+
*/
|
|
1889
|
+
readonly isWaitingForWallet = signal<boolean>(false);
|
|
1890
|
+
|
|
1891
|
+
/**
|
|
1892
|
+
* Indicates we're waiting for the wallet user to approve the session.
|
|
1893
|
+
* Nostr connection is established, but session approval is pending.
|
|
1894
|
+
*/
|
|
1895
|
+
readonly isWaitingForApproval = signal<boolean>(false);
|
|
1896
|
+
|
|
1897
|
+
// Platform detection
|
|
1898
|
+
readonly isMobile = signal<boolean>(this.detectMobile());
|
|
1899
|
+
readonly isExtensionAvailable = signal<boolean>(this.detectExtension());
|
|
1900
|
+
|
|
1901
|
+
// Configuration options
|
|
1902
|
+
readonly networkOptions: NetworkOption[] = [
|
|
1903
|
+
{
|
|
1904
|
+
id: 'mainnet',
|
|
1905
|
+
name: 'Mainnet',
|
|
1906
|
+
description: 'Production network with real assets',
|
|
1907
|
+
icon: 'shield-checkmark',
|
|
1908
|
+
},
|
|
1909
|
+
{
|
|
1910
|
+
id: 'testnet',
|
|
1911
|
+
name: 'Testnet',
|
|
1912
|
+
description: 'Test network for development',
|
|
1913
|
+
icon: 'flask',
|
|
1914
|
+
recommended: true,
|
|
1915
|
+
},
|
|
1916
|
+
];
|
|
1917
|
+
|
|
1918
|
+
readonly protocolOptions = computed<ProtocolOption[]>(() => {
|
|
1722
1919
|
<span class="cstat-no" title="statement not covered" > const options: ProtocolOption[] = [</span>
|
|
1723
1920
|
<span class="cstat-no" title="statement not covered" > {</span>
|
|
1724
1921
|
<span class="cstat-no" title="statement not covered" > id: 'hsuite-native',</span>
|
|
@@ -1751,30 +1948,27 @@
|
|
|
1751
1948
|
<span class="cstat-no" title="statement not covered" > }</span>
|
|
1752
1949
|
<span class="cstat-no" title="statement not covered" ></span>
|
|
1753
1950
|
<span class="cstat-no" title="statement not covered" > return options;</span>
|
|
1754
|
-
|
|
1755
|
-
|
|
1756
|
-
|
|
1757
|
-
|
|
1758
|
-
|
|
1759
|
-
|
|
1760
|
-
|
|
1761
|
-
|
|
1762
|
-
|
|
1763
|
-
|
|
1764
|
-
|
|
1765
|
-
|
|
1766
|
-
|
|
1767
|
-
|
|
1768
|
-
|
|
1769
|
-
|
|
1770
|
-
|
|
1771
|
-
|
|
1772
|
-
|
|
1773
|
-
|
|
1774
|
-
|
|
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<ConnectionMethodOption[]>(() => [</span>
|
|
1951
|
+
});
|
|
1952
|
+
|
|
1953
|
+
readonly ledgerOptions: LedgerOption[] = (
|
|
1954
|
+
Object.keys(LEDGER_DESCRIPTIONS) as SupportedLedger[]
|
|
1955
|
+
).map((id) => {
|
|
1956
|
+
const ui = LedgerUIRegistry.get(id);
|
|
1957
|
+
return {
|
|
1958
|
+
id,
|
|
1959
|
+
name: ui?.<span class="branch-0 cbranch-no" title="branch not covered" >displayName ?? id,</span>
|
|
1960
|
+
description: LEDGER_DESCRIPTIONS[id],
|
|
1961
|
+
icon: ui?.<span class="branch-0 cbranch-no" title="branch not covered" >iconName ?? '',</span>
|
|
1962
|
+
};
|
|
1963
|
+
});
|
|
1964
|
+
|
|
1965
|
+
/**
|
|
1966
|
+
* Connection method options for HSuite Native.
|
|
1967
|
+
* Simplified to two options:
|
|
1968
|
+
* - HSuite Wallet (desktop): SDK auto-selects extension or PWA
|
|
1969
|
+
* - Mobile Wallet (QR): Cross-device P2P connection
|
|
1970
|
+
*/
|
|
1971
|
+
readonly connectionMethodOptions = computed<ConnectionMethodOption[]>(() => [
|
|
1778
1972
|
<span class="cstat-no" title="statement not covered" > {</span>
|
|
1779
1973
|
<span class="cstat-no" title="statement not covered" > id: 'desktop',</span>
|
|
1780
1974
|
<span class="cstat-no" title="statement not covered" > name: 'HSuite Wallet',</span>
|
|
@@ -1797,10 +1991,10 @@
|
|
|
1797
1991
|
<span class="cstat-no" title="statement not covered" > recommended: this.isMobile(),</span>
|
|
1798
1992
|
<span class="cstat-no" title="statement not covered" > features: ['Cross-device', 'P2P', 'No server needed'],</span>
|
|
1799
1993
|
<span class="cstat-no" title="statement not covered" > },</span>
|
|
1800
|
-
|
|
1801
|
-
|
|
1802
|
-
|
|
1803
|
-
|
|
1994
|
+
]);
|
|
1995
|
+
|
|
1996
|
+
// Computed properties
|
|
1997
|
+
readonly canProceed = computed(() => {
|
|
1804
1998
|
<span class="cstat-no" title="statement not covered" > const step = this.currentStep();</span>
|
|
1805
1999
|
<span class="cstat-no" title="statement not covered" > switch (step) {</span>
|
|
1806
2000
|
<span class="cstat-no" title="statement not covered" > case ConnectionStep.NetworkSelection:</span>
|
|
@@ -1814,9 +2008,9 @@
|
|
|
1814
2008
|
<span class="cstat-no" title="statement not covered" > default:</span>
|
|
1815
2009
|
<span class="cstat-no" title="statement not covered" > return false;</span>
|
|
1816
2010
|
<span class="cstat-no" title="statement not covered" > }</span>
|
|
1817
|
-
|
|
1818
|
-
|
|
1819
|
-
|
|
2011
|
+
});
|
|
2012
|
+
|
|
2013
|
+
readonly stepTitle = computed(() => {
|
|
1820
2014
|
<span class="cstat-no" title="statement not covered" > const step = this.currentStep();</span>
|
|
1821
2015
|
<span class="cstat-no" title="statement not covered" > switch (step) {</span>
|
|
1822
2016
|
<span class="cstat-no" title="statement not covered" > case ConnectionStep.NetworkSelection:</span>
|
|
@@ -1834,178 +2028,223 @@
|
|
|
1834
2028
|
<span class="cstat-no" title="statement not covered" > default:</span>
|
|
1835
2029
|
<span class="cstat-no" title="statement not covered" > return '';</span>
|
|
1836
2030
|
<span class="cstat-no" title="statement not covered" > }</span>
|
|
1837
|
-
|
|
1838
|
-
|
|
1839
|
-
|
|
1840
|
-
|
|
1841
|
-
|
|
1842
|
-
|
|
1843
|
-
|
|
1844
|
-
|
|
1845
|
-
|
|
1846
|
-
|
|
1847
|
-
|
|
1848
|
-
|
|
1849
|
-
|
|
1850
|
-
|
|
1851
|
-
|
|
1852
|
-
|
|
1853
|
-
|
|
1854
|
-
|
|
1855
|
-
|
|
1856
|
-
<span class="
|
|
1857
|
-
<span class="cstat-no" title="statement not covered"
|
|
1858
|
-
|
|
1859
|
-
|
|
1860
|
-
|
|
1861
|
-
<span class="
|
|
1862
|
-
<span class="cstat-no" title="statement not covered" >
|
|
1863
|
-
<span class="cstat-no" title="statement not covered" >
|
|
1864
|
-
|
|
1865
|
-
|
|
2031
|
+
});
|
|
2032
|
+
|
|
2033
|
+
/**
|
|
2034
|
+
* Dynamic step configuration based on selected protocol and connection method.
|
|
2035
|
+
* Returns the total number of steps and labels for the progress indicator.
|
|
2036
|
+
*
|
|
2037
|
+
* Step Paths:
|
|
2038
|
+
* - Initial (no protocol): 3 placeholder steps
|
|
2039
|
+
* - HSuite Native + Desktop: 3 steps (Network, Protocol, Method)
|
|
2040
|
+
* - HSuite Native + Mobile QR: 4 steps (Network, Protocol, Method, Pair)
|
|
2041
|
+
* - WalletConnect: 4 steps (Network, Protocol, Ledger, Connect)
|
|
2042
|
+
*/
|
|
2043
|
+
readonly stepConfig = computed<StepConfig>(() => {
|
|
2044
|
+
const protocol = this.selectedProtocol();
|
|
2045
|
+
const method = this.selectedConnectionMethod();
|
|
2046
|
+
|
|
2047
|
+
let base: StepConfig;
|
|
2048
|
+
|
|
2049
|
+
// Initial state: show 3 placeholder steps until protocol is selected
|
|
2050
|
+
if (!protocol) <span class="branch-0 cbranch-no" title="branch not covered" >{</span>
|
|
2051
|
+
<span class="cstat-no" title="statement not covered" > base = { total: 3, labels: ['Network', 'Protocol', '...'] };</span>
|
|
2052
|
+
} else if (protocol === 'hsuite-native') {
|
|
2053
|
+
// HSuite Native path
|
|
2054
|
+
base =
|
|
2055
|
+
method === <span class="branch-0 cbranch-no" title="branch not covered" >'mobile-qr'</span>
|
|
2056
|
+
<span class="cstat-no" title="statement not covered" > ? // Mobile QR needs 4 steps</span>
|
|
2057
|
+
<span class="cstat-no" title="statement not covered" > { total: 4, labels: ['Network', 'Protocol', 'Method', 'Pair'] }</span>
|
|
2058
|
+
: // Desktop connects immediately after method selection (3 steps)
|
|
2059
|
+
{ total: 3, labels: ['Network', 'Protocol', 'Method'] };
|
|
2060
|
+
<span class="branch-0 cbranch-no" title="branch not covered" > } else {</span>
|
|
2061
|
+
<span class="cstat-no" title="statement not covered" > // WalletConnect path: 4 steps</span>
|
|
2062
|
+
<span class="cstat-no" title="statement not covered" > base = { total: 4, labels: ['Network', 'Protocol', 'Ledger', 'Connect'] };</span>
|
|
1866
2063
|
<span class="cstat-no" title="statement not covered" > }</span>
|
|
1867
|
-
|
|
1868
|
-
|
|
1869
|
-
|
|
1870
|
-
|
|
1871
|
-
|
|
1872
|
-
|
|
1873
|
-
|
|
1874
|
-
|
|
1875
|
-
|
|
1876
|
-
|
|
1877
|
-
|
|
1878
|
-
|
|
1879
|
-
|
|
1880
|
-
|
|
1881
|
-
|
|
1882
|
-
|
|
1883
|
-
|
|
2064
|
+
|
|
2065
|
+
// When the network is pinned by the host dApp the network step is never
|
|
2066
|
+
// shown — drop it from the indicator so the numbering stays accurate.
|
|
2067
|
+
if (this.network) {
|
|
2068
|
+
return { total: base.total - 1, labels: base.labels.slice(1) };
|
|
2069
|
+
}
|
|
2070
|
+
return base;
|
|
2071
|
+
});
|
|
2072
|
+
|
|
2073
|
+
/**
|
|
2074
|
+
* Maps the internal ConnectionStep enum to display position (1-based).
|
|
2075
|
+
* Different protocol paths have different step mappings.
|
|
2076
|
+
*/
|
|
2077
|
+
readonly displayStep = computed<number>(() => {
|
|
2078
|
+
const step = this.currentStep();
|
|
2079
|
+
// Protocol could be used for protocol-specific step mapping in the future
|
|
2080
|
+
const _protocol = this.selectedProtocol();
|
|
2081
|
+
|
|
2082
|
+
// When the network is pinned the network step is removed, so every
|
|
2083
|
+
// subsequent step shifts down one position in the indicator.
|
|
2084
|
+
const networkOffset = this.network ? <span class="branch-0 cbranch-no" title="branch not covered" >1 : 0;</span>
|
|
2085
|
+
|
|
2086
|
+
// Map internal step to display position based on protocol path
|
|
2087
|
+
switch (step) {
|
|
2088
|
+
<span class="branch-0 cbranch-no" title="branch not covered" > case ConnectionStep.NetworkSelection:</span>
|
|
1884
2089
|
<span class="cstat-no" title="statement not covered" > return 1;</span>
|
|
1885
|
-
|
|
1886
|
-
|
|
1887
|
-
<span class="
|
|
1888
|
-
<span class="cstat-no" title="statement not covered" > return 3;</span>
|
|
1889
|
-
<span class="
|
|
2090
|
+
case ConnectionStep.ProtocolSelection:
|
|
2091
|
+
return 2 - networkOffset;
|
|
2092
|
+
<span class="branch-0 cbranch-no" title="branch not covered" > case ConnectionStep.ConnectionMethodSelection:</span>
|
|
2093
|
+
<span class="cstat-no" title="statement not covered" > return 3 - networkOffset;</span>
|
|
2094
|
+
<span class="branch-0 cbranch-no" title="branch not covered" > case ConnectionStep.LedgerSelection:</span>
|
|
1890
2095
|
<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="
|
|
2096
|
+
<span class="cstat-no" title="statement not covered" > return 3 - networkOffset;</span>
|
|
2097
|
+
<span class="branch-0 cbranch-no" title="branch not covered" > case ConnectionStep.QrPairing:</span>
|
|
1893
2098
|
<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="
|
|
2099
|
+
<span class="cstat-no" title="statement not covered" > return 4 - networkOffset;</span>
|
|
2100
|
+
<span class="branch-0 cbranch-no" title="branch not covered" > case ConnectionStep.ConnectionProgress:</span>
|
|
1896
2101
|
<span class="cstat-no" title="statement not covered" > // Connection progress is always the last step</span>
|
|
1897
2102
|
<span class="cstat-no" title="statement not covered" > return this.stepConfig().total;</span>
|
|
1898
|
-
<span class="
|
|
2103
|
+
<span class="branch-0 cbranch-no" title="branch not covered" > default:</span>
|
|
1899
2104
|
<span class="cstat-no" title="statement not covered" > return 1;</span>
|
|
2105
|
+
}
|
|
2106
|
+
});
|
|
2107
|
+
|
|
2108
|
+
/**
|
|
2109
|
+
* Whether a back affordance should be offered for the current step.
|
|
2110
|
+
* The first reachable step has no back target — that is protocol selection
|
|
2111
|
+
* when the network is pinned, otherwise network selection. The connection
|
|
2112
|
+
* progress step manages its own retry navigation instead.
|
|
2113
|
+
*/
|
|
2114
|
+
readonly canGoBack = computed<boolean>(() => {
|
|
2115
|
+
const step = this.currentStep();
|
|
2116
|
+
if (step === ConnectionStep.ConnectionProgress) <span class="branch-0 cbranch-no" title="branch not covered" >{</span>
|
|
2117
|
+
<span class="cstat-no" title="statement not covered" > return false;</span>
|
|
1900
2118
|
<span class="cstat-no" title="statement not covered" > }</span>
|
|
1901
|
-
|
|
1902
|
-
<span class="
|
|
1903
|
-
<span class="cstat-no" title="statement not covered" >
|
|
1904
|
-
|
|
1905
|
-
|
|
1906
|
-
|
|
1907
|
-
|
|
1908
|
-
|
|
1909
|
-
|
|
1910
|
-
|
|
1911
|
-
|
|
1912
|
-
|
|
1913
|
-
|
|
2119
|
+
const firstStep = this.network
|
|
2120
|
+
? <span class="branch-0 cbranch-no" title="branch not covered" >ConnectionStep.ProtocolSelection</span>
|
|
2121
|
+
<span class="cstat-no" title="statement not covered" > : ConnectionStep.NetworkSelection;</span>
|
|
2122
|
+
return step > firstStep;
|
|
2123
|
+
});
|
|
2124
|
+
|
|
2125
|
+
/**
|
|
2126
|
+
*
|
|
2127
|
+
* @param modalController
|
|
2128
|
+
* @param unifiedWalletService
|
|
2129
|
+
*/
|
|
2130
|
+
constructor(
|
|
2131
|
+
private modalController: ModalController,
|
|
2132
|
+
private unifiedWalletService: UnifiedWalletService,
|
|
2133
|
+
) {
|
|
2134
|
+
// Set up mobile provider connection callback
|
|
2135
|
+
this.p2pNativeProvider.onPeerConnected(() => {
|
|
1914
2136
|
<span class="cstat-no" title="statement not covered" > this.onMobileConnected();</span>
|
|
1915
|
-
|
|
1916
|
-
|
|
1917
|
-
|
|
1918
|
-
|
|
1919
|
-
|
|
1920
|
-
|
|
1921
|
-
|
|
1922
|
-
|
|
1923
|
-
|
|
1924
|
-
|
|
1925
|
-
|
|
1926
|
-
|
|
1927
|
-
|
|
1928
|
-
|
|
1929
|
-
|
|
1930
|
-
|
|
1931
|
-
|
|
2137
|
+
});
|
|
2138
|
+
|
|
2139
|
+
// Register the shared ledger brand logos so <ion-icon> can resolve them by name.
|
|
2140
|
+
registerLedgerIcons();
|
|
2141
|
+
}
|
|
2142
|
+
|
|
2143
|
+
/**
|
|
2144
|
+
* Apply the pinned network (if any) before the first render.
|
|
2145
|
+
*
|
|
2146
|
+
* When the host dApp provides a {@link network}, lock the selection to it and
|
|
2147
|
+
* skip straight to protocol selection so the user never sees — and cannot
|
|
2148
|
+
* change — the network. With no input, the modal opens on network selection.
|
|
2149
|
+
*/
|
|
2150
|
+
ngOnInit(): void {
|
|
2151
|
+
if (this.network) {
|
|
2152
|
+
this.selectedNetwork.set(this.network);
|
|
2153
|
+
this.currentStep.set(ConnectionStep.ProtocolSelection);
|
|
2154
|
+
}
|
|
2155
|
+
}
|
|
2156
|
+
|
|
2157
|
+
/**
|
|
2158
|
+
* Select a network option (internal, use selectNetworkAndProceed for UI)
|
|
2159
|
+
* @param networkId
|
|
2160
|
+
*/
|
|
2161
|
+
<span class="fstat-no" title="function not covered" > selectNetwork(networkId: string): void {</span>
|
|
1932
2162
|
<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
2163
|
<span class="cstat-no" title="statement not covered" > }</span>
|
|
1936
|
-
|
|
1937
|
-
|
|
1938
|
-
|
|
1939
|
-
|
|
1940
|
-
|
|
1941
|
-
|
|
1942
|
-
|
|
1943
|
-
|
|
1944
|
-
|
|
1945
|
-
|
|
1946
|
-
|
|
1947
|
-
|
|
1948
|
-
|
|
1949
|
-
|
|
1950
|
-
|
|
1951
|
-
|
|
1952
|
-
|
|
1953
|
-
|
|
1954
|
-
|
|
1955
|
-
|
|
1956
|
-
|
|
1957
|
-
|
|
2164
|
+
|
|
2165
|
+
/**
|
|
2166
|
+
* Select a network and automatically proceed to the next step.
|
|
2167
|
+
* This enables direct selection behavior without requiring a "Next" button.
|
|
2168
|
+
* @param networkId - The network ID to select ('mainnet' or 'testnet')
|
|
2169
|
+
*/
|
|
2170
|
+
selectNetworkAndProceed(networkId: string): void {
|
|
2171
|
+
this.selectedNetwork.set(networkId);
|
|
2172
|
+
// Auto-advance to protocol selection
|
|
2173
|
+
this.currentStep.set(ConnectionStep.ProtocolSelection);
|
|
2174
|
+
}
|
|
2175
|
+
|
|
2176
|
+
/**
|
|
2177
|
+
* Select a protocol option (internal, use selectProtocolAndProceed for UI)
|
|
2178
|
+
* @param protocolId
|
|
2179
|
+
*/
|
|
2180
|
+
selectProtocol(protocolId: 'hsuite-native' | 'walletconnect'): void {
|
|
2181
|
+
this.selectedProtocol.set(protocolId);
|
|
2182
|
+
}
|
|
2183
|
+
|
|
2184
|
+
/**
|
|
2185
|
+
* Select a protocol and automatically proceed to the appropriate next step.
|
|
2186
|
+
* - HSuite Native → Connection Method Selection
|
|
2187
|
+
* - WalletConnect → Ledger Selection
|
|
2188
|
+
* @param protocolId - The protocol ID to select
|
|
2189
|
+
*/
|
|
2190
|
+
selectProtocolAndProceed(protocolId: 'hsuite-native' | 'walletconnect'): void {
|
|
2191
|
+
this.selectedProtocol.set(protocolId);
|
|
2192
|
+
|
|
2193
|
+
if (protocolId === 'hsuite-native') {
|
|
2194
|
+
// HSuite Native: Go to connection method selection
|
|
2195
|
+
this.currentStep.set(ConnectionStep.ConnectionMethodSelection);
|
|
2196
|
+
<span class="branch-0 cbranch-no" title="branch not covered" > } else {</span>
|
|
1958
2197
|
<span class="cstat-no" title="statement not covered" > // WalletConnect: Go to ledger selection</span>
|
|
1959
2198
|
<span class="cstat-no" title="statement not covered" > this.currentStep.set(ConnectionStep.LedgerSelection);</span>
|
|
1960
2199
|
<span class="cstat-no" title="statement not covered" > }</span>
|
|
1961
|
-
|
|
1962
|
-
|
|
1963
|
-
|
|
1964
|
-
|
|
1965
|
-
|
|
1966
|
-
|
|
1967
|
-
|
|
1968
|
-
|
|
1969
|
-
|
|
1970
|
-
|
|
1971
|
-
|
|
1972
|
-
|
|
1973
|
-
|
|
1974
|
-
|
|
1975
|
-
|
|
1976
|
-
<span class="
|
|
2200
|
+
}
|
|
2201
|
+
|
|
2202
|
+
/**
|
|
2203
|
+
* Select a connection method (internal)
|
|
2204
|
+
* @param methodId
|
|
2205
|
+
*/
|
|
2206
|
+
selectConnectionMethod(methodId: string): void {
|
|
2207
|
+
this.selectedConnectionMethod.set(methodId as ConnectionMethod);
|
|
2208
|
+
}
|
|
2209
|
+
|
|
2210
|
+
/**
|
|
2211
|
+
* Handle connection method selection from step component.
|
|
2212
|
+
* Automatically proceeds to connect or QR pairing based on method.
|
|
2213
|
+
* @param methodId
|
|
2214
|
+
*/
|
|
2215
|
+
<span class="fstat-no" title="function not covered" > onConnectionMethodSelected(methodId: string): void {</span>
|
|
1977
2216
|
<span class="cstat-no" title="statement not covered" > this.selectConnectionMethod(methodId);</span>
|
|
1978
2217
|
<span class="cstat-no" title="statement not covered" > void this.next();</span>
|
|
1979
2218
|
<span class="cstat-no" title="statement not covered" > }</span>
|
|
1980
|
-
|
|
1981
|
-
|
|
1982
|
-
|
|
1983
|
-
|
|
1984
|
-
|
|
1985
|
-
<span class="
|
|
2219
|
+
|
|
2220
|
+
/**
|
|
2221
|
+
* Select a ledger option (internal, use selectLedgerAndConnect for UI)
|
|
2222
|
+
* @param ledgerId
|
|
2223
|
+
*/
|
|
2224
|
+
<span class="fstat-no" title="function not covered" > selectLedger(ledgerId: SupportedLedger): void {</span>
|
|
1986
2225
|
<span class="cstat-no" title="statement not covered" > this.selectedLedger.set(ledgerId);</span>
|
|
1987
2226
|
<span class="cstat-no" title="statement not covered" > }</span>
|
|
1988
|
-
|
|
1989
|
-
|
|
1990
|
-
|
|
1991
|
-
|
|
1992
|
-
|
|
1993
|
-
|
|
1994
|
-
<span class="
|
|
2227
|
+
|
|
2228
|
+
/**
|
|
2229
|
+
* Select a ledger and automatically initiate connection.
|
|
2230
|
+
* This enables direct selection behavior for WalletConnect ledger step.
|
|
2231
|
+
* @param ledgerId - The ledger ID to select ('hedera' or 'xrpl')
|
|
2232
|
+
*/
|
|
2233
|
+
<span class="fstat-no" title="function not covered" > selectLedgerAndConnect(ledgerId: SupportedLedger): void {</span>
|
|
1995
2234
|
<span class="cstat-no" title="statement not covered" > this.selectedLedger.set(ledgerId);</span>
|
|
1996
2235
|
<span class="cstat-no" title="statement not covered" > // Auto-connect with the selected ledger</span>
|
|
1997
2236
|
<span class="cstat-no" title="statement not covered" > void this.connect();</span>
|
|
1998
2237
|
<span class="cstat-no" title="statement not covered" > }</span>
|
|
1999
|
-
|
|
2000
|
-
|
|
2001
|
-
|
|
2002
|
-
|
|
2003
|
-
|
|
2004
|
-
|
|
2005
|
-
|
|
2006
|
-
<span class="
|
|
2238
|
+
|
|
2239
|
+
/**
|
|
2240
|
+
* Proceed to the next step in the wizard
|
|
2241
|
+
*/
|
|
2242
|
+
async next(): Promise<void> {
|
|
2243
|
+
const currentStep = this.currentStep();
|
|
2244
|
+
|
|
2245
|
+
if (currentStep === ConnectionStep.NetworkSelection) <span class="branch-0 cbranch-no" title="branch not covered" >{</span>
|
|
2007
2246
|
<span class="cstat-no" title="statement not covered" > this.currentStep.set(ConnectionStep.ProtocolSelection);</span>
|
|
2008
|
-
<span class="
|
|
2247
|
+
} else if (currentStep === ConnectionStep.ProtocolSelection) <span class="branch-0 cbranch-no" title="branch not covered" >{</span>
|
|
2009
2248
|
<span class="cstat-no" title="statement not covered" > const protocol = this.selectedProtocol();</span>
|
|
2010
2249
|
<span class="cstat-no" title="statement not covered" > if (protocol === 'hsuite-native') {</span>
|
|
2011
2250
|
<span class="cstat-no" title="statement not covered" > // HSuite Native: Show connection method selection</span>
|
|
@@ -2014,29 +2253,33 @@
|
|
|
2014
2253
|
<span class="cstat-no" title="statement not covered" > // WalletConnect: Show ledger selection</span>
|
|
2015
2254
|
<span class="cstat-no" title="statement not covered" > this.currentStep.set(ConnectionStep.LedgerSelection);</span>
|
|
2016
2255
|
<span class="cstat-no" title="statement not covered" > }</span>
|
|
2017
|
-
|
|
2018
|
-
|
|
2019
|
-
<span class="
|
|
2256
|
+
} else if (currentStep === ConnectionStep.ConnectionMethodSelection) {
|
|
2257
|
+
const method = this.selectedConnectionMethod();
|
|
2258
|
+
if (method === 'mobile-qr') <span class="branch-0 cbranch-no" title="branch not covered" >{</span>
|
|
2020
2259
|
<span class="cstat-no" title="statement not covered" > // Mobile QR: Show QR pairing step</span>
|
|
2021
2260
|
<span class="cstat-no" title="statement not covered" > await this.initiateQrPairing();</span>
|
|
2022
|
-
|
|
2023
|
-
|
|
2024
|
-
|
|
2025
|
-
|
|
2026
|
-
<span class="
|
|
2261
|
+
} else {
|
|
2262
|
+
// Desktop: Connect directly (SDK auto-selects extension or PWA)
|
|
2263
|
+
await this.connect();
|
|
2264
|
+
}
|
|
2265
|
+
<span class="branch-0 cbranch-no" title="branch not covered" > } else if (currentStep === ConnectionStep.LedgerSelection) {</span>
|
|
2027
2266
|
<span class="cstat-no" title="statement not covered" > // Connect with selected ledger</span>
|
|
2028
2267
|
<span class="cstat-no" title="statement not covered" > await this.connect();</span>
|
|
2029
2268
|
<span class="cstat-no" title="statement not covered" > }</span>
|
|
2030
|
-
|
|
2031
|
-
|
|
2032
|
-
|
|
2033
|
-
|
|
2034
|
-
|
|
2035
|
-
|
|
2036
|
-
|
|
2037
|
-
|
|
2038
|
-
|
|
2039
|
-
|
|
2269
|
+
}
|
|
2270
|
+
|
|
2271
|
+
/**
|
|
2272
|
+
* Go back to the previous step
|
|
2273
|
+
*/
|
|
2274
|
+
back(): void {
|
|
2275
|
+
const currentStep = this.currentStep();
|
|
2276
|
+
if (currentStep === ConnectionStep.ProtocolSelection) {
|
|
2277
|
+
// When the network is pinned, protocol selection is the first reachable
|
|
2278
|
+
// step — there is no network step to return to.
|
|
2279
|
+
if (!this.network) {
|
|
2280
|
+
this.currentStep.set(ConnectionStep.NetworkSelection);
|
|
2281
|
+
}
|
|
2282
|
+
<span class="branch-0 cbranch-no" title="branch not covered" > } else if (currentStep === ConnectionStep.ConnectionMethodSelection) {</span>
|
|
2040
2283
|
<span class="cstat-no" title="statement not covered" > this.currentStep.set(ConnectionStep.ProtocolSelection);</span>
|
|
2041
2284
|
<span class="cstat-no" title="statement not covered" > } else if (currentStep === ConnectionStep.LedgerSelection) {</span>
|
|
2042
2285
|
<span class="cstat-no" title="statement not covered" > this.currentStep.set(ConnectionStep.ProtocolSelection);</span>
|
|
@@ -2059,35 +2302,35 @@
|
|
|
2059
2302
|
<span class="cstat-no" title="statement not covered" > this.connectionError.set(null);</span>
|
|
2060
2303
|
<span class="cstat-no" title="statement not covered" > this.isConnecting.set(false);</span>
|
|
2061
2304
|
<span class="cstat-no" title="statement not covered" > }</span>
|
|
2062
|
-
|
|
2063
|
-
|
|
2064
|
-
|
|
2065
|
-
|
|
2066
|
-
|
|
2067
|
-
|
|
2068
|
-
|
|
2069
|
-
|
|
2070
|
-
|
|
2071
|
-
|
|
2072
|
-
|
|
2073
|
-
|
|
2074
|
-
|
|
2075
|
-
|
|
2076
|
-
|
|
2077
|
-
|
|
2078
|
-
|
|
2079
|
-
|
|
2080
|
-
|
|
2081
|
-
|
|
2082
|
-
|
|
2083
|
-
|
|
2084
|
-
<span class="
|
|
2085
|
-
|
|
2086
|
-
|
|
2087
|
-
|
|
2088
|
-
|
|
2089
|
-
|
|
2090
|
-
<span class="
|
|
2305
|
+
}
|
|
2306
|
+
|
|
2307
|
+
/**
|
|
2308
|
+
* Connect to the selected protocol and ledger
|
|
2309
|
+
*/
|
|
2310
|
+
private async connect(): Promise<void> {
|
|
2311
|
+
this.currentStep.set(ConnectionStep.ConnectionProgress);
|
|
2312
|
+
this.isConnecting.set(true);
|
|
2313
|
+
this.connectionError.set(null);
|
|
2314
|
+
|
|
2315
|
+
try {
|
|
2316
|
+
const protocol = this.selectedProtocol();
|
|
2317
|
+
const network = this.selectedNetwork();
|
|
2318
|
+
|
|
2319
|
+
if (protocol === 'hsuite-native') {
|
|
2320
|
+
// Connect to HSuite Native (multi-chain by default)
|
|
2321
|
+
// Use the input walletUrl and pass targetWindow metadata for consistent window naming
|
|
2322
|
+
await this.unifiedWalletService.connect('hsuite-native', {
|
|
2323
|
+
type: 'hsuite-native',
|
|
2324
|
+
appId: 'hsuite-demo',
|
|
2325
|
+
appName: this.appName,
|
|
2326
|
+
ledgerId: 'multi-chain',
|
|
2327
|
+
networkId: <span class="branch-0 cbranch-no" title="branch not covered" >network || 'testnet',</span>
|
|
2328
|
+
walletUrl: this.walletUrl,
|
|
2329
|
+
metadata: {
|
|
2330
|
+
targetWindow: 'hsuite-wallet',
|
|
2331
|
+
},
|
|
2332
|
+
});
|
|
2333
|
+
<span class="branch-0 cbranch-no" title="branch not covered" > } else if (protocol === 'walletconnect') {</span>
|
|
2091
2334
|
<span class="cstat-no" title="statement not covered" > // Connect to WalletConnect (ledger-specific)</span>
|
|
2092
2335
|
<span class="cstat-no" title="statement not covered" > const ledger = this.selectedLedger();</span>
|
|
2093
2336
|
<span class="cstat-no" title="statement not covered" > if (!ledger) {</span>
|
|
@@ -2111,11 +2354,11 @@
|
|
|
2111
2354
|
<span class="cstat-no" title="statement not covered" ></span>
|
|
2112
2355
|
<span class="cstat-no" title="statement not covered" > await this.unifiedWalletService.connect('walletconnect-v2', config);</span>
|
|
2113
2356
|
<span class="cstat-no" title="statement not covered" > }</span>
|
|
2114
|
-
|
|
2115
|
-
|
|
2116
|
-
|
|
2117
|
-
|
|
2118
|
-
<span class="
|
|
2357
|
+
|
|
2358
|
+
// Success! Emit event and close modal
|
|
2359
|
+
this.connected.emit({ protocol, network });
|
|
2360
|
+
await this.modalController.dismiss({ connected: true });
|
|
2361
|
+
<span class="branch-0 cbranch-no" title="branch not covered" > } catch (error) {</span>
|
|
2119
2362
|
<span class="cstat-no" title="statement not covered" > logger.error('Connection failed', {</span>
|
|
2120
2363
|
<span class="cstat-no" title="statement not covered" > error: error instanceof Error ? error.message : String(error),</span>
|
|
2121
2364
|
<span class="cstat-no" title="statement not covered" > });</span>
|
|
@@ -2126,27 +2369,27 @@
|
|
|
2126
2369
|
<span class="cstat-no" title="statement not covered" > // Stay on ConnectionProgress to show the error and "Try Again" button</span>
|
|
2127
2370
|
<span class="cstat-no" title="statement not covered" > // Don't auto-navigate away - let user click "Try Again" which calls back()</span>
|
|
2128
2371
|
<span class="cstat-no" title="statement not covered" > }</span>
|
|
2129
|
-
|
|
2130
|
-
|
|
2131
|
-
|
|
2132
|
-
|
|
2133
|
-
|
|
2134
|
-
<span class="
|
|
2372
|
+
}
|
|
2373
|
+
|
|
2374
|
+
/**
|
|
2375
|
+
* Close the modal without connecting
|
|
2376
|
+
*/
|
|
2377
|
+
<span class="fstat-no" title="function not covered" > async dismiss(): Promise<void> {</span>
|
|
2135
2378
|
<span class="cstat-no" title="statement not covered" > await this.modalController.dismiss({ connected: false });</span>
|
|
2136
2379
|
<span class="cstat-no" title="statement not covered" > }</span>
|
|
2137
|
-
|
|
2138
|
-
|
|
2139
|
-
|
|
2140
|
-
|
|
2141
|
-
|
|
2142
|
-
|
|
2143
|
-
|
|
2144
|
-
|
|
2145
|
-
|
|
2146
|
-
|
|
2147
|
-
|
|
2148
|
-
|
|
2149
|
-
<span class="
|
|
2380
|
+
|
|
2381
|
+
// ========== QR Pairing Methods ==========
|
|
2382
|
+
|
|
2383
|
+
/**
|
|
2384
|
+
* Initiate QR pairing flow for mobile connection (Nostr-first protocol).
|
|
2385
|
+
*
|
|
2386
|
+
* Flow:
|
|
2387
|
+
* 1. Generate session invite QR code
|
|
2388
|
+
* 2. Wait for wallet to scan and connect via Nostr
|
|
2389
|
+
* 3. Wait for wallet user to approve session
|
|
2390
|
+
* 4. P2P upgrade happens automatically in background
|
|
2391
|
+
*/
|
|
2392
|
+
<span class="fstat-no" title="function not covered" > private async initiateQrPairing(): Promise<void> {</span>
|
|
2150
2393
|
<span class="cstat-no" title="statement not covered" > this.currentStep.set(ConnectionStep.QrPairing);</span>
|
|
2151
2394
|
<span class="cstat-no" title="statement not covered" > this.isGeneratingOffer.set(true);</span>
|
|
2152
2395
|
<span class="cstat-no" title="statement not covered" > this.connectionError.set(null);</span>
|
|
@@ -2175,12 +2418,12 @@
|
|
|
2175
2418
|
<span class="cstat-no" title="statement not covered" > this.isGeneratingOffer.set(false);</span>
|
|
2176
2419
|
<span class="cstat-no" title="statement not covered" > }</span>
|
|
2177
2420
|
<span class="cstat-no" title="statement not covered" > }</span>
|
|
2178
|
-
|
|
2179
|
-
|
|
2180
|
-
|
|
2181
|
-
|
|
2182
|
-
|
|
2183
|
-
<span class="
|
|
2421
|
+
|
|
2422
|
+
/**
|
|
2423
|
+
* Wait for wallet to connect via Nostr and approve the session.
|
|
2424
|
+
* This is the new single-QR flow - no answer scanning needed.
|
|
2425
|
+
*/
|
|
2426
|
+
<span class="fstat-no" title="function not covered" > private async waitForWalletApproval(): Promise<void> {</span>
|
|
2184
2427
|
<span class="cstat-no" title="statement not covered" > try {</span>
|
|
2185
2428
|
<span class="cstat-no" title="statement not covered" > // This blocks until wallet scans QR, connects via Nostr, and user approves</span>
|
|
2186
2429
|
<span class="cstat-no" title="statement not covered" > const session = await this.p2pNativeProvider.waitForSessionApproval();</span>
|
|
@@ -2203,56 +2446,56 @@
|
|
|
2203
2446
|
<span class="cstat-no" title="statement not covered" > this.isWaitingForApproval.set(false);</span>
|
|
2204
2447
|
<span class="cstat-no" title="statement not covered" > }</span>
|
|
2205
2448
|
<span class="cstat-no" title="statement not covered" > }</span>
|
|
2206
|
-
|
|
2207
|
-
|
|
2208
|
-
|
|
2209
|
-
|
|
2210
|
-
<span class="
|
|
2449
|
+
|
|
2450
|
+
/**
|
|
2451
|
+
* Handle QR code expiry
|
|
2452
|
+
*/
|
|
2453
|
+
<span class="fstat-no" title="function not covered" > onQrExpired(): void {</span>
|
|
2211
2454
|
<span class="cstat-no" title="statement not covered" > logger.debug('QR code expired');</span>
|
|
2212
2455
|
<span class="cstat-no" title="statement not covered" > this.pairingOffer.set('');</span>
|
|
2213
2456
|
<span class="cstat-no" title="statement not covered" > this.isWaitingForWallet.set(false);</span>
|
|
2214
2457
|
<span class="cstat-no" title="statement not covered" > }</span>
|
|
2215
|
-
|
|
2216
|
-
|
|
2217
|
-
|
|
2218
|
-
|
|
2219
|
-
<span class="
|
|
2458
|
+
|
|
2459
|
+
/**
|
|
2460
|
+
* Refresh the QR pairing offer
|
|
2461
|
+
*/
|
|
2462
|
+
<span class="fstat-no" title="function not covered" > async onQrRefresh(): Promise<void> {</span>
|
|
2220
2463
|
<span class="cstat-no" title="statement not covered" > this.isWaitingForWallet.set(false);</span>
|
|
2221
2464
|
<span class="cstat-no" title="statement not covered" > this.isWaitingForApproval.set(false);</span>
|
|
2222
2465
|
<span class="cstat-no" title="statement not covered" > await this.initiateQrPairing();</span>
|
|
2223
2466
|
<span class="cstat-no" title="statement not covered" > }</span>
|
|
2224
|
-
|
|
2225
|
-
|
|
2226
|
-
|
|
2227
|
-
|
|
2228
|
-
<span class="
|
|
2467
|
+
|
|
2468
|
+
/**
|
|
2469
|
+
* Handle successful mobile connection
|
|
2470
|
+
*/
|
|
2471
|
+
private <span class="fstat-no" title="function not covered" >onMobileConnected(): void {</span>
|
|
2229
2472
|
<span class="cstat-no" title="statement not covered" > logger.info('Mobile wallet connected');</span>
|
|
2230
2473
|
<span class="cstat-no" title="statement not covered" > this.connected.emit({ protocol: 'mobile-native', method: 'qr' });</span>
|
|
2231
2474
|
<span class="cstat-no" title="statement not covered" > void this.modalController.dismiss({ connected: true });</span>
|
|
2232
2475
|
<span class="cstat-no" title="statement not covered" > }</span>
|
|
2233
|
-
|
|
2234
|
-
|
|
2235
|
-
|
|
2236
|
-
|
|
2237
|
-
|
|
2238
|
-
|
|
2239
|
-
|
|
2240
|
-
|
|
2241
|
-
|
|
2242
|
-
|
|
2243
|
-
|
|
2244
|
-
|
|
2245
|
-
|
|
2246
|
-
|
|
2247
|
-
|
|
2248
|
-
<span class="
|
|
2249
|
-
|
|
2250
|
-
|
|
2251
|
-
|
|
2252
|
-
|
|
2253
|
-
|
|
2254
|
-
|
|
2255
|
-
|
|
2476
|
+
|
|
2477
|
+
// ========== Platform Detection ==========
|
|
2478
|
+
|
|
2479
|
+
/**
|
|
2480
|
+
* Detect if running on mobile device
|
|
2481
|
+
*/
|
|
2482
|
+
private detectMobile(): boolean {
|
|
2483
|
+
return this.platform.is('mobile') || this.platform.is('android') || this.platform.is('ios');
|
|
2484
|
+
}
|
|
2485
|
+
|
|
2486
|
+
/**
|
|
2487
|
+
* Detect if HSuite extension is available.
|
|
2488
|
+
* Checks for the flag injected by the extension's content script.
|
|
2489
|
+
*/
|
|
2490
|
+
private detectExtension(): boolean {
|
|
2491
|
+
if (typeof window === 'undefined') <span class="branch-0 cbranch-no" title="branch not covered" >return false;</span>
|
|
2492
|
+
// Check for HSuite extension marker (injected by extension's inject-flags.ts)
|
|
2493
|
+
return (
|
|
2494
|
+
(window as unknown as { __HSUITE_WALLET_EXTENSION__?: boolean })
|
|
2495
|
+
.__HSUITE_WALLET_EXTENSION__ === true
|
|
2496
|
+
);
|
|
2497
|
+
}
|
|
2498
|
+
}
|
|
2256
2499
|
</pre></td></tr></table></pre>
|
|
2257
2500
|
|
|
2258
2501
|
<div class='push'></div><!-- for sticky footer -->
|
|
@@ -2260,7 +2503,7 @@
|
|
|
2260
2503
|
<div class='footer quiet pad2 space-top1 center small'>
|
|
2261
2504
|
Code coverage generated by
|
|
2262
2505
|
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
|
2263
|
-
at 2026-06-
|
|
2506
|
+
at 2026-06-27T21:00:37.209Z
|
|
2264
2507
|
</div>
|
|
2265
2508
|
<script src="../../../prettify.js"></script>
|
|
2266
2509
|
<script>
|