silvery 0.17.0 → 0.17.2

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 (171) hide show
  1. package/dist/UPNG-AVSMjiFE.mjs +5076 -0
  2. package/dist/UPNG-AVSMjiFE.mjs.map +1 -0
  3. package/dist/__vite-browser-external-2447137e-D3GdsvS_.mjs +6 -0
  4. package/dist/__vite-browser-external-2447137e-D3GdsvS_.mjs.map +1 -0
  5. package/dist/animation-C_PTO0uH.mjs +304 -0
  6. package/dist/animation-C_PTO0uH.mjs.map +1 -0
  7. package/dist/ansi-CXLE_pt1.mjs +71 -0
  8. package/dist/ansi-CXLE_pt1.mjs.map +1 -0
  9. package/dist/ansi-zmNzgkPB.d.mts +49 -0
  10. package/dist/ansi-zmNzgkPB.d.mts.map +1 -0
  11. package/dist/apng-DCWY913R.mjs +3 -0
  12. package/dist/apng-ENBAJk-H.mjs +70 -0
  13. package/dist/apng-ENBAJk-H.mjs.map +1 -0
  14. package/dist/assets/resvgjs.darwin-arm64-BtufyGW1.node +0 -0
  15. package/dist/backend-CkIkIHR-.mjs +13396 -0
  16. package/dist/backend-CkIkIHR-.mjs.map +1 -0
  17. package/dist/backends-CkvbG3js.mjs +1181 -0
  18. package/dist/backends-CkvbG3js.mjs.map +1 -0
  19. package/dist/backends-CyJqNLeK.mjs +3 -0
  20. package/dist/chunk-BSw8zbkd.mjs +37 -0
  21. package/dist/cli-B-k7Bm56.mjs +4 -0
  22. package/dist/context-QreF3UHr.mjs +64 -0
  23. package/dist/context-QreF3UHr.mjs.map +1 -0
  24. package/dist/derive-D7bFJdfU.d.mts +28 -0
  25. package/dist/derive-D7bFJdfU.d.mts.map +1 -0
  26. package/dist/devtools-CscuKaDK.mjs +89 -0
  27. package/dist/devtools-CscuKaDK.mjs.map +1 -0
  28. package/dist/devtools-D4oGc6LY.mjs +2 -0
  29. package/dist/eta-DLiVPaSD.mjs +110 -0
  30. package/dist/eta-DLiVPaSD.mjs.map +1 -0
  31. package/dist/flexily-zero-adapter-DmG4Ge8t.mjs +3376 -0
  32. package/dist/flexily-zero-adapter-DmG4Ge8t.mjs.map +1 -0
  33. package/dist/flexily-zero-adapter-GHwEW11s.mjs +2 -0
  34. package/dist/gif-BaJNREpP.mjs +3 -0
  35. package/dist/gif-Bp6fIyN3.mjs +73 -0
  36. package/dist/gif-Bp6fIyN3.mjs.map +1 -0
  37. package/dist/gifenc-GiVCZ9-3.mjs +730 -0
  38. package/dist/gifenc-GiVCZ9-3.mjs.map +1 -0
  39. package/dist/image-Dx7gYjkq.mjs +346 -0
  40. package/dist/image-Dx7gYjkq.mjs.map +1 -0
  41. package/dist/index-CBcSpGSM.d.mts +3416 -0
  42. package/dist/index-CBcSpGSM.d.mts.map +1 -0
  43. package/dist/index-DCVL3jHo.d.mts +634 -0
  44. package/dist/index-DCVL3jHo.d.mts.map +1 -0
  45. package/dist/index-p-wBs_wH.d.mts +175 -0
  46. package/dist/index-p-wBs_wH.d.mts.map +1 -0
  47. package/dist/index.d.mts +7296 -0
  48. package/dist/index.d.mts.map +1 -0
  49. package/dist/index.mjs +9399 -0
  50. package/dist/index.mjs.map +1 -0
  51. package/dist/key-mapping-BsUHe_nk.mjs +3 -0
  52. package/dist/key-mapping-DsyfLEdC.mjs +132 -0
  53. package/dist/key-mapping-DsyfLEdC.mjs.map +1 -0
  54. package/dist/layout-engine-B3dsnVLU.mjs +50 -0
  55. package/dist/layout-engine-B3dsnVLU.mjs.map +1 -0
  56. package/dist/layout-engine-D_lSR4i9.mjs +2 -0
  57. package/dist/multi-progress-C0-rkn86.d.mts +180 -0
  58. package/dist/multi-progress-C0-rkn86.d.mts.map +1 -0
  59. package/dist/multi-progress-CQVB9lES.mjs +219 -0
  60. package/dist/multi-progress-CQVB9lES.mjs.map +1 -0
  61. package/dist/node-Dedx-6xF.mjs +1085 -0
  62. package/dist/node-Dedx-6xF.mjs.map +1 -0
  63. package/dist/pipeline-DDOPrjuY.mjs +4387 -0
  64. package/dist/pipeline-DDOPrjuY.mjs.map +1 -0
  65. package/dist/progress-bar-COPSBlT9.mjs +155 -0
  66. package/dist/progress-bar-COPSBlT9.mjs.map +1 -0
  67. package/dist/reconciler-2lp5VXK7.mjs +16506 -0
  68. package/dist/reconciler-2lp5VXK7.mjs.map +1 -0
  69. package/dist/render-string-BXvxTg5P.mjs +201 -0
  70. package/dist/render-string-BXvxTg5P.mjs.map +1 -0
  71. package/dist/render-string-hvfpVtoP.mjs +2 -0
  72. package/dist/resvg-js-V6oMi8CY.mjs +203 -0
  73. package/dist/resvg-js-V6oMi8CY.mjs.map +1 -0
  74. package/dist/runtime-BjDHNTxJ.mjs +8723 -0
  75. package/dist/runtime-BjDHNTxJ.mjs.map +1 -0
  76. package/dist/runtime.d.mts +2 -0
  77. package/dist/runtime.mjs +3 -0
  78. package/dist/spinner-Cgej6Vnb.d.mts +127 -0
  79. package/dist/spinner-Cgej6Vnb.d.mts.map +1 -0
  80. package/dist/spinner-DSByknyx.mjs +298 -0
  81. package/dist/spinner-DSByknyx.mjs.map +1 -0
  82. package/dist/src-9B5k0JmY.mjs +1629 -0
  83. package/dist/src-9B5k0JmY.mjs.map +1 -0
  84. package/dist/src-C9f3hiVG.mjs +3620 -0
  85. package/dist/src-C9f3hiVG.mjs.map +1 -0
  86. package/dist/src-fJVbhdn-.mjs +816 -0
  87. package/dist/src-fJVbhdn-.mjs.map +1 -0
  88. package/dist/theme.d.mts +115 -0
  89. package/dist/theme.d.mts.map +1 -0
  90. package/dist/theme.mjs +8 -0
  91. package/dist/theme.mjs.map +1 -0
  92. package/dist/types-Bhj5QkIQ.mjs +13 -0
  93. package/dist/types-Bhj5QkIQ.mjs.map +1 -0
  94. package/dist/types-CDgkE-Rw.d.mts +241 -0
  95. package/dist/types-CDgkE-Rw.d.mts.map +1 -0
  96. package/dist/ui/animation.d.mts +2 -0
  97. package/dist/ui/animation.mjs +2 -0
  98. package/dist/ui/ansi.d.mts +2 -0
  99. package/dist/ui/ansi.mjs +2 -0
  100. package/dist/ui/cli.d.mts +5 -0
  101. package/dist/ui/cli.mjs +7 -0
  102. package/dist/ui/display.d.mts +35 -0
  103. package/dist/ui/display.d.mts.map +1 -0
  104. package/dist/ui/display.mjs +123 -0
  105. package/dist/ui/display.mjs.map +1 -0
  106. package/dist/ui/image.d.mts +2 -0
  107. package/dist/ui/image.mjs +2 -0
  108. package/dist/ui/input.d.mts +184 -0
  109. package/dist/ui/input.d.mts.map +1 -0
  110. package/dist/ui/input.mjs +285 -0
  111. package/dist/ui/input.mjs.map +1 -0
  112. package/dist/ui/progress.d.mts +249 -0
  113. package/dist/ui/progress.d.mts.map +1 -0
  114. package/dist/ui/progress.mjs +858 -0
  115. package/dist/ui/progress.mjs.map +1 -0
  116. package/dist/ui/react.d.mts +280 -0
  117. package/dist/ui/react.d.mts.map +1 -0
  118. package/dist/ui/react.mjs +413 -0
  119. package/dist/ui/react.mjs.map +1 -0
  120. package/dist/ui/utils.d.mts +86 -0
  121. package/dist/ui/utils.d.mts.map +1 -0
  122. package/dist/ui/utils.mjs +2 -0
  123. package/dist/ui/wrappers.d.mts +3 -0
  124. package/dist/ui/wrappers.mjs +2 -0
  125. package/dist/ui.d.mts +6 -0
  126. package/dist/ui.mjs +7 -0
  127. package/dist/useLatest-BMIYXd6e.d.mts +154 -0
  128. package/dist/useLatest-BMIYXd6e.d.mts.map +1 -0
  129. package/dist/useLayout-BG2cGl15.mjs +139 -0
  130. package/dist/useLayout-BG2cGl15.mjs.map +1 -0
  131. package/dist/with-text-input-CmHf_9d6.d.mts +284 -0
  132. package/dist/with-text-input-CmHf_9d6.d.mts.map +1 -0
  133. package/dist/wrapper-Dqh0zi2W.mjs +3527 -0
  134. package/dist/wrapper-Dqh0zi2W.mjs.map +1 -0
  135. package/dist/wrappers-hhL8EQ_n.mjs +810 -0
  136. package/dist/wrappers-hhL8EQ_n.mjs.map +1 -0
  137. package/dist/yoga-adapter-BJ9SOhTY.mjs +245 -0
  138. package/dist/yoga-adapter-BJ9SOhTY.mjs.map +1 -0
  139. package/dist/yoga-adapter-Daq6-dw1.mjs +2 -0
  140. package/package.json +48 -75
  141. package/CHANGELOG.md +0 -319
  142. package/dist/chalk.js +0 -4
  143. package/dist/index.js +0 -270
  144. package/dist/ink.js +0 -142
  145. package/dist/runtime.js +0 -135
  146. package/dist/theme.js +0 -7
  147. package/dist/ui/animation.js +0 -3
  148. package/dist/ui/ansi.js +0 -3
  149. package/dist/ui/cli.js +0 -9
  150. package/dist/ui/display.js +0 -4
  151. package/dist/ui/image.js +0 -4
  152. package/dist/ui/input.js +0 -3
  153. package/dist/ui/progress.js +0 -9
  154. package/dist/ui/react.js +0 -4
  155. package/dist/ui/utils.js +0 -3
  156. package/dist/ui/wrappers.js +0 -15
  157. package/dist/ui.js +0 -18
  158. package/src/index.ts +0 -73
  159. package/src/runtime.ts +0 -4
  160. package/src/theme.ts +0 -4
  161. package/src/ui/animation.ts +0 -2
  162. package/src/ui/ansi.ts +0 -2
  163. package/src/ui/cli.ts +0 -3
  164. package/src/ui/display.ts +0 -2
  165. package/src/ui/image.ts +0 -2
  166. package/src/ui/input.ts +0 -2
  167. package/src/ui/progress.ts +0 -2
  168. package/src/ui/react.ts +0 -2
  169. package/src/ui/utils.ts +0 -2
  170. package/src/ui/wrappers.ts +0 -2
  171. package/src/ui.ts +0 -4
@@ -0,0 +1,2 @@
1
+ import { $ as defaultInit, $t as RuntimeOptions, A as DiffMode, B as filter, C as resumeTerminalState, D as usePasteCallback, E as PasteCallback, Et as useInput, F as layout, Ft as TermEvents, G as merge, Gt as Event, H as fromArray, Hn as parseKey, I as layoutSync, It as TermProvider, J as throttle, Jt as Provider, K as take, Kt as EventData, L as batch, Ln as emptyKey, Lt as TermProviderOptions, M as render, N as LayoutOptions, Nn as InputHandler, O as createRuntime, P as ensureLayoutEngine, Pn as Key, Q as createStore, Qt as Runtime, R as concat, Rt as TermState, S as restoreTerminalState, T as run, Tt as UseInputOptions, U as fromArrayWithDelay, Ut as Buffer, V as filterMap, W as map, Wt as Dims, X as StoreApi, Xt as ProviderEventKey, Y as zip, Yt as ProviderEvent, Z as StoreConfig, Zt as RenderTarget, _ as CTRL_Z, a as AppDefinition, b as captureTerminalState, c as AppRunner, d as EventHandlers, et as silveryUpdate, f as StoreContext, g as CTRL_C, h as useAppShallow, i as createTick, j as diff, k as createBuffer, l as EventHandler, m as useApp, n as createFrameTick, o as AppHandle, p as createApp, q as takeUntil, qt as NamespacedEvent, r as createSecondTick, s as AppRunOptions, t as createAdaptiveTick, tt as withFocusManagement, u as EventHandlerContext, v as TerminalLifecycleOptions, w as RunOptions, wt as useExit, x as performSuspend, y as TerminalState, z as debounce, zt as createTermProvider } from "./index-CBcSpGSM.mjs";
2
+ export { AppDefinition, AppHandle, AppRunOptions, AppRunner, Buffer, CTRL_C, CTRL_Z, DiffMode, Dims, Event, EventData, EventHandler, EventHandlerContext, EventHandlers, InputHandler, Key, LayoutOptions, NamespacedEvent, PasteCallback as PasteHandler, Provider, ProviderEvent, ProviderEventKey, RenderTarget, RunOptions, Runtime, RuntimeOptions, StoreApi, StoreConfig, StoreContext, TermEvents, TermProvider, TermProviderOptions, TermState, TerminalLifecycleOptions, TerminalState, UseInputOptions, batch, captureTerminalState, concat, createAdaptiveTick, createApp, createBuffer, createFrameTick, createRuntime, createSecondTick, createStore, createTermProvider, createTick, debounce, defaultInit, diff, emptyKey, ensureLayoutEngine, filter, filterMap, fromArray, fromArrayWithDelay, layout, layoutSync, map, merge, parseKey, performSuspend, render, restoreTerminalState, resumeTerminalState, run, silveryUpdate, take, takeUntil, throttle, useApp, useAppShallow, useExit, useInput, usePasteCallback as usePaste, withFocusManagement, zip };
@@ -0,0 +1,3 @@
1
+ import { A as fromArrayWithDelay, B as withFocusManagement, C as layoutSync, D as filter, E as debounce, F as throttle, I as zip, L as createStore, M as merge, N as take, O as filterMap, P as takeUntil, R as defaultInit, S as layout, T as concat, Yn as useInput, _ as createRuntime, a as run, b as render, c as createApp, d as CTRL_C, f as CTRL_Z, fn as useExit, g as resumeTerminalState, h as restoreTerminalState, i as createTick, j as map, k as fromArray, l as useApp, m as performSuspend, n as createFrameTick, o as usePasteCallback, p as captureTerminalState, r as createSecondTick, s as StoreContext, t as createAdaptiveTick, u as useAppShallow, v as createBuffer, w as batch, x as ensureLayoutEngine, y as diff, z as silveryUpdate } from "./runtime-BjDHNTxJ.mjs";
2
+ import { C as createTermProvider, Kt as parseKey, Rt as emptyKey } from "./reconciler-2lp5VXK7.mjs";
3
+ export { CTRL_C, CTRL_Z, StoreContext, batch, captureTerminalState, concat, createAdaptiveTick, createApp, createBuffer, createFrameTick, createRuntime, createSecondTick, createStore, createTermProvider, createTick, debounce, defaultInit, diff, emptyKey, ensureLayoutEngine, filter, filterMap, fromArray, fromArrayWithDelay, layout, layoutSync, map, merge, parseKey, performSuspend, render, restoreTerminalState, resumeTerminalState, run, silveryUpdate, take, takeUntil, throttle, useApp, useAppShallow, useExit, useInput, usePasteCallback as usePaste, withFocusManagement, zip };
@@ -0,0 +1,127 @@
1
+ import { c as SpinnerOptions, u as SpinnerStyle } from "./types-CDgkE-Rw.mjs";
2
+
3
+ //#region packages/ag-react/src/ui/cli/spinner.d.ts
4
+ /** Spinner animation frames by style */
5
+ declare const SPINNER_FRAMES: Record<SpinnerStyle, string[]>;
6
+ /**
7
+ * Spinner class for CLI progress indication
8
+ *
9
+ * @example
10
+ * ```ts
11
+ * const spinner = new Spinner("Loading...");
12
+ * spinner.start();
13
+ * await doWork();
14
+ * spinner.succeed("Done!");
15
+ * ```
16
+ */
17
+ declare class Spinner {
18
+ private text;
19
+ private style;
20
+ private color;
21
+ private stream;
22
+ private hideCursor;
23
+ private interval;
24
+ private frameIndex;
25
+ private timer;
26
+ private isSpinning;
27
+ constructor(textOrOptions?: string | SpinnerOptions);
28
+ /** Get current spinner text */
29
+ get currentText(): string;
30
+ /** Set spinner text (updates immediately if spinning) */
31
+ set currentText(value: string);
32
+ /** Check if spinner is currently active */
33
+ get spinning(): boolean;
34
+ /**
35
+ * Start the spinner animation
36
+ */
37
+ start(text?: string): this;
38
+ /**
39
+ * Stop the spinner
40
+ */
41
+ stop(): this;
42
+ /**
43
+ * Stop with success message (green checkmark)
44
+ */
45
+ succeed(text?: string): this;
46
+ /**
47
+ * Stop with failure message (red X)
48
+ */
49
+ fail(text?: string): this;
50
+ /**
51
+ * Stop with warning message (yellow warning)
52
+ */
53
+ warn(text?: string): this;
54
+ /**
55
+ * Stop with info message (blue info)
56
+ */
57
+ info(text?: string): this;
58
+ /**
59
+ * Clear the spinner line
60
+ */
61
+ clear(): this;
62
+ private render;
63
+ private stopWithSymbol;
64
+ /**
65
+ * Dispose the spinner (calls stop)
66
+ */
67
+ [Symbol.dispose](): void;
68
+ /**
69
+ * Static helper to quickly start a spinner
70
+ * Returns a stop function
71
+ *
72
+ * @example
73
+ * ```ts
74
+ * const stop = Spinner.start("Loading...");
75
+ * await doWork();
76
+ * stop();
77
+ * ```
78
+ */
79
+ static start(textOrOptions?: string | SpinnerOptions): () => void;
80
+ }
81
+ /**
82
+ * Callable spinner interface - call with text to show/update
83
+ *
84
+ * @example
85
+ * ```ts
86
+ * {
87
+ * using spinner = createSpinner({ style: "dots" });
88
+ * spinner("Loading..."); // Shows spinner with text
89
+ * spinner("Still loading..."); // Updates text
90
+ * } // Auto-stops via Symbol.dispose
91
+ * ```
92
+ */
93
+ interface CallableSpinner extends Disposable {
94
+ /** Call with text to show/update the spinner */
95
+ (text: string): void;
96
+ /** Stop the spinner */
97
+ stop(): void;
98
+ /** Stop with success message (green checkmark) */
99
+ succeed(text?: string): void;
100
+ /** Stop with failure message (red X) */
101
+ fail(text?: string): void;
102
+ /** Stop with warning message (yellow warning) */
103
+ warn(text?: string): void;
104
+ /** Stop with info message (blue info) */
105
+ info(text?: string): void;
106
+ }
107
+ /**
108
+ * Create a callable, disposable spinner
109
+ *
110
+ * The spinner is lazy - it won't show anything until you call it with text.
111
+ * Use with `using` for automatic cleanup:
112
+ *
113
+ * @example
114
+ * ```ts
115
+ * {
116
+ * using spinner = createSpinner({ style: "dots" });
117
+ * // Nothing visible yet
118
+ *
119
+ * spinner("Loading repo..."); // Now shows spinner
120
+ * spinner("Applying events..."); // Updates text
121
+ * } // Auto-stops via Symbol.dispose
122
+ * ```
123
+ */
124
+ declare function createSpinner(options?: SpinnerOptions): CallableSpinner;
125
+ //#endregion
126
+ export { createSpinner as i, SPINNER_FRAMES as n, Spinner as r, CallableSpinner as t };
127
+ //# sourceMappingURL=spinner-Cgej6Vnb.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spinner-Cgej6Vnb.d.mts","names":[],"sources":["../packages/ag-react/src/ui/cli/spinner.ts"],"mappings":";;;;cASa,cAAA,EAAgB,MAAA,CAAO,YAAA;AA4BpC;;;;;;;;;;;AAAA,cAAa,OAAA;EAAA,QACH,IAAA;EAAA,QACA,KAAA;EAAA,QACA,KAAA;EAAA,QACA,MAAA;EAAA,QACA,UAAA;EAAA,QACA,QAAA;EAAA,QAEA,UAAA;EAAA,QACA,KAAA;EAAA,QACA,UAAA;cAEI,aAAA,YAAyB,cAAA;EAiBrB;EAAA,IALZ,WAAA,CAAA;EAoBJ;EAAA,IAfI,WAAA,CAAY,KAAA;EA2ChB;EAAA,IAnCI,QAAA,CAAA;EA2DI;;;EApDR,KAAA,CAAM,IAAA;EAkED;;;EAtCL,IAAA,CAAA;EA2DQ;;;EAnCR,OAAA,CAAQ,IAAA;EAsED;;;EA/DP,IAAA,CAAK,IAAA;EA+D+C;AAmBtD;;EA3EE,IAAA,CAAK,IAAA;EA2E4C;;;EApEjD,IAAA,CAAK,IAAA;EA0EL;;;EAnEA,KAAA,CAAA;EAAA,QAOQ,MAAA;EAAA,QAWA,cAAA;EAuDR;;;EAAA,CA9CC,MAAA,CAAO,OAAA;EAkEM;;;;;;;;;;;EAAA,OAnDP,KAAA,CAAM,aAAA,YAAyB,cAAA;AAAA;;;;;;;;;;;;;UAmBvB,eAAA,SAAwB,UAAA;;GAEtC,IAAA;;EAED,IAAA;;EAEA,OAAA,CAAQ,IAAA;;EAER,IAAA,CAAK,IAAA;;EAEL,IAAA,CAAK,IAAA;;EAEL,IAAA,CAAK,IAAA;AAAA;;;;;;;;;;;;;;;;;;iBAoBS,aAAA,CAAc,OAAA,GAAU,cAAA,GAAiB,eAAA"}
@@ -0,0 +1,298 @@
1
+ import { G as detectColor, S as createStyle, t as init_src } from "./src-9B5k0JmY.mjs";
2
+ import { f as isTTY, i as CURSOR_HIDE, m as write, s as CURSOR_SHOW } from "./ansi-CXLE_pt1.mjs";
3
+ //#region packages/ink/src/chalk.ts
4
+ init_src();
5
+ function toChalkLevel(cl) {
6
+ if (cl === null) return 0;
7
+ if (cl === "basic") return 1;
8
+ if (cl === "256") return 2;
9
+ return 3;
10
+ }
11
+ const detectedColor = typeof process !== "undefined" && process.stdout ? detectColor(process.stdout) : null;
12
+ /**
13
+ * Default chalk instance — drop-in replacement for `import chalk from 'chalk'`.
14
+ *
15
+ * Supports the full chainable API: `chalk.bold.red('error')`, `chalk.hex('#ff0')('hi')`, etc.
16
+ * Also supports mutable `chalk.level` for chalk compat (0=none, 1=basic, 2=256, 3=truecolor).
17
+ */
18
+ const chalk = createStyle({ level: detectedColor });
19
+ toChalkLevel(detectedColor);
20
+ (() => {
21
+ if (!process?.stderr) return false;
22
+ const level = toChalkLevel(detectColor(process.stderr));
23
+ return level === 0 ? false : { level };
24
+ })();
25
+ const foregroundColorNames = [
26
+ "black",
27
+ "red",
28
+ "green",
29
+ "yellow",
30
+ "blue",
31
+ "magenta",
32
+ "cyan",
33
+ "white",
34
+ "gray",
35
+ "grey",
36
+ "blackBright",
37
+ "redBright",
38
+ "greenBright",
39
+ "yellowBright",
40
+ "blueBright",
41
+ "magentaBright",
42
+ "cyanBright",
43
+ "whiteBright"
44
+ ];
45
+ const backgroundColorNames = [
46
+ "bgBlack",
47
+ "bgRed",
48
+ "bgGreen",
49
+ "bgYellow",
50
+ "bgBlue",
51
+ "bgMagenta",
52
+ "bgCyan",
53
+ "bgWhite",
54
+ "bgGray",
55
+ "bgGrey",
56
+ "bgBlackBright",
57
+ "bgRedBright",
58
+ "bgGreenBright",
59
+ "bgYellowBright",
60
+ "bgBlueBright",
61
+ "bgMagentaBright",
62
+ "bgCyanBright",
63
+ "bgWhiteBright"
64
+ ];
65
+ [...foregroundColorNames, ...backgroundColorNames];
66
+ //#endregion
67
+ //#region packages/ag-react/src/ui/cli/spinner.ts
68
+ /**
69
+ * CLI Spinner - Animated indeterminate progress indicator
70
+ */
71
+ /** Spinner animation frames by style */
72
+ const SPINNER_FRAMES = {
73
+ dots: [
74
+ "⠋",
75
+ "⠙",
76
+ "⠹",
77
+ "⠸",
78
+ "⠼",
79
+ "⠴",
80
+ "⠦",
81
+ "⠧",
82
+ "⠇",
83
+ "⠏"
84
+ ],
85
+ line: [
86
+ "-",
87
+ "\\",
88
+ "|",
89
+ "/"
90
+ ],
91
+ arc: [
92
+ "◜",
93
+ "◠",
94
+ "◝",
95
+ "◞",
96
+ "◡",
97
+ "◟"
98
+ ],
99
+ bounce: [
100
+ "⠁",
101
+ "⠂",
102
+ "⠄",
103
+ "⠂"
104
+ ],
105
+ pulse: [
106
+ "█",
107
+ "▓",
108
+ "▒",
109
+ "░",
110
+ "▒",
111
+ "▓"
112
+ ]
113
+ };
114
+ /** Default intervals for each style (ms) */
115
+ const SPINNER_INTERVALS = {
116
+ dots: 80,
117
+ line: 120,
118
+ arc: 100,
119
+ bounce: 120,
120
+ pulse: 100
121
+ };
122
+ /**
123
+ * Spinner class for CLI progress indication
124
+ *
125
+ * @example
126
+ * ```ts
127
+ * const spinner = new Spinner("Loading...");
128
+ * spinner.start();
129
+ * await doWork();
130
+ * spinner.succeed("Done!");
131
+ * ```
132
+ */
133
+ var Spinner = class Spinner {
134
+ text;
135
+ style;
136
+ color;
137
+ stream;
138
+ hideCursor;
139
+ interval;
140
+ frameIndex = 0;
141
+ timer = null;
142
+ isSpinning = false;
143
+ constructor(textOrOptions) {
144
+ const options = typeof textOrOptions === "string" ? { text: textOrOptions } : textOrOptions ?? {};
145
+ this.text = options.text ?? "";
146
+ this.style = options.style ?? "dots";
147
+ this.color = options.color ?? "cyan";
148
+ this.stream = options.stream ?? process.stdout;
149
+ this.hideCursor = options.hideCursor ?? true;
150
+ this.interval = options.interval ?? SPINNER_INTERVALS[this.style];
151
+ }
152
+ /** Get current spinner text */
153
+ get currentText() {
154
+ return this.text;
155
+ }
156
+ /** Set spinner text (updates immediately if spinning) */
157
+ set currentText(value) {
158
+ this.text = value;
159
+ if (this.isSpinning) this.render();
160
+ }
161
+ /** Check if spinner is currently active */
162
+ get spinning() {
163
+ return this.isSpinning;
164
+ }
165
+ /**
166
+ * Start the spinner animation
167
+ */
168
+ start(text) {
169
+ if (text !== void 0) this.text = text;
170
+ if (this.isSpinning) return this;
171
+ this.isSpinning = true;
172
+ this.frameIndex = 0;
173
+ if (this.hideCursor && isTTY(this.stream)) write(CURSOR_HIDE, this.stream);
174
+ this.render();
175
+ this.timer = setInterval(() => {
176
+ this.frameIndex = (this.frameIndex + 1) % SPINNER_FRAMES[this.style].length;
177
+ this.render();
178
+ }, this.interval);
179
+ return this;
180
+ }
181
+ /**
182
+ * Stop the spinner
183
+ */
184
+ stop() {
185
+ if (!this.isSpinning) return this;
186
+ this.isSpinning = false;
187
+ if (this.timer) {
188
+ clearInterval(this.timer);
189
+ this.timer = null;
190
+ }
191
+ this.clear();
192
+ if (this.hideCursor && isTTY(this.stream)) write(CURSOR_SHOW, this.stream);
193
+ return this;
194
+ }
195
+ /**
196
+ * Stop with success message (green checkmark)
197
+ */
198
+ succeed(text) {
199
+ return this.stopWithSymbol(chalk.green("✔"), text ?? this.text);
200
+ }
201
+ /**
202
+ * Stop with failure message (red X)
203
+ */
204
+ fail(text) {
205
+ return this.stopWithSymbol(chalk.red("✖"), text ?? this.text);
206
+ }
207
+ /**
208
+ * Stop with warning message (yellow warning)
209
+ */
210
+ warn(text) {
211
+ return this.stopWithSymbol(chalk.yellow("⚠"), text ?? this.text);
212
+ }
213
+ /**
214
+ * Stop with info message (blue info)
215
+ */
216
+ info(text) {
217
+ return this.stopWithSymbol(chalk.blue("ℹ"), text ?? this.text);
218
+ }
219
+ /**
220
+ * Clear the spinner line
221
+ */
222
+ clear() {
223
+ if (isTTY(this.stream)) write(`
224
+ return this;
225
+ }
226
+ render() {
227
+ const frame = SPINNER_FRAMES[this.style][this.frameIndex];
228
+ const colorFn = chalk[this.color];
229
+ const coloredFrame = colorFn ? colorFn(frame) : frame;
230
+ const output = this.text ? `${coloredFrame} ${this.text}` : coloredFrame;
231
+ if (isTTY(this.stream)) write(`
232
+ }
233
+ stopWithSymbol(symbol, text) {
234
+ this.stop();
235
+ write(`${symbol} ${text}\n`, this.stream);
236
+ return this;
237
+ }
238
+ /**
239
+ * Dispose the spinner (calls stop)
240
+ */
241
+ [Symbol.dispose]() {
242
+ this.stop();
243
+ }
244
+ /**
245
+ * Static helper to quickly start a spinner
246
+ * Returns a stop function
247
+ *
248
+ * @example
249
+ * ```ts
250
+ * const stop = Spinner.start("Loading...");
251
+ * await doWork();
252
+ * stop();
253
+ * ```
254
+ */
255
+ static start(textOrOptions) {
256
+ const spinner = new Spinner(textOrOptions);
257
+ spinner.start();
258
+ return () => spinner.stop();
259
+ }
260
+ };
261
+ /**
262
+ * Create a callable, disposable spinner
263
+ *
264
+ * The spinner is lazy - it won't show anything until you call it with text.
265
+ * Use with `using` for automatic cleanup:
266
+ *
267
+ * @example
268
+ * ```ts
269
+ * {
270
+ * using spinner = createSpinner({ style: "dots" });
271
+ * // Nothing visible yet
272
+ *
273
+ * spinner("Loading repo..."); // Now shows spinner
274
+ * spinner("Applying events..."); // Updates text
275
+ * } // Auto-stops via Symbol.dispose
276
+ * ```
277
+ */
278
+ function createSpinner(options) {
279
+ const spinner = new Spinner({
280
+ ...options,
281
+ text: ""
282
+ });
283
+ const callable = ((text) => {
284
+ if (!spinner.spinning) spinner.start(text);
285
+ else spinner.currentText = text;
286
+ });
287
+ callable.stop = () => spinner.stop();
288
+ callable.succeed = (text) => spinner.succeed(text);
289
+ callable.fail = (text) => spinner.fail(text);
290
+ callable.warn = (text) => spinner.warn(text);
291
+ callable.info = (text) => spinner.info(text);
292
+ callable[Symbol.dispose] = () => spinner.stop();
293
+ return callable;
294
+ }
295
+ //#endregion
296
+ export { chalk as a, createSpinner as i, SPINNER_INTERVALS as n, Spinner as r, SPINNER_FRAMES as t };
297
+
298
+ //# sourceMappingURL=spinner-DSByknyx.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spinner-DSByknyx.mjs","names":[],"sources":["../packages/ink/src/chalk.ts","../packages/ag-react/src/ui/cli/spinner.ts"],"sourcesContent":["/**\n * silvery/chalk — Drop-in chalk replacement powered by @silvery/ansi.\n *\n * ```ts\n * // Before:\n * import chalk from 'chalk'\n *\n * // After:\n * import chalk from 'silvery/chalk'\n * ```\n *\n * The default export is a chainable styling function with chalk-compatible API.\n * Under the hood it uses @silvery/ansi — no chalk dependency.\n *\n * @packageDocumentation\n */\n\nimport { createStyle, detectColor, type Style, type ColorLevel } from \"@silvery/ansi\"\n\n// =============================================================================\n// Color level conversion (chalk uses 0-3, silvery uses string|null)\n// =============================================================================\n\ntype ChalkLevel = 0 | 1 | 2 | 3\n\nfunction toChalkLevel(cl: ColorLevel | null): ChalkLevel {\n if (cl === null) return 0\n if (cl === \"basic\") return 1\n if (cl === \"256\") return 2\n return 3 // truecolor\n}\n\nfunction fromChalkLevel(level: ChalkLevel): ColorLevel | null {\n if (level === 0) return null\n if (level === 1) return \"basic\"\n if (level === 2) return \"256\"\n return \"truecolor\"\n}\n\n// =============================================================================\n// Default instance (auto-detected)\n// =============================================================================\n\nconst detectedColor = typeof process !== \"undefined\" && process.stdout ? detectColor(process.stdout) : null\n\n/**\n * Default chalk instance — drop-in replacement for `import chalk from 'chalk'`.\n *\n * Supports the full chainable API: `chalk.bold.red('error')`, `chalk.hex('#ff0')('hi')`, etc.\n * Also supports mutable `chalk.level` for chalk compat (0=none, 1=basic, 2=256, 3=truecolor).\n */\nconst chalk: Style = createStyle({ level: detectedColor })\nexport default chalk\n\n// =============================================================================\n// Named exports (chalk 5.x compatibility)\n// =============================================================================\n\n/**\n * Chalk constructor — creates a new style instance with a specific level.\n * Returns a callable Style (the constructor return overrides `this`).\n *\n * ```ts\n * const instance = new Chalk({ level: 3 })\n * console.log(instance.red('error'))\n * instance.level = 0 // disable colors\n * ```\n */\n// eslint-disable-next-line @typescript-eslint/no-empty-interface\nexport interface Chalk extends Style {}\nexport class Chalk {\n constructor(options?: { level?: ChalkLevel }) {\n // chalk compat: validate level is 0-3\n if (options?.level !== undefined) {\n const lvl = options.level\n if (typeof lvl !== \"number\" || !Number.isInteger(lvl) || lvl < 0 || lvl > 3) {\n throw new Error(\"The `level` option should be an integer from 0 to 3\")\n }\n }\n // Returning an object from a constructor overrides `this` — chalk compat pattern\n return createStyle({\n level: fromChalkLevel(options?.level ?? toChalkLevel(detectedColor)),\n }) as any\n }\n}\n\nexport type ChalkInstance = Style\n\n/**\n * Color support detection for stdout.\n * Returns false if no color, or an object with the chalk level.\n */\nconst detectedLevel = toChalkLevel(detectedColor)\nexport const supportsColor: false | { level: ChalkLevel } = detectedLevel === 0 ? false : { level: detectedLevel }\n\n/**\n * Color support detection for stderr.\n */\nexport const supportsColorStderr: false | { level: ChalkLevel } = (() => {\n if (!process?.stderr) return false\n const level = toChalkLevel(detectColor(process.stderr))\n return level === 0 ? false : { level }\n})()\n\n// =============================================================================\n// Chalk name lists (for programmatic access)\n// =============================================================================\n\nexport const modifierNames = [\n \"reset\",\n \"bold\",\n \"dim\",\n \"italic\",\n \"underline\",\n \"overline\",\n \"inverse\",\n \"hidden\",\n \"strikethrough\",\n \"visible\",\n] as const\n\nexport const foregroundColorNames = [\n \"black\",\n \"red\",\n \"green\",\n \"yellow\",\n \"blue\",\n \"magenta\",\n \"cyan\",\n \"white\",\n \"gray\",\n \"grey\",\n \"blackBright\",\n \"redBright\",\n \"greenBright\",\n \"yellowBright\",\n \"blueBright\",\n \"magentaBright\",\n \"cyanBright\",\n \"whiteBright\",\n] as const\n\nexport const backgroundColorNames = [\n \"bgBlack\",\n \"bgRed\",\n \"bgGreen\",\n \"bgYellow\",\n \"bgBlue\",\n \"bgMagenta\",\n \"bgCyan\",\n \"bgWhite\",\n \"bgGray\",\n \"bgGrey\",\n \"bgBlackBright\",\n \"bgRedBright\",\n \"bgGreenBright\",\n \"bgYellowBright\",\n \"bgBlueBright\",\n \"bgMagentaBright\",\n \"bgCyanBright\",\n \"bgWhiteBright\",\n] as const\n\nexport const colorNames = [...foregroundColorNames, ...backgroundColorNames] as const\n\n// Re-export detection utilities that chalk users often need\nexport { detectColor, toChalkLevel, fromChalkLevel }\nexport type { ColorLevel, ChalkLevel }\n","/**\n * CLI Spinner - Animated indeterminate progress indicator\n */\n\nimport chalk from \"@silvery/ink/chalk\"\nimport type { SpinnerOptions, SpinnerStyle } from \"../types.js\"\nimport { CURSOR_HIDE, CURSOR_SHOW, CURSOR_TO_START, CLEAR_LINE_END, write, isTTY } from \"./ansi\"\n\n/** Spinner animation frames by style */\nexport const SPINNER_FRAMES: Record<SpinnerStyle, string[]> = {\n dots: [\"⠋\", \"⠙\", \"⠹\", \"⠸\", \"⠼\", \"⠴\", \"⠦\", \"⠧\", \"⠇\", \"⠏\"],\n line: [\"-\", \"\\\\\", \"|\", \"/\"],\n arc: [\"◜\", \"◠\", \"◝\", \"◞\", \"◡\", \"◟\"],\n bounce: [\"⠁\", \"⠂\", \"⠄\", \"⠂\"],\n pulse: [\"█\", \"▓\", \"▒\", \"░\", \"▒\", \"▓\"],\n}\n\n/** Default intervals for each style (ms) */\nexport const SPINNER_INTERVALS: Record<SpinnerStyle, number> = {\n dots: 80,\n line: 120,\n arc: 100,\n bounce: 120,\n pulse: 100,\n}\n\n/**\n * Spinner class for CLI progress indication\n *\n * @example\n * ```ts\n * const spinner = new Spinner(\"Loading...\");\n * spinner.start();\n * await doWork();\n * spinner.succeed(\"Done!\");\n * ```\n */\nexport class Spinner {\n private text: string\n private style: SpinnerStyle\n private color: string\n private stream: NodeJS.WriteStream\n private hideCursor: boolean\n private interval: number\n\n private frameIndex = 0\n private timer: ReturnType<typeof setInterval> | null = null\n private isSpinning = false\n\n constructor(textOrOptions?: string | SpinnerOptions) {\n const options: SpinnerOptions = typeof textOrOptions === \"string\" ? { text: textOrOptions } : (textOrOptions ?? {})\n\n this.text = options.text ?? \"\"\n this.style = options.style ?? \"dots\"\n this.color = options.color ?? \"cyan\"\n this.stream = options.stream ?? process.stdout\n this.hideCursor = options.hideCursor ?? true\n this.interval = options.interval ?? SPINNER_INTERVALS[this.style]\n }\n\n /** Get current spinner text */\n get currentText(): string {\n return this.text\n }\n\n /** Set spinner text (updates immediately if spinning) */\n set currentText(value: string) {\n this.text = value\n if (this.isSpinning) {\n this.render()\n }\n }\n\n /** Check if spinner is currently active */\n get spinning(): boolean {\n return this.isSpinning\n }\n\n /**\n * Start the spinner animation\n */\n start(text?: string): this {\n if (text !== undefined) {\n this.text = text\n }\n\n if (this.isSpinning) {\n return this\n }\n\n this.isSpinning = true\n this.frameIndex = 0\n\n if (this.hideCursor && isTTY(this.stream)) {\n write(CURSOR_HIDE, this.stream)\n }\n\n this.render()\n this.timer = setInterval(() => {\n this.frameIndex = (this.frameIndex + 1) % SPINNER_FRAMES[this.style].length\n this.render()\n }, this.interval)\n\n return this\n }\n\n /**\n * Stop the spinner\n */\n stop(): this {\n if (!this.isSpinning) {\n return this\n }\n\n this.isSpinning = false\n\n if (this.timer) {\n clearInterval(this.timer)\n this.timer = null\n }\n\n this.clear()\n\n if (this.hideCursor && isTTY(this.stream)) {\n write(CURSOR_SHOW, this.stream)\n }\n\n return this\n }\n\n /**\n * Stop with success message (green checkmark)\n */\n succeed(text?: string): this {\n return this.stopWithSymbol(chalk.green(\"✔\"), text ?? this.text)\n }\n\n /**\n * Stop with failure message (red X)\n */\n fail(text?: string): this {\n return this.stopWithSymbol(chalk.red(\"✖\"), text ?? this.text)\n }\n\n /**\n * Stop with warning message (yellow warning)\n */\n warn(text?: string): this {\n return this.stopWithSymbol(chalk.yellow(\"⚠\"), text ?? this.text)\n }\n\n /**\n * Stop with info message (blue info)\n */\n info(text?: string): this {\n return this.stopWithSymbol(chalk.blue(\"ℹ\"), text ?? this.text)\n }\n\n /**\n * Clear the spinner line\n */\n clear(): this {\n if (isTTY(this.stream)) {\n write(`${CURSOR_TO_START}${CLEAR_LINE_END}`, this.stream)\n }\n return this\n }\n\n private render(): void {\n const frame = SPINNER_FRAMES[this.style][this.frameIndex]\n const colorFn = (chalk as unknown as Record<string, (s: string) => string>)[this.color]\n const coloredFrame = colorFn ? colorFn(frame!) : frame!\n const output = this.text ? `${coloredFrame} ${this.text}` : coloredFrame\n\n if (isTTY(this.stream)) {\n write(`${CURSOR_TO_START}${output}${CLEAR_LINE_END}`, this.stream)\n }\n }\n\n private stopWithSymbol(symbol: string, text: string): this {\n this.stop()\n write(`${symbol} ${text}\\n`, this.stream)\n return this\n }\n\n /**\n * Dispose the spinner (calls stop)\n */\n [Symbol.dispose](): void {\n this.stop()\n }\n\n /**\n * Static helper to quickly start a spinner\n * Returns a stop function\n *\n * @example\n * ```ts\n * const stop = Spinner.start(\"Loading...\");\n * await doWork();\n * stop();\n * ```\n */\n static start(textOrOptions?: string | SpinnerOptions): () => void {\n const spinner = new Spinner(textOrOptions)\n spinner.start()\n return () => spinner.stop()\n }\n}\n\n/**\n * Callable spinner interface - call with text to show/update\n *\n * @example\n * ```ts\n * {\n * using spinner = createSpinner({ style: \"dots\" });\n * spinner(\"Loading...\"); // Shows spinner with text\n * spinner(\"Still loading...\"); // Updates text\n * } // Auto-stops via Symbol.dispose\n * ```\n */\nexport interface CallableSpinner extends Disposable {\n /** Call with text to show/update the spinner */\n (text: string): void\n /** Stop the spinner */\n stop(): void\n /** Stop with success message (green checkmark) */\n succeed(text?: string): void\n /** Stop with failure message (red X) */\n fail(text?: string): void\n /** Stop with warning message (yellow warning) */\n warn(text?: string): void\n /** Stop with info message (blue info) */\n info(text?: string): void\n}\n\n/**\n * Create a callable, disposable spinner\n *\n * The spinner is lazy - it won't show anything until you call it with text.\n * Use with `using` for automatic cleanup:\n *\n * @example\n * ```ts\n * {\n * using spinner = createSpinner({ style: \"dots\" });\n * // Nothing visible yet\n *\n * spinner(\"Loading repo...\"); // Now shows spinner\n * spinner(\"Applying events...\"); // Updates text\n * } // Auto-stops via Symbol.dispose\n * ```\n */\nexport function createSpinner(options?: SpinnerOptions): CallableSpinner {\n const spinner = new Spinner({ ...options, text: \"\" })\n\n const callable = ((text: string) => {\n // Always restart if not spinning (handles initial call and after succeed/fail/etc)\n if (!spinner.spinning) {\n spinner.start(text)\n } else {\n spinner.currentText = text\n }\n }) as CallableSpinner\n\n callable.stop = () => spinner.stop()\n callable.succeed = (text) => spinner.succeed(text)\n callable.fail = (text) => spinner.fail(text)\n callable.warn = (text) => spinner.warn(text)\n callable.info = (text) => spinner.info(text)\n callable[Symbol.dispose] = () => spinner.stop()\n\n return callable\n}\n"],"mappings":"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"}