Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
54 commits
Select commit Hold shift + click to select a range
5048591
feat: add widget rules engine for conditional property overrides
hangie Mar 23, 2026
1c2c8b6
feat: add string equals/isEmpty operators and use text labels for all…
hangie Mar 23, 2026
08ead81
feat: add editorMode state and Tab toggle to ItemsEditor
hangie Mar 23, 2026
ace87d3
fix: auto-reset color mode when navigating to a widget that doesn't s…
hangie Mar 23, 2026
bc0cf98
feat: route keyboard input to handleColorInput in color mode
hangie Mar 23, 2026
4878db4
refactor: deduplicate onUpdate closure and simplify ESC handling in c…
hangie Mar 23, 2026
44e2ceb
feat: add color mode rendering to ItemsEditor
hangie Mar 23, 2026
edce820
feat: make ItemsEditor help text mode-aware for color mode
hangie Mar 23, 2026
6b7782f
feat: remove Edit Colors from main menu (Task 2.1)
hangie Mar 23, 2026
511e97b
refactor: remove dead colorLines and colors screen states from App.tsx
hangie Mar 23, 2026
5e967b1
feat: remove ColorMenu component and color-menu mutations
hangie Mar 23, 2026
bae3b0a
chore: update stale ColorMenu references in comments
hangie Mar 23, 2026
d0fa508
feat: extract rule-level input handlers and formatting into rules-edi…
hangie Mar 23, 2026
a903918
feat: add rule color, move, add/delete, and editor complete handlers
hangie Mar 23, 2026
5c76a03
feat: add rule-level state and toggle x key to accordion expansion
hangie Mar 23, 2026
49bc629
feat: add rule-level input routing in ItemsEditor useInput handler
hangie Mar 23, 2026
575af3b
feat: add accordion rendering for expanded rules in widget list
hangie Mar 23, 2026
c1f9b5a
feat: add rule-level help text, title bar updates, and color info dis…
hangie Mar 23, 2026
9e06f89
feat: wire ConditionEditor overlay at rule property level in ItemsEditor
hangie Mar 23, 2026
473552f
refactor: delete RulesEditor.tsx, update stale comments
hangie Mar 23, 2026
b05d4ea
feat: wrap ↑↓ navigation at both widget and rule levels
hangie Mar 23, 2026
1cbfe7a
feat: move type picker to move mode, use ←→ for rules expand/collapse
hangie Mar 23, 2026
a0b1d06
feat: update help text for relocated arrow key bindings
hangie Mar 23, 2026
15fe920
feat: show placeholder when expanded widget has no rules
hangie Mar 23, 2026
5846356
feat: relocate condition editor trigger from rule property mode to mo…
hangie Mar 23, 2026
82d6c7b
feat: relocate ←→ edit condition hint to rule move mode help text
hangie Mar 23, 2026
0c36963
feat: add ←→ arrow key navigation to LineSelector
hangie Mar 23, 2026
e2ff8b3
feat: add ← back-navigation from widget level in items editor
hangie Mar 23, 2026
95cf795
feat: update List component with wrap navigation, arrow key aliases
hangie Mar 23, 2026
567ea56
refactor(LineSelector): remove redundant ←→ handlers, wire onBack to …
hangie Mar 23, 2026
b76c769
feat: wire onBack to List in all sub-screens for ← arrow navigation
hangie Mar 23, 2026
cc86aa9
feat: add ← as back-navigation key to GlobalOverridesMenu and Powerli…
hangie Mar 23, 2026
01bfa77
refactor: remove redundant showBackButton and back value handlers
hangie Mar 23, 2026
3f9252d
feat: add confirmation dialog when exiting with unsaved changes
hangie Mar 23, 2026
35e8f8e
feat: move condition editor trigger from rule move mode ←→ to rule pr…
hangie Mar 23, 2026
dab33af
feat: update rule-level help text in ItemsEditor
hangie Mar 23, 2026
b2cd8b7
feat: refactor PowerlineSeparatorEditor to use Enter/focus mode for e…
hangie Mar 23, 2026
52f63ba
refactor: normalize keybind matching to lowercase across TUI screens
hangie Mar 23, 2026
e1976a4
fix: change "Enter to move" to "Enter to edit" in ItemsEditor help text
hangie Mar 23, 2026
258efd4
feat: add value parser utilities with comprehensive tests
hangie Apr 14, 2026
eecd7d6
feat: replace getNumericValue with getValueType and getValue in Widge…
hangie Apr 14, 2026
b8ee27d
feat: add getValue to context and token widgets
hangie Apr 15, 2026
bd64a9c
fix: re-remove dead gitData field from RenderContext
hangie Apr 15, 2026
2940556
feat: implement getValue on number widgets (cost, speed, terminal width)
hangie Apr 15, 2026
0e1887e
feat: implement getValue on SessionUsage and WeeklyUsage widgets
hangie Apr 15, 2026
665d963
feat: implement getValue on boolean widgets (GitStaged, GitUnstaged, …
hangie Apr 15, 2026
8a31210
feat: implement getValue on GitConflicts and remove getNumericValue f…
hangie Apr 15, 2026
9dfe18f
refactor: rewrite widget-values.ts to use typed dispatch
hangie Apr 15, 2026
482d433
fix: update rules-engine tests for typed widget values
hangie Apr 15, 2026
cceae40
fix: clarify preview mock data comments in StatusLinePreview
hangie Apr 15, 2026
f9c1a91
fix: remove gitData references re-introduced by subagent
hangie Apr 15, 2026
25171b3
feat: filter condition editor operators by widget value type
hangie Apr 15, 2026
7958137
fix: merge duplicate Settings imports and replace partial git-remote …
hangie Apr 15, 2026
79869c6
fix: resolve lint errors from subagent code style violations
hangie Apr 15, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .superpowers/brainstorm/1885621-1774257922/.server-info
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{"type":"server-started","port":63636,"host":"127.0.0.1","url_host":"localhost","url":"http://localhost:63636","screen_dir":"/home/mark/GitHub/ccstatusline-wtree/feat/unified-editing/.superpowers/brainstorm/1885621-1774257922"}
62 changes: 62 additions & 0 deletions .superpowers/brainstorm/1885621-1774257922/accordion-models.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
<h2>Accordion Rules: How should expanded rules look?</h2>
<p class="subtitle">When you press a key on a widget, its rules expand inline below it. But how much detail should each rule show?</p>

<div class="options">
<div class="option" data-choice="a" onclick="toggleSelect(this)">
<div class="letter">A</div>
<div class="content">
<h3>Compact: Condition + Color Preview Only</h3>
<div class="mockup">
<div class="mockup-header">ItemsEditor - Compact Rules</div>
<div class="mockup-body" style="font-family: monospace; font-size: 13px; line-height: 1.6; background: #1a1a2e; color: #e0e0e0; padding: 16px;">
<div style="color: #888; margin-bottom: 8px;">Edit Line 1</div>
<div><span style="color: #4ade80;">&#9654; </span><span style="color: #4ade80;">1. Model</span> <span style="color: #888;">[cyan]</span></div>
<div style="padding-left: 24px; color: #888;">&#9656; when &gt;50 <span style="color: #ef4444;">&#9632; red</span></div>
<div style="padding-left: 24px; color: #888;">&#9656; when &gt;80 <span style="color: #ef4444;">&#9632; red, bold</span> (hidden)</div>
<div><span> </span>2. GitBranch <span style="color: #888;">[green]</span></div>
<div><span> </span>3. TokensTotal <span style="color: #888;">[white] (2 rules)</span></div>
</div>
</div>
<p>Each rule is one short line. Condition summary + color swatch + key overrides. Quick to scan. Less info but less clutter.</p>
</div>
</div>

<div class="option" data-choice="b" onclick="toggleSelect(this)">
<div class="letter">B</div>
<div class="content">
<h3>Detailed: Full Condition + All Properties</h3>
<div class="mockup">
<div class="mockup-header">ItemsEditor - Detailed Rules</div>
<div class="mockup-body" style="font-family: monospace; font-size: 13px; line-height: 1.6; background: #1a1a2e; color: #e0e0e0; padding: 16px;">
<div style="color: #888; margin-bottom: 8px;">Edit Line 1</div>
<div><span style="color: #4ade80;">&#9654; </span><span style="color: #4ade80;">1. Model</span> <span style="color: #888;">[cyan]</span></div>
<div style="padding-left: 24px; color: #888;">&#9656; 1. <span style="color: #ef4444;">Model</span> (when self greaterThan 50) <span style="color: #888;">(raw value)</span></div>
<div style="padding-left: 24px; color: #888;">&#9656; 2. <span style="color: #ef4444; font-weight: bold;">Model</span> (when self greaterThan 80) (stop) (hidden)</div>
<div><span> </span>2. GitBranch <span style="color: #888;">[green]</span></div>
<div><span> </span>3. TokensTotal <span style="color: #888;">[white] (2 rules)</span></div>
</div>
</div>
<p>Mirrors current RulesEditor display: styled widget name + full condition text + all property overrides. More info but takes more space.</p>
</div>
</div>

<div class="option" data-choice="c" onclick="toggleSelect(this)">
<div class="letter">C</div>
<div class="content">
<h3>Hybrid: Compact by default, expand selected rule</h3>
<div class="mockup">
<div class="mockup-header">ItemsEditor - Hybrid Rules</div>
<div class="mockup-body" style="font-family: monospace; font-size: 13px; line-height: 1.6; background: #1a1a2e; color: #e0e0e0; padding: 16px;">
<div style="color: #888; margin-bottom: 8px;">Edit Line 1</div>
<div><span style="color: #4ade80;">&#9654; </span><span style="color: #4ade80;">1. Model</span> <span style="color: #888;">[cyan]</span></div>
<div style="padding-left: 24px; color: #888;"> &#9656; when &gt;50 <span style="color: #ef4444;">&#9632; red</span></div>
<div style="padding-left: 24px;"><span style="color: #d946ef;"> &#9654;</span> <span style="color: #ef4444; font-weight: bold;">Model</span> <span style="color: #888;">(when self greaterThan 80) (stop) (hidden)</span></div>
<div style="padding-left: 24px; color: #d946ef; font-size: 12px;"> &#8593;&#8595; select, &#8592;&#8594; edit condition, Tab: color mode, (s)top, (h)ide</div>
<div><span> </span>2. GitBranch <span style="color: #888;">[green]</span></div>
<div><span> </span>3. TokensTotal <span style="color: #888;">[white] (2 rules)</span></div>
</div>
</div>
<p>Unselected rules show compact view. The selected rule shows full detail + inline help text. Best of both: scannable list, detailed editing.</p>
</div>
</div>
</div>
96 changes: 96 additions & 0 deletions .superpowers/brainstorm/1885621-1774257922/full-design-v2.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,96 @@
<h2>Accordion Rules Editor: Full Design (v2)</h2>
<p class="subtitle">Fixed: Selection arrow stays in a fixed column. Indented rules have their own arrow column.</p>

<div class="section">
<h3>1. Normal Widget View (no rules expanded)</h3>
<div class="mockup">
<div class="mockup-header">Edit Line 1</div>
<div class="mockup-body" style="font-family: monospace; font-size: 13px; line-height: 1.7; background: #1a1a2e; color: #e0e0e0; padding: 16px;">
<div style="color: #888; margin-bottom: 4px;">&uarr;&darr; select, &larr;&rarr; type picker, (a)dd, (d)elete, (x) rules, Tab: color mode, ESC: back</div>
<div><span style="color: #4ade80;">&#9654; </span><span style="color: #4ade80;">1. Model</span> <span style="color: #888;">[cyan] (2 rules)</span></div>
<div><span style="color: #888;"> </span> 2. GitBranch <span style="color: #888;">[green]</span></div>
<div><span style="color: #888;"> </span> 3. TokensTotal <span style="color: #888;">[white] (1 rule)</span></div>
<div><span style="color: #888;"> </span> 4. Separator |</div>
<div><span style="color: #888;"> </span> 5. SessionCost <span style="color: #888;">[yellow]</span></div>
</div>
</div>
<p>&uarr;&darr; navigates widgets. Arrow column is fixed at left edge.</p>
</div>

<div class="section">
<h3>2. Press <code>x</code> &mdash; Rules expand, focus shifts into rules</h3>
<div class="mockup">
<div class="mockup-header">Edit Line 1 &mdash; Rules for Model</div>
<div class="mockup-body" style="font-family: monospace; font-size: 13px; line-height: 1.7; background: #1a1a2e; color: #e0e0e0; padding: 16px;">
<div style="color: #888; margin-bottom: 4px;">&uarr;&darr; select, &larr;&rarr; edit condition, (a)dd, (d)elete, (s)top, (h)ide, Tab: color mode, ESC: collapse</div>
<div><span style="color: #888;"> </span> 1. Model <span style="color: #666;">[cyan]</span></div>
<div><span style="color: #888;"> </span> <span style="color: #4ade80;">&#9654; </span>1. <span style="color: #ef4444;">Model</span> <span style="color: #888;">(when self &gt; 50) (raw value)</span></div>
<div><span style="color: #888;"> </span> <span style="color: #888;"> </span> 2. <span style="color: #ef4444; font-weight: bold;">Model</span> <span style="color: #888;">(when self &gt; 80) (stop) (hidden)</span></div>
<div><span style="color: #888;"> </span> 2. GitBranch <span style="color: #888;">[green]</span></div>
<div><span style="color: #888;"> </span> 3. TokensTotal <span style="color: #888;">[white] (1 rule)</span></div>
</div>
</div>
<p>Rules are permanently indented under the parent widget. The rule arrow column is offset from the widget arrow column. The parent widget loses its arrow (no longer selected). &uarr;&darr; navigates rules only.</p>
</div>

<div class="section">
<h3>3. Navigating to rule 2</h3>
<div class="mockup">
<div class="mockup-header">Edit Line 1 &mdash; Rules for Model</div>
<div class="mockup-body" style="font-family: monospace; font-size: 13px; line-height: 1.7; background: #1a1a2e; color: #e0e0e0; padding: 16px;">
<div style="color: #888; margin-bottom: 4px;">&uarr;&darr; select, &larr;&rarr; edit condition, (a)dd, (d)elete, (s)top, (h)ide, Tab: color mode, ESC: collapse</div>
<div><span style="color: #888;"> </span> 1. Model <span style="color: #666;">[cyan]</span></div>
<div><span style="color: #888;"> </span> <span style="color: #888;"> </span> 1. <span style="color: #ef4444;">Model</span> <span style="color: #888;">(when self &gt; 50) (raw value)</span></div>
<div><span style="color: #888;"> </span> <span style="color: #4ade80;">&#9654; </span>2. <span style="color: #ef4444; font-weight: bold;">Model</span> <span style="color: #888;">(when self &gt; 80) (stop) (hidden)</span></div>
<div><span style="color: #888;"> </span> 2. GitBranch <span style="color: #888;">[green]</span></div>
<div><span style="color: #888;"> </span> 3. TokensTotal <span style="color: #888;">[white] (1 rule)</span></div>
</div>
</div>
<p>Arrow moves down to rule 2. Nothing else shifts. The indentation is fixed &mdash; only the arrow position changes.</p>
</div>

<div class="section">
<h3>4. Tab to color mode (on rule 2)</h3>
<div class="mockup">
<div class="mockup-header">Edit Line 1 &mdash; Rules for Model <span style="color: #d946ef;">[COLOR MODE - FOREGROUND]</span></div>
<div class="mockup-body" style="font-family: monospace; font-size: 13px; line-height: 1.7; background: #1a1a2e; color: #e0e0e0; padding: 16px;">
<div style="color: #888; margin-bottom: 4px;">&larr;&rarr; cycle foreground, (f) bg/fg, (b)old, (r)eset, Tab: property mode, ESC: property mode</div>
<div style="color: #888; margin-bottom: 4px;">Current foreground (3/16): <span style="color: #ef4444;">Red</span></div>
<div><span style="color: #888;"> </span> 1. Model <span style="color: #666;">[cyan]</span></div>
<div><span style="color: #888;"> </span> <span style="color: #888;"> </span> 1. <span style="color: #ef4444;">Model</span> <span style="color: #888;">(when self &gt; 50) (raw value)</span></div>
<div><span style="color: #888;"> </span> <span style="color: #d946ef;">&#9654; </span>2. <span style="color: #ef4444; font-weight: bold;">Model</span> <span style="color: #888;">(when self &gt; 80) (stop) (hidden)</span></div>
<div><span style="color: #888;"> </span> 2. GitBranch <span style="color: #888;">[green]</span></div>
</div>
</div>
<p>Magenta arrow for color mode. Color info shown. Everything else stays put.</p>
</div>

<div class="section">
<h3>5. ESC Layering</h3>
<div class="mockup">
<div class="mockup-header">Navigation Stack</div>
<div class="mockup-body" style="font-family: monospace; font-size: 14px; line-height: 2.2; background: #1a1a2e; color: #e0e0e0; padding: 16px;">
<div>Rule color mode &nbsp;&nbsp;&nbsp;<span style="color: #f59e0b;">&rarr; ESC &rarr;</span>&nbsp;&nbsp; Rule property mode</div>
<div>Rule property mode &nbsp;<span style="color: #f59e0b;">&rarr; ESC &rarr;</span>&nbsp;&nbsp; Collapse rules (widget level)</div>
<div>Widget color mode &nbsp;&nbsp;<span style="color: #f59e0b;">&rarr; ESC &rarr;</span>&nbsp;&nbsp; Widget items mode</div>
<div>Widget items mode &nbsp;&nbsp;<span style="color: #f59e0b;">&rarr; ESC &rarr;</span>&nbsp;&nbsp; Line Selector</div>
</div>
</div>
</div>

<div class="options">
<div class="option" data-choice="approve" onclick="toggleSelect(this)">
<div class="letter">&#10003;</div>
<div class="content">
<h3>Design looks correct</h3>
<p>Ready to write up as a spec</p>
</div>
</div>
<div class="option" data-choice="revise" onclick="toggleSelect(this)">
<div class="letter">&#9998;</div>
<div class="content">
<h3>Needs changes</h3>
<p>I'll describe what to adjust in the terminal</p>
</div>
</div>
</div>
Loading