unsloth/studio/frontend/src/main.tsx
oobabooga 36ec2cc046
Studio: lighten chat text weight on Linux to match macOS rendering (#7308)
* Studio: lighten chat text weight on Linux to match macOS rendering

* Exclude custom interface fonts from the Linux chat weight compensation

* Simplify Linux chat font weight override
2026-07-22 06:14:40 -07:00

52 lines
1.6 KiB
TypeScript

// SPDX-License-Identifier: AGPL-3.0-only
// Copyright 2026-present the Unsloth AI Inc. team. All rights reserved. See /studio/LICENSE.AGPL-3.0
import { StrictMode } from "react";
import { createRoot } from "react-dom/client";
import "./index.css";
import { App } from "./app/app";
import { fetchDeviceType } from "./config/env";
import { initializeLocale } from "./i18n";
const globalCrypto = globalThis.crypto as Crypto | undefined;
if (globalCrypto && typeof globalCrypto.randomUUID !== "function") {
// Some envs ship `crypto` without `randomUUID()`. Provide a best-effort v4
// UUID using `getRandomValues` when available.
const cryptoRef = globalCrypto;
function getRandomByte(): number {
if (typeof cryptoRef.getRandomValues === "function") {
return cryptoRef.getRandomValues(new Uint8Array(1))[0];
}
return Math.floor(Math.random() * 256);
}
cryptoRef.randomUUID = (() =>
"10000000-1000-4000-8000-100000000000".replace(/[018]/g, (c) =>
(+c ^ (getRandomByte() & (15 >> (+c / 4)))).toString(16),
)) as Crypto["randomUUID"];
}
const rootElement = document.getElementById("root");
if (!rootElement) {
throw new Error("Root element not found");
}
initializeLocale();
// Rasterization follows the browser OS, not the potentially remote server.
// This adjustment is calibrated for desktop Linux, so exclude Android.
const uaLower = navigator.userAgent.toLowerCase();
if (uaLower.includes("linux") && !uaLower.includes("android")) {
document.documentElement.classList.add("render-linux");
}
createRoot(rootElement).render(
<StrictMode>
<App />
</StrictMode>,
);
fetchDeviceType().catch(() => undefined);