πŸ“„ File detail

components/LogoV2/Feed.tsx

🧩 .tsxπŸ“ 112 linesπŸ’Ύ 13,804 bytesπŸ“ text
← Back to All Files

🎯 Use case

This file lives under β€œcomponents/”, which covers shared React UI pieces. On the API surface it exposes FeedLine, FeedConfig, calculateFeedWidth, and Feed β€” mainly types, interfaces, or factory objects. Dependencies touch React UI. It composes internal code from ink and utils (relative imports).

Generated from folder role, exports, dependency roots, and inline comments β€” not hand-reviewed for every path.

🧠 Inline summary

import { c as _c } from "react/compiler-runtime"; import * as React from 'react'; import { stringWidth } from '../../ink/stringWidth.js'; import { Box, Text } from '../../ink.js'; import { truncate } from '../../utils/format.js';

πŸ“€ Exports (heuristic)

  • FeedLine
  • FeedConfig
  • calculateFeedWidth
  • Feed

πŸ“š External import roots

Package roots from from "…" (relative paths omitted).

  • react

πŸ–₯️ Source preview

import { c as _c } from "react/compiler-runtime";
import * as React from 'react';
import { stringWidth } from '../../ink/stringWidth.js';
import { Box, Text } from '../../ink.js';
import { truncate } from '../../utils/format.js';
export type FeedLine = {
  text: string;
  timestamp?: string;
};
export type FeedConfig = {
  title: string;
  lines: FeedLine[];
  footer?: string;
  emptyMessage?: string;
  customContent?: {
    content: React.ReactNode;
    width: number;
  };
};
type FeedProps = {
  config: FeedConfig;
  actualWidth: number;
};
export function calculateFeedWidth(config: FeedConfig): number {
  const {
    title,
    lines,
    footer,
    emptyMessage,
    customContent
  } = config;
  let maxWidth = stringWidth(title);
  if (customContent !== undefined) {
    maxWidth = Math.max(maxWidth, customContent.width);
  } else if (lines.length === 0 && emptyMessage) {
    maxWidth = Math.max(maxWidth, stringWidth(emptyMessage));
  } else {
    const gap = '  ';
    const maxTimestampWidth = Math.max(0, ...lines.map(line => line.timestamp ? stringWidth(line.timestamp) : 0));
    for (const line of lines) {
      const timestampWidth = maxTimestampWidth > 0 ? maxTimestampWidth : 0;
      const lineWidth = stringWidth(line.text) + (timestampWidth > 0 ? timestampWidth + gap.length : 0);
      maxWidth = Math.max(maxWidth, lineWidth);
    }
  }
  if (footer) {
    maxWidth = Math.max(maxWidth, stringWidth(footer));
  }
  return maxWidth;
}
export function Feed(t0) {
  const $ = _c(15);
  const {
    config,
    actualWidth
  } = t0;
  const {
    title,
    lines,
    footer,
    emptyMessage,
    customContent
  } = config;
  let t1;
  if ($[0] !== lines) {
    t1 = Math.max(0, ...lines.map(_temp));
    $[0] = lines;
    $[1] = t1;
  } else {
    t1 = $[1];
  }
  const maxTimestampWidth = t1;
  let t2;
  if ($[2] !== title) {
    t2 = <Text bold={true} color="claude">{title}</Text>;
    $[2] = title;
    $[3] = t2;
  } else {
    t2 = $[3];
  }
  let t3;
  if ($[4] !== actualWidth || $[5] !== customContent || $[6] !== emptyMessage || $[7] !== footer || $[8] !== lines || $[9] !== maxTimestampWidth) {
    t3 = customContent ? <>{customContent.content}{footer && <Text dimColor={true} italic={true}>{truncate(footer, actualWidth)}</Text>}</> : lines.length === 0 && emptyMessage ? <Text dimColor={true}>{truncate(emptyMessage, actualWidth)}</Text> : <>{lines.map((line_0, index) => {
        const textWidth = Math.max(10, actualWidth - (maxTimestampWidth > 0 ? maxTimestampWidth + 2 : 0));
        return <Text key={index}>{maxTimestampWidth > 0 && <><Text dimColor={true}>{(line_0.timestamp || "").padEnd(maxTimestampWidth)}</Text>{"  "}</>}<Text>{truncate(line_0.text, textWidth)}</Text></Text>;
      })}{footer && <Text dimColor={true} italic={true}>{truncate(footer, actualWidth)}</Text>}</>;
    $[4] = actualWidth;
    $[5] = customContent;
    $[6] = emptyMessage;
    $[7] = footer;
    $[8] = lines;
    $[9] = maxTimestampWidth;
    $[10] = t3;
  } else {
    t3 = $[10];
  }
  let t4;
  if ($[11] !== actualWidth || $[12] !== t2 || $[13] !== t3) {
    t4 = <Box flexDirection="column" width={actualWidth}>{t2}{t3}</Box>;
    $[11] = actualWidth;
    $[12] = t2;
    $[13] = t3;
    $[14] = t4;
  } else {
    t4 = $[14];
  }
  return t4;
}
function _temp(line) {
  return line.timestamp ? stringWidth(line.timestamp) : 0;
}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSZWFjdCIsInN0cmluZ1dpZHRoIiwiQm94IiwiVGV4dCIsInRydW5jYXRlIiwiRmVlZExpbmUiLCJ0ZXh0IiwidGltZXN0YW1wIiwiRmVlZENvbmZpZyIsInRpdGxlIiwibGluZXMiLCJmb290ZXIiLCJlbXB0eU1lc3NhZ2UiLCJjdXN0b21Db250ZW50IiwiY29udGVudCIsIlJlYWN0Tm9kZSIsIndpZHRoIiwiRmVlZFByb3BzIiwiY29uZmlnIiwiYWN0dWFsV2lkdGgiLCJjYWxjdWxhdGVGZWVkV2lkdGgiLCJtYXhXaWR0aCIsInVuZGVmaW5lZCIsIk1hdGgiLCJtYXgiLCJsZW5ndGgiLCJnYXAiLCJtYXhUaW1lc3RhbXBXaWR0aCIsIm1hcCIsImxpbmUiLCJ0aW1lc3RhbXBXaWR0aCIsImxpbmVXaWR0aCIsIkZlZWQiLCJ0MCIsIiQiLCJfYyIsInQxIiwiX3RlbXAiLCJ0MiIsInQzIiwibGluZV8wIiwiaW5kZXgiLCJ0ZXh0V2lkdGgiLCJwYWRFbmQiLCJ0NCJdLCJzb3VyY2VzIjpbIkZlZWQudHN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgc3RyaW5nV2lkdGggfSBmcm9tICcuLi8uLi9pbmsvc3RyaW5nV2lkdGguanMnXG5pbXBvcnQgeyBCb3gsIFRleHQgfSBmcm9tICcuLi8uLi9pbmsuanMnXG5pbXBvcnQgeyB0cnVuY2F0ZSB9IGZyb20gJy4uLy4uL3V0aWxzL2Zvcm1hdC5qcydcblxuZXhwb3J0IHR5cGUgRmVlZExpbmUgPSB7XG4gIHRleHQ6IHN0cmluZ1xuICB0aW1lc3RhbXA/OiBzdHJpbmdcbn1cblxuZXhwb3J0IHR5cGUgRmVlZENvbmZpZyA9IHtcbiAgdGl0bGU6IHN0cmluZ1xuICBsaW5lczogRmVlZExpbmVbXVxuICBmb290ZXI/OiBzdHJpbmdcbiAgZW1wdHlNZXNzYWdlPzogc3RyaW5nXG4gIGN1c3RvbUNvbnRlbnQ/OiB7IGNvbnRlbnQ6IFJlYWN0LlJlYWN0Tm9kZTsgd2lkdGg6IG51bWJlciB9XG59XG5cbnR5cGUgRmVlZFByb3BzID0ge1xuICBjb25maWc6IEZlZWRDb25maWdcbiAgYWN0dWFsV2lkdGg6IG51bWJlclxufVxuXG5leHBvcnQgZnVuY3Rpb24gY2FsY3VsYXRlRmVlZFdpZHRoKGNvbmZpZzogRmVlZENvbmZpZyk6IG51bWJlciB7XG4gIGNvbnN0IHsgdGl0bGUsIGxpbmVzLCBmb290ZXIsIGVtcHR5TWVzc2FnZSwgY3VzdG9tQ29udGVudCB9ID0gY29uZmlnXG5cbiAgbGV0IG1heFdpZHRoID0gc3RyaW5nV2lkdGgodGl0bGUpXG5cbiAgaWYgKGN1c3RvbUNvbnRlbnQgIT09IHVuZGVmaW5lZCkge1xuICAgIG1heFdpZHRoID0gTWF0aC5tYXgobWF4V2lkdGgsIGN1c3RvbUNvbnRlbnQud2lkdGgpXG4gIH0gZWxzZSBpZiAobGluZXMubGVuZ3RoID09PSAwICYmIGVtcHR5TWVzc2FnZSkge1xuICAgIG1heFdpZHRoID0gTWF0aC5tYXgobWF4V2lkdGgsIHN0cmluZ1dpZHRoKGVtcHR5TWVzc2FnZSkpXG4gIH0gZWxzZSB7XG4gICAgY29uc3QgZ2FwID0gJyAgJ1xuICAgIGNvbnN0IG1heFRpbWVzdGFtcFdpZHRoID0gTWF0aC5tYXgoXG4gICAgICAwLFxuICAgICAgLi4ubGluZXMubWFwKGxpbmUgPT4gKGxpbmUudGltZXN0YW1wID8gc3RyaW5nV2lkdGgobGluZS50aW1lc3RhbXApIDogMCkpLFxuICAgIClcblxuICAgIGZvciAoY29uc3QgbGluZSBvZiBsaW5lcykge1xuICAgICAgY29uc3QgdGltZXN0YW1wV2lkdGggPSBtYXhUaW1lc3RhbXBXaWR0aCA+IDAgPyBtYXhUaW1lc3RhbXBXaWR0aCA6IDBcbiAgICAgIGNvbnN0IGxpbmVXaWR0aCA9XG4gICAgICAgIHN0cmluZ1dpZHRoKGxpbmUudGV4dCkgK1xuICAgICAgICAodGltZXN0YW1wV2lkdGggPiAwID8gdGltZXN0YW1wV2lkdGggKyBnYXAubGVuZ3RoIDogMClcbiAgICAgIG1heFdpZHRoID0gTWF0aC5tYXgobWF4V2lkdGgsIGxpbmVXaWR0aClcbiAgICB9XG4gIH1cblxuICBpZiAoZm9vdGVyKSB7XG4gICAgbWF4V2lkdGggPSBNYXRoLm1heChtYXhXaWR0aCwgc3RyaW5nV2lkdGgoZm9vdGVyKSlcbiAgfVxuXG4gIHJldHVybiBtYXhXaWR0aFxufVxuXG5leHBvcnQgZnVuY3Rpb24gRmVlZCh7IGNvbmZpZywgYWN0dWFsV2lkdGggfTogRmVlZFByb3BzKTogUmVhY3QuUmVhY3ROb2RlIHtcbiAgY29uc3QgeyB0aXRsZSwgbGluZXMsIGZvb3RlciwgZW1wdHlNZXNzYWdlLCBjdXN0b21Db250ZW50IH0gPSBjb25maWdcblxuICBjb25zdCBnYXAgPSAnICAnXG4gIGNvbnN0IG1heFRpbWVzdGFtcFdpZHRoID0gTWF0aC5tYXgoXG4gICAgMCxcbiAgICAuLi5saW5lcy5tYXAobGluZSA9PiAobGluZS50aW1lc3RhbXAgPyBzdHJpbmdXaWR0aChsaW5lLnRpbWVzdGFtcCkgOiAwKSksXG4gIClcblxuICByZXR1cm4gKFxuICAgIDxCb3ggZmxleERpcmVjdGlvbj1cImNvbHVtblwiIHdpZHRoPXthY3R1YWxXaWR0aH0+XG4gICAgICA8VGV4dCBib2xkIGNvbG9yPVwiY2xhdWRlXCI+XG4gICAgICAgIHt0aXRsZX1cbiAgICAgIDwvVGV4dD5cbiAgICAgIHtjdXN0b21Db250ZW50ID8gKFxuICAgICAgICA8PlxuICAgICAgICAgIHtjdXN0b21Db250ZW50LmNvbnRlbnR9XG4gICAgICAgICAge2Zvb3RlciAmJiAoXG4gICAgICAgICAgICA8VGV4dCBkaW1Db2xvciBpdGFsaWM+XG4gICAgICAgICAgICAgIHt0cnVuY2F0ZShmb290ZXIsIGFjdHVhbFdpZHRoKX1cbiAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICApfVxuICAgICAgICA8Lz5cbiAgICAgICkgOiBsaW5lcy5sZW5ndGggPT09IDAgJiYgZW1wdHlNZXNzYWdlID8gKFxuICAgICAgICA8VGV4dCBkaW1Db2xvcj57dHJ1bmNhdGUoZW1wdHlNZXNzYWdlLCBhY3R1YWxXaWR0aCl9PC9UZXh0PlxuICAgICAgKSA6IChcbiAgICAgICAgPD5cbiAgICAgICAgICB7bGluZXMubWFwKChsaW5lLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgdGV4dFdpZHRoID0gTWF0aC5tYXgoXG4gICAgICAgICAgICAgIDEwLFxuICAgICAgICAgICAgICBhY3R1YWxXaWR0aCAtXG4gICAgICAgICAgICAgICAgKG1heFRpbWVzdGFtcFdpZHRoID4gMCA/IG1heFRpbWVzdGFtcFdpZHRoICsgZ2FwLmxlbmd0aCA6IDApLFxuICAgICAgICAgICAgKVxuXG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICA8VGV4dCBrZXk9e2luZGV4fT5cbiAgICAgICAgICAgICAgICB7bWF4VGltZXN0YW1wV2lkdGggPiAwICYmIChcbiAgICAgICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICAgIDxUZXh0IGRpbUNvbG9yPlxuICAgICAgICAgICAgICAgICAgICAgIHsobGluZS50aW1lc3RhbXAgfHwgJycpLnBhZEVuZChtYXhUaW1lc3RhbXBXaWR0aCl9XG4gICAgICAgICAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgICAgICAgICAge2dhcH1cbiAgICAgICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgPFRleHQ+e3RydW5jYXRlKGxpbmUudGV4dCwgdGV4dFdpZHRoKX08L1RleHQ+XG4gICAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgIClcbiAgICAgICAgICB9KX1cbiAgICAgICAgICB7Zm9vdGVyICYmIChcbiAgICAgICAgICAgIDxUZXh0IGRpbUNvbG9yIGl0YWxpYz5cbiAgICAgICAgICAgICAge3RydW5jYXRlKGZvb3RlciwgYWN0dWFsV2lkdGgpfVxuICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICl9XG4gICAgICAgIDwvPlxuICAg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