nimiq-branding-cli 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 (242) hide show
  1. package/LICENSE +25 -0
  2. package/NOTICE.md +32 -0
  3. package/README.md +73 -0
  4. package/assets/css/legacy/nimiq-style.icons.svg +1 -0
  5. package/assets/css/legacy/nimiq-style.min.css +5 -0
  6. package/assets/css/modern/animations.css +179 -0
  7. package/assets/css/modern/atomic.css +148 -0
  8. package/assets/css/modern/colors.css +82 -0
  9. package/assets/css/modern/fonts.css +17 -0
  10. package/assets/css/modern/index.css +8 -0
  11. package/assets/css/modern/preflight.css +190 -0
  12. package/assets/css/modern/spacing.css +1023 -0
  13. package/assets/css/modern/static-content.css +300 -0
  14. package/assets/css/modern/typography.css +632 -0
  15. package/assets/css/modern/utilities.css +861 -0
  16. package/assets/fonts/mulish-0b696a2e.woff2 +0 -0
  17. package/assets/fonts/mulish-294ced17.woff2 +0 -0
  18. package/assets/fonts/mulish-4eb440e1.woff2 +0 -0
  19. package/assets/fonts/mulish-78a2d471.woff2 +0 -0
  20. package/assets/fonts/mulish-81f6c1ba.woff2 +0 -0
  21. package/assets/fonts/mulish-c1a61bc6.woff2 +0 -0
  22. package/assets/fonts/mulish-c7803f2b.woff2 +0 -0
  23. package/assets/fonts/mulish-e64de9e7.woff2 +0 -0
  24. package/assets/fonts/mulish-ecf98336.woff2 +0 -0
  25. package/assets/fonts/mulish-f727ad98.woff2 +0 -0
  26. package/assets/icons/duotone/duotone-arrow-to-top-left-from-corner.svg +1 -0
  27. package/assets/icons/duotone/duotone-bank-building.svg +1 -0
  28. package/assets/icons/duotone/duotone-bell.svg +1 -0
  29. package/assets/icons/duotone/duotone-block-stairs.svg +1 -0
  30. package/assets/icons/duotone/duotone-btc-invoice.svg +1 -0
  31. package/assets/icons/duotone/duotone-cactus.svg +1 -0
  32. package/assets/icons/duotone/duotone-cash-register.svg +1 -0
  33. package/assets/icons/duotone/duotone-column-chart.svg +1 -0
  34. package/assets/icons/duotone/duotone-credit-card.svg +1 -0
  35. package/assets/icons/duotone/duotone-crypto-currencies-btc-eth.svg +1 -0
  36. package/assets/icons/duotone/duotone-crypto-currencies-btc-usdc.svg +1 -0
  37. package/assets/icons/duotone/duotone-cryptos-pizza.svg +1 -0
  38. package/assets/icons/duotone/duotone-dashboard.svg +1 -0
  39. package/assets/icons/duotone/duotone-displaced-hamburguer.svg +1 -0
  40. package/assets/icons/duotone/duotone-document-text.svg +1 -0
  41. package/assets/icons/duotone/duotone-document-vertical-line.svg +1 -0
  42. package/assets/icons/duotone/duotone-document.svg +1 -0
  43. package/assets/icons/duotone/duotone-employee.svg +1 -0
  44. package/assets/icons/duotone/duotone-envelope.svg +1 -0
  45. package/assets/icons/duotone/duotone-fiat-currencies.svg +1 -0
  46. package/assets/icons/duotone/duotone-fiat-exchange.svg +1 -0
  47. package/assets/icons/duotone/duotone-fluctuations.svg +1 -0
  48. package/assets/icons/duotone/duotone-gamepad.svg +1 -0
  49. package/assets/icons/duotone/duotone-globe.svg +1 -0
  50. package/assets/icons/duotone/duotone-group.svg +1 -0
  51. package/assets/icons/duotone/duotone-handshake.svg +1 -0
  52. package/assets/icons/duotone/duotone-high-five.svg +1 -0
  53. package/assets/icons/duotone/duotone-htlc-box.svg +1 -0
  54. package/assets/icons/duotone/duotone-incognito.svg +1 -0
  55. package/assets/icons/duotone/duotone-key-puzzle.svg +1 -0
  56. package/assets/icons/duotone/duotone-languages.svg +1 -0
  57. package/assets/icons/duotone/duotone-magnifying-glass.svg +1 -0
  58. package/assets/icons/duotone/duotone-medal.svg +1 -0
  59. package/assets/icons/duotone/duotone-network.svg +1 -0
  60. package/assets/icons/duotone/duotone-nim-phone.svg +1 -0
  61. package/assets/icons/duotone/duotone-nimiq-environment.svg +1 -0
  62. package/assets/icons/duotone/duotone-no-chargeback.svg +1 -0
  63. package/assets/icons/duotone/duotone-oasis-puzzle.svg +1 -0
  64. package/assets/icons/duotone/duotone-paper-plane.svg +1 -0
  65. package/assets/icons/duotone/duotone-peer-to-peer.svg +1 -0
  66. package/assets/icons/duotone/duotone-pin-with-shadow.svg +1 -0
  67. package/assets/icons/duotone/duotone-safe-lock.svg +1 -0
  68. package/assets/icons/duotone/duotone-smart-contract.svg +1 -0
  69. package/assets/icons/duotone/duotone-sparkling-swap.svg +1 -0
  70. package/assets/icons/duotone/duotone-speedmeter.svg +1 -0
  71. package/assets/icons/duotone/duotone-staking-ripple.svg +1 -0
  72. package/assets/icons/duotone/duotone-successful-sequence.svg +1 -0
  73. package/assets/icons/duotone/duotone-three-hands-hexagon.svg +1 -0
  74. package/assets/icons/nimiq-flags.json +1274 -0
  75. package/assets/icons/nimiq-icons.json +1631 -0
  76. package/assets/img/bg-hexagons.svg +1 -0
  77. package/assets/img/cpl-preview.webp +0 -0
  78. package/assets/img/gods-light.webp +0 -0
  79. package/assets/img/iqons.min.svg +1 -0
  80. package/assets/img/multisig-preview.svg +1 -0
  81. package/assets/img/nimiq-pay-preview.webp +0 -0
  82. package/assets/img/nimiq-wallet-preview.webp +0 -0
  83. package/assets/img/world-map.svg +1 -0
  84. package/assets/logos/nimiq-icons-logos/logos-bitcoin-mono.svg +1 -0
  85. package/assets/logos/nimiq-icons-logos/logos-bitcoin-outline-mono.svg +1 -0
  86. package/assets/logos/nimiq-icons-logos/logos-bitcoin-outline.svg +1 -0
  87. package/assets/logos/nimiq-icons-logos/logos-bitcoin.svg +1 -0
  88. package/assets/logos/nimiq-icons-logos/logos-colones-outline-mono.svg +1 -0
  89. package/assets/logos/nimiq-icons-logos/logos-colones-outline.svg +1 -0
  90. package/assets/logos/nimiq-icons-logos/logos-cpl-horizontal-mono.svg +1 -0
  91. package/assets/logos/nimiq-icons-logos/logos-cpl-horizontal.svg +1 -0
  92. package/assets/logos/nimiq-icons-logos/logos-cpl-tag-mono.svg +1 -0
  93. package/assets/logos/nimiq-icons-logos/logos-cpl-tag.svg +1 -0
  94. package/assets/logos/nimiq-icons-logos/logos-cpl-white-horizontal.svg +1 -0
  95. package/assets/logos/nimiq-icons-logos/logos-crypto-map-horizontal-mono.svg +1 -0
  96. package/assets/logos/nimiq-icons-logos/logos-crypto-map-horizontal.svg +1 -0
  97. package/assets/logos/nimiq-icons-logos/logos-crypto-map-mono.svg +1 -0
  98. package/assets/logos/nimiq-icons-logos/logos-crypto-map-white-horizontal.svg +1 -0
  99. package/assets/logos/nimiq-icons-logos/logos-crypto-map.svg +1 -0
  100. package/assets/logos/nimiq-icons-logos/logos-cryptocity-horizontal-mono.svg +1 -0
  101. package/assets/logos/nimiq-icons-logos/logos-cryptocity-horizontal.svg +1 -0
  102. package/assets/logos/nimiq-icons-logos/logos-cryptocity-mono.svg +1 -0
  103. package/assets/logos/nimiq-icons-logos/logos-cryptocity-white-horizontal.svg +1 -0
  104. package/assets/logos/nimiq-icons-logos/logos-cryptocity.svg +1 -0
  105. package/assets/logos/nimiq-icons-logos/logos-developer-center-horizontal-mono.svg +1 -0
  106. package/assets/logos/nimiq-icons-logos/logos-developer-center-horizontal.svg +1 -0
  107. package/assets/logos/nimiq-icons-logos/logos-developer-center-white-horizontal.svg +1 -0
  108. package/assets/logos/nimiq-icons-logos/logos-discord-mono.svg +1 -0
  109. package/assets/logos/nimiq-icons-logos/logos-discord.svg +1 -0
  110. package/assets/logos/nimiq-icons-logos/logos-ethereum-mono.svg +1 -0
  111. package/assets/logos/nimiq-icons-logos/logos-ethereum.svg +1 -0
  112. package/assets/logos/nimiq-icons-logos/logos-euro-outline-mono.svg +1 -0
  113. package/assets/logos/nimiq-icons-logos/logos-euro-outline.svg +1 -0
  114. package/assets/logos/nimiq-icons-logos/logos-facebook-mono.svg +1 -0
  115. package/assets/logos/nimiq-icons-logos/logos-facebook.svg +1 -0
  116. package/assets/logos/nimiq-icons-logos/logos-fm-horizontal-mono.svg +1 -0
  117. package/assets/logos/nimiq-icons-logos/logos-fm-horizontal.svg +1 -0
  118. package/assets/logos/nimiq-icons-logos/logos-fm-mono.svg +1 -0
  119. package/assets/logos/nimiq-icons-logos/logos-fm-white-horizontal.svg +1 -0
  120. package/assets/logos/nimiq-icons-logos/logos-fm.svg +1 -0
  121. package/assets/logos/nimiq-icons-logos/logos-github-mono.svg +1 -0
  122. package/assets/logos/nimiq-icons-logos/logos-github.svg +1 -0
  123. package/assets/logos/nimiq-icons-logos/logos-gmaps-pin-mono.svg +1 -0
  124. package/assets/logos/nimiq-icons-logos/logos-gmaps-pin.svg +1 -0
  125. package/assets/logos/nimiq-icons-logos/logos-instagram-mono.svg +1 -0
  126. package/assets/logos/nimiq-icons-logos/logos-instagram.svg +1 -0
  127. package/assets/logos/nimiq-icons-logos/logos-lightning-bitcoin-mono.svg +1 -0
  128. package/assets/logos/nimiq-icons-logos/logos-lightning-bitcoin-outline-mono.svg +1 -0
  129. package/assets/logos/nimiq-icons-logos/logos-lightning-bitcoin-outline.svg +1 -0
  130. package/assets/logos/nimiq-icons-logos/logos-lightning-bitcoin.svg +1 -0
  131. package/assets/logos/nimiq-icons-logos/logos-multisig-mono.svg +1 -0
  132. package/assets/logos/nimiq-icons-logos/logos-multisig.svg +1 -0
  133. package/assets/logos/nimiq-icons-logos/logos-nimiq-forum-mono.svg +1 -0
  134. package/assets/logos/nimiq-icons-logos/logos-nimiq-forum.svg +1 -0
  135. package/assets/logos/nimiq-icons-logos/logos-nimiq-hexagon-outline-mono.svg +1 -0
  136. package/assets/logos/nimiq-icons-logos/logos-nimiq-hexagon-outline.svg +1 -0
  137. package/assets/logos/nimiq-icons-logos/logos-nimiq-horizontal-mono.svg +1 -0
  138. package/assets/logos/nimiq-icons-logos/logos-nimiq-horizontal.svg +1 -0
  139. package/assets/logos/nimiq-icons-logos/logos-nimiq-mono.svg +1 -0
  140. package/assets/logos/nimiq-icons-logos/logos-nimiq-pay-horizontal-mono.svg +1 -0
  141. package/assets/logos/nimiq-icons-logos/logos-nimiq-pay-horizontal.svg +1 -0
  142. package/assets/logos/nimiq-icons-logos/logos-nimiq-pay-vertical-mono.svg +1 -0
  143. package/assets/logos/nimiq-icons-logos/logos-nimiq-pay-vertical.svg +1 -0
  144. package/assets/logos/nimiq-icons-logos/logos-nimiq-pay-white-horizontal.svg +1 -0
  145. package/assets/logos/nimiq-icons-logos/logos-nimiq-vertical-mono.svg +1 -0
  146. package/assets/logos/nimiq-icons-logos/logos-nimiq-vertical.svg +1 -0
  147. package/assets/logos/nimiq-icons-logos/logos-nimiq-wallet-horizontal-mono.svg +1 -0
  148. package/assets/logos/nimiq-icons-logos/logos-nimiq-wallet-horizontal.svg +1 -0
  149. package/assets/logos/nimiq-icons-logos/logos-nimiq-wallet-white-horizontal.svg +1 -0
  150. package/assets/logos/nimiq-icons-logos/logos-nimiq-white-horizontal.svg +1 -0
  151. package/assets/logos/nimiq-icons-logos/logos-nimiq-white-vertical.svg +1 -0
  152. package/assets/logos/nimiq-icons-logos/logos-nimiq.svg +1 -0
  153. package/assets/logos/nimiq-icons-logos/logos-reddit-mono.svg +1 -0
  154. package/assets/logos/nimiq-icons-logos/logos-reddit.svg +1 -0
  155. package/assets/logos/nimiq-icons-logos/logos-shiny-nim-mono.svg +1 -0
  156. package/assets/logos/nimiq-icons-logos/logos-shiny-nim.svg +1 -0
  157. package/assets/logos/nimiq-icons-logos/logos-super-simple-swap-mono.svg +1 -0
  158. package/assets/logos/nimiq-icons-logos/logos-super-simple-swap-text-mono.svg +1 -0
  159. package/assets/logos/nimiq-icons-logos/logos-super-simple-swap-text.svg +1 -0
  160. package/assets/logos/nimiq-icons-logos/logos-super-simple-swap.svg +1 -0
  161. package/assets/logos/nimiq-icons-logos/logos-telegram-mono.svg +1 -0
  162. package/assets/logos/nimiq-icons-logos/logos-telegram.svg +1 -0
  163. package/assets/logos/nimiq-icons-logos/logos-twitter-mono.svg +1 -0
  164. package/assets/logos/nimiq-icons-logos/logos-twitter.svg +1 -0
  165. package/assets/logos/nimiq-icons-logos/logos-usd-outline-mono.svg +1 -0
  166. package/assets/logos/nimiq-icons-logos/logos-usd-outline.svg +1 -0
  167. package/assets/logos/nimiq-icons-logos/logos-usdc-mono.svg +1 -0
  168. package/assets/logos/nimiq-icons-logos/logos-usdc.svg +1 -0
  169. package/assets/logos/nimiq-icons-logos/logos-usdt-mono.svg +1 -0
  170. package/assets/logos/nimiq-icons-logos/logos-usdt.svg +1 -0
  171. package/assets/logos/nimiq-icons-logos/logos-youtube-mono.svg +1 -0
  172. package/assets/logos/nimiq-icons-logos/logos-youtube.svg +1 -0
  173. package/assets/logos/official/black/nimiq_logo_black_horizontal.svg +1 -0
  174. package/assets/logos/official/black/nimiq_logo_black_vertical.svg +1 -0
  175. package/assets/logos/official/black/nimiq_signet_black_16x16.svg +1 -0
  176. package/assets/logos/official/black/nimiq_signet_black_32x32.svg +1 -0
  177. package/assets/logos/official/black/nimiq_signet_black_64x64.svg +1 -0
  178. package/assets/logos/official/black/nimiq_signet_black_base_size.svg +1 -0
  179. package/assets/logos/official/colored/_extended/nimiq_keyguard.svg +1 -0
  180. package/assets/logos/official/colored/_extended/nimiq_miner.svg +1 -0
  181. package/assets/logos/official/colored/_extended/nimiq_safe.svg +1 -0
  182. package/assets/logos/official/colored/_extended/nimiq_shop.svg +1 -0
  183. package/assets/logos/official/colored/nimiq_logo_rgb_horizontal.svg +1 -0
  184. package/assets/logos/official/colored/nimiq_logo_rgb_vertical.svg +1 -0
  185. package/assets/logos/official/colored/nimiq_logo_rgb_white_horizontal.svg +1 -0
  186. package/assets/logos/official/colored/nimiq_logo_rgb_white_vertical.svg +1 -0
  187. package/assets/logos/official/colored/nimiq_signet_rgb_16x16.svg +1 -0
  188. package/assets/logos/official/colored/nimiq_signet_rgb_32x32.svg +1 -0
  189. package/assets/logos/official/colored/nimiq_signet_rgb_64x64.svg +1 -0
  190. package/assets/logos/official/colored/nimiq_signet_rgb_base_size.svg +1 -0
  191. package/assets/logos/official/nimiq-logo.min.svg +1 -0
  192. package/assets/logos/official/white/nimiq_logo_white_horizontal.svg +1 -0
  193. package/assets/logos/official/white/nimiq_logo_white_vertical.svg +1 -0
  194. package/assets/logos/official/white/nimiq_signet_white_16x16.svg +1 -0
  195. package/assets/logos/official/white/nimiq_signet_white_32x32.svg +1 -0
  196. package/assets/logos/official/white/nimiq_signet_white_64x64.svg +1 -0
  197. package/assets/logos/official/white/nimiq_signet_white_base_size.svg +1 -0
  198. package/assets/tokens.md +28 -0
  199. package/bin/nq.js +274 -0
  200. package/package.json +51 -0
  201. package/registry/components/account-header/meta.json +70 -0
  202. package/registry/components/account-list/meta.json +84 -0
  203. package/registry/components/account-ring/meta.json +48 -0
  204. package/registry/components/address-display/meta.json +22 -0
  205. package/registry/components/address-input/meta.json +24 -0
  206. package/registry/components/amount/meta.json +26 -0
  207. package/registry/components/amount-input/meta.json +25 -0
  208. package/registry/components/amount-with-fee/meta.json +25 -0
  209. package/registry/components/app-showcase-card/meta.json +24 -0
  210. package/registry/components/backup-banner/meta.json +15 -0
  211. package/registry/components/balance-distribution/meta.json +20 -0
  212. package/registry/components/buttons/meta.json +22 -0
  213. package/registry/components/card/meta.json +18 -0
  214. package/registry/components/close-button/meta.json +18 -0
  215. package/registry/components/consensus-icon/meta.json +20 -0
  216. package/registry/components/copyable/meta.json +20 -0
  217. package/registry/components/fiat-amount/meta.json +24 -0
  218. package/registry/components/hero-section/meta.json +56 -0
  219. package/registry/components/honeycomb-band/meta.json +30 -0
  220. package/registry/components/identicon/meta.json +38 -0
  221. package/registry/components/label-input/meta.json +24 -0
  222. package/registry/components/loading-spinner/meta.json +18 -0
  223. package/registry/components/page-body/meta.json +18 -0
  224. package/registry/components/page-footer/meta.json +18 -0
  225. package/registry/components/page-header/meta.json +23 -0
  226. package/registry/components/payment-info-line/meta.json +97 -0
  227. package/registry/components/price-chart/meta.json +21 -0
  228. package/registry/components/qr-code/meta.json +60 -0
  229. package/registry/components/search-bar/meta.json +20 -0
  230. package/registry/components/select-bar/meta.json +22 -0
  231. package/registry/components/slider-toggle/meta.json +23 -0
  232. package/registry/components/small-page/meta.json +18 -0
  233. package/registry/components/status-alert/meta.json +22 -0
  234. package/registry/components/status-screen/meta.json +27 -0
  235. package/registry/components/swap-balance-bar/meta.json +97 -0
  236. package/registry/components/timer/meta.json +25 -0
  237. package/registry/components/toast-notification/meta.json +24 -0
  238. package/registry/components/tooltip/meta.json +28 -0
  239. package/registry/components/transaction-list/meta.json +48 -0
  240. package/registry/index.json +394 -0
  241. package/scripts/snap.mjs +42 -0
  242. package/scripts/verify.mjs +76 -0
@@ -0,0 +1,97 @@
1
+ {
2
+ "name": "swap-balance-bar",
3
+ "purpose": "Swap Currencies distribution bar — draggable handle splits total fiat value between two assets: solid address-colored NIM segment left, orange diagonal-hatched BTC change segment right, white round arrow handle on a light-blue hairline, 10-tick percent scale and curved connector lines up to the account labels.",
4
+ "category": "form",
5
+ "variants": [
6
+ "vue",
7
+ "html"
8
+ ],
9
+ "props": [
10
+ {
11
+ "name": "leftAsset",
12
+ "type": "String",
13
+ "required": true,
14
+ "default": "'NIM'",
15
+ "description": "Asset shown on the left side ('NIM' | 'BTC' | 'USDC_MATIC' | 'USDT_MATIC'). Sample/demo: 'NIM'."
16
+ },
17
+ {
18
+ "name": "rightAsset",
19
+ "type": "String",
20
+ "required": true,
21
+ "default": "'BTC'",
22
+ "description": "Asset shown on the right side. Sample/demo: 'BTC'."
23
+ },
24
+ {
25
+ "name": "newLeftBalance",
26
+ "type": "Number",
27
+ "required": true,
28
+ "default": "0",
29
+ "description": "Projected left balance after the swap, in smallest units (luna for NIM). Sample: 51_900_000 (519 NIM)."
30
+ },
31
+ {
32
+ "name": "newRightBalance",
33
+ "type": "Number",
34
+ "required": true,
35
+ "default": "0",
36
+ "description": "Projected right balance after the swap, in smallest units (sat for BTC). Sample: 476 (0.00000476 BTC)."
37
+ },
38
+ {
39
+ "name": "nimAddresses",
40
+ "type": "Object[]",
41
+ "required": false,
42
+ "default": "[]",
43
+ "description": "Replaces the upstream useAddressStore(): [{ address, label, balance }]. First entry is the active address. Sample: Indigo Address, 99_500_000 luna."
44
+ },
45
+ {
46
+ "name": "btcBalance",
47
+ "type": "Number",
48
+ "required": false,
49
+ "default": "0",
50
+ "description": "Replaces useBtcAddressStore().accountBalance, in sat."
51
+ },
52
+ {
53
+ "name": "exchangeRates",
54
+ "type": "Object",
55
+ "required": false,
56
+ "default": "{ nim: 0.000501, btc: 63417 }",
57
+ "description": "Replaces useFiatStore(): fiat rate per whole coin, keyed by lowercase currency code."
58
+ },
59
+ {
60
+ "name": "fiatLimit",
61
+ "type": "Number",
62
+ "required": false,
63
+ "default": "undefined",
64
+ "description": "Maximum fiat amount that may be moved from either side while dragging."
65
+ },
66
+ {
67
+ "name": "disabled",
68
+ "type": "Boolean",
69
+ "required": false,
70
+ "default": "false",
71
+ "description": "Grays out bars, labels and handle and disables dragging."
72
+ }
73
+ ],
74
+ "cssFiles": [
75
+ "css/legacy/nimiq-style.min.css"
76
+ ],
77
+ "dependsOn": [
78
+ "identicon"
79
+ ],
80
+ "npmDeps": [
81
+ "@nimiq/iqons"
82
+ ],
83
+ "verified": true,
84
+ "verify": {
85
+ "viewport": {
86
+ "width": 560,
87
+ "height": 320
88
+ },
89
+ "selector": ".container",
90
+ "maxDiffPct": 0.5,
91
+ "settleMs": 400
92
+ },
93
+ "notes": "Source: upstream/wallet/src/components/swap/SwapBalanceBar.vue (+ icons/SwapBalanceBar/CurvedLine.vue, assets/swap-change-background.svg, assets/horizontal-double-arrow.svg; container width from swap/SwapModal.vue .small-page 63.5rem - 2*4rem page padding = 444px). Sample state per supporting-elements brief item 4: NIM 'Indigo Address' (NQ87 JY9X...) 519 NIM solid navy (.nq-blue via getColorClass: indigo identicon -> nq-blue) at 46%, BTC 0.00 -> +0.00000476 BTC at 54% rendered as full-width .change diagonal hatch over bitcoin orange, white round drag handle with double-arrow on the light-blue separator hairline, 46%/54% tick scale, CurvedLine connectors (widths 82/98px hand-computed from the upstream rAF formulas for a 444px root). Static frozen render; drag/touch logic lives in the Vue port only. Identicon via pinned @nimiq/iqons@1.6.0 jsdelivr recipe (module script iterates .swap-balance-bar .identicon[data-address], namespaced under the component root like the account-ring snippet). Vue port translates the upstream Pinia stores into props (nimAddresses/btcBalance/exchangeRates). Identicon sprite is the REAL team-shipped iqons.min.svg (84-symbol part catalog, 88KB) vendored at assets/img/iqons.min.svg — byte-identical to the Hub-deployed sprite captured in references/assets/hub/iqons.min.svg and to @nimiq/iqons@1.6.0 dist; the snippet probes the local copy and falls back to the same CDN sprite, while the iqons JS library itself stays pinned on jsdelivr (code, not artwork).",
94
+ "assetFiles": [
95
+ "img/iqons.min.svg"
96
+ ]
97
+ }
@@ -0,0 +1,25 @@
1
+ {
2
+ "name": "timer",
3
+ "purpose": "Circular countdown timer (Hub checkout 'offer expires' indicator): a light-blue arc shrinking clockwise as time runs out, a faint filler arc in the gap, and the remaining time (simplified to the largest fitting unit) in the center. Turns orange when >= 75% of the time has elapsed.",
4
+ "category": "feedback",
5
+ "variants": ["vue", "html"],
6
+ "props": [
7
+ { "name": "startTime", "type": "number", "default": null, "note": "timestamp (ms) the countdown started" },
8
+ { "name": "endTime", "type": "number", "default": null, "note": "timestamp (ms) the countdown ends; 'end' event emitted when reached" },
9
+ { "name": "alwaysShowTime", "type": "boolean", "default": true, "note": "show the remaining-time number permanently (larger radius); otherwise an info icon until hover" },
10
+ { "name": "theme", "type": "'normal' | 'inverse' | 'white'", "default": "normal" },
11
+ { "name": "strokeWidth", "type": "number", "default": 2, "note": "in svg viewBox units (viewBox 0 0 26 26)" },
12
+ { "name": "maxUnit", "type": "'second' | 'minute' | 'hour' | 'day'", "default": null, "note": "cap the displayed unit" }
13
+ ],
14
+ "cssFiles": ["css/legacy/nimiq-style.min.css"],
15
+ "dependsOn": [],
16
+ "npmDeps": [],
17
+ "verified": true,
18
+ "verify": {
19
+ "viewport": { "width": 160, "height": 120 },
20
+ "selector": ".timer",
21
+ "maxDiffPct": 0.5,
22
+ "settleMs": 250
23
+ },
24
+ "notes": "Sample state: frozen at 2/3 remaining (progress=1/3) with 10 minutes left ('10'), defaults alwaysShowTime=true (time-shown, radius 12), theme normal, strokeWidth 2. Element is 3.25rem = 26px square (1rem = 8px). Geometry derived in JS upstream: fullCircleLength=2*PI*r; time arc capped below a full circle (gap >= 2.5 strokeWidths) so it always reads as a timer; filler arc fills the gap minus strokeWidth margins; both offset by 90deg so the gap is centered on top. Upstream wraps a Tooltip ('This offer expires in {time}.') and tweens the radius 8->12 on hover via @nimiq/utils Tweenable; the HTML snippet drops the tooltip (static frozen render, optional live mode via data-start-time/data-end-time, no radius tween) and the Vue port inlines a tiny tween + en-only unit strings instead of Tooltip/I18n. Snippet script recomputes arcs from data-progress/data-time-left; demo stays deterministic (no Date when frozen)."
25
+ }
@@ -0,0 +1,24 @@
1
+ {
2
+ "name": "toast-notification",
3
+ "purpose": "Bottom-fixed toast notification in Nimiq wallet style: small dark gradient card with icon, bold status line and dimmed sub-line. Color states: info/in-progress (blue + hexagon spinner), success (green + checkmark), error (orange + alert triangle), warning/expired (gold + stopwatch). Used in the wallet for swap progress and persistent status toasts.",
4
+ "category": "feedback",
5
+ "variants": ["vue", "html"],
6
+ "props": [
7
+ { "name": "type", "type": "'info' | 'success' | 'error' | 'warning'", "default": "'info'", "description": "Toast state; selects the Nimiq gradient (blue/green/orange/gold) and built-in icon (spinner/checkmark/alert-triangle/stopwatch)." },
8
+ { "name": "title", "type": "string", "default": "''", "description": "Bold status line (e.g. 'Swap successful!')." },
9
+ { "name": "message", "type": "string", "default": "''", "description": "Dimmed sub-line (e.g. 'It\\'s safe to close your wallet now')." },
10
+ { "name": "emphasizeMessage", "type": "boolean", "default": "false", "description": "Renders the sub-line in full-opacity Nimiq orange (upstream's 'Don\\'t close your wallet!' treatment on the blue info toast)." },
11
+ { "name": "showMaximize", "type": "boolean", "default": "false", "description": "Shows the small maximize glyph in the top-right corner (the toast is a button that re-opens the underlying flow)." }
12
+ ],
13
+ "cssFiles": ["css/legacy/nimiq-style.min.css"],
14
+ "dependsOn": [],
15
+ "npmDeps": [],
16
+ "verified": true,
17
+ "verify": {
18
+ "viewport": { "width": 800, "height": 320 },
19
+ "selector": "body",
20
+ "maxDiffPct": 0.5,
21
+ "settleMs": 250
22
+ },
23
+ "notes": "Source of truth: upstream/wallet/src/components/swap/SwapNotification.vue (the wallet's bottom toast), SCSS hand-compiled with $mobileBreakpoint=768px from wallet/src/scss/variables.scss; wallet globals button.reset/.flex-row/.flex-column/--body-size/--small-label-size from wallet/src/scss/themes.scss; icons from @nimiq/style (checkmark.svg, alert-triangle.svg, stopwatch.svg) via vue-components IconBase (adds class nq-icon), spinner from vue-components LoadingSpinner.vue, maximize glyph from wallet icons/MaximizeIcon.vue. BottomOverlay.vue (vue-components, used by UpdateNotification.vue) was the other candidate but has no error/success-vs-info color system, so SwapNotification was chosen as the canonical toast. Sample state: three stacked toasts — info/in-progress (blue, resting at +19rem), error (orange, +9.5rem) and success (green, untouched upstream resting position bottom:3rem right:3rem); stacking offsets are page chrome, component CSS unchanged. Upstream quirks preserved: toast is position:fixed and is a <button class=\"reset\"> that re-opens the swap modal; success state has no maximize glyph and pads the checkmark by 0.5rem; spinner keyframes get cancelled by the screenshot harness (animations:disabled) so renders are deterministic. Snippet namespaces everything under .nq-toast and converts the upstream #big-hex/#small-hex spinner ids to classes so multiple toasts can coexist on one page. Vue port is a faithful Vue 3 script-setup wrapper written for this registry (type/title/message props pick gradient + built-in icon)."
24
+ }
@@ -0,0 +1,28 @@
1
+ {
2
+ "name": "tooltip",
3
+ "purpose": "Hover/focus/click tooltip with a positioned arrow box. Wraps a trigger element (icon by default) and shows a dark Nimiq-blue gradient box with an arrow, positioned via a preferred '[primary] [secondary]' position (e.g. 'top right'), optionally constrained to a container.",
4
+ "category": "data-display",
5
+ "variants": ["vue", "html"],
6
+ "props": [
7
+ { "name": "container", "type": "object ({ $el: HTMLElement })", "description": "Container within which the tooltip should be positioned if possible. Constrains max-width and clamps placement." },
8
+ { "name": "disabled", "type": "boolean", "default": false, "description": "Disables showing the tooltip." },
9
+ { "name": "noFocus", "type": "boolean", "default": false, "description": "Removes the trigger from the tab order (tabindex -1)." },
10
+ { "name": "preferredPosition", "type": "string", "default": "top right", "description": "Preferred position as '[primary] [secondary]' or '[primary]'. Primary is vertical (top/bottom) or horizontal (left/right); the optional secondary is of the opposite axis. Single primary centers on the other axis." },
11
+ { "name": "margin", "type": "Partial<Record<'top'|'right'|'bottom'|'left', number>>", "description": "Margin to maintain to the container. Falls back to the container's padding per side. No effect without container." },
12
+ { "name": "autoWidth", "type": "boolean", "default": false, "description": "Sets the tooltip's width to the container's width minus margin. No effect without container." },
13
+ { "name": "theme", "type": "'normal' | 'inverse'", "default": "normal", "description": "'inverse' renders a white box with nimiq-blue text." },
14
+ { "name": "background", "type": "string", "description": "Background of the tooltip as a CSS value; overrides the theme (sets the --background CSS var, also used by the arrow)." },
15
+ { "name": "styles", "type": "Partial<CSSStyleDeclaration>", "description": "Styles applied to the tooltip box (commonly width / minWidth) without deep CSS selectors." }
16
+ ],
17
+ "cssFiles": ["css/legacy/nimiq-style.min.css"],
18
+ "dependsOn": [],
19
+ "npmDeps": [],
20
+ "verified": true,
21
+ "verify": {
22
+ "viewport": { "width": 500, "height": 400 },
23
+ "selector": "body",
24
+ "maxDiffPct": 0.5,
25
+ "settleMs": 250
26
+ },
27
+ "notes": "Sample state: tooltip forced visible ('shown' class) with positionCssClass 'position-top-right' (the default preferredPosition 'top right' with no container), trigger = InfoCircleIcon from @nimiq/style, box text 'Transactions are free on Nimiq.', styles={ width: '25rem' } (real upstream usages always pass a width — without one the absolutely-positioned box shrink-wraps to near min-content). JS-computed inline position expanded by hand and measurement-verified: left = triggerWidth/2 - 25 = -16px, top = -boxHeight = -66px. Arrow = .trigger::after with an SVG mask-image; its background color for top-right is #211e45 (sampled from the nimiq-blue-bg radial gradient where the arrow touches the box). CSS vars --nimiq-blue/--nimiq-blue-bg/--nimiq-ease come from the legacy nimiq-style.min.css (defined on html{}). Vue 3 port keeps the full dynamic positioning/clamping logic, hover/focus/click behavior, show/hide events and container scroll listener; '>>>' deep selectors became :deep()."
28
+ }
@@ -0,0 +1,48 @@
1
+ {
2
+ "name": "transaction-list",
3
+ "purpose": "Wallet transaction history list — month header + per-transaction rows: stacked day/month date, peer identicon, Fira Mono address with time underneath, and right-aligned amount (outgoing plain at 60%, incoming in the green tinted pill) over a loading fiat placeholder bar.",
4
+ "category": "payment",
5
+ "variants": [
6
+ "vue",
7
+ "html"
8
+ ],
9
+ "props": [
10
+ {
11
+ "name": "transactions",
12
+ "type": "TxDisplay[]",
13
+ "required": true,
14
+ "description": "Transactions to list: { transactionHash, peerAddress, peerLabel?, value (luna), isIncoming, timestamp (ms), fiatValue? (number, undefined = loading placeholder), fiatCurrency?, message? }. Month headers are derived from timestamps."
15
+ },
16
+ {
17
+ "name": "fiatCurrency",
18
+ "type": "string",
19
+ "default": "usd",
20
+ "description": "Fallback fiat currency code for rows that do not set their own."
21
+ }
22
+ ],
23
+ "cssFiles": [
24
+ "css/legacy/nimiq-style.min.css"
25
+ ],
26
+ "dependsOn": [
27
+ "identicon",
28
+ "amount",
29
+ "fiat-amount"
30
+ ],
31
+ "npmDeps": [
32
+ "@nimiq/iqons"
33
+ ],
34
+ "verified": true,
35
+ "verify": {
36
+ "viewport": {
37
+ "width": 800,
38
+ "height": 420
39
+ },
40
+ "selector": ".transaction-list",
41
+ "maxDiffPct": 0.5,
42
+ "settleMs": 250
43
+ },
44
+ "notes": "Source: upstream/wallet/src/components/TransactionListItem.vue (row markup + scoped styles, verbatim; amount-loading-placeholder/fiat-unavailable mixins inlined from scss/mixins.scss) + TransactionList.vue (.month-label styles). Sample state per supporting-elements brief item 3: month header 'MAY' + two confirmed rows — outgoing 14 May 22:58 '- 5.0 NIM' (plain navy, opacity .6, '-' from ::before) to NQ49 Q4GS PG77 NTQT VRC9 6FF0 VXJX FKXF 829U, and incoming 14 May 22:34 '+ 1000 NIM' (green pill: --nimiq-green on rgba(33,188,165,.1), radius .5rem) from NQ11 Q47D E086 MDXU TEE9 2A9A ALFT LHN1 7NPG. Both addresses are checksum-valid (IBAN mod-97 verified). Fiat value undefined → .fiat-loading breathing placeholder bar (4rem x 1.6rem, --text-12); screenshots disable animations so it renders at its resting state deterministically. Identicons via pinned @nimiq/iqons@1.6.0 jsdelivr recipe (same as identicon component). Theme vars (--body-size, --small-size, --label-size, --small-label-size, --text-50, --text-12, --bg-primary) from wallet themes.scss are defined on the component root in the snippet CSS. Pending/expired/invalid/new states, cashlink/swap badges and peer labels exist upstream but are not in the sample. Identicon sprite is the REAL team-shipped iqons.min.svg (84-symbol part catalog, 88KB) vendored at assets/img/iqons.min.svg — byte-identical to the Hub-deployed sprite captured in references/assets/hub/iqons.min.svg and to @nimiq/iqons@1.6.0 dist; the snippet probes the local copy and falls back to the same CDN sprite, while the iqons JS library itself stays pinned on jsdelivr (code, not artwork).",
45
+ "assetFiles": [
46
+ "img/iqons.min.svg"
47
+ ]
48
+ }
@@ -0,0 +1,394 @@
1
+ {
2
+ "components": [
3
+ {
4
+ "name": "account-header",
5
+ "purpose": "The wallet address-overview header: large identicon, account name + chunked Fira Mono address, NIM balance + fiat value, and the actions row — search pill, green Stake pill with the green 'Earn NIM every month by staking your NIM' CTA tooltip, divider, light-blue Send and neutral Receive pills.",
6
+ "category": "wallet",
7
+ "variants": [
8
+ "vue",
9
+ "html"
10
+ ],
11
+ "verified": true
12
+ },
13
+ {
14
+ "name": "account-list",
15
+ "purpose": "Selectable list of accounts — identicon + label + balance rows with hover caret — used as the account chooser in Hub flows (inside AccountSelector).",
16
+ "category": "identity",
17
+ "variants": [
18
+ "vue",
19
+ "html"
20
+ ],
21
+ "verified": true
22
+ },
23
+ {
24
+ "name": "account-ring",
25
+ "purpose": "Ring of up to 6 identicons representing a logged-in multi-address account set — hexagonally arranged identicons for filled slots, faint hexagon placeholders for empty ones.",
26
+ "category": "identity",
27
+ "variants": [
28
+ "vue",
29
+ "html"
30
+ ],
31
+ "verified": true
32
+ },
33
+ {
34
+ "name": "address-display",
35
+ "purpose": "Displays a Nimiq (or Ethereum) address as a grid of monospace chunks — 9 four-char blocks in 3 columns for Nimiq format — optionally copyable.",
36
+ "category": "identity",
37
+ "variants": [
38
+ "vue",
39
+ "html"
40
+ ],
41
+ "verified": true
42
+ },
43
+ {
44
+ "name": "address-input",
45
+ "purpose": "A 3x3 block grid textarea for typing Nimiq addresses (optionally Ethereum addresses and domains), with live formatting into 4-char blocks, validation, and per-block focus coloring.",
46
+ "category": "form",
47
+ "variants": [
48
+ "vue",
49
+ "html"
50
+ ],
51
+ "verified": true
52
+ },
53
+ {
54
+ "name": "amount",
55
+ "purpose": "Formats a crypto amount given in its smallest unit (luna, satoshi, ...) as a human-readable number with thin-space digit grouping, configurable decimals and a currency ticker.",
56
+ "category": "payment",
57
+ "variants": [
58
+ "vue",
59
+ "html"
60
+ ],
61
+ "verified": true
62
+ },
63
+ {
64
+ "name": "amount-input",
65
+ "purpose": "Large centered amount entry field that auto-fits its width and shrinks its font to the available space, with the currency ticker (NIM, BTC, ...) rendered beside the value.",
66
+ "category": "form",
67
+ "variants": [
68
+ "vue",
69
+ "html"
70
+ ],
71
+ "verified": true
72
+ },
73
+ {
74
+ "name": "amount-with-fee",
75
+ "purpose": "Large centered amount entry field (auto-sizing AmountInput with currency ticker) plus a secondary line that shows either an 'Insufficient balance' error, an approximate fiat value and/or the network fee. Used in send-transaction flows.",
76
+ "category": "payment",
77
+ "variants": [
78
+ "vue",
79
+ "html"
80
+ ],
81
+ "verified": true
82
+ },
83
+ {
84
+ "name": "app-showcase-card",
85
+ "purpose": "nimiq.com 'THE APPS' marketing card: light-gray rounded card with gold app-icon chip (official white Nimiq signet), title, 2-line gray subtitle and the REAL Nimiq Pay phone screenshot clipped at the card edge. .wide modifier puts the bare gold signet + copy left and the REAL Nimiq Wallet desktop screenshot bleeding off the bottom-right.",
86
+ "category": "marketing",
87
+ "variants": [
88
+ "default",
89
+ "wide"
90
+ ],
91
+ "verified": true
92
+ },
93
+ {
94
+ "name": "backup-banner",
95
+ "purpose": "The wallet's persistent orange warning banner — \"There is no 'forgot password'\" with a Backup→ pill — shown until the account's recovery words are exported.",
96
+ "category": "feedback",
97
+ "variants": [
98
+ "vue",
99
+ "html"
100
+ ],
101
+ "verified": true
102
+ },
103
+ {
104
+ "name": "balance-distribution",
105
+ "purpose": "Sidebar balance-distribution donut from the Nimiq wallet: a ring made of one rounded SVG arc per currency (gold NIM, orange BTC, blue USDC, teal USDT), sized by each currency's share of the account's total fiat value, next to a bold white CURRENCY / percentage legend. Empty currencies get no arc and a dimmed legend row; hovering a row or arc highlights that currency. Lives on the navy wallet sidebar.",
106
+ "category": "data-display",
107
+ "variants": [
108
+ "vue",
109
+ "html"
110
+ ],
111
+ "verified": true
112
+ },
113
+ {
114
+ "name": "buttons",
115
+ "purpose": "Primary Nimiq buttons (.nq-button) from the nimiq-style CSS framework: pill-shaped gradient buttons in blue (default), light-blue, green, orange, red, gold, plus disabled and inverse states.",
116
+ "category": "form",
117
+ "variants": [
118
+ "vue",
119
+ "html"
120
+ ],
121
+ "verified": true
122
+ },
123
+ {
124
+ "name": "card",
125
+ "purpose": "Standard Nimiq card container (.nq-card) with header, body and footer sections; the base layout block of @nimiq/style used for grouping content.",
126
+ "category": "layout",
127
+ "variants": [
128
+ "vue",
129
+ "html"
130
+ ],
131
+ "verified": true
132
+ },
133
+ {
134
+ "name": "close-button",
135
+ "purpose": "Circled X dismiss button used on modals and overlays. A .nq-button-s stripped of its pill background, showing the Nimiq close icon at 20% opacity (40% on hover/focus/active), with a round hover halo and enlarged hit area.",
136
+ "category": "form",
137
+ "variants": [
138
+ "vue",
139
+ "html"
140
+ ],
141
+ "verified": true
142
+ },
143
+ {
144
+ "name": "consensus-icon",
145
+ "purpose": "Network consensus indicator shown by every Nimiq light-client app: a globe icon that reflects the consensus state — animated globe sprite while syncing, globe with checkmark when consensus is established (green when its parent is :hover/:focus/.active), globe with alert triangle in orange when connecting or stalled.",
146
+ "category": "feedback",
147
+ "variants": [
148
+ "vue",
149
+ "html"
150
+ ],
151
+ "verified": true
152
+ },
153
+ {
154
+ "name": "copyable",
155
+ "purpose": "Wrapper that makes a click on its content copy it (or a provided text) to the clipboard, with a light-blue hover/focus tint and an animated 'Copied' tooltip as feedback.",
156
+ "category": "data-display",
157
+ "variants": [
158
+ "vue",
159
+ "html"
160
+ ],
161
+ "verified": true
162
+ },
163
+ {
164
+ "name": "fiat-amount",
165
+ "purpose": "Displays a fiat amount with an optimized currency symbol (e.g. $1234.56 instead of USD 1234.56) and adaptive decimal precision: decimals are extended until the rounded display deviates from the true amount by at most maxRelativeDeviation.",
166
+ "category": "payment",
167
+ "variants": [
168
+ "vue",
169
+ "html"
170
+ ],
171
+ "verified": true
172
+ },
173
+ {
174
+ "name": "hero-section",
175
+ "purpose": "nimiq.com home hero: deep purple radial-gradient sky with floating translucent hexagons, white 800-weight 'Universal Money for Independent Individuals' headline, lavender subtitle, light-blue 'Create Wallet ↗' pill, WORKS WITH partner row, and a dotted-globe white arc cresting at the bottom.",
176
+ "category": "marketing",
177
+ "variants": [
178
+ "vue",
179
+ "html"
180
+ ],
181
+ "verified": true
182
+ },
183
+ {
184
+ "name": "honeycomb-band",
185
+ "purpose": "nimiq.com community honeycomb band: blue 'Community →' pill centered above the real nimiq.com fading honeycomb background (bg-hexagons.svg) with three brand-colored social hexagons overlaid (YouTube red, X black, Facebook blue).",
186
+ "category": "marketing",
187
+ "variants": [
188
+ "vue",
189
+ "html"
190
+ ],
191
+ "verified": true
192
+ },
193
+ {
194
+ "name": "identicon",
195
+ "purpose": "Nimiq identicon avatar — a deterministic hexagonal avatar generated from a Nimiq address via @nimiq/iqons; shows a hexagon placeholder for missing/invalid addresses.",
196
+ "category": "identity",
197
+ "variants": [
198
+ "vue",
199
+ "html"
200
+ ],
201
+ "verified": true
202
+ },
203
+ {
204
+ "name": "label-input",
205
+ "purpose": "A self-sizing text input for naming things (addresses, accounts), styled as an nq-input whose width grows and shrinks with its content.",
206
+ "category": "form",
207
+ "variants": [
208
+ "vue",
209
+ "html"
210
+ ],
211
+ "verified": true
212
+ },
213
+ {
214
+ "name": "loading-spinner",
215
+ "purpose": "Animated hexagon loading indicator: two dashed hexagon outlines (one at 40% opacity) whose dash offsets rotate around the hexagon in a 4s stepped ease cycle. Inherits its color via currentColor.",
216
+ "category": "feedback",
217
+ "variants": [
218
+ "vue",
219
+ "html"
220
+ ],
221
+ "verified": true
222
+ },
223
+ {
224
+ "name": "page-body",
225
+ "purpose": "Scrollable content area of a card-style page. Pairs .page-body with the legacy .nq-card-body padding rules and flex-grows to fill the parent SmallPage, scrolling vertically when content overflows.",
226
+ "category": "layout",
227
+ "variants": [
228
+ "vue",
229
+ "html"
230
+ ],
231
+ "verified": true
232
+ },
233
+ {
234
+ "name": "page-footer",
235
+ "purpose": "Footer area of a Nimiq page/card (nq-card-footer). Flex column that pins action buttons at the bottom of a SmallPage and applies the standard nq-button margins.",
236
+ "category": "layout",
237
+ "variants": [
238
+ "vue",
239
+ "html"
240
+ ],
241
+ "verified": true
242
+ },
243
+ {
244
+ "name": "page-header",
245
+ "purpose": "Card header for Nimiq page flows: centered title, optional back arrow, optional step progress indicator. Used at the top of a SmallPage.",
246
+ "category": "layout",
247
+ "variants": [
248
+ "vue",
249
+ "html"
250
+ ],
251
+ "verified": true
252
+ },
253
+ {
254
+ "name": "payment-info-line",
255
+ "purpose": "Checkout header line: crypto amount (with optional fiat value + price-breakdown tooltip) on the left, an animated arrow runway, the recipient (shop logo or identicon + origin domain) and an expiry countdown timer on the right. Used at the top of the Nimiq Hub checkout.",
256
+ "category": "payment",
257
+ "variants": [
258
+ "vue",
259
+ "html"
260
+ ],
261
+ "verified": true
262
+ },
263
+ {
264
+ "name": "price-chart",
265
+ "purpose": "The wallet sidebar's crypto price sparkline — '24H' badge over a smoothed white line chart, with the currency ticker, fiat price and 24h percentage change below, on the navy sidebar background.",
266
+ "category": "data-display",
267
+ "variants": [
268
+ "vue",
269
+ "html"
270
+ ],
271
+ "verified": true
272
+ },
273
+ {
274
+ "name": "qr-code",
275
+ "purpose": "Nimiq QR code — renders arbitrary data (typically a nimiq: payment URI) as a rounded-module QR code on a canvas, filled by default with the Nimiq light-blue radial gradient (#265DD7 → #0582CA) on a transparent background.",
276
+ "category": "data-display",
277
+ "variants": [
278
+ "vue",
279
+ "html"
280
+ ],
281
+ "verified": true
282
+ },
283
+ {
284
+ "name": "search-bar",
285
+ "purpose": "The wallet's pill-shaped transaction search input: magnifier icon + borderless input inside a 500px-radius inset border, light-blue on focus, with a clear (cross) button while active.",
286
+ "category": "form",
287
+ "variants": [
288
+ "vue",
289
+ "html"
290
+ ],
291
+ "verified": true
292
+ },
293
+ {
294
+ "name": "select-bar",
295
+ "purpose": "Segmented radio bar (pill-shaped) for choosing one of several ordered options, e.g. a transaction fee level. All options up to and including the selected one are tinted with the selected option's color; later options stay on the neutral highlight background.",
296
+ "category": "form",
297
+ "variants": [
298
+ "vue",
299
+ "html"
300
+ ],
301
+ "verified": true
302
+ },
303
+ {
304
+ "name": "slider-toggle",
305
+ "purpose": "Pill-shaped radio toggle with a white 'active box' that slides under the selected option. Used in the Nimiq Wallet as a currency switcher (NIM/BTC) and for filter/sort selection.",
306
+ "category": "form",
307
+ "variants": [
308
+ "vue",
309
+ "html"
310
+ ],
311
+ "verified": true
312
+ },
313
+ {
314
+ "name": "small-page",
315
+ "purpose": "Standard 420x564px white card container (SmallPage) that frames a page of content in Nimiq apps; pairs with PageHeader/PageBody/PageFooter.",
316
+ "category": "layout",
317
+ "variants": [
318
+ "vue",
319
+ "html"
320
+ ],
321
+ "verified": true
322
+ },
323
+ {
324
+ "name": "status-alert",
325
+ "purpose": "Status alert / callout block (note-info, tip-success, warning, caution-error, important) in the real Nimiq pattern: tinted background, 1.5px tonal outline, uppercase icon title and colored text. Used for status notices, warnings and error feedback.",
326
+ "category": "feedback",
327
+ "variants": [
328
+ "vue",
329
+ "html"
330
+ ],
331
+ "verified": true
332
+ },
333
+ {
334
+ "name": "status-screen",
335
+ "purpose": "Full-card overlay status screen from the Nimiq Hub: loading (navy/light-blue gradient + hexagon spinner + status line), success (green gradient + animated checkmark), warning (orange + neutral face) and error (red + sad face) states, with optional action button/link. Covers the whole SmallPage while a request is processed and resolves into the iconic green checkmark end screen.",
336
+ "category": "feedback",
337
+ "variants": [
338
+ "vue",
339
+ "html"
340
+ ],
341
+ "verified": true
342
+ },
343
+ {
344
+ "name": "swap-balance-bar",
345
+ "purpose": "Swap Currencies distribution bar — draggable handle splits total fiat value between two assets: solid address-colored NIM segment left, orange diagonal-hatched BTC change segment right, white round arrow handle on a light-blue hairline, 10-tick percent scale and curved connector lines up to the account labels.",
346
+ "category": "form",
347
+ "variants": [
348
+ "vue",
349
+ "html"
350
+ ],
351
+ "verified": true
352
+ },
353
+ {
354
+ "name": "timer",
355
+ "purpose": "Circular countdown timer (Hub checkout 'offer expires' indicator): a light-blue arc shrinking clockwise as time runs out, a faint filler arc in the gap, and the remaining time (simplified to the largest fitting unit) in the center. Turns orange when >= 75% of the time has elapsed.",
356
+ "category": "feedback",
357
+ "variants": [
358
+ "vue",
359
+ "html"
360
+ ],
361
+ "verified": true
362
+ },
363
+ {
364
+ "name": "toast-notification",
365
+ "purpose": "Bottom-fixed toast notification in Nimiq wallet style: small dark gradient card with icon, bold status line and dimmed sub-line. Color states: info/in-progress (blue + hexagon spinner), success (green + checkmark), error (orange + alert triangle), warning/expired (gold + stopwatch). Used in the wallet for swap progress and persistent status toasts.",
366
+ "category": "feedback",
367
+ "variants": [
368
+ "vue",
369
+ "html"
370
+ ],
371
+ "verified": true
372
+ },
373
+ {
374
+ "name": "tooltip",
375
+ "purpose": "Hover/focus/click tooltip with a positioned arrow box. Wraps a trigger element (icon by default) and shows a dark Nimiq-blue gradient box with an arrow, positioned via a preferred '[primary] [secondary]' position (e.g. 'top right'), optionally constrained to a container.",
376
+ "category": "data-display",
377
+ "variants": [
378
+ "vue",
379
+ "html"
380
+ ],
381
+ "verified": true
382
+ },
383
+ {
384
+ "name": "transaction-list",
385
+ "purpose": "Wallet transaction history list — month header + per-transaction rows: stacked day/month date, peer identicon, Fira Mono address with time underneath, and right-aligned amount (outgoing plain at 60%, incoming in the green tinted pill) over a loading fiat placeholder bar.",
386
+ "category": "payment",
387
+ "variants": [
388
+ "vue",
389
+ "html"
390
+ ],
391
+ "verified": true
392
+ }
393
+ ]
394
+ }