Repository navigation
Labels
Description
Patch request from Laurence Weening (#gd-patch). While rebuilding the widget components in Penpot against the Storybook render (Light and Dark), the items below were found in @goodwidget/ui. They are bugs in the shared primitives, not design differences: fix them at the source, no per-widget workarounds. Penpot mirrors the Storybook render, so nothing on the design side changes.
Items are independent bare flags (no open options). Related but not duplicated: #255 / #291 (Streaming light-theme parity), #254 (design-system gaps), #263 (Streaming QA sweep).
Items
- Non-primary
Buttonlabels render white in Light- Where:
packages/ui/src/components/Button.tsx(Buttonwraps non-primary children in<Theme reset>;ButtonFrameis namedButton, so the reset children re-enter thelight_Buttonsub-theme andButtonTextresolves to the primary-button white). - Symptom: secondary / outline / ghost / text / list labels are white on a transparent background in Light (e.g. the ghost chips in the AI Credits widget are invisible).
- Fix: make the label colour variant-aware at the source (or stop the reset from re-resolving the Button sub-theme); verify every variant in Light and Dark.
- Where:
==
CircularActionButtonhardcodes$grey600for the pending/disabled label and spinner- Where:
packages/ui/src/components/CircularActionButton.tsxlines 80 and 105. - Symptom: label/spinner are
#4b5563in both themes instead of following the theme. - Fix: use a theme token (e.g. the existing dim/secondary text token) so Light and Dark each get a readable colour.
- Where:
==
- Horizontal
Separatorcomputes to 0px height- Where:
packages/ui/src/components/Separator.ts. The wrapped TamaguiSeparatorappliesmaxHeight: 0for the horizontal orientation, which clamps thesizevariants (height: 1/2/4) to 0. - Symptom: horizontal dividers are not visible (measured 0px height in Storybook).
- Fix: make the
sizevariants win over the primitive's clamp, and checkmuted/primary/verticaltoo.
- Where:
==
TokenAmountrenders empty (0x0) spans in Light- Where:
packages/ui/src/components/TokenAmount.tsx(TokenAmountTextusescolor: '$text'). - Symptom: observed in Storybook Light as 0x0 spans; root cause not yet confirmed (possible unresolved
$texttoken vs$color). - Fix: confirm the cause, then fix so amount and token symbol render in both themes.
- Where:
==
- Streaming widget inputs fall back to browser defaults
- Symptom:
Inputplaceholder uses the browser default#757575;Selectoptions show a default 2px outset border. - Note: may be partly covered by [GoodBounty-Patch] Streaming widget: light-theme parity and UI structure alignment #255 / fix(streaming-widget): register light/dark surface sub-themes, use WidgetTabs header, and gate off-Base SUP reserve (#255, #263) #291 (Select/Input primitive audit). Check those first and only fix what remains.
- Symptom:
Out of scope
- Penpot design files and the design-spec PR ([DRAFT] docs(design-files): ecosystem-wrapper build spec from Penpot #300).
ChainBadgeliving incomponents-test/instead ofpackages/ui(separate decision).- New components or redesigns.
Definition of Done
- Each item fixed in
packages/uiand verified in Light and Dark - Storybook stories cover the affected variants/states in both themes
-
pnpm --filter @goodwidget/ui lintand build pass - PR notes which items were already covered by [GoodBounty-Patch] Streaming widget: light-theme parity and UI structure alignment #255 / fix(streaming-widget): register light/dark surface sub-themes, use WidgetTabs header, and gate off-Base SUP reserve (#255, #263) #291
🤖 Generated with Claude Code
Reacted by Copilot
Metadata
Metadata
Labels
Type
Projects
- StatusShow more project fieldsPrepare AI Task
Activity
deamybro commentedon Nov 11, 2026
Submitted fix in PR #309: covers all 5 items across Button, CircularActionButton, Separator, TokenAmount, Input, and Select with dedicated Storybook coverage in Light and Dark themes.