@hsuite/native-connect-angular 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (276) hide show
  1. package/README.md +48 -0
  2. package/USAGE_EXAMPLES.md +476 -0
  3. package/assets/wallets/extension.svg +7 -0
  4. package/assets/wallets/hashpack.svg +6 -0
  5. package/assets/wallets/hsuite.svg +11 -0
  6. package/assets/wallets/kabila.svg +11 -0
  7. package/assets/wallets/walletconnect.svg +13 -0
  8. package/coverage/base.css +224 -0
  9. package/coverage/block-navigation.js +87 -0
  10. package/coverage/coverage-summary.json +50 -0
  11. package/coverage/favicon.png +0 -0
  12. package/coverage/index.html +476 -0
  13. package/coverage/lcov-report/base.css +224 -0
  14. package/coverage/lcov-report/block-navigation.js +87 -0
  15. package/coverage/lcov-report/favicon.png +0 -0
  16. package/coverage/lcov-report/index.html +476 -0
  17. package/coverage/lcov-report/lib/components/account-selector/account-actions/account-actions.component.ts.html +868 -0
  18. package/coverage/lcov-report/lib/components/account-selector/account-actions/index.html +116 -0
  19. package/coverage/lcov-report/lib/components/account-selector/account-filter/account-filter.component.ts.html +1288 -0
  20. package/coverage/lcov-report/lib/components/account-selector/account-filter/index.html +116 -0
  21. package/coverage/lcov-report/lib/components/account-selector/account-formatting.service.ts.html +685 -0
  22. package/coverage/lcov-report/lib/components/account-selector/account-grouping.service.ts.html +766 -0
  23. package/coverage/lcov-report/lib/components/account-selector/account-list/account-list.component.ts.html +1495 -0
  24. package/coverage/lcov-report/lib/components/account-selector/account-list/index.html +116 -0
  25. package/coverage/lcov-report/lib/components/account-selector/account-selector.component.ts.html +1495 -0
  26. package/coverage/lcov-report/lib/components/account-selector/account-selector.service.ts.html +1588 -0
  27. package/coverage/lcov-report/lib/components/account-selector/index.html +161 -0
  28. package/coverage/lcov-report/lib/components/wallet-account-display/index.html +116 -0
  29. package/coverage/lcov-report/lib/components/wallet-account-display/wallet-account-display.component.ts.html +505 -0
  30. package/coverage/lcov-report/lib/components/wallet-connect-button/index.html +116 -0
  31. package/coverage/lcov-report/lib/components/wallet-connect-button/wallet-connect-button.component.ts.html +805 -0
  32. package/coverage/lcov-report/lib/components/wallet-connect-prompt/index.html +116 -0
  33. package/coverage/lcov-report/lib/components/wallet-connect-prompt/wallet-connect-prompt.component.ts.html +409 -0
  34. package/coverage/lcov-report/lib/components/wallet-connected-guard/index.html +116 -0
  35. package/coverage/lcov-report/lib/components/wallet-connected-guard/wallet-connected-guard.component.ts.html +304 -0
  36. package/coverage/lcov-report/lib/components/wallet-connection-modal/connection-method-step/connection-method-step.component.ts.html +436 -0
  37. package/coverage/lcov-report/lib/components/wallet-connection-modal/connection-method-step/index.html +116 -0
  38. package/coverage/lcov-report/lib/components/wallet-connection-modal/index.html +116 -0
  39. package/coverage/lcov-report/lib/components/wallet-connection-modal/qr-pairing-step/index.html +116 -0
  40. package/coverage/lcov-report/lib/components/wallet-connection-modal/qr-pairing-step/qr-pairing-step.component.ts.html +2287 -0
  41. package/coverage/lcov-report/lib/components/wallet-connection-modal/wallet-connection-modal.component.ts.html +2275 -0
  42. package/coverage/lcov-report/lib/components/wallet-session-display/index.html +116 -0
  43. package/coverage/lcov-report/lib/components/wallet-session-display/wallet-session-display.component.ts.html +676 -0
  44. package/coverage/lcov-report/lib/components/wallet-transaction-status/index.html +116 -0
  45. package/coverage/lcov-report/lib/components/wallet-transaction-status/wallet-transaction-status.component.ts.html +703 -0
  46. package/coverage/lcov-report/lib/directives/index.html +146 -0
  47. package/coverage/lcov-report/lib/directives/wallet-connected.directive.ts.html +670 -0
  48. package/coverage/lcov-report/lib/directives/wallet-context.directive.ts.html +547 -0
  49. package/coverage/lcov-report/lib/directives/wallet-events.directive.ts.html +781 -0
  50. package/coverage/lcov-report/lib/hsuite-wallet.module.ts.html +715 -0
  51. package/coverage/lcov-report/lib/index.html +116 -0
  52. package/coverage/lcov-report/lib/models/connection-config.model.ts.html +280 -0
  53. package/coverage/lcov-report/lib/models/index.html +131 -0
  54. package/coverage/lcov-report/lib/models/provider-types.ts.html +577 -0
  55. package/coverage/lcov-report/lib/providers/base-wallet-provider.ts.html +1138 -0
  56. package/coverage/lcov-report/lib/providers/hsuite-native/channel-client.service.ts.html +2671 -0
  57. package/coverage/lcov-report/lib/providers/hsuite-native/index.html +116 -0
  58. package/coverage/lcov-report/lib/providers/hsuite-native-provider.ts.html +2347 -0
  59. package/coverage/lcov-report/lib/providers/index.html +146 -0
  60. package/coverage/lcov-report/lib/providers/p2p-native/index.html +131 -0
  61. package/coverage/lcov-report/lib/providers/p2p-native/p2p-native.provider.ts.html +2254 -0
  62. package/coverage/lcov-report/lib/providers/p2p-native/p2p-session-manager.ts.html +2170 -0
  63. package/coverage/lcov-report/lib/providers/wallet-error-handler.ts.html +1132 -0
  64. package/coverage/lcov-report/lib/providers/walletconnect/core/index.html +176 -0
  65. package/coverage/lcov-report/lib/providers/walletconnect/core/session-health.ts.html +673 -0
  66. package/coverage/lcov-report/lib/providers/walletconnect/core/walletconnect-client-manager.ts.html +1177 -0
  67. package/coverage/lcov-report/lib/providers/walletconnect/core/walletconnect-provider.ts.html +2563 -0
  68. package/coverage/lcov-report/lib/providers/walletconnect/core/walletconnect-session-store.ts.html +904 -0
  69. package/coverage/lcov-report/lib/providers/walletconnect/core/walletconnect-signing-orchestrator.ts.html +982 -0
  70. package/coverage/lcov-report/lib/providers/walletconnect/signers/hedera-signer.ts.html +1915 -0
  71. package/coverage/lcov-report/lib/providers/walletconnect/signers/index.html +146 -0
  72. package/coverage/lcov-report/lib/providers/walletconnect/signers/signer-factory.ts.html +445 -0
  73. package/coverage/lcov-report/lib/providers/walletconnect/signers/xrpl-signer.ts.html +1519 -0
  74. package/coverage/lcov-report/lib/services/index.html +191 -0
  75. package/coverage/lcov-report/lib/services/logger.service.ts.html +463 -0
  76. package/coverage/lcov-report/lib/services/transaction-builders/base-transaction-builder.service.ts.html +1840 -0
  77. package/coverage/lcov-report/lib/services/transaction-builders/hedera-amount-utils.ts.html +337 -0
  78. package/coverage/lcov-report/lib/services/transaction-builders/hedera-transaction-builder.service.ts.html +3940 -0
  79. package/coverage/lcov-report/lib/services/transaction-builders/index.html +161 -0
  80. package/coverage/lcov-report/lib/services/transaction-builders/xrpl-transaction-builder.service.ts.html +2581 -0
  81. package/coverage/lcov-report/lib/services/transaction.service.ts.html +1123 -0
  82. package/coverage/lcov-report/lib/services/unified-wallet.service.ts.html +2641 -0
  83. package/coverage/lcov-report/lib/services/wallet-context.service.ts.html +637 -0
  84. package/coverage/lcov-report/lib/services/wallet-event-bus.service.ts.html +643 -0
  85. package/coverage/lcov-report/lib/services/wallet-providers.service.ts.html +496 -0
  86. package/coverage/lcov-report/lib/transports/chrome-extension-transport.ts.html +823 -0
  87. package/coverage/lcov-report/lib/transports/index.html +116 -0
  88. package/coverage/lcov-report/lib/utils/index.html +116 -0
  89. package/coverage/lcov-report/lib/utils/ledger-icons.util.ts.html +319 -0
  90. package/coverage/lcov-report/prettify.css +1 -0
  91. package/coverage/lcov-report/prettify.js +2 -0
  92. package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
  93. package/coverage/lcov-report/sorter.js +210 -0
  94. package/coverage/lcov.info +19252 -0
  95. package/coverage/lib/components/account-selector/account-actions/account-actions.component.ts.html +868 -0
  96. package/coverage/lib/components/account-selector/account-actions/index.html +116 -0
  97. package/coverage/lib/components/account-selector/account-filter/account-filter.component.ts.html +1288 -0
  98. package/coverage/lib/components/account-selector/account-filter/index.html +116 -0
  99. package/coverage/lib/components/account-selector/account-formatting.service.ts.html +685 -0
  100. package/coverage/lib/components/account-selector/account-grouping.service.ts.html +766 -0
  101. package/coverage/lib/components/account-selector/account-list/account-list.component.ts.html +1495 -0
  102. package/coverage/lib/components/account-selector/account-list/index.html +116 -0
  103. package/coverage/lib/components/account-selector/account-selector.component.ts.html +1495 -0
  104. package/coverage/lib/components/account-selector/account-selector.service.ts.html +1588 -0
  105. package/coverage/lib/components/account-selector/index.html +161 -0
  106. package/coverage/lib/components/wallet-account-display/index.html +116 -0
  107. package/coverage/lib/components/wallet-account-display/wallet-account-display.component.ts.html +505 -0
  108. package/coverage/lib/components/wallet-connect-button/index.html +116 -0
  109. package/coverage/lib/components/wallet-connect-button/wallet-connect-button.component.ts.html +805 -0
  110. package/coverage/lib/components/wallet-connect-prompt/index.html +116 -0
  111. package/coverage/lib/components/wallet-connect-prompt/wallet-connect-prompt.component.ts.html +409 -0
  112. package/coverage/lib/components/wallet-connected-guard/index.html +116 -0
  113. package/coverage/lib/components/wallet-connected-guard/wallet-connected-guard.component.ts.html +304 -0
  114. package/coverage/lib/components/wallet-connection-modal/connection-method-step/connection-method-step.component.ts.html +436 -0
  115. package/coverage/lib/components/wallet-connection-modal/connection-method-step/index.html +116 -0
  116. package/coverage/lib/components/wallet-connection-modal/index.html +116 -0
  117. package/coverage/lib/components/wallet-connection-modal/qr-pairing-step/index.html +116 -0
  118. package/coverage/lib/components/wallet-connection-modal/qr-pairing-step/qr-pairing-step.component.ts.html +2287 -0
  119. package/coverage/lib/components/wallet-connection-modal/wallet-connection-modal.component.ts.html +2275 -0
  120. package/coverage/lib/components/wallet-session-display/index.html +116 -0
  121. package/coverage/lib/components/wallet-session-display/wallet-session-display.component.ts.html +676 -0
  122. package/coverage/lib/components/wallet-transaction-status/index.html +116 -0
  123. package/coverage/lib/components/wallet-transaction-status/wallet-transaction-status.component.ts.html +703 -0
  124. package/coverage/lib/directives/index.html +146 -0
  125. package/coverage/lib/directives/wallet-connected.directive.ts.html +670 -0
  126. package/coverage/lib/directives/wallet-context.directive.ts.html +547 -0
  127. package/coverage/lib/directives/wallet-events.directive.ts.html +781 -0
  128. package/coverage/lib/hsuite-wallet.module.ts.html +715 -0
  129. package/coverage/lib/index.html +116 -0
  130. package/coverage/lib/models/connection-config.model.ts.html +280 -0
  131. package/coverage/lib/models/index.html +131 -0
  132. package/coverage/lib/models/provider-types.ts.html +577 -0
  133. package/coverage/lib/providers/base-wallet-provider.ts.html +1138 -0
  134. package/coverage/lib/providers/hsuite-native/channel-client.service.ts.html +2671 -0
  135. package/coverage/lib/providers/hsuite-native/index.html +116 -0
  136. package/coverage/lib/providers/hsuite-native-provider.ts.html +2347 -0
  137. package/coverage/lib/providers/index.html +146 -0
  138. package/coverage/lib/providers/p2p-native/index.html +131 -0
  139. package/coverage/lib/providers/p2p-native/p2p-native.provider.ts.html +2254 -0
  140. package/coverage/lib/providers/p2p-native/p2p-session-manager.ts.html +2170 -0
  141. package/coverage/lib/providers/wallet-error-handler.ts.html +1132 -0
  142. package/coverage/lib/providers/walletconnect/core/index.html +176 -0
  143. package/coverage/lib/providers/walletconnect/core/session-health.ts.html +673 -0
  144. package/coverage/lib/providers/walletconnect/core/walletconnect-client-manager.ts.html +1177 -0
  145. package/coverage/lib/providers/walletconnect/core/walletconnect-provider.ts.html +2563 -0
  146. package/coverage/lib/providers/walletconnect/core/walletconnect-session-store.ts.html +904 -0
  147. package/coverage/lib/providers/walletconnect/core/walletconnect-signing-orchestrator.ts.html +982 -0
  148. package/coverage/lib/providers/walletconnect/signers/hedera-signer.ts.html +1915 -0
  149. package/coverage/lib/providers/walletconnect/signers/index.html +146 -0
  150. package/coverage/lib/providers/walletconnect/signers/signer-factory.ts.html +445 -0
  151. package/coverage/lib/providers/walletconnect/signers/xrpl-signer.ts.html +1519 -0
  152. package/coverage/lib/services/index.html +191 -0
  153. package/coverage/lib/services/logger.service.ts.html +463 -0
  154. package/coverage/lib/services/transaction-builders/base-transaction-builder.service.ts.html +1840 -0
  155. package/coverage/lib/services/transaction-builders/hedera-amount-utils.ts.html +337 -0
  156. package/coverage/lib/services/transaction-builders/hedera-transaction-builder.service.ts.html +3940 -0
  157. package/coverage/lib/services/transaction-builders/index.html +161 -0
  158. package/coverage/lib/services/transaction-builders/xrpl-transaction-builder.service.ts.html +2581 -0
  159. package/coverage/lib/services/transaction.service.ts.html +1123 -0
  160. package/coverage/lib/services/unified-wallet.service.ts.html +2641 -0
  161. package/coverage/lib/services/wallet-context.service.ts.html +637 -0
  162. package/coverage/lib/services/wallet-event-bus.service.ts.html +643 -0
  163. package/coverage/lib/services/wallet-providers.service.ts.html +496 -0
  164. package/coverage/lib/transports/chrome-extension-transport.ts.html +823 -0
  165. package/coverage/lib/transports/index.html +116 -0
  166. package/coverage/lib/utils/index.html +116 -0
  167. package/coverage/lib/utils/ledger-icons.util.ts.html +319 -0
  168. package/coverage/prettify.css +1 -0
  169. package/coverage/prettify.js +2 -0
  170. package/coverage/sort-arrow-sprite.png +0 -0
  171. package/coverage/sorter.js +210 -0
  172. package/dist/README.md +48 -0
  173. package/dist/fesm2022/hsuite-native-connect-angular.mjs +14592 -0
  174. package/dist/fesm2022/hsuite-native-connect-angular.mjs.map +1 -0
  175. package/dist/index.d.ts +6949 -0
  176. package/examples/minimal-connect.ts +178 -0
  177. package/examples/multi-protocol.ts +495 -0
  178. package/examples/transaction-signing.ts +361 -0
  179. package/jest.config.json +45 -0
  180. package/karma.conf.js +42 -0
  181. package/ng-package.json +20 -0
  182. package/package.json +60 -0
  183. package/src/index.ts +203 -0
  184. package/src/lib/components/account-selector/account-actions/account-actions.component.ts +261 -0
  185. package/src/lib/components/account-selector/account-filter/account-filter.component.ts +401 -0
  186. package/src/lib/components/account-selector/account-formatting.service.ts +200 -0
  187. package/src/lib/components/account-selector/account-grouping.service.ts +227 -0
  188. package/src/lib/components/account-selector/account-list/account-list.component.ts +470 -0
  189. package/src/lib/components/account-selector/account-selector.component.html +135 -0
  190. package/src/lib/components/account-selector/account-selector.component.scss +2039 -0
  191. package/src/lib/components/account-selector/account-selector.component.ts +470 -0
  192. package/src/lib/components/account-selector/account-selector.service.ts +501 -0
  193. package/src/lib/components/wallet-account-display/wallet-account-display.component.html +34 -0
  194. package/src/lib/components/wallet-account-display/wallet-account-display.component.scss +99 -0
  195. package/src/lib/components/wallet-account-display/wallet-account-display.component.ts +140 -0
  196. package/src/lib/components/wallet-connect-button/wallet-connect-button.component.html +14 -0
  197. package/src/lib/components/wallet-connect-button/wallet-connect-button.component.scss +272 -0
  198. package/src/lib/components/wallet-connect-button/wallet-connect-button.component.ts +240 -0
  199. package/src/lib/components/wallet-connect-prompt/wallet-connect-prompt.component.html +24 -0
  200. package/src/lib/components/wallet-connect-prompt/wallet-connect-prompt.component.scss +50 -0
  201. package/src/lib/components/wallet-connect-prompt/wallet-connect-prompt.component.ts +108 -0
  202. package/src/lib/components/wallet-connected-guard/wallet-connected-guard.component.html +24 -0
  203. package/src/lib/components/wallet-connected-guard/wallet-connected-guard.component.ts +73 -0
  204. package/src/lib/components/wallet-connection-modal/connection-method-step/connection-method-step.component.html +56 -0
  205. package/src/lib/components/wallet-connection-modal/connection-method-step/connection-method-step.component.scss +218 -0
  206. package/src/lib/components/wallet-connection-modal/connection-method-step/connection-method-step.component.ts +117 -0
  207. package/src/lib/components/wallet-connection-modal/qr-pairing-step/qr-pairing-step.component.html +94 -0
  208. package/src/lib/components/wallet-connection-modal/qr-pairing-step/qr-pairing-step.component.scss +272 -0
  209. package/src/lib/components/wallet-connection-modal/qr-pairing-step/qr-pairing-step.component.ts +734 -0
  210. package/src/lib/components/wallet-connection-modal/wallet-connection-modal.component.html +197 -0
  211. package/src/lib/components/wallet-connection-modal/wallet-connection-modal.component.scss +678 -0
  212. package/src/lib/components/wallet-connection-modal/wallet-connection-modal.component.ts +730 -0
  213. package/src/lib/components/wallet-session-display/wallet-session-display.component.html +110 -0
  214. package/src/lib/components/wallet-session-display/wallet-session-display.component.scss +179 -0
  215. package/src/lib/components/wallet-session-display/wallet-session-display.component.ts +197 -0
  216. package/src/lib/components/wallet-transaction-status/wallet-transaction-status.component.html +65 -0
  217. package/src/lib/components/wallet-transaction-status/wallet-transaction-status.component.scss +254 -0
  218. package/src/lib/components/wallet-transaction-status/wallet-transaction-status.component.ts +206 -0
  219. package/src/lib/directives/wallet-connected.directive.ts +195 -0
  220. package/src/lib/directives/wallet-context.directive.ts +154 -0
  221. package/src/lib/directives/wallet-events.directive.ts +232 -0
  222. package/src/lib/hsuite-wallet.module.ts +210 -0
  223. package/src/lib/models/connection-config.model.ts +65 -0
  224. package/src/lib/models/provider-types.ts +164 -0
  225. package/src/lib/models/unified-account.model.ts +76 -0
  226. package/src/lib/models/wallet-context.model.ts +121 -0
  227. package/src/lib/models/wallet-events.model.ts +158 -0
  228. package/src/lib/providers/base-wallet-provider.ts +351 -0
  229. package/src/lib/providers/hsuite-native/channel-client.service.spec.ts +73 -0
  230. package/src/lib/providers/hsuite-native/channel-client.service.ts +862 -0
  231. package/src/lib/providers/hsuite-native/index.ts +8 -0
  232. package/src/lib/providers/hsuite-native-provider.ts +754 -0
  233. package/src/lib/providers/mobile-native/mobile-native.provider.spec.ts +19 -0
  234. package/src/lib/providers/p2p-native/index.ts +30 -0
  235. package/src/lib/providers/p2p-native/p2p-native.provider.spec.ts +523 -0
  236. package/src/lib/providers/p2p-native/p2p-native.provider.ts +723 -0
  237. package/src/lib/providers/p2p-native/p2p-session-manager.ts +695 -0
  238. package/src/lib/providers/wallet-error-handler.ts +349 -0
  239. package/src/lib/providers/walletconnect/core/base-signer.interface.ts +122 -0
  240. package/src/lib/providers/walletconnect/core/session-health.ts +196 -0
  241. package/src/lib/providers/walletconnect/core/walletconnect-client-manager.ts +364 -0
  242. package/src/lib/providers/walletconnect/core/walletconnect-provider.integration.spec.ts +348 -0
  243. package/src/lib/providers/walletconnect/core/walletconnect-provider.ts +826 -0
  244. package/src/lib/providers/walletconnect/core/walletconnect-session-store.ts +273 -0
  245. package/src/lib/providers/walletconnect/core/walletconnect-signing-orchestrator.ts +299 -0
  246. package/src/lib/providers/walletconnect/core/walletconnect-types.ts +48 -0
  247. package/src/lib/providers/walletconnect/index.ts +33 -0
  248. package/src/lib/providers/walletconnect/signers/hedera-signer.spec.ts +367 -0
  249. package/src/lib/providers/walletconnect/signers/hedera-signer.ts +610 -0
  250. package/src/lib/providers/walletconnect/signers/signer-factory.spec.ts +62 -0
  251. package/src/lib/providers/walletconnect/signers/signer-factory.ts +120 -0
  252. package/src/lib/providers/walletconnect/signers/xrpl-signer.spec.ts +296 -0
  253. package/src/lib/providers/walletconnect/signers/xrpl-signer.ts +478 -0
  254. package/src/lib/services/logger.service.ts +126 -0
  255. package/src/lib/services/transaction-builders/base-transaction-builder.service.ts +585 -0
  256. package/src/lib/services/transaction-builders/hedera-amount-utils.ts +84 -0
  257. package/src/lib/services/transaction-builders/hedera-transaction-builder.service.spec.ts +741 -0
  258. package/src/lib/services/transaction-builders/hedera-transaction-builder.service.ts +1285 -0
  259. package/src/lib/services/transaction-builders/index.ts +54 -0
  260. package/src/lib/services/transaction-builders/xrpl-transaction-builder.service.spec.ts +937 -0
  261. package/src/lib/services/transaction-builders/xrpl-transaction-builder.service.ts +832 -0
  262. package/src/lib/services/transaction.service.ts +346 -0
  263. package/src/lib/services/unified-wallet.service.spec.ts +1382 -0
  264. package/src/lib/services/unified-wallet.service.ts +852 -0
  265. package/src/lib/services/wallet-context.service.ts +184 -0
  266. package/src/lib/services/wallet-event-bus.service.ts +186 -0
  267. package/src/lib/services/wallet-providers.service.ts +137 -0
  268. package/src/lib/transports/chrome-extension-transport.ts +246 -0
  269. package/src/lib/utils/index.ts +14 -0
  270. package/src/lib/utils/ledger-icons.util.ts +78 -0
  271. package/test/test-setup.ts +21 -0
  272. package/test-setup.ts +63 -0
  273. package/tsconfig.build.json +11 -0
  274. package/tsconfig.json +29 -0
  275. package/tsconfig.spec.json +15 -0
  276. package/vitest.config.ts +48 -0
@@ -0,0 +1,1588 @@
1
+
2
+ <!doctype html>
3
+ <html lang="en">
4
+
5
+ <head>
6
+ <title>Code coverage report for lib/components/account-selector/account-selector.service.ts</title>
7
+ <meta charset="utf-8" />
8
+ <link rel="stylesheet" href="../../../prettify.css" />
9
+ <link rel="stylesheet" href="../../../base.css" />
10
+ <link rel="shortcut icon" type="image/x-icon" href="../../../favicon.png" />
11
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
12
+ <style type='text/css'>
13
+ .coverage-summary .sorter {
14
+ background-image: url(../../../sort-arrow-sprite.png);
15
+ }
16
+ </style>
17
+ </head>
18
+
19
+ <body>
20
+ <div class='wrapper'>
21
+ <div class='pad1'>
22
+ <h1><a href="../../../index.html">All files</a> / <a href="index.html">lib/components/account-selector</a> account-selector.service.ts</h1>
23
+ <div class='clearfix'>
24
+
25
+ <div class='fl pad1y space-right2'>
26
+ <span class="strong">0% </span>
27
+ <span class="quiet">Statements</span>
28
+ <span class='fraction'>0/501</span>
29
+ </div>
30
+
31
+
32
+ <div class='fl pad1y space-right2'>
33
+ <span class="strong">0% </span>
34
+ <span class="quiet">Branches</span>
35
+ <span class='fraction'>0/1</span>
36
+ </div>
37
+
38
+
39
+ <div class='fl pad1y space-right2'>
40
+ <span class="strong">0% </span>
41
+ <span class="quiet">Functions</span>
42
+ <span class='fraction'>0/1</span>
43
+ </div>
44
+
45
+
46
+ <div class='fl pad1y space-right2'>
47
+ <span class="strong">0% </span>
48
+ <span class="quiet">Lines</span>
49
+ <span class='fraction'>0/501</span>
50
+ </div>
51
+
52
+
53
+ </div>
54
+ <p class="quiet">
55
+ Press <em>n</em> or <em>j</em> to go to the next uncovered block, <em>b</em>, <em>p</em> or <em>k</em> for the previous block.
56
+ </p>
57
+ <template id="filterTemplate">
58
+ <div class="quiet">
59
+ Filter:
60
+ <input type="search" id="fileSearch">
61
+ </div>
62
+ </template>
63
+ </div>
64
+ <div class='status-line low'></div>
65
+ <pre><table class="coverage">
66
+ <tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a>
67
+ <a name='L2'></a><a href='#L2'>2</a>
68
+ <a name='L3'></a><a href='#L3'>3</a>
69
+ <a name='L4'></a><a href='#L4'>4</a>
70
+ <a name='L5'></a><a href='#L5'>5</a>
71
+ <a name='L6'></a><a href='#L6'>6</a>
72
+ <a name='L7'></a><a href='#L7'>7</a>
73
+ <a name='L8'></a><a href='#L8'>8</a>
74
+ <a name='L9'></a><a href='#L9'>9</a>
75
+ <a name='L10'></a><a href='#L10'>10</a>
76
+ <a name='L11'></a><a href='#L11'>11</a>
77
+ <a name='L12'></a><a href='#L12'>12</a>
78
+ <a name='L13'></a><a href='#L13'>13</a>
79
+ <a name='L14'></a><a href='#L14'>14</a>
80
+ <a name='L15'></a><a href='#L15'>15</a>
81
+ <a name='L16'></a><a href='#L16'>16</a>
82
+ <a name='L17'></a><a href='#L17'>17</a>
83
+ <a name='L18'></a><a href='#L18'>18</a>
84
+ <a name='L19'></a><a href='#L19'>19</a>
85
+ <a name='L20'></a><a href='#L20'>20</a>
86
+ <a name='L21'></a><a href='#L21'>21</a>
87
+ <a name='L22'></a><a href='#L22'>22</a>
88
+ <a name='L23'></a><a href='#L23'>23</a>
89
+ <a name='L24'></a><a href='#L24'>24</a>
90
+ <a name='L25'></a><a href='#L25'>25</a>
91
+ <a name='L26'></a><a href='#L26'>26</a>
92
+ <a name='L27'></a><a href='#L27'>27</a>
93
+ <a name='L28'></a><a href='#L28'>28</a>
94
+ <a name='L29'></a><a href='#L29'>29</a>
95
+ <a name='L30'></a><a href='#L30'>30</a>
96
+ <a name='L31'></a><a href='#L31'>31</a>
97
+ <a name='L32'></a><a href='#L32'>32</a>
98
+ <a name='L33'></a><a href='#L33'>33</a>
99
+ <a name='L34'></a><a href='#L34'>34</a>
100
+ <a name='L35'></a><a href='#L35'>35</a>
101
+ <a name='L36'></a><a href='#L36'>36</a>
102
+ <a name='L37'></a><a href='#L37'>37</a>
103
+ <a name='L38'></a><a href='#L38'>38</a>
104
+ <a name='L39'></a><a href='#L39'>39</a>
105
+ <a name='L40'></a><a href='#L40'>40</a>
106
+ <a name='L41'></a><a href='#L41'>41</a>
107
+ <a name='L42'></a><a href='#L42'>42</a>
108
+ <a name='L43'></a><a href='#L43'>43</a>
109
+ <a name='L44'></a><a href='#L44'>44</a>
110
+ <a name='L45'></a><a href='#L45'>45</a>
111
+ <a name='L46'></a><a href='#L46'>46</a>
112
+ <a name='L47'></a><a href='#L47'>47</a>
113
+ <a name='L48'></a><a href='#L48'>48</a>
114
+ <a name='L49'></a><a href='#L49'>49</a>
115
+ <a name='L50'></a><a href='#L50'>50</a>
116
+ <a name='L51'></a><a href='#L51'>51</a>
117
+ <a name='L52'></a><a href='#L52'>52</a>
118
+ <a name='L53'></a><a href='#L53'>53</a>
119
+ <a name='L54'></a><a href='#L54'>54</a>
120
+ <a name='L55'></a><a href='#L55'>55</a>
121
+ <a name='L56'></a><a href='#L56'>56</a>
122
+ <a name='L57'></a><a href='#L57'>57</a>
123
+ <a name='L58'></a><a href='#L58'>58</a>
124
+ <a name='L59'></a><a href='#L59'>59</a>
125
+ <a name='L60'></a><a href='#L60'>60</a>
126
+ <a name='L61'></a><a href='#L61'>61</a>
127
+ <a name='L62'></a><a href='#L62'>62</a>
128
+ <a name='L63'></a><a href='#L63'>63</a>
129
+ <a name='L64'></a><a href='#L64'>64</a>
130
+ <a name='L65'></a><a href='#L65'>65</a>
131
+ <a name='L66'></a><a href='#L66'>66</a>
132
+ <a name='L67'></a><a href='#L67'>67</a>
133
+ <a name='L68'></a><a href='#L68'>68</a>
134
+ <a name='L69'></a><a href='#L69'>69</a>
135
+ <a name='L70'></a><a href='#L70'>70</a>
136
+ <a name='L71'></a><a href='#L71'>71</a>
137
+ <a name='L72'></a><a href='#L72'>72</a>
138
+ <a name='L73'></a><a href='#L73'>73</a>
139
+ <a name='L74'></a><a href='#L74'>74</a>
140
+ <a name='L75'></a><a href='#L75'>75</a>
141
+ <a name='L76'></a><a href='#L76'>76</a>
142
+ <a name='L77'></a><a href='#L77'>77</a>
143
+ <a name='L78'></a><a href='#L78'>78</a>
144
+ <a name='L79'></a><a href='#L79'>79</a>
145
+ <a name='L80'></a><a href='#L80'>80</a>
146
+ <a name='L81'></a><a href='#L81'>81</a>
147
+ <a name='L82'></a><a href='#L82'>82</a>
148
+ <a name='L83'></a><a href='#L83'>83</a>
149
+ <a name='L84'></a><a href='#L84'>84</a>
150
+ <a name='L85'></a><a href='#L85'>85</a>
151
+ <a name='L86'></a><a href='#L86'>86</a>
152
+ <a name='L87'></a><a href='#L87'>87</a>
153
+ <a name='L88'></a><a href='#L88'>88</a>
154
+ <a name='L89'></a><a href='#L89'>89</a>
155
+ <a name='L90'></a><a href='#L90'>90</a>
156
+ <a name='L91'></a><a href='#L91'>91</a>
157
+ <a name='L92'></a><a href='#L92'>92</a>
158
+ <a name='L93'></a><a href='#L93'>93</a>
159
+ <a name='L94'></a><a href='#L94'>94</a>
160
+ <a name='L95'></a><a href='#L95'>95</a>
161
+ <a name='L96'></a><a href='#L96'>96</a>
162
+ <a name='L97'></a><a href='#L97'>97</a>
163
+ <a name='L98'></a><a href='#L98'>98</a>
164
+ <a name='L99'></a><a href='#L99'>99</a>
165
+ <a name='L100'></a><a href='#L100'>100</a>
166
+ <a name='L101'></a><a href='#L101'>101</a>
167
+ <a name='L102'></a><a href='#L102'>102</a>
168
+ <a name='L103'></a><a href='#L103'>103</a>
169
+ <a name='L104'></a><a href='#L104'>104</a>
170
+ <a name='L105'></a><a href='#L105'>105</a>
171
+ <a name='L106'></a><a href='#L106'>106</a>
172
+ <a name='L107'></a><a href='#L107'>107</a>
173
+ <a name='L108'></a><a href='#L108'>108</a>
174
+ <a name='L109'></a><a href='#L109'>109</a>
175
+ <a name='L110'></a><a href='#L110'>110</a>
176
+ <a name='L111'></a><a href='#L111'>111</a>
177
+ <a name='L112'></a><a href='#L112'>112</a>
178
+ <a name='L113'></a><a href='#L113'>113</a>
179
+ <a name='L114'></a><a href='#L114'>114</a>
180
+ <a name='L115'></a><a href='#L115'>115</a>
181
+ <a name='L116'></a><a href='#L116'>116</a>
182
+ <a name='L117'></a><a href='#L117'>117</a>
183
+ <a name='L118'></a><a href='#L118'>118</a>
184
+ <a name='L119'></a><a href='#L119'>119</a>
185
+ <a name='L120'></a><a href='#L120'>120</a>
186
+ <a name='L121'></a><a href='#L121'>121</a>
187
+ <a name='L122'></a><a href='#L122'>122</a>
188
+ <a name='L123'></a><a href='#L123'>123</a>
189
+ <a name='L124'></a><a href='#L124'>124</a>
190
+ <a name='L125'></a><a href='#L125'>125</a>
191
+ <a name='L126'></a><a href='#L126'>126</a>
192
+ <a name='L127'></a><a href='#L127'>127</a>
193
+ <a name='L128'></a><a href='#L128'>128</a>
194
+ <a name='L129'></a><a href='#L129'>129</a>
195
+ <a name='L130'></a><a href='#L130'>130</a>
196
+ <a name='L131'></a><a href='#L131'>131</a>
197
+ <a name='L132'></a><a href='#L132'>132</a>
198
+ <a name='L133'></a><a href='#L133'>133</a>
199
+ <a name='L134'></a><a href='#L134'>134</a>
200
+ <a name='L135'></a><a href='#L135'>135</a>
201
+ <a name='L136'></a><a href='#L136'>136</a>
202
+ <a name='L137'></a><a href='#L137'>137</a>
203
+ <a name='L138'></a><a href='#L138'>138</a>
204
+ <a name='L139'></a><a href='#L139'>139</a>
205
+ <a name='L140'></a><a href='#L140'>140</a>
206
+ <a name='L141'></a><a href='#L141'>141</a>
207
+ <a name='L142'></a><a href='#L142'>142</a>
208
+ <a name='L143'></a><a href='#L143'>143</a>
209
+ <a name='L144'></a><a href='#L144'>144</a>
210
+ <a name='L145'></a><a href='#L145'>145</a>
211
+ <a name='L146'></a><a href='#L146'>146</a>
212
+ <a name='L147'></a><a href='#L147'>147</a>
213
+ <a name='L148'></a><a href='#L148'>148</a>
214
+ <a name='L149'></a><a href='#L149'>149</a>
215
+ <a name='L150'></a><a href='#L150'>150</a>
216
+ <a name='L151'></a><a href='#L151'>151</a>
217
+ <a name='L152'></a><a href='#L152'>152</a>
218
+ <a name='L153'></a><a href='#L153'>153</a>
219
+ <a name='L154'></a><a href='#L154'>154</a>
220
+ <a name='L155'></a><a href='#L155'>155</a>
221
+ <a name='L156'></a><a href='#L156'>156</a>
222
+ <a name='L157'></a><a href='#L157'>157</a>
223
+ <a name='L158'></a><a href='#L158'>158</a>
224
+ <a name='L159'></a><a href='#L159'>159</a>
225
+ <a name='L160'></a><a href='#L160'>160</a>
226
+ <a name='L161'></a><a href='#L161'>161</a>
227
+ <a name='L162'></a><a href='#L162'>162</a>
228
+ <a name='L163'></a><a href='#L163'>163</a>
229
+ <a name='L164'></a><a href='#L164'>164</a>
230
+ <a name='L165'></a><a href='#L165'>165</a>
231
+ <a name='L166'></a><a href='#L166'>166</a>
232
+ <a name='L167'></a><a href='#L167'>167</a>
233
+ <a name='L168'></a><a href='#L168'>168</a>
234
+ <a name='L169'></a><a href='#L169'>169</a>
235
+ <a name='L170'></a><a href='#L170'>170</a>
236
+ <a name='L171'></a><a href='#L171'>171</a>
237
+ <a name='L172'></a><a href='#L172'>172</a>
238
+ <a name='L173'></a><a href='#L173'>173</a>
239
+ <a name='L174'></a><a href='#L174'>174</a>
240
+ <a name='L175'></a><a href='#L175'>175</a>
241
+ <a name='L176'></a><a href='#L176'>176</a>
242
+ <a name='L177'></a><a href='#L177'>177</a>
243
+ <a name='L178'></a><a href='#L178'>178</a>
244
+ <a name='L179'></a><a href='#L179'>179</a>
245
+ <a name='L180'></a><a href='#L180'>180</a>
246
+ <a name='L181'></a><a href='#L181'>181</a>
247
+ <a name='L182'></a><a href='#L182'>182</a>
248
+ <a name='L183'></a><a href='#L183'>183</a>
249
+ <a name='L184'></a><a href='#L184'>184</a>
250
+ <a name='L185'></a><a href='#L185'>185</a>
251
+ <a name='L186'></a><a href='#L186'>186</a>
252
+ <a name='L187'></a><a href='#L187'>187</a>
253
+ <a name='L188'></a><a href='#L188'>188</a>
254
+ <a name='L189'></a><a href='#L189'>189</a>
255
+ <a name='L190'></a><a href='#L190'>190</a>
256
+ <a name='L191'></a><a href='#L191'>191</a>
257
+ <a name='L192'></a><a href='#L192'>192</a>
258
+ <a name='L193'></a><a href='#L193'>193</a>
259
+ <a name='L194'></a><a href='#L194'>194</a>
260
+ <a name='L195'></a><a href='#L195'>195</a>
261
+ <a name='L196'></a><a href='#L196'>196</a>
262
+ <a name='L197'></a><a href='#L197'>197</a>
263
+ <a name='L198'></a><a href='#L198'>198</a>
264
+ <a name='L199'></a><a href='#L199'>199</a>
265
+ <a name='L200'></a><a href='#L200'>200</a>
266
+ <a name='L201'></a><a href='#L201'>201</a>
267
+ <a name='L202'></a><a href='#L202'>202</a>
268
+ <a name='L203'></a><a href='#L203'>203</a>
269
+ <a name='L204'></a><a href='#L204'>204</a>
270
+ <a name='L205'></a><a href='#L205'>205</a>
271
+ <a name='L206'></a><a href='#L206'>206</a>
272
+ <a name='L207'></a><a href='#L207'>207</a>
273
+ <a name='L208'></a><a href='#L208'>208</a>
274
+ <a name='L209'></a><a href='#L209'>209</a>
275
+ <a name='L210'></a><a href='#L210'>210</a>
276
+ <a name='L211'></a><a href='#L211'>211</a>
277
+ <a name='L212'></a><a href='#L212'>212</a>
278
+ <a name='L213'></a><a href='#L213'>213</a>
279
+ <a name='L214'></a><a href='#L214'>214</a>
280
+ <a name='L215'></a><a href='#L215'>215</a>
281
+ <a name='L216'></a><a href='#L216'>216</a>
282
+ <a name='L217'></a><a href='#L217'>217</a>
283
+ <a name='L218'></a><a href='#L218'>218</a>
284
+ <a name='L219'></a><a href='#L219'>219</a>
285
+ <a name='L220'></a><a href='#L220'>220</a>
286
+ <a name='L221'></a><a href='#L221'>221</a>
287
+ <a name='L222'></a><a href='#L222'>222</a>
288
+ <a name='L223'></a><a href='#L223'>223</a>
289
+ <a name='L224'></a><a href='#L224'>224</a>
290
+ <a name='L225'></a><a href='#L225'>225</a>
291
+ <a name='L226'></a><a href='#L226'>226</a>
292
+ <a name='L227'></a><a href='#L227'>227</a>
293
+ <a name='L228'></a><a href='#L228'>228</a>
294
+ <a name='L229'></a><a href='#L229'>229</a>
295
+ <a name='L230'></a><a href='#L230'>230</a>
296
+ <a name='L231'></a><a href='#L231'>231</a>
297
+ <a name='L232'></a><a href='#L232'>232</a>
298
+ <a name='L233'></a><a href='#L233'>233</a>
299
+ <a name='L234'></a><a href='#L234'>234</a>
300
+ <a name='L235'></a><a href='#L235'>235</a>
301
+ <a name='L236'></a><a href='#L236'>236</a>
302
+ <a name='L237'></a><a href='#L237'>237</a>
303
+ <a name='L238'></a><a href='#L238'>238</a>
304
+ <a name='L239'></a><a href='#L239'>239</a>
305
+ <a name='L240'></a><a href='#L240'>240</a>
306
+ <a name='L241'></a><a href='#L241'>241</a>
307
+ <a name='L242'></a><a href='#L242'>242</a>
308
+ <a name='L243'></a><a href='#L243'>243</a>
309
+ <a name='L244'></a><a href='#L244'>244</a>
310
+ <a name='L245'></a><a href='#L245'>245</a>
311
+ <a name='L246'></a><a href='#L246'>246</a>
312
+ <a name='L247'></a><a href='#L247'>247</a>
313
+ <a name='L248'></a><a href='#L248'>248</a>
314
+ <a name='L249'></a><a href='#L249'>249</a>
315
+ <a name='L250'></a><a href='#L250'>250</a>
316
+ <a name='L251'></a><a href='#L251'>251</a>
317
+ <a name='L252'></a><a href='#L252'>252</a>
318
+ <a name='L253'></a><a href='#L253'>253</a>
319
+ <a name='L254'></a><a href='#L254'>254</a>
320
+ <a name='L255'></a><a href='#L255'>255</a>
321
+ <a name='L256'></a><a href='#L256'>256</a>
322
+ <a name='L257'></a><a href='#L257'>257</a>
323
+ <a name='L258'></a><a href='#L258'>258</a>
324
+ <a name='L259'></a><a href='#L259'>259</a>
325
+ <a name='L260'></a><a href='#L260'>260</a>
326
+ <a name='L261'></a><a href='#L261'>261</a>
327
+ <a name='L262'></a><a href='#L262'>262</a>
328
+ <a name='L263'></a><a href='#L263'>263</a>
329
+ <a name='L264'></a><a href='#L264'>264</a>
330
+ <a name='L265'></a><a href='#L265'>265</a>
331
+ <a name='L266'></a><a href='#L266'>266</a>
332
+ <a name='L267'></a><a href='#L267'>267</a>
333
+ <a name='L268'></a><a href='#L268'>268</a>
334
+ <a name='L269'></a><a href='#L269'>269</a>
335
+ <a name='L270'></a><a href='#L270'>270</a>
336
+ <a name='L271'></a><a href='#L271'>271</a>
337
+ <a name='L272'></a><a href='#L272'>272</a>
338
+ <a name='L273'></a><a href='#L273'>273</a>
339
+ <a name='L274'></a><a href='#L274'>274</a>
340
+ <a name='L275'></a><a href='#L275'>275</a>
341
+ <a name='L276'></a><a href='#L276'>276</a>
342
+ <a name='L277'></a><a href='#L277'>277</a>
343
+ <a name='L278'></a><a href='#L278'>278</a>
344
+ <a name='L279'></a><a href='#L279'>279</a>
345
+ <a name='L280'></a><a href='#L280'>280</a>
346
+ <a name='L281'></a><a href='#L281'>281</a>
347
+ <a name='L282'></a><a href='#L282'>282</a>
348
+ <a name='L283'></a><a href='#L283'>283</a>
349
+ <a name='L284'></a><a href='#L284'>284</a>
350
+ <a name='L285'></a><a href='#L285'>285</a>
351
+ <a name='L286'></a><a href='#L286'>286</a>
352
+ <a name='L287'></a><a href='#L287'>287</a>
353
+ <a name='L288'></a><a href='#L288'>288</a>
354
+ <a name='L289'></a><a href='#L289'>289</a>
355
+ <a name='L290'></a><a href='#L290'>290</a>
356
+ <a name='L291'></a><a href='#L291'>291</a>
357
+ <a name='L292'></a><a href='#L292'>292</a>
358
+ <a name='L293'></a><a href='#L293'>293</a>
359
+ <a name='L294'></a><a href='#L294'>294</a>
360
+ <a name='L295'></a><a href='#L295'>295</a>
361
+ <a name='L296'></a><a href='#L296'>296</a>
362
+ <a name='L297'></a><a href='#L297'>297</a>
363
+ <a name='L298'></a><a href='#L298'>298</a>
364
+ <a name='L299'></a><a href='#L299'>299</a>
365
+ <a name='L300'></a><a href='#L300'>300</a>
366
+ <a name='L301'></a><a href='#L301'>301</a>
367
+ <a name='L302'></a><a href='#L302'>302</a>
368
+ <a name='L303'></a><a href='#L303'>303</a>
369
+ <a name='L304'></a><a href='#L304'>304</a>
370
+ <a name='L305'></a><a href='#L305'>305</a>
371
+ <a name='L306'></a><a href='#L306'>306</a>
372
+ <a name='L307'></a><a href='#L307'>307</a>
373
+ <a name='L308'></a><a href='#L308'>308</a>
374
+ <a name='L309'></a><a href='#L309'>309</a>
375
+ <a name='L310'></a><a href='#L310'>310</a>
376
+ <a name='L311'></a><a href='#L311'>311</a>
377
+ <a name='L312'></a><a href='#L312'>312</a>
378
+ <a name='L313'></a><a href='#L313'>313</a>
379
+ <a name='L314'></a><a href='#L314'>314</a>
380
+ <a name='L315'></a><a href='#L315'>315</a>
381
+ <a name='L316'></a><a href='#L316'>316</a>
382
+ <a name='L317'></a><a href='#L317'>317</a>
383
+ <a name='L318'></a><a href='#L318'>318</a>
384
+ <a name='L319'></a><a href='#L319'>319</a>
385
+ <a name='L320'></a><a href='#L320'>320</a>
386
+ <a name='L321'></a><a href='#L321'>321</a>
387
+ <a name='L322'></a><a href='#L322'>322</a>
388
+ <a name='L323'></a><a href='#L323'>323</a>
389
+ <a name='L324'></a><a href='#L324'>324</a>
390
+ <a name='L325'></a><a href='#L325'>325</a>
391
+ <a name='L326'></a><a href='#L326'>326</a>
392
+ <a name='L327'></a><a href='#L327'>327</a>
393
+ <a name='L328'></a><a href='#L328'>328</a>
394
+ <a name='L329'></a><a href='#L329'>329</a>
395
+ <a name='L330'></a><a href='#L330'>330</a>
396
+ <a name='L331'></a><a href='#L331'>331</a>
397
+ <a name='L332'></a><a href='#L332'>332</a>
398
+ <a name='L333'></a><a href='#L333'>333</a>
399
+ <a name='L334'></a><a href='#L334'>334</a>
400
+ <a name='L335'></a><a href='#L335'>335</a>
401
+ <a name='L336'></a><a href='#L336'>336</a>
402
+ <a name='L337'></a><a href='#L337'>337</a>
403
+ <a name='L338'></a><a href='#L338'>338</a>
404
+ <a name='L339'></a><a href='#L339'>339</a>
405
+ <a name='L340'></a><a href='#L340'>340</a>
406
+ <a name='L341'></a><a href='#L341'>341</a>
407
+ <a name='L342'></a><a href='#L342'>342</a>
408
+ <a name='L343'></a><a href='#L343'>343</a>
409
+ <a name='L344'></a><a href='#L344'>344</a>
410
+ <a name='L345'></a><a href='#L345'>345</a>
411
+ <a name='L346'></a><a href='#L346'>346</a>
412
+ <a name='L347'></a><a href='#L347'>347</a>
413
+ <a name='L348'></a><a href='#L348'>348</a>
414
+ <a name='L349'></a><a href='#L349'>349</a>
415
+ <a name='L350'></a><a href='#L350'>350</a>
416
+ <a name='L351'></a><a href='#L351'>351</a>
417
+ <a name='L352'></a><a href='#L352'>352</a>
418
+ <a name='L353'></a><a href='#L353'>353</a>
419
+ <a name='L354'></a><a href='#L354'>354</a>
420
+ <a name='L355'></a><a href='#L355'>355</a>
421
+ <a name='L356'></a><a href='#L356'>356</a>
422
+ <a name='L357'></a><a href='#L357'>357</a>
423
+ <a name='L358'></a><a href='#L358'>358</a>
424
+ <a name='L359'></a><a href='#L359'>359</a>
425
+ <a name='L360'></a><a href='#L360'>360</a>
426
+ <a name='L361'></a><a href='#L361'>361</a>
427
+ <a name='L362'></a><a href='#L362'>362</a>
428
+ <a name='L363'></a><a href='#L363'>363</a>
429
+ <a name='L364'></a><a href='#L364'>364</a>
430
+ <a name='L365'></a><a href='#L365'>365</a>
431
+ <a name='L366'></a><a href='#L366'>366</a>
432
+ <a name='L367'></a><a href='#L367'>367</a>
433
+ <a name='L368'></a><a href='#L368'>368</a>
434
+ <a name='L369'></a><a href='#L369'>369</a>
435
+ <a name='L370'></a><a href='#L370'>370</a>
436
+ <a name='L371'></a><a href='#L371'>371</a>
437
+ <a name='L372'></a><a href='#L372'>372</a>
438
+ <a name='L373'></a><a href='#L373'>373</a>
439
+ <a name='L374'></a><a href='#L374'>374</a>
440
+ <a name='L375'></a><a href='#L375'>375</a>
441
+ <a name='L376'></a><a href='#L376'>376</a>
442
+ <a name='L377'></a><a href='#L377'>377</a>
443
+ <a name='L378'></a><a href='#L378'>378</a>
444
+ <a name='L379'></a><a href='#L379'>379</a>
445
+ <a name='L380'></a><a href='#L380'>380</a>
446
+ <a name='L381'></a><a href='#L381'>381</a>
447
+ <a name='L382'></a><a href='#L382'>382</a>
448
+ <a name='L383'></a><a href='#L383'>383</a>
449
+ <a name='L384'></a><a href='#L384'>384</a>
450
+ <a name='L385'></a><a href='#L385'>385</a>
451
+ <a name='L386'></a><a href='#L386'>386</a>
452
+ <a name='L387'></a><a href='#L387'>387</a>
453
+ <a name='L388'></a><a href='#L388'>388</a>
454
+ <a name='L389'></a><a href='#L389'>389</a>
455
+ <a name='L390'></a><a href='#L390'>390</a>
456
+ <a name='L391'></a><a href='#L391'>391</a>
457
+ <a name='L392'></a><a href='#L392'>392</a>
458
+ <a name='L393'></a><a href='#L393'>393</a>
459
+ <a name='L394'></a><a href='#L394'>394</a>
460
+ <a name='L395'></a><a href='#L395'>395</a>
461
+ <a name='L396'></a><a href='#L396'>396</a>
462
+ <a name='L397'></a><a href='#L397'>397</a>
463
+ <a name='L398'></a><a href='#L398'>398</a>
464
+ <a name='L399'></a><a href='#L399'>399</a>
465
+ <a name='L400'></a><a href='#L400'>400</a>
466
+ <a name='L401'></a><a href='#L401'>401</a>
467
+ <a name='L402'></a><a href='#L402'>402</a>
468
+ <a name='L403'></a><a href='#L403'>403</a>
469
+ <a name='L404'></a><a href='#L404'>404</a>
470
+ <a name='L405'></a><a href='#L405'>405</a>
471
+ <a name='L406'></a><a href='#L406'>406</a>
472
+ <a name='L407'></a><a href='#L407'>407</a>
473
+ <a name='L408'></a><a href='#L408'>408</a>
474
+ <a name='L409'></a><a href='#L409'>409</a>
475
+ <a name='L410'></a><a href='#L410'>410</a>
476
+ <a name='L411'></a><a href='#L411'>411</a>
477
+ <a name='L412'></a><a href='#L412'>412</a>
478
+ <a name='L413'></a><a href='#L413'>413</a>
479
+ <a name='L414'></a><a href='#L414'>414</a>
480
+ <a name='L415'></a><a href='#L415'>415</a>
481
+ <a name='L416'></a><a href='#L416'>416</a>
482
+ <a name='L417'></a><a href='#L417'>417</a>
483
+ <a name='L418'></a><a href='#L418'>418</a>
484
+ <a name='L419'></a><a href='#L419'>419</a>
485
+ <a name='L420'></a><a href='#L420'>420</a>
486
+ <a name='L421'></a><a href='#L421'>421</a>
487
+ <a name='L422'></a><a href='#L422'>422</a>
488
+ <a name='L423'></a><a href='#L423'>423</a>
489
+ <a name='L424'></a><a href='#L424'>424</a>
490
+ <a name='L425'></a><a href='#L425'>425</a>
491
+ <a name='L426'></a><a href='#L426'>426</a>
492
+ <a name='L427'></a><a href='#L427'>427</a>
493
+ <a name='L428'></a><a href='#L428'>428</a>
494
+ <a name='L429'></a><a href='#L429'>429</a>
495
+ <a name='L430'></a><a href='#L430'>430</a>
496
+ <a name='L431'></a><a href='#L431'>431</a>
497
+ <a name='L432'></a><a href='#L432'>432</a>
498
+ <a name='L433'></a><a href='#L433'>433</a>
499
+ <a name='L434'></a><a href='#L434'>434</a>
500
+ <a name='L435'></a><a href='#L435'>435</a>
501
+ <a name='L436'></a><a href='#L436'>436</a>
502
+ <a name='L437'></a><a href='#L437'>437</a>
503
+ <a name='L438'></a><a href='#L438'>438</a>
504
+ <a name='L439'></a><a href='#L439'>439</a>
505
+ <a name='L440'></a><a href='#L440'>440</a>
506
+ <a name='L441'></a><a href='#L441'>441</a>
507
+ <a name='L442'></a><a href='#L442'>442</a>
508
+ <a name='L443'></a><a href='#L443'>443</a>
509
+ <a name='L444'></a><a href='#L444'>444</a>
510
+ <a name='L445'></a><a href='#L445'>445</a>
511
+ <a name='L446'></a><a href='#L446'>446</a>
512
+ <a name='L447'></a><a href='#L447'>447</a>
513
+ <a name='L448'></a><a href='#L448'>448</a>
514
+ <a name='L449'></a><a href='#L449'>449</a>
515
+ <a name='L450'></a><a href='#L450'>450</a>
516
+ <a name='L451'></a><a href='#L451'>451</a>
517
+ <a name='L452'></a><a href='#L452'>452</a>
518
+ <a name='L453'></a><a href='#L453'>453</a>
519
+ <a name='L454'></a><a href='#L454'>454</a>
520
+ <a name='L455'></a><a href='#L455'>455</a>
521
+ <a name='L456'></a><a href='#L456'>456</a>
522
+ <a name='L457'></a><a href='#L457'>457</a>
523
+ <a name='L458'></a><a href='#L458'>458</a>
524
+ <a name='L459'></a><a href='#L459'>459</a>
525
+ <a name='L460'></a><a href='#L460'>460</a>
526
+ <a name='L461'></a><a href='#L461'>461</a>
527
+ <a name='L462'></a><a href='#L462'>462</a>
528
+ <a name='L463'></a><a href='#L463'>463</a>
529
+ <a name='L464'></a><a href='#L464'>464</a>
530
+ <a name='L465'></a><a href='#L465'>465</a>
531
+ <a name='L466'></a><a href='#L466'>466</a>
532
+ <a name='L467'></a><a href='#L467'>467</a>
533
+ <a name='L468'></a><a href='#L468'>468</a>
534
+ <a name='L469'></a><a href='#L469'>469</a>
535
+ <a name='L470'></a><a href='#L470'>470</a>
536
+ <a name='L471'></a><a href='#L471'>471</a>
537
+ <a name='L472'></a><a href='#L472'>472</a>
538
+ <a name='L473'></a><a href='#L473'>473</a>
539
+ <a name='L474'></a><a href='#L474'>474</a>
540
+ <a name='L475'></a><a href='#L475'>475</a>
541
+ <a name='L476'></a><a href='#L476'>476</a>
542
+ <a name='L477'></a><a href='#L477'>477</a>
543
+ <a name='L478'></a><a href='#L478'>478</a>
544
+ <a name='L479'></a><a href='#L479'>479</a>
545
+ <a name='L480'></a><a href='#L480'>480</a>
546
+ <a name='L481'></a><a href='#L481'>481</a>
547
+ <a name='L482'></a><a href='#L482'>482</a>
548
+ <a name='L483'></a><a href='#L483'>483</a>
549
+ <a name='L484'></a><a href='#L484'>484</a>
550
+ <a name='L485'></a><a href='#L485'>485</a>
551
+ <a name='L486'></a><a href='#L486'>486</a>
552
+ <a name='L487'></a><a href='#L487'>487</a>
553
+ <a name='L488'></a><a href='#L488'>488</a>
554
+ <a name='L489'></a><a href='#L489'>489</a>
555
+ <a name='L490'></a><a href='#L490'>490</a>
556
+ <a name='L491'></a><a href='#L491'>491</a>
557
+ <a name='L492'></a><a href='#L492'>492</a>
558
+ <a name='L493'></a><a href='#L493'>493</a>
559
+ <a name='L494'></a><a href='#L494'>494</a>
560
+ <a name='L495'></a><a href='#L495'>495</a>
561
+ <a name='L496'></a><a href='#L496'>496</a>
562
+ <a name='L497'></a><a href='#L497'>497</a>
563
+ <a name='L498'></a><a href='#L498'>498</a>
564
+ <a name='L499'></a><a href='#L499'>499</a>
565
+ <a name='L500'></a><a href='#L500'>500</a>
566
+ <a name='L501'></a><a href='#L501'>501</a>
567
+ <a name='L502'></a><a href='#L502'>502</a></td><td class="line-coverage quiet"><span class="cline-any cline-no">&nbsp;</span>
568
+ <span class="cline-any cline-no">&nbsp;</span>
569
+ <span class="cline-any cline-no">&nbsp;</span>
570
+ <span class="cline-any cline-no">&nbsp;</span>
571
+ <span class="cline-any cline-no">&nbsp;</span>
572
+ <span class="cline-any cline-no">&nbsp;</span>
573
+ <span class="cline-any cline-no">&nbsp;</span>
574
+ <span class="cline-any cline-no">&nbsp;</span>
575
+ <span class="cline-any cline-no">&nbsp;</span>
576
+ <span class="cline-any cline-no">&nbsp;</span>
577
+ <span class="cline-any cline-no">&nbsp;</span>
578
+ <span class="cline-any cline-no">&nbsp;</span>
579
+ <span class="cline-any cline-no">&nbsp;</span>
580
+ <span class="cline-any cline-no">&nbsp;</span>
581
+ <span class="cline-any cline-no">&nbsp;</span>
582
+ <span class="cline-any cline-no">&nbsp;</span>
583
+ <span class="cline-any cline-no">&nbsp;</span>
584
+ <span class="cline-any cline-no">&nbsp;</span>
585
+ <span class="cline-any cline-no">&nbsp;</span>
586
+ <span class="cline-any cline-no">&nbsp;</span>
587
+ <span class="cline-any cline-no">&nbsp;</span>
588
+ <span class="cline-any cline-no">&nbsp;</span>
589
+ <span class="cline-any cline-no">&nbsp;</span>
590
+ <span class="cline-any cline-no">&nbsp;</span>
591
+ <span class="cline-any cline-no">&nbsp;</span>
592
+ <span class="cline-any cline-no">&nbsp;</span>
593
+ <span class="cline-any cline-no">&nbsp;</span>
594
+ <span class="cline-any cline-no">&nbsp;</span>
595
+ <span class="cline-any cline-no">&nbsp;</span>
596
+ <span class="cline-any cline-no">&nbsp;</span>
597
+ <span class="cline-any cline-no">&nbsp;</span>
598
+ <span class="cline-any cline-no">&nbsp;</span>
599
+ <span class="cline-any cline-no">&nbsp;</span>
600
+ <span class="cline-any cline-no">&nbsp;</span>
601
+ <span class="cline-any cline-no">&nbsp;</span>
602
+ <span class="cline-any cline-no">&nbsp;</span>
603
+ <span class="cline-any cline-no">&nbsp;</span>
604
+ <span class="cline-any cline-no">&nbsp;</span>
605
+ <span class="cline-any cline-no">&nbsp;</span>
606
+ <span class="cline-any cline-no">&nbsp;</span>
607
+ <span class="cline-any cline-no">&nbsp;</span>
608
+ <span class="cline-any cline-no">&nbsp;</span>
609
+ <span class="cline-any cline-no">&nbsp;</span>
610
+ <span class="cline-any cline-no">&nbsp;</span>
611
+ <span class="cline-any cline-no">&nbsp;</span>
612
+ <span class="cline-any cline-no">&nbsp;</span>
613
+ <span class="cline-any cline-no">&nbsp;</span>
614
+ <span class="cline-any cline-no">&nbsp;</span>
615
+ <span class="cline-any cline-no">&nbsp;</span>
616
+ <span class="cline-any cline-no">&nbsp;</span>
617
+ <span class="cline-any cline-no">&nbsp;</span>
618
+ <span class="cline-any cline-no">&nbsp;</span>
619
+ <span class="cline-any cline-no">&nbsp;</span>
620
+ <span class="cline-any cline-no">&nbsp;</span>
621
+ <span class="cline-any cline-no">&nbsp;</span>
622
+ <span class="cline-any cline-no">&nbsp;</span>
623
+ <span class="cline-any cline-no">&nbsp;</span>
624
+ <span class="cline-any cline-no">&nbsp;</span>
625
+ <span class="cline-any cline-no">&nbsp;</span>
626
+ <span class="cline-any cline-no">&nbsp;</span>
627
+ <span class="cline-any cline-no">&nbsp;</span>
628
+ <span class="cline-any cline-no">&nbsp;</span>
629
+ <span class="cline-any cline-no">&nbsp;</span>
630
+ <span class="cline-any cline-no">&nbsp;</span>
631
+ <span class="cline-any cline-no">&nbsp;</span>
632
+ <span class="cline-any cline-no">&nbsp;</span>
633
+ <span class="cline-any cline-no">&nbsp;</span>
634
+ <span class="cline-any cline-no">&nbsp;</span>
635
+ <span class="cline-any cline-no">&nbsp;</span>
636
+ <span class="cline-any cline-no">&nbsp;</span>
637
+ <span class="cline-any cline-no">&nbsp;</span>
638
+ <span class="cline-any cline-no">&nbsp;</span>
639
+ <span class="cline-any cline-no">&nbsp;</span>
640
+ <span class="cline-any cline-no">&nbsp;</span>
641
+ <span class="cline-any cline-no">&nbsp;</span>
642
+ <span class="cline-any cline-no">&nbsp;</span>
643
+ <span class="cline-any cline-no">&nbsp;</span>
644
+ <span class="cline-any cline-no">&nbsp;</span>
645
+ <span class="cline-any cline-no">&nbsp;</span>
646
+ <span class="cline-any cline-no">&nbsp;</span>
647
+ <span class="cline-any cline-no">&nbsp;</span>
648
+ <span class="cline-any cline-no">&nbsp;</span>
649
+ <span class="cline-any cline-no">&nbsp;</span>
650
+ <span class="cline-any cline-no">&nbsp;</span>
651
+ <span class="cline-any cline-no">&nbsp;</span>
652
+ <span class="cline-any cline-no">&nbsp;</span>
653
+ <span class="cline-any cline-no">&nbsp;</span>
654
+ <span class="cline-any cline-no">&nbsp;</span>
655
+ <span class="cline-any cline-no">&nbsp;</span>
656
+ <span class="cline-any cline-no">&nbsp;</span>
657
+ <span class="cline-any cline-no">&nbsp;</span>
658
+ <span class="cline-any cline-no">&nbsp;</span>
659
+ <span class="cline-any cline-no">&nbsp;</span>
660
+ <span class="cline-any cline-no">&nbsp;</span>
661
+ <span class="cline-any cline-no">&nbsp;</span>
662
+ <span class="cline-any cline-no">&nbsp;</span>
663
+ <span class="cline-any cline-no">&nbsp;</span>
664
+ <span class="cline-any cline-no">&nbsp;</span>
665
+ <span class="cline-any cline-no">&nbsp;</span>
666
+ <span class="cline-any cline-no">&nbsp;</span>
667
+ <span class="cline-any cline-no">&nbsp;</span>
668
+ <span class="cline-any cline-no">&nbsp;</span>
669
+ <span class="cline-any cline-no">&nbsp;</span>
670
+ <span class="cline-any cline-no">&nbsp;</span>
671
+ <span class="cline-any cline-no">&nbsp;</span>
672
+ <span class="cline-any cline-no">&nbsp;</span>
673
+ <span class="cline-any cline-no">&nbsp;</span>
674
+ <span class="cline-any cline-no">&nbsp;</span>
675
+ <span class="cline-any cline-no">&nbsp;</span>
676
+ <span class="cline-any cline-no">&nbsp;</span>
677
+ <span class="cline-any cline-no">&nbsp;</span>
678
+ <span class="cline-any cline-no">&nbsp;</span>
679
+ <span class="cline-any cline-no">&nbsp;</span>
680
+ <span class="cline-any cline-no">&nbsp;</span>
681
+ <span class="cline-any cline-no">&nbsp;</span>
682
+ <span class="cline-any cline-no">&nbsp;</span>
683
+ <span class="cline-any cline-no">&nbsp;</span>
684
+ <span class="cline-any cline-no">&nbsp;</span>
685
+ <span class="cline-any cline-no">&nbsp;</span>
686
+ <span class="cline-any cline-no">&nbsp;</span>
687
+ <span class="cline-any cline-no">&nbsp;</span>
688
+ <span class="cline-any cline-no">&nbsp;</span>
689
+ <span class="cline-any cline-no">&nbsp;</span>
690
+ <span class="cline-any cline-no">&nbsp;</span>
691
+ <span class="cline-any cline-no">&nbsp;</span>
692
+ <span class="cline-any cline-no">&nbsp;</span>
693
+ <span class="cline-any cline-no">&nbsp;</span>
694
+ <span class="cline-any cline-no">&nbsp;</span>
695
+ <span class="cline-any cline-no">&nbsp;</span>
696
+ <span class="cline-any cline-no">&nbsp;</span>
697
+ <span class="cline-any cline-no">&nbsp;</span>
698
+ <span class="cline-any cline-no">&nbsp;</span>
699
+ <span class="cline-any cline-no">&nbsp;</span>
700
+ <span class="cline-any cline-no">&nbsp;</span>
701
+ <span class="cline-any cline-no">&nbsp;</span>
702
+ <span class="cline-any cline-no">&nbsp;</span>
703
+ <span class="cline-any cline-no">&nbsp;</span>
704
+ <span class="cline-any cline-no">&nbsp;</span>
705
+ <span class="cline-any cline-no">&nbsp;</span>
706
+ <span class="cline-any cline-no">&nbsp;</span>
707
+ <span class="cline-any cline-no">&nbsp;</span>
708
+ <span class="cline-any cline-no">&nbsp;</span>
709
+ <span class="cline-any cline-no">&nbsp;</span>
710
+ <span class="cline-any cline-no">&nbsp;</span>
711
+ <span class="cline-any cline-no">&nbsp;</span>
712
+ <span class="cline-any cline-no">&nbsp;</span>
713
+ <span class="cline-any cline-no">&nbsp;</span>
714
+ <span class="cline-any cline-no">&nbsp;</span>
715
+ <span class="cline-any cline-no">&nbsp;</span>
716
+ <span class="cline-any cline-no">&nbsp;</span>
717
+ <span class="cline-any cline-no">&nbsp;</span>
718
+ <span class="cline-any cline-no">&nbsp;</span>
719
+ <span class="cline-any cline-no">&nbsp;</span>
720
+ <span class="cline-any cline-no">&nbsp;</span>
721
+ <span class="cline-any cline-no">&nbsp;</span>
722
+ <span class="cline-any cline-no">&nbsp;</span>
723
+ <span class="cline-any cline-no">&nbsp;</span>
724
+ <span class="cline-any cline-no">&nbsp;</span>
725
+ <span class="cline-any cline-no">&nbsp;</span>
726
+ <span class="cline-any cline-no">&nbsp;</span>
727
+ <span class="cline-any cline-no">&nbsp;</span>
728
+ <span class="cline-any cline-no">&nbsp;</span>
729
+ <span class="cline-any cline-no">&nbsp;</span>
730
+ <span class="cline-any cline-no">&nbsp;</span>
731
+ <span class="cline-any cline-no">&nbsp;</span>
732
+ <span class="cline-any cline-no">&nbsp;</span>
733
+ <span class="cline-any cline-no">&nbsp;</span>
734
+ <span class="cline-any cline-no">&nbsp;</span>
735
+ <span class="cline-any cline-no">&nbsp;</span>
736
+ <span class="cline-any cline-no">&nbsp;</span>
737
+ <span class="cline-any cline-no">&nbsp;</span>
738
+ <span class="cline-any cline-no">&nbsp;</span>
739
+ <span class="cline-any cline-no">&nbsp;</span>
740
+ <span class="cline-any cline-no">&nbsp;</span>
741
+ <span class="cline-any cline-no">&nbsp;</span>
742
+ <span class="cline-any cline-no">&nbsp;</span>
743
+ <span class="cline-any cline-no">&nbsp;</span>
744
+ <span class="cline-any cline-no">&nbsp;</span>
745
+ <span class="cline-any cline-no">&nbsp;</span>
746
+ <span class="cline-any cline-no">&nbsp;</span>
747
+ <span class="cline-any cline-no">&nbsp;</span>
748
+ <span class="cline-any cline-no">&nbsp;</span>
749
+ <span class="cline-any cline-no">&nbsp;</span>
750
+ <span class="cline-any cline-no">&nbsp;</span>
751
+ <span class="cline-any cline-no">&nbsp;</span>
752
+ <span class="cline-any cline-no">&nbsp;</span>
753
+ <span class="cline-any cline-no">&nbsp;</span>
754
+ <span class="cline-any cline-no">&nbsp;</span>
755
+ <span class="cline-any cline-no">&nbsp;</span>
756
+ <span class="cline-any cline-no">&nbsp;</span>
757
+ <span class="cline-any cline-no">&nbsp;</span>
758
+ <span class="cline-any cline-no">&nbsp;</span>
759
+ <span class="cline-any cline-no">&nbsp;</span>
760
+ <span class="cline-any cline-no">&nbsp;</span>
761
+ <span class="cline-any cline-no">&nbsp;</span>
762
+ <span class="cline-any cline-no">&nbsp;</span>
763
+ <span class="cline-any cline-no">&nbsp;</span>
764
+ <span class="cline-any cline-no">&nbsp;</span>
765
+ <span class="cline-any cline-no">&nbsp;</span>
766
+ <span class="cline-any cline-no">&nbsp;</span>
767
+ <span class="cline-any cline-no">&nbsp;</span>
768
+ <span class="cline-any cline-no">&nbsp;</span>
769
+ <span class="cline-any cline-no">&nbsp;</span>
770
+ <span class="cline-any cline-no">&nbsp;</span>
771
+ <span class="cline-any cline-no">&nbsp;</span>
772
+ <span class="cline-any cline-no">&nbsp;</span>
773
+ <span class="cline-any cline-no">&nbsp;</span>
774
+ <span class="cline-any cline-no">&nbsp;</span>
775
+ <span class="cline-any cline-no">&nbsp;</span>
776
+ <span class="cline-any cline-no">&nbsp;</span>
777
+ <span class="cline-any cline-no">&nbsp;</span>
778
+ <span class="cline-any cline-no">&nbsp;</span>
779
+ <span class="cline-any cline-no">&nbsp;</span>
780
+ <span class="cline-any cline-no">&nbsp;</span>
781
+ <span class="cline-any cline-no">&nbsp;</span>
782
+ <span class="cline-any cline-no">&nbsp;</span>
783
+ <span class="cline-any cline-no">&nbsp;</span>
784
+ <span class="cline-any cline-no">&nbsp;</span>
785
+ <span class="cline-any cline-no">&nbsp;</span>
786
+ <span class="cline-any cline-no">&nbsp;</span>
787
+ <span class="cline-any cline-no">&nbsp;</span>
788
+ <span class="cline-any cline-no">&nbsp;</span>
789
+ <span class="cline-any cline-no">&nbsp;</span>
790
+ <span class="cline-any cline-no">&nbsp;</span>
791
+ <span class="cline-any cline-no">&nbsp;</span>
792
+ <span class="cline-any cline-no">&nbsp;</span>
793
+ <span class="cline-any cline-no">&nbsp;</span>
794
+ <span class="cline-any cline-no">&nbsp;</span>
795
+ <span class="cline-any cline-no">&nbsp;</span>
796
+ <span class="cline-any cline-no">&nbsp;</span>
797
+ <span class="cline-any cline-no">&nbsp;</span>
798
+ <span class="cline-any cline-no">&nbsp;</span>
799
+ <span class="cline-any cline-no">&nbsp;</span>
800
+ <span class="cline-any cline-no">&nbsp;</span>
801
+ <span class="cline-any cline-no">&nbsp;</span>
802
+ <span class="cline-any cline-no">&nbsp;</span>
803
+ <span class="cline-any cline-no">&nbsp;</span>
804
+ <span class="cline-any cline-no">&nbsp;</span>
805
+ <span class="cline-any cline-no">&nbsp;</span>
806
+ <span class="cline-any cline-no">&nbsp;</span>
807
+ <span class="cline-any cline-no">&nbsp;</span>
808
+ <span class="cline-any cline-no">&nbsp;</span>
809
+ <span class="cline-any cline-no">&nbsp;</span>
810
+ <span class="cline-any cline-no">&nbsp;</span>
811
+ <span class="cline-any cline-no">&nbsp;</span>
812
+ <span class="cline-any cline-no">&nbsp;</span>
813
+ <span class="cline-any cline-no">&nbsp;</span>
814
+ <span class="cline-any cline-no">&nbsp;</span>
815
+ <span class="cline-any cline-no">&nbsp;</span>
816
+ <span class="cline-any cline-no">&nbsp;</span>
817
+ <span class="cline-any cline-no">&nbsp;</span>
818
+ <span class="cline-any cline-no">&nbsp;</span>
819
+ <span class="cline-any cline-no">&nbsp;</span>
820
+ <span class="cline-any cline-no">&nbsp;</span>
821
+ <span class="cline-any cline-no">&nbsp;</span>
822
+ <span class="cline-any cline-no">&nbsp;</span>
823
+ <span class="cline-any cline-no">&nbsp;</span>
824
+ <span class="cline-any cline-no">&nbsp;</span>
825
+ <span class="cline-any cline-no">&nbsp;</span>
826
+ <span class="cline-any cline-no">&nbsp;</span>
827
+ <span class="cline-any cline-no">&nbsp;</span>
828
+ <span class="cline-any cline-no">&nbsp;</span>
829
+ <span class="cline-any cline-no">&nbsp;</span>
830
+ <span class="cline-any cline-no">&nbsp;</span>
831
+ <span class="cline-any cline-no">&nbsp;</span>
832
+ <span class="cline-any cline-no">&nbsp;</span>
833
+ <span class="cline-any cline-no">&nbsp;</span>
834
+ <span class="cline-any cline-no">&nbsp;</span>
835
+ <span class="cline-any cline-no">&nbsp;</span>
836
+ <span class="cline-any cline-no">&nbsp;</span>
837
+ <span class="cline-any cline-no">&nbsp;</span>
838
+ <span class="cline-any cline-no">&nbsp;</span>
839
+ <span class="cline-any cline-no">&nbsp;</span>
840
+ <span class="cline-any cline-no">&nbsp;</span>
841
+ <span class="cline-any cline-no">&nbsp;</span>
842
+ <span class="cline-any cline-no">&nbsp;</span>
843
+ <span class="cline-any cline-no">&nbsp;</span>
844
+ <span class="cline-any cline-no">&nbsp;</span>
845
+ <span class="cline-any cline-no">&nbsp;</span>
846
+ <span class="cline-any cline-no">&nbsp;</span>
847
+ <span class="cline-any cline-no">&nbsp;</span>
848
+ <span class="cline-any cline-no">&nbsp;</span>
849
+ <span class="cline-any cline-no">&nbsp;</span>
850
+ <span class="cline-any cline-no">&nbsp;</span>
851
+ <span class="cline-any cline-no">&nbsp;</span>
852
+ <span class="cline-any cline-no">&nbsp;</span>
853
+ <span class="cline-any cline-no">&nbsp;</span>
854
+ <span class="cline-any cline-no">&nbsp;</span>
855
+ <span class="cline-any cline-no">&nbsp;</span>
856
+ <span class="cline-any cline-no">&nbsp;</span>
857
+ <span class="cline-any cline-no">&nbsp;</span>
858
+ <span class="cline-any cline-no">&nbsp;</span>
859
+ <span class="cline-any cline-no">&nbsp;</span>
860
+ <span class="cline-any cline-no">&nbsp;</span>
861
+ <span class="cline-any cline-no">&nbsp;</span>
862
+ <span class="cline-any cline-no">&nbsp;</span>
863
+ <span class="cline-any cline-no">&nbsp;</span>
864
+ <span class="cline-any cline-no">&nbsp;</span>
865
+ <span class="cline-any cline-no">&nbsp;</span>
866
+ <span class="cline-any cline-no">&nbsp;</span>
867
+ <span class="cline-any cline-no">&nbsp;</span>
868
+ <span class="cline-any cline-no">&nbsp;</span>
869
+ <span class="cline-any cline-no">&nbsp;</span>
870
+ <span class="cline-any cline-no">&nbsp;</span>
871
+ <span class="cline-any cline-no">&nbsp;</span>
872
+ <span class="cline-any cline-no">&nbsp;</span>
873
+ <span class="cline-any cline-no">&nbsp;</span>
874
+ <span class="cline-any cline-no">&nbsp;</span>
875
+ <span class="cline-any cline-no">&nbsp;</span>
876
+ <span class="cline-any cline-no">&nbsp;</span>
877
+ <span class="cline-any cline-no">&nbsp;</span>
878
+ <span class="cline-any cline-no">&nbsp;</span>
879
+ <span class="cline-any cline-no">&nbsp;</span>
880
+ <span class="cline-any cline-no">&nbsp;</span>
881
+ <span class="cline-any cline-no">&nbsp;</span>
882
+ <span class="cline-any cline-no">&nbsp;</span>
883
+ <span class="cline-any cline-no">&nbsp;</span>
884
+ <span class="cline-any cline-no">&nbsp;</span>
885
+ <span class="cline-any cline-no">&nbsp;</span>
886
+ <span class="cline-any cline-no">&nbsp;</span>
887
+ <span class="cline-any cline-no">&nbsp;</span>
888
+ <span class="cline-any cline-no">&nbsp;</span>
889
+ <span class="cline-any cline-no">&nbsp;</span>
890
+ <span class="cline-any cline-no">&nbsp;</span>
891
+ <span class="cline-any cline-no">&nbsp;</span>
892
+ <span class="cline-any cline-no">&nbsp;</span>
893
+ <span class="cline-any cline-no">&nbsp;</span>
894
+ <span class="cline-any cline-no">&nbsp;</span>
895
+ <span class="cline-any cline-no">&nbsp;</span>
896
+ <span class="cline-any cline-no">&nbsp;</span>
897
+ <span class="cline-any cline-no">&nbsp;</span>
898
+ <span class="cline-any cline-no">&nbsp;</span>
899
+ <span class="cline-any cline-no">&nbsp;</span>
900
+ <span class="cline-any cline-no">&nbsp;</span>
901
+ <span class="cline-any cline-no">&nbsp;</span>
902
+ <span class="cline-any cline-no">&nbsp;</span>
903
+ <span class="cline-any cline-no">&nbsp;</span>
904
+ <span class="cline-any cline-no">&nbsp;</span>
905
+ <span class="cline-any cline-no">&nbsp;</span>
906
+ <span class="cline-any cline-no">&nbsp;</span>
907
+ <span class="cline-any cline-no">&nbsp;</span>
908
+ <span class="cline-any cline-no">&nbsp;</span>
909
+ <span class="cline-any cline-no">&nbsp;</span>
910
+ <span class="cline-any cline-no">&nbsp;</span>
911
+ <span class="cline-any cline-no">&nbsp;</span>
912
+ <span class="cline-any cline-no">&nbsp;</span>
913
+ <span class="cline-any cline-no">&nbsp;</span>
914
+ <span class="cline-any cline-no">&nbsp;</span>
915
+ <span class="cline-any cline-no">&nbsp;</span>
916
+ <span class="cline-any cline-no">&nbsp;</span>
917
+ <span class="cline-any cline-no">&nbsp;</span>
918
+ <span class="cline-any cline-no">&nbsp;</span>
919
+ <span class="cline-any cline-no">&nbsp;</span>
920
+ <span class="cline-any cline-no">&nbsp;</span>
921
+ <span class="cline-any cline-no">&nbsp;</span>
922
+ <span class="cline-any cline-no">&nbsp;</span>
923
+ <span class="cline-any cline-no">&nbsp;</span>
924
+ <span class="cline-any cline-no">&nbsp;</span>
925
+ <span class="cline-any cline-no">&nbsp;</span>
926
+ <span class="cline-any cline-no">&nbsp;</span>
927
+ <span class="cline-any cline-no">&nbsp;</span>
928
+ <span class="cline-any cline-no">&nbsp;</span>
929
+ <span class="cline-any cline-no">&nbsp;</span>
930
+ <span class="cline-any cline-no">&nbsp;</span>
931
+ <span class="cline-any cline-no">&nbsp;</span>
932
+ <span class="cline-any cline-no">&nbsp;</span>
933
+ <span class="cline-any cline-no">&nbsp;</span>
934
+ <span class="cline-any cline-no">&nbsp;</span>
935
+ <span class="cline-any cline-no">&nbsp;</span>
936
+ <span class="cline-any cline-no">&nbsp;</span>
937
+ <span class="cline-any cline-no">&nbsp;</span>
938
+ <span class="cline-any cline-no">&nbsp;</span>
939
+ <span class="cline-any cline-no">&nbsp;</span>
940
+ <span class="cline-any cline-no">&nbsp;</span>
941
+ <span class="cline-any cline-no">&nbsp;</span>
942
+ <span class="cline-any cline-no">&nbsp;</span>
943
+ <span class="cline-any cline-no">&nbsp;</span>
944
+ <span class="cline-any cline-no">&nbsp;</span>
945
+ <span class="cline-any cline-no">&nbsp;</span>
946
+ <span class="cline-any cline-no">&nbsp;</span>
947
+ <span class="cline-any cline-no">&nbsp;</span>
948
+ <span class="cline-any cline-no">&nbsp;</span>
949
+ <span class="cline-any cline-no">&nbsp;</span>
950
+ <span class="cline-any cline-no">&nbsp;</span>
951
+ <span class="cline-any cline-no">&nbsp;</span>
952
+ <span class="cline-any cline-no">&nbsp;</span>
953
+ <span class="cline-any cline-no">&nbsp;</span>
954
+ <span class="cline-any cline-no">&nbsp;</span>
955
+ <span class="cline-any cline-no">&nbsp;</span>
956
+ <span class="cline-any cline-no">&nbsp;</span>
957
+ <span class="cline-any cline-no">&nbsp;</span>
958
+ <span class="cline-any cline-no">&nbsp;</span>
959
+ <span class="cline-any cline-no">&nbsp;</span>
960
+ <span class="cline-any cline-no">&nbsp;</span>
961
+ <span class="cline-any cline-no">&nbsp;</span>
962
+ <span class="cline-any cline-no">&nbsp;</span>
963
+ <span class="cline-any cline-no">&nbsp;</span>
964
+ <span class="cline-any cline-no">&nbsp;</span>
965
+ <span class="cline-any cline-no">&nbsp;</span>
966
+ <span class="cline-any cline-no">&nbsp;</span>
967
+ <span class="cline-any cline-no">&nbsp;</span>
968
+ <span class="cline-any cline-no">&nbsp;</span>
969
+ <span class="cline-any cline-no">&nbsp;</span>
970
+ <span class="cline-any cline-no">&nbsp;</span>
971
+ <span class="cline-any cline-no">&nbsp;</span>
972
+ <span class="cline-any cline-no">&nbsp;</span>
973
+ <span class="cline-any cline-no">&nbsp;</span>
974
+ <span class="cline-any cline-no">&nbsp;</span>
975
+ <span class="cline-any cline-no">&nbsp;</span>
976
+ <span class="cline-any cline-no">&nbsp;</span>
977
+ <span class="cline-any cline-no">&nbsp;</span>
978
+ <span class="cline-any cline-no">&nbsp;</span>
979
+ <span class="cline-any cline-no">&nbsp;</span>
980
+ <span class="cline-any cline-no">&nbsp;</span>
981
+ <span class="cline-any cline-no">&nbsp;</span>
982
+ <span class="cline-any cline-no">&nbsp;</span>
983
+ <span class="cline-any cline-no">&nbsp;</span>
984
+ <span class="cline-any cline-no">&nbsp;</span>
985
+ <span class="cline-any cline-no">&nbsp;</span>
986
+ <span class="cline-any cline-no">&nbsp;</span>
987
+ <span class="cline-any cline-no">&nbsp;</span>
988
+ <span class="cline-any cline-no">&nbsp;</span>
989
+ <span class="cline-any cline-no">&nbsp;</span>
990
+ <span class="cline-any cline-no">&nbsp;</span>
991
+ <span class="cline-any cline-no">&nbsp;</span>
992
+ <span class="cline-any cline-no">&nbsp;</span>
993
+ <span class="cline-any cline-no">&nbsp;</span>
994
+ <span class="cline-any cline-no">&nbsp;</span>
995
+ <span class="cline-any cline-no">&nbsp;</span>
996
+ <span class="cline-any cline-no">&nbsp;</span>
997
+ <span class="cline-any cline-no">&nbsp;</span>
998
+ <span class="cline-any cline-no">&nbsp;</span>
999
+ <span class="cline-any cline-no">&nbsp;</span>
1000
+ <span class="cline-any cline-no">&nbsp;</span>
1001
+ <span class="cline-any cline-no">&nbsp;</span>
1002
+ <span class="cline-any cline-no">&nbsp;</span>
1003
+ <span class="cline-any cline-no">&nbsp;</span>
1004
+ <span class="cline-any cline-no">&nbsp;</span>
1005
+ <span class="cline-any cline-no">&nbsp;</span>
1006
+ <span class="cline-any cline-no">&nbsp;</span>
1007
+ <span class="cline-any cline-no">&nbsp;</span>
1008
+ <span class="cline-any cline-no">&nbsp;</span>
1009
+ <span class="cline-any cline-no">&nbsp;</span>
1010
+ <span class="cline-any cline-no">&nbsp;</span>
1011
+ <span class="cline-any cline-no">&nbsp;</span>
1012
+ <span class="cline-any cline-no">&nbsp;</span>
1013
+ <span class="cline-any cline-no">&nbsp;</span>
1014
+ <span class="cline-any cline-no">&nbsp;</span>
1015
+ <span class="cline-any cline-no">&nbsp;</span>
1016
+ <span class="cline-any cline-no">&nbsp;</span>
1017
+ <span class="cline-any cline-no">&nbsp;</span>
1018
+ <span class="cline-any cline-no">&nbsp;</span>
1019
+ <span class="cline-any cline-no">&nbsp;</span>
1020
+ <span class="cline-any cline-no">&nbsp;</span>
1021
+ <span class="cline-any cline-no">&nbsp;</span>
1022
+ <span class="cline-any cline-no">&nbsp;</span>
1023
+ <span class="cline-any cline-no">&nbsp;</span>
1024
+ <span class="cline-any cline-no">&nbsp;</span>
1025
+ <span class="cline-any cline-no">&nbsp;</span>
1026
+ <span class="cline-any cline-no">&nbsp;</span>
1027
+ <span class="cline-any cline-no">&nbsp;</span>
1028
+ <span class="cline-any cline-no">&nbsp;</span>
1029
+ <span class="cline-any cline-no">&nbsp;</span>
1030
+ <span class="cline-any cline-no">&nbsp;</span>
1031
+ <span class="cline-any cline-no">&nbsp;</span>
1032
+ <span class="cline-any cline-no">&nbsp;</span>
1033
+ <span class="cline-any cline-no">&nbsp;</span>
1034
+ <span class="cline-any cline-no">&nbsp;</span>
1035
+ <span class="cline-any cline-no">&nbsp;</span>
1036
+ <span class="cline-any cline-no">&nbsp;</span>
1037
+ <span class="cline-any cline-no">&nbsp;</span>
1038
+ <span class="cline-any cline-no">&nbsp;</span>
1039
+ <span class="cline-any cline-no">&nbsp;</span>
1040
+ <span class="cline-any cline-no">&nbsp;</span>
1041
+ <span class="cline-any cline-no">&nbsp;</span>
1042
+ <span class="cline-any cline-no">&nbsp;</span>
1043
+ <span class="cline-any cline-no">&nbsp;</span>
1044
+ <span class="cline-any cline-no">&nbsp;</span>
1045
+ <span class="cline-any cline-no">&nbsp;</span>
1046
+ <span class="cline-any cline-no">&nbsp;</span>
1047
+ <span class="cline-any cline-no">&nbsp;</span>
1048
+ <span class="cline-any cline-no">&nbsp;</span>
1049
+ <span class="cline-any cline-no">&nbsp;</span>
1050
+ <span class="cline-any cline-no">&nbsp;</span>
1051
+ <span class="cline-any cline-no">&nbsp;</span>
1052
+ <span class="cline-any cline-no">&nbsp;</span>
1053
+ <span class="cline-any cline-no">&nbsp;</span>
1054
+ <span class="cline-any cline-no">&nbsp;</span>
1055
+ <span class="cline-any cline-no">&nbsp;</span>
1056
+ <span class="cline-any cline-no">&nbsp;</span>
1057
+ <span class="cline-any cline-no">&nbsp;</span>
1058
+ <span class="cline-any cline-no">&nbsp;</span>
1059
+ <span class="cline-any cline-no">&nbsp;</span>
1060
+ <span class="cline-any cline-no">&nbsp;</span>
1061
+ <span class="cline-any cline-no">&nbsp;</span>
1062
+ <span class="cline-any cline-no">&nbsp;</span>
1063
+ <span class="cline-any cline-no">&nbsp;</span>
1064
+ <span class="cline-any cline-no">&nbsp;</span>
1065
+ <span class="cline-any cline-no">&nbsp;</span>
1066
+ <span class="cline-any cline-no">&nbsp;</span>
1067
+ <span class="cline-any cline-no">&nbsp;</span>
1068
+ <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js"><span class="cstat-no" title="statement not covered" >/**<span class="fstat-no" title="function not covered" ><span class="branch-0 cbranch-no" title="branch not covered" ></span></span></span>
1069
+ <span class="cstat-no" title="statement not covered" > * HSuite Native Connect</span>
1070
+ <span class="cstat-no" title="statement not covered" > * Copyright 2024-2025 HSuite (https://hsuite.finance)</span>
1071
+ <span class="cstat-no" title="statement not covered" > *</span>
1072
+ <span class="cstat-no" title="statement not covered" > * SPDX-License-Identifier: PolyForm-Noncommercial-1.0.0</span>
1073
+ <span class="cstat-no" title="statement not covered" > *</span>
1074
+ <span class="cstat-no" title="statement not covered" > * This file is part of HSuite Native Connect. For commercial licensing,</span>
1075
+ <span class="cstat-no" title="statement not covered" > * visit https://hsuite.finance/licensing</span>
1076
+ <span class="cstat-no" title="statement not covered" > */</span>
1077
+ <span class="cstat-no" title="statement not covered" ></span>
1078
+ <span class="cstat-no" title="statement not covered" >/**</span>
1079
+ <span class="cstat-no" title="statement not covered" > * @file account-selector.service.ts</span>
1080
+ <span class="cstat-no" title="statement not covered" > * @description Business logic service for account selector</span>
1081
+ <span class="cstat-no" title="statement not covered" > *</span>
1082
+ <span class="cstat-no" title="statement not covered" > * Encapsulates the core business logic for the AccountSelectorComponent.</span>
1083
+ <span class="cstat-no" title="statement not covered" > * Handles account selection, session management, and data transformations.</span>
1084
+ <span class="cstat-no" title="statement not covered" > * Extracted from AccountSelectorComponent for better testability and maintainability.</span>
1085
+ <span class="cstat-no" title="statement not covered" > *</span>
1086
+ <span class="cstat-no" title="statement not covered" > * **Features:**</span>
1087
+ <span class="cstat-no" title="statement not covered" > * - Account selection and switching</span>
1088
+ <span class="cstat-no" title="statement not covered" > * - Session disconnect logic</span>
1089
+ <span class="cstat-no" title="statement not covered" > * - Account grouping by ledger</span>
1090
+ <span class="cstat-no" title="statement not covered" > * - Keyboard navigation support</span>
1091
+ <span class="cstat-no" title="statement not covered" > * - Toast/alert integration</span>
1092
+ <span class="cstat-no" title="statement not covered" > */</span>
1093
+ <span class="cstat-no" title="statement not covered" ></span>
1094
+ <span class="cstat-no" title="statement not covered" >import { Injectable, inject, signal, computed } from '@angular/core';</span>
1095
+ <span class="cstat-no" title="statement not covered" >import { getLogger } from '@hsuite/native-connect-sdk';</span>
1096
+ <span class="cstat-no" title="statement not covered" >import { AlertController, ToastController, ModalController } from '@ionic/angular/standalone';</span>
1097
+ <span class="cstat-no" title="statement not covered" ></span>
1098
+ <span class="cstat-no" title="statement not covered" >import { UnifiedWalletService } from '../../services/unified-wallet.service';</span>
1099
+ <span class="cstat-no" title="statement not covered" ></span>
1100
+ <span class="cstat-no" title="statement not covered" >import { AccountFormattingService } from './account-formatting.service';</span>
1101
+ <span class="cstat-no" title="statement not covered" >import type { LedgerGroup, AccountItem } from './account-list/account-list.component';</span>
1102
+ <span class="cstat-no" title="statement not covered" ></span>
1103
+ <span class="cstat-no" title="statement not covered" >const logger = getLogger().scoped?.('AccountSelectorService') ?? getLogger();</span>
1104
+ <span class="cstat-no" title="statement not covered" ></span>
1105
+ <span class="cstat-no" title="statement not covered" >/**</span>
1106
+ <span class="cstat-no" title="statement not covered" > * Account data emitted on selection change</span>
1107
+ <span class="cstat-no" title="statement not covered" > */</span>
1108
+ <span class="cstat-no" title="statement not covered" >export interface SelectedAccountData {</span>
1109
+ <span class="cstat-no" title="statement not covered" > id: string;</span>
1110
+ <span class="cstat-no" title="statement not covered" > address: string;</span>
1111
+ <span class="cstat-no" title="statement not covered" > ledgerId: string;</span>
1112
+ <span class="cstat-no" title="statement not covered" > networkId: string;</span>
1113
+ <span class="cstat-no" title="statement not covered" > label?: string;</span>
1114
+ <span class="cstat-no" title="statement not covered" > providerId?: string;</span>
1115
+ <span class="cstat-no" title="statement not covered" > providerType?: string;</span>
1116
+ <span class="cstat-no" title="statement not covered" >}</span>
1117
+ <span class="cstat-no" title="statement not covered" ></span>
1118
+ <span class="cstat-no" title="statement not covered" >/**</span>
1119
+ <span class="cstat-no" title="statement not covered" > * @service AccountSelectorService</span>
1120
+ <span class="cstat-no" title="statement not covered" > * Business logic service for account selector component.</span>
1121
+ <span class="cstat-no" title="statement not covered" > */</span>
1122
+ <span class="cstat-no" title="statement not covered" >@Injectable({ providedIn: 'root' })</span>
1123
+ <span class="cstat-no" title="statement not covered" >export class AccountSelectorService {</span>
1124
+ <span class="cstat-no" title="statement not covered" > protected readonly wallet = inject(UnifiedWalletService);</span>
1125
+ <span class="cstat-no" title="statement not covered" > protected readonly formatting = inject(AccountFormattingService);</span>
1126
+ <span class="cstat-no" title="statement not covered" ></span>
1127
+ <span class="cstat-no" title="statement not covered" > // Controllers - optional for different contexts</span>
1128
+ <span class="cstat-no" title="statement not covered" > protected alertController = inject(AlertController, { optional: true });</span>
1129
+ <span class="cstat-no" title="statement not covered" > protected toastController = inject(ToastController, { optional: true });</span>
1130
+ <span class="cstat-no" title="statement not covered" > protected modalController = inject(ModalController, { optional: true });</span>
1131
+ <span class="cstat-no" title="statement not covered" ></span>
1132
+ <span class="cstat-no" title="statement not covered" > /**</span>
1133
+ <span class="cstat-no" title="statement not covered" > * Loading state signal</span>
1134
+ <span class="cstat-no" title="statement not covered" > */</span>
1135
+ <span class="cstat-no" title="statement not covered" > readonly isLoading = signal&lt;boolean&gt;(false);</span>
1136
+ <span class="cstat-no" title="statement not covered" ></span>
1137
+ <span class="cstat-no" title="statement not covered" > /**</span>
1138
+ <span class="cstat-no" title="statement not covered" > * Error state signal</span>
1139
+ <span class="cstat-no" title="statement not covered" > */</span>
1140
+ <span class="cstat-no" title="statement not covered" > readonly error = signal&lt;string | null&gt;(null);</span>
1141
+ <span class="cstat-no" title="statement not covered" ></span>
1142
+ <span class="cstat-no" title="statement not covered" > /**</span>
1143
+ <span class="cstat-no" title="statement not covered" > * Get all active sessions from wallet</span>
1144
+ <span class="cstat-no" title="statement not covered" > */</span>
1145
+ <span class="cstat-no" title="statement not covered" > get activeSessions() {</span>
1146
+ <span class="cstat-no" title="statement not covered" > return this.wallet.getActiveSessions();</span>
1147
+ <span class="cstat-no" title="statement not covered" > }</span>
1148
+ <span class="cstat-no" title="statement not covered" ></span>
1149
+ <span class="cstat-no" title="statement not covered" > /**</span>
1150
+ <span class="cstat-no" title="statement not covered" > * Get all accounts as a computed value</span>
1151
+ <span class="cstat-no" title="statement not covered" > */</span>
1152
+ <span class="cstat-no" title="statement not covered" > readonly allAccounts = computed(() =&gt; {</span>
1153
+ <span class="cstat-no" title="statement not covered" > const accounts = this.wallet.allAccounts();</span>
1154
+ <span class="cstat-no" title="statement not covered" > return accounts.map((acc) =&gt; ({</span>
1155
+ <span class="cstat-no" title="statement not covered" > id: acc.id,</span>
1156
+ <span class="cstat-no" title="statement not covered" > address: acc.address,</span>
1157
+ <span class="cstat-no" title="statement not covered" > ledgerId: acc.ledgerId,</span>
1158
+ <span class="cstat-no" title="statement not covered" > networkId: acc.networkId,</span>
1159
+ <span class="cstat-no" title="statement not covered" > label: acc.label,</span>
1160
+ <span class="cstat-no" title="statement not covered" > publicKey: (acc.metadata as any)?.publicKey,</span>
1161
+ <span class="cstat-no" title="statement not covered" > providerId: acc.providerId,</span>
1162
+ <span class="cstat-no" title="statement not covered" > providerType: acc.providerType,</span>
1163
+ <span class="cstat-no" title="statement not covered" > sessionKey: (acc.metadata as any)?.sessionKey,</span>
1164
+ <span class="cstat-no" title="statement not covered" > }));</span>
1165
+ <span class="cstat-no" title="statement not covered" > });</span>
1166
+ <span class="cstat-no" title="statement not covered" ></span>
1167
+ <span class="cstat-no" title="statement not covered" > /**</span>
1168
+ <span class="cstat-no" title="statement not covered" > * Get currently active account</span>
1169
+ <span class="cstat-no" title="statement not covered" > */</span>
1170
+ <span class="cstat-no" title="statement not covered" > readonly activeAccount = computed(() =&gt; this.wallet.activeAccount());</span>
1171
+ <span class="cstat-no" title="statement not covered" ></span>
1172
+ <span class="cstat-no" title="statement not covered" > /**</span>
1173
+ <span class="cstat-no" title="statement not covered" > * Get total account count</span>
1174
+ <span class="cstat-no" title="statement not covered" > */</span>
1175
+ <span class="cstat-no" title="statement not covered" > readonly totalAccountCount = computed(() =&gt; this.wallet.allAccounts().length);</span>
1176
+ <span class="cstat-no" title="statement not covered" ></span>
1177
+ <span class="cstat-no" title="statement not covered" > /**</span>
1178
+ <span class="cstat-no" title="statement not covered" > * Get all accounts grouped by ledger</span>
1179
+ <span class="cstat-no" title="statement not covered" > */</span>
1180
+ <span class="cstat-no" title="statement not covered" > readonly groupedByLedger = computed&lt;LedgerGroup[]&gt;(() =&gt; {</span>
1181
+ <span class="cstat-no" title="statement not covered" > const sessions = this.wallet.getActiveSessions();</span>
1182
+ <span class="cstat-no" title="statement not covered" > const items: Array&lt;{ account: any; session: any }&gt; = [];</span>
1183
+ <span class="cstat-no" title="statement not covered" ></span>
1184
+ <span class="cstat-no" title="statement not covered" > for (const session of sessions) {</span>
1185
+ <span class="cstat-no" title="statement not covered" > if (!session.accounts || !Array.isArray(session.accounts)) continue;</span>
1186
+ <span class="cstat-no" title="statement not covered" > for (const account of session.accounts) {</span>
1187
+ <span class="cstat-no" title="statement not covered" > if (account) items.push({ account, session });</span>
1188
+ <span class="cstat-no" title="statement not covered" > }</span>
1189
+ <span class="cstat-no" title="statement not covered" > }</span>
1190
+ <span class="cstat-no" title="statement not covered" ></span>
1191
+ <span class="cstat-no" title="statement not covered" > return this.groupAccountsByLedger(items);</span>
1192
+ <span class="cstat-no" title="statement not covered" > });</span>
1193
+ <span class="cstat-no" title="statement not covered" ></span>
1194
+ <span class="cstat-no" title="statement not covered" > /**</span>
1195
+ <span class="cstat-no" title="statement not covered" > * Get currently connected account with session</span>
1196
+ <span class="cstat-no" title="statement not covered" > */</span>
1197
+ <span class="cstat-no" title="statement not covered" > readonly currentlyConnectedAccount = computed&lt;{</span>
1198
+ <span class="cstat-no" title="statement not covered" > session: any;</span>
1199
+ <span class="cstat-no" title="statement not covered" > account: any;</span>
1200
+ <span class="cstat-no" title="statement not covered" > } | null&gt;(() =&gt; {</span>
1201
+ <span class="cstat-no" title="statement not covered" > try {</span>
1202
+ <span class="cstat-no" title="statement not covered" > const activeAccount = this.wallet.activeAccount();</span>
1203
+ <span class="cstat-no" title="statement not covered" > if (!activeAccount) return null;</span>
1204
+ <span class="cstat-no" title="statement not covered" ></span>
1205
+ <span class="cstat-no" title="statement not covered" > const sessions = this.wallet.getActiveSessions();</span>
1206
+ <span class="cstat-no" title="statement not covered" > if (!sessions || !Array.isArray(sessions)) return null;</span>
1207
+ <span class="cstat-no" title="statement not covered" ></span>
1208
+ <span class="cstat-no" title="statement not covered" > for (const session of sessions) {</span>
1209
+ <span class="cstat-no" title="statement not covered" > if (!session || !session.accounts || !Array.isArray(session.accounts)) continue;</span>
1210
+ <span class="cstat-no" title="statement not covered" ></span>
1211
+ <span class="cstat-no" title="statement not covered" > const account = session.accounts.find((a) =&gt; a &amp;&amp; a.address === activeAccount.address);</span>
1212
+ <span class="cstat-no" title="statement not covered" > if (account) {</span>
1213
+ <span class="cstat-no" title="statement not covered" > return { session, account };</span>
1214
+ <span class="cstat-no" title="statement not covered" > }</span>
1215
+ <span class="cstat-no" title="statement not covered" > }</span>
1216
+ <span class="cstat-no" title="statement not covered" > return null;</span>
1217
+ <span class="cstat-no" title="statement not covered" > } catch (error) {</span>
1218
+ <span class="cstat-no" title="statement not covered" > logger.error('Error getting currently connected account', { error });</span>
1219
+ <span class="cstat-no" title="statement not covered" > return null;</span>
1220
+ <span class="cstat-no" title="statement not covered" > }</span>
1221
+ <span class="cstat-no" title="statement not covered" > });</span>
1222
+ <span class="cstat-no" title="statement not covered" ></span>
1223
+ <span class="cstat-no" title="statement not covered" > /**</span>
1224
+ <span class="cstat-no" title="statement not covered" > * Get other accounts (not currently connected)</span>
1225
+ <span class="cstat-no" title="statement not covered" > */</span>
1226
+ <span class="cstat-no" title="statement not covered" > readonly otherAccounts = computed&lt;</span>
1227
+ <span class="cstat-no" title="statement not covered" > Array&lt;{</span>
1228
+ <span class="cstat-no" title="statement not covered" > session: any;</span>
1229
+ <span class="cstat-no" title="statement not covered" > account: any;</span>
1230
+ <span class="cstat-no" title="statement not covered" > }&gt;</span>
1231
+ <span class="cstat-no" title="statement not covered" > &gt;(() =&gt; {</span>
1232
+ <span class="cstat-no" title="statement not covered" > try {</span>
1233
+ <span class="cstat-no" title="statement not covered" > const activeAccount = this.wallet.activeAccount();</span>
1234
+ <span class="cstat-no" title="statement not covered" > const sessions = this.wallet.getActiveSessions();</span>
1235
+ <span class="cstat-no" title="statement not covered" > const others: Array&lt;{ session: any; account: any }&gt; = [];</span>
1236
+ <span class="cstat-no" title="statement not covered" ></span>
1237
+ <span class="cstat-no" title="statement not covered" > if (!sessions || !Array.isArray(sessions)) return others;</span>
1238
+ <span class="cstat-no" title="statement not covered" ></span>
1239
+ <span class="cstat-no" title="statement not covered" > for (const session of sessions) {</span>
1240
+ <span class="cstat-no" title="statement not covered" > if (!session || !session.accounts || !Array.isArray(session.accounts)) continue;</span>
1241
+ <span class="cstat-no" title="statement not covered" ></span>
1242
+ <span class="cstat-no" title="statement not covered" > for (const account of session.accounts) {</span>
1243
+ <span class="cstat-no" title="statement not covered" > if (!account) continue;</span>
1244
+ <span class="cstat-no" title="statement not covered" ></span>
1245
+ <span class="cstat-no" title="statement not covered" > if (!activeAccount || account.address !== activeAccount.address) {</span>
1246
+ <span class="cstat-no" title="statement not covered" > others.push({ session, account });</span>
1247
+ <span class="cstat-no" title="statement not covered" > }</span>
1248
+ <span class="cstat-no" title="statement not covered" > }</span>
1249
+ <span class="cstat-no" title="statement not covered" > }</span>
1250
+ <span class="cstat-no" title="statement not covered" ></span>
1251
+ <span class="cstat-no" title="statement not covered" > return others;</span>
1252
+ <span class="cstat-no" title="statement not covered" > } catch (error) {</span>
1253
+ <span class="cstat-no" title="statement not covered" > logger.error('Error getting other accounts', { error });</span>
1254
+ <span class="cstat-no" title="statement not covered" > return [];</span>
1255
+ <span class="cstat-no" title="statement not covered" > }</span>
1256
+ <span class="cstat-no" title="statement not covered" > });</span>
1257
+ <span class="cstat-no" title="statement not covered" ></span>
1258
+ <span class="cstat-no" title="statement not covered" > /**</span>
1259
+ <span class="cstat-no" title="statement not covered" > * Select an account</span>
1260
+ <span class="cstat-no" title="statement not covered" > * @param accountItem</span>
1261
+ <span class="cstat-no" title="statement not covered" > * @param mode</span>
1262
+ <span class="cstat-no" title="statement not covered" > */</span>
1263
+ <span class="cstat-no" title="statement not covered" > async selectAccount(</span>
1264
+ <span class="cstat-no" title="statement not covered" > accountItem: AccountItem,</span>
1265
+ <span class="cstat-no" title="statement not covered" > mode: 'inline' | 'modal',</span>
1266
+ <span class="cstat-no" title="statement not covered" > ): Promise&lt;SelectedAccountData | null&gt; {</span>
1267
+ <span class="cstat-no" title="statement not covered" > const account = accountItem.account;</span>
1268
+ <span class="cstat-no" title="statement not covered" > const selectedId = account.id;</span>
1269
+ <span class="cstat-no" title="statement not covered" ></span>
1270
+ <span class="cstat-no" title="statement not covered" > // Update UnifiedWalletService active account</span>
1271
+ <span class="cstat-no" title="statement not covered" > const unifiedAccount = this.wallet.allAccounts().find((a) =&gt; a.id === selectedId);</span>
1272
+ <span class="cstat-no" title="statement not covered" > if (unifiedAccount) {</span>
1273
+ <span class="cstat-no" title="statement not covered" > this.wallet.setActiveAccount(unifiedAccount);</span>
1274
+ <span class="cstat-no" title="statement not covered" > }</span>
1275
+ <span class="cstat-no" title="statement not covered" ></span>
1276
+ <span class="cstat-no" title="statement not covered" > const accountData: SelectedAccountData = {</span>
1277
+ <span class="cstat-no" title="statement not covered" > id: account.id || '',</span>
1278
+ <span class="cstat-no" title="statement not covered" > address: account.address || '',</span>
1279
+ <span class="cstat-no" title="statement not covered" > ledgerId: account.ledgerId || '',</span>
1280
+ <span class="cstat-no" title="statement not covered" > networkId: account.networkId || '',</span>
1281
+ <span class="cstat-no" title="statement not covered" > label: account.label,</span>
1282
+ <span class="cstat-no" title="statement not covered" > providerId: accountItem.session.providerId,</span>
1283
+ <span class="cstat-no" title="statement not covered" > providerType: accountItem.session.providerType,</span>
1284
+ <span class="cstat-no" title="statement not covered" > };</span>
1285
+ <span class="cstat-no" title="statement not covered" ></span>
1286
+ <span class="cstat-no" title="statement not covered" > // Modal mode: show toast and dismiss</span>
1287
+ <span class="cstat-no" title="statement not covered" > if (mode === 'modal') {</span>
1288
+ <span class="cstat-no" title="statement not covered" > await this.showSuccessToast(`Switched to ${account.label || 'Account'}`);</span>
1289
+ <span class="cstat-no" title="statement not covered" > logger.info('[Modal] Account changed and modal dismissed', { ...accountData });</span>
1290
+ <span class="cstat-no" title="statement not covered" > } else {</span>
1291
+ <span class="cstat-no" title="statement not covered" > logger.info('[Inline] Account changed', { ...accountData });</span>
1292
+ <span class="cstat-no" title="statement not covered" > }</span>
1293
+ <span class="cstat-no" title="statement not covered" ></span>
1294
+ <span class="cstat-no" title="statement not covered" > return accountData;</span>
1295
+ <span class="cstat-no" title="statement not covered" > }</span>
1296
+ <span class="cstat-no" title="statement not covered" ></span>
1297
+ <span class="cstat-no" title="statement not covered" > /**</span>
1298
+ <span class="cstat-no" title="statement not covered" > * Disconnect a session with confirmation</span>
1299
+ <span class="cstat-no" title="statement not covered" > * @param providerId</span>
1300
+ <span class="cstat-no" title="statement not covered" > * @param sessionKey</span>
1301
+ <span class="cstat-no" title="statement not covered" > * @param mode</span>
1302
+ <span class="cstat-no" title="statement not covered" > * @param skipConfirmation</span>
1303
+ <span class="cstat-no" title="statement not covered" > */</span>
1304
+ <span class="cstat-no" title="statement not covered" > async disconnectSession(</span>
1305
+ <span class="cstat-no" title="statement not covered" > providerId: string,</span>
1306
+ <span class="cstat-no" title="statement not covered" > sessionKey: string | undefined,</span>
1307
+ <span class="cstat-no" title="statement not covered" > mode: 'inline' | 'modal',</span>
1308
+ <span class="cstat-no" title="statement not covered" > skipConfirmation = false,</span>
1309
+ <span class="cstat-no" title="statement not covered" > ): Promise&lt;boolean&gt; {</span>
1310
+ <span class="cstat-no" title="statement not covered" > // Modal mode: use AlertController for confirmation</span>
1311
+ <span class="cstat-no" title="statement not covered" > if (!skipConfirmation) {</span>
1312
+ <span class="cstat-no" title="statement not covered" > if (mode === 'modal' &amp;&amp; this.alertController) {</span>
1313
+ <span class="cstat-no" title="statement not covered" > return new Promise((resolve) =&gt; {</span>
1314
+ <span class="cstat-no" title="statement not covered" > this.alertController!.create({</span>
1315
+ <span class="cstat-no" title="statement not covered" > header: 'Disconnect Session',</span>
1316
+ <span class="cstat-no" title="statement not covered" > message: 'Are you sure you want to disconnect this wallet session?',</span>
1317
+ <span class="cstat-no" title="statement not covered" > buttons: [</span>
1318
+ <span class="cstat-no" title="statement not covered" > {</span>
1319
+ <span class="cstat-no" title="statement not covered" > text: 'Cancel',</span>
1320
+ <span class="cstat-no" title="statement not covered" > role: 'cancel',</span>
1321
+ <span class="cstat-no" title="statement not covered" > handler: () =&gt; resolve(false),</span>
1322
+ <span class="cstat-no" title="statement not covered" > },</span>
1323
+ <span class="cstat-no" title="statement not covered" > {</span>
1324
+ <span class="cstat-no" title="statement not covered" > text: 'Disconnect',</span>
1325
+ <span class="cstat-no" title="statement not covered" > role: 'destructive',</span>
1326
+ <span class="cstat-no" title="statement not covered" > handler: async () =&gt; {</span>
1327
+ <span class="cstat-no" title="statement not covered" > const success = await this.performDisconnect(providerId, sessionKey, mode);</span>
1328
+ <span class="cstat-no" title="statement not covered" > resolve(success);</span>
1329
+ <span class="cstat-no" title="statement not covered" > },</span>
1330
+ <span class="cstat-no" title="statement not covered" > },</span>
1331
+ <span class="cstat-no" title="statement not covered" > ],</span>
1332
+ <span class="cstat-no" title="statement not covered" > }).then((alert) =&gt; alert.present());</span>
1333
+ <span class="cstat-no" title="statement not covered" > });</span>
1334
+ <span class="cstat-no" title="statement not covered" > }</span>
1335
+ <span class="cstat-no" title="statement not covered" ></span>
1336
+ <span class="cstat-no" title="statement not covered" > // Inline mode: use browser confirm</span>
1337
+ <span class="cstat-no" title="statement not covered" > if (mode === 'inline') {</span>
1338
+ <span class="cstat-no" title="statement not covered" > const confirmed = confirm('Are you sure you want to disconnect this wallet session?');</span>
1339
+ <span class="cstat-no" title="statement not covered" > if (!confirmed) return false;</span>
1340
+ <span class="cstat-no" title="statement not covered" > }</span>
1341
+ <span class="cstat-no" title="statement not covered" > }</span>
1342
+ <span class="cstat-no" title="statement not covered" ></span>
1343
+ <span class="cstat-no" title="statement not covered" > return this.performDisconnect(providerId, sessionKey, mode);</span>
1344
+ <span class="cstat-no" title="statement not covered" > }</span>
1345
+ <span class="cstat-no" title="statement not covered" ></span>
1346
+ <span class="cstat-no" title="statement not covered" > /**</span>
1347
+ <span class="cstat-no" title="statement not covered" > * Disconnect all sessions with confirmation</span>
1348
+ <span class="cstat-no" title="statement not covered" > * @param _mode</span>
1349
+ <span class="cstat-no" title="statement not covered" > */</span>
1350
+ <span class="cstat-no" title="statement not covered" > async disconnectAll(_mode: 'inline' | 'modal'): Promise&lt;boolean&gt; {</span>
1351
+ <span class="cstat-no" title="statement not covered" > if (!this.alertController) {</span>
1352
+ <span class="cstat-no" title="statement not covered" > logger.warn('AlertController not available for disconnect confirmation');</span>
1353
+ <span class="cstat-no" title="statement not covered" > return false;</span>
1354
+ <span class="cstat-no" title="statement not covered" > }</span>
1355
+ <span class="cstat-no" title="statement not covered" ></span>
1356
+ <span class="cstat-no" title="statement not covered" > return new Promise((resolve) =&gt; {</span>
1357
+ <span class="cstat-no" title="statement not covered" > this.alertController!.create({</span>
1358
+ <span class="cstat-no" title="statement not covered" > header: 'Disconnect All Wallets',</span>
1359
+ <span class="cstat-no" title="statement not covered" > message: 'Are you sure you want to disconnect all connected wallets?',</span>
1360
+ <span class="cstat-no" title="statement not covered" > buttons: [</span>
1361
+ <span class="cstat-no" title="statement not covered" > {</span>
1362
+ <span class="cstat-no" title="statement not covered" > text: 'Cancel',</span>
1363
+ <span class="cstat-no" title="statement not covered" > role: 'cancel',</span>
1364
+ <span class="cstat-no" title="statement not covered" > handler: () =&gt; resolve(false),</span>
1365
+ <span class="cstat-no" title="statement not covered" > },</span>
1366
+ <span class="cstat-no" title="statement not covered" > {</span>
1367
+ <span class="cstat-no" title="statement not covered" > text: 'Disconnect All',</span>
1368
+ <span class="cstat-no" title="statement not covered" > role: 'destructive',</span>
1369
+ <span class="cstat-no" title="statement not covered" > handler: async () =&gt; {</span>
1370
+ <span class="cstat-no" title="statement not covered" > this.isLoading.set(true);</span>
1371
+ <span class="cstat-no" title="statement not covered" > try {</span>
1372
+ <span class="cstat-no" title="statement not covered" > const sessions = this.wallet.getActiveSessions();</span>
1373
+ <span class="cstat-no" title="statement not covered" > for (const session of sessions) {</span>
1374
+ <span class="cstat-no" title="statement not covered" > try {</span>
1375
+ <span class="cstat-no" title="statement not covered" > await this.wallet.disconnectSession(</span>
1376
+ <span class="cstat-no" title="statement not covered" > session.providerId,</span>
1377
+ <span class="cstat-no" title="statement not covered" > session.metadata?.sessionKey,</span>
1378
+ <span class="cstat-no" title="statement not covered" > );</span>
1379
+ <span class="cstat-no" title="statement not covered" > } catch (error) {</span>
1380
+ <span class="cstat-no" title="statement not covered" > logger.error('Failed to disconnect session', {</span>
1381
+ <span class="cstat-no" title="statement not covered" > providerId: session.providerId,</span>
1382
+ <span class="cstat-no" title="statement not covered" > error,</span>
1383
+ <span class="cstat-no" title="statement not covered" > });</span>
1384
+ <span class="cstat-no" title="statement not covered" > }</span>
1385
+ <span class="cstat-no" title="statement not covered" > }</span>
1386
+ <span class="cstat-no" title="statement not covered" ></span>
1387
+ <span class="cstat-no" title="statement not covered" > await this.showSuccessToast('All wallets disconnected');</span>
1388
+ <span class="cstat-no" title="statement not covered" > resolve(true);</span>
1389
+ <span class="cstat-no" title="statement not covered" > } catch (error) {</span>
1390
+ <span class="cstat-no" title="statement not covered" > logger.error('Failed to disconnect all sessions', { error });</span>
1391
+ <span class="cstat-no" title="statement not covered" > this.error.set('Failed to disconnect all wallets');</span>
1392
+ <span class="cstat-no" title="statement not covered" > resolve(false);</span>
1393
+ <span class="cstat-no" title="statement not covered" > } finally {</span>
1394
+ <span class="cstat-no" title="statement not covered" > this.isLoading.set(false);</span>
1395
+ <span class="cstat-no" title="statement not covered" > }</span>
1396
+ <span class="cstat-no" title="statement not covered" > },</span>
1397
+ <span class="cstat-no" title="statement not covered" > },</span>
1398
+ <span class="cstat-no" title="statement not covered" > ],</span>
1399
+ <span class="cstat-no" title="statement not covered" > }).then((alert) =&gt; alert.present());</span>
1400
+ <span class="cstat-no" title="statement not covered" > });</span>
1401
+ <span class="cstat-no" title="statement not covered" > }</span>
1402
+ <span class="cstat-no" title="statement not covered" ></span>
1403
+ <span class="cstat-no" title="statement not covered" > /**</span>
1404
+ <span class="cstat-no" title="statement not covered" > * Navigate accounts using keyboard</span>
1405
+ <span class="cstat-no" title="statement not covered" > * @param direction</span>
1406
+ <span class="cstat-no" title="statement not covered" > * @param selectedId</span>
1407
+ <span class="cstat-no" title="statement not covered" > */</span>
1408
+ <span class="cstat-no" title="statement not covered" > navigateAccounts(direction: 1 | -1, selectedId?: string): string | null {</span>
1409
+ <span class="cstat-no" title="statement not covered" > const accounts = this.allAccounts();</span>
1410
+ <span class="cstat-no" title="statement not covered" > if (accounts.length === 0) return null;</span>
1411
+ <span class="cstat-no" title="statement not covered" ></span>
1412
+ <span class="cstat-no" title="statement not covered" > const currentIndex = accounts.findIndex((acc) =&gt; acc.id === selectedId);</span>
1413
+ <span class="cstat-no" title="statement not covered" > let nextIndex = currentIndex + direction;</span>
1414
+ <span class="cstat-no" title="statement not covered" ></span>
1415
+ <span class="cstat-no" title="statement not covered" > // Wrap around</span>
1416
+ <span class="cstat-no" title="statement not covered" > if (nextIndex &lt; 0) {</span>
1417
+ <span class="cstat-no" title="statement not covered" > nextIndex = accounts.length - 1;</span>
1418
+ <span class="cstat-no" title="statement not covered" > } else if (nextIndex &gt;= accounts.length) {</span>
1419
+ <span class="cstat-no" title="statement not covered" > nextIndex = 0;</span>
1420
+ <span class="cstat-no" title="statement not covered" > }</span>
1421
+ <span class="cstat-no" title="statement not covered" ></span>
1422
+ <span class="cstat-no" title="statement not covered" > const nextAccount = accounts[nextIndex];</span>
1423
+ <span class="cstat-no" title="statement not covered" > return nextAccount?.id ?? null;</span>
1424
+ <span class="cstat-no" title="statement not covered" > }</span>
1425
+ <span class="cstat-no" title="statement not covered" ></span>
1426
+ <span class="cstat-no" title="statement not covered" > /**</span>
1427
+ <span class="cstat-no" title="statement not covered" > * Navigate to first or last account</span>
1428
+ <span class="cstat-no" title="statement not covered" > * @param toFirst</span>
1429
+ <span class="cstat-no" title="statement not covered" > */</span>
1430
+ <span class="cstat-no" title="statement not covered" > navigateToEdge(toFirst: boolean): string | null {</span>
1431
+ <span class="cstat-no" title="statement not covered" > const accounts = this.allAccounts();</span>
1432
+ <span class="cstat-no" title="statement not covered" > if (accounts.length === 0) return null;</span>
1433
+ <span class="cstat-no" title="statement not covered" ></span>
1434
+ <span class="cstat-no" title="statement not covered" > const targetAccount = toFirst ? accounts[0] : accounts[accounts.length - 1];</span>
1435
+ <span class="cstat-no" title="statement not covered" > return targetAccount?.id ?? null;</span>
1436
+ <span class="cstat-no" title="statement not covered" > }</span>
1437
+ <span class="cstat-no" title="statement not covered" ></span>
1438
+ <span class="cstat-no" title="statement not covered" > /**</span>
1439
+ <span class="cstat-no" title="statement not covered" > * Get wallet logo for active account</span>
1440
+ <span class="cstat-no" title="statement not covered" > */</span>
1441
+ <span class="cstat-no" title="statement not covered" > getActiveWalletLogo(): string {</span>
1442
+ <span class="cstat-no" title="statement not covered" > const sessions = this.wallet.getActiveSessions();</span>
1443
+ <span class="cstat-no" title="statement not covered" > const activeAccount = this.wallet.activeAccount();</span>
1444
+ <span class="cstat-no" title="statement not covered" ></span>
1445
+ <span class="cstat-no" title="statement not covered" > if (!activeAccount) return 'assets/wallets/hsuite.svg';</span>
1446
+ <span class="cstat-no" title="statement not covered" ></span>
1447
+ <span class="cstat-no" title="statement not covered" > const session = sessions.find((s) =&gt;</span>
1448
+ <span class="cstat-no" title="statement not covered" > s.accounts?.some((acc) =&gt; acc.address === activeAccount.address),</span>
1449
+ <span class="cstat-no" title="statement not covered" > );</span>
1450
+ <span class="cstat-no" title="statement not covered" ></span>
1451
+ <span class="cstat-no" title="statement not covered" > if (!session) return 'assets/wallets/hsuite.svg';</span>
1452
+ <span class="cstat-no" title="statement not covered" ></span>
1453
+ <span class="cstat-no" title="statement not covered" > return this.formatting.getWalletLogo(session.providerType);</span>
1454
+ <span class="cstat-no" title="statement not covered" > }</span>
1455
+ <span class="cstat-no" title="statement not covered" ></span>
1456
+ <span class="cstat-no" title="statement not covered" > /**</span>
1457
+ <span class="cstat-no" title="statement not covered" > * Clear error state</span>
1458
+ <span class="cstat-no" title="statement not covered" > */</span>
1459
+ <span class="cstat-no" title="statement not covered" > clearError(): void {</span>
1460
+ <span class="cstat-no" title="statement not covered" > this.error.set(null);</span>
1461
+ <span class="cstat-no" title="statement not covered" > }</span>
1462
+ <span class="cstat-no" title="statement not covered" ></span>
1463
+ <span class="cstat-no" title="statement not covered" > /**</span>
1464
+ <span class="cstat-no" title="statement not covered" > * Set modal controller instance (for modal context)</span>
1465
+ <span class="cstat-no" title="statement not covered" > * @param controller</span>
1466
+ <span class="cstat-no" title="statement not covered" > */</span>
1467
+ <span class="cstat-no" title="statement not covered" > setModalController(controller: ModalController): void {</span>
1468
+ <span class="cstat-no" title="statement not covered" > this.modalController = controller;</span>
1469
+ <span class="cstat-no" title="statement not covered" > }</span>
1470
+ <span class="cstat-no" title="statement not covered" ></span>
1471
+ <span class="cstat-no" title="statement not covered" > /**</span>
1472
+ <span class="cstat-no" title="statement not covered" > * Perform the actual disconnect operation</span>
1473
+ <span class="cstat-no" title="statement not covered" > * @param providerId</span>
1474
+ <span class="cstat-no" title="statement not covered" > * @param sessionKey</span>
1475
+ <span class="cstat-no" title="statement not covered" > * @param mode</span>
1476
+ <span class="cstat-no" title="statement not covered" > */</span>
1477
+ <span class="cstat-no" title="statement not covered" > private async performDisconnect(</span>
1478
+ <span class="cstat-no" title="statement not covered" > providerId: string,</span>
1479
+ <span class="cstat-no" title="statement not covered" > sessionKey: string | undefined,</span>
1480
+ <span class="cstat-no" title="statement not covered" > mode: 'inline' | 'modal',</span>
1481
+ <span class="cstat-no" title="statement not covered" > ): Promise&lt;boolean&gt; {</span>
1482
+ <span class="cstat-no" title="statement not covered" > this.isLoading.set(true);</span>
1483
+ <span class="cstat-no" title="statement not covered" > this.error.set(null);</span>
1484
+ <span class="cstat-no" title="statement not covered" ></span>
1485
+ <span class="cstat-no" title="statement not covered" > try {</span>
1486
+ <span class="cstat-no" title="statement not covered" > await this.wallet.disconnectSession(providerId, sessionKey);</span>
1487
+ <span class="cstat-no" title="statement not covered" ></span>
1488
+ <span class="cstat-no" title="statement not covered" > if (mode === 'modal') {</span>
1489
+ <span class="cstat-no" title="statement not covered" > await this.showSuccessToast('Wallet disconnected successfully');</span>
1490
+ <span class="cstat-no" title="statement not covered" > }</span>
1491
+ <span class="cstat-no" title="statement not covered" ></span>
1492
+ <span class="cstat-no" title="statement not covered" > logger.info('Session disconnected', { providerId, sessionKey, mode });</span>
1493
+ <span class="cstat-no" title="statement not covered" > return true;</span>
1494
+ <span class="cstat-no" title="statement not covered" > } catch (error) {</span>
1495
+ <span class="cstat-no" title="statement not covered" > logger.error('Failed to disconnect session', { providerId, error });</span>
1496
+ <span class="cstat-no" title="statement not covered" ></span>
1497
+ <span class="cstat-no" title="statement not covered" > if (mode === 'modal') {</span>
1498
+ <span class="cstat-no" title="statement not covered" > await this.showErrorToast('Failed to disconnect wallet. Please try again.');</span>
1499
+ <span class="cstat-no" title="statement not covered" > }</span>
1500
+ <span class="cstat-no" title="statement not covered" ></span>
1501
+ <span class="cstat-no" title="statement not covered" > this.error.set(error instanceof Error ? error.message : 'Failed to disconnect');</span>
1502
+ <span class="cstat-no" title="statement not covered" > return false;</span>
1503
+ <span class="cstat-no" title="statement not covered" > } finally {</span>
1504
+ <span class="cstat-no" title="statement not covered" > this.isLoading.set(false);</span>
1505
+ <span class="cstat-no" title="statement not covered" > }</span>
1506
+ <span class="cstat-no" title="statement not covered" > }</span>
1507
+ <span class="cstat-no" title="statement not covered" ></span>
1508
+ <span class="cstat-no" title="statement not covered" > /**</span>
1509
+ <span class="cstat-no" title="statement not covered" > * Group accounts by ledger</span>
1510
+ <span class="cstat-no" title="statement not covered" > * @param items</span>
1511
+ <span class="cstat-no" title="statement not covered" > */</span>
1512
+ <span class="cstat-no" title="statement not covered" > private groupAccountsByLedger(items: Array&lt;{ account: any; session: any }&gt;): LedgerGroup[] {</span>
1513
+ <span class="cstat-no" title="statement not covered" > const ledgerMap = new Map&lt;string, Array&lt;{ account: any; session: any }&gt;&gt;();</span>
1514
+ <span class="cstat-no" title="statement not covered" ></span>
1515
+ <span class="cstat-no" title="statement not covered" > for (const item of items) {</span>
1516
+ <span class="cstat-no" title="statement not covered" > const { account } = item;</span>
1517
+ <span class="cstat-no" title="statement not covered" > if (!account?.ledgerId) continue;</span>
1518
+ <span class="cstat-no" title="statement not covered" ></span>
1519
+ <span class="cstat-no" title="statement not covered" > const ledgerId = account.ledgerId;</span>
1520
+ <span class="cstat-no" title="statement not covered" > if (!ledgerMap.has(ledgerId)) {</span>
1521
+ <span class="cstat-no" title="statement not covered" > ledgerMap.set(ledgerId, []);</span>
1522
+ <span class="cstat-no" title="statement not covered" > }</span>
1523
+ <span class="cstat-no" title="statement not covered" > ledgerMap.get(ledgerId)!.push(item);</span>
1524
+ <span class="cstat-no" title="statement not covered" > }</span>
1525
+ <span class="cstat-no" title="statement not covered" ></span>
1526
+ <span class="cstat-no" title="statement not covered" > return Array.from(ledgerMap.entries()).map(([ledgerId, accounts]) =&gt; ({</span>
1527
+ <span class="cstat-no" title="statement not covered" > ledgerName: this.formatting.getLedgerName(ledgerId),</span>
1528
+ <span class="cstat-no" title="statement not covered" > ledgerId,</span>
1529
+ <span class="cstat-no" title="statement not covered" > accounts,</span>
1530
+ <span class="cstat-no" title="statement not covered" > }));</span>
1531
+ <span class="cstat-no" title="statement not covered" > }</span>
1532
+ <span class="cstat-no" title="statement not covered" ></span>
1533
+ <span class="cstat-no" title="statement not covered" > /**</span>
1534
+ <span class="cstat-no" title="statement not covered" > * Show success toast</span>
1535
+ <span class="cstat-no" title="statement not covered" > * @param message</span>
1536
+ <span class="cstat-no" title="statement not covered" > */</span>
1537
+ <span class="cstat-no" title="statement not covered" > private async showSuccessToast(message: string): Promise&lt;void&gt; {</span>
1538
+ <span class="cstat-no" title="statement not covered" > if (this.toastController) {</span>
1539
+ <span class="cstat-no" title="statement not covered" > const toast = await this.toastController.create({</span>
1540
+ <span class="cstat-no" title="statement not covered" > message,</span>
1541
+ <span class="cstat-no" title="statement not covered" > duration: 2000,</span>
1542
+ <span class="cstat-no" title="statement not covered" > cssClass: 'toast-success toast-compact',</span>
1543
+ <span class="cstat-no" title="statement not covered" > position: 'top',</span>
1544
+ <span class="cstat-no" title="statement not covered" > icon: 'checkmark-circle',</span>
1545
+ <span class="cstat-no" title="statement not covered" > buttons: [{ icon: 'close', role: 'cancel' }],</span>
1546
+ <span class="cstat-no" title="statement not covered" > });</span>
1547
+ <span class="cstat-no" title="statement not covered" > await toast.present();</span>
1548
+ <span class="cstat-no" title="statement not covered" > }</span>
1549
+ <span class="cstat-no" title="statement not covered" > }</span>
1550
+ <span class="cstat-no" title="statement not covered" ></span>
1551
+ <span class="cstat-no" title="statement not covered" > /**</span>
1552
+ <span class="cstat-no" title="statement not covered" > * Show error toast</span>
1553
+ <span class="cstat-no" title="statement not covered" > * @param message</span>
1554
+ <span class="cstat-no" title="statement not covered" > */</span>
1555
+ <span class="cstat-no" title="statement not covered" > private async showErrorToast(message: string): Promise&lt;void&gt; {</span>
1556
+ <span class="cstat-no" title="statement not covered" > if (this.toastController) {</span>
1557
+ <span class="cstat-no" title="statement not covered" > const toast = await this.toastController.create({</span>
1558
+ <span class="cstat-no" title="statement not covered" > message,</span>
1559
+ <span class="cstat-no" title="statement not covered" > duration: 3000,</span>
1560
+ <span class="cstat-no" title="statement not covered" > cssClass: 'toast-danger toast-compact',</span>
1561
+ <span class="cstat-no" title="statement not covered" > position: 'top',</span>
1562
+ <span class="cstat-no" title="statement not covered" > icon: 'alert-circle-outline',</span>
1563
+ <span class="cstat-no" title="statement not covered" > buttons: [{ icon: 'close', role: 'cancel' }],</span>
1564
+ <span class="cstat-no" title="statement not covered" > });</span>
1565
+ <span class="cstat-no" title="statement not covered" > await toast.present();</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" >}</span>
1569
+ &nbsp;</pre></td></tr></table></pre>
1570
+
1571
+ <div class='push'></div><!-- for sticky footer -->
1572
+ </div><!-- /wrapper -->
1573
+ <div class='footer quiet pad2 space-top1 center small'>
1574
+ Code coverage generated by
1575
+ <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
1576
+ at 2026-06-02T14:30:38.372Z
1577
+ </div>
1578
+ <script src="../../../prettify.js"></script>
1579
+ <script>
1580
+ window.onload = function () {
1581
+ prettyPrint();
1582
+ };
1583
+ </script>
1584
+ <script src="../../../sorter.js"></script>
1585
+ <script src="../../../block-navigation.js"></script>
1586
+ </body>
1587
+ </html>
1588
+