您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符

layout.tsx 5.5KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. import RoutePrefixHandle from './routePrefixHandle'
  2. import type { Viewport } from 'next'
  3. import I18nServer from './components/i18n-server'
  4. import BrowserInitializer from './components/browser-initializer'
  5. import SentryInitializer from './components/sentry-initializer'
  6. import Zendesk from './components/base/zendesk'
  7. import { getLocaleOnServer } from '@/i18n-config/server'
  8. import { TanstackQueryInitializer } from '@/context/query-client'
  9. import { ThemeProvider } from 'next-themes'
  10. import './styles/globals.css'
  11. import './styles/markdown.scss'
  12. import GlobalPublicStoreProvider from '@/context/global-public-context'
  13. import { DatasetAttr } from '@/types/feature'
  14. import { Instrument_Serif } from 'next/font/google'
  15. import cn from '@/utils/classnames'
  16. export const viewport: Viewport = {
  17. width: 'device-width',
  18. initialScale: 1,
  19. maximumScale: 1,
  20. viewportFit: 'cover',
  21. userScalable: false,
  22. }
  23. const instrumentSerif = Instrument_Serif({
  24. weight: ['400'],
  25. style: ['normal', 'italic'],
  26. subsets: ['latin'],
  27. variable: '--font-instrument-serif',
  28. })
  29. const LocaleLayout = async ({
  30. children,
  31. }: {
  32. children: React.ReactNode
  33. }) => {
  34. const locale = await getLocaleOnServer()
  35. const datasetMap: Record<DatasetAttr, string | undefined> = {
  36. [DatasetAttr.DATA_API_PREFIX]: process.env.NEXT_PUBLIC_API_PREFIX,
  37. [DatasetAttr.DATA_PUBLIC_API_PREFIX]: process.env.NEXT_PUBLIC_PUBLIC_API_PREFIX,
  38. [DatasetAttr.DATA_MARKETPLACE_API_PREFIX]: process.env.NEXT_PUBLIC_MARKETPLACE_API_PREFIX,
  39. [DatasetAttr.DATA_MARKETPLACE_URL_PREFIX]: process.env.NEXT_PUBLIC_MARKETPLACE_URL_PREFIX,
  40. [DatasetAttr.DATA_PUBLIC_EDITION]: process.env.NEXT_PUBLIC_EDITION,
  41. [DatasetAttr.DATA_PUBLIC_SUPPORT_MAIL_LOGIN]: process.env.NEXT_PUBLIC_SUPPORT_MAIL_LOGIN,
  42. [DatasetAttr.DATA_PUBLIC_SENTRY_DSN]: process.env.NEXT_PUBLIC_SENTRY_DSN,
  43. [DatasetAttr.DATA_PUBLIC_MAINTENANCE_NOTICE]: process.env.NEXT_PUBLIC_MAINTENANCE_NOTICE,
  44. [DatasetAttr.DATA_PUBLIC_SITE_ABOUT]: process.env.NEXT_PUBLIC_SITE_ABOUT,
  45. [DatasetAttr.DATA_PUBLIC_TEXT_GENERATION_TIMEOUT_MS]: process.env.NEXT_PUBLIC_TEXT_GENERATION_TIMEOUT_MS,
  46. [DatasetAttr.DATA_PUBLIC_MAX_TOOLS_NUM]: process.env.NEXT_PUBLIC_MAX_TOOLS_NUM,
  47. [DatasetAttr.DATA_PUBLIC_MAX_PARALLEL_LIMIT]: process.env.NEXT_PUBLIC_MAX_PARALLEL_LIMIT,
  48. [DatasetAttr.DATA_PUBLIC_TOP_K_MAX_VALUE]: process.env.NEXT_PUBLIC_TOP_K_MAX_VALUE,
  49. [DatasetAttr.DATA_PUBLIC_INDEXING_MAX_SEGMENTATION_TOKENS_LENGTH]: process.env.NEXT_PUBLIC_INDEXING_MAX_SEGMENTATION_TOKENS_LENGTH,
  50. [DatasetAttr.DATA_PUBLIC_LOOP_NODE_MAX_COUNT]: process.env.NEXT_PUBLIC_LOOP_NODE_MAX_COUNT,
  51. [DatasetAttr.DATA_PUBLIC_MAX_ITERATIONS_NUM]: process.env.NEXT_PUBLIC_MAX_ITERATIONS_NUM,
  52. [DatasetAttr.DATA_PUBLIC_MAX_TREE_DEPTH]: process.env.NEXT_PUBLIC_MAX_TREE_DEPTH,
  53. [DatasetAttr.DATA_PUBLIC_ALLOW_UNSAFE_DATA_SCHEME]: process.env.NEXT_PUBLIC_ALLOW_UNSAFE_DATA_SCHEME,
  54. [DatasetAttr.DATA_PUBLIC_ENABLE_WEBSITE_JINAREADER]: process.env.NEXT_PUBLIC_ENABLE_WEBSITE_JINAREADER,
  55. [DatasetAttr.DATA_PUBLIC_ENABLE_WEBSITE_FIRECRAWL]: process.env.NEXT_PUBLIC_ENABLE_WEBSITE_FIRECRAWL,
  56. [DatasetAttr.DATA_PUBLIC_ENABLE_WEBSITE_WATERCRAWL]: process.env.NEXT_PUBLIC_ENABLE_WEBSITE_WATERCRAWL,
  57. [DatasetAttr.NEXT_PUBLIC_ZENDESK_WIDGET_KEY]: process.env.NEXT_PUBLIC_ZENDESK_WIDGET_KEY,
  58. [DatasetAttr.NEXT_PUBLIC_ZENDESK_FIELD_ID_ENVIRONMENT]: process.env.NEXT_PUBLIC_ZENDESK_FIELD_ID_ENVIRONMENT,
  59. [DatasetAttr.NEXT_PUBLIC_ZENDESK_FIELD_ID_VERSION]: process.env.NEXT_PUBLIC_ZENDESK_FIELD_ID_VERSION,
  60. [DatasetAttr.NEXT_PUBLIC_ZENDESK_FIELD_ID_EMAIL]: process.env.NEXT_PUBLIC_ZENDESK_FIELD_ID_EMAIL,
  61. [DatasetAttr.NEXT_PUBLIC_ZENDESK_FIELD_ID_WORKSPACE_ID]: process.env.NEXT_PUBLIC_ZENDESK_FIELD_ID_WORKSPACE_ID,
  62. [DatasetAttr.NEXT_PUBLIC_ZENDESK_FIELD_ID_PLAN]: process.env.NEXT_PUBLIC_ZENDESK_FIELD_ID_PLAN,
  63. }
  64. return (
  65. <html lang={locale ?? 'en'} className={cn('h-full', instrumentSerif.variable)} suppressHydrationWarning>
  66. <head>
  67. <link rel="manifest" href="/manifest.json" />
  68. <meta name="theme-color" content="#1C64F2" />
  69. <meta name="mobile-web-app-capable" content="yes" />
  70. <meta name="apple-mobile-web-app-capable" content="yes" />
  71. <meta name="apple-mobile-web-app-status-bar-style" content="default" />
  72. <meta name="apple-mobile-web-app-title" content="Dify" />
  73. <link rel="apple-touch-icon" href="/apple-touch-icon.png" />
  74. <link rel="icon" type="image/png" sizes="32x32" href="/icon-192x192.png" />
  75. <link rel="icon" type="image/png" sizes="16x16" href="/icon-192x192.png" />
  76. <meta name="msapplication-TileColor" content="#1C64F2" />
  77. <meta name="msapplication-config" content="/browserconfig.xml" />
  78. </head>
  79. <body
  80. className='color-scheme h-full select-auto'
  81. {...datasetMap}
  82. >
  83. <ThemeProvider
  84. attribute='data-theme'
  85. defaultTheme='system'
  86. enableSystem
  87. disableTransitionOnChange
  88. enableColorScheme={false}
  89. >
  90. <BrowserInitializer>
  91. <SentryInitializer>
  92. <TanstackQueryInitializer>
  93. <I18nServer>
  94. <GlobalPublicStoreProvider>
  95. {children}
  96. </GlobalPublicStoreProvider>
  97. </I18nServer>
  98. </TanstackQueryInitializer>
  99. </SentryInitializer>
  100. </BrowserInitializer>
  101. </ThemeProvider>
  102. <RoutePrefixHandle />
  103. <Zendesk />
  104. </body>
  105. </html>
  106. )
  107. }
  108. export default LocaleLayout