FE-225, H-6116, H-6286: Update Petrinaut UI#8472
Merged
Conversation
|
The latest updates on your projects. Learn more about Vercel for GitHub.
2 Skipped Deployments
|
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
This was referenced Feb 23, 2026
Collaborator
Author
This stack of pull requests is managed by Graphite. Learn more about stacking. |
3 tasks
libs/@hashintel/petrinaut/src/components/sub-view/vertical/proportional-sub-views-container.tsx
Fixed
Show fixed
Hide fixed
Replace escape-hatch values with semantic tokens from the ds-theme preset across 43 files: fontSize, fontWeight, fontFamily, borderRadius, spacing, backgroundColor, color, borderColor, and zIndex. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Replace custom ColorSelect with shared Select using renderTrigger/renderItem, use IconButton for add/delete dimension actions, add tooltip to Dimensions section, and migrate remaining hardcoded CSS values to design tokens. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Replace direct <button> elements with the shared IconButton component across sidebar lists, bottom panel, top bar, and viewport controls. Removes duplicate button styles and hamburger-menu.tsx. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Scale icon font size based on IconButton size (xxs=12px through lg=20px). Standardize all SubView and Section header action buttons to size="xs". Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Split editionMode into separate editionMode ("cursor" | "add-place" |
"add-transition") and cursorMode ("select" | "pan") fields in
EditorContext. The cursor preference is persisted to localStorage via
UserSettingsContext so it survives page refreshes and is preserved when
switching to add-place/add-transition modes.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Rewrite ds-components Button with proper design tokens from ds-theme, matching the Figma design system specs for sizes, colors, and states - Add "error" variant and "subtle" colorScheme to Button - Add ghost hover border, fix disabled opacity to 0.4, use token-based sizing (spacing, radii, fontSizes, lineHeights) - Migrate petrinaut Button and Switch to re-export from ds-components with withTooltip wrappers - Include ds-components source in petrinaut PandaCSS config so styles for shared components are generated in petrinaut's stylesheet - Update viewport-settings-dialog and place/diff-eq properties to use ds-components Button variants instead of custom inline styles Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…rectly Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…ce condition Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Merged
3 tasks
There was a problem hiding this comment.
Cursor Bugbot has reviewed your changes and found 1 potential issue.
Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.
CiaranMn
reviewed
Mar 6, 2026
Member
CiaranMn
left a comment
There was a problem hiding this comment.
Looks great! Just a few small comments
libs/@hashintel/petrinaut/src/views/SDCPN/components/viewport-settings-dialog.tsx
Outdated
Show resolved
Hide resolved
libs/@hashintel/petrinaut/src/views/SDCPN/components/viewport-settings-dialog.tsx
Outdated
Show resolved
Hide resolved
libs/@hashintel/petrinaut/src/views/SDCPN/components/viewport-settings-dialog.tsx
Outdated
Show resolved
Hide resolved
- Rename "Custom" arc rendering to "Adaptive Bezier" for clarity - Add description sub-text for Animations and Keep Panels Mounted settings - Move state setters out of Spreadsheet's setTableData updater to avoid impure side effects Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
CiaranMn
approved these changes
Mar 6, 2026
Contributor
Benchmark results
|
| Function | Value | Mean | Flame graphs |
|---|---|---|---|
| resolve_policies_for_actor | user: empty, selectivity: high, policies: 2002 | Flame Graph | |
| resolve_policies_for_actor | user: empty, selectivity: low, policies: 1 | Flame Graph | |
| resolve_policies_for_actor | user: empty, selectivity: medium, policies: 1001 | Flame Graph | |
| resolve_policies_for_actor | user: seeded, selectivity: high, policies: 3314 | Flame Graph | |
| resolve_policies_for_actor | user: seeded, selectivity: low, policies: 1 | Flame Graph | |
| resolve_policies_for_actor | user: seeded, selectivity: medium, policies: 1526 | Flame Graph | |
| resolve_policies_for_actor | user: system, selectivity: high, policies: 2078 | Flame Graph | |
| resolve_policies_for_actor | user: system, selectivity: low, policies: 1 | Flame Graph | |
| resolve_policies_for_actor | user: system, selectivity: medium, policies: 1033 | Flame Graph |
policy_resolution_medium
| Function | Value | Mean | Flame graphs |
|---|---|---|---|
| resolve_policies_for_actor | user: empty, selectivity: high, policies: 102 | Flame Graph | |
| resolve_policies_for_actor | user: empty, selectivity: low, policies: 1 | Flame Graph | |
| resolve_policies_for_actor | user: empty, selectivity: medium, policies: 51 | Flame Graph | |
| resolve_policies_for_actor | user: seeded, selectivity: high, policies: 269 | Flame Graph | |
| resolve_policies_for_actor | user: seeded, selectivity: low, policies: 1 | Flame Graph | |
| resolve_policies_for_actor | user: seeded, selectivity: medium, policies: 107 | Flame Graph | |
| resolve_policies_for_actor | user: system, selectivity: high, policies: 133 | Flame Graph | |
| resolve_policies_for_actor | user: system, selectivity: low, policies: 1 | Flame Graph | |
| resolve_policies_for_actor | user: system, selectivity: medium, policies: 63 | Flame Graph |
policy_resolution_none
| Function | Value | Mean | Flame graphs |
|---|---|---|---|
| resolve_policies_for_actor | user: empty, selectivity: high, policies: 2 | Flame Graph | |
| resolve_policies_for_actor | user: empty, selectivity: low, policies: 1 | Flame Graph | |
| resolve_policies_for_actor | user: empty, selectivity: medium, policies: 1 | Flame Graph | |
| resolve_policies_for_actor | user: system, selectivity: high, policies: 8 | Flame Graph | |
| resolve_policies_for_actor | user: system, selectivity: low, policies: 1 | Flame Graph | |
| resolve_policies_for_actor | user: system, selectivity: medium, policies: 3 | Flame Graph |
policy_resolution_small
| Function | Value | Mean | Flame graphs |
|---|---|---|---|
| resolve_policies_for_actor | user: empty, selectivity: high, policies: 52 | Flame Graph | |
| resolve_policies_for_actor | user: empty, selectivity: low, policies: 1 | Flame Graph | |
| resolve_policies_for_actor | user: empty, selectivity: medium, policies: 25 | Flame Graph | |
| resolve_policies_for_actor | user: seeded, selectivity: high, policies: 94 | Flame Graph | |
| resolve_policies_for_actor | user: seeded, selectivity: low, policies: 1 | Flame Graph | |
| resolve_policies_for_actor | user: seeded, selectivity: medium, policies: 26 | Flame Graph | |
| resolve_policies_for_actor | user: system, selectivity: high, policies: 66 | Flame Graph | |
| resolve_policies_for_actor | user: system, selectivity: low, policies: 1 | Flame Graph | |
| resolve_policies_for_actor | user: system, selectivity: medium, policies: 29 | Flame Graph |
read_scaling_complete
| Function | Value | Mean | Flame graphs |
|---|---|---|---|
| entity_by_id;one_depth | 1 entities | Flame Graph | |
| entity_by_id;one_depth | 10 entities | Flame Graph | |
| entity_by_id;one_depth | 25 entities | Flame Graph | |
| entity_by_id;one_depth | 5 entities | Flame Graph | |
| entity_by_id;one_depth | 50 entities | Flame Graph | |
| entity_by_id;two_depth | 1 entities | Flame Graph | |
| entity_by_id;two_depth | 10 entities | Flame Graph | |
| entity_by_id;two_depth | 25 entities | Flame Graph | |
| entity_by_id;two_depth | 5 entities | Flame Graph | |
| entity_by_id;two_depth | 50 entities | Flame Graph | |
| entity_by_id;zero_depth | 1 entities | Flame Graph | |
| entity_by_id;zero_depth | 10 entities | Flame Graph | |
| entity_by_id;zero_depth | 25 entities | Flame Graph | |
| entity_by_id;zero_depth | 5 entities | Flame Graph | |
| entity_by_id;zero_depth | 50 entities | Flame Graph |
read_scaling_linkless
| Function | Value | Mean | Flame graphs |
|---|---|---|---|
| entity_by_id | 1 entities | Flame Graph | |
| entity_by_id | 10 entities | Flame Graph | |
| entity_by_id | 100 entities | Flame Graph | |
| entity_by_id | 1000 entities | Flame Graph | |
| entity_by_id | 10000 entities | Flame Graph |
representative_read_entity
| Function | Value | Mean | Flame graphs |
|---|---|---|---|
| entity_by_id | entity type ID: https://blockprotocol.org/@alice/types/entity-type/block/v/1
|
Flame Graph | |
| entity_by_id | entity type ID: https://blockprotocol.org/@alice/types/entity-type/book/v/1
|
Flame Graph | |
| entity_by_id | entity type ID: https://blockprotocol.org/@alice/types/entity-type/building/v/1
|
Flame Graph | |
| entity_by_id | entity type ID: https://blockprotocol.org/@alice/types/entity-type/organization/v/1
|
Flame Graph | |
| entity_by_id | entity type ID: https://blockprotocol.org/@alice/types/entity-type/page/v/2
|
Flame Graph | |
| entity_by_id | entity type ID: https://blockprotocol.org/@alice/types/entity-type/person/v/1
|
Flame Graph | |
| entity_by_id | entity type ID: https://blockprotocol.org/@alice/types/entity-type/playlist/v/1
|
Flame Graph | |
| entity_by_id | entity type ID: https://blockprotocol.org/@alice/types/entity-type/song/v/1
|
Flame Graph | |
| entity_by_id | entity type ID: https://blockprotocol.org/@alice/types/entity-type/uk-address/v/1
|
Flame Graph |
representative_read_entity_type
| Function | Value | Mean | Flame graphs |
|---|---|---|---|
| get_entity_type_by_id | Account ID: bf5a9ef5-dc3b-43cf-a291-6210c0321eba
|
Flame Graph |
representative_read_multiple_entities
| Function | Value | Mean | Flame graphs |
|---|---|---|---|
| entity_by_property | traversal_paths=0 | 0 | |
| entity_by_property | traversal_paths=255 | 1,resolve_depths=inherit:1;values:255;properties:255;links:127;link_dests:126;type:true | |
| entity_by_property | traversal_paths=2 | 1,resolve_depths=inherit:0;values:0;properties:0;links:0;link_dests:0;type:false | |
| entity_by_property | traversal_paths=2 | 1,resolve_depths=inherit:0;values:0;properties:0;links:1;link_dests:0;type:true | |
| entity_by_property | traversal_paths=2 | 1,resolve_depths=inherit:0;values:0;properties:2;links:1;link_dests:0;type:true | |
| entity_by_property | traversal_paths=2 | 1,resolve_depths=inherit:0;values:2;properties:2;links:1;link_dests:0;type:true | |
| link_by_source_by_property | traversal_paths=0 | 0 | |
| link_by_source_by_property | traversal_paths=255 | 1,resolve_depths=inherit:1;values:255;properties:255;links:127;link_dests:126;type:true | |
| link_by_source_by_property | traversal_paths=2 | 1,resolve_depths=inherit:0;values:0;properties:0;links:0;link_dests:0;type:false | |
| link_by_source_by_property | traversal_paths=2 | 1,resolve_depths=inherit:0;values:0;properties:0;links:1;link_dests:0;type:true | |
| link_by_source_by_property | traversal_paths=2 | 1,resolve_depths=inherit:0;values:0;properties:2;links:1;link_dests:0;type:true | |
| link_by_source_by_property | traversal_paths=2 | 1,resolve_depths=inherit:0;values:2;properties:2;links:1;link_dests:0;type:true |
scenarios
| Function | Value | Mean | Flame graphs |
|---|---|---|---|
| full_test | query-limited | Flame Graph | |
| full_test | query-unlimited | Flame Graph | |
| linked_queries | query-limited | Flame Graph | |
| linked_queries | query-unlimited | Flame Graph |
This was referenced Mar 7, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.

🌟 What is the purpose of this PR?
First pass at migrating the Petrinaut editor UI toward Figma design specs. This doesn't fully complete the migration but establishes the structural foundation — shared components, design tokens, layout patterns — that the remaining work builds on.
🔗 Related links
🔍 What does this change?
Layout & panels
react-resizable-panelsfor vertical sub-viewsShared components
Popover,Dialog,Menu,Section,SegmentGroup,IconButton,Tooltip,Spreadsheet,StackcomponentsSelectfrom native<select>to Ark UI with Figma stylingNumberInputandInputwith Figma tokens and size variantsArcItemcomponent with inset separators and inline editingGlassPanelresize handle restyling with Panda CSScvaButtonandSwitchto shared@hashintel/ds-componentslibraryButtonwith all Figma variants (primary, secondary, ghost, error) and color schemes (brand, neutral, critical, subtle)inline-flexalignment fix to ds-componentsSwitchfor proper vertical centering in flex containersCanvas & nodes
Design tokens
neutral.fg.*,neutral.bg.*,neutral.bd.*semantic color tokens throughout@hashintel/ds-componentssource in petrinaut's PandaCSS config for shared component style generationEditor state & cursor persistence
editionModeintoeditionMode("cursor" | "add-place" | "add-transition") andcursorMode("select" | "pan") in EditorContextIconButtoncomponent; migrate type-properties to shared components and design tokensInfrastructure
UserSettingsContextwith localStorage persistence for animations, compact nodes, arc rendering, and sub-view panel statePre-Merge Checklist 🚀
🚢 Has this modified a publishable library?
This PR:
📜 Does this require a change to the docs?
The changes in this PR:
🕸️ Does this require a change to the Turbo Graph?
The changes in this PR:
🐾 Next steps
🛡 What tests cover this?
❓ How to test this?
📹 Demo