@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.
Files changed (318) hide show
  1. package/README.md +418 -0
  2. package/dist/core/box.d.ts +91 -0
  3. package/dist/core/box.d.ts.map +1 -0
  4. package/dist/core/box.js +534 -0
  5. package/dist/core/box.js.map +1 -0
  6. package/dist/core/cells.d.ts +24 -0
  7. package/dist/core/cells.d.ts.map +1 -0
  8. package/dist/core/cells.js +114 -0
  9. package/dist/core/cells.js.map +1 -0
  10. package/dist/core/color.d.ts +158 -0
  11. package/dist/core/color.d.ts.map +1 -0
  12. package/dist/core/color.js +825 -0
  13. package/dist/core/color.js.map +1 -0
  14. package/dist/core/console.d.ts +100 -0
  15. package/dist/core/console.d.ts.map +1 -0
  16. package/dist/core/console.js +353 -0
  17. package/dist/core/console.js.map +1 -0
  18. package/dist/core/emoji.d.ts +25 -0
  19. package/dist/core/emoji.d.ts.map +1 -0
  20. package/dist/core/emoji.js +392 -0
  21. package/dist/core/emoji.js.map +1 -0
  22. package/dist/core/highlighter.d.ts +33 -0
  23. package/dist/core/highlighter.d.ts.map +1 -0
  24. package/dist/core/highlighter.js +103 -0
  25. package/dist/core/highlighter.js.map +1 -0
  26. package/dist/core/markup.d.ts +69 -0
  27. package/dist/core/markup.d.ts.map +1 -0
  28. package/dist/core/markup.js +401 -0
  29. package/dist/core/markup.js.map +1 -0
  30. package/dist/core/measure.d.ts +17 -0
  31. package/dist/core/measure.d.ts.map +1 -0
  32. package/dist/core/measure.js +50 -0
  33. package/dist/core/measure.js.map +1 -0
  34. package/dist/core/protocol.d.ts +32 -0
  35. package/dist/core/protocol.d.ts.map +1 -0
  36. package/dist/core/protocol.js +17 -0
  37. package/dist/core/protocol.js.map +1 -0
  38. package/dist/core/render.d.ts +51 -0
  39. package/dist/core/render.d.ts.map +1 -0
  40. package/dist/core/render.js +69 -0
  41. package/dist/core/render.js.map +1 -0
  42. package/dist/core/segment.d.ts +104 -0
  43. package/dist/core/segment.d.ts.map +1 -0
  44. package/dist/core/segment.js +364 -0
  45. package/dist/core/segment.js.map +1 -0
  46. package/dist/core/spinnerData.d.ts +11 -0
  47. package/dist/core/spinnerData.d.ts.map +1 -0
  48. package/dist/core/spinnerData.js +116 -0
  49. package/dist/core/spinnerData.js.map +1 -0
  50. package/dist/core/strip.d.ts +159 -0
  51. package/dist/core/strip.d.ts.map +1 -0
  52. package/dist/core/strip.js +237 -0
  53. package/dist/core/strip.js.map +1 -0
  54. package/dist/core/style.d.ts +115 -0
  55. package/dist/core/style.d.ts.map +1 -0
  56. package/dist/core/style.js +662 -0
  57. package/dist/core/style.js.map +1 -0
  58. package/dist/core/text.d.ts +91 -0
  59. package/dist/core/text.d.ts.map +1 -0
  60. package/dist/core/text.js +610 -0
  61. package/dist/core/text.js.map +1 -0
  62. package/dist/index.d.ts +99 -0
  63. package/dist/index.d.ts.map +1 -0
  64. package/dist/index.js +72 -0
  65. package/dist/index.js.map +1 -0
  66. package/dist/renderables/align.d.ts +17 -0
  67. package/dist/renderables/align.d.ts.map +1 -0
  68. package/dist/renderables/align.js +47 -0
  69. package/dist/renderables/align.js.map +1 -0
  70. package/dist/renderables/columns.d.ts +28 -0
  71. package/dist/renderables/columns.d.ts.map +1 -0
  72. package/dist/renderables/columns.js +92 -0
  73. package/dist/renderables/columns.js.map +1 -0
  74. package/dist/renderables/constrain.d.ts +16 -0
  75. package/dist/renderables/constrain.d.ts.map +1 -0
  76. package/dist/renderables/constrain.js +38 -0
  77. package/dist/renderables/constrain.js.map +1 -0
  78. package/dist/renderables/flexStrip.d.ts +42 -0
  79. package/dist/renderables/flexStrip.d.ts.map +1 -0
  80. package/dist/renderables/flexStrip.js +201 -0
  81. package/dist/renderables/flexStrip.js.map +1 -0
  82. package/dist/renderables/group.d.ts +12 -0
  83. package/dist/renderables/group.d.ts.map +1 -0
  84. package/dist/renderables/group.js +16 -0
  85. package/dist/renderables/group.js.map +1 -0
  86. package/dist/renderables/json.d.ts +23 -0
  87. package/dist/renderables/json.d.ts.map +1 -0
  88. package/dist/renderables/json.js +49 -0
  89. package/dist/renderables/json.js.map +1 -0
  90. package/dist/renderables/layout.d.ts +37 -0
  91. package/dist/renderables/layout.d.ts.map +1 -0
  92. package/dist/renderables/layout.js +151 -0
  93. package/dist/renderables/layout.js.map +1 -0
  94. package/dist/renderables/live.d.ts +48 -0
  95. package/dist/renderables/live.d.ts.map +1 -0
  96. package/dist/renderables/live.js +131 -0
  97. package/dist/renderables/live.js.map +1 -0
  98. package/dist/renderables/markdown.d.ts +25 -0
  99. package/dist/renderables/markdown.d.ts.map +1 -0
  100. package/dist/renderables/markdown.js +190 -0
  101. package/dist/renderables/markdown.js.map +1 -0
  102. package/dist/renderables/padding.d.ts +26 -0
  103. package/dist/renderables/padding.d.ts.map +1 -0
  104. package/dist/renderables/padding.js +92 -0
  105. package/dist/renderables/padding.js.map +1 -0
  106. package/dist/renderables/panel.d.ts +42 -0
  107. package/dist/renderables/panel.d.ts.map +1 -0
  108. package/dist/renderables/panel.js +202 -0
  109. package/dist/renderables/panel.js.map +1 -0
  110. package/dist/renderables/pretty.d.ts +29 -0
  111. package/dist/renderables/pretty.d.ts.map +1 -0
  112. package/dist/renderables/pretty.js +141 -0
  113. package/dist/renderables/pretty.js.map +1 -0
  114. package/dist/renderables/progress.d.ts +91 -0
  115. package/dist/renderables/progress.d.ts.map +1 -0
  116. package/dist/renderables/progress.js +234 -0
  117. package/dist/renderables/progress.js.map +1 -0
  118. package/dist/renderables/progressBar.d.ts +32 -0
  119. package/dist/renderables/progressBar.d.ts.map +1 -0
  120. package/dist/renderables/progressBar.js +59 -0
  121. package/dist/renderables/progressBar.js.map +1 -0
  122. package/dist/renderables/prompt.d.ts +25 -0
  123. package/dist/renderables/prompt.d.ts.map +1 -0
  124. package/dist/renderables/prompt.js +109 -0
  125. package/dist/renderables/prompt.js.map +1 -0
  126. package/dist/renderables/rule.d.ts +25 -0
  127. package/dist/renderables/rule.d.ts.map +1 -0
  128. package/dist/renderables/rule.js +96 -0
  129. package/dist/renderables/rule.js.map +1 -0
  130. package/dist/renderables/spinner.d.ts +30 -0
  131. package/dist/renderables/spinner.d.ts.map +1 -0
  132. package/dist/renderables/spinner.js +70 -0
  133. package/dist/renderables/spinner.js.map +1 -0
  134. package/dist/renderables/status.d.ts +24 -0
  135. package/dist/renderables/status.d.ts.map +1 -0
  136. package/dist/renderables/status.js +67 -0
  137. package/dist/renderables/status.js.map +1 -0
  138. package/dist/renderables/syntax.d.ts +36 -0
  139. package/dist/renderables/syntax.d.ts.map +1 -0
  140. package/dist/renderables/syntax.js +115 -0
  141. package/dist/renderables/syntax.js.map +1 -0
  142. package/dist/renderables/table.d.ts +109 -0
  143. package/dist/renderables/table.d.ts.map +1 -0
  144. package/dist/renderables/table.js +434 -0
  145. package/dist/renderables/table.js.map +1 -0
  146. package/dist/renderables/traceback.d.ts +26 -0
  147. package/dist/renderables/traceback.d.ts.map +1 -0
  148. package/dist/renderables/traceback.js +108 -0
  149. package/dist/renderables/traceback.js.map +1 -0
  150. package/dist/renderables/tree.d.ts +30 -0
  151. package/dist/renderables/tree.d.ts.map +1 -0
  152. package/dist/renderables/tree.js +107 -0
  153. package/dist/renderables/tree.js.map +1 -0
  154. package/dist/template-bindings/index.d.ts +61 -0
  155. package/dist/template-bindings/index.d.ts.map +1 -0
  156. package/dist/template-bindings/index.js +70 -0
  157. package/dist/template-bindings/index.js.map +1 -0
  158. package/dist/template-bindings/style-funcs.d.ts +30 -0
  159. package/dist/template-bindings/style-funcs.d.ts.map +1 -0
  160. package/dist/template-bindings/style-funcs.js +172 -0
  161. package/dist/template-bindings/style-funcs.js.map +1 -0
  162. package/dist/themes/buildPalette.d.ts +31 -0
  163. package/dist/themes/buildPalette.d.ts.map +1 -0
  164. package/dist/themes/buildPalette.js +43 -0
  165. package/dist/themes/buildPalette.js.map +1 -0
  166. package/dist/themes/colorMath.d.ts +23 -0
  167. package/dist/themes/colorMath.d.ts.map +1 -0
  168. package/dist/themes/colorMath.js +99 -0
  169. package/dist/themes/colorMath.js.map +1 -0
  170. package/dist/themes/data/atom-one-dark.d.ts +4 -0
  171. package/dist/themes/data/atom-one-dark.d.ts.map +1 -0
  172. package/dist/themes/data/atom-one-dark.js +159 -0
  173. package/dist/themes/data/atom-one-dark.js.map +1 -0
  174. package/dist/themes/data/atom-one-light.d.ts +4 -0
  175. package/dist/themes/data/atom-one-light.d.ts.map +1 -0
  176. package/dist/themes/data/atom-one-light.js +159 -0
  177. package/dist/themes/data/atom-one-light.js.map +1 -0
  178. package/dist/themes/data/catppuccin-latte.d.ts +4 -0
  179. package/dist/themes/data/catppuccin-latte.d.ts.map +1 -0
  180. package/dist/themes/data/catppuccin-latte.js +159 -0
  181. package/dist/themes/data/catppuccin-latte.js.map +1 -0
  182. package/dist/themes/data/catppuccin-mocha.d.ts +4 -0
  183. package/dist/themes/data/catppuccin-mocha.d.ts.map +1 -0
  184. package/dist/themes/data/catppuccin-mocha.js +159 -0
  185. package/dist/themes/data/catppuccin-mocha.js.map +1 -0
  186. package/dist/themes/data/dracula.d.ts +4 -0
  187. package/dist/themes/data/dracula.d.ts.map +1 -0
  188. package/dist/themes/data/dracula.js +159 -0
  189. package/dist/themes/data/dracula.js.map +1 -0
  190. package/dist/themes/data/flexoki.d.ts +4 -0
  191. package/dist/themes/data/flexoki.d.ts.map +1 -0
  192. package/dist/themes/data/flexoki.js +159 -0
  193. package/dist/themes/data/flexoki.js.map +1 -0
  194. package/dist/themes/data/gruvbox.d.ts +4 -0
  195. package/dist/themes/data/gruvbox.d.ts.map +1 -0
  196. package/dist/themes/data/gruvbox.js +159 -0
  197. package/dist/themes/data/gruvbox.js.map +1 -0
  198. package/dist/themes/data/index.d.ts +29 -0
  199. package/dist/themes/data/index.d.ts.map +1 -0
  200. package/dist/themes/data/index.js +48 -0
  201. package/dist/themes/data/index.js.map +1 -0
  202. package/dist/themes/data/monokai.d.ts +4 -0
  203. package/dist/themes/data/monokai.d.ts.map +1 -0
  204. package/dist/themes/data/monokai.js +159 -0
  205. package/dist/themes/data/monokai.js.map +1 -0
  206. package/dist/themes/data/nord.d.ts +4 -0
  207. package/dist/themes/data/nord.d.ts.map +1 -0
  208. package/dist/themes/data/nord.js +159 -0
  209. package/dist/themes/data/nord.js.map +1 -0
  210. package/dist/themes/data/rose-pine-dawn.d.ts +4 -0
  211. package/dist/themes/data/rose-pine-dawn.d.ts.map +1 -0
  212. package/dist/themes/data/rose-pine-dawn.js +159 -0
  213. package/dist/themes/data/rose-pine-dawn.js.map +1 -0
  214. package/dist/themes/data/rose-pine-moon.d.ts +4 -0
  215. package/dist/themes/data/rose-pine-moon.d.ts.map +1 -0
  216. package/dist/themes/data/rose-pine-moon.js +159 -0
  217. package/dist/themes/data/rose-pine-moon.js.map +1 -0
  218. package/dist/themes/data/rose-pine.d.ts +4 -0
  219. package/dist/themes/data/rose-pine.d.ts.map +1 -0
  220. package/dist/themes/data/rose-pine.js +159 -0
  221. package/dist/themes/data/rose-pine.js.map +1 -0
  222. package/dist/themes/data/solarized-dark.d.ts +4 -0
  223. package/dist/themes/data/solarized-dark.d.ts.map +1 -0
  224. package/dist/themes/data/solarized-dark.js +159 -0
  225. package/dist/themes/data/solarized-dark.js.map +1 -0
  226. package/dist/themes/data/solarized-light.d.ts +4 -0
  227. package/dist/themes/data/solarized-light.d.ts.map +1 -0
  228. package/dist/themes/data/solarized-light.js +159 -0
  229. package/dist/themes/data/solarized-light.js.map +1 -0
  230. package/dist/themes/data/textual-ansi.d.ts +4 -0
  231. package/dist/themes/data/textual-ansi.d.ts.map +1 -0
  232. package/dist/themes/data/textual-ansi.js +159 -0
  233. package/dist/themes/data/textual-ansi.js.map +1 -0
  234. package/dist/themes/data/textual-dark.d.ts +4 -0
  235. package/dist/themes/data/textual-dark.d.ts.map +1 -0
  236. package/dist/themes/data/textual-dark.js +159 -0
  237. package/dist/themes/data/textual-dark.js.map +1 -0
  238. package/dist/themes/data/textual-light.d.ts +4 -0
  239. package/dist/themes/data/textual-light.d.ts.map +1 -0
  240. package/dist/themes/data/textual-light.js +159 -0
  241. package/dist/themes/data/textual-light.js.map +1 -0
  242. package/dist/themes/data/tokyo-night.d.ts +4 -0
  243. package/dist/themes/data/tokyo-night.d.ts.map +1 -0
  244. package/dist/themes/data/tokyo-night.js +159 -0
  245. package/dist/themes/data/tokyo-night.js.map +1 -0
  246. package/dist/themes/data/types.d.ts +15 -0
  247. package/dist/themes/data/types.d.ts.map +1 -0
  248. package/dist/themes/data/types.js +2 -0
  249. package/dist/themes/data/types.js.map +1 -0
  250. package/dist/themes/palette.d.ts +20 -0
  251. package/dist/themes/palette.d.ts.map +1 -0
  252. package/dist/themes/palette.js +27 -0
  253. package/dist/themes/palette.js.map +1 -0
  254. package/dist/themes/paletteResolver.d.ts +35 -0
  255. package/dist/themes/paletteResolver.d.ts.map +1 -0
  256. package/dist/themes/paletteResolver.js +88 -0
  257. package/dist/themes/paletteResolver.js.map +1 -0
  258. package/dist/themes/registry.d.ts +17 -0
  259. package/dist/themes/registry.d.ts.map +1 -0
  260. package/dist/themes/registry.js +33 -0
  261. package/dist/themes/registry.js.map +1 -0
  262. package/dist/themes/terminalThemes.d.ts +46 -0
  263. package/dist/themes/terminalThemes.d.ts.map +1 -0
  264. package/dist/themes/terminalThemes.js +268 -0
  265. package/dist/themes/terminalThemes.js.map +1 -0
  266. package/dist/widgets/button.d.ts +47 -0
  267. package/dist/widgets/button.d.ts.map +1 -0
  268. package/dist/widgets/button.js +183 -0
  269. package/dist/widgets/button.js.map +1 -0
  270. package/dist/widgets/checkbox.d.ts +43 -0
  271. package/dist/widgets/checkbox.d.ts.map +1 -0
  272. package/dist/widgets/checkbox.js +144 -0
  273. package/dist/widgets/checkbox.js.map +1 -0
  274. package/dist/widgets/dropdown.d.ts +67 -0
  275. package/dist/widgets/dropdown.d.ts.map +1 -0
  276. package/dist/widgets/dropdown.js +373 -0
  277. package/dist/widgets/dropdown.js.map +1 -0
  278. package/dist/widgets/event-router.d.ts +73 -0
  279. package/dist/widgets/event-router.d.ts.map +1 -0
  280. package/dist/widgets/event-router.js +479 -0
  281. package/dist/widgets/event-router.js.map +1 -0
  282. package/dist/widgets/focus-manager.d.ts +26 -0
  283. package/dist/widgets/focus-manager.d.ts.map +1 -0
  284. package/dist/widgets/focus-manager.js +179 -0
  285. package/dist/widgets/focus-manager.js.map +1 -0
  286. package/dist/widgets/index.d.ts +23 -0
  287. package/dist/widgets/index.d.ts.map +1 -0
  288. package/dist/widgets/index.js +13 -0
  289. package/dist/widgets/index.js.map +1 -0
  290. package/dist/widgets/screen.d.ts +90 -0
  291. package/dist/widgets/screen.d.ts.map +1 -0
  292. package/dist/widgets/screen.js +440 -0
  293. package/dist/widgets/screen.js.map +1 -0
  294. package/dist/widgets/slider.d.ts +55 -0
  295. package/dist/widgets/slider.d.ts.map +1 -0
  296. package/dist/widgets/slider.js +248 -0
  297. package/dist/widgets/slider.js.map +1 -0
  298. package/dist/widgets/static-item.d.ts +41 -0
  299. package/dist/widgets/static-item.d.ts.map +1 -0
  300. package/dist/widgets/static-item.js +62 -0
  301. package/dist/widgets/static-item.js.map +1 -0
  302. package/dist/widgets/text-input.d.ts +50 -0
  303. package/dist/widgets/text-input.d.ts.map +1 -0
  304. package/dist/widgets/text-input.js +242 -0
  305. package/dist/widgets/text-input.js.map +1 -0
  306. package/dist/widgets/toggle.d.ts +46 -0
  307. package/dist/widgets/toggle.d.ts.map +1 -0
  308. package/dist/widgets/toggle.js +169 -0
  309. package/dist/widgets/toggle.js.map +1 -0
  310. package/dist/widgets/types.d.ts +92 -0
  311. package/dist/widgets/types.d.ts.map +1 -0
  312. package/dist/widgets/types.js +13 -0
  313. package/dist/widgets/types.js.map +1 -0
  314. package/dist/widgets/widget-base.d.ts +41 -0
  315. package/dist/widgets/widget-base.d.ts.map +1 -0
  316. package/dist/widgets/widget-base.js +159 -0
  317. package/dist/widgets/widget-base.js.map +1 -0
  318. 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"}