Skip to content

Conversation

@Simon-Lajoie
Copy link
Contributor

@Simon-Lajoie Simon-Lajoie commented Aug 25, 2025

  • Changed modding tabs to vertical layout (consistent with Ingestion and AI Tools)

  • Preserved bar features in property panel (back arrow, project title, burger menu)

  • Renamed tab "Captures / Setup" → "Project Setup"

  • Updated UI spacing, constants, and top bar alignment for vertical modding tabs

  • Added changelog entry for tab layout changes

  • Updated root changelog

Here is a preview of the new layout (changes highlighted in red):
newModdingTabs

Example - Asset Replacements tab:
newModdingTabs2

Example - Mod Packaging tab:
newModdingTabs3

Summary by CodeRabbit

  • New Features

    • Top bar with tabbed workflow and vertical modding tabs; editable project name (defaults to "Untitled Project").
  • Changes

    • “Captures / Setup” renamed to “Project Setup.”
    • Spacing/layout adjusted across modding and property panels; improved tab selection on resume and splitter behavior.
    • Top-bar title styling enhanced for visibility.
    • Removed legacy components pane/controller integration.
  • Documentation

    • Changelogs and docs updated for UI and naming changes.
  • Chores

    • Package version bumps and dependency updates.

@github-actions
Copy link

github-actions bot commented Aug 25, 2025

All contributors have signed the CLA ✍️ ✅
Posted by the CLA Assistant Lite bot.

@Simon-Lajoie
Copy link
Contributor Author

I have read the CLA Document and I hereby sign the CLA

@coderabbitai
Copy link

coderabbitai bot commented Aug 25, 2025

Walkthrough

Replaces the left components pane with a top bar and vertical tab layout; adds editable project-name UI and UNTITLED_PROJECT_NAME constant; renames a modding tab to "Project Setup"; removes the components_pane.controller extension and its SetupUI; adjusts spacers/styles; updates manifests, docs, and tests.

Changes

Cohort / File(s) Summary
Stagecraft layout UI refactor
source/extensions/lightspeed.trex.layout.stagecraft/lightspeed/trex/layout/stagecraft/setup_ui.py
Replaces left components pane with a top bar and _TabbedFrame; adds project-name display/edit flow; adds HEIGHT_TOP_BAR/WIDTH_TOP_BAR (removes WIDTH_COMPONENT_PANEL); adds tab wiring, splitter maths, resume behavior, and project-name editing handlers.
Components pane controller removal
source/extensions/lightspeed.trex.components_pane.stagecraft.controller/config/extension.toml, .../controller/docs/*, .../controller/lightspeed/trex/components_pane/stagecraft/controller/*
Removes extension manifest, docs (README/CHANGELOG/index.rst), __init__.py re-export, and setup_ui.py implementation — deleting module lightspeed.trex.components_pane.stagecraft.controller and its SetupUI class.
Model label rename
source/extensions/lightspeed.trex.components_pane.stagecraft.models/.../model_items.py
Changes EnumItems.MOD_SETUP value from "Captures / Setup" to "Project Setup" (UI label change).
Common constant
source/extensions/lightspeed.common/lightspeed/common/constants.py
Adds UNTITLED_PROJECT_NAME = "Untitled Project".
Tabbed widget API tweak
source/extensions/omni.flux.tabbed.widget/omni/flux/tabbed/widget/setup_ui.py
Adds add_initial_spacer: bool = True argument to SetupUI.__init__ and makes initial spacer conditional.
Properties pane spacing adjustments
source/extensions/lightspeed.trex.properties_pane.shared.asset_replacements.widget/.../setup_ui.py, .../mod_packaging/.../setup_ui.py, .../mod_setup/.../setup_ui.py
Removes/adjusts several ui.Spacer instances and converts some vertical spacers to horizontal ones to align with vertical tabs; layout-only changes.
Package manifests: versions & deps
source/extensions/.../config/extension.toml (multiple)
Bumped package versions across extensions; trex.layout.stagecraft and others removed dependency lightspeed.trex.components_pane.stagecraft.controller; added omni.flux.tabbed.widget and other deps where noted.
Docs & changelogs
CHANGELOG.md, source/extensions/*/docs/CHANGELOG.md, docs/howto/learning-toolkit.md
Added/updated changelog entries and docs reflecting vertical modding tabs, spacing tweaks, untitled-project constant, and "Project Setup" renaming; some changelog heading level adjustments.
App dependency file
source/apps/exts.deps.generated.kit
Removed lightspeed.trex.components_pane.stagecraft.controller dependency entry.
Style additions
source/extensions/lightspeed.trex.app.style/lightspeed/trex/app/style/trex_style.py
Adds Label::TopBarTitle styles (normal/hovered/selected) to style the top bar title.
Tests updated for tabbed UI
source/extensions/lightspeed.trex.control.stagecraft/.../test_stage_manger.py
Replaced UI panel clicks with direct programmatic tab selection (_tabbed_frame.selection = [...]), removed some panel lookups/clicks, and adjusted wait timings.

Sequence Diagram(s)

sequenceDiagram
  autonumber
  actor User
  participant TopBar as Top Bar UI
  participant Tabs as _TabbedFrame
  participant SetupUI
  participant Props as Property Panel

  User->>TopBar: click tab
  TopBar->>Tabs: change selection
  Tabs->>SetupUI: _on_tab_selection_changed(selected)
  SetupUI->>Props: show selected pane
  SetupUI->>Props: hide others
  Note right of Tabs #DDEBF7: Vertical tab selection drives property visibility
Loading
sequenceDiagram
  autonumber
  participant Stage as Stage Events
  participant SetupUI
  participant Label as Project Name UI

  Stage-->>SetupUI: OPENED / SAVED / CLOSED
  SetupUI->>SetupUI: _update_project_name_label()
  alt Stage has root path
    SetupUI->>Label: display root-derived name
  else No root path
    SetupUI->>Label: display "Untitled Project"
  end
  User->>Label: double-click
  Label->>SetupUI: _on_project_name_double_clicked(...)
  SetupUI->>Label: enable edit
  Label->>SetupUI: _on_end_edit_project_name(value)
Loading

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~60 minutes

Pre-merge checks (3 passed)

✅ Passed checks (3 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title Check ✅ Passed The title accurately and succinctly captures the primary change—switching the modding tabs to a vertical layout to match Ingestion and AI Tools—which directly reflects the PR objectives, affected UI/layout files, and tab renaming; it is a single clear sentence without noise.
Docstring Coverage ✅ Passed No functions found in the changes. Docstring coverage check skipped.

Poem

I hop through code with a twitch of my nose,
Tabs stand tall where the left panel goes.
“Project Setup” pops up, tidy and bright,
Untitled keeps name till the user writes.
Spacers rearranged — I hop in delight 🐇✨

Tip

👮 Agentic pre-merge checks are now available in preview!

Pro plan users can now enable pre-merge checks in their settings to enforce checklists before merging PRs.

  • Built-in checks – Quickly apply ready-made checks to enforce title conventions, require pull request descriptions that follow templates, validate linked issues for compliance, and more.
  • Custom agentic checks – Define your own rules using CodeRabbit’s advanced agentic capabilities to enforce organization-specific policies and workflows. For example, you can instruct CodeRabbit’s agent to verify that API documentation is updated whenever API schema files are modified in a PR. Note: Upto 5 custom checks are currently allowed during the preview period. Pricing for this feature will be announced in a few weeks.

Please see the documentation for more information.

Example:

reviews:
  pre_merge_checks:
    custom_checks:
      - name: "Undocumented Breaking Changes"
        mode: "warning"
        instructions: |
          Pass/fail criteria: All breaking changes to public APIs, CLI flags, environment variables, configuration keys, database schemas, or HTTP/GraphQL endpoints must be documented in the "Breaking Change" section of the PR description and in CHANGELOG.md. Exclude purely internal or private changes (e.g., code not exported from package entry points or explicitly marked as internal).

Please share your feedback with us on this Discord post.

Warning

Review ran into problems

🔥 Problems

Errors were encountered while retrieving linked issues.

Errors (1)
  • JIRA integration encountered authorization issues. Please disconnect and reconnect the integration in the CodeRabbit UI.

📜 Recent review details

Configuration used: Path: .coderabbit.yml

Review profile: CHILL

Plan: Pro

💡 Knowledge Base configuration:

  • Jira integration is disabled by default for public repositories

You can enable these sources in your CodeRabbit configuration.

📥 Commits

Reviewing files that changed from the base of the PR and between 742c0b0 and 1a31f0a.

📒 Files selected for processing (1)
  • CHANGELOG.md (2 hunks)
✅ Files skipped from review due to trivial changes (1)
  • CHANGELOG.md
✨ Finishing touches
🧪 Generate unit tests
  • Create PR with unit tests
  • Post copyable unit tests in a comment

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.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 9

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
source/extensions/lightspeed.trex.layout.stagecraft/lightspeed/trex/layout/stagecraft/setup_ui.py (1)

765-778: Add explicit cleanup for all subscriptions in Stagecraft SetupUI.destroy()

The current destroy() only handles feature-flag and task cleanup; the following subscriptions created earlier in setup_ui.py are not being unsubscribed or revoked:

  • _subcription_app_window_size_changed (window-resize event at lines 94–96)
  • _sub_stage_event (stage-event stream at lines 101–103)
  • _page_changed_sub and _page_changed_dialog_sub (global PAGE_CHANGED events at lines 119–124)

Neither this override nor the base-class destroy() calls into Carb’s/event-manager’s unsubscribe APIs or invokes .Revoke()/.destroy() on those subscription objects. You’ll need to add something along these lines before super().destroy():

     def destroy(self):
         if self._feature_flags_changed_subs:
             self._feature_flags_core.unsubscribe_feature_flags_changed(self._feature_flags_changed_subs)

+        if self._subcription_app_window_size_changed:
+            self._subcription_app_window_size_changed.Revoke()     # or .destroy()
+            self._subcription_app_window_size_changed = None
+
+        if self._sub_stage_event:
+            self._sub_stage_event.Revoke()
+            self._sub_stage_event = None
+
+        if self._page_changed_sub:
+            event_manager = _get_event_manager_instance()
+            event_manager.unsubscribe_global_custom_event(
+                GlobalEventNames.PAGE_CHANGED.value, self._page_changed_sub)
+            self._page_changed_sub = None
+
+        if self._page_changed_dialog_sub:
+            event_manager = _get_event_manager_instance()
+            event_manager.unsubscribe_global_custom_event(
+                GlobalEventNames.PAGE_CHANGED.value, self._page_changed_dialog_sub)
+            self._page_changed_dialog_sub = None
+
         if self.__enable_items_task:
             self.__enable_items_task.cancel()
         self.__enable_items_task = None

         if self.__update_recent_items_task:
             self.__update_recent_items_task.cancel()
         self.__update_recent_items_task = None

         super().destroy()

Please verify that each subscription type supports the chosen unsubscribe or .Revoke() method, and adjust accordingly to prevent memory leaks.

🧹 Nitpick comments (13)
source/extensions/lightspeed.trex.properties_pane.shared.mod_packaging.widget/docs/CHANGELOG.md (1)

4-7: Fix heading level for consistency.

Use “### Changed” instead of “## Changed” to match the rest of this file and the Keep a Changelog convention.

-## [1.2.2]
-## Changed
+## [1.2.2]
+### Changed
 - Adjusted spacing for the new vertical modding tabs
source/extensions/omni.flux.tabbed.widget/docs/CHANGELOG.md (1)

5-8: Normalize heading level of the new entry.

The new block uses “## Changed” whereas prior entries use “### Changed/Fixed”. Please align.

-## [1.2.2]
-## Changed
+## [1.2.2]
+### Changed
 - Adjusted spacing for the new vertical modding tabs
source/extensions/lightspeed.trex.properties_pane.shared.mod_setup.widget/docs/CHANGELOG.md (1)

4-7: Update heading level to “### Changed” for consistency.

Keeps formatting uniform with the rest of the file.

-## [1.7.2]
-## Changed
+## [1.7.2]
+### Changed
 - Adjusted spacing for the new vertical modding tabs
source/extensions/lightspeed.trex.layout.stagecraft/docs/CHANGELOG.md (1)

4-7: Changelog polish: add date and consider noting the “Project Setup” rename.

  • Suggest adding a date to “## [2.5.3]” (for example, “- 2025-08-25”) to match prior dated entries.
  • Since this release also renames “Captures / Setup” → “Project Setup” elsewhere in the PR, consider a sub-bullet or cross-reference here for traceability.
source/extensions/omni.flux.tabbed.widget/config/extension.toml (1)

3-3: Version bump to 1.2.2 aligns with the spacing adjustments.

Looks good and matches the referenced UI changes. Minor nit: the comment on Line 2 says “Semantic Versionning”; consider fixing the spelling in a follow-up.

CHANGELOG.md (2)

22-22: Use consistent terminology: "top bar" instead of "menu bar".

Other files and docs in this PR call this element the “top bar.” Aligning wording improves traceability and avoids ambiguity.

Apply this diff:

- - Added a new menu bar to support the vertical tab layout
+ - Added a new top bar to support the vertical tab layout

41-41: Call out the user-facing tab rename in the root changelog.

The PR renames “Captures / Setup” to “Project Setup,” which is user-visible and worth noting explicitly in the root changelog.

Apply this diff near the vertical tabs entry:

 - Changed modding tabs to a vertical layout, consistent with Ingestion and AI Tools tabs
+ - Renamed the "Captures / Setup" tab to "Project Setup"
source/extensions/lightspeed.trex.properties_pane.shared.mod_setup.widget/lightspeed/trex/properties_pane/shared/mod_setup/widget/setup_ui.py (1)

530-530: Right-side padding addition is fine; consider centralizing the 16px spacing as a named constant to keep panes consistent.

This file and Mod Packaging both introduce a 16px spacer. Defining a shared constant improves maintainability and visual consistency.

Apply this diff here:

-                        ui.Spacer(width=ui.Pixel(16))
+                        ui.Spacer(width=ui.Pixel(_RIGHT_SIDE_PADDING))

And add near the class’ constants (outside this hunk):

_RIGHT_SIDE_PADDING = 16  # keep in sync with other panes (e.g., Mod Packaging)
source/extensions/lightspeed.trex.properties_pane.shared.mod_packaging.widget/lightspeed/trex/properties_pane/shared/mod_packaging/widget/setup_ui.py (1)

190-190: Matches Mod Setup spacing; extract the 16px padding to a constant for consistency.

Same rationale as Mod Setup: avoids magic numbers and keeps panes visually aligned.

Apply this diff:

-                        ui.Spacer(width=ui.Pixel(16))
+                        ui.Spacer(width=ui.Pixel(_RIGHT_SIDE_PADDING))

And add near the top of this module:

_RIGHT_SIDE_PADDING = 16  # keep in sync with Mod Setup pane
source/extensions/omni.flux.tabbed.widget/omni/flux/tabbed/widget/setup_ui.py (2)

58-59: Docstring updated — consider clarifying orientation-specific behavior (optional)

Minor nit: “Add a spacer at the beginning of the tab list” could note that “beginning” maps to top (horizontal) vs left (vertical) for readability.


245-247: Conditional spacer creation is correct; avoids extra gutter in vertical mode

The guard prevents an extra empty column/row when the client disables it. No layout regressions expected.

To improve ergonomics and reduce future API misuse, consider adding small convenience wrappers (optional) since some callers intuitively look for methods:

# Optional wrappers (outside the changed hunk)
def get_model(self) -> _Model:
    return self._model

def set_selection(self, item_or_title):
    # Accept either an Item or a title string
    if hasattr(item_or_title, "title"):
        self.selection = [item_or_title.title]
    else:
        self.selection = [str(item_or_title)]

This keeps the canonical property API while accommodating common call patterns spotted in downstream code.

source/extensions/lightspeed.trex.layout.stagecraft/lightspeed/trex/layout/stagecraft/setup_ui.py (2)

144-155: Stage events: project name refresh and pane refresh are appropriate

Refreshing the project name on OPENED/CLOSED/SAVED and iterating panels to refresh aligns panels with the current stage. Consider batching or deferring multiple refreshes if you notice stutter on large scenes, but this is fine for now.

If performance becomes a concern, debounce the multiple panel.refresh() calls into a single microtask using next_update_async().


461-550: Top bar UI structure is sound; minor simplification opportunity for nested contexts

The ZStack/VStack/HStack structure and background layering reproduce the existing visual style. Static analysis notes several nested with blocks that can be flattened by using a single with with multiple context managers. It’s optional but reduces indentation and improves readability.

Example pattern:

- with ui.ZStack(height=ui.Pixel(self.HEIGHT_TOP_BAR)):
-     with ui.ZStack(height=ui.Pixel(self.HEIGHT_TOP_BAR)):
+ with ui.ZStack(height=ui.Pixel(self.HEIGHT_TOP_BAR)), ui.ZStack(height=ui.Pixel(self.HEIGHT_TOP_BAR)):
      ...

(Apply judiciously where it doesn’t harm clarity.)

📜 Review details

Configuration used: Path: .coderabbit.yml

Review profile: CHILL

Plan: Pro

💡 Knowledge Base configuration:

  • MCP integration is disabled by default for public repositories
  • Jira integration is disabled by default for public repositories
  • Linear integration is disabled by default for public repositories

You can enable these sources in your CodeRabbit configuration.

📥 Commits

Reviewing files that changed from the base of the PR and between 264d18d and 05b66df.

📒 Files selected for processing (20)
  • CHANGELOG.md (2 hunks)
  • source/extensions/lightspeed.common/lightspeed/common/constants.py (1 hunks)
  • source/extensions/lightspeed.trex.components_pane.stagecraft.models/config/extension.toml (1 hunks)
  • source/extensions/lightspeed.trex.components_pane.stagecraft.models/docs/CHANGELOG.md (1 hunks)
  • source/extensions/lightspeed.trex.components_pane.stagecraft.models/lightspeed/trex/components_pane/stagecraft/models/model_items.py (1 hunks)
  • source/extensions/lightspeed.trex.layout.stagecraft/config/extension.toml (2 hunks)
  • source/extensions/lightspeed.trex.layout.stagecraft/docs/CHANGELOG.md (1 hunks)
  • source/extensions/lightspeed.trex.layout.stagecraft/lightspeed/trex/layout/stagecraft/setup_ui.py (12 hunks)
  • source/extensions/lightspeed.trex.properties_pane.shared.asset_replacements.widget/config/extension.toml (1 hunks)
  • source/extensions/lightspeed.trex.properties_pane.shared.asset_replacements.widget/docs/CHANGELOG.md (1 hunks)
  • source/extensions/lightspeed.trex.properties_pane.shared.asset_replacements.widget/lightspeed/trex/properties_pane/shared/asset_replacements/widget/setup_ui.py (1 hunks)
  • source/extensions/lightspeed.trex.properties_pane.shared.mod_packaging.widget/config/extension.toml (1 hunks)
  • source/extensions/lightspeed.trex.properties_pane.shared.mod_packaging.widget/docs/CHANGELOG.md (1 hunks)
  • source/extensions/lightspeed.trex.properties_pane.shared.mod_packaging.widget/lightspeed/trex/properties_pane/shared/mod_packaging/widget/setup_ui.py (1 hunks)
  • source/extensions/lightspeed.trex.properties_pane.shared.mod_setup.widget/config/extension.toml (1 hunks)
  • source/extensions/lightspeed.trex.properties_pane.shared.mod_setup.widget/docs/CHANGELOG.md (1 hunks)
  • source/extensions/lightspeed.trex.properties_pane.shared.mod_setup.widget/lightspeed/trex/properties_pane/shared/mod_setup/widget/setup_ui.py (1 hunks)
  • source/extensions/omni.flux.tabbed.widget/config/extension.toml (1 hunks)
  • source/extensions/omni.flux.tabbed.widget/docs/CHANGELOG.md (1 hunks)
  • source/extensions/omni.flux.tabbed.widget/omni/flux/tabbed/widget/setup_ui.py (4 hunks)
🧰 Additional context used
📓 Path-based instructions (1)
source/extensions/**/config/extension.toml

⚙️ CodeRabbit configuration file

source/extensions/**/config/extension.toml: Ignore remarks about un-pinned dependencies; our team intentionally leaves "omni.flux.*" and "lightspeed.*"
dependencies without an explicit version to get the latest version.

Files:

  • source/extensions/omni.flux.tabbed.widget/config/extension.toml
  • source/extensions/lightspeed.trex.components_pane.stagecraft.models/config/extension.toml
  • source/extensions/lightspeed.trex.properties_pane.shared.mod_packaging.widget/config/extension.toml
  • source/extensions/lightspeed.trex.properties_pane.shared.mod_setup.widget/config/extension.toml
  • source/extensions/lightspeed.trex.properties_pane.shared.asset_replacements.widget/config/extension.toml
  • source/extensions/lightspeed.trex.layout.stagecraft/config/extension.toml
🧬 Code graph analysis (1)
source/extensions/lightspeed.trex.layout.stagecraft/lightspeed/trex/layout/stagecraft/setup_ui.py (2)
source/extensions/omni.flux.tabbed.widget/omni/flux/tabbed/widget/setup_ui.py (8)
  • SetupUI (34-328)
  • get_frame (125-135)
  • model (158-159)
  • selection (173-175)
  • selection (178-185)
  • add (141-155)
  • subscribe_selection_changed (96-101)
  • destroy (325-328)
source/extensions/lightspeed.trex.properties_pane.stagecraft.widget/lightspeed/trex/properties_pane/stagecraft/widget/setup_ui.py (3)
  • SetupUI (28-64)
  • get_frame (40-44)
  • show_panel (53-59)
🪛 LanguageTool
source/extensions/lightspeed.trex.properties_pane.shared.asset_replacements.widget/docs/CHANGELOG.md

[grammar] ~4-~4: There might be a mistake here.
Context: ...epachangelog.com/en/1.0.0/). ## [1.9.1] ### Changed - Adjusted spacing for the new v...

(QB_NEW_EN)


[grammar] ~5-~5: There might be a mistake here.
Context: ....com/en/1.0.0/). ## [1.9.1] ### Changed - Adjusted spacing for the new vertical mo...

(QB_NEW_EN)

source/extensions/lightspeed.trex.properties_pane.shared.mod_packaging.widget/docs/CHANGELOG.md

[grammar] ~4-~4: There might be a mistake here.
Context: ...epachangelog.com/en/1.0.0/). ## [1.2.2] ## Changed - Adjusted spacing for the new v...

(QB_NEW_EN)


[grammar] ~5-~5: There might be a mistake here.
Context: ...g.com/en/1.0.0/). ## [1.2.2] ## Changed - Adjusted spacing for the new vertical mo...

(QB_NEW_EN)

source/extensions/lightspeed.trex.layout.stagecraft/docs/CHANGELOG.md

[grammar] ~4-~4: There might be a mistake here.
Context: ...epachangelog.com/en/1.0.0/). ## [2.5.3] ## Changed - Changed modding tabs to vertic...

(QB_NEW_EN)


[grammar] ~5-~5: There might be a mistake here.
Context: ...g.com/en/1.0.0/). ## [2.5.3] ## Changed - Changed modding tabs to vertical layout ...

(QB_NEW_EN)

source/extensions/lightspeed.trex.components_pane.stagecraft.models/docs/CHANGELOG.md

[grammar] ~4-~4: There might be a mistake here.
Context: ...epachangelog.com/en/1.0.0/). ## [1.1.2] ## Changed - Renamed the modding tab from "...

(QB_NEW_EN)


[grammar] ~5-~5: There might be a mistake here.
Context: ...g.com/en/1.0.0/). ## [1.1.2] ## Changed - Renamed the modding tab from "Captures /...

(QB_NEW_EN)

source/extensions/omni.flux.tabbed.widget/docs/CHANGELOG.md

[grammar] ~5-~5: There might be a mistake here.
Context: ...epachangelog.com/en/1.0.0/). ## [1.2.2] ## Changed - Adjusted spacing for the new v...

(QB_NEW_EN)


[grammar] ~6-~6: There might be a mistake here.
Context: ...g.com/en/1.0.0/). ## [1.2.2] ## Changed - Adjusted spacing for the new vertical mo...

(QB_NEW_EN)

source/extensions/lightspeed.trex.properties_pane.shared.mod_setup.widget/docs/CHANGELOG.md

[grammar] ~4-~4: There might be a mistake here.
Context: ...epachangelog.com/en/1.0.0/). ## [1.7.2] ## Changed - Adjusted spacing for the new v...

(QB_NEW_EN)


[grammar] ~5-~5: There might be a mistake here.
Context: ...g.com/en/1.0.0/). ## [1.7.2] ## Changed - Adjusted spacing for the new vertical mo...

(QB_NEW_EN)

🪛 Ruff (0.12.2)
source/extensions/lightspeed.trex.layout.stagecraft/lightspeed/trex/layout/stagecraft/setup_ui.py

461-462: Use a single with statement with multiple contexts instead of nested with statements

(SIM117)


472-478: Use a single with statement with multiple contexts instead of nested with statements

(SIM117)


490-491: Use a single with statement with multiple contexts instead of nested with statements

(SIM117)


574-575: Use a single with statement with multiple contexts instead of nested with statements

(SIM117)

🔇 Additional comments (23)
source/extensions/lightspeed.trex.properties_pane.shared.asset_replacements.widget/config/extension.toml (1)

2-2: Manifest and Changelog Alignment Validated

All requested verifications have been completed successfully:

  • The extension.toml in source/extensions/lightspeed.trex.properties_pane.shared.asset_replacements.widget/config/extension.toml is set to version 1.9.1 and references
    changelog = "docs/CHANGELOG.md"
    preview_image = "data/preview.png"

  • The widget’s CHANGELOG at source/extensions/lightspeed.trex.properties_pane.shared.asset_replacements.widget/docs/CHANGELOG.md contains:

    ## [1.9.1]
    ### Changed
    - Adjusted spacing for the new vertical modding tabs
    
  • The preview image file exists at source/extensions/lightspeed.trex.properties_pane.shared.asset_replacements.widget/data/preview.png.

No further changes are needed—everything is aligned.

source/extensions/lightspeed.trex.properties_pane.shared.mod_packaging.widget/config/extension.toml (1)

5-5: Verified: CHANGELOG entry for version 1.2.2 is present

  • Confirmed source/extensions/lightspeed.trex.properties_pane.shared.mod_packaging.widget/docs/CHANGELOG.md contains a ## [1.2.2] entry on line 4.

No further changes required.

source/extensions/lightspeed.trex.properties_pane.shared.mod_setup.widget/config/extension.toml (1)

2-2: Version bump to 1.7.2 confirmed and CHANGELOG entry present

The version = "1.7.2" in
source/extensions/lightspeed.trex.properties_pane.shared.mod_setup.widget/config/extension.toml
matches the ## [1.7.2] entry found at line 4 of
source/extensions/lightspeed.trex.properties_pane.shared.mod_setup.widget/docs/CHANGELOG.md. No further changes required.

source/extensions/lightspeed.trex.properties_pane.shared.asset_replacements.widget/lightspeed/trex/properties_pane/shared/asset_replacements/widget/setup_ui.py (1)

352-352: Added right-side padding spacer looks correct and matches vertical tabs spacing

The ui.Spacer(width=ui.Pixel(16)) at the end of the HStack provides symmetric right padding for the panel content when adjacent to vertical tabs. No functional changes introduced.

source/extensions/lightspeed.trex.layout.stagecraft/config/extension.toml (1)

2-2: Version bump and new dependency are aligned with the code changes

  • Bumping to 2.5.3 is fine.
  • Adding "omni.flux.tabbed.widget" = {} is required since stagecraft/setup_ui.py now imports and uses _TabbedFrame. This follows our guideline to allow unpinned omni.flux.* deps.

If CI includes extension load tests, please ensure the updated omni.flux.tabbed.widget (that exposes the add_initial_spacer arg) is available in the runtime image. If you want, I can provide a quick script to assert importability at startup.

Also applies to: 34-34

source/extensions/omni.flux.tabbed.widget/omni/flux/tabbed/widget/setup_ui.py (2)

45-46: Public API: add_initial_spacer parameter is a backward-compatible addition

Defaulting add_initial_spacer to True preserves existing behavior, while allowing callers (e.g., Stagecraft) to disable the pre-tab spacer in vertical layouts.


78-79: State wiring for the new parameter is correct

Storing self._add_initial_spacer here is consistent with other init args.

source/extensions/lightspeed.common/lightspeed/common/constants.py (1)

553-556: New UI constant is fine and self-descriptive

UNTITLED_PROJECT_NAME = "Untitled Project" is appropriately placed with other UI-facing constants and used downstream by Stagecraft to display a default project name.

source/extensions/lightspeed.trex.layout.stagecraft/lightspeed/trex/layout/stagecraft/setup_ui.py (15)

80-82: New top-bar constants look reasonable

HEIGHT_TOP_BAR = 40 and WIDTH_TOP_BAR = 40 are sensible defaults for a compact bar and narrow vertical tabs. These are referenced consistently in layout math below.


167-183: Project name label: good defaults and robust checks

  • Falls back to UNTITLED_PROJECT_NAME.
  • Handles anonymous layers safely.
  • Keeps label/field visibility toggled correctly.

184-193: Double-click-to-edit flow looks correct

Guarding on mouse button and toggling visibility/focus is straightforward. No issues.


218-223: Post-import refresh hook makes sense

Refreshing all property panels after importing a layer ensures UI reflects new layers immediately.


369-377: State additions are appropriate for the new top-bar and tabbed layout

New fields for _tabbed_frame, tab selection sub, project-name widgets, and buttons align with the new UI responsibilities.


551-558: Property/viewport splitter: initial offset and visibility are correct

  • Offset set to WIDTH_TOP_BAR + WIDTH_PROPERTY_PANEL matches left column width.
  • offset_x_changed_fn wired to clamping handler (see below).

573-582: Viewport and Stage Manager containers look fine

The staging of viewport, stage-manager frame, and its splitter as separate frames eases feature-flag rebuilds later.


583-589: Tabs population and selection-change subscription are correct

Using ComponentsEnumItems for tab titles keeps Stagecraft and Properties panes in sync and avoids drift.


590-607: Feature-flag-driven rebuild is robust

Clearing, destroying, and rebuilding the stage manager when the feature flag changes prevents orphaned listeners.

Please confirm _StageManagerWidget.destroy() unsubscribes all event streams to avoid leaks on repeated toggles.


609-612: Good: wiring “Project Setup” import event to properties panel refresh

The event flow properly updates downstream panels after import.


614-622: Viewport framing hookup is appropriate

Connecting the selection panel to frame the viewport selection provides a tight UX loop.


623-626: Initial recent-items refresh and project-name update are in the right place

Making these calls post-layout creation ensures widgets exist before updates land.


722-725: Burger menu anchor positioning is correct

Anchoring to the icon’s screen position plus an 8px offset is a good touch target and avoids overlap.


749-761: Splitter clamping logic is correct; nice explicit bounds

  • Min = WIDTH_TOP_BAR + MIN_WIDTH_PROPERTY_PANEL
  • Max = WIDTH_TOP_BAR + WIDTH_PROPERTY_PANEL
    Properly updates both the splitter and the panel width to maintain alignment.

761-764: Tab selection handler correctly delegates to properties pane

Showing the panel by title keeps the tabs and panes synchronized.

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 0

🧹 Nitpick comments (6)
docs/howto/learning-toolkit.md (1)

11-12: Tighten phrasing; keep style consistent with the rest of the page.

Minor editorial polish for flow. Also keeps the tab name in backticks.

-The `Project Setup` tab is primarily used to manage the currently loaded capture layer, as the project wizard
-streamlines the remaining setup processes.
+The `Project Setup` tab is primarily used to manage the currently loaded capture layer, since the project wizard
+handles the remaining setup steps.
source/extensions/lightspeed.trex.components_pane.stagecraft.models/docs/CHANGELOG.md (2)

9-11: Fix grammar: “to” → “too”; prefer lowercase “test assets” and present-tense to match style.

Current bullet reads awkwardly and mixes casing/tense relative to nearby entries.

-### Fixed
-- Fixed Test assets to large to work without LFS
+### Fixed
+- Fix test assets too large to work without LFS

13-14: Typo: “compatbility” → “compatibility”.

Quick spelling fix.

-### Changed
-- Update the documentation for Pydantic V2 compatbility
+### Changed
+- Update the documentation for Pydantic V2 compatibility
source/extensions/lightspeed.common/docs/CHANGELOG.md (3)

4-7: Clarify the entry: name the symbol and use singular.

As written, “constants” is vague and suggests multiple additions. If only one public symbol was introduced, spell it out for traceability.

-### Added
-- Added constants for untitled project name
+### Added
+- Added `UNTITLED_PROJECT_NAME` constant

4-4: Optional: include a release date next to the version for consistency.

Several prior entries (e.g., 1.0.5, 1.0.4) include a date. If 1.8.1 is being released now, add the date; otherwise keep it undated until tagging.

-## [1.8.1]
+## [1.8.1] - 2025-08-25

4-7: Verify SemVer compliance and metadata alignment

All checks confirm that:

  • UNTITLED_PROJECT_NAME is defined in
    source/extensions/lightspeed.common/lightspeed/common/constants.py (line 555) and is referenced in the stagecraft UI setup.
  • The extension’s version is set to "1.8.1" in
    source/extensions/lightspeed.common/config/extension.toml (line 3) and the changelog entry under
    source/extensions/lightspeed.common/docs/CHANGELOG.md begins with ## [1.8.1].

Since extension.toml declares “Semantic Versionning is used” and adding a new exported constant constitutes a backwards-compatible feature, strict SemVer would treat this as a minor bump (x.Y.z → x.(Y+1).0). To align:

  • Update the version in config/extension.toml to "1.9.0".
  • Update the changelog header to ## [1.9.0].
  • Ensure any release scripts or manifests reflect 1.9.0.
📜 Review details

Configuration used: Path: .coderabbit.yml

Review profile: CHILL

Plan: Pro

💡 Knowledge Base configuration:

  • MCP integration is disabled by default for public repositories
  • Jira integration is disabled by default for public repositories
  • Linear integration is disabled by default for public repositories

You can enable these sources in your CodeRabbit configuration.

📥 Commits

Reviewing files that changed from the base of the PR and between 05b66df and 59574f5.

📒 Files selected for processing (4)
  • docs/howto/learning-toolkit.md (1 hunks)
  • source/extensions/lightspeed.common/config/extension.toml (1 hunks)
  • source/extensions/lightspeed.common/docs/CHANGELOG.md (1 hunks)
  • source/extensions/lightspeed.trex.components_pane.stagecraft.models/docs/CHANGELOG.md (1 hunks)
✅ Files skipped from review due to trivial changes (1)
  • source/extensions/lightspeed.common/config/extension.toml
🧰 Additional context used
🪛 LanguageTool
docs/howto/learning-toolkit.md

[grammar] ~11-~11: There might be a mistake here.
Context: ...ded capture layer, as the project wizard streamlines the remaining setup processe...

(QB_NEW_EN)

source/extensions/lightspeed.common/docs/CHANGELOG.md

[grammar] ~4-~4: There might be a mistake here.
Context: ...epachangelog.com/en/1.0.0/). ## [1.8.1] ### Added - Added constants for untitled pro...

(QB_NEW_EN)


[grammar] ~5-~5: There might be a mistake here.
Context: ...og.com/en/1.0.0/). ## [1.8.1] ### Added - Added constants for untitled project nam...

(QB_NEW_EN)

source/extensions/lightspeed.trex.components_pane.stagecraft.models/docs/CHANGELOG.md

[grammar] ~4-~4: There might be a mistake here.
Context: ...epachangelog.com/en/1.0.0/). ## [1.1.2] ### Changed - Renamed the modding tab from "...

(QB_NEW_EN)


[grammar] ~5-~5: There might be a mistake here.
Context: ....com/en/1.0.0/). ## [1.1.2] ### Changed - Renamed the modding tab from "Captures /...

(QB_NEW_EN)


[grammar] ~8-~8: There might be a mistake here.
Context: ... / Setup" to "Project Setup" ## [1.1.1] ### Fixed - Fixed Test assets to large to wo...

(QB_NEW_EN)


[grammar] ~9-~9: There might be a mistake here.
Context: ...to "Project Setup" ## [1.1.1] ### Fixed - Fixed Test assets to large to work witho...

(QB_NEW_EN)


[grammar] ~12-~12: There might be a mistake here.
Context: ...to large to work without LFS ## [1.1.0] ### Changed - Update the documentation for P...

(QB_NEW_EN)


[grammar] ~13-~13: There might be a mistake here.
Context: ...work without LFS ## [1.1.0] ### Changed - Update the documentation for Pydantic V2...

(QB_NEW_EN)

🔇 Additional comments (2)
source/extensions/lightspeed.trex.components_pane.stagecraft.models/docs/CHANGELOG.md (1)

4-6: No stale “Captures / Setup” references beyond the CHANGELOG; please confirm any doc anchors

  • CHANGELOG.md: The only match for “Captures / Setup” is on line 6, where it’s intentionally recorded as being renamed to “Project Setup.”
  • model_items.py (both in ingestcraft and stagecraft): defines MOD_SETUP = "Project Setup" (line 25) and uses it via EnumItems.MOD_SETUP.value; there are no remaining occurrences of the old label.
  • Documentation: our search didn’t surface any markdown headings or links pointing to a “Mod Setup” anchor. Please manually review any relevant .md files to ensure all links or anchor names have been updated.
source/extensions/lightspeed.common/docs/CHANGELOG.md (1)

4-7: LGTM on placement and formatting.

Entry is at the top, follows the existing “### Added” section structure, and keeps the descending order intact.

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 3

♻️ Duplicate comments (2)
source/extensions/lightspeed.trex.layout.stagecraft/lightspeed/trex/layout/stagecraft/setup_ui.py (2)

314-321: Use _TabbedFrame public API for selection (no set_selection/get_model; set selection by titles)

This will raise AttributeError at runtime (set_selection and get_model aren’t public). Use .model and assign to .selection with titles, as per the widget API.

Apply:

-        if self._tabbed_frame and not self._tabbed_frame.selection:
-            self._tabbed_frame.set_selection(self._tabbed_frame.get_model().get_item_children(None)[0])
+        if self._tabbed_frame and not self._tabbed_frame.selection:
+            first_item = self._tabbed_frame.model.get_item_children(None)[0]
+            self._tabbed_frame.selection = [first_item.title]

628-645: Initial selection: fix API misuse and avoid mutating selection objects directly

  • Do not append to selection; set it via the property setter with a list of titles.
  • Don’t set selected flags manually; the widget manages this internally.

Apply:

-        if not value:
-            return
-        if not self._tabbed_frame.selection:
-            first_item = self._tabbed_frame.get_model().get_item_children(None)[0]
-            self._tabbed_frame.selection.append(first_item)
-            first_item.selected = True
-            self._on_tab_selection_changed(first_item)
-        else:
-            sel = self._tabbed_frame.selection[0]
-            sel.selected = True
-            self._on_tab_selection_changed(sel)
+        if not value:
+            return
+        if not self._tabbed_frame.selection:
+            first_item = self._tabbed_frame.model.get_item_children(None)[0]
+            self._tabbed_frame.selection = [first_item.title]
+            self._on_tab_selection_changed(first_item)
+        else:
+            selected_item = self._tabbed_frame.selection[0]
+            self._on_tab_selection_changed(selected_item)
🧹 Nitpick comments (2)
source/extensions/lightspeed.trex.layout.stagecraft/lightspeed/trex/layout/stagecraft/setup_ui.py (2)

206-210: Optional UX: surface a brief, non-blocking notice when rename is blocked

Currently only logs a warning and reverts the label. Consider a small non-blocking notification (e.g., toast/snackbar) so users understand why the rename didn’t apply. Avoid modal dialogs here to keep flow smooth.


462-463: Minor: flatten nested with-statements per Ruff SIM117

You can combine adjacent context managers to reduce nesting without changing semantics.

Example adjustments:

-                            with ui.ZStack(height=ui.Pixel(self.HEIGHT_TOP_BAR)):
-                                ui.Rectangle(name="WorkspaceBackground")
-                                with ui.ScrollingFrame(
+                            with ui.ZStack(height=ui.Pixel(self.HEIGHT_TOP_BAR)):
+                                ui.Rectangle(name="WorkspaceBackground")
+                                with ui.ScrollingFrame(
                                     name="TreePanelBackground",
                                     vertical_scrollbar_policy=ui.ScrollBarPolicy.SCROLLBAR_ALWAYS_OFF,
                                     horizontal_scrollbar_policy=ui.ScrollBarPolicy.SCROLLBAR_ALWAYS_OFF,
                                     scroll_y_max=0,
-                                ):
-                                    with ui.VStack():
+                                ), ui.VStack():
                                     for _ in range(10):
                                         with ui.HStack():
                                             for _ in range(10):
                                                 ui.Image("", name="TreePanelLinesBackground",
                                                          fill_policy=ui.FillPolicy.PRESERVE_ASPECT_FIT,
                                                          height=ui.Pixel(256), width=ui.Pixel(256))
-                                with ui.ZStack(content_clipping=True):
-                                    with ui.VStack():
+                                with ui.ZStack(content_clipping=True), ui.VStack():
                                     ui.Spacer()
                                     with ui.HStack(height=ui.Pixel(24)):
                                         ...
-                        with ui.ZStack():
-                            with ui.VStack():
+                        with ui.ZStack(), ui.VStack():
                             self._viewport = _create_viewport_instance(self._context_name)
                             stage_manager_frame = ui.Frame(build_fn=self._build_stage_manager, height=0)

Also applies to: 473-479, 491-492, 575-576

📜 Review details

Configuration used: Path: .coderabbit.yml

Review profile: CHILL

Plan: Pro

💡 Knowledge Base configuration:

  • MCP integration is disabled by default for public repositories
  • Jira integration is disabled by default for public repositories
  • Linear integration is disabled by default for public repositories

You can enable these sources in your CodeRabbit configuration.

📥 Commits

Reviewing files that changed from the base of the PR and between 59574f5 and 9e5f8fd.

📒 Files selected for processing (1)
  • source/extensions/lightspeed.trex.layout.stagecraft/lightspeed/trex/layout/stagecraft/setup_ui.py (13 hunks)
🧰 Additional context used
🧬 Code graph analysis (1)
source/extensions/lightspeed.trex.layout.stagecraft/lightspeed/trex/layout/stagecraft/setup_ui.py (3)
source/extensions/omni.flux.tabbed.widget/omni/flux/tabbed/widget/setup_ui.py (8)
  • SetupUI (34-328)
  • get_frame (125-135)
  • model (158-159)
  • selection (173-175)
  • selection (178-185)
  • add (141-155)
  • subscribe_selection_changed (96-101)
  • destroy (325-328)
source/extensions/lightspeed.trex.properties_pane.stagecraft.widget/lightspeed/trex/properties_pane/stagecraft/widget/setup_ui.py (3)
  • SetupUI (28-64)
  • get_frame (40-44)
  • show_panel (53-59)
source/extensions/lightspeed.trex.properties_pane.shared.mod_setup.widget/lightspeed/trex/properties_pane/shared/mod_setup/widget/setup_ui.py (3)
  • show (1004-1013)
  • destroy (1015-1023)
  • subscribe_import_replacement_layer (212-216)
🪛 Ruff (0.12.2)
source/extensions/lightspeed.trex.layout.stagecraft/lightspeed/trex/layout/stagecraft/setup_ui.py

462-463: Use a single with statement with multiple contexts instead of nested with statements

(SIM117)


473-479: Use a single with statement with multiple contexts instead of nested with statements

(SIM117)


491-492: Use a single with statement with multiple contexts instead of nested with statements

(SIM117)


575-576: Use a single with statement with multiple contexts instead of nested with statements

(SIM117)

⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (2)
  • GitHub Check: pr-checks (lint, .\lint_code.bat all)
  • GitHub Check: pr-checks (format, .\format_code.bat --verify)
🔇 Additional comments (10)
source/extensions/lightspeed.trex.layout.stagecraft/lightspeed/trex/layout/stagecraft/setup_ui.py (10)

26-26: Good fix: importing carb resolves prior NameError risks

Adding import carb unblocks carb.log_warn(...) and token resolution calls. No further action needed.


81-83: Introduce explicit top/side bar constants — looks good

Defining HEIGHT_TOP_BAR and WIDTH_TOP_BAR clarifies layout math and improves readability.


168-184: Project-name label sync is robust

Graceful guards for missing widgets and anonymous layers; keeps label/field in sync and ensures correct visibility state. Nice.


370-378: State additions are sensible

New attributes for the vertical tabs, project-name widgets, and menu/back controls align with the new layout flow.


539-551: Vertical _TabbedFrame instantiation and property-pane wiring look correct

  • horizontal=False with size_tab_label tied to WIDTH_TOP_BAR is coherent with the new vertical layout.
  • Initial show_panel(forced_value=False) ensures property frames are hidden until a tab is selected.

No changes required.


584-589: Selection-change subscription correctly routes to property pane

Wiring subscribe_selection_changed to _on_tab_selection_changed is the right hook for syncing pane visibility with tab selection.


609-623: Event wiring between Mod Setup/Asset Replacements and the layout is sound

Using get_frame(ComponentsEnumItems.XXX) matches the API and keeps cross-pane interactions decoupled.


749-761: Splitter clamp logic is clear and correct

Clamping to [WIDTH_TOP_BAR + MIN_WIDTH_PROPERTY_PANEL, WIDTH_TOP_BAR + WIDTH_PROPERTY_PANEL] and updating both the placer and panel width keeps layout stable during drags.


762-765: Tab selection handler is aligned with PropertyPanelUI API

Calling show_panel(title=selected_item.title) matches the pane’s interface and keeps panels mutually exclusive.


151-156: Stagecraft Pane get_frame Signature Confirmed

Verified that in source/extensions/lightspeed.trex.properties_pane.stagecraft.widget/lightspeed/trex/properties_pane/stagecraft/widget/setup_ui.py:

  • def get_frame(self, component_type_value: ComponentsEnumItems) iterates over self._all_frames.items() keyed by ComponentsEnumItems and returns the matching frame or None (lines 40–44).
  • self._all_frames is populated exclusively with ComponentsEnumItems keys in __create_ui() (lines 46–52).
  • show_panel correctly compares enum_item.value against the optional title: str and honors forced_value: bool for visibility (lines 53–60).

Similar implementations in the ingestcraft and viewports panes also use ComponentsEnumItems (or its alias) rather than strings. No changes required.

@Simon-Lajoie Simon-Lajoie force-pushed the feature/vertical_modding_tabs branch from 9e5f8fd to ae2716e Compare August 25, 2025 22:30
Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 3

♻️ Duplicate comments (6)
source/extensions/lightspeed.trex.properties_pane.shared.asset_replacements.widget/docs/CHANGELOG.md (1)

4-4: Add a release date and verify extension.toml version parity.

Follow Keep a Changelog by dating the release and ensure the widget’s config/extension.toml matches 1.9.1.

Apply:

-## [1.9.1]
+## [1.9.1] - 2025-08-25

Verify with:

#!/bin/bash
# extension.toml version parity check for asset_replacements widget
fd -a 'lightspeed.trex.properties_pane.shared.asset_replacements.widget' \
  | rg -n '/config/extension\.toml$' \
  | while read -r p; do
      echo "File: $p"
      rg -n '^\s*version\s*=\s*"1\.9\.1"\s*$' "$p" || echo "Version mismatch or missing."
    done
# Confirm dated header present in the changelog
rg -n '^## \[1\.9\.1\] - 2025-08-25$' source/extensions/lightspeed.trex.properties_pane.shared.asset_replacements.widget/docs/CHANGELOG.md
source/extensions/lightspeed.trex.layout.stagecraft/lightspeed/trex/layout/stagecraft/setup_ui.py (5)

219-223: Bug: same enum vs string mismatch here

Refresh loop again passes item.value; use the enum itself.

-        if self._properties_pane:
-            for item in ComponentsEnumItems:
-                panel = self._properties_pane.get_frame(item.value)
-                if panel:
-                    panel.refresh()
+        if self._properties_pane:
+            for item in ComponentsEnumItems:
+                panel = self._properties_pane.get_frame(item)
+                if panel:
+                    panel.refresh()

314-320: API misuse: set_selection/get_model aren’t public on _TabbedFrame

Use the model property and assign via the selection setter with titles.

-        if self._tabbed_frame and not self._tabbed_frame.selection:
-            self._tabbed_frame.set_selection(self._tabbed_frame.get_model().get_item_children(None)[0])
+        if self._tabbed_frame and not self._tabbed_frame.selection:
+            first_item = self._tabbed_frame.model.get_item_children(None)[0]
+            self._tabbed_frame.selection = [first_item.title]

628-645: API misuse when initializing/restoring selection; don’t append Items to selection

selection setter expects titles (List[str]); avoid mutating Item.selected directly.

-        if not self._tabbed_frame.selection:
-            first_item = self._tabbed_frame.get_model().get_item_children(None)[0]
-            self._tabbed_frame.selection.append(first_item)
-            first_item.selected = True
-            self._on_tab_selection_changed(first_item)
-        else:
-            sel = self._tabbed_frame.selection[0]
-            sel.selected = True
-            self._on_tab_selection_changed(sel)
+        if not self._tabbed_frame.selection:
+            first_item = self._tabbed_frame.model.get_item_children(None)[0]
+            self._tabbed_frame.selection = [first_item.title]
+            self._on_tab_selection_changed(first_item)
+        else:
+            selected_item = self._tabbed_frame.selection[0]
+            self._on_tab_selection_changed(selected_item)

723-726: Ensure show_at receives raw device-pixel numbers, not ui.Pixel objects

Unwrap .value (and add a raw int for 8px) before calling show_at.

-        get_burger_menu_instance().show_at(
-            self._menu_burger_widget.screen_position_x,
-            self._menu_burger_widget.screen_position_y + self._menu_burger_widget.computed_height + ui.Pixel(8),
-        )
+        get_burger_menu_instance().show_at(
+            self._menu_burger_widget.screen_position_x.value,
+            self._menu_burger_widget.screen_position_y.value
+            + self._menu_burger_widget.computed_height.value
+            + 8,
+        )

151-156: Bug: get_frame expects enum key, not string value

Passing item.value likely yields None and skips refresh. Pass the enum member.

-            if self._properties_pane:
-                for item in ComponentsEnumItems:
-                    panel = self._properties_pane.get_frame(item.value)
-                    if panel:
-                        panel.refresh()
+            if self._properties_pane:
+                for item in ComponentsEnumItems:
+                    panel = self._properties_pane.get_frame(item)
+                    if panel:
+                        panel.refresh()
🧹 Nitpick comments (5)
docs/howto/learning-toolkit.md (1)

11-12: Tighten phrasing (“as” → semicolon) for clarity

The current clause reads a bit causal; a semicolon keeps it crisp without implying causation.

-The `Project Setup` tab is primarily used to manage the currently loaded capture layer, as the project wizard
+The `Project Setup` tab is primarily used to manage the currently loaded capture layer; the project wizard
source/extensions/lightspeed.common/docs/CHANGELOG.md (1)

4-7: Name the constant and end the bullet with a period

Explicitly naming the symbol helps downstream readers/search and matches the style used elsewhere. Also add terminal punctuation.

 ## [1.8.1]
 ### Added
-- Added constants for untitled project name
+- Added constant `UNTITLED_PROJECT_NAME` for the untitled project display name.
source/extensions/lightspeed.trex.layout.stagecraft/lightspeed/trex/layout/stagecraft/setup_ui.py (3)

81-83: Top bar constants read well; minor naming nit

Semantics are clear. If you touch this later, consider WIDTH_TAB_COLUMN instead of WIDTH_TOP_BAR to reflect it’s the vertical tab column width.


195-215: Surface a user-facing message when reverting file-backed project rename

You log a warning and revert the text. Consider a small toast/snackbar so users understand why their change didn’t stick.

I can wire a transient ui.Label overlay or reuse your existing message dialog helper with a non-blocking style. Want a patch?


462-545: Reduce nested context managers (SIM117) to simplify the layout blocks

Multiple nested with ui.* can be merged into a single with statement. This is a readability/maintainability win and addresses static-analysis hints.

Example pattern:

-with ui.ZStack(height=ui.Pixel(self.HEIGHT_TOP_BAR)):
-    with ui.ZStack(height=ui.Pixel(self.HEIGHT_TOP_BAR)):
-        ...
-    with ui.ZStack(content_clipping=True):
-        ...
+with ui.ZStack(height=ui.Pixel(self.HEIGHT_TOP_BAR)) as _:
+    with ui.ZStack(height=ui.Pixel(self.HEIGHT_TOP_BAR)), ui.ZStack(content_clipping=True):
+        ...

Apply similarly at other hotspots (473–479, 491–492, 575–576).

📜 Review details

Configuration used: Path: .coderabbit.yml

Review profile: CHILL

Plan: Pro

💡 Knowledge Base configuration:

  • MCP integration is disabled by default for public repositories
  • Jira integration is disabled by default for public repositories
  • Linear integration is disabled by default for public repositories

You can enable these sources in your CodeRabbit configuration.

📥 Commits

Reviewing files that changed from the base of the PR and between 9e5f8fd and ae2716e.

📒 Files selected for processing (23)
  • CHANGELOG.md (2 hunks)
  • docs/howto/learning-toolkit.md (1 hunks)
  • source/extensions/lightspeed.common/config/extension.toml (1 hunks)
  • source/extensions/lightspeed.common/docs/CHANGELOG.md (1 hunks)
  • source/extensions/lightspeed.common/lightspeed/common/constants.py (1 hunks)
  • source/extensions/lightspeed.trex.components_pane.stagecraft.models/config/extension.toml (1 hunks)
  • source/extensions/lightspeed.trex.components_pane.stagecraft.models/docs/CHANGELOG.md (1 hunks)
  • source/extensions/lightspeed.trex.components_pane.stagecraft.models/lightspeed/trex/components_pane/stagecraft/models/model_items.py (1 hunks)
  • source/extensions/lightspeed.trex.layout.stagecraft/config/extension.toml (2 hunks)
  • source/extensions/lightspeed.trex.layout.stagecraft/docs/CHANGELOG.md (1 hunks)
  • source/extensions/lightspeed.trex.layout.stagecraft/lightspeed/trex/layout/stagecraft/setup_ui.py (13 hunks)
  • source/extensions/lightspeed.trex.properties_pane.shared.asset_replacements.widget/config/extension.toml (1 hunks)
  • source/extensions/lightspeed.trex.properties_pane.shared.asset_replacements.widget/docs/CHANGELOG.md (1 hunks)
  • source/extensions/lightspeed.trex.properties_pane.shared.asset_replacements.widget/lightspeed/trex/properties_pane/shared/asset_replacements/widget/setup_ui.py (1 hunks)
  • source/extensions/lightspeed.trex.properties_pane.shared.mod_packaging.widget/config/extension.toml (1 hunks)
  • source/extensions/lightspeed.trex.properties_pane.shared.mod_packaging.widget/docs/CHANGELOG.md (1 hunks)
  • source/extensions/lightspeed.trex.properties_pane.shared.mod_packaging.widget/lightspeed/trex/properties_pane/shared/mod_packaging/widget/setup_ui.py (1 hunks)
  • source/extensions/lightspeed.trex.properties_pane.shared.mod_setup.widget/config/extension.toml (1 hunks)
  • source/extensions/lightspeed.trex.properties_pane.shared.mod_setup.widget/docs/CHANGELOG.md (1 hunks)
  • source/extensions/lightspeed.trex.properties_pane.shared.mod_setup.widget/lightspeed/trex/properties_pane/shared/mod_setup/widget/setup_ui.py (1 hunks)
  • source/extensions/omni.flux.tabbed.widget/config/extension.toml (1 hunks)
  • source/extensions/omni.flux.tabbed.widget/docs/CHANGELOG.md (1 hunks)
  • source/extensions/omni.flux.tabbed.widget/omni/flux/tabbed/widget/setup_ui.py (4 hunks)
✅ Files skipped from review due to trivial changes (2)
  • CHANGELOG.md
  • source/extensions/lightspeed.trex.components_pane.stagecraft.models/config/extension.toml
🚧 Files skipped from review as they are similar to previous changes (12)
  • source/extensions/omni.flux.tabbed.widget/config/extension.toml
  • source/extensions/lightspeed.trex.properties_pane.shared.mod_packaging.widget/lightspeed/trex/properties_pane/shared/mod_packaging/widget/setup_ui.py
  • source/extensions/lightspeed.trex.properties_pane.shared.mod_setup.widget/lightspeed/trex/properties_pane/shared/mod_setup/widget/setup_ui.py
  • source/extensions/lightspeed.common/config/extension.toml
  • source/extensions/lightspeed.trex.layout.stagecraft/config/extension.toml
  • source/extensions/omni.flux.tabbed.widget/omni/flux/tabbed/widget/setup_ui.py
  • source/extensions/lightspeed.trex.properties_pane.shared.mod_setup.widget/config/extension.toml
  • source/extensions/lightspeed.trex.properties_pane.shared.asset_replacements.widget/lightspeed/trex/properties_pane/shared/asset_replacements/widget/setup_ui.py
  • source/extensions/lightspeed.trex.properties_pane.shared.mod_packaging.widget/config/extension.toml
  • source/extensions/lightspeed.trex.properties_pane.shared.asset_replacements.widget/config/extension.toml
  • source/extensions/lightspeed.trex.components_pane.stagecraft.models/lightspeed/trex/components_pane/stagecraft/models/model_items.py
  • source/extensions/lightspeed.common/lightspeed/common/constants.py
🧰 Additional context used
🧬 Code graph analysis (1)
source/extensions/lightspeed.trex.layout.stagecraft/lightspeed/trex/layout/stagecraft/setup_ui.py (4)
source/extensions/omni.flux.tabbed.widget/omni/flux/tabbed/widget/setup_ui.py (7)
  • SetupUI (34-328)
  • get_frame (125-135)
  • model (158-159)
  • selection (173-175)
  • selection (178-185)
  • add (141-155)
  • subscribe_selection_changed (96-101)
source/extensions/lightspeed.trex.menu.workfile/lightspeed/trex/menu/workfile/setup_ui.py (2)
  • SetupUI (60-254)
  • show_at (247-251)
source/extensions/lightspeed.trex.properties_pane.stagecraft.widget/lightspeed/trex/properties_pane/stagecraft/widget/setup_ui.py (3)
  • SetupUI (28-64)
  • get_frame (40-44)
  • show_panel (53-59)
source/extensions/lightspeed.trex.properties_pane.shared.mod_setup.widget/lightspeed/trex/properties_pane/shared/mod_setup/widget/setup_ui.py (2)
  • show (1004-1013)
  • subscribe_import_replacement_layer (212-216)
🪛 LanguageTool
source/extensions/omni.flux.tabbed.widget/docs/CHANGELOG.md

[grammar] ~5-~5: There might be a mistake here.
Context: ...epachangelog.com/en/1.0.0/). ## [1.2.2] ## Changed - Adjusted spacing for the new v...

(QB_NEW_EN)


[grammar] ~6-~6: There might be a mistake here.
Context: ...g.com/en/1.0.0/). ## [1.2.2] ## Changed - Adjusted spacing for the new vertical mo...

(QB_NEW_EN)

docs/howto/learning-toolkit.md

[grammar] ~11-~11: There might be a mistake here.
Context: ...ded capture layer, as the project wizard streamlines the remaining setup processe...

(QB_NEW_EN)

source/extensions/lightspeed.common/docs/CHANGELOG.md

[grammar] ~4-~4: There might be a mistake here.
Context: ...epachangelog.com/en/1.0.0/). ## [1.8.1] ### Added - Added constants for untitled pro...

(QB_NEW_EN)


[grammar] ~5-~5: There might be a mistake here.
Context: ...og.com/en/1.0.0/). ## [1.8.1] ### Added - Added constants for untitled project nam...

(QB_NEW_EN)

source/extensions/lightspeed.trex.components_pane.stagecraft.models/docs/CHANGELOG.md

[grammar] ~4-~4: There might be a mistake here.
Context: ...epachangelog.com/en/1.0.0/). ## [1.1.2] ### Changed - Renamed the modding tab from "...

(QB_NEW_EN)


[grammar] ~5-~5: There might be a mistake here.
Context: ....com/en/1.0.0/). ## [1.1.2] ### Changed - Renamed the modding tab from "Captures /...

(QB_NEW_EN)


[grammar] ~8-~8: There might be a mistake here.
Context: ... / Setup" to "Project Setup" ## [1.1.1] ### Fixed - Fixed Test assets to large to wo...

(QB_NEW_EN)


[grammar] ~9-~9: There might be a mistake here.
Context: ...to "Project Setup" ## [1.1.1] ### Fixed - Fixed Test assets to large to work witho...

(QB_NEW_EN)


[grammar] ~12-~12: There might be a mistake here.
Context: ...to large to work without LFS ## [1.1.0] ### Changed - Update the documentation for P...

(QB_NEW_EN)


[grammar] ~13-~13: There might be a mistake here.
Context: ...work without LFS ## [1.1.0] ### Changed - Update the documentation for Pydantic V2...

(QB_NEW_EN)

source/extensions/lightspeed.trex.layout.stagecraft/docs/CHANGELOG.md

[grammar] ~4-~4: There might be a mistake here.
Context: ...epachangelog.com/en/1.0.0/). ## [2.5.3] ## Changed - Changed modding tabs to vertic...

(QB_NEW_EN)


[grammar] ~5-~5: There might be a mistake here.
Context: ...g.com/en/1.0.0/). ## [2.5.3] ## Changed - Changed modding tabs to vertical layout ...

(QB_NEW_EN)

source/extensions/lightspeed.trex.properties_pane.shared.asset_replacements.widget/docs/CHANGELOG.md

[grammar] ~4-~4: There might be a mistake here.
Context: ...epachangelog.com/en/1.0.0/). ## [1.9.1] ### Changed - Adjusted spacing for the new v...

(QB_NEW_EN)


[grammar] ~5-~5: There might be a mistake here.
Context: ....com/en/1.0.0/). ## [1.9.1] ### Changed - Adjusted spacing for the new vertical mo...

(QB_NEW_EN)

source/extensions/lightspeed.trex.properties_pane.shared.mod_packaging.widget/docs/CHANGELOG.md

[grammar] ~4-~4: There might be a mistake here.
Context: ...epachangelog.com/en/1.0.0/). ## [1.2.2] ## Changed - Adjusted spacing for the new v...

(QB_NEW_EN)


[grammar] ~5-~5: There might be a mistake here.
Context: ...g.com/en/1.0.0/). ## [1.2.2] ## Changed - Adjusted spacing for the new vertical mo...

(QB_NEW_EN)

source/extensions/lightspeed.trex.properties_pane.shared.mod_setup.widget/docs/CHANGELOG.md

[grammar] ~4-~4: There might be a mistake here.
Context: ...epachangelog.com/en/1.0.0/). ## [1.7.2] ## Changed - Adjusted spacing for the new v...

(QB_NEW_EN)


[grammar] ~5-~5: There might be a mistake here.
Context: ...g.com/en/1.0.0/). ## [1.7.2] ## Changed - Adjusted spacing for the new vertical mo...

(QB_NEW_EN)

🪛 Ruff (0.12.2)
source/extensions/lightspeed.trex.layout.stagecraft/lightspeed/trex/layout/stagecraft/setup_ui.py

462-463: Use a single with statement with multiple contexts instead of nested with statements

(SIM117)


473-479: Use a single with statement with multiple contexts instead of nested with statements

(SIM117)


491-492: Use a single with statement with multiple contexts instead of nested with statements

(SIM117)


575-576: Use a single with statement with multiple contexts instead of nested with statements

(SIM117)

🔇 Additional comments (9)
source/extensions/lightspeed.trex.properties_pane.shared.asset_replacements.widget/docs/CHANGELOG.md (1)

5-6: Changelog entry content looks good.

The “Adjusted spacing for the new vertical modding tabs” note is clear and scoped correctly.

source/extensions/lightspeed.trex.properties_pane.shared.mod_setup.widget/docs/CHANGELOG.md (1)

4-6: Manual verification required for version parity and CHANGELOG heading update

Please confirm the following, as the automated check did not produce output:

  • Verify that source/extensions/lightspeed.trex.properties_pane.shared.mod_setup.widget/config/extension.toml exists and contains:
    version = "1.7.2"
  • Verify that source/extensions/lightspeed.trex.properties_pane.shared.mod_setup.widget/docs/CHANGELOG.md includes the updated header:
    ## [1.7.2] - 2025-08-25
    ### Changed
    
source/extensions/lightspeed.trex.components_pane.stagecraft.models/docs/CHANGELOG.md (1)

4-7: LGTM — rename captured correctly and format aligns with Keep a Changelog

Entry accurately reflects the tab rename and heading level is consistent with the file.

source/extensions/lightspeed.trex.layout.stagecraft/lightspeed/trex/layout/stagecraft/setup_ui.py (6)

26-26: Good fix: add standalone carb import

Resolves potential NameError when calling carb APIs later in the file.


168-184: Project name label update: solid UX guardrails

Handles anonymous vs file-backed projects correctly and keeps label/field in sync.


584-591: LGTM: tab model wiring

Collecting enum values for titles and subscribing to selection change matches the widget API.


609-623: Connections from properties pane to events look correct

Retrieving frames by enum and wiring import/go-to-ingest/selection hooks aligns with the widget contracts.


749-761: Splitter clamping reads correctly and avoids negative widths

Good use of MIN_WIDTH_PROPERTY_PANEL and top-bar offset; width recompute is correct.


762-765: Tab → panel mapping via title is correct

show_panel(title=selected_item.title) matches the properties pane API.

@Simon-Lajoie Simon-Lajoie force-pushed the feature/vertical_modding_tabs branch from 9193c5c to f984fe5 Compare August 26, 2025 02:51
Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
source/extensions/lightspeed.trex.properties_pane.shared.mod_packaging.widget/docs/CHANGELOG.md (1)

14-14: Typo: “compatbility” → “compatibility”.

This is user-facing documentation; fix the spelling.

-- Update the documentation for Pydantic V2 compatbility
+- Update the documentation for Pydantic V2 compatibility
♻️ Duplicate comments (5)
source/extensions/lightspeed.trex.properties_pane.shared.mod_packaging.widget/docs/CHANGELOG.md (1)

4-6: Fix 1.2.2 heading level and add release date (Keep a Changelog compliance).

Use a dated version header and third-level subsection heading.

Apply:

-## [1.2.2]
-## Changed
+## [1.2.2] - 2025-08-25
+### Changed
 - Adjusted spacing for the new vertical modding tabs
source/extensions/lightspeed.trex.properties_pane.shared.asset_replacements.widget/docs/CHANGELOG.md (1)

4-6: Add release date to 1.9.1 header (Keep a Changelog) and verify manifest parity

Please date the new entry to align with other modules and Keep a Changelog. If releasing today, use 2025-08-26.

Apply:

-## [1.9.1]
+## [1.9.1] - 2025-08-26

Run to confirm the changelog header and that the extension manifest is bumped to the same version:

#!/bin/bash
set -euo pipefail

# Verify dated header
rg -n '^## \[1\.9\.1\] - 2025-08-26$' source/extensions/lightspeed.trex.properties_pane.shared.asset_replacements.widget/docs/CHANGELOG.md || {
  echo "⚠️ Missing dated header for 1.9.1"
}

# Find matching extension.toml and check version
fd -a 'lightspeed.trex.properties_pane.shared.asset_replacements.widget' \
  | rg -n '/config/extension\.toml$' \
  | while read -r p; do
      echo "Checking $p"
      rg -n '^\s*version\s*=\s*"1\.9\.1"\s*$' "$p" || echo "⚠️ Version mismatch or missing in $p"
    done
source/extensions/omni.flux.tabbed.widget/docs/CHANGELOG.md (1)

5-7: Normalize heading level and add release date for 1.2.2

Use “### Changed” (level 3) and include the release date.

Apply:

-## [1.2.2]
-## Changed
+## [1.2.2] - 2025-08-26
+### Changed
#!/bin/bash
set -euo pipefail

# Header/date check
rg -n '^## \[1\.2\.2\] - 2025-08-26$' source/extensions/omni.flux.tabbed.widget/docs/CHANGELOG.md || echo "⚠️ Missing dated 1.2.2 header"

# extension.toml version parity
fd -a 'source/extensions/omni.flux.tabbed.widget' \
  | rg -n '/config/extension\.toml$' \
  | while read -r p; do
      echo "Checking $p"
      rg -n '^\s*version\s*=\s*"1\.2\.2"\s*$' "$p" || echo "⚠️ Version mismatch or missing in $p"
    done
source/extensions/lightspeed.trex.layout.stagecraft/docs/CHANGELOG.md (1)

4-6: Date the 2.5.3 entry and use “### Changed”

Align with Keep a Changelog and other updated modules.

Apply:

-## [2.5.3]
-## Changed
+## [2.5.3] - 2025-08-26
+### Changed
#!/bin/bash
set -euo pipefail

# Header/date check
rg -n '^## \[2\.5\.3\] - 2025-08-26$' source/extensions/lightspeed.trex.layout.stagecraft/docs/CHANGELOG.md || echo "⚠️ Missing dated 2.5.3 header"

# extension.toml version parity and dependency presence
fd -a 'source/extensions/lightspeed.trex.layout.stagecraft/config/extension.toml' | while read -r p; do
  echo "Checking $p"
  rg -n '^\s*version\s*=\s*"2\.5\.3"\s*$' "$p" || echo "⚠️ Version mismatch or missing in $p"
  rg -n 'omni\.flux\.tabbed\.widget' "$p" >/dev/null || echo "⚠️ omni.flux.tabbed.widget dependency not declared in $p"
done
source/extensions/lightspeed.trex.layout.stagecraft/lightspeed/trex/layout/stagecraft/setup_ui.py (1)

715-723: Fix: pass numeric device-pixel coordinates to burger menu show_at(...)

screen_position_x/y and computed_height are ui.Pixel. Menu.show_at(x, y) expects numbers; passing ui.Pixel will cause a runtime error.

Apply:

-        burger_menu = get_burger_menu_instance()
-        if burger_menu is not None:
-            x_position = self._menu_burger_widget.screen_position_x
-            y_position = (self._menu_burger_widget.screen_position_y +
-                        self._menu_burger_widget.computed_height +
-                        8.0)
-
-            burger_menu.show_at(x_position, y_position)
+        burger_menu = get_burger_menu_instance()
+        if burger_menu is not None:
+            x = float(self._menu_burger_widget.screen_position_x.value)
+            y = float(
+                self._menu_burger_widget.screen_position_y.value
+                + self._menu_burger_widget.computed_height.value
+                + 8.0
+            )
+            burger_menu.show_at(x, y)
🧹 Nitpick comments (6)
source/extensions/lightspeed.trex.properties_pane.shared.mod_packaging.widget/docs/CHANGELOG.md (1)

9-9: Normalize subsection heading levels to match the rest of the file.

Use third-level headings under version sections.

-## Fixed
+### Fixed
-## Changed
+### Changed

Also applies to: 13-13

source/extensions/lightspeed.common/docs/CHANGELOG.md (1)

4-6: Use singular and reference the symbol for clarity

Only one symbol was added in this PR. Prefer singular and name it for traceability.

Apply:

-### Added
-- Added constants for untitled project name
+### Added
+- Added constant for untitled project name (`UNTITLED_PROJECT_NAME`)
source/extensions/lightspeed.trex.layout.stagecraft/lightspeed/trex/layout/stagecraft/setup_ui.py (4)

161-177: Guard both label and field before updating the project name UI

_update_project_name_label checks only for the label; it later dereferences the field unconditionally. Add a field check to avoid edge-case AttributeError on early calls.

-        if not hasattr(self, "_project_name_label") or not self._project_name_label:
+        if (
+            not hasattr(self, "_project_name_label") or not self._project_name_label
+            or not hasattr(self, "_project_name_field") or not self._project_name_field
+        ):
             return

80-83: Naming nit: WIDTH_TOP_BAR actually drives the vertical tabs column width

This constant is used for the vertical tabs width and splitter math, not the (horizontal) “top bar.” Consider renaming to avoid future confusion.

Example:

-    HEIGHT_TOP_BAR = 40
-    WIDTH_TOP_BAR = 40
+    HEIGHT_TOP_BAR = 40
+    WIDTH_TABS_COLUMN = 40

And update call sites:

  • size_tab_label=(ui.Pixel(self.WIDTH_TABS_COLUMN), ui.Pixel(100))
  • splitter offset and clamps: self.WIDTH_TABS_COLUMN + ...

448-478: Reduce nesting: combine adjacent context managers (SIM117)

Multiple nested with blocks can be combined to improve readability without changing behavior.

Example pattern:

-with ui.ZStack(height=ui.Pixel(self.HEIGHT_TOP_BAR)):
-    with ui.ZStack(height=ui.Pixel(self.HEIGHT_TOP_BAR)):
+with ui.ZStack(height=ui.Pixel(self.HEIGHT_TOP_BAR)), ui.ZStack(height=ui.Pixel(self.HEIGHT_TOP_BAR)):
     ...

Apply similarly where feasible in this region (and at 459–465, 477–478, 561–562).


762-775: Optional: unsubscribe/destroy UI subscriptions on teardown

You create several subscriptions/handles (_sub_tab_selection_changed, _sub_import_replacement_layer, _sub_frame_prim_selection_panel, _sub_go_to_ingest, _header_refreshed_task, etc.). Only the feature flags one is explicitly unsubscribed. Consider disposing of the rest to prevent leaks during hot-reload.

For example:

     def destroy(self):
         if self._feature_flags_changed_subs:
             self._feature_flags_core.unsubscribe_feature_flags_changed(self._feature_flags_changed_subs)
+        if self._sub_tab_selection_changed:
+            self._sub_tab_selection_changed = None  # EventSubscription auto-unsub on GC; dropping ref is enough
+        if self._sub_import_replacement_layer:
+            self._sub_import_replacement_layer = None
+        if self._sub_frame_prim_selection_panel:
+            self._sub_frame_prim_selection_panel = None
+        if self._sub_go_to_ingest:
+            self._sub_go_to_ingest = None
+        if self._header_refreshed_task:
+            self._header_refreshed_task = None
         if self.__enable_items_task:
             self.__enable_items_task.cancel()
         self.__enable_items_task = None
📜 Review details

Configuration used: Path: .coderabbit.yml

Review profile: CHILL

Plan: Pro

💡 Knowledge Base configuration:

  • MCP integration is disabled by default for public repositories
  • Jira integration is disabled by default for public repositories
  • Linear integration is disabled by default for public repositories

You can enable these sources in your CodeRabbit configuration.

📥 Commits

Reviewing files that changed from the base of the PR and between ae2716e and f984fe5.

📒 Files selected for processing (23)
  • CHANGELOG.md (2 hunks)
  • docs/howto/learning-toolkit.md (1 hunks)
  • source/extensions/lightspeed.common/config/extension.toml (1 hunks)
  • source/extensions/lightspeed.common/docs/CHANGELOG.md (1 hunks)
  • source/extensions/lightspeed.common/lightspeed/common/constants.py (1 hunks)
  • source/extensions/lightspeed.trex.components_pane.stagecraft.models/config/extension.toml (1 hunks)
  • source/extensions/lightspeed.trex.components_pane.stagecraft.models/docs/CHANGELOG.md (1 hunks)
  • source/extensions/lightspeed.trex.components_pane.stagecraft.models/lightspeed/trex/components_pane/stagecraft/models/model_items.py (1 hunks)
  • source/extensions/lightspeed.trex.layout.stagecraft/config/extension.toml (2 hunks)
  • source/extensions/lightspeed.trex.layout.stagecraft/docs/CHANGELOG.md (1 hunks)
  • source/extensions/lightspeed.trex.layout.stagecraft/lightspeed/trex/layout/stagecraft/setup_ui.py (13 hunks)
  • source/extensions/lightspeed.trex.properties_pane.shared.asset_replacements.widget/config/extension.toml (1 hunks)
  • source/extensions/lightspeed.trex.properties_pane.shared.asset_replacements.widget/docs/CHANGELOG.md (1 hunks)
  • source/extensions/lightspeed.trex.properties_pane.shared.asset_replacements.widget/lightspeed/trex/properties_pane/shared/asset_replacements/widget/setup_ui.py (1 hunks)
  • source/extensions/lightspeed.trex.properties_pane.shared.mod_packaging.widget/config/extension.toml (1 hunks)
  • source/extensions/lightspeed.trex.properties_pane.shared.mod_packaging.widget/docs/CHANGELOG.md (1 hunks)
  • source/extensions/lightspeed.trex.properties_pane.shared.mod_packaging.widget/lightspeed/trex/properties_pane/shared/mod_packaging/widget/setup_ui.py (1 hunks)
  • source/extensions/lightspeed.trex.properties_pane.shared.mod_setup.widget/config/extension.toml (1 hunks)
  • source/extensions/lightspeed.trex.properties_pane.shared.mod_setup.widget/docs/CHANGELOG.md (1 hunks)
  • source/extensions/lightspeed.trex.properties_pane.shared.mod_setup.widget/lightspeed/trex/properties_pane/shared/mod_setup/widget/setup_ui.py (1 hunks)
  • source/extensions/omni.flux.tabbed.widget/config/extension.toml (1 hunks)
  • source/extensions/omni.flux.tabbed.widget/docs/CHANGELOG.md (1 hunks)
  • source/extensions/omni.flux.tabbed.widget/omni/flux/tabbed/widget/setup_ui.py (4 hunks)
✅ Files skipped from review due to trivial changes (1)
  • source/extensions/lightspeed.trex.components_pane.stagecraft.models/config/extension.toml
🚧 Files skipped from review as they are similar to previous changes (12)
  • source/extensions/lightspeed.trex.properties_pane.shared.mod_packaging.widget/config/extension.toml
  • source/extensions/omni.flux.tabbed.widget/config/extension.toml
  • source/extensions/lightspeed.trex.properties_pane.shared.asset_replacements.widget/config/extension.toml
  • source/extensions/lightspeed.trex.layout.stagecraft/config/extension.toml
  • source/extensions/lightspeed.trex.properties_pane.shared.mod_setup.widget/config/extension.toml
  • source/extensions/lightspeed.trex.components_pane.stagecraft.models/lightspeed/trex/components_pane/stagecraft/models/model_items.py
  • source/extensions/lightspeed.common/config/extension.toml
  • source/extensions/lightspeed.trex.properties_pane.shared.mod_setup.widget/lightspeed/trex/properties_pane/shared/mod_setup/widget/setup_ui.py
  • source/extensions/lightspeed.trex.properties_pane.shared.mod_packaging.widget/lightspeed/trex/properties_pane/shared/mod_packaging/widget/setup_ui.py
  • source/extensions/lightspeed.trex.properties_pane.shared.asset_replacements.widget/lightspeed/trex/properties_pane/shared/asset_replacements/widget/setup_ui.py
  • source/extensions/omni.flux.tabbed.widget/omni/flux/tabbed/widget/setup_ui.py
  • CHANGELOG.md
🧰 Additional context used
🧬 Code graph analysis (1)
source/extensions/lightspeed.trex.layout.stagecraft/lightspeed/trex/layout/stagecraft/setup_ui.py (3)
source/extensions/omni.flux.tabbed.widget/omni/flux/tabbed/widget/setup_ui.py (8)
  • SetupUI (34-328)
  • model (158-159)
  • selection (173-175)
  • selection (178-185)
  • add (141-155)
  • subscribe_selection_changed (96-101)
  • destroy (325-328)
  • get_frame (125-135)
source/extensions/lightspeed.trex.menu.workfile/lightspeed/trex/menu/workfile/setup_ui.py (2)
  • SetupUI (60-254)
  • show_at (247-251)
source/extensions/lightspeed.trex.properties_pane.stagecraft.widget/lightspeed/trex/properties_pane/stagecraft/widget/setup_ui.py (3)
  • SetupUI (28-64)
  • show_panel (53-59)
  • get_frame (40-44)
🪛 Ruff (0.12.2)
source/extensions/lightspeed.trex.layout.stagecraft/lightspeed/trex/layout/stagecraft/setup_ui.py

448-449: Use a single with statement with multiple contexts instead of nested with statements

(SIM117)


459-465: Use a single with statement with multiple contexts instead of nested with statements

(SIM117)


477-478: Use a single with statement with multiple contexts instead of nested with statements

(SIM117)


561-562: Use a single with statement with multiple contexts instead of nested with statements

(SIM117)

🪛 LanguageTool
docs/howto/learning-toolkit.md

[grammar] ~11-~11: There might be a mistake here.
Context: ...ded capture layer, as the project wizard streamlines the remaining setup processe...

(QB_NEW_EN)

source/extensions/lightspeed.common/docs/CHANGELOG.md

[grammar] ~4-~4: There might be a mistake here.
Context: ...epachangelog.com/en/1.0.0/). ## [1.8.1] ### Added - Added constants for untitled pro...

(QB_NEW_EN)


[grammar] ~5-~5: There might be a mistake here.
Context: ...og.com/en/1.0.0/). ## [1.8.1] ### Added - Added constants for untitled project nam...

(QB_NEW_EN)

source/extensions/lightspeed.trex.components_pane.stagecraft.models/docs/CHANGELOG.md

[grammar] ~4-~4: There might be a mistake here.
Context: ...epachangelog.com/en/1.0.0/). ## [1.1.2] ### Changed - Renamed the modding tab from "...

(QB_NEW_EN)


[grammar] ~5-~5: There might be a mistake here.
Context: ....com/en/1.0.0/). ## [1.1.2] ### Changed - Renamed the modding tab from "Captures /...

(QB_NEW_EN)


[grammar] ~8-~8: There might be a mistake here.
Context: ... / Setup" to "Project Setup" ## [1.1.1] ### Fixed - Fixed Test assets to large to wo...

(QB_NEW_EN)


[grammar] ~9-~9: There might be a mistake here.
Context: ...to "Project Setup" ## [1.1.1] ### Fixed - Fixed Test assets to large to work witho...

(QB_NEW_EN)


[grammar] ~12-~12: There might be a mistake here.
Context: ...to large to work without LFS ## [1.1.0] ### Changed - Update the documentation for P...

(QB_NEW_EN)


[grammar] ~13-~13: There might be a mistake here.
Context: ...work without LFS ## [1.1.0] ### Changed - Update the documentation for Pydantic V2...

(QB_NEW_EN)

source/extensions/lightspeed.trex.layout.stagecraft/docs/CHANGELOG.md

[grammar] ~4-~4: There might be a mistake here.
Context: ...epachangelog.com/en/1.0.0/). ## [2.5.3] ## Changed - Changed modding tabs to vertic...

(QB_NEW_EN)


[grammar] ~5-~5: There might be a mistake here.
Context: ...g.com/en/1.0.0/). ## [2.5.3] ## Changed - Changed modding tabs to vertical layout ...

(QB_NEW_EN)

source/extensions/lightspeed.trex.properties_pane.shared.asset_replacements.widget/docs/CHANGELOG.md

[grammar] ~4-~4: There might be a mistake here.
Context: ...epachangelog.com/en/1.0.0/). ## [1.9.1] ### Changed - Adjusted spacing for the new v...

(QB_NEW_EN)


[grammar] ~5-~5: There might be a mistake here.
Context: ....com/en/1.0.0/). ## [1.9.1] ### Changed - Adjusted spacing for the new vertical mo...

(QB_NEW_EN)

source/extensions/lightspeed.trex.properties_pane.shared.mod_packaging.widget/docs/CHANGELOG.md

[grammar] ~4-~4: There might be a mistake here.
Context: ...epachangelog.com/en/1.0.0/). ## [1.2.2] ## Changed - Adjusted spacing for the new v...

(QB_NEW_EN)


[grammar] ~5-~5: There might be a mistake here.
Context: ...g.com/en/1.0.0/). ## [1.2.2] ## Changed - Adjusted spacing for the new vertical mo...

(QB_NEW_EN)

source/extensions/lightspeed.trex.properties_pane.shared.mod_setup.widget/docs/CHANGELOG.md

[grammar] ~4-~4: There might be a mistake here.
Context: ...epachangelog.com/en/1.0.0/). ## [1.7.2] ## Changed - Adjusted spacing for the new v...

(QB_NEW_EN)


[grammar] ~5-~5: There might be a mistake here.
Context: ...g.com/en/1.0.0/). ## [1.7.2] ## Changed - Adjusted spacing for the new vertical mo...

(QB_NEW_EN)

source/extensions/omni.flux.tabbed.widget/docs/CHANGELOG.md

[grammar] ~5-~5: There might be a mistake here.
Context: ...epachangelog.com/en/1.0.0/). ## [1.2.2] ## Changed - Adjusted spacing for the new v...

(QB_NEW_EN)


[grammar] ~6-~6: There might be a mistake here.
Context: ...g.com/en/1.0.0/). ## [1.2.2] ## Changed - Adjusted spacing for the new vertical mo...

(QB_NEW_EN)

🔇 Additional comments (3)
docs/howto/learning-toolkit.md (1)

11-12: LGTM: label rename reads clearly and matches the UI

The “Project Setup” rename is consistent and the surrounding context remains accurate.

source/extensions/lightspeed.common/lightspeed/common/constants.py (1)

553-556: LGTM: new public constant is well-scoped and named

The UNTITLED_PROJECT_NAME addition is clear and keeps user-facing strings centralized. No issues spotted.

source/extensions/lightspeed.trex.components_pane.stagecraft.models/docs/CHANGELOG.md (1)

4-7: Rename entry looks good and matches UI terminology

“Captures / Setup” → “Project Setup” aligns with the enum/tab label changes elsewhere. No further action needed.

@Simon-Lajoie Simon-Lajoie force-pushed the feature/vertical_modding_tabs branch from 3053140 to f1d4aa4 Compare August 26, 2025 03:16
Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

♻️ Duplicate comments (5)
source/extensions/lightspeed.trex.properties_pane.shared.mod_setup.widget/docs/CHANGELOG.md (1)

4-6: Add release date to 1.7.2 header (Keep a Changelog compliance) and keep section level at H3

Per prior feedback, the 1.7.2 entry should include a release date. Other modules follow “## [version] - YYYY-MM-DD”. Please add the date to maintain consistency across the repo.

Apply:

-## [1.7.2]
+## [1.7.2] - 2025-08-26

Run to verify the header and version parity:

#!/bin/bash
set -euo pipefail

# Verify dated 1.7.2 header
rg -n '^## \[1\.7\.2\] - 2025-08-26$' source/extensions/lightspeed.trex.properties_pane.shared.mod_setup.widget/docs/CHANGELOG.md \
  || { echo "⚠️ Missing dated 1.7.2 header"; exit 1; }

# Find extension.toml and check version = "1.7.2"
fd -a 'extension.toml' source/extensions/lightspeed.trex.properties_pane.shared.mod_setup.widget \
  | while read -r p; do
      echo "Checking version in $p"
      rg -n '^\s*version\s*=\s*"1\.7\.2"\s*$' "$p" || { echo "⚠️ Version mismatch or missing in $p"; exit 1; }
    done

echo "✅ CHANGELOG header and extension.toml version look good"
source/extensions/omni.flux.tabbed.widget/docs/CHANGELOG.md (1)

5-7: Add release date to 1.2.2 header (Keep a Changelog)
The section already uses the correct "### Changed" level; just add the release date.

-## [1.2.2]
+## [1.2.2] - 2025-08-25

Run to confirm header/date and matching extension version:

#!/bin/bash
set -euo pipefail
rg -n '^## \[1\.2\.2\] - 2025-08-25$' source/extensions/omni.flux.tabbed.widget/docs/CHANGELOG.md || { echo "Missing dated header"; exit 1; }
fd -a 'source/extensions/omni.flux.tabbed.widget/**/extension.toml' | while read -r p; do
  rg -n '^version\s*=\s*"1\.2\.2"\s*$' "$p" || { echo "Version mismatch in $p"; exit 1; }
done
echo "OK"
source/extensions/lightspeed.trex.properties_pane.shared.asset_replacements.widget/docs/CHANGELOG.md (1)

4-7: Add release date to 1.9.1 header (Keep a Changelog)
Heading level is already correct; add the date to complete the entry.

-## [1.9.1]
+## [1.9.1] - 2025-08-25

Verify both the dated header and the extension manifest version:

#!/bin/bash
set -euo pipefail
rg -n '^## \[1\.9\.1\] - 2025-08-25$' source/extensions/lightspeed.trex.properties_pane.shared.asset_replacements.widget/docs/CHANGELOG.md || { echo "Missing dated header"; exit 1; }
fd -a 'source/extensions/lightspeed.trex.properties_pane.shared.asset_replacements.widget/**/extension.toml' | while read -r p; do
  rg -n '^version\s*=\s*"1\.9\.1"\s*$' "$p" || { echo "Version mismatch in $p"; exit 1; }
done
echo "OK"
source/extensions/lightspeed.trex.layout.stagecraft/docs/CHANGELOG.md (1)

4-7: Date the 2.5.3 entry and normalize heading level
Match the rest of the repo’s Keep a Changelog usage by adding the release date and using a third-level “Changed” heading.

-## [2.5.3]
-## Changed
+## [2.5.3] - 2025-08-25
+### Changed

Confirm the dated header and the extension version bump:

#!/bin/bash
set -euo pipefail
rg -n '^## \[2\.5\.3\] - 2025-08-25$' source/extensions/lightspeed.trex.layout.stagecraft/docs/CHANGELOG.md || { echo "Missing dated header"; exit 1; }
fd -a 'source/extensions/lightspeed.trex.layout.stagecraft/**/extension.toml' | while read -r p; do
  rg -n '^version\s*=\s*"2\.5\.3"\s*$' "$p" || { echo "Version mismatch in $p"; exit 1; }
done
echo "OK"
source/extensions/lightspeed.trex.layout.stagecraft/lightspeed/trex/layout/stagecraft/setup_ui.py (1)

724-730: Bug: Menu.show_at expects numeric coordinates; unwrap ui.Pixel values.

x_position and y_position are ui.Pixel (or sums involving them). Passing them directly can break at runtime. Convert to ints/floats before calling show_at.

-        burger_menu = get_burger_menu_instance()
-        if burger_menu is not None:
-            x_position = self._menu_burger_widget.screen_position_x
-            y_position = self._menu_burger_widget.screen_position_y + self._menu_burger_widget.computed_height + 8.0
-
-            burger_menu.show_at(x_position, y_position)
+        burger_menu = get_burger_menu_instance()
+        if burger_menu is not None:
+            x_px = float(self._menu_burger_widget.screen_position_x.value)
+            y_px = float(
+                self._menu_burger_widget.screen_position_y.value
+                + self._menu_burger_widget.computed_height.value
+                + 8.0
+            )
+            burger_menu.show_at(x_px, y_px)
🧹 Nitpick comments (9)
source/extensions/lightspeed.trex.properties_pane.shared.mod_setup.widget/docs/CHANGELOG.md (1)

9-11: Fix grammar in 1.7.1 “Fixed” bullet

The sentence is ungrammatical; suggest clarifying that assets were too large for non-LFS usage.

- - Fixed Test assets to large to work without LFS
+ - Fixed test assets that were too large to work without LFS
docs/howto/learning-toolkit.md (1)

11-12: LGTM; minor wording polish optional
The rename reads well. If you want tighter phrasing, consider the edit below.

-The `Project Setup` tab is primarily used to manage the currently loaded capture layer, as the project wizard
-streamlines the remaining setup processes.
+The `Project Setup` tab is primarily used to manage the active capture layer. The project wizard
+handles the remaining setup steps.
source/extensions/lightspeed.trex.components_pane.stagecraft.models/docs/CHANGELOG.md (2)

9-10: Grammar: “to large” → “too large”.

Minor wording fix to improve readability.

- - Fixed Test assets to large to work without LFS
+ - Fixed test assets too large to work without LFS

13-14: Typo: “compatbility” → “compatibility”.

- - Update the documentation for Pydantic V2 compatbility
+ - Update the documentation for Pydantic V2 compatibility
source/extensions/lightspeed.trex.properties_pane.shared.mod_packaging.widget/docs/CHANGELOG.md (2)

9-10: Grammar: “to large” → “too large”.

- - Fixed Test assets to large to work without LFS
+ - Fixed test assets too large to work without LFS

13-14: Typo: “compatbility” → “compatibility”.

- - Update the documentation for Pydantic V2 compatbility
+ - Update the documentation for Pydantic V2 compatibility
source/extensions/lightspeed.trex.layout.stagecraft/lightspeed/trex/layout/stagecraft/setup_ui.py (3)

161-177: Defensive check: guard both label and field before updating.

The method returns early if the label is missing, but it accesses the field/model unconditionally. Add a symmetric guard to avoid rare AttributeError during early events.

-        if not hasattr(self, "_project_name_label") or not self._project_name_label:
+        if (
+            not hasattr(self, "_project_name_label") or not self._project_name_label
+            or not hasattr(self, "_project_name_field") or not self._project_name_field
+        ):
             return

188-208: Optional UX: inform the user when rename is reverted.

When the stage is file-based we log a warning and revert, but there’s no visible cue. Consider a small non-blocking dialog to explain why.

         if root_layer and not root_layer.anonymous and root_layer.realPath:
-            carb.log_warn("Renaming file-based projects directly is not supported. Reverting display name.")
+            carb.log_warn("Renaming file-based projects directly is not supported. Reverting display name.")
+            _TrexMessageDialog(
+                "Renaming saved projects here isn’t supported. The display name has been reverted.",
+                title="Rename Not Applied",
+                disable_cancel_button=True,
+            )
             self._update_project_name_label()

628-646: Avoid mutating internal item.selected; rely on the widget’s selection API.

Directly toggling sel.selected and manually invoking the selection handler can cause double work or drift with internal state. Let the selection setter drive state and events.

-        if not self._tabbed_frame.selection:
-            # No selection, select the first tab
-            sel = children[0]
-            self._tabbed_frame.selection = [sel.title]
-            sel.selected = True
-        else:
-            # Find the item object matching the selected title
-            selected_title = self._tabbed_frame.selection[0]
-            sel = next((item for item in children if item.title == selected_title), None)
-            if sel:
-                sel.selected = True
-            else:
-                # Selection not found, fallback to first
-                sel = children[0]
-                self._tabbed_frame.selection = [sel.title]
-                sel.selected = True
-
-        self._on_tab_selection_changed(sel)
+        if not self._tabbed_frame.selection:
+            # No selection, select the first tab
+            first = children[0]
+            self._tabbed_frame.selection = [first.title]
+            # The widget will fire the selection-changed event.
+            return
+        # Selection exists; find the matching item and notify downstream if needed.
+        selected_title = self._tabbed_frame.selection[0]
+        sel = next((item for item in children if item.title == selected_title), None)
+        if sel:
+            self._on_tab_selection_changed(sel)
+        else:
+            # Fallback to first child
+            first = children[0]
+            self._tabbed_frame.selection = [first.title]
📜 Review details

Configuration used: Path: .coderabbit.yml

Review profile: CHILL

Plan: Pro

💡 Knowledge Base configuration:

  • MCP integration is disabled by default for public repositories
  • Jira integration is disabled by default for public repositories
  • Linear integration is disabled by default for public repositories

You can enable these sources in your CodeRabbit configuration.

📥 Commits

Reviewing files that changed from the base of the PR and between f984fe5 and f1d4aa4.

📒 Files selected for processing (23)
  • CHANGELOG.md (2 hunks)
  • docs/howto/learning-toolkit.md (1 hunks)
  • source/extensions/lightspeed.common/config/extension.toml (1 hunks)
  • source/extensions/lightspeed.common/docs/CHANGELOG.md (1 hunks)
  • source/extensions/lightspeed.common/lightspeed/common/constants.py (1 hunks)
  • source/extensions/lightspeed.trex.components_pane.stagecraft.models/config/extension.toml (1 hunks)
  • source/extensions/lightspeed.trex.components_pane.stagecraft.models/docs/CHANGELOG.md (1 hunks)
  • source/extensions/lightspeed.trex.components_pane.stagecraft.models/lightspeed/trex/components_pane/stagecraft/models/model_items.py (1 hunks)
  • source/extensions/lightspeed.trex.layout.stagecraft/config/extension.toml (2 hunks)
  • source/extensions/lightspeed.trex.layout.stagecraft/docs/CHANGELOG.md (1 hunks)
  • source/extensions/lightspeed.trex.layout.stagecraft/lightspeed/trex/layout/stagecraft/setup_ui.py (13 hunks)
  • source/extensions/lightspeed.trex.properties_pane.shared.asset_replacements.widget/config/extension.toml (1 hunks)
  • source/extensions/lightspeed.trex.properties_pane.shared.asset_replacements.widget/docs/CHANGELOG.md (1 hunks)
  • source/extensions/lightspeed.trex.properties_pane.shared.asset_replacements.widget/lightspeed/trex/properties_pane/shared/asset_replacements/widget/setup_ui.py (1 hunks)
  • source/extensions/lightspeed.trex.properties_pane.shared.mod_packaging.widget/config/extension.toml (1 hunks)
  • source/extensions/lightspeed.trex.properties_pane.shared.mod_packaging.widget/docs/CHANGELOG.md (1 hunks)
  • source/extensions/lightspeed.trex.properties_pane.shared.mod_packaging.widget/lightspeed/trex/properties_pane/shared/mod_packaging/widget/setup_ui.py (1 hunks)
  • source/extensions/lightspeed.trex.properties_pane.shared.mod_setup.widget/config/extension.toml (1 hunks)
  • source/extensions/lightspeed.trex.properties_pane.shared.mod_setup.widget/docs/CHANGELOG.md (1 hunks)
  • source/extensions/lightspeed.trex.properties_pane.shared.mod_setup.widget/lightspeed/trex/properties_pane/shared/mod_setup/widget/setup_ui.py (1 hunks)
  • source/extensions/omni.flux.tabbed.widget/config/extension.toml (1 hunks)
  • source/extensions/omni.flux.tabbed.widget/docs/CHANGELOG.md (1 hunks)
  • source/extensions/omni.flux.tabbed.widget/omni/flux/tabbed/widget/setup_ui.py (4 hunks)
🚧 Files skipped from review as they are similar to previous changes (14)
  • source/extensions/lightspeed.trex.properties_pane.shared.mod_packaging.widget/config/extension.toml
  • source/extensions/omni.flux.tabbed.widget/config/extension.toml
  • source/extensions/lightspeed.trex.layout.stagecraft/config/extension.toml
  • source/extensions/lightspeed.trex.properties_pane.shared.asset_replacements.widget/config/extension.toml
  • source/extensions/lightspeed.trex.properties_pane.shared.mod_setup.widget/config/extension.toml
  • CHANGELOG.md
  • source/extensions/lightspeed.trex.components_pane.stagecraft.models/lightspeed/trex/components_pane/stagecraft/models/model_items.py
  • source/extensions/lightspeed.common/lightspeed/common/constants.py
  • source/extensions/lightspeed.common/config/extension.toml
  • source/extensions/lightspeed.trex.components_pane.stagecraft.models/config/extension.toml
  • source/extensions/lightspeed.trex.properties_pane.shared.mod_packaging.widget/lightspeed/trex/properties_pane/shared/mod_packaging/widget/setup_ui.py
  • source/extensions/lightspeed.trex.properties_pane.shared.mod_setup.widget/lightspeed/trex/properties_pane/shared/mod_setup/widget/setup_ui.py
  • source/extensions/lightspeed.trex.properties_pane.shared.asset_replacements.widget/lightspeed/trex/properties_pane/shared/asset_replacements/widget/setup_ui.py
  • source/extensions/omni.flux.tabbed.widget/omni/flux/tabbed/widget/setup_ui.py
🧰 Additional context used
🧬 Code graph analysis (1)
source/extensions/lightspeed.trex.layout.stagecraft/lightspeed/trex/layout/stagecraft/setup_ui.py (2)
source/extensions/omni.flux.tabbed.widget/omni/flux/tabbed/widget/setup_ui.py (7)
  • SetupUI (34-328)
  • model (158-159)
  • selection (173-175)
  • selection (178-185)
  • add (141-155)
  • subscribe_selection_changed (96-101)
  • destroy (325-328)
source/extensions/lightspeed.trex.menu.workfile/lightspeed/trex/menu/workfile/setup_ui.py (2)
  • SetupUI (60-254)
  • show_at (247-251)
🪛 Ruff (0.12.2)
source/extensions/lightspeed.trex.layout.stagecraft/lightspeed/trex/layout/stagecraft/setup_ui.py

448-449: Use a single with statement with multiple contexts instead of nested with statements

(SIM117)


459-465: Use a single with statement with multiple contexts instead of nested with statements

(SIM117)


477-478: Use a single with statement with multiple contexts instead of nested with statements

(SIM117)


561-562: Use a single with statement with multiple contexts instead of nested with statements

(SIM117)

🪛 LanguageTool
docs/howto/learning-toolkit.md

[grammar] ~11-~11: There might be a mistake here.
Context: ...ded capture layer, as the project wizard streamlines the remaining setup processe...

(QB_NEW_EN)

source/extensions/lightspeed.common/docs/CHANGELOG.md

[grammar] ~4-~4: There might be a mistake here.
Context: ...epachangelog.com/en/1.0.0/). ## [1.8.1] ### Added - Added constants for untitled pro...

(QB_NEW_EN)


[grammar] ~5-~5: There might be a mistake here.
Context: ...og.com/en/1.0.0/). ## [1.8.1] ### Added - Added constants for untitled project nam...

(QB_NEW_EN)

source/extensions/lightspeed.trex.components_pane.stagecraft.models/docs/CHANGELOG.md

[grammar] ~4-~4: There might be a mistake here.
Context: ...epachangelog.com/en/1.0.0/). ## [1.1.2] ### Changed - Renamed the modding tab from "...

(QB_NEW_EN)


[grammar] ~5-~5: There might be a mistake here.
Context: ....com/en/1.0.0/). ## [1.1.2] ### Changed - Renamed the modding tab from "Captures /...

(QB_NEW_EN)


[grammar] ~8-~8: There might be a mistake here.
Context: ... / Setup" to "Project Setup" ## [1.1.1] ### Fixed - Fixed Test assets to large to wo...

(QB_NEW_EN)


[grammar] ~9-~9: There might be a mistake here.
Context: ...to "Project Setup" ## [1.1.1] ### Fixed - Fixed Test assets to large to work witho...

(QB_NEW_EN)


[grammar] ~12-~12: There might be a mistake here.
Context: ...to large to work without LFS ## [1.1.0] ### Changed - Update the documentation for P...

(QB_NEW_EN)


[grammar] ~13-~13: There might be a mistake here.
Context: ...work without LFS ## [1.1.0] ### Changed - Update the documentation for Pydantic V2...

(QB_NEW_EN)

source/extensions/lightspeed.trex.layout.stagecraft/docs/CHANGELOG.md

[grammar] ~4-~4: There might be a mistake here.
Context: ...epachangelog.com/en/1.0.0/). ## [2.5.3] ## Changed - Changed modding tabs to vertic...

(QB_NEW_EN)


[grammar] ~5-~5: There might be a mistake here.
Context: ...g.com/en/1.0.0/). ## [2.5.3] ## Changed - Changed modding tabs to vertical layout ...

(QB_NEW_EN)

source/extensions/lightspeed.trex.properties_pane.shared.asset_replacements.widget/docs/CHANGELOG.md

[grammar] ~4-~4: There might be a mistake here.
Context: ...epachangelog.com/en/1.0.0/). ## [1.9.1] ### Changed - Adjusted spacing for the new v...

(QB_NEW_EN)


[grammar] ~5-~5: There might be a mistake here.
Context: ....com/en/1.0.0/). ## [1.9.1] ### Changed - Adjusted spacing for the new vertical mo...

(QB_NEW_EN)

source/extensions/lightspeed.trex.properties_pane.shared.mod_packaging.widget/docs/CHANGELOG.md

[grammar] ~4-~4: There might be a mistake here.
Context: ...epachangelog.com/en/1.0.0/). ## [1.2.2] ### Changed - Adjusted spacing for the new v...

(QB_NEW_EN)


[grammar] ~5-~5: There might be a mistake here.
Context: ....com/en/1.0.0/). ## [1.2.2] ### Changed - Adjusted spacing for the new vertical mo...

(QB_NEW_EN)


[grammar] ~8-~8: There might be a mistake here.
Context: ...he new vertical modding tabs ## [1.2.1] ### Fixed - Fixed Test assets to large to wo...

(QB_NEW_EN)


[grammar] ~9-~9: There might be a mistake here.
Context: ...tical modding tabs ## [1.2.1] ### Fixed - Fixed Test assets to large to work witho...

(QB_NEW_EN)


[grammar] ~12-~12: There might be a mistake here.
Context: ...to large to work without LFS ## [1.2.0] ### Changed - Update the documentation for P...

(QB_NEW_EN)


[grammar] ~13-~13: There might be a mistake here.
Context: ...work without LFS ## [1.2.0] ### Changed - Update the documentation for Pydantic V2...

(QB_NEW_EN)

source/extensions/lightspeed.trex.properties_pane.shared.mod_setup.widget/docs/CHANGELOG.md

[grammar] ~4-~4: There might be a mistake here.
Context: ...epachangelog.com/en/1.0.0/). ## [1.7.2] ### Changed - Adjusted spacing for the new v...

(QB_NEW_EN)


[grammar] ~5-~5: There might be a mistake here.
Context: ....com/en/1.0.0/). ## [1.7.2] ### Changed - Adjusted spacing for the new vertical mo...

(QB_NEW_EN)


[grammar] ~8-~8: There might be a mistake here.
Context: ...he new vertical modding tabs ## [1.7.1] ### Fixed - Fixed Test assets to large to wo...

(QB_NEW_EN)


[grammar] ~9-~9: There might be a mistake here.
Context: ...tical modding tabs ## [1.7.1] ### Fixed - Fixed Test assets to large to work witho...

(QB_NEW_EN)


[grammar] ~12-~12: There might be a mistake here.
Context: ...to large to work without LFS ## [1.7.0] ### Changed - Update the documentation for P...

(QB_NEW_EN)


[grammar] ~13-~13: There might be a mistake here.
Context: ...work without LFS ## [1.7.0] ### Changed - Update the documentation for Pydantic V2...

(QB_NEW_EN)


[grammar] ~14-~14: Ensure spelling is correct
Context: ...pdate the documentation for Pydantic V2 compatbility ## [1.6.4] ### Changed - Updated test to us...

(QB_NEW_EN_ORTHOGRAPHY_ERROR_IDS_1)


[grammar] ~16-~16: There might be a mistake here.
Context: ...for Pydantic V2 compatbility ## [1.6.4] ### Changed - Updated test to use deps ins...

(QB_NEW_EN)


[grammar] ~17-~17: There might be a mistake here.
Context: ... V2 compatbility ## [1.6.4] ### Changed - Updated test to use deps instead of `....

(QB_NEW_EN)


[grammar] ~20-~20: There might be a mistake here.
Context: ...depsinstead of.deps` dir ## [1.6.3] ### Changed - Use left-aligned properties wi...

(QB_NEW_EN)


[grammar] ~21-~21: There might be a mistake here.
Context: ...d of .deps dir ## [1.6.3] ### Changed - Use left-aligned properties widget - Cha...

(QB_NEW_EN)


[grammar] ~25-~25: There might be a mistake here.
Context: ...layout to be more consistent ## [1.6.2] ### Changed - Update to Kit 106.5 ## [1.6.1...

(QB_NEW_EN)


[grammar] ~26-~26: There might be a mistake here.
Context: ... more consistent ## [1.6.2] ### Changed - Update to Kit 106.5 ## [1.6.1] ### Chan...

(QB_NEW_EN)


[grammar] ~29-~29: There might be a mistake here.
Context: ...hanged - Update to Kit 106.5 ## [1.6.1] ### Changed - Updated the look of the "Loadi...

(QB_NEW_EN)


[grammar] ~30-~30: There might be a mistake here.
Context: ...ate to Kit 106.5 ## [1.6.1] ### Changed - Updated the look of the "Loading..." pan...

(QB_NEW_EN)


[grammar] ~33-~33: There might be a mistake here.
Context: ...ok of the "Loading..." panel ## [1.6.0] ### Removed - removed "Open Wizard" button f...

(QB_NEW_EN)


[grammar] ~37-~37: There might be a mistake here.
Context: ..." button from property panel ## [1.5.7] ### Changed - Improved Mod File button label...

(QB_NEW_EN)


[grammar] ~38-~38: There might be a mistake here.
Context: ...m property panel ## [1.5.7] ### Changed - Improved Mod File button labels ## [1.5...

(QB_NEW_EN)

source/extensions/omni.flux.tabbed.widget/docs/CHANGELOG.md

[grammar] ~5-~5: There might be a mistake here.
Context: ...epachangelog.com/en/1.0.0/). ## [1.2.2] ### Changed - Adjusted spacing for the new v...

(QB_NEW_EN)


[grammar] ~6-~6: There might be a mistake here.
Context: ....com/en/1.0.0/). ## [1.2.2] ### Changed - Adjusted spacing for the new vertical mo...

(QB_NEW_EN)


[grammar] ~9-~9: There might be a mistake here.
Context: ...he new vertical modding tabs ## [1.2.1] ### Fixed - Fixed Test assets to large to wo...

(QB_NEW_EN)


[grammar] ~10-~10: There might be a mistake here.
Context: ...tical modding tabs ## [1.2.1] ### Fixed - Fixed Test assets to large to work witho...

(QB_NEW_EN)


[grammar] ~13-~13: There might be a mistake here.
Context: ...to large to work without LFS ## [1.2.0] ### Changed - Update the documentation for P...

(QB_NEW_EN)


[grammar] ~14-~14: There might be a mistake here.
Context: ...work without LFS ## [1.2.0] ### Changed - Update the documentation for Pydantic V2...

(QB_NEW_EN)


[grammar] ~15-~15: Ensure spelling is correct
Context: ...pdate the documentation for Pydantic V2 compatbility ## [1.1.6] ### Changed - update to use omni...

(QB_NEW_EN_ORTHOGRAPHY_ERROR_IDS_1)

🔇 Additional comments (9)
source/extensions/lightspeed.trex.properties_pane.shared.mod_setup.widget/docs/CHANGELOG.md (1)

9-9: Good consistency: demoted section headers to level-3

Converting “Changed/Fixed/Removed” section headings to H3 across historical entries improves consistency and readability.

Also applies to: 13-13, 17-17, 21-21, 26-26, 30-30, 34-34, 38-38, 42-42

source/extensions/lightspeed.trex.components_pane.stagecraft.models/docs/CHANGELOG.md (1)

4-6: Changelog entry 1.1.2 looks good and consistent with Keep a Changelog.

The heading level and rename note are correct.

source/extensions/lightspeed.trex.properties_pane.shared.mod_packaging.widget/docs/CHANGELOG.md (1)

4-6: Confirm and Add Release Date for 1.2.2

I wasn’t able to automatically determine the exact release date for version 1.2.2. Please verify the intended release date (e.g., from your release notes or commit history) and update the CHANGELOG entry accordingly to maintain consistency with the other dated headers.

• File needing update:
source/extensions/lightspeed.trex.properties_pane.shared.mod_packaging.widget/docs/CHANGELOG.md

• Suggested diff (replace “YYYY-MM-DD” with the verified date):

-## [1.2.2]
+## [1.2.2] – YYYY-MM-DD
 ### Changed
 - Adjusted spacing for the new vertical modding tabs
source/extensions/lightspeed.trex.layout.stagecraft/lightspeed/trex/layout/stagecraft/setup_ui.py (6)

26-26: Import of carb is correct and necessary.

This resolves NameError risks for carb.log_warn(...) and carb.tokens usages.


36-37: Good addition: central UNTITLED_PROJECT_NAME constant.

Importing the constant keeps the default naming consistent across the app.


80-82: Top-bar sizing constants make the layout easier to maintain.

HEIGHT_TOP_BAR and WIDTH_TOP_BAR are clear and will help keep offsets/clamps consistent.


144-145: Project name refresh on stage events is appropriate.

Updating the label on OPENED/SAVED/CLOSED keeps the UI in sync with the current project.


753-765: Nice clamp logic on the property/viewport splitter.

Bounds reflect WIDTH_TOP_BAR and MIN/MAX property panel widths. Clear and easy to tweak.


570-575: Selection change payload is always an Item instance – no wrapper needed

I’ve reviewed the subscribe_selection_changed API in omni.flux.tabbed.widget’s SetupUI and confirmed:

  • subscribe_selection_changed takes a Callable[["_Item"], Any] and returns an _EventSubscription on self.__on_selection_changed .
  • Both _selection_changed(self, item: "_Item") and __do_selection_changed(self, selection: List["_Item"], …) invoke self.__on_selection_changed(item) (unwrapping any list before firing) .

Since the subscriber always receives a single _Item, there’s no risk of getting a list or title strings – your handler can safely assume it will be passed an Item object. You can disregard the suggestion to wrap the callback.

Likely an incorrect or invalid review comment.

@po-trottier
Copy link
Collaborator

tests-lightspeed.trex.control.stagecraft.bat and tests-lightspeed.trex.properties_pane.shared.asset_replacements.widget.bat are currently failing.

You can execute tests by executing the batch files in _build\windows-x86_64\release\...

See this documentation for flags you can use to help debug the tests:
https://docs.omniverse.nvidia.com/kit/docs/kit-manual/106.5.0/guide/testing_exts_python.html#developing-tests

As well as this dev documentation:
https://github.com/NVIDIAGameWorks/toolkit-remix/blob/main/docs_dev/DEBUGGING_GUIDE.md#debugging-tests-and-startup-logic

When all the tests pass, make sure to format, lint, squash and rebase!

@Simon-Lajoie Simon-Lajoie force-pushed the feature/vertical_modding_tabs branch from f1d4aa4 to d4cdd10 Compare August 28, 2025 05:49
Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 3

♻️ Duplicate comments (6)
source/extensions/lightspeed.trex.layout.stagecraft/docs/CHANGELOG.md (1)

4-7: Normalize changelog header (date + heading level) and fix capitalization.

Follow Keep a Changelog: add release date, demote “Changed” to H3, and capitalize “Ingestion” for consistency.

-## [2.5.3]
-## Changed
-- Changed modding tabs to vertical layout consistent with ingestion and AI Tools tabs
+## [2.5.3] - 2025-08-25
+### Changed
+- Changed modding tabs to vertical layout consistent with Ingestion and AI Tools tabs
#!/bin/bash
# Verify extension manifest version matches 2.5.3
fd -a extension.toml | rg -n 'source/extensions/lightspeed\.trex\.layout\.stagecraft/config/extension\.toml' \
| while read -r p; do echo "File: $p"; rg -n '^\s*version\s*=\s*"2\.5\.3"\s*$' "$p" || echo "⚠️ version mismatch"; done
source/extensions/lightspeed.trex.properties_pane.shared.asset_replacements.widget/docs/CHANGELOG.md (1)

4-7: Add release date and confirm manifest version parity.

Stamp the release and ensure config/extension.toml also says 1.9.1.

-## [1.9.1]
+## [1.9.1] - 2025-08-25
 ### Changed
 - Adjusted spacing for the new vertical modding tabs
#!/bin/bash
# Locate the widget's manifest and check version
fd -a 'extension.toml' | rg -n 'source/extensions/lightspeed\.trex\.properties_pane\.shared\.asset_replacements\.widget/.*/extension\.toml' \
| while read -r p; do echo "File: $p"; rg -n '^\s*version\s*=\s*"1\.9\.1"\s*$' "$p" || echo "⚠️ version mismatch"; done
source/extensions/lightspeed.common/docs/CHANGELOG.md (1)

4-7: Date the entry and name the constant explicitly.

Clarifies what changed and aligns with prior entries.

-## [1.8.1]
+## [1.8.1] - 2025-08-25
 ### Added
-- Added constants for untitled project name
+- Added `UNTITLED_PROJECT_NAME` constant for the default untitled project label
#!/bin/bash
# Verify the constant exists
rg -nP '^\s*UNTITLED_PROJECT_NAME\s*=\s*["\']Untitled Project["\']' source/extensions/lightspeed.common/lightspeed/common/constants.py || echo "⚠️ Constant not found"
source/extensions/omni.flux.tabbed.widget/docs/CHANGELOG.md (1)

5-6: Add release date to 1.2.2 and keep “Changed” at level-3.

Align with Keep a Changelog and other modules.

-## [1.2.2]
+## [1.2.2] - 2025-08-25
 ### Changed
source/extensions/lightspeed.trex.properties_pane.shared.mod_setup.widget/docs/CHANGELOG.md (1)

4-6: Add release date to 1.7.2 and keep “Changed” at level-3.

Match formatting used elsewhere.

-## [1.7.2]
+## [1.7.2] - 2025-08-26
 ### Changed
source/extensions/lightspeed.trex.properties_pane.shared.mod_packaging.widget/docs/CHANGELOG.md (1)

4-6: Add release date to 1.2.2 and keep “Changed” at level-3.

Keep consistency with other CHANGELOGs.

-## [1.2.2]
+## [1.2.2] - 2025-08-25
 ### Changed
🧹 Nitpick comments (7)
source/extensions/omni.flux.tabbed.widget/docs/CHANGELOG.md (2)

9-11: Grammar: “too large” (not “to large”).

Fix phrasing in 1.2.1 entry.

- - Fixed Test assets to large to work without LFS
+ - Fixed test assets too large to work without LFS

13-16: Typo: “compatbility” → “compatibility”.

Correct in 1.2.0 entry.

- - Update the documentation for Pydantic V2 compatbility
+ - Update the documentation for Pydantic V2 compatibility
source/extensions/lightspeed.trex.properties_pane.shared.mod_setup.widget/docs/CHANGELOG.md (2)

8-11: Grammar: “too large” (not “to large”).

Adjust in 1.7.1 entry.

- - Fixed Test assets to large to work without LFS
+ - Fixed test assets too large to work without LFS

13-15: Typo: “compatbility” → “compatibility”.

Fix in 1.7.0 entry.

- - Update the documentation for Pydantic V2 compatbility
+ - Update the documentation for Pydantic V2 compatibility
source/extensions/lightspeed.trex.properties_pane.shared.mod_packaging.widget/docs/CHANGELOG.md (2)

8-11: Grammar: “too large” (not “to large”).

Fix 1.2.1 entry.

- - Fixed Test assets to large to work without LFS
+ - Fixed test assets too large to work without LFS

13-15: Typo: “compatbility” → “compatibility”.

Correct 1.2.0 entry.

- - Update the documentation for Pydantic V2 compatbility
+ - Update the documentation for Pydantic V2 compatibility
source/extensions/omni.flux.tabbed.widget/omni/flux/tabbed/widget/setup_ui.py (1)

58-59: Docstring: note the default value.

Clarify default behavior.

-            add_initial_spacer: Add a spacer at the beginning of the tab list
+            add_initial_spacer: Add a spacer at the beginning of the tab list (default: True)
📜 Review details

Configuration used: Path: .coderabbit.yml

Review profile: CHILL

Plan: Pro

💡 Knowledge Base configuration:

  • MCP integration is disabled by default for public repositories
  • Jira integration is disabled by default for public repositories
  • Linear integration is disabled by default for public repositories

You can enable these sources in your CodeRabbit configuration.

📥 Commits

Reviewing files that changed from the base of the PR and between f1d4aa4 and d4cdd10.

⛔ Files ignored due to path filters (3)
  • source/extensions/lightspeed.trex.components_pane.stagecraft.controller/data/icon.png is excluded by !**/*.png
  • source/extensions/lightspeed.trex.components_pane.stagecraft.controller/data/preview.png is excluded by !**/*.png
  • source/extensions/lightspeed.trex.components_pane.stagecraft.controller/premake5.lua is excluded by !source/extensions/**/premake5.lua
📒 Files selected for processing (33)
  • CHANGELOG.md (2 hunks)
  • docs/howto/learning-toolkit.md (1 hunks)
  • source/apps/exts.deps.generated.kit (0 hunks)
  • source/extensions/lightspeed.common/config/extension.toml (1 hunks)
  • source/extensions/lightspeed.common/docs/CHANGELOG.md (1 hunks)
  • source/extensions/lightspeed.common/lightspeed/common/constants.py (1 hunks)
  • source/extensions/lightspeed.trex.app.style/lightspeed/trex/app/style/trex_style.py (1 hunks)
  • source/extensions/lightspeed.trex.components_pane.stagecraft.controller/config/extension.toml (0 hunks)
  • source/extensions/lightspeed.trex.components_pane.stagecraft.controller/docs/CHANGELOG.md (0 hunks)
  • source/extensions/lightspeed.trex.components_pane.stagecraft.controller/docs/README.md (0 hunks)
  • source/extensions/lightspeed.trex.components_pane.stagecraft.controller/docs/index.rst (0 hunks)
  • source/extensions/lightspeed.trex.components_pane.stagecraft.controller/lightspeed/trex/components_pane/stagecraft/controller/__init__.py (0 hunks)
  • source/extensions/lightspeed.trex.components_pane.stagecraft.controller/lightspeed/trex/components_pane/stagecraft/controller/setup_ui.py (0 hunks)
  • source/extensions/lightspeed.trex.components_pane.stagecraft.models/config/extension.toml (1 hunks)
  • source/extensions/lightspeed.trex.components_pane.stagecraft.models/docs/CHANGELOG.md (1 hunks)
  • source/extensions/lightspeed.trex.components_pane.stagecraft.models/lightspeed/trex/components_pane/stagecraft/models/model_items.py (1 hunks)
  • source/extensions/lightspeed.trex.control.stagecraft/lightspeed/trex/control/stagecraft/tests/e2e/test_stage_manger.py (1 hunks)
  • source/extensions/lightspeed.trex.layout.stagecraft/config/extension.toml (2 hunks)
  • source/extensions/lightspeed.trex.layout.stagecraft/docs/CHANGELOG.md (1 hunks)
  • source/extensions/lightspeed.trex.layout.stagecraft/lightspeed/trex/layout/stagecraft/setup_ui.py (13 hunks)
  • source/extensions/lightspeed.trex.properties_pane.shared.asset_replacements.widget/config/extension.toml (1 hunks)
  • source/extensions/lightspeed.trex.properties_pane.shared.asset_replacements.widget/docs/CHANGELOG.md (1 hunks)
  • source/extensions/lightspeed.trex.properties_pane.shared.asset_replacements.widget/lightspeed/trex/properties_pane/shared/asset_replacements/widget/setup_ui.py (1 hunks)
  • source/extensions/lightspeed.trex.properties_pane.shared.mod_packaging.widget/config/extension.toml (1 hunks)
  • source/extensions/lightspeed.trex.properties_pane.shared.mod_packaging.widget/docs/CHANGELOG.md (1 hunks)
  • source/extensions/lightspeed.trex.properties_pane.shared.mod_packaging.widget/lightspeed/trex/properties_pane/shared/mod_packaging/widget/setup_ui.py (1 hunks)
  • source/extensions/lightspeed.trex.properties_pane.shared.mod_setup.widget/config/extension.toml (1 hunks)
  • source/extensions/lightspeed.trex.properties_pane.shared.mod_setup.widget/docs/CHANGELOG.md (1 hunks)
  • source/extensions/lightspeed.trex.properties_pane.shared.mod_setup.widget/lightspeed/trex/properties_pane/shared/mod_setup/widget/setup_ui.py (1 hunks)
  • source/extensions/lightspeed.trex.properties_pane.stagecraft.widget/config/extension.toml (0 hunks)
  • source/extensions/omni.flux.tabbed.widget/config/extension.toml (1 hunks)
  • source/extensions/omni.flux.tabbed.widget/docs/CHANGELOG.md (1 hunks)
  • source/extensions/omni.flux.tabbed.widget/omni/flux/tabbed/widget/setup_ui.py (4 hunks)
💤 Files with no reviewable changes (8)
  • source/extensions/lightspeed.trex.components_pane.stagecraft.controller/docs/README.md
  • source/extensions/lightspeed.trex.components_pane.stagecraft.controller/docs/index.rst
  • source/extensions/lightspeed.trex.components_pane.stagecraft.controller/docs/CHANGELOG.md
  • source/extensions/lightspeed.trex.components_pane.stagecraft.controller/lightspeed/trex/components_pane/stagecraft/controller/setup_ui.py
  • source/extensions/lightspeed.trex.components_pane.stagecraft.controller/lightspeed/trex/components_pane/stagecraft/controller/init.py
  • source/extensions/lightspeed.trex.properties_pane.stagecraft.widget/config/extension.toml
  • source/apps/exts.deps.generated.kit
  • source/extensions/lightspeed.trex.components_pane.stagecraft.controller/config/extension.toml
🚧 Files skipped from review as they are similar to previous changes (13)
  • source/extensions/lightspeed.trex.properties_pane.shared.mod_packaging.widget/config/extension.toml
  • source/extensions/lightspeed.trex.properties_pane.shared.mod_setup.widget/config/extension.toml
  • CHANGELOG.md
  • source/extensions/lightspeed.trex.properties_pane.shared.mod_setup.widget/lightspeed/trex/properties_pane/shared/mod_setup/widget/setup_ui.py
  • source/extensions/lightspeed.trex.components_pane.stagecraft.models/config/extension.toml
  • source/extensions/lightspeed.trex.properties_pane.shared.asset_replacements.widget/config/extension.toml
  • source/extensions/lightspeed.common/config/extension.toml
  • source/extensions/omni.flux.tabbed.widget/config/extension.toml
  • source/extensions/lightspeed.trex.components_pane.stagecraft.models/lightspeed/trex/components_pane/stagecraft/models/model_items.py
  • source/extensions/lightspeed.common/lightspeed/common/constants.py
  • source/extensions/lightspeed.trex.layout.stagecraft/config/extension.toml
  • source/extensions/lightspeed.trex.properties_pane.shared.mod_packaging.widget/lightspeed/trex/properties_pane/shared/mod_packaging/widget/setup_ui.py
  • source/extensions/lightspeed.trex.properties_pane.shared.asset_replacements.widget/lightspeed/trex/properties_pane/shared/asset_replacements/widget/setup_ui.py
🧰 Additional context used
🧬 Code graph analysis (2)
source/extensions/lightspeed.trex.control.stagecraft/lightspeed/trex/control/stagecraft/tests/e2e/test_stage_manger.py (1)
source/extensions/omni.flux.tabbed.widget/omni/flux/tabbed/widget/setup_ui.py (2)
  • selection (173-175)
  • selection (178-185)
source/extensions/lightspeed.trex.layout.stagecraft/lightspeed/trex/layout/stagecraft/setup_ui.py (2)
source/extensions/omni.flux.tabbed.widget/omni/flux/tabbed/widget/setup_ui.py (7)
  • SetupUI (34-328)
  • model (158-159)
  • selection (173-175)
  • selection (178-185)
  • add (141-155)
  • subscribe_selection_changed (96-101)
  • get_frame (125-135)
source/extensions/lightspeed.trex.menu.workfile/lightspeed/trex/menu/workfile/setup_ui.py (2)
  • SetupUI (60-254)
  • show_at (247-251)
🪛 LanguageTool
source/extensions/lightspeed.trex.properties_pane.shared.mod_packaging.widget/docs/CHANGELOG.md

[grammar] ~4-~4: There might be a mistake here.
Context: ...epachangelog.com/en/1.0.0/). ## [1.2.2] ### Changed - Adjusted spacing for the new v...

(QB_NEW_EN)


[grammar] ~5-~5: There might be a mistake here.
Context: ....com/en/1.0.0/). ## [1.2.2] ### Changed - Adjusted spacing for the new vertical mo...

(QB_NEW_EN)


[grammar] ~8-~8: There might be a mistake here.
Context: ...he new vertical modding tabs ## [1.2.1] ### Fixed - Fixed Test assets to large to wo...

(QB_NEW_EN)


[grammar] ~9-~9: There might be a mistake here.
Context: ...tical modding tabs ## [1.2.1] ### Fixed - Fixed Test assets to large to work witho...

(QB_NEW_EN)


[grammar] ~12-~12: There might be a mistake here.
Context: ...to large to work without LFS ## [1.2.0] ### Changed - Update the documentation for P...

(QB_NEW_EN)


[grammar] ~13-~13: There might be a mistake here.
Context: ...work without LFS ## [1.2.0] ### Changed - Update the documentation for Pydantic V2...

(QB_NEW_EN)

docs/howto/learning-toolkit.md

[grammar] ~11-~11: There might be a mistake here.
Context: ...ded capture layer, as the project wizard streamlines the remaining setup processe...

(QB_NEW_EN)

source/extensions/lightspeed.common/docs/CHANGELOG.md

[grammar] ~4-~4: There might be a mistake here.
Context: ...epachangelog.com/en/1.0.0/). ## [1.8.1] ### Added - Added constants for untitled pro...

(QB_NEW_EN)


[grammar] ~5-~5: There might be a mistake here.
Context: ...og.com/en/1.0.0/). ## [1.8.1] ### Added - Added constants for untitled project nam...

(QB_NEW_EN)

source/extensions/lightspeed.trex.components_pane.stagecraft.models/docs/CHANGELOG.md

[grammar] ~4-~4: There might be a mistake here.
Context: ...epachangelog.com/en/1.0.0/). ## [1.1.2] ### Changed - Renamed the modding tab from "...

(QB_NEW_EN)


[grammar] ~5-~5: There might be a mistake here.
Context: ....com/en/1.0.0/). ## [1.1.2] ### Changed - Renamed the modding tab from "Captures /...

(QB_NEW_EN)


[grammar] ~8-~8: There might be a mistake here.
Context: ... / Setup" to "Project Setup" ## [1.1.1] ### Fixed - Fixed Test assets to large to wo...

(QB_NEW_EN)


[grammar] ~9-~9: There might be a mistake here.
Context: ...to "Project Setup" ## [1.1.1] ### Fixed - Fixed Test assets to large to work witho...

(QB_NEW_EN)


[grammar] ~12-~12: There might be a mistake here.
Context: ...to large to work without LFS ## [1.1.0] ### Changed - Update the documentation for P...

(QB_NEW_EN)


[grammar] ~13-~13: There might be a mistake here.
Context: ...work without LFS ## [1.1.0] ### Changed - Update the documentation for Pydantic V2...

(QB_NEW_EN)

source/extensions/lightspeed.trex.layout.stagecraft/docs/CHANGELOG.md

[grammar] ~4-~4: There might be a mistake here.
Context: ...epachangelog.com/en/1.0.0/). ## [2.5.3] ## Changed - Changed modding tabs to vertic...

(QB_NEW_EN)


[grammar] ~5-~5: There might be a mistake here.
Context: ...g.com/en/1.0.0/). ## [2.5.3] ## Changed - Changed modding tabs to vertical layout ...

(QB_NEW_EN)

source/extensions/lightspeed.trex.properties_pane.shared.asset_replacements.widget/docs/CHANGELOG.md

[grammar] ~4-~4: There might be a mistake here.
Context: ...epachangelog.com/en/1.0.0/). ## [1.9.1] ### Changed - Adjusted spacing for the new v...

(QB_NEW_EN)


[grammar] ~5-~5: There might be a mistake here.
Context: ....com/en/1.0.0/). ## [1.9.1] ### Changed - Adjusted spacing for the new vertical mo...

(QB_NEW_EN)

source/extensions/lightspeed.trex.properties_pane.shared.mod_setup.widget/docs/CHANGELOG.md

[grammar] ~4-~4: There might be a mistake here.
Context: ...epachangelog.com/en/1.0.0/). ## [1.7.2] ### Changed - Adjusted spacing for the new v...

(QB_NEW_EN)


[grammar] ~5-~5: There might be a mistake here.
Context: ....com/en/1.0.0/). ## [1.7.2] ### Changed - Adjusted spacing for the new vertical mo...

(QB_NEW_EN)


[grammar] ~8-~8: There might be a mistake here.
Context: ...he new vertical modding tabs ## [1.7.1] ### Fixed - Fixed Test assets to large to wo...

(QB_NEW_EN)


[grammar] ~9-~9: There might be a mistake here.
Context: ...tical modding tabs ## [1.7.1] ### Fixed - Fixed Test assets to large to work witho...

(QB_NEW_EN)


[grammar] ~12-~12: There might be a mistake here.
Context: ...to large to work without LFS ## [1.7.0] ### Changed - Update the documentation for P...

(QB_NEW_EN)


[grammar] ~13-~13: There might be a mistake here.
Context: ...work without LFS ## [1.7.0] ### Changed - Update the documentation for Pydantic V2...

(QB_NEW_EN)


[grammar] ~14-~14: Ensure spelling is correct
Context: ...pdate the documentation for Pydantic V2 compatbility ## [1.6.4] ### Changed - Updated test to us...

(QB_NEW_EN_ORTHOGRAPHY_ERROR_IDS_1)


[grammar] ~16-~16: There might be a mistake here.
Context: ...for Pydantic V2 compatbility ## [1.6.4] ### Changed - Updated test to use deps ins...

(QB_NEW_EN)


[grammar] ~17-~17: There might be a mistake here.
Context: ... V2 compatbility ## [1.6.4] ### Changed - Updated test to use deps instead of `....

(QB_NEW_EN)


[grammar] ~20-~20: There might be a mistake here.
Context: ...depsinstead of.deps` dir ## [1.6.3] ### Changed - Use left-aligned properties wi...

(QB_NEW_EN)


[grammar] ~21-~21: There might be a mistake here.
Context: ...d of .deps dir ## [1.6.3] ### Changed - Use left-aligned properties widget - Cha...

(QB_NEW_EN)


[grammar] ~25-~25: There might be a mistake here.
Context: ...layout to be more consistent ## [1.6.2] ### Changed - Update to Kit 106.5 ## [1.6.1...

(QB_NEW_EN)


[grammar] ~26-~26: There might be a mistake here.
Context: ... more consistent ## [1.6.2] ### Changed - Update to Kit 106.5 ## [1.6.1] ### Chan...

(QB_NEW_EN)


[grammar] ~29-~29: There might be a mistake here.
Context: ...hanged - Update to Kit 106.5 ## [1.6.1] ### Changed - Updated the look of the "Loadi...

(QB_NEW_EN)


[grammar] ~30-~30: There might be a mistake here.
Context: ...ate to Kit 106.5 ## [1.6.1] ### Changed - Updated the look of the "Loading..." pan...

(QB_NEW_EN)


[grammar] ~33-~33: There might be a mistake here.
Context: ...ok of the "Loading..." panel ## [1.6.0] ### Removed - removed "Open Wizard" button f...

(QB_NEW_EN)


[grammar] ~37-~37: There might be a mistake here.
Context: ..." button from property panel ## [1.5.7] ### Changed - Improved Mod File button label...

(QB_NEW_EN)


[grammar] ~38-~38: There might be a mistake here.
Context: ...m property panel ## [1.5.7] ### Changed - Improved Mod File button labels ## [1.5...

(QB_NEW_EN)

source/extensions/omni.flux.tabbed.widget/docs/CHANGELOG.md

[grammar] ~5-~5: There might be a mistake here.
Context: ...epachangelog.com/en/1.0.0/). ## [1.2.2] ### Changed - Adjusted spacing for the new v...

(QB_NEW_EN)


[grammar] ~6-~6: There might be a mistake here.
Context: ....com/en/1.0.0/). ## [1.2.2] ### Changed - Adjusted spacing for the new vertical mo...

(QB_NEW_EN)


[grammar] ~9-~9: There might be a mistake here.
Context: ...he new vertical modding tabs ## [1.2.1] ### Fixed - Fixed Test assets to large to wo...

(QB_NEW_EN)


[grammar] ~10-~10: There might be a mistake here.
Context: ...tical modding tabs ## [1.2.1] ### Fixed - Fixed Test assets to large to work witho...

(QB_NEW_EN)


[grammar] ~13-~13: There might be a mistake here.
Context: ...to large to work without LFS ## [1.2.0] ### Changed - Update the documentation for P...

(QB_NEW_EN)


[grammar] ~14-~14: There might be a mistake here.
Context: ...work without LFS ## [1.2.0] ### Changed - Update the documentation for Pydantic V2...

(QB_NEW_EN)


[grammar] ~15-~15: Ensure spelling is correct
Context: ...pdate the documentation for Pydantic V2 compatbility ## [1.1.6] ### Changed - update to use omni...

(QB_NEW_EN_ORTHOGRAPHY_ERROR_IDS_1)

🪛 Ruff (0.12.2)
source/extensions/lightspeed.trex.layout.stagecraft/lightspeed/trex/layout/stagecraft/setup_ui.py

448-449: Use a single with statement with multiple contexts instead of nested with statements

(SIM117)


459-465: Use a single with statement with multiple contexts instead of nested with statements

(SIM117)


477-478: Use a single with statement with multiple contexts instead of nested with statements

(SIM117)


561-562: Use a single with statement with multiple contexts instead of nested with statements

(SIM117)

🔇 Additional comments (6)
source/extensions/lightspeed.trex.components_pane.stagecraft.models/docs/CHANGELOG.md (1)

4-6: Changelog entry looks good and consistent with the rename.
Matches existing sections and Keep a Changelog headings.

docs/howto/learning-toolkit.md (1)

11-12: Use “steps” instead of “processes” for clarity

-The `Project Setup` tab is primarily used to manage the currently loaded capture layer, as the project wizard
-streamlines the remaining setup processes.
+The `Project Setup` tab is primarily used to manage the currently loaded capture layer, as the project wizard
+streamlines the remaining setup steps.
source/extensions/lightspeed.trex.app.style/lightspeed/trex/app/style/trex_style.py (1)

709-712: Label::TopBarTitle styles usage confirmed
Referenced in setup_ui.py, so no dead styles.

source/extensions/omni.flux.tabbed.widget/omni/flux/tabbed/widget/setup_ui.py (1)

45-46: Non-breaking spacer control is a good addition.

The add_initial_spacer flag plus docstring and conditional render look solid.

Also applies to: 58-59, 79-79, 245-246

source/extensions/lightspeed.trex.layout.stagecraft/lightspeed/trex/layout/stagecraft/setup_ui.py (2)

752-764: LGTM! Updated splitter constraints

The property viewport splitter change handler correctly incorporates the new WIDTH_TOP_BAR constant in its calculations and properly manages the property panel frame sizing.


765-767: LGTM! Clean tab selection handler

The _on_tab_selection_changed method properly delegates to the properties pane to show the correct panel based on the selected tab.

@Simon-Lajoie Simon-Lajoie force-pushed the feature/vertical_modding_tabs branch from d4cdd10 to ff75395 Compare August 28, 2025 06:12
Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 3

♻️ Duplicate comments (7)
source/extensions/lightspeed.trex.properties_pane.shared.asset_replacements.widget/docs/CHANGELOG.md (1)

4-7: Add release date and verify manifest version parity (1.11.0).

Keep-a-Changelog releases should include a date; also ensure extension.toml is bumped to the same version.

Apply:

-## [1.11.0]
+## [1.11.0] - 2025-08-28

Then verify the manifest version:

#!/bin/bash
# Check that the widget's extension.toml matches 1.11.0
fd -a 'lightspeed.trex.properties_pane.shared.asset_replacements.widget' \
  | rg -n '/config/extension\.toml$' \
  | while read -r p; do
      echo "File: $p"
      rg -n '^\s*version\s*=\s*"1\.11\.0"\s*$' "$p" || { echo "Version mismatch in $p"; exit 1; }
    done
source/extensions/lightspeed.trex.layout.stagecraft/docs/CHANGELOG.md (1)

4-6: Changelog: add release date and correct heading level

Follow Keep a Changelog and prior guidance; include the release date and use a third-level section header.

-## [2.5.3]
-## Changed
+## [2.5.3] - 2025-08-25
+### Changed
 - Changed modding tabs to vertical layout consistent with ingestion and AI Tools tabs
source/extensions/lightspeed.common/docs/CHANGELOG.md (1)

4-6: Changelog: date the release and name the constant

Add the date and reference the actual symbol added.

-## [1.8.1]
+## [1.8.1] - 2025-08-25
 ### Added
-- Added constants for untitled project name
+- Added `UNTITLED_PROJECT_NAME` constant for the default untitled project label
source/extensions/omni.flux.tabbed.widget/docs/CHANGELOG.md (1)

5-7: Changelog: add release date

Include the release date on the 1.2.2 header.

-## [1.2.2]
+## [1.2.2] - 2025-08-25
 ### Changed
 - Adjusted spacing for the new vertical modding tabs
source/extensions/lightspeed.trex.components_pane.stagecraft.models/docs/CHANGELOG.md (2)

10-10: Fix grammar: “Test … to large” → “test … too large”

Mirror the same correction here.

-- Fixed Test assets to large to work without LFS
+- Fixed test assets too large to work without LFS

14-14: Fix typo: “compatbility”

Correct spelling.

-- Update the documentation for Pydantic V2 compatbility
+- Update the documentation for Pydantic V2 compatibility
source/extensions/lightspeed.trex.layout.stagecraft/lightspeed/trex/layout/stagecraft/setup_ui.py (1)

724-730: Fix: unwrap ui.Lengths to numeric before calling show_at.

Menu.show_at(x, y) expects numbers; screen_position_x/y and computed_height are ui.Length. Unwrap .value.

-            x_position = self._menu_burger_widget.screen_position_x
-            y_position = self._menu_burger_widget.screen_position_y + self._menu_burger_widget.computed_height + 8.0
-            burger_menu.show_at(x_position, y_position)
+            x_pos = float(self._menu_burger_widget.screen_position_x.value)
+            y_pos = float(
+                self._menu_burger_widget.screen_position_y.value
+                + self._menu_burger_widget.computed_height.value
+                + 8.0
+            )
+            burger_menu.show_at(x_pos, y_pos)
🧹 Nitpick comments (8)
source/extensions/lightspeed.trex.properties_pane.shared.asset_replacements.widget/docs/CHANGELOG.md (1)

4-7: Scope the change note for clarity.

Specify the affected widget to aid changelog scanning.

- - Adjusted spacing for the new vertical modding tabs
+ - Asset Replacements widget: adjusted spacing for the new vertical modding tabs
source/extensions/lightspeed.trex.properties_pane.shared.mod_packaging.widget/docs/CHANGELOG.md (2)

4-6: Add release date to 1.2.2 heading (Keep a Changelog).

Include the release date to match project convention.

-## [1.2.2]
+## [1.2.2] - 2025-08-25

13-14: Fix typo in 1.2.0 entry.

“compatbility” → “compatibility”.

-### Changed
-- Update the documentation for Pydantic V2 compatbility
+### Changed
+- Update the documentation for Pydantic V2 compatibility
source/extensions/lightspeed.trex.properties_pane.shared.mod_setup.widget/docs/CHANGELOG.md (2)

4-6: Add release date to 1.7.2 heading (Keep a Changelog).

Date the release for consistency.

-## [1.7.2]
+## [1.7.2] - 2025-08-26

13-14: Fix typo in 1.7.0 entry.

“compatbility” → “compatibility”.

-### Changed
-- Update the documentation for Pydantic V2 compatbility
+### Changed
+- Update the documentation for Pydantic V2 compatibility
source/extensions/lightspeed.trex.layout.stagecraft/lightspeed/trex/layout/stagecraft/setup_ui.py (3)

80-82: Consider renaming WIDTH_TOP_BAR to reflect sidebar use.

It controls the vertical tabs column width, not the top bar. E.g., WIDTH_TABS_COLUMN for clarity.


628-646: Avoid directly toggling item.selected; rely on the selection API.

Manually setting sel.selected = True risks diverging from Tree state. Use only self._tabbed_frame.selection = [sel.title].

         if not self._tabbed_frame.selection:
             # No selection, select the first tab
             sel = children[0]
-            self._tabbed_frame.selection = [sel.title]
-            sel.selected = True
+            self._tabbed_frame.selection = [sel.title]
         else:
             # Find the item object matching the selected title
             selected_title = self._tabbed_frame.selection[0]
             sel = next((item for item in children if item.title == selected_title), None)
-            if sel:
-                sel.selected = True
-            else:
+            if not sel:
                 # Selection not found, fallback to first
                 sel = children[0]
-                self._tabbed_frame.selection = [sel.title]
-                sel.selected = True
+                self._tabbed_frame.selection = [sel.title]

448-449: Optional: collapse nested context managers (Ruff SIM117).

Combine adjacent with blocks to reduce indentation and noise.

Also applies to: 459-465, 477-478, 561-562

📜 Review details

Configuration used: Path: .coderabbit.yml

Review profile: CHILL

Plan: Pro

💡 Knowledge Base configuration:

  • MCP integration is disabled by default for public repositories
  • Jira integration is disabled by default for public repositories
  • Linear integration is disabled by default for public repositories

You can enable these sources in your CodeRabbit configuration.

📥 Commits

Reviewing files that changed from the base of the PR and between d4cdd10 and ff75395.

⛔ Files ignored due to path filters (3)
  • source/extensions/lightspeed.trex.components_pane.stagecraft.controller/data/icon.png is excluded by !**/*.png
  • source/extensions/lightspeed.trex.components_pane.stagecraft.controller/data/preview.png is excluded by !**/*.png
  • source/extensions/lightspeed.trex.components_pane.stagecraft.controller/premake5.lua is excluded by !source/extensions/**/premake5.lua
📒 Files selected for processing (33)
  • CHANGELOG.md (2 hunks)
  • docs/howto/learning-toolkit.md (1 hunks)
  • source/apps/exts.deps.generated.kit (0 hunks)
  • source/extensions/lightspeed.common/config/extension.toml (1 hunks)
  • source/extensions/lightspeed.common/docs/CHANGELOG.md (1 hunks)
  • source/extensions/lightspeed.common/lightspeed/common/constants.py (1 hunks)
  • source/extensions/lightspeed.trex.app.style/lightspeed/trex/app/style/trex_style.py (1 hunks)
  • source/extensions/lightspeed.trex.components_pane.stagecraft.controller/config/extension.toml (0 hunks)
  • source/extensions/lightspeed.trex.components_pane.stagecraft.controller/docs/CHANGELOG.md (0 hunks)
  • source/extensions/lightspeed.trex.components_pane.stagecraft.controller/docs/README.md (0 hunks)
  • source/extensions/lightspeed.trex.components_pane.stagecraft.controller/docs/index.rst (0 hunks)
  • source/extensions/lightspeed.trex.components_pane.stagecraft.controller/lightspeed/trex/components_pane/stagecraft/controller/__init__.py (0 hunks)
  • source/extensions/lightspeed.trex.components_pane.stagecraft.controller/lightspeed/trex/components_pane/stagecraft/controller/setup_ui.py (0 hunks)
  • source/extensions/lightspeed.trex.components_pane.stagecraft.models/config/extension.toml (1 hunks)
  • source/extensions/lightspeed.trex.components_pane.stagecraft.models/docs/CHANGELOG.md (1 hunks)
  • source/extensions/lightspeed.trex.components_pane.stagecraft.models/lightspeed/trex/components_pane/stagecraft/models/model_items.py (1 hunks)
  • source/extensions/lightspeed.trex.control.stagecraft/lightspeed/trex/control/stagecraft/tests/e2e/test_stage_manger.py (1 hunks)
  • source/extensions/lightspeed.trex.layout.stagecraft/config/extension.toml (2 hunks)
  • source/extensions/lightspeed.trex.layout.stagecraft/docs/CHANGELOG.md (1 hunks)
  • source/extensions/lightspeed.trex.layout.stagecraft/lightspeed/trex/layout/stagecraft/setup_ui.py (13 hunks)
  • source/extensions/lightspeed.trex.properties_pane.shared.asset_replacements.widget/config/extension.toml (1 hunks)
  • source/extensions/lightspeed.trex.properties_pane.shared.asset_replacements.widget/docs/CHANGELOG.md (1 hunks)
  • source/extensions/lightspeed.trex.properties_pane.shared.asset_replacements.widget/lightspeed/trex/properties_pane/shared/asset_replacements/widget/setup_ui.py (1 hunks)
  • source/extensions/lightspeed.trex.properties_pane.shared.mod_packaging.widget/config/extension.toml (1 hunks)
  • source/extensions/lightspeed.trex.properties_pane.shared.mod_packaging.widget/docs/CHANGELOG.md (1 hunks)
  • source/extensions/lightspeed.trex.properties_pane.shared.mod_packaging.widget/lightspeed/trex/properties_pane/shared/mod_packaging/widget/setup_ui.py (1 hunks)
  • source/extensions/lightspeed.trex.properties_pane.shared.mod_setup.widget/config/extension.toml (1 hunks)
  • source/extensions/lightspeed.trex.properties_pane.shared.mod_setup.widget/docs/CHANGELOG.md (1 hunks)
  • source/extensions/lightspeed.trex.properties_pane.shared.mod_setup.widget/lightspeed/trex/properties_pane/shared/mod_setup/widget/setup_ui.py (1 hunks)
  • source/extensions/lightspeed.trex.properties_pane.stagecraft.widget/config/extension.toml (0 hunks)
  • source/extensions/omni.flux.tabbed.widget/config/extension.toml (1 hunks)
  • source/extensions/omni.flux.tabbed.widget/docs/CHANGELOG.md (1 hunks)
  • source/extensions/omni.flux.tabbed.widget/omni/flux/tabbed/widget/setup_ui.py (4 hunks)
💤 Files with no reviewable changes (8)
  • source/apps/exts.deps.generated.kit
  • source/extensions/lightspeed.trex.components_pane.stagecraft.controller/lightspeed/trex/components_pane/stagecraft/controller/setup_ui.py
  • source/extensions/lightspeed.trex.components_pane.stagecraft.controller/lightspeed/trex/components_pane/stagecraft/controller/init.py
  • source/extensions/lightspeed.trex.components_pane.stagecraft.controller/docs/README.md
  • source/extensions/lightspeed.trex.components_pane.stagecraft.controller/docs/index.rst
  • source/extensions/lightspeed.trex.properties_pane.stagecraft.widget/config/extension.toml
  • source/extensions/lightspeed.trex.components_pane.stagecraft.controller/config/extension.toml
  • source/extensions/lightspeed.trex.components_pane.stagecraft.controller/docs/CHANGELOG.md
✅ Files skipped from review due to trivial changes (1)
  • source/extensions/lightspeed.trex.components_pane.stagecraft.models/config/extension.toml
🚧 Files skipped from review as they are similar to previous changes (14)
  • source/extensions/omni.flux.tabbed.widget/config/extension.toml
  • source/extensions/lightspeed.trex.layout.stagecraft/config/extension.toml
  • source/extensions/lightspeed.trex.properties_pane.shared.mod_packaging.widget/config/extension.toml
  • source/extensions/lightspeed.trex.properties_pane.shared.asset_replacements.widget/config/extension.toml
  • source/extensions/lightspeed.trex.app.style/lightspeed/trex/app/style/trex_style.py
  • source/extensions/lightspeed.common/lightspeed/common/constants.py
  • source/extensions/lightspeed.trex.properties_pane.shared.mod_setup.widget/config/extension.toml
  • source/extensions/lightspeed.common/config/extension.toml
  • source/extensions/lightspeed.trex.properties_pane.shared.mod_setup.widget/lightspeed/trex/properties_pane/shared/mod_setup/widget/setup_ui.py
  • source/extensions/lightspeed.trex.components_pane.stagecraft.models/lightspeed/trex/components_pane/stagecraft/models/model_items.py
  • CHANGELOG.md
  • source/extensions/lightspeed.trex.properties_pane.shared.mod_packaging.widget/lightspeed/trex/properties_pane/shared/mod_packaging/widget/setup_ui.py
  • source/extensions/lightspeed.trex.properties_pane.shared.asset_replacements.widget/lightspeed/trex/properties_pane/shared/asset_replacements/widget/setup_ui.py
  • source/extensions/lightspeed.trex.control.stagecraft/lightspeed/trex/control/stagecraft/tests/e2e/test_stage_manger.py
🧰 Additional context used
🧬 Code graph analysis (1)
source/extensions/lightspeed.trex.layout.stagecraft/lightspeed/trex/layout/stagecraft/setup_ui.py (3)
source/extensions/omni.flux.tabbed.widget/omni/flux/tabbed/widget/setup_ui.py (7)
  • SetupUI (34-328)
  • model (158-159)
  • selection (173-175)
  • selection (178-185)
  • add (141-155)
  • subscribe_selection_changed (96-101)
  • get_frame (125-135)
source/extensions/lightspeed.trex.menu.workfile/lightspeed/trex/menu/workfile/setup_ui.py (2)
  • SetupUI (60-254)
  • show_at (247-251)
source/extensions/lightspeed.trex.properties_pane.stagecraft.widget/lightspeed/trex/properties_pane/stagecraft/widget/setup_ui.py (3)
  • SetupUI (28-64)
  • show_panel (53-59)
  • get_frame (40-44)
🪛 Ruff (0.12.2)
source/extensions/lightspeed.trex.layout.stagecraft/lightspeed/trex/layout/stagecraft/setup_ui.py

448-449: Use a single with statement with multiple contexts instead of nested with statements

(SIM117)


459-465: Use a single with statement with multiple contexts instead of nested with statements

(SIM117)


477-478: Use a single with statement with multiple contexts instead of nested with statements

(SIM117)


561-562: Use a single with statement with multiple contexts instead of nested with statements

(SIM117)

🪛 LanguageTool
docs/howto/learning-toolkit.md

[grammar] ~11-~11: There might be a mistake here.
Context: ...ded capture layer, as the project wizard streamlines the remaining setup processe...

(QB_NEW_EN)

source/extensions/lightspeed.common/docs/CHANGELOG.md

[grammar] ~4-~4: There might be a mistake here.
Context: ...epachangelog.com/en/1.0.0/). ## [1.8.1] ### Added - Added constants for untitled pro...

(QB_NEW_EN)


[grammar] ~5-~5: There might be a mistake here.
Context: ...og.com/en/1.0.0/). ## [1.8.1] ### Added - Added constants for untitled project nam...

(QB_NEW_EN)

source/extensions/lightspeed.trex.components_pane.stagecraft.models/docs/CHANGELOG.md

[grammar] ~4-~4: There might be a mistake here.
Context: ...epachangelog.com/en/1.0.0/). ## [1.1.2] ### Changed - Renamed the modding tab from "...

(QB_NEW_EN)


[grammar] ~5-~5: There might be a mistake here.
Context: ....com/en/1.0.0/). ## [1.1.2] ### Changed - Renamed the modding tab from "Captures /...

(QB_NEW_EN)


[grammar] ~8-~8: There might be a mistake here.
Context: ... / Setup" to "Project Setup" ## [1.1.1] ### Fixed - Fixed Test assets to large to wo...

(QB_NEW_EN)


[grammar] ~9-~9: There might be a mistake here.
Context: ...to "Project Setup" ## [1.1.1] ### Fixed - Fixed Test assets to large to work witho...

(QB_NEW_EN)


[grammar] ~12-~12: There might be a mistake here.
Context: ...to large to work without LFS ## [1.1.0] ### Changed - Update the documentation for P...

(QB_NEW_EN)


[grammar] ~13-~13: There might be a mistake here.
Context: ...work without LFS ## [1.1.0] ### Changed - Update the documentation for Pydantic V2...

(QB_NEW_EN)

source/extensions/lightspeed.trex.layout.stagecraft/docs/CHANGELOG.md

[grammar] ~4-~4: There might be a mistake here.
Context: ...epachangelog.com/en/1.0.0/). ## [2.5.3] ## Changed - Changed modding tabs to vertic...

(QB_NEW_EN)


[grammar] ~5-~5: There might be a mistake here.
Context: ...g.com/en/1.0.0/). ## [2.5.3] ## Changed - Changed modding tabs to vertical layout ...

(QB_NEW_EN)

source/extensions/lightspeed.trex.properties_pane.shared.asset_replacements.widget/docs/CHANGELOG.md

[grammar] ~4-~4: There might be a mistake here.
Context: ...pachangelog.com/en/1.0.0/). ## [1.11.0] ### Changed - Adjusted spacing for the new v...

(QB_NEW_EN)


[grammar] ~5-~5: There might be a mistake here.
Context: ...com/en/1.0.0/). ## [1.11.0] ### Changed - Adjusted spacing for the new vertical mo...

(QB_NEW_EN)

source/extensions/lightspeed.trex.properties_pane.shared.mod_packaging.widget/docs/CHANGELOG.md

[grammar] ~4-~4: There might be a mistake here.
Context: ...epachangelog.com/en/1.0.0/). ## [1.2.2] ### Changed - Adjusted spacing for the new v...

(QB_NEW_EN)


[grammar] ~5-~5: There might be a mistake here.
Context: ....com/en/1.0.0/). ## [1.2.2] ### Changed - Adjusted spacing for the new vertical mo...

(QB_NEW_EN)


[grammar] ~8-~8: There might be a mistake here.
Context: ...he new vertical modding tabs ## [1.2.1] ### Fixed - Fixed Test assets to large to wo...

(QB_NEW_EN)


[grammar] ~9-~9: There might be a mistake here.
Context: ...tical modding tabs ## [1.2.1] ### Fixed - Fixed Test assets to large to work witho...

(QB_NEW_EN)


[grammar] ~12-~12: There might be a mistake here.
Context: ...to large to work without LFS ## [1.2.0] ### Changed - Update the documentation for P...

(QB_NEW_EN)


[grammar] ~13-~13: There might be a mistake here.
Context: ...work without LFS ## [1.2.0] ### Changed - Update the documentation for Pydantic V2...

(QB_NEW_EN)

source/extensions/lightspeed.trex.properties_pane.shared.mod_setup.widget/docs/CHANGELOG.md

[grammar] ~4-~4: There might be a mistake here.
Context: ...epachangelog.com/en/1.0.0/). ## [1.7.2] ### Changed - Adjusted spacing for the new v...

(QB_NEW_EN)


[grammar] ~5-~5: There might be a mistake here.
Context: ....com/en/1.0.0/). ## [1.7.2] ### Changed - Adjusted spacing for the new vertical mo...

(QB_NEW_EN)


[grammar] ~8-~8: There might be a mistake here.
Context: ...he new vertical modding tabs ## [1.7.1] ### Fixed - Fixed Test assets to large to wo...

(QB_NEW_EN)


[grammar] ~9-~9: There might be a mistake here.
Context: ...tical modding tabs ## [1.7.1] ### Fixed - Fixed Test assets to large to work witho...

(QB_NEW_EN)


[grammar] ~12-~12: There might be a mistake here.
Context: ...to large to work without LFS ## [1.7.0] ### Changed - Update the documentation for P...

(QB_NEW_EN)


[grammar] ~13-~13: There might be a mistake here.
Context: ...work without LFS ## [1.7.0] ### Changed - Update the documentation for Pydantic V2...

(QB_NEW_EN)


[grammar] ~14-~14: Ensure spelling is correct
Context: ...pdate the documentation for Pydantic V2 compatbility ## [1.6.4] ### Changed - Updated test to us...

(QB_NEW_EN_ORTHOGRAPHY_ERROR_IDS_1)


[grammar] ~16-~16: There might be a mistake here.
Context: ...for Pydantic V2 compatbility ## [1.6.4] ### Changed - Updated test to use deps ins...

(QB_NEW_EN)


[grammar] ~17-~17: There might be a mistake here.
Context: ... V2 compatbility ## [1.6.4] ### Changed - Updated test to use deps instead of `....

(QB_NEW_EN)


[grammar] ~20-~20: There might be a mistake here.
Context: ...depsinstead of.deps` dir ## [1.6.3] ### Changed - Use left-aligned properties wi...

(QB_NEW_EN)


[grammar] ~21-~21: There might be a mistake here.
Context: ...d of .deps dir ## [1.6.3] ### Changed - Use left-aligned properties widget - Cha...

(QB_NEW_EN)


[grammar] ~25-~25: There might be a mistake here.
Context: ...layout to be more consistent ## [1.6.2] ### Changed - Update to Kit 106.5 ## [1.6.1...

(QB_NEW_EN)


[grammar] ~26-~26: There might be a mistake here.
Context: ... more consistent ## [1.6.2] ### Changed - Update to Kit 106.5 ## [1.6.1] ### Chan...

(QB_NEW_EN)


[grammar] ~29-~29: There might be a mistake here.
Context: ...hanged - Update to Kit 106.5 ## [1.6.1] ### Changed - Updated the look of the "Loadi...

(QB_NEW_EN)


[grammar] ~30-~30: There might be a mistake here.
Context: ...ate to Kit 106.5 ## [1.6.1] ### Changed - Updated the look of the "Loading..." pan...

(QB_NEW_EN)


[grammar] ~33-~33: There might be a mistake here.
Context: ...ok of the "Loading..." panel ## [1.6.0] ### Removed - removed "Open Wizard" button f...

(QB_NEW_EN)


[grammar] ~37-~37: There might be a mistake here.
Context: ..." button from property panel ## [1.5.7] ### Changed - Improved Mod File button label...

(QB_NEW_EN)


[grammar] ~38-~38: There might be a mistake here.
Context: ...m property panel ## [1.5.7] ### Changed - Improved Mod File button labels ## [1.5...

(QB_NEW_EN)

source/extensions/omni.flux.tabbed.widget/docs/CHANGELOG.md

[grammar] ~5-~5: There might be a mistake here.
Context: ...epachangelog.com/en/1.0.0/). ## [1.2.2] ### Changed - Adjusted spacing for the new v...

(QB_NEW_EN)


[grammar] ~6-~6: There might be a mistake here.
Context: ....com/en/1.0.0/). ## [1.2.2] ### Changed - Adjusted spacing for the new vertical mo...

(QB_NEW_EN)


[grammar] ~9-~9: There might be a mistake here.
Context: ...he new vertical modding tabs ## [1.2.1] ### Fixed - Fixed Test assets to large to wo...

(QB_NEW_EN)


[grammar] ~10-~10: There might be a mistake here.
Context: ...tical modding tabs ## [1.2.1] ### Fixed - Fixed Test assets to large to work witho...

(QB_NEW_EN)


[grammar] ~13-~13: There might be a mistake here.
Context: ...to large to work without LFS ## [1.2.0] ### Changed - Update the documentation for P...

(QB_NEW_EN)


[grammar] ~14-~14: There might be a mistake here.
Context: ...work without LFS ## [1.2.0] ### Changed - Update the documentation for Pydantic V2...

(QB_NEW_EN)


[grammar] ~15-~15: Ensure spelling is correct
Context: ...pdate the documentation for Pydantic V2 compatbility ## [1.1.6] ### Changed - update to use omni...

(QB_NEW_EN_ORTHOGRAPHY_ERROR_IDS_1)

🔇 Additional comments (9)
docs/howto/learning-toolkit.md (1)

11-11: Rename applied correctly

“Project Setup” label looks consistent with the new tab name.

source/extensions/lightspeed.trex.components_pane.stagecraft.models/docs/CHANGELOG.md (1)

4-7: LGTM on tab rename entry

Change log reflects the “Captures / Setup” → “Project Setup” rename.

source/extensions/lightspeed.trex.properties_pane.shared.mod_packaging.widget/docs/CHANGELOG.md (1)

9-9: LGTM: demoted section heading.

Heading changed to level-3 is consistent.

source/extensions/lightspeed.trex.properties_pane.shared.mod_setup.widget/docs/CHANGELOG.md (1)

9-9: LGTM: normalized section heading levels.

Changed headings to level-3 are consistent throughout.

Also applies to: 17-17, 21-21, 26-26, 30-30, 34-34, 38-38, 42-42

source/extensions/omni.flux.tabbed.widget/omni/flux/tabbed/widget/setup_ui.py (1)

45-46: LGTM: add_initial_spacer flag is backward-compatible and well-wired.

New param defaults preserve behavior; conditional spacer insertion works for vertical tabs.

Also applies to: 58-59, 78-79, 245-247

source/extensions/lightspeed.trex.layout.stagecraft/lightspeed/trex/layout/stagecraft/setup_ui.py (4)

144-149: Project name UI flow looks solid.

Label init/update, edit-toggle, and guarded rename behavior are correct.

Also applies to: 161-177, 178-187, 188-208


752-764: LGTM: splitter clamping logic.

Bounds and dependent width updates are correct.


299-307: LGTM: ensure an initial tab selection on resume.

Prevents empty state when entering the workspace.


595-613: LGTM: property pane wiring to tab selection and initial updates.

Connections and initial refreshes are consistent with the new vertical tabs.

Also applies to: 765-768

@Simon-Lajoie Simon-Lajoie force-pushed the feature/vertical_modding_tabs branch from ff75395 to e801352 Compare August 28, 2025 18:34
Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 3

♻️ Duplicate comments (10)
source/extensions/lightspeed.trex.components_pane.stagecraft.models/docs/CHANGELOG.md (2)

9-10: Previously raised grammar nit acknowledged—no action.

You chose to keep “Fixed Test assets to large to work without LFS”; respecting that decision.


13-14: Previously raised typo nit acknowledged—no action.

You opted to keep “compatbility”; acknowledging and not re-raising.

source/extensions/lightspeed.trex.layout.stagecraft/docs/CHANGELOG.md (1)

4-7: Date the release and fix heading level (Keep a Changelog)

Same feedback as earlier thread; please apply.

-## [2.5.3]
-## Changed
+## [2.5.3] - 2025-08-25
+### Changed

Confirm manifest and dependency:

#!/bin/bash
set -euo pipefail
rg -n '^version\s*=\s*"2\.5\.3"$' source/extensions/lightspeed.trex.layout.stagecraft/config/extension.toml
rg -n 'omni\.flux\.tabbed\.widget' source/extensions/lightspeed.trex.layout.stagecraft/config/extension.toml
source/extensions/lightspeed.common/docs/CHANGELOG.md (1)

4-6: Add release date and name the constant explicitly.
Bring this entry in line with Keep a Changelog and call out the identifier.

-## [1.8.1]
+## [1.8.1] - 2025-08-25
 ### Added
-- Added constants for untitled project name
+- Added `UNTITLED_PROJECT_NAME` constant for the default untitled project label
source/extensions/omni.flux.tabbed.widget/docs/CHANGELOG.md (3)

5-8: Stamp the release date for 1.2.2.
Align with other dated entries.

-## [1.2.2]
+## [1.2.2] - 2025-08-25
 ### Changed
 - Adjusted spacing for the new vertical modding tabs

10-12: Fix grammar: “Test … to large” → “test … too large”.
User-facing text.

-### Fixed
-- Fixed Test assets to large to work without LFS
+### Fixed
+- Fixed test assets too large to work without LFS

13-16: Fix typo: “compatbility” → “compatibility”.
Minor doc correctness.

 ### Changed
-- Update the documentation for Pydantic V2 compatbility
+- Update the documentation for Pydantic V2 compatibility
source/extensions/lightspeed.trex.properties_pane.shared.mod_packaging.widget/docs/CHANGELOG.md (1)

4-6: Add release date to 1.2.2 header per Keep a Changelog

Include the release date in the version header.

-## [1.2.2]
+## [1.2.2] - 2025-08-25
 ### Changed
 - Adjusted spacing for the new vertical modding tabs
source/extensions/lightspeed.trex.properties_pane.shared.mod_setup.widget/docs/CHANGELOG.md (1)

4-6: Add release date to 1.7.2 header

Follow Keep a Changelog format.

-## [1.7.2]
+## [1.7.2] - 2025-08-26
 ### Changed
 - Adjusted spacing for the new vertical modding tabs
source/extensions/lightspeed.trex.layout.stagecraft/lightspeed/trex/layout/stagecraft/setup_ui.py (1)

720-729: Bug: show_at likely expects numbers, not ui.Pixel

Unwrap Pixel lengths before passing to show_at.

-            x_position = self._menu_burger_widget.screen_position_x
-            y_position = self._menu_burger_widget.screen_position_y + self._menu_burger_widget.computed_height + 8.0
+            x_position = float(getattr(self._menu_burger_widget.screen_position_x, "value",
+                                       self._menu_burger_widget.screen_position_x))
+            y_position = float(getattr(self._menu_burger_widget.screen_position_y, "value",
+                                       self._menu_burger_widget.screen_position_y)) \
+                        + float(getattr(self._menu_burger_widget.computed_height, "value",
+                                        self._menu_burger_widget.computed_height)) \
+                        + 8.0
             burger_menu.show_at(x_position, y_position)
🧹 Nitpick comments (8)
source/extensions/lightspeed.trex.properties_pane.shared.asset_replacements.widget/docs/CHANGELOG.md (1)

4-7: Add release date to CHANGELOG entry

-## [1.11.0]
+## [1.11.0] - 2025-08-25

Confirm this date matches the official release.

source/extensions/lightspeed.trex.properties_pane.shared.mod_packaging.widget/docs/CHANGELOG.md (2)

8-10: Grammar: “to large” → “too large”

Minor copy fix.

- - Fixed Test assets to large to work without LFS
+ - Fixed Test assets too large to work without LFS

13-14: Typo: “compatbility” → “compatibility”

Fix spelling in 1.2.0 entry.

- - Update the documentation for Pydantic V2 compatbility
+ - Update the documentation for Pydantic V2 compatibility
source/extensions/lightspeed.trex.properties_pane.shared.mod_setup.widget/docs/CHANGELOG.md (2)

8-10: Grammar: “to large” → “too large”

- - Fixed Test assets to large to work without LFS
+ - Fixed Test assets too large to work without LFS

12-14: Typo: “compatbility” → “compatibility”

- - Update the documentation for Pydantic V2 compatbility
+ - Update the documentation for Pydantic V2 compatibility
source/extensions/lightspeed.trex.layout.stagecraft/lightspeed/trex/layout/stagecraft/setup_ui.py (3)

161-208: Project name edit flow: add minimal guards

Looks solid. Add a none-check for _project_name_field before using model to be extra safe during early stage events.

-        self._project_name_label.text = project_name
-        self._project_name_field.model.set_value(project_name)
+        self._project_name_label.text = project_name
+        if self._project_name_field and self._project_name_field.model:
+            self._project_name_field.model.set_value(project_name)

448-569: Reduce nested context managers (ruff SIM117) and trim heavy background loops

Combine adjacent with statements and consider fewer repeated ui.Image calls to cut build cost.

-                            with ui.ZStack(height=ui.Pixel(self.HEIGHT_TOP_BAR)):
-                                ui.Rectangle(name="WorkspaceBackground")
-                                with ui.ScrollingFrame(
+                            with ui.ZStack(height=ui.Pixel(self.HEIGHT_TOP_BAR)) as _:
+                                ui.Rectangle(name="WorkspaceBackground")
+                                with ui.ScrollingFrame(
                                     name="TreePanelBackground",
                                     vertical_scrollbar_policy=ui.ScrollBarPolicy.SCROLLBAR_ALWAYS_OFF,
                                     horizontal_scrollbar_policy=ui.ScrollBarPolicy.SCROLLBAR_ALWAYS_OFF,
                                     scroll_y_max=0,
                                 ):
-                                    with ui.VStack():
-                                        for _ in range(10):
-                                            with ui.HStack():
-                                                for _ in range(10):
-                                                    ui.Image("", name="TreePanelLinesBackground",
-                                                             fill_policy=ui.FillPolicy.PRESERVE_ASPECT_FIT,
-                                                             height=ui.Pixel(256), width=ui.Pixel(256))
+                                    with ui.VStack():
+                                        with ui.HStack():
+                                            for _ in range(3):
+                                                ui.Image(
+                                                    "",
+                                                    name="TreePanelLinesBackground",
+                                                    fill_policy=ui.FillPolicy.PRESERVE_ASPECT_FIT,
+                                                    height=ui.Pixel(256),
+                                                    width=ui.Pixel(256),
+                                                )

765-768: Add None-guard to selection-changed handler

Avoids crashes on transient empty selections.

-    def _on_tab_selection_changed(self, selected_item):
-        """Respond to tab selection."""
-        self._properties_pane.show_panel(title=selected_item.title)
+    def _on_tab_selection_changed(self, selected_item):
+        """Respond to tab selection."""
+        if not selected_item:
+            return
+        self._properties_pane.show_panel(title=selected_item.title)
📜 Review details

Configuration used: Path: .coderabbit.yml

Review profile: CHILL

Plan: Pro

💡 Knowledge Base configuration:

  • MCP integration is disabled by default for public repositories
  • Jira integration is disabled by default for public repositories
  • Linear integration is disabled by default for public repositories

You can enable these sources in your CodeRabbit configuration.

📥 Commits

Reviewing files that changed from the base of the PR and between ff75395 and e801352.

⛔ Files ignored due to path filters (3)
  • source/extensions/lightspeed.trex.components_pane.stagecraft.controller/data/icon.png is excluded by !**/*.png
  • source/extensions/lightspeed.trex.components_pane.stagecraft.controller/data/preview.png is excluded by !**/*.png
  • source/extensions/lightspeed.trex.components_pane.stagecraft.controller/premake5.lua is excluded by !source/extensions/**/premake5.lua
📒 Files selected for processing (38)
  • CHANGELOG.md (2 hunks)
  • docs/howto/learning-toolkit.md (1 hunks)
  • source/apps/exts.deps.generated.kit (0 hunks)
  • source/extensions/lightspeed.common/config/extension.toml (1 hunks)
  • source/extensions/lightspeed.common/docs/CHANGELOG.md (1 hunks)
  • source/extensions/lightspeed.common/lightspeed/common/constants.py (1 hunks)
  • source/extensions/lightspeed.trex.app.style/config/extension.toml (1 hunks)
  • source/extensions/lightspeed.trex.app.style/docs/CHANGELOG.md (1 hunks)
  • source/extensions/lightspeed.trex.app.style/lightspeed/trex/app/style/trex_style.py (1 hunks)
  • source/extensions/lightspeed.trex.components_pane.stagecraft.controller/config/extension.toml (0 hunks)
  • source/extensions/lightspeed.trex.components_pane.stagecraft.controller/docs/CHANGELOG.md (0 hunks)
  • source/extensions/lightspeed.trex.components_pane.stagecraft.controller/docs/README.md (0 hunks)
  • source/extensions/lightspeed.trex.components_pane.stagecraft.controller/docs/index.rst (0 hunks)
  • source/extensions/lightspeed.trex.components_pane.stagecraft.controller/lightspeed/trex/components_pane/stagecraft/controller/__init__.py (0 hunks)
  • source/extensions/lightspeed.trex.components_pane.stagecraft.controller/lightspeed/trex/components_pane/stagecraft/controller/setup_ui.py (0 hunks)
  • source/extensions/lightspeed.trex.components_pane.stagecraft.models/config/extension.toml (1 hunks)
  • source/extensions/lightspeed.trex.components_pane.stagecraft.models/docs/CHANGELOG.md (1 hunks)
  • source/extensions/lightspeed.trex.components_pane.stagecraft.models/lightspeed/trex/components_pane/stagecraft/models/model_items.py (1 hunks)
  • source/extensions/lightspeed.trex.control.stagecraft/config/extension.toml (1 hunks)
  • source/extensions/lightspeed.trex.control.stagecraft/docs/CHANGELOG.md (1 hunks)
  • source/extensions/lightspeed.trex.control.stagecraft/lightspeed/trex/control/stagecraft/tests/e2e/test_stage_manger.py (1 hunks)
  • source/extensions/lightspeed.trex.layout.stagecraft/config/extension.toml (2 hunks)
  • source/extensions/lightspeed.trex.layout.stagecraft/docs/CHANGELOG.md (1 hunks)
  • source/extensions/lightspeed.trex.layout.stagecraft/lightspeed/trex/layout/stagecraft/setup_ui.py (13 hunks)
  • source/extensions/lightspeed.trex.properties_pane.shared.asset_replacements.widget/config/extension.toml (1 hunks)
  • source/extensions/lightspeed.trex.properties_pane.shared.asset_replacements.widget/docs/CHANGELOG.md (1 hunks)
  • source/extensions/lightspeed.trex.properties_pane.shared.asset_replacements.widget/lightspeed/trex/properties_pane/shared/asset_replacements/widget/setup_ui.py (1 hunks)
  • source/extensions/lightspeed.trex.properties_pane.shared.mod_packaging.widget/config/extension.toml (1 hunks)
  • source/extensions/lightspeed.trex.properties_pane.shared.mod_packaging.widget/docs/CHANGELOG.md (1 hunks)
  • source/extensions/lightspeed.trex.properties_pane.shared.mod_packaging.widget/lightspeed/trex/properties_pane/shared/mod_packaging/widget/setup_ui.py (1 hunks)
  • source/extensions/lightspeed.trex.properties_pane.shared.mod_setup.widget/config/extension.toml (1 hunks)
  • source/extensions/lightspeed.trex.properties_pane.shared.mod_setup.widget/docs/CHANGELOG.md (1 hunks)
  • source/extensions/lightspeed.trex.properties_pane.shared.mod_setup.widget/lightspeed/trex/properties_pane/shared/mod_setup/widget/setup_ui.py (1 hunks)
  • source/extensions/lightspeed.trex.properties_pane.stagecraft.widget/config/extension.toml (1 hunks)
  • source/extensions/lightspeed.trex.properties_pane.stagecraft.widget/docs/CHANGELOG.md (1 hunks)
  • source/extensions/omni.flux.tabbed.widget/config/extension.toml (1 hunks)
  • source/extensions/omni.flux.tabbed.widget/docs/CHANGELOG.md (1 hunks)
  • source/extensions/omni.flux.tabbed.widget/omni/flux/tabbed/widget/setup_ui.py (4 hunks)
💤 Files with no reviewable changes (7)
  • source/extensions/lightspeed.trex.components_pane.stagecraft.controller/docs/CHANGELOG.md
  • source/extensions/lightspeed.trex.components_pane.stagecraft.controller/docs/README.md
  • source/apps/exts.deps.generated.kit
  • source/extensions/lightspeed.trex.components_pane.stagecraft.controller/config/extension.toml
  • source/extensions/lightspeed.trex.components_pane.stagecraft.controller/lightspeed/trex/components_pane/stagecraft/controller/init.py
  • source/extensions/lightspeed.trex.components_pane.stagecraft.controller/lightspeed/trex/components_pane/stagecraft/controller/setup_ui.py
  • source/extensions/lightspeed.trex.components_pane.stagecraft.controller/docs/index.rst
✅ Files skipped from review due to trivial changes (3)
  • source/extensions/lightspeed.trex.app.style/config/extension.toml
  • source/extensions/lightspeed.trex.control.stagecraft/config/extension.toml
  • CHANGELOG.md
🚧 Files skipped from review as they are similar to previous changes (14)
  • source/extensions/omni.flux.tabbed.widget/config/extension.toml
  • source/extensions/lightspeed.trex.components_pane.stagecraft.models/lightspeed/trex/components_pane/stagecraft/models/model_items.py
  • source/extensions/lightspeed.trex.properties_pane.shared.mod_setup.widget/config/extension.toml
  • source/extensions/lightspeed.trex.components_pane.stagecraft.models/config/extension.toml
  • source/extensions/lightspeed.trex.properties_pane.shared.asset_replacements.widget/lightspeed/trex/properties_pane/shared/asset_replacements/widget/setup_ui.py
  • source/extensions/lightspeed.trex.layout.stagecraft/config/extension.toml
  • source/extensions/lightspeed.common/config/extension.toml
  • source/extensions/lightspeed.trex.control.stagecraft/lightspeed/trex/control/stagecraft/tests/e2e/test_stage_manger.py
  • source/extensions/lightspeed.trex.properties_pane.shared.mod_packaging.widget/config/extension.toml
  • source/extensions/lightspeed.trex.properties_pane.shared.mod_setup.widget/lightspeed/trex/properties_pane/shared/mod_setup/widget/setup_ui.py
  • source/extensions/lightspeed.trex.properties_pane.stagecraft.widget/config/extension.toml
  • source/extensions/lightspeed.trex.properties_pane.shared.mod_packaging.widget/lightspeed/trex/properties_pane/shared/mod_packaging/widget/setup_ui.py
  • source/extensions/lightspeed.common/lightspeed/common/constants.py
  • source/extensions/omni.flux.tabbed.widget/omni/flux/tabbed/widget/setup_ui.py
🧰 Additional context used
📓 Path-based instructions (1)
source/extensions/**/config/extension.toml

⚙️ CodeRabbit configuration file

source/extensions/**/config/extension.toml: Ignore remarks about un-pinned dependencies; our team intentionally leaves "omni.flux.*" and "lightspeed.*"
dependencies without an explicit version to get the latest version.

Files:

  • source/extensions/lightspeed.trex.properties_pane.shared.asset_replacements.widget/config/extension.toml
🧬 Code graph analysis (1)
source/extensions/lightspeed.trex.layout.stagecraft/lightspeed/trex/layout/stagecraft/setup_ui.py (3)
source/extensions/omni.flux.tabbed.widget/omni/flux/tabbed/widget/setup_ui.py (7)
  • SetupUI (34-328)
  • model (158-159)
  • selection (173-175)
  • selection (178-185)
  • add (141-155)
  • subscribe_selection_changed (96-101)
  • get_frame (125-135)
source/extensions/lightspeed.trex.menu.workfile/lightspeed/trex/menu/workfile/setup_ui.py (2)
  • SetupUI (60-254)
  • show_at (247-251)
source/extensions/lightspeed.trex.properties_pane.stagecraft.widget/lightspeed/trex/properties_pane/stagecraft/widget/setup_ui.py (2)
  • SetupUI (28-64)
  • get_frame (40-44)
🪛 Ruff (0.12.2)
source/extensions/lightspeed.trex.layout.stagecraft/lightspeed/trex/layout/stagecraft/setup_ui.py

448-449: Use a single with statement with multiple contexts instead of nested with statements

(SIM117)


459-465: Use a single with statement with multiple contexts instead of nested with statements

(SIM117)


477-478: Use a single with statement with multiple contexts instead of nested with statements

(SIM117)


561-562: Use a single with statement with multiple contexts instead of nested with statements

(SIM117)

🪛 LanguageTool
docs/howto/learning-toolkit.md

[grammar] ~11-~11: There might be a mistake here.
Context: ...ded capture layer, as the project wizard streamlines the remaining setup processe...

(QB_NEW_EN)

source/extensions/lightspeed.common/docs/CHANGELOG.md

[grammar] ~4-~4: There might be a mistake here.
Context: ...epachangelog.com/en/1.0.0/). ## [1.8.1] ### Added - Added constants for untitled pro...

(QB_NEW_EN)


[grammar] ~5-~5: There might be a mistake here.
Context: ...og.com/en/1.0.0/). ## [1.8.1] ### Added - Added constants for untitled project nam...

(QB_NEW_EN)

source/extensions/lightspeed.trex.app.style/docs/CHANGELOG.md

[grammar] ~4-~4: There might be a mistake here.
Context: ...pachangelog.com/en/1.0.0/). ## [1.12.1] ## Added - Added styles for top bar title i...

(QB_NEW_EN)


[grammar] ~5-~5: There might be a mistake here.
Context: ...og.com/en/1.0.0/). ## [1.12.1] ## Added - Added styles for top bar title in moddin...

(QB_NEW_EN)

source/extensions/lightspeed.trex.components_pane.stagecraft.models/docs/CHANGELOG.md

[grammar] ~4-~4: There might be a mistake here.
Context: ...epachangelog.com/en/1.0.0/). ## [1.1.2] ### Changed - Renamed the modding tab from "...

(QB_NEW_EN)


[grammar] ~5-~5: There might be a mistake here.
Context: ....com/en/1.0.0/). ## [1.1.2] ### Changed - Renamed the modding tab from "Captures /...

(QB_NEW_EN)


[grammar] ~8-~8: There might be a mistake here.
Context: ... / Setup" to "Project Setup" ## [1.1.1] ### Fixed - Fixed Test assets to large to wo...

(QB_NEW_EN)


[grammar] ~9-~9: There might be a mistake here.
Context: ...to "Project Setup" ## [1.1.1] ### Fixed - Fixed Test assets to large to work witho...

(QB_NEW_EN)


[grammar] ~12-~12: There might be a mistake here.
Context: ...to large to work without LFS ## [1.1.0] ### Changed - Update the documentation for P...

(QB_NEW_EN)


[grammar] ~13-~13: There might be a mistake here.
Context: ...work without LFS ## [1.1.0] ### Changed - Update the documentation for Pydantic V2...

(QB_NEW_EN)

source/extensions/lightspeed.trex.control.stagecraft/docs/CHANGELOG.md

[grammar] ~4-~4: There might be a mistake here.
Context: ...epachangelog.com/en/1.0.0/). ## [1.5.5] ## Fixed - Fixed tests for new vertical tab...

(QB_NEW_EN)


[grammar] ~5-~5: There might be a mistake here.
Context: ...log.com/en/1.0.0/). ## [1.5.5] ## Fixed - Fixed tests for new vertical tabs layout...

(QB_NEW_EN)

source/extensions/lightspeed.trex.layout.stagecraft/docs/CHANGELOG.md

[grammar] ~4-~4: There might be a mistake here.
Context: ...epachangelog.com/en/1.0.0/). ## [2.5.3] ## Changed - Changed modding tabs to vertic...

(QB_NEW_EN)


[grammar] ~5-~5: There might be a mistake here.
Context: ...g.com/en/1.0.0/). ## [2.5.3] ## Changed - Changed modding tabs to vertical layout ...

(QB_NEW_EN)

source/extensions/lightspeed.trex.properties_pane.shared.asset_replacements.widget/docs/CHANGELOG.md

[grammar] ~4-~4: There might be a mistake here.
Context: ...pachangelog.com/en/1.0.0/). ## [1.11.0] ### Changed - Adjusted spacing for the new v...

(QB_NEW_EN)


[grammar] ~5-~5: There might be a mistake here.
Context: ...com/en/1.0.0/). ## [1.11.0] ### Changed - Adjusted spacing for the new vertical mo...

(QB_NEW_EN)

source/extensions/lightspeed.trex.properties_pane.shared.mod_packaging.widget/docs/CHANGELOG.md

[grammar] ~4-~4: There might be a mistake here.
Context: ...epachangelog.com/en/1.0.0/). ## [1.2.2] ### Changed - Adjusted spacing for the new v...

(QB_NEW_EN)


[grammar] ~5-~5: There might be a mistake here.
Context: ....com/en/1.0.0/). ## [1.2.2] ### Changed - Adjusted spacing for the new vertical mo...

(QB_NEW_EN)


[grammar] ~8-~8: There might be a mistake here.
Context: ...he new vertical modding tabs ## [1.2.1] ### Fixed - Fixed Test assets to large to wo...

(QB_NEW_EN)


[grammar] ~9-~9: There might be a mistake here.
Context: ...tical modding tabs ## [1.2.1] ### Fixed - Fixed Test assets to large to work witho...

(QB_NEW_EN)


[grammar] ~12-~12: There might be a mistake here.
Context: ...to large to work without LFS ## [1.2.0] ### Changed - Update the documentation for P...

(QB_NEW_EN)


[grammar] ~13-~13: There might be a mistake here.
Context: ...work without LFS ## [1.2.0] ### Changed - Update the documentation for Pydantic V2...

(QB_NEW_EN)

source/extensions/lightspeed.trex.properties_pane.shared.mod_setup.widget/docs/CHANGELOG.md

[grammar] ~4-~4: There might be a mistake here.
Context: ...epachangelog.com/en/1.0.0/). ## [1.7.2] ### Changed - Adjusted spacing for the new v...

(QB_NEW_EN)


[grammar] ~5-~5: There might be a mistake here.
Context: ....com/en/1.0.0/). ## [1.7.2] ### Changed - Adjusted spacing for the new vertical mo...

(QB_NEW_EN)


[grammar] ~8-~8: There might be a mistake here.
Context: ...he new vertical modding tabs ## [1.7.1] ### Fixed - Fixed Test assets to large to wo...

(QB_NEW_EN)


[grammar] ~9-~9: There might be a mistake here.
Context: ...tical modding tabs ## [1.7.1] ### Fixed - Fixed Test assets to large to work witho...

(QB_NEW_EN)


[grammar] ~12-~12: There might be a mistake here.
Context: ...to large to work without LFS ## [1.7.0] ### Changed - Update the documentation for P...

(QB_NEW_EN)


[grammar] ~13-~13: There might be a mistake here.
Context: ...work without LFS ## [1.7.0] ### Changed - Update the documentation for Pydantic V2...

(QB_NEW_EN)


[grammar] ~14-~14: Ensure spelling is correct
Context: ...pdate the documentation for Pydantic V2 compatbility ## [1.6.4] ### Changed - Updated test to us...

(QB_NEW_EN_ORTHOGRAPHY_ERROR_IDS_1)


[grammar] ~16-~16: There might be a mistake here.
Context: ...for Pydantic V2 compatbility ## [1.6.4] ### Changed - Updated test to use deps ins...

(QB_NEW_EN)


[grammar] ~17-~17: There might be a mistake here.
Context: ... V2 compatbility ## [1.6.4] ### Changed - Updated test to use deps instead of `....

(QB_NEW_EN)


[grammar] ~20-~20: There might be a mistake here.
Context: ...depsinstead of.deps` dir ## [1.6.3] ### Changed - Use left-aligned properties wi...

(QB_NEW_EN)


[grammar] ~21-~21: There might be a mistake here.
Context: ...d of .deps dir ## [1.6.3] ### Changed - Use left-aligned properties widget - Cha...

(QB_NEW_EN)


[grammar] ~25-~25: There might be a mistake here.
Context: ...layout to be more consistent ## [1.6.2] ### Changed - Update to Kit 106.5 ## [1.6.1...

(QB_NEW_EN)


[grammar] ~26-~26: There might be a mistake here.
Context: ... more consistent ## [1.6.2] ### Changed - Update to Kit 106.5 ## [1.6.1] ### Chan...

(QB_NEW_EN)


[grammar] ~29-~29: There might be a mistake here.
Context: ...hanged - Update to Kit 106.5 ## [1.6.1] ### Changed - Updated the look of the "Loadi...

(QB_NEW_EN)


[grammar] ~30-~30: There might be a mistake here.
Context: ...ate to Kit 106.5 ## [1.6.1] ### Changed - Updated the look of the "Loading..." pan...

(QB_NEW_EN)


[grammar] ~33-~33: There might be a mistake here.
Context: ...ok of the "Loading..." panel ## [1.6.0] ### Removed - removed "Open Wizard" button f...

(QB_NEW_EN)


[grammar] ~37-~37: There might be a mistake here.
Context: ..." button from property panel ## [1.5.7] ### Changed - Improved Mod File button label...

(QB_NEW_EN)


[grammar] ~38-~38: There might be a mistake here.
Context: ...m property panel ## [1.5.7] ### Changed - Improved Mod File button labels ## [1.5...

(QB_NEW_EN)

source/extensions/lightspeed.trex.properties_pane.stagecraft.widget/docs/CHANGELOG.md

[grammar] ~4-~4: There might be a mistake here.
Context: ...epachangelog.com/en/1.0.0/). ## [1.1.2] ## Fixed - Removed "lightspeed.trex.compone...

(QB_NEW_EN)


[grammar] ~5-~5: There might be a mistake here.
Context: ...log.com/en/1.0.0/). ## [1.1.2] ## Fixed - Removed "lightspeed.trex.components_pane...

(QB_NEW_EN)

source/extensions/omni.flux.tabbed.widget/docs/CHANGELOG.md

[grammar] ~5-~5: There might be a mistake here.
Context: ...epachangelog.com/en/1.0.0/). ## [1.2.2] ### Changed - Adjusted spacing for the new v...

(QB_NEW_EN)


[grammar] ~6-~6: There might be a mistake here.
Context: ....com/en/1.0.0/). ## [1.2.2] ### Changed - Adjusted spacing for the new vertical mo...

(QB_NEW_EN)


[grammar] ~9-~9: There might be a mistake here.
Context: ...he new vertical modding tabs ## [1.2.1] ### Fixed - Fixed Test assets to large to wo...

(QB_NEW_EN)


[grammar] ~10-~10: There might be a mistake here.
Context: ...tical modding tabs ## [1.2.1] ### Fixed - Fixed Test assets to large to work witho...

(QB_NEW_EN)


[grammar] ~13-~13: There might be a mistake here.
Context: ...to large to work without LFS ## [1.2.0] ### Changed - Update the documentation for P...

(QB_NEW_EN)


[grammar] ~14-~14: There might be a mistake here.
Context: ...work without LFS ## [1.2.0] ### Changed - Update the documentation for Pydantic V2...

(QB_NEW_EN)


[grammar] ~15-~15: Ensure spelling is correct
Context: ...pdate the documentation for Pydantic V2 compatbility ## [1.1.6] ### Changed - update to use omni...

(QB_NEW_EN_ORTHOGRAPHY_ERROR_IDS_1)

🔇 Additional comments (13)
source/extensions/lightspeed.trex.components_pane.stagecraft.models/docs/CHANGELOG.md (1)

4-6: Approve rename of “Captures / Setup” to “Project Setup”
Verified no lingering occurrences of the old label in code or tests; changelog, code, and documentation are all updated accordingly.

source/extensions/lightspeed.trex.control.stagecraft/docs/CHANGELOG.md (1)

4-7: Add release date to changelog and adjust heading

-## [1.5.5]
-## Fixed
+## [1.5.5] - 2025-08-25
+### Fixed
  • Ensure tests exercise the new vertical-tabs layout (grep found no “vertical” matches).
  • Re-run the Windows test scripts (tests-lightspeed.trex.control.stagecraft.bat and tests-lightspeed.trex.properties_pane.shared.asset_replacements.widget.bat).
docs/howto/learning-toolkit.md (2)

11-12: Label rename reads well; matches vertical-mods intent.
No issues spotted with the “Project Setup” wording.


11-16: Anchor present; only historical “Captures / Setup” mention in docs/CHANGELOG.md—no change required.

source/extensions/lightspeed.trex.properties_pane.shared.asset_replacements.widget/config/extension.toml (1)

2-2: Version bump looks good.
Confirm the changelog contains a matching 1.11.0 entry.

source/extensions/lightspeed.trex.app.style/lightspeed/trex/app/style/trex_style.py (2)

714-716: New TopBarTitle styles: OK.
Consistent with existing title styles (size 23, nvidia_md).


714-716: Remove or reference unused style key "Label::TopBarTitle"
No occurrences found beyond its definition in trex_style.py; either remove these dead style entries or add a widget reference to avoid unused styles.

source/extensions/lightspeed.trex.layout.stagecraft/lightspeed/trex/layout/stagecraft/setup_ui.py (6)

26-26: Good fix: import carb

Prevents NameError when using carb.* APIs.


57-57: Correct import: Tabbed widget

Importing SetupUI as _TabbedFrame is appropriate.


144-149: Project title refresh on stage events looks good

Calling _update_project_name_label on OPENED/SAVED/CLOSED is correct.


303-307: Auto-select first tab on resume

Reasonable default when no selection exists.


752-764: Splitter math LGTM

Clamps and updates look correct for the property/viewport splitter.


614-646: Ignore suggestion to remove .selected assignments; direct mutation of selected is used pervasively across the codebase, so refactoring this snippet in isolation would introduce inconsistency.

Likely an incorrect or invalid review comment.

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

♻️ Duplicate comments (1)
source/extensions/lightspeed.trex.properties_pane.stagecraft.widget/docs/CHANGELOG.md (1)

4-6: Verify manifest bump and dep removal (repeat of prior ask)

Ensure extension.toml is bumped to 1.1.2 and the removed controller dep isn’t referenced.

#!/bin/bash
set -euo pipefail
rg -n '^version\s*=\s*"1\.1\.2"$' source/extensions/lightspeed.trex.properties_pane.stagecraft.widget/config/extension.toml
! rg -n 'lightspeed\.trex\.components_pane\.stagecraft\.controller' source/extensions/lightspeed.trex.properties_pane.stagecraft.widget/config/extension.toml
! rg -n 'lightspeed\.trex\.components_pane\.stagecraft\.controller' source/apps/exts.deps.generated.kit
📜 Review details

Configuration used: Path: .coderabbit.yml

Review profile: CHILL

Plan: Pro

💡 Knowledge Base configuration:

  • MCP integration is disabled by default for public repositories
  • Jira integration is disabled by default for public repositories
  • Linear integration is disabled by default for public repositories

You can enable these sources in your CodeRabbit configuration.

📥 Commits

Reviewing files that changed from the base of the PR and between e801352 and 742c0b0.

📒 Files selected for processing (1)
  • source/extensions/lightspeed.trex.properties_pane.stagecraft.widget/docs/CHANGELOG.md (1 hunks)
🧰 Additional context used
🪛 LanguageTool
source/extensions/lightspeed.trex.properties_pane.stagecraft.widget/docs/CHANGELOG.md

[grammar] ~4-~4: There might be a mistake here.
Context: ...epachangelog.com/en/1.0.0/). ## [1.1.2] ## Removed - Removed "lightspeed.trex.compo...

(QB_NEW_EN)


[grammar] ~5-~5: There might be a mistake here.
Context: ...g.com/en/1.0.0/). ## [1.1.2] ## Removed - Removed "lightspeed.trex.components_pane...

(QB_NEW_EN)

@Simon-Lajoie Simon-Lajoie force-pushed the feature/vertical_modding_tabs branch from 742c0b0 to 7b2f6cb Compare August 28, 2025 20:34
@Ekozmaster
Copy link

Thank you so much for contributing @Simon-Lajoie impressive stuff!
We had some discussions in our mirror internal MR and I'll just forward them to you

Copy link

@Ekozmaster Ekozmaster left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thank you once again, we're super happy to see ppl finally contributing to the project.
Let us know if you need any guidance or have questions!

Copy link

@Ekozmaster Ekozmaster left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Awesome work!

@Simon-Lajoie
Copy link
Contributor Author

Simon-Lajoie commented Sep 16, 2025

Awesome work!

There's still 1 last internal test that's failing, the "test_object_pinning" from asset_replacements widget. I'm gonna work to fix this and then the PR should be ready. I'll also make sure to run the lint and format bat files. Thanks!

@Simon-Lajoie Simon-Lajoie force-pushed the feature/vertical_modding_tabs branch from f2455ef to 58e6326 Compare September 19, 2025 00:16
- Changed modding tabs to vertical layout (consistent with Ingestion and AI Tools)
- Preserved hover features in property panel (back arrow, project title, burger menu)
- Renamed "Captures / Setup" tab → "Project Setup"
- Fixed top bar alignment and adjusted spacing across modding tabs
- Updated UI constants for vertical layout
- Added changelog entries for tab layout changes and updated root changelog
- Removed unused code, fixed imports, and minor bugs
- Removed stagecraft controller
@Simon-Lajoie Simon-Lajoie force-pushed the feature/vertical_modding_tabs branch from 58e6326 to cd421bb Compare September 20, 2025 04:19
@svc-remix-github svc-remix-github merged commit 6684fca into NVIDIAGameWorks:main Sep 22, 2025
6 checks passed
@github-actions github-actions bot locked and limited conversation to collaborators Sep 22, 2025
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants