/ components / LogoV2 / Feed.tsx
Feed.tsx
  1  import { c as _c } from "react/compiler-runtime";
  2  import * as React from 'react';
  3  import { stringWidth } from '../../ink/stringWidth.js';
  4  import { Box, Text } from '../../ink.js';
  5  import { truncate } from '../../utils/format.js';
  6  export type FeedLine = {
  7    text: string;
  8    timestamp?: string;
  9  };
 10  export type FeedConfig = {
 11    title: string;
 12    lines: FeedLine[];
 13    footer?: string;
 14    emptyMessage?: string;
 15    customContent?: {
 16      content: React.ReactNode;
 17      width: number;
 18    };
 19  };
 20  type FeedProps = {
 21    config: FeedConfig;
 22    actualWidth: number;
 23  };
 24  export function calculateFeedWidth(config: FeedConfig): number {
 25    const {
 26      title,
 27      lines,
 28      footer,
 29      emptyMessage,
 30      customContent
 31    } = config;
 32    let maxWidth = stringWidth(title);
 33    if (customContent !== undefined) {
 34      maxWidth = Math.max(maxWidth, customContent.width);
 35    } else if (lines.length === 0 && emptyMessage) {
 36      maxWidth = Math.max(maxWidth, stringWidth(emptyMessage));
 37    } else {
 38      const gap = '  ';
 39      const maxTimestampWidth = Math.max(0, ...lines.map(line => line.timestamp ? stringWidth(line.timestamp) : 0));
 40      for (const line of lines) {
 41        const timestampWidth = maxTimestampWidth > 0 ? maxTimestampWidth : 0;
 42        const lineWidth = stringWidth(line.text) + (timestampWidth > 0 ? timestampWidth + gap.length : 0);
 43        maxWidth = Math.max(maxWidth, lineWidth);
 44      }
 45    }
 46    if (footer) {
 47      maxWidth = Math.max(maxWidth, stringWidth(footer));
 48    }
 49    return maxWidth;
 50  }
 51  export function Feed(t0) {
 52    const $ = _c(15);
 53    const {
 54      config,
 55      actualWidth
 56    } = t0;
 57    const {
 58      title,
 59      lines,
 60      footer,
 61      emptyMessage,
 62      customContent
 63    } = config;
 64    let t1;
 65    if ($[0] !== lines) {
 66      t1 = Math.max(0, ...lines.map(_temp));
 67      $[0] = lines;
 68      $[1] = t1;
 69    } else {
 70      t1 = $[1];
 71    }
 72    const maxTimestampWidth = t1;
 73    let t2;
 74    if ($[2] !== title) {
 75      t2 = <Text bold={true} color="claude">{title}</Text>;
 76      $[2] = title;
 77      $[3] = t2;
 78    } else {
 79      t2 = $[3];
 80    }
 81    let t3;
 82    if ($[4] !== actualWidth || $[5] !== customContent || $[6] !== emptyMessage || $[7] !== footer || $[8] !== lines || $[9] !== maxTimestampWidth) {
 83      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) => {
 84          const textWidth = Math.max(10, actualWidth - (maxTimestampWidth > 0 ? maxTimestampWidth + 2 : 0));
 85          return <Text key={index}>{maxTimestampWidth > 0 && <><Text dimColor={true}>{(line_0.timestamp || "").padEnd(maxTimestampWidth)}</Text>{"  "}</>}<Text>{truncate(line_0.text, textWidth)}</Text></Text>;
 86        })}{footer && <Text dimColor={true} italic={true}>{truncate(footer, actualWidth)}</Text>}</>;
 87      $[4] = actualWidth;
 88      $[5] = customContent;
 89      $[6] = emptyMessage;
 90      $[7] = footer;
 91      $[8] = lines;
 92      $[9] = maxTimestampWidth;
 93      $[10] = t3;
 94    } else {
 95      t3 = $[10];
 96    }
 97    let t4;
 98    if ($[11] !== actualWidth || $[12] !== t2 || $[13] !== t3) {
 99      t4 = <Box flexDirection="column" width={actualWidth}>{t2}{t3}</Box>;
100      $[11] = actualWidth;
101      $[12] = t2;
102      $[13] = t3;
103      $[14] = t4;
104    } else {
105      t4 = $[14];
106    }
107    return t4;
108  }
109  function _temp(line) {
110    return line.timestamp ? stringWidth(line.timestamp) : 0;
111  }
112  //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSZWFjdCIsInN0cmluZ1dpZHRoIiwiQm94IiwiVGV4dCIsInRydW5jYXRlIiwiRmVlZExpbmUiLCJ0ZXh0IiwidGltZXN0YW1wIiwiRmVlZENvbmZpZyIsInRpdGxlIiwibGluZXMiLCJmb290ZXIiLCJlbXB0eU1lc3NhZ2UiLCJjdXN0b21Db250ZW50IiwiY29udGVudCIsIlJlYWN0Tm9kZSIsIndpZHRoIiwiRmVlZFByb3BzIiwiY29uZmlnIiwiYWN0dWFsV2lkdGgiLCJjYWxjdWxhdGVGZWVkV2lkdGgiLCJtYXhXaWR0aCIsInVuZGVmaW5lZCIsIk1hdGgiLCJtYXgiLCJsZW5ndGgiLCJnYXAiLCJtYXhUaW1lc3RhbXBXaWR0aCIsIm1hcCIsImxpbmUiLCJ0aW1lc3RhbXBXaWR0aCIsImxpbmVXaWR0aCIsIkZlZWQiLCJ0MCIsIiQiLCJfYyIsInQxIiwiX3RlbXAiLCJ0MiIsInQzIiwibGluZV8wIiwiaW5kZXgiLCJ0ZXh0V2lkdGgiLCJwYWRFbmQiLCJ0NCJdLCJzb3VyY2VzIjpbIkZlZWQudHN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgc3RyaW5nV2lkdGggfSBmcm9tICcuLi8uLi9pbmsvc3RyaW5nV2lkdGguanMnXG5pbXBvcnQgeyBCb3gsIFRleHQgfSBmcm9tICcuLi8uLi9pbmsuanMnXG5pbXBvcnQgeyB0cnVuY2F0ZSB9IGZyb20gJy4uLy4uL3V0aWxzL2Zvcm1hdC5qcydcblxuZXhwb3J0IHR5cGUgRmVlZExpbmUgPSB7XG4gIHRleHQ6IHN0cmluZ1xuICB0aW1lc3RhbXA/OiBzdHJpbmdcbn1cblxuZXhwb3J0IHR5cGUgRmVlZENvbmZpZyA9IHtcbiAgdGl0bGU6IHN0cmluZ1xuICBsaW5lczogRmVlZExpbmVbXVxuICBmb290ZXI/OiBzdHJpbmdcbiAgZW1wdHlNZXNzYWdlPzogc3RyaW5nXG4gIGN1c3RvbUNvbnRlbnQ/OiB7IGNvbnRlbnQ6IFJlYWN0LlJlYWN0Tm9kZTsgd2lkdGg6IG51bWJlciB9XG59XG5cbnR5cGUgRmVlZFByb3BzID0ge1xuICBjb25maWc6IEZlZWRDb25maWdcbiAgYWN0dWFsV2lkdGg6IG51bWJlclxufVxuXG5leHBvcnQgZnVuY3Rpb24gY2FsY3VsYXRlRmVlZFdpZHRoKGNvbmZpZzogRmVlZENvbmZpZyk6IG51bWJlciB7XG4gIGNvbnN0IHsgdGl0bGUsIGxpbmVzLCBmb290ZXIsIGVtcHR5TWVzc2FnZSwgY3VzdG9tQ29udGVudCB9ID0gY29uZmlnXG5cbiAgbGV0IG1heFdpZHRoID0gc3RyaW5nV2lkdGgodGl0bGUpXG5cbiAgaWYgKGN1c3RvbUNvbnRlbnQgIT09IHVuZGVmaW5lZCkge1xuICAgIG1heFdpZHRoID0gTWF0aC5tYXgobWF4V2lkdGgsIGN1c3RvbUNvbnRlbnQud2lkdGgpXG4gIH0gZWxzZSBpZiAobGluZXMubGVuZ3RoID09PSAwICYmIGVtcHR5TWVzc2FnZSkge1xuICAgIG1heFdpZHRoID0gTWF0aC5tYXgobWF4V2lkdGgsIHN0cmluZ1dpZHRoKGVtcHR5TWVzc2FnZSkpXG4gIH0gZWxzZSB7XG4gICAgY29uc3QgZ2FwID0gJyAgJ1xuICAgIGNvbnN0IG1heFRpbWVzdGFtcFdpZHRoID0gTWF0aC5tYXgoXG4gICAgICAwLFxuICAgICAgLi4ubGluZXMubWFwKGxpbmUgPT4gKGxpbmUudGltZXN0YW1wID8gc3RyaW5nV2lkdGgobGluZS50aW1lc3RhbXApIDogMCkpLFxuICAgIClcblxuICAgIGZvciAoY29uc3QgbGluZSBvZiBsaW5lcykge1xuICAgICAgY29uc3QgdGltZXN0YW1wV2lkdGggPSBtYXhUaW1lc3RhbXBXaWR0aCA+IDAgPyBtYXhUaW1lc3RhbXBXaWR0aCA6IDBcbiAgICAgIGNvbnN0IGxpbmVXaWR0aCA9XG4gICAgICAgIHN0cmluZ1dpZHRoKGxpbmUudGV4dCkgK1xuICAgICAgICAodGltZXN0YW1wV2lkdGggPiAwID8gdGltZXN0YW1wV2lkdGggKyBnYXAubGVuZ3RoIDogMClcbiAgICAgIG1heFdpZHRoID0gTWF0aC5tYXgobWF4V2lkdGgsIGxpbmVXaWR0aClcbiAgICB9XG4gIH1cblxuICBpZiAoZm9vdGVyKSB7XG4gICAgbWF4V2lkdGggPSBNYXRoLm1heChtYXhXaWR0aCwgc3RyaW5nV2lkdGgoZm9vdGVyKSlcbiAgfVxuXG4gIHJldHVybiBtYXhXaWR0aFxufVxuXG5leHBvcnQgZnVuY3Rpb24gRmVlZCh7IGNvbmZpZywgYWN0dWFsV2lkdGggfTogRmVlZFByb3BzKTogUmVhY3QuUmVhY3ROb2RlIHtcbiAgY29uc3QgeyB0aXRsZSwgbGluZXMsIGZvb3RlciwgZW1wdHlNZXNzYWdlLCBjdXN0b21Db250ZW50IH0gPSBjb25maWdcblxuICBjb25zdCBnYXAgPSAnICAnXG4gIGNvbnN0IG1heFRpbWVzdGFtcFdpZHRoID0gTWF0aC5tYXgoXG4gICAgMCxcbiAgICAuLi5saW5lcy5tYXAobGluZSA9PiAobGluZS50aW1lc3RhbXAgPyBzdHJpbmdXaWR0aChsaW5lLnRpbWVzdGFtcCkgOiAwKSksXG4gIClcblxuICByZXR1cm4gKFxuICAgIDxCb3ggZmxleERpcmVjdGlvbj1cImNvbHVtblwiIHdpZHRoPXthY3R1YWxXaWR0aH0+XG4gICAgICA8VGV4dCBib2xkIGNvbG9yPVwiY2xhdWRlXCI+XG4gICAgICAgIHt0aXRsZX1cbiAgICAgIDwvVGV4dD5cbiAgICAgIHtjdXN0b21Db250ZW50ID8gKFxuICAgICAgICA8PlxuICAgICAgICAgIHtjdXN0b21Db250ZW50LmNvbnRlbnR9XG4gICAgICAgICAge2Zvb3RlciAmJiAoXG4gICAgICAgICAgICA8VGV4dCBkaW1Db2xvciBpdGFsaWM+XG4gICAgICAgICAgICAgIHt0cnVuY2F0ZShmb290ZXIsIGFjdHVhbFdpZHRoKX1cbiAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICApfVxuICAgICAgICA8Lz5cbiAgICAgICkgOiBsaW5lcy5sZW5ndGggPT09IDAgJiYgZW1wdHlNZXNzYWdlID8gKFxuICAgICAgICA8VGV4dCBkaW1Db2xvcj57dHJ1bmNhdGUoZW1wdHlNZXNzYWdlLCBhY3R1YWxXaWR0aCl9PC9UZXh0PlxuICAgICAgKSA6IChcbiAgICAgICAgPD5cbiAgICAgICAgICB7bGluZXMubWFwKChsaW5lLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgdGV4dFdpZHRoID0gTWF0aC5tYXgoXG4gICAgICAgICAgICAgIDEwLFxuICAgICAgICAgICAgICBhY3R1YWxXaWR0aCAtXG4gICAgICAgICAgICAgICAgKG1heFRpbWVzdGFtcFdpZHRoID4gMCA/IG1heFRpbWVzdGFtcFdpZHRoICsgZ2FwLmxlbmd0aCA6IDApLFxuICAgICAgICAgICAgKVxuXG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICA8VGV4dCBrZXk9e2luZGV4fT5cbiAgICAgICAgICAgICAgICB7bWF4VGltZXN0YW1wV2lkdGggPiAwICYmIChcbiAgICAgICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICAgIDxUZXh0IGRpbUNvbG9yPlxuICAgICAgICAgICAgICAgICAgICAgIHsobGluZS50aW1lc3RhbXAgfHwgJycpLnBhZEVuZChtYXhUaW1lc3RhbXBXaWR0aCl9XG4gICAgICAgICAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgICAgICAgICAge2dhcH1cbiAgICAgICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgPFRleHQ+e3RydW5jYXRlKGxpbmUudGV4dCwgdGV4dFdpZHRoKX08L1RleHQ+XG4gICAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgIClcbiAgICAgICAgICB9KX1cbiAgICAgICAgICB7Zm9vdGVyICYmIChcbiAgICAgICAgICAgIDxUZXh0IGRpbUNvbG9yIGl0YWxpYz5cbiAgICAgICAgICAgICAge3RydW5jYXRlKGZvb3RlciwgYWN0dWFsV2lkdGgpfVxuICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICl9XG4gICAgICAgIDwvPlxuICAg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