/ components / ClickableImageRef.tsx
ClickableImageRef.tsx
 1  import { c as _c } from "react/compiler-runtime";
 2  import * as React from 'react';
 3  import { pathToFileURL } from 'url';
 4  import Link from '../ink/components/Link.js';
 5  import { supportsHyperlinks } from '../ink/supports-hyperlinks.js';
 6  import { Text } from '../ink.js';
 7  import { getStoredImagePath } from '../utils/imageStore.js';
 8  import type { Theme } from '../utils/theme.js';
 9  type Props = {
10    imageId: number;
11    backgroundColor?: keyof Theme;
12    isSelected?: boolean;
13  };
14  
15  /**
16   * Renders an image reference like [Image #1] as a clickable link.
17   * When clicked, opens the stored image file in the default viewer.
18   *
19   * Falls back to styled text if:
20   * - Terminal doesn't support hyperlinks
21   * - Image file is not found in the store
22   */
23  export function ClickableImageRef(t0) {
24    const $ = _c(13);
25    const {
26      imageId,
27      backgroundColor,
28      isSelected: t1
29    } = t0;
30    const isSelected = t1 === undefined ? false : t1;
31    const imagePath = getStoredImagePath(imageId);
32    const displayText = `[Image #${imageId}]`;
33    if (imagePath && supportsHyperlinks()) {
34      const fileUrl = pathToFileURL(imagePath).href;
35      let t2;
36      let t3;
37      if ($[0] !== backgroundColor || $[1] !== displayText || $[2] !== isSelected) {
38        t2 = <Text backgroundColor={backgroundColor} inverse={isSelected}>{displayText}</Text>;
39        t3 = <Text backgroundColor={backgroundColor} inverse={isSelected} bold={isSelected}>{displayText}</Text>;
40        $[0] = backgroundColor;
41        $[1] = displayText;
42        $[2] = isSelected;
43        $[3] = t2;
44        $[4] = t3;
45      } else {
46        t2 = $[3];
47        t3 = $[4];
48      }
49      let t4;
50      if ($[5] !== fileUrl || $[6] !== t2 || $[7] !== t3) {
51        t4 = <Link url={fileUrl} fallback={t2}>{t3}</Link>;
52        $[5] = fileUrl;
53        $[6] = t2;
54        $[7] = t3;
55        $[8] = t4;
56      } else {
57        t4 = $[8];
58      }
59      return t4;
60    }
61    let t2;
62    if ($[9] !== backgroundColor || $[10] !== displayText || $[11] !== isSelected) {
63      t2 = <Text backgroundColor={backgroundColor} inverse={isSelected}>{displayText}</Text>;
64      $[9] = backgroundColor;
65      $[10] = displayText;
66      $[11] = isSelected;
67      $[12] = t2;
68    } else {
69      t2 = $[12];
70    }
71    return t2;
72  }
73  //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSZWFjdCIsInBhdGhUb0ZpbGVVUkwiLCJMaW5rIiwic3VwcG9ydHNIeXBlcmxpbmtzIiwiVGV4dCIsImdldFN0b3JlZEltYWdlUGF0aCIsIlRoZW1lIiwiUHJvcHMiLCJpbWFnZUlkIiwiYmFja2dyb3VuZENvbG9yIiwiaXNTZWxlY3RlZCIsIkNsaWNrYWJsZUltYWdlUmVmIiwidDAiLCIkIiwiX2MiLCJ0MSIsInVuZGVmaW5lZCIsImltYWdlUGF0aCIsImRpc3BsYXlUZXh0IiwiZmlsZVVybCIsImhyZWYiLCJ0MiIsInQzIiwidDQiXSwic291cmNlcyI6WyJDbGlja2FibGVJbWFnZVJlZi50c3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBwYXRoVG9GaWxlVVJMIH0gZnJvbSAndXJsJ1xuaW1wb3J0IExpbmsgZnJvbSAnLi4vaW5rL2NvbXBvbmVudHMvTGluay5qcydcbmltcG9ydCB7IHN1cHBvcnRzSHlwZXJsaW5rcyB9IGZyb20gJy4uL2luay9zdXBwb3J0cy1oeXBlcmxpbmtzLmpzJ1xuaW1wb3J0IHsgVGV4dCB9IGZyb20gJy4uL2luay5qcydcbmltcG9ydCB7IGdldFN0b3JlZEltYWdlUGF0aCB9IGZyb20gJy4uL3V0aWxzL2ltYWdlU3RvcmUuanMnXG5pbXBvcnQgdHlwZSB7IFRoZW1lIH0gZnJvbSAnLi4vdXRpbHMvdGhlbWUuanMnXG5cbnR5cGUgUHJvcHMgPSB7XG4gIGltYWdlSWQ6IG51bWJlclxuICBiYWNrZ3JvdW5kQ29sb3I/OiBrZXlvZiBUaGVtZVxuICBpc1NlbGVjdGVkPzogYm9vbGVhblxufVxuXG4vKipcbiAqIFJlbmRlcnMgYW4gaW1hZ2UgcmVmZXJlbmNlIGxpa2UgW0ltYWdlICMxXSBhcyBhIGNsaWNrYWJsZSBsaW5rLlxuICogV2hlbiBjbGlja2VkLCBvcGVucyB0aGUgc3RvcmVkIGltYWdlIGZpbGUgaW4gdGhlIGRlZmF1bHQgdmlld2VyLlxuICpcbiAqIEZhbGxzIGJhY2sgdG8gc3R5bGVkIHRleHQgaWY6XG4gKiAtIFRlcm1pbmFsIGRvZXNuJ3Qgc3VwcG9ydCBoeXBlcmxpbmtzXG4gKiAtIEltYWdlIGZpbGUgaXMgbm90IGZvdW5kIGluIHRoZSBzdG9yZVxuICovXG5leHBvcnQgZnVuY3Rpb24gQ2xpY2thYmxlSW1hZ2VSZWYoe1xuICBpbWFnZUlkLFxuICBiYWNrZ3JvdW5kQ29sb3IsXG4gIGlzU2VsZWN0ZWQgPSBmYWxzZSxcbn06IFByb3BzKTogUmVhY3QuUmVhY3ROb2RlIHtcbiAgY29uc3QgaW1hZ2VQYXRoID0gZ2V0U3RvcmVkSW1hZ2VQYXRoKGltYWdlSWQpXG4gIGNvbnN0IGRpc3BsYXlUZXh0ID0gYFtJbWFnZSAjJHtpbWFnZUlkfV1gXG5cbiAgLy8gSWYgd2UgaGF2ZSBhIHN0b3JlZCBpbWFnZSBhbmQgdGVybWluYWwgc3VwcG9ydHMgaHlwZXJsaW5rcywgbWFrZSBpdCBjbGlja2FibGVcbiAgaWYgKGltYWdlUGF0aCAmJiBzdXBwb3J0c0h5cGVybGlua3MoKSkge1xuICAgIGNvbnN0IGZpbGVVcmwgPSBwYXRoVG9GaWxlVVJMKGltYWdlUGF0aCkuaHJlZlxuXG4gICAgcmV0dXJuIChcbiAgICAgIDxMaW5rXG4gICAgICAgIHVybD17ZmlsZVVybH1cbiAgICAgICAgZmFsbGJhY2s9e1xuICAgICAgICAgIDxUZXh0IGJhY2tncm91bmRDb2xvcj17YmFja2dyb3VuZENvbG9yfSBpbnZlcnNlPXtpc1NlbGVjdGVkfT5cbiAgICAgICAgICAgIHtkaXNwbGF5VGV4dH1cbiAgICAgICAgICA8L1RleHQ+XG4gICAgICAgIH1cbiAgICAgID5cbiAgICAgICAgPFRleHRcbiAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I9e2JhY2tncm91bmRDb2xvcn1cbiAgICAgICAgICBpbnZlcnNlPXtpc1NlbGVjdGVkfVxuICAgICAgICAgIGJvbGQ9e2lzU2VsZWN0ZWR9XG4gICAgICAgID5cbiAgICAgICAgICB7ZGlzcGxheVRleHR9XG4gICAgICAgIDwvVGV4dD5cbiAgICAgIDwvTGluaz5cbiAgICApXG4gIH1cblxuICAvLyBGYWxsYmFjazogc3R5bGVkIGJ1dCBub3QgY2xpY2thYmxlXG4gIHJldHVybiAoXG4gICAgPFRleHQgYmFja2dyb3VuZENvbG9yPXtiYWNrZ3JvdW5kQ29sb3J9IGludmVyc2U9e2lzU2VsZWN0ZWR9PlxuICAgICAge2Rpc3BsYXlUZXh0fVxuICAgIDwvVGV4dD5cbiAgKVxufVxuIl0sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxLQUFLQSxLQUFLLE1BQU0sT0FBTztBQUM5QixTQUFTQyxhQUFhLFFBQVEsS0FBSztBQUNuQyxPQUFPQyxJQUFJLE1BQU0sMkJBQTJCO0FBQzVDLFNBQVNDLGtCQUFrQixRQUFRLCtCQUErQjtBQUNsRSxTQUFTQyxJQUFJLFFBQVEsV0FBVztBQUNoQyxTQUFTQyxrQkFBa0IsUUFBUSx3QkFBd0I7QUFDM0QsY0FBY0MsS0FBSyxRQUFRLG1CQUFtQjtBQUU5QyxLQUFLQyxLQUFLLEdBQUc7RUFDWEMsT0FBTyxFQUFFLE1BQU07RUFDZkMsZUFBZSxDQUFDLEVBQUUsTUFBTUgsS0FBSztFQUM3QkksVUFBVSxDQUFDLEVBQUUsT0FBTztBQUN0QixDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPLFNBQUFDLGtCQUFBQyxFQUFBO0VBQUEsTUFBQUMsQ0FBQSxHQUFBQyxFQUFBO0VBQTJCO0lBQUFOLE9BQUE7SUFBQUMsZUFBQTtJQUFBQyxVQUFBLEVBQUFLO0VBQUEsSUFBQUgsRUFJMUI7RUFETixNQUFBRixVQUFBLEdBQUFLLEVBQWtCLEtBQWxCQyxTQUFrQixHQUFsQixLQUFrQixHQUFsQkQsRUFBa0I7RUFFbEIsTUFBQUUsU0FBQSxHQUFrQlosa0JBQWtCLENBQUNHLE9BQU8sQ0FBQztFQUM3QyxNQUFBVSxXQUFBLEdBQW9CLFdBQVdWLE9BQU8sR0FBRztFQUd6QyxJQUFJUyxTQUFpQyxJQUFwQmQsa0JBQWtCLENBQUMsQ0FBQztJQUNuQyxNQUFBZ0IsT0FBQSxHQUFnQmxCLGFBQWEsQ0FBQ2dCLFNBQVMsQ0FBQyxDQUFBRyxJQUFLO0lBQUEsSUFBQUMsRUFBQTtJQUFBLElBQUFDLEVBQUE7SUFBQSxJQUFBVCxDQUFBLFFBQUFKLGVBQUEsSUFBQUksQ0FBQSxRQUFBSyxXQUFBLElBQUFMLENBQUEsUUFBQUgsVUFBQTtNQU12Q1csRUFBQSxJQUFDLElBQUksQ0FBa0JaLGVBQWUsQ0FBZkEsZ0JBQWMsQ0FBQyxDQUFXQyxPQUFVLENBQVZBLFdBQVMsQ0FBQyxDQUN4RFEsWUFBVSxDQUNiLEVBRkMsSUFBSSxDQUVFO01BR1RJLEVBQUEsSUFBQyxJQUFJLENBQ2NiLGVBQWUsQ0FBZkEsZ0JBQWMsQ0FBQyxDQUN2QkMsT0FBVSxDQUFWQSxXQUFTLENBQUMsQ0FDYkEsSUFBVSxDQUFWQSxXQUFTLENBQUMsQ0FFZlEsWUFBVSxDQUNiLEVBTkMsSUFBSSxDQU1FO01BQUFMLENBQUEsTUFBQUosZUFBQTtNQUFBSSxDQUFBLE1BQUFLLFdBQUE7TUFBQUwsQ0FBQSxNQUFBSCxVQUFBO01BQUFHLENBQUEsTUFBQVEsRUFBQTtNQUFBUixDQUFBLE1BQUFTLEVBQUE7SUFBQTtNQUFBRCxFQUFBLEdBQUFSLENBQUE7TUFBQVMsRUFBQSxHQUFBVCxDQUFBO0lBQUE7SUFBQSxJQUFBVSxFQUFBO0lBQUEsSUFBQVYsQ0FBQSxRQUFBTSxPQUFBLElBQUFOLENBQUEsUUFBQVEsRUFBQSxJQUFBUixDQUFBLFFBQUFTLEVBQUE7TUFkVEMsRUFBQSxJQUFDLElBQUksQ0FDRUosR0FBTyxDQUFQQSxRQUFNLENBQUMsQ0FFVixRQUVPLENBRlAsQ0FBQUUsRUFFTSxDQUFDLENBR1QsQ0FBQUMsRUFNTSxDQUNSLEVBZkMsSUFBSSxDQWVFO01BQUFULENBQUEsTUFBQU0sT0FBQTtNQUFBTixDQUFBLE1BQUFRLEVBQUE7TUFBQVIsQ0FBQSxNQUFBUyxFQUFBO01BQUFULENBQUEsTUFBQVUsRUFBQTtJQUFBO01BQUFBLEVBQUEsR0FBQVYsQ0FBQTtJQUFBO0lBQUEsT0FmUFUsRUFlTztFQUFBO0VBRVYsSUFBQUYsRUFBQTtFQUFBLElBQUFSLENBQUEsUUFBQUosZUFBQSxJQUFBSSxDQUFBLFNBQUFLLFdBQUEsSUFBQUwsQ0FBQSxTQUFBSCxVQUFBO0lBSUNXLEVBQUEsSUFBQyxJQUFJLENBQWtCWixlQUFlLENBQWZBLGdCQUFjLENBQUMsQ0FBV0MsT0FBVSxDQUFWQSxXQUFTLENBQUMsQ0FDeERRLFlBQVUsQ0FDYixFQUZDLElBQUksQ0FFRTtJQUFBTCxDQUFBLE1BQUFKLGVBQUE7SUFBQUksQ0FBQSxPQUFBSyxXQUFBO0lBQUFMLENBQUEsT0FBQUgsVUFBQTtJQUFBRyxDQUFBLE9BQUFRLEVBQUE7RUFBQTtJQUFBQSxFQUFBLEdBQUFSLENBQUE7RUFBQTtFQUFBLE9BRlBRLEVBRU87QUFBQSIsImlnbm9yZUxpc3QiOltdfQ==