feat(a2ui-playground): fix URI Too Long, add simulation controls, and polish UI#2555
Conversation
|
📝 WalkthroughWalkthroughThe PR adds configurable simulation speed controls to the a2ui-playground, enabling adjustable playback rate for streamed messages via a ChangesSimulation Speed & Demo File Support
Estimated Code Review Effort🎯 4 (Complex) | ⏱️ ~45 minutes Possibly Related PRs
Suggested Reviewers
Poem
🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches🧪 Generate unit tests (beta)
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. Review rate limit: 6/8 reviews remaining, refill in 9 minutes and 4 seconds.Comment |
There was a problem hiding this comment.
Pull request overview
This PR expands the A2UI playground deployment and preview flow so demo payloads can be shared with short URLs/QR codes, while adding simulation-related UI controls and some navigation polish. It fits into the website/docs experience by exposing the playground at /a2ui and making both web and native preview links more usable.
Changes:
- Serve demo payloads as static JSON files and switch preview URLs from inlined payloads to short demo/message references.
- Add simulation UI in the Demos page, including a tooltip and playback-speed slider, plus QR/link UX refinements.
- Build and publish the A2UI playground into the website output and add a website nav entry for it.
Reviewed changes
Copilot reviewed 10 out of 10 changed files in this pull request and generated 4 comments.
Show a summary per file
| File | Description |
|---|---|
| website/rspress.config.ts | Adds an A2UI entry to the website navigation. |
| packages/genui/a2ui-playground/src/utils/renderUrl.ts | Reworks render URL generation to use render.html, short demo IDs, and optional speed. |
| packages/genui/a2ui-playground/src/utils/demoUrl.ts | Makes the web bundle path relative for subpath deployments. |
| packages/genui/a2ui-playground/src/styles.css | Adds simulation-bar styles and tweaks active-state styling. |
| packages/genui/a2ui-playground/src/render.tsx | Updates query parsing and fetches demo JSON in the browser before initializing <lynx-view>. |
| packages/genui/a2ui-playground/src/pages/DemosPage.tsx | Adds simulation controls, LAN-aware preview URLs, and updated web/native QR presentation. |
| packages/genui/a2ui-playground/src/pages/AIChatPage.tsx | Changes the mock AI response to link users to the Demos tab. |
| packages/genui/a2ui-playground/rsbuild.config.ts | Copies demo JSON assets into build output and includes www assets in production builds. |
| packages/genui/a2ui-playground/lynx-src/App.tsx | Adds URL-driven streaming speed support inside the Lynx runtime. |
| .github/workflows/workflow-website.yml | Builds the A2UI playground and copies it into the website artifact. |
Comments suppressed due to low confidence (1)
packages/genui/a2ui-playground/src/pages/DemosPage.tsx:226
- When the dev payload store rewrites the render URL to
messagesUrl/actionMocksUrl, it drops the newspeedquery parameter. In local dev this async rewrite overwrites the earlier URL frombuildRenderUrl(), so the slider silently falls back to 1x after the fetch completes.
if (messagesUrlAbs) {
const r = new URL('render.html', networkBaseUrl);
r.searchParams.set('protocol', protocol);
r.searchParams.set('demoUrl', DEFAULT_DEMO_URL);
r.searchParams.set('messagesUrl', messagesUrlAbs);
if (actionMocksUrlAbs && actionMocks) {
r.searchParams.set('actionMocksUrl', actionMocksUrlAbs);
}
setRenderUrl(r.toString());
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
| const isKnownDemo = ALL_SCENARIOS.some((s) => s.id === scenario?.id); | ||
| setIsSimulated(isKnownDemo); | ||
| const url = buildRenderUrl( | ||
| { protocol, demoUrl: DEFAULT_DEMO_URL, messages: parsed, actionMocks }, | ||
| origin, | ||
| { | ||
| protocol, | ||
| demoUrl: DEFAULT_DEMO_URL, | ||
| messages: parsed, | ||
| actionMocks, | ||
| demoId: isKnownDemo ? scenario!.id : undefined, | ||
| speed, |
| const seq = ++lynxUrlSeqRef.current; | ||
| if (rspeedyDevUrl) { | ||
| const uInline = new URL(rspeedyDevUrl); | ||
| uInline.searchParams.set('messages', JSON.stringify(parsed)); | ||
| if (actionMocks) { | ||
| uInline.searchParams.set('actionMocks', JSON.stringify(actionMocks)); | ||
| if (isKnownDemo) { | ||
| // Known demo: point to the static JSON served by the rsbuild dev server. | ||
| // Native Lynx supports fetch, so App.tsx will load it via messagesUrl. | ||
| const demosOrigin = new URL(networkBaseUrl).origin; | ||
| uInline.searchParams.set( | ||
| 'messagesUrl', | ||
| `${demosOrigin}/demos/${scenario!.id}.json`, | ||
| ); | ||
| } else { | ||
| uInline.searchParams.set('messages', JSON.stringify(parsed)); | ||
| if (actionMocks) { | ||
| uInline.searchParams.set( | ||
| 'actionMocks', | ||
| JSON.stringify(actionMocks), | ||
| ); | ||
| } | ||
| } | ||
| setLynxDevUrl(uInline.toString()); |
| const messages = params.get('messages'); | ||
| const actionMocks = params.get('actionMocks'); | ||
| const actionMocksUrl = params.get('actionMocksUrl'); | ||
| const demo = params.get('demo'); | ||
|
|
||
| if (!protocol && !messagesUrl && !messages && !demoUrl) { | ||
| if (!protocol && !messagesUrl && !messages && !demoUrl && !demo) { |
| ? 'QR code unavailable. Open this link with LynxExplorer instead.' | ||
| : 'Scan with LynxExplorer to load the rspeedy dev bundle.'} | ||
| {/* QR Code Section — only shown when there's a render URL */} | ||
| {renderUrl || lynxDevUrl |
There was a problem hiding this comment.
Actionable comments posted: 3
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Inline comments:
In `@packages/genui/a2ui-playground/src/pages/DemosPage.tsx`:
- Around line 156-173: The native preview URL built in DemosPage.tsx omits the
selected replay speed, so add the current speed query param to uInline before
calling setLynxDevUrl: call uInline.searchParams.set('speed', String(speed)) (or
the actual slider variable name in scope) in both the isKnownDemo branch and the
else branch where messages/actionMocks are set, and do the same for the other
duplicate URL construction block (the similar logic around lines 205-214) so
Native Preview reads the slider-controlled speed.
- Around line 135-145: isKnownDemo currently returns true whenever a sidebar
scenario is selected, causing demoId to be sent even after the user edits the
JSON; change the check so a scenario is treated as "known" only if a scenario is
selected AND the current parsed messages match the scenario's original/default
messages (or a "pristine" flag that indicates the JSON hasn't been edited).
Concretely, update the isKnownDemo calculation (replace the
ALL_SCENARIOS.some(...) usage) to: 1) find the scenario by id (use scenario!.id
or find in ALL_SCENARIOS) and 2) compare parsed (the messages payload) to that
scenario's default messages (or consult a local isPristineJson boolean you set
when the user edits the editor). Then use that result for setIsSimulated and
pass demoId to buildRenderUrl only when the messages are unchanged (i.e., truly
a known demo).
In `@packages/genui/a2ui-playground/src/render.tsx`:
- Around line 57-60: The parser in render.tsx currently reads demo but ignores
the speed query; capture the speed via params.get('speed') (or parse it to a
number) and propagate it into the Lynx initialization payload by adding it to
the initData/globalProps object passed to the Lynx init routine (the same object
where messages/messagesUrl/demoUrl/demo are set). Ensure the symbol names
involved are updated: read speed alongside demo, then include that speed value
in the initData/globalProps that the Lynx init/render function consumes so web
preview honors ?speed=....
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Pro
Run ID: 23086db1-6bea-45cc-b4bd-03b277a7fbb9
📒 Files selected for processing (10)
.github/workflows/workflow-website.ymlpackages/genui/a2ui-playground/lynx-src/App.tsxpackages/genui/a2ui-playground/rsbuild.config.tspackages/genui/a2ui-playground/src/pages/AIChatPage.tsxpackages/genui/a2ui-playground/src/pages/DemosPage.tsxpackages/genui/a2ui-playground/src/render.tsxpackages/genui/a2ui-playground/src/styles.csspackages/genui/a2ui-playground/src/utils/demoUrl.tspackages/genui/a2ui-playground/src/utils/renderUrl.tswebsite/rspress.config.ts
… polish UI
- Fix "URI Too Long" error for large demos by serving demo JSONs as
static files (demos/*.json) and referencing them via ?demo=<id>
instead of inlining base64url payloads in the URL. Reduces render
URLs from ~11,000 chars to ~95 chars.
- Add simulation controls bar (visible only for known demos):
- "Simulated" info indicator with click-to-toggle tooltip explaining
pre-recorded data
- Speed slider (0.25x–4x) to control streaming replay speed
- Fix fetch crash in Lynx for Web worker thread by having render.tsx
fetch demo JSONs in the browser context instead of the Lynx worker
- Use LAN IP instead of localhost for QR code URLs so phones can
reach the dev server
- Use messagesUrl for native preview (LynxExplorer) to keep QR codes
scannable for all demos
- Improve QR section: hide when no render URL, show URL + Copy button
for web preview, clarify "Web Preview" vs "Native Preview" labels
- Update AI Chat mock response to direct users to the Demos tab
- Polish sidebar active state (border outline instead of inset bar)
for both Demos and Components pages
- Track JSON edits so custom changes use inline payload instead of demoId (fixes isKnownDemo override after user edits) - Forward speed param through render.tsx initData/globalProps so web preview honors the slider - Add speed param to native preview URL for LynxExplorer - Clear lynxDevUrl on Clear button to avoid stale QR codes
933044d to
2d5c5e5
Compare
There was a problem hiding this comment.
Actionable comments posted: 1
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (2)
packages/genui/a2ui-playground/src/pages/DemosPage.tsx (2)
223-231:⚠️ Potential issue | 🟠 Major | ⚡ Quick winPreserve
speedwhen swapping the web preview to payload-store URLs.This branch rebuilds
render.htmlfrom scratch and never re-adds the selectedspeed, so once__a2ui_payloadsucceeds the web preview falls back to 1x even thoughbuildRenderUrl()andrender.tsxboth support that query param.Suggested fix
if (messagesUrlAbs) { const r = new URL('render.html', networkBaseUrl); r.searchParams.set('protocol', protocol); r.searchParams.set('demoUrl', DEFAULT_DEMO_URL); r.searchParams.set('messagesUrl', messagesUrlAbs); + if (speed !== 1) { + r.searchParams.set('speed', String(speed)); + } if (actionMocksUrlAbs && actionMocks) { r.searchParams.set('actionMocksUrl', actionMocksUrlAbs); } setRenderUrl(r.toString()); }🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@packages/genui/a2ui-playground/src/pages/DemosPage.tsx` around lines 223 - 231, The branch that constructs the preview URL when messagesUrlAbs is present rebuilds render.html but omits the current speed query param, causing playback to reset to 1x; update the URL construction in the messagesUrlAbs branch (the block that creates new URL('render.html', networkBaseUrl) and calls setRenderUrl) to preserve the existing speed value by reading the current speed from the existing render URL or state (the same param used by buildRenderUrl/render.tsx) and set it on r.searchParams (e.g., r.searchParams.set('speed', currentSpeed)) before calling setRenderUrl so the selected speed persists when switching to payload-store URLs.
242-247:⚠️ Potential issue | 🟠 Major | ⚡ Quick winThis bootstrap effect resets the preview on unrelated state changes.
Because
doRenderdepends onjsonEdited,speed,networkBaseUrl, andrspeedyDevUrl, this effect re-runs whenever any of those change and always re-rendersALL_SCENARIOS[0]. A simple repro is: select another scenario, move the speed slider, and the preview jumps back to the first demo.🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@packages/genui/a2ui-playground/src/pages/DemosPage.tsx` around lines 242 - 247, The effect at useEffect currently depends on doRender, causing re-renders when unrelated state used by doRender changes; change the dependency list so this bootstrap only runs on mount (use an empty array) or when scenarios change (use [ALL_SCENARIOS] or [ALL_SCENARIOS[0]]), keeping the body that formats messages with formatJson and calls doRender( json, ALL_SCENARIOS[0] ); remove doRender from the deps to prevent the preview jumping back to the first scenario.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Inline comments:
In `@packages/genui/a2ui-playground/src/pages/DemosPage.tsx`:
- Around line 136-147: The code treats any entry in ALL_SCENARIOS as a
short/served demo which causes links for dynamic presets to point to
non-existent static JSONs; change the isKnownDemo check to only consider
STATIC_DEMOS (and still require !jsonEdited) so demoId is only set for actually
published static demos, and update the same logic in the second occurrence;
locate and modify the checks around isKnownDemo (used with
buildRenderUrl/demoId) to use STATIC_DEMOS.some(s => s.id === scenario?.id)
instead of ALL_SCENARIOS.
---
Outside diff comments:
In `@packages/genui/a2ui-playground/src/pages/DemosPage.tsx`:
- Around line 223-231: The branch that constructs the preview URL when
messagesUrlAbs is present rebuilds render.html but omits the current speed query
param, causing playback to reset to 1x; update the URL construction in the
messagesUrlAbs branch (the block that creates new URL('render.html',
networkBaseUrl) and calls setRenderUrl) to preserve the existing speed value by
reading the current speed from the existing render URL or state (the same param
used by buildRenderUrl/render.tsx) and set it on r.searchParams (e.g.,
r.searchParams.set('speed', currentSpeed)) before calling setRenderUrl so the
selected speed persists when switching to payload-store URLs.
- Around line 242-247: The effect at useEffect currently depends on doRender,
causing re-renders when unrelated state used by doRender changes; change the
dependency list so this bootstrap only runs on mount (use an empty array) or
when scenarios change (use [ALL_SCENARIOS] or [ALL_SCENARIOS[0]]), keeping the
body that formats messages with formatJson and calls doRender( json,
ALL_SCENARIOS[0] ); remove doRender from the deps to prevent the preview jumping
back to the first scenario.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Pro
Run ID: 89f2f17d-3673-4207-bb9c-a282a16404b6
📒 Files selected for processing (2)
packages/genui/a2ui-playground/src/pages/DemosPage.tsxpackages/genui/a2ui-playground/src/render.tsx
| // Use short demo ID only when the user hasn't edited the JSON. | ||
| const isKnownDemo = !jsonEdited | ||
| && ALL_SCENARIOS.some((s) => s.id === scenario?.id); | ||
| setIsSimulated(isKnownDemo); | ||
| const url = buildRenderUrl( | ||
| { protocol, demoUrl: DEFAULT_DEMO_URL, messages: parsed, actionMocks }, | ||
| baseUrl, | ||
| { | ||
| protocol, | ||
| demoUrl: DEFAULT_DEMO_URL, | ||
| messages: parsed, | ||
| actionMocks, | ||
| demoId: isKnownDemo ? scenario!.id : undefined, | ||
| speed, |
There was a problem hiding this comment.
Only treat STATIC_DEMOS as short-URL demos.
isKnownDemo currently matches every ALL_SCENARIOS entry, but packages/genui/a2ui-playground/rsbuild.config.ts:48-53 only publishes static message JSONs under demos/[name].json. Any DYNAMIC_PRESETS selection will therefore produce ?demo=... / messagesUrl=... links to files that 404, breaking both previews until the user edits JSON.
Suggested fix
- const isKnownDemo = !jsonEdited
- && ALL_SCENARIOS.some((s) => s.id === scenario?.id);
+ const isKnownDemo = !jsonEdited
+ && scenario !== undefined
+ && STATIC_DEMOS.some((s) => s.id === scenario.id);Also applies to: 161-168
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@packages/genui/a2ui-playground/src/pages/DemosPage.tsx` around lines 136 -
147, The code treats any entry in ALL_SCENARIOS as a short/served demo which
causes links for dynamic presets to point to non-existent static JSONs; change
the isKnownDemo check to only consider STATIC_DEMOS (and still require
!jsonEdited) so demoId is only set for actually published static demos, and
update the same logic in the second occurrence; locate and modify the checks
around isKnownDemo (used with buildRenderUrl/demoId) to use STATIC_DEMOS.some(s
=> s.id === scenario?.id) instead of ALL_SCENARIOS.
There was a problem hiding this comment.
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (2)
packages/genui/a2ui-playground/src/pages/DemosPage.tsx (2)
242-247:⚠️ Potential issue | 🟠 Major | ⚡ Quick winChanging speed resets the preview to the first scenario.
This effect depends on
doRender, which is recreated wheneverspeedchanges (line 239). When the user adjusts the speed slider while viewing scenario#3, the effect fires and re-renders withALL_SCENARIOS[0], unexpectedly jumping back to the first scenario.Consider either:
- Making this a mount-only effect with an empty dependency array (lint-ignore the exhaustive-deps warning with a comment explaining the intent), or
- Adding a separate effect for speed changes that re-renders the current scenario.
Option 1: Mount-only effect
useEffect(() => { if (ALL_SCENARIOS[0]) { const json = formatJson(ALL_SCENARIOS[0].messages); doRender(json, ALL_SCENARIOS[0]); } + // eslint-disable-next-line react-hooks/exhaustive-deps -- intentionally run only on mount - }, [doRender]); + }, []);Option 2: Separate effect for speed changes
+ // Re-render current scenario when speed changes + useEffect(() => { + if (currentScenario) { + doRender(customJson, currentScenario); + } + // eslint-disable-next-line react-hooks/exhaustive-deps -- only trigger on speed change + }, [speed]);🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@packages/genui/a2ui-playground/src/pages/DemosPage.tsx` around lines 242 - 247, The useEffect currently depends on doRender (which is recreated when speed changes), causing the preview to reset to ALL_SCENARIOS[0] whenever speed changes; fix by either making this effect run only on mount (remove doRender from deps, add an eslint-disable-next-line comment and a short comment explaining it's intentionally mount-only) so initial scenario is rendered once, or implement a second effect that listens to speed changes and calls doRender with the currently selected scenario (track currentScenario via state or ref and use that in the speed-effect) so adjusting speed re-renders the active scenario without jumping back to ALL_SCENARIOS[0]; reference doRender, ALL_SCENARIOS, speed, and the existing useEffect when applying the change.
211-218:⚠️ Potential issue | 🟠 Major | ⚡ Quick winSpeed parameter lost when switching to reference-based URLs.
The async block creates a fresh URL from
rspeedyDevUrland overwriteslynxDevUrl, discarding thespeedparam set earlier at lines 158-160. Native preview will use default speed when reference-based URLs are available.Proposed fix
// Lynx dev bundle URL: drop inline messages, use references. const u = new URL(rspeedyDevUrl); + if (speed !== 1) { + u.searchParams.set('speed', String(speed)); + } if (messagesUrlAbs) u.searchParams.set('messagesUrl', messagesUrlAbs);🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@packages/genui/a2ui-playground/src/pages/DemosPage.tsx` around lines 211 - 218, When building the reference-based URL you currently replace lynxDevUrl with a fresh URL from rspeedyDevUrl and drop the previously-set speed parameter; preserve that by copying the speed into the new URL before calling setLynxDevUrl. Concretely, after creating u = new URL(rspeedyDevUrl) (and before setLynxDevUrl), if a local speed variable (the one set earlier around lines 158-160) exists set u.searchParams.set('speed', String(speed)); if you don’t have that variable available, parse the current lynxDevUrl (new URL(lynxDevUrl).searchParams.get('speed')) and, if present, set it on u; then proceed to set messages/actionMocks params and call setLynxDevUrl(u.toString()).
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Outside diff comments:
In `@packages/genui/a2ui-playground/src/pages/DemosPage.tsx`:
- Around line 242-247: The useEffect currently depends on doRender (which is
recreated when speed changes), causing the preview to reset to ALL_SCENARIOS[0]
whenever speed changes; fix by either making this effect run only on mount
(remove doRender from deps, add an eslint-disable-next-line comment and a short
comment explaining it's intentionally mount-only) so initial scenario is
rendered once, or implement a second effect that listens to speed changes and
calls doRender with the currently selected scenario (track currentScenario via
state or ref and use that in the speed-effect) so adjusting speed re-renders the
active scenario without jumping back to ALL_SCENARIOS[0]; reference doRender,
ALL_SCENARIOS, speed, and the existing useEffect when applying the change.
- Around line 211-218: When building the reference-based URL you currently
replace lynxDevUrl with a fresh URL from rspeedyDevUrl and drop the
previously-set speed parameter; preserve that by copying the speed into the new
URL before calling setLynxDevUrl. Concretely, after creating u = new
URL(rspeedyDevUrl) (and before setLynxDevUrl), if a local speed variable (the
one set earlier around lines 158-160) exists set u.searchParams.set('speed',
String(speed)); if you don’t have that variable available, parse the current
lynxDevUrl (new URL(lynxDevUrl).searchParams.get('speed')) and, if present, set
it on u; then proceed to set messages/actionMocks params and call
setLynxDevUrl(u.toString()).
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Pro
Run ID: a439faa4-7f7f-4a5f-9887-88fff00d822f
📒 Files selected for processing (7)
packages/genui/a2ui-playground/lynx-src/App.tsxpackages/genui/a2ui-playground/rsbuild.config.tspackages/genui/a2ui-playground/src/pages/AIChatPage.tsxpackages/genui/a2ui-playground/src/pages/DemosPage.tsxpackages/genui/a2ui-playground/src/render.tsxpackages/genui/a2ui-playground/src/styles.csspackages/genui/a2ui-playground/src/utils/renderUrl.ts
🚧 Files skipped from review as they are similar to previous changes (5)
- packages/genui/a2ui-playground/lynx-src/App.tsx
- packages/genui/a2ui-playground/src/render.tsx
- packages/genui/a2ui-playground/rsbuild.config.ts
- packages/genui/a2ui-playground/src/pages/AIChatPage.tsx
- packages/genui/a2ui-playground/src/styles.css
Codecov Report✅ All modified and coverable lines are covered by tests. 📢 Thoughts on this report? Let us know! |
Merging this PR will degrade performance by 10.63%
|
| Benchmark | BASE |
HEAD |
Efficiency | |
|---|---|---|---|---|
| ❌ | transform 1000 view elements |
40 ms | 44.7 ms | -10.63% |
Comparing Huxpro:Huxpro/a2ui-playground-improvements (2d5c5e5) with main (f706c3a)
Footnotes
-
26 benchmarks were skipped, so the baseline results were used instead. If they were deleted from the codebase, click here and archive them to remove them from the performance reports. ↩
React External#877 Bundle Size — 680.82KiB (0%).2d5c5e5(current) vs f706c3a main#867(baseline) Bundle metrics
|
| Current #877 |
Baseline #867 |
|
|---|---|---|
0B |
0B |
|
0B |
0B |
|
0% |
0% |
|
0 |
0 |
|
3 |
3 |
|
17 |
17 |
|
5 |
5 |
|
8.59% |
8.59% |
|
0 |
0 |
|
0 |
0 |
Bundle analysis report Branch Huxpro:Huxpro/a2ui-playground-im... Project dashboard
Generated by RelativeCI Documentation Report issue
Web Explorer#9335 Bundle Size — 900.03KiB (0%).2d5c5e5(current) vs f706c3a main#9325(baseline) Bundle metrics
|
| Current #9335 |
Baseline #9325 |
|
|---|---|---|
44.46KiB |
44.46KiB |
|
2.22KiB |
2.22KiB |
|
0% |
0% |
|
9 |
9 |
|
11 |
11 |
|
229 |
229 |
|
11 |
11 |
|
27.28% |
27.28% |
|
10 |
10 |
|
0 |
0 |
Bundle size by type no changes
| Current #9335 |
Baseline #9325 |
|
|---|---|---|
495.9KiB |
495.9KiB |
|
401.92KiB |
401.92KiB |
|
2.22KiB |
2.22KiB |
Bundle analysis report Branch Huxpro:Huxpro/a2ui-playground-im... Project dashboard
Generated by RelativeCI Documentation Report issue
React Example (Element Template)#30 Bundle Size — 198.61KiB (0%).2d5c5e5(current) vs f706c3a main#20(baseline) Bundle metrics
Bundle size by type
|
| Current #30 |
Baseline #20 |
|
|---|---|---|
145.76KiB |
145.76KiB |
|
52.85KiB |
52.85KiB |
Bundle analysis report Branch Huxpro:Huxpro/a2ui-playground-im... Project dashboard
Generated by RelativeCI Documentation Report issue
React MTF Example#894 Bundle Size — 196.68KiB (0%).2d5c5e5(current) vs f706c3a main#884(baseline) Bundle metrics
|
| Current #894 |
Baseline #884 |
|
|---|---|---|
0B |
0B |
|
0B |
0B |
|
0% |
0% |
|
0 |
0 |
|
3 |
3 |
|
174 |
174 |
|
66 |
66 |
|
44.05% |
44.05% |
|
2 |
2 |
|
0 |
0 |
Bundle size by type no changes
| Current #894 |
Baseline #884 |
|
|---|---|---|
111.23KiB |
111.23KiB |
|
85.45KiB |
85.45KiB |
Bundle analysis report Branch Huxpro:Huxpro/a2ui-playground-im... Project dashboard
Generated by RelativeCI Documentation Report issue
React Example#7762 Bundle Size — 225.52KiB (0%).2d5c5e5(current) vs f706c3a main#7752(baseline) Bundle metrics
|
| Current #7762 |
Baseline #7752 |
|
|---|---|---|
0B |
0B |
|
0B |
0B |
|
0% |
0% |
|
0 |
0 |
|
4 |
4 |
|
180 |
180 |
|
69 |
69 |
|
44.54% |
44.54% |
|
2 |
2 |
|
0 |
0 |
Bundle size by type no changes
| Current #7762 |
Baseline #7752 |
|
|---|---|---|
145.76KiB |
145.76KiB |
|
79.77KiB |
79.77KiB |
Bundle analysis report Branch Huxpro:Huxpro/a2ui-playground-im... Project dashboard
Generated by RelativeCI Documentation Report issue
Summary
demos/*.jsonvia rsbuildoutput.copy) and reference them with?demo=<id>(~95 char URLs) instead of inlining base64url payloads (~11,000 chars). All demo QR codes now work on the deployed site.ⓘ Simulatedinfo indicator (click-toggleable tooltip) and a speed slider (0.25x–4x) to control streaming replay speed.render.tsxfetches demo JSONs in the browser context instead of relying onfetch()in Lynx's worker thread (where it's unavailable).localhost/127.0.0.1with the detected LAN IP in QR URLs so phones on the same network can reach the dev server.messagesUrlpointing to the static JSON for native preview (LynxExplorer), keeping those QR codes scannable too.inset box-shadowleft-bar style with a border outline for both Demos and Components pages.Test plan
ⓘ Simulatedbutton — verify tooltip togglespnpm --filter a2ui-playground build) succeeds withdist/demos/*.jsonpresentSummary by CodeRabbit
New Features
UI/UX Improvements