import ReactDOM from 'react-dom/client'; import { BrowserRouter } from "react-router" import App from './App'; import { MantineProvider } from '@mantine/core'; import { Notifications } from '@mantine/notifications'; import { QueryClientProvider, } from '@tanstack/react-query' import { queryClient } from './js/utils'; import { CodeHighlightAdapterProvider, stripShikiCodeBlocks, CodeHighlightAdapter } from '@mantine/code-highlight'; import '@mantine/core/styles.css'; import '@mantine/notifications/styles.css'; import '@mantine/code-highlight/styles.css'; import './index.css'; const root = ReactDOM.createRoot( document.getElementById('root') as HTMLElement ); // Shiki requires async code to load the highlighter async function loadShiki() { const { createHighlighter } = await import('shiki'); const shiki = await createHighlighter({ langs: ['python'], themes: ['one-dark-pro', 'one-light'] }); return shiki; } // Pass this adapter to CodeHighlightAdapterProvider component export const customShikiAdapter: CodeHighlightAdapter = { // loadContext is called on client side to load shiki highlighter // It is required to be used if your library requires async initialization // The value returned from loadContext is passed to createHighlighter as ctx argument loadContext: loadShiki, getHighlighter: (ctx) => { if (!ctx) { return ({ code }) => ({ highlightedCode: code, isHighlighted: false }); } return ({ code, language, colorScheme }) => ({ isHighlighted: true, // stripShikiCodeBlocks removes
and tags from highlighted code
highlightedCode: stripShikiCodeBlocks(
ctx.codeToHtml(code, {
lang: language,
theme: colorScheme === 'dark' ? 'one-dark-pro' : 'one-light',
})
),
});
},
};
import { createTheme } from '@mantine/core';
const myTheme = createTheme({
fontFamily: 'Inter, sans-serif',
headings: { fontFamily: 'Hanken Grotesk, sans-serif' },
primaryColor: 'cyan',
colors: {
dark: [
'#f5f5f5', // 0: text
'#9aa0a6', // 1: text-secondary
'#5f6368', // 2: outline
'#3c4043', // 3: outline-variant
'#2c2c2f', // 4: surface-variant / fourth_color
'#1e1e20', // 5: surface-container-high / third_color
'#1a1a1c', // 6: surface-container
'#161618', // 7: surface-container-low / primary_color
'#0a0a0c', // 8: background / secondary_color
'#050505', // 9: surface-container-lowest
],
cyan: [
'#e0ffff',
'#b3fbff',
'#80f6ff',
'#4df0ff',
'#20ebff',
'#00e5ff', // 5: surface-tint / accent
'#00b8cc',
'#008f9f',
'#006975',
'#004f59',
]
},
components: {
AppShell: {
styles: {
root: {
backgroundColor: '#0a0a0c',
},
navbar: {
backgroundColor: '#161618',
borderRight: '1px solid #2c2c2f',
},
header: {
backgroundColor: '#161618',
borderBottom: '1px solid #2c2c2f',
}
}
},
Card: {
defaultProps: {
bg: '#1e1e20',
radius: 'md',
withBorder: true,
},
styles: {
root: {
borderColor: '#2c2c2f',
}
}
}
}
});
root.render(
);