Skip to content

feat: codex inspired dark theme ui redesign with layout fixes#75

Merged
gnoviawan merged 18 commits intodevfrom
worktree-termul-ui-redesign-codex
Mar 12, 2026
Merged

feat: codex inspired dark theme ui redesign with layout fixes#75
gnoviawan merged 18 commits intodevfrom
worktree-termul-ui-redesign-codex

Conversation

@gnoviawan
Copy link
Owner

@gnoviawan gnoviawan commented Mar 12, 2026

Summary

Full UI redesign with Codex dark theme aesthetic, plus layout and terminal fixes.

UI Redesign

  • Redesign with Codex dark theme aesthetic
  • Remove panel borders, add rounded corners
  • Make scrollbar ultra-minimal (4px)
  • Use background color for title bar, remove border
  • Reduce tab text size to text-xs
  • Make ResizableHandle transparent for cleaner panel separation
  • Fix active tab contrast (bg-muted instead of bg-card)
  • Fix ContextMenuSubTrigger border radius to match other menu items

File Explorer Restructure

  • Restructure File Explorer as a separate panel outside main content
  • Wrap FileExplorer in PaneDndProvider for drag-drop context
  • Properly separate main content and file explorer with flex layout
  • Clear explorer root path when active project is removed (prevents stale tree)
  • Guard FileExplorer render on activeProject?.path being truthy

Layout & Terminal Fixes

  • Show "Connecting..." loading state instead of blank when terminal PTY ID is pending
  • Split terminal focus into separate isInTerminal guard (preserves other shortcuts in terminal)
  • Prevent Ctrl+B from firing when xterm terminal has focus
  • Allow configurable sidebarToggle shortcut to work from terminal
  • Add overflow-hidden and min-w-0 to content container to fix horizontal overflow
  • Add h-full to terminal containers for proper display
  • Restructure layout with proper padding and height

Sidebar

  • Replace bottom New Project button with Termul version label

Test plan

  • Verify Codex dark theme styling (rounded corners, thin scrollbars, transparent handles)
  • Active tabs should be visually distinct from card backgrounds
  • Create a new terminal — should briefly show "Connecting..." then render PTY
  • With terminal focused, press Ctrl+B — file explorer should NOT toggle
  • With terminal focused, configurable sidebar toggle should still work
  • With terminal focused, Ctrl+W should still close tab
  • Remove active project — file explorer should clear, not show stale tree
  • Resize window — main content should not overflow horizontally
  • Toggle file explorer on/off — layout adjusts without overflow
  • Drag and drop in file explorer still works
  • Version label shows at bottom of sidebar

🤖 Generated with Claude Code

Summary by CodeRabbit

  • Style

    • Refined dark (Codex) theme colors and contrast; increased border radii and rounded elements for a rounder look.
    • Updated many UI components (buttons, menus, dialogs, inputs, tabs, tooltips, scrollbars) toward a consistent sidebar-focused theme; adjusted scrollbar size and thumb colors.
    • Reduced some font sizes in tab labels.
  • Layout

    • Redesigned workspace with a floating file-explorer panel and restructured main content containers.
    • Aligned header, toolbar and sidebar visuals; added a version/footer block in the sidebar.
  • Bug Fixes

    • Show a "Connecting..." placeholder for terminals without a PTY to preserve layout.

gnoviawan and others added 14 commits March 12, 2026 09:17
- Update CSS variables for darker background (#121212) and subtle grays
- Increase border-radius from 4px to 8px for modern rounded corners
- Standardize hover/focus states to use bg-secondary across components
- Update all UI components for consistent styling:
  - button, card, input, select, dialog, dropdown-menu
  - tabs, tooltip, scroll-area, sidebar, context-menu
  - menubar, navigation-menu
- Refresh ProjectSidebar and WorkspaceLayout layouts
- Update TitleBar with consistent styling

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Remove border-r from ProjectSidebar, add rounded-xl with margin
- Add rounded-xl to FileExplorer container with margin
- Add rounded-xl to main content area in WorkspaceLayout
- Add rounded-xl to terminal pane content area
- Creates floating card-style panels matching Codex reference

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Move FileExplorer outside ResizablePanelGroup to be sibling of main content
- Fix FileExplorer to have fixed width (w-64) like ProjectSidebar
- Creates proper visual hierarchy: background -> sidebar -> main content -> file explorer
- All panels now float separately with rounded corners

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Wrap center content in flex-1 min-w-0 container
- Wrap file explorer in flex-shrink-0 container
- Prevents overlap between main content and right sidebar

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Move FileExplorer outside main element to be sibling
- Main content: flex-1 with m-2 mr-0 (margin only on left)
- FileExplorer: flex-shrink-0 with w-64, m-2 (margin only on right)
- Creates proper floating panels at same level: ProjectSidebar | MainContent | FileExplorer
- Remove rounded-xl m-1 from PaneContent to prevent overflow

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Move padding to parent container (p-2) instead of individual margins
- Add h-full to all containers for proper flex height propagation
- Fix terminal blank screen by ensuring proper height chain
- Add gap between panels using ml-2/mr-2 instead of m-2

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Show "Connecting..." loading state instead of blank when PTY ID is pending
- Prevent Ctrl+B from toggling file explorer when xterm terminal is focused
- Add overflow-hidden and min-w-0 to prevent main content width overflow

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@coderabbitai
Copy link

coderabbitai bot commented Mar 12, 2026

Warning

Rate limit exceeded

@gnoviawan has exceeded the limit for the number of commits that can be reviewed per hour. Please wait 21 minutes and 6 seconds before requesting another review.

⌛ How to resolve this issue?

After the wait time has elapsed, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

We recommend that you space out your commits to avoid hitting the rate limit.

🚦 How do rate limits work?

CodeRabbit enforces hourly rate limits for each developer per organization.

Our paid plans have higher rate limits than the trial, open-source and free plans. In all cases, we re-allow further reviews after a brief timeout.

Please see our FAQ for further information.

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: cdfc405a-13cd-42dd-8654-2a1a786e5ed5

📥 Commits

Reviewing files that changed from the base of the PR and between dfdaba8 and 7fe257b.

📒 Files selected for processing (2)
  • src/renderer/components/ProjectSidebar.test.tsx
  • src/renderer/layouts/WorkspaceLayout.tsx
📝 Walkthrough

Walkthrough

This PR applies a Codex dark theme and larger corner radii across many UI primitives, refactors the workspace into multi-panel layout with a floating FileExplorer, and adds keyboard/terminal-context guards for panel shortcuts.

Changes

Cohort / File(s) Summary
Global Theme
src/renderer/index.css
Darkened color tokens, increased --radius (0.25rem→0.5rem), narrower scrollbars, adjusted glass-panel and scrollbar thumb colors.
Workspace Layout & Explorer
src/renderer/layouts/WorkspaceLayout.tsx, src/renderer/components/file-explorer/FileExplorer.tsx
Reworked layout to multi-panel composition: FileExplorer rendered as a floating/side panel; added wrappers and spacing; keyboard guards (isInTerminal) to prevent shortcut conflicts; updated branch rendering for empty projects.
Sidebar & Title Bar
src/renderer/components/ProjectSidebar.tsx, src/renderer/components/TitleBar.tsx
Switched to sidebar-focused tokens, updated header/button hover states, increased corner radii, and adjusted TitleBar background.
UI Primitives
src/renderer/components/ui/...
src/renderer/components/ui/button.tsx, card.tsx, context-menu.tsx, dialog.tsx, dropdown-menu.tsx, input.tsx, menubar.tsx, navigation-menu.tsx, resizable.tsx, scroll-area.tsx, select.tsx, sidebar.tsx, tabs.tsx, tooltip.tsx
Consistent visual refactor: radius increases (rounded-md/‑sm→rounded-lg), many accent→secondary token swaps, hover/focus state tweaks, and minor container/background adjustments.
Workspace & Editor UI
src/renderer/components/workspace/PaneContent.tsx, EditorTab.tsx, WorkspaceTabBar.tsx
Added h-full to pane content; render placeholder "Connecting..." for terminals without PTY when active; reduced some tab/file-label font sizes (text-sm→text-xs).
Preferences
src/renderer/pages/AppPreferences.tsx
Increased border radii on selects/buttons (rounded-md→rounded-lg) across preferences UI.

Sequence Diagram(s)

sequenceDiagram
  participant User
  participant WorkspaceLayout
  participant FileExplorer
  participant MainContent
  participant Terminal
  User->>WorkspaceLayout: press toggle shortcut / interact
  WorkspaceLayout->>Terminal: detect target (closest('.xterm')) → isInTerminal?
  alt In terminal
    WorkspaceLayout-->>User: ignore toggle (no panel change)
  else Not in terminal
    WorkspaceLayout->>FileExplorer: toggle visibility (render floating panel)
    WorkspaceLayout->>MainContent: ensure main area rendered (h-full)
    MainContent->>Terminal: if no PTY and active -> render "Connecting..." placeholder
  end
Loading

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~25 minutes

Possibly related PRs

Poem

🐰
A midnight canvas, edges round and deep,
Panels drift softly while the terminals sleep.
Keys hush near xterms, I pause my hop—
Dark Codex settles, scrollbars whisper, stop.
I nibble code crumbs, and dream of another hop.

🚥 Pre-merge checks | ✅ 2 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (2 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title 'feat: codex inspired dark theme ui redesign with layout fixes' accurately summarizes the primary changes across the PR: implementing a Codex-inspired dark theme with comprehensive UI redesign and layout improvements.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch worktree-termul-ui-redesign-codex

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.

@gnoviawan gnoviawan changed the title fix: resolve layout and terminal issues after sidebar redesign feat: Codex dark theme UI redesign with layout fixes Mar 12, 2026
@gnoviawan gnoviawan changed the title feat: Codex dark theme UI redesign with layout fixes feat: codex inspired dark theme ui redesign with layout fixes Mar 12, 2026
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

🧹 Nitpick comments (1)
src/renderer/components/ui/context-menu.tsx (1)

28-28: Minor radius inconsistency between SubTrigger and Item components.

ContextMenuSubTrigger uses rounded-md (Line 28) while ContextMenuItem uses rounded-sm (Line 81). Similarly, ContextMenuCheckboxItem and ContextMenuRadioItem retain rounded-sm. This creates a subtle visual inconsistency within the menu.

Consider aligning all interactive menu items to the same radius for visual consistency.

Also applies to: 81-81

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src/renderer/components/ui/context-menu.tsx` at line 28,
ContextMenuSubTrigger currently uses "rounded-md" while ContextMenuItem,
ContextMenuCheckboxItem, and ContextMenuRadioItem use "rounded-sm", causing a
visual mismatch; update the class string in ContextMenuSubTrigger (the component
named ContextMenuSubTrigger) to use "rounded-sm" so all interactive menu items
share the same border radius, and verify the classNames for ContextMenuItem,
ContextMenuCheckboxItem, and ContextMenuRadioItem remain "rounded-sm" for
consistency.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@src/renderer/components/ui/tabs.tsx`:
- Line 30: The active tab styling uses data-[state=active]:bg-card which can
match parent Card backgrounds (loss of contrast); update the Tabs component's
class string in src/renderer/components/ui/tabs.tsx to use a darker/more
distinct token (e.g., data-[state=active]:bg-background or a newly defined
data-[state=active]:bg-muted) so active tabs remain distinguishable when
rendered inside TerminalTabBar and WorkspaceTabBar; adjust the token name
consistently where Tabs is used so the active state uses the chosen surface
token.

In `@src/renderer/layouts/WorkspaceLayout.tsx`:
- Line 395: Split terminal focus out of the generic isInEditor check: remove
'.xterm' from the isInEditor assignment and add a new boolean (e.g.,
isInTerminal = !!target.closest('.xterm')). Use isInEditor for editor/IDE
shortcut guards only, and use isInTerminal only for the Ctrl+B/file-explorer
guard (where the terminal should be excluded from opening/closing the explorer).
Update the shortcut handling conditions that currently reference isInEditor (the
global shortcut-skip checks) to not skip when isInTerminal is true, leaving
ConnectedTerminal's own routing intact.

---

Nitpick comments:
In `@src/renderer/components/ui/context-menu.tsx`:
- Line 28: ContextMenuSubTrigger currently uses "rounded-md" while
ContextMenuItem, ContextMenuCheckboxItem, and ContextMenuRadioItem use
"rounded-sm", causing a visual mismatch; update the class string in
ContextMenuSubTrigger (the component named ContextMenuSubTrigger) to use
"rounded-sm" so all interactive menu items share the same border radius, and
verify the classNames for ContextMenuItem, ContextMenuCheckboxItem, and
ContextMenuRadioItem remain "rounded-sm" for consistency.

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: b83462b0-efb3-42dc-94fb-4c9e8f6de223

📥 Commits

Reviewing files that changed from the base of the PR and between 1ae289d and 244f570.

📒 Files selected for processing (23)
  • src/renderer/components/ProjectSidebar.tsx
  • src/renderer/components/TitleBar.tsx
  • src/renderer/components/file-explorer/FileExplorer.tsx
  • src/renderer/components/ui/button.tsx
  • src/renderer/components/ui/card.tsx
  • src/renderer/components/ui/context-menu.tsx
  • src/renderer/components/ui/dialog.tsx
  • src/renderer/components/ui/dropdown-menu.tsx
  • src/renderer/components/ui/input.tsx
  • src/renderer/components/ui/menubar.tsx
  • src/renderer/components/ui/navigation-menu.tsx
  • src/renderer/components/ui/resizable.tsx
  • src/renderer/components/ui/scroll-area.tsx
  • src/renderer/components/ui/select.tsx
  • src/renderer/components/ui/sidebar.tsx
  • src/renderer/components/ui/tabs.tsx
  • src/renderer/components/ui/tooltip.tsx
  • src/renderer/components/workspace/EditorTab.tsx
  • src/renderer/components/workspace/PaneContent.tsx
  • src/renderer/components/workspace/WorkspaceTabBar.tsx
  • src/renderer/index.css
  • src/renderer/layouts/WorkspaceLayout.tsx
  • src/renderer/pages/AppPreferences.tsx

@gnoviawan gnoviawan added phase-1 Phase 1: Stability & Polish (v0.3.1) v0.3.1 labels Mar 12, 2026
…s, version label

- Change active tab bg from bg-card to bg-muted for contrast
- Split xterm out of isInEditor into separate isInTerminal boolean
- Fix ContextMenuSubTrigger rounded-md to rounded-sm for consistency
- Replace bottom New Project button with Termul version label

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
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)
src/renderer/layouts/WorkspaceLayout.tsx (1)

444-453: ⚠️ Potential issue | 🟠 Major

Don't block the configurable sidebar shortcut in xterm.

The terminal-specific exclusion should stay limited to the hardcoded file-explorer toggle. With !isInTerminal here, sidebarToggle still no-ops whenever focus is inside xterm, even though the later global skip intentionally allows terminal-focused app shortcuts through.

Suggested fix
       if (matchesShortcut(e, getActiveKey('sidebarToggle'))) {
-        if (!isInEditor && !isInInput && !isInTerminal) {
+        if (!isInEditor && !isInInput) {
           e.preventDefault()
           e.stopPropagation()
           void updatePanelVisibility('sidebarVisible', !isSidebarVisible).catch((error) => {
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src/renderer/layouts/WorkspaceLayout.tsx` around lines 444 - 453, The current
handler prevents the configurable sidebarToggle from firing when focus is in
xterm because it checks !isInTerminal; remove the terminal check from this
condition so the shortcut can run while terminal-focused—i.e., in the
matchesShortcut(getActiveKey('sidebarToggle')) branch only require !isInEditor
&& !isInInput before calling updatePanelVisibility (keep the existing
updatePanelVisibility, isSidebarVisible and toast error handling unchanged), and
leave any separate, hardcoded file-explorer toggle logic that needs isInTerminal
intact.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@src/renderer/layouts/WorkspaceLayout.tsx`:
- Around line 881-888: The FileExplorer is mounted whenever isExplorerVisible is
true, which can display a previous project's tree after activeProject is removed
because the root-path sync only sets when activeProject?.path is a string and
never clears it; update the render condition to also check that
activeProject?.path is a non-empty string (or that activeProject is truthy)
before rendering FileExplorer (i.e., change the conditional around <FileExplorer
/> to require both isExplorerVisible and activeProject/path), and also adjust
the root-path sync logic that reads activeProject?.path to explicitly clear the
explorer root when activeProject becomes null so FileExplorer and any
PaneDndProvider state are not left showing stale data.

---

Duplicate comments:
In `@src/renderer/layouts/WorkspaceLayout.tsx`:
- Around line 444-453: The current handler prevents the configurable
sidebarToggle from firing when focus is in xterm because it checks
!isInTerminal; remove the terminal check from this condition so the shortcut can
run while terminal-focused—i.e., in the
matchesShortcut(getActiveKey('sidebarToggle')) branch only require !isInEditor
&& !isInInput before calling updatePanelVisibility (keep the existing
updatePanelVisibility, isSidebarVisible and toast error handling unchanged), and
leave any separate, hardcoded file-explorer toggle logic that needs isInTerminal
intact.

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 72ac31ca-e0fe-4c9d-a070-dcf18b36a357

📥 Commits

Reviewing files that changed from the base of the PR and between 244f570 and 9faf9d0.

📒 Files selected for processing (4)
  • src/renderer/components/ProjectSidebar.tsx
  • src/renderer/components/ui/context-menu.tsx
  • src/renderer/components/ui/tabs.tsx
  • src/renderer/layouts/WorkspaceLayout.tsx
🚧 Files skipped from review as they are similar to previous changes (3)
  • src/renderer/components/ui/tabs.tsx
  • src/renderer/components/ProjectSidebar.tsx
  • src/renderer/components/ui/context-menu.tsx

gnoviawan and others added 2 commits March 12, 2026 11:23
…le in terminal

- Clear explorer root path when activeProject becomes null
- Guard FileExplorer render on activeProject?.path being truthy
- Remove isInTerminal check from configurable sidebarToggle shortcut

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…ect button

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
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

🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@src/renderer/layouts/WorkspaceLayout.tsx`:
- Around line 125-132: The code treats only non-strings as a teardown, allowing
an empty string path to fall through and call watchDirectory('') while leaving
watchedRootPathRef.current and prevProjectIdRef.current in a state that can leak
watchers or block re-init; change the guard around nextRootPathCandidate to
require a non-empty string (e.g. if (!activeProject || typeof
nextRootPathCandidate !== 'string' || nextRootPathCandidate === '') ), and in
that branch clear the explorer root via
useFileExplorerStore.getState().setRootPath(''), stop/remove/reset any existing
watcher state by clearing watchedRootPathRef.current (and calling whatever
unwatch/cleanup is appropriate), set prevProjectIdRef.current = activeProjectId,
and return so watchDirectory is only invoked when nextRootPathCandidate is a
non-empty path and different from watchedRootPathRef.current.

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: a4f3d0d8-39e0-4cf5-9882-55444e0b11ba

📥 Commits

Reviewing files that changed from the base of the PR and between 9faf9d0 and dfdaba8.

📒 Files selected for processing (1)
  • src/renderer/layouts/WorkspaceLayout.tsx

…e watcher

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@gnoviawan gnoviawan merged commit f66cf47 into dev Mar 12, 2026
6 checks passed
gnoviawan added a commit that referenced this pull request Mar 12, 2026
Three issues prevented tab DnD from working:

1. Tauri's dragDropEnabled defaults to true, which intercepts all drag
   events at the native WebView2 level on Windows, preventing HTML5 DnD
   events from reaching the DOM. Set to false in tauri.conf.json.

2. PR #75 split PaneDndProvider into two separate instances (one for
   PaneRenderer, one for FileExplorer), so isDragging state set in one
   provider was invisible to children of the other. Reunified into a
   single provider wrapping both.

3. The tab bar container div lacked an onDragOver handler, causing the
   browser to show a no-drop cursor when dragging over gaps between tabs.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
gnoviawan added a commit that referenced this pull request Mar 12, 2026
Three issues prevented tab DnD from working:

1. Tauri's dragDropEnabled defaults to true, which intercepts all drag
   events at the native WebView2 level on Windows, preventing HTML5 DnD
   events from reaching the DOM. Set to false in tauri.conf.json.

2. PR #75 split PaneDndProvider into two separate instances (one for
   PaneRenderer, one for FileExplorer), so isDragging state set in one
   provider was invisible to children of the other. Reunified into a
   single provider wrapping both.

3. The tab bar container div lacked an onDragOver handler, causing the
   browser to show a no-drop cursor when dragging over gaps between tabs.

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
This was referenced Mar 12, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

phase-1 Phase 1: Stability & Polish (v0.3.1) v0.3.1

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant