@agimon-ai/doompi-ui 0.0.1-alpha.22 → 0.0.1-alpha.24
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 +2 -0
- package/dist/components/matrixPicker.cjs +1 -0
- package/dist/components/matrixPicker.d.cts +2 -0
- package/dist/components/matrixPicker.d.mts +2 -0
- package/dist/components/matrixPicker.mjs +1 -0
- package/dist/tui/doomEditor.d.mts +2 -2
- package/dist/tui/doomEditor.d.mts.map +1 -1
- package/dist/tui/matrixPicker.cjs +2 -0
- package/dist/tui/matrixPicker.cjs.map +1 -0
- package/dist/tui/matrixPicker.d.cts +54 -0
- package/dist/tui/matrixPicker.d.cts.map +1 -0
- package/dist/tui/matrixPicker.d.mts +54 -0
- package/dist/tui/matrixPicker.d.mts.map +1 -0
- package/dist/tui/matrixPicker.mjs +2 -0
- package/dist/tui/matrixPicker.mjs.map +1 -0
- package/package.json +15 -5
package/README.md
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../tui/matrixPicker.cjs");exports.MatrixPickerComponent=e.MatrixPickerComponent,exports.markItems=e.markItems,exports.toggleValue=e.toggleValue,exports.visibleValues=e.visibleValues;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{MatrixPickerComponent as e,markItems as t,toggleValue as n,visibleValues as r}from"../tui/matrixPicker.mjs";export{e as MatrixPickerComponent,t as markItems,n as toggleValue,r as visibleValues};
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { DoomLeaderRegistry } from "../services/leader/leaderRegistry.mjs";
|
|
2
2
|
import { DoomUiState, LeaderSnapshot } from "../services/state/uiState.mjs";
|
|
3
3
|
import { EditorOptions, EditorTheme, TUI } from "@earendil-works/pi-tui";
|
|
4
|
-
import { CustomEditor, KeybindingsManager, Theme } from "@earendil-works/pi-coding-agent";
|
|
4
|
+
import { CustomEditor, KeybindingsManager as KeybindingsManager$1, Theme } from "@earendil-works/pi-coding-agent";
|
|
5
5
|
//#region src/tui/doomEditor.d.ts
|
|
6
6
|
interface DoomEditorLeaderOptions {
|
|
7
7
|
/** Overrides the harness major mode shown while the leader is inactive. */
|
|
@@ -28,7 +28,7 @@ declare class DoomEditor extends CustomEditor {
|
|
|
28
28
|
private readonly unsubscribeUiState;
|
|
29
29
|
private leaderActive;
|
|
30
30
|
private leaderPath;
|
|
31
|
-
constructor(tui: TUI, editorTheme: EditorTheme, keybindings: KeybindingsManager, uiState: DoomUiState, onSnapshot: SnapshotHandler, options?: EditorOptions, chromeTheme?: ChromeTheme, leaderOptions?: DoomEditorLeaderOptions);
|
|
31
|
+
constructor(tui: TUI, editorTheme: EditorTheme, keybindings: KeybindingsManager$1, uiState: DoomUiState, onSnapshot: SnapshotHandler, options?: EditorOptions, chromeTheme?: ChromeTheme, leaderOptions?: DoomEditorLeaderOptions);
|
|
32
32
|
handleInput(data: string): void;
|
|
33
33
|
render(width: number): string[];
|
|
34
34
|
dispose(): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"doomEditor.d.mts","names":[],"sources":["../../src/tui/doomEditor.ts"],"mappings":";;;;;UAOiB;;EAEf;EACA,WAAW;EACX,sBAAsB;EACtB,wBAAwB;EACxB,uBAAuB;EACvB,kBAAkB,gBAAgB;;KAG/B,mBAAmB,UAAU;KAC7B,cAAc,KAAK;cAoCX,mBAAmB;mBAiBX;mBACA;mBAjBF;mBACA;mBACA;mBACA;mBACA;mBACA;mBACA;mBACA;mBACA;UACT;UACA;EAGN,YAAA,KAAK,KACL,aAAa,aACb,aAAa,
|
|
1
|
+
{"version":3,"file":"doomEditor.d.mts","names":[],"sources":["../../src/tui/doomEditor.ts"],"mappings":";;;;;UAOiB;;EAEf;EACA,WAAW;EACX,sBAAsB;EACtB,wBAAwB;EACxB,uBAAuB;EACvB,kBAAkB,gBAAgB;;KAG/B,mBAAmB,UAAU;KAC7B,cAAc,KAAK;cAoCX,mBAAmB;mBAiBX;mBACA;mBAjBF;mBACA;mBACA;mBACA;mBACA;mBACA;mBACA;mBACA;mBACA;UACT;UACA;EAGN,YAAA,KAAK,KACL,aAAa,aACb,aAAa,sBACI,SAAS,aACT,YAAY,iBAC7B,UAAU,eACV,cAAa,aACb,gBAAe;EAkBjB,YAAY;EAgBZ,OAAO;EA4CP;UAMQ;UAMA;UAMA;UAsCA;UAIA;UAyBA;UAMA;UAsBA;UAeA;UAKA;;;;;;;;;;;UAgBA;UAQA;UAMA;UAMA;UAMA"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
let e=require("@earendil-works/pi-tui");function t(e){return{selectedPrefix:t=>e.fg(`accent`,t),selectedText:t=>e.bg(`selectedBg`,e.fg(`text`,t)),description:t=>e.fg(`dim`,t),scrollInfo:t=>e.fg(`muted`,t),noMatch:t=>e.fg(`warning`,t)}}var n=class{theme;constructor(e){this.theme=e}render(e){return e>0?[this.theme.fg(`borderAccent`,`─`.repeat(e))]:[]}invalidate(){}};function r(e,t,n){return n?e.map(e=>({...e,label:`${t.includes(e.value)?`[x]`:`[ ]`} ${e.label}`})):e}function i(e,t){return e.filter(e=>e.value.toLowerCase().startsWith(t.toLowerCase())).map(e=>e.value)}function a(e,t){return e.includes(t)?e.filter(e=>e!==t):[...e,t]}var o=class extends e.Container{filterInput=new e.Input;items;multi;title;theme;keybindings;done;list;selected;cursorValue;settled=!1;constructor(e,t,n,r){super(),this.items=e.items,this.multi=e.multi,this.title=e.title,this.theme=t,this.keybindings=n,this.done=r,this.selected=[...e.selected],this.cursorValue=e.selected[0],this.filterInput.focused=!0,this.filterInput.onEscape=()=>this.settle(void 0),this.list=this.buildList(),this.render_()}buildList(){let n=new e.SelectList(r(this.items,this.selected,this.multi),10,t(this.theme)),a=this.filterInput.getValue();a&&n.setFilter(a);let o=i(this.items,a),s=this.cursorValue?o.indexOf(this.cursorValue):-1;return s>=0&&n.setSelectedIndex(s),n.onSelectionChange=e=>{this.cursorValue=e.value},n.onSelect=e=>this.multi?this.settle(this.selected):this.settle([e.value]),n.onCancel=()=>this.settle(void 0),n}render_(){this.clear(),this.addChild(new n(this.theme)),this.addChild(new e.Spacer(1)),this.addChild(new e.Text(this.theme.fg(`mdHeading`,this.theme.bold(this.title)),1,0)),this.addChild(new e.Spacer(1)),this.addChild(this.filterInput),this.addChild(this.list),this.addChild(new e.Spacer(1)),this.addChild(new e.Text(this.theme.fg(`muted`,this.multi?`↑↓ navigate space toggle enter confirm esc cancel type to filter`:`↑↓ navigate enter select esc cancel type to filter`),1,0)),this.addChild(new e.Spacer(1)),this.addChild(new n(this.theme))}rebuild(){this.list=this.buildList(),this.render_()}settle(e){this.settled||(this.settled=!0,this.done(e))}handleInput(e){if(this.multi&&e===` `){let e=this.list.getSelectedItem();e&&(this.selected=a(this.selected,e.value),this.cursorValue=e.value,this.rebuild());return}if(this.keybindings.matches(e,`tui.select.up`)||this.keybindings.matches(e,`tui.select.down`)||this.keybindings.matches(e,`tui.select.confirm`)||this.keybindings.matches(e,`tui.select.cancel`)){this.list.handleInput(e);return}let t=this.filterInput.getValue();this.filterInput.handleInput(e);let n=this.filterInput.getValue();n!==t&&this.list.setFilter(n)}};exports.MatrixPickerComponent=o,exports.markItems=r,exports.toggleValue=a,exports.visibleValues=i;
|
|
2
|
+
//# sourceMappingURL=matrixPicker.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"matrixPicker.cjs","names":["Container","Input","SelectList","Spacer","Text"],"sources":["../../src/tui/matrixPicker.ts"],"sourcesContent":["import type { Theme } from '@earendil-works/pi-coding-agent';\nimport {\n type Component,\n Container,\n Input,\n type KeybindingsManager,\n type SelectItem,\n SelectList,\n type SelectListTheme,\n Spacer,\n Text,\n} from '@earendil-works/pi-tui';\n\nconst MAX_VISIBLE = 10;\nconst SINGLE_HINT = '↑↓ navigate enter select esc cancel type to filter';\nconst MULTI_HINT = '↑↓ navigate space toggle enter confirm esc cancel type to filter';\nconst SPACE = ' ';\nconst MARK_ON = '[x]';\nconst MARK_OFF = '[ ]';\nconst HORIZONTAL_BORDER = '─';\n\nfunction doomSelectListTheme(theme: Theme): SelectListTheme {\n return {\n selectedPrefix: (text) => theme.fg('accent', text),\n selectedText: (text) => theme.bg('selectedBg', theme.fg('text', text)),\n description: (text) => theme.fg('dim', text),\n scrollInfo: (text) => theme.fg('muted', text),\n noMatch: (text) => theme.fg('warning', text),\n };\n}\n\nclass DoomPickerBorder implements Component {\n constructor(private readonly theme: Theme) {}\n\n render(width: number): string[] {\n return width > 0 ? [this.theme.fg('borderAccent', HORIZONTAL_BORDER.repeat(width))] : [];\n }\n\n invalidate(): void {\n // The host rebuilds the picker when the theme changes.\n }\n}\n\nexport interface MatrixPickerOptions {\n title: string;\n /** Rows with plain labels. Selection markers are added by the component. */\n items: SelectItem[];\n /** Values selected on open. In single mode the first one is the cursor row. */\n selected: string[];\n multi: boolean;\n}\n\n/**\n * Rows carrying their current selection marker.\n *\n * Multi-select only. A single-select list is a button group: the cursor is the\n * selection, so adding checkboxes would show two competing indicators.\n */\nexport function markItems(items: SelectItem[], selected: string[], multi: boolean): SelectItem[] {\n if (!multi) return items;\n return items.map((item) => ({\n ...item,\n label: `${selected.includes(item.value) ? MARK_ON : MARK_OFF} ${item.label}`,\n }));\n}\n\n/** SelectList filters on a value prefix, so the visible rows follow that rule. */\nexport function visibleValues(items: SelectItem[], filter: string): string[] {\n return items.filter((item) => item.value.toLowerCase().startsWith(filter.toLowerCase())).map((item) => item.value);\n}\n\nexport function toggleValue(selected: string[], value: string): string[] {\n return selected.includes(value) ? selected.filter((entry) => entry !== value) : [...selected, value];\n}\n\n/**\n * Filterable picker with preselected rows and optional multi-select.\n *\n * Pi's built-in ui.select() offers none of that: it takes a bare string[], has\n * no filter input, hardcodes selectedIndex = 0 (extension-selector.js:12), and\n * resolves on the first enter. This drives SelectList directly instead.\n */\nexport class MatrixPickerComponent extends Container {\n private readonly filterInput = new Input();\n private readonly items: SelectItem[];\n private readonly multi: boolean;\n private readonly title: string;\n private readonly theme: Theme;\n // Declared and assigned separately, never as parameter properties: Pi loads\n // extensions through Node's strip-only type stripping, which rejects those.\n private readonly keybindings: KeybindingsManager;\n private readonly done: (value: string[] | undefined) => void;\n private list: SelectList;\n private selected: string[];\n private cursorValue: string | undefined;\n private settled = false;\n\n constructor(\n options: MatrixPickerOptions,\n theme: Theme,\n keybindings: KeybindingsManager,\n done: (value: string[] | undefined) => void,\n ) {\n super();\n this.items = options.items;\n this.multi = options.multi;\n this.title = options.title;\n this.theme = theme;\n this.keybindings = keybindings;\n this.done = done;\n this.selected = [...options.selected];\n this.cursorValue = options.selected[0];\n\n // Focus is set here rather than by the TUI, which focuses the component it\n // was handed (this container) and not the input nested inside it.\n this.filterInput.focused = true;\n this.filterInput.onEscape = () => this.settle(undefined);\n\n this.list = this.buildList();\n this.render_();\n }\n\n private buildList(): SelectList {\n const list = new SelectList(\n markItems(this.items, this.selected, this.multi),\n MAX_VISIBLE,\n doomSelectListTheme(this.theme),\n );\n const filter = this.filterInput.getValue();\n if (filter) list.setFilter(filter);\n\n const visible = visibleValues(this.items, filter);\n const index = this.cursorValue ? visible.indexOf(this.cursorValue) : -1;\n if (index >= 0) list.setSelectedIndex(index);\n\n list.onSelectionChange = (item) => {\n this.cursorValue = item.value;\n };\n list.onSelect = (item) => (this.multi ? this.settle(this.selected) : this.settle([item.value]));\n list.onCancel = () => this.settle(undefined);\n return list;\n }\n\n /**\n * SelectList takes its rows at construction and exposes no setter, so a\n * toggled marker means rebuilding the list and the container around it.\n */\n private render_(): void {\n this.clear();\n this.addChild(new DoomPickerBorder(this.theme));\n this.addChild(new Spacer(1));\n this.addChild(new Text(this.theme.fg('mdHeading', this.theme.bold(this.title)), 1, 0));\n this.addChild(new Spacer(1));\n this.addChild(this.filterInput);\n this.addChild(this.list);\n this.addChild(new Spacer(1));\n this.addChild(new Text(this.theme.fg('muted', this.multi ? MULTI_HINT : SINGLE_HINT), 1, 0));\n this.addChild(new Spacer(1));\n this.addChild(new DoomPickerBorder(this.theme));\n }\n\n private rebuild(): void {\n this.list = this.buildList();\n this.render_();\n }\n\n private settle(value: string[] | undefined): void {\n // The list can fire onSelect after a cancel has already resolved, and\n // resolving twice would drop the first answer on the floor.\n if (this.settled) return;\n this.settled = true;\n this.done(value);\n }\n\n handleInput(data: string): void {\n if (this.multi && data === SPACE) {\n const current = this.list.getSelectedItem();\n if (current) {\n this.selected = toggleValue(this.selected, current.value);\n this.cursorValue = current.value;\n this.rebuild();\n }\n return;\n }\n\n // Navigation keys belong to the list, everything else edits the filter, so\n // typing narrows the list without stealing the arrow keys from it.\n const navigational =\n this.keybindings.matches(data, 'tui.select.up') ||\n this.keybindings.matches(data, 'tui.select.down') ||\n this.keybindings.matches(data, 'tui.select.confirm') ||\n this.keybindings.matches(data, 'tui.select.cancel');\n\n if (navigational) {\n this.list.handleInput(data);\n return;\n }\n\n const before = this.filterInput.getValue();\n this.filterInput.handleInput(data);\n const after = this.filterInput.getValue();\n if (after !== before) this.list.setFilter(after);\n }\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { Theme } from "@earendil-works/pi-coding-agent";
|
|
2
|
+
import { Container, KeybindingsManager as KeybindingsManager$1, SelectItem } from "@earendil-works/pi-tui";
|
|
3
|
+
//#region src/tui/matrixPicker.d.ts
|
|
4
|
+
interface MatrixPickerOptions {
|
|
5
|
+
title: string;
|
|
6
|
+
/** Rows with plain labels. Selection markers are added by the component. */
|
|
7
|
+
items: SelectItem[];
|
|
8
|
+
/** Values selected on open. In single mode the first one is the cursor row. */
|
|
9
|
+
selected: string[];
|
|
10
|
+
multi: boolean;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Rows carrying their current selection marker.
|
|
14
|
+
*
|
|
15
|
+
* Multi-select only. A single-select list is a button group: the cursor is the
|
|
16
|
+
* selection, so adding checkboxes would show two competing indicators.
|
|
17
|
+
*/
|
|
18
|
+
declare function markItems(items: SelectItem[], selected: string[], multi: boolean): SelectItem[];
|
|
19
|
+
/** SelectList filters on a value prefix, so the visible rows follow that rule. */
|
|
20
|
+
declare function visibleValues(items: SelectItem[], filter: string): string[];
|
|
21
|
+
declare function toggleValue(selected: string[], value: string): string[];
|
|
22
|
+
/**
|
|
23
|
+
* Filterable picker with preselected rows and optional multi-select.
|
|
24
|
+
*
|
|
25
|
+
* Pi's built-in ui.select() offers none of that: it takes a bare string[], has
|
|
26
|
+
* no filter input, hardcodes selectedIndex = 0 (extension-selector.js:12), and
|
|
27
|
+
* resolves on the first enter. This drives SelectList directly instead.
|
|
28
|
+
*/
|
|
29
|
+
declare class MatrixPickerComponent extends Container {
|
|
30
|
+
private readonly filterInput;
|
|
31
|
+
private readonly items;
|
|
32
|
+
private readonly multi;
|
|
33
|
+
private readonly title;
|
|
34
|
+
private readonly theme;
|
|
35
|
+
private readonly keybindings;
|
|
36
|
+
private readonly done;
|
|
37
|
+
private list;
|
|
38
|
+
private selected;
|
|
39
|
+
private cursorValue;
|
|
40
|
+
private settled;
|
|
41
|
+
constructor(options: MatrixPickerOptions, theme: Theme, keybindings: KeybindingsManager$1, done: (value: string[] | undefined) => void);
|
|
42
|
+
private buildList;
|
|
43
|
+
/**
|
|
44
|
+
* SelectList takes its rows at construction and exposes no setter, so a
|
|
45
|
+
* toggled marker means rebuilding the list and the container around it.
|
|
46
|
+
*/
|
|
47
|
+
private render_;
|
|
48
|
+
private rebuild;
|
|
49
|
+
private settle;
|
|
50
|
+
handleInput(data: string): void;
|
|
51
|
+
}
|
|
52
|
+
//#endregion
|
|
53
|
+
export { MatrixPickerComponent, MatrixPickerOptions, markItems, toggleValue, visibleValues };
|
|
54
|
+
//# sourceMappingURL=matrixPicker.d.cts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"matrixPicker.d.cts","names":[],"sources":["../../src/tui/matrixPicker.ts"],"mappings":";;;UA2CiB;EACf;;EAEA,OAAO;;EAEP;EACA;;;;;;;;iBASc,UAAU,OAAO,cAAc,oBAAoB,iBAAiB;;iBASpE,cAAc,OAAO,cAAc;iBAInC,YAAY,oBAAoB;;;;;;;;cAWnC,8BAA8B;mBACxB;mBACA;mBACA;mBACA;mBACA;mBAGA;mBACA;UACT;UACA;UACA;UACA;EAGN,YAAA,SAAS,qBACT,OAAO,OACP,aAAa,sBACb,OAAO;UAqBD;;;;;UAyBA;UAcA;UAKA;EAQR,YAAY"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { Container, KeybindingsManager, SelectItem } from "@earendil-works/pi-tui";
|
|
2
|
+
import { Theme } from "@earendil-works/pi-coding-agent";
|
|
3
|
+
//#region src/tui/matrixPicker.d.ts
|
|
4
|
+
interface MatrixPickerOptions {
|
|
5
|
+
title: string;
|
|
6
|
+
/** Rows with plain labels. Selection markers are added by the component. */
|
|
7
|
+
items: SelectItem[];
|
|
8
|
+
/** Values selected on open. In single mode the first one is the cursor row. */
|
|
9
|
+
selected: string[];
|
|
10
|
+
multi: boolean;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Rows carrying their current selection marker.
|
|
14
|
+
*
|
|
15
|
+
* Multi-select only. A single-select list is a button group: the cursor is the
|
|
16
|
+
* selection, so adding checkboxes would show two competing indicators.
|
|
17
|
+
*/
|
|
18
|
+
declare function markItems(items: SelectItem[], selected: string[], multi: boolean): SelectItem[];
|
|
19
|
+
/** SelectList filters on a value prefix, so the visible rows follow that rule. */
|
|
20
|
+
declare function visibleValues(items: SelectItem[], filter: string): string[];
|
|
21
|
+
declare function toggleValue(selected: string[], value: string): string[];
|
|
22
|
+
/**
|
|
23
|
+
* Filterable picker with preselected rows and optional multi-select.
|
|
24
|
+
*
|
|
25
|
+
* Pi's built-in ui.select() offers none of that: it takes a bare string[], has
|
|
26
|
+
* no filter input, hardcodes selectedIndex = 0 (extension-selector.js:12), and
|
|
27
|
+
* resolves on the first enter. This drives SelectList directly instead.
|
|
28
|
+
*/
|
|
29
|
+
declare class MatrixPickerComponent extends Container {
|
|
30
|
+
private readonly filterInput;
|
|
31
|
+
private readonly items;
|
|
32
|
+
private readonly multi;
|
|
33
|
+
private readonly title;
|
|
34
|
+
private readonly theme;
|
|
35
|
+
private readonly keybindings;
|
|
36
|
+
private readonly done;
|
|
37
|
+
private list;
|
|
38
|
+
private selected;
|
|
39
|
+
private cursorValue;
|
|
40
|
+
private settled;
|
|
41
|
+
constructor(options: MatrixPickerOptions, theme: Theme, keybindings: KeybindingsManager, done: (value: string[] | undefined) => void);
|
|
42
|
+
private buildList;
|
|
43
|
+
/**
|
|
44
|
+
* SelectList takes its rows at construction and exposes no setter, so a
|
|
45
|
+
* toggled marker means rebuilding the list and the container around it.
|
|
46
|
+
*/
|
|
47
|
+
private render_;
|
|
48
|
+
private rebuild;
|
|
49
|
+
private settle;
|
|
50
|
+
handleInput(data: string): void;
|
|
51
|
+
}
|
|
52
|
+
//#endregion
|
|
53
|
+
export { MatrixPickerComponent, MatrixPickerOptions, markItems, toggleValue, visibleValues };
|
|
54
|
+
//# sourceMappingURL=matrixPicker.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"matrixPicker.d.mts","names":[],"sources":["../../src/tui/matrixPicker.ts"],"mappings":";;;UA2CiB;EACf;;EAEA,OAAO;;EAEP;EACA;;;;;;;;iBASc,UAAU,OAAO,cAAc,oBAAoB,iBAAiB;;iBASpE,cAAc,OAAO,cAAc;iBAInC,YAAY,oBAAoB;;;;;;;;cAWnC,8BAA8B;mBACxB;mBACA;mBACA;mBACA;mBACA;mBAGA;mBACA;UACT;UACA;UACA;UACA;EAGN,YAAA,SAAS,qBACT,OAAO,OACP,aAAa,oBACb,OAAO;UAqBD;;;;;UAyBA;UAcA;UAKA;EAQR,YAAY"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{Container as e,Input as t,SelectList as n,Spacer as r,Text as i}from"@earendil-works/pi-tui";function a(e){return{selectedPrefix:t=>e.fg(`accent`,t),selectedText:t=>e.bg(`selectedBg`,e.fg(`text`,t)),description:t=>e.fg(`dim`,t),scrollInfo:t=>e.fg(`muted`,t),noMatch:t=>e.fg(`warning`,t)}}var o=class{theme;constructor(e){this.theme=e}render(e){return e>0?[this.theme.fg(`borderAccent`,`─`.repeat(e))]:[]}invalidate(){}};function s(e,t,n){return n?e.map(e=>({...e,label:`${t.includes(e.value)?`[x]`:`[ ]`} ${e.label}`})):e}function c(e,t){return e.filter(e=>e.value.toLowerCase().startsWith(t.toLowerCase())).map(e=>e.value)}function l(e,t){return e.includes(t)?e.filter(e=>e!==t):[...e,t]}var u=class extends e{filterInput=new t;items;multi;title;theme;keybindings;done;list;selected;cursorValue;settled=!1;constructor(e,t,n,r){super(),this.items=e.items,this.multi=e.multi,this.title=e.title,this.theme=t,this.keybindings=n,this.done=r,this.selected=[...e.selected],this.cursorValue=e.selected[0],this.filterInput.focused=!0,this.filterInput.onEscape=()=>this.settle(void 0),this.list=this.buildList(),this.render_()}buildList(){let e=new n(s(this.items,this.selected,this.multi),10,a(this.theme)),t=this.filterInput.getValue();t&&e.setFilter(t);let r=c(this.items,t),i=this.cursorValue?r.indexOf(this.cursorValue):-1;return i>=0&&e.setSelectedIndex(i),e.onSelectionChange=e=>{this.cursorValue=e.value},e.onSelect=e=>this.multi?this.settle(this.selected):this.settle([e.value]),e.onCancel=()=>this.settle(void 0),e}render_(){this.clear(),this.addChild(new o(this.theme)),this.addChild(new r(1)),this.addChild(new i(this.theme.fg(`mdHeading`,this.theme.bold(this.title)),1,0)),this.addChild(new r(1)),this.addChild(this.filterInput),this.addChild(this.list),this.addChild(new r(1)),this.addChild(new i(this.theme.fg(`muted`,this.multi?`↑↓ navigate space toggle enter confirm esc cancel type to filter`:`↑↓ navigate enter select esc cancel type to filter`),1,0)),this.addChild(new r(1)),this.addChild(new o(this.theme))}rebuild(){this.list=this.buildList(),this.render_()}settle(e){this.settled||(this.settled=!0,this.done(e))}handleInput(e){if(this.multi&&e===` `){let e=this.list.getSelectedItem();e&&(this.selected=l(this.selected,e.value),this.cursorValue=e.value,this.rebuild());return}if(this.keybindings.matches(e,`tui.select.up`)||this.keybindings.matches(e,`tui.select.down`)||this.keybindings.matches(e,`tui.select.confirm`)||this.keybindings.matches(e,`tui.select.cancel`)){this.list.handleInput(e);return}let t=this.filterInput.getValue();this.filterInput.handleInput(e);let n=this.filterInput.getValue();n!==t&&this.list.setFilter(n)}};export{u as MatrixPickerComponent,s as markItems,l as toggleValue,c as visibleValues};
|
|
2
|
+
//# sourceMappingURL=matrixPicker.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"matrixPicker.mjs","names":[],"sources":["../../src/tui/matrixPicker.ts"],"sourcesContent":["import type { Theme } from '@earendil-works/pi-coding-agent';\nimport {\n type Component,\n Container,\n Input,\n type KeybindingsManager,\n type SelectItem,\n SelectList,\n type SelectListTheme,\n Spacer,\n Text,\n} from '@earendil-works/pi-tui';\n\nconst MAX_VISIBLE = 10;\nconst SINGLE_HINT = '↑↓ navigate enter select esc cancel type to filter';\nconst MULTI_HINT = '↑↓ navigate space toggle enter confirm esc cancel type to filter';\nconst SPACE = ' ';\nconst MARK_ON = '[x]';\nconst MARK_OFF = '[ ]';\nconst HORIZONTAL_BORDER = '─';\n\nfunction doomSelectListTheme(theme: Theme): SelectListTheme {\n return {\n selectedPrefix: (text) => theme.fg('accent', text),\n selectedText: (text) => theme.bg('selectedBg', theme.fg('text', text)),\n description: (text) => theme.fg('dim', text),\n scrollInfo: (text) => theme.fg('muted', text),\n noMatch: (text) => theme.fg('warning', text),\n };\n}\n\nclass DoomPickerBorder implements Component {\n constructor(private readonly theme: Theme) {}\n\n render(width: number): string[] {\n return width > 0 ? [this.theme.fg('borderAccent', HORIZONTAL_BORDER.repeat(width))] : [];\n }\n\n invalidate(): void {\n // The host rebuilds the picker when the theme changes.\n }\n}\n\nexport interface MatrixPickerOptions {\n title: string;\n /** Rows with plain labels. Selection markers are added by the component. */\n items: SelectItem[];\n /** Values selected on open. In single mode the first one is the cursor row. */\n selected: string[];\n multi: boolean;\n}\n\n/**\n * Rows carrying their current selection marker.\n *\n * Multi-select only. A single-select list is a button group: the cursor is the\n * selection, so adding checkboxes would show two competing indicators.\n */\nexport function markItems(items: SelectItem[], selected: string[], multi: boolean): SelectItem[] {\n if (!multi) return items;\n return items.map((item) => ({\n ...item,\n label: `${selected.includes(item.value) ? MARK_ON : MARK_OFF} ${item.label}`,\n }));\n}\n\n/** SelectList filters on a value prefix, so the visible rows follow that rule. */\nexport function visibleValues(items: SelectItem[], filter: string): string[] {\n return items.filter((item) => item.value.toLowerCase().startsWith(filter.toLowerCase())).map((item) => item.value);\n}\n\nexport function toggleValue(selected: string[], value: string): string[] {\n return selected.includes(value) ? selected.filter((entry) => entry !== value) : [...selected, value];\n}\n\n/**\n * Filterable picker with preselected rows and optional multi-select.\n *\n * Pi's built-in ui.select() offers none of that: it takes a bare string[], has\n * no filter input, hardcodes selectedIndex = 0 (extension-selector.js:12), and\n * resolves on the first enter. This drives SelectList directly instead.\n */\nexport class MatrixPickerComponent extends Container {\n private readonly filterInput = new Input();\n private readonly items: SelectItem[];\n private readonly multi: boolean;\n private readonly title: string;\n private readonly theme: Theme;\n // Declared and assigned separately, never as parameter properties: Pi loads\n // extensions through Node's strip-only type stripping, which rejects those.\n private readonly keybindings: KeybindingsManager;\n private readonly done: (value: string[] | undefined) => void;\n private list: SelectList;\n private selected: string[];\n private cursorValue: string | undefined;\n private settled = false;\n\n constructor(\n options: MatrixPickerOptions,\n theme: Theme,\n keybindings: KeybindingsManager,\n done: (value: string[] | undefined) => void,\n ) {\n super();\n this.items = options.items;\n this.multi = options.multi;\n this.title = options.title;\n this.theme = theme;\n this.keybindings = keybindings;\n this.done = done;\n this.selected = [...options.selected];\n this.cursorValue = options.selected[0];\n\n // Focus is set here rather than by the TUI, which focuses the component it\n // was handed (this container) and not the input nested inside it.\n this.filterInput.focused = true;\n this.filterInput.onEscape = () => this.settle(undefined);\n\n this.list = this.buildList();\n this.render_();\n }\n\n private buildList(): SelectList {\n const list = new SelectList(\n markItems(this.items, this.selected, this.multi),\n MAX_VISIBLE,\n doomSelectListTheme(this.theme),\n );\n const filter = this.filterInput.getValue();\n if (filter) list.setFilter(filter);\n\n const visible = visibleValues(this.items, filter);\n const index = this.cursorValue ? visible.indexOf(this.cursorValue) : -1;\n if (index >= 0) list.setSelectedIndex(index);\n\n list.onSelectionChange = (item) => {\n this.cursorValue = item.value;\n };\n list.onSelect = (item) => (this.multi ? this.settle(this.selected) : this.settle([item.value]));\n list.onCancel = () => this.settle(undefined);\n return list;\n }\n\n /**\n * SelectList takes its rows at construction and exposes no setter, so a\n * toggled marker means rebuilding the list and the container around it.\n */\n private render_(): void {\n this.clear();\n this.addChild(new DoomPickerBorder(this.theme));\n this.addChild(new Spacer(1));\n this.addChild(new Text(this.theme.fg('mdHeading', this.theme.bold(this.title)), 1, 0));\n this.addChild(new Spacer(1));\n this.addChild(this.filterInput);\n this.addChild(this.list);\n this.addChild(new Spacer(1));\n this.addChild(new Text(this.theme.fg('muted', this.multi ? MULTI_HINT : SINGLE_HINT), 1, 0));\n this.addChild(new Spacer(1));\n this.addChild(new DoomPickerBorder(this.theme));\n }\n\n private rebuild(): void {\n this.list = this.buildList();\n this.render_();\n }\n\n private settle(value: string[] | undefined): void {\n // The list can fire onSelect after a cancel has already resolved, and\n // resolving twice would drop the first answer on the floor.\n if (this.settled) return;\n this.settled = true;\n this.done(value);\n }\n\n handleInput(data: string): void {\n if (this.multi && data === SPACE) {\n const current = this.list.getSelectedItem();\n if (current) {\n this.selected = toggleValue(this.selected, current.value);\n this.cursorValue = current.value;\n this.rebuild();\n }\n return;\n }\n\n // Navigation keys belong to the list, everything else edits the filter, so\n // typing narrows the list without stealing the arrow keys from it.\n const navigational =\n this.keybindings.matches(data, 'tui.select.up') ||\n this.keybindings.matches(data, 'tui.select.down') ||\n this.keybindings.matches(data, 'tui.select.confirm') ||\n this.keybindings.matches(data, 'tui.select.cancel');\n\n if (navigational) {\n this.list.handleInput(data);\n return;\n }\n\n const before = this.filterInput.getValue();\n this.filterInput.handleInput(data);\n const after = this.filterInput.getValue();\n if (after !== before) this.list.setFilter(after);\n }\n}\n"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,13 +1,18 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@agimon-ai/doompi-ui",
|
|
3
|
-
"version": "0.0.1-alpha.
|
|
4
|
-
"description": "
|
|
3
|
+
"version": "0.0.1-alpha.24",
|
|
4
|
+
"description": "Leader-key menus, themes, and TUI components for DoomPi and Pi extensions.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"ai",
|
|
7
7
|
"coding-agent",
|
|
8
8
|
"developer-tools",
|
|
9
9
|
"doompi",
|
|
10
|
-
"
|
|
10
|
+
"leader-key",
|
|
11
|
+
"pi-extension",
|
|
12
|
+
"pi-package",
|
|
13
|
+
"pi-tui",
|
|
14
|
+
"terminal-ui",
|
|
15
|
+
"tui"
|
|
11
16
|
],
|
|
12
17
|
"homepage": "https://agimon.ai",
|
|
13
18
|
"license": "MIT",
|
|
@@ -56,6 +61,11 @@
|
|
|
56
61
|
"import": "./dist/components/leaderHints.mjs",
|
|
57
62
|
"require": "./dist/components/leaderHints.cjs"
|
|
58
63
|
},
|
|
64
|
+
"./components/matrixPicker": {
|
|
65
|
+
"types": "./dist/components/matrixPicker.d.mts",
|
|
66
|
+
"import": "./dist/components/matrixPicker.mjs",
|
|
67
|
+
"require": "./dist/components/matrixPicker.cjs"
|
|
68
|
+
},
|
|
59
69
|
"./components/toolsOverlay": {
|
|
60
70
|
"types": "./dist/components/toolsOverlay.d.mts",
|
|
61
71
|
"import": "./dist/components/toolsOverlay.mjs",
|
|
@@ -144,8 +154,8 @@
|
|
|
144
154
|
},
|
|
145
155
|
"dependencies": {
|
|
146
156
|
"yaml": "2.9.0",
|
|
147
|
-
"@agimon-ai/doompi-extension-contracts": "0.0.1-alpha.
|
|
148
|
-
"@agimon-ai/doompi-telemetry": "0.0.1-alpha.
|
|
157
|
+
"@agimon-ai/doompi-extension-contracts": "0.0.1-alpha.24",
|
|
158
|
+
"@agimon-ai/doompi-telemetry": "0.0.1-alpha.24"
|
|
149
159
|
},
|
|
150
160
|
"devDependencies": {
|
|
151
161
|
"@earendil-works/pi-coding-agent": "0.84.2",
|