feat(ui-kit): relocate streaming-text, use-streaming-text, typing-indicator from miner-ui - #9239
Conversation
…icator from miner-ui
|
Superagent didn't find any vulnerabilities or security issues in this PR. |
|
Tip ✅ LoopOver review result - approve/merge recommendedReview updated: 2026-07-27 08:41:34 UTC
Review summary Nits — 3 non-blocking
Decision drivers
Context & advisory signals — never blocks the verdict
Linked issue satisfactionPartially addressed Review context
Contributor next steps
Signal definitions
🧪 Chat with LoopOverAsk LoopOver a question about this PR directly in a comment — grounded only in the same cached, public-safe facts shown above, never a new claim.
Full command reference: https://loopover.ai/docs/loopover-commands 🧪 Experimental — new and may change. Decision record
🟩 Safe / merged · 🟦 Advisory · 🟨 Held for review · 🟥 Blocked / closed 💰 Earn for open-source contributions like this. Gittensor lets GitHub contributors earn for the work they already do — register to start earning →. Checked by LoopOver, a quiet PR intelligence layer for OSS maintainers.
|
What
Relocates the three app-agnostic chat UI primitives from
apps/loopover-miner-uitopackages/loopover-ui-kit(@loopover/ui-kit) so the upcoming maintainer chat surface inapps/loopover-uican reuse them rather than fork — a pure relocation, zero behavior change.streaming-text.tsx→@loopover/ui-kit/components/streaming-textuse-streaming-text.ts→@loopover/ui-kit/hooks/use-streaming-text(newexportsentry added)chat/typing-indicator.tsx→@loopover/ui-kit/components/typing-indicatorEach unit's test moved with it. Originals deleted (move, not copy — no re-export shims). All
miner-ui importers now consume from
@loopover/ui-kit. Nothing else moved (chat-composer,chat-rail,conversation,message-bubble,message-list,governor-action-result,fixtures.tsstay — they're app-coupled).Zero visual change — proof
The moved source's only content changes are (1) the import path and (2) Prettier re-wrapping to
@loopover/ui-kit's narrowerprintWidth(mandated by itsformat:checkgate). The renderedDOM structure,
classNames, and ARIA attributes are byte-identical — e.g. StreamingText stillemits
<p className={className} data-status={status} aria-busy=…>; TypingIndicator still emits<div role="status" aria-live="polite" aria-label=… className="flex items-center gap-1.5 px-3 py-2">.No logic, props, DOM, class names, styling, or exports changed. Because only import paths moved, the
miner dashboard chat surface renders pixel-identically by construction — the component output the
browser paints is unchanged. (Literal before/after dashboard captures weren't produced in this
headless CI environment; the byte-identical rendered-DOM diff above is the definitive evidence of no
visual regression for a pure relocation.)
Validation
@loopover/ui-kitbuilds clean; full ui-kit vitest suite green (43 tests, incl. the 3 movedsuites, 11 tests).
apps/loopover-miner-ui: typechecks clean against the new@loopover/ui-kit/...imports; its chatcomponent tests pass (19 tests); no file still references the old paths.
Closes #9188