Skip to content

Commit c5c20ef

Browse files
committed
feat: Create ShikiComponentList component
1 parent ac0fae1 commit c5c20ef

File tree

1 file changed

+51
-0
lines changed

1 file changed

+51
-0
lines changed
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
import * as React from "react";
2+
import { ShikiComponent } from "./shikiComponent";
3+
import "../shiki.css";
4+
import "../styles.css";
5+
import type { TestCaseFixture } from "@cursorless/common";
6+
import { testCasesByLanguage } from "../data";
7+
8+
export type ShikiComponentComponentProps = TestCaseFixture & {
9+
filename: string;
10+
raw: TestCaseFixture;
11+
before: { html: string; data: string[] };
12+
during: { html: string; data: string[] };
13+
after: { html: string; data: string[] };
14+
};
15+
16+
export function ShikiComponentList({
17+
language,
18+
debug,
19+
}: {
20+
language: string;
21+
debug?: boolean;
22+
}) {
23+
if (!(language in testCasesByLanguage)) {
24+
console.warn(
25+
`Valid languages: ${Object.keys(testCasesByLanguage).join(", ")}`,
26+
);
27+
return <></>;
28+
}
29+
const rawData =
30+
(testCasesByLanguage as { [key: string]: unknown[] })[language] ?? [];
31+
const data: ShikiComponentComponentProps[] =
32+
rawData as ShikiComponentComponentProps[];
33+
34+
return (
35+
<section className="dark:text-stone-100">
36+
{data.map((item) => {
37+
if (!item) {
38+
return <p>Error: item is null</p>;
39+
}
40+
const { filename } = item;
41+
if (filename) {
42+
return (
43+
<ShikiComponent data={item} debug={debug} key={item.filename} />
44+
);
45+
} else {
46+
return <></>;
47+
}
48+
})}
49+
</section>
50+
);
51+
}

0 commit comments

Comments
 (0)