nimiq-branding-cli 1.0.0 → 1.1.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/FEATURES.md +113 -0
- package/PRINCIPLES.md +153 -0
- package/README.md +10 -0
- package/bin/nq.js +87 -0
- package/package.json +4 -15
- package/registry/components/account-header/html/account-header.css +343 -0
- package/registry/components/account-header/html/account-header.html +90 -0
- package/registry/components/account-header/html/demo.html +99 -0
- package/registry/components/account-header/vue/AccountHeader.vue +109 -0
- package/registry/components/account-list/html/account-list.css +178 -0
- package/registry/components/account-list/html/account-list.html +61 -0
- package/registry/components/account-list/html/demo.html +79 -0
- package/registry/components/account-list/vue/AccountList.vue +389 -0
- package/registry/components/account-ring/html/account-ring.css +77 -0
- package/registry/components/account-ring/html/account-ring.html +30 -0
- package/registry/components/account-ring/html/demo.html +50 -0
- package/registry/components/account-ring/vue/AccountRing.vue +94 -0
- package/registry/components/address-display/html/address-display.css +49 -0
- package/registry/components/address-display/html/address-display.html +6 -0
- package/registry/components/address-display/html/demo.html +65 -0
- package/registry/components/address-display/vue/AddressDisplay.vue +109 -0
- package/registry/components/address-input/html/address-input.css +128 -0
- package/registry/components/address-input/html/address-input.html +32 -0
- package/registry/components/address-input/html/demo.html +48 -0
- package/registry/components/address-input/vue/AddressInput.vue +648 -0
- package/registry/components/amount/html/amount.css +10 -0
- package/registry/components/amount/html/amount.html +8 -0
- package/registry/components/amount/html/demo.html +29 -0
- package/registry/components/amount/vue/Amount.vue +199 -0
- package/registry/components/amount-input/html/amount-input.css +57 -0
- package/registry/components/amount-input/html/amount-input.html +47 -0
- package/registry/components/amount-input/html/demo.html +116 -0
- package/registry/components/amount-input/vue/AmountInput.vue +186 -0
- package/registry/components/amount-with-fee/html/amount-with-fee.css +71 -0
- package/registry/components/amount-with-fee/html/amount-with-fee.html +33 -0
- package/registry/components/amount-with-fee/html/demo.html +102 -0
- package/registry/components/amount-with-fee/vue/AmountInput.vue +184 -0
- package/registry/components/amount-with-fee/vue/AmountWithFee.vue +126 -0
- package/registry/components/app-showcase-card/html/app-showcase-card.css +127 -0
- package/registry/components/app-showcase-card/html/app-showcase-card.html +41 -0
- package/registry/components/app-showcase-card/html/demo.html +43 -0
- package/registry/components/app-showcase-card/vue/AppShowcaseCard.vue +92 -0
- package/registry/components/backup-banner/html/backup-banner.css +45 -0
- package/registry/components/backup-banner/html/backup-banner.html +13 -0
- package/registry/components/backup-banner/html/demo.html +29 -0
- package/registry/components/backup-banner/vue/BackupBanner.vue +105 -0
- package/registry/components/balance-distribution/html/balance-distribution.css +96 -0
- package/registry/components/balance-distribution/html/balance-distribution.html +26 -0
- package/registry/components/balance-distribution/html/demo.html +32 -0
- package/registry/components/balance-distribution/vue/BalanceDistribution.vue +321 -0
- package/registry/components/buttons/html/buttons.css +443 -0
- package/registry/components/buttons/html/buttons.html +10 -0
- package/registry/components/buttons/html/demo.html +27 -0
- package/registry/components/buttons/vue/NqButton.vue +25 -0
- package/registry/components/card/html/card.css +23 -0
- package/registry/components/card/html/card.html +14 -0
- package/registry/components/card/html/demo.html +25 -0
- package/registry/components/card/vue/NqCard.vue +28 -0
- package/registry/components/close-button/html/close-button.css +32 -0
- package/registry/components/close-button/html/close-button.html +6 -0
- package/registry/components/close-button/html/demo.html +25 -0
- package/registry/components/close-button/vue/CloseButton.vue +44 -0
- package/registry/components/consensus-icon/html/consensus-icon.css +119 -0
- package/registry/components/consensus-icon/html/consensus-icon.html +13 -0
- package/registry/components/consensus-icon/html/demo.html +20 -0
- package/registry/components/consensus-icon/vue/ConsensusIcon.vue +154 -0
- package/registry/components/copyable/html/copyable.css +90 -0
- package/registry/components/copyable/html/copyable.html +18 -0
- package/registry/components/copyable/html/demo.html +111 -0
- package/registry/components/copyable/vue/Copyable.vue +205 -0
- package/registry/components/fiat-amount/html/demo.html +16 -0
- package/registry/components/fiat-amount/html/fiat-amount.css +4 -0
- package/registry/components/fiat-amount/html/fiat-amount.html +5 -0
- package/registry/components/fiat-amount/vue/FiatAmount.vue +282 -0
- package/registry/components/hero-section/html/demo.html +87 -0
- package/registry/components/hero-section/html/hero-section.css +136 -0
- package/registry/components/hero-section/html/hero-section.html +71 -0
- package/registry/components/hero-section/vue/HeroSection.vue +87 -0
- package/registry/components/honeycomb-band/html/demo.html +55 -0
- package/registry/components/honeycomb-band/html/honeycomb-band.css +109 -0
- package/registry/components/honeycomb-band/html/honeycomb-band.html +39 -0
- package/registry/components/honeycomb-band/vue/HoneycombBand.vue +195 -0
- package/registry/components/identicon/html/demo.html +48 -0
- package/registry/components/identicon/html/identicon.css +10 -0
- package/registry/components/identicon/html/identicon.html +21 -0
- package/registry/components/identicon/vue/Identicon.vue +89 -0
- package/registry/components/label-input/html/demo.html +80 -0
- package/registry/components/label-input/html/label-input.css +28 -0
- package/registry/components/label-input/html/label-input.html +32 -0
- package/registry/components/label-input/vue/LabelInput.vue +169 -0
- package/registry/components/loading-spinner/html/demo.html +53 -0
- package/registry/components/loading-spinner/html/loading-spinner.css +45 -0
- package/registry/components/loading-spinner/html/loading-spinner.html +7 -0
- package/registry/components/loading-spinner/vue/LoadingSpinner.vue +53 -0
- package/registry/components/page-body/html/demo.html +51 -0
- package/registry/components/page-body/html/page-body.css +7 -0
- package/registry/components/page-body/html/page-body.html +6 -0
- package/registry/components/page-body/vue/PageBody.vue +19 -0
- package/registry/components/page-footer/html/demo.html +48 -0
- package/registry/components/page-footer/html/page-footer.css +12 -0
- package/registry/components/page-footer/html/page-footer.html +5 -0
- package/registry/components/page-footer/vue/PageFooter.vue +22 -0
- package/registry/components/page-header/html/demo.html +51 -0
- package/registry/components/page-header/html/page-header.css +74 -0
- package/registry/components/page-header/html/page-header.html +18 -0
- package/registry/components/page-header/vue/PageHeader.vue +119 -0
- package/registry/components/payment-info-line/html/demo.html +74 -0
- package/registry/components/payment-info-line/html/payment-info-line.css +340 -0
- package/registry/components/payment-info-line/html/payment-info-line.html +73 -0
- package/registry/components/payment-info-line/vue/Account.vue +185 -0
- package/registry/components/payment-info-line/vue/PaymentInfoLine.vue +477 -0
- package/registry/components/payment-info-line/vue/Timer.vue +319 -0
- package/registry/components/price-chart/html/demo.html +36 -0
- package/registry/components/price-chart/html/price-chart.css +107 -0
- package/registry/components/price-chart/html/price-chart.html +28 -0
- package/registry/components/price-chart/vue/PriceChart.vue +258 -0
- package/registry/components/qr-code/html/demo.html +52 -0
- package/registry/components/qr-code/html/qr-code.css +4 -0
- package/registry/components/qr-code/html/qr-code.html +49 -0
- package/registry/components/qr-code/vue/QrCode.vue +72 -0
- package/registry/components/search-bar/html/demo.html +52 -0
- package/registry/components/search-bar/html/search-bar.css +147 -0
- package/registry/components/search-bar/html/search-bar.html +36 -0
- package/registry/components/search-bar/vue/SearchBar.vue +301 -0
- package/registry/components/select-bar/html/demo.html +47 -0
- package/registry/components/select-bar/html/select-bar.css +35 -0
- package/registry/components/select-bar/html/select-bar.html +40 -0
- package/registry/components/select-bar/vue/SelectBar.vue +89 -0
- package/registry/components/slider-toggle/html/demo.html +92 -0
- package/registry/components/slider-toggle/html/slider-toggle.css +74 -0
- package/registry/components/slider-toggle/html/slider-toggle.html +13 -0
- package/registry/components/slider-toggle/vue/SliderToggle.vue +280 -0
- package/registry/components/small-page/html/demo.html +33 -0
- package/registry/components/small-page/html/small-page.css +10 -0
- package/registry/components/small-page/html/small-page.html +10 -0
- package/registry/components/small-page/vue/SmallPage.vue +23 -0
- package/registry/components/status-alert/html/demo.html +53 -0
- package/registry/components/status-alert/html/status-alert.css +143 -0
- package/registry/components/status-alert/html/status-alert.html +24 -0
- package/registry/components/status-alert/vue/StatusAlert.vue +175 -0
- package/registry/components/status-screen/html/demo.html +49 -0
- package/registry/components/status-screen/html/status-screen.css +225 -0
- package/registry/components/status-screen/html/status-screen.html +25 -0
- package/registry/components/status-screen/vue/StatusScreen.vue +453 -0
- package/registry/components/swap-balance-bar/html/demo.html +100 -0
- package/registry/components/swap-balance-bar/html/swap-balance-bar.css +397 -0
- package/registry/components/swap-balance-bar/html/swap-balance-bar.html +77 -0
- package/registry/components/swap-balance-bar/vue/SwapBalanceBar.vue +961 -0
- package/registry/components/timer/html/demo.html +100 -0
- package/registry/components/timer/html/timer.css +102 -0
- package/registry/components/timer/html/timer.html +92 -0
- package/registry/components/timer/vue/Timer.vue +299 -0
- package/registry/components/toast-notification/html/demo.html +207 -0
- package/registry/components/toast-notification/html/toast-notification.css +153 -0
- package/registry/components/toast-notification/html/toast-notification.html +59 -0
- package/registry/components/toast-notification/vue/ToastNotification.vue +241 -0
- package/registry/components/tooltip/html/demo.html +153 -0
- package/registry/components/tooltip/html/tooltip.css +128 -0
- package/registry/components/tooltip/html/tooltip.html +14 -0
- package/registry/components/tooltip/vue/Tooltip.vue +503 -0
- package/registry/components/transaction-list/html/demo.html +88 -0
- package/registry/components/transaction-list/html/transaction-list.css +244 -0
- package/registry/components/transaction-list/html/transaction-list.html +73 -0
- package/registry/components/transaction-list/vue/TransactionList.vue +125 -0
- package/scripts/capture-misc-refs.mjs +100 -0
package/FEATURES.md
ADDED
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
# Supporting Features Roadmap
|
|
2
|
+
|
|
3
|
+
Interactive widgets/flows across Nimiq's apps and sites that this CLI can scaffold as
|
|
4
|
+
ready-made features (beyond single components). Surveyed 2026-06-11 from live sites +
|
|
5
|
+
upstream sources. Full data: `references/supporting-features.json`.
|
|
6
|
+
|
|
7
|
+
## High priority
|
|
8
|
+
|
|
9
|
+
### Hub onboarding / connect-wallet (signup, login, choose address)
|
|
10
|
+
- **Where:** https://hub.nimiq.com popup via @nimiq/hub-api — source: upstream/hub/src/views/OnboardingSelector.vue, Signup.vue, Login.vue, ChooseAddress.vue, ConnectAccount.vue
|
|
11
|
+
- **Screenshots:** need it
|
|
12
|
+
- The universal 'Connect with Nimiq' flow every third-party app starts with: OnboardingMenu (create account / login / Ledger), IdenticonSelector avatar picker, ChooseAddress address selector. Composes hub components OnboardingMenu.vue, IdenticonSelector.vue, StatusScreen.vue plus @nimiq/vue-components (SmallPage, PageHeader/Body, AccountSelector). A CLI scaffold = drop-in 'connect wallet' button + callback handling.
|
|
13
|
+
- **Built from:** `hub/src/views/OnboardingSelector.vue`, `hub/src/views/ChooseAddress.vue`, `hub/src/components/OnboardingMenu.vue`, `hub/src/components/IdenticonSelector.vue`, `@nimiq/hub-api`, `@nimiq/vue-components AccountSelector`
|
|
14
|
+
|
|
15
|
+
### Checkout / payment flow (Hub checkout)
|
|
16
|
+
- **Where:** https://hub.nimiq.com checkout via hub-api; docs at nimiq.github.io/hub — source: upstream/hub/src/views/Checkout.vue + CheckoutTransmission.vue
|
|
17
|
+
- **Screenshots:** need it
|
|
18
|
+
- Multi-currency payment sheet: currency cards (CheckoutCardNimiq/Bitcoin/Ethereum/External), CheckoutManualPaymentDetails (pay-by-address+QR fallback), PaymentInfoLine + Timer from @nimiq/vue-components, CurrencyInfo, StatusScreen success/error. This is THE merchant-facing feature (woocommerce-gateway-nimiq builds on it). CLI scaffold = 'accept NIM/BTC/ETH payment' page with callback verification.
|
|
19
|
+
- **Built from:** `hub/src/views/Checkout.vue`, `hub/src/components/CheckoutCardNimiq.vue`, `hub/src/components/CheckoutCardBitcoin.vue`, `hub/src/components/CheckoutCardEthereum.vue`, `hub/src/components/CheckoutManualPaymentDetails.vue`, `@nimiq/vue-components PaymentInfoLine + Timer + QrCode`
|
|
20
|
+
|
|
21
|
+
### Cashlink create / manage / claim
|
|
22
|
+
- **Where:** Hub views + wallet entry points — upstream/hub/src/views/CashlinkCreate.vue, CashlinkManage.vue, CashlinkReceive.vue; wallet/src/components/CashlinkButton.vue; github.com/nimiq/cashlink-generator (bulk tool)
|
|
23
|
+
- **Screenshots:** have it (cashlink tx-detail modal in nimiq-branding-skill/screenshots/nimiq-wallet-app/Screenshot 2026-03-13 at 9.42.56 PM.png; create/claim screens still needed)
|
|
24
|
+
- Signature Nimiq feature: send NIM via shareable link, no recipient address needed. Create flow (amount + message + fee), manage (copy/share/cancel link), receive/claim flow with CashlinkSparkle celebration animation. Wallet send modal offers 'Create a Cashlink' when address unavailable; cashlink txs render specially in the tx list. High reuse for tipping, airdrops, promo apps.
|
|
25
|
+
- **Built from:** `hub/src/views/CashlinkCreate.vue`, `hub/src/views/CashlinkManage.vue`, `hub/src/views/CashlinkReceive.vue`, `hub/src/lib/Cashlink.ts`, `hub/src/components/CashlinkSparkle.vue`, `wallet/src/components/CashlinkButton.vue`
|
|
26
|
+
|
|
27
|
+
### Staking calculator
|
|
28
|
+
- **Where:** https://www.nimiq.com/staking-calculator/ (nimiq.com website; not in local upstream clones)
|
|
29
|
+
- **Screenshots:** have it (nimiq-branding-skill/screenshots/staking-calculator/nimiq.com-staking-calculator-desktop.png + -mobile.png)
|
|
30
|
+
- Standalone marketing-grade widget: NIM amount + duration inputs -> projected rewards/APY output, branded slider UI. Self-contained (only needs supply/reward-curve math + current staked ratio from network), making it the easiest high-visual feature to scaffold for any community/validator site.
|
|
31
|
+
- **Built from:** `nimiq.com website widget (no local source)`, `reward-curve math from core-rs-albatross economics`, `validators-api for live staked supply`
|
|
32
|
+
|
|
33
|
+
### Staking flow + validator picker
|
|
34
|
+
- **Where:** wallet.nimiq.com — upstream/wallet/src/components/staking/ (26 components)
|
|
35
|
+
- **Screenshots:** have it partially (staked-balance card + 'NimiqHub Staking 10.1% p.a.' row in nimiq-wallet-app/Screenshot ...9.42.22 PM.png; validator list page still needed)
|
|
36
|
+
- Full multi-page StakingModal wizard: StakingWelcomePage -> StakingValidatorPage (validator list with ValidatorListItem, ValidatorFilter, ValidatorScoreDetails star-ratings, ValidatorIcon/IconStack) -> StakingGraphPage (AmountSlider over balance + reward projection StakingGraph) -> StakingRewardsPage/Chart. Backed by github.com/nimiq/validators-api ('helping stakers choose where to stake'). The validator-picker subcomponent alone is valuable for pool/validator websites (e.g. stakenimiq.com).
|
|
37
|
+
- **Built from:** `wallet/src/components/staking/StakingModal.vue`, `StakingValidatorPage.vue`, `ValidatorListItem.vue`, `ValidatorFilter.vue`, `ValidatorScoreDetails.vue`, `AmountSlider.vue`, `StakingGraph.vue`, `StakingRewardsChart.vue`, `nimiq/validators-api`
|
|
38
|
+
|
|
39
|
+
### QR scan + pay (request links / receive)
|
|
40
|
+
- **Where:** wallet.nimiq.com — upstream/wallet/src/components/modals/ScanQrModal.vue + ReceiveModal.vue; libs github.com/nimiq/qr-scanner (2.9k stars) + qr-creator
|
|
41
|
+
- **Screenshots:** have it (receive modal w/ request-link in ...9.42.34 PM.png; send modal w/ QR-scan entry + cashlink CTA in ...9.42.44 PM.png)
|
|
42
|
+
- Two halves: (1) ScanQrModal using @nimiq/vue-components QrScanner (camera scan, parses nimiq:/bitcoin:/polygon payment URIs and routes to the right send flow); (2) ReceiveModal showing identicon + chunked address + QR + 'Create request link' (amount-encoded payment URI). Both libs are standalone MIT packages, so this scaffolds cleanly into any PoS/payment app (NimiPay, Gateflo).
|
|
43
|
+
- **Built from:** `wallet/src/components/modals/ScanQrModal.vue`, `wallet/src/components/modals/ReceiveModal.vue`, `@nimiq/vue-components QrScanner + QrCode`, `nimiq/qr-scanner`, `nimiq/qr-creator`, `payment URI parser in wallet/src/lib`
|
|
44
|
+
|
|
45
|
+
### Transaction history with fiat conversion + CSV export
|
|
46
|
+
- **Where:** wallet.nimiq.com — upstream/wallet/src/components/TransactionList.vue, TransactionListItem.vue, FiatConvertedAmount.vue, modals/HistoryExportModal.vue
|
|
47
|
+
- **Screenshots:** have it (mobile tx list with fiat values in nimiq-wallet-app/Screenshot ...9.42.22 PM.png)
|
|
48
|
+
- Virtual-scrolled, month-grouped tx list with identicon avatars, contact-label resolution, cashlink/swap badges, historic fiat value per tx (via @nimiq/utils FiatApi rates), search bar, and CSV export modal. Per-currency variants exist (BtcTransactionList, UsdcTransactionList, UsdtTransactionList) sharing the pattern. Any wallet-adjacent or accounting app wants this.
|
|
49
|
+
- **Built from:** `wallet/src/components/TransactionList.vue`, `TransactionListItem.vue`, `FiatConvertedAmount.vue`, `SearchBar.vue`, `modals/TransactionModal.vue`, `modals/HistoryExportModal.vue`, `@nimiq/utils FiatApi`
|
|
50
|
+
|
|
51
|
+
### Identicon generator / avatar picker
|
|
52
|
+
- **Where:** github.com/nimiq/identicons (MIT) + @nimiq/vue-components Identicon.vue + hub IdenticonSelector.vue; reference doc already at nimiq-branding-skill/references/identicons.md
|
|
53
|
+
- **Screenshots:** have it (identicons visible in all wallet screenshots; documented in nimiq-branding-skill/references/identicons.md)
|
|
54
|
+
- Deterministic hexagon avatar from any Nimiq address — the most recognizable Nimiq brand element. Two scaffold targets: plain Identicon renderer (address -> SVG) and the hub's IdenticonSelector 'choose your avatar' onboarding carousel. Tiny dependency, used by literally every Nimiq app.
|
|
55
|
+
- **Built from:** `nimiq/identicons`, `@nimiq/vue-components Identicon.vue + AccountRing.vue`, `hub/src/components/IdenticonSelector.vue`, `wallet IdenticonButton.vue + IdenticonStack.vue`
|
|
56
|
+
|
|
57
|
+
## Medium priority
|
|
58
|
+
|
|
59
|
+
### Swap UI (NIM <-> BTC <-> USDC/USDT via Fastspot)
|
|
60
|
+
- **Where:** wallet.nimiq.com Trade > Swap — upstream/wallet/src/components/swap/ (SwapModal.vue, SwapBalanceBar.vue, SwapAnimation.vue, SwapFeesTooltip.vue, SwapNotification.vue)
|
|
61
|
+
- **Screenshots:** need it (only disabled Swap button visible in ...9.41.06 PM.png)
|
|
62
|
+
- Atomic-swap UI: dual AmountInputs with live quote, draggable SwapBalanceBar showing post-swap balance split, SwapFeesTooltip fee breakdown, full-screen SwapAnimation during HTLC execution, background SwapNotification. Visually excellent but tightly coupled to Fastspot API + @nimiq/fastspot-api + hub setupSwap — scaffold as UI shell with pluggable quote provider. Directly relevant to Hashmark-style apps.
|
|
63
|
+
- **Built from:** `wallet/src/components/swap/SwapModal.vue`, `SwapBalanceBar.vue`, `SwapAnimation.vue`, `SwapFeesTooltip.vue`, `@nimiq/fastspot-api`, `hub setupSwap/RefundSwap views`
|
|
64
|
+
|
|
65
|
+
### Buy/Sell fiat on-ramp (Moonpay, Simplex, Coinify, OASIS bank swap)
|
|
66
|
+
- **Where:** wallet.nimiq.com Buy flow — upstream/wallet/src/components/modals/BuyOptionsModal.vue, BuyCryptoModal.vue, SellCryptoModal.vue, MoonpayModal.vue, SimplexModal.vue, CoinifyModal.vue, TradeModal.vue; OASIS marketing page nimiq.com/oasis
|
|
67
|
+
- **Screenshots:** have it partially (OASIS marketing page nimiq-website/nimiq.com-oasis-desktop+mobile.png; the actual buy-options modal still needed)
|
|
68
|
+
- Provider-chooser pattern: BuyOptionsModal geo-gates providers via useGeoIp + CountrySelector/CountryFlag, then opens provider webview modals (Moonpay/Simplex/Coinify) or the OASIS SEPA bank-swap TradeModal (SwapSepaFundingInstructions, BankCheckInput, KYC components). Scaffold value is the chooser shell + provider-modal pattern; the providers themselves need API keys/contracts, and OASIS availability has been limited — hence medium.
|
|
69
|
+
- **Built from:** `wallet/src/components/modals/BuyOptionsModal.vue`, `MoonpayModal.vue`, `SimplexModal.vue`, `CoinifyModal.vue`, `TradeModal.vue`, `CountrySelector.vue`, `swap/SwapSepaFundingInstructions.vue`, `BankCheckInput.vue`, `kyc/`
|
|
70
|
+
|
|
71
|
+
### Address book / contacts
|
|
72
|
+
- **Where:** wallet.nimiq.com — upstream/wallet/src/components/ContactBook.vue, ContactShortcuts.vue, UsdcContactBook.vue + stores/Contacts.ts
|
|
73
|
+
- **Screenshots:** have it partially (Contacts entry point in send modal screenshot ...9.42.44 PM.png; open contact book still needed)
|
|
74
|
+
- Identicon-driven contact list: add/edit/delete with LabelInput, recent-recipient shortcuts row in the send flow, contact resolution in tx history. Small, self-contained (localStorage store), reusable in any send-money UI.
|
|
75
|
+
- **Built from:** `wallet/src/components/ContactBook.vue`, `ContactShortcuts.vue`, `stores/Contacts.ts`, `@nimiq/vue-components Identicon + LabelInput`, `modals/AddressSelectorModal.vue`
|
|
76
|
+
|
|
77
|
+
### Amount input with live fiat sync
|
|
78
|
+
- **Where:** wallet/src/components/AmountInput.vue + AmountMenu.vue + FiatConvertedAmount.vue; @nimiq/vue-components AmountInput + AmountWithFee + FiatAmount
|
|
79
|
+
- **Screenshots:** need it
|
|
80
|
+
- Auto-scaling NIM amount input with currency-flip (enter in fiat or NIM), max-button, and live conversion line. Foundational sub-widget for send/swap/staking/checkout — worth scaffolding once as a shared primitive since the wallet version is richer than the base vue-components one.
|
|
81
|
+
- **Built from:** `wallet/src/components/AmountInput.vue`, `AmountMenu.vue`, `FiatConvertedAmount.vue`, `@nimiq/vue-components AmountWithFee`, `@nimiq/utils CurrencyInfo + FiatApi`
|
|
82
|
+
|
|
83
|
+
### Network consensus indicator + network map
|
|
84
|
+
- **Where:** wallet.nimiq.com network view — upstream/wallet/src/components/ConsensusIcon.vue, NetworkStats.vue, NetworkMap.vue, NetworkMapPeerList.vue, modals/NetworkInfoModal.vue
|
|
85
|
+
- **Screenshots:** need it
|
|
86
|
+
- Two tiers: (a) ConsensusIcon — small animated connecting/syncing/established indicator every light-client app should show (pairs with @nimiq/core web client); (b) the full maplibre world NetworkMap with peer list + NetworkStats (uses nimiq-ui packages/nimiq-maplibre-styles). Scaffold (a) as high-value default, (b) as optional showpiece.
|
|
87
|
+
- **Built from:** `wallet/src/components/ConsensusIcon.vue`, `NetworkStats.vue`, `NetworkMap.vue`, `NetworkMapPeerList.vue`, `nimiq-ui/packages/nimiq-maplibre-styles`, `stores/Network.ts`
|
|
88
|
+
|
|
89
|
+
## Low priority
|
|
90
|
+
|
|
91
|
+
### Price chart / portfolio balance distribution
|
|
92
|
+
- **Where:** wallet.nimiq.com sidebar — upstream/wallet/src/components/PriceChart.vue, LineChart.vue, BalanceDistribution.vue, AccountBalance.vue
|
|
93
|
+
- **Screenshots:** have it (left sidebar in nimiq-wallet-app/Screenshot ...9.41.06 PM.png and wallet.nimiq.com-desktop.png)
|
|
94
|
+
- Sidebar sparkline price charts (NIM/BTC with 24h delta) and the BalanceDistribution bar splitting portfolio across currencies/addresses. Nice-to-have dashboard garnish; visible in held wallet screenshots.
|
|
95
|
+
- **Built from:** `wallet/src/components/PriceChart.vue`, `LineChart.vue`, `BalanceDistribution.vue`, `AccountBalance.vue`, `stores/Fiat.ts`
|
|
96
|
+
|
|
97
|
+
### Fee selector
|
|
98
|
+
- **Where:** upstream/wallet/src/components/FeeSelector.vue (used in BTC send flow; SendModalFooter for NIM)
|
|
99
|
+
- **Screenshots:** need it
|
|
100
|
+
- Free/standard/express SelectBar with live fee-in-fiat preview. Marginal for NIM (fees ~0, mostly hidden) — really only matters for BTC sends, so low priority for a Nimiq-branding CLI.
|
|
101
|
+
- **Built from:** `wallet/src/components/FeeSelector.vue`, `@nimiq/vue-components SelectBar`, `lib/BitcoinTransactionUtils.ts estimateFees`
|
|
102
|
+
|
|
103
|
+
### Vote / governance UI
|
|
104
|
+
- **Where:** https://nimiq.com/vote — github.com/nimiq/vote (Vue + TypeScript + Pug, MIT)
|
|
105
|
+
- **Screenshots:** need it
|
|
106
|
+
- Community-decision app: choice ranking/weighting UI where vote weight = NIM balance, signed via Hub signMessage/transaction. Niche (only used for occasional community-wide decisions) and the repo is stylistically older (Stylus/Pug), so low priority unless the CLI targets DAO-ish use cases.
|
|
107
|
+
- **Built from:** `nimiq/vote repo (not cloned locally)`, `@nimiq/hub-api signTransaction/chooseAddress`
|
|
108
|
+
|
|
109
|
+
### Browser-wallet onboarding extras (welcome tour, backup nag, testnet faucet)
|
|
110
|
+
- **Where:** upstream/wallet/src/components/modals/WelcomeModal.vue, MigrationWelcomeModal.vue, BackupModal.vue (warning banner visible in screenshots), TestnetFaucet.vue, UpdateNotification.vue
|
|
111
|
+
- **Screenshots:** have it partially (backup warning banner + multisig promo modal in ...9.40.54 PM.png / ...9.41.06 PM.png)
|
|
112
|
+
- Supporting onboarding chrome around the wallet: first-run welcome/tour modal, persistent 'no forgot password — Backup' warning banner, release-notes/update notification, and a testnet faucet widget (handy for any Nimiq dev-demo app the CLI scaffolds). Individually small; bundle as an 'app shell extras' template.
|
|
113
|
+
- **Built from:** `wallet/src/components/modals/WelcomeModal.vue`, `modals/BackupModal.vue`, `TestnetFaucet.vue`, `UpdateNotification.vue`, `AnnouncementBox.vue`, `StatusScreen.vue`
|
package/PRINCIPLES.md
ADDED
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
# The Nimiq Design Principles
|
|
2
|
+
|
|
3
|
+
**This is the soul of this tool.** Every component in the registry — and every NEW thing
|
|
4
|
+
generated with it — must come from these principles, not just resemble their output.
|
|
5
|
+
|
|
6
|
+
Sources: the **NIMIQ Style Guide (October 2018)**, the
|
|
7
|
+
[A New Visual Identity](https://www.nimiq.com/blog/a-new-visual-identity/) blog post,
|
|
8
|
+
[nimiq-style](https://nimiq.github.io/nimiq-style/), and the
|
|
9
|
+
[Nimiq Design Kit](https://nimiq.dev/design-kit).
|
|
10
|
+
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
## Why — the identity
|
|
14
|
+
|
|
15
|
+
> *Nimiq is an Inuit word for an object or force that binds things together.*
|
|
16
|
+
|
|
17
|
+
Nimiq sees itself as **the lowest common denominator at the intersection of payment
|
|
18
|
+
technology and accessible interaction with a blockchain** — and aims for **radical
|
|
19
|
+
simplicity in both technology and design**.
|
|
20
|
+
|
|
21
|
+
The brand persona, derived from team and community (not theory):
|
|
22
|
+
|
|
23
|
+
**Helping & caring · Trustworthy & transparent · Conscientious & driven**
|
|
24
|
+
|
|
25
|
+
…which translates into four visual pillars:
|
|
26
|
+
|
|
27
|
+
1. **A base that follows common patterns.**
|
|
28
|
+
2. **Traditional and basic colors with a subtle spin.**
|
|
29
|
+
3. **Warm and round, but straight visual and form language.**
|
|
30
|
+
4. **Subtle complexity and calculated breaks in a clear structure.**
|
|
31
|
+
|
|
32
|
+
---
|
|
33
|
+
|
|
34
|
+
## The prime directive — radical simplicity
|
|
35
|
+
|
|
36
|
+
> *"Stripping away everything that's not necessary will lead to less cognitive load and
|
|
37
|
+
> eventually to a better experience."*
|
|
38
|
+
|
|
39
|
+
The logo is the proof: every clever N-in-a-hexagon draft was discarded for the **bare
|
|
40
|
+
hexagon** — because two shapes, one inside the other, was already too complex. What
|
|
41
|
+
remained is *"a clean slate, ready for the community to fill."*
|
|
42
|
+
|
|
43
|
+
And the ecosystem framing that defines this CLI's job:
|
|
44
|
+
|
|
45
|
+
> *"We don't want to dictate the way the Nimiq ecosystem looks or feels, but rather
|
|
46
|
+
> provide a boilerplate of our vision, stripped down to the very core, so that there's
|
|
47
|
+
> enough room for others to fill it out with their own ideas."*
|
|
48
|
+
|
|
49
|
+
This tool **is** that boilerplate, made executable.
|
|
50
|
+
|
|
51
|
+
---
|
|
52
|
+
|
|
53
|
+
## The laws
|
|
54
|
+
|
|
55
|
+
### 1. Color — three rules, in order
|
|
56
|
+
1. **Traditional, basic colors with a subtle, unexpected spin.** The ultramarine
|
|
57
|
+
dark-blue (`#1F2348`) carries a touch of violet spreading from the corner; the
|
|
58
|
+
classic red tilts slightly toward magenta. Colors relate to *payments*, not to
|
|
59
|
+
crypto fashion.
|
|
60
|
+
2. **Build on a light stage.** Start from a clean slate (white / `#F8F8F8`); create
|
|
61
|
+
structure with very light, nuanced grays derived from the main colors — this
|
|
62
|
+
underlines the transparent, open, collaborative approach and leaves room for
|
|
63
|
+
others' ideas.
|
|
64
|
+
3. **Color is for accentuated highlights only** — to set focus, and as a *reaction to
|
|
65
|
+
interaction*. Never decorative. (Green = success only. Red = error only.
|
|
66
|
+
Orange = warning. Blue = action/info.)
|
|
67
|
+
|
|
68
|
+
### 2. The gradient is the spin
|
|
69
|
+
A **subtle radial gradient is THE key feature** of the visual identity. Apply it to
|
|
70
|
+
every element that qualifies as a color area — buttons, boxes, backgrounds — anchored
|
|
71
|
+
in the **bottom-right corner** (e.g. `radial-gradient(100% 100% at bottom right,
|
|
72
|
+
#260133, #1F2348)`). This is how "traditional colors" get their spin. On logo
|
|
73
|
+
substrates: white base with a faint color-aligned tint sweeping from the top-right edge.
|
|
74
|
+
|
|
75
|
+
### 3. Form — warm and round, but straight and tangible
|
|
76
|
+
Interfaces are **warm and round, but straight and tangible at the same time** (pill
|
|
77
|
+
buttons and 8px-radius cards, yet crisp edges and exact alignment). **Every element
|
|
78
|
+
has a clear anchor and a relation to the whole.** Pare down the number of visual
|
|
79
|
+
elements until **everything remaining is necessary for the layout to function**.
|
|
80
|
+
|
|
81
|
+
### 4. White space does the structural work
|
|
82
|
+
Achieve hierarchy, separation and cohesion with **white space instead of structural
|
|
83
|
+
elements** like separators or boxes. *"We avoid all forms of decorative elements if we
|
|
84
|
+
can't defend them on a content level."* When in doubt: more breathing room, fewer lines.
|
|
85
|
+
|
|
86
|
+
### 5. Typography — simple, unique, open
|
|
87
|
+
**Muli/Mulish**: a classic sans-serif molded by radical geometric simplicity, with
|
|
88
|
+
unique details that never compromise that simplicity — chosen over Roboto/Open Sans
|
|
89
|
+
because Nimiq could *own* it, and because it's open source (community must be able to
|
|
90
|
+
reproduce everything). **Fira Mono** for technical content — addresses, keys, numbers —
|
|
91
|
+
optimized for readability, light-footed in non-code environments.
|
|
92
|
+
|
|
93
|
+
### 6. Calculated breaks — the element of surprise
|
|
94
|
+
Radical simplicity is not sterility:
|
|
95
|
+
|
|
96
|
+
> *"For this reason we embrace subtle complexity — an element of surprise,
|
|
97
|
+
> well-defined breaks in a clear structure — something that makes the experience
|
|
98
|
+
> memorable."*
|
|
99
|
+
|
|
100
|
+
One surprise per experience: the gradient's diagonal, an identicon's character, the
|
|
101
|
+
honeycomb peeking through. **"Driven" translates into adding that bit of sophistication
|
|
102
|
+
and friction that makes the difference between convenience and fascination.** Friction
|
|
103
|
+
belongs only where it protects something critical (a passphrase, money).
|
|
104
|
+
|
|
105
|
+
### 7. Familiar in the basics, honest in the details
|
|
106
|
+
> *"We use common, learned patterns for critical interactions with Nimiq wherever
|
|
107
|
+
> possible. We're familiar in the basics, but surprising in the details. Nevertheless,
|
|
108
|
+
> if in doubt, everything we do follows intuitive patterns. If we don't follow best
|
|
109
|
+
> practices, we follow logic, nature or human behavior."*
|
|
110
|
+
|
|
111
|
+
### 8. Reproducibility is a brand value
|
|
112
|
+
> *"We want to encourage the community to use our visual language as a foundation for
|
|
113
|
+
> their own projects. … everything we create visually needs to be easily accessible and
|
|
114
|
+
> reproducible, being able to act as a boilerplate by virtue of its simplicity."*
|
|
115
|
+
|
|
116
|
+
This is why this CLI pixel-verifies every component against the real upstream and ships
|
|
117
|
+
the team's real assets instead of hand-made approximations. Reproduction *is* the brand
|
|
118
|
+
working as designed.
|
|
119
|
+
|
|
120
|
+
### 9. The logo is sacred ground
|
|
121
|
+
The hexagon signet is **universal** — anyone in the ecosystem may use it and build their
|
|
122
|
+
own mark on top of it. The **signet + wordmark combination is reserved** and must not be
|
|
123
|
+
altered. Clear space: the width of the letter N (horizontal) / half a hexagon (signet).
|
|
124
|
+
Monochrome versions for busy or colored backgrounds. Never reconstruct the geometry —
|
|
125
|
+
use the shipped files (`nq assets search logo`).
|
|
126
|
+
|
|
127
|
+
---
|
|
128
|
+
|
|
129
|
+
## The generation checklist
|
|
130
|
+
|
|
131
|
+
Before any NEW component or design ships, it must answer **yes** to all of these:
|
|
132
|
+
|
|
133
|
+
- [ ] Could anything be removed without the layout failing? (If yes → remove it.)
|
|
134
|
+
- [ ] Does it sit on a light stage, structured by white space rather than boxes/lines?
|
|
135
|
+
- [ ] Is every color either a main color with the radial-gradient spin, a light nuanced
|
|
136
|
+
gray derived from main colors, or a semantic highlight reacting to focus/interaction?
|
|
137
|
+
- [ ] Are color areas gradient-built (bottom-right radial), not flat fills?
|
|
138
|
+
- [ ] Is it warm and round (pills, soft radii) yet straight and tangible (crisp anchors,
|
|
139
|
+
exact alignment, clear relation to the whole)?
|
|
140
|
+
- [ ] Is the typography Muli/Mulish (UI) and Fira Mono (technical values) only?
|
|
141
|
+
- [ ] Is there at most ONE calculated break / element of surprise, and can it be
|
|
142
|
+
defended on a content level?
|
|
143
|
+
- [ ] Are the basics a common, learned pattern? (Surprise lives in details, never in
|
|
144
|
+
critical interactions.)
|
|
145
|
+
- [ ] Does it use the team's real assets (`nq assets`) — never redrawn logos, icons or art?
|
|
146
|
+
- [ ] Is it reproducible — plain HTML/CSS or standard Vue, no exotic dependencies,
|
|
147
|
+
verifiable by `nq verify`?
|
|
148
|
+
|
|
149
|
+
---
|
|
150
|
+
|
|
151
|
+
*Run `nq principles` to print this document. `nq new <name>` scaffolds a component with
|
|
152
|
+
this checklist embedded — a component is not done until the checklist and the pixel
|
|
153
|
+
verification both pass.*
|
package/README.md
CHANGED
|
@@ -8,6 +8,16 @@ Nimiq apps before it ships, plus the team's real asset library (logos, icons, fl
|
|
|
8
8
|
> real shipped files or faithful ports of their open-source components, never hand-drawn
|
|
9
9
|
> approximations.
|
|
10
10
|
|
|
11
|
+
## The soul of the tool
|
|
12
|
+
|
|
13
|
+
Everything here flows from the **[Nimiq Design Principles](PRINCIPLES.md)** — distilled from
|
|
14
|
+
the NIMIQ Style Guide (October 2018) and the
|
|
15
|
+
[A New Visual Identity](https://www.nimiq.com/blog/a-new-visual-identity/) essay: radical
|
|
16
|
+
simplicity, a light stage structured by white space, traditional colors with the radial-gradient
|
|
17
|
+
spin, warm-and-round-yet-tangible form, and one calculated break per experience. `nq principles`
|
|
18
|
+
prints them; `nq new <name>` scaffolds a component with the 10-point principles checklist
|
|
19
|
+
embedded — a component isn't done until the checklist and the pixel verification both pass.
|
|
20
|
+
|
|
11
21
|
## Install
|
|
12
22
|
|
|
13
23
|
```bash
|
package/bin/nq.js
CHANGED
|
@@ -24,6 +24,9 @@ Usage:
|
|
|
24
24
|
nq assets search <term> Search assets incl. the 323 nimiq-icons + 422 hexagon flags
|
|
25
25
|
nq assets add <name...> Copy official asset(s) into ./nimiq/assets/
|
|
26
26
|
(icon:<name> extracts from nimiq-icons, flag:<cc> from nimiq-flags)
|
|
27
|
+
nq principles Print the Nimiq design principles — the soul of this tool
|
|
28
|
+
nq new <name> Scaffold a new registry component with the principles
|
|
29
|
+
checklist + verification contract embedded
|
|
27
30
|
nq verify <component|all> Render the html variant and diff against the reference PNG
|
|
28
31
|
nq help This message
|
|
29
32
|
|
|
@@ -239,6 +242,88 @@ async function cmdTokens() {
|
|
|
239
242
|
console.log(await readFile(join(ROOT, 'assets', 'tokens.md'), 'utf8'));
|
|
240
243
|
}
|
|
241
244
|
|
|
245
|
+
async function cmdPrinciples() {
|
|
246
|
+
console.log(await readFile(join(ROOT, 'PRINCIPLES.md'), 'utf8'));
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
const CHECKLIST = [
|
|
250
|
+
'remove-everything-unnecessary: could anything be removed without the layout failing?',
|
|
251
|
+
'light-stage: white/#F8F8F8 base, structure via white space + nuanced grays, not boxes/lines',
|
|
252
|
+
'color-rules: main colors w/ gradient spin | light grays | semantic highlights on interaction only',
|
|
253
|
+
'gradients: color areas use the bottom-right radial gradient, never flat fills',
|
|
254
|
+
'form: warm and round yet straight and tangible; every element anchored, related to the whole',
|
|
255
|
+
'type: Mulish for UI, Fira Mono for technical values, nothing else',
|
|
256
|
+
'one-break: at most ONE calculated surprise, defensible on a content level',
|
|
257
|
+
'learned-patterns: basics follow common patterns; surprise lives in details only',
|
|
258
|
+
'real-assets: team-shipped files via nq assets — no redrawn logos/icons/art',
|
|
259
|
+
'reproducible: plain HTML/CSS or standard Vue, passes nq verify',
|
|
260
|
+
];
|
|
261
|
+
|
|
262
|
+
async function cmdNew(name, flags) {
|
|
263
|
+
if (!name || !/^[a-z][a-z0-9-]*$/.test(name)) throw new Error('nq new <kebab-case-name>');
|
|
264
|
+
const dir = join(ROOT, 'registry', 'components', name);
|
|
265
|
+
if (existsSync(dir)) throw new Error(`component "${name}" already exists`);
|
|
266
|
+
const pascal = name.split('-').map(w => w[0].toUpperCase() + w.slice(1)).join('');
|
|
267
|
+
await mkdir(join(dir, 'html'), { recursive: true });
|
|
268
|
+
await mkdir(join(dir, 'truth'), { recursive: true });
|
|
269
|
+
await mkdir(join(dir, 'vue'), { recursive: true });
|
|
270
|
+
|
|
271
|
+
const meta = {
|
|
272
|
+
name,
|
|
273
|
+
purpose: 'TODO: one sentence — what it is and where Nimiq uses it',
|
|
274
|
+
category: 'misc',
|
|
275
|
+
variants: ['vue', 'html'],
|
|
276
|
+
props: [],
|
|
277
|
+
cssFiles: ['css/legacy/nimiq-style.min.css'],
|
|
278
|
+
assetFiles: [],
|
|
279
|
+
dependsOn: [],
|
|
280
|
+
npmDeps: [],
|
|
281
|
+
verified: false,
|
|
282
|
+
verify: { viewport: { width: 600, height: 400 }, selector: `.${name}`, maxDiffPct: 0.5, settleMs: 250 },
|
|
283
|
+
principles: Object.fromEntries(CHECKLIST.map(c => [c.split(':')[0], false])),
|
|
284
|
+
notes: 'Scaffolded by nq new. Cite the source (upstream file, real asset, or screenshot reference) here. A component is DONE when every principles flag is true AND nq verify passes.',
|
|
285
|
+
};
|
|
286
|
+
await writeFile(join(dir, 'meta.json'), JSON.stringify(meta, null, 2) + '\n');
|
|
287
|
+
|
|
288
|
+
const pageChrome = (title, cssHref) => `<!DOCTYPE html>
|
|
289
|
+
<html lang="en">
|
|
290
|
+
<head>
|
|
291
|
+
<meta charset="utf-8">
|
|
292
|
+
<title>${title}</title>
|
|
293
|
+
<link rel="preconnect" href="https://fonts.googleapis.com">
|
|
294
|
+
<link href="https://fonts.googleapis.com/css2?family=Mulish:wght@400;600;700;800&display=swap" rel="stylesheet">
|
|
295
|
+
<link rel="stylesheet" href="../../../../assets/css/legacy/nimiq-style.min.css">
|
|
296
|
+
<link rel="stylesheet" href="${cssHref}">
|
|
297
|
+
<style>
|
|
298
|
+
html, body { margin: 0; padding: 0; background: #fff; }
|
|
299
|
+
body { font-family: 'Mulish', 'Muli', system-ui, sans-serif; }
|
|
300
|
+
</style>
|
|
301
|
+
</head>
|
|
302
|
+
<body>
|
|
303
|
+
<div class="${name}">
|
|
304
|
+
<!-- TODO: same markup as html/${name}.html — keep truth/demo/snippet identical -->
|
|
305
|
+
</div>
|
|
306
|
+
</body>
|
|
307
|
+
</html>
|
|
308
|
+
`;
|
|
309
|
+
await writeFile(join(dir, 'truth', 'truth.html'), pageChrome(`${name} — truth (cite your source!)`, `../html/${name}.css`));
|
|
310
|
+
await writeFile(join(dir, 'html', 'demo.html'), pageChrome(name, `${name}.css`));
|
|
311
|
+
await writeFile(join(dir, 'html', `${name}.html`), `<!-- ${name} — TODO describe. Requires ${name}.css + nimiq-style.min.css.\n Source: TODO (upstream file / real asset / reference screenshot). -->\n<div class="${name}">\n <!-- TODO -->\n</div>\n`);
|
|
312
|
+
await writeFile(join(dir, 'html', `${name}.css`), `/* ${name} — all selectors namespaced under .${name}.\n Principles: light stage, white-space structure, bottom-right radial gradients,\n Mulish/Fira Mono, one calculated break max. Run: nq principles */\n.${name} {\n font-family: 'Mulish', sans-serif;\n}\n`);
|
|
313
|
+
await writeFile(join(dir, 'vue', `${pascal}.vue`), `<script setup lang="ts">\n// ${pascal} — port faithfully; inline small helpers; record npm deps in meta.json\n</script>\n\n<template>\n <div class="${name}">\n <!-- TODO -->\n </div>\n</template>\n\n<style scoped>\n.${name} {\n font-family: 'Mulish', sans-serif;\n}\n</style>\n`);
|
|
314
|
+
|
|
315
|
+
console.log(`+ registry/components/${name}/ scaffolded\n`);
|
|
316
|
+
console.log('The principles gate (all must become true in meta.json):');
|
|
317
|
+
for (const c of CHECKLIST) console.log(' [ ] ' + c);
|
|
318
|
+
console.log(`\nWorkflow:
|
|
319
|
+
1. Build truth/truth.html from a REAL source (upstream code, real asset, or live screenshot) — cite it in meta.notes.
|
|
320
|
+
2. node scripts/snap.mjs ${name} (truth -> reference.png; eyeball it)
|
|
321
|
+
3. Build html/${name}.html + demo.html + vue/${pascal}.vue with identical markup.
|
|
322
|
+
4. node scripts/verify.mjs ${name} (must pass at <= 0.5% diff)
|
|
323
|
+
5. Flip the principles flags + verified:true, then: node scripts/build-index.mjs
|
|
324
|
+
Read the soul of the tool first: nq principles`);
|
|
325
|
+
}
|
|
326
|
+
|
|
242
327
|
async function cmdVerify(target) {
|
|
243
328
|
const { verify } = await import(join(ROOT, 'scripts', 'verify.mjs'));
|
|
244
329
|
const names = target === 'all' || !target
|
|
@@ -264,6 +349,8 @@ try {
|
|
|
264
349
|
case 'add': await cmdAdd(rest, flags); break;
|
|
265
350
|
case 'init': await cmdInit(flags); break;
|
|
266
351
|
case 'tokens': await cmdTokens(); break;
|
|
352
|
+
case 'principles': await cmdPrinciples(); break;
|
|
353
|
+
case 'new': await cmdNew(rest[0], flags); break;
|
|
267
354
|
case 'assets': await cmdAssets(rest[0], rest.slice(1), flags); break;
|
|
268
355
|
case 'verify': await cmdVerify(rest[0]); break;
|
|
269
356
|
default: console.log(HELP);
|
package/package.json
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "nimiq-branding-cli",
|
|
3
|
-
"version": "1.
|
|
4
|
-
"description": "nq
|
|
3
|
+
"version": "1.1.0",
|
|
4
|
+
"description": "nq \u2014 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
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
7
|
-
"nq": "bin/nq.js"
|
|
7
|
+
"nq": "./bin/nq.js"
|
|
8
8
|
},
|
|
9
9
|
"scripts": {
|
|
10
10
|
"verify": "node scripts/verify.mjs",
|
|
@@ -36,16 +36,5 @@
|
|
|
36
36
|
"scaffolding",
|
|
37
37
|
"crypto",
|
|
38
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
39
|
]
|
|
51
|
-
}
|
|
40
|
+
}
|