@danypops/pi-packed 0.19.3 → 0.19.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -10,7 +10,7 @@ The extension connects to Packed's authenticated user daemon and starts the pack
10
10
 
11
11
  ## Commands
12
12
 
13
- - `/packed` -- one floating overlay, four tabs (Packages/Find/Config/Settings), always shown in a persistent tab bar at the top: the focused tab is real reverse-video (guaranteed visible contrast on any theme, unlike a specific configured background color), unfocused tabs show only a foreground color, and each label's own first letter is highlighted as its mnemonic on both. `Tab`/`Shift-Tab` (or `←`/`→`) sweep between them -- recognized under legacy CSI, xterm's modifyOtherKeys, and the Kitty keyboard protocol alike, not just one hardcoded encoding; from any tab other than Packages, `p`/`f`/`c`/`s` also jump straight to the matching one (never stolen while that tab's own filter/query box is capturing text). `Esc` returns to Packages from anywhere else, or closes the panel from Packages itself. Every approval and reload confirmation, on any tab, renders inline on this same panel (`y`/`n` keys), never a separate popup or native dialog. A standing test (`keymap.test.ts`, using Malevich's tree-style `findMnemonicConflicts`) verifies no two actions genuinely reachable at once share a key.
13
+ - `/packed` -- one floating overlay, four tabs (Packages/Find/Config/Settings), always shown in a persistent tab bar at the top: the focused tab shows the theme's own selectedBg color as a real background, unfocused tabs show only a foreground color with their own first letter highlighted as a jump mnemonic (the focused tab needs no mnemonic -- there's nothing to jump to when you're already there). `Tab`/`Shift-Tab` (or `←`/`→`) sweep between them -- recognized under legacy CSI, xterm's modifyOtherKeys, and the Kitty keyboard protocol alike, not just one hardcoded encoding; from any tab other than Packages, `p`/`f`/`c`/`s` also jump straight to the matching one (never stolen while that tab's own filter/query box is capturing text). `Esc` returns to Packages from anywhere else, or closes the panel from Packages itself. Every approval and reload confirmation, on any tab, renders inline on this same panel (`y`/`n` keys), never a separate popup or native dialog. A standing test (`keymap.test.ts`, using Malevich's tree-style `findMnemonicConflicts`) verifies no two actions genuinely reachable at once share a key.
14
14
  - **Packages** (the default tab) -- every installed Pi package, with update availability. Mnemonics follow lazy.nvim's own convention (uppercase acts on every row, lowercase on the one under the cursor):
15
15
  - `u` / `U` -- update the selected package / update every outdated package, one combined confirmation and one reload. `U` shows a spinner inline next to the package currently updating, settling into a real ✓ or ✗ plus a short tail of that update's own captured output once it finishes -- the list stays visible throughout, nothing swaps to a separate screen. A reload is confirmed separately from the update itself -- decline it to defer: the update already happened, only picking it up in this Pi session is deferred until `/reload`.
16
16
  - `x` -- remove the selected package.
@@ -31,14 +31,19 @@ export function dialogTheme(theme: Theme): DialogTheme {
31
31
  * overlay, replacing what used to be four separately-opened screens. */
32
32
  export function tabBarTheme(theme: Theme): TabBarTheme {
33
33
  return {
34
- // Matches pi-tickets' own TabMenu convention (tab/activeTab, same
35
- // reverse-video choice) rather than inventing a new one: real ANSI
36
- // reverse-video for the focused tab, since a theme's own selectedBg
37
- // can be too close in luminance to the surrounding UI to read as a
38
- // highlight at all -- reverse video swaps whatever foreground and
39
- // background are already in effect, guaranteeing contrast on any theme.
34
+ // Real bug, reported live: theme.inverse() swaps whatever
35
+ // foreground/background happen to be ambient at that point in the
36
+ // ANSI stream, not a specific color -- and Envelope wraps a whole
37
+ // content line (including this tab bar) in one continuous border-color
38
+ // span with no reset until the line's end, so which tab is active
39
+ // changed what "ambient" meant (blue when Packages was first on the
40
+ // line and nothing had reset yet, white once an earlier inactive tab's
41
+ // own fg reset already cleared it). An explicit theme.bg() always
42
+ // overwrites rather than swaps, so it's immune to that -- matches
43
+ // Pi's own core session-selector.js, which highlights its selected
44
+ // line the same way.
40
45
  tab: (s) => theme.fg("dim", s),
41
- activeTab: (s) => theme.inverse(s),
46
+ activeTab: (s) => theme.bg("selectedBg", s),
42
47
  // Every tab's first letter is a jump mnemonic (p/f/c/s) -- a distinct
43
48
  // warning-colored bold, so it reads as "press this letter" on both the
44
49
  // active and inactive tabs alike, not just whichever style tab/activeTab
@@ -865,14 +865,13 @@ function renderUnifiedPanel(
865
865
  tui.requestRender();
866
866
  },
867
867
  };
868
- // row is a real percentage of terminal height (0%=top, 100%=bottom) --
869
- // unlike anchor:"top-center"+offsetY (a fixed row count, effectively
870
- // pinned to the very top on any terminal size), this scales with the
871
- // actual screen. anchor:"center" still governs horizontal centering
872
- // (row overrides only the vertical resolution). Note this isn't fully
873
- // content-height-independent -- pi-tui's own row-percentage formula
874
- // interpolates over the range of positions that still fit the current
875
- // content height, so a shorter/taller row count shifts this somewhat;
876
- // only exactly 0%/100% are perfectly jitter-free in that library.
877
- }, { overlay: true, overlayOptions: { width: "70%", maxHeight: "70%", anchor: "center", row: "40%" } });
868
+ // Pinned to the very top (anchor:"top-center"+offsetY:1 -- a fixed row
869
+ // count regardless of terminal size), not row:"40%". The percentage
870
+ // positioning was tried instead but reverted: pi-tui's row-percentage
871
+ // formula interpolates over the range of positions that still fit the
872
+ // CURRENT content height, so the panel visibly jittered up and down
873
+ // every time a tab with a different content height (Packages' table vs.
874
+ // Config's shorter list) became active. A fixed top offset keeps the
875
+ // header pinned in place and only the footer moves as content grows.
876
+ }, { overlay: true, overlayOptions: { width: "70%", maxHeight: "70%", anchor: "top-center", offsetY: 1 } });
878
877
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@danypops/pi-packed",
3
- "version": "0.19.3",
3
+ "version": "0.19.5",
4
4
  "description": "Pi package tools, commands, profiles, and TUI for the Packed daemon",
5
5
  "type": "module",
6
6
  "keywords": ["pi-package"],