import { codeToHtml } from "shiki";
import { CodeTabs } from "./code-tabs";
const vercelDarkTheme = {
name: "vercel-dark",
type: "dark" as const,
colors: {
"editor.background": "transparent",
"editor.foreground": "#EDEDED",
},
settings: [
{
scope: ["comment", "punctuation.definition.comment"],
settings: { foreground: "#666666" },
},
{
scope: ["string", "string.quoted", "string.template"],
settings: { foreground: "#50E3C2" },
},
{
scope: [
"constant.numeric",
"constant.language.boolean",
"constant.language.null",
],
settings: { foreground: "#50E3C2" },
},
{
scope: ["keyword", "storage.type", "storage.modifier"],
settings: { foreground: "#FF0080" },
},
{
scope: ["keyword.operator", "keyword.control"],
settings: { foreground: "#FF0080" },
},
{
scope: ["entity.name.function", "support.function", "meta.function-call"],
settings: { foreground: "#7928CA" },
},
{
scope: ["variable", "variable.other", "variable.parameter"],
settings: { foreground: "#EDEDED" },
},
{
scope: ["entity.name.tag", "support.class.component", "entity.name.type"],
settings: { foreground: "#FF0080" },
},
{
scope: ["punctuation", "meta.brace", "meta.bracket"],
settings: { foreground: "#888888" },
},
{
scope: [
"support.type.property-name",
"entity.name.tag.json",
"meta.object-literal.key",
],
settings: { foreground: "#EDEDED" },
},
{
scope: ["entity.other.attribute-name"],
settings: { foreground: "#50E3C2" },
},
{
scope: ["support.type.primitive", "entity.name.type.primitive"],
settings: { foreground: "#50E3C2" },
},
],
};
const vercelLightTheme = {
name: "vercel-light",
type: "light" as const,
colors: {
"editor.background": "transparent",
"editor.foreground": "#171717",
},
settings: [
{
scope: ["comment", "punctuation.definition.comment"],
settings: { foreground: "#6b7280" },
},
{
scope: ["string", "string.quoted", "string.template"],
settings: { foreground: "#067a6e" },
},
{
scope: [
"constant.numeric",
"constant.language.boolean",
"constant.language.null",
],
settings: { foreground: "#067a6e" },
},
{
scope: ["keyword", "storage.type", "storage.modifier"],
settings: { foreground: "#d6409f" },
},
{
scope: ["keyword.operator", "keyword.control"],
settings: { foreground: "#d6409f" },
},
{
scope: ["entity.name.function", "support.function", "meta.function-call"],
settings: { foreground: "#6e56cf" },
},
{
scope: ["variable", "variable.other", "variable.parameter"],
settings: { foreground: "#171717" },
},
{
scope: ["entity.name.tag", "support.class.component", "entity.name.type"],
settings: { foreground: "#d6409f" },
},
{
scope: ["punctuation", "meta.brace", "meta.bracket"],
settings: { foreground: "#6b7280" },
},
{
scope: [
"support.type.property-name",
"entity.name.tag.json",
"meta.object-literal.key",
],
settings: { foreground: "#171717" },
},
{
scope: ["entity.other.attribute-name"],
settings: { foreground: "#067a6e" },
},
{
scope: ["support.type.primitive", "entity.name.type.primitive"],
settings: { foreground: "#067a6e" },
},
],
};
interface PackageInstallProps {
packages: string;
}
const packageManagers = [
{ label: "npm", value: "npm", command: "npm install" },
{ label: "pnpm", value: "pnpm", command: "pnpm add" },
{ label: "yarn", value: "yarn", command: "yarn add" },
{ label: "bun", value: "bun", command: "bun add" },
];
export async function PackageInstall({ packages }: PackageInstallProps) {
const tabs = await Promise.all(
packageManagers.map(async (pm) => {
const code = `${pm.command} ${packages}`;
const html = await codeToHtml(code, {
lang: "bash",
themes: {
light: vercelLightTheme,
dark: vercelDarkTheme,
},
defaultColor: false,
});
return {
label: pm.label,
value: pm.value,
code,
html,
};
}),
);
return ;
}