pi-fabric 0.92.28 → 0.92.29

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.
@@ -175,6 +175,43 @@ function pushArcItem(lines, item) {
175
175
  lines.push(item);
176
176
  }
177
177
 
178
+ // src/ui/spinner.ts
179
+ var SPINNER_INTERVAL_MS = 250;
180
+ var SPINNER_FRAMES = ["\u25D0", "\u25D3", "\u25D1", "\u25D2"];
181
+ var TOOL_VIEWPORT_RESERVED_ROWS = 12;
182
+ var animationFitsViewport = (state, terminalRows = process.stdout.rows) => state?.renderedRows === void 0 || !Number.isFinite(terminalRows) || terminalRows <= 0 || state.renderedRows + TOOL_VIEWPORT_RESERVED_ROWS <= terminalRows;
183
+ var observeAnimationRows = (component, state) => ({
184
+ render(width) {
185
+ const lines = component.render(width);
186
+ state.renderedRows = lines.length;
187
+ return lines;
188
+ },
189
+ invalidate() {
190
+ component.invalidate();
191
+ }
192
+ });
193
+ var spinnerFrame = (now = Date.now()) => SPINNER_FRAMES[Math.floor(now / SPINNER_INTERVAL_MS) % SPINNER_FRAMES.length];
194
+ var armSpinner = (state, invalidate, now) => {
195
+ if (state.timer) return;
196
+ const delay = SPINNER_INTERVAL_MS - now % SPINNER_INTERVAL_MS;
197
+ state.timer = setTimeout(() => {
198
+ delete state.timer;
199
+ if (animationFitsViewport(state)) invalidate();
200
+ else armSpinner(state, invalidate, Date.now());
201
+ }, delay);
202
+ state.timer.unref?.();
203
+ };
204
+ var updateSpinner = (state, active, invalidate, now = Date.now()) => {
205
+ if (!active) {
206
+ if (state.timer) clearTimeout(state.timer);
207
+ delete state.timer;
208
+ return spinnerFrame(now);
209
+ }
210
+ if (state.frame === void 0 || animationFitsViewport(state)) state.frame = spinnerFrame(now);
211
+ armSpinner(state, invalidate, now);
212
+ return state.frame;
213
+ };
214
+
178
215
  // src/ui/core-tool-render.ts
179
216
  import { readFileSync, statSync } from "node:fs";
180
217
  import { homedir } from "node:os";
@@ -4162,30 +4199,13 @@ function modelReadHint(audits, output, theme) {
4162
4199
  return theme.fg("warning", "\u2192 " + modelLines + " of " + readLines + " lines to model");
4163
4200
  }
4164
4201
 
4165
- // src/ui/spinner.ts
4166
- var SPINNER_INTERVAL_MS = 250;
4167
- var SPINNER_FRAMES = ["\u25D0", "\u25D3", "\u25D1", "\u25D2"];
4168
- var spinnerFrame = (now = Date.now()) => SPINNER_FRAMES[Math.floor(now / SPINNER_INTERVAL_MS) % SPINNER_FRAMES.length];
4169
- var updateSpinner = (state, active, invalidate, now = Date.now()) => {
4170
- if (!active) {
4171
- if (state.timer) clearTimeout(state.timer);
4172
- delete state.timer;
4173
- return spinnerFrame(now);
4174
- }
4175
- if (!state.timer) {
4176
- const delay = SPINNER_INTERVAL_MS - now % SPINNER_INTERVAL_MS;
4177
- state.timer = setTimeout(() => {
4178
- delete state.timer;
4179
- invalidate();
4180
- }, delay);
4181
- state.timer.unref?.();
4182
- }
4183
- return spinnerFrame(now);
4184
- };
4185
-
4186
4202
  export {
4187
4203
  continueArcGroup,
4188
4204
  arcItemStyled,
4205
+ animationFitsViewport,
4206
+ observeAnimationRows,
4207
+ spinnerFrame,
4208
+ updateSpinner,
4189
4209
  isCoreToolAudit,
4190
4210
  coreToolRendererEnabled,
4191
4211
  coreToolPreviewEnabled,
@@ -4213,9 +4233,7 @@ export {
4213
4233
  nestedCallBody,
4214
4234
  nestedEditDiff,
4215
4235
  modelReadHint,
4216
- spinnerFrame,
4217
- updateSpinner,
4218
4236
  formatJsonAsYaml,
4219
4237
  formatFabricValue
4220
4238
  };
4221
- //# sourceMappingURL=chunk-XDSD4RLK.js.map
4239
+ //# sourceMappingURL=chunk-RDJDJJET.js.map