xref: /expo/docs/pages/_app.tsx (revision 491cd33f)
1import { css, Global } from '@emotion/react';
2import { ThemeProvider } from '@expo/styleguide';
3import { MDXProvider } from '@mdx-js/react';
4import * as Sentry from '@sentry/react';
5import { BrowserTracing } from '@sentry/tracing';
6import { AppProps } from 'next/app';
7import { Inter, Fira_Code } from 'next/font/google';
8
9import { preprocessSentryError } from '~/common/sentry-utilities';
10import { useNProgress } from '~/common/use-nprogress';
11import DocumentationElements from '~/components/page-higher-order/DocumentationElements';
12import { AnalyticsProvider } from '~/providers/Analytics';
13import { markdownComponents } from '~/ui/components/Markdown';
14
15import 'global-styles/global.css';
16import '@expo/styleguide/dist/expo-theme.css';
17import 'tippy.js/dist/tippy.css';
18
19const isDev = process.env.NODE_ENV === 'development';
20
21export const regularFont = Inter({
22  display: 'swap',
23  subsets: ['latin'],
24});
25export const monospaceFont = Fira_Code({
26  weight: ['400', '500'],
27  display: 'swap',
28  subsets: ['latin'],
29});
30
31Sentry.init({
32  dsn: 'https://[email protected]/1526800',
33  beforeSend: preprocessSentryError,
34  environment: isDev ? 'development' : 'production',
35  denyUrls: isDev
36    ? undefined
37    : [
38        /https:\/\/docs-expo-dev\.translate\.goog/,
39        /https:\/\/translated\.turbopages\.org/,
40        /https:\/\/docs\.expo\.dev\/index\.html/,
41      ],
42  integrations: [new BrowserTracing()],
43  tracesSampleRate: 1.0,
44});
45
46const rootMarkdownComponents = {
47  ...markdownComponents,
48  wrapper: DocumentationElements,
49};
50
51export { reportWebVitals } from '~/providers/Analytics';
52
53export default function App({ Component, pageProps }: AppProps) {
54  useNProgress();
55  return (
56    <AnalyticsProvider>
57      <ThemeProvider>
58        <MDXProvider components={rootMarkdownComponents}>
59          <Global
60            styles={css({
61              'html, body, kbd, button, input, select': {
62                fontFamily: regularFont.style.fontFamily,
63              },
64              'code, pre, table.diff': {
65                fontFamily: monospaceFont.style.fontFamily,
66              },
67            })}
68          />
69          <Component {...pageProps} />
70        </MDXProvider>
71      </ThemeProvider>
72    </AnalyticsProvider>
73  );
74}
75