You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Use card-based list rows with token icon/symbol, counterparty address (shortened/ENS if available), flow rate, status badge, streamed total, start timestamp, and row action control.
Provide top-level segment filters for All, Incoming, and Outgoing before list content.
Support list states with matching structure: loading skeleton rows, empty state message with icon, and retry-capable error state.
Stream create/update UX
Use a dedicated create/update surface (inline panel, modal, or drawer) with explicit title (Create Stream / Update Stream).
Include fields for token selection, recipient address, flow rate input, and rate period selector.
Include a computed preview block for expected outgoing amount and affordability feedback before submission.
Include clear primary/secondary actions and inline validation/error messaging.
Show explicit tx lifecycle feedback (pending/success/failure) after submission.
Pool memberships tab
Render memberships as list cards including pool identity, membership state, claimable amount, and claim action.
Claim action must expose disabled/loading/success/error states in-row.
Provide deterministic empty/error states consistent with Streams tab styling.
Balances tab
Render a summary card for Super Token balance as primary value.
Render SUP reserve as a separate section only on Base; on non-Base chains show hidden or explicit disabled state with explanatory helper copy.
Include network context indicator and manual refresh affordance.
Global styling and interaction direction
Match GoodWalletV2 patterns for spacing, typography hierarchy, card density, and visual emphasis by applying goodWalletV2Preset token/theme primitives.
Follow ActivityHistory-style list readability and Swap-style form affordances.
Keep transitions between loading/content/action-result states smooth and consistent across all tabs.
Storybook + Playwright plan
Add stories under examples/storybook/src/stories/streaming-widget/:
injected wallet scenario
custodial fixture scenario
empty/error/loading states for each tab
Add Playwright smoke tests under tests/widgets/streaming-widget/:
tab navigation + key states
create/update flow happy path and failure path
pool claim action state changes
balance/reserve visibility by chain
Include widget-state screenshots in tests/widgets/streaming-widget/test-results/.
Validation and rollout
Run project build/lint + targeted storybook/playwright checks for the new widget flow.
Keep implementation changes scoped to streaming widget and related story/test wiring only.
acceptance criteria
A new sub-issue plan exists without modifying parent issue body content.
Planned implementation introduces packages/streaming-widget using @goodsdks/streaming-sdk.
Plan explicitly covers:
set stream/create-update behavior
active + historical stream views
GDA pool memberships + claim action
SUP + reserve balance behavior (Base-only for reserve)
wallet support for custodial + injected providers
Plan maps concrete references from GoodWidget, GoodSDKs, and GoodWalletV2.
[PLAN] Create a streaming widget
Parent issue: #26
Required states, flows, and behaviors
setFlowrate(setStreambehavior) for active outgoing stream setup.WidgetTabsto segment the above features inside one widget shell.goodWalletV2Preset+ widget-local components.Execution plan
Scope + references mapping
packages/ui/src/components/WidgetTabs.tsx(tab container behavior)packages/citizen-claim-widget/src/CitizenClaimWidget.tsx(current widget/adaptor structure)packages/citizen-claim-widget/src/adapter.ts(state/actions adapter pattern)examples/storybook/src/stories/citizen-claim-widget/CitizenClaimWidget.stories.tsx(custodial/injected story flow)tests/widgets/citizen-claim-widget/*(widget smoke testing convention)packages/streaming-sdk/README.mdpackages/streaming-sdk/src/streaming-sdk.tspackages/streaming-sdk/src/gda-sdk.tspackages/streaming-sdk/src/types.tsapps/demo-streaming-app/src/App.tsx(functional flow reference only)src/sections/Swap/SwapView.tsxsrc/sections/Swap/components/*(amount/token/route layout patterns)src/sections/Home/components/ActivityHistory/ActivityHistory.tsxsrc/sections/Home/components/ActivityHistory/ActivityHistoryItem.tsxhttps://github.com/user-attachments/assets/bd7cd510-9e40-41bd-8fd7-f5709915ff91https://github.com/user-attachments/assets/faa35f05-ddf0-44ce-8f10-29ef266222d5Package and dependency setup
packages/streaming-widget(notpackages/ui, since feature-specific).@goodsdks/streaming-sdkand existing GoodWidget packages:@goodwidget/core@goodwidget/ui@goodwidget/embedRuntime architecture
StreamingWidget.tsxas provider-wrapped shell.adapter.tsto encapsulate data fetch + mutations:Component mapping (new widget-local components vs reusable UI)
packages/streaming-widget/src):StreamingWidgetShellStreamingSetFlowFormStreamOverviewCardStreamHistoryListPoolMembershipListPoolClaimRowBalanceSummaryCardpackages/uionly if proven cross-widget reusable in at least one existing widget (otherwise keep local).UI design translation (from issue [Feature]: Create a streaming widget #26 references)
All,Incoming, andOutgoingbefore list content.Create Stream/Update Stream).goodWalletV2Presettoken/theme primitives.Storybook + Playwright plan
examples/storybook/src/stories/streaming-widget/:tests/widgets/streaming-widget/:tests/widgets/streaming-widget/test-results/.Validation and rollout
acceptance criteria
packages/streaming-widgetusing@goodsdks/streaming-sdk.human-reviewer checklist
[PLAN] ...format.[PLAN] ....packages/ui) is explicit.