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
{{ message }}
Repository navigation
I hope it is easy and convenient to modify the component's style, similar to the style attribute in HTML. #185
@zhuyuanmin I hear you my friend and I know what you mean.
I'm currently working HARD to get the fundamentals as good as possible. This should be finished today, then I'll take deep and comprehensive dives into the UI and styling options.
You are talking about the perry/ui components though, right?
@zhuyuanmin I hear you my friend and I know what you mean.
I'm currently working HARD to get the fundamentals as good as possible. This should be finished today, then I'll take deep and comprehensive dives into the UI and styling options.
You are talking about the perry/ui components though, right?
Yes, you are right.
It is indeed a fantastic project to look forward to. I think I would be happy to participate in its development.
Closing — all three explicit asks from this issue are now shipped end-to-end.
1. Rich styling primitives — Phase A landed the machine-checked styling matrix (crates/perry-ui/src/styling_matrix.rs + drift CI gate); Phase B closed every cross-platform gap surfaced by the audit (shadow / opacity / borders / text-decoration / font_family); Phase C wired the inline style: { ... } API on every Widget constructor (Button, Text, VStack/HStack, etc.) with both compile-time string-color parsing ("#3B82F6", named colors) and runtime parseColor for dynamic values.
2. Cross-platform parity — styling matrix at 42-43/43 Wired on every platform Perry currently supports (macOS / iOS / tvOS / visionOS / watchOS / Android / GTK4 / Windows / Web). The lone remaining Stub is Win32 widget.shadow, which needs DirectComposition infra and is tracked under #230.
3. Devtools — Phase D shipped the live inspector at localhost:7676/:
Step 1 (v0.5.349): tree view + per-widget metadata page served from the geisterhand HTTP server.
Step 2 (v0.5.350 macOS, v0.5.360 iOS / tvOS / GTK4 / Windows): live style editing via POST /style/:h → main-thread apply_style dispatcher → existing per-platform setters. 9 editable StyleProps in the inspector UI's right-column edit fields.
Step 3 (v0.5.361): live screenshot preview in the inspector's center column, with a selection overlay that highlights the clicked widget's frame on top of the live image.
Tracked follow-ups (all separately ticketed so they don't leak into search-archeology):
#230 — Win32 DirectComposition shadow (the last styling matrix Stub).
#242 — visionOS full geisterhand fn-pointer registration block.
Reference points for anyone landing follow-up work: the styling matrix is the source of truth for what's wired vs missing per backend; the inspector page (crates/perry-ui-geisterhand/src/inspector_ui/index.html) is the canonical consumer of the live edit + screenshot endpoints.
Activity
proggeramlug commentedon Apr 25, 2026
@zhuyuanmin I hear you my friend and I know what you mean.
I'm currently working HARD to get the fundamentals as good as possible. This should be finished today, then I'll take deep and comprehensive dives into the UI and styling options.
You are talking about the perry/ui components though, right?
zhuyuanmin commentedon Apr 25, 2026
Yes, you are right.
It is indeed a fantastic project to look forward to. I think I would be happy to participate in its development.
proggeramlug commentedon Apr 25, 2026
@zhuyuanmin Thanks! :)
Feel free - anything helps:
feat(ui): #185 Phase C step 6 — hex strings + gradient (v0.5.310)
feat(ui): PerryTS#185 Phases A + B — styling matrix + 4 cross-platfor…
fix(ui): PerryTS#185 hidden row FFI naming inconsistency (v0.5.302)
feat(ui): PerryTS#185 Web alias sweep — matrix Web at 43/43 Wired (v0…
feat(ui): PerryTS#185 Phase C step 1 — StyleProps type surface (v0.5.…
feat(ui): PerryTS#185 Phase C step 2 — inline `style: {...}` on Butto…
feat(ui): PerryTS#185 Phase C step 3 — color/padding/shadow inline de…
feat(ui): PerryTS#185 Phase C step 4 — inline style on every table wi…
feat(ui): PerryTS#185 Phase C step 5 — inline style on VStack / HStac…
feat(ui): #185 Phase C step 7 — runtime parseColor for dynamic values…
docs(ui): #185 epilogue — styling docs + Windows tracking issue (v0.5…
2 remaining items
yumin-chen commentedon Apr 27, 2026
possible to support panda.js as an option? I love css-in-js
refactor(codegen): extract ui_styling from lower_call.rs (v0.5.334)
fix(ui-{ios,tvos,visionos}): #185 Button color routes setTextColor: o…
feat(geisterhand): #185 Phase D step 1 — live inspector UI at localho…
feat(geisterhand): #185 Phase D step 2 — live style edit + inspector …
feat(geisterhand): #185 Phase D step 2 platform sweep — apply_style o…
feat(geisterhand): #185 Phase D step 3 — live screenshot preview in i…
proggeramlug commentedon Apr 28, 2026
Closing — all three explicit asks from this issue are now shipped end-to-end.
1. Rich styling primitives — Phase A landed the machine-checked styling matrix (
crates/perry-ui/src/styling_matrix.rs+ drift CI gate); Phase B closed every cross-platform gap surfaced by the audit (shadow / opacity / borders / text-decoration / font_family); Phase C wired the inlinestyle: { ... }API on every Widget constructor (Button, Text, VStack/HStack, etc.) with both compile-time string-color parsing ("#3B82F6", named colors) and runtime parseColor for dynamic values.2. Cross-platform parity — styling matrix at 42-43/43 Wired on every platform Perry currently supports (macOS / iOS / tvOS / visionOS / watchOS / Android / GTK4 / Windows / Web). The lone remaining
Stubis Win32widget.shadow, which needs DirectComposition infra and is tracked under #230.3. Devtools — Phase D shipped the live inspector at
localhost:7676/:POST /style/:h→ main-threadapply_styledispatcher → existing per-platform setters. 9 editable StyleProps in the inspector UI's right-column edit fields.Tracked follow-ups (all separately ticketed so they don't leak into search-archeology):
Stub).apply_styledispatcher (JNI-marshaling caveats).ui/gallery.tsrecurring retina screenshot baseline mismatch (pre-existing, unrelated to I hope it is easy and convenient to modify the component's style, similar to thestyleattribute in HTML. #185 but flagged during the audit).Reference points for anyone landing follow-up work: the styling matrix is the source of truth for what's wired vs missing per backend; the inspector page (
crates/perry-ui-geisterhand/src/inspector_ui/index.html) is the canonical consumer of the live edit + screenshot endpoints.feat(ui-visionos): #242 register full geisterhand fn-pointer block (v…
feat(ui-android): closes #243 — geisterhand apply_style dispatcher (v…
feat(ui-android): closes #243 — geisterhand apply_style dispatcher (v…
fix(codegen): perry/system table must not hijack same-named imported …
fix(codegen): perry/system table must not hijack same-named imported …
fix(codegen): perry/system table must not hijack same-named imported …