@promptctl/rich-js 0.1.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/README.md +418 -0
- package/dist/core/box.d.ts +91 -0
- package/dist/core/box.d.ts.map +1 -0
- package/dist/core/box.js +534 -0
- package/dist/core/box.js.map +1 -0
- package/dist/core/cells.d.ts +24 -0
- package/dist/core/cells.d.ts.map +1 -0
- package/dist/core/cells.js +114 -0
- package/dist/core/cells.js.map +1 -0
- package/dist/core/color.d.ts +158 -0
- package/dist/core/color.d.ts.map +1 -0
- package/dist/core/color.js +825 -0
- package/dist/core/color.js.map +1 -0
- package/dist/core/console.d.ts +100 -0
- package/dist/core/console.d.ts.map +1 -0
- package/dist/core/console.js +353 -0
- package/dist/core/console.js.map +1 -0
- package/dist/core/emoji.d.ts +25 -0
- package/dist/core/emoji.d.ts.map +1 -0
- package/dist/core/emoji.js +392 -0
- package/dist/core/emoji.js.map +1 -0
- package/dist/core/highlighter.d.ts +33 -0
- package/dist/core/highlighter.d.ts.map +1 -0
- package/dist/core/highlighter.js +103 -0
- package/dist/core/highlighter.js.map +1 -0
- package/dist/core/markup.d.ts +69 -0
- package/dist/core/markup.d.ts.map +1 -0
- package/dist/core/markup.js +401 -0
- package/dist/core/markup.js.map +1 -0
- package/dist/core/measure.d.ts +17 -0
- package/dist/core/measure.d.ts.map +1 -0
- package/dist/core/measure.js +50 -0
- package/dist/core/measure.js.map +1 -0
- package/dist/core/protocol.d.ts +32 -0
- package/dist/core/protocol.d.ts.map +1 -0
- package/dist/core/protocol.js +17 -0
- package/dist/core/protocol.js.map +1 -0
- package/dist/core/render.d.ts +51 -0
- package/dist/core/render.d.ts.map +1 -0
- package/dist/core/render.js +69 -0
- package/dist/core/render.js.map +1 -0
- package/dist/core/segment.d.ts +104 -0
- package/dist/core/segment.d.ts.map +1 -0
- package/dist/core/segment.js +364 -0
- package/dist/core/segment.js.map +1 -0
- package/dist/core/spinnerData.d.ts +11 -0
- package/dist/core/spinnerData.d.ts.map +1 -0
- package/dist/core/spinnerData.js +116 -0
- package/dist/core/spinnerData.js.map +1 -0
- package/dist/core/strip.d.ts +159 -0
- package/dist/core/strip.d.ts.map +1 -0
- package/dist/core/strip.js +237 -0
- package/dist/core/strip.js.map +1 -0
- package/dist/core/style.d.ts +115 -0
- package/dist/core/style.d.ts.map +1 -0
- package/dist/core/style.js +662 -0
- package/dist/core/style.js.map +1 -0
- package/dist/core/text.d.ts +91 -0
- package/dist/core/text.d.ts.map +1 -0
- package/dist/core/text.js +610 -0
- package/dist/core/text.js.map +1 -0
- package/dist/index.d.ts +99 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +72 -0
- package/dist/index.js.map +1 -0
- package/dist/renderables/align.d.ts +17 -0
- package/dist/renderables/align.d.ts.map +1 -0
- package/dist/renderables/align.js +47 -0
- package/dist/renderables/align.js.map +1 -0
- package/dist/renderables/columns.d.ts +28 -0
- package/dist/renderables/columns.d.ts.map +1 -0
- package/dist/renderables/columns.js +92 -0
- package/dist/renderables/columns.js.map +1 -0
- package/dist/renderables/constrain.d.ts +16 -0
- package/dist/renderables/constrain.d.ts.map +1 -0
- package/dist/renderables/constrain.js +38 -0
- package/dist/renderables/constrain.js.map +1 -0
- package/dist/renderables/flexStrip.d.ts +42 -0
- package/dist/renderables/flexStrip.d.ts.map +1 -0
- package/dist/renderables/flexStrip.js +201 -0
- package/dist/renderables/flexStrip.js.map +1 -0
- package/dist/renderables/group.d.ts +12 -0
- package/dist/renderables/group.d.ts.map +1 -0
- package/dist/renderables/group.js +16 -0
- package/dist/renderables/group.js.map +1 -0
- package/dist/renderables/json.d.ts +23 -0
- package/dist/renderables/json.d.ts.map +1 -0
- package/dist/renderables/json.js +49 -0
- package/dist/renderables/json.js.map +1 -0
- package/dist/renderables/layout.d.ts +37 -0
- package/dist/renderables/layout.d.ts.map +1 -0
- package/dist/renderables/layout.js +151 -0
- package/dist/renderables/layout.js.map +1 -0
- package/dist/renderables/live.d.ts +48 -0
- package/dist/renderables/live.d.ts.map +1 -0
- package/dist/renderables/live.js +131 -0
- package/dist/renderables/live.js.map +1 -0
- package/dist/renderables/markdown.d.ts +25 -0
- package/dist/renderables/markdown.d.ts.map +1 -0
- package/dist/renderables/markdown.js +190 -0
- package/dist/renderables/markdown.js.map +1 -0
- package/dist/renderables/padding.d.ts +26 -0
- package/dist/renderables/padding.d.ts.map +1 -0
- package/dist/renderables/padding.js +92 -0
- package/dist/renderables/padding.js.map +1 -0
- package/dist/renderables/panel.d.ts +42 -0
- package/dist/renderables/panel.d.ts.map +1 -0
- package/dist/renderables/panel.js +202 -0
- package/dist/renderables/panel.js.map +1 -0
- package/dist/renderables/pretty.d.ts +29 -0
- package/dist/renderables/pretty.d.ts.map +1 -0
- package/dist/renderables/pretty.js +141 -0
- package/dist/renderables/pretty.js.map +1 -0
- package/dist/renderables/progress.d.ts +91 -0
- package/dist/renderables/progress.d.ts.map +1 -0
- package/dist/renderables/progress.js +234 -0
- package/dist/renderables/progress.js.map +1 -0
- package/dist/renderables/progressBar.d.ts +32 -0
- package/dist/renderables/progressBar.d.ts.map +1 -0
- package/dist/renderables/progressBar.js +59 -0
- package/dist/renderables/progressBar.js.map +1 -0
- package/dist/renderables/prompt.d.ts +25 -0
- package/dist/renderables/prompt.d.ts.map +1 -0
- package/dist/renderables/prompt.js +109 -0
- package/dist/renderables/prompt.js.map +1 -0
- package/dist/renderables/rule.d.ts +25 -0
- package/dist/renderables/rule.d.ts.map +1 -0
- package/dist/renderables/rule.js +96 -0
- package/dist/renderables/rule.js.map +1 -0
- package/dist/renderables/spinner.d.ts +30 -0
- package/dist/renderables/spinner.d.ts.map +1 -0
- package/dist/renderables/spinner.js +70 -0
- package/dist/renderables/spinner.js.map +1 -0
- package/dist/renderables/status.d.ts +24 -0
- package/dist/renderables/status.d.ts.map +1 -0
- package/dist/renderables/status.js +67 -0
- package/dist/renderables/status.js.map +1 -0
- package/dist/renderables/syntax.d.ts +36 -0
- package/dist/renderables/syntax.d.ts.map +1 -0
- package/dist/renderables/syntax.js +115 -0
- package/dist/renderables/syntax.js.map +1 -0
- package/dist/renderables/table.d.ts +109 -0
- package/dist/renderables/table.d.ts.map +1 -0
- package/dist/renderables/table.js +434 -0
- package/dist/renderables/table.js.map +1 -0
- package/dist/renderables/traceback.d.ts +26 -0
- package/dist/renderables/traceback.d.ts.map +1 -0
- package/dist/renderables/traceback.js +108 -0
- package/dist/renderables/traceback.js.map +1 -0
- package/dist/renderables/tree.d.ts +30 -0
- package/dist/renderables/tree.d.ts.map +1 -0
- package/dist/renderables/tree.js +107 -0
- package/dist/renderables/tree.js.map +1 -0
- package/dist/template-bindings/index.d.ts +61 -0
- package/dist/template-bindings/index.d.ts.map +1 -0
- package/dist/template-bindings/index.js +70 -0
- package/dist/template-bindings/index.js.map +1 -0
- package/dist/template-bindings/style-funcs.d.ts +30 -0
- package/dist/template-bindings/style-funcs.d.ts.map +1 -0
- package/dist/template-bindings/style-funcs.js +172 -0
- package/dist/template-bindings/style-funcs.js.map +1 -0
- package/dist/themes/buildPalette.d.ts +31 -0
- package/dist/themes/buildPalette.d.ts.map +1 -0
- package/dist/themes/buildPalette.js +43 -0
- package/dist/themes/buildPalette.js.map +1 -0
- package/dist/themes/colorMath.d.ts +23 -0
- package/dist/themes/colorMath.d.ts.map +1 -0
- package/dist/themes/colorMath.js +99 -0
- package/dist/themes/colorMath.js.map +1 -0
- package/dist/themes/data/atom-one-dark.d.ts +4 -0
- package/dist/themes/data/atom-one-dark.d.ts.map +1 -0
- package/dist/themes/data/atom-one-dark.js +159 -0
- package/dist/themes/data/atom-one-dark.js.map +1 -0
- package/dist/themes/data/atom-one-light.d.ts +4 -0
- package/dist/themes/data/atom-one-light.d.ts.map +1 -0
- package/dist/themes/data/atom-one-light.js +159 -0
- package/dist/themes/data/atom-one-light.js.map +1 -0
- package/dist/themes/data/catppuccin-latte.d.ts +4 -0
- package/dist/themes/data/catppuccin-latte.d.ts.map +1 -0
- package/dist/themes/data/catppuccin-latte.js +159 -0
- package/dist/themes/data/catppuccin-latte.js.map +1 -0
- package/dist/themes/data/catppuccin-mocha.d.ts +4 -0
- package/dist/themes/data/catppuccin-mocha.d.ts.map +1 -0
- package/dist/themes/data/catppuccin-mocha.js +159 -0
- package/dist/themes/data/catppuccin-mocha.js.map +1 -0
- package/dist/themes/data/dracula.d.ts +4 -0
- package/dist/themes/data/dracula.d.ts.map +1 -0
- package/dist/themes/data/dracula.js +159 -0
- package/dist/themes/data/dracula.js.map +1 -0
- package/dist/themes/data/flexoki.d.ts +4 -0
- package/dist/themes/data/flexoki.d.ts.map +1 -0
- package/dist/themes/data/flexoki.js +159 -0
- package/dist/themes/data/flexoki.js.map +1 -0
- package/dist/themes/data/gruvbox.d.ts +4 -0
- package/dist/themes/data/gruvbox.d.ts.map +1 -0
- package/dist/themes/data/gruvbox.js +159 -0
- package/dist/themes/data/gruvbox.js.map +1 -0
- package/dist/themes/data/index.d.ts +29 -0
- package/dist/themes/data/index.d.ts.map +1 -0
- package/dist/themes/data/index.js +48 -0
- package/dist/themes/data/index.js.map +1 -0
- package/dist/themes/data/monokai.d.ts +4 -0
- package/dist/themes/data/monokai.d.ts.map +1 -0
- package/dist/themes/data/monokai.js +159 -0
- package/dist/themes/data/monokai.js.map +1 -0
- package/dist/themes/data/nord.d.ts +4 -0
- package/dist/themes/data/nord.d.ts.map +1 -0
- package/dist/themes/data/nord.js +159 -0
- package/dist/themes/data/nord.js.map +1 -0
- package/dist/themes/data/rose-pine-dawn.d.ts +4 -0
- package/dist/themes/data/rose-pine-dawn.d.ts.map +1 -0
- package/dist/themes/data/rose-pine-dawn.js +159 -0
- package/dist/themes/data/rose-pine-dawn.js.map +1 -0
- package/dist/themes/data/rose-pine-moon.d.ts +4 -0
- package/dist/themes/data/rose-pine-moon.d.ts.map +1 -0
- package/dist/themes/data/rose-pine-moon.js +159 -0
- package/dist/themes/data/rose-pine-moon.js.map +1 -0
- package/dist/themes/data/rose-pine.d.ts +4 -0
- package/dist/themes/data/rose-pine.d.ts.map +1 -0
- package/dist/themes/data/rose-pine.js +159 -0
- package/dist/themes/data/rose-pine.js.map +1 -0
- package/dist/themes/data/solarized-dark.d.ts +4 -0
- package/dist/themes/data/solarized-dark.d.ts.map +1 -0
- package/dist/themes/data/solarized-dark.js +159 -0
- package/dist/themes/data/solarized-dark.js.map +1 -0
- package/dist/themes/data/solarized-light.d.ts +4 -0
- package/dist/themes/data/solarized-light.d.ts.map +1 -0
- package/dist/themes/data/solarized-light.js +159 -0
- package/dist/themes/data/solarized-light.js.map +1 -0
- package/dist/themes/data/textual-ansi.d.ts +4 -0
- package/dist/themes/data/textual-ansi.d.ts.map +1 -0
- package/dist/themes/data/textual-ansi.js +159 -0
- package/dist/themes/data/textual-ansi.js.map +1 -0
- package/dist/themes/data/textual-dark.d.ts +4 -0
- package/dist/themes/data/textual-dark.d.ts.map +1 -0
- package/dist/themes/data/textual-dark.js +159 -0
- package/dist/themes/data/textual-dark.js.map +1 -0
- package/dist/themes/data/textual-light.d.ts +4 -0
- package/dist/themes/data/textual-light.d.ts.map +1 -0
- package/dist/themes/data/textual-light.js +159 -0
- package/dist/themes/data/textual-light.js.map +1 -0
- package/dist/themes/data/tokyo-night.d.ts +4 -0
- package/dist/themes/data/tokyo-night.d.ts.map +1 -0
- package/dist/themes/data/tokyo-night.js +159 -0
- package/dist/themes/data/tokyo-night.js.map +1 -0
- package/dist/themes/data/types.d.ts +15 -0
- package/dist/themes/data/types.d.ts.map +1 -0
- package/dist/themes/data/types.js +2 -0
- package/dist/themes/data/types.js.map +1 -0
- package/dist/themes/palette.d.ts +20 -0
- package/dist/themes/palette.d.ts.map +1 -0
- package/dist/themes/palette.js +27 -0
- package/dist/themes/palette.js.map +1 -0
- package/dist/themes/paletteResolver.d.ts +35 -0
- package/dist/themes/paletteResolver.d.ts.map +1 -0
- package/dist/themes/paletteResolver.js +88 -0
- package/dist/themes/paletteResolver.js.map +1 -0
- package/dist/themes/registry.d.ts +17 -0
- package/dist/themes/registry.d.ts.map +1 -0
- package/dist/themes/registry.js +33 -0
- package/dist/themes/registry.js.map +1 -0
- package/dist/themes/terminalThemes.d.ts +46 -0
- package/dist/themes/terminalThemes.d.ts.map +1 -0
- package/dist/themes/terminalThemes.js +268 -0
- package/dist/themes/terminalThemes.js.map +1 -0
- package/dist/widgets/button.d.ts +47 -0
- package/dist/widgets/button.d.ts.map +1 -0
- package/dist/widgets/button.js +183 -0
- package/dist/widgets/button.js.map +1 -0
- package/dist/widgets/checkbox.d.ts +43 -0
- package/dist/widgets/checkbox.d.ts.map +1 -0
- package/dist/widgets/checkbox.js +144 -0
- package/dist/widgets/checkbox.js.map +1 -0
- package/dist/widgets/dropdown.d.ts +67 -0
- package/dist/widgets/dropdown.d.ts.map +1 -0
- package/dist/widgets/dropdown.js +373 -0
- package/dist/widgets/dropdown.js.map +1 -0
- package/dist/widgets/event-router.d.ts +73 -0
- package/dist/widgets/event-router.d.ts.map +1 -0
- package/dist/widgets/event-router.js +479 -0
- package/dist/widgets/event-router.js.map +1 -0
- package/dist/widgets/focus-manager.d.ts +26 -0
- package/dist/widgets/focus-manager.d.ts.map +1 -0
- package/dist/widgets/focus-manager.js +179 -0
- package/dist/widgets/focus-manager.js.map +1 -0
- package/dist/widgets/index.d.ts +23 -0
- package/dist/widgets/index.d.ts.map +1 -0
- package/dist/widgets/index.js +13 -0
- package/dist/widgets/index.js.map +1 -0
- package/dist/widgets/screen.d.ts +90 -0
- package/dist/widgets/screen.d.ts.map +1 -0
- package/dist/widgets/screen.js +440 -0
- package/dist/widgets/screen.js.map +1 -0
- package/dist/widgets/slider.d.ts +55 -0
- package/dist/widgets/slider.d.ts.map +1 -0
- package/dist/widgets/slider.js +248 -0
- package/dist/widgets/slider.js.map +1 -0
- package/dist/widgets/static-item.d.ts +41 -0
- package/dist/widgets/static-item.d.ts.map +1 -0
- package/dist/widgets/static-item.js +62 -0
- package/dist/widgets/static-item.js.map +1 -0
- package/dist/widgets/text-input.d.ts +50 -0
- package/dist/widgets/text-input.d.ts.map +1 -0
- package/dist/widgets/text-input.js +242 -0
- package/dist/widgets/text-input.js.map +1 -0
- package/dist/widgets/toggle.d.ts +46 -0
- package/dist/widgets/toggle.d.ts.map +1 -0
- package/dist/widgets/toggle.js +169 -0
- package/dist/widgets/toggle.js.map +1 -0
- package/dist/widgets/types.d.ts +92 -0
- package/dist/widgets/types.d.ts.map +1 -0
- package/dist/widgets/types.js +13 -0
- package/dist/widgets/types.js.map +1 -0
- package/dist/widgets/widget-base.d.ts +41 -0
- package/dist/widgets/widget-base.d.ts.map +1 -0
- package/dist/widgets/widget-base.js +159 -0
- package/dist/widgets/widget-base.js.map +1 -0
- package/package.json +76 -0
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* FocusManager — flat focus cycling over registered widgets.
|
|
3
|
+
* [LAW:one-source-of-truth] single authority for which widget has focus.
|
|
4
|
+
* [LAW:dataflow-not-control-flow] focus transitions are observable state;
|
|
5
|
+
* widgets react to focus/blur events, the manager never skips dispatch.
|
|
6
|
+
*/
|
|
7
|
+
var __runInitializers = (this && this.__runInitializers) || function (thisArg, initializers, value) {
|
|
8
|
+
var useValue = arguments.length > 2;
|
|
9
|
+
for (var i = 0; i < initializers.length; i++) {
|
|
10
|
+
value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);
|
|
11
|
+
}
|
|
12
|
+
return useValue ? value : void 0;
|
|
13
|
+
};
|
|
14
|
+
var __esDecorate = (this && this.__esDecorate) || function (ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {
|
|
15
|
+
function accept(f) { if (f !== void 0 && typeof f !== "function") throw new TypeError("Function expected"); return f; }
|
|
16
|
+
var kind = contextIn.kind, key = kind === "getter" ? "get" : kind === "setter" ? "set" : "value";
|
|
17
|
+
var target = !descriptorIn && ctor ? contextIn["static"] ? ctor : ctor.prototype : null;
|
|
18
|
+
var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});
|
|
19
|
+
var _, done = false;
|
|
20
|
+
for (var i = decorators.length - 1; i >= 0; i--) {
|
|
21
|
+
var context = {};
|
|
22
|
+
for (var p in contextIn) context[p] = p === "access" ? {} : contextIn[p];
|
|
23
|
+
for (var p in contextIn.access) context.access[p] = contextIn.access[p];
|
|
24
|
+
context.addInitializer = function (f) { if (done) throw new TypeError("Cannot add initializers after decoration has completed"); extraInitializers.push(accept(f || null)); };
|
|
25
|
+
var result = (0, decorators[i])(kind === "accessor" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);
|
|
26
|
+
if (kind === "accessor") {
|
|
27
|
+
if (result === void 0) continue;
|
|
28
|
+
if (result === null || typeof result !== "object") throw new TypeError("Object expected");
|
|
29
|
+
if (_ = accept(result.get)) descriptor.get = _;
|
|
30
|
+
if (_ = accept(result.set)) descriptor.set = _;
|
|
31
|
+
if (_ = accept(result.init)) initializers.unshift(_);
|
|
32
|
+
}
|
|
33
|
+
else if (_ = accept(result)) {
|
|
34
|
+
if (kind === "field") initializers.unshift(_);
|
|
35
|
+
else descriptor[key] = _;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
if (target) Object.defineProperty(target, contextIn.name, descriptor);
|
|
39
|
+
done = true;
|
|
40
|
+
};
|
|
41
|
+
import { makeObservable, observable, action } from "mobx";
|
|
42
|
+
let DefaultFocusManager = (() => {
|
|
43
|
+
var _a, _b;
|
|
44
|
+
let _instanceExtraInitializers = [];
|
|
45
|
+
let _widgetList_decorators;
|
|
46
|
+
let _widgetList_initializers = [];
|
|
47
|
+
let _widgetList_extraInitializers = [];
|
|
48
|
+
let _currentWidget_decorators;
|
|
49
|
+
let _currentWidget_initializers = [];
|
|
50
|
+
let _currentWidget_extraInitializers = [];
|
|
51
|
+
let _register_decorators;
|
|
52
|
+
let _unregister_decorators;
|
|
53
|
+
let _next_decorators;
|
|
54
|
+
let _prev_decorators;
|
|
55
|
+
let _focus_decorators;
|
|
56
|
+
let _blur_decorators;
|
|
57
|
+
let _setFocus_decorators;
|
|
58
|
+
return class DefaultFocusManager {
|
|
59
|
+
static {
|
|
60
|
+
const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(null) : void 0;
|
|
61
|
+
_widgetList_decorators = [(_a = observable).shallow.bind(_a)];
|
|
62
|
+
_currentWidget_decorators = [(_b = observable).ref.bind(_b)];
|
|
63
|
+
_register_decorators = [action];
|
|
64
|
+
_unregister_decorators = [action];
|
|
65
|
+
_next_decorators = [action];
|
|
66
|
+
_prev_decorators = [action];
|
|
67
|
+
_focus_decorators = [action];
|
|
68
|
+
_blur_decorators = [action];
|
|
69
|
+
_setFocus_decorators = [action];
|
|
70
|
+
__esDecorate(this, null, _widgetList_decorators, { kind: "accessor", name: "widgetList", static: false, private: false, access: { has: obj => "widgetList" in obj, get: obj => obj.widgetList, set: (obj, value) => { obj.widgetList = value; } }, metadata: _metadata }, _widgetList_initializers, _widgetList_extraInitializers);
|
|
71
|
+
__esDecorate(this, null, _currentWidget_decorators, { kind: "accessor", name: "currentWidget", static: false, private: false, access: { has: obj => "currentWidget" in obj, get: obj => obj.currentWidget, set: (obj, value) => { obj.currentWidget = value; } }, metadata: _metadata }, _currentWidget_initializers, _currentWidget_extraInitializers);
|
|
72
|
+
__esDecorate(this, null, _register_decorators, { kind: "method", name: "register", static: false, private: false, access: { has: obj => "register" in obj, get: obj => obj.register }, metadata: _metadata }, null, _instanceExtraInitializers);
|
|
73
|
+
__esDecorate(this, null, _unregister_decorators, { kind: "method", name: "unregister", static: false, private: false, access: { has: obj => "unregister" in obj, get: obj => obj.unregister }, metadata: _metadata }, null, _instanceExtraInitializers);
|
|
74
|
+
__esDecorate(this, null, _next_decorators, { kind: "method", name: "next", static: false, private: false, access: { has: obj => "next" in obj, get: obj => obj.next }, metadata: _metadata }, null, _instanceExtraInitializers);
|
|
75
|
+
__esDecorate(this, null, _prev_decorators, { kind: "method", name: "prev", static: false, private: false, access: { has: obj => "prev" in obj, get: obj => obj.prev }, metadata: _metadata }, null, _instanceExtraInitializers);
|
|
76
|
+
__esDecorate(this, null, _focus_decorators, { kind: "method", name: "focus", static: false, private: false, access: { has: obj => "focus" in obj, get: obj => obj.focus }, metadata: _metadata }, null, _instanceExtraInitializers);
|
|
77
|
+
__esDecorate(this, null, _blur_decorators, { kind: "method", name: "blur", static: false, private: false, access: { has: obj => "blur" in obj, get: obj => obj.blur }, metadata: _metadata }, null, _instanceExtraInitializers);
|
|
78
|
+
__esDecorate(this, null, _setFocus_decorators, { kind: "method", name: "setFocus", static: false, private: false, access: { has: obj => "setFocus" in obj, get: obj => obj.setFocus }, metadata: _metadata }, null, _instanceExtraInitializers);
|
|
79
|
+
if (_metadata) Object.defineProperty(this, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
|
|
80
|
+
}
|
|
81
|
+
#widgetList_accessor_storage = (__runInitializers(this, _instanceExtraInitializers), __runInitializers(this, _widgetList_initializers, []));
|
|
82
|
+
get widgetList() { return this.#widgetList_accessor_storage; }
|
|
83
|
+
set widgetList(value) { this.#widgetList_accessor_storage = value; }
|
|
84
|
+
#currentWidget_accessor_storage = (__runInitializers(this, _widgetList_extraInitializers), __runInitializers(this, _currentWidget_initializers, null));
|
|
85
|
+
get currentWidget() { return this.#currentWidget_accessor_storage; }
|
|
86
|
+
set currentWidget(value) { this.#currentWidget_accessor_storage = value; }
|
|
87
|
+
changeHandlers = (__runInitializers(this, _currentWidget_extraInitializers), new Set());
|
|
88
|
+
constructor() {
|
|
89
|
+
makeObservable(this);
|
|
90
|
+
}
|
|
91
|
+
get current() {
|
|
92
|
+
return this.currentWidget;
|
|
93
|
+
}
|
|
94
|
+
get widgets() {
|
|
95
|
+
return this.widgetList;
|
|
96
|
+
}
|
|
97
|
+
register(widget) {
|
|
98
|
+
this.widgetList = [...this.widgetList, widget];
|
|
99
|
+
if (!this.currentWidget && widget.focusable && !widget.disabled) {
|
|
100
|
+
this.setFocus(widget);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
unregister(widget) {
|
|
104
|
+
const idx = this.widgetList.indexOf(widget);
|
|
105
|
+
if (idx === -1)
|
|
106
|
+
return;
|
|
107
|
+
this.widgetList = this.widgetList.filter((w) => w !== widget);
|
|
108
|
+
if (this.currentWidget === widget) {
|
|
109
|
+
widget.blur();
|
|
110
|
+
widget.handleFocus({ type: "blur" });
|
|
111
|
+
const next = this.widgetList.find((w) => w.focusable && !w.disabled) ?? null;
|
|
112
|
+
if (next) {
|
|
113
|
+
next.focus();
|
|
114
|
+
next.handleFocus({ type: "focus" });
|
|
115
|
+
}
|
|
116
|
+
this.currentWidget = next;
|
|
117
|
+
this.emitChange();
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
next() {
|
|
121
|
+
const focusable = this.focusableWidgets();
|
|
122
|
+
if (focusable.length === 0)
|
|
123
|
+
return;
|
|
124
|
+
const currentIdx = this.currentWidget ? focusable.indexOf(this.currentWidget) : -1;
|
|
125
|
+
const nextIdx = (currentIdx + 1) % focusable.length;
|
|
126
|
+
this.setFocus(focusable[nextIdx]);
|
|
127
|
+
}
|
|
128
|
+
prev() {
|
|
129
|
+
const focusable = this.focusableWidgets();
|
|
130
|
+
if (focusable.length === 0)
|
|
131
|
+
return;
|
|
132
|
+
const currentIdx = this.currentWidget ? focusable.indexOf(this.currentWidget) : -1;
|
|
133
|
+
const prevIdx = currentIdx <= 0 ? focusable.length - 1 : currentIdx - 1;
|
|
134
|
+
this.setFocus(focusable[prevIdx]);
|
|
135
|
+
}
|
|
136
|
+
focus(widget) {
|
|
137
|
+
if (!widget.focusable || widget.disabled)
|
|
138
|
+
return;
|
|
139
|
+
if (!this.widgetList.includes(widget))
|
|
140
|
+
return;
|
|
141
|
+
this.setFocus(widget);
|
|
142
|
+
}
|
|
143
|
+
blur() {
|
|
144
|
+
if (!this.currentWidget)
|
|
145
|
+
return;
|
|
146
|
+
this.currentWidget.blur();
|
|
147
|
+
this.currentWidget.handleFocus({ type: "blur" });
|
|
148
|
+
this.currentWidget = null;
|
|
149
|
+
this.emitChange();
|
|
150
|
+
}
|
|
151
|
+
onChange(handler) {
|
|
152
|
+
this.changeHandlers.add(handler);
|
|
153
|
+
return () => this.changeHandlers.delete(handler);
|
|
154
|
+
}
|
|
155
|
+
// --- Private ---
|
|
156
|
+
focusableWidgets() {
|
|
157
|
+
return this.widgetList.filter((w) => w.focusable && !w.disabled);
|
|
158
|
+
}
|
|
159
|
+
setFocus(widget) {
|
|
160
|
+
if (this.currentWidget === widget)
|
|
161
|
+
return;
|
|
162
|
+
if (this.currentWidget) {
|
|
163
|
+
this.currentWidget.blur();
|
|
164
|
+
this.currentWidget.handleFocus({ type: "blur" });
|
|
165
|
+
}
|
|
166
|
+
this.currentWidget = widget;
|
|
167
|
+
widget.focus();
|
|
168
|
+
widget.handleFocus({ type: "focus" });
|
|
169
|
+
this.emitChange();
|
|
170
|
+
}
|
|
171
|
+
emitChange() {
|
|
172
|
+
for (const handler of this.changeHandlers) {
|
|
173
|
+
handler(this.currentWidget);
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
};
|
|
177
|
+
})();
|
|
178
|
+
export { DefaultFocusManager };
|
|
179
|
+
//# sourceMappingURL=focus-manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"focus-manager.js","sourceRoot":"","sources":["../../src/widgets/focus-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
export type { KeyEvent, WidgetMouseEvent, WidgetFocusEvent, WidgetBounds, InteractiveWidget, OverlayRenderable, FocusManager, Screen, MountEntry, Placement, Unsubscribe, } from "./types.js";
|
|
2
|
+
export { FLOW, hasOverlay } from "./types.js";
|
|
3
|
+
export { StaticItem } from "./static-item.js";
|
|
4
|
+
export type { StaticItemOptions } from "./static-item.js";
|
|
5
|
+
export { WidgetBase } from "./widget-base.js";
|
|
6
|
+
export { DefaultFocusManager } from "./focus-manager.js";
|
|
7
|
+
export { DefaultScreen } from "./screen.js";
|
|
8
|
+
export type { ScreenOptions, ColorSystemSpec } from "./screen.js";
|
|
9
|
+
export { Button } from "./button.js";
|
|
10
|
+
export type { ButtonVariant, ButtonOptions } from "./button.js";
|
|
11
|
+
export { Checkbox } from "./checkbox.js";
|
|
12
|
+
export type { CheckboxOptions } from "./checkbox.js";
|
|
13
|
+
export { Toggle } from "./toggle.js";
|
|
14
|
+
export type { ToggleVariant, ToggleOptions } from "./toggle.js";
|
|
15
|
+
export { TextInput } from "./text-input.js";
|
|
16
|
+
export type { TextInputOptions } from "./text-input.js";
|
|
17
|
+
export { Dropdown } from "./dropdown.js";
|
|
18
|
+
export type { DropdownOptions } from "./dropdown.js";
|
|
19
|
+
export { Slider } from "./slider.js";
|
|
20
|
+
export type { SliderOptions } from "./slider.js";
|
|
21
|
+
export { EventRouter } from "./event-router.js";
|
|
22
|
+
export type { EventRouterOptions } from "./event-router.js";
|
|
23
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/widgets/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,QAAQ,EACR,gBAAgB,EAChB,gBAAgB,EAChB,YAAY,EACZ,iBAAiB,EACjB,iBAAiB,EACjB,YAAY,EACZ,MAAM,EACN,UAAU,EACV,SAAS,EACT,WAAW,GACZ,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,YAAY,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAE1D,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,YAAY,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAClE,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,YAAY,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAChE,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,YAAY,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,YAAY,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAChE,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,YAAY,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACxD,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,YAAY,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,YAAY,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,YAAY,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export { FLOW, hasOverlay } from "./types.js";
|
|
2
|
+
export { StaticItem } from "./static-item.js";
|
|
3
|
+
export { WidgetBase } from "./widget-base.js";
|
|
4
|
+
export { DefaultFocusManager } from "./focus-manager.js";
|
|
5
|
+
export { DefaultScreen } from "./screen.js";
|
|
6
|
+
export { Button } from "./button.js";
|
|
7
|
+
export { Checkbox } from "./checkbox.js";
|
|
8
|
+
export { Toggle } from "./toggle.js";
|
|
9
|
+
export { TextInput } from "./text-input.js";
|
|
10
|
+
export { Dropdown } from "./dropdown.js";
|
|
11
|
+
export { Slider } from "./slider.js";
|
|
12
|
+
export { EventRouter } from "./event-router.js";
|
|
13
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/widgets/index.ts"],"names":[],"mappings":"AAaA,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAG9C,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE5C,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE5C,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC"}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Screen — owns the render loop and ANSI output for interactive widgets.
|
|
3
|
+
*
|
|
4
|
+
* [LAW:dataflow-not-control-flow] Same pipeline runs every frame: render
|
|
5
|
+
* widgets to Segment[], split into lines, encode to ANSI, write to stdout
|
|
6
|
+
* with cursor-up + overwrite. Variability lives in the values (which widgets
|
|
7
|
+
* are visible, what they render), never in whether the pipeline runs.
|
|
8
|
+
*
|
|
9
|
+
* [LAW:one-source-of-truth] Layout (widget bounds) is computed here and
|
|
10
|
+
* written to widget.bounds. Mouse hit-testing reads the same bounds — the
|
|
11
|
+
* Screen is the single authority on where each widget is drawn.
|
|
12
|
+
*
|
|
13
|
+
* [LAW:single-enforcer] Cursor management lives in one place: `draw()`
|
|
14
|
+
* tracks `lastLineCount` and emits a single `\x1b[<n>A` to reposition.
|
|
15
|
+
* Per-line `\x1b[K` (erase to end of line) overwrites old content without
|
|
16
|
+
* flicker — no clear-and-redraw cycle.
|
|
17
|
+
*
|
|
18
|
+
* Reactivity: `mobx.autorun` re-fires on any observable read during render
|
|
19
|
+
* (label, focused, hovered, active, disabled, visible, the widget list
|
|
20
|
+
* itself). Renders are debounced to a microtask so a burst of state changes
|
|
21
|
+
* within one tick produces one frame.
|
|
22
|
+
*
|
|
23
|
+
* Layout (per-widget Placement):
|
|
24
|
+
*
|
|
25
|
+
* flow — vertical stack at x=0; advances the layout cursor by the
|
|
26
|
+
* widget's measured height. Default placement; preserves the
|
|
27
|
+
* historical single-column behavior so existing consumers
|
|
28
|
+
* (and the screen tests) need no migration.
|
|
29
|
+
* inline — same row as the preceding flow/inline neighbor; x packs
|
|
30
|
+
* after that neighbor's right edge plus a one-cell gap. The
|
|
31
|
+
* row's height is the max of its members; the cursor advances
|
|
32
|
+
* past the tallest member when the next non-inline item is
|
|
33
|
+
* placed (or at end of frame).
|
|
34
|
+
* fixed — absolute (x, y); independent of the cursor. Used for
|
|
35
|
+
* anchored content like status/log rows that the host wants
|
|
36
|
+
* placed at a known coordinate regardless of flow growth.
|
|
37
|
+
*
|
|
38
|
+
* The overlay pass (single enforcer) runs after base layout: any widget
|
|
39
|
+
* implementing OverlayRenderable contributes overlay segments anchored
|
|
40
|
+
* directly below its inline footprint, and Screen unions the overlay
|
|
41
|
+
* area into the widget's bounds for hit-testing.
|
|
42
|
+
*
|
|
43
|
+
* Design alternatives considered:
|
|
44
|
+
* 1. Per-widget Placement (chosen) — smallest type that covers the legal
|
|
45
|
+
* variability; one total switch in computeFrame; back-compat default.
|
|
46
|
+
* 2. Named regions (header/body/status as flow containers) — adds a
|
|
47
|
+
* two-step API surface (declare regions, then mount into them) and
|
|
48
|
+
* another concept; rejected as larger than the problem requires.
|
|
49
|
+
* 3. Host-supplied layout function — pushes layout out of Screen,
|
|
50
|
+
* defeating single-enforcer; rejected.
|
|
51
|
+
*/
|
|
52
|
+
import { ColorDepth } from "../core/color.js";
|
|
53
|
+
import type { Screen, InteractiveWidget, FocusManager, MountEntry } from "./types.js";
|
|
54
|
+
export type ColorSystemSpec = ColorDepth | "auto" | "truecolor" | "256" | "ansi" | "none" | null;
|
|
55
|
+
export interface ScreenOptions {
|
|
56
|
+
out?: NodeJS.WritableStream;
|
|
57
|
+
width?: number;
|
|
58
|
+
colorSystem?: ColorSystemSpec;
|
|
59
|
+
focusManager?: FocusManager;
|
|
60
|
+
/**
|
|
61
|
+
* When true (default when stdout is a TTY), hide the cursor on start and
|
|
62
|
+
* restore it on stop. Disable for non-TTY output and tests.
|
|
63
|
+
*/
|
|
64
|
+
manageCursor?: boolean;
|
|
65
|
+
}
|
|
66
|
+
export declare class DefaultScreen implements Screen {
|
|
67
|
+
readonly focusManager: FocusManager;
|
|
68
|
+
accessor widgetList: InteractiveWidget[];
|
|
69
|
+
private readonly placements;
|
|
70
|
+
private _running;
|
|
71
|
+
private autorunDispose;
|
|
72
|
+
private renderScheduled;
|
|
73
|
+
private lastLineCount;
|
|
74
|
+
private readonly out;
|
|
75
|
+
private readonly widthOverride;
|
|
76
|
+
private readonly colorSystem;
|
|
77
|
+
private readonly manageCursor;
|
|
78
|
+
constructor(options?: ScreenOptions);
|
|
79
|
+
get running(): boolean;
|
|
80
|
+
get widgets(): readonly InteractiveWidget[];
|
|
81
|
+
mount(...entries: MountEntry[]): void;
|
|
82
|
+
unmount(widget: InteractiveWidget): void;
|
|
83
|
+
start(): void;
|
|
84
|
+
stop(): void;
|
|
85
|
+
private get width();
|
|
86
|
+
private computeFrame;
|
|
87
|
+
private scheduleRender;
|
|
88
|
+
private draw;
|
|
89
|
+
}
|
|
90
|
+
//# sourceMappingURL=screen.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"screen.d.ts","sourceRoot":"","sources":["../../src/widgets/screen.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkDG;AAKH,OAAO,EAAE,UAAU,EAAsB,MAAM,kBAAkB,CAAC;AAIlE,OAAO,KAAK,EACV,MAAM,EACN,iBAAiB,EACjB,YAAY,EACZ,UAAU,EAGX,MAAM,YAAY,CAAC;AAEpB,MAAM,MAAM,eAAe,GACvB,UAAU,GACV,MAAM,GACN,WAAW,GACX,KAAK,GACL,MAAM,GACN,MAAM,GACN,IAAI,CAAC;AAET,MAAM,WAAW,aAAa;IAC5B,GAAG,CAAC,EAAE,MAAM,CAAC,cAAc,CAAC;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,eAAe,CAAC;IAC9B,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B;;;OAGG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AASD,qBAAa,aAAc,YAAW,MAAM;IAC1C,QAAQ,CAAC,YAAY,EAAE,YAAY,CAAC;IAKpC,QAAQ,CAAC,UAAU,EAAE,iBAAiB,EAAE,CAAM;IAM9C,OAAO,CAAC,QAAQ,CAAC,UAAU,CAA2C;IAEtE,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,cAAc,CAAgC;IACtD,OAAO,CAAC,eAAe,CAAS;IAChC,OAAO,CAAC,aAAa,CAAK;IAE1B,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAwB;IAC5C,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAqB;IACnD,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAoB;IAChD,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAU;gBAE3B,OAAO,GAAE,aAAkB;IAYvC,IAAI,OAAO,IAAI,OAAO,CAErB;IAED,IAAI,OAAO,IAAI,SAAS,iBAAiB,EAAE,CAE1C;IAID,KAAK,CAAC,GAAG,OAAO,EAAE,UAAU,EAAE,GAAG,IAAI;IAcrC,OAAO,CAAC,MAAM,EAAE,iBAAiB,GAAG,IAAI;IAUxC,KAAK,IAAI,IAAI;IAgBb,IAAI,IAAI,IAAI;IAeZ,OAAO,KAAK,KAAK,GAIhB;IAED,OAAO,CAAC,YAAY;IA+GpB,OAAO,CAAC,cAAc;IAStB,OAAO,CAAC,IAAI;CAsCb"}
|