{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "code-diff",
  "type": "registry:block",
  "title": "Code Diff",
  "description": "Code Diff component for AI interfaces.",
  "dependencies": [
    "@pierre/diffs",
    "lucide-react",
    "zod"
  ],
  "registryDependencies": [
    "button",
    "collapsible"
  ],
  "files": [
    {
      "path": "components/tool-ui/code-diff/_adapter.tsx",
      "type": "registry:component",
      "target": "components/tool-ui/code-diff/_adapter.tsx",
      "content": "/**\n * Adapter: UI and utility re-exports for copy-standalone portability.\n *\n * When copying this component to another project, update these imports\n * to match your project's paths:\n *\n *   cn          -> Your Tailwind merge utility (e.g., \"@/lib/utils\", \"~/lib/cn\")\n *   Button      -> shadcn/ui Button\n *   Collapsible -> shadcn/ui Collapsible\n */\n\nexport { cn } from \"@/lib/utils\";\nexport { Button } from \"@/components/ui/button\";\nexport { Collapsible, CollapsibleTrigger } from \"@/components/ui/collapsible\";\n"
    },
    {
      "path": "components/tool-ui/code-diff/code-diff.tsx",
      "type": "registry:component",
      "target": "components/tool-ui/code-diff/code-diff.tsx",
      "content": "\"use client\";\n\nimport {\n  useState,\n  useCallback,\n  useEffect,\n  useMemo,\n  createContext,\n  use,\n  type ReactNode,\n} from \"react\";\nimport {\n  FileDiff as PierreFileDiff,\n  PatchDiff as PierrePatchDiff,\n} from \"@pierre/diffs/react\";\nimport { parseDiffFromFile, RegisteredCustomThemes } from \"@pierre/diffs\";\nimport type { FileDiffMetadata, ThemesType } from \"@pierre/diffs\";\nimport { Copy, Check, ChevronDown, ChevronUp } from \"lucide-react\";\nimport type { CodeDiffProps } from \"./schema\";\nimport { useCopyToClipboard } from \"../shared/use-copy-to-clipboard\";\nimport { Button, cn, Collapsible, CollapsibleTrigger } from \"./_adapter\";\n\n/*\n * Pierre's shared_highlighter registers custom themes with dynamic imports\n * (`import(\"../themes/pierre-dark.js\")`) that fail under Turbopack because the\n * package `exports` field doesn't include those subpaths. We override the\n * RegisteredCustomThemes map entries with loaders that point to local vendored\n * theme files in `components/tool-ui/shared`, which Turbopack can resolve.\n */\nRegisteredCustomThemes.set(\"pierre-dark\", () =>\n  import(\"../shared/pierre-dark-theme.js\").then((m) => m.default as never),\n);\nRegisteredCustomThemes.set(\"pierre-light\", () =>\n  import(\"../shared/pierre-light-theme.js\").then((m) => m.default as never),\n);\n\nconst COPY_ID = \"codediff-code\";\n\n/* ── Theme detection (mirrors CodeBlock) ────────────────────────── */\n\nfunction getSystemTheme(): \"light\" | \"dark\" {\n  if (typeof window === \"undefined\") return \"light\";\n  return window.matchMedia?.(\"(prefers-color-scheme: dark)\").matches\n    ? \"dark\"\n    : \"light\";\n}\n\nfunction getDocumentTheme(): \"light\" | \"dark\" | null {\n  if (typeof document === \"undefined\") return null;\n  const root = document.documentElement;\n  const dataTheme = root.getAttribute(\"data-theme\")?.toLowerCase();\n  if (dataTheme === \"dark\") return \"dark\";\n  if (dataTheme === \"light\") return \"light\";\n  if (root.classList.contains(\"dark\")) return \"dark\";\n  if (root.classList.contains(\"light\")) return \"light\";\n  return null;\n}\n\nfunction useResolvedTheme(): \"light\" | \"dark\" {\n  const [theme, setTheme] = useState<\"light\" | \"dark\">(() => {\n    return getDocumentTheme() ?? getSystemTheme();\n  });\n\n  useEffect(() => {\n    if (typeof window === \"undefined\" || typeof document === \"undefined\") {\n      return;\n    }\n\n    const update = () => setTheme(getDocumentTheme() ?? getSystemTheme());\n\n    const mql = window.matchMedia?.(\"(prefers-color-scheme: dark)\");\n    mql?.addEventListener(\"change\", update);\n\n    const observer = new MutationObserver(update);\n    observer.observe(document.documentElement, {\n      attributes: true,\n      attributeFilter: [\"class\", \"data-theme\"],\n    });\n\n    return () => {\n      mql?.removeEventListener(\"change\", update);\n      observer.disconnect();\n    };\n  }, []);\n\n  return theme;\n}\n\n/* ── Language display names (mirrors CodeBlock) ─────────────────── */\n\nconst LANGUAGE_DISPLAY_NAMES: Record<string, string> = {\n  typescript: \"TypeScript\",\n  javascript: \"JavaScript\",\n  python: \"Python\",\n  tsx: \"TSX\",\n  jsx: \"JSX\",\n  json: \"JSON\",\n  bash: \"Bash\",\n  shell: \"Shell\",\n  css: \"CSS\",\n  html: \"HTML\",\n  markdown: \"Markdown\",\n  sql: \"SQL\",\n  yaml: \"YAML\",\n  go: \"Go\",\n  rust: \"Rust\",\n  text: \"Plain Text\",\n};\n\nfunction getLanguageDisplayName(lang: string): string {\n  return LANGUAGE_DISPLAY_NAMES[lang.toLowerCase()] || lang.toUpperCase();\n}\n\n/* ── Shared context ─────────────────────────────────────────────── */\n\ntype CodeDiffSharedState = {\n  id: string;\n  isPatchMode: boolean;\n  language: string;\n  lineNumbers: \"visible\" | \"hidden\";\n  filename?: string;\n  diffStyle: \"unified\" | \"split\";\n  copyableCode: string;\n  isCopied: boolean;\n  copyCode: () => void;\n  isCollapsed: boolean;\n  shouldCollapse: boolean;\n  toggleExpanded: () => void;\n  resolvedTheme: \"light\" | \"dark\";\n  pierreThemes: ThemesType;\n  fileDiffMetadata: FileDiffMetadata | null;\n  patch: string | null;\n  additions: number;\n  deletions: number;\n};\n\nconst CodeDiffContext = createContext<CodeDiffSharedState | null>(null);\n\nfunction useCodeDiff(): CodeDiffSharedState {\n  const context = use(CodeDiffContext);\n  if (!context) {\n    throw new Error(\n      \"CodeDiff subcomponents must be used within <CodeDiff.Root>.\",\n    );\n  }\n  return context;\n}\n\n/* ── Subcomponents ──────────────────────────────────────────────── */\n\nexport type CodeDiffRootProps = CodeDiffProps & {\n  children: ReactNode;\n  expanded?: boolean;\n  defaultExpanded?: boolean;\n  onExpandedChange?: (expanded: boolean) => void;\n};\n\nfunction CodeDiffRoot({\n  id,\n  oldCode,\n  newCode,\n  patch,\n  language = \"text\",\n  filename,\n  lineNumbers = \"visible\",\n  diffStyle = \"unified\",\n  maxCollapsedLines,\n  className,\n  children,\n  expanded: expandedProp,\n  defaultExpanded = false,\n  onExpandedChange,\n}: CodeDiffRootProps) {\n  const resolvedTheme = useResolvedTheme();\n  const [expandedState, setExpandedState] = useState(defaultExpanded);\n  const { copiedId, copy } = useCopyToClipboard();\n  const isCopied = copiedId === COPY_ID;\n\n  const expanded = expandedProp ?? expandedState;\n  const setExpanded = useCallback(\n    (nextExpanded: boolean) => {\n      if (expandedProp === undefined) {\n        setExpandedState(nextExpanded);\n      }\n      onExpandedChange?.(nextExpanded);\n    },\n    [expandedProp, onExpandedChange],\n  );\n\n  const pierreThemes: ThemesType = {\n    dark: \"pierre-dark\",\n    light: \"pierre-light\",\n  };\n\n  // Auto-detect mode: if `patch` is provided, use patch mode; otherwise files mode\n  const isPatchMode = !!patch;\n\n  const fileDiffMetadata = useMemo(() => {\n    if (isPatchMode) return null;\n    return parseDiffFromFile(\n      {\n        name: filename ?? \"file\",\n        contents: oldCode ?? \"\",\n        lang: language as never,\n      },\n      {\n        name: filename ?? \"file\",\n        contents: newCode ?? \"\",\n        lang: language as never,\n      },\n    );\n  }, [isPatchMode, oldCode, newCode, filename, language]);\n\n  const copyableCode = isPatchMode ? (patch ?? \"\") : (newCode ?? oldCode ?? \"\");\n\n  const lineCount = useMemo(() => {\n    if (isPatchMode) {\n      return (patch ?? \"\").split(\"\\n\").length;\n    }\n    if (fileDiffMetadata) {\n      return fileDiffMetadata.unifiedLineCount;\n    }\n    return 0;\n  }, [isPatchMode, patch, fileDiffMetadata]);\n\n  const { additions, deletions } = useMemo(() => {\n    if (!isPatchMode && fileDiffMetadata) {\n      let add = 0;\n      let del = 0;\n      for (const hunk of fileDiffMetadata.hunks) {\n        add += hunk.additionLines;\n        del += hunk.deletionLines;\n      }\n      return { additions: add, deletions: del };\n    }\n    if (isPatchMode && patch) {\n      let add = 0;\n      let del = 0;\n      for (const line of patch.split(\"\\n\")) {\n        if (line.startsWith(\"+\") && !line.startsWith(\"+++ \")) add++;\n        else if (line.startsWith(\"-\") && !line.startsWith(\"--- \")) del++;\n      }\n      return { additions: add, deletions: del };\n    }\n    return { additions: 0, deletions: 0 };\n  }, [isPatchMode, fileDiffMetadata, patch]);\n\n  const shouldCollapse = !!maxCollapsedLines && lineCount > maxCollapsedLines;\n  const isCollapsed = shouldCollapse && !expanded;\n\n  const copyCode = useCallback(() => {\n    void copy(copyableCode, COPY_ID);\n  }, [copyableCode, copy]);\n\n  const toggleExpanded = useCallback(() => {\n    setExpanded(!expanded);\n  }, [expanded, setExpanded]);\n\n  const state: CodeDiffSharedState = {\n    id,\n    isPatchMode,\n    language,\n    lineNumbers,\n    filename,\n    diffStyle,\n    copyableCode,\n    isCopied,\n    copyCode,\n    isCollapsed,\n    shouldCollapse,\n    toggleExpanded,\n    resolvedTheme,\n    pierreThemes,\n    fileDiffMetadata,\n    patch: isPatchMode ? (patch ?? null) : null,\n    additions,\n    deletions,\n  };\n\n  return (\n    <CodeDiffContext.Provider value={state}>\n      <div\n        className={cn(\n          \"@container flex w-full min-w-80 flex-col gap-3\",\n          className,\n        )}\n        data-tool-ui-id={id}\n        data-slot=\"code-diff\"\n      >\n        <div className=\"border-border bg-card overflow-hidden rounded-lg border shadow-xs\">\n          <Collapsible open={!isCollapsed}>{children}</Collapsible>\n        </div>\n      </div>\n    </CodeDiffContext.Provider>\n  );\n}\n\nexport type CodeDiffSectionProps = {\n  className?: string;\n};\n\nfunction CodeDiffHeader({ className }: CodeDiffSectionProps) {\n  const { language, filename, isCopied, copyCode, additions, deletions } =\n    useCodeDiff();\n  const hasChanges = additions > 0 || deletions > 0;\n  return (\n    <div\n      className={cn(\n        \"bg-card flex items-center justify-between gap-2 border-b px-4 py-2\",\n        className,\n      )}\n    >\n      <div className=\"flex items-center gap-1\">\n        <span className=\"text-muted-foreground text-sm\">\n          {getLanguageDisplayName(language)}\n        </span>\n        {filename && (\n          <>\n            <span className=\"text-muted-foreground/50\">&bull;</span>\n            <span className=\"text-foreground text-sm font-medium\">\n              {filename}\n            </span>\n          </>\n        )}\n      </div>\n      {hasChanges && (\n        <span className=\"ml-auto text-xs font-mono tabular-nums\">\n          {additions > 0 && (\n            <span style={{ color: \"#00cab1\" }}>+{additions}</span>\n          )}\n          {additions > 0 && deletions > 0 && \" \"}\n          {deletions > 0 && (\n            <span style={{ color: \"#ff2e3f\" }}>-{deletions}</span>\n          )}\n        </span>\n      )}\n      <Button\n        variant=\"ghost\"\n        size=\"sm\"\n        onClick={copyCode}\n        className=\"h-7 w-7 p-0\"\n        aria-label={isCopied ? \"Copied\" : \"Copy code\"}\n      >\n        {isCopied ? (\n          <Check className=\"h-4 w-4 text-green-700 dark:text-green-400\" />\n        ) : (\n          <Copy className=\"text-muted-foreground h-4 w-4\" />\n        )}\n      </Button>\n    </div>\n  );\n}\n\nfunction CodeDiffContent({ className }: CodeDiffSectionProps) {\n  const {\n    isPatchMode,\n    diffStyle,\n    lineNumbers,\n    isCollapsed,\n    resolvedTheme,\n    pierreThemes,\n    fileDiffMetadata,\n    patch,\n  } = useCodeDiff();\n\n  const disableLineNumbers = lineNumbers === \"hidden\";\n\n  return (\n    <div\n      className={cn(\n        \"overflow-x-auto overflow-y-clip text-sm\",\n        isCollapsed && \"max-h-[200px]\",\n        className,\n      )}\n    >\n      {!isPatchMode && fileDiffMetadata && (\n        <PierreFileDiff\n          fileDiff={fileDiffMetadata}\n          options={{\n            theme: pierreThemes,\n            themeType: resolvedTheme,\n            diffStyle,\n            disableFileHeader: true,\n            disableLineNumbers,\n          }}\n        />\n      )}\n      {isPatchMode && patch && (\n        <PierrePatchDiff\n          patch={patch}\n          options={{\n            theme: pierreThemes,\n            themeType: resolvedTheme,\n            diffStyle,\n            disableFileHeader: true,\n            disableLineNumbers,\n          }}\n        />\n      )}\n    </div>\n  );\n}\n\nfunction CodeDiffCollapseToggle({ className }: CodeDiffSectionProps) {\n  const { shouldCollapse, isCollapsed, toggleExpanded } = useCodeDiff();\n\n  if (!shouldCollapse) return null;\n\n  return (\n    <CollapsibleTrigger asChild>\n      <Button\n        variant=\"ghost\"\n        onClick={toggleExpanded}\n        className={cn(\n          \"text-muted-foreground w-full rounded-none border-t font-normal\",\n          className,\n        )}\n      >\n        {isCollapsed ? (\n          <>\n            <ChevronDown className=\"mr-1 size-4\" />\n            Show full diff\n          </>\n        ) : (\n          <>\n            <ChevronUp className=\"mr-2 h-4 w-4\" />\n            Collapse\n          </>\n        )}\n      </Button>\n    </CollapsibleTrigger>\n  );\n}\n\n/* ── Composed preset (callable as a flat component) ─────────────── */\n\nexport type CodeDiffComposedProps = Omit<CodeDiffRootProps, \"children\">;\n\nfunction CodeDiffComposed(props: CodeDiffComposedProps) {\n  return (\n    <CodeDiffRoot {...props}>\n      <CodeDiffHeader />\n      <CodeDiffContent />\n      <CodeDiffCollapseToggle />\n    </CodeDiffRoot>\n  );\n}\n\n/* ── Compound export: CodeDiff is callable AND has subcomponents ── */\n\ntype CodeDiffComponent = typeof CodeDiffComposed & {\n  Root: typeof CodeDiffRoot;\n  Header: typeof CodeDiffHeader;\n  Content: typeof CodeDiffContent;\n  CollapseToggle: typeof CodeDiffCollapseToggle;\n};\n\nexport const CodeDiff = Object.assign(CodeDiffComposed, {\n  Root: CodeDiffRoot,\n  Header: CodeDiffHeader,\n  Content: CodeDiffContent,\n  CollapseToggle: CodeDiffCollapseToggle,\n}) as CodeDiffComponent;\n"
    },
    {
      "path": "components/tool-ui/code-diff/index.tsx",
      "type": "registry:component",
      "target": "components/tool-ui/code-diff/index.tsx",
      "content": "export { CodeDiff } from \"./code-diff\";\nexport type {\n  CodeDiffRootProps,\n  CodeDiffComposedProps,\n  CodeDiffSectionProps,\n} from \"./code-diff\";\nexport type { CodeDiffProps, SerializableCodeDiff } from \"./schema\";\n"
    },
    {
      "path": "components/tool-ui/code-diff/schema.ts",
      "type": "registry:lib",
      "target": "components/tool-ui/code-diff/schema.ts",
      "content": "import { z } from \"zod\";\nimport { defineToolUiContract } from \"../shared/contract\";\nimport {\n  ToolUIIdSchema,\n  ToolUIReceiptSchema,\n  ToolUIRoleSchema,\n} from \"../shared/schema\";\n\nconst CodeDiffPropsSchemaBase = z.object({\n  id: ToolUIIdSchema,\n  role: ToolUIRoleSchema.optional(),\n  receipt: ToolUIReceiptSchema.optional(),\n  oldCode: z.string().optional(),\n  newCode: z.string().optional(),\n  patch: z.string().optional(),\n  language: z.string().trim().min(1).default(\"text\"),\n  filename: z.string().optional(),\n  lineNumbers: z.enum([\"visible\", \"hidden\"]).default(\"visible\"),\n  diffStyle: z.enum([\"unified\", \"split\"]).default(\"unified\"),\n  maxCollapsedLines: z.number().min(1).optional(),\n  className: z.string().optional(),\n});\n\nfunction validateCodeDiffInputMode(\n  data: { patch?: string; oldCode?: string; newCode?: string },\n  ctx: z.RefinementCtx,\n) {\n  const hasPatch = !!data.patch;\n  const hasFiles = !!data.oldCode || !!data.newCode;\n\n  if (!hasPatch && !hasFiles) {\n    ctx.addIssue({\n      code: \"custom\",\n      message:\n        \"Provide either a patch string or at least one of oldCode/newCode\",\n    });\n  }\n\n  if (hasPatch && hasFiles) {\n    ctx.addIssue({\n      code: \"custom\",\n      message:\n        \"Cannot mix patch mode with oldCode/newCode — use one or the other\",\n    });\n  }\n}\n\nexport const CodeDiffPropsSchema = CodeDiffPropsSchemaBase.superRefine(\n  validateCodeDiffInputMode,\n);\n\nexport type CodeDiffProps = z.infer<typeof CodeDiffPropsSchema>;\n\nexport const SerializableCodeDiffSchema = CodeDiffPropsSchemaBase.omit({\n  className: true,\n}).superRefine(validateCodeDiffInputMode);\n\nexport type SerializableCodeDiff = z.infer<typeof SerializableCodeDiffSchema>;\n\nconst SerializableCodeDiffSchemaContract = defineToolUiContract(\n  \"CodeDiff\",\n  SerializableCodeDiffSchema,\n);\n\nexport const parseSerializableCodeDiff: (\n  input: unknown,\n) => SerializableCodeDiff = SerializableCodeDiffSchemaContract.parse;\n\nexport const safeParseSerializableCodeDiff: (\n  input: unknown,\n) => SerializableCodeDiff | null = SerializableCodeDiffSchemaContract.safeParse;\n"
    },
    {
      "path": "components/tool-ui/shared/contract.ts",
      "type": "registry:lib",
      "target": "components/tool-ui/shared/contract.ts",
      "content": "import { z } from \"zod\";\nimport { parseWithSchema, safeParseWithSchema } from \"./parse\";\n\nexport interface ToolUiContract<T> {\n  schema: z.ZodType<T>;\n  parse: (input: unknown) => T;\n  safeParse: (input: unknown) => T | null;\n}\n\nexport function defineToolUiContract<T>(\n  componentName: string,\n  schema: z.ZodType<T>,\n): ToolUiContract<T> {\n  return {\n    schema,\n    parse: (input: unknown) => parseWithSchema(schema, input, componentName),\n    safeParse: (input: unknown) => safeParseWithSchema(schema, input),\n  };\n}\n"
    },
    {
      "path": "components/tool-ui/shared/parse.ts",
      "type": "registry:lib",
      "target": "components/tool-ui/shared/parse.ts",
      "content": "import { z } from \"zod\";\n\nfunction formatZodPath(path: Array<string | number | symbol>): string {\n  if (path.length === 0) return \"root\";\n  return path\n    .map((segment) =>\n      typeof segment === \"number\" ? `[${segment}]` : String(segment),\n    )\n    .join(\".\");\n}\n\n/**\n * Format Zod errors into a compact `path: message` string.\n */\nexport function formatZodError(error: z.ZodError): string {\n  const parts = error.issues.map((issue) => {\n    const path = formatZodPath(issue.path);\n    return `${path}: ${issue.message}`;\n  });\n\n  return Array.from(new Set(parts)).join(\"; \");\n}\n\n/**\n * Parse unknown input and throw a readable error.\n */\nexport function parseWithSchema<T>(\n  schema: z.ZodType<T>,\n  input: unknown,\n  name: string,\n): T {\n  const res = schema.safeParse(input);\n  if (!res.success) {\n    throw new Error(`Invalid ${name} payload: ${formatZodError(res.error)}`);\n  }\n  return res.data;\n}\n\n/**\n * Parse unknown input, returning `null` instead of throwing on failure.\n *\n * Use this in assistant-ui `render` functions where `args` stream in\n * incrementally and may be incomplete until the tool call finishes.\n */\nexport function safeParseWithSchema<T>(\n  schema: z.ZodType<T>,\n  input: unknown,\n): T | null {\n  const res = schema.safeParse(input);\n  return res.success ? res.data : null;\n}\n"
    },
    {
      "path": "components/tool-ui/shared/pierre-dark-theme.js",
      "type": "registry:file",
      "target": "components/tool-ui/shared/pierre-dark-theme.js",
      "content": "//#region src/themes/pierre-dark.json\nvar name = \"pierre-dark\";\nvar type = \"dark\";\nvar colors = {\n  \"editor.background\": \"#070707\",\n  \"editor.foreground\": \"#fbfbfb\",\n  foreground: \"#fbfbfb\",\n  focusBorder: \"#009fff\",\n  \"selection.background\": \"#19283c\",\n  \"editor.selectionBackground\": \"#009fff4d\",\n  \"editor.lineHighlightBackground\": \"#19283c8c\",\n  \"editorCursor.foreground\": \"#009fff\",\n  \"editorLineNumber.foreground\": \"#84848A\",\n  \"editorLineNumber.activeForeground\": \"#adadb1\",\n  \"editorIndentGuide.background\": \"#39393c\",\n  \"editorIndentGuide.activeBackground\": \"#2e2e30\",\n  \"diffEditor.insertedTextBackground\": \"#00cab11a\",\n  \"diffEditor.deletedTextBackground\": \"#ff2e3f1a\",\n  \"sideBar.background\": \"#141415\",\n  \"sideBar.foreground\": \"#adadb1\",\n  \"sideBar.border\": \"#070707\",\n  \"sideBarTitle.foreground\": \"#fbfbfb\",\n  \"sideBarSectionHeader.background\": \"#141415\",\n  \"sideBarSectionHeader.foreground\": \"#adadb1\",\n  \"sideBarSectionHeader.border\": \"#070707\",\n  \"activityBar.background\": \"#141415\",\n  \"activityBar.foreground\": \"#fbfbfb\",\n  \"activityBar.border\": \"#070707\",\n  \"activityBar.activeBorder\": \"#009fff\",\n  \"activityBarBadge.background\": \"#009fff\",\n  \"activityBarBadge.foreground\": \"#070707\",\n  \"titleBar.activeBackground\": \"#141415\",\n  \"titleBar.activeForeground\": \"#fbfbfb\",\n  \"titleBar.inactiveBackground\": \"#141415\",\n  \"titleBar.inactiveForeground\": \"#84848A\",\n  \"titleBar.border\": \"#070707\",\n  \"list.activeSelectionBackground\": \"#19283c99\",\n  \"list.activeSelectionForeground\": \"#fbfbfb\",\n  \"list.inactiveSelectionBackground\": \"#19283c73\",\n  \"list.hoverBackground\": \"#19283c59\",\n  \"list.focusOutline\": \"#009fff\",\n  \"tab.activeBackground\": \"#070707\",\n  \"tab.activeForeground\": \"#fbfbfb\",\n  \"tab.activeBorderTop\": \"#009fff\",\n  \"tab.inactiveBackground\": \"#141415\",\n  \"tab.inactiveForeground\": \"#84848A\",\n  \"tab.border\": \"#070707\",\n  \"editorGroupHeader.tabsBackground\": \"#141415\",\n  \"editorGroupHeader.tabsBorder\": \"#070707\",\n  \"panel.background\": \"#141415\",\n  \"panel.border\": \"#070707\",\n  \"panelTitle.activeBorder\": \"#009fff\",\n  \"panelTitle.activeForeground\": \"#fbfbfb\",\n  \"panelTitle.inactiveForeground\": \"#84848A\",\n  \"statusBar.background\": \"#141415\",\n  \"statusBar.foreground\": \"#adadb1\",\n  \"statusBar.border\": \"#070707\",\n  \"statusBar.noFolderBackground\": \"#141415\",\n  \"statusBar.debuggingBackground\": \"#ffca00\",\n  \"statusBar.debuggingForeground\": \"#070707\",\n  \"statusBarItem.remoteBackground\": \"#141415\",\n  \"statusBarItem.remoteForeground\": \"#adadb1\",\n  \"input.background\": \"#1F1F21\",\n  \"input.border\": \"#424245\",\n  \"input.foreground\": \"#fbfbfb\",\n  \"input.placeholderForeground\": \"#79797F\",\n  \"dropdown.background\": \"#1F1F21\",\n  \"dropdown.border\": \"#424245\",\n  \"dropdown.foreground\": \"#fbfbfb\",\n  \"button.background\": \"#009fff\",\n  \"button.foreground\": \"#070707\",\n  \"button.hoverBackground\": \"#0190e6\",\n  \"textLink.foreground\": \"#009fff\",\n  \"textLink.activeForeground\": \"#009fff\",\n  \"gitDecoration.addedResourceForeground\": \"#00cab1\",\n  \"gitDecoration.conflictingResourceForeground\": \"#ffca00\",\n  \"gitDecoration.modifiedResourceForeground\": \"#009fff\",\n  \"gitDecoration.deletedResourceForeground\": \"#ff2e3f\",\n  \"gitDecoration.untrackedResourceForeground\": \"#00cab1\",\n  \"gitDecoration.ignoredResourceForeground\": \"#84848A\",\n  \"terminal.titleForeground\": \"#adadb1\",\n  \"terminal.titleInactiveForeground\": \"#84848A\",\n  \"terminal.background\": \"#141415\",\n  \"terminal.foreground\": \"#adadb1\",\n  \"terminal.ansiBlack\": \"#141415\",\n  \"terminal.ansiRed\": \"#ff2e3f\",\n  \"terminal.ansiGreen\": \"#0dbe4e\",\n  \"terminal.ansiYellow\": \"#ffca00\",\n  \"terminal.ansiBlue\": \"#009fff\",\n  \"terminal.ansiMagenta\": \"#c635e4\",\n  \"terminal.ansiCyan\": \"#08c0ef\",\n  \"terminal.ansiWhite\": \"#c6c6c8\",\n  \"terminal.ansiBrightBlack\": \"#141415\",\n  \"terminal.ansiBrightRed\": \"#ff2e3f\",\n  \"terminal.ansiBrightGreen\": \"#0dbe4e\",\n  \"terminal.ansiBrightYellow\": \"#ffca00\",\n  \"terminal.ansiBrightBlue\": \"#009fff\",\n  \"terminal.ansiBrightMagenta\": \"#c635e4\",\n  \"terminal.ansiBrightCyan\": \"#08c0ef\",\n  \"terminal.ansiBrightWhite\": \"#c6c6c8\",\n};\nvar tokenColors = [\n  {\n    scope: [\"comment\", \"punctuation.definition.comment\"],\n    settings: { foreground: \"#84848A\" },\n  },\n  {\n    scope: \"comment markup.link\",\n    settings: { foreground: \"#84848A\" },\n  },\n  {\n    scope: [\"string\", \"constant.other.symbol\"],\n    settings: { foreground: \"#5ecc71\" },\n  },\n  {\n    scope: [\n      \"punctuation.definition.string.begin\",\n      \"punctuation.definition.string.end\",\n    ],\n    settings: { foreground: \"#5ecc71\" },\n  },\n  {\n    scope: [\"constant.numeric\", \"constant.language.boolean\"],\n    settings: { foreground: \"#68cdf2\" },\n  },\n  {\n    scope: \"constant\",\n    settings: { foreground: \"#ffd452\" },\n  },\n  {\n    scope: \"punctuation.definition.constant\",\n    settings: { foreground: \"#ffd452\" },\n  },\n  {\n    scope: \"constant.language\",\n    settings: { foreground: \"#68cdf2\" },\n  },\n  {\n    scope: \"variable.other.constant\",\n    settings: { foreground: \"#ffca00\" },\n  },\n  {\n    scope: \"keyword\",\n    settings: { foreground: \"#ff678d\" },\n  },\n  {\n    scope: \"keyword.control\",\n    settings: { foreground: \"#ff678d\" },\n  },\n  {\n    scope: [\"storage\", \"storage.type\", \"storage.modifier\"],\n    settings: { foreground: \"#ff678d\" },\n  },\n  {\n    scope: \"token.storage\",\n    settings: { foreground: \"#ff678d\" },\n  },\n  {\n    scope: [\n      \"keyword.operator.new\",\n      \"keyword.operator.expression.instanceof\",\n      \"keyword.operator.expression.typeof\",\n      \"keyword.operator.expression.void\",\n      \"keyword.operator.expression.delete\",\n      \"keyword.operator.expression.in\",\n      \"keyword.operator.expression.of\",\n      \"keyword.operator.expression.keyof\",\n    ],\n    settings: { foreground: \"#ff678d\" },\n  },\n  {\n    scope: \"keyword.operator.delete\",\n    settings: { foreground: \"#ff678d\" },\n  },\n  {\n    scope: [\"variable\", \"identifier\", \"meta.definition.variable\"],\n    settings: { foreground: \"#ffa359\" },\n  },\n  {\n    scope: [\n      \"variable.other.readwrite\",\n      \"meta.object-literal.key\",\n      \"support.variable.property\",\n      \"support.variable.object.process\",\n      \"support.variable.object.node\",\n    ],\n    settings: { foreground: \"#ffa359\" },\n  },\n  {\n    scope: \"variable.language\",\n    settings: { foreground: \"#ffca00\" },\n  },\n  {\n    scope: \"variable.parameter.function\",\n    settings: { foreground: \"#adadb1\" },\n  },\n  {\n    scope: \"function.parameter\",\n    settings: { foreground: \"#adadb1\" },\n  },\n  {\n    scope: \"variable.parameter\",\n    settings: { foreground: \"#adadb1\" },\n  },\n  {\n    scope: \"variable.parameter.function.language.python\",\n    settings: { foreground: \"#ffd452\" },\n  },\n  {\n    scope: \"variable.parameter.function.python\",\n    settings: { foreground: \"#ffd452\" },\n  },\n  {\n    scope: [\n      \"support.function\",\n      \"entity.name.function\",\n      \"meta.function-call\",\n      \"meta.require\",\n      \"support.function.any-method\",\n      \"variable.function\",\n    ],\n    settings: { foreground: \"#9d6afb\" },\n  },\n  {\n    scope: \"keyword.other.special-method\",\n    settings: { foreground: \"#9d6afb\" },\n  },\n  {\n    scope: \"entity.name.function\",\n    settings: { foreground: \"#9d6afb\" },\n  },\n  {\n    scope: \"support.function.console\",\n    settings: { foreground: \"#9d6afb\" },\n  },\n  {\n    scope: [\n      \"support.type\",\n      \"entity.name.type\",\n      \"entity.name.class\",\n      \"storage.type\",\n    ],\n    settings: { foreground: \"#d568ea\" },\n  },\n  {\n    scope: [\"support.class\", \"entity.name.type.class\"],\n    settings: { foreground: \"#d568ea\" },\n  },\n  {\n    scope: [\n      \"entity.name.class\",\n      \"variable.other.class.js\",\n      \"variable.other.class.ts\",\n    ],\n    settings: { foreground: \"#d568ea\" },\n  },\n  {\n    scope: \"entity.name.class.identifier.namespace.type\",\n    settings: { foreground: \"#d568ea\" },\n  },\n  {\n    scope: \"entity.name.type.namespace\",\n    settings: { foreground: \"#ffca00\" },\n  },\n  {\n    scope: \"entity.other.inherited-class\",\n    settings: { foreground: \"#d568ea\" },\n  },\n  {\n    scope: \"entity.name.namespace\",\n    settings: { foreground: \"#ffca00\" },\n  },\n  {\n    scope: \"keyword.operator\",\n    settings: { foreground: \"#79797F\" },\n  },\n  {\n    scope: [\n      \"keyword.operator.logical\",\n      \"keyword.operator.bitwise\",\n      \"keyword.operator.channel\",\n    ],\n    settings: { foreground: \"#08c0ef\" },\n  },\n  {\n    scope: [\n      \"keyword.operator.arithmetic\",\n      \"keyword.operator.comparison\",\n      \"keyword.operator.relational\",\n      \"keyword.operator.increment\",\n      \"keyword.operator.decrement\",\n    ],\n    settings: { foreground: \"#08c0ef\" },\n  },\n  {\n    scope: \"keyword.operator.assignment\",\n    settings: { foreground: \"#08c0ef\" },\n  },\n  {\n    scope: \"keyword.operator.assignment.compound\",\n    settings: { foreground: \"#ff678d\" },\n  },\n  {\n    scope: [\n      \"keyword.operator.assignment.compound.js\",\n      \"keyword.operator.assignment.compound.ts\",\n    ],\n    settings: { foreground: \"#08c0ef\" },\n  },\n  {\n    scope: \"keyword.operator.ternary\",\n    settings: { foreground: \"#ff678d\" },\n  },\n  {\n    scope: \"keyword.operator.optional\",\n    settings: { foreground: \"#ff678d\" },\n  },\n  {\n    scope: \"punctuation\",\n    settings: { foreground: \"#79797F\" },\n  },\n  {\n    scope: \"punctuation.separator.delimiter\",\n    settings: { foreground: \"#79797F\" },\n  },\n  {\n    scope: \"punctuation.separator.key-value\",\n    settings: { foreground: \"#79797F\" },\n  },\n  {\n    scope: \"punctuation.terminator\",\n    settings: { foreground: \"#79797F\" },\n  },\n  {\n    scope: \"meta.brace\",\n    settings: { foreground: \"#79797F\" },\n  },\n  {\n    scope: \"meta.brace.square\",\n    settings: { foreground: \"#79797F\" },\n  },\n  {\n    scope: \"meta.brace.round\",\n    settings: { foreground: \"#79797F\" },\n  },\n  {\n    scope: \"function.brace\",\n    settings: { foreground: \"#79797F\" },\n  },\n  {\n    scope: [\n      \"punctuation.definition.parameters\",\n      \"punctuation.definition.typeparameters\",\n    ],\n    settings: { foreground: \"#79797F\" },\n  },\n  {\n    scope: [\"punctuation.definition.block\", \"punctuation.definition.tag\"],\n    settings: { foreground: \"#79797F\" },\n  },\n  {\n    scope: [\"meta.tag.tsx\", \"meta.tag.jsx\", \"meta.tag.js\", \"meta.tag.ts\"],\n    settings: { foreground: \"#79797F\" },\n  },\n  {\n    scope: \"keyword.operator.expression.import\",\n    settings: { foreground: \"#9d6afb\" },\n  },\n  {\n    scope: \"keyword.operator.module\",\n    settings: { foreground: \"#ff678d\" },\n  },\n  {\n    scope: \"support.type.object.console\",\n    settings: { foreground: \"#ffa359\" },\n  },\n  {\n    scope: [\n      \"support.module.node\",\n      \"support.type.object.module\",\n      \"entity.name.type.module\",\n    ],\n    settings: { foreground: \"#ffca00\" },\n  },\n  {\n    scope: \"support.constant.math\",\n    settings: { foreground: \"#ffca00\" },\n  },\n  {\n    scope: \"support.constant.property.math\",\n    settings: { foreground: \"#ffd452\" },\n  },\n  {\n    scope: \"support.constant.json\",\n    settings: { foreground: \"#ffd452\" },\n  },\n  {\n    scope: \"support.type.object.dom\",\n    settings: { foreground: \"#08c0ef\" },\n  },\n  {\n    scope: [\"support.variable.dom\", \"support.variable.property.dom\"],\n    settings: { foreground: \"#ffa359\" },\n  },\n  {\n    scope: \"support.variable.property.process\",\n    settings: { foreground: \"#ffd452\" },\n  },\n  {\n    scope: \"meta.property.object\",\n    settings: { foreground: \"#ffa359\" },\n  },\n  {\n    scope: \"variable.parameter.function.js\",\n    settings: { foreground: \"#ffa359\" },\n  },\n  {\n    scope: [\"keyword.other.template.begin\", \"keyword.other.template.end\"],\n    settings: { foreground: \"#5ecc71\" },\n  },\n  {\n    scope: [\n      \"keyword.other.substitution.begin\",\n      \"keyword.other.substitution.end\",\n    ],\n    settings: { foreground: \"#5ecc71\" },\n  },\n  {\n    scope: [\n      \"punctuation.definition.template-expression.begin\",\n      \"punctuation.definition.template-expression.end\",\n    ],\n    settings: { foreground: \"#ff678d\" },\n  },\n  {\n    scope: \"meta.template.expression\",\n    settings: { foreground: \"#79797F\" },\n  },\n  {\n    scope: \"punctuation.section.embedded\",\n    settings: { foreground: \"#ffa359\" },\n  },\n  {\n    scope: \"variable.interpolation\",\n    settings: { foreground: \"#ffa359\" },\n  },\n  {\n    scope: [\n      \"punctuation.section.embedded.begin\",\n      \"punctuation.section.embedded.end\",\n    ],\n    settings: { foreground: \"#ff678d\" },\n  },\n  {\n    scope: \"punctuation.quasi.element\",\n    settings: { foreground: \"#ff678d\" },\n  },\n  {\n    scope: [\n      \"support.type.primitive.ts\",\n      \"support.type.builtin.ts\",\n      \"support.type.primitive.tsx\",\n      \"support.type.builtin.tsx\",\n    ],\n    settings: { foreground: \"#d568ea\" },\n  },\n  {\n    scope: \"support.type.type.flowtype\",\n    settings: { foreground: \"#9d6afb\" },\n  },\n  {\n    scope: \"support.type.primitive\",\n    settings: { foreground: \"#d568ea\" },\n  },\n  {\n    scope: \"support.variable.magic.python\",\n    settings: { foreground: \"#ff6762\" },\n  },\n  {\n    scope: \"variable.parameter.function.language.special.self.python\",\n    settings: { foreground: \"#ffca00\" },\n  },\n  {\n    scope: [\n      \"punctuation.separator.period.python\",\n      \"punctuation.separator.element.python\",\n      \"punctuation.parenthesis.begin.python\",\n      \"punctuation.parenthesis.end.python\",\n    ],\n    settings: { foreground: \"#79797F\" },\n  },\n  {\n    scope: [\n      \"punctuation.definition.arguments.begin.python\",\n      \"punctuation.definition.arguments.end.python\",\n      \"punctuation.separator.arguments.python\",\n      \"punctuation.definition.list.begin.python\",\n      \"punctuation.definition.list.end.python\",\n    ],\n    settings: { foreground: \"#79797F\" },\n  },\n  {\n    scope: \"support.type.python\",\n    settings: { foreground: \"#08c0ef\" },\n  },\n  {\n    scope: \"keyword.operator.logical.python\",\n    settings: { foreground: \"#ff678d\" },\n  },\n  {\n    scope: \"meta.function-call.generic.python\",\n    settings: { foreground: \"#9d6afb\" },\n  },\n  {\n    scope: \"constant.character.format.placeholder.other.python\",\n    settings: { foreground: \"#ffd452\" },\n  },\n  {\n    scope: \"meta.function.decorator.python\",\n    settings: { foreground: \"#9d6afb\" },\n  },\n  {\n    scope: [\n      \"support.token.decorator.python\",\n      \"meta.function.decorator.identifier.python\",\n    ],\n    settings: { foreground: \"#08c0ef\" },\n  },\n  {\n    scope: \"storage.modifier.lifetime.rust\",\n    settings: { foreground: \"#79797F\" },\n  },\n  {\n    scope: \"support.function.std.rust\",\n    settings: { foreground: \"#9d6afb\" },\n  },\n  {\n    scope: \"entity.name.lifetime.rust\",\n    settings: { foreground: \"#ffca00\" },\n  },\n  {\n    scope: \"variable.language.rust\",\n    settings: { foreground: \"#ff6762\" },\n  },\n  {\n    scope: \"keyword.operator.misc.rust\",\n    settings: { foreground: \"#79797F\" },\n  },\n  {\n    scope: \"keyword.operator.sigil.rust\",\n    settings: { foreground: \"#ff678d\" },\n  },\n  {\n    scope: \"support.constant.core.rust\",\n    settings: { foreground: \"#ffd452\" },\n  },\n  {\n    scope: [\"meta.function.c\", \"meta.function.cpp\"],\n    settings: { foreground: \"#ff6762\" },\n  },\n  {\n    scope: [\n      \"punctuation.section.block.begin.bracket.curly.cpp\",\n      \"punctuation.section.block.end.bracket.curly.cpp\",\n      \"punctuation.terminator.statement.c\",\n      \"punctuation.section.block.begin.bracket.curly.c\",\n      \"punctuation.section.block.end.bracket.curly.c\",\n      \"punctuation.section.parens.begin.bracket.round.c\",\n      \"punctuation.section.parens.end.bracket.round.c\",\n      \"punctuation.section.parameters.begin.bracket.round.c\",\n      \"punctuation.section.parameters.end.bracket.round.c\",\n    ],\n    settings: { foreground: \"#79797F\" },\n  },\n  {\n    scope: [\n      \"keyword.operator.assignment.c\",\n      \"keyword.operator.comparison.c\",\n      \"keyword.operator.c\",\n      \"keyword.operator.increment.c\",\n      \"keyword.operator.decrement.c\",\n      \"keyword.operator.bitwise.shift.c\",\n    ],\n    settings: { foreground: \"#ff678d\" },\n  },\n  {\n    scope: [\n      \"keyword.operator.assignment.cpp\",\n      \"keyword.operator.comparison.cpp\",\n      \"keyword.operator.cpp\",\n      \"keyword.operator.increment.cpp\",\n      \"keyword.operator.decrement.cpp\",\n      \"keyword.operator.bitwise.shift.cpp\",\n    ],\n    settings: { foreground: \"#ff678d\" },\n  },\n  {\n    scope: [\"punctuation.separator.c\", \"punctuation.separator.cpp\"],\n    settings: { foreground: \"#ff678d\" },\n  },\n  {\n    scope: [\"support.type.posix-reserved.c\", \"support.type.posix-reserved.cpp\"],\n    settings: { foreground: \"#08c0ef\" },\n  },\n  {\n    scope: [\"keyword.operator.sizeof.c\", \"keyword.operator.sizeof.cpp\"],\n    settings: { foreground: \"#ff678d\" },\n  },\n  {\n    scope: \"variable.c\",\n    settings: { foreground: \"#79797F\" },\n  },\n  {\n    scope: [\"storage.type.annotation.java\", \"storage.type.object.array.java\"],\n    settings: { foreground: \"#ffca00\" },\n  },\n  {\n    scope: \"source.java\",\n    settings: { foreground: \"#ff6762\" },\n  },\n  {\n    scope: [\n      \"punctuation.section.block.begin.java\",\n      \"punctuation.section.block.end.java\",\n      \"punctuation.definition.method-parameters.begin.java\",\n      \"punctuation.definition.method-parameters.end.java\",\n      \"meta.method.identifier.java\",\n      \"punctuation.section.method.begin.java\",\n      \"punctuation.section.method.end.java\",\n      \"punctuation.terminator.java\",\n      \"punctuation.section.class.begin.java\",\n      \"punctuation.section.class.end.java\",\n      \"punctuation.section.inner-class.begin.java\",\n      \"punctuation.section.inner-class.end.java\",\n      \"meta.method-call.java\",\n      \"punctuation.section.class.begin.bracket.curly.java\",\n      \"punctuation.section.class.end.bracket.curly.java\",\n      \"punctuation.section.method.begin.bracket.curly.java\",\n      \"punctuation.section.method.end.bracket.curly.java\",\n      \"punctuation.separator.period.java\",\n      \"punctuation.bracket.angle.java\",\n      \"punctuation.definition.annotation.java\",\n      \"meta.method.body.java\",\n    ],\n    settings: { foreground: \"#79797F\" },\n  },\n  {\n    scope: \"meta.method.java\",\n    settings: { foreground: \"#9d6afb\" },\n  },\n  {\n    scope: [\n      \"storage.modifier.import.java\",\n      \"storage.type.java\",\n      \"storage.type.generic.java\",\n    ],\n    settings: { foreground: \"#ffca00\" },\n  },\n  {\n    scope: \"keyword.operator.instanceof.java\",\n    settings: { foreground: \"#ff678d\" },\n  },\n  {\n    scope: \"meta.definition.variable.name.java\",\n    settings: { foreground: \"#ff6762\" },\n  },\n  {\n    scope: \"token.variable.parameter.java\",\n    settings: { foreground: \"#79797F\" },\n  },\n  {\n    scope: \"import.storage.java\",\n    settings: { foreground: \"#ffca00\" },\n  },\n  {\n    scope: \"token.package.keyword\",\n    settings: { foreground: \"#ff678d\" },\n  },\n  {\n    scope: \"token.package\",\n    settings: { foreground: \"#79797F\" },\n  },\n  {\n    scope: \"token.storage.type.java\",\n    settings: { foreground: \"#ffca00\" },\n  },\n  {\n    scope: \"keyword.operator.assignment.go\",\n    settings: { foreground: \"#ffca00\" },\n  },\n  {\n    scope: [\"keyword.operator.arithmetic.go\", \"keyword.operator.address.go\"],\n    settings: { foreground: \"#ff678d\" },\n  },\n  {\n    scope: \"entity.name.package.go\",\n    settings: { foreground: \"#ffca00\" },\n  },\n  {\n    scope: [\n      \"support.other.namespace.use.php\",\n      \"support.other.namespace.use-as.php\",\n      \"support.other.namespace.php\",\n      \"entity.other.alias.php\",\n      \"meta.interface.php\",\n    ],\n    settings: { foreground: \"#ffca00\" },\n  },\n  {\n    scope: \"keyword.operator.error-control.php\",\n    settings: { foreground: \"#ff678d\" },\n  },\n  {\n    scope: \"keyword.operator.type.php\",\n    settings: { foreground: \"#ff678d\" },\n  },\n  {\n    scope: [\n      \"punctuation.section.array.begin.php\",\n      \"punctuation.section.array.end.php\",\n    ],\n    settings: { foreground: \"#79797F\" },\n  },\n  {\n    scope: [\n      \"storage.type.php\",\n      \"meta.other.type.phpdoc.php\",\n      \"keyword.other.type.php\",\n      \"keyword.other.array.phpdoc.php\",\n    ],\n    settings: { foreground: \"#ffca00\" },\n  },\n  {\n    scope: [\n      \"meta.function-call.php\",\n      \"meta.function-call.object.php\",\n      \"meta.function-call.static.php\",\n    ],\n    settings: { foreground: \"#9d6afb\" },\n  },\n  {\n    scope: [\n      \"punctuation.definition.parameters.begin.bracket.round.php\",\n      \"punctuation.definition.parameters.end.bracket.round.php\",\n      \"punctuation.separator.delimiter.php\",\n      \"punctuation.section.scope.begin.php\",\n      \"punctuation.section.scope.end.php\",\n      \"punctuation.terminator.expression.php\",\n      \"punctuation.definition.arguments.begin.bracket.round.php\",\n      \"punctuation.definition.arguments.end.bracket.round.php\",\n      \"punctuation.definition.storage-type.begin.bracket.round.php\",\n      \"punctuation.definition.storage-type.end.bracket.round.php\",\n      \"punctuation.definition.array.begin.bracket.round.php\",\n      \"punctuation.definition.array.end.bracket.round.php\",\n      \"punctuation.definition.begin.bracket.round.php\",\n      \"punctuation.definition.end.bracket.round.php\",\n      \"punctuation.definition.begin.bracket.curly.php\",\n      \"punctuation.definition.end.bracket.curly.php\",\n      \"punctuation.definition.section.switch-block.end.bracket.curly.php\",\n      \"punctuation.definition.section.switch-block.start.bracket.curly.php\",\n      \"punctuation.definition.section.switch-block.begin.bracket.curly.php\",\n      \"punctuation.definition.section.switch-block.end.bracket.curly.php\",\n    ],\n    settings: { foreground: \"#79797F\" },\n  },\n  {\n    scope: [\n      \"support.constant.ext.php\",\n      \"support.constant.std.php\",\n      \"support.constant.core.php\",\n      \"support.constant.parser-token.php\",\n    ],\n    settings: { foreground: \"#ffd452\" },\n  },\n  {\n    scope: [\"entity.name.goto-label.php\", \"support.other.php\"],\n    settings: { foreground: \"#9d6afb\" },\n  },\n  {\n    scope: [\n      \"keyword.operator.logical.php\",\n      \"keyword.operator.bitwise.php\",\n      \"keyword.operator.arithmetic.php\",\n    ],\n    settings: { foreground: \"#08c0ef\" },\n  },\n  {\n    scope: \"keyword.operator.regexp.php\",\n    settings: { foreground: \"#ff678d\" },\n  },\n  {\n    scope: \"keyword.operator.comparison.php\",\n    settings: { foreground: \"#08c0ef\" },\n  },\n  {\n    scope: [\"keyword.operator.heredoc.php\", \"keyword.operator.nowdoc.php\"],\n    settings: { foreground: \"#ff678d\" },\n  },\n  {\n    scope: \"variable.other.class.php\",\n    settings: { foreground: \"#ff6762\" },\n  },\n  {\n    scope: \"invalid.illegal.non-null-typehinted.php\",\n    settings: { foreground: \"#f44747\" },\n  },\n  {\n    scope: \"variable.other.generic-type.haskell\",\n    settings: { foreground: \"#ff678d\" },\n  },\n  {\n    scope: \"storage.type.haskell\",\n    settings: { foreground: \"#ffd452\" },\n  },\n  {\n    scope: \"storage.type.cs\",\n    settings: { foreground: \"#ffca00\" },\n  },\n  {\n    scope: \"entity.name.variable.local.cs\",\n    settings: { foreground: \"#ff6762\" },\n  },\n  {\n    scope: \"entity.name.label.cs\",\n    settings: { foreground: \"#ffca00\" },\n  },\n  {\n    scope: [\n      \"entity.name.scope-resolution.function.call\",\n      \"entity.name.scope-resolution.function.definition\",\n    ],\n    settings: { foreground: \"#ffca00\" },\n  },\n  {\n    scope: [\n      \"punctuation.definition.delayed.unison\",\n      \"punctuation.definition.list.begin.unison\",\n      \"punctuation.definition.list.end.unison\",\n      \"punctuation.definition.ability.begin.unison\",\n      \"punctuation.definition.ability.end.unison\",\n      \"punctuation.operator.assignment.as.unison\",\n      \"punctuation.separator.pipe.unison\",\n      \"punctuation.separator.delimiter.unison\",\n      \"punctuation.definition.hash.unison\",\n    ],\n    settings: { foreground: \"#ff6762\" },\n  },\n  {\n    scope: \"support.constant.edge\",\n    settings: { foreground: \"#ff678d\" },\n  },\n  {\n    scope: \"support.type.prelude.elm\",\n    settings: { foreground: \"#08c0ef\" },\n  },\n  {\n    scope: \"support.constant.elm\",\n    settings: { foreground: \"#ffd452\" },\n  },\n  {\n    scope: \"entity.global.clojure\",\n    settings: { foreground: \"#ffca00\" },\n  },\n  {\n    scope: \"meta.symbol.clojure\",\n    settings: { foreground: \"#ff6762\" },\n  },\n  {\n    scope: \"constant.keyword.clojure\",\n    settings: { foreground: \"#08c0ef\" },\n  },\n  {\n    scope: [\"meta.arguments.coffee\", \"variable.parameter.function.coffee\"],\n    settings: { foreground: \"#ff6762\" },\n  },\n  {\n    scope: \"storage.modifier.import.groovy\",\n    settings: { foreground: \"#ffca00\" },\n  },\n  {\n    scope: \"meta.method.groovy\",\n    settings: { foreground: \"#9d6afb\" },\n  },\n  {\n    scope: \"meta.definition.variable.name.groovy\",\n    settings: { foreground: \"#ff6762\" },\n  },\n  {\n    scope: \"meta.definition.class.inherited.classes.groovy\",\n    settings: { foreground: \"#5ecc71\" },\n  },\n  {\n    scope: \"support.variable.semantic.hlsl\",\n    settings: { foreground: \"#ffca00\" },\n  },\n  {\n    scope: [\n      \"support.type.texture.hlsl\",\n      \"support.type.sampler.hlsl\",\n      \"support.type.object.hlsl\",\n      \"support.type.object.rw.hlsl\",\n      \"support.type.fx.hlsl\",\n      \"support.type.object.hlsl\",\n    ],\n    settings: { foreground: \"#ff678d\" },\n  },\n  {\n    scope: [\"text.variable\", \"text.bracketed\"],\n    settings: { foreground: \"#ff6762\" },\n  },\n  {\n    scope: [\"support.type.swift\", \"support.type.vb.asp\"],\n    settings: { foreground: \"#ffca00\" },\n  },\n  {\n    scope: \"meta.scope.prerequisites.makefile\",\n    settings: { foreground: \"#ff6762\" },\n  },\n  {\n    scope: \"source.makefile\",\n    settings: { foreground: \"#ffca00\" },\n  },\n  {\n    scope: \"source.ini\",\n    settings: { foreground: \"#5ecc71\" },\n  },\n  {\n    scope: \"constant.language.symbol.ruby\",\n    settings: { foreground: \"#08c0ef\" },\n  },\n  {\n    scope: [\"function.parameter.ruby\", \"function.parameter.cs\"],\n    settings: { foreground: \"#79797F\" },\n  },\n  {\n    scope: \"constant.language.symbol.elixir\",\n    settings: { foreground: \"#08c0ef\" },\n  },\n  {\n    scope:\n      \"text.html.laravel-blade source.php.embedded.line.html entity.name.tag.laravel-blade\",\n    settings: { foreground: \"#ff678d\" },\n  },\n  {\n    scope:\n      \"text.html.laravel-blade source.php.embedded.line.html support.constant.laravel-blade\",\n    settings: { foreground: \"#ff678d\" },\n  },\n  {\n    scope: \"entity.name.function.xi\",\n    settings: { foreground: \"#ffca00\" },\n  },\n  {\n    scope: \"entity.name.class.xi\",\n    settings: { foreground: \"#08c0ef\" },\n  },\n  {\n    scope: \"constant.character.character-class.regexp.xi\",\n    settings: { foreground: \"#ff6762\" },\n  },\n  {\n    scope: \"constant.regexp.xi\",\n    settings: { foreground: \"#ff678d\" },\n  },\n  {\n    scope: \"keyword.control.xi\",\n    settings: { foreground: \"#08c0ef\" },\n  },\n  {\n    scope: \"invalid.xi\",\n    settings: { foreground: \"#79797F\" },\n  },\n  {\n    scope: \"beginning.punctuation.definition.quote.markdown.xi\",\n    settings: { foreground: \"#5ecc71\" },\n  },\n  {\n    scope: \"beginning.punctuation.definition.list.markdown.xi\",\n    settings: { foreground: \"#84848A\" },\n  },\n  {\n    scope: \"constant.character.xi\",\n    settings: { foreground: \"#9d6afb\" },\n  },\n  {\n    scope: \"accent.xi\",\n    settings: { foreground: \"#9d6afb\" },\n  },\n  {\n    scope: \"wikiword.xi\",\n    settings: { foreground: \"#ffd452\" },\n  },\n  {\n    scope: \"constant.other.color.rgb-value.xi\",\n    settings: { foreground: \"#ffffff\" },\n  },\n  {\n    scope: \"punctuation.definition.tag.xi\",\n    settings: { foreground: \"#84848A\" },\n  },\n  {\n    scope: [\n      \"support.constant.property-value.scss\",\n      \"support.constant.property-value.css\",\n    ],\n    settings: { foreground: \"#ffd452\" },\n  },\n  {\n    scope: [\n      \"keyword.operator.css\",\n      \"keyword.operator.scss\",\n      \"keyword.operator.less\",\n    ],\n    settings: { foreground: \"#08c0ef\" },\n  },\n  {\n    scope: [\n      \"support.constant.color.w3c-standard-color-name.css\",\n      \"support.constant.color.w3c-standard-color-name.scss\",\n    ],\n    settings: { foreground: \"#ffd452\" },\n  },\n  {\n    scope: \"punctuation.separator.list.comma.css\",\n    settings: { foreground: \"#79797F\" },\n  },\n  {\n    scope: \"support.type.vendored.property-name.css\",\n    settings: { foreground: \"#08c0ef\" },\n  },\n  {\n    scope: \"support.type.property-name.css\",\n    settings: { foreground: \"#08c0ef\" },\n  },\n  {\n    scope: \"support.type.property-name\",\n    settings: { foreground: \"#79797F\" },\n  },\n  {\n    scope: \"support.constant.property-value\",\n    settings: { foreground: \"#79797F\" },\n  },\n  {\n    scope: \"support.constant.font-name\",\n    settings: { foreground: \"#ffd452\" },\n  },\n  {\n    scope: \"entity.other.attribute-name.class.css\",\n    settings: {\n      foreground: \"#61d5c0\",\n      fontStyle: \"normal\",\n    },\n  },\n  {\n    scope: \"entity.other.attribute-name.id\",\n    settings: {\n      foreground: \"#9d6afb\",\n      fontStyle: \"normal\",\n    },\n  },\n  {\n    scope: [\n      \"entity.other.attribute-name.pseudo-element\",\n      \"entity.other.attribute-name.pseudo-class\",\n    ],\n    settings: { foreground: \"#08c0ef\" },\n  },\n  {\n    scope: \"meta.selector\",\n    settings: { foreground: \"#ff678d\" },\n  },\n  {\n    scope: \"selector.sass\",\n    settings: { foreground: \"#ff6762\" },\n  },\n  {\n    scope: \"rgb-value\",\n    settings: { foreground: \"#08c0ef\" },\n  },\n  {\n    scope: \"inline-color-decoration rgb-value\",\n    settings: { foreground: \"#ffd452\" },\n  },\n  {\n    scope: \"less rgb-value\",\n    settings: { foreground: \"#ffd452\" },\n  },\n  {\n    scope: \"control.elements\",\n    settings: { foreground: \"#ffd452\" },\n  },\n  {\n    scope: \"keyword.operator.less\",\n    settings: { foreground: \"#ffd452\" },\n  },\n  {\n    scope: \"entity.name.tag\",\n    settings: { foreground: \"#ff6762\" },\n  },\n  {\n    scope: \"entity.other.attribute-name\",\n    settings: {\n      foreground: \"#61d5c0\",\n      fontStyle: \"normal\",\n    },\n  },\n  {\n    scope: \"constant.character.entity\",\n    settings: { foreground: \"#ff6762\" },\n  },\n  {\n    scope: \"meta.tag\",\n    settings: { foreground: \"#79797F\" },\n  },\n  {\n    scope: \"invalid.illegal.bad-ampersand.html\",\n    settings: { foreground: \"#79797F\" },\n  },\n  {\n    scope: \"markup.heading\",\n    settings: { foreground: \"#ff6762\" },\n  },\n  {\n    scope: [\n      \"markup.heading punctuation.definition.heading\",\n      \"entity.name.section\",\n    ],\n    settings: { foreground: \"#9d6afb\" },\n  },\n  {\n    scope: \"entity.name.section.markdown\",\n    settings: { foreground: \"#ff6762\" },\n  },\n  {\n    scope: \"punctuation.definition.heading.markdown\",\n    settings: { foreground: \"#ff6762\" },\n  },\n  {\n    scope: \"markup.heading.setext\",\n    settings: { foreground: \"#79797F\" },\n  },\n  {\n    scope: [\n      \"markup.heading.setext.1.markdown\",\n      \"markup.heading.setext.2.markdown\",\n    ],\n    settings: { foreground: \"#ff6762\" },\n  },\n  {\n    scope: [\"markup.bold\", \"todo.bold\"],\n    settings: { foreground: \"#ffd452\" },\n  },\n  {\n    scope: \"punctuation.definition.bold\",\n    settings: { foreground: \"#ffca00\" },\n  },\n  {\n    scope: \"punctuation.definition.bold.markdown\",\n    settings: { foreground: \"#ffd452\" },\n  },\n  {\n    scope: [\"markup.italic\", \"punctuation.definition.italic\", \"todo.emphasis\"],\n    settings: {\n      foreground: \"#ff678d\",\n      fontStyle: \"italic\",\n    },\n  },\n  {\n    scope: \"emphasis md\",\n    settings: { foreground: \"#ff678d\" },\n  },\n  {\n    scope: \"markup.italic.markdown\",\n    settings: { fontStyle: \"italic\" },\n  },\n  {\n    scope: [\n      \"markup.underline.link.markdown\",\n      \"markup.underline.link.image.markdown\",\n    ],\n    settings: { foreground: \"#ff678d\" },\n  },\n  {\n    scope: [\n      \"string.other.link.title.markdown\",\n      \"string.other.link.description.markdown\",\n    ],\n    settings: { foreground: \"#9d6afb\" },\n  },\n  {\n    scope: \"punctuation.definition.metadata.markdown\",\n    settings: { foreground: \"#ff6762\" },\n  },\n  {\n    scope: [\"markup.inline.raw.markdown\", \"markup.inline.raw.string.markdown\"],\n    settings: { foreground: \"#5ecc71\" },\n  },\n  {\n    scope: \"punctuation.definition.list.begin.markdown\",\n    settings: { foreground: \"#ff6762\" },\n  },\n  {\n    scope: \"punctuation.definition.list.markdown\",\n    settings: { foreground: \"#ff6762\" },\n  },\n  {\n    scope: \"beginning.punctuation.definition.list.markdown\",\n    settings: { foreground: \"#ff6762\" },\n  },\n  {\n    scope: [\n      \"punctuation.definition.string.begin.markdown\",\n      \"punctuation.definition.string.end.markdown\",\n    ],\n    settings: { foreground: \"#ff6762\" },\n  },\n  {\n    scope: \"markup.quote.markdown\",\n    settings: { foreground: \"#84848A\" },\n  },\n  {\n    scope: \"keyword.other.unit\",\n    settings: { foreground: \"#ff6762\" },\n  },\n  {\n    scope: \"markup.changed.diff\",\n    settings: { foreground: \"#ffca00\" },\n  },\n  {\n    scope: [\n      \"meta.diff.header.from-file\",\n      \"meta.diff.header.to-file\",\n      \"punctuation.definition.from-file.diff\",\n      \"punctuation.definition.to-file.diff\",\n    ],\n    settings: { foreground: \"#9d6afb\" },\n  },\n  {\n    scope: \"markup.inserted.diff\",\n    settings: { foreground: \"#5ecc71\" },\n  },\n  {\n    scope: \"markup.deleted.diff\",\n    settings: { foreground: \"#ff6762\" },\n  },\n  {\n    scope: \"string.regexp\",\n    settings: { foreground: \"#64d1db\" },\n  },\n  {\n    scope: \"constant.other.character-class.regexp\",\n    settings: { foreground: \"#ff6762\" },\n  },\n  {\n    scope: \"keyword.operator.quantifier.regexp\",\n    settings: { foreground: \"#ffd452\" },\n  },\n  {\n    scope: \"constant.character.escape\",\n    settings: { foreground: \"#68cdf2\" },\n  },\n  {\n    scope: \"source.json meta.structure.dictionary.json > string.quoted.json\",\n    settings: { foreground: \"#ff6762\" },\n  },\n  {\n    scope:\n      \"source.json meta.structure.dictionary.json > string.quoted.json > punctuation.string\",\n    settings: { foreground: \"#ff6762\" },\n  },\n  {\n    scope: [\n      \"source.json meta.structure.dictionary.json > value.json > string.quoted.json\",\n      \"source.json meta.structure.array.json > value.json > string.quoted.json\",\n      \"source.json meta.structure.dictionary.json > value.json > string.quoted.json > punctuation\",\n      \"source.json meta.structure.array.json > value.json > string.quoted.json > punctuation\",\n    ],\n    settings: { foreground: \"#5ecc71\" },\n  },\n  {\n    scope: [\n      \"source.json meta.structure.dictionary.json > constant.language.json\",\n      \"source.json meta.structure.array.json > constant.language.json\",\n    ],\n    settings: { foreground: \"#08c0ef\" },\n  },\n  {\n    scope: \"support.type.property-name.json\",\n    settings: { foreground: \"#ff6762\" },\n  },\n  {\n    scope: \"support.type.property-name.json punctuation\",\n    settings: { foreground: \"#ff6762\" },\n  },\n  {\n    scope: \"punctuation.definition.block.sequence.item.yaml\",\n    settings: { foreground: \"#79797F\" },\n  },\n  {\n    scope: \"block.scope.end\",\n    settings: { foreground: \"#79797F\" },\n  },\n  {\n    scope: \"block.scope.begin\",\n    settings: { foreground: \"#79797F\" },\n  },\n  {\n    scope: \"token.info-token\",\n    settings: { foreground: \"#9d6afb\" },\n  },\n  {\n    scope: \"token.warn-token\",\n    settings: { foreground: \"#ffd452\" },\n  },\n  {\n    scope: \"token.error-token\",\n    settings: { foreground: \"#f44747\" },\n  },\n  {\n    scope: \"token.debug-token\",\n    settings: { foreground: \"#ff678d\" },\n  },\n  {\n    scope: \"invalid.illegal\",\n    settings: { foreground: \"#ffffff\" },\n  },\n  {\n    scope: \"invalid.broken\",\n    settings: { foreground: \"#ffffff\" },\n  },\n  {\n    scope: \"invalid.deprecated\",\n    settings: { foreground: \"#ffffff\" },\n  },\n  {\n    scope: \"invalid.unimplemented\",\n    settings: { foreground: \"#ffffff\" },\n  },\n];\nvar semanticTokenColors = {\n  comment: \"#84848A\",\n  string: \"#5ecc71\",\n  number: \"#68cdf2\",\n  regexp: \"#64d1db\",\n  keyword: \"#ff678d\",\n  variable: \"#ffa359\",\n  parameter: \"#adadb1\",\n  property: \"#ffa359\",\n  function: \"#9d6afb\",\n  method: \"#9d6afb\",\n  type: \"#d568ea\",\n  class: \"#d568ea\",\n  namespace: \"#ffca00\",\n  enumMember: \"#08c0ef\",\n  \"variable.constant\": \"#ffd452\",\n  \"variable.defaultLibrary\": \"#ffca00\",\n};\nvar pierre_dark_default = {\n  name,\n  type,\n  colors,\n  tokenColors,\n  semanticTokenColors,\n};\n\n//#endregion\nexport {\n  colors,\n  pierre_dark_default as default,\n  name,\n  semanticTokenColors,\n  tokenColors,\n  type,\n};\n"
    },
    {
      "path": "components/tool-ui/shared/pierre-light-theme.js",
      "type": "registry:file",
      "target": "components/tool-ui/shared/pierre-light-theme.js",
      "content": "//#region src/themes/pierre-light.json\nvar name = \"pierre-light\";\nvar type = \"light\";\nvar colors = {\n  \"editor.background\": \"#ffffff\",\n  \"editor.foreground\": \"#070707\",\n  foreground: \"#070707\",\n  focusBorder: \"#009fff\",\n  \"selection.background\": \"#dfebff\",\n  \"editor.selectionBackground\": \"#009fff2e\",\n  \"editor.lineHighlightBackground\": \"#dfebff8c\",\n  \"editorCursor.foreground\": \"#009fff\",\n  \"editorLineNumber.foreground\": \"#84848A\",\n  \"editorLineNumber.activeForeground\": \"#6C6C71\",\n  \"editorIndentGuide.background\": \"#eeeeef\",\n  \"editorIndentGuide.activeBackground\": \"#dbdbdd\",\n  \"diffEditor.insertedTextBackground\": \"#00cab133\",\n  \"diffEditor.deletedTextBackground\": \"#ff2e3f33\",\n  \"sideBar.background\": \"#f8f8f8\",\n  \"sideBar.foreground\": \"#6C6C71\",\n  \"sideBar.border\": \"#eeeeef\",\n  \"sideBarTitle.foreground\": \"#070707\",\n  \"sideBarSectionHeader.background\": \"#f8f8f8\",\n  \"sideBarSectionHeader.foreground\": \"#6C6C71\",\n  \"sideBarSectionHeader.border\": \"#eeeeef\",\n  \"activityBar.background\": \"#f8f8f8\",\n  \"activityBar.foreground\": \"#070707\",\n  \"activityBar.border\": \"#eeeeef\",\n  \"activityBar.activeBorder\": \"#009fff\",\n  \"activityBarBadge.background\": \"#009fff\",\n  \"activityBarBadge.foreground\": \"#ffffff\",\n  \"titleBar.activeBackground\": \"#f8f8f8\",\n  \"titleBar.activeForeground\": \"#070707\",\n  \"titleBar.inactiveBackground\": \"#f8f8f8\",\n  \"titleBar.inactiveForeground\": \"#84848A\",\n  \"titleBar.border\": \"#eeeeef\",\n  \"list.activeSelectionBackground\": \"#dfebffcc\",\n  \"list.activeSelectionForeground\": \"#070707\",\n  \"list.inactiveSelectionBackground\": \"#dfebff73\",\n  \"list.hoverBackground\": \"#dfebff59\",\n  \"list.focusOutline\": \"#009fff\",\n  \"tab.activeBackground\": \"#ffffff\",\n  \"tab.activeForeground\": \"#070707\",\n  \"tab.activeBorderTop\": \"#009fff\",\n  \"tab.inactiveBackground\": \"#f8f8f8\",\n  \"tab.inactiveForeground\": \"#84848A\",\n  \"tab.border\": \"#eeeeef\",\n  \"editorGroupHeader.tabsBackground\": \"#f8f8f8\",\n  \"editorGroupHeader.tabsBorder\": \"#eeeeef\",\n  \"panel.background\": \"#f8f8f8\",\n  \"panel.border\": \"#eeeeef\",\n  \"panelTitle.activeBorder\": \"#009fff\",\n  \"panelTitle.activeForeground\": \"#070707\",\n  \"panelTitle.inactiveForeground\": \"#84848A\",\n  \"statusBar.background\": \"#f8f8f8\",\n  \"statusBar.foreground\": \"#6C6C71\",\n  \"statusBar.border\": \"#eeeeef\",\n  \"statusBar.noFolderBackground\": \"#f8f8f8\",\n  \"statusBar.debuggingBackground\": \"#ffca00\",\n  \"statusBar.debuggingForeground\": \"#ffffff\",\n  \"statusBarItem.remoteBackground\": \"#f8f8f8\",\n  \"statusBarItem.remoteForeground\": \"#6C6C71\",\n  \"input.background\": \"#f2f2f3\",\n  \"input.border\": \"#dbdbdd\",\n  \"input.foreground\": \"#070707\",\n  \"input.placeholderForeground\": \"#8E8E95\",\n  \"dropdown.background\": \"#f2f2f3\",\n  \"dropdown.border\": \"#dbdbdd\",\n  \"dropdown.foreground\": \"#070707\",\n  \"button.background\": \"#009fff\",\n  \"button.foreground\": \"#ffffff\",\n  \"button.hoverBackground\": \"#1aa9ff\",\n  \"textLink.foreground\": \"#009fff\",\n  \"textLink.activeForeground\": \"#009fff\",\n  \"gitDecoration.addedResourceForeground\": \"#00cab1\",\n  \"gitDecoration.conflictingResourceForeground\": \"#ffca00\",\n  \"gitDecoration.modifiedResourceForeground\": \"#009fff\",\n  \"gitDecoration.deletedResourceForeground\": \"#ff2e3f\",\n  \"gitDecoration.untrackedResourceForeground\": \"#00cab1\",\n  \"gitDecoration.ignoredResourceForeground\": \"#84848A\",\n  \"terminal.titleForeground\": \"#6C6C71\",\n  \"terminal.titleInactiveForeground\": \"#84848A\",\n  \"terminal.background\": \"#f8f8f8\",\n  \"terminal.foreground\": \"#6C6C71\",\n  \"terminal.ansiBlack\": \"#1F1F21\",\n  \"terminal.ansiRed\": \"#ff2e3f\",\n  \"terminal.ansiGreen\": \"#0dbe4e\",\n  \"terminal.ansiYellow\": \"#ffca00\",\n  \"terminal.ansiBlue\": \"#009fff\",\n  \"terminal.ansiMagenta\": \"#c635e4\",\n  \"terminal.ansiCyan\": \"#08c0ef\",\n  \"terminal.ansiWhite\": \"#c6c6c8\",\n  \"terminal.ansiBrightBlack\": \"#1F1F21\",\n  \"terminal.ansiBrightRed\": \"#ff2e3f\",\n  \"terminal.ansiBrightGreen\": \"#0dbe4e\",\n  \"terminal.ansiBrightYellow\": \"#ffca00\",\n  \"terminal.ansiBrightBlue\": \"#009fff\",\n  \"terminal.ansiBrightMagenta\": \"#c635e4\",\n  \"terminal.ansiBrightCyan\": \"#08c0ef\",\n  \"terminal.ansiBrightWhite\": \"#c6c6c8\",\n};\nvar tokenColors = [\n  {\n    scope: [\"comment\", \"punctuation.definition.comment\"],\n    settings: { foreground: \"#84848A\" },\n  },\n  {\n    scope: \"comment markup.link\",\n    settings: { foreground: \"#84848A\" },\n  },\n  {\n    scope: [\"string\", \"constant.other.symbol\"],\n    settings: { foreground: \"#199f43\" },\n  },\n  {\n    scope: [\n      \"punctuation.definition.string.begin\",\n      \"punctuation.definition.string.end\",\n    ],\n    settings: { foreground: \"#199f43\" },\n  },\n  {\n    scope: [\"constant.numeric\", \"constant.language.boolean\"],\n    settings: { foreground: \"#1ca1c7\" },\n  },\n  {\n    scope: \"constant\",\n    settings: { foreground: \"#d5a910\" },\n  },\n  {\n    scope: \"punctuation.definition.constant\",\n    settings: { foreground: \"#d5a910\" },\n  },\n  {\n    scope: \"constant.language\",\n    settings: { foreground: \"#1ca1c7\" },\n  },\n  {\n    scope: \"variable.other.constant\",\n    settings: { foreground: \"#d5a910\" },\n  },\n  {\n    scope: \"keyword\",\n    settings: { foreground: \"#fc2b73\" },\n  },\n  {\n    scope: \"keyword.control\",\n    settings: { foreground: \"#fc2b73\" },\n  },\n  {\n    scope: [\"storage\", \"storage.type\", \"storage.modifier\"],\n    settings: { foreground: \"#fc2b73\" },\n  },\n  {\n    scope: \"token.storage\",\n    settings: { foreground: \"#fc2b73\" },\n  },\n  {\n    scope: [\n      \"keyword.operator.new\",\n      \"keyword.operator.expression.instanceof\",\n      \"keyword.operator.expression.typeof\",\n      \"keyword.operator.expression.void\",\n      \"keyword.operator.expression.delete\",\n      \"keyword.operator.expression.in\",\n      \"keyword.operator.expression.of\",\n      \"keyword.operator.expression.keyof\",\n    ],\n    settings: { foreground: \"#fc2b73\" },\n  },\n  {\n    scope: \"keyword.operator.delete\",\n    settings: { foreground: \"#fc2b73\" },\n  },\n  {\n    scope: [\"variable\", \"identifier\", \"meta.definition.variable\"],\n    settings: { foreground: \"#d47628\" },\n  },\n  {\n    scope: [\n      \"variable.other.readwrite\",\n      \"meta.object-literal.key\",\n      \"support.variable.property\",\n      \"support.variable.object.process\",\n      \"support.variable.object.node\",\n    ],\n    settings: { foreground: \"#d47628\" },\n  },\n  {\n    scope: \"variable.language\",\n    settings: { foreground: \"#d5a910\" },\n  },\n  {\n    scope: \"variable.parameter.function\",\n    settings: { foreground: \"#79797F\" },\n  },\n  {\n    scope: \"function.parameter\",\n    settings: { foreground: \"#79797F\" },\n  },\n  {\n    scope: \"variable.parameter\",\n    settings: { foreground: \"#79797F\" },\n  },\n  {\n    scope: \"variable.parameter.function.language.python\",\n    settings: { foreground: \"#d5a910\" },\n  },\n  {\n    scope: \"variable.parameter.function.python\",\n    settings: { foreground: \"#d5a910\" },\n  },\n  {\n    scope: [\n      \"support.function\",\n      \"entity.name.function\",\n      \"meta.function-call\",\n      \"meta.require\",\n      \"support.function.any-method\",\n      \"variable.function\",\n    ],\n    settings: { foreground: \"#7b43f8\" },\n  },\n  {\n    scope: \"keyword.other.special-method\",\n    settings: { foreground: \"#7b43f8\" },\n  },\n  {\n    scope: \"entity.name.function\",\n    settings: { foreground: \"#7b43f8\" },\n  },\n  {\n    scope: \"support.function.console\",\n    settings: { foreground: \"#7b43f8\" },\n  },\n  {\n    scope: [\n      \"support.type\",\n      \"entity.name.type\",\n      \"entity.name.class\",\n      \"storage.type\",\n    ],\n    settings: { foreground: \"#c635e4\" },\n  },\n  {\n    scope: [\"support.class\", \"entity.name.type.class\"],\n    settings: { foreground: \"#c635e4\" },\n  },\n  {\n    scope: [\n      \"entity.name.class\",\n      \"variable.other.class.js\",\n      \"variable.other.class.ts\",\n    ],\n    settings: { foreground: \"#c635e4\" },\n  },\n  {\n    scope: \"entity.name.class.identifier.namespace.type\",\n    settings: { foreground: \"#c635e4\" },\n  },\n  {\n    scope: \"entity.name.type.namespace\",\n    settings: { foreground: \"#d5a910\" },\n  },\n  {\n    scope: \"entity.other.inherited-class\",\n    settings: { foreground: \"#c635e4\" },\n  },\n  {\n    scope: \"entity.name.namespace\",\n    settings: { foreground: \"#d5a910\" },\n  },\n  {\n    scope: \"keyword.operator\",\n    settings: { foreground: \"#79797F\" },\n  },\n  {\n    scope: [\n      \"keyword.operator.logical\",\n      \"keyword.operator.bitwise\",\n      \"keyword.operator.channel\",\n    ],\n    settings: { foreground: \"#08c0ef\" },\n  },\n  {\n    scope: [\n      \"keyword.operator.arithmetic\",\n      \"keyword.operator.comparison\",\n      \"keyword.operator.relational\",\n      \"keyword.operator.increment\",\n      \"keyword.operator.decrement\",\n    ],\n    settings: { foreground: \"#08c0ef\" },\n  },\n  {\n    scope: \"keyword.operator.assignment\",\n    settings: { foreground: \"#08c0ef\" },\n  },\n  {\n    scope: \"keyword.operator.assignment.compound\",\n    settings: { foreground: \"#fc2b73\" },\n  },\n  {\n    scope: [\n      \"keyword.operator.assignment.compound.js\",\n      \"keyword.operator.assignment.compound.ts\",\n    ],\n    settings: { foreground: \"#08c0ef\" },\n  },\n  {\n    scope: \"keyword.operator.ternary\",\n    settings: { foreground: \"#fc2b73\" },\n  },\n  {\n    scope: \"keyword.operator.optional\",\n    settings: { foreground: \"#fc2b73\" },\n  },\n  {\n    scope: \"punctuation\",\n    settings: { foreground: \"#79797F\" },\n  },\n  {\n    scope: \"punctuation.separator.delimiter\",\n    settings: { foreground: \"#79797F\" },\n  },\n  {\n    scope: \"punctuation.separator.key-value\",\n    settings: { foreground: \"#79797F\" },\n  },\n  {\n    scope: \"punctuation.terminator\",\n    settings: { foreground: \"#79797F\" },\n  },\n  {\n    scope: \"meta.brace\",\n    settings: { foreground: \"#79797F\" },\n  },\n  {\n    scope: \"meta.brace.square\",\n    settings: { foreground: \"#79797F\" },\n  },\n  {\n    scope: \"meta.brace.round\",\n    settings: { foreground: \"#79797F\" },\n  },\n  {\n    scope: \"function.brace\",\n    settings: { foreground: \"#79797F\" },\n  },\n  {\n    scope: [\n      \"punctuation.definition.parameters\",\n      \"punctuation.definition.typeparameters\",\n    ],\n    settings: { foreground: \"#79797F\" },\n  },\n  {\n    scope: [\"punctuation.definition.block\", \"punctuation.definition.tag\"],\n    settings: { foreground: \"#79797F\" },\n  },\n  {\n    scope: [\"meta.tag.tsx\", \"meta.tag.jsx\", \"meta.tag.js\", \"meta.tag.ts\"],\n    settings: { foreground: \"#79797F\" },\n  },\n  {\n    scope: \"keyword.operator.expression.import\",\n    settings: { foreground: \"#7b43f8\" },\n  },\n  {\n    scope: \"keyword.operator.module\",\n    settings: { foreground: \"#fc2b73\" },\n  },\n  {\n    scope: \"support.type.object.console\",\n    settings: { foreground: \"#d47628\" },\n  },\n  {\n    scope: [\n      \"support.module.node\",\n      \"support.type.object.module\",\n      \"entity.name.type.module\",\n    ],\n    settings: { foreground: \"#d5a910\" },\n  },\n  {\n    scope: \"support.constant.math\",\n    settings: { foreground: \"#d5a910\" },\n  },\n  {\n    scope: \"support.constant.property.math\",\n    settings: { foreground: \"#d5a910\" },\n  },\n  {\n    scope: \"support.constant.json\",\n    settings: { foreground: \"#d5a910\" },\n  },\n  {\n    scope: \"support.type.object.dom\",\n    settings: { foreground: \"#08c0ef\" },\n  },\n  {\n    scope: [\"support.variable.dom\", \"support.variable.property.dom\"],\n    settings: { foreground: \"#d47628\" },\n  },\n  {\n    scope: \"support.variable.property.process\",\n    settings: { foreground: \"#d5a910\" },\n  },\n  {\n    scope: \"meta.property.object\",\n    settings: { foreground: \"#d47628\" },\n  },\n  {\n    scope: \"variable.parameter.function.js\",\n    settings: { foreground: \"#d47628\" },\n  },\n  {\n    scope: [\"keyword.other.template.begin\", \"keyword.other.template.end\"],\n    settings: { foreground: \"#199f43\" },\n  },\n  {\n    scope: [\n      \"keyword.other.substitution.begin\",\n      \"keyword.other.substitution.end\",\n    ],\n    settings: { foreground: \"#199f43\" },\n  },\n  {\n    scope: [\n      \"punctuation.definition.template-expression.begin\",\n      \"punctuation.definition.template-expression.end\",\n    ],\n    settings: { foreground: \"#fc2b73\" },\n  },\n  {\n    scope: \"meta.template.expression\",\n    settings: { foreground: \"#79797F\" },\n  },\n  {\n    scope: \"punctuation.section.embedded\",\n    settings: { foreground: \"#d47628\" },\n  },\n  {\n    scope: \"variable.interpolation\",\n    settings: { foreground: \"#d47628\" },\n  },\n  {\n    scope: [\n      \"punctuation.section.embedded.begin\",\n      \"punctuation.section.embedded.end\",\n    ],\n    settings: { foreground: \"#fc2b73\" },\n  },\n  {\n    scope: \"punctuation.quasi.element\",\n    settings: { foreground: \"#fc2b73\" },\n  },\n  {\n    scope: [\n      \"support.type.primitive.ts\",\n      \"support.type.builtin.ts\",\n      \"support.type.primitive.tsx\",\n      \"support.type.builtin.tsx\",\n    ],\n    settings: { foreground: \"#c635e4\" },\n  },\n  {\n    scope: \"support.type.type.flowtype\",\n    settings: { foreground: \"#7b43f8\" },\n  },\n  {\n    scope: \"support.type.primitive\",\n    settings: { foreground: \"#c635e4\" },\n  },\n  {\n    scope: \"support.variable.magic.python\",\n    settings: { foreground: \"#d52c36\" },\n  },\n  {\n    scope: \"variable.parameter.function.language.special.self.python\",\n    settings: { foreground: \"#d5a910\" },\n  },\n  {\n    scope: [\n      \"punctuation.separator.period.python\",\n      \"punctuation.separator.element.python\",\n      \"punctuation.parenthesis.begin.python\",\n      \"punctuation.parenthesis.end.python\",\n    ],\n    settings: { foreground: \"#79797F\" },\n  },\n  {\n    scope: [\n      \"punctuation.definition.arguments.begin.python\",\n      \"punctuation.definition.arguments.end.python\",\n      \"punctuation.separator.arguments.python\",\n      \"punctuation.definition.list.begin.python\",\n      \"punctuation.definition.list.end.python\",\n    ],\n    settings: { foreground: \"#79797F\" },\n  },\n  {\n    scope: \"support.type.python\",\n    settings: { foreground: \"#08c0ef\" },\n  },\n  {\n    scope: \"keyword.operator.logical.python\",\n    settings: { foreground: \"#fc2b73\" },\n  },\n  {\n    scope: \"meta.function-call.generic.python\",\n    settings: { foreground: \"#7b43f8\" },\n  },\n  {\n    scope: \"constant.character.format.placeholder.other.python\",\n    settings: { foreground: \"#d5a910\" },\n  },\n  {\n    scope: \"meta.function.decorator.python\",\n    settings: { foreground: \"#7b43f8\" },\n  },\n  {\n    scope: [\n      \"support.token.decorator.python\",\n      \"meta.function.decorator.identifier.python\",\n    ],\n    settings: { foreground: \"#08c0ef\" },\n  },\n  {\n    scope: \"storage.modifier.lifetime.rust\",\n    settings: { foreground: \"#79797F\" },\n  },\n  {\n    scope: \"support.function.std.rust\",\n    settings: { foreground: \"#7b43f8\" },\n  },\n  {\n    scope: \"entity.name.lifetime.rust\",\n    settings: { foreground: \"#d5a910\" },\n  },\n  {\n    scope: \"variable.language.rust\",\n    settings: { foreground: \"#d52c36\" },\n  },\n  {\n    scope: \"keyword.operator.misc.rust\",\n    settings: { foreground: \"#79797F\" },\n  },\n  {\n    scope: \"keyword.operator.sigil.rust\",\n    settings: { foreground: \"#fc2b73\" },\n  },\n  {\n    scope: \"support.constant.core.rust\",\n    settings: { foreground: \"#d5a910\" },\n  },\n  {\n    scope: [\"meta.function.c\", \"meta.function.cpp\"],\n    settings: { foreground: \"#d52c36\" },\n  },\n  {\n    scope: [\n      \"punctuation.section.block.begin.bracket.curly.cpp\",\n      \"punctuation.section.block.end.bracket.curly.cpp\",\n      \"punctuation.terminator.statement.c\",\n      \"punctuation.section.block.begin.bracket.curly.c\",\n      \"punctuation.section.block.end.bracket.curly.c\",\n      \"punctuation.section.parens.begin.bracket.round.c\",\n      \"punctuation.section.parens.end.bracket.round.c\",\n      \"punctuation.section.parameters.begin.bracket.round.c\",\n      \"punctuation.section.parameters.end.bracket.round.c\",\n    ],\n    settings: { foreground: \"#79797F\" },\n  },\n  {\n    scope: [\n      \"keyword.operator.assignment.c\",\n      \"keyword.operator.comparison.c\",\n      \"keyword.operator.c\",\n      \"keyword.operator.increment.c\",\n      \"keyword.operator.decrement.c\",\n      \"keyword.operator.bitwise.shift.c\",\n    ],\n    settings: { foreground: \"#fc2b73\" },\n  },\n  {\n    scope: [\n      \"keyword.operator.assignment.cpp\",\n      \"keyword.operator.comparison.cpp\",\n      \"keyword.operator.cpp\",\n      \"keyword.operator.increment.cpp\",\n      \"keyword.operator.decrement.cpp\",\n      \"keyword.operator.bitwise.shift.cpp\",\n    ],\n    settings: { foreground: \"#fc2b73\" },\n  },\n  {\n    scope: [\"punctuation.separator.c\", \"punctuation.separator.cpp\"],\n    settings: { foreground: \"#fc2b73\" },\n  },\n  {\n    scope: [\"support.type.posix-reserved.c\", \"support.type.posix-reserved.cpp\"],\n    settings: { foreground: \"#08c0ef\" },\n  },\n  {\n    scope: [\"keyword.operator.sizeof.c\", \"keyword.operator.sizeof.cpp\"],\n    settings: { foreground: \"#fc2b73\" },\n  },\n  {\n    scope: \"variable.c\",\n    settings: { foreground: \"#79797F\" },\n  },\n  {\n    scope: [\"storage.type.annotation.java\", \"storage.type.object.array.java\"],\n    settings: { foreground: \"#d5a910\" },\n  },\n  {\n    scope: \"source.java\",\n    settings: { foreground: \"#d52c36\" },\n  },\n  {\n    scope: [\n      \"punctuation.section.block.begin.java\",\n      \"punctuation.section.block.end.java\",\n      \"punctuation.definition.method-parameters.begin.java\",\n      \"punctuation.definition.method-parameters.end.java\",\n      \"meta.method.identifier.java\",\n      \"punctuation.section.method.begin.java\",\n      \"punctuation.section.method.end.java\",\n      \"punctuation.terminator.java\",\n      \"punctuation.section.class.begin.java\",\n      \"punctuation.section.class.end.java\",\n      \"punctuation.section.inner-class.begin.java\",\n      \"punctuation.section.inner-class.end.java\",\n      \"meta.method-call.java\",\n      \"punctuation.section.class.begin.bracket.curly.java\",\n      \"punctuation.section.class.end.bracket.curly.java\",\n      \"punctuation.section.method.begin.bracket.curly.java\",\n      \"punctuation.section.method.end.bracket.curly.java\",\n      \"punctuation.separator.period.java\",\n      \"punctuation.bracket.angle.java\",\n      \"punctuation.definition.annotation.java\",\n      \"meta.method.body.java\",\n    ],\n    settings: { foreground: \"#79797F\" },\n  },\n  {\n    scope: \"meta.method.java\",\n    settings: { foreground: \"#7b43f8\" },\n  },\n  {\n    scope: [\n      \"storage.modifier.import.java\",\n      \"storage.type.java\",\n      \"storage.type.generic.java\",\n    ],\n    settings: { foreground: \"#d5a910\" },\n  },\n  {\n    scope: \"keyword.operator.instanceof.java\",\n    settings: { foreground: \"#fc2b73\" },\n  },\n  {\n    scope: \"meta.definition.variable.name.java\",\n    settings: { foreground: \"#d52c36\" },\n  },\n  {\n    scope: \"token.variable.parameter.java\",\n    settings: { foreground: \"#79797F\" },\n  },\n  {\n    scope: \"import.storage.java\",\n    settings: { foreground: \"#d5a910\" },\n  },\n  {\n    scope: \"token.package.keyword\",\n    settings: { foreground: \"#fc2b73\" },\n  },\n  {\n    scope: \"token.package\",\n    settings: { foreground: \"#79797F\" },\n  },\n  {\n    scope: \"token.storage.type.java\",\n    settings: { foreground: \"#d5a910\" },\n  },\n  {\n    scope: \"keyword.operator.assignment.go\",\n    settings: { foreground: \"#d5a910\" },\n  },\n  {\n    scope: [\"keyword.operator.arithmetic.go\", \"keyword.operator.address.go\"],\n    settings: { foreground: \"#fc2b73\" },\n  },\n  {\n    scope: \"entity.name.package.go\",\n    settings: { foreground: \"#d5a910\" },\n  },\n  {\n    scope: [\n      \"support.other.namespace.use.php\",\n      \"support.other.namespace.use-as.php\",\n      \"support.other.namespace.php\",\n      \"entity.other.alias.php\",\n      \"meta.interface.php\",\n    ],\n    settings: { foreground: \"#d5a910\" },\n  },\n  {\n    scope: \"keyword.operator.error-control.php\",\n    settings: { foreground: \"#fc2b73\" },\n  },\n  {\n    scope: \"keyword.operator.type.php\",\n    settings: { foreground: \"#fc2b73\" },\n  },\n  {\n    scope: [\n      \"punctuation.section.array.begin.php\",\n      \"punctuation.section.array.end.php\",\n    ],\n    settings: { foreground: \"#79797F\" },\n  },\n  {\n    scope: [\n      \"storage.type.php\",\n      \"meta.other.type.phpdoc.php\",\n      \"keyword.other.type.php\",\n      \"keyword.other.array.phpdoc.php\",\n    ],\n    settings: { foreground: \"#d5a910\" },\n  },\n  {\n    scope: [\n      \"meta.function-call.php\",\n      \"meta.function-call.object.php\",\n      \"meta.function-call.static.php\",\n    ],\n    settings: { foreground: \"#7b43f8\" },\n  },\n  {\n    scope: [\n      \"punctuation.definition.parameters.begin.bracket.round.php\",\n      \"punctuation.definition.parameters.end.bracket.round.php\",\n      \"punctuation.separator.delimiter.php\",\n      \"punctuation.section.scope.begin.php\",\n      \"punctuation.section.scope.end.php\",\n      \"punctuation.terminator.expression.php\",\n      \"punctuation.definition.arguments.begin.bracket.round.php\",\n      \"punctuation.definition.arguments.end.bracket.round.php\",\n      \"punctuation.definition.storage-type.begin.bracket.round.php\",\n      \"punctuation.definition.storage-type.end.bracket.round.php\",\n      \"punctuation.definition.array.begin.bracket.round.php\",\n      \"punctuation.definition.array.end.bracket.round.php\",\n      \"punctuation.definition.begin.bracket.round.php\",\n      \"punctuation.definition.end.bracket.round.php\",\n      \"punctuation.definition.begin.bracket.curly.php\",\n      \"punctuation.definition.end.bracket.curly.php\",\n      \"punctuation.definition.section.switch-block.end.bracket.curly.php\",\n      \"punctuation.definition.section.switch-block.start.bracket.curly.php\",\n      \"punctuation.definition.section.switch-block.begin.bracket.curly.php\",\n      \"punctuation.definition.section.switch-block.end.bracket.curly.php\",\n    ],\n    settings: { foreground: \"#79797F\" },\n  },\n  {\n    scope: [\n      \"support.constant.ext.php\",\n      \"support.constant.std.php\",\n      \"support.constant.core.php\",\n      \"support.constant.parser-token.php\",\n    ],\n    settings: { foreground: \"#d5a910\" },\n  },\n  {\n    scope: [\"entity.name.goto-label.php\", \"support.other.php\"],\n    settings: { foreground: \"#7b43f8\" },\n  },\n  {\n    scope: [\n      \"keyword.operator.logical.php\",\n      \"keyword.operator.bitwise.php\",\n      \"keyword.operator.arithmetic.php\",\n    ],\n    settings: { foreground: \"#08c0ef\" },\n  },\n  {\n    scope: \"keyword.operator.regexp.php\",\n    settings: { foreground: \"#fc2b73\" },\n  },\n  {\n    scope: \"keyword.operator.comparison.php\",\n    settings: { foreground: \"#08c0ef\" },\n  },\n  {\n    scope: [\"keyword.operator.heredoc.php\", \"keyword.operator.nowdoc.php\"],\n    settings: { foreground: \"#fc2b73\" },\n  },\n  {\n    scope: \"variable.other.class.php\",\n    settings: { foreground: \"#d52c36\" },\n  },\n  {\n    scope: \"invalid.illegal.non-null-typehinted.php\",\n    settings: { foreground: \"#f44747\" },\n  },\n  {\n    scope: \"variable.other.generic-type.haskell\",\n    settings: { foreground: \"#fc2b73\" },\n  },\n  {\n    scope: \"storage.type.haskell\",\n    settings: { foreground: \"#d5a910\" },\n  },\n  {\n    scope: \"storage.type.cs\",\n    settings: { foreground: \"#d5a910\" },\n  },\n  {\n    scope: \"entity.name.variable.local.cs\",\n    settings: { foreground: \"#d52c36\" },\n  },\n  {\n    scope: \"entity.name.label.cs\",\n    settings: { foreground: \"#d5a910\" },\n  },\n  {\n    scope: [\n      \"entity.name.scope-resolution.function.call\",\n      \"entity.name.scope-resolution.function.definition\",\n    ],\n    settings: { foreground: \"#d5a910\" },\n  },\n  {\n    scope: [\n      \"punctuation.definition.delayed.unison\",\n      \"punctuation.definition.list.begin.unison\",\n      \"punctuation.definition.list.end.unison\",\n      \"punctuation.definition.ability.begin.unison\",\n      \"punctuation.definition.ability.end.unison\",\n      \"punctuation.operator.assignment.as.unison\",\n      \"punctuation.separator.pipe.unison\",\n      \"punctuation.separator.delimiter.unison\",\n      \"punctuation.definition.hash.unison\",\n    ],\n    settings: { foreground: \"#d52c36\" },\n  },\n  {\n    scope: \"support.constant.edge\",\n    settings: { foreground: \"#fc2b73\" },\n  },\n  {\n    scope: \"support.type.prelude.elm\",\n    settings: { foreground: \"#08c0ef\" },\n  },\n  {\n    scope: \"support.constant.elm\",\n    settings: { foreground: \"#d5a910\" },\n  },\n  {\n    scope: \"entity.global.clojure\",\n    settings: { foreground: \"#d5a910\" },\n  },\n  {\n    scope: \"meta.symbol.clojure\",\n    settings: { foreground: \"#d52c36\" },\n  },\n  {\n    scope: \"constant.keyword.clojure\",\n    settings: { foreground: \"#08c0ef\" },\n  },\n  {\n    scope: [\"meta.arguments.coffee\", \"variable.parameter.function.coffee\"],\n    settings: { foreground: \"#d52c36\" },\n  },\n  {\n    scope: \"storage.modifier.import.groovy\",\n    settings: { foreground: \"#d5a910\" },\n  },\n  {\n    scope: \"meta.method.groovy\",\n    settings: { foreground: \"#7b43f8\" },\n  },\n  {\n    scope: \"meta.definition.variable.name.groovy\",\n    settings: { foreground: \"#d52c36\" },\n  },\n  {\n    scope: \"meta.definition.class.inherited.classes.groovy\",\n    settings: { foreground: \"#199f43\" },\n  },\n  {\n    scope: \"support.variable.semantic.hlsl\",\n    settings: { foreground: \"#d5a910\" },\n  },\n  {\n    scope: [\n      \"support.type.texture.hlsl\",\n      \"support.type.sampler.hlsl\",\n      \"support.type.object.hlsl\",\n      \"support.type.object.rw.hlsl\",\n      \"support.type.fx.hlsl\",\n      \"support.type.object.hlsl\",\n    ],\n    settings: { foreground: \"#fc2b73\" },\n  },\n  {\n    scope: [\"text.variable\", \"text.bracketed\"],\n    settings: { foreground: \"#d52c36\" },\n  },\n  {\n    scope: [\"support.type.swift\", \"support.type.vb.asp\"],\n    settings: { foreground: \"#d5a910\" },\n  },\n  {\n    scope: \"meta.scope.prerequisites.makefile\",\n    settings: { foreground: \"#d52c36\" },\n  },\n  {\n    scope: \"source.makefile\",\n    settings: { foreground: \"#d5a910\" },\n  },\n  {\n    scope: \"source.ini\",\n    settings: { foreground: \"#199f43\" },\n  },\n  {\n    scope: \"constant.language.symbol.ruby\",\n    settings: { foreground: \"#08c0ef\" },\n  },\n  {\n    scope: [\"function.parameter.ruby\", \"function.parameter.cs\"],\n    settings: { foreground: \"#79797F\" },\n  },\n  {\n    scope: \"constant.language.symbol.elixir\",\n    settings: { foreground: \"#08c0ef\" },\n  },\n  {\n    scope:\n      \"text.html.laravel-blade source.php.embedded.line.html entity.name.tag.laravel-blade\",\n    settings: { foreground: \"#fc2b73\" },\n  },\n  {\n    scope:\n      \"text.html.laravel-blade source.php.embedded.line.html support.constant.laravel-blade\",\n    settings: { foreground: \"#fc2b73\" },\n  },\n  {\n    scope: \"entity.name.function.xi\",\n    settings: { foreground: \"#d5a910\" },\n  },\n  {\n    scope: \"entity.name.class.xi\",\n    settings: { foreground: \"#08c0ef\" },\n  },\n  {\n    scope: \"constant.character.character-class.regexp.xi\",\n    settings: { foreground: \"#d52c36\" },\n  },\n  {\n    scope: \"constant.regexp.xi\",\n    settings: { foreground: \"#fc2b73\" },\n  },\n  {\n    scope: \"keyword.control.xi\",\n    settings: { foreground: \"#08c0ef\" },\n  },\n  {\n    scope: \"invalid.xi\",\n    settings: { foreground: \"#79797F\" },\n  },\n  {\n    scope: \"beginning.punctuation.definition.quote.markdown.xi\",\n    settings: { foreground: \"#199f43\" },\n  },\n  {\n    scope: \"beginning.punctuation.definition.list.markdown.xi\",\n    settings: { foreground: \"#84848A\" },\n  },\n  {\n    scope: \"constant.character.xi\",\n    settings: { foreground: \"#7b43f8\" },\n  },\n  {\n    scope: \"accent.xi\",\n    settings: { foreground: \"#7b43f8\" },\n  },\n  {\n    scope: \"wikiword.xi\",\n    settings: { foreground: \"#d5a910\" },\n  },\n  {\n    scope: \"constant.other.color.rgb-value.xi\",\n    settings: { foreground: \"#ffffff\" },\n  },\n  {\n    scope: \"punctuation.definition.tag.xi\",\n    settings: { foreground: \"#84848A\" },\n  },\n  {\n    scope: [\n      \"support.constant.property-value.scss\",\n      \"support.constant.property-value.css\",\n    ],\n    settings: { foreground: \"#d5a910\" },\n  },\n  {\n    scope: [\n      \"keyword.operator.css\",\n      \"keyword.operator.scss\",\n      \"keyword.operator.less\",\n    ],\n    settings: { foreground: \"#08c0ef\" },\n  },\n  {\n    scope: [\n      \"support.constant.color.w3c-standard-color-name.css\",\n      \"support.constant.color.w3c-standard-color-name.scss\",\n    ],\n    settings: { foreground: \"#d5a910\" },\n  },\n  {\n    scope: \"punctuation.separator.list.comma.css\",\n    settings: { foreground: \"#79797F\" },\n  },\n  {\n    scope: \"support.type.vendored.property-name.css\",\n    settings: { foreground: \"#08c0ef\" },\n  },\n  {\n    scope: \"support.type.property-name.css\",\n    settings: { foreground: \"#08c0ef\" },\n  },\n  {\n    scope: \"support.type.property-name\",\n    settings: { foreground: \"#79797F\" },\n  },\n  {\n    scope: \"support.constant.property-value\",\n    settings: { foreground: \"#79797F\" },\n  },\n  {\n    scope: \"support.constant.font-name\",\n    settings: { foreground: \"#d5a910\" },\n  },\n  {\n    scope: \"entity.other.attribute-name.class.css\",\n    settings: {\n      foreground: \"#16a994\",\n      fontStyle: \"normal\",\n    },\n  },\n  {\n    scope: \"entity.other.attribute-name.id\",\n    settings: {\n      foreground: \"#7b43f8\",\n      fontStyle: \"normal\",\n    },\n  },\n  {\n    scope: [\n      \"entity.other.attribute-name.pseudo-element\",\n      \"entity.other.attribute-name.pseudo-class\",\n    ],\n    settings: { foreground: \"#08c0ef\" },\n  },\n  {\n    scope: \"meta.selector\",\n    settings: { foreground: \"#fc2b73\" },\n  },\n  {\n    scope: \"selector.sass\",\n    settings: { foreground: \"#d52c36\" },\n  },\n  {\n    scope: \"rgb-value\",\n    settings: { foreground: \"#08c0ef\" },\n  },\n  {\n    scope: \"inline-color-decoration rgb-value\",\n    settings: { foreground: \"#d5a910\" },\n  },\n  {\n    scope: \"less rgb-value\",\n    settings: { foreground: \"#d5a910\" },\n  },\n  {\n    scope: \"control.elements\",\n    settings: { foreground: \"#d5a910\" },\n  },\n  {\n    scope: \"keyword.operator.less\",\n    settings: { foreground: \"#d5a910\" },\n  },\n  {\n    scope: \"entity.name.tag\",\n    settings: { foreground: \"#d52c36\" },\n  },\n  {\n    scope: \"entity.other.attribute-name\",\n    settings: {\n      foreground: \"#16a994\",\n      fontStyle: \"normal\",\n    },\n  },\n  {\n    scope: \"constant.character.entity\",\n    settings: { foreground: \"#d52c36\" },\n  },\n  {\n    scope: \"meta.tag\",\n    settings: { foreground: \"#79797F\" },\n  },\n  {\n    scope: \"invalid.illegal.bad-ampersand.html\",\n    settings: { foreground: \"#79797F\" },\n  },\n  {\n    scope: \"markup.heading\",\n    settings: { foreground: \"#d52c36\" },\n  },\n  {\n    scope: [\n      \"markup.heading punctuation.definition.heading\",\n      \"entity.name.section\",\n    ],\n    settings: { foreground: \"#7b43f8\" },\n  },\n  {\n    scope: \"entity.name.section.markdown\",\n    settings: { foreground: \"#d52c36\" },\n  },\n  {\n    scope: \"punctuation.definition.heading.markdown\",\n    settings: { foreground: \"#d52c36\" },\n  },\n  {\n    scope: \"markup.heading.setext\",\n    settings: { foreground: \"#79797F\" },\n  },\n  {\n    scope: [\n      \"markup.heading.setext.1.markdown\",\n      \"markup.heading.setext.2.markdown\",\n    ],\n    settings: { foreground: \"#d52c36\" },\n  },\n  {\n    scope: [\"markup.bold\", \"todo.bold\"],\n    settings: { foreground: \"#d5a910\" },\n  },\n  {\n    scope: \"punctuation.definition.bold\",\n    settings: { foreground: \"#d5a910\" },\n  },\n  {\n    scope: \"punctuation.definition.bold.markdown\",\n    settings: { foreground: \"#d5a910\" },\n  },\n  {\n    scope: [\"markup.italic\", \"punctuation.definition.italic\", \"todo.emphasis\"],\n    settings: {\n      foreground: \"#fc2b73\",\n      fontStyle: \"italic\",\n    },\n  },\n  {\n    scope: \"emphasis md\",\n    settings: { foreground: \"#fc2b73\" },\n  },\n  {\n    scope: \"markup.italic.markdown\",\n    settings: { fontStyle: \"italic\" },\n  },\n  {\n    scope: [\n      \"markup.underline.link.markdown\",\n      \"markup.underline.link.image.markdown\",\n    ],\n    settings: { foreground: \"#fc2b73\" },\n  },\n  {\n    scope: [\n      \"string.other.link.title.markdown\",\n      \"string.other.link.description.markdown\",\n    ],\n    settings: { foreground: \"#7b43f8\" },\n  },\n  {\n    scope: \"punctuation.definition.metadata.markdown\",\n    settings: { foreground: \"#d52c36\" },\n  },\n  {\n    scope: [\"markup.inline.raw.markdown\", \"markup.inline.raw.string.markdown\"],\n    settings: { foreground: \"#199f43\" },\n  },\n  {\n    scope: \"punctuation.definition.list.begin.markdown\",\n    settings: { foreground: \"#d52c36\" },\n  },\n  {\n    scope: \"punctuation.definition.list.markdown\",\n    settings: { foreground: \"#d52c36\" },\n  },\n  {\n    scope: \"beginning.punctuation.definition.list.markdown\",\n    settings: { foreground: \"#d52c36\" },\n  },\n  {\n    scope: [\n      \"punctuation.definition.string.begin.markdown\",\n      \"punctuation.definition.string.end.markdown\",\n    ],\n    settings: { foreground: \"#d52c36\" },\n  },\n  {\n    scope: \"markup.quote.markdown\",\n    settings: { foreground: \"#84848A\" },\n  },\n  {\n    scope: \"keyword.other.unit\",\n    settings: { foreground: \"#d52c36\" },\n  },\n  {\n    scope: \"markup.changed.diff\",\n    settings: { foreground: \"#d5a910\" },\n  },\n  {\n    scope: [\n      \"meta.diff.header.from-file\",\n      \"meta.diff.header.to-file\",\n      \"punctuation.definition.from-file.diff\",\n      \"punctuation.definition.to-file.diff\",\n    ],\n    settings: { foreground: \"#7b43f8\" },\n  },\n  {\n    scope: \"markup.inserted.diff\",\n    settings: { foreground: \"#199f43\" },\n  },\n  {\n    scope: \"markup.deleted.diff\",\n    settings: { foreground: \"#d52c36\" },\n  },\n  {\n    scope: \"string.regexp\",\n    settings: { foreground: \"#17a5af\" },\n  },\n  {\n    scope: \"constant.other.character-class.regexp\",\n    settings: { foreground: \"#d52c36\" },\n  },\n  {\n    scope: \"keyword.operator.quantifier.regexp\",\n    settings: { foreground: \"#d5a910\" },\n  },\n  {\n    scope: \"constant.character.escape\",\n    settings: { foreground: \"#1ca1c7\" },\n  },\n  {\n    scope: \"source.json meta.structure.dictionary.json > string.quoted.json\",\n    settings: { foreground: \"#d52c36\" },\n  },\n  {\n    scope:\n      \"source.json meta.structure.dictionary.json > string.quoted.json > punctuation.string\",\n    settings: { foreground: \"#d52c36\" },\n  },\n  {\n    scope: [\n      \"source.json meta.structure.dictionary.json > value.json > string.quoted.json\",\n      \"source.json meta.structure.array.json > value.json > string.quoted.json\",\n      \"source.json meta.structure.dictionary.json > value.json > string.quoted.json > punctuation\",\n      \"source.json meta.structure.array.json > value.json > string.quoted.json > punctuation\",\n    ],\n    settings: { foreground: \"#199f43\" },\n  },\n  {\n    scope: [\n      \"source.json meta.structure.dictionary.json > constant.language.json\",\n      \"source.json meta.structure.array.json > constant.language.json\",\n    ],\n    settings: { foreground: \"#08c0ef\" },\n  },\n  {\n    scope: \"support.type.property-name.json\",\n    settings: { foreground: \"#d52c36\" },\n  },\n  {\n    scope: \"support.type.property-name.json punctuation\",\n    settings: { foreground: \"#d52c36\" },\n  },\n  {\n    scope: \"punctuation.definition.block.sequence.item.yaml\",\n    settings: { foreground: \"#79797F\" },\n  },\n  {\n    scope: \"block.scope.end\",\n    settings: { foreground: \"#79797F\" },\n  },\n  {\n    scope: \"block.scope.begin\",\n    settings: { foreground: \"#79797F\" },\n  },\n  {\n    scope: \"token.info-token\",\n    settings: { foreground: \"#7b43f8\" },\n  },\n  {\n    scope: \"token.warn-token\",\n    settings: { foreground: \"#d5a910\" },\n  },\n  {\n    scope: \"token.error-token\",\n    settings: { foreground: \"#f44747\" },\n  },\n  {\n    scope: \"token.debug-token\",\n    settings: { foreground: \"#fc2b73\" },\n  },\n  {\n    scope: \"invalid.illegal\",\n    settings: { foreground: \"#ffffff\" },\n  },\n  {\n    scope: \"invalid.broken\",\n    settings: { foreground: \"#ffffff\" },\n  },\n  {\n    scope: \"invalid.deprecated\",\n    settings: { foreground: \"#ffffff\" },\n  },\n  {\n    scope: \"invalid.unimplemented\",\n    settings: { foreground: \"#ffffff\" },\n  },\n];\nvar semanticTokenColors = {\n  comment: \"#84848A\",\n  string: \"#199f43\",\n  number: \"#1ca1c7\",\n  regexp: \"#17a5af\",\n  keyword: \"#fc2b73\",\n  variable: \"#d47628\",\n  parameter: \"#79797F\",\n  property: \"#d47628\",\n  function: \"#7b43f8\",\n  method: \"#7b43f8\",\n  type: \"#c635e4\",\n  class: \"#c635e4\",\n  namespace: \"#d5a910\",\n  enumMember: \"#08c0ef\",\n  \"variable.constant\": \"#d5a910\",\n  \"variable.defaultLibrary\": \"#d5a910\",\n};\nvar pierre_light_default = {\n  name,\n  type,\n  colors,\n  tokenColors,\n  semanticTokenColors,\n};\n\n//#endregion\nexport {\n  colors,\n  pierre_light_default as default,\n  name,\n  semanticTokenColors,\n  tokenColors,\n  type,\n};\n"
    },
    {
      "path": "components/tool-ui/shared/schema.ts",
      "type": "registry:lib",
      "target": "components/tool-ui/shared/schema.ts",
      "content": "import { z } from \"zod\";\nimport type { ReactNode } from \"react\";\n\n/**\n * Tool UI conventions:\n * - Serializable schemas are JSON-safe (no callbacks/ReactNode/`className`).\n * - Schema: `SerializableXSchema`\n * - Parser: `parseSerializableX(input: unknown)` (throws on invalid)\n * - Safe parser: `safeParseSerializableX(input: unknown)` (returns `null` on invalid)\n * - Actions: `LocalActions` for non-receipt actions and `DecisionActions` for consequential actions\n * - Root attrs: `data-tool-ui-id` + `data-slot`\n */\n\n/**\n * Schema for tool UI identity.\n *\n * Every tool UI should have a unique identifier that:\n * - Is stable across re-renders\n * - Is meaningful (not auto-generated)\n * - Is unique within the conversation\n *\n * Format recommendation: `{component-type}-{semantic-identifier}`\n * Examples: \"data-table-expenses-q3\", \"option-list-deploy-target\"\n */\nexport const ToolUIIdSchema = z.string().min(1);\n\nexport type ToolUIId = z.infer<typeof ToolUIIdSchema>;\n\n/**\n * Primary role of a Tool UI surface in a chat context.\n */\nexport const ToolUIRoleSchema = z.enum([\n  \"information\",\n  \"decision\",\n  \"control\",\n  \"state\",\n  \"composite\",\n]);\n\nexport type ToolUIRole = z.infer<typeof ToolUIRoleSchema>;\n\nexport const ToolUIReceiptOutcomeSchema = z.enum([\n  \"success\",\n  \"partial\",\n  \"failed\",\n  \"cancelled\",\n]);\n\nexport type ToolUIReceiptOutcome = z.infer<typeof ToolUIReceiptOutcomeSchema>;\n\n/**\n * Optional receipt metadata: a durable summary of an outcome.\n */\nexport const ToolUIReceiptSchema = z.object({\n  outcome: ToolUIReceiptOutcomeSchema,\n  summary: z.string().min(1),\n  identifiers: z.record(z.string(), z.string()).optional(),\n  at: z.string().datetime(),\n});\n\nexport type ToolUIReceipt = z.infer<typeof ToolUIReceiptSchema>;\n\n/**\n * Base schema for Tool UI payloads (id + optional role/receipt).\n */\nexport const ToolUISurfaceSchema = z.object({\n  id: ToolUIIdSchema,\n  role: ToolUIRoleSchema.optional(),\n  receipt: ToolUIReceiptSchema.optional(),\n});\n\nexport type ToolUISurface = z.infer<typeof ToolUISurfaceSchema>;\n\nexport const ActionSchema = z.object({\n  id: z.string().min(1),\n  label: z.string().min(1),\n  /**\n   * Canonical narration the assistant can use after this action is taken.\n   *\n   * Example: \"I exported the table as CSV.\" / \"I opened the link in a new tab.\"\n   */\n  sentence: z.string().optional(),\n  confirmLabel: z.string().optional(),\n  variant: z\n    .enum([\"default\", \"destructive\", \"secondary\", \"ghost\", \"outline\"])\n    .optional(),\n  icon: z.custom<ReactNode>().optional(),\n  loading: z.boolean().optional(),\n  disabled: z.boolean().optional(),\n  shortcut: z.string().optional(),\n});\n\nexport type Action = z.infer<typeof ActionSchema>;\nexport type LocalAction = Action;\nexport type DecisionAction = Action;\n\nexport const DecisionResultSchema = z.object({\n  kind: z.literal(\"decision\"),\n  version: z.literal(1),\n  decisionId: z.string().min(1),\n  actionId: z.string().min(1),\n  actionLabel: z.string().min(1),\n  at: z.string().datetime(),\n  payload: z.record(z.string(), z.unknown()).optional(),\n});\n\nexport type DecisionResult<\n  TPayload extends Record<string, unknown> = Record<string, unknown>,\n> = Omit<z.infer<typeof DecisionResultSchema>, \"payload\"> & {\n  payload?: TPayload;\n};\n\nexport function createDecisionResult<\n  TPayload extends Record<string, unknown> = Record<string, unknown>,\n>(args: {\n  decisionId: string;\n  action: { id: string; label: string };\n  payload?: TPayload;\n}): DecisionResult<TPayload> {\n  return {\n    kind: \"decision\",\n    version: 1,\n    decisionId: args.decisionId,\n    actionId: args.action.id,\n    actionLabel: args.action.label,\n    at: new Date().toISOString(),\n    payload: args.payload,\n  };\n}\n\nexport const ActionButtonsPropsSchema = z.object({\n  actions: z.array(ActionSchema).min(1),\n  align: z.enum([\"left\", \"center\", \"right\"]).optional(),\n  confirmTimeout: z.number().positive().optional(),\n  className: z.string().optional(),\n});\n\nexport const SerializableActionSchema = ActionSchema.omit({ icon: true });\nexport const SerializableActionsSchema = ActionButtonsPropsSchema.extend({\n  actions: z.array(SerializableActionSchema),\n}).omit({ className: true });\n\nexport interface ActionsConfig {\n  items: Action[];\n  align?: \"left\" | \"center\" | \"right\";\n  confirmTimeout?: number;\n}\n\nexport const SerializableActionsConfigSchema = z.object({\n  items: z.array(SerializableActionSchema).min(1),\n  align: z.enum([\"left\", \"center\", \"right\"]).optional(),\n  confirmTimeout: z.number().positive().optional(),\n});\n\nexport type SerializableActionsConfig = z.infer<\n  typeof SerializableActionsConfigSchema\n>;\n\nexport type SerializableAction = z.infer<typeof SerializableActionSchema>;\n"
    },
    {
      "path": "components/tool-ui/shared/use-copy-to-clipboard.ts",
      "type": "registry:lib",
      "target": "components/tool-ui/shared/use-copy-to-clipboard.ts",
      "content": "\"use client\";\n\nimport { useCallback, useEffect, useState } from \"react\";\n\nfunction fallbackCopyToClipboard(text: string): boolean {\n  const textArea = document.createElement(\"textarea\");\n  try {\n    textArea.value = text;\n    textArea.setAttribute(\"readonly\", \"\");\n    textArea.style.position = \"fixed\";\n    textArea.style.top = \"-9999px\";\n    textArea.style.left = \"-9999px\";\n    document.body.appendChild(textArea);\n    textArea.select();\n    return document.execCommand(\"copy\");\n  } catch {\n    return false;\n  } finally {\n    if (textArea.parentNode) {\n      textArea.parentNode.removeChild(textArea);\n    }\n  }\n}\n\nexport function useCopyToClipboard(options?: { resetAfterMs?: number }): {\n  copiedId: string | null;\n  copy: (text: string, id?: string) => Promise<boolean>;\n} {\n  const resetAfterMs = options?.resetAfterMs ?? 2000;\n  const [copiedId, setCopiedId] = useState<string | null>(null);\n\n  const copy = useCallback(async (text: string, id: string = \"default\") => {\n    let ok = false;\n    try {\n      if (navigator.clipboard?.writeText) {\n        await navigator.clipboard.writeText(text);\n        ok = true;\n      } else {\n        ok = fallbackCopyToClipboard(text);\n      }\n    } catch {\n      ok = fallbackCopyToClipboard(text);\n    }\n\n    if (ok) {\n      setCopiedId(id);\n    }\n\n    return ok;\n  }, []);\n\n  useEffect(() => {\n    if (!copiedId) return;\n    const timeout = setTimeout(() => setCopiedId(null), resetAfterMs);\n    return () => clearTimeout(timeout);\n  }, [copiedId, resetAfterMs]);\n\n  return { copiedId, copy };\n}\n"
    }
  ]
}
