@absolutejs/absolute 0.19.0-beta.678 → 0.19.0-beta.679

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.
package/dist/cli/index.js CHANGED
@@ -2520,6 +2520,9 @@ var helpLines = [
2520
2520
  " o Open the first public service",
2521
2521
  " r Restart the workspace",
2522
2522
  " p Pause or resume all services",
2523
+ " \u2191/\u2193 Scroll logs one line",
2524
+ " PgUp/PgDn Scroll logs one page",
2525
+ " Home/End Jump to oldest or latest logs",
2523
2526
  " c Clear the log pane",
2524
2527
  " q Quit",
2525
2528
  " $ Enter shell mode",
@@ -2692,6 +2695,9 @@ var createWorkspaceTui = ({
2692
2695
  let escapeTimer = null;
2693
2696
  let escapeBuffer = "";
2694
2697
  let readyDurationMs = null;
2698
+ let logScrollOffset = 0;
2699
+ let lastLogLineCount = 0;
2700
+ let lastLogViewportHeight = 0;
2695
2701
  const shellHistory = [];
2696
2702
  let shellHistoryIndex = UNFOUND_INDEX;
2697
2703
  const serviceStates = new Map(services.map((service) => [
@@ -2791,7 +2797,16 @@ var createWorkspaceTui = ({
2791
2797
  return `${" ".repeat(prefixPlain.length)}${getLogColor(entry.level)}${line}${colors.reset}`;
2792
2798
  });
2793
2799
  });
2794
- const visibleContent = contentLines.length > logHeight ? contentLines.slice(contentLines.length - logHeight) : contentLines;
2800
+ if (!helpVisible) {
2801
+ lastLogLineCount = contentLines.length;
2802
+ lastLogViewportHeight = logHeight;
2803
+ logScrollOffset = Math.min(logScrollOffset, Math.max(0, contentLines.length - logHeight));
2804
+ }
2805
+ const visibleContent = helpVisible ? contentLines.slice(0, logHeight) : (() => {
2806
+ const end = Math.max(0, contentLines.length - logScrollOffset);
2807
+ const start3 = Math.max(0, end - logHeight);
2808
+ return contentLines.slice(start3, end);
2809
+ })();
2795
2810
  for (const line of visibleContent) {
2796
2811
  rows.push(padLine(line, width));
2797
2812
  }
@@ -2799,7 +2814,8 @@ var createWorkspaceTui = ({
2799
2814
  rows.push(" ".repeat(width));
2800
2815
  }
2801
2816
  rows.push(divider);
2802
- const footerText = helpVisible ? "Esc or h closes help" : "Hotkeys: h help o open r restart p pause c clear logs q quit $ shell";
2817
+ const logState = !helpVisible && logScrollOffset > 0 ? `logs scrolled back ${logScrollOffset} line${logScrollOffset === 1 ? "" : "s"} \xB7 End for latest` : "live logs";
2818
+ const footerText = helpVisible ? "Esc or h closes help" : `Hotkeys: h help \u2191/\u2193 scroll PgUp/PgDn page End latest c clear q quit $ shell \xB7 ${logState}`;
2803
2819
  rows.push(padLine(`${colors.dim}${truncateText(footerText, width)}${colors.reset}`, width));
2804
2820
  const promptLine = shellMode ? `${colors.yellow}$ ${colors.reset}${truncateText(promptBuffer, Math.max(width - 2, 0))}` : `${colors.dim}Press a hotkey or $ for shell mode${colors.reset}`;
2805
2821
  rows.push(padLine(promptLine, width));
@@ -2848,6 +2864,7 @@ var createWorkspaceTui = ({
2848
2864
  };
2849
2865
  const clearLogs = () => {
2850
2866
  logEntries.length = 0;
2867
+ logScrollOffset = 0;
2851
2868
  scheduleRender();
2852
2869
  };
2853
2870
  const getRecentLogs = (limit = 40) => logEntries.slice(Math.max(0, logEntries.length - limit));
@@ -2877,6 +2894,27 @@ var createWorkspaceTui = ({
2877
2894
  promptBuffer = shellHistoryIndex === UNFOUND_INDEX ? "" : shellHistory[shellHistory.length - 1 - shellHistoryIndex] ?? "";
2878
2895
  scheduleRender();
2879
2896
  };
2897
+ const scrollLogs = (direction) => {
2898
+ if (helpVisible) {
2899
+ return;
2900
+ }
2901
+ const maxOffset = Math.max(0, lastLogLineCount - lastLogViewportHeight);
2902
+ const pageSize = Math.max(1, lastLogViewportHeight - 1);
2903
+ if (direction === "up") {
2904
+ logScrollOffset = Math.min(maxOffset, logScrollOffset + 1);
2905
+ } else if (direction === "down") {
2906
+ logScrollOffset = Math.max(0, logScrollOffset - 1);
2907
+ } else if (direction === "pageUp") {
2908
+ logScrollOffset = Math.min(maxOffset, logScrollOffset + pageSize);
2909
+ } else if (direction === "pageDown") {
2910
+ logScrollOffset = Math.max(0, logScrollOffset - pageSize);
2911
+ } else if (direction === "home") {
2912
+ logScrollOffset = maxOffset;
2913
+ } else {
2914
+ logScrollOffset = 0;
2915
+ }
2916
+ scheduleRender();
2917
+ };
2880
2918
  const runShortcut = async (action) => {
2881
2919
  if (action === "clear") {
2882
2920
  clearLogs();
@@ -2912,13 +2950,49 @@ var createWorkspaceTui = ({
2912
2950
  if (escapeBuffer === `${ESCAPE}[A`) {
2913
2951
  clearPendingEscape();
2914
2952
  escapeBuffer = "";
2915
- navigateShellHistory("up");
2953
+ if (shellMode) {
2954
+ navigateShellHistory("up");
2955
+ } else {
2956
+ scrollLogs("up");
2957
+ }
2916
2958
  return;
2917
2959
  }
2918
2960
  if (escapeBuffer === `${ESCAPE}[B`) {
2919
2961
  clearPendingEscape();
2920
2962
  escapeBuffer = "";
2921
- navigateShellHistory("down");
2963
+ if (shellMode) {
2964
+ navigateShellHistory("down");
2965
+ } else {
2966
+ scrollLogs("down");
2967
+ }
2968
+ return;
2969
+ }
2970
+ if (escapeBuffer === `${ESCAPE}[5~`) {
2971
+ clearPendingEscape();
2972
+ escapeBuffer = "";
2973
+ scrollLogs("pageUp");
2974
+ return;
2975
+ }
2976
+ if (escapeBuffer === `${ESCAPE}[6~`) {
2977
+ clearPendingEscape();
2978
+ escapeBuffer = "";
2979
+ scrollLogs("pageDown");
2980
+ return;
2981
+ }
2982
+ if (escapeBuffer === `${ESCAPE}[H` || escapeBuffer === `${ESCAPE}[1~`) {
2983
+ clearPendingEscape();
2984
+ escapeBuffer = "";
2985
+ scrollLogs("home");
2986
+ return;
2987
+ }
2988
+ if (escapeBuffer === `${ESCAPE}[F` || escapeBuffer === `${ESCAPE}[4~`) {
2989
+ clearPendingEscape();
2990
+ escapeBuffer = "";
2991
+ scrollLogs("end");
2992
+ return;
2993
+ }
2994
+ if (/^\x1b\[[0-9]*$/.test(escapeBuffer)) {
2995
+ armEscapeTimer();
2922
2996
  return;
2923
2997
  }
2924
2998
  exitEscapeMode();
package/dist/index.js CHANGED
@@ -174823,7 +174823,7 @@ ${registrations}
174823
174823
  ({ tsLibDir } = cached);
174824
174824
  cached.lastUsed = Date.now();
174825
174825
  } else {
174826
- const tsPath = __require.resolve("typescript");
174826
+ const tsPath = __require.resolve("/home/alexkahn/abs/absolutejs/node_modules/typescript/lib/typescript.js");
174827
174827
  const tsRootDir = dirname9(tsPath);
174828
174828
  tsLibDir = tsRootDir.endsWith("lib") ? tsRootDir : resolve18(tsRootDir, "lib");
174829
174829
  const config = readConfiguration("./tsconfig.json");
@@ -188997,5 +188997,5 @@ export {
188997
188997
  ANGULAR_INIT_TIMEOUT_MS
188998
188998
  };
188999
188999
 
189000
- //# debugId=34F91B1BAA5BDB1464756E2164756E21
189000
+ //# debugId=A7EC3AF25BF78DB864756E2164756E21
189001
189001
  //# sourceMappingURL=index.js.map