@promptctl/rich-js 0.8.0 → 0.10.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 (152) hide show
  1. package/README.md +68 -1
  2. package/dist/core/box.d.ts +93 -39
  3. package/dist/core/box.d.ts.map +1 -1
  4. package/dist/core/box.js +348 -490
  5. package/dist/core/box.js.map +1 -1
  6. package/dist/core/color.d.ts.map +1 -1
  7. package/dist/core/color.js +22 -8
  8. package/dist/core/color.js.map +1 -1
  9. package/dist/core/console.d.ts +2 -4
  10. package/dist/core/console.d.ts.map +1 -1
  11. package/dist/core/console.js +35 -24
  12. package/dist/core/console.js.map +1 -1
  13. package/dist/core/highlighter.d.ts +2 -1
  14. package/dist/core/highlighter.d.ts.map +1 -1
  15. package/dist/core/highlighter.js +28 -6
  16. package/dist/core/highlighter.js.map +1 -1
  17. package/dist/{renderables → core}/json.d.ts +8 -3
  18. package/dist/core/json.d.ts.map +1 -0
  19. package/dist/{renderables → core}/json.js +7 -2
  20. package/dist/core/json.js.map +1 -0
  21. package/dist/core/markup.d.ts +6 -7
  22. package/dist/core/markup.d.ts.map +1 -1
  23. package/dist/core/markup.js +124 -32
  24. package/dist/core/markup.js.map +1 -1
  25. package/dist/core/pretty.d.ts +56 -21
  26. package/dist/core/pretty.d.ts.map +1 -1
  27. package/dist/core/pretty.js +210 -116
  28. package/dist/core/pretty.js.map +1 -1
  29. package/dist/core/protocol.d.ts +16 -0
  30. package/dist/core/protocol.d.ts.map +1 -1
  31. package/dist/core/protocol.js +13 -0
  32. package/dist/core/protocol.js.map +1 -1
  33. package/dist/core/segment.d.ts +5 -0
  34. package/dist/core/segment.d.ts.map +1 -1
  35. package/dist/core/segment.js +9 -3
  36. package/dist/core/segment.js.map +1 -1
  37. package/dist/core/strip.d.ts +9 -5
  38. package/dist/core/strip.d.ts.map +1 -1
  39. package/dist/core/strip.js +39 -41
  40. package/dist/core/strip.js.map +1 -1
  41. package/dist/core/style.d.ts +19 -0
  42. package/dist/core/style.d.ts.map +1 -1
  43. package/dist/core/style.js +46 -38
  44. package/dist/core/style.js.map +1 -1
  45. package/dist/core/text.d.ts +102 -4
  46. package/dist/core/text.d.ts.map +1 -1
  47. package/dist/core/text.js +322 -184
  48. package/dist/core/text.js.map +1 -1
  49. package/dist/core/wrap.d.ts +42 -0
  50. package/dist/core/wrap.d.ts.map +1 -0
  51. package/dist/core/wrap.js +128 -0
  52. package/dist/core/wrap.js.map +1 -0
  53. package/dist/index.d.ts +3 -3
  54. package/dist/index.d.ts.map +1 -1
  55. package/dist/index.js +2 -1
  56. package/dist/index.js.map +1 -1
  57. package/dist/renderables/markdown.d.ts +1 -1
  58. package/dist/renderables/markdown.d.ts.map +1 -1
  59. package/dist/renderables/markdown.js +7 -14
  60. package/dist/renderables/markdown.js.map +1 -1
  61. package/dist/renderables/padding.d.ts +1 -1
  62. package/dist/renderables/padding.d.ts.map +1 -1
  63. package/dist/renderables/padding.js +5 -11
  64. package/dist/renderables/padding.js.map +1 -1
  65. package/dist/renderables/panel.d.ts +4 -4
  66. package/dist/renderables/panel.d.ts.map +1 -1
  67. package/dist/renderables/panel.js +39 -39
  68. package/dist/renderables/panel.js.map +1 -1
  69. package/dist/renderables/progress.d.ts +3 -3
  70. package/dist/renderables/progress.d.ts.map +1 -1
  71. package/dist/renderables/progress.js +11 -9
  72. package/dist/renderables/progress.js.map +1 -1
  73. package/dist/renderables/progressBar.d.ts +3 -3
  74. package/dist/renderables/progressBar.d.ts.map +1 -1
  75. package/dist/renderables/progressBar.js +9 -15
  76. package/dist/renderables/progressBar.js.map +1 -1
  77. package/dist/renderables/prompt.js +1 -1
  78. package/dist/renderables/prompt.js.map +1 -1
  79. package/dist/renderables/rule.d.ts +1 -1
  80. package/dist/renderables/rule.d.ts.map +1 -1
  81. package/dist/renderables/rule.js +5 -10
  82. package/dist/renderables/rule.js.map +1 -1
  83. package/dist/renderables/spinner.d.ts +2 -2
  84. package/dist/renderables/spinner.d.ts.map +1 -1
  85. package/dist/renderables/spinner.js +6 -11
  86. package/dist/renderables/spinner.js.map +1 -1
  87. package/dist/renderables/status.d.ts.map +1 -1
  88. package/dist/renderables/status.js +5 -11
  89. package/dist/renderables/status.js.map +1 -1
  90. package/dist/renderables/table.d.ts +54 -16
  91. package/dist/renderables/table.d.ts.map +1 -1
  92. package/dist/renderables/table.js +239 -99
  93. package/dist/renderables/table.js.map +1 -1
  94. package/dist/renderables/traceback.d.ts +1 -1
  95. package/dist/renderables/traceback.d.ts.map +1 -1
  96. package/dist/renderables/traceback.js +9 -8
  97. package/dist/renderables/traceback.js.map +1 -1
  98. package/dist/renderables/tree.d.ts +2 -2
  99. package/dist/renderables/tree.d.ts.map +1 -1
  100. package/dist/renderables/tree.js +16 -22
  101. package/dist/renderables/tree.js.map +1 -1
  102. package/dist/template-bindings/helpers.d.ts.map +1 -1
  103. package/dist/template-bindings/helpers.js +19 -1
  104. package/dist/template-bindings/helpers.js.map +1 -1
  105. package/dist/widgets/button.d.ts.map +1 -1
  106. package/dist/widgets/button.js +4 -5
  107. package/dist/widgets/button.js.map +1 -1
  108. package/dist/widgets/checkbox.d.ts.map +1 -1
  109. package/dist/widgets/checkbox.js +3 -4
  110. package/dist/widgets/checkbox.js.map +1 -1
  111. package/dist/widgets/dropdown.d.ts.map +1 -1
  112. package/dist/widgets/dropdown.js +4 -5
  113. package/dist/widgets/dropdown.js.map +1 -1
  114. package/dist/widgets/focus-manager.d.ts +0 -1
  115. package/dist/widgets/focus-manager.d.ts.map +1 -1
  116. package/dist/widgets/focus-manager.js +3 -7
  117. package/dist/widgets/focus-manager.js.map +1 -1
  118. package/dist/widgets/screen.d.ts.map +1 -1
  119. package/dist/widgets/screen.js +2 -4
  120. package/dist/widgets/screen.js.map +1 -1
  121. package/dist/widgets/slider.d.ts.map +1 -1
  122. package/dist/widgets/slider.js +7 -8
  123. package/dist/widgets/slider.js.map +1 -1
  124. package/dist/widgets/text-input.d.ts.map +1 -1
  125. package/dist/widgets/text-input.js +5 -6
  126. package/dist/widgets/text-input.js.map +1 -1
  127. package/dist/widgets/toggle.d.ts.map +1 -1
  128. package/dist/widgets/toggle.js +4 -5
  129. package/dist/widgets/toggle.js.map +1 -1
  130. package/dist/widgets/widget-base.d.ts +3 -3
  131. package/dist/widgets/widget-base.d.ts.map +1 -1
  132. package/dist/widgets/widget-base.js +4 -6
  133. package/dist/widgets/widget-base.js.map +1 -1
  134. package/package.json +26 -10
  135. package/dist/renderables/json.d.ts.map +0 -1
  136. package/dist/renderables/json.js.map +0 -1
  137. package/dist/renderables/pretty.d.ts +0 -29
  138. package/dist/renderables/pretty.d.ts.map +0 -1
  139. package/dist/renderables/pretty.js +0 -141
  140. package/dist/renderables/pretty.js.map +0 -1
  141. package/dist/themes/paletteResolver.d.ts +0 -35
  142. package/dist/themes/paletteResolver.d.ts.map +0 -1
  143. package/dist/themes/paletteResolver.js +0 -88
  144. package/dist/themes/paletteResolver.js.map +0 -1
  145. package/dist/widgets/host-stream.d.ts +0 -31
  146. package/dist/widgets/host-stream.d.ts.map +0 -1
  147. package/dist/widgets/host-stream.js +0 -36
  148. package/dist/widgets/host-stream.js.map +0 -1
  149. package/dist/widgets/terminal-host.d.ts +0 -138
  150. package/dist/widgets/terminal-host.d.ts.map +0 -1
  151. package/dist/widgets/terminal-host.js +0 -127
  152. package/dist/widgets/terminal-host.js.map +0 -1
package/package.json CHANGED
@@ -1,8 +1,9 @@
1
1
  {
2
2
  "name": "@promptctl/rich-js",
3
- "version": "0.8.0",
3
+ "version": "0.10.0",
4
4
  "description": "Rich text and beautiful formatting in the terminal — a TypeScript port of Python's Rich",
5
5
  "type": "module",
6
+ "sideEffects": false,
6
7
  "main": "dist/index.js",
7
8
  "types": "dist/index.d.ts",
8
9
  "exports": {
@@ -51,6 +52,7 @@
51
52
  "dist"
52
53
  ],
53
54
  "scripts": {
55
+ "prepublishOnly": "node scripts/verify-release-tag.mjs",
54
56
  "build": "tsc",
55
57
  "test": "vitest run",
56
58
  "test:watch": "vitest",
@@ -89,20 +91,34 @@
89
91
  ],
90
92
  "license": "MIT",
91
93
  "engines": {
92
- "node": "^20.19.0 || >=22.12.0"
94
+ "node": ">=20"
93
95
  },
94
96
  "devDependencies": {
95
- "@playwright/test": "^1.60.0",
96
- "@types/node": "^25.5.0",
97
+ "@playwright/test": "^1.63.0",
98
+ "@promptctl/go-template-js": "^0.9.0",
99
+ "@types/node": "^26.5.1",
100
+ "@types/semver": "^7.8.0",
101
+ "mobx": "^7.0.3",
102
+ "semver": "^7.8.5",
97
103
  "strip-ansi": "^7.2.0",
98
- "typescript": "^5.7.0",
99
- "vite": "^7.3.3",
104
+ "typescript": "^6.0.3",
105
+ "vite": "^8.3.0",
100
106
  "vitepress": "^1.6.4",
101
- "vitest": "^3.0.0"
107
+ "vitest": "^5.0.0"
102
108
  },
103
109
  "dependencies": {
104
- "@promptctl/go-template-js": "^0.5.0",
105
- "mobx": "^6.15.0",
106
- "string-width": "^8.2.0"
110
+ "string-width": "^8.2.2"
111
+ },
112
+ "peerDependencies": {
113
+ "@promptctl/go-template-js": "^0.9.0",
114
+ "mobx": "^7.0.3"
115
+ },
116
+ "peerDependenciesMeta": {
117
+ "@promptctl/go-template-js": {
118
+ "optional": true
119
+ },
120
+ "mobx": {
121
+ "optional": true
122
+ }
107
123
  }
108
124
  }
@@ -1 +0,0 @@
1
- {"version":3,"file":"json.d.ts","sourceRoot":"","sources":["../../src/renderables/json.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAC7C,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAE3C,OAAO,KAAK,EACV,UAAU,EACV,UAAU,EACV,aAAa,EACd,MAAM,qBAAqB,CAAC;AAE7B,MAAM,WAAW,WAAW;IAC1B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAID,qBAAa,cAAe,YAAW,UAAU,EAAE,UAAU;IAC3D,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IAExB,OAAO;IAIP,MAAM,CAAC,UAAU,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,WAAW,GAAG,cAAc;IAS5E,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,WAAW,GAAG,cAAc;IA4BpE,MAAM,CAAC,OAAO,EAAE,aAAa,GAAG,QAAQ,CAAC,OAAO,CAAC;IAIlD,OAAO,CAAC,OAAO,EAAE,aAAa,GAAG;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE;CAGtE"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"json.js","sourceRoot":"","sources":["../../src/renderables/json.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAC3C,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAazD,MAAM,WAAW,GAAG,IAAI,eAAe,EAAE,CAAC;AAE1C,MAAM,OAAO,cAAc;IAChB,IAAI,CAAW;IAExB,YAAoB,IAAc;QAChC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;IAED,MAAM,CAAC,UAAU,CAAC,UAAkB,EAAE,OAAqB;QACzD,MAAM,MAAM,GAAG,OAAO,EAAE,MAAM,IAAI,CAAC,CAAC;QACpC,MAAM,QAAQ,GAAG,OAAO,EAAE,QAAQ,IAAI,KAAK,CAAC;QAE5C,mDAAmD;QACnD,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAY,CAAC;QAC/C,OAAO,cAAc,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,GAAG,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC;IACzE,CAAC;IAED,MAAM,CAAC,QAAQ,CAAC,IAAa,EAAE,OAAqB;QAClD,MAAM,MAAM,GAAG,OAAO,EAAE,MAAM,IAAI,CAAC,CAAC;QACpC,MAAM,QAAQ,GAAG,OAAO,EAAE,QAAQ,IAAI,KAAK,CAAC;QAC5C,MAAM,WAAW,GAAG,OAAO,EAAE,SAAS,KAAK,KAAK,CAAC;QAEjD,MAAM,QAAQ,GAAG,QAAQ;YACvB,CAAC,CAAC,CAAC,IAAY,EAAE,KAAc,EAAE,EAAE;gBAC/B,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;oBACzE,MAAM,MAAM,GAA4B,EAAE,CAAC;oBAC3C,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,KAAgC,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC;wBACrE,MAAM,CAAC,CAAC,CAAC,GAAI,KAAiC,CAAC,CAAC,CAAC,CAAC;oBACpD,CAAC;oBACD,OAAO,MAAM,CAAC;gBAChB,CAAC;gBACD,OAAO,KAAK,CAAC;YACf,CAAC;YACH,CAAC,CAAC,SAAS,CAAC;QAEd,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;QACvD,MAAM,IAAI,GAAG,IAAI,QAAQ,CAAC,OAAO,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,CAAC;QAEhD,IAAI,WAAW,EAAE,CAAC;YAChB,WAAW,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QAC9B,CAAC;QAED,OAAO,IAAI,cAAc,CAAC,IAAI,CAAC,CAAC;IAClC,CAAC;IAED,CAAC,MAAM,CAAC,OAAsB;QAC5B,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACnC,CAAC;IAED,OAAO,CAAC,OAAsB;QAC5B,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IACpC,CAAC;CACF"}
@@ -1,29 +0,0 @@
1
- /**
2
- * Pretty — formats JavaScript data structures with highlighting.
3
- */
4
- import { Segment } from "../core/segment.js";
5
- import type { Renderable, Measurable, RenderOptions } from "../core/protocol.js";
6
- export interface PrettyOptions {
7
- indent?: number;
8
- expandAll?: boolean;
9
- maxLength?: number;
10
- maxString?: number;
11
- indentGuides?: boolean;
12
- }
13
- export declare class Pretty implements Renderable, Measurable {
14
- readonly data: unknown;
15
- readonly indent: number;
16
- readonly expandAll: boolean;
17
- readonly maxLength: number | undefined;
18
- readonly maxString: number | undefined;
19
- readonly indentGuides: boolean;
20
- constructor(data: unknown, options?: PrettyOptions);
21
- render(options: RenderOptions): Iterable<Segment>;
22
- measure(_options: RenderOptions): {
23
- minimum: number;
24
- maximum: number;
25
- };
26
- private _format;
27
- private _addIndentGuides;
28
- }
29
- //# sourceMappingURL=pretty.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"pretty.d.ts","sourceRoot":"","sources":["../../src/renderables/pretty.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAI7C,OAAO,KAAK,EACV,UAAU,EACV,UAAU,EACV,aAAa,EACd,MAAM,qBAAqB,CAAC;AAE7B,MAAM,WAAW,aAAa;IAC5B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAID,qBAAa,MAAO,YAAW,UAAU,EAAE,UAAU;IACnD,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;IACvC,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;IACvC,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC;gBAEnB,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,aAAa;IASjD,MAAM,CAAC,OAAO,EAAE,aAAa,GAAG,QAAQ,CAAC,OAAO,CAAC;IAYlD,OAAO,CAAC,QAAQ,EAAE,aAAa,GAAG;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE;IAUtE,OAAO,CAAC,OAAO;IA6Ff,OAAO,CAAC,gBAAgB;CAczB"}
@@ -1,141 +0,0 @@
1
- /**
2
- * Pretty — formats JavaScript data structures with highlighting.
3
- */
4
- import { cellLen } from "../core/cells.js";
5
- import { Style } from "../core/style.js";
6
- import { RichText } from "../core/text.js";
7
- import { ReprHighlighter } from "../core/highlighter.js";
8
- const reprHighlighter = new ReprHighlighter();
9
- export class Pretty {
10
- data;
11
- indent;
12
- expandAll;
13
- maxLength;
14
- maxString;
15
- indentGuides;
16
- constructor(data, options) {
17
- this.data = data;
18
- this.indent = options?.indent ?? 4;
19
- this.expandAll = options?.expandAll ?? false;
20
- this.maxLength = options?.maxLength;
21
- this.maxString = options?.maxString;
22
- this.indentGuides = options?.indentGuides !== false;
23
- }
24
- *render(options) {
25
- const formatted = this._format(this.data, 0, options.maxWidth);
26
- const text = new RichText(formatted, { end: "" });
27
- reprHighlighter.highlight(text);
28
- if (this.indentGuides) {
29
- this._addIndentGuides(text);
30
- }
31
- yield* text.render(options);
32
- }
33
- measure(_options) {
34
- const formatted = this._format(this.data, 0, _options.maxWidth);
35
- const lines = formatted.split("\n");
36
- let max = 0;
37
- for (const line of lines) {
38
- max = Math.max(max, cellLen(line));
39
- }
40
- return { minimum: 1, maximum: Math.min(max, _options.maxWidth) };
41
- }
42
- _format(value, depth, maxWidth) {
43
- const indentStr = " ".repeat(this.indent * depth);
44
- const innerIndent = " ".repeat(this.indent * (depth + 1));
45
- if (value === null)
46
- return "null";
47
- if (value === undefined)
48
- return "undefined";
49
- switch (typeof value) {
50
- case "string": {
51
- let str = value;
52
- if (this.maxString !== undefined && str.length > this.maxString) {
53
- str = str.slice(0, this.maxString) + `+${value.length - this.maxString}`;
54
- }
55
- return JSON.stringify(str);
56
- }
57
- case "number":
58
- case "bigint":
59
- return String(value);
60
- case "boolean":
61
- return String(value);
62
- case "symbol":
63
- return value.toString();
64
- case "function":
65
- return `[Function: ${value.name || "anonymous"}]`;
66
- }
67
- if (Array.isArray(value)) {
68
- if (value.length === 0)
69
- return "[]";
70
- const items = this.maxLength !== undefined
71
- ? value.slice(0, this.maxLength)
72
- : value;
73
- const remaining = this.maxLength !== undefined
74
- ? Math.max(0, value.length - this.maxLength)
75
- : 0;
76
- // Try compact first
77
- if (!this.expandAll) {
78
- const compact = "[" + items.map((v) => this._format(v, 0, maxWidth)).join(", ") +
79
- (remaining > 0 ? `, ... +${remaining}` : "") + "]";
80
- if (cellLen(indentStr + compact) <= maxWidth)
81
- return compact;
82
- }
83
- const parts = items.map((v) => innerIndent + this._format(v, depth + 1, maxWidth));
84
- if (remaining > 0)
85
- parts.push(innerIndent + `... +${remaining}`);
86
- return "[\n" + parts.join(",\n") + "\n" + indentStr + "]";
87
- }
88
- if (value instanceof Map) {
89
- if (value.size === 0)
90
- return "Map {}";
91
- const entries = [...value.entries()];
92
- const items = this.maxLength !== undefined ? entries.slice(0, this.maxLength) : entries;
93
- const parts = items.map(([k, v]) => innerIndent + this._format(k, depth + 1, maxWidth) + " => " + this._format(v, depth + 1, maxWidth));
94
- return "Map {\n" + parts.join(",\n") + "\n" + indentStr + "}";
95
- }
96
- if (value instanceof Set) {
97
- if (value.size === 0)
98
- return "Set {}";
99
- const items = [...value];
100
- const bounded = this.maxLength !== undefined ? items.slice(0, this.maxLength) : items;
101
- const parts = bounded.map((v) => innerIndent + this._format(v, depth + 1, maxWidth));
102
- return "Set {\n" + parts.join(",\n") + "\n" + indentStr + "}";
103
- }
104
- // Plain objects
105
- if (typeof value === "object") {
106
- const obj = value;
107
- const keys = Object.keys(obj);
108
- if (keys.length === 0)
109
- return "{}";
110
- const items = this.maxLength !== undefined ? keys.slice(0, this.maxLength) : keys;
111
- const remaining = this.maxLength !== undefined ? Math.max(0, keys.length - this.maxLength) : 0;
112
- // Try compact
113
- if (!this.expandAll) {
114
- const compact = "{ " + items.map((k) => `${k}: ${this._format(obj[k], 0, maxWidth)}`).join(", ") +
115
- (remaining > 0 ? `, ... +${remaining}` : "") + " }";
116
- if (cellLen(indentStr + compact) <= maxWidth)
117
- return compact;
118
- }
119
- const parts = items.map((k) => innerIndent + `${k}: ${this._format(obj[k], depth + 1, maxWidth)}`);
120
- if (remaining > 0)
121
- parts.push(innerIndent + `... +${remaining}`);
122
- return "{\n" + parts.join(",\n") + "\n" + indentStr + "}";
123
- }
124
- return String(value);
125
- }
126
- _addIndentGuides(text) {
127
- const guideStyle = Style.parse("repr.indent");
128
- const lines = text.plain.split("\n");
129
- let offset = 0;
130
- for (const line of lines) {
131
- const leadingSpaces = line.length - line.trimStart().length;
132
- for (let i = 0; i < leadingSpaces; i += this.indent) {
133
- if (i + offset < text.length) {
134
- text.stylize(guideStyle, offset + i, offset + i + 1);
135
- }
136
- }
137
- offset += line.length + 1; // +1 for newline
138
- }
139
- }
140
- }
141
- //# sourceMappingURL=pretty.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"pretty.js","sourceRoot":"","sources":["../../src/renderables/pretty.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAE3C,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACzC,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAC3C,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAezD,MAAM,eAAe,GAAG,IAAI,eAAe,EAAE,CAAC;AAE9C,MAAM,OAAO,MAAM;IACR,IAAI,CAAU;IACd,MAAM,CAAS;IACf,SAAS,CAAU;IACnB,SAAS,CAAqB;IAC9B,SAAS,CAAqB;IAC9B,YAAY,CAAU;IAE/B,YAAY,IAAa,EAAE,OAAuB;QAChD,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,MAAM,GAAG,OAAO,EAAE,MAAM,IAAI,CAAC,CAAC;QACnC,IAAI,CAAC,SAAS,GAAG,OAAO,EAAE,SAAS,IAAI,KAAK,CAAC;QAC7C,IAAI,CAAC,SAAS,GAAG,OAAO,EAAE,SAAS,CAAC;QACpC,IAAI,CAAC,SAAS,GAAG,OAAO,EAAE,SAAS,CAAC;QACpC,IAAI,CAAC,YAAY,GAAG,OAAO,EAAE,YAAY,KAAK,KAAK,CAAC;IACtD,CAAC;IAED,CAAC,MAAM,CAAC,OAAsB;QAC5B,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;QAC/D,MAAM,IAAI,GAAG,IAAI,QAAQ,CAAC,SAAS,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,CAAC;QAClD,eAAe,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QAEhC,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YACtB,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;QAC9B,CAAC;QAED,KAAK,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAC9B,CAAC;IAED,OAAO,CAAC,QAAuB;QAC7B,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAChE,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACpC,IAAI,GAAG,GAAG,CAAC,CAAC;QACZ,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;QACrC,CAAC;QACD,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;IACnE,CAAC;IAEO,OAAO,CAAC,KAAc,EAAE,KAAa,EAAE,QAAgB;QAC7D,MAAM,SAAS,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,CAAC;QAClD,MAAM,WAAW,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC;QAE1D,IAAI,KAAK,KAAK,IAAI;YAAE,OAAO,MAAM,CAAC;QAClC,IAAI,KAAK,KAAK,SAAS;YAAE,OAAO,WAAW,CAAC;QAE5C,QAAQ,OAAO,KAAK,EAAE,CAAC;YACrB,KAAK,QAAQ,CAAC,CAAC,CAAC;gBACd,IAAI,GAAG,GAAG,KAAK,CAAC;gBAChB,IAAI,IAAI,CAAC,SAAS,KAAK,SAAS,IAAI,GAAG,CAAC,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;oBAChE,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,IAAI,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;gBAC3E,CAAC;gBACD,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;YAC7B,CAAC;YACD,KAAK,QAAQ,CAAC;YACd,KAAK,QAAQ;gBACX,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;YACvB,KAAK,SAAS;gBACZ,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;YACvB,KAAK,QAAQ;gBACX,OAAO,KAAK,CAAC,QAAQ,EAAE,CAAC;YAC1B,KAAK,UAAU;gBACb,OAAO,cAAc,KAAK,CAAC,IAAI,IAAI,WAAW,GAAG,CAAC;QACtD,CAAC;QAED,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YACzB,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;gBAAE,OAAO,IAAI,CAAC;YAEpC,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,KAAK,SAAS;gBACxC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC;gBAChC,CAAC,CAAC,KAAK,CAAC;YACV,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,KAAK,SAAS;gBAC5C,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC;gBAC5C,CAAC,CAAC,CAAC,CAAC;YAEN,oBAAoB;YACpB,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;gBACpB,MAAM,OAAO,GAAG,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;oBAC7E,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;gBACrD,IAAI,OAAO,CAAC,SAAS,GAAG,OAAO,CAAC,IAAI,QAAQ;oBAAE,OAAO,OAAO,CAAC;YAC/D,CAAC;YAED,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE,KAAK,GAAG,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC;YACnF,IAAI,SAAS,GAAG,CAAC;gBAAE,KAAK,CAAC,IAAI,CAAC,WAAW,GAAG,QAAQ,SAAS,EAAE,CAAC,CAAC;YACjE,OAAO,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,GAAG,SAAS,GAAG,GAAG,CAAC;QAC5D,CAAC;QAED,IAAI,KAAK,YAAY,GAAG,EAAE,CAAC;YACzB,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC;gBAAE,OAAO,QAAQ,CAAC;YACtC,MAAM,OAAO,GAAG,CAAC,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;YACrC,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;YACxF,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CACjC,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE,KAAK,GAAG,CAAC,EAAE,QAAQ,CAAC,GAAG,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE,KAAK,GAAG,CAAC,EAAE,QAAQ,CAAC,CACnG,CAAC;YACF,OAAO,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,GAAG,SAAS,GAAG,GAAG,CAAC;QAChE,CAAC;QAED,IAAI,KAAK,YAAY,GAAG,EAAE,CAAC;YACzB,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC;gBAAE,OAAO,QAAQ,CAAC;YACtC,MAAM,KAAK,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC;YACzB,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;YACtF,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE,KAAK,GAAG,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC;YACrF,OAAO,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,GAAG,SAAS,GAAG,GAAG,CAAC;QAChE,CAAC;QAED,gBAAgB;QAChB,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC9B,MAAM,GAAG,GAAG,KAAgC,CAAC;YAC7C,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAC9B,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;gBAAE,OAAO,IAAI,CAAC;YAEnC,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;YAClF,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAE/F,cAAc;YACd,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;gBACpB,MAAM,OAAO,GAAG,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CACrC,GAAG,CAAC,KAAK,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;oBACxD,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC;gBACtD,IAAI,OAAO,CAAC,SAAS,GAAG,OAAO,CAAC,IAAI,QAAQ;oBAAE,OAAO,OAAO,CAAC;YAC/D,CAAC;YAED,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAC5B,WAAW,GAAG,GAAG,CAAC,KAAK,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,KAAK,GAAG,CAAC,EAAE,QAAQ,CAAC,EAAE,CACnE,CAAC;YACF,IAAI,SAAS,GAAG,CAAC;gBAAE,KAAK,CAAC,IAAI,CAAC,WAAW,GAAG,QAAQ,SAAS,EAAE,CAAC,CAAC;YACjE,OAAO,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,GAAG,SAAS,GAAG,GAAG,CAAC;QAC5D,CAAC;QAED,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;IACvB,CAAC;IAEO,gBAAgB,CAAC,IAAc;QACrC,MAAM,UAAU,GAAG,KAAK,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;QAC9C,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACrC,IAAI,MAAM,GAAG,CAAC,CAAC;QACf,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,MAAM,aAAa,GAAG,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC,MAAM,CAAC;YAC5D,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,aAAa,EAAE,CAAC,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;gBACpD,IAAI,CAAC,GAAG,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;oBAC7B,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,MAAM,GAAG,CAAC,EAAE,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;gBACvD,CAAC;YACH,CAAC;YACD,MAAM,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,iBAAiB;QAC9C,CAAC;IACH,CAAC;CACF"}
@@ -1,35 +0,0 @@
1
- import type { ColorRgba } from "../core/color.js";
2
- import { Palette } from "./palette.js";
3
- export interface ResolveContext {
4
- /**
5
- * The background the result will be painted on. Required for specs whose
6
- * meaning depends on a target: alpha (`primary 50%`) and auto-contrast
7
- * (`auto`, `auto 33%`). Bare names and modifiers do not need it.
8
- */
9
- against?: ColorRgba;
10
- }
11
- /**
12
- * Resolves Textual-style spec strings against a Palette into ColorRgba values.
13
- *
14
- * Spec grammar:
15
- * spec = name ("-darken-" N | "-lighten-" N)? (" " NN "%")?
16
- * name = "auto" | <palette var name>
17
- *
18
- * Examples (against gruvbox):
19
- * "primary" → palette["primary"]
20
- * "primary-background" → palette["primary-background"] (name has hyphens)
21
- * "primary-darken-3" → darken(palette["primary"], 3)
22
- * "primary 50%" → alphaBlend(palette["primary"], against, 0.5)
23
- * "auto 33%" → alphaBlend(contrastFor(against), against, 0.33)
24
- * "primary-darken-3 50%" → alphaBlend(darken(palette["primary"], 3), against, 0.5)
25
- *
26
- * Returns null on: invalid syntax, missing var, or missing required `against`.
27
- * Pure: same inputs always yield the same output, no internal state.
28
- */
29
- export declare class PaletteResolver {
30
- readonly palette: Palette;
31
- constructor(palette: Palette);
32
- resolve(spec: string, ctx?: ResolveContext): ColorRgba | null;
33
- private lookupBase;
34
- }
35
- //# sourceMappingURL=paletteResolver.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"paletteResolver.d.ts","sourceRoot":"","sources":["../../src/themes/paletteResolver.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAiDvC,MAAM,WAAW,cAAc;IAC7B;;;;OAIG;IACH,OAAO,CAAC,EAAE,SAAS,CAAC;CACrB;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,qBAAa,eAAe;IACd,QAAQ,CAAC,OAAO,EAAE,OAAO;gBAAhB,OAAO,EAAE,OAAO;IAErC,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,cAAc,GAAG,SAAS,GAAG,IAAI;IAoB7D,OAAO,CAAC,UAAU;CASnB"}
@@ -1,88 +0,0 @@
1
- import { darken, alphaBlend, contrastFor } from "./colorMath.js";
2
- const AUTO_NAME = "auto";
3
- // Modifier matches the trailing "-darken-N" or "-lighten-N" of a name part.
4
- // Anchored right (`.+` is greedy) because var names themselves contain
5
- // hyphens — `"primary-background-darken-3"` must split into the var
6
- // `primary-background` and the modifier `darken-3`, not `primary` /
7
- // `background-darken-3`.
8
- const MODIFIER_RE = /^(.+)-(darken|lighten)-(\d+)$/;
9
- const ALPHA_RE = /^(\d+(?:\.\d+)?)%$/;
10
- function parse(spec) {
11
- const trimmed = spec.trim();
12
- if (trimmed === "")
13
- return null;
14
- const [namePart, alphaPart, ...rest] = trimmed.split(/\s+/);
15
- if (namePart === undefined || rest.length > 0)
16
- return null;
17
- let alpha = null;
18
- if (alphaPart !== undefined) {
19
- const m = ALPHA_RE.exec(alphaPart);
20
- if (m === null)
21
- return null;
22
- const pct = parseFloat(m[1]);
23
- if (pct < 0 || pct > 100)
24
- return null;
25
- alpha = pct / 100;
26
- }
27
- const mod = MODIFIER_RE.exec(namePart);
28
- if (mod !== null) {
29
- const levels = parseInt(mod[3], 10);
30
- return {
31
- name: mod[1],
32
- darkenLevels: mod[2] === "darken" ? levels : -levels,
33
- alpha,
34
- };
35
- }
36
- return { name: namePart, darkenLevels: 0, alpha };
37
- }
38
- /**
39
- * Resolves Textual-style spec strings against a Palette into ColorRgba values.
40
- *
41
- * Spec grammar:
42
- * spec = name ("-darken-" N | "-lighten-" N)? (" " NN "%")?
43
- * name = "auto" | <palette var name>
44
- *
45
- * Examples (against gruvbox):
46
- * "primary" → palette["primary"]
47
- * "primary-background" → palette["primary-background"] (name has hyphens)
48
- * "primary-darken-3" → darken(palette["primary"], 3)
49
- * "primary 50%" → alphaBlend(palette["primary"], against, 0.5)
50
- * "auto 33%" → alphaBlend(contrastFor(against), against, 0.33)
51
- * "primary-darken-3 50%" → alphaBlend(darken(palette["primary"], 3), against, 0.5)
52
- *
53
- * Returns null on: invalid syntax, missing var, or missing required `against`.
54
- * Pure: same inputs always yield the same output, no internal state.
55
- */
56
- export class PaletteResolver {
57
- palette;
58
- constructor(palette) {
59
- this.palette = palette;
60
- }
61
- resolve(spec, ctx) {
62
- const parsed = parse(spec);
63
- if (parsed === null)
64
- return null;
65
- // [LAW:one-type-per-behavior] `auto` is a synthetic var whose "lookup"
66
- // depends on ctx; named vars look up in the palette. Both produce a
67
- // ColorRgba | null, so the pipeline downstream is identical.
68
- const base = this.lookupBase(parsed.name, ctx);
69
- if (base === null)
70
- return null;
71
- // [LAW:dataflow-not-control-flow] darken at level 0 is a no-op (modulo
72
- // ±1 RGB roundtrip); we always run it and let the data (levels) decide
73
- // the magnitude. Negative levels lighten — same op, different value.
74
- const modified = darken(base, parsed.darkenLevels);
75
- if (parsed.alpha === null)
76
- return modified;
77
- if (!ctx?.against)
78
- return null;
79
- return alphaBlend(modified, ctx.against, parsed.alpha);
80
- }
81
- lookupBase(name, ctx) {
82
- if (name === AUTO_NAME) {
83
- return ctx?.against ? contrastFor(ctx.against) : null;
84
- }
85
- return this.palette.get(name) ?? null;
86
- }
87
- }
88
- //# sourceMappingURL=paletteResolver.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"paletteResolver.js","sourceRoot":"","sources":["../../src/themes/paletteResolver.ts"],"names":[],"mappings":"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"}
@@ -1,31 +0,0 @@
1
- /**
2
- * hostStream — adapt a `TerminalHost` into the narrow Writable surface that
3
- * Console (and Live) actually exercise.
4
- *
5
- * [LAW:types-are-the-program] The return type matches Console's `ConsoleSink`
6
- * exactly: a single `.write(chunk)` method whose return value Console never
7
- * inspects (so the type leaves it as `unknown`; this implementation happens
8
- * to return `true` to mirror Node's stream contract, but callers may not
9
- * rely on that). Anything wider would lie about what this adapter
10
- * implements; anything narrower would force a cast at the call site.
11
- * Calling `.pipe()`, `.cork()`, `.on('error')`, etc. is a programming error
12
- * that TypeScript will reject at compile time.
13
- *
14
- * [LAW:locality-or-seam] Console + Live access their sink only via `.write()`
15
- * — verified in src/core/console.ts (one `_file.write` call) and
16
- * src/renderables/live.ts (every `this._console.file.write(...)` site). So
17
- * this narrow surface is the entire contract they need.
18
- */
19
- import type { ConsoleSink } from "../core/console.js";
20
- import type { TerminalHost } from "./terminal-host.js";
21
- /**
22
- * Wrap a `TerminalHost` so its output can be threaded into `Console` via the
23
- * existing `file:` option. The returned object implements `.write()` only —
24
- * exactly the surface Console + Live touch.
25
- *
26
- * Pair with `forceTerminal: true` on the Console — without it, Console treats
27
- * any non-undefined `file` option as non-TTY and disables color, which
28
- * defeats the point.
29
- */
30
- export declare function hostStream(host: TerminalHost): ConsoleSink;
31
- //# sourceMappingURL=host-stream.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"host-stream.d.ts","sourceRoot":"","sources":["../../src/widgets/host-stream.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAEvD;;;;;;;;GAQG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,YAAY,GAAG,WAAW,CAO1D"}
@@ -1,36 +0,0 @@
1
- /**
2
- * hostStream — adapt a `TerminalHost` into the narrow Writable surface that
3
- * Console (and Live) actually exercise.
4
- *
5
- * [LAW:types-are-the-program] The return type matches Console's `ConsoleSink`
6
- * exactly: a single `.write(chunk)` method whose return value Console never
7
- * inspects (so the type leaves it as `unknown`; this implementation happens
8
- * to return `true` to mirror Node's stream contract, but callers may not
9
- * rely on that). Anything wider would lie about what this adapter
10
- * implements; anything narrower would force a cast at the call site.
11
- * Calling `.pipe()`, `.cork()`, `.on('error')`, etc. is a programming error
12
- * that TypeScript will reject at compile time.
13
- *
14
- * [LAW:locality-or-seam] Console + Live access their sink only via `.write()`
15
- * — verified in src/core/console.ts (one `_file.write` call) and
16
- * src/renderables/live.ts (every `this._console.file.write(...)` site). So
17
- * this narrow surface is the entire contract they need.
18
- */
19
- /**
20
- * Wrap a `TerminalHost` so its output can be threaded into `Console` via the
21
- * existing `file:` option. The returned object implements `.write()` only —
22
- * exactly the surface Console + Live touch.
23
- *
24
- * Pair with `forceTerminal: true` on the Console — without it, Console treats
25
- * any non-undefined `file` option as non-TTY and disables color, which
26
- * defeats the point.
27
- */
28
- export function hostStream(host) {
29
- return {
30
- write(chunk) {
31
- host.write(chunk);
32
- return true;
33
- },
34
- };
35
- }
36
- //# sourceMappingURL=host-stream.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"host-stream.js","sourceRoot":"","sources":["../../src/widgets/host-stream.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAKH;;;;;;;;GAQG;AACH,MAAM,UAAU,UAAU,CAAC,IAAkB;IAC3C,OAAO;QACL,KAAK,CAAC,KAA0B;YAC9B,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YAClB,OAAO,IAAI,CAAC;QACd,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -1,138 +0,0 @@
1
- /**
2
- * TerminalHost — the capability seam between the interactive runtime and its
3
- * I/O environment.
4
- *
5
- * [LAW:locality-or-seam] The missing seam *was* the missing type. Before this
6
- * type existed, Screen and EventRouter reached for ambient `process.stdin`/
7
- * `process.stdout`, which crystallised them to node. With a `TerminalHost`
8
- * value flowing across one boundary, the same runtime code runs against any
9
- * implementation — node's TTY (`NodeTerminalHost`, on the `node/terminal-host`
10
- * subpath) or a browser xterm.js terminal (`BrowserTerminalHost`, below).
11
- *
12
- * [LAW:dataflow-not-control-flow] The runtime never branches on "am I in
13
- * node or browser." The host is the value that differs; the code path is
14
- * the same. Variability lives in which host is constructed at the program
15
- * entry, not in any `if` inside the runtime.
16
- *
17
- * [LAW:one-way-deps] The interface and the browser host live here, in the
18
- * barrel; the node host lives in `src/node/terminal-host.ts`, behind an
19
- * explicit subpath, because it reads `process.stdin` / `process.stdout`. The
20
- * dependency runs one way — the node adapter imports this seam; nothing here
21
- * imports the adapter — so importing the main barrel in a browser cannot
22
- * reach the ambient `process` global by any path, rather than merely not
23
- * reaching it in practice. `test/seam/browser-safe.test.ts` is what holds
24
- * that direction; who reads the host at all is `HOST_ACCESS` in
25
- * `test/seam/ambient-process.ts`, and neither list is repeated here.
26
- *
27
- * [boundaries: capabilities over context] A `TerminalHost` grants exactly
28
- * the I/O capabilities the runtime needs: write bytes, read input, query
29
- * size, observe resize, switch raw mode, lifecycle. It is not an
30
- * omniscient handle to "the process."
31
- */
32
- import type { Unsubscribe } from "./types.js";
33
- export interface TerminalSize {
34
- readonly cols: number;
35
- readonly rows: number;
36
- }
37
- export type DataHandler = (chunk: Uint8Array | string) => void;
38
- export type ResizeHandler = (size: TerminalSize) => void;
39
- export interface TerminalHost {
40
- /**
41
- * Write raw bytes (or UTF-8 text) to the terminal. The byte sequence is
42
- * written verbatim; no escape interpretation, no framing.
43
- */
44
- write(data: Uint8Array | string): void;
45
- /**
46
- * Subscribe to input data. The host emits whatever its underlying
47
- * transport produces (Buffer on node, string on browser xterm.js); the
48
- * runtime's parser accepts either.
49
- */
50
- onData(handler: DataHandler): Unsubscribe;
51
- /**
52
- * Subscribe to terminal resize events. The handler fires with the new
53
- * size after a resize is observed.
54
- */
55
- onResize(handler: ResizeHandler): Unsubscribe;
56
- /** Current terminal size in cells. Always returns a valid size. */
57
- size(): TerminalSize;
58
- /**
59
- * Enable or disable raw mode on the input side. Implementations whose
60
- * transport has no "cooked" mode (xterm.js, non-TTY pipes) silently
61
- * no-op so callers don't need to branch on capability.
62
- */
63
- setRawMode(raw: boolean): void;
64
- /**
65
- * Whether the host is connected to a real interactive terminal. Drives
66
- * default option values (e.g. `manageCursor`, `manageRawMode`) in the
67
- * runtime; non-TTY hosts default those features off.
68
- */
69
- readonly isTTY: boolean;
70
- /**
71
- * Begin the host's lifecycle. Implementations attach whatever resources
72
- * they own — or no-op when there is nothing to attach. Idempotent. See
73
- * the concrete host's own JSDoc for what its `start()` actually does:
74
- * `NodeTerminalHost` and `BrowserTerminalHost` both no-op because their
75
- * underlying transports (process streams; a caller-managed xterm.js
76
- * Terminal) are already live by the time the host is constructed.
77
- */
78
- start(): void;
79
- /**
80
- * Stop the host's lifecycle. Pairs with `start`. Idempotent. After
81
- * `stop()`, the host releases its own subscriptions to the underlying
82
- * transport and clears its handler sets; the transport itself is not
83
- * torn down (that is the caller's concern — process streams persist;
84
- * an xterm.js Terminal is disposed by the caller). Re-subscribing via
85
- * `onData` / `onResize` after `stop()` re-engages the host.
86
- */
87
- stop(): void;
88
- }
89
- /**
90
- * Subset of xterm.js's `Terminal` surface the browser host depends on.
91
- *
92
- * [LAW:locality-or-seam] Declaring the dependency by *shape* — rather than
93
- * importing xterm.js's types — keeps this package free of an xterm.js
94
- * dev-dep at the type level, lets the browser-bundle pipeline (downstream
95
- * ticket) pin whichever xterm.js version it wants, and lets unit tests
96
- * pass a hand-built fake: ask for exactly the capabilities the host uses,
97
- * no more.
98
- */
99
- export interface XtermDisposable {
100
- dispose(): void;
101
- }
102
- export interface XtermResizeEvent {
103
- cols: number;
104
- rows: number;
105
- }
106
- export interface XtermTerminal {
107
- readonly cols: number;
108
- readonly rows: number;
109
- write(data: Uint8Array | string): void;
110
- onData(handler: (data: string) => void): XtermDisposable;
111
- onResize(handler: (size: XtermResizeEvent) => void): XtermDisposable;
112
- }
113
- export interface BrowserTerminalHostOptions {
114
- /**
115
- * The xterm.js `Terminal` instance to wrap. The caller is responsible
116
- * for its DOM lifecycle (`terminal.open(element)`, `terminal.dispose()`)
117
- * — the host only owns its own subscriber lifecycle, exactly mirroring
118
- * `NodeTerminalHost`'s relationship to `process.stdin`/`process.stdout`.
119
- */
120
- terminal: XtermTerminal;
121
- }
122
- export declare class BrowserTerminalHost implements TerminalHost {
123
- private readonly terminal;
124
- private readonly dataHandlers;
125
- private readonly resizeHandlers;
126
- private dataSubscription;
127
- private resizeSubscription;
128
- constructor(options: BrowserTerminalHostOptions);
129
- get isTTY(): boolean;
130
- write(data: Uint8Array | string): void;
131
- size(): TerminalSize;
132
- setRawMode(_raw: boolean): void;
133
- onData(handler: DataHandler): Unsubscribe;
134
- onResize(handler: ResizeHandler): Unsubscribe;
135
- start(): void;
136
- stop(): void;
137
- }
138
- //# sourceMappingURL=terminal-host.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"terminal-host.d.ts","sourceRoot":"","sources":["../../src/widgets/terminal-host.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAS9C,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,MAAM,WAAW,GAAG,CAAC,KAAK,EAAE,UAAU,GAAG,MAAM,KAAK,IAAI,CAAC;AAC/D,MAAM,MAAM,aAAa,GAAG,CAAC,IAAI,EAAE,YAAY,KAAK,IAAI,CAAC;AAEzD,MAAM,WAAW,YAAY;IAC3B;;;OAGG;IACH,KAAK,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,GAAG,IAAI,CAAC;IAEvC;;;;OAIG;IACH,MAAM,CAAC,OAAO,EAAE,WAAW,GAAG,WAAW,CAAC;IAE1C;;;OAGG;IACH,QAAQ,CAAC,OAAO,EAAE,aAAa,GAAG,WAAW,CAAC;IAE9C,mEAAmE;IACnE,IAAI,IAAI,YAAY,CAAC;IAErB;;;;OAIG;IACH,UAAU,CAAC,GAAG,EAAE,OAAO,GAAG,IAAI,CAAC;IAE/B;;;;OAIG;IACH,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IAExB;;;;;;;OAOG;IACH,KAAK,IAAI,IAAI,CAAC;IAEd;;;;;;;OAOG;IACH,IAAI,IAAI,IAAI,CAAC;CACd;AAMD;;;;;;;;;GASG;AACH,MAAM,WAAW,eAAe;IAC9B,OAAO,IAAI,IAAI,CAAC;CACjB;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,GAAG,IAAI,CAAC;IACvC,MAAM,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,GAAG,eAAe,CAAC;IACzD,QAAQ,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,gBAAgB,KAAK,IAAI,GAAG,eAAe,CAAC;CACtE;AAED,MAAM,WAAW,0BAA0B;IACzC;;;;;OAKG;IACH,QAAQ,EAAE,aAAa,CAAC;CACzB;AAED,qBAAa,mBAAoB,YAAW,YAAY;IACtD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAgB;IACzC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAA0B;IACvD,OAAO,CAAC,QAAQ,CAAC,cAAc,CAA4B;IAC3D,OAAO,CAAC,gBAAgB,CAA8B;IACtD,OAAO,CAAC,kBAAkB,CAA8B;gBAE5C,OAAO,EAAE,0BAA0B;IAQ/C,IAAI,KAAK,IAAI,OAAO,CAEnB;IAED,KAAK,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,GAAG,IAAI;IAItC,IAAI,IAAI,YAAY;IAUpB,UAAU,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI;IAO/B,MAAM,CAAC,OAAO,EAAE,WAAW,GAAG,WAAW;IAgBzC,QAAQ,CAAC,OAAO,EAAE,aAAa,GAAG,WAAW;IAiB7C,KAAK,IAAI,IAAI;IASb,IAAI,IAAI,IAAI;CAmBb"}