ink 4.4.1 → 5.0.1

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 (72) hide show
  1. package/build/apply-styles.js +175 -0
  2. package/build/build-layout.js +77 -0
  3. package/build/calculate-wrapped-text.js +53 -0
  4. package/build/colorize.js.map +1 -1
  5. package/build/components/App.d.ts +1 -1
  6. package/build/components/App.js +198 -296
  7. package/build/components/App.js.map +1 -1
  8. package/build/components/AppContext.js +1 -1
  9. package/build/components/Box.d.ts +51 -1
  10. package/build/components/Box.js +2 -2
  11. package/build/components/Color.js +62 -0
  12. package/build/components/ErrorOverview.js +1 -1
  13. package/build/components/ErrorOverview.js.map +1 -1
  14. package/build/components/FocusContext.js +1 -1
  15. package/build/components/Static.js +1 -1
  16. package/build/components/StderrContext.js +1 -1
  17. package/build/components/StdinContext.js +1 -1
  18. package/build/components/StdoutContext.js +1 -1
  19. package/build/components/Text.d.ts +1 -1
  20. package/build/components/Text.js +1 -1
  21. package/build/components/Text.js.map +1 -1
  22. package/build/components/Transform.js.map +1 -1
  23. package/build/devtools-window-polyfill.js +11 -17
  24. package/build/devtools-window-polyfill.js.map +1 -1
  25. package/build/dom.js +2 -3
  26. package/build/dom.js.map +1 -1
  27. package/build/experimental/apply-style.js +140 -0
  28. package/build/experimental/dom.js +123 -0
  29. package/build/experimental/output.js +91 -0
  30. package/build/experimental/reconciler.js +141 -0
  31. package/build/experimental/renderer.js +81 -0
  32. package/build/get-max-width.js +0 -1
  33. package/build/get-max-width.js.map +1 -1
  34. package/build/hooks/use-focus-manager.js +1 -1
  35. package/build/hooks/use-focus.d.ts +1 -1
  36. package/build/hooks/use-focus.js +2 -2
  37. package/build/hooks/use-focus.js.map +1 -1
  38. package/build/hooks/use-input.js +2 -3
  39. package/build/hooks/use-input.js.map +1 -1
  40. package/build/hooks/useInput.js +38 -0
  41. package/build/ink.js +81 -170
  42. package/build/ink.js.map +1 -1
  43. package/build/instance.js +205 -0
  44. package/build/log-update.d.ts +1 -0
  45. package/build/log-update.js.map +1 -1
  46. package/build/measure-element.js +1 -1
  47. package/build/measure-text.js +1 -1
  48. package/build/measure-text.js.map +1 -1
  49. package/build/output.js +11 -26
  50. package/build/output.js.map +1 -1
  51. package/build/parse-keypress.d.ts +1 -0
  52. package/build/parse-keypress.js +4 -4
  53. package/build/parse-keypress.js.map +1 -1
  54. package/build/reconciler.js +9 -7
  55. package/build/reconciler.js.map +1 -1
  56. package/build/render-border.js +1 -1
  57. package/build/render-border.js.map +1 -1
  58. package/build/render-node-to-output.js +2 -3
  59. package/build/render-node-to-output.js.map +1 -1
  60. package/build/render.d.ts +4 -0
  61. package/build/render.js +3 -3
  62. package/build/render.js.map +1 -1
  63. package/build/renderer.js +5 -5
  64. package/build/renderer.js.map +1 -1
  65. package/build/squash-text-nodes.js.map +1 -1
  66. package/build/styles.d.ts +1 -1
  67. package/build/styles.js +0 -1
  68. package/build/styles.js.map +1 -1
  69. package/build/wrap-text.js +1 -1
  70. package/build/wrap-text.js.map +1 -1
  71. package/package.json +35 -39
  72. package/readme.md +5 -18
package/build/ink.js CHANGED
@@ -2,11 +2,10 @@ import process from 'node:process';
2
2
  import React from 'react';
3
3
  import throttle from 'lodash/throttle.js';
4
4
  import ansiEscapes from 'ansi-escapes';
5
- import originalIsCi from 'is-ci';
5
+ import isInCi from 'is-in-ci';
6
6
  import autoBind from 'auto-bind';
7
7
  import signalExit from 'signal-exit';
8
8
  import patchConsole from 'patch-console';
9
- // eslint-disable-next-line n/file-extension-in-import
10
9
  import Yoga from 'yoga-wasm-web/auto';
11
10
  import reconciler from './reconciler.js';
12
11
  import render from './renderer.js';
@@ -14,163 +13,23 @@ import * as dom from './dom.js';
14
13
  import logUpdate from './log-update.js';
15
14
  import instances from './instances.js';
16
15
  import App from './components/App.js';
17
- const isCi = process.env['CI'] === 'false' ? false : originalIsCi;
18
16
  const noop = () => { };
19
17
  export default class Ink {
18
+ options;
19
+ log;
20
+ throttledLog;
21
+ // Ignore last render after unmounting a tree to prevent empty output before exit
22
+ isUnmounted;
23
+ lastOutput;
24
+ container;
25
+ rootNode;
26
+ // This variable is used only in debug mode to store full static output
27
+ // so that it's rerendered every time, not just new static parts, like in non-debug mode
28
+ fullStaticOutput;
29
+ exitPromise;
30
+ restoreConsole;
31
+ unsubscribeResize;
20
32
  constructor(options) {
21
- Object.defineProperty(this, "options", {
22
- enumerable: true,
23
- configurable: true,
24
- writable: true,
25
- value: void 0
26
- });
27
- Object.defineProperty(this, "log", {
28
- enumerable: true,
29
- configurable: true,
30
- writable: true,
31
- value: void 0
32
- });
33
- Object.defineProperty(this, "throttledLog", {
34
- enumerable: true,
35
- configurable: true,
36
- writable: true,
37
- value: void 0
38
- });
39
- // Ignore last render after unmounting a tree to prevent empty output before exit
40
- Object.defineProperty(this, "isUnmounted", {
41
- enumerable: true,
42
- configurable: true,
43
- writable: true,
44
- value: void 0
45
- });
46
- Object.defineProperty(this, "lastOutput", {
47
- enumerable: true,
48
- configurable: true,
49
- writable: true,
50
- value: void 0
51
- });
52
- Object.defineProperty(this, "container", {
53
- enumerable: true,
54
- configurable: true,
55
- writable: true,
56
- value: void 0
57
- });
58
- Object.defineProperty(this, "rootNode", {
59
- enumerable: true,
60
- configurable: true,
61
- writable: true,
62
- value: void 0
63
- });
64
- // This variable is used only in debug mode to store full static output
65
- // so that it's rerendered every time, not just new static parts, like in non-debug mode
66
- Object.defineProperty(this, "fullStaticOutput", {
67
- enumerable: true,
68
- configurable: true,
69
- writable: true,
70
- value: void 0
71
- });
72
- Object.defineProperty(this, "exitPromise", {
73
- enumerable: true,
74
- configurable: true,
75
- writable: true,
76
- value: void 0
77
- });
78
- Object.defineProperty(this, "restoreConsole", {
79
- enumerable: true,
80
- configurable: true,
81
- writable: true,
82
- value: void 0
83
- });
84
- Object.defineProperty(this, "unsubscribeResize", {
85
- enumerable: true,
86
- configurable: true,
87
- writable: true,
88
- value: void 0
89
- });
90
- Object.defineProperty(this, "resized", {
91
- enumerable: true,
92
- configurable: true,
93
- writable: true,
94
- value: () => {
95
- this.calculateLayout();
96
- this.onRender();
97
- }
98
- });
99
- Object.defineProperty(this, "resolveExitPromise", {
100
- enumerable: true,
101
- configurable: true,
102
- writable: true,
103
- value: () => { }
104
- });
105
- Object.defineProperty(this, "rejectExitPromise", {
106
- enumerable: true,
107
- configurable: true,
108
- writable: true,
109
- value: () => { }
110
- });
111
- Object.defineProperty(this, "unsubscribeExit", {
112
- enumerable: true,
113
- configurable: true,
114
- writable: true,
115
- value: () => { }
116
- });
117
- Object.defineProperty(this, "calculateLayout", {
118
- enumerable: true,
119
- configurable: true,
120
- writable: true,
121
- value: () => {
122
- // The 'columns' property can be undefined or 0 when not using a TTY.
123
- // In that case we fall back to 80.
124
- const terminalWidth = this.options.stdout.columns || 80;
125
- this.rootNode.yogaNode.setWidth(terminalWidth);
126
- this.rootNode.yogaNode.calculateLayout(undefined, undefined, Yoga.DIRECTION_LTR);
127
- }
128
- });
129
- Object.defineProperty(this, "onRender", {
130
- enumerable: true,
131
- configurable: true,
132
- writable: true,
133
- value: () => {
134
- if (this.isUnmounted) {
135
- return;
136
- }
137
- const { output, outputHeight, staticOutput } = render(this.rootNode);
138
- // If <Static> output isn't empty, it means new children have been added to it
139
- const hasStaticOutput = staticOutput && staticOutput !== '\n';
140
- if (this.options.debug) {
141
- if (hasStaticOutput) {
142
- this.fullStaticOutput += staticOutput;
143
- }
144
- this.options.stdout.write(this.fullStaticOutput + output);
145
- return;
146
- }
147
- if (isCi) {
148
- if (hasStaticOutput) {
149
- this.options.stdout.write(staticOutput);
150
- }
151
- this.lastOutput = output;
152
- return;
153
- }
154
- if (hasStaticOutput) {
155
- this.fullStaticOutput += staticOutput;
156
- }
157
- if (outputHeight >= this.options.stdout.rows) {
158
- this.options.stdout.write(ansiEscapes.clearTerminal + this.fullStaticOutput + output);
159
- this.lastOutput = output;
160
- return;
161
- }
162
- // To ensure static output is cleanly rendered before main output, clear main output first
163
- if (hasStaticOutput) {
164
- this.log.clear();
165
- this.options.stdout.write(staticOutput);
166
- this.log(output);
167
- }
168
- if (!hasStaticOutput && output !== this.lastOutput) {
169
- this.throttledLog(output);
170
- }
171
- this.lastOutput = output;
172
- }
173
- });
174
33
  autoBind(this);
175
34
  this.options = options;
176
35
  this.rootNode = dom.createNode('ink-root');
@@ -179,7 +38,7 @@ export default class Ink {
179
38
  ? this.onRender
180
39
  : throttle(this.onRender, 32, {
181
40
  leading: true,
182
- trailing: true
41
+ trailing: true,
183
42
  });
184
43
  this.rootNode.onImmediateRender = this.onRender;
185
44
  this.log = logUpdate.create(options.stdout);
@@ -187,7 +46,7 @@ export default class Ink {
187
46
  ? this.log
188
47
  : throttle(this.log, undefined, {
189
48
  leading: true,
190
- trailing: true
49
+ trailing: true,
191
50
  });
192
51
  // Ignore last render after unmounting a tree to prevent empty output before exit
193
52
  this.isUnmounted = false;
@@ -208,19 +67,73 @@ export default class Ink {
208
67
  // Reporting React DOM's version, not Ink's
209
68
  // See https://github.com/facebook/react/issues/16666#issuecomment-532639905
210
69
  version: '16.13.1',
211
- rendererPackageName: 'ink'
70
+ rendererPackageName: 'ink',
212
71
  });
213
72
  }
214
73
  if (options.patchConsole) {
215
74
  this.patchConsole();
216
75
  }
217
- if (!isCi) {
76
+ if (!isInCi) {
218
77
  options.stdout.on('resize', this.resized);
219
78
  this.unsubscribeResize = () => {
220
79
  options.stdout.off('resize', this.resized);
221
80
  };
222
81
  }
223
82
  }
83
+ resized = () => {
84
+ this.calculateLayout();
85
+ this.onRender();
86
+ };
87
+ resolveExitPromise = () => { };
88
+ rejectExitPromise = () => { };
89
+ unsubscribeExit = () => { };
90
+ calculateLayout = () => {
91
+ // The 'columns' property can be undefined or 0 when not using a TTY.
92
+ // In that case we fall back to 80.
93
+ const terminalWidth = this.options.stdout.columns || 80;
94
+ this.rootNode.yogaNode.setWidth(terminalWidth);
95
+ this.rootNode.yogaNode.calculateLayout(undefined, undefined, Yoga.DIRECTION_LTR);
96
+ };
97
+ onRender = () => {
98
+ if (this.isUnmounted) {
99
+ return;
100
+ }
101
+ const { output, outputHeight, staticOutput } = render(this.rootNode);
102
+ // If <Static> output isn't empty, it means new children have been added to it
103
+ const hasStaticOutput = staticOutput && staticOutput !== '\n';
104
+ if (this.options.debug) {
105
+ if (hasStaticOutput) {
106
+ this.fullStaticOutput += staticOutput;
107
+ }
108
+ this.options.stdout.write(this.fullStaticOutput + output);
109
+ return;
110
+ }
111
+ if (isInCi) {
112
+ if (hasStaticOutput) {
113
+ this.options.stdout.write(staticOutput);
114
+ }
115
+ this.lastOutput = output;
116
+ return;
117
+ }
118
+ if (hasStaticOutput) {
119
+ this.fullStaticOutput += staticOutput;
120
+ }
121
+ if (outputHeight >= this.options.stdout.rows) {
122
+ this.options.stdout.write(ansiEscapes.clearTerminal + this.fullStaticOutput + output);
123
+ this.lastOutput = output;
124
+ return;
125
+ }
126
+ // To ensure static output is cleanly rendered before main output, clear main output first
127
+ if (hasStaticOutput) {
128
+ this.log.clear();
129
+ this.options.stdout.write(staticOutput);
130
+ this.log(output);
131
+ }
132
+ if (!hasStaticOutput && output !== this.lastOutput) {
133
+ this.throttledLog(output);
134
+ }
135
+ this.lastOutput = output;
136
+ };
224
137
  render(node) {
225
138
  const tree = (React.createElement(App, { stdin: this.options.stdin, stdout: this.options.stdout, stderr: this.options.stderr, writeToStdout: this.writeToStdout, writeToStderr: this.writeToStderr, exitOnCtrlC: this.options.exitOnCtrlC, onExit: this.unmount }, node));
226
139
  reconciler.updateContainer(tree, this.container, null, noop);
@@ -233,7 +146,7 @@ export default class Ink {
233
146
  this.options.stdout.write(data + this.fullStaticOutput + this.lastOutput);
234
147
  return;
235
148
  }
236
- if (isCi) {
149
+ if (isInCi) {
237
150
  this.options.stdout.write(data);
238
151
  return;
239
152
  }
@@ -250,7 +163,7 @@ export default class Ink {
250
163
  this.options.stdout.write(this.fullStaticOutput + this.lastOutput);
251
164
  return;
252
165
  }
253
- if (isCi) {
166
+ if (isInCi) {
254
167
  this.options.stderr.write(data);
255
168
  return;
256
169
  }
@@ -274,7 +187,7 @@ export default class Ink {
274
187
  }
275
188
  // CIs don't handle erasing ansi escapes well, so it's better to
276
189
  // only render last frame of non-static output
277
- if (isCi) {
190
+ if (isInCi) {
278
191
  this.options.stdout.write(this.lastOutput + '\n');
279
192
  }
280
193
  else if (!this.options.debug) {
@@ -291,16 +204,14 @@ export default class Ink {
291
204
  }
292
205
  }
293
206
  async waitUntilExit() {
294
- if (!this.exitPromise) {
295
- this.exitPromise = new Promise((resolve, reject) => {
296
- this.resolveExitPromise = resolve;
297
- this.rejectExitPromise = reject;
298
- });
299
- }
207
+ this.exitPromise ||= new Promise((resolve, reject) => {
208
+ this.resolveExitPromise = resolve;
209
+ this.rejectExitPromise = reject;
210
+ });
300
211
  return this.exitPromise;
301
212
  }
302
213
  clear() {
303
- if (!isCi && !this.options.debug) {
214
+ if (!isInCi && !this.options.debug) {
304
215
  this.log.clear();
305
216
  }
306
217
  }
package/build/ink.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"ink.js","sourceRoot":"","sources":["../src/ink.tsx"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,cAAc,CAAC;AACnC,OAAO,KAAuB,MAAM,OAAO,CAAC;AAC5C,OAAO,QAAQ,MAAM,oBAAoB,CAAC;AAE1C,OAAO,WAAW,MAAM,cAAc,CAAC;AACvC,OAAO,YAAY,MAAM,OAAO,CAAC;AACjC,OAAO,QAAQ,MAAM,WAAW,CAAC;AACjC,OAAO,UAAU,MAAM,aAAa,CAAC;AACrC,OAAO,YAAY,MAAM,eAAe,CAAC;AAEzC,sDAAsD;AACtD,OAAO,IAAI,MAAM,oBAAoB,CAAC;AACtC,OAAO,UAAU,MAAM,iBAAiB,CAAC;AACzC,OAAO,MAAM,MAAM,eAAe,CAAC;AACnC,OAAO,KAAK,GAAG,MAAM,UAAU,CAAC;AAChC,OAAO,SAA2B,MAAM,iBAAiB,CAAC;AAC1D,OAAO,SAAS,MAAM,gBAAgB,CAAC;AACvC,OAAO,GAAG,MAAM,qBAAqB,CAAC;AAEtC,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,YAAY,CAAC;AAClE,MAAM,IAAI,GAAG,GAAG,EAAE,GAAE,CAAC,CAAC;AAYtB,MAAM,CAAC,OAAO,OAAO,GAAG;IAgBvB,YAAY,OAAgB;QAf5B;;;;;WAAkC;QAClC;;;;;WAAgC;QAChC;;;;;WAAoE;QACpE,iFAAiF;QACjF;;;;;WAA6B;QAC7B;;;;;WAA2B;QAC3B;;;;;WAAsC;QACtC;;;;;WAA0C;QAC1C,uEAAuE;QACvE,wFAAwF;QACxF;;;;;WAAiC;QACjC;;;;;WAAoC;QACpC;;;;;WAAoC;QACpC;;;;;WAAgD;QA0EhD;;;;mBAAU,GAAG,EAAE;gBACd,IAAI,CAAC,eAAe,EAAE,CAAC;gBACvB,IAAI,CAAC,QAAQ,EAAE,CAAC;YACjB,CAAC;WAAC;QAEF;;;;mBAAiC,GAAG,EAAE,GAAE,CAAC;WAAC;QAC1C;;;;mBAA8C,GAAG,EAAE,GAAE,CAAC;WAAC;QACvD;;;;mBAA8B,GAAG,EAAE,GAAE,CAAC;WAAC;QAEvC;;;;mBAAkB,GAAG,EAAE;gBACtB,qEAAqE;gBACrE,mCAAmC;gBACnC,MAAM,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC;gBAExD,IAAI,CAAC,QAAQ,CAAC,QAAS,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;gBAEhD,IAAI,CAAC,QAAQ,CAAC,QAAS,CAAC,eAAe,CACtC,SAAS,EACT,SAAS,EACT,IAAI,CAAC,aAAa,CAClB,CAAC;YACH,CAAC;WAAC;QAEF;;;;mBAAuB,GAAG,EAAE;gBAC3B,IAAI,IAAI,CAAC,WAAW,EAAE;oBACrB,OAAO;iBACP;gBAED,MAAM,EAAC,MAAM,EAAE,YAAY,EAAE,YAAY,EAAC,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBAEnE,8EAA8E;gBAC9E,MAAM,eAAe,GAAG,YAAY,IAAI,YAAY,KAAK,IAAI,CAAC;gBAE9D,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE;oBACvB,IAAI,eAAe,EAAE;wBACpB,IAAI,CAAC,gBAAgB,IAAI,YAAY,CAAC;qBACtC;oBAED,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,gBAAgB,GAAG,MAAM,CAAC,CAAC;oBAC1D,OAAO;iBACP;gBAED,IAAI,IAAI,EAAE;oBACT,IAAI,eAAe,EAAE;wBACpB,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;qBACxC;oBAED,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC;oBACzB,OAAO;iBACP;gBAED,IAAI,eAAe,EAAE;oBACpB,IAAI,CAAC,gBAAgB,IAAI,YAAY,CAAC;iBACtC;gBAED,IAAI,YAAY,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE;oBAC7C,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CACxB,WAAW,CAAC,aAAa,GAAG,IAAI,CAAC,gBAAgB,GAAG,MAAM,CAC1D,CAAC;oBACF,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC;oBACzB,OAAO;iBACP;gBAED,0FAA0F;gBAC1F,IAAI,eAAe,EAAE;oBACpB,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC;oBACjB,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;oBACxC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;iBACjB;gBAED,IAAI,CAAC,eAAe,IAAI,MAAM,KAAK,IAAI,CAAC,UAAU,EAAE;oBACnD,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;iBAC1B;gBAED,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC;YAC1B,CAAC;WAAC;QAlJD,QAAQ,CAAC,IAAI,CAAC,CAAC;QAEf,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,QAAQ,GAAG,GAAG,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;QAC3C,IAAI,CAAC,QAAQ,CAAC,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC;QAErD,IAAI,CAAC,QAAQ,CAAC,QAAQ,GAAG,OAAO,CAAC,KAAK;YACrC,CAAC,CAAC,IAAI,CAAC,QAAQ;YACf,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,EAAE;gBAC5B,OAAO,EAAE,IAAI;gBACb,QAAQ,EAAE,IAAI;aACb,CAAC,CAAC;QAEN,IAAI,CAAC,QAAQ,CAAC,iBAAiB,GAAG,IAAI,CAAC,QAAQ,CAAC;QAChD,IAAI,CAAC,GAAG,GAAG,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAC5C,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC,KAAK;YAChC,CAAC,CAAC,IAAI,CAAC,GAAG;YACV,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,SAAS,EAAE;gBAC9B,OAAO,EAAE,IAAI;gBACb,QAAQ,EAAE,IAAI;aACb,CAAC,CAAC;QAEN,iFAAiF;QACjF,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;QAEzB,iDAAiD;QACjD,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;QAErB,uEAAuE;QACvE,wFAAwF;QACxF,IAAI,CAAC,gBAAgB,GAAG,EAAE,CAAC;QAE3B,mEAAmE;QACnE,IAAI,CAAC,SAAS,GAAG,UAAU,CAAC,eAAe,CAC1C,IAAI,CAAC,QAAQ;QACb,cAAc;QACd,CAAC,EACD,IAAI,EACJ,KAAK,EACL,IAAI,EACJ,IAAI,EACJ,GAAG,EAAE,GAAE,CAAC,EACR,IAAI,CACJ,CAAC;QAEF,6BAA6B;QAC7B,IAAI,CAAC,eAAe,GAAG,UAAU,CAAC,IAAI,CAAC,OAAO,EAAE,EAAC,UAAU,EAAE,KAAK,EAAC,CAAC,CAAC;QAErE,IAAI,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,MAAM,EAAE;YAClC,UAAU,CAAC,kBAAkB,CAAC;gBAC7B,UAAU,EAAE,CAAC;gBACb,2CAA2C;gBAC3C,4EAA4E;gBAC5E,OAAO,EAAE,SAAS;gBAClB,mBAAmB,EAAE,KAAK;aAC1B,CAAC,CAAC;SACH;QAED,IAAI,OAAO,CAAC,YAAY,EAAE;YACzB,IAAI,CAAC,YAAY,EAAE,CAAC;SACpB;QAED,IAAI,CAAC,IAAI,EAAE;YACV,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;YAE1C,IAAI,CAAC,iBAAiB,GAAG,GAAG,EAAE;gBAC7B,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;YAC5C,CAAC,CAAC;SACF;IACF,CAAC;IA+ED,MAAM,CAAC,IAAe;QACrB,MAAM,IAAI,GAAG,CACZ,oBAAC,GAAG,IACH,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK,EACzB,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,EAC3B,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,EAC3B,aAAa,EAAE,IAAI,CAAC,aAAa,EACjC,aAAa,EAAE,IAAI,CAAC,aAAa,EACjC,WAAW,EAAE,IAAI,CAAC,OAAO,CAAC,WAAW,EACrC,MAAM,EAAE,IAAI,CAAC,OAAO,IAEnB,IAAI,CACA,CACN,CAAC;QAEF,UAAU,CAAC,eAAe,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;IAC9D,CAAC;IAED,aAAa,CAAC,IAAY;QACzB,IAAI,IAAI,CAAC,WAAW,EAAE;YACrB,OAAO;SACP;QAED,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE;YACvB,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC;YAC1E,OAAO;SACP;QAED,IAAI,IAAI,EAAE;YACT,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAChC,OAAO;SACP;QAED,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC;QACjB,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAChC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAC3B,CAAC;IAED,aAAa,CAAC,IAAY;QACzB,IAAI,IAAI,CAAC,WAAW,EAAE;YACrB,OAAO;SACP;QAED,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE;YACvB,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAChC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC;YACnE,OAAO;SACP;QAED,IAAI,IAAI,EAAE;YACT,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAChC,OAAO;SACP;QAED,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC;QACjB,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAChC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAC3B,CAAC;IAED,wDAAwD;IACxD,OAAO,CAAC,KAA6B;QACpC,IAAI,IAAI,CAAC,WAAW,EAAE;YACrB,OAAO;SACP;QAED,IAAI,CAAC,eAAe,EAAE,CAAC;QACvB,IAAI,CAAC,QAAQ,EAAE,CAAC;QAChB,IAAI,CAAC,eAAe,EAAE,CAAC;QAEvB,IAAI,OAAO,IAAI,CAAC,cAAc,KAAK,UAAU,EAAE;YAC9C,IAAI,CAAC,cAAc,EAAE,CAAC;SACtB;QAED,IAAI,OAAO,IAAI,CAAC,iBAAiB,KAAK,UAAU,EAAE;YACjD,IAAI,CAAC,iBAAiB,EAAE,CAAC;SACzB;QAED,gEAAgE;QAChE,8CAA8C;QAC9C,IAAI,IAAI,EAAE;YACT,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,CAAC;SAClD;aAAM,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE;YAC/B,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;SAChB;QAED,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;QAExB,UAAU,CAAC,eAAe,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;QAC7D,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAEtC,IAAI,KAAK,YAAY,KAAK,EAAE;YAC3B,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;SAC9B;aAAM;YACN,IAAI,CAAC,kBAAkB,EAAE,CAAC;SAC1B;IACF,CAAC;IAED,KAAK,CAAC,aAAa;QAClB,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;YACtB,IAAI,CAAC,WAAW,GAAG,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;gBAClD,IAAI,CAAC,kBAAkB,GAAG,OAAO,CAAC;gBAClC,IAAI,CAAC,iBAAiB,GAAG,MAAM,CAAC;YACjC,CAAC,CAAC,CAAC;SACH;QAED,OAAO,IAAI,CAAC,WAAW,CAAC;IACzB,CAAC;IAED,KAAK;QACJ,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE;YACjC,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC;SACjB;IACF,CAAC;IAED,YAAY;QACX,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE;YACvB,OAAO;SACP;QAED,IAAI,CAAC,cAAc,GAAG,YAAY,CAAC,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE;YACnD,IAAI,MAAM,KAAK,QAAQ,EAAE;gBACxB,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;aACzB;YAED,IAAI,MAAM,KAAK,QAAQ,EAAE;gBACxB,MAAM,cAAc,GAAG,IAAI,CAAC,UAAU,CAAC,0BAA0B,CAAC,CAAC;gBAEnE,IAAI,CAAC,cAAc,EAAE;oBACpB,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;iBACzB;aACD;QACF,CAAC,CAAC,CAAC;IACJ,CAAC;CACD"}
1
+ {"version":3,"file":"ink.js","sourceRoot":"","sources":["../src/ink.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,205 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+
8
+ var _react = _interopRequireDefault(require("react"));
9
+
10
+ var _lodash = _interopRequireDefault(require("lodash.throttle"));
11
+
12
+ var _autoBind = _interopRequireDefault(require("auto-bind"));
13
+
14
+ var _logUpdate = _interopRequireDefault(require("log-update"));
15
+
16
+ var _isCi = _interopRequireDefault(require("is-ci"));
17
+
18
+ var _signalExit = _interopRequireDefault(require("signal-exit"));
19
+
20
+ var _ansiEscapes = _interopRequireDefault(require("ansi-escapes"));
21
+
22
+ var _reconciler = _interopRequireDefault(require("./reconciler"));
23
+
24
+ var _reconciler2 = _interopRequireDefault(require("./experimental/reconciler"));
25
+
26
+ var _renderer = _interopRequireDefault(require("./renderer"));
27
+
28
+ var _renderer2 = _interopRequireDefault(require("./experimental/renderer"));
29
+
30
+ var dom = _interopRequireWildcard(require("./dom"));
31
+
32
+ var experimentalDom = _interopRequireWildcard(require("./experimental/dom"));
33
+
34
+ var _instances = _interopRequireDefault(require("./instances"));
35
+
36
+ var _App = _interopRequireDefault(require("./components/App"));
37
+
38
+ function _getRequireWildcardCache() { if (typeof WeakMap !== "function") return null; var cache = new WeakMap(); _getRequireWildcardCache = function () { return cache; }; return cache; }
39
+
40
+ function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
41
+
42
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
43
+
44
+ class Instance {
45
+ constructor(options) {
46
+ (0, _autoBind.default)(this);
47
+ this.options = options;
48
+
49
+ if (options.experimental) {
50
+ this.rootNode = experimentalDom.createNode('root');
51
+ this.rootNode.onRender = options.debug ? this.onRender : (0, _lodash.default)(this.onRender, 16, {
52
+ leading: true,
53
+ trailing: true
54
+ });
55
+ this.rootNode.onImmediateRender = this.onRender;
56
+ this.renderer = (0, _renderer2.default)({
57
+ terminalWidth: options.stdout.columns
58
+ });
59
+ } else {
60
+ this.rootNode = dom.createNode('root');
61
+ this.rootNode.onRender = this.onRender;
62
+ this.renderer = (0, _renderer.default)({
63
+ terminalWidth: options.stdout.columns
64
+ });
65
+ }
66
+
67
+ this.log = _logUpdate.default.create(options.stdout);
68
+ this.throttledLog = options.debug ? this.log : (0, _lodash.default)(this.log, {
69
+ leading: true,
70
+ trailing: true
71
+ }); // Ignore last render after unmounting a tree to prevent empty output before exit
72
+
73
+ this.isUnmounted = false; // Store last output to only rerender when needed
74
+
75
+ this.lastOutput = ''; // This variable is used only in debug mode to store full static output
76
+ // so that it's rerendered every time, not just new static parts, like in non-debug mode
77
+
78
+ this.fullStaticOutput = '';
79
+
80
+ if (options.experimental) {
81
+ this.container = _reconciler2.default.createContainer(this.rootNode, false, false);
82
+ } else {
83
+ this.container = _reconciler.default.createContainer(this.rootNode, false, false);
84
+ }
85
+
86
+ this.exitPromise = new Promise((resolve, reject) => {
87
+ this.resolveExitPromise = resolve;
88
+ this.rejectExitPromise = reject;
89
+ }); // Unmount when process exits
90
+
91
+ this.unsubscribeExit = (0, _signalExit.default)(this.unmount, {
92
+ alwaysLast: false
93
+ });
94
+ }
95
+
96
+ onRender() {
97
+ if (this.isUnmounted) {
98
+ return;
99
+ }
100
+
101
+ const {
102
+ output,
103
+ outputHeight,
104
+ staticOutput
105
+ } = this.renderer(this.rootNode); // If <Static> output isn't empty, it means new children have been added to it
106
+
107
+ const hasStaticOutput = staticOutput && staticOutput !== '\n';
108
+
109
+ if (this.options.debug) {
110
+ if (hasStaticOutput) {
111
+ this.fullStaticOutput += staticOutput;
112
+ }
113
+
114
+ this.options.stdout.write(this.fullStaticOutput + output);
115
+ return;
116
+ }
117
+
118
+ if (_isCi.default) {
119
+ if (hasStaticOutput) {
120
+ this.options.stdout.write(staticOutput);
121
+ }
122
+
123
+ this.lastOutput = output;
124
+ return;
125
+ }
126
+
127
+ if (hasStaticOutput) {
128
+ this.fullStaticOutput += staticOutput;
129
+ }
130
+
131
+ if (this.options.experimental && outputHeight >= this.options.stdout.rows) {
132
+ this.options.stdout.write(_ansiEscapes.default.clearTerminal + this.fullStaticOutput + output);
133
+ this.lastOutput = output;
134
+ return;
135
+ } // To ensure static output is cleanly rendered before main output, clear main output first
136
+
137
+
138
+ if (hasStaticOutput) {
139
+ this.log.clear();
140
+ this.options.stdout.write(staticOutput);
141
+ }
142
+
143
+ if (output !== this.lastOutput) {
144
+ if (this.options.experimental) {
145
+ this.throttledLog(output);
146
+ } else {
147
+ this.log(output);
148
+ }
149
+ }
150
+ }
151
+
152
+ render(node) {
153
+ const tree = _react.default.createElement(_App.default, {
154
+ stdin: this.options.stdin,
155
+ stdout: this.options.stdout,
156
+ exitOnCtrlC: this.options.exitOnCtrlC,
157
+ onExit: this.unmount
158
+ }, node);
159
+
160
+ if (this.options.experimental) {
161
+ _reconciler2.default.updateContainer(tree, this.container);
162
+ } else {
163
+ _reconciler.default.updateContainer(tree, this.container);
164
+ }
165
+ }
166
+
167
+ unmount(error) {
168
+ if (this.isUnmounted) {
169
+ return;
170
+ }
171
+
172
+ this.onRender();
173
+ this.unsubscribeExit(); // CIs don't handle erasing ansi escapes well, so it's better to
174
+ // only render last frame of non-static output
175
+
176
+ if (_isCi.default) {
177
+ this.options.stdout.write(this.lastOutput + '\n');
178
+ } else if (!this.options.debug) {
179
+ this.log.done();
180
+ }
181
+
182
+ this.isUnmounted = true;
183
+
184
+ if (this.options.experimental) {
185
+ _reconciler2.default.updateContainer(null, this.container);
186
+ } else {
187
+ _reconciler.default.updateContainer(null, this.container);
188
+ }
189
+
190
+ _instances.default.delete(this.options.stdout);
191
+
192
+ if (error instanceof Error) {
193
+ this.rejectExitPromise(error);
194
+ } else {
195
+ this.resolveExitPromise();
196
+ }
197
+ }
198
+
199
+ waitUntilExit() {
200
+ return this.exitPromise;
201
+ }
202
+
203
+ }
204
+
205
+ exports.default = Instance;
@@ -1,3 +1,4 @@
1
+ /// <reference types="node" resolution-mode="require"/>
1
2
  import { type Writable } from 'node:stream';
2
3
  export type LogUpdate = {
3
4
  clear: () => void;
@@ -1 +1 @@
1
- {"version":3,"file":"log-update.js","sourceRoot":"","sources":["../src/log-update.ts"],"names":[],"mappings":"AACA,OAAO,WAAW,MAAM,cAAc,CAAC;AACvC,OAAO,SAAS,MAAM,YAAY,CAAC;AAQnC,MAAM,MAAM,GAAG,CAAC,MAAgB,EAAE,EAAC,UAAU,GAAG,KAAK,EAAC,GAAG,EAAE,EAAa,EAAE;IACzE,IAAI,iBAAiB,GAAG,CAAC,CAAC;IAC1B,IAAI,cAAc,GAAG,EAAE,CAAC;IACxB,IAAI,eAAe,GAAG,KAAK,CAAC;IAE5B,MAAM,MAAM,GAAG,CAAC,GAAW,EAAE,EAAE;QAC9B,IAAI,CAAC,UAAU,IAAI,CAAC,eAAe,EAAE;YACpC,SAAS,CAAC,IAAI,EAAE,CAAC;YACjB,eAAe,GAAG,IAAI,CAAC;SACvB;QAED,MAAM,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC;QAC1B,IAAI,MAAM,KAAK,cAAc,EAAE;YAC9B,OAAO;SACP;QAED,cAAc,GAAG,MAAM,CAAC;QACxB,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,UAAU,CAAC,iBAAiB,CAAC,GAAG,MAAM,CAAC,CAAC;QACjE,iBAAiB,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC;IAC/C,CAAC,CAAC;IAEF,MAAM,CAAC,KAAK,GAAG,GAAG,EAAE;QACnB,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,UAAU,CAAC,iBAAiB,CAAC,CAAC,CAAC;QACxD,cAAc,GAAG,EAAE,CAAC;QACpB,iBAAiB,GAAG,CAAC,CAAC;IACvB,CAAC,CAAC;IAEF,MAAM,CAAC,IAAI,GAAG,GAAG,EAAE;QAClB,cAAc,GAAG,EAAE,CAAC;QACpB,iBAAiB,GAAG,CAAC,CAAC;QAEtB,IAAI,CAAC,UAAU,EAAE;YAChB,SAAS,CAAC,IAAI,EAAE,CAAC;YACjB,eAAe,GAAG,KAAK,CAAC;SACxB;IACF,CAAC,CAAC;IAEF,OAAO,MAAM,CAAC;AACf,CAAC,CAAC;AAEF,MAAM,SAAS,GAAG,EAAC,MAAM,EAAC,CAAC;AAC3B,eAAe,SAAS,CAAC"}
1
+ {"version":3,"file":"log-update.js","sourceRoot":"","sources":["../src/log-update.ts"],"names":[],"mappings":"AACA,OAAO,WAAW,MAAM,cAAc,CAAC;AACvC,OAAO,SAAS,MAAM,YAAY,CAAC;AAQnC,MAAM,MAAM,GAAG,CAAC,MAAgB,EAAE,EAAC,UAAU,GAAG,KAAK,EAAC,GAAG,EAAE,EAAa,EAAE;IACzE,IAAI,iBAAiB,GAAG,CAAC,CAAC;IAC1B,IAAI,cAAc,GAAG,EAAE,CAAC;IACxB,IAAI,eAAe,GAAG,KAAK,CAAC;IAE5B,MAAM,MAAM,GAAG,CAAC,GAAW,EAAE,EAAE;QAC9B,IAAI,CAAC,UAAU,IAAI,CAAC,eAAe,EAAE,CAAC;YACrC,SAAS,CAAC,IAAI,EAAE,CAAC;YACjB,eAAe,GAAG,IAAI,CAAC;QACxB,CAAC;QAED,MAAM,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC;QAC1B,IAAI,MAAM,KAAK,cAAc,EAAE,CAAC;YAC/B,OAAO;QACR,CAAC;QAED,cAAc,GAAG,MAAM,CAAC;QACxB,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,UAAU,CAAC,iBAAiB,CAAC,GAAG,MAAM,CAAC,CAAC;QACjE,iBAAiB,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC;IAC/C,CAAC,CAAC;IAEF,MAAM,CAAC,KAAK,GAAG,GAAG,EAAE;QACnB,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,UAAU,CAAC,iBAAiB,CAAC,CAAC,CAAC;QACxD,cAAc,GAAG,EAAE,CAAC;QACpB,iBAAiB,GAAG,CAAC,CAAC;IACvB,CAAC,CAAC;IAEF,MAAM,CAAC,IAAI,GAAG,GAAG,EAAE;QAClB,cAAc,GAAG,EAAE,CAAC;QACpB,iBAAiB,GAAG,CAAC,CAAC;QAEtB,IAAI,CAAC,UAAU,EAAE,CAAC;YACjB,SAAS,CAAC,IAAI,EAAE,CAAC;YACjB,eAAe,GAAG,KAAK,CAAC;QACzB,CAAC;IACF,CAAC,CAAC;IAEF,OAAO,MAAM,CAAC;AACf,CAAC,CAAC;AAEF,MAAM,SAAS,GAAG,EAAC,MAAM,EAAC,CAAC;AAC3B,eAAe,SAAS,CAAC"}
@@ -3,7 +3,7 @@
3
3
  */
4
4
  const measureElement = (node) => ({
5
5
  width: node.yogaNode?.getComputedWidth() ?? 0,
6
- height: node.yogaNode?.getComputedHeight() ?? 0
6
+ height: node.yogaNode?.getComputedHeight() ?? 0,
7
7
  });
8
8
  export default measureElement;
9
9
  //# sourceMappingURL=measure-element.js.map
@@ -4,7 +4,7 @@ const measureText = (text) => {
4
4
  if (text.length === 0) {
5
5
  return {
6
6
  width: 0,
7
- height: 0
7
+ height: 0,
8
8
  };
9
9
  }
10
10
  const cachedDimensions = cache[text];
@@ -1 +1 @@
1
- {"version":3,"file":"measure-text.js","sourceRoot":"","sources":["../src/measure-text.ts"],"names":[],"mappings":"AAAA,OAAO,UAAU,MAAM,aAAa,CAAC;AAErC,MAAM,KAAK,GAA2B,EAAE,CAAC;AAOzC,MAAM,WAAW,GAAG,CAAC,IAAY,EAAU,EAAE;IAC5C,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;QACtB,OAAO;YACN,KAAK,EAAE,CAAC;YACR,MAAM,EAAE,CAAC;SACT,CAAC;KACF;IAED,MAAM,gBAAgB,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC;IAErC,IAAI,gBAAgB,EAAE;QACrB,OAAO,gBAAgB,CAAC;KACxB;IAED,MAAM,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;IAC/B,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC;IACvC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAC,KAAK,EAAE,MAAM,EAAC,CAAC;IAE9B,OAAO,EAAC,KAAK,EAAE,MAAM,EAAC,CAAC;AACxB,CAAC,CAAC;AAEF,eAAe,WAAW,CAAC"}
1
+ {"version":3,"file":"measure-text.js","sourceRoot":"","sources":["../src/measure-text.ts"],"names":[],"mappings":"AAAA,OAAO,UAAU,MAAM,aAAa,CAAC;AAErC,MAAM,KAAK,GAA2B,EAAE,CAAC;AAOzC,MAAM,WAAW,GAAG,CAAC,IAAY,EAAU,EAAE;IAC5C,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,OAAO;YACN,KAAK,EAAE,CAAC;YACR,MAAM,EAAE,CAAC;SACT,CAAC;IACH,CAAC;IAED,MAAM,gBAAgB,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC;IAErC,IAAI,gBAAgB,EAAE,CAAC;QACtB,OAAO,gBAAgB,CAAC;IACzB,CAAC;IAED,MAAM,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;IAC/B,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC;IACvC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAC,KAAK,EAAE,MAAM,EAAC,CAAC;IAE9B,OAAO,EAAC,KAAK,EAAE,MAAM,EAAC,CAAC;AACxB,CAAC,CAAC;AAEF,eAAe,WAAW,CAAC"}