Repository navigation
feat(icons): add menu-identities and menu-voting - #20
Conversation
… work behind them Two new components, from the Join DashPay and create-username designs: - `Criteria` — the validation-rule block: a mark box that sets the row height, four states (pending ring, met, failed, blocking), and the icons the design system draws for each. Rules that are met are dropped by the caller, so the list shrinks as the input becomes valid. - `SimpleSelect` — the option rows the funding-privacy page picks a source with. `AddressFieldView` gains what those screens needed, all additive: - an optional `isFocused` binding, mirrored both ways, so a host can raise the keyboard on entry and drop it before presenting a sheet while the field still owns its `@FocusState`; - `showsClearButton`, because a short field the user can clear by hand does not need a ✕ to hit by accident, and `isAccepted`, which drops the focus ring once the content has been accepted; - the 3pt focus/error ring from Figma, drawn as an inset stroke rather than a shadow (with no blur and no offset a shadow lands under the field and is never seen); - the QR button only when an `onScanQR` handler exists — a username has no QR form, and the glyph was offering a control that did nothing. A field that can show neither control now reserves no trailing space. `SystemMessageView` takes a `buttonStyle`: a message that points somewhere else reads as a link, not as a call to action, and is spaced against the sentence it follows instead of sitting in a pill's padding. `BottomSheet` collapses its header when there is no title, no back button and no close button — 64pt of nothing that a self-sizing sheet was measuring into its own height. Also: the `RedAlpha20` token and six feature icons (friends, profile, recovery, selected-list, username, username-block). Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
The More screen moves its rows onto the design system's menu icons, and two of them had no asset: Identities and the new Voting row. Both come from the Figma Menu export (light only, like the rest of the Menu set), normalized and assembled with the same scripts as the existing imagesets, and are exposed as `DashIcon.Menu.identities` and `DashIcon.Menu.voting`. `menu-username-voting` stays: it is a different glyph and other screens may use it. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
|
Important
This repository does not receive automatic reviews because it has fewer than 10 stars. ⚙️ Run configurationConfiguration used: Repository: dashpay/DashUIKit/.coderabbit.yaml Review profile: CHILL Plan: Advanced Run ID: Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
|
@coderabbitai review |
|
…e for VoiceOver, link layout, SimpleSelect docs
- Criteria: a repeated `id` (two rules with the same text and no explicit
id) gave SwiftUI two rows with one identity. Render identities are now
unique; the first occurrence keeps its bare id, so a row with a stable
explicit id still animates in place.
- VoiceOver: `.blocking` read the same as `.failed` ("Not met"). It now says
the rule is required to continue, which the red text says visually.
- SystemMessageView: the link layout (negative padding, tight spacing) was
applied whenever the style was a link, including a row that shows only the
secondary pill. It now applies only when the primary link renders.
- Docs: `SimpleSelect` gets a catalog row and a section in Buttons & inputs;
`Criteria` and `SimpleSelect` join the section summary.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
llbartekll
left a comment
There was a problem hiding this comment.
Reviewed against a local checkout of pull/20/head (stacked on #19 as described).
Verified
swift buildpasses (Swift 6.3.3 / Xcode 26.6).- Both imagesets match the existing Menu set exactly: 30/60/90 px, 8-bit RGBA, same
Contents.jsonshape as e.g.menu-wallet, glyph colour#008DE4like the other Menu icons. identitiesandvotingare in the correct alphabetical slots, no duplicate raw values, and everyDashIcon.Menucase ↔ imageset pairing is 1:1 across all 91 icons.menu-username-votingis indeed a different glyph (checkmark badge vs thumbs-up), so keeping it is right.- Consumer side (dashwallet-ios#1161) renders via
Image(name, bundle: .dashUIKit)with no template tinting, so the baked colours are what ships.
Non-blocking: dark variant for menu-identities
"Light only, like the rest of the Menu set" isn't quite accurate — 32 of the 91 Menu icons ship a -dark variant, and the pattern is: icons with a white cut-out get one, where the white becomes dark navy (menu-security: #ffffff → #082538, menu-support: #ffffff → #063f63). menu-identities has the largest white area in the whole set (the person silhouette, ~890 px @3x) and sits on the same More screen as security and support, so in dark mode it will be the one row whose cut-out stays bright white while its neighbours go navy. menu-voting is solid blue, so light-only is fine there (same as wallet/settings/tools).
The recent additions (menu-send-disabled, menu-receive-disabled, menu-swap-dash-coin) skipped dark variants too, so this follows precedent rather than breaking anything — a follow-up for identities (and ideally those three) would be enough. Not holding the PR on it.
Optional: there is no test that every DashIcon.* case resolves to an asset in Bundle.module. A CaseIterable loop asserting UIImage(named:in:) is non-nil would be a cheap guard against the next typo in a raw value.
Issue being fixed or feature implemented
Dash Wallet's More screen moves its rows onto the design system's menu icons. Two of the rows
have no asset in the library: Identities and the new Voting row (voting was split out of
Governance into its own More row). Consumed by dashpay/dashwallet-ios
feat/more-menu-icons.Stacked on #19 — merge that first; this PR then retargets to
master.What was done?
menu-identities.imagesetandmenu-voting.imagesetinIcons & Illustrations/Menu, from theFigma Menu export (light only, 30 pt, @1x/@2x/@3x — the same shape as the other Menu icons).
Normalized with
normalize-icons.py --template "menu-*.png"and assembled withbuild-imagesets.py, the scripts the rest of the set was built with.DashIcon.Menu.identitiesandDashIcon.Menu.voting, in alphabetical order with the othercases.
menu-username-votingis left as is: a different glyph that other screens may use.Screenshots
DashIcon.Menuat 30 pt (NEW = this PR)How Has This Been Tested?
swift buildof the package.dashpayscheme builds against this branch as a local package override, with theMore rows switched to
DashIcon.Menu.*.Breaking Changes
None — two new enum cases and two new assets.
Checklist:
For repository code-owners and collaborators only
🤖 Generated with Claude Code