@mnmal-ai/surface-core 0.16.0 → 0.17.0

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/dist/app.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"app.d.ts","sourceRoot":"","sources":["../src/app.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,KAAK,EAAQ,MAAM,yBAAyB,CAAC;AAa3D,OAAO,EAEL,KAAK,YAAY,EACjB,KAAK,SAAS,EAMf,MAAM,OAAO,CAAC;AAEf,OAAO,EAAkB,KAAK,QAAQ,EAAE,MAAM,cAAc,CAAC;AAuB7D,OAAO,KAAK,EAGV,KAAK,EAIL,SAAS,EAGV,MAAM,aAAa,CAAC;AAerB,OAAO,EAGL,KAAK,sBAAsB,EAK5B,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,KAAK,WAAW,EAChB,KAAK,QAAQ,EAOb,KAAK,MAAM,IAAI,OAAO,EAGtB,KAAK,SAAS,EAGf,MAAM,iBAAiB,CAAC;AAGzB,KAAK,SAAS,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC;AAEhC;;;;GAIG;AACH,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,KAAK,EAAE,QAAQ,GAAG,OAAO,CAAC;IACnC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE;QAAE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;CAC7C;AAED;gGACgG;AAChG,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,KAAK,EAAE,WAAW,CAAC,KAAK,CAAC,CAAC;IACnC,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IACzB,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE;QAAE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;CAC7C;AAED;;;;;GAKG;AACH,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC;IACvB,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IACzB,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE;QAAE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;CAC7C;AAED,yFAAyF;AACzF,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAC;IAC1B,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE;QAAE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;CAC7C;AAED,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,SAAS,SAAS,EAAE,CAAC;IACvC,wEAAwE;IACxE,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,sEAAsE;IACtE,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IACjC;;;;OAIG;IACH,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB;;;;;OAKG;IACH,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC;IACxB;;;;;;;;OAQG;IACH,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAC5B;;;;;OAKG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE,OAAO,CAAC;IAC9B;;;;;OAKG;IACH,QAAQ,CAAC,QAAQ,CAAC,EAAE,sBAAsB,GAAG,KAAK,CAAC;IACnD;;;;;OAKG;IACH,QAAQ,CAAC,OAAO,CAAC,EAAE;QACjB,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,SAAS,CAAC;QAClD,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,eAAe,KAAK,SAAS,CAAC;QACxD;qCAC6B;QAC7B,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,gBAAgB,KAAK,SAAS,CAAC;QAC1D,sEAAsE;QACtE,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,SAAS,CAAC;KACrD,CAAC;IACF;wCACoC;IACpC,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B;;;;;OAKG;IACH,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,MAAM,CAAC;CACvD;AA4KD,2FAA2F;AAC3F,wBAAgB,gBAAgB,CAAC,YAAY,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE;IAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,MAAM,CAEjG;AAED,qGAAqG;AACrG,UAAU,QAAQ;IAChB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,gGAAgG;AAChG,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,IAAI,CAAC,UAAU,EAAE,UAAU,GAAG,UAAU,CAAC,EAC/C,UAAU,EAAE,OAAO,GAClB,sBAAsB,GAAG,IAAI,CAO/B;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,UAAU,GAAG;IAC3C,QAAQ,EAAE,QAAQ,CAAC;IACnB,GAAG,EAAE,CAAC,KAAK,EAAE,QAAQ,KAAK,YAAY,CAAC;IACvC,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACrB,8FAA8F;IAC9F,UAAU,EAAE,OAAO,CAAC;CACrB,CAyvCA"}
1
+ {"version":3,"file":"app.d.ts","sourceRoot":"","sources":["../src/app.tsx"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"compose.d.ts","sourceRoot":"","sources":["../src/compose.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,WAAW,EACX,SAAS,EACT,aAAa,EACb,QAAQ,EACR,YAAY,EACZ,QAAQ,EACR,QAAQ,EACR,SAAS,EACT,WAAW,EACZ,MAAM,aAAa,CAAC;AAIrB,KAAK,SAAS,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC;AAEhC,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,OAAO,EAAE,SAAS,SAAS,EAAE,CAAC;IACvC,QAAQ,CAAC,QAAQ,EAAE,WAAW,CAAC,MAAM,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,WAAW,CAAC,OAAO,CAAC,CAAA;KAAE,CAAC,CAAC;IACvF,QAAQ,CAAC,MAAM,EAAE,WAAW,CAC1B,MAAM,EACN;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;KAAE,CACnE,CAAC;IACF,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAC,MAAM,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,aAAa,CAAC,OAAO,CAAC,CAAA;KAAE,CAAC,CAAC;IAC3F,QAAQ,CAAC,UAAU,EAAE,SAAS;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,SAAS,CAAA;KAAE,EAAE,CAAC;IACzE,QAAQ,CAAC,KAAK,EAAE,SAAS;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,WAAW,CAAC,OAAO,CAAC,CAAA;KAAE,EAAE,CAAC;IAC7E,QAAQ,CAAC,SAAS,EAAE,WAAW,CAAC,MAAM,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,QAAQ,CAAA;KAAE,CAAC,CAAC;IAC9E,QAAQ,CAAC,IAAI,EAAE,SAAS;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,QAAQ,CAAA;KAAE,EAAE,CAAC;IAC7D,QAAQ,CAAC,MAAM,EAAE,SAAS;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,QAAQ,CAAA;KAAE,EAAE,CAAC;IAC/D,QAAQ,CAAC,QAAQ,CAAC,EAAE;QAAE,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAA;KAAE,CAAC;CAC9E;AAED,qFAAqF;AACrF,eAAO,MAAM,oBAAoB,EAAE,SAAS,MAAM,EAAyC,CAAC;AAE5F,iGAAiG;AACjG,eAAO,MAAM,mBAAmB,EAAE,SAAS,MAAM,EAAyB,CAAC;AAK3E,qBAAa,gBAAiB,SAAQ,KAAK;IAC7B,QAAQ,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE;IAAhD,YAAqB,QAAQ,EAAE,SAAS,MAAM,EAAE,EAG/C;CACF;AAED,wBAAgB,cAAc,CAAC,OAAO,EAAE,SAAS,SAAS,EAAE,GAAG,QAAQ,CAwJtE;AAED,+EAA+E;AAC/E,wBAAgB,cAAc,CAAC,OAAO,EAAE,SAAS,SAAS,EAAE,GAAG,IAAI,CAElE"}
1
+ {"version":3,"file":"compose.d.ts","sourceRoot":"","sources":["../src/compose.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,WAAW,EACX,SAAS,EACT,aAAa,EACb,QAAQ,EACR,YAAY,EACZ,QAAQ,EACR,QAAQ,EACR,SAAS,EACT,WAAW,EACZ,MAAM,aAAa,CAAC;AAIrB,KAAK,SAAS,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC;AAEhC,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,OAAO,EAAE,SAAS,SAAS,EAAE,CAAC;IACvC,QAAQ,CAAC,QAAQ,EAAE,WAAW,CAAC,MAAM,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,WAAW,CAAC,OAAO,CAAC,CAAA;KAAE,CAAC,CAAC;IACvF,QAAQ,CAAC,MAAM,EAAE,WAAW,CAC1B,MAAM,EACN;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;KAAE,CACnE,CAAC;IACF,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAC,MAAM,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,aAAa,CAAC,OAAO,CAAC,CAAA;KAAE,CAAC,CAAC;IAC3F,QAAQ,CAAC,UAAU,EAAE,SAAS;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,SAAS,CAAA;KAAE,EAAE,CAAC;IACzE,QAAQ,CAAC,KAAK,EAAE,SAAS;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,WAAW,CAAC,OAAO,CAAC,CAAA;KAAE,EAAE,CAAC;IAC7E,QAAQ,CAAC,SAAS,EAAE,WAAW,CAAC,MAAM,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,QAAQ,CAAA;KAAE,CAAC,CAAC;IAC9E,QAAQ,CAAC,IAAI,EAAE,SAAS;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,QAAQ,CAAA;KAAE,EAAE,CAAC;IAC7D,QAAQ,CAAC,MAAM,EAAE,SAAS;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,QAAQ,CAAA;KAAE,EAAE,CAAC;IAC/D,QAAQ,CAAC,QAAQ,CAAC,EAAE;QAAE,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAA;KAAE,CAAC;CAC9E;AAED,qFAAqF;AACrF,eAAO,MAAM,oBAAoB,EAAE,SAAS,MAAM,EAAyC,CAAC;AAE5F,iGAAiG;AACjG,eAAO,MAAM,mBAAmB,EAAE,SAAS,MAAM,EAAyB,CAAC;AAK3E,qBAAa,gBAAiB,SAAQ,KAAK;IAC7B,QAAQ,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE;IAAhD,YAAqB,QAAQ,EAAE,SAAS,MAAM,EAAE,EAG/C;CACF;AAED,wBAAgB,cAAc,CAAC,OAAO,EAAE,SAAS,SAAS,EAAE,GAAG,QAAQ,CAqJtE;AAED,+EAA+E;AAC/E,wBAAgB,cAAc,CAAC,OAAO,EAAE,SAAS,SAAS,EAAE,GAAG,IAAI,CAElE"}
package/dist/index.d.ts CHANGED
@@ -8,6 +8,8 @@ export { FOLLOWING, linesBelow, pageStep, resolveFullscreen, type Scroll, scroll
8
8
  export { EMPTY_HISTORY, HISTORY_MAX, type HistoryState, mayWalk, remember, settle, walk } from './history.js';
9
9
  export { normaliseKeySpec } from './key-spec.js';
10
10
  export { type KeyState, keySpecOf, type Route, resolveKey } from './keys.js';
11
+ export { INLINE_LIST_ROWS, LIST_REPLY_KIND, listPager, pageSizeFor } from './list-pager.js';
12
+ export { back, backspace, cursorRow, type DetailStep, endFilter, type ListDetail, type ListHooks, type ListStep, listStep, move, type PagerState, pagerAt, placement, push, type RelatedLoadingStep, type Step, scrollDetail, startFilter, turn, typeChar, visibleRows } from './list-pager-state.js';
11
13
  export { type ArgSpec, type Armed, type Chip, type CommandSpec, type Completer, type ConfirmBinding, defineModule, type GlobalBinding, type Key, type KeySpec, type ModuleCtx, type ModuleSpec, type PanelDef, type PresenceSpec, type RailItem, type Renderer, type Reply, type Size, type SubmitOptions, type Suggestion, type TuiEvents, type TuiModule, type TurnContext, type TurnHandler, type TurnPhase, type TurnUpdate } from './module.js';
12
14
  export { type Overlay, panelOf, setPanel } from './overlay.js';
13
15
  export { clampSelection, commandUsage, completeDraft, enterRuns, MENU_NAME_WIDTH, menuWindow, moveSelection, type PaletteRow, paletteMatches, paletteQuery, paletteRows, parseCommandLine } from './palette.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,eAAe,EACpB,KAAK,UAAU,EACf,KAAK,YAAY,EACjB,SAAS,EACT,gBAAgB,EAChB,KAAK,aAAa,EAClB,KAAK,gBAAgB,EACtB,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAClE,OAAO,EACL,cAAc,EACd,gBAAgB,EAChB,cAAc,EACd,oBAAoB,EACpB,KAAK,QAAQ,EACd,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,KAAK,EACL,KAAK,KAAK,EACV,KAAK,QAAQ,EACb,WAAW,EACX,OAAO,EACP,WAAW,EACX,SAAS,EACT,WAAW,EACX,QAAQ,EACR,SAAS,EACV,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,gBAAgB,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAC1D,OAAO,EACL,SAAS,EACT,UAAU,EACV,QAAQ,EACR,iBAAiB,EACjB,KAAK,MAAM,EACX,QAAQ,EACR,OAAO,EACR,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,aAAa,EACb,WAAW,EACX,KAAK,YAAY,EACjB,OAAO,EACP,QAAQ,EACR,MAAM,EACN,IAAI,EACL,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,EAAE,KAAK,QAAQ,EAAE,SAAS,EAAE,KAAK,KAAK,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAC7E,OAAO,EACL,KAAK,OAAO,EACZ,KAAK,KAAK,EACV,KAAK,IAAI,EACT,KAAK,WAAW,EAChB,KAAK,SAAS,EACd,KAAK,cAAc,EACnB,YAAY,EACZ,KAAK,aAAa,EAClB,KAAK,GAAG,EACR,KAAK,OAAO,EACZ,KAAK,SAAS,EACd,KAAK,UAAU,EACf,KAAK,QAAQ,EACb,KAAK,YAAY,EACjB,KAAK,QAAQ,EACb,KAAK,QAAQ,EACb,KAAK,KAAK,EACV,KAAK,IAAI,EACT,KAAK,aAAa,EAClB,KAAK,UAAU,EACf,KAAK,SAAS,EACd,KAAK,SAAS,EACd,KAAK,WAAW,EAChB,KAAK,WAAW,EAChB,KAAK,SAAS,EACd,KAAK,UAAU,EAChB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,KAAK,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAC/D,OAAO,EACL,cAAc,EACd,YAAY,EACZ,aAAa,EACb,SAAS,EACT,eAAe,EACf,UAAU,EACV,aAAa,EACb,KAAK,UAAU,EACf,cAAc,EACd,YAAY,EACZ,WAAW,EACX,gBAAgB,EACjB,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,KAAK,UAAU,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC/D,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EACL,aAAa,EACb,UAAU,EACV,cAAc,EACd,cAAc,EACd,KAAK,WAAW,EAChB,UAAU,EACV,KAAK,sBAAsB,EAC3B,eAAe,EACf,eAAe,EACf,YAAY,EACZ,cAAc,EACd,KAAK,WAAW,EAChB,KAAK,eAAe,EACpB,gBAAgB,EAChB,eAAe,EAChB,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,KAAK,WAAW,EAChB,KAAK,QAAQ,EACb,KAAK,QAAQ,EACb,MAAM,EACN,WAAW,EACX,UAAU,EACV,WAAW,EACX,KAAK,KAAK,EACV,eAAe,EACf,KAAK,MAAM,EACX,KAAK,QAAQ,EACb,QAAQ,EACR,aAAa,EACb,KAAK,SAAS,EACd,QAAQ,EACR,KAAK,UAAU,EAChB,MAAM,iBAAiB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -1,8 +1,9 @@
1
- import { $ as viewTop, A as clampSelection, B as keySpecOf, C as prepareTerminal, D as routeInput, E as sanitise, F as moveSelection, G as remember, H as EMPTY_HISTORY, I as paletteMatches, J as FOLLOWING, K as settle, L as paletteQuery, M as completeDraft, N as enterRuns, O as unavailableReason, P as menuWindow, Q as scrollBy, R as paletteRows, S as prepareSequence, T as reprintStart, U as HISTORY_MAX, V as resolveKey, W as mayWalk, X as pageStep, Y as linesBelow, Z as resolveFullscreen, _ as WHEEL_ARROWS_OFF, _t as applySuggestion, a as answerEntry, at as graphemeAt, b as groundSequence, c as dropGaps, ct as pasteToLine, d as markedFlights, dt as applyInput, et as CTRL_C_WINDOW_MS, f as sendTurn, ft as CompositionError, g as RESET_GROUND, gt as normaliseKeySpec, h as REPRINT_LINES, ht as composeModules, i as addGap, it as editKey, j as commandUsage, k as MENU_NAME_WIDTH, l as emptyTranscript, lt as wordLeft, m as DEFAULT_GROUND, mt as assertComposes, n as setPanel, nt as EMPTY_DRAFT, o as arriveTurn, ot as insertChunk, p as CLEAR_PANE, pt as RESERVED_GLOBAL_KEYS, q as walk, r as defineModule, rt as atEnd, s as commitEntry, st as maskDraft, t as panelOf, tt as ctrlC, u as heldAsks, ut as wordRight, v as WHEEL_ARROWS_ON, vt as mergeCompletions, w as reflowSequence, x as liveShrink, y as anchorPadding, z as parseCommandLine } from "./overlay-By-Ewn3S.js";
2
- import { spinnerFrame } from "@mnmal-ai/surface-kit";
1
+ import { $ as parseCommandLine, A as RESET_GROUND, At as normaliseKeySpec, B as sanitise, C as emptyTranscript, Ct as wordLeft, D as CLEAR_PANE, Dt as RESERVED_GLOBAL_KEYS, E as sendTurn, Et as CompositionError, F as liveShrink, G as commandUsage, H as unavailableReason, I as prepareSequence, J as menuWindow, K as completeDraft, L as prepareTerminal, M as WHEEL_ARROWS_ON, Mt as mergeCompletions, N as anchorPadding, O as DEFAULT_GROUND, Ot as assertComposes, P as groundSequence, Q as paletteRows, R as reflowSequence, S as dropGaps, St as pasteToLine, T as markedFlights, Tt as applyInput, U as MENU_NAME_WIDTH, V as routeInput, W as clampSelection, X as paletteMatches, Y as moveSelection, Z as paletteQuery, _ as visibleRows, _t as atEnd, a as backspace, at as remember, b as arriveTurn, bt as insertChunk, c as listStep, ct as FOLLOWING, d as placement, dt as resolveFullscreen, et as keySpecOf, f as push, ft as scrollBy, g as typeChar, gt as EMPTY_DRAFT, h as turn, ht as ctrlC, i as back, it as mayWalk, j as WHEEL_ARROWS_OFF, jt as applySuggestion, k as REPRINT_LINES, kt as composeModules, l as move, lt as linesBelow, m as startFilter, mt as CTRL_C_WINDOW_MS, n as setPanel, nt as EMPTY_HISTORY, o as cursorRow, ot as settle, p as scrollDetail, pt as viewTop, q as enterRuns, r as defineModule, rt as HISTORY_MAX, s as endFilter, st as walk, t as panelOf, tt as resolveKey, u as pagerAt, ut as pageStep, v as addGap, vt as editKey, w as heldAsks, wt as wordRight, x as commitEntry, xt as maskDraft, y as answerEntry, yt as graphemeAt, z as reprintStart } from "./overlay-5s8slC38.js";
2
+ import { ListRows, spinnerFrame } from "@mnmal-ai/surface-kit";
3
3
  import { Box, Static, Text, measureElement, render, useApp, useInput, usePaste, useStdout } from "ink";
4
4
  import { Component, useCallback, useEffect, useMemo, useRef, useState } from "react";
5
5
  import { Fragment, jsx, jsxs } from "react/jsx-runtime";
6
+ import { listLines, wrapCells } from "@mnmal-ai/surface-kit/list";
6
7
 
7
8
  //#region src/app.tsx
8
9
  /** Calls a module's view as a component, so a throw lands in the boundary and not in the shell. */
@@ -71,6 +72,15 @@ const OVERLAY_PAD_Y = 1;
71
72
  * not scanned; both come out of the size the panel view is handed (operator, 2026-10-09). */
72
73
  const PANEL_PAD_X = 4;
73
74
  const PANEL_PAD_Y = 1;
75
+ /** What a panel view may draw in: its insets, its own or the default, come out of the outer size. */
76
+ function panelInner(outer, def) {
77
+ const x = def?.inset?.x ?? PANEL_PAD_X;
78
+ const y = def?.inset?.y ?? PANEL_PAD_Y;
79
+ return {
80
+ columns: Math.max(1, outer.columns - 2 * x),
81
+ rows: Math.max(1, outer.rows - 2 * y)
82
+ };
83
+ }
74
84
  /**
75
85
  * The `/` palette and the completion menu, directly above the input on the band's ground: a fixed name column, the detail dimmed, the selection on the `selection` tone, a window
76
86
  * that follows the selection, and a hint line.
@@ -144,7 +154,8 @@ function createApp(opts) {
144
154
  const fs = resolveFullscreen(opts.fullscreen, process.env.SURFACE_FULLSCREEN);
145
155
  function App({ columns, rows }) {
146
156
  const { exit } = useApp();
147
- const stdout = useStdout().stdout;
157
+ const ink = useStdout();
158
+ const stdout = ink.stdout;
148
159
  const full = fs.on && stdout.isTTY === true;
149
160
  const relays = anchored && !full;
150
161
  const [term, setTerm] = useState(() => ({
@@ -161,12 +172,16 @@ function createApp(opts) {
161
172
  const heights = useRef(/* @__PURE__ */ new Map());
162
173
  const [reprintFrom, setReprintFrom] = useState(0);
163
174
  const relayout = useCallback(() => {
164
- if (stdout.isTTY) stdout.write(reflowSequence(stdout.rows));
175
+ if (stdout.isTTY) ink.write(reflowSequence(stdout.rows));
165
176
  putTranscript(dropGaps);
166
177
  const kept = transcriptRef.current.committed;
167
178
  setReprintFrom(reprintStart(kept.map((e) => heights.current.get(e.key) ?? 1), REPRINT_LINES));
168
179
  setEpoch((e) => e + 1);
169
- }, [stdout, putTranscript]);
180
+ }, [
181
+ stdout,
182
+ ink,
183
+ putTranscript
184
+ ]);
170
185
  useEffect(() => {
171
186
  const laidOut = {
172
187
  columns: stdout.columns ?? 120,
@@ -209,12 +224,8 @@ function createApp(opts) {
209
224
  columns: Math.max(1, width - (showRail ? RAIL_COLUMNS : 0)),
210
225
  rows: Math.max(1, panelRows(height))
211
226
  };
212
- const panelSize = {
213
- columns: Math.max(1, panelOuter.columns - 8),
214
- rows: Math.max(1, panelOuter.rows - 2)
215
- };
216
- const sizeRef = useRef(panelSize);
217
- sizeRef.current = panelSize;
227
+ const outerRef = useRef(panelOuter);
228
+ outerRef.current = panelOuter;
218
229
  const [live, setLive] = useState(/* @__PURE__ */ new Map());
219
230
  const [draft, setDraft] = useState(EMPTY_DRAFT);
220
231
  const [, setHistory] = useState(EMPTY_HISTORY);
@@ -341,7 +352,7 @@ function createApp(opts) {
341
352
  const ctxFor = useCallback((moduleId) => ({
342
353
  theme,
343
354
  signal: appAbort.current.signal,
344
- size: () => sizeRef.current,
355
+ size: () => panelInner(outerRef.current, defOf(overlayRef.current)),
345
356
  open: (panel, state, opts) => {
346
357
  if (disposed.current) return;
347
358
  if (!registry.panels.has(`${moduleId}/${panel}`)) throw new Error(`module '${moduleId}' has no panel '${panel}'`);
@@ -352,6 +363,7 @@ function createApp(opts) {
352
363
  state
353
364
  });
354
365
  },
366
+ panelOpen: () => overlayRef.current !== null,
355
367
  update: (panel, fn) => {
356
368
  if (disposed.current) return;
357
369
  const o = overlayRef.current;
@@ -400,7 +412,8 @@ function createApp(opts) {
400
412
  say,
401
413
  guard,
402
414
  putOverlay,
403
- showToast
415
+ showToast,
416
+ defOf
404
417
  ]);
405
418
  const runTurn = useCallback(async (line, module, handler, sent) => {
406
419
  const id = nextId.current++;
@@ -690,12 +703,16 @@ function createApp(opts) {
690
703
  }
691
704
  return;
692
705
  }
693
- case "panel": {
694
- const handler = (registry.panels.get(`${route.module}/${route.panel}`)?.def)?.on?.[route.act];
695
- if (!handler || !overlay) return;
706
+ case "panel":
707
+ case "panel-text": {
708
+ const def = registry.panels.get(`${route.module}/${route.panel}`)?.def;
709
+ const act = route.kind === "panel" ? def?.on?.[route.act] : void 0;
710
+ const typed = route.kind === "panel-text" ? def?.text : void 0;
711
+ if (!act && !typed || !overlay) return;
696
712
  let next;
697
713
  try {
698
- next = handler(overlay.state, ctxFor(route.module));
714
+ const c = ctxFor(route.module);
715
+ next = act ? act(overlay.state, c) : typed?.(overlay.state, route.text, c);
699
716
  } catch (err) {
700
717
  guard(route.module, () => {
701
718
  throw err;
@@ -1020,9 +1037,9 @@ function createApp(opts) {
1020
1037
  }, f.id))] });
1021
1038
  const overlayRows = /* @__PURE__ */ jsxs(Fragment, { children: [
1022
1039
  panel && overlay ? /* @__PURE__ */ jsx(Box, {
1023
- backgroundColor: theme.color.raised,
1024
- paddingX: PANEL_PAD_X,
1025
- paddingY: PANEL_PAD_Y,
1040
+ backgroundColor: panel.ground ?? theme.color.raised,
1041
+ paddingX: panel.inset?.x ?? PANEL_PAD_X,
1042
+ paddingY: panel.inset?.y ?? PANEL_PAD_Y,
1026
1043
  flexDirection: "column",
1027
1044
  children: /* @__PURE__ */ jsx(Safe, {
1028
1045
  module: overlay.module,
@@ -1030,7 +1047,7 @@ function createApp(opts) {
1030
1047
  render: () => panel.view({
1031
1048
  state: overlay.state,
1032
1049
  theme,
1033
- size: panelSize,
1050
+ size: panelInner(panelOuter, panel),
1034
1051
  ...armed !== null && armed.module === overlay.module && armed.panel === overlay.panel && draft.text === armed.key ? { armed: {
1035
1052
  key: armed.key,
1036
1053
  label: armed.label
@@ -1266,4 +1283,449 @@ function createApp(opts) {
1266
1283
  }
1267
1284
 
1268
1285
  //#endregion
1269
- export { CLEAR_PANE, CTRL_C_WINDOW_MS, CompositionError, DEFAULT_GROUND, EMPTY_DRAFT, EMPTY_HISTORY, FOLLOWING, HISTORY_MAX, MENU_NAME_WIDTH, RESERVED_GLOBAL_KEYS, RESET_GROUND, WHEEL_ARROWS_OFF, WHEEL_ARROWS_ON, addGap, anchorPadding, answerEntry, applyInput, applySuggestion, arriveTurn, assertComposes, atEnd, clampSelection, commandUsage, commitEntry, completeDraft, composeModules, createApp, ctrlC, defaultPanelRows, defineModule, editKey, emptyTranscript, enterRuns, groundSequence, heldAsks, insertChunk, keySpecOf, linesBelow, liveShrink, markedFlights, maskDraft, mayWalk, menuWindow, mergeCompletions, moveSelection, normaliseKeySpec, pageStep, paletteMatches, paletteQuery, paletteRows, panelOf, parseCommandLine, pasteToLine, prepareSequence, prepareTerminal, reflowSequence, remember, resolveFullscreen, resolveKey, routeInput, sanitise, scrollBy, sendTurn, setPanel, settle, viewTop, walk, wordLeft, wordRight };
1286
+ //#region src/list-pager.tsx
1287
+ /** A list longer than this is paged rather than printed. */
1288
+ const INLINE_LIST_ROWS = 10;
1289
+ const LIST_REPLY_KIND = "surface.list";
1290
+ /** Rows a page holds in a panel `rows` tall: the heading, filter and hint lines take the rest. */
1291
+ const pageSizeFor = (rows) => Math.max(5, rows - 6);
1292
+ const cleanSpan = (s) => s.em === true ? {
1293
+ text: sanitise(s.text),
1294
+ em: true
1295
+ } : { text: sanitise(s.text) };
1296
+ const cleanRow = (r) => ({
1297
+ key: r.key,
1298
+ name: typeof r.name === "string" ? sanitise(r.name) : r.name.map(cleanSpan),
1299
+ ...r.details ? { details: r.details.map(sanitise) } : {},
1300
+ ...r.value !== void 0 ? { value: sanitise(r.value) } : {}
1301
+ });
1302
+ /** Everything an app hands in reaches the terminal sanitised. */
1303
+ const cleanList = (l) => ({
1304
+ heading: sanitise(l.heading),
1305
+ rows: l.rows.map(cleanRow),
1306
+ ...l.total !== void 0 ? { total: l.total } : {},
1307
+ ...l.notes ? { notes: l.notes.map(sanitise) } : {}
1308
+ });
1309
+ const cleanDetail = (d) => ({
1310
+ title: sanitise(d.title),
1311
+ ...d.meta !== void 0 ? { meta: sanitise(d.meta) } : {},
1312
+ ...d.body !== void 0 ? { body: sanitise(d.body) } : {}
1313
+ });
1314
+ const inAll = (l) => l.total !== void 0 && l.total > l.rows.length ? `, ${l.total} in all` : "";
1315
+ const isPromise = (v) => typeof v?.then === "function";
1316
+ const errorText = (e) => sanitise(e instanceof Error ? e.message : String(e));
1317
+ /** The detail's body lines and the room the panel gives them. */
1318
+ function detailLayout(d, size) {
1319
+ const lines = d.body === void 0 ? [] : wrapCells(d.body, size.columns);
1320
+ const room = Math.max(1, size.rows - (d.meta === void 0 ? 3 : 4));
1321
+ return {
1322
+ lines,
1323
+ room,
1324
+ maxScroll: Math.max(0, lines.length - room)
1325
+ };
1326
+ }
1327
+ function Hint({ theme, parts }) {
1328
+ return /* @__PURE__ */ jsx(Box, {
1329
+ marginTop: 1,
1330
+ children: /* @__PURE__ */ jsx(Text, {
1331
+ color: theme.color.dim,
1332
+ wrap: "truncate",
1333
+ children: parts.join(" · ")
1334
+ })
1335
+ });
1336
+ }
1337
+ function ListPage({ step, depth, theme, size }) {
1338
+ const shown = visibleRows(step);
1339
+ const per = pageSizeFor(size.rows);
1340
+ const pages = Math.max(1, Math.ceil(shown.length / per));
1341
+ const at = placement(step, per);
1342
+ const page = Math.min(at.page, pages - 1);
1343
+ const slice = shown.slice(page * per, page * per + per);
1344
+ const total = step.list.total;
1345
+ const of = total !== void 0 && total > step.list.rows.length ? ` · ${step.list.rows.length} of ${total}` : "";
1346
+ const hint = [
1347
+ "↑↓ row",
1348
+ "←→ page",
1349
+ ...step.hooks.open ? ["enter open"] : [],
1350
+ ...step.hooks.related ? ["r related"] : [],
1351
+ "/ filter",
1352
+ depth > 1 || step.filter !== "" || step.filtering ? "esc back" : "esc close"
1353
+ ];
1354
+ return /* @__PURE__ */ jsxs(Box, {
1355
+ flexDirection: "column",
1356
+ children: [
1357
+ /* @__PURE__ */ jsxs(Text, {
1358
+ wrap: "truncate",
1359
+ children: [
1360
+ /* @__PURE__ */ jsx(Text, {
1361
+ color: theme.color.accent,
1362
+ children: "📋 List "
1363
+ }),
1364
+ /* @__PURE__ */ jsx(Text, {
1365
+ bold: true,
1366
+ children: step.list.heading
1367
+ }),
1368
+ /* @__PURE__ */ jsx(Text, {
1369
+ color: theme.color.dim,
1370
+ children: `${of} · page ${page + 1} of ${pages}`
1371
+ })
1372
+ ]
1373
+ }),
1374
+ step.filtering || step.filter !== "" ? /* @__PURE__ */ jsx(Text, {
1375
+ color: theme.color.dim,
1376
+ children: `filter: ${step.filter}${step.filtering ? "▌" : ""}`
1377
+ }) : null,
1378
+ /* @__PURE__ */ jsx(Box, {
1379
+ marginTop: 1,
1380
+ flexDirection: "column",
1381
+ children: slice.length === 0 ? /* @__PURE__ */ jsx(Text, {
1382
+ color: theme.color.dim,
1383
+ children: `no rows match ${step.filter}`
1384
+ }) : /* @__PURE__ */ jsx(ListRows, {
1385
+ lines: listLines(slice, size.columns, page * per + 1),
1386
+ theme,
1387
+ cursor: at.cursor
1388
+ })
1389
+ }),
1390
+ /* @__PURE__ */ jsx(Hint, {
1391
+ theme,
1392
+ parts: hint
1393
+ })
1394
+ ]
1395
+ });
1396
+ }
1397
+ function DetailPage({ step, theme, size }) {
1398
+ const hint = [
1399
+ "↑↓ scroll",
1400
+ ...step.hooks.related ? ["r related"] : [],
1401
+ "esc back"
1402
+ ];
1403
+ if (step.detail === "loading" || "error" in step.detail) return /* @__PURE__ */ jsxs(Box, {
1404
+ flexDirection: "column",
1405
+ children: [step.detail === "loading" ? /* @__PURE__ */ jsx(Text, {
1406
+ color: theme.color.dim,
1407
+ children: "loading…"
1408
+ }) : /* @__PURE__ */ jsx(Text, {
1409
+ color: theme.color.warn,
1410
+ children: step.detail.error
1411
+ }), /* @__PURE__ */ jsx(Hint, {
1412
+ theme,
1413
+ parts: ["esc back"]
1414
+ })]
1415
+ });
1416
+ const d = step.detail;
1417
+ const { lines, room } = detailLayout(d, size);
1418
+ return /* @__PURE__ */ jsxs(Box, {
1419
+ flexDirection: "column",
1420
+ children: [
1421
+ /* @__PURE__ */ jsxs(Text, {
1422
+ wrap: "truncate",
1423
+ children: [/* @__PURE__ */ jsx(Text, {
1424
+ color: theme.color.accent,
1425
+ children: "📋 "
1426
+ }), /* @__PURE__ */ jsx(Text, {
1427
+ bold: true,
1428
+ children: d.title
1429
+ })]
1430
+ }),
1431
+ d.meta !== void 0 ? /* @__PURE__ */ jsx(Text, {
1432
+ color: theme.color.dim,
1433
+ wrap: "truncate",
1434
+ children: d.meta
1435
+ }) : null,
1436
+ /* @__PURE__ */ jsx(Box, {
1437
+ marginTop: 1,
1438
+ flexDirection: "column",
1439
+ children: lines.slice(step.scroll, step.scroll + room).map((l, i) => /* @__PURE__ */ jsx(Text, { children: l }, i))
1440
+ }),
1441
+ /* @__PURE__ */ jsx(Hint, {
1442
+ theme,
1443
+ parts: hint
1444
+ })
1445
+ ]
1446
+ });
1447
+ }
1448
+ function PagerView({ state, theme, size }) {
1449
+ const step = state.steps[state.steps.length - 1];
1450
+ if (step === void 0) return null;
1451
+ if (step.kind === "list") return /* @__PURE__ */ jsx(ListPage, {
1452
+ step,
1453
+ depth: state.steps.length,
1454
+ theme,
1455
+ size
1456
+ });
1457
+ if (step.kind === "detail") return /* @__PURE__ */ jsx(DetailPage, {
1458
+ step,
1459
+ theme,
1460
+ size
1461
+ });
1462
+ return /* @__PURE__ */ jsxs(Box, {
1463
+ flexDirection: "column",
1464
+ children: [step.error === void 0 ? /* @__PURE__ */ jsx(Text, {
1465
+ color: theme.color.dim,
1466
+ children: "loading…"
1467
+ }) : /* @__PURE__ */ jsx(Text, {
1468
+ color: theme.color.warn,
1469
+ children: step.error
1470
+ }), /* @__PURE__ */ jsx(Hint, {
1471
+ theme,
1472
+ parts: ["esc back"]
1473
+ })]
1474
+ });
1475
+ }
1476
+ function ListReply({ data, theme, columns }) {
1477
+ const { list, paged } = data;
1478
+ const n = list.rows.length;
1479
+ const width = Math.max(1, columns - 2);
1480
+ let tail = null;
1481
+ if (paged) tail = `${n} rows — in the list (/list)${inAll(list)}`;
1482
+ else if (n > 10) tail = `…and ${n - 10} more — /list to page through them${inAll(list)}`;
1483
+ else if (list.total !== void 0 && list.total > n) tail = `… ${list.total} in all`;
1484
+ return /* @__PURE__ */ jsxs(Box, {
1485
+ flexDirection: "column",
1486
+ children: [
1487
+ /* @__PURE__ */ jsx(Text, {
1488
+ bold: true,
1489
+ wrap: "wrap",
1490
+ children: `${list.heading}:`
1491
+ }),
1492
+ paged ? null : /* @__PURE__ */ jsx(Box, {
1493
+ marginTop: 1,
1494
+ children: /* @__PURE__ */ jsx(ListRows, {
1495
+ lines: listLines(list.rows.slice(0, 10), width),
1496
+ theme
1497
+ })
1498
+ }),
1499
+ tail !== null ? /* @__PURE__ */ jsx(Text, {
1500
+ color: theme.color.dim,
1501
+ children: ` ${tail}`
1502
+ }) : null,
1503
+ (list.notes ?? []).length > 0 ? /* @__PURE__ */ jsx(Box, {
1504
+ marginTop: 1,
1505
+ flexDirection: "column",
1506
+ children: (list.notes ?? []).map((note, i) => /* @__PURE__ */ jsx(Text, {
1507
+ color: theme.color.dim,
1508
+ italic: true,
1509
+ wrap: "wrap",
1510
+ children: note
1511
+ }, i))
1512
+ }) : null
1513
+ ]
1514
+ });
1515
+ }
1516
+ /**
1517
+ * The pager module and `present`, which a turn handler yields as its reply:
1518
+ * `yield { phase: 'final', reply: pager.present(list, { open, related }) }`. A list of up to
1519
+ * `INLINE_LIST_ROWS` prints inline. A longer one opens the pager when no panel is open, and the
1520
+ * transcript then carries only its heading and a pointer; otherwise its first rows print inline.
1521
+ * `/list` reopens the last long list where it was left.
1522
+ */
1523
+ function listPager() {
1524
+ let own;
1525
+ let last = null;
1526
+ /**
1527
+ * Keeps the first step as the operator left it, and returns the state to show. Only for the
1528
+ * list `/list` would reopen: an older list paged while a newer one landed must not take its place.
1529
+ */
1530
+ const keep = (s) => {
1531
+ const first = s.steps[0];
1532
+ const was = last?.steps[0];
1533
+ if (first?.kind === "list" && was?.kind === "list" && first.list === was.list) last = {
1534
+ steps: [first],
1535
+ token: s.token
1536
+ };
1537
+ return s;
1538
+ };
1539
+ const top = (s) => s.steps[s.steps.length - 1];
1540
+ const replaceTop = (s, step) => ({
1541
+ ...s,
1542
+ steps: [...s.steps.slice(0, -1), step]
1543
+ });
1544
+ /** Settles an async step, only while the pager still shows the step it was started for. */
1545
+ const settle = (ctx, token, step) => ctx.update("pager", (cur) => {
1546
+ const t = top(cur);
1547
+ return cur.token === token && t !== void 0 ? replaceTop(cur, step(t)) : cur;
1548
+ });
1549
+ const open = (s, ctx) => {
1550
+ const t = top(s);
1551
+ if (t?.kind !== "list") return s;
1552
+ if (t.filtering) return keep(endFilter(s));
1553
+ const row = cursorRow(s);
1554
+ const hook = t.hooks.open;
1555
+ if (row === void 0 || hook === void 0) return s;
1556
+ const base = {
1557
+ kind: "detail",
1558
+ row,
1559
+ hooks: t.hooks,
1560
+ detail: "loading",
1561
+ scroll: 0
1562
+ };
1563
+ let got;
1564
+ try {
1565
+ got = hook(row);
1566
+ } catch (e) {
1567
+ return push(s, {
1568
+ ...base,
1569
+ detail: { error: errorText(e) }
1570
+ });
1571
+ }
1572
+ if (!isPromise(got)) return push(s, {
1573
+ ...base,
1574
+ detail: cleanDetail(got)
1575
+ });
1576
+ const next = push(s, base);
1577
+ got.then((d) => settle(ctx, next.token, (cur) => cur.kind === "detail" ? {
1578
+ ...cur,
1579
+ detail: cleanDetail(d)
1580
+ } : cur), (e) => settle(ctx, next.token, (cur) => cur.kind === "detail" ? {
1581
+ ...cur,
1582
+ detail: { error: errorText(e) }
1583
+ } : cur));
1584
+ return next;
1585
+ };
1586
+ const related = (s, ctx) => {
1587
+ const t = top(s);
1588
+ if (t?.kind === "list" && t.filtering) return keep(typeChar(s, "r"));
1589
+ if (t === void 0 || t.kind === "loading-related") return s;
1590
+ const row = cursorRow(s);
1591
+ const hook = t.hooks.related;
1592
+ if (row === void 0 || hook === void 0) return s;
1593
+ const hooks = t.hooks;
1594
+ let got;
1595
+ try {
1596
+ got = hook(row);
1597
+ } catch (e) {
1598
+ return push(s, {
1599
+ kind: "loading-related",
1600
+ row,
1601
+ error: errorText(e)
1602
+ });
1603
+ }
1604
+ if (!isPromise(got)) return push(s, listStep(cleanList(got), hooks));
1605
+ const next = push(s, {
1606
+ kind: "loading-related",
1607
+ row
1608
+ });
1609
+ got.then((l) => settle(ctx, next.token, () => listStep(cleanList(l), hooks)), (e) => settle(ctx, next.token, () => ({
1610
+ kind: "loading-related",
1611
+ row,
1612
+ error: errorText(e)
1613
+ })));
1614
+ return next;
1615
+ };
1616
+ const vertical = (delta) => (s, ctx) => {
1617
+ const t = top(s);
1618
+ if (t?.kind === "detail" && t.detail !== "loading" && !("error" in t.detail)) return scrollDetail(s, delta, detailLayout(t.detail, ctx.size()).maxScroll);
1619
+ return keep(move(s, delta, pageSizeFor(ctx.size().rows)));
1620
+ };
1621
+ const page = (delta) => (s, ctx) => keep(turn(s, delta, pageSizeFor(ctx.size().rows)));
1622
+ return {
1623
+ module: defineModule("surface.list", {
1624
+ init(ctx) {
1625
+ own = ctx;
1626
+ return () => {
1627
+ own = void 0;
1628
+ };
1629
+ },
1630
+ commands: [{
1631
+ name: "list",
1632
+ summary: "page through the last long list",
1633
+ args: [],
1634
+ run(_args, ctx) {
1635
+ if (last === null) {
1636
+ ctx.print("nothing to page through");
1637
+ return;
1638
+ }
1639
+ ctx.open("pager", last);
1640
+ }
1641
+ }],
1642
+ renderers: { [LIST_REPLY_KIND]: ({ data, theme, size }) => /* @__PURE__ */ jsx(ListReply, {
1643
+ data,
1644
+ theme,
1645
+ columns: size.columns
1646
+ }) },
1647
+ panels: { pager: {
1648
+ view: ({ state, theme, size }) => /* @__PURE__ */ jsx(PagerView, {
1649
+ state,
1650
+ theme,
1651
+ size
1652
+ }),
1653
+ keymap: [
1654
+ {
1655
+ key: "up",
1656
+ act: "up"
1657
+ },
1658
+ {
1659
+ key: "down",
1660
+ act: "down"
1661
+ },
1662
+ {
1663
+ key: "left",
1664
+ act: "left"
1665
+ },
1666
+ {
1667
+ key: "right",
1668
+ act: "right"
1669
+ },
1670
+ {
1671
+ key: "enter",
1672
+ act: "open"
1673
+ },
1674
+ {
1675
+ key: "r",
1676
+ act: "related"
1677
+ },
1678
+ {
1679
+ key: "/",
1680
+ act: "filter"
1681
+ },
1682
+ {
1683
+ key: "backspace",
1684
+ act: "backspace"
1685
+ }
1686
+ ],
1687
+ on: {
1688
+ up: vertical(-1),
1689
+ down: vertical(1),
1690
+ left: page(-1),
1691
+ right: page(1),
1692
+ open,
1693
+ related,
1694
+ filter: (s) => {
1695
+ const t = top(s);
1696
+ return keep(t?.kind === "list" && t.filtering ? typeChar(s, "/") : startFilter(s));
1697
+ },
1698
+ backspace: (s) => keep(backspace(s))
1699
+ },
1700
+ text: (s, text) => keep(typeChar(s, text)),
1701
+ escape: (s) => {
1702
+ const prev = back(s);
1703
+ return prev === void 0 ? void 0 : keep(prev);
1704
+ }
1705
+ } }
1706
+ }),
1707
+ present(list, hooks = {}) {
1708
+ const clean = cleanList(list);
1709
+ if (clean.rows.length <= 10) return {
1710
+ kind: LIST_REPLY_KIND,
1711
+ data: {
1712
+ list: clean,
1713
+ paged: false
1714
+ }
1715
+ };
1716
+ last = pagerAt(clean, hooks);
1717
+ const paged = own !== void 0 && !own.panelOpen();
1718
+ if (paged) own?.open("pager", last);
1719
+ return {
1720
+ kind: LIST_REPLY_KIND,
1721
+ data: {
1722
+ list: clean,
1723
+ paged
1724
+ }
1725
+ };
1726
+ }
1727
+ };
1728
+ }
1729
+
1730
+ //#endregion
1731
+ export { CLEAR_PANE, CTRL_C_WINDOW_MS, CompositionError, DEFAULT_GROUND, EMPTY_DRAFT, EMPTY_HISTORY, FOLLOWING, HISTORY_MAX, INLINE_LIST_ROWS, LIST_REPLY_KIND, MENU_NAME_WIDTH, RESERVED_GLOBAL_KEYS, RESET_GROUND, WHEEL_ARROWS_OFF, WHEEL_ARROWS_ON, addGap, anchorPadding, answerEntry, applyInput, applySuggestion, arriveTurn, assertComposes, atEnd, back, backspace, clampSelection, commandUsage, commitEntry, completeDraft, composeModules, createApp, ctrlC, cursorRow, defaultPanelRows, defineModule, editKey, emptyTranscript, endFilter, enterRuns, groundSequence, heldAsks, insertChunk, keySpecOf, linesBelow, listPager, listStep, liveShrink, markedFlights, maskDraft, mayWalk, menuWindow, mergeCompletions, move, moveSelection, normaliseKeySpec, pageSizeFor, pageStep, pagerAt, paletteMatches, paletteQuery, paletteRows, panelOf, parseCommandLine, pasteToLine, placement, prepareSequence, prepareTerminal, push, reflowSequence, remember, resolveFullscreen, resolveKey, routeInput, sanitise, scrollBy, scrollDetail, sendTurn, setPanel, settle, startFilter, turn, typeChar, viewTop, visibleRows, walk, wordLeft, wordRight };
package/dist/keys.d.ts CHANGED
@@ -40,6 +40,13 @@ export type Route = {
40
40
  readonly kind: 'global';
41
41
  readonly module: string;
42
42
  readonly key: KeySpec;
43
+ }
44
+ /** Typed text for a focused panel's `text` hook: a key its keymap does not bind, or a chunk. */
45
+ | {
46
+ readonly kind: 'panel-text';
47
+ readonly module: string;
48
+ readonly panel: string;
49
+ readonly text: string;
43
50
  } | {
44
51
  readonly kind: 'cancel-turn';
45
52
  }
@@ -1 +1 @@
1
- {"version":3,"file":"keys.d.ts","sourceRoot":"","sources":["../src/keys.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAEhD,wBAAgB,SAAS,CAAC,CAAC,EAAE,GAAG,GAAG,OAAO,GAAG,IAAI,CAiBhD;AAED,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,OAAO,EAAE;QAAE,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IAC7E,QAAQ,CAAC,IAAI,EAAE,SAAS,GAAG,YAAY,GAAG,IAAI,CAAC;IAC/C,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;IAC7B,qFAAqF;IACrF,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,uFAAuF;IACvF,QAAQ,CAAC,QAAQ,CAAC,EAAE,WAAW,GAAG,MAAM,CAAC;CAC1C;AAED,MAAM,MAAM,KAAK,GACb;IAAE,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAA;CAAE,GAC/B;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC,GAAG,CAAC,CAAA;CAAE,GACvE;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,GAAG,EAAE,QAAQ,GAAG,KAAK,GAAG,OAAO,CAAA;CAAE,GACnE;IACE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;CACtB,GACD;IAAE,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAA;CAAE;AAClC,sEAAsE;GACpE;IACE,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IACzB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;CACtB,GACD;IAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,GAAG,EAAE,OAAO,CAAA;CAAE,GAC3E;IAAE,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAA;CAAE;AAClC,iDAAiD;GAC/C;IAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IAAC,QAAQ,CAAC,GAAG,EAAE,SAAS,GAAG,WAAW,GAAG,QAAQ,CAAA;CAAE,GAC7E;IAAE,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IAAC,QAAQ,CAAC,GAAG,EAAE,IAAI,GAAG,MAAM,CAAA;CAAE,GACzD;IAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAA;CAAE,GAC3B;IAAE,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAA;CAAE,GAC7B;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GACzB;IAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAA;CAAE,CAAC;AAEhC,8FAA8F;AAC9F,wBAAgB,UAAU,CAAC,KAAK,EAAE,QAAQ,EAAE,GAAG,EAAE,GAAG,EAAE,QAAQ,EAAE,QAAQ,GAAG,KAAK,CAsE/E"}
1
+ {"version":3,"file":"keys.d.ts","sourceRoot":"","sources":["../src/keys.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,76 @@
1
+ import { type ListRow, type ListSpec } from '@mnmal-ai/surface-kit/list';
2
+ /** One row in full, as an app's `open` hook describes it. */
3
+ export interface ListDetail {
4
+ readonly title: string;
5
+ /** A dim line under the title: status, area, when. */
6
+ readonly meta?: string;
7
+ /** Wrapped to the panel's width and scrolled with ↑↓. */
8
+ readonly body?: string;
9
+ }
10
+ /** What the app does with a row. Either may be left out, and its key then does nothing. */
11
+ export interface ListHooks {
12
+ readonly open?: (row: ListRow) => ListDetail | Promise<ListDetail>;
13
+ readonly related?: (row: ListRow) => ListSpec | Promise<ListSpec>;
14
+ }
15
+ export interface ListStep {
16
+ readonly kind: 'list';
17
+ readonly list: ListSpec;
18
+ readonly hooks: ListHooks;
19
+ readonly page: number;
20
+ readonly cursor: number;
21
+ readonly filter: string;
22
+ readonly filtering: boolean;
23
+ /** The page size it was last moved with: `page` and `cursor` are measured in it. */
24
+ readonly size: number;
25
+ }
26
+ export interface DetailStep {
27
+ readonly kind: 'detail';
28
+ readonly row: ListRow;
29
+ readonly hooks: ListHooks;
30
+ readonly detail: ListDetail | 'loading' | {
31
+ readonly error: string;
32
+ };
33
+ readonly scroll: number;
34
+ }
35
+ export interface RelatedLoadingStep {
36
+ readonly kind: 'loading-related';
37
+ readonly row: ListRow;
38
+ /** Set when the related list could not be found. */
39
+ readonly error?: string;
40
+ }
41
+ export type Step = ListStep | DetailStep | RelatedLoadingStep;
42
+ export interface PagerState {
43
+ readonly steps: readonly Step[];
44
+ /** Bumped on every push and pop, so an async result can tell the step it was for is gone. */
45
+ readonly token: number;
46
+ }
47
+ export declare const listStep: (list: ListSpec, hooks: ListHooks) => ListStep;
48
+ export declare const pagerAt: (list: ListSpec, hooks: ListHooks) => PagerState;
49
+ export declare const push: (s: PagerState, step: Step) => PagerState;
50
+ /** Where the cursor's row falls at page size `per`, whatever size it was last moved with. */
51
+ export declare function placement(l: ListStep, per: number): {
52
+ page: number;
53
+ cursor: number;
54
+ };
55
+ /** The list's rows as the filter leaves them. */
56
+ export declare const visibleRows: (l: ListStep) => ListRow[];
57
+ /** The highlighted row, or the open detail's row; undefined when the filter matches nothing. */
58
+ export declare function cursorRow(s: PagerState): ListRow | undefined;
59
+ /** ↑↓: one row, walking onto the next or previous page at an edge; stops at either end. */
60
+ export declare function move(s: PagerState, delta: -1 | 1, pageSize: number): PagerState;
61
+ /** ←→: a page, the cursor on its first row; stays on the first or last page. */
62
+ export declare function turn(s: PagerState, delta: -1 | 1, pageSize: number): PagerState;
63
+ export declare const startFilter: (s: PagerState) => PagerState;
64
+ /** While filtering: the character joins the filter, and the list starts again from its top. */
65
+ export declare const typeChar: (s: PagerState, ch: string) => PagerState;
66
+ export declare const backspace: (s: PagerState) => PagerState;
67
+ /** Enter while filtering: keep the filter, stop typing into it. */
68
+ export declare const endFilter: (s: PagerState) => PagerState;
69
+ /**
70
+ * Esc: filtering → the filter cleared; a detail or a related list → the step before it, where it
71
+ * was left; the first list with a filter kept → the filter cleared; otherwise undefined (close).
72
+ */
73
+ export declare function back(s: PagerState): PagerState | undefined;
74
+ /** ↑↓ on a detail: scroll between 0 and `maxScroll`. */
75
+ export declare function scrollDetail(s: PagerState, delta: -1 | 1, maxScroll: number): PagerState;
76
+ //# sourceMappingURL=list-pager-state.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list-pager-state.d.ts","sourceRoot":"","sources":["../src/list-pager-state.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ import { type ListSpec } from '@mnmal-ai/surface-kit/list';
2
+ import { type ListHooks, type PagerState } from './list-pager-state.js';
3
+ import { type Reply, type TuiModule } from './module.js';
4
+ /** A list longer than this is paged rather than printed. */
5
+ export declare const INLINE_LIST_ROWS = 10;
6
+ export declare const LIST_REPLY_KIND = "surface.list";
7
+ type Panels = {
8
+ pager: PagerState;
9
+ };
10
+ /** Rows a page holds in a panel `rows` tall: the heading, filter and hint lines take the rest. */
11
+ export declare const pageSizeFor: (rows: number) => number;
12
+ /**
13
+ * The pager module and `present`, which a turn handler yields as its reply:
14
+ * `yield { phase: 'final', reply: pager.present(list, { open, related }) }`. A list of up to
15
+ * `INLINE_LIST_ROWS` prints inline. A longer one opens the pager when no panel is open, and the
16
+ * transcript then carries only its heading and a pointer; otherwise its first rows print inline.
17
+ * `/list` reopens the last long list where it was left.
18
+ */
19
+ export declare function listPager(): {
20
+ module: TuiModule<Panels>;
21
+ present(list: ListSpec, hooks?: ListHooks): Reply;
22
+ };
23
+ export {};
24
+ //# sourceMappingURL=list-pager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list-pager.d.ts","sourceRoot":"","sources":["../src/list-pager.tsx"],"names":[],"mappings":"AAKA,OAAO,EAGL,KAAK,QAAQ,EAGd,MAAM,4BAA4B,CAAC;AAIpC,OAAO,EAOL,KAAK,SAAS,EAId,KAAK,UAAU,EAUhB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAgC,KAAK,KAAK,EAAa,KAAK,SAAS,EAAE,MAAM,aAAa,CAAC;AAGlG,4DAA4D;AAC5D,eAAO,MAAM,gBAAgB,KAAK,CAAC;AACnC,eAAO,MAAM,eAAe,iBAAiB,CAAC;AAE9C,KAAK,MAAM,GAAG;IAAE,KAAK,EAAE,UAAU,CAAA;CAAE,CAAC;AAMpC,kGAAkG;AAClG,eAAO,MAAM,WAAW,SAAU,MAAM,KAAG,MAA+B,CAAC;AAmN3E;;;;;;GAMG;AACH,wBAAgB,SAAS,IAAI;IAC3B,MAAM,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC;IAC1B,OAAO,CAAC,IAAI,EAAE,QAAQ,EAAE,KAAK,CAAC,EAAE,SAAS,GAAG,KAAK,CAAC;CACnD,CAqKA"}
package/dist/module.d.ts CHANGED
@@ -99,6 +99,8 @@ export interface ModuleCtx<P> {
99
99
  open<K extends keyof P & string>(panel: K, state: P[K], opts?: {
100
100
  readonly ifNoneOpen?: boolean;
101
101
  }): void;
102
+ /** Whether any panel is open now, this module's or another's: what `ifNoneOpen` checks. */
103
+ panelOpen(): boolean;
102
104
  update<K extends keyof P & string>(panel: K, fn: (state: P[K]) => P[K]): void;
103
105
  close(): void;
104
106
  print(text: string, tone?: Tone): void;
@@ -170,6 +172,14 @@ export interface PanelDef<S, P = unknown> {
170
172
  /** The room the panel has: the columns left beside the rail, and `AppOptions.panelRows`. */
171
173
  readonly size: Size;
172
174
  }) => ReactNode;
175
+ /** Columns each side and rows top and bottom between the panel's edge and its view. Defaults
176
+ * to 4 and 1; the insets come out of the `size` the view is handed. */
177
+ readonly inset?: {
178
+ readonly x: number;
179
+ readonly y: number;
180
+ };
181
+ /** The panel's background colour. Defaults to `theme.color.raised`; `''` paints none. */
182
+ readonly ground?: string;
173
183
  readonly keymap?: readonly {
174
184
  readonly key: KeySpec;
175
185
  readonly act: string;
@@ -189,9 +199,9 @@ export interface PanelDef<S, P = unknown> {
189
199
  */
190
200
  readonly submit?: (state: S, line: string, ctx: ModuleCtx<P>) => S | undefined;
191
201
  /**
192
- * Escape on a panel with `submit`: return a state to stay open with it (abandoning an edit in
193
- * progress), or undefined to close as usual. A different panel opened here with `ctx.open`
194
- * replaces this one rather than being closed with it. Only for a panel with `submit`.
202
+ * Escape: return a state to stay open with it (abandoning an edit, or stepping back), or
203
+ * undefined to close as usual. A different panel opened here with `ctx.open` replaces this one
204
+ * rather than being closed with it.
195
205
  */
196
206
  readonly escape?: (state: S, ctx: ModuleCtx<P>) => S | undefined;
197
207
  /**
@@ -204,6 +214,12 @@ export interface PanelDef<S, P = unknown> {
204
214
  * printable single-character key in `keymap`.
205
215
  */
206
216
  readonly mask?: boolean;
217
+ /**
218
+ * Typed text the keymap does not bind: a printable key, or a pasted chunk whole. Without it such
219
+ * keys are ignored. Not for a panel that keeps the draft live (`confirm`, `submit`), where they
220
+ * edit the line. Return the next state, or undefined to keep it.
221
+ */
222
+ readonly text?: (state: S, text: string, ctx: ModuleCtx<P>) => S | undefined;
207
223
  /** act -> handler. Returning a state replaces the panel's state. */
208
224
  readonly on?: Readonly<Record<string, (state: S, ctx: ModuleCtx<P>) => S | undefined>>;
209
225
  }
@@ -1 +1 @@
1
- {"version":3,"file":"module.d.ts","sourceRoot":"","sources":["../src/module.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"module.d.ts","sourceRoot":"","sources":["../src/module.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,5 @@
1
1
  import { DEFAULT_GROUND } from "@mnmal-ai/surface-theme";
2
+ import { filterRows } from "@mnmal-ai/surface-kit/list";
2
3
 
3
4
  //#region src/complete.ts
4
5
  const TIMEOUT_MS = 150;
@@ -179,7 +180,6 @@ function composeModules(modules) {
179
180
  confirmed.add(c.key);
180
181
  if (def.on?.[c.act] === void 0) problems.push(`${key} confirms '${c.key}' with act '${c.act}', which it has no handler for`);
181
182
  }
182
- if (def.escape !== void 0 && def.submit === void 0) problems.push(`${key} handles escape without submit, which only an input panel may`);
183
183
  if (def.mask === true && def.submit === void 0) problems.push(`${key} masks its input without submit, which only an input panel may`);
184
184
  if (def.mask === true && (def.confirm?.length ?? 0) > 0) problems.push(`${key} masks its input but declares confirm keys, which would arm on a secret's characters`);
185
185
  if (def.mask === true) {
@@ -605,7 +605,16 @@ function resolveKey(state, key, registry) {
605
605
  const spec = keySpecOf(key);
606
606
  const focused = state.overlay === null ? void 0 : registry.panels.get(`${state.overlay.module}/${state.overlay.panel}`);
607
607
  const live = (focused?.def.confirm?.length ?? 0) > 0 || focused?.def.submit !== void 0;
608
- if (spec === null) return state.menu === null && state.overlay !== null && !live ? { kind: "ignore" } : { kind: "edit" };
608
+ const takesText = (text) => state.overlay !== null && !live && focused?.def.text !== void 0 ? {
609
+ kind: "panel-text",
610
+ module: state.overlay.module,
611
+ panel: state.overlay.panel,
612
+ text
613
+ } : null;
614
+ if (spec === null) {
615
+ if (state.menu !== null || state.overlay === null || live) return { kind: "edit" };
616
+ return takesText(key.input) ?? { kind: "ignore" };
617
+ }
609
618
  if (spec === "ctrl+c") return { kind: "exit-chord" };
610
619
  if (state.menu !== null) {
611
620
  if (spec === "up") return {
@@ -647,7 +656,7 @@ function resolveKey(state, key, registry) {
647
656
  module: g.module,
648
657
  key: spec
649
658
  };
650
- if (!live) return { kind: "ignore" };
659
+ if (!live) return ([...spec].length === 1 ? takesText(key.input) : null) ?? { kind: "ignore" };
651
660
  if (spec === "enter") {
652
661
  const armed = focused?.def.confirm?.find((c) => c.key === state.armed);
653
662
  return armed === void 0 ? { kind: "submit" } : {
@@ -1060,6 +1069,138 @@ function dropGaps(t) {
1060
1069
  };
1061
1070
  }
1062
1071
 
1072
+ //#endregion
1073
+ //#region src/list-pager-state.ts
1074
+ const listStep = (list, hooks) => ({
1075
+ kind: "list",
1076
+ list,
1077
+ hooks,
1078
+ page: 0,
1079
+ cursor: 0,
1080
+ filter: "",
1081
+ filtering: false,
1082
+ size: 1
1083
+ });
1084
+ let tokens = 0;
1085
+ const fresh = () => {
1086
+ tokens += 1;
1087
+ return tokens;
1088
+ };
1089
+ const pagerAt = (list, hooks) => ({
1090
+ steps: [listStep(list, hooks)],
1091
+ token: fresh()
1092
+ });
1093
+ const top = (s) => s.steps[s.steps.length - 1];
1094
+ const withTop = (s, step) => ({
1095
+ ...s,
1096
+ steps: [...s.steps.slice(0, -1), step]
1097
+ });
1098
+ const onList = (s, fn) => {
1099
+ const t = top(s);
1100
+ return t?.kind === "list" ? withTop(s, fn(t)) : s;
1101
+ };
1102
+ const push = (s, step) => ({
1103
+ steps: [...s.steps, step],
1104
+ token: fresh()
1105
+ });
1106
+ /** Where the cursor's row falls at page size `per`, whatever size it was last moved with. */
1107
+ function placement(l, per) {
1108
+ const at = l.page * l.size + l.cursor;
1109
+ return {
1110
+ page: Math.floor(at / per),
1111
+ cursor: at % per
1112
+ };
1113
+ }
1114
+ /** The list's rows as the filter leaves them. */
1115
+ const visibleRows = (l) => filterRows(l.list.rows, l.filter);
1116
+ /** The highlighted row, or the open detail's row; undefined when the filter matches nothing. */
1117
+ function cursorRow(s) {
1118
+ const t = top(s);
1119
+ if (t === void 0) return void 0;
1120
+ if (t.kind !== "list") return t.row;
1121
+ return visibleRows(t)[t.page * t.size + t.cursor];
1122
+ }
1123
+ /** ↑↓: one row, walking onto the next or previous page at an edge; stops at either end. */
1124
+ function move(s, delta, pageSize) {
1125
+ return onList(s, (l) => {
1126
+ const n = visibleRows(l).length;
1127
+ if (n === 0) return {
1128
+ ...l,
1129
+ size: pageSize
1130
+ };
1131
+ const at = Math.min(Math.max(0, l.page * l.size + l.cursor + delta), n - 1);
1132
+ return {
1133
+ ...l,
1134
+ page: Math.floor(at / pageSize),
1135
+ cursor: at % pageSize,
1136
+ size: pageSize
1137
+ };
1138
+ });
1139
+ }
1140
+ /** ←→: a page, the cursor on its first row; stays on the first or last page. */
1141
+ function turn(s, delta, pageSize) {
1142
+ return onList(s, (l) => {
1143
+ const pages = Math.max(1, Math.ceil(visibleRows(l).length / pageSize));
1144
+ const { page } = placement(l, pageSize);
1145
+ return {
1146
+ ...l,
1147
+ page: Math.min(Math.max(0, page + delta), pages - 1),
1148
+ cursor: 0,
1149
+ size: pageSize
1150
+ };
1151
+ });
1152
+ }
1153
+ const startFilter = (s) => onList(s, (l) => ({
1154
+ ...l,
1155
+ filtering: true
1156
+ }));
1157
+ /** While filtering: the character joins the filter, and the list starts again from its top. */
1158
+ const typeChar = (s, ch) => onList(s, (l) => l.filtering ? {
1159
+ ...l,
1160
+ filter: l.filter + ch,
1161
+ page: 0,
1162
+ cursor: 0
1163
+ } : l);
1164
+ const backspace = (s) => onList(s, (l) => l.filtering ? {
1165
+ ...l,
1166
+ filter: [...l.filter].slice(0, -1).join(""),
1167
+ page: 0,
1168
+ cursor: 0
1169
+ } : l);
1170
+ /** Enter while filtering: keep the filter, stop typing into it. */
1171
+ const endFilter = (s) => onList(s, (l) => ({
1172
+ ...l,
1173
+ filtering: false
1174
+ }));
1175
+ /**
1176
+ * Esc: filtering → the filter cleared; a detail or a related list → the step before it, where it
1177
+ * was left; the first list with a filter kept → the filter cleared; otherwise undefined (close).
1178
+ */
1179
+ function back(s) {
1180
+ const t = top(s);
1181
+ if (t === void 0) return void 0;
1182
+ if (t.kind === "list" && (t.filtering || t.filter !== "")) return withTop(s, {
1183
+ ...t,
1184
+ filter: "",
1185
+ filtering: false,
1186
+ page: 0,
1187
+ cursor: 0
1188
+ });
1189
+ if (s.steps.length > 1) return {
1190
+ steps: s.steps.slice(0, -1),
1191
+ token: fresh()
1192
+ };
1193
+ }
1194
+ /** ↑↓ on a detail: scroll between 0 and `maxScroll`. */
1195
+ function scrollDetail(s, delta, maxScroll) {
1196
+ const t = top(s);
1197
+ if (t?.kind !== "detail") return s;
1198
+ return withTop(s, {
1199
+ ...t,
1200
+ scroll: Math.min(Math.max(0, t.scroll + delta), Math.max(0, maxScroll))
1201
+ });
1202
+ }
1203
+
1063
1204
  //#endregion
1064
1205
  //#region src/module.ts
1065
1206
  const MODULE_ID = /^[a-z][a-z0-9-]*(\.[a-z][a-z0-9-]*)*$/;
@@ -1099,4 +1240,4 @@ function setPanel(o, kind, next) {
1099
1240
  }
1100
1241
 
1101
1242
  //#endregion
1102
- export { viewTop as $, clampSelection as A, keySpecOf as B, prepareTerminal as C, routeInput as D, sanitise as E, moveSelection as F, remember as G, EMPTY_HISTORY as H, paletteMatches as I, FOLLOWING as J, settle as K, paletteQuery as L, completeDraft as M, enterRuns as N, unavailableReason as O, menuWindow as P, scrollBy as Q, paletteRows as R, prepareSequence as S, reprintStart as T, HISTORY_MAX as U, resolveKey as V, mayWalk as W, pageStep as X, linesBelow as Y, resolveFullscreen as Z, WHEEL_ARROWS_OFF as _, applySuggestion as _t, answerEntry as a, graphemeAt as at, groundSequence as b, dropGaps as c, pasteToLine as ct, markedFlights as d, applyInput as dt, CTRL_C_WINDOW_MS as et, sendTurn as f, CompositionError as ft, RESET_GROUND as g, normaliseKeySpec as gt, REPRINT_LINES as h, composeModules as ht, addGap as i, editKey as it, commandUsage as j, MENU_NAME_WIDTH as k, emptyTranscript as l, wordLeft as lt, DEFAULT_GROUND as m, assertComposes as mt, setPanel as n, EMPTY_DRAFT as nt, arriveTurn as o, insertChunk as ot, CLEAR_PANE as p, RESERVED_GLOBAL_KEYS as pt, walk as q, defineModule as r, atEnd as rt, commitEntry as s, maskDraft as st, panelOf as t, ctrlC as tt, heldAsks as u, wordRight as ut, WHEEL_ARROWS_ON as v, mergeCompletions as vt, reflowSequence as w, liveShrink as x, anchorPadding as y, parseCommandLine as z };
1243
+ export { parseCommandLine as $, RESET_GROUND as A, normaliseKeySpec as At, sanitise as B, emptyTranscript as C, wordLeft as Ct, CLEAR_PANE as D, RESERVED_GLOBAL_KEYS as Dt, sendTurn as E, CompositionError as Et, liveShrink as F, commandUsage as G, unavailableReason as H, prepareSequence as I, menuWindow as J, completeDraft as K, prepareTerminal as L, WHEEL_ARROWS_ON as M, mergeCompletions as Mt, anchorPadding as N, DEFAULT_GROUND as O, assertComposes as Ot, groundSequence as P, paletteRows as Q, reflowSequence as R, dropGaps as S, pasteToLine as St, markedFlights as T, applyInput as Tt, MENU_NAME_WIDTH as U, routeInput as V, clampSelection as W, paletteMatches as X, moveSelection as Y, paletteQuery as Z, visibleRows as _, atEnd as _t, backspace as a, remember as at, arriveTurn as b, insertChunk as bt, listStep as c, FOLLOWING as ct, placement as d, resolveFullscreen as dt, keySpecOf as et, push as f, scrollBy as ft, typeChar as g, EMPTY_DRAFT as gt, turn as h, ctrlC as ht, back as i, mayWalk as it, WHEEL_ARROWS_OFF as j, applySuggestion as jt, REPRINT_LINES as k, composeModules as kt, move as l, linesBelow as lt, startFilter as m, CTRL_C_WINDOW_MS as mt, setPanel as n, EMPTY_HISTORY as nt, cursorRow as o, settle as ot, scrollDetail as p, viewTop as pt, enterRuns as q, defineModule as r, HISTORY_MAX as rt, endFilter as s, walk as st, panelOf as t, resolveKey as tt, pagerAt as u, pageStep as ut, addGap as v, editKey as vt, heldAsks as w, wordRight as wt, commitEntry as x, maskDraft as xt, answerEntry as y, graphemeAt as yt, reprintStart as z };
package/dist/pure.d.ts CHANGED
@@ -7,6 +7,7 @@ export { FOLLOWING, linesBelow, pageStep, resolveFullscreen, type Scroll, scroll
7
7
  export { EMPTY_HISTORY, HISTORY_MAX, type HistoryState, mayWalk, remember, settle, walk } from './history.js';
8
8
  export { normaliseKeySpec } from './key-spec.js';
9
9
  export { type KeyState, keySpecOf, type Route, resolveKey } from './keys.js';
10
+ export { back, backspace, cursorRow, type DetailStep, endFilter, type ListDetail, type ListHooks, type ListStep, listStep, move, type PagerState, pagerAt, placement, push, type RelatedLoadingStep, type Step, scrollDetail, startFilter, turn, typeChar, visibleRows } from './list-pager-state.js';
10
11
  export { type ArgSpec, type Armed, type Chip, type CommandSpec, type Completer, type ConfirmBinding, defineModule, type GlobalBinding, type Key, type KeySpec, type ModuleCtx, type ModuleSpec, type PanelDef, type PresenceSpec, type RailItem, type Renderer, type Reply, type Size, type SubmitOptions, type Suggestion, type TuiEvents, type TuiModule, type TurnContext, type TurnHandler, type TurnPhase, type TurnUpdate } from './module.js';
11
12
  export { type Overlay, panelOf, setPanel } from './overlay.js';
12
13
  export { clampSelection, commandUsage, completeDraft, enterRuns, MENU_NAME_WIDTH, menuWindow, moveSelection, type PaletteRow, paletteMatches, paletteQuery, paletteRows, parseCommandLine } from './palette.js';
@@ -1 +1 @@
1
- {"version":3,"file":"pure.d.ts","sourceRoot":"","sources":["../src/pure.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAClE,OAAO,EACL,cAAc,EACd,gBAAgB,EAChB,cAAc,EACd,oBAAoB,EACpB,KAAK,QAAQ,EACd,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,KAAK,EACL,KAAK,KAAK,EACV,KAAK,QAAQ,EACb,WAAW,EACX,OAAO,EACP,WAAW,EACX,SAAS,EACT,WAAW,EACX,QAAQ,EACR,SAAS,EACV,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,gBAAgB,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAC1D,OAAO,EACL,SAAS,EACT,UAAU,EACV,QAAQ,EACR,iBAAiB,EACjB,KAAK,MAAM,EACX,QAAQ,EACR,OAAO,EACR,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,aAAa,EACb,WAAW,EACX,KAAK,YAAY,EACjB,OAAO,EACP,QAAQ,EACR,MAAM,EACN,IAAI,EACL,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,EAAE,KAAK,QAAQ,EAAE,SAAS,EAAE,KAAK,KAAK,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAC7E,OAAO,EACL,KAAK,OAAO,EACZ,KAAK,KAAK,EACV,KAAK,IAAI,EACT,KAAK,WAAW,EAChB,KAAK,SAAS,EACd,KAAK,cAAc,EACnB,YAAY,EACZ,KAAK,aAAa,EAClB,KAAK,GAAG,EACR,KAAK,OAAO,EACZ,KAAK,SAAS,EACd,KAAK,UAAU,EACf,KAAK,QAAQ,EACb,KAAK,YAAY,EACjB,KAAK,QAAQ,EACb,KAAK,QAAQ,EACb,KAAK,KAAK,EACV,KAAK,IAAI,EACT,KAAK,aAAa,EAClB,KAAK,UAAU,EACf,KAAK,SAAS,EACd,KAAK,SAAS,EACd,KAAK,WAAW,EAChB,KAAK,WAAW,EAChB,KAAK,SAAS,EACd,KAAK,UAAU,EAChB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,KAAK,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAC/D,OAAO,EACL,cAAc,EACd,YAAY,EACZ,aAAa,EACb,SAAS,EACT,eAAe,EACf,UAAU,EACV,aAAa,EACb,KAAK,UAAU,EACf,cAAc,EACd,YAAY,EACZ,WAAW,EACX,gBAAgB,EACjB,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,KAAK,UAAU,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC/D,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EACL,aAAa,EACb,UAAU,EACV,cAAc,EACd,cAAc,EACd,KAAK,WAAW,EAChB,UAAU,EACV,KAAK,sBAAsB,EAC3B,eAAe,EACf,eAAe,EACf,YAAY,EACZ,cAAc,EACd,KAAK,WAAW,EAChB,KAAK,eAAe,EACpB,gBAAgB,EAChB,eAAe,EAChB,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,KAAK,WAAW,EAChB,KAAK,QAAQ,EACb,KAAK,QAAQ,EACb,MAAM,EACN,WAAW,EACX,UAAU,EACV,WAAW,EACX,KAAK,KAAK,EACV,eAAe,EACf,KAAK,MAAM,EACX,KAAK,QAAQ,EACb,QAAQ,EACR,aAAa,EACb,KAAK,SAAS,EACd,QAAQ,EACR,KAAK,UAAU,EAChB,MAAM,iBAAiB,CAAC"}
1
+ {"version":3,"file":"pure.d.ts","sourceRoot":"","sources":["../src/pure.ts"],"names":[],"mappings":"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"}
package/dist/pure.js CHANGED
@@ -1,3 +1,3 @@
1
- import { $ as viewTop, A as clampSelection, B as keySpecOf, C as prepareTerminal, D as routeInput, E as sanitise, F as moveSelection, G as remember, H as EMPTY_HISTORY, I as paletteMatches, J as FOLLOWING, K as settle, L as paletteQuery, M as completeDraft, N as enterRuns, P as menuWindow, Q as scrollBy, R as paletteRows, S as prepareSequence, U as HISTORY_MAX, V as resolveKey, W as mayWalk, X as pageStep, Y as linesBelow, Z as resolveFullscreen, _ as WHEEL_ARROWS_OFF, _t as applySuggestion, a as answerEntry, b as groundSequence, ct as pasteToLine, d as markedFlights, dt as applyInput, et as CTRL_C_WINDOW_MS, f as sendTurn, ft as CompositionError, g as RESET_GROUND, gt as normaliseKeySpec, ht as composeModules, i as addGap, it as editKey, j as commandUsage, k as MENU_NAME_WIDTH, l as emptyTranscript, lt as wordLeft, m as DEFAULT_GROUND, mt as assertComposes, n as setPanel, nt as EMPTY_DRAFT, o as arriveTurn, ot as insertChunk, p as CLEAR_PANE, pt as RESERVED_GLOBAL_KEYS, q as walk, r as defineModule, rt as atEnd, s as commitEntry, st as maskDraft, t as panelOf, tt as ctrlC, u as heldAsks, ut as wordRight, v as WHEEL_ARROWS_ON, vt as mergeCompletions, w as reflowSequence, x as liveShrink, y as anchorPadding, z as parseCommandLine } from "./overlay-By-Ewn3S.js";
1
+ import { $ as parseCommandLine, A as RESET_GROUND, At as normaliseKeySpec, B as sanitise, C as emptyTranscript, Ct as wordLeft, D as CLEAR_PANE, Dt as RESERVED_GLOBAL_KEYS, E as sendTurn, Et as CompositionError, F as liveShrink, G as commandUsage, I as prepareSequence, J as menuWindow, K as completeDraft, L as prepareTerminal, M as WHEEL_ARROWS_ON, Mt as mergeCompletions, N as anchorPadding, O as DEFAULT_GROUND, Ot as assertComposes, P as groundSequence, Q as paletteRows, R as reflowSequence, St as pasteToLine, T as markedFlights, Tt as applyInput, U as MENU_NAME_WIDTH, V as routeInput, W as clampSelection, X as paletteMatches, Y as moveSelection, Z as paletteQuery, _ as visibleRows, _t as atEnd, a as backspace, at as remember, b as arriveTurn, bt as insertChunk, c as listStep, ct as FOLLOWING, d as placement, dt as resolveFullscreen, et as keySpecOf, f as push, ft as scrollBy, g as typeChar, gt as EMPTY_DRAFT, h as turn, ht as ctrlC, i as back, it as mayWalk, j as WHEEL_ARROWS_OFF, jt as applySuggestion, kt as composeModules, l as move, lt as linesBelow, m as startFilter, mt as CTRL_C_WINDOW_MS, n as setPanel, nt as EMPTY_HISTORY, o as cursorRow, ot as settle, p as scrollDetail, pt as viewTop, q as enterRuns, r as defineModule, rt as HISTORY_MAX, s as endFilter, st as walk, t as panelOf, tt as resolveKey, u as pagerAt, ut as pageStep, v as addGap, vt as editKey, w as heldAsks, wt as wordRight, x as commitEntry, xt as maskDraft, y as answerEntry } from "./overlay-5s8slC38.js";
2
2
 
3
- export { CLEAR_PANE, CTRL_C_WINDOW_MS, CompositionError, DEFAULT_GROUND, EMPTY_DRAFT, EMPTY_HISTORY, FOLLOWING, HISTORY_MAX, MENU_NAME_WIDTH, RESERVED_GLOBAL_KEYS, RESET_GROUND, WHEEL_ARROWS_OFF, WHEEL_ARROWS_ON, addGap, anchorPadding, answerEntry, applyInput, applySuggestion, arriveTurn, assertComposes, atEnd, clampSelection, commandUsage, commitEntry, completeDraft, composeModules, ctrlC, defineModule, editKey, emptyTranscript, enterRuns, groundSequence, heldAsks, insertChunk, keySpecOf, linesBelow, liveShrink, markedFlights, maskDraft, mayWalk, menuWindow, mergeCompletions, moveSelection, normaliseKeySpec, pageStep, paletteMatches, paletteQuery, paletteRows, panelOf, parseCommandLine, pasteToLine, prepareSequence, prepareTerminal, reflowSequence, remember, resolveFullscreen, resolveKey, routeInput, sanitise, scrollBy, sendTurn, setPanel, settle, viewTop, walk, wordLeft, wordRight };
3
+ export { CLEAR_PANE, CTRL_C_WINDOW_MS, CompositionError, DEFAULT_GROUND, EMPTY_DRAFT, EMPTY_HISTORY, FOLLOWING, HISTORY_MAX, MENU_NAME_WIDTH, RESERVED_GLOBAL_KEYS, RESET_GROUND, WHEEL_ARROWS_OFF, WHEEL_ARROWS_ON, addGap, anchorPadding, answerEntry, applyInput, applySuggestion, arriveTurn, assertComposes, atEnd, back, backspace, clampSelection, commandUsage, commitEntry, completeDraft, composeModules, ctrlC, cursorRow, defineModule, editKey, emptyTranscript, endFilter, enterRuns, groundSequence, heldAsks, insertChunk, keySpecOf, linesBelow, listStep, liveShrink, markedFlights, maskDraft, mayWalk, menuWindow, mergeCompletions, move, moveSelection, normaliseKeySpec, pageStep, pagerAt, paletteMatches, paletteQuery, paletteRows, panelOf, parseCommandLine, pasteToLine, placement, prepareSequence, prepareTerminal, push, reflowSequence, remember, resolveFullscreen, resolveKey, routeInput, sanitise, scrollBy, scrollDetail, sendTurn, setPanel, settle, startFilter, turn, typeChar, viewTop, visibleRows, walk, wordLeft, wordRight };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mnmal-ai/surface-core",
3
- "version": "0.16.0",
3
+ "version": "0.17.0",
4
4
  "description": "Pluggable terminal UI base on Ink 8 + React 19: module registry, createApp, the turn engine and the shell.",
5
5
  "license": "Apache-2.0",
6
6
  "repository": {
@@ -23,8 +23,8 @@
23
23
  "dist"
24
24
  ],
25
25
  "dependencies": {
26
- "@mnmal-ai/surface-kit": "0.16.0",
27
- "@mnmal-ai/surface-theme": "0.16.0"
26
+ "@mnmal-ai/surface-kit": "0.17.0",
27
+ "@mnmal-ai/surface-theme": "0.17.0"
28
28
  },
29
29
  "peerDependencies": {
30
30
  "ink": "^8.0.0",