@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,248 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Slider widget — numeric value within [min, max] with step increments.
|
|
3
|
+
* [LAW:dataflow-not-control-flow] every render emits exactly `width`
|
|
4
|
+
* track cells; the marker cell index is data, not a branch.
|
|
5
|
+
* [LAW:one-type-per-behavior] shared infrastructure inherited from
|
|
6
|
+
* WidgetBase.
|
|
7
|
+
*
|
|
8
|
+
* Visual:
|
|
9
|
+
* track — `width` cells of "─" (ASCII fallback "-")
|
|
10
|
+
* marker — "●" (ASCII fallback "*") at round((value - min) / range * (width - 1))
|
|
11
|
+
* filled — cells left of and including the marker use primary fg
|
|
12
|
+
* unfilled — cells right of the marker use surface bg / foreground
|
|
13
|
+
* focused — underline on the segments
|
|
14
|
+
* disabled — dim
|
|
15
|
+
*/
|
|
16
|
+
var __runInitializers = (this && this.__runInitializers) || function (thisArg, initializers, value) {
|
|
17
|
+
var useValue = arguments.length > 2;
|
|
18
|
+
for (var i = 0; i < initializers.length; i++) {
|
|
19
|
+
value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);
|
|
20
|
+
}
|
|
21
|
+
return useValue ? value : void 0;
|
|
22
|
+
};
|
|
23
|
+
var __esDecorate = (this && this.__esDecorate) || function (ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {
|
|
24
|
+
function accept(f) { if (f !== void 0 && typeof f !== "function") throw new TypeError("Function expected"); return f; }
|
|
25
|
+
var kind = contextIn.kind, key = kind === "getter" ? "get" : kind === "setter" ? "set" : "value";
|
|
26
|
+
var target = !descriptorIn && ctor ? contextIn["static"] ? ctor : ctor.prototype : null;
|
|
27
|
+
var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});
|
|
28
|
+
var _, done = false;
|
|
29
|
+
for (var i = decorators.length - 1; i >= 0; i--) {
|
|
30
|
+
var context = {};
|
|
31
|
+
for (var p in contextIn) context[p] = p === "access" ? {} : contextIn[p];
|
|
32
|
+
for (var p in contextIn.access) context.access[p] = contextIn.access[p];
|
|
33
|
+
context.addInitializer = function (f) { if (done) throw new TypeError("Cannot add initializers after decoration has completed"); extraInitializers.push(accept(f || null)); };
|
|
34
|
+
var result = (0, decorators[i])(kind === "accessor" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);
|
|
35
|
+
if (kind === "accessor") {
|
|
36
|
+
if (result === void 0) continue;
|
|
37
|
+
if (result === null || typeof result !== "object") throw new TypeError("Object expected");
|
|
38
|
+
if (_ = accept(result.get)) descriptor.get = _;
|
|
39
|
+
if (_ = accept(result.set)) descriptor.set = _;
|
|
40
|
+
if (_ = accept(result.init)) initializers.unshift(_);
|
|
41
|
+
}
|
|
42
|
+
else if (_ = accept(result)) {
|
|
43
|
+
if (kind === "field") initializers.unshift(_);
|
|
44
|
+
else descriptor[key] = _;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
if (target) Object.defineProperty(target, contextIn.name, descriptor);
|
|
48
|
+
done = true;
|
|
49
|
+
};
|
|
50
|
+
import { observable, action } from "mobx";
|
|
51
|
+
import { Segment } from "../core/segment.js";
|
|
52
|
+
import { Style } from "../core/style.js";
|
|
53
|
+
import { ColorSpec } from "../core/color.js";
|
|
54
|
+
import { DEFAULT_TERMINAL_THEME } from "../themes/terminalThemes.js";
|
|
55
|
+
import { WidgetBase } from "./widget-base.js";
|
|
56
|
+
const DEFAULT_WIDTH = 20;
|
|
57
|
+
let Slider = (() => {
|
|
58
|
+
var _a, _b, _c, _d;
|
|
59
|
+
let _classSuper = WidgetBase;
|
|
60
|
+
let _instanceExtraInitializers = [];
|
|
61
|
+
let _value_decorators;
|
|
62
|
+
let _value_initializers = [];
|
|
63
|
+
let _value_extraInitializers = [];
|
|
64
|
+
let _min_decorators;
|
|
65
|
+
let _min_initializers = [];
|
|
66
|
+
let _min_extraInitializers = [];
|
|
67
|
+
let _max_decorators;
|
|
68
|
+
let _max_initializers = [];
|
|
69
|
+
let _max_extraInitializers = [];
|
|
70
|
+
let _step_decorators;
|
|
71
|
+
let _step_initializers = [];
|
|
72
|
+
let _step_extraInitializers = [];
|
|
73
|
+
let _width_decorators;
|
|
74
|
+
let _width_initializers = [];
|
|
75
|
+
let _width_extraInitializers = [];
|
|
76
|
+
let _handleKey_decorators;
|
|
77
|
+
let _handleMouse_decorators;
|
|
78
|
+
let _setHovered_decorators;
|
|
79
|
+
let _setValue_decorators;
|
|
80
|
+
return class Slider extends _classSuper {
|
|
81
|
+
static {
|
|
82
|
+
const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
|
|
83
|
+
_value_decorators = [observable];
|
|
84
|
+
_min_decorators = [(_a = observable).ref.bind(_a)];
|
|
85
|
+
_max_decorators = [(_b = observable).ref.bind(_b)];
|
|
86
|
+
_step_decorators = [(_c = observable).ref.bind(_c)];
|
|
87
|
+
_width_decorators = [(_d = observable).ref.bind(_d)];
|
|
88
|
+
_handleKey_decorators = [action];
|
|
89
|
+
_handleMouse_decorators = [action];
|
|
90
|
+
_setHovered_decorators = [action];
|
|
91
|
+
_setValue_decorators = [action];
|
|
92
|
+
__esDecorate(this, null, _value_decorators, { kind: "accessor", name: "value", static: false, private: false, access: { has: obj => "value" in obj, get: obj => obj.value, set: (obj, value) => { obj.value = value; } }, metadata: _metadata }, _value_initializers, _value_extraInitializers);
|
|
93
|
+
__esDecorate(this, null, _min_decorators, { kind: "accessor", name: "min", static: false, private: false, access: { has: obj => "min" in obj, get: obj => obj.min, set: (obj, value) => { obj.min = value; } }, metadata: _metadata }, _min_initializers, _min_extraInitializers);
|
|
94
|
+
__esDecorate(this, null, _max_decorators, { kind: "accessor", name: "max", static: false, private: false, access: { has: obj => "max" in obj, get: obj => obj.max, set: (obj, value) => { obj.max = value; } }, metadata: _metadata }, _max_initializers, _max_extraInitializers);
|
|
95
|
+
__esDecorate(this, null, _step_decorators, { kind: "accessor", name: "step", static: false, private: false, access: { has: obj => "step" in obj, get: obj => obj.step, set: (obj, value) => { obj.step = value; } }, metadata: _metadata }, _step_initializers, _step_extraInitializers);
|
|
96
|
+
__esDecorate(this, null, _width_decorators, { kind: "accessor", name: "width", static: false, private: false, access: { has: obj => "width" in obj, get: obj => obj.width, set: (obj, value) => { obj.width = value; } }, metadata: _metadata }, _width_initializers, _width_extraInitializers);
|
|
97
|
+
__esDecorate(this, null, _handleKey_decorators, { kind: "method", name: "handleKey", static: false, private: false, access: { has: obj => "handleKey" in obj, get: obj => obj.handleKey }, metadata: _metadata }, null, _instanceExtraInitializers);
|
|
98
|
+
__esDecorate(this, null, _handleMouse_decorators, { kind: "method", name: "handleMouse", static: false, private: false, access: { has: obj => "handleMouse" in obj, get: obj => obj.handleMouse }, metadata: _metadata }, null, _instanceExtraInitializers);
|
|
99
|
+
__esDecorate(this, null, _setHovered_decorators, { kind: "method", name: "setHovered", static: false, private: false, access: { has: obj => "setHovered" in obj, get: obj => obj.setHovered }, metadata: _metadata }, null, _instanceExtraInitializers);
|
|
100
|
+
__esDecorate(this, null, _setValue_decorators, { kind: "method", name: "setValue", static: false, private: false, access: { has: obj => "setValue" in obj, get: obj => obj.setValue }, metadata: _metadata }, null, _instanceExtraInitializers);
|
|
101
|
+
if (_metadata) Object.defineProperty(this, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
|
|
102
|
+
}
|
|
103
|
+
id = __runInitializers(this, _instanceExtraInitializers);
|
|
104
|
+
focusable = true;
|
|
105
|
+
#value_accessor_storage = __runInitializers(this, _value_initializers, void 0);
|
|
106
|
+
get value() { return this.#value_accessor_storage; }
|
|
107
|
+
set value(value) { this.#value_accessor_storage = value; }
|
|
108
|
+
#min_accessor_storage = (__runInitializers(this, _value_extraInitializers), __runInitializers(this, _min_initializers, void 0));
|
|
109
|
+
get min() { return this.#min_accessor_storage; }
|
|
110
|
+
set min(value) { this.#min_accessor_storage = value; }
|
|
111
|
+
#max_accessor_storage = (__runInitializers(this, _min_extraInitializers), __runInitializers(this, _max_initializers, void 0));
|
|
112
|
+
get max() { return this.#max_accessor_storage; }
|
|
113
|
+
set max(value) { this.#max_accessor_storage = value; }
|
|
114
|
+
#step_accessor_storage = (__runInitializers(this, _max_extraInitializers), __runInitializers(this, _step_initializers, void 0));
|
|
115
|
+
get step() { return this.#step_accessor_storage; }
|
|
116
|
+
set step(value) { this.#step_accessor_storage = value; }
|
|
117
|
+
#width_accessor_storage = (__runInitializers(this, _step_extraInitializers), __runInitializers(this, _width_initializers, void 0));
|
|
118
|
+
get width() { return this.#width_accessor_storage; }
|
|
119
|
+
set width(value) { this.#width_accessor_storage = value; }
|
|
120
|
+
_theme = __runInitializers(this, _width_extraInitializers);
|
|
121
|
+
_dragging = false;
|
|
122
|
+
constructor(options = {}) {
|
|
123
|
+
super();
|
|
124
|
+
this.id = options.id ?? `slider-${Math.random().toString(36).slice(2, 8)}`;
|
|
125
|
+
this.min = options.min ?? 0;
|
|
126
|
+
this.max = options.max ?? 100;
|
|
127
|
+
this.step = options.step ?? 1;
|
|
128
|
+
this.width = options.width ?? DEFAULT_WIDTH;
|
|
129
|
+
this.value = clampSnap(options.value ?? this.min, this.min, this.max, this.step);
|
|
130
|
+
this.disabled = options.disabled ?? false;
|
|
131
|
+
this._theme = options.theme ?? DEFAULT_TERMINAL_THEME;
|
|
132
|
+
}
|
|
133
|
+
setTheme(theme) { this._theme = theme; }
|
|
134
|
+
// --- Event handlers ---
|
|
135
|
+
handleKey(event) {
|
|
136
|
+
if (this.disabled)
|
|
137
|
+
return;
|
|
138
|
+
switch (event.key) {
|
|
139
|
+
case "left":
|
|
140
|
+
this.setValue(this.value - this.step);
|
|
141
|
+
return;
|
|
142
|
+
case "right":
|
|
143
|
+
this.setValue(this.value + this.step);
|
|
144
|
+
return;
|
|
145
|
+
case "home":
|
|
146
|
+
this.setValue(this.min);
|
|
147
|
+
return;
|
|
148
|
+
case "end":
|
|
149
|
+
this.setValue(this.max);
|
|
150
|
+
return;
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
handleMouse(event) {
|
|
154
|
+
if (this.disabled)
|
|
155
|
+
return;
|
|
156
|
+
if (event.type === "mouse_down") {
|
|
157
|
+
this._dragging = true;
|
|
158
|
+
this.setValueFromMouseX(event.x);
|
|
159
|
+
return;
|
|
160
|
+
}
|
|
161
|
+
if (event.type === "mouse_move") {
|
|
162
|
+
if (this._dragging)
|
|
163
|
+
this.setValueFromMouseX(event.x);
|
|
164
|
+
return;
|
|
165
|
+
}
|
|
166
|
+
if (event.type === "mouse_up") {
|
|
167
|
+
const wasDragging = this._dragging;
|
|
168
|
+
this._dragging = false;
|
|
169
|
+
if (wasDragging) {
|
|
170
|
+
this.setValueFromMouseX(event.x);
|
|
171
|
+
this.emitSubmit();
|
|
172
|
+
}
|
|
173
|
+
return;
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
// --- Hover mutator (router fast-path) ---
|
|
177
|
+
setHovered(value) { this.hovered = value; }
|
|
178
|
+
// --- Value mutation ---
|
|
179
|
+
setValue(next) {
|
|
180
|
+
const snapped = clampSnap(next, this.min, this.max, this.step);
|
|
181
|
+
if (snapped === this.value)
|
|
182
|
+
return;
|
|
183
|
+
this.value = snapped;
|
|
184
|
+
this.emitChange();
|
|
185
|
+
}
|
|
186
|
+
setValueFromMouseX(x) {
|
|
187
|
+
const b = this.bounds;
|
|
188
|
+
if (!b)
|
|
189
|
+
return;
|
|
190
|
+
const cellsAvailable = Math.max(1, this.width - 1);
|
|
191
|
+
const clamped = Math.max(0, Math.min(this.width - 1, x - b.x));
|
|
192
|
+
const fraction = clamped / cellsAvailable;
|
|
193
|
+
const next = this.min + fraction * (this.max - this.min);
|
|
194
|
+
this.setValue(next);
|
|
195
|
+
}
|
|
196
|
+
// --- Rendering ---
|
|
197
|
+
render(options) {
|
|
198
|
+
const trackChar = options.asciiOnly ? "-" : "─";
|
|
199
|
+
const markerChar = options.asciiOnly ? "*" : "●";
|
|
200
|
+
const range = this.max - this.min;
|
|
201
|
+
const fraction = range === 0 ? 0 : (this.value - this.min) / range;
|
|
202
|
+
const markerIdx = Math.round(fraction * (this.width - 1));
|
|
203
|
+
const baseAttrs = { underline: this.focused };
|
|
204
|
+
const filledStyle = this.disabled
|
|
205
|
+
? new Style({ color: "#666666", bgcolor: "#333333", dim: true, ...baseAttrs })
|
|
206
|
+
: new Style({ color: this.resolvePalette("primary"), ...baseAttrs });
|
|
207
|
+
const unfilledStyle = this.disabled
|
|
208
|
+
? new Style({ color: "#666666", bgcolor: "#333333", dim: true, ...baseAttrs })
|
|
209
|
+
: new Style({ color: this.resolvePalette("surface"), ...baseAttrs });
|
|
210
|
+
const markerStyle = this.disabled
|
|
211
|
+
? new Style({ color: "#666666", bgcolor: "#333333", dim: true, bold: true, ...baseAttrs })
|
|
212
|
+
: new Style({ color: this.resolvePalette("primary"), bold: true, ...baseAttrs });
|
|
213
|
+
const segments = [];
|
|
214
|
+
if (markerIdx > 0) {
|
|
215
|
+
segments.push(new Segment(trackChar.repeat(markerIdx), filledStyle));
|
|
216
|
+
}
|
|
217
|
+
segments.push(new Segment(markerChar, markerStyle));
|
|
218
|
+
const tail = this.width - markerIdx - 1;
|
|
219
|
+
if (tail > 0) {
|
|
220
|
+
segments.push(new Segment(trackChar.repeat(tail), unfilledStyle));
|
|
221
|
+
}
|
|
222
|
+
return segments;
|
|
223
|
+
}
|
|
224
|
+
measure(_options) {
|
|
225
|
+
return { minimum: this.width, maximum: this.width };
|
|
226
|
+
}
|
|
227
|
+
// --- Palette resolution ---
|
|
228
|
+
resolvePalette(key) {
|
|
229
|
+
const rgba = this._theme.palette.get(key);
|
|
230
|
+
// [LAW:no-defensive-null-guards] palette must contain all keys.
|
|
231
|
+
return ColorSpec.fromRgba(rgba);
|
|
232
|
+
}
|
|
233
|
+
};
|
|
234
|
+
})();
|
|
235
|
+
export { Slider };
|
|
236
|
+
// [LAW:single-enforcer] Single function clamps a numeric value into the
|
|
237
|
+
// [min, max] range and snaps to the nearest step boundary. All value
|
|
238
|
+
// mutations route through this; min/max/step never produce out-of-bounds
|
|
239
|
+
// observable state.
|
|
240
|
+
function clampSnap(value, min, max, step) {
|
|
241
|
+
const clamped = Math.max(min, Math.min(max, value));
|
|
242
|
+
if (step <= 0)
|
|
243
|
+
return clamped;
|
|
244
|
+
const snapped = min + Math.round((clamped - min) / step) * step;
|
|
245
|
+
// Floating-point cleanup: re-clamp in case rounding nudged past max.
|
|
246
|
+
return Math.max(min, Math.min(max, snapped));
|
|
247
|
+
}
|
|
248
|
+
//# sourceMappingURL=slider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"slider.js","sourceRoot":"","sources":["../../src/widgets/slider.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* StaticItem — a non-focusable, non-interactive Renderable wrapped to fit
|
|
3
|
+
* the InteractiveWidget surface so it can be mounted by Screen alongside
|
|
4
|
+
* real widgets.
|
|
5
|
+
*
|
|
6
|
+
* [LAW:one-type-per-behavior] Screen.mount accepts a uniform array of
|
|
7
|
+
* InteractiveWidget. Static text, panels, swatches, and other display-only
|
|
8
|
+
* Renderables flow through the same pipeline by being expressed as the
|
|
9
|
+
* same type. The differences (no focus, no event handling) are configured
|
|
10
|
+
* via `focusable: false` plus the no-op handlers WidgetBase already
|
|
11
|
+
* provides — there is no second type, no "static vs interactive" branch in
|
|
12
|
+
* Screen's render loop.
|
|
13
|
+
*
|
|
14
|
+
* The wrapped renderable can be a function that re-evaluates each frame
|
|
15
|
+
* (so the host can read MobX observables inside `render` and have Screen
|
|
16
|
+
* re-render reactively) or a plain object that returns the same segments
|
|
17
|
+
* every time.
|
|
18
|
+
*/
|
|
19
|
+
import type { Segment } from "../core/segment.js";
|
|
20
|
+
import type { Measurable, Renderable, RenderOptions } from "../core/protocol.js";
|
|
21
|
+
import { WidgetBase } from "./widget-base.js";
|
|
22
|
+
import type { KeyEvent } from "./types.js";
|
|
23
|
+
export interface StaticItemOptions {
|
|
24
|
+
id: string;
|
|
25
|
+
render: Renderable | ((options: RenderOptions) => Iterable<Segment>);
|
|
26
|
+
measure?: Measurable["measure"];
|
|
27
|
+
}
|
|
28
|
+
export declare class StaticItem extends WidgetBase {
|
|
29
|
+
readonly id: string;
|
|
30
|
+
readonly focusable = false;
|
|
31
|
+
private readonly renderFn;
|
|
32
|
+
private readonly measureFn;
|
|
33
|
+
constructor(options: StaticItemOptions);
|
|
34
|
+
handleKey(_event: KeyEvent): void;
|
|
35
|
+
render(options: RenderOptions): Iterable<Segment>;
|
|
36
|
+
measure(options: RenderOptions): {
|
|
37
|
+
minimum: number;
|
|
38
|
+
maximum: number;
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=static-item.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"static-item.d.ts","sourceRoot":"","sources":["../../src/widgets/static-item.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACjF,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAE3C,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAC;IAIX,MAAM,EAAE,UAAU,GAAG,CAAC,CAAC,OAAO,EAAE,aAAa,KAAK,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;IAIrE,OAAO,CAAC,EAAE,UAAU,CAAC,SAAS,CAAC,CAAC;CACjC;AAED,qBAAa,UAAW,SAAQ,UAAU;IACxC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,SAAS,SAAS;IAE3B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAgD;IACzE,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAoC;gBAElD,OAAO,EAAE,iBAAiB;IAatC,SAAS,CAAC,MAAM,EAAE,QAAQ,GAAG,IAAI;IAEjC,MAAM,CAAC,OAAO,EAAE,aAAa,GAAG,QAAQ,CAAC,OAAO,CAAC;IAIjD,OAAO,CAAC,OAAO,EAAE,aAAa,GAAG;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE;CAgBtE"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* StaticItem — a non-focusable, non-interactive Renderable wrapped to fit
|
|
3
|
+
* the InteractiveWidget surface so it can be mounted by Screen alongside
|
|
4
|
+
* real widgets.
|
|
5
|
+
*
|
|
6
|
+
* [LAW:one-type-per-behavior] Screen.mount accepts a uniform array of
|
|
7
|
+
* InteractiveWidget. Static text, panels, swatches, and other display-only
|
|
8
|
+
* Renderables flow through the same pipeline by being expressed as the
|
|
9
|
+
* same type. The differences (no focus, no event handling) are configured
|
|
10
|
+
* via `focusable: false` plus the no-op handlers WidgetBase already
|
|
11
|
+
* provides — there is no second type, no "static vs interactive" branch in
|
|
12
|
+
* Screen's render loop.
|
|
13
|
+
*
|
|
14
|
+
* The wrapped renderable can be a function that re-evaluates each frame
|
|
15
|
+
* (so the host can read MobX observables inside `render` and have Screen
|
|
16
|
+
* re-render reactively) or a plain object that returns the same segments
|
|
17
|
+
* every time.
|
|
18
|
+
*/
|
|
19
|
+
import { WidgetBase } from "./widget-base.js";
|
|
20
|
+
export class StaticItem extends WidgetBase {
|
|
21
|
+
id;
|
|
22
|
+
focusable = false;
|
|
23
|
+
renderFn;
|
|
24
|
+
measureFn;
|
|
25
|
+
constructor(options) {
|
|
26
|
+
super();
|
|
27
|
+
this.id = options.id;
|
|
28
|
+
const r = options.render;
|
|
29
|
+
this.renderFn =
|
|
30
|
+
typeof r === "function"
|
|
31
|
+
? (opts) => r(opts)
|
|
32
|
+
: (opts) => r.render(opts);
|
|
33
|
+
this.measureFn = options.measure;
|
|
34
|
+
}
|
|
35
|
+
// Static items don't respond to keys. WidgetBase.handleMouse / handleFocus
|
|
36
|
+
// are already no-ops, so we only need to satisfy the abstract handleKey.
|
|
37
|
+
handleKey(_event) { }
|
|
38
|
+
render(options) {
|
|
39
|
+
return this.renderFn(options);
|
|
40
|
+
}
|
|
41
|
+
measure(options) {
|
|
42
|
+
if (this.measureFn)
|
|
43
|
+
return this.measureFn(options);
|
|
44
|
+
// Render once and use the resulting line width as both min and max.
|
|
45
|
+
let max = 0;
|
|
46
|
+
let cur = 0;
|
|
47
|
+
for (const seg of this.renderFn(options)) {
|
|
48
|
+
if (seg.text === "\n") {
|
|
49
|
+
if (cur > max)
|
|
50
|
+
max = cur;
|
|
51
|
+
cur = 0;
|
|
52
|
+
}
|
|
53
|
+
else {
|
|
54
|
+
cur += seg.cellLength;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
if (cur > max)
|
|
58
|
+
max = cur;
|
|
59
|
+
return { minimum: max, maximum: max };
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
//# sourceMappingURL=static-item.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"static-item.js","sourceRoot":"","sources":["../../src/widgets/static-item.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAIH,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAe9C,MAAM,OAAO,UAAW,SAAQ,UAAU;IAC/B,EAAE,CAAS;IACX,SAAS,GAAG,KAAK,CAAC;IAEV,QAAQ,CAAgD;IACxD,SAAS,CAAoC;IAE9D,YAAY,OAA0B;QACpC,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,EAAE,GAAG,OAAO,CAAC,EAAE,CAAC;QACrB,MAAM,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;QACzB,IAAI,CAAC,QAAQ;YACX,OAAO,CAAC,KAAK,UAAU;gBACrB,CAAC,CAAC,CAAC,IAAmB,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;gBAClC,CAAC,CAAC,CAAC,IAAmB,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAC9C,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC;IACnC,CAAC;IAED,2EAA2E;IAC3E,yEAAyE;IACzE,SAAS,CAAC,MAAgB,IAAS,CAAC;IAEpC,MAAM,CAAC,OAAsB;QAC3B,OAAO,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IAChC,CAAC;IAED,OAAO,CAAC,OAAsB;QAC5B,IAAI,IAAI,CAAC,SAAS;YAAE,OAAO,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;QACnD,oEAAoE;QACpE,IAAI,GAAG,GAAG,CAAC,CAAC;QACZ,IAAI,GAAG,GAAG,CAAC,CAAC;QACZ,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;YACzC,IAAI,GAAG,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC;gBACtB,IAAI,GAAG,GAAG,GAAG;oBAAE,GAAG,GAAG,GAAG,CAAC;gBACzB,GAAG,GAAG,CAAC,CAAC;YACV,CAAC;iBAAM,CAAC;gBACN,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC;YACxB,CAAC;QACH,CAAC;QACD,IAAI,GAAG,GAAG,GAAG;YAAE,GAAG,GAAG,GAAG,CAAC;QACzB,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC;IACxC,CAAC;CACF"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TextInput widget — single-line editable text field with cursor.
|
|
3
|
+
* [LAW:dataflow-not-control-flow] cursor is a data position; when focused,
|
|
4
|
+
* exactly one cell is rendered with reverse-video styling on every frame.
|
|
5
|
+
* [LAW:one-type-per-behavior] shared infrastructure inherited from WidgetBase.
|
|
6
|
+
*
|
|
7
|
+
* Visual states:
|
|
8
|
+
* normal — "[value______]" with brackets bracketing fixed-width content
|
|
9
|
+
* focused — same width with cursor cell (reverse video) at cursorPosition
|
|
10
|
+
* placeholder — focused + empty value: dimmed placeholder text shown,
|
|
11
|
+
* cursor at position 0
|
|
12
|
+
* password — every value char rendered as "•"
|
|
13
|
+
* disabled — entire segment dimmed
|
|
14
|
+
*/
|
|
15
|
+
import { Segment } from "../core/segment.js";
|
|
16
|
+
import type { RenderOptions } from "../core/protocol.js";
|
|
17
|
+
import type { TerminalTheme } from "../core/color.js";
|
|
18
|
+
import { WidgetBase } from "./widget-base.js";
|
|
19
|
+
import type { KeyEvent, WidgetMouseEvent } from "./types.js";
|
|
20
|
+
export interface TextInputOptions {
|
|
21
|
+
value?: string;
|
|
22
|
+
placeholder?: string;
|
|
23
|
+
id?: string;
|
|
24
|
+
disabled?: boolean;
|
|
25
|
+
theme?: TerminalTheme;
|
|
26
|
+
maxLength?: number;
|
|
27
|
+
password?: boolean;
|
|
28
|
+
}
|
|
29
|
+
export declare class TextInput extends WidgetBase {
|
|
30
|
+
readonly id: string;
|
|
31
|
+
readonly focusable = true;
|
|
32
|
+
accessor value: string;
|
|
33
|
+
accessor cursorPosition: number;
|
|
34
|
+
accessor placeholder: string;
|
|
35
|
+
private _theme;
|
|
36
|
+
private readonly _maxLength;
|
|
37
|
+
private readonly _password;
|
|
38
|
+
constructor(options?: TextInputOptions);
|
|
39
|
+
setTheme(theme: TerminalTheme): void;
|
|
40
|
+
handleKey(event: KeyEvent): void;
|
|
41
|
+
handleMouse(event: WidgetMouseEvent): void;
|
|
42
|
+
setHovered(value: boolean): void;
|
|
43
|
+
render(options: RenderOptions): Iterable<Segment>;
|
|
44
|
+
measure(_options: RenderOptions): {
|
|
45
|
+
minimum: number;
|
|
46
|
+
maximum: number;
|
|
47
|
+
};
|
|
48
|
+
private resolvePalette;
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=text-input.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"text-input.d.ts","sourceRoot":"","sources":["../../src/widgets/text-input.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAGH,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAI7C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,KAAK,EAAE,QAAQ,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAE7D,MAAM,WAAW,gBAAgB;IAC/B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAID,qBAAa,SAAU,SAAQ,UAAU;IACvC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,SAAS,QAAQ;IAEd,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAE7C,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAqB;IAChD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAU;gBAExB,OAAO,GAAE,gBAAqB;IAY1C,QAAQ,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI;IAKpC,SAAS,CAAC,KAAK,EAAE,QAAQ,GAAG,IAAI;IAqDvB,WAAW,CAAC,KAAK,EAAE,gBAAgB,GAAG,IAAI;IAcnD,UAAU,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI;IAIhC,MAAM,CAAC,OAAO,EAAE,aAAa,GAAG,QAAQ,CAAC,OAAO,CAAC;IAuDjD,OAAO,CAAC,QAAQ,EAAE,aAAa,GAAG;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE;IAQtE,OAAO,CAAC,cAAc;CAKvB"}
|