File size: 2,094 Bytes
703a33a
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
import { useState } from "react";
import type { RouteMatrixEntry } from "../content/types";

interface RouteMatrixProps {
  routes: RouteMatrixEntry[];
}

export function RouteMatrix({ routes }: RouteMatrixProps) {
  const [activeRoute, setActiveRoute] = useState(routes[0]?.route ?? "");
  const selected = routes.find((route) => route.route === activeRoute) ?? routes[0];

  return (
    <div className="matrix-layout">
      <div className="matrix-list" role="tablist" aria-label="Route matrix">
        {routes.map((route) => (
          <button
            key={route.route}
            type="button"
            className={route.route === selected.route ? "route-card active" : "route-card"}
            onClick={() => setActiveRoute(route.route)}
          >
            <strong>{route.route}</strong>
            <span>{route.useCase}</span>
          </button>
        ))}
      </div>
      <div className="matrix-detail">
        <div className="detail-head">
          <h3>{selected.route}</h3>
          <span className="route-pill">{selected.outputType}</span>
        </div>
        <p>{selected.notes}</p>
        <dl className="detail-grid">
          <div>
            <dt>Use case</dt>
            <dd>{selected.useCase}</dd>
          </div>
          <div>
            <dt>UI surface</dt>
            <dd>{selected.uiSurface}</dd>
          </div>
          <div>
            <dt>Models</dt>
            <dd>{selected.models.join(", ")}</dd>
          </div>
        </dl>
        <table className="matrix-table">
          <thead>
            <tr>
              <th>Route</th>
              <th>Use case</th>
              <th>Output</th>
              <th>UI surface</th>
            </tr>
          </thead>
          <tbody>
            {routes.map((route) => (
              <tr key={route.route}>
                <td>{route.route}</td>
                <td>{route.useCase}</td>
                <td>{route.outputType}</td>
                <td>{route.uiSurface}</td>
              </tr>
            ))}
          </tbody>
        </table>
      </div>
    </div>
  );
}