gt 2.22.4 → 2.23.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 (127) hide show
  1. package/CHANGELOG.md +28 -0
  2. package/dist/auth/errors.d.ts +1 -0
  3. package/dist/auth/errors.js +12 -2
  4. package/dist/auth/errors.js.map +1 -1
  5. package/dist/auth/interactiveLogin.d.ts +2 -0
  6. package/dist/auth/interactiveLogin.js +22 -0
  7. package/dist/auth/interactiveLogin.js.map +1 -0
  8. package/dist/auth/oauth.js +2 -2
  9. package/dist/auth/oauth.js.map +1 -1
  10. package/dist/cli/base.d.ts +22 -4
  11. package/dist/cli/base.js +328 -223
  12. package/dist/cli/base.js.map +1 -1
  13. package/dist/cli/commands/api.js +15 -16
  14. package/dist/cli/commands/api.js.map +1 -1
  15. package/dist/cli/node.js +1 -1
  16. package/dist/cli/node.js.map +1 -1
  17. package/dist/cli/react.js +1 -1
  18. package/dist/cli/react.js.map +1 -1
  19. package/dist/cli/vue.js +2 -2
  20. package/dist/cli/vue.js.map +1 -1
  21. package/dist/config/generateSettings.d.ts +2 -0
  22. package/dist/config/generateSettings.js +13 -6
  23. package/dist/config/generateSettings.js.map +1 -1
  24. package/dist/config/resolveConfig.js +0 -4
  25. package/dist/config/resolveConfig.js.map +1 -1
  26. package/dist/config/validateSettings.js +5 -4
  27. package/dist/config/validateSettings.js.map +1 -1
  28. package/dist/console/{inkLocaleData.d.ts → localeOptions.d.ts} +7 -2
  29. package/dist/console/{inkLocaleData.js → localeOptions.js} +3 -8
  30. package/dist/console/localeOptions.js.map +1 -0
  31. package/dist/console/logger.d.ts +7 -0
  32. package/dist/console/logger.js +48 -85
  33. package/dist/console/logger.js.map +1 -1
  34. package/dist/console/logging.d.ts +11 -1
  35. package/dist/console/logging.js +88 -100
  36. package/dist/console/logging.js.map +1 -1
  37. package/dist/formats/files/aggregateFiles.js +1 -1
  38. package/dist/formats/files/supportedFiles.d.ts +3 -0
  39. package/dist/formats/files/supportedFiles.js +10 -1
  40. package/dist/formats/files/supportedFiles.js.map +1 -1
  41. package/dist/formats/yaml/mergeYaml.js +1 -1
  42. package/dist/fs/config/loadConfig.d.ts +2 -0
  43. package/dist/fs/config/loadConfig.js +5 -1
  44. package/dist/fs/config/loadConfig.js.map +1 -1
  45. package/dist/fs/config/setupConfig.d.ts +18 -9
  46. package/dist/fs/config/setupConfig.js +51 -31
  47. package/dist/fs/config/setupConfig.js.map +1 -1
  48. package/dist/fs/createLoadTranslationsFile.d.ts +22 -1
  49. package/dist/fs/createLoadTranslationsFile.js +43 -20
  50. package/dist/fs/createLoadTranslationsFile.js.map +1 -1
  51. package/dist/generated/version.d.ts +1 -1
  52. package/dist/generated/version.js +1 -1
  53. package/dist/generated/version.js.map +1 -1
  54. package/dist/hooks/postProcess.d.ts +1 -2
  55. package/dist/hooks/postProcess.js +1 -1
  56. package/dist/hooks/postProcess.js.map +1 -1
  57. package/dist/locadex/setupFlow.d.ts +4 -1
  58. package/dist/locadex/setupFlow.js +5 -3
  59. package/dist/locadex/setupFlow.js.map +1 -1
  60. package/dist/react/jsx/utils/jsxParsing/addGTIdentifierToSyntaxTree.js +1 -1
  61. package/dist/react/jsx/utils/jsxParsing/parseJsx.js +1 -1
  62. package/dist/react/jsx/utils/parseString.js +1 -1
  63. package/dist/react/jsx/utils/stringParsing/derivation/index.js +1 -1
  64. package/dist/setup/buildTools/index.d.ts +44 -0
  65. package/dist/setup/buildTools/index.js +10 -0
  66. package/dist/setup/buildTools/index.js.map +1 -0
  67. package/dist/setup/buildTools/vite.d.ts +2 -0
  68. package/dist/setup/buildTools/vite.js +61 -0
  69. package/dist/setup/buildTools/vite.js.map +1 -0
  70. package/dist/setup/developmentCredentials.d.ts +40 -5
  71. package/dist/setup/developmentCredentials.js +119 -37
  72. package/dist/setup/developmentCredentials.js.map +1 -1
  73. package/dist/setup/instructions/base.md +1 -1
  74. package/dist/setup/onboarding.d.ts +131 -0
  75. package/dist/setup/onboarding.js +289 -0
  76. package/dist/setup/onboarding.js.map +1 -0
  77. package/dist/setup/setupTarget.d.ts +1 -0
  78. package/dist/setup/setupTarget.js +52 -0
  79. package/dist/setup/setupTarget.js.map +1 -0
  80. package/dist/setup/setupViteSPA.d.ts +32 -1
  81. package/dist/setup/setupViteSPA.js +110 -20
  82. package/dist/setup/setupViteSPA.js.map +1 -1
  83. package/dist/setup/userInput.d.ts +12 -3
  84. package/dist/setup/userInput.js +27 -11
  85. package/dist/setup/userInput.js.map +1 -1
  86. package/dist/setup/wizard.d.ts +19 -3
  87. package/dist/setup/wizard.js +119 -105
  88. package/dist/setup/wizard.js.map +1 -1
  89. package/dist/types/index.d.ts +2 -1
  90. package/dist/types/index.js +13 -1
  91. package/dist/types/index.js.map +1 -0
  92. package/dist/utils/credentials.d.ts +9 -6
  93. package/dist/utils/credentials.js +36 -22
  94. package/dist/utils/credentials.js.map +1 -1
  95. package/dist/utils/monorepoVersionCheck.d.ts +1 -1
  96. package/dist/utils/monorepoVersionCheck.js +5 -5
  97. package/dist/utils/monorepoVersionCheck.js.map +1 -1
  98. package/dist/utils/packageManager.js +13 -14
  99. package/dist/utils/packageManager.js.map +1 -1
  100. package/package.json +5 -9
  101. package/dist/console/inkFields.d.ts +0 -23
  102. package/dist/console/inkFields.js +0 -88
  103. package/dist/console/inkFields.js.map +0 -1
  104. package/dist/console/inkLayout.d.ts +0 -7
  105. package/dist/console/inkLayout.js +0 -140
  106. package/dist/console/inkLayout.js.map +0 -1
  107. package/dist/console/inkLocaleData.js.map +0 -1
  108. package/dist/console/inkPrompts.d.ts +0 -8
  109. package/dist/console/inkPrompts.js +0 -499
  110. package/dist/console/inkPrompts.js.map +0 -1
  111. package/dist/console/inkSession.d.ts +0 -3
  112. package/dist/console/inkSession.js +0 -42
  113. package/dist/console/inkSession.js.map +0 -1
  114. package/dist/console/inkTerminal.d.ts +0 -4
  115. package/dist/console/inkTerminal.js +0 -15
  116. package/dist/console/inkTerminal.js.map +0 -1
  117. package/dist/console/inkTheme.d.ts +0 -1
  118. package/dist/console/inkTheme.js +0 -6
  119. package/dist/console/inkTheme.js.map +0 -1
  120. package/dist/console/inkTypes.d.ts +0 -69
  121. package/dist/console/inkTypes.js +0 -1
  122. package/dist/console/inkUtils.d.ts +0 -24
  123. package/dist/console/inkUtils.js +0 -87
  124. package/dist/console/inkUtils.js.map +0 -1
  125. package/dist/console/terminalSession.d.ts +0 -5
  126. package/dist/console/terminalSession.js +0 -38
  127. package/dist/console/terminalSession.js.map +0 -1
@@ -1,499 +0,0 @@
1
- import { parseTypedLocale } from "./promptParsing.js";
2
- import { getFilteredLocaleOptions, getLocaleOptions } from "./inkLocaleData.js";
3
- import { CANCELLED, complete, getInputWidth, getOptionWidth, getSafeIndex, getScrollWindow, getVisibleCount, nextIndex, previousIndex } from "./inkUtils.js";
4
- import { LocaleOptionsList, OptionRow, RemainingMatches, SelectedTags } from "./inkFields.js";
5
- import { useTerminalSize } from "./inkTerminal.js";
6
- import { InputBox, PromptFrame } from "./inkLayout.js";
7
- import { runPrompt } from "./inkSession.js";
8
- import { Box, Text, useInput } from "ink";
9
- import { getSupportedLocale } from "@generaltranslation/supported-locales";
10
- import { jsx, jsxs } from "react/jsx-runtime";
11
- import { useState } from "react";
12
- //#region src/console/inkPrompts.tsx
13
- function resolveLocaleChoice({ query, highlightedLocale, preferHighlightedLocale, customMapping }) {
14
- if (preferHighlightedLocale) return highlightedLocale;
15
- return parseTypedLocale(query, customMapping) ?? highlightedLocale;
16
- }
17
- function TextPrompt({ message, defaultValue, validate, onComplete, footer = "type to edit enter select esc cancel", placeholder }) {
18
- const { columns } = useTerminalSize();
19
- const [value, setValue] = useState(defaultValue ?? "");
20
- const [error, setError] = useState();
21
- const inputWidth = getInputWidth(columns);
22
- useInput((input, key) => {
23
- if (key.escape || key.ctrl && input === "c") {
24
- complete(CANCELLED, onComplete);
25
- return;
26
- }
27
- if (key.return) {
28
- const validation = validate?.(value);
29
- if (validation && validation !== true) {
30
- setError(validation.toString());
31
- return;
32
- }
33
- complete({
34
- value,
35
- cancelled: false
36
- }, onComplete);
37
- return;
38
- }
39
- if (key.backspace || key.delete) {
40
- setValue((current) => current.slice(0, -1));
41
- setError(void 0);
42
- return;
43
- }
44
- if (input && !key.ctrl && !key.meta && !key.return) {
45
- setValue((current) => current + input);
46
- setError(void 0);
47
- }
48
- });
49
- return /* @__PURE__ */ jsxs(PromptFrame, {
50
- message,
51
- footer,
52
- children: [/* @__PURE__ */ jsx(InputBox, {
53
- value,
54
- width: inputWidth,
55
- placeholder
56
- }), error ? /* @__PURE__ */ jsx(Text, {
57
- color: "red",
58
- children: error
59
- }) : null]
60
- });
61
- }
62
- function LocalePrompt({ message, defaultValue, customMapping, onComplete }) {
63
- const { columns, rows } = useTerminalSize();
64
- const localeOptions = getLocaleOptions();
65
- const defaultLocale = defaultValue ? getSupportedLocale(defaultValue) : null;
66
- const defaultIndex = defaultLocale ? Math.max(0, localeOptions.findIndex((option) => option.code === defaultLocale)) : 0;
67
- const [query, setQuery] = useState("");
68
- const [index, setIndex] = useState(defaultIndex);
69
- const [preferHighlightedLocale, setPreferHighlightedLocale] = useState(false);
70
- const [error, setError] = useState();
71
- const filteredOptions = getFilteredLocaleOptions(query);
72
- const activeIndex = getSafeIndex(index, filteredOptions.length);
73
- const visibleCount = getVisibleCount(rows, 14);
74
- const { start, visibleItems: visibleOptions } = getScrollWindow({
75
- items: filteredOptions,
76
- index: activeIndex,
77
- visibleCount
78
- });
79
- const inputWidth = getInputWidth(columns);
80
- const optionWidth = getOptionWidth(columns);
81
- useInput((input, key) => {
82
- if (key.escape || key.ctrl && input === "c") {
83
- complete(CANCELLED, onComplete);
84
- return;
85
- }
86
- if (key.upArrow) {
87
- setPreferHighlightedLocale(true);
88
- setIndex((current) => previousIndex(current, filteredOptions.length));
89
- return;
90
- }
91
- if (key.downArrow) {
92
- setPreferHighlightedLocale(true);
93
- setIndex((current) => nextIndex(current, filteredOptions.length));
94
- return;
95
- }
96
- if (key.backspace || key.delete) {
97
- setQuery((current) => current.slice(0, -1));
98
- setIndex(0);
99
- setPreferHighlightedLocale(false);
100
- setError(void 0);
101
- return;
102
- }
103
- if (key.return) {
104
- const finalLocale = resolveLocaleChoice({
105
- query,
106
- highlightedLocale: filteredOptions[activeIndex]?.code,
107
- preferHighlightedLocale,
108
- customMapping
109
- });
110
- if (!finalLocale) {
111
- setError("Enter a valid locale (e.g., en)");
112
- return;
113
- }
114
- complete({
115
- value: finalLocale,
116
- cancelled: false
117
- }, onComplete);
118
- return;
119
- }
120
- if (input && !key.ctrl && !key.meta) {
121
- setQuery((current) => current + input);
122
- setIndex(0);
123
- setPreferHighlightedLocale(false);
124
- setError(void 0);
125
- }
126
- });
127
- return /* @__PURE__ */ jsxs(PromptFrame, {
128
- message,
129
- footer: "↑↓ navigate enter select esc cancel",
130
- children: [
131
- /* @__PURE__ */ jsx(InputBox, {
132
- value: query,
133
- width: inputWidth,
134
- placeholder: "Search locales..."
135
- }),
136
- /* @__PURE__ */ jsx(LocaleOptionsList, {
137
- options: visibleOptions,
138
- activeIndex: activeIndex - start,
139
- width: optionWidth
140
- }),
141
- /* @__PURE__ */ jsx(RemainingMatches, {
142
- total: filteredOptions.length,
143
- visible: visibleCount
144
- }),
145
- error ? /* @__PURE__ */ jsx(Text, {
146
- color: "red",
147
- children: error
148
- }) : null
149
- ]
150
- });
151
- }
152
- function LocaleMultiPrompt({ message, defaultValue = [], required, customMapping, onComplete }) {
153
- const { columns, rows } = useTerminalSize();
154
- const [query, setQuery] = useState("");
155
- const [index, setIndex] = useState(0);
156
- const [preferHighlightedLocale, setPreferHighlightedLocale] = useState(false);
157
- const [selected, setSelected] = useState(new Set(defaultValue));
158
- const [error, setError] = useState();
159
- const selectedLocales = [...selected];
160
- const filteredOptions = getFilteredLocaleOptions(query).filter((option) => !selected.has(option.code));
161
- const activeOptionIndex = getSafeIndex(index, filteredOptions.length);
162
- const visibleCount = getVisibleCount(rows, 16);
163
- const { start, visibleItems: visibleOptions } = getScrollWindow({
164
- items: filteredOptions,
165
- index: activeOptionIndex,
166
- visibleCount
167
- });
168
- const inputWidth = getInputWidth(columns);
169
- const optionWidth = getOptionWidth(columns);
170
- const [selectedTagIndex, setSelectedTagIndex] = useState(0);
171
- const moveSelectedTag = (direction) => setSelectedTagIndex((current) => Math.max(0, Math.min(selectedLocales.length - 1, current + direction)));
172
- const removeSelectedTag = () => {
173
- const localeToRemove = selectedLocales[selectedTagIndex];
174
- if (!localeToRemove) return;
175
- setSelected((current) => {
176
- const next = new Set(current);
177
- next.delete(localeToRemove);
178
- return next;
179
- });
180
- setSelectedTagIndex((current) => Math.max(0, Math.min(current, selectedLocales.length - 2)));
181
- if (selectedLocales.length === 1) setIndex(0);
182
- setError(void 0);
183
- };
184
- const toggleVisibleLocale = () => {
185
- const selectedLocale = resolveLocaleChoice({
186
- query,
187
- highlightedLocale: filteredOptions[activeOptionIndex]?.code,
188
- preferHighlightedLocale,
189
- customMapping
190
- });
191
- if (!selectedLocale) {
192
- setError("Enter a valid locale (e.g., es fr de)");
193
- return;
194
- }
195
- setSelected((current) => {
196
- const next = new Set(current);
197
- if (next.has(selectedLocale)) next.delete(selectedLocale);
198
- else next.add(selectedLocale);
199
- return next;
200
- });
201
- setQuery("");
202
- setError(void 0);
203
- };
204
- useInput((input, key) => {
205
- if (key.escape || key.ctrl && input === "c") {
206
- complete(CANCELLED, onComplete);
207
- return;
208
- }
209
- if (key.upArrow) {
210
- setPreferHighlightedLocale(true);
211
- setIndex((current) => {
212
- if (current === -1) {
213
- if (selectedTagIndex > 0) {
214
- moveSelectedTag(-1);
215
- return -1;
216
- }
217
- return Math.max(filteredOptions.length - 1, 0);
218
- }
219
- if (current === 0 && selectedLocales.length > 0) {
220
- setSelectedTagIndex(selectedLocales.length - 1);
221
- return -1;
222
- }
223
- if (current === 0) return Math.max(filteredOptions.length - 1, 0);
224
- return current - 1;
225
- });
226
- return;
227
- }
228
- if (key.downArrow) {
229
- setPreferHighlightedLocale(true);
230
- setIndex((current) => {
231
- if (filteredOptions.length === 0) return 0;
232
- if (current === -1) {
233
- if (selectedTagIndex < selectedLocales.length - 1) {
234
- moveSelectedTag(1);
235
- return -1;
236
- }
237
- return 0;
238
- }
239
- return nextIndex(current, filteredOptions.length);
240
- });
241
- return;
242
- }
243
- if (index === -1 && key.leftArrow) {
244
- setSelectedTagIndex((current) => Math.max(0, current - 1));
245
- return;
246
- }
247
- if (index === -1 && key.rightArrow) {
248
- setSelectedTagIndex((current) => Math.min(selectedLocales.length - 1, current + 1));
249
- return;
250
- }
251
- if (key.backspace || key.delete) {
252
- setQuery((current) => current.slice(0, -1));
253
- setIndex(0);
254
- setPreferHighlightedLocale(false);
255
- setError(void 0);
256
- return;
257
- }
258
- if (input === " " && index === -1) {
259
- removeSelectedTag();
260
- return;
261
- }
262
- if (input === " ") {
263
- toggleVisibleLocale();
264
- return;
265
- }
266
- if (key.return) {
267
- if (required && selected.size === 0) {
268
- setError("Select at least one locale");
269
- return;
270
- }
271
- complete({
272
- value: [...selected],
273
- cancelled: false
274
- }, onComplete);
275
- return;
276
- }
277
- if (input && !key.ctrl && !key.meta) {
278
- setQuery((current) => current + input);
279
- setIndex(0);
280
- setPreferHighlightedLocale(false);
281
- setError(void 0);
282
- }
283
- });
284
- return /* @__PURE__ */ jsxs(PromptFrame, {
285
- message,
286
- footer: "↑↓ navigate space toggle enter confirm esc cancel",
287
- children: [
288
- /* @__PURE__ */ jsx(InputBox, {
289
- value: query,
290
- width: inputWidth,
291
- placeholder: "Search locales..."
292
- }),
293
- /* @__PURE__ */ jsx(Box, {
294
- marginTop: 1,
295
- children: /* @__PURE__ */ jsx(SelectedTags, {
296
- selectedLocales,
297
- active: index === -1,
298
- activeIndex: selectedTagIndex,
299
- width: optionWidth
300
- })
301
- }),
302
- /* @__PURE__ */ jsx(LocaleOptionsList, {
303
- options: visibleOptions,
304
- activeIndex: index === -1 ? -1 : activeOptionIndex - start,
305
- width: optionWidth
306
- }),
307
- /* @__PURE__ */ jsx(RemainingMatches, {
308
- total: filteredOptions.length,
309
- visible: visibleCount
310
- }),
311
- error ? /* @__PURE__ */ jsx(Text, {
312
- color: "red",
313
- children: error
314
- }) : null
315
- ]
316
- });
317
- }
318
- function GlobPrompt({ label, message, defaultValue, onComplete }) {
319
- return /* @__PURE__ */ jsx(TextPrompt, {
320
- message: message ?? `${label}: Enter space-separated glob patterns for files to translate. Include [locale].`,
321
- defaultValue,
322
- footer: "enter save esc cancel",
323
- onComplete
324
- });
325
- }
326
- function SelectPrompt({ message, options, defaultValue, onComplete }) {
327
- const [index, setIndex] = useState(Math.max(0, options.findIndex((option) => option.value === defaultValue)));
328
- useInput((input, key) => {
329
- if (key.escape || key.ctrl && input === "c") {
330
- complete(CANCELLED, onComplete);
331
- return;
332
- }
333
- if (key.upArrow) {
334
- setIndex((current) => current === 0 ? options.length - 1 : current - 1);
335
- return;
336
- }
337
- if (key.downArrow) {
338
- setIndex((current) => (current + 1) % options.length);
339
- return;
340
- }
341
- if (key.return) complete({
342
- value: options[index]?.value,
343
- cancelled: false
344
- }, onComplete);
345
- });
346
- return /* @__PURE__ */ jsx(PromptFrame, {
347
- message,
348
- footer: "↑↓ navigate enter select esc cancel",
349
- children: options.map((option, optionIndex) => /* @__PURE__ */ jsx(OptionRow, {
350
- active: optionIndex === index,
351
- label: option.label,
352
- hint: option.hint
353
- }, optionIndex))
354
- });
355
- }
356
- function MultiSelectPrompt({ message, options, required, onComplete }) {
357
- const [index, setIndex] = useState(0);
358
- const [selected, setSelected] = useState(/* @__PURE__ */ new Set());
359
- const [error, setError] = useState();
360
- useInput((input, key) => {
361
- if (key.escape || key.ctrl && input === "c") {
362
- complete(CANCELLED, onComplete);
363
- return;
364
- }
365
- if (key.upArrow) {
366
- setIndex((current) => current === 0 ? options.length - 1 : current - 1);
367
- return;
368
- }
369
- if (key.downArrow) {
370
- setIndex((current) => (current + 1) % options.length);
371
- return;
372
- }
373
- if (input === " ") {
374
- setSelected((current) => {
375
- const next = new Set(current);
376
- if (next.has(index)) next.delete(index);
377
- else next.add(index);
378
- return next;
379
- });
380
- setError(void 0);
381
- return;
382
- }
383
- if (key.return) {
384
- if (required && selected.size === 0) {
385
- setError("Select at least one option");
386
- return;
387
- }
388
- complete({
389
- value: [...selected].sort((a, b) => a - b).map((selectedIndex) => options[selectedIndex]?.value).filter((value) => value != null),
390
- cancelled: false
391
- }, onComplete);
392
- }
393
- });
394
- return /* @__PURE__ */ jsxs(PromptFrame, {
395
- message,
396
- footer: "↑↓ navigate space toggle enter select esc cancel",
397
- children: [options.map((option, optionIndex) => /* @__PURE__ */ jsx(OptionRow, {
398
- active: optionIndex === index,
399
- selected: selected.has(optionIndex),
400
- label: option.label,
401
- hint: option.hint
402
- }, optionIndex)), error ? /* @__PURE__ */ jsx(Text, {
403
- color: "red",
404
- children: error
405
- }) : null]
406
- });
407
- }
408
- function ConfirmPrompt({ message, defaultValue, onComplete }) {
409
- const options = [{
410
- value: true,
411
- label: "Yes"
412
- }, {
413
- value: false,
414
- label: "No"
415
- }];
416
- const [index, setIndex] = useState(defaultValue ? 0 : 1);
417
- useInput((input, key) => {
418
- if (key.escape || key.ctrl && input === "c") {
419
- complete(CANCELLED, onComplete);
420
- return;
421
- }
422
- if (key.leftArrow || key.upArrow || key.rightArrow || key.downArrow) {
423
- setIndex((current) => current === 0 ? 1 : 0);
424
- return;
425
- }
426
- if (input.toLowerCase() === "y") {
427
- complete({
428
- value: true,
429
- cancelled: false
430
- }, onComplete);
431
- return;
432
- }
433
- if (input.toLowerCase() === "n") {
434
- complete({
435
- value: false,
436
- cancelled: false
437
- }, onComplete);
438
- return;
439
- }
440
- if (key.return) complete({
441
- value: options[index].value,
442
- cancelled: false
443
- }, onComplete);
444
- });
445
- return /* @__PURE__ */ jsx(PromptFrame, {
446
- message,
447
- footer: "←→ choose y/n select enter confirm esc cancel",
448
- children: options.map((option, optionIndex) => /* @__PURE__ */ jsx(OptionRow, {
449
- active: optionIndex === index,
450
- label: option.label
451
- }, option.label))
452
- });
453
- }
454
- async function inkPromptText(options) {
455
- return runPrompt((onComplete) => /* @__PURE__ */ jsx(TextPrompt, {
456
- ...options,
457
- onComplete
458
- }));
459
- }
460
- async function inkPromptLocale(options) {
461
- return runPrompt((onComplete) => /* @__PURE__ */ jsx(LocalePrompt, {
462
- ...options,
463
- onComplete
464
- }));
465
- }
466
- async function inkPromptLocaleMulti(options) {
467
- return runPrompt((onComplete) => /* @__PURE__ */ jsx(LocaleMultiPrompt, {
468
- ...options,
469
- onComplete
470
- }));
471
- }
472
- async function inkPromptGlob(options) {
473
- return runPrompt((onComplete) => /* @__PURE__ */ jsx(GlobPrompt, {
474
- ...options,
475
- onComplete
476
- }));
477
- }
478
- async function inkPromptSelect(options) {
479
- return runPrompt((onComplete) => /* @__PURE__ */ jsx(SelectPrompt, {
480
- ...options,
481
- onComplete
482
- }));
483
- }
484
- async function inkPromptMultiSelect(options) {
485
- return runPrompt((onComplete) => /* @__PURE__ */ jsx(MultiSelectPrompt, {
486
- ...options,
487
- onComplete
488
- }));
489
- }
490
- async function inkPromptConfirm(options) {
491
- return runPrompt((onComplete) => /* @__PURE__ */ jsx(ConfirmPrompt, {
492
- ...options,
493
- onComplete
494
- }));
495
- }
496
- //#endregion
497
- export { inkPromptConfirm, inkPromptGlob, inkPromptLocale, inkPromptLocaleMulti, inkPromptMultiSelect, inkPromptSelect, inkPromptText };
498
-
499
- //# sourceMappingURL=inkPrompts.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"inkPrompts.js","names":[],"sources":["../../src/console/inkPrompts.tsx"],"sourcesContent":["import { useState } from 'react';\nimport { Box, Text, useInput } from 'ink';\nimport { getSupportedLocale } from '@generaltranslation/supported-locales';\nimport {\n OptionRow,\n LocaleOptionsList,\n RemainingMatches,\n SelectedTags,\n} from './inkFields.js';\nimport { getFilteredLocaleOptions, getLocaleOptions } from './inkLocaleData.js';\nimport { InputBox, PromptFrame } from './inkLayout.js';\nimport { runPrompt } from './inkSession.js';\nimport { useTerminalSize } from './inkTerminal.js';\nimport { parseTypedLocale } from './promptParsing.js';\nimport type { CustomMapping } from 'generaltranslation/types';\nimport type {\n ConfirmPromptProps,\n EditableTextPromptProps,\n GlobPromptProps,\n LocaleMultiPromptProps,\n LocalePromptProps,\n MultiSelectPromptProps,\n SelectPromptProps,\n TextPromptProps,\n} from './inkTypes.js';\nimport {\n CANCELLED,\n SELECTED_TAG_ROW_INDEX,\n complete,\n getInputWidth,\n getOptionWidth,\n getSafeIndex,\n getScrollWindow,\n getVisibleCount,\n nextIndex,\n previousIndex,\n} from './inkUtils.js';\n\nfunction resolveLocaleChoice({\n query,\n highlightedLocale,\n preferHighlightedLocale,\n customMapping,\n}: {\n query: string;\n highlightedLocale?: string;\n preferHighlightedLocale: boolean;\n customMapping?: CustomMapping;\n}) {\n if (preferHighlightedLocale) return highlightedLocale;\n return parseTypedLocale(query, customMapping) ?? highlightedLocale;\n}\n\nfunction TextPrompt({\n message,\n defaultValue,\n validate,\n onComplete,\n footer = 'type to edit enter select esc cancel',\n placeholder,\n}: EditableTextPromptProps) {\n const { columns } = useTerminalSize();\n const [value, setValue] = useState(defaultValue ?? '');\n const [error, setError] = useState<string | undefined>();\n const inputWidth = getInputWidth(columns);\n\n useInput((input, key) => {\n if (key.escape || (key.ctrl && input === 'c')) {\n complete(CANCELLED, onComplete);\n return;\n }\n if (key.return) {\n const validation = validate?.(value);\n if (validation && validation !== true) {\n setError(validation.toString());\n return;\n }\n complete({ value, cancelled: false }, onComplete);\n return;\n }\n if (key.backspace || key.delete) {\n setValue((current) => current.slice(0, -1));\n setError(undefined);\n return;\n }\n if (input && !key.ctrl && !key.meta && !key.return) {\n setValue((current) => current + input);\n setError(undefined);\n }\n });\n\n return (\n <PromptFrame message={message} footer={footer}>\n <InputBox value={value} width={inputWidth} placeholder={placeholder} />\n {error ? <Text color='red'>{error}</Text> : null}\n </PromptFrame>\n );\n}\n\nfunction LocalePrompt({\n message,\n defaultValue,\n customMapping,\n onComplete,\n}: LocalePromptProps) {\n const { columns, rows } = useTerminalSize();\n const localeOptions = getLocaleOptions();\n const defaultLocale = defaultValue ? getSupportedLocale(defaultValue) : null;\n const defaultIndex = defaultLocale\n ? Math.max(\n 0,\n localeOptions.findIndex((option) => option.code === defaultLocale)\n )\n : 0;\n const [query, setQuery] = useState('');\n const [index, setIndex] = useState(defaultIndex);\n const [preferHighlightedLocale, setPreferHighlightedLocale] = useState(false);\n const [error, setError] = useState<string | undefined>();\n const filteredOptions = getFilteredLocaleOptions(query);\n const activeIndex = getSafeIndex(index, filteredOptions.length);\n const visibleCount = getVisibleCount(rows, 14);\n const { start, visibleItems: visibleOptions } = getScrollWindow({\n items: filteredOptions,\n index: activeIndex,\n visibleCount,\n });\n const inputWidth = getInputWidth(columns);\n const optionWidth = getOptionWidth(columns);\n\n useInput((input, key) => {\n if (key.escape || (key.ctrl && input === 'c')) {\n complete(CANCELLED, onComplete);\n return;\n }\n if (key.upArrow) {\n setPreferHighlightedLocale(true);\n setIndex((current) => previousIndex(current, filteredOptions.length));\n return;\n }\n if (key.downArrow) {\n setPreferHighlightedLocale(true);\n setIndex((current) => nextIndex(current, filteredOptions.length));\n return;\n }\n if (key.backspace || key.delete) {\n setQuery((current) => current.slice(0, -1));\n setIndex(0);\n setPreferHighlightedLocale(false);\n setError(undefined);\n return;\n }\n if (key.return) {\n const finalLocale = resolveLocaleChoice({\n query,\n highlightedLocale: filteredOptions[activeIndex]?.code,\n preferHighlightedLocale,\n customMapping,\n });\n if (!finalLocale) {\n setError('Enter a valid locale (e.g., en)');\n return;\n }\n complete({ value: finalLocale, cancelled: false }, onComplete);\n return;\n }\n if (input && !key.ctrl && !key.meta) {\n setQuery((current) => current + input);\n setIndex(0);\n setPreferHighlightedLocale(false);\n setError(undefined);\n }\n });\n\n return (\n <PromptFrame\n message={message}\n footer='↑↓ navigate enter select esc cancel'\n >\n <InputBox\n value={query}\n width={inputWidth}\n placeholder='Search locales...'\n />\n <LocaleOptionsList\n options={visibleOptions}\n activeIndex={activeIndex - start}\n width={optionWidth}\n />\n <RemainingMatches total={filteredOptions.length} visible={visibleCount} />\n {error ? <Text color='red'>{error}</Text> : null}\n </PromptFrame>\n );\n}\n\nfunction LocaleMultiPrompt({\n message,\n defaultValue = [],\n required,\n customMapping,\n onComplete,\n}: LocaleMultiPromptProps) {\n const { columns, rows } = useTerminalSize();\n const [query, setQuery] = useState('');\n const [index, setIndex] = useState(0);\n const [preferHighlightedLocale, setPreferHighlightedLocale] = useState(false);\n const [selected, setSelected] = useState<Set<string>>(new Set(defaultValue));\n const [error, setError] = useState<string | undefined>();\n const selectedLocales = [...selected];\n const filteredOptions = getFilteredLocaleOptions(query).filter(\n (option) => !selected.has(option.code)\n );\n const activeOptionIndex = getSafeIndex(index, filteredOptions.length);\n const visibleCount = getVisibleCount(rows, 16);\n const { start, visibleItems: visibleOptions } = getScrollWindow({\n items: filteredOptions,\n index: activeOptionIndex,\n visibleCount,\n });\n const inputWidth = getInputWidth(columns);\n const optionWidth = getOptionWidth(columns);\n const [selectedTagIndex, setSelectedTagIndex] = useState(0);\n const moveSelectedTag = (direction: -1 | 1) =>\n setSelectedTagIndex((current) =>\n Math.max(0, Math.min(selectedLocales.length - 1, current + direction))\n );\n const removeSelectedTag = () => {\n const localeToRemove = selectedLocales[selectedTagIndex];\n if (!localeToRemove) return;\n setSelected((current) => {\n const next = new Set(current);\n next.delete(localeToRemove);\n return next;\n });\n setSelectedTagIndex((current) =>\n Math.max(0, Math.min(current, selectedLocales.length - 2))\n );\n if (selectedLocales.length === 1) setIndex(0);\n setError(undefined);\n };\n const toggleVisibleLocale = () => {\n const selectedLocale = resolveLocaleChoice({\n query,\n highlightedLocale: filteredOptions[activeOptionIndex]?.code,\n preferHighlightedLocale,\n customMapping,\n });\n if (!selectedLocale) {\n setError('Enter a valid locale (e.g., es fr de)');\n return;\n }\n setSelected((current) => {\n const next = new Set(current);\n if (next.has(selectedLocale)) {\n next.delete(selectedLocale);\n } else {\n next.add(selectedLocale);\n }\n return next;\n });\n setQuery('');\n setError(undefined);\n };\n\n useInput((input, key) => {\n if (key.escape || (key.ctrl && input === 'c')) {\n complete(CANCELLED, onComplete);\n return;\n }\n if (key.upArrow) {\n setPreferHighlightedLocale(true);\n setIndex((current) => {\n if (current === SELECTED_TAG_ROW_INDEX) {\n if (selectedTagIndex > 0) {\n moveSelectedTag(-1);\n return SELECTED_TAG_ROW_INDEX;\n }\n return Math.max(filteredOptions.length - 1, 0);\n }\n if (current === 0 && selectedLocales.length > 0) {\n setSelectedTagIndex(selectedLocales.length - 1);\n return SELECTED_TAG_ROW_INDEX;\n }\n if (current === 0) {\n return Math.max(filteredOptions.length - 1, 0);\n }\n return current - 1;\n });\n return;\n }\n if (key.downArrow) {\n setPreferHighlightedLocale(true);\n setIndex((current) => {\n if (filteredOptions.length === 0) return 0;\n if (current === SELECTED_TAG_ROW_INDEX) {\n if (selectedTagIndex < selectedLocales.length - 1) {\n moveSelectedTag(1);\n return SELECTED_TAG_ROW_INDEX;\n }\n return 0;\n }\n return nextIndex(current, filteredOptions.length);\n });\n return;\n }\n if (index === SELECTED_TAG_ROW_INDEX && key.leftArrow) {\n setSelectedTagIndex((current) => Math.max(0, current - 1));\n return;\n }\n if (index === SELECTED_TAG_ROW_INDEX && key.rightArrow) {\n setSelectedTagIndex((current) =>\n Math.min(selectedLocales.length - 1, current + 1)\n );\n return;\n }\n if (key.backspace || key.delete) {\n setQuery((current) => current.slice(0, -1));\n setIndex(0);\n setPreferHighlightedLocale(false);\n setError(undefined);\n return;\n }\n if (input === ' ' && index === SELECTED_TAG_ROW_INDEX) {\n removeSelectedTag();\n return;\n }\n if (input === ' ') {\n toggleVisibleLocale();\n return;\n }\n if (key.return) {\n if (required && selected.size === 0) {\n setError('Select at least one locale');\n return;\n }\n complete({ value: [...selected], cancelled: false }, onComplete);\n return;\n }\n if (input && !key.ctrl && !key.meta) {\n setQuery((current) => current + input);\n setIndex(0);\n setPreferHighlightedLocale(false);\n setError(undefined);\n }\n });\n\n return (\n <PromptFrame\n message={message}\n footer='↑↓ navigate space toggle enter confirm esc cancel'\n >\n <InputBox\n value={query}\n width={inputWidth}\n placeholder='Search locales...'\n />\n <Box marginTop={1}>\n <SelectedTags\n selectedLocales={selectedLocales}\n active={index === SELECTED_TAG_ROW_INDEX}\n activeIndex={selectedTagIndex}\n width={optionWidth}\n />\n </Box>\n <LocaleOptionsList\n options={visibleOptions}\n activeIndex={\n index === SELECTED_TAG_ROW_INDEX\n ? SELECTED_TAG_ROW_INDEX\n : activeOptionIndex - start\n }\n width={optionWidth}\n />\n <RemainingMatches total={filteredOptions.length} visible={visibleCount} />\n {error ? <Text color='red'>{error}</Text> : null}\n </PromptFrame>\n );\n}\n\nfunction GlobPrompt({\n label,\n message,\n defaultValue,\n onComplete,\n}: GlobPromptProps) {\n return (\n <TextPrompt\n message={\n message ??\n `${label}: Enter space-separated glob patterns for files to translate. Include [locale].`\n }\n defaultValue={defaultValue}\n footer='enter save esc cancel'\n onComplete={onComplete}\n />\n );\n}\n\nfunction SelectPrompt<T>({\n message,\n options,\n defaultValue,\n onComplete,\n}: SelectPromptProps<T>) {\n const defaultIndex = Math.max(\n 0,\n options.findIndex((option) => option.value === defaultValue)\n );\n const [index, setIndex] = useState(defaultIndex);\n\n useInput((input, key) => {\n if (key.escape || (key.ctrl && input === 'c')) {\n complete(CANCELLED, onComplete);\n return;\n }\n if (key.upArrow) {\n setIndex((current) => (current === 0 ? options.length - 1 : current - 1));\n return;\n }\n if (key.downArrow) {\n setIndex((current) => (current + 1) % options.length);\n return;\n }\n if (key.return) {\n complete({ value: options[index]?.value, cancelled: false }, onComplete);\n }\n });\n\n return (\n <PromptFrame\n message={message}\n footer='↑↓ navigate enter select esc cancel'\n >\n {options.map((option, optionIndex) => (\n <OptionRow\n key={optionIndex}\n active={optionIndex === index}\n label={option.label}\n hint={option.hint}\n />\n ))}\n </PromptFrame>\n );\n}\n\nfunction MultiSelectPrompt<T extends string>({\n message,\n options,\n required,\n onComplete,\n}: MultiSelectPromptProps<T>) {\n const [index, setIndex] = useState(0);\n const [selected, setSelected] = useState<Set<number>>(new Set());\n const [error, setError] = useState<string | undefined>();\n\n useInput((input, key) => {\n if (key.escape || (key.ctrl && input === 'c')) {\n complete(CANCELLED, onComplete);\n return;\n }\n if (key.upArrow) {\n setIndex((current) => (current === 0 ? options.length - 1 : current - 1));\n return;\n }\n if (key.downArrow) {\n setIndex((current) => (current + 1) % options.length);\n return;\n }\n if (input === ' ') {\n setSelected((current) => {\n const next = new Set(current);\n if (next.has(index)) {\n next.delete(index);\n } else {\n next.add(index);\n }\n return next;\n });\n setError(undefined);\n return;\n }\n if (key.return) {\n if (required && selected.size === 0) {\n setError('Select at least one option');\n return;\n }\n const values = [...selected]\n .sort((a, b) => a - b)\n .map((selectedIndex) => options[selectedIndex]?.value)\n .filter((value): value is T => value != null);\n complete({ value: values, cancelled: false }, onComplete);\n }\n });\n\n return (\n <PromptFrame\n message={message}\n footer='↑↓ navigate space toggle enter select esc cancel'\n >\n {options.map((option, optionIndex) => (\n <OptionRow\n key={optionIndex}\n active={optionIndex === index}\n selected={selected.has(optionIndex)}\n label={option.label}\n hint={option.hint}\n />\n ))}\n {error ? <Text color='red'>{error}</Text> : null}\n </PromptFrame>\n );\n}\n\nfunction ConfirmPrompt({\n message,\n defaultValue,\n onComplete,\n}: ConfirmPromptProps) {\n const options = [\n { value: true, label: 'Yes' },\n { value: false, label: 'No' },\n ];\n const [index, setIndex] = useState(defaultValue ? 0 : 1);\n\n useInput((input, key) => {\n if (key.escape || (key.ctrl && input === 'c')) {\n complete(CANCELLED, onComplete);\n return;\n }\n if (key.leftArrow || key.upArrow || key.rightArrow || key.downArrow) {\n setIndex((current) => (current === 0 ? 1 : 0));\n return;\n }\n if (input.toLowerCase() === 'y') {\n complete({ value: true, cancelled: false }, onComplete);\n return;\n }\n if (input.toLowerCase() === 'n') {\n complete({ value: false, cancelled: false }, onComplete);\n return;\n }\n if (key.return) {\n complete({ value: options[index]!.value, cancelled: false }, onComplete);\n }\n });\n\n return (\n <PromptFrame\n message={message}\n footer='←→ choose y/n select enter confirm esc cancel'\n >\n {options.map((option, optionIndex) => (\n <OptionRow\n key={option.label}\n active={optionIndex === index}\n label={option.label}\n />\n ))}\n </PromptFrame>\n );\n}\n\nexport async function inkPromptText(\n options: Omit<TextPromptProps, 'onComplete'>\n) {\n return runPrompt<string>((onComplete) => (\n <TextPrompt {...options} onComplete={onComplete} />\n ));\n}\n\nexport async function inkPromptLocale(\n options: Omit<LocalePromptProps, 'onComplete'>\n) {\n return runPrompt<string>((onComplete) => (\n <LocalePrompt {...options} onComplete={onComplete} />\n ));\n}\n\nexport async function inkPromptLocaleMulti(\n options: Omit<LocaleMultiPromptProps, 'onComplete'>\n) {\n return runPrompt<string[]>((onComplete) => (\n <LocaleMultiPrompt {...options} onComplete={onComplete} />\n ));\n}\n\nexport async function inkPromptGlob(\n options: Omit<GlobPromptProps, 'onComplete'>\n) {\n return runPrompt<string>((onComplete) => (\n <GlobPrompt {...options} onComplete={onComplete} />\n ));\n}\n\nexport async function inkPromptSelect<T>(\n options: Omit<SelectPromptProps<T>, 'onComplete'>\n) {\n return runPrompt<T>((onComplete) => (\n <SelectPrompt {...options} onComplete={onComplete} />\n ));\n}\n\nexport async function inkPromptMultiSelect<T extends string>(\n options: Omit<MultiSelectPromptProps<T>, 'onComplete'>\n) {\n return runPrompt<Array<T>>((onComplete) => (\n <MultiSelectPrompt {...options} onComplete={onComplete} />\n ));\n}\n\nexport async function inkPromptConfirm(\n options: Omit<ConfirmPromptProps, 'onComplete'>\n) {\n return runPrompt<boolean>((onComplete) => (\n <ConfirmPrompt {...options} onComplete={onComplete} />\n ));\n}\n"],"mappings":"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"}
@@ -1,3 +0,0 @@
1
- import type { ReactNode } from 'react';
2
- import type { PromptResult } from './inkTypes.js';
3
- export declare function runPrompt<T>(nodeFactory: (onComplete: (result: PromptResult<T>) => void) => ReactNode): Promise<PromptResult<T>>;
@@ -1,42 +0,0 @@
1
- import { registerTerminalSessionCleanup } from "./terminalSession.js";
2
- import { render } from "ink";
3
- //#region src/console/inkSession.tsx
4
- function enterAlternateScreen() {
5
- if (!process.stdout.isTTY) return;
6
- process.stdout.write("\x1B[?1049h\x1B[H");
7
- }
8
- function exitAlternateScreen() {
9
- if (!process.stdout.isTTY) return;
10
- process.stdout.write("\x1B[?1049l");
11
- }
12
- function unmount(instance) {
13
- if (!instance) return;
14
- try {
15
- instance.unmount();
16
- } catch {}
17
- }
18
- async function runPrompt(nodeFactory) {
19
- let instance;
20
- let unregisterCleanup = () => {};
21
- try {
22
- return await new Promise((resolve) => {
23
- const node = nodeFactory(resolve);
24
- unregisterCleanup = registerTerminalSessionCleanup(() => {
25
- unmount(instance);
26
- instance = void 0;
27
- exitAlternateScreen();
28
- resolve({ cancelled: true });
29
- });
30
- enterAlternateScreen();
31
- instance = render(node);
32
- });
33
- } finally {
34
- unregisterCleanup();
35
- unmount(instance);
36
- exitAlternateScreen();
37
- }
38
- }
39
- //#endregion
40
- export { runPrompt };
41
-
42
- //# sourceMappingURL=inkSession.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"inkSession.js","names":[],"sources":["../../src/console/inkSession.tsx"],"sourcesContent":["import type { ReactNode } from 'react';\nimport type { Instance } from 'ink';\nimport { render } from 'ink';\nimport { registerTerminalSessionCleanup } from './terminalSession.js';\nimport type { PromptResult } from './inkTypes.js';\n\nfunction enterAlternateScreen() {\n if (!process.stdout.isTTY) return;\n process.stdout.write('\\x1b[?1049h\\x1b[H');\n}\n\nfunction exitAlternateScreen() {\n if (!process.stdout.isTTY) return;\n process.stdout.write('\\x1b[?1049l');\n}\n\nfunction unmount(instance: Instance | undefined) {\n if (!instance) return;\n try {\n instance.unmount();\n } catch {\n // Best-effort cleanup; ignore terminal restore failures.\n }\n}\n\nexport async function runPrompt<T>(\n nodeFactory: (onComplete: (result: PromptResult<T>) => void) => ReactNode\n) {\n let instance: Instance | undefined;\n let unregisterCleanup = () => {};\n\n try {\n return await new Promise<PromptResult<T>>((resolve) => {\n const node = nodeFactory(resolve);\n unregisterCleanup = registerTerminalSessionCleanup(() => {\n unmount(instance);\n instance = undefined;\n exitAlternateScreen();\n resolve({ cancelled: true });\n });\n enterAlternateScreen();\n instance = render(node);\n });\n } finally {\n unregisterCleanup();\n unmount(instance);\n exitAlternateScreen();\n }\n}\n"],"mappings":";;;AAMA,SAAS,uBAAuB;AAC9B,KAAI,CAAC,QAAQ,OAAO,MAAO;AAC3B,SAAQ,OAAO,MAAM,oBAAoB;;AAG3C,SAAS,sBAAsB;AAC7B,KAAI,CAAC,QAAQ,OAAO,MAAO;AAC3B,SAAQ,OAAO,MAAM,cAAc;;AAGrC,SAAS,QAAQ,UAAgC;AAC/C,KAAI,CAAC,SAAU;AACf,KAAI;AACF,WAAS,SAAS;SACZ;;AAKV,eAAsB,UACpB,aACA;CACA,IAAI;CACJ,IAAI,0BAA0B;AAE9B,KAAI;AACF,SAAO,MAAM,IAAI,SAA0B,YAAY;GACrD,MAAM,OAAO,YAAY,QAAQ;AACjC,uBAAoB,qCAAqC;AACvD,YAAQ,SAAS;AACjB,eAAW,KAAA;AACX,yBAAqB;AACrB,YAAQ,EAAE,WAAW,MAAM,CAAC;KAC5B;AACF,yBAAsB;AACtB,cAAW,OAAO,KAAK;IACvB;WACM;AACR,qBAAmB;AACnB,UAAQ,SAAS;AACjB,uBAAqB"}
@@ -1,4 +0,0 @@
1
- export declare function useTerminalSize(): {
2
- columns: number;
3
- rows: number;
4
- };
@@ -1,15 +0,0 @@
1
- import { useStdout } from "ink";
2
- //#region src/console/inkTerminal.ts
3
- const DEFAULT_COLUMNS = 80;
4
- const DEFAULT_ROWS = 24;
5
- function useTerminalSize() {
6
- const { stdout } = useStdout();
7
- return {
8
- columns: stdout.columns ?? process.stdout.columns ?? DEFAULT_COLUMNS,
9
- rows: stdout.rows ?? process.stdout.rows ?? DEFAULT_ROWS
10
- };
11
- }
12
- //#endregion
13
- export { useTerminalSize };
14
-
15
- //# sourceMappingURL=inkTerminal.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"inkTerminal.js","names":[],"sources":["../../src/console/inkTerminal.ts"],"sourcesContent":["import { useStdout } from 'ink';\n\nconst DEFAULT_COLUMNS = 80;\nconst DEFAULT_ROWS = 24;\n\nexport function useTerminalSize() {\n const { stdout } = useStdout();\n return {\n columns: stdout.columns ?? process.stdout.columns ?? DEFAULT_COLUMNS,\n rows: stdout.rows ?? process.stdout.rows ?? DEFAULT_ROWS,\n };\n}\n"],"mappings":";;AAEA,MAAM,kBAAkB;AACxB,MAAM,eAAe;AAErB,SAAgB,kBAAkB;CAChC,MAAM,EAAE,WAAW,WAAW;AAC9B,QAAO;EACL,SAAS,OAAO,WAAW,QAAQ,OAAO,WAAW;EACrD,MAAM,OAAO,QAAQ,QAAQ,OAAO,QAAQ;EAC7C"}
@@ -1 +0,0 @@
1
- export declare const INK_ACCENT_COLOR = "#61A6FA";
@@ -1,6 +0,0 @@
1
- //#region src/console/inkTheme.ts
2
- const INK_ACCENT_COLOR = "#61A6FA";
3
- //#endregion
4
- export { INK_ACCENT_COLOR };
5
-
6
- //# sourceMappingURL=inkTheme.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"inkTheme.js","names":[],"sources":["../../src/console/inkTheme.ts"],"sourcesContent":["export const INK_ACCENT_COLOR = '#61A6FA';\n"],"mappings":";AAAA,MAAa,mBAAmB"}