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
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "hero-section",
|
|
3
|
+
"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 \u2197' pill, WORKS WITH partner row, and a dotted-globe white arc cresting at the bottom.",
|
|
4
|
+
"category": "marketing",
|
|
5
|
+
"variants": [
|
|
6
|
+
"vue",
|
|
7
|
+
"html"
|
|
8
|
+
],
|
|
9
|
+
"props": [
|
|
10
|
+
{
|
|
11
|
+
"name": "title",
|
|
12
|
+
"type": "string",
|
|
13
|
+
"default": "Universal Money for\\nIndependent Individuals"
|
|
14
|
+
},
|
|
15
|
+
{
|
|
16
|
+
"name": "subtitle",
|
|
17
|
+
"type": "string",
|
|
18
|
+
"default": "In a centralized world, Nimiq gives independence back to you."
|
|
19
|
+
},
|
|
20
|
+
{
|
|
21
|
+
"name": "ctaLabel",
|
|
22
|
+
"type": "string",
|
|
23
|
+
"default": "Create Wallet"
|
|
24
|
+
},
|
|
25
|
+
{
|
|
26
|
+
"name": "ctaHref",
|
|
27
|
+
"type": "string",
|
|
28
|
+
"default": "#"
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
"name": "showPartners",
|
|
32
|
+
"type": "boolean",
|
|
33
|
+
"default": true
|
|
34
|
+
}
|
|
35
|
+
],
|
|
36
|
+
"cssFiles": [
|
|
37
|
+
"hero-section.css"
|
|
38
|
+
],
|
|
39
|
+
"dependsOn": [],
|
|
40
|
+
"npmDeps": [],
|
|
41
|
+
"verified": true,
|
|
42
|
+
"verify": {
|
|
43
|
+
"viewport": {
|
|
44
|
+
"width": 1200,
|
|
45
|
+
"height": 800
|
|
46
|
+
},
|
|
47
|
+
"selector": ".nq-hero-section",
|
|
48
|
+
"maxDiffPct": 0.5,
|
|
49
|
+
"settleMs": 400
|
|
50
|
+
},
|
|
51
|
+
"notes": "REAL-ASSETS-ONLY (2026-06-12): sky = vendored img/gods-light.webp ('Nimiq Gods Rays Background', nimiq.com original) rendered absolute inset-0 with blur(60px) brightness(.8) over a #1F2348 base, exactly like the live site; globe continents = vendored img/world-map.svg (nimiq.com /_ipx/_/assets/images/home-hero/map.svg, 977x362) placed via <image> at x25 y545 1150x426 on the white dome (r1600 circle) with the blue atmosphere halo strokes. Partner row uses the real white CPL/BTC-Lightning/NAKA/Polygon logos (nimiq.com prismic originals, inlined SVG). Floating hexagons + dome halo remain CSS/SVG-built (no shipped asset exists \u2014 the live site draws them in code too). nq add copies assetFiles to ./nimiq/assets/img/; snippet hrefs assume ../../../../assets/ which page builders rewrite to assets/. Alternative generated hexagon-dot globe: scripts/gen-hex-map.mjs.",
|
|
52
|
+
"assetFiles": [
|
|
53
|
+
"img/world-map.svg",
|
|
54
|
+
"img/gods-light.webp"
|
|
55
|
+
]
|
|
56
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "honeycomb-band",
|
|
3
|
+
"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).",
|
|
4
|
+
"category": "marketing",
|
|
5
|
+
"variants": ["vue", "html"],
|
|
6
|
+
"props": [
|
|
7
|
+
{ "name": "ctaLabel", "type": "string", "default": "Community", "description": "Label of the blue pill above the mosaic." },
|
|
8
|
+
{ "name": "ctaHref", "type": "string", "default": "#", "description": "Link target of the pill." },
|
|
9
|
+
{ "name": "youtubeHref", "type": "string", "default": "#", "description": "Link target of the red YouTube hexagon." },
|
|
10
|
+
{ "name": "xHref", "type": "string", "default": "#", "description": "Link target of the black X hexagon." },
|
|
11
|
+
{ "name": "facebookHref", "type": "string", "default": "#", "description": "Link target of the blue Facebook hexagon." }
|
|
12
|
+
],
|
|
13
|
+
"cssFiles": ["honeycomb-band.css"],
|
|
14
|
+
"assetFiles": [
|
|
15
|
+
"img/bg-hexagons.svg",
|
|
16
|
+
"logos/nimiq-icons-logos/logos-youtube-mono.svg",
|
|
17
|
+
"logos/nimiq-icons-logos/logos-twitter-mono.svg",
|
|
18
|
+
"logos/nimiq-icons-logos/logos-facebook-mono.svg"
|
|
19
|
+
],
|
|
20
|
+
"dependsOn": [],
|
|
21
|
+
"npmDeps": [],
|
|
22
|
+
"verified": true,
|
|
23
|
+
"verify": {
|
|
24
|
+
"viewport": { "width": 1200, "height": 700 },
|
|
25
|
+
"selector": ".nq-honeycomb-band",
|
|
26
|
+
"maxDiffPct": 0.5,
|
|
27
|
+
"settleMs": 300
|
|
28
|
+
},
|
|
29
|
+
"notes": "MARKETING component. Band background is the REAL nimiq.com asset assets/img/bg-hexagons.svg (2795x544 fading honeycomb, currentColor hexagons at .01-.06 opacity), swept from www.nimiq.com inline CSS as custom--bg-hexagons (references/assets/nimiq-com/css-inline/custom--bg-hexagons.svg). Rendered 1:1 as a CSS alpha mask filled with currentColor (site text navy #1F2348) — the same currentColor mechanism the live page uses — centered and clipped at the section edges. The live mosaic is lazy-loaded and did not render in references/screenshots/nimiq-com/home-desktop-full.png, so the foreground composition (three social hexagons + pill) follows references/supporting-elements-brief-2026-06-11.md item 9. Social hexagon shape = the hexagon path extracted verbatim from bg-hexagons.svg (one lattice cell, viewBox 45.5 248 124 110); the hexagons sit on exact lattice cells of the background (column step 107.5px, row step 124px, half-offset 62px; cells (967.5,303) YouTube, (1827.5,303) X, (1935,241) Facebook). Social glyphs are the REAL nimiq-icons mono logos from assets/logos/nimiq-icons-logos/ (logos-youtube-mono.svg, logos-twitter-mono.svg = the X glyph, logos-facebook-mono.svg — the same icon set nimiq.com inlines as nimiq--logos-*-mono), applied as white CSS masks. Pill uses the nimiq-style light-blue gradient radial-gradient(100% 100% at bottom right, #265DD7, #0582CA), calibrated against the 'Community →' pill in home-desktop-full.png. Asset url()s are ../../../../assets/… relative to the snippet; nq add copies them to ./nimiq/assets/… in consumer projects. Mulish via Google Fonts; deterministic, no JS."
|
|
30
|
+
}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "identicon",
|
|
3
|
+
"purpose": "Nimiq identicon avatar — a deterministic hexagonal avatar generated from a Nimiq address via @nimiq/iqons; shows a hexagon placeholder for missing/invalid addresses.",
|
|
4
|
+
"category": "identity",
|
|
5
|
+
"variants": [
|
|
6
|
+
"vue",
|
|
7
|
+
"html"
|
|
8
|
+
],
|
|
9
|
+
"props": [
|
|
10
|
+
{
|
|
11
|
+
"name": "address",
|
|
12
|
+
"type": "String",
|
|
13
|
+
"required": false,
|
|
14
|
+
"description": "User-friendly Nimiq address (e.g. 'NQ07 0000 ...'). Invalid or missing addresses render the dark hexagon placeholder."
|
|
15
|
+
}
|
|
16
|
+
],
|
|
17
|
+
"cssFiles": [
|
|
18
|
+
"css/legacy/nimiq-style.min.css"
|
|
19
|
+
],
|
|
20
|
+
"dependsOn": [],
|
|
21
|
+
"npmDeps": [
|
|
22
|
+
"@nimiq/iqons"
|
|
23
|
+
],
|
|
24
|
+
"verified": true,
|
|
25
|
+
"verify": {
|
|
26
|
+
"viewport": {
|
|
27
|
+
"width": 400,
|
|
28
|
+
"height": 300
|
|
29
|
+
},
|
|
30
|
+
"selector": ".identicon",
|
|
31
|
+
"maxDiffPct": 0.5,
|
|
32
|
+
"settleMs": 250
|
|
33
|
+
},
|
|
34
|
+
"notes": "Renders via @nimiq/iqons@1.6.0 pinned on jsdelivr in both truth and demo; Iqons.svgPath must point at iqons.min.svg (the component normally resolves it via webpack file-loader). The generated data URL embeds a random clip-path id but is pixel-identical across runs. Upstream fixes width:10rem; sample state overrides to 128px at page level. ValidationUtils.normalizeAddress/isValidAddress from @nimiq/utils@0.11.1 are inlined in the Vue port. 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).",
|
|
35
|
+
"assetFiles": [
|
|
36
|
+
"img/iqons.min.svg"
|
|
37
|
+
]
|
|
38
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "label-input",
|
|
3
|
+
"purpose": "A self-sizing text input for naming things (addresses, accounts), styled as an nq-input whose width grows and shrinks with its content.",
|
|
4
|
+
"category": "form",
|
|
5
|
+
"variants": ["vue", "html"],
|
|
6
|
+
"props": [
|
|
7
|
+
{ "name": "value", "type": "string", "default": "", "description": "The label text, bindable via v-model (emits 'input' on typing, 'changed' on blur/submit)." },
|
|
8
|
+
{ "name": "maxBytes", "type": "number", "default": null, "description": "Maximum value length in UTF-8 bytes; input exceeding it is rejected (previous value is kept)." },
|
|
9
|
+
{ "name": "placeholder", "type": "string", "default": "Name your address", "description": "Placeholder text shown when empty (also defines the empty-state width)." },
|
|
10
|
+
{ "name": "vanishing", "type": "boolean", "default": false, "description": "Removes the input's inset border (nq-input 'vanishing' style)." },
|
|
11
|
+
{ "name": "disabled", "type": "boolean", "default": false, "description": "Disables the input and its hover effects." }
|
|
12
|
+
],
|
|
13
|
+
"cssFiles": ["css/legacy/nimiq-style.min.css"],
|
|
14
|
+
"dependsOn": [],
|
|
15
|
+
"npmDeps": [],
|
|
16
|
+
"verified": true,
|
|
17
|
+
"verify": {
|
|
18
|
+
"viewport": { "width": 600, "height": 200 },
|
|
19
|
+
"selector": ".label-input",
|
|
20
|
+
"maxDiffPct": 0.5,
|
|
21
|
+
"settleMs": 250
|
|
22
|
+
},
|
|
23
|
+
"notes": "Sample state: value 'Savings Account', unfocused, default props. The input width is set by script (replicating updateWidth(): measured value width + fontSize / 3), since upstream computes it in JS from hidden width-finder spans. Upstream's i18n default placeholder $t('Name your address') is hardcoded to its English string. Utf8Tools (stringToUtf8ByteArray, truncateToUtf8ByteLength) from @nimiq/utils are inlined in the Vue port via TextEncoder/TextDecoder."
|
|
24
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "loading-spinner",
|
|
3
|
+
"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.",
|
|
4
|
+
"category": "feedback",
|
|
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": 160 },
|
|
13
|
+
"selector": ".loading-spinner",
|
|
14
|
+
"maxDiffPct": 0.5,
|
|
15
|
+
"settleMs": 250
|
|
16
|
+
},
|
|
17
|
+
"notes": "Sample state: default size (54x48 viewBox '0 0 54 48') on white, color inherited from body (nimiq-blue). Animation is infinite; the verify harness disables animations, which freezes both paths at their CSS-specified stroke-dashoffset (-40.5 big / 13 small — identical to the 0% keyframes). Upstream uses #big-hex/#small-hex ids; the HTML snippet uses classes and prefixed keyframe names (loading-spinner-big-hex/-small-hex) so multiple instances and showcase embedding stay valid. Size via the height/width attributes or CSS; color via the color property."
|
|
18
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "page-body",
|
|
3
|
+
"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.",
|
|
4
|
+
"category": "layout",
|
|
5
|
+
"variants": ["vue", "html"],
|
|
6
|
+
"props": [],
|
|
7
|
+
"cssFiles": ["css/legacy/nimiq-style.min.css"],
|
|
8
|
+
"dependsOn": ["small-page", "page-header"],
|
|
9
|
+
"npmDeps": [],
|
|
10
|
+
"verified": true,
|
|
11
|
+
"verify": {
|
|
12
|
+
"viewport": { "width": 500, "height": 700 },
|
|
13
|
+
"selector": ".small-page",
|
|
14
|
+
"maxDiffPct": 0.5,
|
|
15
|
+
"settleMs": 250
|
|
16
|
+
},
|
|
17
|
+
"notes": "PageBody is a pure slot container (no props, no logic). Demo renders it in its natural habitat: a SmallPage with a PageHeader 'Settings' and two nq-text paragraphs. Styling comes almost entirely from the legacy framework's .nq-card-body rules (padding 4rem, padding-top 1rem after .nq-card-header, first/last child margin trimming); the component itself only adds flex-grow:1 and overflow-y:auto."
|
|
18
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "page-footer",
|
|
3
|
+
"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.",
|
|
4
|
+
"category": "layout",
|
|
5
|
+
"variants": ["vue", "html"],
|
|
6
|
+
"props": [],
|
|
7
|
+
"cssFiles": ["css/legacy/nimiq-style.min.css"],
|
|
8
|
+
"dependsOn": ["small-page"],
|
|
9
|
+
"npmDeps": [],
|
|
10
|
+
"verified": true,
|
|
11
|
+
"verify": {
|
|
12
|
+
"viewport": { "width": 500, "height": 700 },
|
|
13
|
+
"selector": ".small-page",
|
|
14
|
+
"maxDiffPct": 0.5,
|
|
15
|
+
"settleMs": 250
|
|
16
|
+
},
|
|
17
|
+
"notes": "PageFooter is a pure slot container: .page-footer.nq-card-footer. The upstream scoped '>>>' deep selector (.page-footer >>> .nq-button) is flattened to a plain descendant selector in the HTML variant and :deep() in the Vue 3 port. Sample state renders it inside a SmallPage with one light-blue 'Continue' nq-button. With only a footer as card child (no PageBody), the footer sits at the top of the card — in real layouts PageBody flex-grows to push it down."
|
|
18
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "page-header",
|
|
3
|
+
"purpose": "Card header for Nimiq page flows: centered title, optional back arrow, optional step progress indicator. Used at the top of a SmallPage.",
|
|
4
|
+
"category": "layout",
|
|
5
|
+
"variants": ["vue", "html"],
|
|
6
|
+
"props": [
|
|
7
|
+
{ "name": "backArrow", "type": "boolean", "default": false, "description": "Show a back arrow on the left; emits 'back' on click" },
|
|
8
|
+
{ "name": "progressIndicator", "type": "boolean", "default": false, "description": "Show the step progress bar across the top of the card" },
|
|
9
|
+
{ "name": "numberSteps", "type": "number", "default": 6, "description": "Total number of steps in the progress indicator" },
|
|
10
|
+
{ "name": "step", "type": "number", "default": 1, "description": "Current step (1-based); steps <= step are highlighted" }
|
|
11
|
+
],
|
|
12
|
+
"cssFiles": ["css/legacy/nimiq-style.min.css"],
|
|
13
|
+
"dependsOn": [],
|
|
14
|
+
"npmDeps": [],
|
|
15
|
+
"verified": true,
|
|
16
|
+
"verify": {
|
|
17
|
+
"viewport": { "width": 500, "height": 700 },
|
|
18
|
+
"selector": ".small-page",
|
|
19
|
+
"maxDiffPct": 0.5,
|
|
20
|
+
"settleMs": 250
|
|
21
|
+
},
|
|
22
|
+
"notes": "Sample state: inside a SmallPage, title 'Send Transaction', backArrow=true, progressIndicator=true, 6 steps, step 3. ArrowLeftIcon (arrow-left.svg from @nimiq/style) is inlined. $t stubbed to identity ('Go back')."
|
|
23
|
+
}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "payment-info-line",
|
|
3
|
+
"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.",
|
|
4
|
+
"category": "payment",
|
|
5
|
+
"variants": [
|
|
6
|
+
"vue",
|
|
7
|
+
"html"
|
|
8
|
+
],
|
|
9
|
+
"props": [
|
|
10
|
+
{
|
|
11
|
+
"name": "cryptoAmount",
|
|
12
|
+
"type": "{ amount: number | bigint | BigInteger, currency: string, decimals: number }",
|
|
13
|
+
"required": true,
|
|
14
|
+
"description": "Amount to pay in the currency's smallest unit, with the currency code and its decimals (e.g. 5 for NIM)."
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
"name": "fiatAmount",
|
|
18
|
+
"type": "{ amount: number, currency: string }",
|
|
19
|
+
"description": "Optional fiat value (base unit, e.g. Euro). When set, a fiat line is shown under the crypto amount with a price-breakdown tooltip on hover/click."
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
"name": "fiatApiProvider",
|
|
23
|
+
"type": "'CoinGecko' | 'CryptoCompare'",
|
|
24
|
+
"default": "CoinGecko",
|
|
25
|
+
"description": "Fiat API used to fetch the reference exchange rate for rate-deviation warnings."
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
"name": "vendorMarkup",
|
|
29
|
+
"type": "number",
|
|
30
|
+
"description": "Vendor crypto markup (>= -1) as a fraction, e.g. .05 for +5%; shown in the price-breakdown tooltip."
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
"name": "networkFee",
|
|
34
|
+
"type": "number | bigint | BigInteger",
|
|
35
|
+
"description": "Suggested network fee in the smallest unit; shown in the price-breakdown tooltip."
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
"name": "origin",
|
|
39
|
+
"type": "string",
|
|
40
|
+
"required": true,
|
|
41
|
+
"description": "Origin URL of the shop; the part after '://' is shown as the recipient label."
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
"name": "address",
|
|
45
|
+
"type": "string",
|
|
46
|
+
"description": "Recipient address; renders an Identicon when it is a valid Nimiq address and no shopLogoUrl is given."
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
"name": "shopLogoUrl",
|
|
50
|
+
"type": "string",
|
|
51
|
+
"description": "Shop logo image; takes precedence over the identicon."
|
|
52
|
+
},
|
|
53
|
+
{
|
|
54
|
+
"name": "startTime",
|
|
55
|
+
"type": "number",
|
|
56
|
+
"description": "Timestamp when the payment request was created; together with endTime enables the countdown timer."
|
|
57
|
+
},
|
|
58
|
+
{
|
|
59
|
+
"name": "endTime",
|
|
60
|
+
"type": "number",
|
|
61
|
+
"description": "Timestamp when the payment request expires."
|
|
62
|
+
},
|
|
63
|
+
{
|
|
64
|
+
"name": "theme",
|
|
65
|
+
"type": "'normal' | 'inverse'",
|
|
66
|
+
"default": "normal",
|
|
67
|
+
"description": "'inverse' renders white text/icons for dark backgrounds."
|
|
68
|
+
}
|
|
69
|
+
],
|
|
70
|
+
"cssFiles": [
|
|
71
|
+
"css/legacy/nimiq-style.min.css"
|
|
72
|
+
],
|
|
73
|
+
"dependsOn": [
|
|
74
|
+
"amount",
|
|
75
|
+
"fiat-amount",
|
|
76
|
+
"tooltip",
|
|
77
|
+
"identicon"
|
|
78
|
+
],
|
|
79
|
+
"npmDeps": [
|
|
80
|
+
"@nimiq/utils",
|
|
81
|
+
"@nimiq/iqons"
|
|
82
|
+
],
|
|
83
|
+
"verified": true,
|
|
84
|
+
"verify": {
|
|
85
|
+
"viewport": {
|
|
86
|
+
"width": 600,
|
|
87
|
+
"height": 300
|
|
88
|
+
},
|
|
89
|
+
"selector": ".payment-info-line",
|
|
90
|
+
"maxDiffPct": 0.5,
|
|
91
|
+
"settleMs": 400
|
|
92
|
+
},
|
|
93
|
+
"notes": "Sample state: 199.6 NIM (19960000 luna) / 2.99 EUR to shop.nimiq.com (identicon for burn address NQ07 0000..., pinned @nimiq/iqons@1.6.0 CDN), timer frozen at 10 of 15 minutes left (progress 1/3, countdown '10', circle dash values hand-computed for radius 12, fullCircleLength 2π·12). Tooltips closed; arrow-runway arrow rests at opacity 0 (screenshots disable the infinite animation). The .payment-info-line wrapper is the 420px SmallPage width; upstream root class is .info-line. Cascade quirk reproduced from upstream: Account's '.row .label:not(.editable)' (specificity 0,4,0) beats PaymentInfoLine's deep '.account .label' padding-left .75rem, so the label padding is effectively 1rem; ties (font-weight/mask-image/identicon size) go to PaymentInfoLine via injection order — the snippet CSS preserves this rule order, don't reorder. Vue port ships PaymentInfoLine.vue + minimal inline Account.vue (no editable/cashlink) and Timer.vue (radius snaps instead of tweening, simplified update interval); Amount.vue, FiatAmount.vue, Tooltip.vue, Identicon.vue come from sibling registry components (see dependsOn). getExchangeRates (rate-deviation warning) uses the real @nimiq/utils npm package; failures just suppress the warning. $t stubbed as identity; upstream's :container=\"$parent\" became a container prop. 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,21 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "price-chart",
|
|
3
|
+
"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.",
|
|
4
|
+
"category": "data-display",
|
|
5
|
+
"variants": ["vue", "html"],
|
|
6
|
+
"props": [
|
|
7
|
+
{ "name": "currency", "type": "string", "default": "'nim'", "description": "Crypto ticker shown bottom-left (rendered uppercase). Upstream: CryptoCurrency enum ('nim' | 'btc' | ...)." },
|
|
8
|
+
{ "name": "price", "type": "number", "default": "0.000501", "description": "Current fiat price. Formatted like @nimiq/vue-components FiatAmount with maxRelativeDeviation 0.001 (decimals grow until the rounded value is within 0.1%)." },
|
|
9
|
+
{ "name": "fiatCurrency", "type": "string", "default": "'usd'", "description": "Fiat currency code for price formatting." },
|
|
10
|
+
{ "name": "change", "type": "number", "default": "0.001", "description": "Relative price change over the time range (0.001 = +0.1%). Positive renders green with a CSS '+' prefix; upstream styles only .positive (negative stays 60% white)." },
|
|
11
|
+
{ "name": "points", "type": "{ x: number, y: number }[]", "default": "18-point sample NIM series", "description": "History points, normalized to the box by the upstream LineChart algorithm (cubic smoothing, factor 0.2). Upstream samples 18 points from the fiat history API." },
|
|
12
|
+
{ "name": "showTimespanLabel", "type": "boolean", "default": "true", "description": "Show the '24H' pill (upstream: true for the first sidebar chart, false for the BTC one below it). Click emits 'timespan'." },
|
|
13
|
+
{ "name": "timeRange", "type": "'24h' | '7d'", "default": "'24h'", "description": "Label text for the timespan pill." }
|
|
14
|
+
],
|
|
15
|
+
"cssFiles": ["css/legacy/nimiq-style.min.css"],
|
|
16
|
+
"dependsOn": [],
|
|
17
|
+
"npmDeps": [],
|
|
18
|
+
"verified": true,
|
|
19
|
+
"verify": { "viewport": { "width": 280, "height": 220 }, "selector": ".price-chart-widget", "maxDiffPct": 0.5, "settleMs": 250 },
|
|
20
|
+
"notes": "Source: upstream/wallet/src/components/PriceChart.vue + LineChart.vue (scoped CSS verbatim, Vue scoping emulated with data-v attrs in truth), rendered in the wallet sidebar context: Sidebar.vue .price-chart-wrapper/.price-chart rules (height 15rem, padding 1.5rem, timespan moved to 1.5rem/1.5rem — Sidebar's ::v-deep override wins by injection order) on a 24rem-wide navy excerpt (--bg-secondary: var(--nimiq-blue), color white, --padding-sides 1.5rem from App.vue/Sidebar.vue). The .price-chart-widget root stands in for the sidebar; the wrapper's 3rem scroll-fade mask is omitted (it belongs to the full-height scrolling sidebar and would fade the meta row in this exact-height excerpt). Sample state: NIM, $0.000501, +0.1% (green), fixed deterministic 18-point 24h series; path precomputed with LineChart's exact calculatePath (smoothing 0.2, strokeWidth 2.5, viewBox padding 5) for the 144x52 svg box. White line is white at 0.5 stroke-opacity (currentColor), as upstream. Upstream pairs it with a second chart (currency='btc', showTimespanLabel=false) in the same wrapper. Wallet theme vars (--body-size, --small-size, --tiny-label-size) defined on the snippet root."
|
|
21
|
+
}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "qr-code",
|
|
3
|
+
"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.",
|
|
4
|
+
"category": "data-display",
|
|
5
|
+
"variants": ["vue", "html"],
|
|
6
|
+
"props": [
|
|
7
|
+
{
|
|
8
|
+
"name": "data",
|
|
9
|
+
"type": "String",
|
|
10
|
+
"required": true,
|
|
11
|
+
"description": "The data to encode. If falsy, the canvas is not rendered (v-if)."
|
|
12
|
+
},
|
|
13
|
+
{
|
|
14
|
+
"name": "errorCorrection",
|
|
15
|
+
"type": "String",
|
|
16
|
+
"required": false,
|
|
17
|
+
"default": "M",
|
|
18
|
+
"description": "Error correction level per QR spec: 'L' | 'M' | 'H' | 'Q'."
|
|
19
|
+
},
|
|
20
|
+
{
|
|
21
|
+
"name": "radius",
|
|
22
|
+
"type": "Number",
|
|
23
|
+
"required": false,
|
|
24
|
+
"default": 0.5,
|
|
25
|
+
"description": "Roundness of QR modules, 0–0.5. Recommended: 0.5."
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
"name": "fill",
|
|
29
|
+
"type": "String | LinearGradient | RadialGradient",
|
|
30
|
+
"required": false,
|
|
31
|
+
"default": "radial-gradient [1,1,0,1,1,√2] #265DD7 → #0582CA",
|
|
32
|
+
"description": "Fill of the QR modules — hex color string or qr-creator gradient descriptor. Default is the Nimiq light-blue radial gradient (equivalent to nimiq-light-blue-bg)."
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
"name": "background",
|
|
36
|
+
"type": "String | null",
|
|
37
|
+
"required": false,
|
|
38
|
+
"default": null,
|
|
39
|
+
"description": "Background color (hex) or null for transparent."
|
|
40
|
+
},
|
|
41
|
+
{
|
|
42
|
+
"name": "size",
|
|
43
|
+
"type": "Number",
|
|
44
|
+
"required": false,
|
|
45
|
+
"default": 240,
|
|
46
|
+
"description": "Width and height of the QR code in pixels (canvas pixels; the canvas has no devicePixelRatio scaling)."
|
|
47
|
+
}
|
|
48
|
+
],
|
|
49
|
+
"cssFiles": ["css/legacy/nimiq-style.min.css"],
|
|
50
|
+
"dependsOn": [],
|
|
51
|
+
"npmDeps": ["qr-creator"],
|
|
52
|
+
"verified": true,
|
|
53
|
+
"verify": {
|
|
54
|
+
"viewport": { "width": 600, "height": 400 },
|
|
55
|
+
"selector": "canvas",
|
|
56
|
+
"maxDiffPct": 0.5,
|
|
57
|
+
"settleMs": 250
|
|
58
|
+
},
|
|
59
|
+
"notes": "Upstream QrCode.vue has no <style> block — the component is a bare <canvas class=\"qr-code\">, all rendering done by qr-creator (pinned qr-creator@1.0.0, the only published version). Sample state: data 'nimiq:NQ07000000000000000000000000000000000000', size 240, all other props at upstream defaults. qr-creator sets canvas.width/height = size with no devicePixelRatio handling, so the QR renders at CSS-pixel resolution. The Vue port keeps the upstream toDataUrl() helper as an exposed method."
|
|
60
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "search-bar",
|
|
3
|
+
"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.",
|
|
4
|
+
"category": "form",
|
|
5
|
+
"variants": ["vue", "html"],
|
|
6
|
+
"props": [
|
|
7
|
+
{ "name": "value", "type": "string", "default": "", "description": "The search query, bindable via v-model (modelValue/update:modelValue in the Vue 3 port)." }
|
|
8
|
+
],
|
|
9
|
+
"cssFiles": ["css/legacy/nimiq-style.min.css"],
|
|
10
|
+
"dependsOn": [],
|
|
11
|
+
"npmDeps": [],
|
|
12
|
+
"verified": true,
|
|
13
|
+
"verify": {
|
|
14
|
+
"viewport": { "width": 480, "height": 120 },
|
|
15
|
+
"selector": ".search-bar",
|
|
16
|
+
"maxDiffPct": 0.5,
|
|
17
|
+
"settleMs": 250
|
|
18
|
+
},
|
|
19
|
+
"notes": "Source: upstream/wallet/src/components/SearchBar.vue (+ CrossCloseButton.vue, inlined in the Vue port). Sample state: resting — empty value, unfocused, placeholder 'Search transactions' (the upstream ResizeObserver picks that string for container widths >210px and non-expanded max-width), magnifier icon at opacity 0.4, no cross button, max-width 'var(--default-sb-width)' = clamp(5.5rem, 100%, 30rem). Theme vars from wallet themes.scss defined on the root: --text-16/--text-22 (inset 1.5px pill border, hover), --light-blue-40 (focus border), --body-size: 2rem. --attr-duration/--nimiq-ease come from the legacy framework CSS. The upstream svg has no viewBox/size attributes; CSS sizes it to 1.75rem, exactly as in the wallet."
|
|
20
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "select-bar",
|
|
3
|
+
"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.",
|
|
4
|
+
"category": "form",
|
|
5
|
+
"variants": ["vue", "html"],
|
|
6
|
+
"props": [
|
|
7
|
+
{ "name": "name", "type": "string", "required": false, "description": "The radio group's name attribute, shared by all option inputs." },
|
|
8
|
+
{ "name": "options", "type": "SelectBarOption[]", "required": false, "description": "Options as { color, value, text, index }. color is a nimiq-style bg class (e.g. 'nq-green-bg'), index defines the order, value is emitted on change." },
|
|
9
|
+
{ "name": "selectedValue", "type": "number", "required": false, "description": "value of the initially selected option. Defaults to the first option (lowest index)." }
|
|
10
|
+
],
|
|
11
|
+
"cssFiles": ["css/legacy/nimiq-style.min.css"],
|
|
12
|
+
"dependsOn": [],
|
|
13
|
+
"npmDeps": [],
|
|
14
|
+
"verified": true,
|
|
15
|
+
"verify": {
|
|
16
|
+
"viewport": { "width": 600, "height": 200 },
|
|
17
|
+
"selector": ".select-bar",
|
|
18
|
+
"maxDiffPct": 0.5,
|
|
19
|
+
"settleMs": 250
|
|
20
|
+
},
|
|
21
|
+
"notes": "Sample state: fee selector name='fee' with options free (nq-light-blue-bg, value 0), standard (nq-green-bg, value 1), express (nq-gold-bg, value 2); selectedValue=1 so 'standard' (middle) is selected — free+standard render nq-green-bg, express renders nq-highlight-bg. $t stubbed as identity (texts come pre-translated through the options prop upstream). Emits 'changed' with the option's value. Color classes (nq-light-blue-bg/nq-green-bg/nq-gold-bg) and --nimiq-highlight-bg come from the legacy nimiq-style CSS; bg classes also flip the label text to white via the stylesheet's later .nq-*-bg{color:var(--nimiq-white)} rule. The HTML snippet is interactive: each label carries its option color in data-color and a scoped inline script (root resolved via document.currentScript.previousElementSibling — safe when embedded among other snippets) replicates upstream getColor() on the bubbling 'change' event, so clicking free/standard/express re-colors correctly; listen for 'change' on .select-bar as the plain-HTML equivalent of the Vue 'changed' emit. Resting state is unchanged and pixel-verified."
|
|
22
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "slider-toggle",
|
|
3
|
+
"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.",
|
|
4
|
+
"category": "form",
|
|
5
|
+
"variants": ["vue", "html"],
|
|
6
|
+
"props": [
|
|
7
|
+
{ "name": "name", "type": "string", "required": true, "description": "The radio input group name." },
|
|
8
|
+
{ "name": "value", "type": "string", "required": true, "description": "The currently selected option (slot name). Upstream v-model: emits 'input' on change." },
|
|
9
|
+
{ "name": "type", "type": "'currency' | 'default'", "required": false, "default": "'default'", "description": "Visual style: 'currency' is compact (1.75rem, bold, wide letter-spacing), 'default' is large (2.5rem, semibold)." },
|
|
10
|
+
{ "name": "loading", "type": "boolean", "required": false, "default": "false", "description": "Replaces the options with a LoadingSpinner + 'Loading' label." }
|
|
11
|
+
],
|
|
12
|
+
"cssFiles": ["css/legacy/nimiq-style.min.css"],
|
|
13
|
+
"dependsOn": [],
|
|
14
|
+
"npmDeps": [],
|
|
15
|
+
"verified": true,
|
|
16
|
+
"verify": {
|
|
17
|
+
"viewport": { "width": 500, "height": 200 },
|
|
18
|
+
"selector": ".slider-toggle",
|
|
19
|
+
"maxDiffPct": 0.5,
|
|
20
|
+
"settleMs": 250
|
|
21
|
+
},
|
|
22
|
+
"notes": "Sample state: name='currency', type='currency', two slots nim/btc rendering 'NIM'/'BTC' with first active (matches the upstream storybook currency story). Upstream positions the .active-box via JS (getBoundingClientRect on the active label); truth.html replicates that with a small inline script, while html/demo.html is CSS-only — the active label itself gets the white pill via label:has(input:checked), which is geometrically identical (active-box width = label width, height = label height). Upstream options are dynamic named slots (one label per slot). The Vue port inlines LoadingSpinner.vue (hexagon SVG spinner) instead of importing it."
|
|
23
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "small-page",
|
|
3
|
+
"purpose": "Standard 420x564px white card container (SmallPage) that frames a page of content in Nimiq apps; pairs with PageHeader/PageBody/PageFooter.",
|
|
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": 500, "height": 700 },
|
|
13
|
+
"selector": ".small-page",
|
|
14
|
+
"maxDiffPct": 0.5,
|
|
15
|
+
"settleMs": 250
|
|
16
|
+
},
|
|
17
|
+
"notes": "SmallPage itself is just <div class=\"small-page nq-card\"> + slot; all visual styling (background, radius, shadow, text color) comes from .nq-card in legacy nimiq-style. Scoped CSS fixes size to 52.5rem x 70.5rem (420x564px at the 8px html root font-size set by nimiq-style) and overrides .nq-card margin with 0 1.25rem. Sample state fills the slot with .nq-card-header (.nq-h1) and .nq-card-body (.nq-text) placeholder content."
|
|
18
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "status-alert",
|
|
3
|
+
"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.",
|
|
4
|
+
"category": "feedback",
|
|
5
|
+
"variants": ["vue", "html"],
|
|
6
|
+
"props": [
|
|
7
|
+
{ "name": "type", "type": "'info' | 'success' | 'warning' | 'error' | 'important'", "default": "'info'", "description": "Alert severity; maps to the upstream callout classes note/tip/warning/caution/important (blue/green/orange/red/purple)." },
|
|
8
|
+
{ "name": "title", "type": "string", "default": "''", "description": "Title line text. Defaults to the upstream label for the type (Note/Tip/Warning/Caution/Important). Rendered uppercase with the type icon." },
|
|
9
|
+
{ "name": "message", "type": "string", "default": "''", "description": "Alert body text. The default slot overrides it when provided." }
|
|
10
|
+
],
|
|
11
|
+
"cssFiles": ["css/legacy/nimiq-style.min.css"],
|
|
12
|
+
"dependsOn": [],
|
|
13
|
+
"npmDeps": [],
|
|
14
|
+
"verified": true,
|
|
15
|
+
"verify": {
|
|
16
|
+
"viewport": { "width": 600, "height": 640 },
|
|
17
|
+
"selector": "body",
|
|
18
|
+
"maxDiffPct": 0.5,
|
|
19
|
+
"settleMs": 250
|
|
20
|
+
},
|
|
21
|
+
"notes": "REBUILT 2026-06-11: previous port came from a local example file (icon-chip + navy text + 1px border) which is NOT a real Nimiq pattern. Source of truth now = upstream/nimiq-ui/packages/nimiq-vitepress-theme/src/assets/github-callouts.css (.custom-block.github-alert), the alert pattern nimiq-branding-skill/references/status-alerts.md cites; color tokens inlined as the light-mode halves of light-dark() from upstream/nimiq-ui/packages/nimiq-css/src/css/colors.css. Truth keeps the component CSS verbatim and restores the upstream docs context (html/body 16px; @nimiq/style's 8px rem base would halve the rem padding). Snippet/Vue porting decisions: rem converted to px at the upstream 16px root (padding 1rem 1.25rem -> 16px 20px) and font-size:16px pinned on the root class so the snippet renders identically under @nimiq/style; selectors renamed/namespaced under .nq-status-alert; the upstream docs full-bleed quirk (transform translateX(-8px) + width calc(100%+16px)) is kept for pixel parity — consumers can delete that pair for a non-bleeding alert. The legacy framework's own inline pattern is .nq-notice (colored text only), already covered by upstream apps; this component is the block-level alert. No upstream Vue component exists (callouts are markdown-rendered), so the Vue port is a faithful wrapper (type/title/message props + slot)."
|
|
22
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "status-screen",
|
|
3
|
+
"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.",
|
|
4
|
+
"category": "feedback",
|
|
5
|
+
"variants": ["vue", "html"],
|
|
6
|
+
"props": [
|
|
7
|
+
{ "name": "title", "type": "string", "default": "''", "description": "Headline; shown under the icon for result states and at the top for the loading state." },
|
|
8
|
+
{ "name": "state", "type": "'loading' | 'success' | 'warning' | 'error'", "default": "'loading'", "description": "Which screen to show; success adds the exit-transition slide-up animation." },
|
|
9
|
+
{ "name": "status", "type": "string", "default": "''", "description": "Loading state only: current step text, animates upward on change." },
|
|
10
|
+
{ "name": "lightBlue", "type": "boolean", "default": false, "description": "Use the light-blue gradient instead of navy for the loading background." },
|
|
11
|
+
{ "name": "message", "type": "string", "default": "''", "description": "Body text for warning and error states." },
|
|
12
|
+
{ "name": "mainAction", "type": "string", "default": "''", "description": "Label of the inverse action button on warning/error screens; emits 'main-action'." },
|
|
13
|
+
{ "name": "alternativeAction", "type": "string", "default": "''", "description": "Label of the secondary text link on warning/error screens; emits 'alternative-action'." },
|
|
14
|
+
{ "name": "small", "type": "boolean", "default": false, "description": "Compact layout (smaller title, tighter status spacing)." }
|
|
15
|
+
],
|
|
16
|
+
"cssFiles": ["css/legacy/nimiq-style.min.css"],
|
|
17
|
+
"dependsOn": ["small-page"],
|
|
18
|
+
"npmDeps": [],
|
|
19
|
+
"verified": true,
|
|
20
|
+
"verify": {
|
|
21
|
+
"viewport": { "width": 500, "height": 700 },
|
|
22
|
+
"selector": ".small-page",
|
|
23
|
+
"maxDiffPct": 0.5,
|
|
24
|
+
"settleMs": 250
|
|
25
|
+
},
|
|
26
|
+
"notes": "Source: upstream/hub/src/components/StatusScreen.vue (Hub-internal component, not in @nimiq/vue-components — but it imports LoadingSpinner/CheckmarkIcon/FaceNeutralIcon/FaceSadIcon from there). Sample state: SUCCESS inside a SmallPage, mirroring hub CheckoutTransmission.vue ('Payment successful.'), static end-frame of the success-title-slide animation (Playwright animations:'disabled' fast-forwards it; root has .exit-transition but no .nq-blue-bg since showLoadingBackground is false in result states). Visuals come from .nq-green-bg gradient + white text rules in legacy nimiq-style; checkmark is checkmark.svg from @nimiq/style at font-size 9rem via .nq-icon{width:1em}. Snippet CSS namespaces every scoped selector under .status-screen; keyframe names kept upstream-verbatim (success-title-slide, exit-transition, status-screen-grow-from-bottom-button). Vue port: full Vue 3 script-setup rewrite of the class component — all 4 states, status-line crossfade timers, showLoadingBackground corner-pixel fix, Vue 3 transition class names (-enter-from), icons inlined."
|
|
27
|
+
}
|