@flyingrobots/bijou-tui-app 7.2.0 → 8.0.0-rc.1

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.
Files changed (53) hide show
  1. package/dist/index.d.ts +3 -145
  2. package/dist/index.d.ts.map +1 -1
  3. package/dist/index.js +2 -436
  4. package/dist/index.js.map +1 -1
  5. package/dist/skeleton-chrome.d.ts +8 -0
  6. package/dist/skeleton-chrome.d.ts.map +1 -0
  7. package/dist/skeleton-chrome.js +39 -0
  8. package/dist/skeleton-chrome.js.map +1 -0
  9. package/dist/skeleton-contract.d.ts +6 -0
  10. package/dist/skeleton-contract.d.ts.map +1 -0
  11. package/dist/skeleton-contract.js +2 -0
  12. package/dist/skeleton-contract.js.map +1 -0
  13. package/dist/skeleton-create.d.ts +12 -0
  14. package/dist/skeleton-create.d.ts.map +1 -0
  15. package/dist/skeleton-create.js +84 -0
  16. package/dist/skeleton-create.js.map +1 -0
  17. package/dist/skeleton-drawer.d.ts +6 -0
  18. package/dist/skeleton-drawer.d.ts.map +1 -0
  19. package/dist/skeleton-drawer.js +50 -0
  20. package/dist/skeleton-drawer.js.map +1 -0
  21. package/dist/skeleton-keys.d.ts +4 -0
  22. package/dist/skeleton-keys.d.ts.map +1 -0
  23. package/dist/skeleton-keys.js +35 -0
  24. package/dist/skeleton-keys.js.map +1 -0
  25. package/dist/skeleton-layout.d.ts +6 -0
  26. package/dist/skeleton-layout.d.ts.map +1 -0
  27. package/dist/skeleton-layout.js +54 -0
  28. package/dist/skeleton-layout.js.map +1 -0
  29. package/dist/skeleton-overlays.d.ts +7 -0
  30. package/dist/skeleton-overlays.d.ts.map +1 -0
  31. package/dist/skeleton-overlays.js +78 -0
  32. package/dist/skeleton-overlays.js.map +1 -0
  33. package/dist/skeleton-page-contract.d.ts +28 -0
  34. package/dist/skeleton-page-contract.d.ts.map +1 -0
  35. package/dist/skeleton-page-contract.js +2 -0
  36. package/dist/skeleton-page-contract.js.map +1 -0
  37. package/dist/skeleton-page.d.ts +13 -0
  38. package/dist/skeleton-page.d.ts.map +1 -0
  39. package/dist/skeleton-page.js +73 -0
  40. package/dist/skeleton-page.js.map +1 -0
  41. package/dist/skeleton-state-contract.d.ts +21 -0
  42. package/dist/skeleton-state-contract.d.ts.map +1 -0
  43. package/dist/skeleton-state-contract.js +2 -0
  44. package/dist/skeleton-state-contract.js.map +1 -0
  45. package/dist/skeleton-tab-contract.d.ts +50 -0
  46. package/dist/skeleton-tab-contract.d.ts.map +1 -0
  47. package/dist/skeleton-tab-contract.js +2 -0
  48. package/dist/skeleton-tab-contract.js.map +1 -0
  49. package/dist/skeleton-theme-contract.d.ts +53 -0
  50. package/dist/skeleton-theme-contract.d.ts.map +1 -0
  51. package/dist/skeleton-theme-contract.js +2 -0
  52. package/dist/skeleton-theme-contract.js.map +1 -0
  53. package/package.json +3 -3
package/dist/index.d.ts CHANGED
@@ -1,146 +1,4 @@
1
- import { type BijouContext, type TokenValue } from '@flyingrobots/bijou';
2
- import { type FramedApp, type FrameLayoutNode, type KeyMap, type ViewOutput } from '@flyingrobots/bijou-tui';
3
- /** Context passed to consumer-provided skeleton page renderers. */
4
- export interface SkeletonRenderContext {
5
- /** Bijou context used by the skeleton shell. */
6
- readonly ctx: BijouContext;
7
- /** Tab being rendered. */
8
- readonly tab: SkeletonTab;
9
- /** Current skeleton-owned page model. */
10
- readonly model: SkeletonPageModel;
11
- }
12
- /** Context passed to consumer-provided skeleton layout factories. */
13
- export interface SkeletonLayoutContext {
14
- /** Bijou context used by the skeleton shell. */
15
- readonly ctx: BijouContext;
16
- /** Tab being rendered. */
17
- readonly tab: SkeletonTab;
18
- /** Current skeleton-owned page model. */
19
- readonly model: SkeletonPageModel;
20
- }
21
- /** Single top-level tab in the app skeleton. */
22
- export interface SkeletonTab {
23
- /** Stable tab id. */
24
- readonly id: string;
25
- /** Visible tab label. */
26
- readonly title: string;
27
- /**
28
- * Optional pane renderer for this tab.
29
- *
30
- * Use this when the page body is a single pane. Return a `Surface` or
31
- * `LayoutNode`; strings are intentionally not accepted by the framed app
32
- * render seam.
33
- */
34
- readonly render?: (width: number, height: number, context: SkeletonRenderContext) => ViewOutput;
35
- /**
36
- * Optional full frame layout factory for this tab.
37
- *
38
- * Use this when the page owns splits, grids, or custom pane topology.
39
- */
40
- readonly layout?: (context: SkeletonLayoutContext) => FrameLayoutNode;
41
- }
42
- /** Resolved active-tab metadata for dynamic status rendering. */
43
- export interface SkeletonStatusContext {
44
- /** Active tab id. */
45
- readonly activeTabId: string;
46
- /** Active tab title. */
47
- readonly activeTabTitle: string;
48
- }
49
- /** Optional token overrides for shell chrome regions. */
50
- export interface SkeletonThemeTokens {
51
- /** Header background token for non-tab space. Defaults to `surface.primary`. */
52
- readonly headerBgToken?: TokenValue;
53
- /** Active tab token. Defaults to `surface.elevated`. */
54
- readonly activeTabToken?: TokenValue;
55
- /** Inactive tab token. Defaults to `surface.secondary`. */
56
- readonly inactiveTabToken?: TokenValue;
57
- /** Footer status-line token. Defaults to `surface.secondary`. */
58
- readonly footerStatusToken?: TokenValue;
59
- /** Footer controls-line token. Defaults to `surface.primary`. */
60
- readonly footerControlsToken?: TokenValue;
61
- /** Separator row token. Defaults to `border.muted`. */
62
- readonly separatorToken?: TokenValue;
63
- /** Drawer border token. Defaults to `border.primary`. */
64
- readonly drawerBorderToken?: TokenValue;
65
- /** Drawer background token. Defaults to `surface.overlay`. */
66
- readonly drawerBgToken?: TokenValue;
67
- /** Quit modal border token. Defaults to `border.warning`. */
68
- readonly modalBorderToken?: TokenValue;
69
- /** Quit modal background token. Defaults to `surface.overlay`. */
70
- readonly modalBgToken?: TokenValue;
71
- }
72
- /**
73
- * Options for creating a batteries-included design-system shell starter.
74
- *
75
- * The scaffold is intentionally opinionated:
76
- * - tabs model peer destinations
77
- * - the drawer models supplemental side work
78
- * - the quit modal models blocking confirmation
79
- * - the footer rows model shell status and shortcut chrome
80
- */
81
- export interface CreateTuiAppSkeletonOptions {
82
- /** Bijou context for theme + style rendering. */
83
- readonly ctx: BijouContext;
84
- /** App title shown in the header line below tabs. */
85
- readonly title?: string;
86
- /**
87
- * Tabs shown on the top row.
88
- *
89
- * Defaults to two tabs:
90
- * 1. drawer page (empty main pane + animated drawer)
91
- * 2. split page (1/3 + 2/3)
92
- */
93
- readonly tabs?: readonly SkeletonTab[];
94
- /** Optional default tab id. Falls back to first tab. */
95
- readonly defaultTabId?: string;
96
- /**
97
- * Footer key legend for controls row.
98
- *
99
- * Defaults to:
100
- * `[ ] pages | o drawer | tab panes | ctrl+p commands | q quit`
101
- */
102
- readonly keyLegend?: string;
103
- /** Footer status message (static or dynamic by active tab). */
104
- readonly statusMessage?: string | ((ctx: SkeletonStatusContext) => string);
105
- /** Optional shell token overrides. */
106
- readonly themeTokens?: SkeletonThemeTokens;
107
- /** Optional extra global key bindings merged into skeleton defaults. */
108
- readonly globalKeys?: KeyMap<SkeletonMsg>;
109
- }
110
- /** Page model owned by the stock skeleton shell. */
111
- export interface SkeletonPageModel {
112
- readonly ready: true;
113
- readonly drawerOpen: boolean;
114
- readonly drawerProgress: number;
115
- readonly quitConfirmOpen: boolean;
116
- }
117
- /** Messages used by the skeleton app shell. */
118
- export type SkeletonMsg = {
119
- type: 'request-quit';
120
- } | {
121
- type: 'confirm-quit';
122
- } | {
123
- type: 'cancel-quit';
124
- } | {
125
- type: 'toggle-drawer';
126
- } | {
127
- type: 'drawer-progress';
128
- value: number;
129
- };
130
- /**
131
- * Create a full-screen framed app skeleton with:
132
- * - tabbed top bar (`|` separators, active/inactive surface tokens)
133
- * - header line
134
- * - animated supplemental drawer on tab 1 (`o` to toggle)
135
- * - tab switching with `[` and `]` (frame defaults)
136
- * - quit confirmation modal (`q` / `ctrl+c`)
137
- * - two-line footer (status line + controls line)
138
- * - full-width `\\` separator row above footer
139
- * - default 2-tab setup (drawer page + 1/3:2/3 split page)
140
- *
141
- * Use this starter when you want an opinionated shell for multi-view apps.
142
- * Avoid it for one-shot prompts or simple document-style flows that do not
143
- * need tabbed navigation, shell chrome, or overlay orchestration.
144
- */
145
- export declare function createTuiAppSkeleton(options: CreateTuiAppSkeletonOptions): FramedApp<SkeletonPageModel, SkeletonMsg>;
1
+ /** Stable public facade for the batteries-included TUI app skeleton. */
2
+ export { createTuiAppSkeleton } from './skeleton-create.js';
3
+ export type { CreateTuiAppSkeletonOptions, SkeletonLayoutContext, SkeletonMsg, SkeletonPageModel, SkeletonRenderContext, SkeletonStatusContext, SkeletonTab, SkeletonThemeTokens, } from './skeleton-contract.js';
146
4
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,wEAAwE;AAExE,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAC5D,YAAY,EACV,2BAA2B,EAC3B,qBAAqB,EACrB,WAAW,EACX,iBAAiB,EACjB,qBAAqB,EACrB,qBAAqB,EACrB,WAAW,EACX,mBAAmB,GACpB,MAAM,wBAAwB,CAAC"}
package/dist/index.js CHANGED
@@ -1,437 +1,3 @@
1
- import { createSurface } from '@flyingrobots/bijou';
2
- import { animate, clipToWidth, createFramedApp, createKeyMap, createSplitPaneState, drawer, formatKeyCombo, modal, quit, statusBar, visibleLength, } from '@flyingrobots/bijou-tui';
3
- import { renderSplitPaneLabelSurface } from './split-pane-surface.js';
4
- const DEFAULT_TABS = [
5
- { id: 'home', title: 'Home' },
6
- { id: 'split', title: 'Split' },
7
- ];
8
- const DEFAULT_KEY_LEGEND = '[ ] pages | o drawer | tab panes | ctrl+p commands | q quit';
9
- const DEFAULT_SPLIT_RATIO = 1 / 3;
10
- /**
11
- * Create a full-screen framed app skeleton with:
12
- * - tabbed top bar (`|` separators, active/inactive surface tokens)
13
- * - header line
14
- * - animated supplemental drawer on tab 1 (`o` to toggle)
15
- * - tab switching with `[` and `]` (frame defaults)
16
- * - quit confirmation modal (`q` / `ctrl+c`)
17
- * - two-line footer (status line + controls line)
18
- * - full-width `\\` separator row above footer
19
- * - default 2-tab setup (drawer page + 1/3:2/3 split page)
20
- *
21
- * Use this starter when you want an opinionated shell for multi-view apps.
22
- * Avoid it for one-shot prompts or simple document-style flows that do not
23
- * need tabbed navigation, shell chrome, or overlay orchestration.
24
- */
25
- export function createTuiAppSkeleton(options) {
26
- const tabs = options.tabs ?? DEFAULT_TABS;
27
- const first = tabs[0];
28
- if (first === undefined)
29
- throw new Error('createTuiAppSkeleton: "tabs" must contain at least one tab');
30
- const seenTabIds = new Set();
31
- for (const tab of tabs) {
32
- if (seenTabIds.has(tab.id)) {
33
- throw new Error(`createTuiAppSkeleton: duplicate tab id "${tab.id}"`);
34
- }
35
- if (tab.render != null && tab.layout != null) {
36
- throw new Error(`createTuiAppSkeleton: tab "${tab.id}" cannot define both render and layout`);
37
- }
38
- seenTabIds.add(tab.id);
39
- }
40
- const tabsById = new Map(tabs.map((tab) => [tab.id, tab]));
41
- const pageSpecs = buildPageSpecs(tabs);
42
- const pageConfigs = new Map(pageSpecs.map((spec) => [spec.tab.id, pageConfigFor(spec)]));
43
- const pages = pageSpecs.map((spec) => {
44
- const config = pageConfigFor(spec);
45
- return {
46
- id: spec.tab.id,
47
- title: spec.tab.title,
48
- init: () => [createInitialPageModel(config), []],
49
- update(msg, model) {
50
- return updateSkeletonPage(msg, model, config);
51
- },
52
- layout: (model) => layoutFor(spec, options.ctx, model),
53
- keyMap: config.hasDrawer
54
- ? createKeyMap().group('Page', (group) => group
55
- .bind('o', 'Toggle drawer', { type: 'toggle-drawer' }))
56
- : undefined,
57
- };
58
- });
59
- const defaultGlobalKeys = createKeyMap()
60
- .group('Global', (group) => group
61
- .bind('q', 'Quit (confirm)', { type: 'request-quit' })
62
- .bind('ctrl+c', 'Quit (confirm)', { type: 'request-quit' })
63
- .bind('y', 'Confirm quit', { type: 'confirm-quit' })
64
- .bind('enter', 'Confirm quit', { type: 'confirm-quit' })
65
- .bind('n', 'Cancel quit', { type: 'cancel-quit' })
66
- .bind('escape', 'Cancel quit', { type: 'cancel-quit' }));
67
- const mergedGlobalKeys = mergeKeyMaps(defaultGlobalKeys, options.globalKeys);
68
- return createFramedApp({
69
- title: options.title ?? 'App',
70
- pages,
71
- defaultPageId: options.defaultTabId != null && tabsById.has(options.defaultTabId)
72
- ? options.defaultTabId
73
- : first.id,
74
- bodyTopRows: 2,
75
- bodyBottomRows: 3,
76
- globalKeys: mergedGlobalKeys,
77
- enableCommandPalette: true,
78
- overlayFactory: (frame) => buildSkeletonOverlays({
79
- frame,
80
- tabsById,
81
- allTabs: tabs,
82
- pageConfigs,
83
- title: options.title ?? 'App',
84
- keyLegend: options.keyLegend ?? DEFAULT_KEY_LEGEND,
85
- statusMessage: options.statusMessage,
86
- tokens: options.themeTokens,
87
- ctx: options.ctx,
88
- }),
89
- });
90
- }
91
- /** Assemble the full overlay stack (tab bar, header, drawer, footer, quit modal). */
92
- function buildSkeletonOverlays(options) {
93
- const width = Math.max(0, options.frame.screenRect.width);
94
- const height = Math.max(0, options.frame.screenRect.height);
95
- if (width <= 0 || height <= 0)
96
- return [];
97
- const tab = options.tabsById.get(options.frame.activePageId) ?? options.allTabs[0];
98
- if (tab == null)
99
- return [];
100
- const pageConfig = options.pageConfigs.get(tab.id) ?? { hasDrawer: false };
101
- const resolvedStatus = typeof options.statusMessage === 'function'
102
- ? options.statusMessage({ activeTabId: tab.id, activeTabTitle: tab.title })
103
- : (options.statusMessage ?? `${tab.title} ready`);
104
- const overlays = [];
105
- overlays.push({
106
- row: 0,
107
- col: 0,
108
- content: renderTabRow(width, options.allTabs, tab.id, options.tokens, options.ctx),
109
- });
110
- if (height >= 5) {
111
- overlays.push({
112
- row: 1,
113
- col: 0,
114
- content: renderHeaderRow(width, options.title, tab.title, options.tokens, options.ctx),
115
- });
116
- }
117
- const drawerOverlay = maybeRenderDrawerOverlay(options.frame, pageConfig, width, height, options.tokens, options.ctx);
118
- if (drawerOverlay != null)
119
- overlays.push(drawerOverlay);
120
- if (height >= 3) {
121
- if (height >= 4) {
122
- overlays.push({
123
- row: height - 3,
124
- col: 0,
125
- content: renderSeparatorRow(width, options.tokens, options.ctx),
126
- });
127
- }
128
- overlays.push({
129
- row: height - 2,
130
- col: 0,
131
- content: renderFooterStatusRow(width, resolvedStatus, tab.title, options.tokens, options.ctx),
132
- });
133
- overlays.push({
134
- row: height - 1,
135
- col: 0,
136
- content: renderFooterControlsRow(width, options.keyLegend, options.tokens, options.ctx),
137
- });
138
- }
139
- else if (height === 2) {
140
- overlays.push({
141
- row: 1,
142
- col: 0,
143
- content: renderFooterControlsRow(width, options.keyLegend, options.tokens, options.ctx),
144
- });
145
- }
146
- if (options.frame.pageModel.quitConfirmOpen) {
147
- overlays.push(modal({
148
- title: 'Quit App?',
149
- body: 'Exit this TUI session now?',
150
- hint: 'Y / Enter confirm • N / Esc cancel',
151
- width: Math.min(56, width - 2, Math.max(20, width - 4)),
152
- screenWidth: width,
153
- screenHeight: height,
154
- borderToken: options.tokens?.modalBorderToken ?? options.ctx.theme.theme.border.warning,
155
- bgToken: options.tokens?.modalBgToken ?? options.ctx.theme.theme.surface.overlay,
156
- ctx: options.ctx,
157
- }));
158
- }
159
- return overlays;
160
- }
161
- /** Render the top tab bar with active/inactive styling and separators. */
162
- function renderTabRow(width, tabs, activeTabId, tokens, ctx) {
163
- const headerBg = tokens?.headerBgToken ?? ctx.theme.theme.surface.primary;
164
- const activeToken = tokens?.activeTabToken ?? ctx.theme.theme.surface.elevated;
165
- const inactiveToken = tokens?.inactiveTabToken ?? ctx.theme.theme.surface.secondary;
166
- const separator = style(' | ', headerBg, ctx);
167
- const tabsRaw = tabs
168
- .map((tab) => style(` ${tab.title} `, tab.id === activeTabId ? activeToken : inactiveToken, ctx))
169
- .join(separator);
170
- return fillToWidth(tabsRaw, width, headerBg, ctx);
171
- }
172
- /** Render the header row with app title and active tab name. */
173
- function renderHeaderRow(width, title, activeTabTitle, tokens, ctx) {
174
- const headerBg = tokens?.headerBgToken ?? ctx.theme.theme.surface.primary;
175
- const line = statusBar({
176
- left: ` ${title}`,
177
- right: activeTabTitle,
178
- width,
179
- });
180
- return style(line, headerBg, ctx);
181
- }
182
- /** Render a full-width diagonal separator line above the footer. */
183
- function renderSeparatorRow(width, tokens, ctx) {
184
- const separatorToken = tokens?.separatorToken ?? ctx.theme.theme.border.muted;
185
- return style('\\'.repeat(width), separatorToken, ctx);
186
- }
187
- /** Render the footer status bar with status message and tab name. */
188
- function renderFooterStatusRow(width, status, activeTabTitle, tokens, ctx) {
189
- const footerToken = tokens?.footerStatusToken ?? ctx.theme.theme.surface.secondary;
190
- const line = statusBar({
191
- left: ` ${status}`,
192
- right: activeTabTitle,
193
- width,
194
- });
195
- return style(line, footerToken, ctx);
196
- }
197
- /** Render the bottom footer line showing the key legend. */
198
- function renderFooterControlsRow(width, keyLegend, tokens, ctx) {
199
- const controlsToken = tokens?.footerControlsToken ?? ctx.theme.theme.surface.primary;
200
- const line = statusBar({
201
- left: ` ${keyLegend}`,
202
- right: '',
203
- width,
204
- });
205
- return style(line, controlsToken, ctx);
206
- }
207
- /** Build the drawer overlay if the page supports it and the animation progress is visible. */
208
- function maybeRenderDrawerOverlay(frame, pageConfig, width, height, tokens, ctx) {
209
- if (!pageConfig.hasDrawer)
210
- return null;
211
- const progress = clamp01(frame.pageModel.drawerProgress);
212
- if (progress <= 0.01)
213
- return null;
214
- const region = pageConfig.drawerPaneId != null
215
- ? (frame.paneRects.get(pageConfig.drawerPaneId) ?? frame.screenRect)
216
- : frame.screenRect;
217
- if (region.width <= 0 || region.height <= 0)
218
- return null;
219
- const idealOpenWidth = Math.max(22, Math.floor(region.width * 0.38));
220
- const openWidth = clampInt(idealOpenWidth, 0, region.width);
221
- const animatedWidth = clampInt(Math.round(openWidth * progress), 0, region.width);
222
- if (animatedWidth < 6)
223
- return null;
224
- return drawer({
225
- anchor: 'right',
226
- title: 'Drawer',
227
- content: renderDrawerContent(frame.pageModel),
228
- width: animatedWidth,
229
- screenWidth: width,
230
- screenHeight: height,
231
- region,
232
- borderToken: tokens?.drawerBorderToken ?? ctx.theme.theme.border.primary,
233
- bgToken: tokens?.drawerBgToken ?? ctx.theme.theme.surface.overlay,
234
- ctx,
235
- });
236
- }
237
- /** Produce the static content shown inside the drawer panel. */
238
- function renderDrawerContent(model) {
239
- const pct = Math.round(clamp01(model.drawerProgress) * 100);
240
- return [
241
- 'Supplemental drawer',
242
- '',
243
- 'Use for side work.',
244
- 'Keep the main pane active.',
245
- '',
246
- `Open: ${model.drawerOpen ? 'yes' : 'no'}`,
247
- `Width: ${String(pct)}%`,
248
- '',
249
- 'o toggle drawer',
250
- '[ / ] switch pages',
251
- 'q quit (confirm)',
252
- ].join('\n');
253
- }
254
- /** Map each tab to a page spec with a layout kind (drawer, split, or empty). */
255
- function buildPageSpecs(tabs) {
256
- return tabs.map((tab, index) => ({
257
- tab,
258
- kind: tab.render != null || tab.layout != null
259
- ? 'custom'
260
- : (index === 0 ? 'drawer' : (index === 1 ? 'split' : 'empty')),
261
- }));
262
- }
263
- /** Derive per-page configuration (drawer pane ID, etc.) from a page spec. */
264
- function pageConfigFor(spec) {
265
- if (spec.kind === 'drawer') {
266
- return {
267
- hasDrawer: true,
268
- drawerPaneId: drawerPaneId(spec.tab.id),
269
- };
270
- }
271
- return { hasDrawer: false };
272
- }
273
- /** Create the initial model for a skeleton page based on its config. */
274
- function createInitialPageModel(config) {
275
- return {
276
- ready: true,
277
- drawerOpen: config.hasDrawer,
278
- drawerProgress: config.hasDrawer ? 1 : 0,
279
- quitConfirmOpen: false,
280
- };
281
- }
282
- /** TEA update handler for skeleton page messages (quit, drawer toggle, etc.). */
283
- function updateSkeletonPage(msg, model, config) {
284
- if (msg.type === 'mouse' || msg.type === 'pulse')
285
- return [model, []];
286
- switch (msg.type) {
287
- case 'request-quit':
288
- if (model.quitConfirmOpen)
289
- return [model, []];
290
- return [{ ...model, quitConfirmOpen: true }, []];
291
- case 'cancel-quit':
292
- if (!model.quitConfirmOpen)
293
- return [model, []];
294
- return [{ ...model, quitConfirmOpen: false }, []];
295
- case 'confirm-quit':
296
- if (!model.quitConfirmOpen)
297
- return [model, []];
298
- return [{ ...model, quitConfirmOpen: false }, [quit()]];
299
- case 'toggle-drawer': {
300
- if (!config.hasDrawer)
301
- return [model, []];
302
- const drawerOpen = !model.drawerOpen;
303
- const target = drawerOpen ? 1 : 0;
304
- return [{ ...model, drawerOpen }, [
305
- animate({
306
- from: model.drawerProgress,
307
- to: target,
308
- spring: 'default',
309
- onFrame: (value) => ({ type: 'drawer-progress', value }),
310
- }),
311
- ]];
312
- }
313
- case 'drawer-progress':
314
- if (!config.hasDrawer)
315
- return [model, []];
316
- return [{ ...model, drawerProgress: clamp01(msg.value) }, []];
317
- }
318
- }
319
- /** Build the layout tree for a skeleton page (single pane, split, or empty). */
320
- function layoutFor(spec, ctx, model) {
321
- if (spec.tab.layout != null) {
322
- return spec.tab.layout({ ctx, tab: spec.tab, model });
323
- }
324
- const render = spec.tab.render;
325
- if (render != null) {
326
- return {
327
- kind: 'pane',
328
- paneId: `${spec.tab.id}-main`,
329
- render: (width, height) => render(width, height, {
330
- ctx,
331
- tab: spec.tab,
332
- model,
333
- }),
334
- };
335
- }
336
- switch (spec.kind) {
337
- case 'drawer':
338
- return {
339
- kind: 'pane',
340
- paneId: drawerPaneId(spec.tab.id),
341
- render: () => createSurface(0, 0),
342
- };
343
- case 'split':
344
- return {
345
- kind: 'split',
346
- splitId: `${spec.tab.id}-split`,
347
- direction: 'row',
348
- state: createSplitPaneState({ ratio: DEFAULT_SPLIT_RATIO }),
349
- paneA: {
350
- kind: 'pane',
351
- paneId: `${spec.tab.id}-left`,
352
- render: (width, height) => renderSplitPaneLabelSurface('Primary workspace (1/3)', width, height, ctx),
353
- },
354
- paneB: {
355
- kind: 'pane',
356
- paneId: `${spec.tab.id}-right`,
357
- render: (width, height) => renderSplitPaneLabelSurface('Secondary context (2/3)', width, height, ctx),
358
- },
359
- };
360
- case 'empty':
361
- case 'custom':
362
- return {
363
- kind: 'pane',
364
- paneId: `${spec.tab.id}-main`,
365
- render: () => createSurface(0, 0),
366
- };
367
- }
368
- }
369
- /** Derive the drawer pane ID from a tab ID. */
370
- function drawerPaneId(tabId) {
371
- return `${tabId}-main`;
372
- }
373
- /** Pad styled content with token-styled spaces to fill exactly `width` columns. */
374
- function fillToWidth(content, width, token, ctx) {
375
- const clipped = clipToWidth(content, width);
376
- const visible = visibleLength(clipped);
377
- if (visible >= width)
378
- return clipped;
379
- return clipped + style(' '.repeat(width - visible), token, ctx);
380
- }
381
- /** Apply a design token's style to text, returning unstyled for empty strings. */
382
- function style(text, token, ctx) {
383
- if (text.length === 0)
384
- return '';
385
- return ctx.style.styled(token, text);
386
- }
387
- /** Combine a base and optional extra key map into a new merged key map. */
388
- function mergeKeyMaps(base, extra) {
389
- if (extra == null)
390
- return base;
391
- const merged = createKeyMap();
392
- bindMapInto(merged, base);
393
- bindMapInto(merged, extra);
394
- return merged;
395
- }
396
- /** Copy all enabled bindings from a source key map into a target key map. */
397
- function bindMapInto(target, source) {
398
- for (const binding of source.bindings()) {
399
- if (!binding.enabled)
400
- continue;
401
- const action = source.handle(comboToMsg(binding.combo));
402
- if (action === undefined)
403
- continue;
404
- if (binding.group !== '') {
405
- target.group(binding.group, (group) => group.bind(formatKeyCombo(binding.combo), binding.description, action));
406
- }
407
- else {
408
- target.bind(formatKeyCombo(binding.combo), binding.description, action);
409
- }
410
- }
411
- }
412
- /** Convert a key combo into a synthetic KeyMsg for dispatch. */
413
- function comboToMsg(combo) {
414
- return {
415
- type: 'key',
416
- key: combo.key,
417
- ctrl: combo.ctrl,
418
- alt: combo.alt,
419
- shift: combo.shift,
420
- };
421
- }
422
- /** Clamp a number to the 0–1 range, treating non-finite as 0. */
423
- function clamp01(value) {
424
- if (!Number.isFinite(value))
425
- return 0;
426
- if (value < 0)
427
- return 0;
428
- if (value > 1)
429
- return 1;
430
- return value;
431
- }
432
- /** Floor and clamp a number between min and max. */
433
- function clampInt(value, min, max) {
434
- const floored = Math.floor(value);
435
- return Math.max(min, Math.min(max, floored));
436
- }
1
+ /** Stable public facade for the batteries-included TUI app skeleton. */
2
+ export { createTuiAppSkeleton } from './skeleton-create.js';
437
3
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,wEAAwE;AAExE,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC"}
@@ -0,0 +1,8 @@
1
+ import type { BijouContext } from '@flyingrobots/bijou';
2
+ import type { SkeletonTab, SkeletonThemeTokens } from './skeleton-contract.js';
3
+ export declare function renderTabRow(width: number, tabs: readonly SkeletonTab[], activeTabId: string, tokens: SkeletonThemeTokens | undefined, ctx: BijouContext): string;
4
+ export declare function renderHeaderRow(width: number, title: string, activeTabTitle: string, tokens: SkeletonThemeTokens | undefined, ctx: BijouContext): string;
5
+ export declare function renderSeparatorRow(width: number, tokens: SkeletonThemeTokens | undefined, ctx: BijouContext): string;
6
+ export declare function renderFooterStatusRow(width: number, status: string, activeTabTitle: string, tokens: SkeletonThemeTokens | undefined, ctx: BijouContext): string;
7
+ export declare function renderFooterControlsRow(width: number, keyLegend: string, tokens: SkeletonThemeTokens | undefined, ctx: BijouContext): string;
8
+ //# sourceMappingURL=skeleton-chrome.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skeleton-chrome.d.ts","sourceRoot":"","sources":["../src/skeleton-chrome.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,YAAY,EAEb,MAAM,qBAAqB,CAAC;AAM7B,OAAO,KAAK,EACV,WAAW,EACX,mBAAmB,EACpB,MAAM,wBAAwB,CAAC;AAEhC,wBAAgB,YAAY,CAC1B,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,SAAS,WAAW,EAAE,EAC5B,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,mBAAmB,GAAG,SAAS,EACvC,GAAG,EAAE,YAAY,GAChB,MAAM,CAaR;AAED,wBAAgB,eAAe,CAC7B,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,MAAM,EACb,cAAc,EAAE,MAAM,EACtB,MAAM,EAAE,mBAAmB,GAAG,SAAS,EACvC,GAAG,EAAE,YAAY,GAChB,MAAM,CAQR;AAED,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,mBAAmB,GAAG,SAAS,EACvC,GAAG,EAAE,YAAY,GAChB,MAAM,CAGR;AAED,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,cAAc,EAAE,MAAM,EACtB,MAAM,EAAE,mBAAmB,GAAG,SAAS,EACvC,GAAG,EAAE,YAAY,GAChB,MAAM,CAIR;AAED,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,mBAAmB,GAAG,SAAS,EACvC,GAAG,EAAE,YAAY,GAChB,MAAM,CAIR"}