@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,401 @@
1
+ /**
2
+ * HSuite Native Connect
3
+ * Copyright 2024-2025 HSuite (https://hsuite.finance)
4
+ *
5
+ * SPDX-License-Identifier: PolyForm-Noncommercial-1.0.0
6
+ *
7
+ * This file is part of HSuite Native Connect. For commercial licensing,
8
+ * visit https://hsuite.finance/licensing
9
+ */
10
+
11
+ /**
12
+ * @file account-filter.component.ts
13
+ * @description Compact header and filtering component for account selector
14
+ *
15
+ * Provides compact header display with account preview and collapse/expand
16
+ * functionality. Extracted from AccountSelectorComponent for better maintainability.
17
+ *
18
+ * **Features:**
19
+ * - Compact header with active account preview
20
+ * - Collapsible account list toggle
21
+ * - Network and wallet badges
22
+ * - Multiple size variants (default, navbar, small)
23
+ * - Multiple format options (label-count, address-count, etc.)
24
+ */
25
+
26
+ import {
27
+ Component,
28
+ EventEmitter,
29
+ Input,
30
+ Output,
31
+ inject,
32
+ ChangeDetectionStrategy,
33
+ ViewEncapsulation,
34
+ } from '@angular/core';
35
+ import { CommonModule } from '@angular/common';
36
+ import { IonBadge, IonIcon } from '@ionic/angular/standalone';
37
+ import { addIcons } from 'ionicons';
38
+ import { chevronDownOutline } from 'ionicons/icons';
39
+ import { AccountFormattingService } from '../account-formatting.service';
40
+
41
+ /**
42
+ * Format options for compact header display
43
+ */
44
+ export type CompactHeaderFormat =
45
+ | 'label-count'
46
+ | 'address-count'
47
+ | 'count-only'
48
+ | 'label-only'
49
+ | 'address-only';
50
+
51
+ /**
52
+ * Size variants for compact header
53
+ */
54
+ export type CompactHeaderSize = 'default' | 'navbar' | 'small';
55
+
56
+ /**
57
+ * Active account data for display
58
+ */
59
+ export interface ActiveAccountData {
60
+ address: string;
61
+ networkId: string;
62
+ label?: string;
63
+ providerType?: string;
64
+ }
65
+
66
+ /**
67
+ * @component AccountFilterComponent
68
+ * Compact header with active account preview and collapse toggle.
69
+ */
70
+ @Component({
71
+ selector: 'wallet-account-filter',
72
+ standalone: true,
73
+ imports: [CommonModule, IonBadge, IonIcon],
74
+ changeDetection: ChangeDetectionStrategy.OnPush,
75
+ encapsulation: ViewEncapsulation.None,
76
+ template: `
77
+ <!-- Custom Header Text (optional) -->
78
+ <div *ngIf="customHeaderText" class="custom-header-text">
79
+ {{ customHeaderText }}
80
+ </div>
81
+
82
+ <!-- Compact Header -->
83
+ <div
84
+ class="compact-header"
85
+ [class.navbar-size]="headerSize === 'navbar'"
86
+ [class.small-size]="headerSize === 'small'"
87
+ role="button"
88
+ tabindex="0"
89
+ [attr.aria-expanded]="!isCollapsed"
90
+ [attr.aria-label]="getAriaLabel()"
91
+ (click)="onToggle()"
92
+ (keydown.enter)="onToggle()"
93
+ (keydown.space)="$event.preventDefault(); onToggle()"
94
+ >
95
+ <!-- Account Preview -->
96
+ <div class="account-preview">
97
+ <span class="account-address-compact">{{ getActiveAddress() }}</span>
98
+ <ion-badge [color]="getActiveNetworkColor()" size="small" class="network-badge-compact">
99
+ {{ getActiveNetworkType() }}
100
+ </ion-badge>
101
+ <img [src]="walletLogoSrc" [alt]="'Wallet logo'" class="wallet-logo-compact" />
102
+ </div>
103
+
104
+ <!-- Account Count Badge -->
105
+ <ion-badge color="primary" class="account-count-badge">
106
+ {{ totalAccountCount }}
107
+ </ion-badge>
108
+
109
+ <!-- Expand/Collapse Icon -->
110
+ <ion-icon
111
+ *ngIf="collapsible"
112
+ name="chevron-down-outline"
113
+ class="toggle-icon"
114
+ [class.expanded]="!isCollapsed"
115
+ >
116
+ </ion-icon>
117
+ </div>
118
+ `,
119
+ styles: [
120
+ `
121
+ :host {
122
+ display: block;
123
+ width: 100%;
124
+ }
125
+
126
+ /* Custom Header Text */
127
+ .custom-header-text {
128
+ font-size: var(--account-selector-font-size-sm, 12px);
129
+ font-weight: var(--account-selector-font-weight-medium, 500);
130
+ color: var(--account-selector-text-secondary, var(--ion-color-medium));
131
+ margin-bottom: var(--account-selector-spacing-sm, 8px);
132
+ padding: 0 var(--account-selector-spacing-xs, 4px);
133
+ text-transform: uppercase;
134
+ letter-spacing: 0.5px;
135
+ line-height: var(--account-selector-line-height-normal, 1.5);
136
+ }
137
+
138
+ /* Compact Header */
139
+ .compact-header {
140
+ display: flex;
141
+ align-items: center;
142
+ gap: var(--account-selector-spacing-md, 12px);
143
+ padding: var(--account-selector-spacing-md, 12px) var(--account-selector-spacing-lg, 16px);
144
+ background: var(--account-selector-item-bg, rgba(var(--ion-color-light-rgb), 0.05));
145
+ border: 1px solid
146
+ var(--account-selector-border-color, rgba(var(--ion-color-light-rgb), 0.1));
147
+ border-radius: var(--account-selector-content-border-radius, 12px);
148
+ cursor: pointer;
149
+ transition: all var(--account-selector-transition-normal, 0.2s) ease;
150
+ user-select: none;
151
+ min-height: var(--account-selector-touch-target-min, 44px);
152
+ margin-bottom: var(--account-selector-spacing-md, 12px);
153
+ box-shadow:
154
+ var(--account-selector-shadow-inset, var(--shadow-inset)),
155
+ var(--account-selector-shadow-sm, var(--shadow-sm));
156
+
157
+ &:hover {
158
+ background: var(--account-selector-item-bg-hover, rgba(var(--ion-color-light-rgb), 0.08));
159
+ border-color: var(
160
+ --account-selector-border-color-hover,
161
+ rgba(var(--ion-color-light-rgb), 0.2)
162
+ );
163
+ transform: translateY(-1px);
164
+ box-shadow:
165
+ var(--account-selector-shadow-inset, var(--shadow-inset)),
166
+ var(--account-selector-shadow-md, var(--shadow-md));
167
+ }
168
+
169
+ &:active {
170
+ transform: scale(0.98);
171
+ }
172
+
173
+ &:focus {
174
+ outline: 2px solid var(--account-selector-border-color-focus, var(--ion-color-primary));
175
+ outline-offset: 2px;
176
+ }
177
+
178
+ /* Navbar size variant */
179
+ &.navbar-size {
180
+ padding: 8px 12px;
181
+ min-height: 40px;
182
+ border-radius: 10px;
183
+ }
184
+
185
+ /* Small size variant */
186
+ &.small-size {
187
+ padding: 6px 10px;
188
+ min-height: 36px;
189
+ border-radius: 8px;
190
+ gap: 10px;
191
+ }
192
+ }
193
+
194
+ /* Account Preview Section */
195
+ .account-preview {
196
+ display: flex;
197
+ align-items: center;
198
+ gap: var(--account-selector-spacing-sm, 8px);
199
+ flex: 1;
200
+ min-width: 0;
201
+ }
202
+
203
+ .account-address-compact {
204
+ font-size: var(--account-selector-font-size-sm, 13px);
205
+ font-weight: var(--account-selector-font-weight-semibold, 600);
206
+ color: var(--account-selector-text-primary, var(--ion-text-color));
207
+ font-family: var(--ion-font-family-monospace, 'Courier New', monospace);
208
+ line-height: var(--account-selector-line-height-normal, 1.5);
209
+ overflow: hidden;
210
+ text-overflow: ellipsis;
211
+ white-space: nowrap;
212
+ flex-shrink: 1;
213
+ transition: color var(--account-selector-transition-fast, 0.15s) ease;
214
+ }
215
+
216
+ .network-badge-compact {
217
+ font-size: var(--account-selector-badge-font-size, 10px);
218
+ font-weight: var(--account-selector-font-weight-semibold, 600);
219
+ padding: var(--account-selector-badge-padding, 3px 7px);
220
+ border-radius: var(--account-selector-badge-border-radius, 6px);
221
+ flex-shrink: 0;
222
+ line-height: var(--account-selector-line-height-tight, 1.2);
223
+ transition: transform var(--account-selector-transition-fast, 0.15s) ease;
224
+ }
225
+
226
+ .wallet-logo-compact {
227
+ width: var(--account-selector-logo-size-sm, 20px);
228
+ height: var(--account-selector-logo-size-sm, 20px);
229
+ border-radius: var(--account-selector-logo-border-radius, 4px);
230
+ flex-shrink: 0;
231
+ box-shadow: var(--account-selector-logo-shadow, var(--shadow-sm));
232
+ transition: transform var(--account-selector-transition-fast, 0.15s) ease;
233
+ }
234
+
235
+ .account-count-badge {
236
+ font-size: var(--account-selector-font-size-xs, 11px);
237
+ font-weight: var(--account-selector-font-weight-semibold, 600);
238
+ padding: var(--account-selector-badge-padding, 3px 8px);
239
+ border-radius: var(--account-selector-badge-border-radius, 6px);
240
+ flex-shrink: 0;
241
+ line-height: var(--account-selector-line-height-tight, 1.2);
242
+ }
243
+
244
+ .toggle-icon {
245
+ font-size: var(--account-selector-icon-size, 20px);
246
+ color: var(--account-selector-text-secondary, var(--ion-color-medium));
247
+ transition: transform var(--account-selector-transition-slow, 0.3s)
248
+ cubic-bezier(0.4, 0, 0.2, 1);
249
+ flex-shrink: 0;
250
+
251
+ &.expanded {
252
+ transform: rotate(180deg);
253
+ }
254
+ }
255
+
256
+ /* Hover effects */
257
+ .compact-header:hover {
258
+ .network-badge-compact,
259
+ .wallet-logo-compact {
260
+ transform: scale(1.05);
261
+ }
262
+
263
+ .toggle-icon {
264
+ color: var(--account-selector-text-on-primary, var(--ion-color-primary));
265
+ }
266
+ }
267
+ `,
268
+ ],
269
+ })
270
+ export class AccountFilterComponent {
271
+ protected readonly formatting = inject(AccountFormattingService);
272
+
273
+ /**
274
+ * Active account data for display
275
+ */
276
+ @Input() activeAccount: ActiveAccountData | null = null;
277
+
278
+ /**
279
+ * Total number of connected accounts
280
+ */
281
+ @Input() totalAccountCount = 0;
282
+
283
+ /**
284
+ * Whether the account list is collapsed
285
+ */
286
+ @Input() isCollapsed = false;
287
+
288
+ /**
289
+ * Whether collapse/expand is enabled
290
+ */
291
+ @Input() collapsible = true;
292
+
293
+ /**
294
+ * Custom header text (e.g., "Connected with", "Using wallet")
295
+ */
296
+ @Input() customHeaderText?: string;
297
+
298
+ /**
299
+ * Format for compact header display
300
+ */
301
+ @Input() headerFormat: CompactHeaderFormat = 'label-count';
302
+
303
+ /**
304
+ * Size variant for compact header
305
+ */
306
+ @Input() headerSize: CompactHeaderSize = 'default';
307
+
308
+ /**
309
+ * Wallet logo source URL
310
+ */
311
+ @Input() walletLogoSrc = 'assets/wallets/hsuite.svg';
312
+
313
+ /**
314
+ * Emitted when collapse toggle is clicked
315
+ */
316
+ @Output() toggleCollapseEvent = new EventEmitter<void>();
317
+
318
+ constructor() {
319
+ addIcons({ chevronDownOutline });
320
+ }
321
+
322
+ /**
323
+ * Handle toggle click
324
+ */
325
+ protected onToggle(): void {
326
+ if (this.collapsible) {
327
+ this.toggleCollapseEvent.emit();
328
+ }
329
+ }
330
+
331
+ /**
332
+ * Get active account address (truncated)
333
+ */
334
+ protected getActiveAddress(): string {
335
+ if (!this.activeAccount?.address) return 'No account';
336
+ return this.formatting.truncateAddress(this.activeAccount.address);
337
+ }
338
+
339
+ /**
340
+ * Get active account network type
341
+ */
342
+ protected getActiveNetworkType(): string {
343
+ if (!this.activeAccount?.networkId) return '';
344
+ return this.formatting.formatNetwork(this.activeAccount.networkId);
345
+ }
346
+
347
+ /**
348
+ * Get active account network color
349
+ */
350
+ protected getActiveNetworkColor(): string {
351
+ if (!this.activeAccount?.networkId) return 'medium';
352
+ return this.formatting.getNetworkColor(this.activeAccount.networkId);
353
+ }
354
+
355
+ /**
356
+ * Get primary text based on format
357
+ */
358
+ protected getPrimaryText(): string {
359
+ switch (this.headerFormat) {
360
+ case 'label-count':
361
+ case 'label-only':
362
+ return this.activeAccount?.label || 'No Account';
363
+
364
+ case 'address-count':
365
+ case 'address-only':
366
+ return this.activeAccount
367
+ ? this.formatting.truncateAddress(this.activeAccount.address)
368
+ : 'No Account';
369
+
370
+ case 'count-only': {
371
+ const count = this.totalAccountCount;
372
+ return count === 1 ? '1 wallet connected' : `${count} wallets connected`;
373
+ }
374
+
375
+ default:
376
+ return 'Select Account';
377
+ }
378
+ }
379
+
380
+ /**
381
+ * Get secondary text based on format
382
+ */
383
+ protected getSecondaryText(): string | null {
384
+ if (this.headerFormat === 'label-count' || this.headerFormat === 'address-count') {
385
+ const count = this.totalAccountCount;
386
+ return count === 1 ? '1 account' : `${count} accounts`;
387
+ }
388
+ return null;
389
+ }
390
+
391
+ /**
392
+ * Get ARIA label for accessibility
393
+ */
394
+ protected getAriaLabel(): string {
395
+ const label = this.activeAccount?.label || 'No account';
396
+ const count = this.totalAccountCount;
397
+ const collapsed = this.isCollapsed;
398
+
399
+ return `${label}, ${count} account${count !== 1 ? 's' : ''} connected. ${collapsed ? 'Click to expand' : 'Click to collapse'} account list.`;
400
+ }
401
+ }
@@ -0,0 +1,200 @@
1
+ /**
2
+ * HSuite Native Connect
3
+ * Copyright 2024-2025 HSuite (https://hsuite.finance)
4
+ *
5
+ * SPDX-License-Identifier: PolyForm-Noncommercial-1.0.0
6
+ *
7
+ * This file is part of HSuite Native Connect. For commercial licensing,
8
+ * visit https://hsuite.finance/licensing
9
+ */
10
+
11
+ /**
12
+ * @file account-formatting.service.ts
13
+ * @description Account display formatting utilities
14
+ *
15
+ * Provides formatting utilities for displaying accounts, addresses,
16
+ * networks, and ledgers in the AccountSelectorComponent.
17
+ */
18
+
19
+ import { Injectable } from '@angular/core';
20
+
21
+ /**
22
+ * Account formatting service.
23
+ *
24
+ * Provides utilities for formatting account-related display strings.
25
+ */
26
+ @Injectable({ providedIn: 'root' })
27
+ export class AccountFormattingService {
28
+ /**
29
+ * Truncate address for display.
30
+ *
31
+ * @param address - Full address
32
+ * @param prefixLength - Characters to show at start (default: 6)
33
+ * @param suffixLength - Characters to show at end (default: 4)
34
+ * @returns Truncated address with ellipsis
35
+ */
36
+ truncateAddress(address: string, prefixLength = 6, suffixLength = 4): string {
37
+ if (!address) return '';
38
+ if (address.length <= prefixLength + suffixLength + 3) return address;
39
+ return `${address.substring(0, prefixLength)}...${address.substring(address.length - suffixLength)}`;
40
+ }
41
+
42
+ /**
43
+ * Get display name for a ledger.
44
+ *
45
+ * @param ledgerId - Ledger ID
46
+ * @returns Display name
47
+ */
48
+ getLedgerName(ledgerId: string): string {
49
+ const names: Record<string, string> = {
50
+ hedera: 'Hedera',
51
+ xrpl: 'XRPL',
52
+ };
53
+ return names[ledgerId?.toLowerCase()] || ledgerId?.toUpperCase() || 'Unknown';
54
+ }
55
+
56
+ /**
57
+ * Get color for a ledger badge.
58
+ *
59
+ * @param ledgerId - Ledger ID
60
+ * @returns Ionic color name
61
+ */
62
+ getLedgerColor(ledgerId: string): string {
63
+ const colors: Record<string, string> = {
64
+ hedera: 'success',
65
+ xrpl: 'tertiary',
66
+ };
67
+ return colors[ledgerId?.toLowerCase()] || 'medium';
68
+ }
69
+
70
+ /**
71
+ * Format network display name with proper casing.
72
+ *
73
+ * @param networkId - Network ID (e.g., "hedera:testnet")
74
+ * @returns Formatted network name (e.g., "Testnet")
75
+ */
76
+ formatNetwork(networkId: string): string {
77
+ const network = this.extractNetwork(networkId);
78
+ const names: Record<string, string> = {
79
+ mainnet: 'Mainnet',
80
+ testnet: 'Testnet',
81
+ devnet: 'Devnet',
82
+ };
83
+ return names[network.toLowerCase()] || network;
84
+ }
85
+
86
+ /**
87
+ * Extract network name from full networkId.
88
+ *
89
+ * @param networkId - Full network ID
90
+ * @returns Network name only
91
+ */
92
+ extractNetwork(networkId?: string): string {
93
+ if (!networkId) return 'unknown';
94
+ const parts = networkId.split(':');
95
+ return parts[parts.length - 1] || networkId;
96
+ }
97
+
98
+ /**
99
+ * Get color for a network badge.
100
+ *
101
+ * @param networkId - Network ID
102
+ * @returns Ionic color name
103
+ */
104
+ getNetworkColor(networkId: string): string {
105
+ const network = this.extractNetwork(networkId).toLowerCase();
106
+ const colors: Record<string, string> = {
107
+ mainnet: 'primary',
108
+ testnet: 'warning',
109
+ devnet: 'secondary',
110
+ };
111
+ return colors[network] || 'medium';
112
+ }
113
+
114
+ /**
115
+ * Get display name for a provider type.
116
+ *
117
+ * @param providerType - Provider type ID
118
+ * @returns Display name
119
+ */
120
+ getProviderName(providerType: string): string {
121
+ const names: Record<string, string> = {
122
+ 'hsuite-native': 'HSuite Native',
123
+ 'walletconnect-v2': 'WalletConnect',
124
+ };
125
+ return names[providerType] || providerType;
126
+ }
127
+
128
+ /**
129
+ * Get provider display name from provider ID.
130
+ *
131
+ * @param providerId - Provider ID
132
+ * @returns Display name
133
+ */
134
+ getProviderDisplayName(providerId: string): string {
135
+ const nameMap: Record<string, string> = {
136
+ 'walletconnect-v2': 'WalletConnect',
137
+ 'hsuite-native': 'HSuite Wallet',
138
+ };
139
+ return nameMap[providerId] || providerId;
140
+ }
141
+
142
+ /**
143
+ * Get wallet logo path based on provider type.
144
+ *
145
+ * @param providerType - Provider type
146
+ * @returns Asset path for logo
147
+ */
148
+ getWalletLogo(providerType: string): string {
149
+ if (providerType === 'walletconnect-v2') {
150
+ return 'assets/wallets/walletconnect.svg';
151
+ }
152
+ return 'assets/wallets/hsuite.svg';
153
+ }
154
+
155
+ /**
156
+ * Get wallet logo for provider name string.
157
+ *
158
+ * @param providerName - Provider display name
159
+ * @returns Asset path for logo
160
+ */
161
+ getWalletLogoForProvider(providerName: string): string {
162
+ if (providerName === 'WalletConnect') {
163
+ return 'assets/wallets/walletconnect.svg';
164
+ }
165
+ return 'assets/wallets/hsuite.svg';
166
+ }
167
+
168
+ /**
169
+ * Get protocol icon name.
170
+ *
171
+ * @param protocol - Protocol name
172
+ * @returns Ionicon name
173
+ */
174
+ getProtocolIcon(protocol: string): string {
175
+ return protocol === 'HSuite Native' ? 'link' : 'scan';
176
+ }
177
+
178
+ /**
179
+ * Format account label.
180
+ *
181
+ * @param account - Account object
182
+ * @returns Display label
183
+ */
184
+ formatAccountLabel(account: any): string {
185
+ return account?.label || 'Account';
186
+ }
187
+
188
+ /**
189
+ * Format full account label with ledger and address.
190
+ *
191
+ * @param account - Account object
192
+ * @returns Full display label
193
+ */
194
+ formatAccountLabelFull(account: any): string {
195
+ const label = account?.label || 'Account';
196
+ const ledger = this.getLedgerName(account?.ledgerId);
197
+ const address = this.truncateAddress(account?.address);
198
+ return `${label} (${ledger}) - ${address}`;
199
+ }
200
+ }