@promptctl/rich-js 0.1.0 → 0.3.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 (158) hide show
  1. package/README.md +29 -15
  2. package/dist/core/cells.d.ts +83 -3
  3. package/dist/core/cells.d.ts.map +1 -1
  4. package/dist/core/cells.js +113 -1
  5. package/dist/core/cells.js.map +1 -1
  6. package/dist/core/console.d.ts +0 -1
  7. package/dist/core/console.d.ts.map +1 -1
  8. package/dist/core/console.js +20 -16
  9. package/dist/core/console.js.map +1 -1
  10. package/dist/core/highlighter.d.ts.map +1 -1
  11. package/dist/core/highlighter.js.map +1 -1
  12. package/dist/core/oklch.d.ts +106 -0
  13. package/dist/core/oklch.d.ts.map +1 -0
  14. package/dist/core/oklch.js +221 -0
  15. package/dist/core/oklch.js.map +1 -0
  16. package/dist/core/render.d.ts +26 -7
  17. package/dist/core/render.d.ts.map +1 -1
  18. package/dist/core/render.js +83 -15
  19. package/dist/core/render.js.map +1 -1
  20. package/dist/core/segment.d.ts +14 -1
  21. package/dist/core/segment.d.ts.map +1 -1
  22. package/dist/core/segment.js +28 -3
  23. package/dist/core/segment.js.map +1 -1
  24. package/dist/core/style.d.ts +11 -2
  25. package/dist/core/style.d.ts.map +1 -1
  26. package/dist/core/style.js +31 -18
  27. package/dist/core/style.js.map +1 -1
  28. package/dist/core/text.d.ts +20 -0
  29. package/dist/core/text.d.ts.map +1 -1
  30. package/dist/core/text.js +31 -0
  31. package/dist/core/text.js.map +1 -1
  32. package/dist/index.d.ts +11 -4
  33. package/dist/index.d.ts.map +1 -1
  34. package/dist/index.js +12 -3
  35. package/dist/index.js.map +1 -1
  36. package/dist/renderables/columns.d.ts.map +1 -1
  37. package/dist/renderables/columns.js +15 -22
  38. package/dist/renderables/columns.js.map +1 -1
  39. package/dist/renderables/layout.d.ts.map +1 -1
  40. package/dist/renderables/layout.js +8 -29
  41. package/dist/renderables/layout.js.map +1 -1
  42. package/dist/renderables/live.d.ts.map +1 -1
  43. package/dist/renderables/live.js +8 -7
  44. package/dist/renderables/live.js.map +1 -1
  45. package/dist/renderables/panel.d.ts +34 -0
  46. package/dist/renderables/panel.d.ts.map +1 -1
  47. package/dist/renderables/panel.js +66 -23
  48. package/dist/renderables/panel.js.map +1 -1
  49. package/dist/template-bindings/helpers.d.ts +25 -0
  50. package/dist/template-bindings/helpers.d.ts.map +1 -0
  51. package/dist/template-bindings/helpers.js +31 -0
  52. package/dist/template-bindings/helpers.js.map +1 -0
  53. package/dist/template-bindings/index.d.ts +57 -18
  54. package/dist/template-bindings/index.d.ts.map +1 -1
  55. package/dist/template-bindings/index.js +83 -18
  56. package/dist/template-bindings/index.js.map +1 -1
  57. package/dist/template-bindings/palette-funcs.d.ts +76 -0
  58. package/dist/template-bindings/palette-funcs.d.ts.map +1 -0
  59. package/dist/template-bindings/palette-funcs.js +157 -0
  60. package/dist/template-bindings/palette-funcs.js.map +1 -0
  61. package/dist/template-bindings/style-funcs.d.ts.map +1 -1
  62. package/dist/template-bindings/style-funcs.js +33 -27
  63. package/dist/template-bindings/style-funcs.js.map +1 -1
  64. package/dist/themes/colorMath.d.ts +40 -0
  65. package/dist/themes/colorMath.d.ts.map +1 -1
  66. package/dist/themes/colorMath.js +82 -1
  67. package/dist/themes/colorMath.js.map +1 -1
  68. package/dist/themes/data/catppuccin-frappe.d.ts +4 -0
  69. package/dist/themes/data/catppuccin-frappe.d.ts.map +1 -0
  70. package/dist/themes/data/catppuccin-frappe.js +159 -0
  71. package/dist/themes/data/catppuccin-frappe.js.map +1 -0
  72. package/dist/themes/data/catppuccin-macchiato.d.ts +4 -0
  73. package/dist/themes/data/catppuccin-macchiato.d.ts.map +1 -0
  74. package/dist/themes/data/catppuccin-macchiato.js +159 -0
  75. package/dist/themes/data/catppuccin-macchiato.js.map +1 -0
  76. package/dist/themes/data/cyberpunk.d.ts +18 -0
  77. package/dist/themes/data/cyberpunk.d.ts.map +1 -0
  78. package/dist/themes/data/cyberpunk.js +192 -0
  79. package/dist/themes/data/cyberpunk.js.map +1 -0
  80. package/dist/themes/data/default.d.ts +4 -0
  81. package/dist/themes/data/default.d.ts.map +1 -0
  82. package/dist/themes/data/default.js +159 -0
  83. package/dist/themes/data/default.js.map +1 -0
  84. package/dist/themes/data/index.d.ts +10 -3
  85. package/dist/themes/data/index.d.ts.map +1 -1
  86. package/dist/themes/data/index.js +24 -7
  87. package/dist/themes/data/index.js.map +1 -1
  88. package/dist/themes/data/svg-export.d.ts +4 -0
  89. package/dist/themes/data/svg-export.d.ts.map +1 -0
  90. package/dist/themes/data/svg-export.js +159 -0
  91. package/dist/themes/data/svg-export.js.map +1 -0
  92. package/dist/themes/data/types.d.ts +4 -3
  93. package/dist/themes/data/types.d.ts.map +1 -1
  94. package/dist/themes/registry.d.ts +29 -2
  95. package/dist/themes/registry.d.ts.map +1 -1
  96. package/dist/themes/registry.js +62 -12
  97. package/dist/themes/registry.js.map +1 -1
  98. package/dist/themes/terminalThemes.d.ts +29 -20
  99. package/dist/themes/terminalThemes.d.ts.map +1 -1
  100. package/dist/themes/terminalThemes.js +50 -249
  101. package/dist/themes/terminalThemes.js.map +1 -1
  102. package/dist/themes/transpose.d.ts +88 -0
  103. package/dist/themes/transpose.d.ts.map +1 -0
  104. package/dist/themes/transpose.js +139 -0
  105. package/dist/themes/transpose.js.map +1 -0
  106. package/dist/widgets/button.d.ts +8 -5
  107. package/dist/widgets/button.d.ts.map +1 -1
  108. package/dist/widgets/button.js +36 -11
  109. package/dist/widgets/button.js.map +1 -1
  110. package/dist/widgets/checkbox.d.ts +1 -2
  111. package/dist/widgets/checkbox.d.ts.map +1 -1
  112. package/dist/widgets/checkbox.js +20 -7
  113. package/dist/widgets/checkbox.js.map +1 -1
  114. package/dist/widgets/dropdown.d.ts +4 -3
  115. package/dist/widgets/dropdown.d.ts.map +1 -1
  116. package/dist/widgets/dropdown.js +109 -27
  117. package/dist/widgets/dropdown.js.map +1 -1
  118. package/dist/widgets/event-router.d.ts +6 -3
  119. package/dist/widgets/event-router.d.ts.map +1 -1
  120. package/dist/widgets/event-router.js +179 -68
  121. package/dist/widgets/event-router.js.map +1 -1
  122. package/dist/widgets/focus-manager.d.ts +2 -1
  123. package/dist/widgets/focus-manager.d.ts.map +1 -1
  124. package/dist/widgets/focus-manager.js +28 -9
  125. package/dist/widgets/focus-manager.js.map +1 -1
  126. package/dist/widgets/index.d.ts +2 -2
  127. package/dist/widgets/index.d.ts.map +1 -1
  128. package/dist/widgets/index.js +1 -1
  129. package/dist/widgets/index.js.map +1 -1
  130. package/dist/widgets/screen.d.ts +2 -0
  131. package/dist/widgets/screen.d.ts.map +1 -1
  132. package/dist/widgets/screen.js +148 -45
  133. package/dist/widgets/screen.js.map +1 -1
  134. package/dist/widgets/slider.d.ts +6 -3
  135. package/dist/widgets/slider.d.ts.map +1 -1
  136. package/dist/widgets/slider.js +34 -10
  137. package/dist/widgets/slider.js.map +1 -1
  138. package/dist/widgets/static-item.d.ts +1 -1
  139. package/dist/widgets/static-item.d.ts.map +1 -1
  140. package/dist/widgets/static-item.js +12 -13
  141. package/dist/widgets/static-item.js.map +1 -1
  142. package/dist/widgets/text-input.d.ts +239 -13
  143. package/dist/widgets/text-input.d.ts.map +1 -1
  144. package/dist/widgets/text-input.js +1004 -74
  145. package/dist/widgets/text-input.js.map +1 -1
  146. package/dist/widgets/toggle.d.ts +1 -2
  147. package/dist/widgets/toggle.d.ts.map +1 -1
  148. package/dist/widgets/toggle.js +20 -8
  149. package/dist/widgets/toggle.js.map +1 -1
  150. package/dist/widgets/types.d.ts +21 -4
  151. package/dist/widgets/types.d.ts.map +1 -1
  152. package/dist/widgets/types.js +19 -0
  153. package/dist/widgets/types.js.map +1 -1
  154. package/dist/widgets/widget-base.d.ts +1 -0
  155. package/dist/widgets/widget-base.d.ts.map +1 -1
  156. package/dist/widgets/widget-base.js +24 -7
  157. package/dist/widgets/widget-base.js.map +1 -1
  158. package/package.json +5 -3
@@ -0,0 +1,139 @@
1
+ /**
2
+ * Transpose a Palette to a new "key" — analogous to transposing a melody.
3
+ *
4
+ * melody / chord progression :: Palette (relationships between colors)
5
+ * key (signature) :: ThemeKey (hue / chroma / lightness deltas)
6
+ * "in C major" / "in D…" :: the resulting transposed Palette
7
+ *
8
+ * Because OKLCH is perceptually uniform, "+30° hue" looks like a
9
+ * consistent jump everywhere on the color wheel — the way a perfect-fifth
10
+ * interval sounds the same in every musical key. Transposition is closed
11
+ * under composition: `transpose(transpose(p, k1), k2)` produces the same
12
+ * colors as a single transpose with the combined deltas, modulo round-trip
13
+ * quantization.
14
+ *
15
+ * [LAW:dataflow-not-control-flow] A single uniform per-color transform
16
+ * runs for every var in the palette. Anchor protection selects *which*
17
+ * `ThemeKey` to apply (data), not *whether* to apply one (branch).
18
+ *
19
+ * [LAW:one-source-of-truth] Anchor classification lives only in
20
+ * `ANCHORED_ROOTS` below. The buildPalette derivation guarantees every
21
+ * variant of a semantic root shares the root as its hyphen prefix
22
+ * (`error`, `error-darken-1`, `error-lighten-2`, ...), so one set covers
23
+ * the whole family.
24
+ *
25
+ * [LAW:one-way-deps] Imports flow `core/oklch → themes/transpose`;
26
+ * nothing in core/ depends back on this file.
27
+ */
28
+ import { Oklch, isIdentityKey } from "../core/oklch.js";
29
+ import { Palette } from "./palette.js";
30
+ /**
31
+ * Semantic roots whose hue is locked under transposition. `error` must
32
+ * look red-ish, `success` green-ish, `warning` amber-ish — rotating the
33
+ * hue would make the UI lie about meaning. Lightness and chroma *still*
34
+ * transform for these roles, so they invert correctly during dark↔light
35
+ * flips and respond to chroma scaling alongside everything else.
36
+ */
37
+ // [LAW:types-are-the-program] The `ReadonlySet` type is the immutability
38
+ // enforcement — typed code cannot call `add`/`delete`. (`Object.freeze` is
39
+ // not used here because it is a no-op on Set membership; relying on it would
40
+ // imply a runtime guarantee it does not provide.)
41
+ export const ANCHORED_ROOTS = new Set([
42
+ "error",
43
+ "success",
44
+ "warning",
45
+ ]);
46
+ function rootOf(varName) {
47
+ const dash = varName.indexOf("-");
48
+ return dash === -1 ? varName : varName.slice(0, dash);
49
+ }
50
+ /**
51
+ * Whether a palette var's hue is locked under transposition. The single
52
+ * predicate used by `transposePalette`. Exported so callers building
53
+ * higher-level theme machinery can stay consistent with the locking rule.
54
+ */
55
+ export function isAnchored(varName) {
56
+ return ANCHORED_ROOTS.has(rootOf(varName));
57
+ }
58
+ /**
59
+ * Return a new `Palette` whose colors are the transposition of `palette`'s
60
+ * colors by `key`. Pure. Identity (`IDENTITY`) returns a Palette with byte-exact
61
+ * colors — fast-pathed so identity does not pay the sRGB↔OKLCH round-trip
62
+ * quantization cost.
63
+ *
64
+ * The `dark` flag of the result is derived from the actual lightness of
65
+ * the resulting `background` var (`Oklch.fromRgba(bg).l < 0.5`) — *not*
66
+ * from the key's coefficients. The strongest theorem: "dark iff
67
+ * background is dark." This is honest under every transform — pure
68
+ * lightness shifts, mirror-inversions, hue rotations that don't touch L,
69
+ * and combinations of all three. [LAW:types-are-the-program]
70
+ *
71
+ * The transposing path throws if the palette has no `background` var (the
72
+ * `dark`-flag derivation has nothing to read). Failing loudly is preferred
73
+ * over a silent fallback because the alternative — trusting the source
74
+ * `palette.dark` after an arbitrary L-transform — produces flags that lie.
75
+ * The identity fast-path is exempt: it preserves the source `dark` flag
76
+ * verbatim (no derivation), so it needs no `background` and never throws.
77
+ *
78
+ * @param name Optional override for the resulting palette name. Defaults
79
+ * to the source palette's name. Callers building a family of transposed
80
+ * palettes (e.g. "gruvbox +60°") supply their own.
81
+ */
82
+ export function transposePalette(palette, key, name) {
83
+ if (isIdentityKey(key)) {
84
+ return new Palette(name ?? palette.name, palette.dark, palette.vars);
85
+ }
86
+ // Anchors share *everything except* hue with the user's key. They still
87
+ // lightness-invert in a dark↔light flip; they still chroma-scale in a
88
+ // saturation sweep — only their hue is held.
89
+ const anchorKey = { ...key, hueShift: 0 };
90
+ const next = new Map();
91
+ for (const [varName, color] of palette.vars) {
92
+ const effective = isAnchored(varName) ? anchorKey : key;
93
+ next.set(varName, Oklch.fromRgba(color).applyKey(effective).toRgba());
94
+ }
95
+ const newBackground = next.get("background");
96
+ if (newBackground === undefined) {
97
+ throw new Error(`transposePalette: palette "${palette.name}" has no "background" ` +
98
+ `var; cannot derive the dark flag without a background color.`);
99
+ }
100
+ const newDark = Oklch.fromRgba(newBackground).l < 0.5;
101
+ return new Palette(name ?? palette.name, newDark, next);
102
+ }
103
+ /**
104
+ * Build the `ThemeKey` that rotates `palette` so its *tonic* var lands on
105
+ * `targetHueDeg`. The musical operation directly: a key is the set of
106
+ * intervals from the tonic, so "play this theme in the key of <hue>" means
107
+ * "shift every color by exactly the interval that carries the tonic's
108
+ * current hue to the target." Pick the tonic's pitch and the rest follows.
109
+ *
110
+ * Returns a hue-only key (chroma and lightness untouched). Callers that also
111
+ * want to scale chroma or shift lightness spread their own axes over the
112
+ * result — those are independent transposition dimensions, not part of
113
+ * choosing the key. [LAW:one-type-per-behavior] a degree-shift key and a
114
+ * root-note key are the *same* transform; this is just a second constructor
115
+ * for it, so `transposePalette` stays untouched.
116
+ *
117
+ * Throws if `tonicVar` is absent — the interval has no anchor to measure
118
+ * from, so there is no honest key to return. Failing loudly beats inventing
119
+ * a zero shift that would silently mean "no transposition."
120
+ */
121
+ export function themeKeyForRoot(palette, tonicVar, targetHueDeg) {
122
+ // Validate the numeric input at the boundary: a non-finite target would
123
+ // propagate as NaN to Oklch's constructor several calls downstream, where
124
+ // the error is far less actionable.
125
+ if (!Number.isFinite(targetHueDeg)) {
126
+ throw new RangeError(`themeKeyForRoot: targetHueDeg must be a finite number; got ${targetHueDeg}`);
127
+ }
128
+ const tonic = palette.get(tonicVar);
129
+ if (tonic === undefined) {
130
+ throw new Error(`themeKeyForRoot: palette "${palette.name}" has no "${tonicVar}" var ` +
131
+ `to use as the tonic; cannot measure the transposition interval.`);
132
+ }
133
+ const tonicHue = Oklch.fromRgba(tonic).h;
134
+ let hueShift = (targetHueDeg - tonicHue) % 360;
135
+ if (hueShift < 0)
136
+ hueShift += 360;
137
+ return { hueShift, chromaScale: 1, lightnessScale: 1, lightnessShift: 0 };
138
+ }
139
+ //# sourceMappingURL=transpose.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transpose.js","sourceRoot":"","sources":["../../src/themes/transpose.ts"],"names":[],"mappings":"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"}
@@ -5,11 +5,15 @@
5
5
  *
6
6
  * Four visual states:
7
7
  * normal — variant colors from theme semantic palette (muted)
8
- * hover — full variant accent color (brighter than muted)
8
+ * hover — full variant accent bg + on-accent fg (WCAG contrast)
9
9
  * focus — brackets [ label ] surrounding the button
10
- * active — color reversal (pressed)
10
+ * active — same color pair as hover, plus bold (pressed cue)
11
11
  *
12
- * States compose: active > focus > hover > normal.
12
+ * States compose: active > focus > hover > normal. Active and hover
13
+ * deliberately share colors — active differentiates via bold rather
14
+ * than fg/bg inversion, because inversion produces mostly-accent text
15
+ * on bg-tinted surface, which is unreadable for accents whose contrast
16
+ * partner depends on luminance.
13
17
  */
14
18
  import { Segment } from "../core/segment.js";
15
19
  import type { RenderOptions } from "../core/protocol.js";
@@ -29,12 +33,11 @@ export declare class Button extends WidgetBase {
29
33
  readonly focusable = true;
30
34
  accessor label: string;
31
35
  accessor variant: ButtonVariant;
32
- private _theme;
36
+ private accessor _theme;
33
37
  constructor(options: ButtonOptions);
34
38
  setTheme(theme: TerminalTheme): void;
35
39
  handleKey(event: KeyEvent): void;
36
40
  handleMouse(event: WidgetMouseEvent): void;
37
- setHovered(value: boolean): void;
38
41
  setActive(value: boolean): void;
39
42
  render(_options: RenderOptions): Iterable<Segment>;
40
43
  measure(_options: RenderOptions): {
@@ -1 +1 @@
1
- {"version":3,"file":"button.d.ts","sourceRoot":"","sources":["../../src/widgets/button.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;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,MAAM,aAAa,GAAG,SAAS,GAAG,SAAS,GAAG,SAAS,GAAG,SAAS,GAAG,QAAQ,CAAC;AAErF,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,aAAa,CAAC;IACxB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,KAAK,CAAC,EAAE,aAAa,CAAC;CACvB;AAgBD,qBAAa,MAAO,SAAQ,UAAU;IACpC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,SAAS,QAAQ;IAEd,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,OAAO,EAAE,aAAa,CAAC;IAEhD,OAAO,CAAC,MAAM,CAAgB;gBAElB,OAAO,EAAE,aAAa;IASlC,QAAQ,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI;IAKpC,SAAS,CAAC,KAAK,EAAE,QAAQ,GAAG,IAAI;IASvB,WAAW,CAAC,KAAK,EAAE,gBAAgB,GAAG,IAAI;IAgBnD,UAAU,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI;IAGhC,SAAS,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI;IAI/B,MAAM,CAAC,QAAQ,EAAE,aAAa,GAAG,QAAQ,CAAC,OAAO,CAAC;IAyBlD,OAAO,CAAC,QAAQ,EAAE,aAAa,GAAG;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE;IAOtE,OAAO,CAAC,aAAa;IAUrB,OAAO,CAAC,cAAc;CAKvB"}
1
+ {"version":3,"file":"button.d.ts","sourceRoot":"","sources":["../../src/widgets/button.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAGH,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAK7C,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,MAAM,aAAa,GAAG,SAAS,GAAG,SAAS,GAAG,SAAS,GAAG,SAAS,GAAG,QAAQ,CAAC;AAErF,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,aAAa,CAAC;IACxB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,KAAK,CAAC,EAAE,aAAa,CAAC;CACvB;AAgBD,qBAAa,MAAO,SAAQ,UAAU;IACpC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,SAAS,QAAQ;IAEd,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,OAAO,EAAE,aAAa,CAAC;IAIhC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAgB;gBAE3C,OAAO,EAAE,aAAa;IAUlC,QAAQ,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI;IAKpC,SAAS,CAAC,KAAK,EAAE,QAAQ,GAAG,IAAI;IAiBvB,WAAW,CAAC,KAAK,EAAE,gBAAgB,GAAG,IAAI;IAgBnD,SAAS,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI;IAI/B,MAAM,CAAC,QAAQ,EAAE,aAAa,GAAG,QAAQ,CAAC,OAAO,CAAC;IAyBlD,OAAO,CAAC,QAAQ,EAAE,aAAa,GAAG;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE;IAStE,OAAO,CAAC,aAAa;IAUrB,OAAO,CAAC,cAAc;CAKvB"}
@@ -5,11 +5,15 @@
5
5
  *
6
6
  * Four visual states:
7
7
  * normal — variant colors from theme semantic palette (muted)
8
- * hover — full variant accent color (brighter than muted)
8
+ * hover — full variant accent bg + on-accent fg (WCAG contrast)
9
9
  * focus — brackets [ label ] surrounding the button
10
- * active — color reversal (pressed)
10
+ * active — same color pair as hover, plus bold (pressed cue)
11
11
  *
12
- * States compose: active > focus > hover > normal.
12
+ * States compose: active > focus > hover > normal. Active and hover
13
+ * deliberately share colors — active differentiates via bold rather
14
+ * than fg/bg inversion, because inversion produces mostly-accent text
15
+ * on bg-tinted surface, which is unreadable for accents whose contrast
16
+ * partner depends on luminance.
13
17
  */
14
18
  var __runInitializers = (this && this.__runInitializers) || function (thisArg, initializers, value) {
15
19
  var useValue = arguments.length > 2;
@@ -49,6 +53,7 @@ import { observable, action } from "mobx";
49
53
  import { Segment } from "../core/segment.js";
50
54
  import { Style } from "../core/style.js";
51
55
  import { ColorSpec } from "../core/color.js";
56
+ import { cellLen } from "../core/cells.js";
52
57
  import { DEFAULT_TERMINAL_THEME } from "../themes/terminalThemes.js";
53
58
  import { WidgetBase } from "./widget-base.js";
54
59
  // Variant → palette key mapping. Per variant:
@@ -65,7 +70,7 @@ const VARIANT_KEYS = {
65
70
  danger: { bg: "error-muted", fg: "text-error", hover: "error", hoverFg: "on-error" },
66
71
  };
67
72
  let Button = (() => {
68
- var _a;
73
+ var _a, _b;
69
74
  let _classSuper = WidgetBase;
70
75
  let _instanceExtraInitializers = [];
71
76
  let _label_decorators;
@@ -74,24 +79,29 @@ let Button = (() => {
74
79
  let _variant_decorators;
75
80
  let _variant_initializers = [];
76
81
  let _variant_extraInitializers = [];
82
+ let __theme_decorators;
83
+ let __theme_initializers = [];
84
+ let __theme_extraInitializers = [];
85
+ let _setTheme_decorators;
77
86
  let _handleKey_decorators;
78
87
  let _handleMouse_decorators;
79
- let _setHovered_decorators;
80
88
  let _setActive_decorators;
81
89
  return class Button extends _classSuper {
82
90
  static {
83
91
  const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
84
92
  _label_decorators = [observable];
85
93
  _variant_decorators = [(_a = observable).ref.bind(_a)];
94
+ __theme_decorators = [(_b = observable).ref.bind(_b)];
95
+ _setTheme_decorators = [action];
86
96
  _handleKey_decorators = [action];
87
97
  _handleMouse_decorators = [action];
88
- _setHovered_decorators = [action];
89
98
  _setActive_decorators = [action];
90
99
  __esDecorate(this, null, _label_decorators, { kind: "accessor", name: "label", static: false, private: false, access: { has: obj => "label" in obj, get: obj => obj.label, set: (obj, value) => { obj.label = value; } }, metadata: _metadata }, _label_initializers, _label_extraInitializers);
91
100
  __esDecorate(this, null, _variant_decorators, { kind: "accessor", name: "variant", static: false, private: false, access: { has: obj => "variant" in obj, get: obj => obj.variant, set: (obj, value) => { obj.variant = value; } }, metadata: _metadata }, _variant_initializers, _variant_extraInitializers);
101
+ __esDecorate(this, null, __theme_decorators, { kind: "accessor", name: "_theme", static: false, private: false, access: { has: obj => "_theme" in obj, get: obj => obj._theme, set: (obj, value) => { obj._theme = value; } }, metadata: _metadata }, __theme_initializers, __theme_extraInitializers);
102
+ __esDecorate(this, null, _setTheme_decorators, { kind: "method", name: "setTheme", static: false, private: false, access: { has: obj => "setTheme" in obj, get: obj => obj.setTheme }, metadata: _metadata }, null, _instanceExtraInitializers);
92
103
  __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);
93
104
  __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);
94
- __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);
95
105
  __esDecorate(this, null, _setActive_decorators, { kind: "method", name: "setActive", static: false, private: false, access: { has: obj => "setActive" in obj, get: obj => obj.setActive }, metadata: _metadata }, null, _instanceExtraInitializers);
96
106
  if (_metadata) Object.defineProperty(this, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
97
107
  }
@@ -103,9 +113,14 @@ let Button = (() => {
103
113
  #variant_accessor_storage = (__runInitializers(this, _label_extraInitializers), __runInitializers(this, _variant_initializers, void 0));
104
114
  get variant() { return this.#variant_accessor_storage; }
105
115
  set variant(value) { this.#variant_accessor_storage = value; }
106
- _theme = __runInitializers(this, _variant_extraInitializers);
116
+ #_theme_accessor_storage = (__runInitializers(this, _variant_extraInitializers), __runInitializers(this, __theme_initializers, void 0));
117
+ // [LAW:types-are-the-program] @observable.ref so setTheme() triggers a
118
+ // re-render — see slider.ts.
119
+ get _theme() { return this.#_theme_accessor_storage; }
120
+ set _theme(value) { this.#_theme_accessor_storage = value; }
107
121
  constructor(options) {
108
122
  super();
123
+ __runInitializers(this, __theme_extraInitializers);
109
124
  this.id = options.id ?? `button-${options.label.toLowerCase().replace(/\s+/g, "-")}`;
110
125
  this.label = options.label;
111
126
  this.variant = options.variant ?? "default";
@@ -120,6 +135,15 @@ let Button = (() => {
120
135
  if (event.key === "enter" || event.key === "space") {
121
136
  this.active = true;
122
137
  this.emitSubmit();
138
+ // [LAW:one-source-of-truth] Keyboard activation must leave the widget
139
+ // in the same end state as mouse activation: `active` cleared after
140
+ // the press. Mouse has a natural mouse_up to clear it; keyboard does
141
+ // not, so we schedule the clear on the next microtask. The single-
142
+ // frame `active=true` paint gives the user the visual "pressed" cue
143
+ // and is then cleared, matching mouse behaviour.
144
+ queueMicrotask(() => { if (this.active)
145
+ this.setActive(false); });
146
+ event.stop();
123
147
  }
124
148
  }
125
149
  handleMouse(event) {
@@ -135,8 +159,7 @@ let Button = (() => {
135
159
  }
136
160
  }
137
161
  }
138
- // --- Hover/active mutators (router fast-path uses setHovered) ---
139
- setHovered(value) { this.hovered = value; }
162
+ // --- Active mutator (the keyboard-activation microtask uses this) ---
140
163
  setActive(value) { this.active = value; }
141
164
  // --- Rendering ---
142
165
  render(_options) {
@@ -161,7 +184,9 @@ let Button = (() => {
161
184
  return [new Segment(text, new Style({ color: fg, bgcolor: bg }))];
162
185
  }
163
186
  measure(_options) {
164
- const width = this.label.length + 4;
187
+ // [LAW:one-source-of-truth] cellLen is the cell-width authority; .length
188
+ // counts UTF-16 code units and miscounts wide / emoji characters.
189
+ const width = cellLen(this.label) + 4;
165
190
  return { minimum: width, maximum: width };
166
191
  }
167
192
  // --- Palette resolution ---
@@ -1 +1 @@
1
- {"version":3,"file":"button.js","sourceRoot":"","sources":["../../src/widgets/button.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"button.js","sourceRoot":"","sources":["../../src/widgets/button.ts"],"names":[],"mappings":"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"}
@@ -27,12 +27,11 @@ export declare class Checkbox extends WidgetBase {
27
27
  readonly focusable = true;
28
28
  accessor label: string;
29
29
  accessor checked: boolean;
30
- private _theme;
30
+ private accessor _theme;
31
31
  constructor(options: CheckboxOptions);
32
32
  setTheme(theme: TerminalTheme): void;
33
33
  handleKey(event: KeyEvent): void;
34
34
  handleMouse(event: WidgetMouseEvent): void;
35
- setHovered(value: boolean): void;
36
35
  render(options: RenderOptions): Iterable<Segment>;
37
36
  measure(_options: RenderOptions): {
38
37
  minimum: number;
@@ -1 +1 @@
1
- {"version":3,"file":"checkbox.d.ts","sourceRoot":"","sources":["../../src/widgets/checkbox.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;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,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,KAAK,CAAC,EAAE,aAAa,CAAC;CACvB;AAED,qBAAa,QAAS,SAAQ,UAAU;IACtC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,SAAS,QAAQ;IAEd,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAEtC,OAAO,CAAC,MAAM,CAAgB;gBAElB,OAAO,EAAE,eAAe;IASpC,QAAQ,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI;IAKpC,SAAS,CAAC,KAAK,EAAE,QAAQ,GAAG,IAAI;IAavB,WAAW,CAAC,KAAK,EAAE,gBAAgB,GAAG,IAAI;IAWnD,UAAU,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI;IAIhC,MAAM,CAAC,OAAO,EAAE,aAAa,GAAG,QAAQ,CAAC,OAAO,CAAC;IAYjD,OAAO,CAAC,QAAQ,EAAE,aAAa,GAAG;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE;IAOtE,OAAO,CAAC,cAAc;CAKvB"}
1
+ {"version":3,"file":"checkbox.d.ts","sourceRoot":"","sources":["../../src/widgets/checkbox.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAGH,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAK7C,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,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,KAAK,CAAC,EAAE,aAAa,CAAC;CACvB;AAED,qBAAa,QAAS,SAAQ,UAAU;IACtC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,SAAS,QAAQ;IAEd,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAItB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAgB;gBAE3C,OAAO,EAAE,eAAe;IAUpC,QAAQ,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI;IAKpC,SAAS,CAAC,KAAK,EAAE,QAAQ,GAAG,IAAI;IAevB,WAAW,CAAC,KAAK,EAAE,gBAAgB,GAAG,IAAI;IAUnD,MAAM,CAAC,OAAO,EAAE,aAAa,GAAG,QAAQ,CAAC,OAAO,CAAC;IAYjD,OAAO,CAAC,QAAQ,EAAE,aAAa,GAAG;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE;IAQtE,OAAO,CAAC,cAAc;CAKvB"}
@@ -48,9 +48,11 @@ import { observable, action } from "mobx";
48
48
  import { Segment } from "../core/segment.js";
49
49
  import { Style } from "../core/style.js";
50
50
  import { ColorSpec } from "../core/color.js";
51
+ import { cellLen } from "../core/cells.js";
51
52
  import { DEFAULT_TERMINAL_THEME } from "../themes/terminalThemes.js";
52
53
  import { WidgetBase } from "./widget-base.js";
53
54
  let Checkbox = (() => {
55
+ var _a;
54
56
  let _classSuper = WidgetBase;
55
57
  let _instanceExtraInitializers = [];
56
58
  let _label_decorators;
@@ -59,22 +61,27 @@ let Checkbox = (() => {
59
61
  let _checked_decorators;
60
62
  let _checked_initializers = [];
61
63
  let _checked_extraInitializers = [];
64
+ let __theme_decorators;
65
+ let __theme_initializers = [];
66
+ let __theme_extraInitializers = [];
67
+ let _setTheme_decorators;
62
68
  let _handleKey_decorators;
63
69
  let _handleMouse_decorators;
64
- let _setHovered_decorators;
65
70
  return class Checkbox extends _classSuper {
66
71
  static {
67
72
  const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
68
73
  _label_decorators = [observable];
69
74
  _checked_decorators = [observable];
75
+ __theme_decorators = [(_a = observable).ref.bind(_a)];
76
+ _setTheme_decorators = [action];
70
77
  _handleKey_decorators = [action];
71
78
  _handleMouse_decorators = [action];
72
- _setHovered_decorators = [action];
73
79
  __esDecorate(this, null, _label_decorators, { kind: "accessor", name: "label", static: false, private: false, access: { has: obj => "label" in obj, get: obj => obj.label, set: (obj, value) => { obj.label = value; } }, metadata: _metadata }, _label_initializers, _label_extraInitializers);
74
80
  __esDecorate(this, null, _checked_decorators, { kind: "accessor", name: "checked", static: false, private: false, access: { has: obj => "checked" in obj, get: obj => obj.checked, set: (obj, value) => { obj.checked = value; } }, metadata: _metadata }, _checked_initializers, _checked_extraInitializers);
81
+ __esDecorate(this, null, __theme_decorators, { kind: "accessor", name: "_theme", static: false, private: false, access: { has: obj => "_theme" in obj, get: obj => obj._theme, set: (obj, value) => { obj._theme = value; } }, metadata: _metadata }, __theme_initializers, __theme_extraInitializers);
82
+ __esDecorate(this, null, _setTheme_decorators, { kind: "method", name: "setTheme", static: false, private: false, access: { has: obj => "setTheme" in obj, get: obj => obj.setTheme }, metadata: _metadata }, null, _instanceExtraInitializers);
75
83
  __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);
76
84
  __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);
77
- __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);
78
85
  if (_metadata) Object.defineProperty(this, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
79
86
  }
80
87
  id = __runInitializers(this, _instanceExtraInitializers);
@@ -85,9 +92,14 @@ let Checkbox = (() => {
85
92
  #checked_accessor_storage = (__runInitializers(this, _label_extraInitializers), __runInitializers(this, _checked_initializers, void 0));
86
93
  get checked() { return this.#checked_accessor_storage; }
87
94
  set checked(value) { this.#checked_accessor_storage = value; }
88
- _theme = __runInitializers(this, _checked_extraInitializers);
95
+ #_theme_accessor_storage = (__runInitializers(this, _checked_extraInitializers), __runInitializers(this, __theme_initializers, void 0));
96
+ // [LAW:types-are-the-program] @observable.ref so setTheme() triggers a
97
+ // re-render — see slider.ts.
98
+ get _theme() { return this.#_theme_accessor_storage; }
99
+ set _theme(value) { this.#_theme_accessor_storage = value; }
89
100
  constructor(options) {
90
101
  super();
102
+ __runInitializers(this, __theme_extraInitializers);
91
103
  this.id = options.id ?? `checkbox-${options.label.toLowerCase().replace(/\s+/g, "-")}`;
92
104
  this.label = options.label;
93
105
  this.checked = options.checked ?? false;
@@ -102,10 +114,12 @@ let Checkbox = (() => {
102
114
  if (event.key === "space") {
103
115
  this.checked = !this.checked;
104
116
  this.emitChange();
117
+ event.stop();
105
118
  return;
106
119
  }
107
120
  if (event.key === "enter") {
108
121
  this.emitSubmit();
122
+ event.stop();
109
123
  }
110
124
  }
111
125
  handleMouse(event) {
@@ -116,8 +130,6 @@ let Checkbox = (() => {
116
130
  this.emitChange();
117
131
  }
118
132
  }
119
- // --- Hover/active mutators (router fast-path uses setHovered) ---
120
- setHovered(value) { this.hovered = value; }
121
133
  // --- Rendering ---
122
134
  render(options) {
123
135
  const indicator = this.checked ? (options.asciiOnly ? "x" : "✓") : " ";
@@ -129,7 +141,8 @@ let Checkbox = (() => {
129
141
  return [new Segment(text, new Style({ color: fg, underline: this.focused }))];
130
142
  }
131
143
  measure(_options) {
132
- const width = this.label.length + 4;
144
+ // [LAW:one-source-of-truth] cellLen — see button.ts.
145
+ const width = cellLen(this.label) + 4;
133
146
  return { minimum: width, maximum: width };
134
147
  }
135
148
  // --- Palette resolution ---
@@ -1 +1 @@
1
- {"version":3,"file":"checkbox.js","sourceRoot":"","sources":["../../src/widgets/checkbox.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAC1C,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAC7C,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACzC,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AAGrE,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;IAWjC,QAAQ;sBAAS,UAAU;;;;;;;;;;;iBAA3B,QAAS,SAAQ,WAAU;;;iCAIrC,UAAU;mCACV,UAAU;qCAiBV,MAAM;uCAaN,MAAM;sCAWN,MAAM;YA1CK,oKAAS,KAAK,6BAAL,KAAK,qFAAS;YACvB,0KAAS,OAAO,6BAAP,OAAO,yFAAU;YAkBtC,8KAAA,SAAS,6DAUR;YAGD,oLAAS,WAAW,6DAMnB;YAKD,iLAAA,UAAU,6DAAgD;;;QA9CjD,EAAE,GADA,mDAAQ,CACC;QACX,SAAS,GAAG,IAAI,CAAC;QAEd,+EAAuB;QAAvB,IAAS,KAAK,2CAAS;QAAvB,IAAS,KAAK,iDAAS;QACvB,wIAA0B;QAA1B,IAAS,OAAO,6CAAU;QAA1B,IAAS,OAAO,mDAAU;QAE9B,MAAM,uDAAgB;QAE9B,YAAY,OAAwB;YAClC,KAAK,EAAE,CAAC;YACR,IAAI,CAAC,EAAE,GAAG,OAAO,CAAC,EAAE,IAAI,YAAY,OAAO,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,CAAC;YACvF,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;YAC3B,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,KAAK,CAAC;YACxC,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,KAAK,CAAC;YAC1C,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,KAAK,IAAI,sBAAsB,CAAC;QACxD,CAAC;QAED,QAAQ,CAAC,KAAoB,IAAU,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC;QAE7D,yBAAyB;QAGzB,SAAS,CAAC,KAAe;YACvB,IAAI,IAAI,CAAC,QAAQ;gBAAE,OAAO;YAC1B,IAAI,KAAK,CAAC,GAAG,KAAK,OAAO,EAAE,CAAC;gBAC1B,IAAI,CAAC,OAAO,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC;gBAC7B,IAAI,CAAC,UAAU,EAAE,CAAC;gBAClB,OAAO;YACT,CAAC;YACD,IAAI,KAAK,CAAC,GAAG,KAAK,OAAO,EAAE,CAAC;gBAC1B,IAAI,CAAC,UAAU,EAAE,CAAC;YACpB,CAAC;QACH,CAAC;QAGQ,WAAW,CAAC,KAAuB;YAC1C,IAAI,IAAI,CAAC,QAAQ;gBAAE,OAAO;YAC1B,IAAI,KAAK,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;gBAC9B,IAAI,CAAC,OAAO,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC;gBAC7B,IAAI,CAAC,UAAU,EAAE,CAAC;YACpB,CAAC;QACH,CAAC;QAED,mEAAmE;QAGnE,UAAU,CAAC,KAAc,IAAU,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC;QAE1D,oBAAoB;QAEpB,MAAM,CAAC,OAAsB;YAC3B,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;YACvE,MAAM,IAAI,GAAG,IAAI,SAAS,KAAK,IAAI,CAAC,KAAK,EAAE,CAAC;YAE5C,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;gBAClB,OAAO,CAAC,IAAI,OAAO,CAAC,IAAI,EAAE,IAAI,KAAK,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;YAC7F,CAAC;YAED,MAAM,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC;YAC7F,OAAO,CAAC,IAAI,OAAO,CAAC,IAAI,EAAE,IAAI,KAAK,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,SAAS,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC;QAChF,CAAC;QAED,OAAO,CAAC,QAAuB;YAC7B,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;YACpC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;QAC5C,CAAC;QAED,6BAA6B;QAErB,cAAc,CAAC,GAAW;YAChC,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAC1C,+FAA+F;YAC/F,OAAO,SAAS,CAAC,QAAQ,CAAC,IAAK,CAAC,CAAC;QACnC,CAAC;;;SA1EU,QAAQ"}
1
+ {"version":3,"file":"checkbox.js","sourceRoot":"","sources":["../../src/widgets/checkbox.ts"],"names":[],"mappings":"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"}
@@ -26,7 +26,7 @@ import { Segment } from "../core/segment.js";
26
26
  import type { RenderOptions } from "../core/protocol.js";
27
27
  import type { TerminalTheme } from "../core/color.js";
28
28
  import { WidgetBase } from "./widget-base.js";
29
- import type { KeyEvent, WidgetMouseEvent, OverlayRenderable } from "./types.js";
29
+ import type { KeyEvent, WidgetMouseEvent, WidgetFocusEvent, OverlayRenderable } from "./types.js";
30
30
  export interface DropdownOptions {
31
31
  options: string[];
32
32
  selectedIndex?: number;
@@ -46,12 +46,13 @@ export declare class Dropdown extends WidgetBase implements OverlayRenderable {
46
46
  label: string;
47
47
  idx: number;
48
48
  }[];
49
- private _theme;
49
+ private accessor _theme;
50
50
  constructor(options: DropdownOptions);
51
+ private clampIndex;
51
52
  setTheme(theme: TerminalTheme): void;
52
53
  handleKey(event: KeyEvent): void;
53
54
  handleMouse(event: WidgetMouseEvent): void;
54
- setHovered(value: boolean): void;
55
+ handleFocus(event: WidgetFocusEvent): void;
55
56
  render(options: RenderOptions): Iterable<Segment>;
56
57
  private headerText;
57
58
  renderOverlay(_options: RenderOptions): Iterable<Segment> | null;
@@ -1 +1 @@
1
- {"version":3,"file":"dropdown.d.ts","sourceRoot":"","sources":["../../src/widgets/dropdown.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;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,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAEhF,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,KAAK,CAAC,EAAE,aAAa,CAAC;CACvB;AAED,qBAAa,QAAS,SAAQ,UAAW,YAAW,iBAAiB;IACnE,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,SAAS,QAAQ;IAEN,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,CAAC;IACnC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAS;IACnC,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAM;IAKzC,IAAI,eAAe,IAAI;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,EAAE,CAQtD;IAED,OAAO,CAAC,MAAM,CAAgB;gBAElB,OAAO,EAAE,eAAe;IAUpC,QAAQ,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI;IAKpC,SAAS,CAAC,KAAK,EAAE,QAAQ,GAAG,IAAI;IAmEvB,WAAW,CAAC,KAAK,EAAE,gBAAgB,GAAG,IAAI;IAgDnD,UAAU,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI;IAIhC,MAAM,CAAC,OAAO,EAAE,aAAa,GAAG,QAAQ,CAAC,OAAO,CAAC;IA0BjD,OAAO,CAAC,UAAU;IAUlB,aAAa,CAAC,QAAQ,EAAE,aAAa,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,IAAI;IAchE,OAAO,CAAC,gBAAgB;IAkBxB,OAAO,CAAC,eAAe;IAuCvB,OAAO,CAAC,WAAW;IAMnB,OAAO,CAAC,QAAQ,EAAE,aAAa,GAAG;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE;IAOtE,OAAO,CAAC,cAAc;CAKvB"}
1
+ {"version":3,"file":"dropdown.d.ts","sourceRoot":"","sources":["../../src/widgets/dropdown.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAGH,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAK7C,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,EACV,QAAQ,EACR,gBAAgB,EAChB,gBAAgB,EAChB,iBAAiB,EAClB,MAAM,YAAY,CAAC;AAEpB,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,KAAK,CAAC,EAAE,aAAa,CAAC;CACvB;AAED,qBAAa,QAAS,SAAQ,UAAW,YAAW,iBAAiB;IACnE,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,SAAS,QAAQ;IAEN,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,CAAC;IACnC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAS;IACnC,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAM;IAKzC,IAAI,eAAe,IAAI;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,EAAE,CAQtD;IAKe,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAgB;gBAE3C,OAAO,EAAE,eAAe;IAqBpC,OAAO,CAAC,UAAU;IAMlB,QAAQ,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI;IAKpC,SAAS,CAAC,KAAK,EAAE,QAAQ,GAAG,IAAI;IAsFvB,WAAW,CAAC,KAAK,EAAE,gBAAgB,GAAG,IAAI;IAmD1C,WAAW,CAAC,KAAK,EAAE,gBAAgB,GAAG,IAAI;IAUnD,MAAM,CAAC,OAAO,EAAE,aAAa,GAAG,QAAQ,CAAC,OAAO,CAAC;IAoCjD,OAAO,CAAC,UAAU;IAiBlB,aAAa,CAAC,QAAQ,EAAE,aAAa,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,IAAI;IAchE,OAAO,CAAC,gBAAgB;IAkBxB,OAAO,CAAC,eAAe;IAyCvB,OAAO,CAAC,WAAW;IASnB,OAAO,CAAC,QAAQ,EAAE,aAAa,GAAG;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE;IAOtE,OAAO,CAAC,cAAc;CAKvB"}