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.
- package/LICENSE +25 -0
- package/NOTICE.md +32 -0
- package/README.md +73 -0
- package/assets/css/legacy/nimiq-style.icons.svg +1 -0
- package/assets/css/legacy/nimiq-style.min.css +5 -0
- package/assets/css/modern/animations.css +179 -0
- package/assets/css/modern/atomic.css +148 -0
- package/assets/css/modern/colors.css +82 -0
- package/assets/css/modern/fonts.css +17 -0
- package/assets/css/modern/index.css +8 -0
- package/assets/css/modern/preflight.css +190 -0
- package/assets/css/modern/spacing.css +1023 -0
- package/assets/css/modern/static-content.css +300 -0
- package/assets/css/modern/typography.css +632 -0
- package/assets/css/modern/utilities.css +861 -0
- package/assets/fonts/mulish-0b696a2e.woff2 +0 -0
- package/assets/fonts/mulish-294ced17.woff2 +0 -0
- package/assets/fonts/mulish-4eb440e1.woff2 +0 -0
- package/assets/fonts/mulish-78a2d471.woff2 +0 -0
- package/assets/fonts/mulish-81f6c1ba.woff2 +0 -0
- package/assets/fonts/mulish-c1a61bc6.woff2 +0 -0
- package/assets/fonts/mulish-c7803f2b.woff2 +0 -0
- package/assets/fonts/mulish-e64de9e7.woff2 +0 -0
- package/assets/fonts/mulish-ecf98336.woff2 +0 -0
- package/assets/fonts/mulish-f727ad98.woff2 +0 -0
- package/assets/icons/duotone/duotone-arrow-to-top-left-from-corner.svg +1 -0
- package/assets/icons/duotone/duotone-bank-building.svg +1 -0
- package/assets/icons/duotone/duotone-bell.svg +1 -0
- package/assets/icons/duotone/duotone-block-stairs.svg +1 -0
- package/assets/icons/duotone/duotone-btc-invoice.svg +1 -0
- package/assets/icons/duotone/duotone-cactus.svg +1 -0
- package/assets/icons/duotone/duotone-cash-register.svg +1 -0
- package/assets/icons/duotone/duotone-column-chart.svg +1 -0
- package/assets/icons/duotone/duotone-credit-card.svg +1 -0
- package/assets/icons/duotone/duotone-crypto-currencies-btc-eth.svg +1 -0
- package/assets/icons/duotone/duotone-crypto-currencies-btc-usdc.svg +1 -0
- package/assets/icons/duotone/duotone-cryptos-pizza.svg +1 -0
- package/assets/icons/duotone/duotone-dashboard.svg +1 -0
- package/assets/icons/duotone/duotone-displaced-hamburguer.svg +1 -0
- package/assets/icons/duotone/duotone-document-text.svg +1 -0
- package/assets/icons/duotone/duotone-document-vertical-line.svg +1 -0
- package/assets/icons/duotone/duotone-document.svg +1 -0
- package/assets/icons/duotone/duotone-employee.svg +1 -0
- package/assets/icons/duotone/duotone-envelope.svg +1 -0
- package/assets/icons/duotone/duotone-fiat-currencies.svg +1 -0
- package/assets/icons/duotone/duotone-fiat-exchange.svg +1 -0
- package/assets/icons/duotone/duotone-fluctuations.svg +1 -0
- package/assets/icons/duotone/duotone-gamepad.svg +1 -0
- package/assets/icons/duotone/duotone-globe.svg +1 -0
- package/assets/icons/duotone/duotone-group.svg +1 -0
- package/assets/icons/duotone/duotone-handshake.svg +1 -0
- package/assets/icons/duotone/duotone-high-five.svg +1 -0
- package/assets/icons/duotone/duotone-htlc-box.svg +1 -0
- package/assets/icons/duotone/duotone-incognito.svg +1 -0
- package/assets/icons/duotone/duotone-key-puzzle.svg +1 -0
- package/assets/icons/duotone/duotone-languages.svg +1 -0
- package/assets/icons/duotone/duotone-magnifying-glass.svg +1 -0
- package/assets/icons/duotone/duotone-medal.svg +1 -0
- package/assets/icons/duotone/duotone-network.svg +1 -0
- package/assets/icons/duotone/duotone-nim-phone.svg +1 -0
- package/assets/icons/duotone/duotone-nimiq-environment.svg +1 -0
- package/assets/icons/duotone/duotone-no-chargeback.svg +1 -0
- package/assets/icons/duotone/duotone-oasis-puzzle.svg +1 -0
- package/assets/icons/duotone/duotone-paper-plane.svg +1 -0
- package/assets/icons/duotone/duotone-peer-to-peer.svg +1 -0
- package/assets/icons/duotone/duotone-pin-with-shadow.svg +1 -0
- package/assets/icons/duotone/duotone-safe-lock.svg +1 -0
- package/assets/icons/duotone/duotone-smart-contract.svg +1 -0
- package/assets/icons/duotone/duotone-sparkling-swap.svg +1 -0
- package/assets/icons/duotone/duotone-speedmeter.svg +1 -0
- package/assets/icons/duotone/duotone-staking-ripple.svg +1 -0
- package/assets/icons/duotone/duotone-successful-sequence.svg +1 -0
- package/assets/icons/duotone/duotone-three-hands-hexagon.svg +1 -0
- package/assets/icons/nimiq-flags.json +1274 -0
- package/assets/icons/nimiq-icons.json +1631 -0
- package/assets/img/bg-hexagons.svg +1 -0
- package/assets/img/cpl-preview.webp +0 -0
- package/assets/img/gods-light.webp +0 -0
- package/assets/img/iqons.min.svg +1 -0
- package/assets/img/multisig-preview.svg +1 -0
- package/assets/img/nimiq-pay-preview.webp +0 -0
- package/assets/img/nimiq-wallet-preview.webp +0 -0
- package/assets/img/world-map.svg +1 -0
- package/assets/logos/nimiq-icons-logos/logos-bitcoin-mono.svg +1 -0
- package/assets/logos/nimiq-icons-logos/logos-bitcoin-outline-mono.svg +1 -0
- package/assets/logos/nimiq-icons-logos/logos-bitcoin-outline.svg +1 -0
- package/assets/logos/nimiq-icons-logos/logos-bitcoin.svg +1 -0
- package/assets/logos/nimiq-icons-logos/logos-colones-outline-mono.svg +1 -0
- package/assets/logos/nimiq-icons-logos/logos-colones-outline.svg +1 -0
- package/assets/logos/nimiq-icons-logos/logos-cpl-horizontal-mono.svg +1 -0
- package/assets/logos/nimiq-icons-logos/logos-cpl-horizontal.svg +1 -0
- package/assets/logos/nimiq-icons-logos/logos-cpl-tag-mono.svg +1 -0
- package/assets/logos/nimiq-icons-logos/logos-cpl-tag.svg +1 -0
- package/assets/logos/nimiq-icons-logos/logos-cpl-white-horizontal.svg +1 -0
- package/assets/logos/nimiq-icons-logos/logos-crypto-map-horizontal-mono.svg +1 -0
- package/assets/logos/nimiq-icons-logos/logos-crypto-map-horizontal.svg +1 -0
- package/assets/logos/nimiq-icons-logos/logos-crypto-map-mono.svg +1 -0
- package/assets/logos/nimiq-icons-logos/logos-crypto-map-white-horizontal.svg +1 -0
- package/assets/logos/nimiq-icons-logos/logos-crypto-map.svg +1 -0
- package/assets/logos/nimiq-icons-logos/logos-cryptocity-horizontal-mono.svg +1 -0
- package/assets/logos/nimiq-icons-logos/logos-cryptocity-horizontal.svg +1 -0
- package/assets/logos/nimiq-icons-logos/logos-cryptocity-mono.svg +1 -0
- package/assets/logos/nimiq-icons-logos/logos-cryptocity-white-horizontal.svg +1 -0
- package/assets/logos/nimiq-icons-logos/logos-cryptocity.svg +1 -0
- package/assets/logos/nimiq-icons-logos/logos-developer-center-horizontal-mono.svg +1 -0
- package/assets/logos/nimiq-icons-logos/logos-developer-center-horizontal.svg +1 -0
- package/assets/logos/nimiq-icons-logos/logos-developer-center-white-horizontal.svg +1 -0
- package/assets/logos/nimiq-icons-logos/logos-discord-mono.svg +1 -0
- package/assets/logos/nimiq-icons-logos/logos-discord.svg +1 -0
- package/assets/logos/nimiq-icons-logos/logos-ethereum-mono.svg +1 -0
- package/assets/logos/nimiq-icons-logos/logos-ethereum.svg +1 -0
- package/assets/logos/nimiq-icons-logos/logos-euro-outline-mono.svg +1 -0
- package/assets/logos/nimiq-icons-logos/logos-euro-outline.svg +1 -0
- package/assets/logos/nimiq-icons-logos/logos-facebook-mono.svg +1 -0
- package/assets/logos/nimiq-icons-logos/logos-facebook.svg +1 -0
- package/assets/logos/nimiq-icons-logos/logos-fm-horizontal-mono.svg +1 -0
- package/assets/logos/nimiq-icons-logos/logos-fm-horizontal.svg +1 -0
- package/assets/logos/nimiq-icons-logos/logos-fm-mono.svg +1 -0
- package/assets/logos/nimiq-icons-logos/logos-fm-white-horizontal.svg +1 -0
- package/assets/logos/nimiq-icons-logos/logos-fm.svg +1 -0
- package/assets/logos/nimiq-icons-logos/logos-github-mono.svg +1 -0
- package/assets/logos/nimiq-icons-logos/logos-github.svg +1 -0
- package/assets/logos/nimiq-icons-logos/logos-gmaps-pin-mono.svg +1 -0
- package/assets/logos/nimiq-icons-logos/logos-gmaps-pin.svg +1 -0
- package/assets/logos/nimiq-icons-logos/logos-instagram-mono.svg +1 -0
- package/assets/logos/nimiq-icons-logos/logos-instagram.svg +1 -0
- package/assets/logos/nimiq-icons-logos/logos-lightning-bitcoin-mono.svg +1 -0
- package/assets/logos/nimiq-icons-logos/logos-lightning-bitcoin-outline-mono.svg +1 -0
- package/assets/logos/nimiq-icons-logos/logos-lightning-bitcoin-outline.svg +1 -0
- package/assets/logos/nimiq-icons-logos/logos-lightning-bitcoin.svg +1 -0
- package/assets/logos/nimiq-icons-logos/logos-multisig-mono.svg +1 -0
- package/assets/logos/nimiq-icons-logos/logos-multisig.svg +1 -0
- package/assets/logos/nimiq-icons-logos/logos-nimiq-forum-mono.svg +1 -0
- package/assets/logos/nimiq-icons-logos/logos-nimiq-forum.svg +1 -0
- package/assets/logos/nimiq-icons-logos/logos-nimiq-hexagon-outline-mono.svg +1 -0
- package/assets/logos/nimiq-icons-logos/logos-nimiq-hexagon-outline.svg +1 -0
- package/assets/logos/nimiq-icons-logos/logos-nimiq-horizontal-mono.svg +1 -0
- package/assets/logos/nimiq-icons-logos/logos-nimiq-horizontal.svg +1 -0
- package/assets/logos/nimiq-icons-logos/logos-nimiq-mono.svg +1 -0
- package/assets/logos/nimiq-icons-logos/logos-nimiq-pay-horizontal-mono.svg +1 -0
- package/assets/logos/nimiq-icons-logos/logos-nimiq-pay-horizontal.svg +1 -0
- package/assets/logos/nimiq-icons-logos/logos-nimiq-pay-vertical-mono.svg +1 -0
- package/assets/logos/nimiq-icons-logos/logos-nimiq-pay-vertical.svg +1 -0
- package/assets/logos/nimiq-icons-logos/logos-nimiq-pay-white-horizontal.svg +1 -0
- package/assets/logos/nimiq-icons-logos/logos-nimiq-vertical-mono.svg +1 -0
- package/assets/logos/nimiq-icons-logos/logos-nimiq-vertical.svg +1 -0
- package/assets/logos/nimiq-icons-logos/logos-nimiq-wallet-horizontal-mono.svg +1 -0
- package/assets/logos/nimiq-icons-logos/logos-nimiq-wallet-horizontal.svg +1 -0
- package/assets/logos/nimiq-icons-logos/logos-nimiq-wallet-white-horizontal.svg +1 -0
- package/assets/logos/nimiq-icons-logos/logos-nimiq-white-horizontal.svg +1 -0
- package/assets/logos/nimiq-icons-logos/logos-nimiq-white-vertical.svg +1 -0
- package/assets/logos/nimiq-icons-logos/logos-nimiq.svg +1 -0
- package/assets/logos/nimiq-icons-logos/logos-reddit-mono.svg +1 -0
- package/assets/logos/nimiq-icons-logos/logos-reddit.svg +1 -0
- package/assets/logos/nimiq-icons-logos/logos-shiny-nim-mono.svg +1 -0
- package/assets/logos/nimiq-icons-logos/logos-shiny-nim.svg +1 -0
- package/assets/logos/nimiq-icons-logos/logos-super-simple-swap-mono.svg +1 -0
- package/assets/logos/nimiq-icons-logos/logos-super-simple-swap-text-mono.svg +1 -0
- package/assets/logos/nimiq-icons-logos/logos-super-simple-swap-text.svg +1 -0
- package/assets/logos/nimiq-icons-logos/logos-super-simple-swap.svg +1 -0
- package/assets/logos/nimiq-icons-logos/logos-telegram-mono.svg +1 -0
- package/assets/logos/nimiq-icons-logos/logos-telegram.svg +1 -0
- package/assets/logos/nimiq-icons-logos/logos-twitter-mono.svg +1 -0
- package/assets/logos/nimiq-icons-logos/logos-twitter.svg +1 -0
- package/assets/logos/nimiq-icons-logos/logos-usd-outline-mono.svg +1 -0
- package/assets/logos/nimiq-icons-logos/logos-usd-outline.svg +1 -0
- package/assets/logos/nimiq-icons-logos/logos-usdc-mono.svg +1 -0
- package/assets/logos/nimiq-icons-logos/logos-usdc.svg +1 -0
- package/assets/logos/nimiq-icons-logos/logos-usdt-mono.svg +1 -0
- package/assets/logos/nimiq-icons-logos/logos-usdt.svg +1 -0
- package/assets/logos/nimiq-icons-logos/logos-youtube-mono.svg +1 -0
- package/assets/logos/nimiq-icons-logos/logos-youtube.svg +1 -0
- package/assets/logos/official/black/nimiq_logo_black_horizontal.svg +1 -0
- package/assets/logos/official/black/nimiq_logo_black_vertical.svg +1 -0
- package/assets/logos/official/black/nimiq_signet_black_16x16.svg +1 -0
- package/assets/logos/official/black/nimiq_signet_black_32x32.svg +1 -0
- package/assets/logos/official/black/nimiq_signet_black_64x64.svg +1 -0
- package/assets/logos/official/black/nimiq_signet_black_base_size.svg +1 -0
- package/assets/logos/official/colored/_extended/nimiq_keyguard.svg +1 -0
- package/assets/logos/official/colored/_extended/nimiq_miner.svg +1 -0
- package/assets/logos/official/colored/_extended/nimiq_safe.svg +1 -0
- package/assets/logos/official/colored/_extended/nimiq_shop.svg +1 -0
- package/assets/logos/official/colored/nimiq_logo_rgb_horizontal.svg +1 -0
- package/assets/logos/official/colored/nimiq_logo_rgb_vertical.svg +1 -0
- package/assets/logos/official/colored/nimiq_logo_rgb_white_horizontal.svg +1 -0
- package/assets/logos/official/colored/nimiq_logo_rgb_white_vertical.svg +1 -0
- package/assets/logos/official/colored/nimiq_signet_rgb_16x16.svg +1 -0
- package/assets/logos/official/colored/nimiq_signet_rgb_32x32.svg +1 -0
- package/assets/logos/official/colored/nimiq_signet_rgb_64x64.svg +1 -0
- package/assets/logos/official/colored/nimiq_signet_rgb_base_size.svg +1 -0
- package/assets/logos/official/nimiq-logo.min.svg +1 -0
- package/assets/logos/official/white/nimiq_logo_white_horizontal.svg +1 -0
- package/assets/logos/official/white/nimiq_logo_white_vertical.svg +1 -0
- package/assets/logos/official/white/nimiq_signet_white_16x16.svg +1 -0
- package/assets/logos/official/white/nimiq_signet_white_32x32.svg +1 -0
- package/assets/logos/official/white/nimiq_signet_white_64x64.svg +1 -0
- package/assets/logos/official/white/nimiq_signet_white_base_size.svg +1 -0
- package/assets/tokens.md +28 -0
- package/bin/nq.js +274 -0
- package/package.json +51 -0
- package/registry/components/account-header/meta.json +70 -0
- package/registry/components/account-list/meta.json +84 -0
- package/registry/components/account-ring/meta.json +48 -0
- package/registry/components/address-display/meta.json +22 -0
- package/registry/components/address-input/meta.json +24 -0
- package/registry/components/amount/meta.json +26 -0
- package/registry/components/amount-input/meta.json +25 -0
- package/registry/components/amount-with-fee/meta.json +25 -0
- package/registry/components/app-showcase-card/meta.json +24 -0
- package/registry/components/backup-banner/meta.json +15 -0
- package/registry/components/balance-distribution/meta.json +20 -0
- package/registry/components/buttons/meta.json +22 -0
- package/registry/components/card/meta.json +18 -0
- package/registry/components/close-button/meta.json +18 -0
- package/registry/components/consensus-icon/meta.json +20 -0
- package/registry/components/copyable/meta.json +20 -0
- package/registry/components/fiat-amount/meta.json +24 -0
- package/registry/components/hero-section/meta.json +56 -0
- package/registry/components/honeycomb-band/meta.json +30 -0
- package/registry/components/identicon/meta.json +38 -0
- package/registry/components/label-input/meta.json +24 -0
- package/registry/components/loading-spinner/meta.json +18 -0
- package/registry/components/page-body/meta.json +18 -0
- package/registry/components/page-footer/meta.json +18 -0
- package/registry/components/page-header/meta.json +23 -0
- package/registry/components/payment-info-line/meta.json +97 -0
- package/registry/components/price-chart/meta.json +21 -0
- package/registry/components/qr-code/meta.json +60 -0
- package/registry/components/search-bar/meta.json +20 -0
- package/registry/components/select-bar/meta.json +22 -0
- package/registry/components/slider-toggle/meta.json +23 -0
- package/registry/components/small-page/meta.json +18 -0
- package/registry/components/status-alert/meta.json +22 -0
- package/registry/components/status-screen/meta.json +27 -0
- package/registry/components/swap-balance-bar/meta.json +97 -0
- package/registry/components/timer/meta.json +25 -0
- package/registry/components/toast-notification/meta.json +24 -0
- package/registry/components/tooltip/meta.json +28 -0
- package/registry/components/transaction-list/meta.json +48 -0
- package/registry/index.json +394 -0
- package/scripts/snap.mjs +42 -0
- package/scripts/verify.mjs +76 -0
package/package.json
ADDED
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "nimiq-branding-cli",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "nq — pixel-verified Nimiq UI component registry + CLI. 39 components (Vue 3 + plain HTML) diffed against the real Nimiq apps, plus the team's real asset library. Unofficial community tool.",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"bin": {
|
|
7
|
+
"nq": "bin/nq.js"
|
|
8
|
+
},
|
|
9
|
+
"scripts": {
|
|
10
|
+
"verify": "node scripts/verify.mjs",
|
|
11
|
+
"test": "node --test test/"
|
|
12
|
+
},
|
|
13
|
+
"engines": {
|
|
14
|
+
"node": ">=18"
|
|
15
|
+
},
|
|
16
|
+
"devDependencies": {
|
|
17
|
+
"pixelmatch": "^5.3.0",
|
|
18
|
+
"playwright": "^1.49.0",
|
|
19
|
+
"pngjs": "^7.0.0"
|
|
20
|
+
},
|
|
21
|
+
"license": "MIT",
|
|
22
|
+
"repository": {
|
|
23
|
+
"type": "git",
|
|
24
|
+
"url": "git+https://github.com/Andjroo111/nimiq-branding-cli.git"
|
|
25
|
+
},
|
|
26
|
+
"homepage": "https://github.com/Andjroo111/nimiq-branding-cli#readme",
|
|
27
|
+
"bugs": {
|
|
28
|
+
"url": "https://github.com/Andjroo111/nimiq-branding-cli/issues"
|
|
29
|
+
},
|
|
30
|
+
"keywords": [
|
|
31
|
+
"nimiq",
|
|
32
|
+
"cli",
|
|
33
|
+
"design-system",
|
|
34
|
+
"components",
|
|
35
|
+
"vue",
|
|
36
|
+
"scaffolding",
|
|
37
|
+
"crypto",
|
|
38
|
+
"ui"
|
|
39
|
+
],
|
|
40
|
+
"files": [
|
|
41
|
+
"bin/",
|
|
42
|
+
"assets/",
|
|
43
|
+
"scripts/verify.mjs",
|
|
44
|
+
"scripts/snap.mjs",
|
|
45
|
+
"NOTICE.md",
|
|
46
|
+
"registry/index.json",
|
|
47
|
+
"registry/components/*/meta.json",
|
|
48
|
+
"registry/components/*/html/",
|
|
49
|
+
"registry/components/*/vue/"
|
|
50
|
+
]
|
|
51
|
+
}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "account-header",
|
|
3
|
+
"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.",
|
|
4
|
+
"category": "wallet",
|
|
5
|
+
"variants": [
|
|
6
|
+
"vue",
|
|
7
|
+
"html"
|
|
8
|
+
],
|
|
9
|
+
"props": [
|
|
10
|
+
{
|
|
11
|
+
"name": "label",
|
|
12
|
+
"type": "string",
|
|
13
|
+
"description": "Account/address name, e.g. 'Indigo Address'"
|
|
14
|
+
},
|
|
15
|
+
{
|
|
16
|
+
"name": "address",
|
|
17
|
+
"type": "string",
|
|
18
|
+
"description": "Chunked Nimiq address, drives the identicon"
|
|
19
|
+
},
|
|
20
|
+
{
|
|
21
|
+
"name": "balance",
|
|
22
|
+
"type": "string",
|
|
23
|
+
"description": "Formatted NIM balance, e.g. '995'"
|
|
24
|
+
},
|
|
25
|
+
{
|
|
26
|
+
"name": "fiatValue",
|
|
27
|
+
"type": "string",
|
|
28
|
+
"description": "Formatted fiat value, e.g. '$0.50'"
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
"name": "searchPlaceholder",
|
|
32
|
+
"type": "string",
|
|
33
|
+
"description": "Search input placeholder (default 'Search transactions')"
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
"name": "showStakeTooltip",
|
|
37
|
+
"type": "boolean",
|
|
38
|
+
"description": "Show the green staking CTA tooltip under the Stake button"
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
"name": "stakeTooltipText",
|
|
42
|
+
"type": "string",
|
|
43
|
+
"description": "Tooltip copy (default 'Earn NIM every month by staking your NIM')"
|
|
44
|
+
}
|
|
45
|
+
],
|
|
46
|
+
"cssFiles": [
|
|
47
|
+
"css/legacy/nimiq-style.min.css"
|
|
48
|
+
],
|
|
49
|
+
"dependsOn": [
|
|
50
|
+
"identicon",
|
|
51
|
+
"tooltip"
|
|
52
|
+
],
|
|
53
|
+
"npmDeps": [
|
|
54
|
+
"@nimiq/iqons"
|
|
55
|
+
],
|
|
56
|
+
"verified": true,
|
|
57
|
+
"verify": {
|
|
58
|
+
"viewport": {
|
|
59
|
+
"width": 920,
|
|
60
|
+
"height": 360
|
|
61
|
+
},
|
|
62
|
+
"selector": ".account-header",
|
|
63
|
+
"maxDiffPct": 0.5,
|
|
64
|
+
"settleMs": 500
|
|
65
|
+
},
|
|
66
|
+
"notes": "Composition. Sources: upstream/wallet/src/components/layouts/AddressOverview.vue (.active-address + .actions desktop markup and scoped SCSS), upstream/wallet/src/components/SearchBar.vue, upstream/wallet/src/components/staking/StakingButton.vue (.staking-feature-tip green CTA tooltip, ::v-deep expanded), upstream/wallet/src/components/icons/Staking/StakingIcon.vue (gradients=false pill mode), upstream/vue-components Tooltip.vue base (bottom-position subset) and Amount.vue. Wallet theme vars (--body-size:2rem, --h1-size:3rem, --large-button-size:2rem, --text-16, --light-blue-40) from wallet src/scss/themes.scss are defined on the component root. Identicon via the pinned @nimiq/iqons@1.6.0 jsdelivr recipe (registry identicon component). Component chrome: root gets padding-bottom:9rem to reserve space for the CTA tooltip (in the wallet it overlays the transaction list); tooltip-box positioned inline (top:100%; left:50%; translate(-50%,1rem)) replacing the upstream JS positioning. 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).",
|
|
67
|
+
"assetFiles": [
|
|
68
|
+
"img/iqons.min.svg"
|
|
69
|
+
]
|
|
70
|
+
}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "account-list",
|
|
3
|
+
"purpose": "Selectable list of accounts — identicon + label + balance rows with hover caret — used as the account chooser in Hub flows (inside AccountSelector).",
|
|
4
|
+
"category": "identity",
|
|
5
|
+
"variants": [
|
|
6
|
+
"vue",
|
|
7
|
+
"html"
|
|
8
|
+
],
|
|
9
|
+
"props": [
|
|
10
|
+
{
|
|
11
|
+
"name": "accounts",
|
|
12
|
+
"type": "AccountInfo[]",
|
|
13
|
+
"required": true,
|
|
14
|
+
"description": "Accounts to list: { userFriendlyAddress, label, balance (luna), walletId?, defaultLabel? }."
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
"name": "disabledAddresses",
|
|
18
|
+
"type": "string[]",
|
|
19
|
+
"default": [],
|
|
20
|
+
"description": "Addresses rendered disabled with an explanatory tooltip."
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
"name": "walletId",
|
|
24
|
+
"type": "string",
|
|
25
|
+
"description": "Fallback wallet id emitted with account-selected when the account has none."
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
"name": "editable",
|
|
29
|
+
"type": "boolean",
|
|
30
|
+
"description": "Render labels as LabelInput fields instead of selectable rows."
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
"name": "decimals",
|
|
34
|
+
"type": "number",
|
|
35
|
+
"description": "Exact decimals for the balance Amount (else min 2 / max 5)."
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
"name": "minBalance",
|
|
39
|
+
"type": "number",
|
|
40
|
+
"description": "Balances render only when set; accounts below it are disabled (insufficient balance)."
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
"name": "disableContracts",
|
|
44
|
+
"type": "boolean",
|
|
45
|
+
"description": "Disable contract entries (no path) with a tooltip."
|
|
46
|
+
},
|
|
47
|
+
{
|
|
48
|
+
"name": "disabled",
|
|
49
|
+
"type": "boolean",
|
|
50
|
+
"description": "Disable the whole list."
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
"name": "tooltipProps",
|
|
54
|
+
"type": "object",
|
|
55
|
+
"description": "Props forwarded to the disabled-row Tooltip."
|
|
56
|
+
}
|
|
57
|
+
],
|
|
58
|
+
"cssFiles": [
|
|
59
|
+
"css/legacy/nimiq-style.min.css"
|
|
60
|
+
],
|
|
61
|
+
"dependsOn": [
|
|
62
|
+
"identicon",
|
|
63
|
+
"amount",
|
|
64
|
+
"tooltip",
|
|
65
|
+
"label-input"
|
|
66
|
+
],
|
|
67
|
+
"npmDeps": [
|
|
68
|
+
"@nimiq/iqons"
|
|
69
|
+
],
|
|
70
|
+
"verified": true,
|
|
71
|
+
"verify": {
|
|
72
|
+
"viewport": {
|
|
73
|
+
"width": 600,
|
|
74
|
+
"height": 400
|
|
75
|
+
},
|
|
76
|
+
"selector": ".account-list",
|
|
77
|
+
"maxDiffPct": 0.5,
|
|
78
|
+
"settleMs": 250
|
|
79
|
+
},
|
|
80
|
+
"notes": "Sample state: 3 enabled rows (Main Account 12 345.6789 NIM / Savings 2500.00 NIM / Pocket Money 49.92 NIM), minBalance set so balances render, list at 420px (SmallPage width). Addresses are synthetic but checksum-valid (IBAN mod-97). Identicons via @nimiq/iqons@1.6.0 pinned on jsdelivr with Iqons.svgPath pointed at iqons.min.svg (same recipe as the identicon component). Static state: identicon scale(0.9), label/balance opacity 0.7, caret hidden (appears on hover with green balance + row highlight). Amount formatting: U+202F narrow no-break space grouping above 4 integer digits. The row content is upstream's Account.vue (layout 'row'); its markup/styles are inlined in the Vue port since Account has no own registry entry. Tooltip/LabelInput only appear for disabled/editable rows (not in 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).",
|
|
81
|
+
"assetFiles": [
|
|
82
|
+
"img/iqons.min.svg"
|
|
83
|
+
]
|
|
84
|
+
}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "account-ring",
|
|
3
|
+
"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.",
|
|
4
|
+
"category": "identity",
|
|
5
|
+
"variants": [
|
|
6
|
+
"vue",
|
|
7
|
+
"html"
|
|
8
|
+
],
|
|
9
|
+
"props": [
|
|
10
|
+
{
|
|
11
|
+
"name": "addresses",
|
|
12
|
+
"type": "String[]",
|
|
13
|
+
"required": false,
|
|
14
|
+
"default": "[]",
|
|
15
|
+
"description": "Up to 6 user-friendly Nimiq addresses. The ring always renders 6 slots; slots beyond addresses.length show the identicon hexagon placeholder."
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
"name": "animate",
|
|
19
|
+
"type": "Boolean",
|
|
20
|
+
"required": false,
|
|
21
|
+
"default": "false",
|
|
22
|
+
"description": "Staggered pop-in animation (500–750ms delays) for each filled identicon slot."
|
|
23
|
+
}
|
|
24
|
+
],
|
|
25
|
+
"cssFiles": [
|
|
26
|
+
"css/legacy/nimiq-style.min.css"
|
|
27
|
+
],
|
|
28
|
+
"dependsOn": [
|
|
29
|
+
"identicon"
|
|
30
|
+
],
|
|
31
|
+
"npmDeps": [
|
|
32
|
+
"@nimiq/iqons"
|
|
33
|
+
],
|
|
34
|
+
"verified": true,
|
|
35
|
+
"verify": {
|
|
36
|
+
"viewport": {
|
|
37
|
+
"width": 400,
|
|
38
|
+
"height": 300
|
|
39
|
+
},
|
|
40
|
+
"selector": ".account-ring",
|
|
41
|
+
"maxDiffPct": 0.5,
|
|
42
|
+
"settleMs": 250
|
|
43
|
+
},
|
|
44
|
+
"notes": "Wraps the identicon component (same @nimiq/iqons@1.6.0 jsdelivr pin in truth and demo). Sample state: 3 fixed valid addresses (NQ07 0000…, NQ21 1111…, NQ35 2222…) → 3 iqons + 3 faint placeholder hexagons. Default size 11.25rem = 90px under nimiq-style's 8px root. Bottom slot (nth-child 3) intentionally overflows the square container by ~0.45rem upstream; element screenshots crop to the .account-ring box identically in truth and demo. 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,22 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "address-display",
|
|
3
|
+
"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.",
|
|
4
|
+
"category": "identity",
|
|
5
|
+
"variants": ["vue", "html"],
|
|
6
|
+
"props": [
|
|
7
|
+
{ "name": "address", "type": "string", "required": true, "description": "The address to display." },
|
|
8
|
+
{ "name": "format", "type": "string", "default": "nimiq", "description": "'nimiq' (9 chunks of 4, uppercase) or 'ethereum' (3 rows of 14 chars)." },
|
|
9
|
+
{ "name": "copyable", "type": "boolean", "default": false, "description": "Wraps the display in a Copyable so clicking copies the address." }
|
|
10
|
+
],
|
|
11
|
+
"cssFiles": ["css/legacy/nimiq-style.min.css"],
|
|
12
|
+
"dependsOn": [],
|
|
13
|
+
"npmDeps": [],
|
|
14
|
+
"verified": true,
|
|
15
|
+
"verify": {
|
|
16
|
+
"viewport": { "width": 600, "height": 400 },
|
|
17
|
+
"selector": ".address-display",
|
|
18
|
+
"maxDiffPct": 0.5,
|
|
19
|
+
"settleMs": 250
|
|
20
|
+
},
|
|
21
|
+
"notes": "Sample state: NQ07 0000... burn address, nimiq format, copyable=false. Fira Mono loaded from Google Fonts (upstream assumes the host app provides it). copyable=true depends on the Copyable component (not ported here); the html/vue variants render the plain div form. ValidationUtils.normalizeAddress from @nimiq/utils is inlined in the Vue port."
|
|
22
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "address-input",
|
|
3
|
+
"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.",
|
|
4
|
+
"category": "form",
|
|
5
|
+
"variants": ["vue", "html"],
|
|
6
|
+
"props": [
|
|
7
|
+
{ "name": "value", "type": "string", "default": "", "description": "The address value, bindable via v-model." },
|
|
8
|
+
{ "name": "autofocus", "type": "boolean", "default": false, "description": "Focus the input on mount." },
|
|
9
|
+
{ "name": "allowNimAddresses", "type": "boolean", "default": true, "description": "Accept Nimiq NQ... addresses." },
|
|
10
|
+
{ "name": "allowEthAddresses", "type": "boolean", "default": false, "description": "Accept Ethereum 0x... addresses (checksummed via js-sha3 keccak_256)." },
|
|
11
|
+
{ "name": "allowDomains", "type": "boolean", "default": false, "description": "Accept domain names (collapses to a single-row input)." }
|
|
12
|
+
],
|
|
13
|
+
"cssFiles": ["css/legacy/nimiq-style.min.css"],
|
|
14
|
+
"dependsOn": [],
|
|
15
|
+
"npmDeps": ["input-format", "js-sha3"],
|
|
16
|
+
"verified": true,
|
|
17
|
+
"verify": {
|
|
18
|
+
"viewport": { "width": 600, "height": 400 },
|
|
19
|
+
"selector": ".address-input",
|
|
20
|
+
"maxDiffPct": 0.5,
|
|
21
|
+
"settleMs": 250
|
|
22
|
+
},
|
|
23
|
+
"notes": "Sample state: filled with valid address 'NQ48 8CKH BA24 2VR3 N249 N8MN J5XX 74DB 5XJ8', unfocused, default props (NIM only) -> 3x3 grid of 4-char blocks (matches the wallet send modal); textarea text is black and each block is colored via a .color-overlay with mix-blend-mode:screen (var(--nimiq-blue) idle, light blue for the selected block in the live component). The live component formats the value as 3 lines ('wwww wwww wwww\\n' template). Empty state (previous sample): no value -> placeholder 'NQ' at 60% opacity in block 1, color overlays rendered but visibility:hidden, grid + vertical block separators unchanged. Fira Mono loaded from Google Fonts (upstream assumes host app provides it). html variant is static visual only (no input-format behavior). Vue port keeps full behavior: input-format and lazy js-sha3 are real npm deps; Clipboard.copy and ValidationUtils.isValidAddress from @nimiq/utils are inlined."
|
|
24
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "amount",
|
|
3
|
+
"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.",
|
|
4
|
+
"category": "payment",
|
|
5
|
+
"variants": ["vue", "html"],
|
|
6
|
+
"props": [
|
|
7
|
+
{ "name": "amount", "type": "number | bigint | BigInteger", "required": true, "description": "Amount in the currency's smallest unit (e.g. luna for NIM)." },
|
|
8
|
+
{ "name": "decimals", "type": "number", "description": "Exact decimals to show; takes precedence over minDecimals/maxDecimals." },
|
|
9
|
+
{ "name": "minDecimals", "type": "number", "default": 2, "description": "Minimum decimals to show (pads with zeros)." },
|
|
10
|
+
{ "name": "maxDecimals", "type": "number", "default": 5, "description": "Maximum decimals to show (rounds)." },
|
|
11
|
+
{ "name": "showApprox", "type": "boolean", "default": false, "description": "Prefix '~ ' when rounding made the displayed value inexact." },
|
|
12
|
+
{ "name": "currency", "type": "string", "default": "nim", "description": "Currency code; rendered uppercase as the ticker (special-cased: tnim→tNIM, mbtc→mBTC, tbtc→tBTC, usdc.e→USDC.e)." },
|
|
13
|
+
{ "name": "currencyDecimals", "type": "number", "default": 5, "description": "Decimals of the currency's smallest unit (5 for NIM/luna, 8 for BTC/sat)." }
|
|
14
|
+
],
|
|
15
|
+
"cssFiles": ["css/legacy/nimiq-style.min.css"],
|
|
16
|
+
"dependsOn": [],
|
|
17
|
+
"npmDeps": [],
|
|
18
|
+
"verified": true,
|
|
19
|
+
"verify": {
|
|
20
|
+
"viewport": { "width": 600, "height": 400 },
|
|
21
|
+
"selector": ".amount",
|
|
22
|
+
"maxDiffPct": 0.5,
|
|
23
|
+
"settleMs": 250
|
|
24
|
+
},
|
|
25
|
+
"notes": "Sample state: 1234567890 luna = 12,345.6789 NIM, minDecimals 2, maxDecimals 5, currency nim. FormattableNumber from @nimiq/utils is inlined as a faithful mini-port in the Vue variant (string-based, precision-loss-free: moveDecimalSeparator, half-up rounding, U+202F narrow no-break space grouping applied only when there are more than 4 integer digits). No npm deps. The .currency span carries the currency code as a class for host styling; upstream itself styles only .amount (nowrap) and .approx::before."
|
|
26
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "amount-input",
|
|
3
|
+
"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.",
|
|
4
|
+
"category": "form",
|
|
5
|
+
"variants": ["vue", "html"],
|
|
6
|
+
"props": [
|
|
7
|
+
{ "name": "value", "type": "number", "default": null, "description": "Amount in the currency's smallest unit (Luna for NIM, i.e. value / 10^decimals is displayed)." },
|
|
8
|
+
{ "name": "maxFontSize", "type": "number", "default": 8, "description": "Maximum font size in rem; the font shrinks below this when the value would overflow the available width." },
|
|
9
|
+
{ "name": "placeholder", "type": "string", "default": "0", "description": "Placeholder shown when empty." },
|
|
10
|
+
{ "name": "vanishing", "type": "boolean", "default": false, "description": "Removes the input's inset border (nq-input .vanishing style)." },
|
|
11
|
+
{ "name": "decimals", "type": "number", "default": 5, "description": "Number of decimals the entered value is parsed with (5 for NIM/Luna)." },
|
|
12
|
+
{ "name": "currency", "type": "string", "default": "nim", "description": "Currency code; rendered as ticker (nim→NIM, tnim→tNIM, mbtc→mBTC, tbtc→tBTC, usdc.e→USDC.e, else uppercased) and applied as a class on the ticker span." }
|
|
13
|
+
],
|
|
14
|
+
"cssFiles": ["css/legacy/nimiq-style.min.css"],
|
|
15
|
+
"dependsOn": [],
|
|
16
|
+
"npmDeps": [],
|
|
17
|
+
"verified": true,
|
|
18
|
+
"verify": {
|
|
19
|
+
"viewport": { "width": 600, "height": 400 },
|
|
20
|
+
"selector": ".amount-input",
|
|
21
|
+
"maxDiffPct": 0.5,
|
|
22
|
+
"settleMs": 250
|
|
23
|
+
},
|
|
24
|
+
"notes": "Sample state: '100.00' NIM entered, unfocused, maxFontSize 8rem. The component's width/font-size auto-fit is inherently JS-driven (upstream measures hidden width-finder spans on every input); truth.html and demo.html both include a minimal script that replicates mounted()+updateWidth() once after fonts load — deterministic for a fixed value. Truth emulates Vue's [data-v-*] scoping on the component CSS because scoped attribute selectors are what let the upstream `input` rule (padding 0 .25rem) beat .nq-input's specificity."
|
|
25
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "amount-with-fee",
|
|
3
|
+
"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.",
|
|
4
|
+
"category": "payment",
|
|
5
|
+
"variants": ["vue", "html"],
|
|
6
|
+
"props": [
|
|
7
|
+
{ "name": "value", "type": "{ amount: number, fee: number, isValid: boolean }", "default": "{ amount: 0, fee: 0, isValid: false }", "description": "v-model object: amount and fee in the currency's smallest unit (luna); isValid is computed and emitted back (amount > 0 && amount + fee <= availableBalance)." },
|
|
8
|
+
{ "name": "availableBalance", "type": "number", "default": 0, "description": "Spendable balance in the smallest unit; entering more shows the insufficient-balance error and red styling." },
|
|
9
|
+
{ "name": "fiatAmount", "type": "number | null", "description": "Optional fiat value of the entered amount; shown as '~<FiatAmount>' when set together with fiatCurrency." },
|
|
10
|
+
{ "name": "fiatCurrency", "type": "string | null", "description": "Fiat currency code for fiatAmount (e.g. 'eur')." },
|
|
11
|
+
{ "name": "currency", "type": "string", "default": "nim", "description": "Crypto currency code; rendered uppercase as the ticker (special-cased: tnim→tNIM, mbtc→mBTC, tbtc→tBTC, usdc.e→USDC.e)." },
|
|
12
|
+
{ "name": "currencyDecimals", "type": "number", "default": 5, "description": "Decimals of the currency's smallest unit (5 for NIM/luna, 8 for BTC/sat)." }
|
|
13
|
+
],
|
|
14
|
+
"cssFiles": ["css/legacy/nimiq-style.min.css"],
|
|
15
|
+
"dependsOn": ["amount", "fiat-amount"],
|
|
16
|
+
"npmDeps": [],
|
|
17
|
+
"verified": true,
|
|
18
|
+
"verify": {
|
|
19
|
+
"viewport": { "width": 600, "height": 400 },
|
|
20
|
+
"selector": ".amount-with-fee",
|
|
21
|
+
"maxDiffPct": 0.5,
|
|
22
|
+
"settleMs": 250
|
|
23
|
+
},
|
|
24
|
+
"notes": "Sample state: amount 10000000 luna (input shows '100'), fee 0, availableBalance 50000000, no fiat — valid, so the fee-section renders empty (min-height 2rem placeholder). Both truth and demo replicate AmountInput's JS width behavior: the input's inline width is set to the rendered width of a hidden measuring span (text + 1.25rem padding) after fonts load; the upstream font-shrink logic (maxFontSize) only kicks in for values wider than the container and is not exercised by the sample. The slot/error/fiat/fee branches are documented in the snippet. Vue port ships AmountWithFee.vue + AmountInput.vue (AmountInput is not a standalone registry component); Amount.vue and FiatAmount.vue are imported from sibling registry components 'amount' and 'fiat-amount' (copy them next to AmountWithFee.vue, see dependsOn). $t is stubbed as identity."
|
|
25
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "app-showcase-card",
|
|
3
|
+
"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.",
|
|
4
|
+
"category": "marketing",
|
|
5
|
+
"variants": ["default", "wide"],
|
|
6
|
+
"props": [],
|
|
7
|
+
"cssFiles": ["app-showcase-card.css"],
|
|
8
|
+
"assetFiles": [
|
|
9
|
+
"img/nimiq-pay-preview.webp",
|
|
10
|
+
"img/nimiq-wallet-preview.webp",
|
|
11
|
+
"logos/official/white/nimiq_signet_white_base_size.svg",
|
|
12
|
+
"logos/official/colored/nimiq_signet_rgb_base_size.svg"
|
|
13
|
+
],
|
|
14
|
+
"dependsOn": [],
|
|
15
|
+
"npmDeps": [],
|
|
16
|
+
"verified": true,
|
|
17
|
+
"verify": {
|
|
18
|
+
"viewport": { "width": 860, "height": 1000 },
|
|
19
|
+
"selector": ".stage",
|
|
20
|
+
"maxDiffPct": 0.5,
|
|
21
|
+
"settleMs": 250
|
|
22
|
+
},
|
|
23
|
+
"notes": "MARKETING component, layout screenshot-calibrated against references/screenshots/nimiq-com/home-card-component.png (standard 'Pay App' card) and home-desktop-full.png THE APPS section (wide 'Nimiq wallet' card). Device mocks are the REAL team-shipped product screenshots (default, not optional): standard card renders assets/img/nimiq-pay-preview.webp (490x916 Nimiq Pay phone shot incl. its own rounded frame, clipped by the card's overflow:hidden bottom edge like the live site) and the wide card renders assets/img/nimiq-wallet-preview.webp (1734x1164 Nimiq Wallet desktop shot, absolutely positioned so it bleeds off the right + bottom card edges). Both originate from nimiq.com's Prismic CDN (raw sweep copies: references/assets/nimiq-com/prismic/Zt7oXRoQrfVKl2hA_NimiqPayPreview.webp and Zt7oXhoQrfVKl2hB_NimiqWalletPreview.webp). Hexagon marks are the official signet SVGs from the team logo pack: white signet (assets/logos/official/white/nimiq_signet_white_base_size.svg) inside the gold chip with the 'Pay' label, and the colored gold signet (assets/logos/official/colored/nimiq_signet_rgb_base_size.svg) shown bare in the wide card exactly like the live site. The chip's gold radial gradient uses the same stops as the official colored signet (#EC991C -> #E9B213). The old CSS-built phone/window mocks and clip-path hexagons were deleted. Snippet references assets as ../../../../assets/<subpath>; nq add copies them into consumer projects at ./nimiq/assets/<subpath>. Self-contained px units (marketing pages don't use the legacy html{font-size:8px} framework); Mulish via Google Fonts. Static markup, no script."
|
|
24
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "backup-banner",
|
|
3
|
+
"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.",
|
|
4
|
+
"category": "feedback",
|
|
5
|
+
"variants": ["vue", "html"],
|
|
6
|
+
"props": [
|
|
7
|
+
{ "name": "variant", "type": "'words' | 'file'", "description": "words = orange text on white with tonal inset border (recovery words not backed up); file = solid orange gradient (login file not saved)" }
|
|
8
|
+
],
|
|
9
|
+
"cssFiles": ["css/legacy/nimiq-style.min.css"],
|
|
10
|
+
"dependsOn": [],
|
|
11
|
+
"npmDeps": [],
|
|
12
|
+
"verified": true,
|
|
13
|
+
"verify": { "viewport": { "width": 600, "height": 130 }, "selector": ".words", "maxDiffPct": 0.5, "settleMs": 250 },
|
|
14
|
+
"notes": "Source: upstream/wallet/src/components/layouts/AccountOverview.vue (.backup-warning block, SCSS expanded; .words variant). Needs wallet theme vars --body-size:2rem and --text-10:rgba(31,35,72,0.1) (from wallet themes.scss) — the snippet CSS defines them on the component root. AlertTriangleIcon + ArrowRightSmallIcon inlined from @nimiq/style icons. .nq-button-pill.orange comes from the legacy framework. Hover slides the arrow right 0.25rem. Verify selector is .words so it crops the same element in truth (.backup-warning.words) and demo (.backup-banner.words). Upstream click handlers (router push to Backup / hub backup()) are app wiring; the Vue port emits 'action'."
|
|
15
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "balance-distribution",
|
|
3
|
+
"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.",
|
|
4
|
+
"category": "data-display",
|
|
5
|
+
"variants": ["vue", "html"],
|
|
6
|
+
"props": [
|
|
7
|
+
{ "name": "balances", "type": "Partial<Record<'nim' | 'btc' | 'usdc' | 'usdt', number>>", "default": "{ nim: 1, btc: 0 }", "description": "Fiat value per currency; each arc's length is the currency's share of the total. The keys decide which currencies appear (legend order: nim, btc, usdc, usdt; zero balances sort last). Upstream computes this from the Address/BtcAddress/PolygonAddress/Staking stores and Fiat exchange rates — the port exposes it as a prop." }
|
|
8
|
+
],
|
|
9
|
+
"cssFiles": ["css/legacy/nimiq-style.min.css"],
|
|
10
|
+
"dependsOn": [],
|
|
11
|
+
"npmDeps": [],
|
|
12
|
+
"verified": true,
|
|
13
|
+
"verify": {
|
|
14
|
+
"viewport": { "width": 240, "height": 110 },
|
|
15
|
+
"selector": ".balance-distribution",
|
|
16
|
+
"maxDiffPct": 0.5,
|
|
17
|
+
"settleMs": 250
|
|
18
|
+
},
|
|
19
|
+
"notes": "Source: upstream/wallet/src/components/BalanceDistribution.vue (scoped styles verbatim) + layouts/Sidebar.vue for context (navy --bg-secondary: var(--nimiq-blue) background, 2.5rem vertical margin, Swap pill rendered below it by the sidebar — the pill is a sibling Tooltip/button, not part of this component). Sample state per brief item 6: NIM 100% / BTC 0% — BTC has no balance so only the gold NIM arc renders, as a full circle without gap or line caps (SVG_SIZE 51, STROKE_WIDTH 4, RADIUS 23.5, dasharray '147.655 0', dashoffset = circleStart = 32.914); the BTC legend row is .inactive (children at opacity .3). Currency colors: --nimiq-gold from the legacy framework; --bitcoin-orange #F7931A / --usdc-blue #2775CA / --usdt-green #009393 from wallet themes.scss, defined on the component root in the snippet. The upstream enter/leave arc transitions (transition-group hooks) are ported in the Vue variant; the html snippet is the static render."
|
|
20
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "buttons",
|
|
3
|
+
"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.",
|
|
4
|
+
"category": "form",
|
|
5
|
+
"variants": ["vue", "html"],
|
|
6
|
+
"props": [
|
|
7
|
+
{ "name": "color", "type": "'' | 'light-blue' | 'green' | 'orange' | 'red' | 'gold'", "default": "''", "description": "Color variant class added to .nq-button; empty = default Nimiq blue." },
|
|
8
|
+
{ "name": "inverse", "type": "boolean", "default": "false", "description": "White button with colored text, for use on colored backgrounds." },
|
|
9
|
+
{ "name": "disabled", "type": "boolean", "default": "false", "description": "Disabled state (gray, no shadow, not-allowed cursor)." }
|
|
10
|
+
],
|
|
11
|
+
"cssFiles": ["css/legacy/nimiq-style.min.css"],
|
|
12
|
+
"dependsOn": [],
|
|
13
|
+
"npmDeps": [],
|
|
14
|
+
"verified": true,
|
|
15
|
+
"verify": {
|
|
16
|
+
"viewport": { "width": 600, "height": 600 },
|
|
17
|
+
"selector": "body",
|
|
18
|
+
"maxDiffPct": 0.5,
|
|
19
|
+
"settleMs": 250
|
|
20
|
+
},
|
|
21
|
+
"notes": "Pure CSS-framework component — all styling comes from .nq-button rules in legacy nimiq-style.min.css (gradient backgrounds via --nimiq-*-bg vars, 500px border-radius, uppercase bold text). No scoped CSS exists upstream. html/buttons.css is the upstream src/buttons.css extracted verbatim for standalone use (still requires the --nimiq-* CSS vars). Vue variant is a thin wrapper adding color/inverse/disabled classes."
|
|
22
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "card",
|
|
3
|
+
"purpose": "Standard Nimiq card container (.nq-card) with header, body and footer sections; the base layout block of @nimiq/style used for grouping content.",
|
|
4
|
+
"category": "layout",
|
|
5
|
+
"variants": ["vue", "html"],
|
|
6
|
+
"props": [],
|
|
7
|
+
"cssFiles": ["css/legacy/nimiq-style.min.css"],
|
|
8
|
+
"dependsOn": [],
|
|
9
|
+
"npmDeps": [],
|
|
10
|
+
"verified": true,
|
|
11
|
+
"verify": {
|
|
12
|
+
"viewport": { "width": 600, "height": 420 },
|
|
13
|
+
"selector": ".nq-card",
|
|
14
|
+
"maxDiffPct": 0.5,
|
|
15
|
+
"settleMs": 250
|
|
16
|
+
},
|
|
17
|
+
"notes": "Pure CSS-framework component: all styling comes from .nq-card, .nq-card-header, .nq-card-body, .nq-card-footer in legacy nimiq-style.min.css (white bg via --nimiq-card-bg, 1.25rem radius, shadow, --nimiq-blue text, max-width 75rem). Adjacent-sibling rules matter: .nq-card-header + .nq-card-body gets padding-top 1rem; .nq-card-body + .nq-card-footer gets padding-top 0. Sample state: nq-h1 header 'Card Title', nq-text body, footer with an nq-button. Vue variant is a slot-based convenience wrapper (header/default/footer slots), not an upstream vue-components port — upstream has no Card.vue; the card is markup-only in @nimiq/style demo.html."
|
|
18
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "close-button",
|
|
3
|
+
"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.",
|
|
4
|
+
"category": "form",
|
|
5
|
+
"variants": ["vue", "html"],
|
|
6
|
+
"props": [],
|
|
7
|
+
"cssFiles": ["css/legacy/nimiq-style.min.css"],
|
|
8
|
+
"dependsOn": [],
|
|
9
|
+
"npmDeps": [],
|
|
10
|
+
"verified": true,
|
|
11
|
+
"verify": {
|
|
12
|
+
"viewport": { "width": 200, "height": 200 },
|
|
13
|
+
"selector": ".close-button",
|
|
14
|
+
"maxDiffPct": 0.5,
|
|
15
|
+
"settleMs": 250
|
|
16
|
+
},
|
|
17
|
+
"notes": "Sample state: default resting state (icon at opacity .2, no .top-right positioning). Upstream scoped CSS targets the bare `button` element; the html snippet namespaces it under .close-button. CloseIcon (@nimiq/style close.svg, 24x24) is inlined with class nq-icon. Add class .top-right to absolutely pin it 2rem from the top-right of a positioned parent. Upstream emits a re-emitted 'click' (MouseEvent) and prevents mousedown default to avoid focus-stealing; no props. Requires nimiq-style for .nq-button-s, .nq-icon and --nimiq-ease."
|
|
18
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "consensus-icon",
|
|
3
|
+
"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.",
|
|
4
|
+
"category": "feedback",
|
|
5
|
+
"variants": ["vue", "html"],
|
|
6
|
+
"props": [
|
|
7
|
+
{ "name": "consensus", "type": "'syncing' | 'established' | 'connecting' | 'stalled'", "default": "'syncing'", "description": "Consensus state. Upstream reads this live from the Network store; the port exposes it as a prop." }
|
|
8
|
+
],
|
|
9
|
+
"cssFiles": ["css/legacy/nimiq-style.min.css"],
|
|
10
|
+
"dependsOn": [],
|
|
11
|
+
"npmDeps": [],
|
|
12
|
+
"verified": true,
|
|
13
|
+
"verify": {
|
|
14
|
+
"viewport": { "width": 120, "height": 100 },
|
|
15
|
+
"selector": ".consensus-icon",
|
|
16
|
+
"maxDiffPct": 0.5,
|
|
17
|
+
"settleMs": 250
|
|
18
|
+
},
|
|
19
|
+
"notes": "Sample state: ESTABLISHED (WorldCheckIcon, static) wrapped in an .active parent so the upstream rule `.active > .established` colors it nimiq-green at full opacity — exactly how it appears on the wallet sidebar network button while the network page is open. At rest the icon inherits color from context (sidebar: white at 0.3 opacity). Container is 2.75rem (22px) with -0.125rem margin; the check SVG is 24x22 so it slightly overflows the box, as upstream. The SYNCING state animates a 10x3-frame sprite (consensus-sprite.svg, white strokes — needs a colored/dark background or the AccountOverview brightness/sepia filter); snippet + Vue port inline the sprite as a data URI so no asset file is needed. Selectors are namespaced under .consensus-icon and keyframes prefixed consensus-icon-* for showcase embedding."
|
|
20
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "copyable",
|
|
3
|
+
"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.",
|
|
4
|
+
"category": "data-display",
|
|
5
|
+
"variants": ["vue", "html"],
|
|
6
|
+
"props": [
|
|
7
|
+
{ "name": "text", "type": "string", "required": false, "description": "A specific text to copy to the clipboard on click. Defaults to the element's own innerText (minus the tooltip label)." }
|
|
8
|
+
],
|
|
9
|
+
"cssFiles": ["css/legacy/nimiq-style.min.css"],
|
|
10
|
+
"dependsOn": [],
|
|
11
|
+
"npmDeps": [],
|
|
12
|
+
"verified": true,
|
|
13
|
+
"verify": {
|
|
14
|
+
"viewport": { "width": 600, "height": 400 },
|
|
15
|
+
"selector": ".copyable",
|
|
16
|
+
"maxDiffPct": 0.5,
|
|
17
|
+
"settleMs": 250
|
|
18
|
+
},
|
|
19
|
+
"notes": "Sample state: slot text 'NQ07 0000 ...' in resting (uncopied) state. The .background tint and .tooltip are opacity:0 at rest and only show on hover/focus/.copied. Tooltip label 'Copied' is the en-US i18n string. Clipboard.copy from @nimiq/utils is inlined verbatim in the Vue port (textarea + execCommand with selection restore). Upstream copies 800ms feedback (DISPLAY_TIME); keydown Space/Enter also triggers copy."
|
|
20
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "fiat-amount",
|
|
3
|
+
"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.",
|
|
4
|
+
"category": "payment",
|
|
5
|
+
"variants": ["vue", "html"],
|
|
6
|
+
"props": [
|
|
7
|
+
{ "name": "amount", "type": "number", "required": true, "description": "The fiat amount to display." },
|
|
8
|
+
{ "name": "currency", "type": "string", "required": true, "description": "ISO 4217 currency code, e.g. 'USD', 'EUR'." },
|
|
9
|
+
{ "name": "maxRelativeDeviation", "type": "number", "default": 0.1, "description": "Max allowed relative deviation of the rounded display value; decimals extend until met." },
|
|
10
|
+
{ "name": "locale", "type": "string", "required": false, "description": "Formatting locale, e.g. 'en-US'. Defaults to a locale typical for the currency." },
|
|
11
|
+
{ "name": "hideDecimals", "type": "boolean", "default": false, "description": "Render without decimals. Takes precedence over maxRelativeDeviation." }
|
|
12
|
+
],
|
|
13
|
+
"cssFiles": ["css/legacy/nimiq-style.min.css"],
|
|
14
|
+
"dependsOn": [],
|
|
15
|
+
"npmDeps": [],
|
|
16
|
+
"verified": true,
|
|
17
|
+
"verify": {
|
|
18
|
+
"viewport": { "width": 600, "height": 400 },
|
|
19
|
+
"selector": ".fiat-amount",
|
|
20
|
+
"maxDiffPct": 0.5,
|
|
21
|
+
"settleMs": 250
|
|
22
|
+
},
|
|
23
|
+
"notes": "Sample state: amount=1234.56, currency='USD', locale='en-US' (hardcoded so the render is machine-independent) -> '$1234.56'. The upstream component has NO <style> block; the span inherits font/color from the page (nimiq-style body text). CurrencyInfo and FormattableNumber from @nimiq/utils are inlined in the Vue port (symbol + decimals resolution incl. EXTRA_SYMBOLS/decimal-less lists, and integer grouping with narrow no-break space for >4 integer digits)."
|
|
24
|
+
}
|