You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  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. export const viewport: Viewport = {
  15. width: 'device-width',
  16. initialScale: 1,
  17. maximumScale: 1,
  18. viewportFit: 'cover',
  19. userScalable: false,
  20. }
  21. const LocaleLayout = async ({
  22. children,
  23. }: {
  24. children: React.ReactNode
  25. }) => {
  26. const locale = await getLocaleOnServer()
  27. const datasetMap: Record<DatasetAttr, string | undefined> = {
  28. [DatasetAttr.DATA_API_PREFIX]: process.env.NEXT_PUBLIC_API_PREFIX,
  29. [DatasetAttr.DATA_PUBLIC_API_PREFIX]: process.env.NEXT_PUBLIC_PUBLIC_API_PREFIX,
  30. [DatasetAttr.DATA_MARKETPLACE_API_PREFIX]: process.env.NEXT_PUBLIC_MARKETPLACE_API_PREFIX,
  31. [DatasetAttr.DATA_MARKETPLACE_URL_PREFIX]: process.env.NEXT_PUBLIC_MARKETPLACE_URL_PREFIX,
  32. [DatasetAttr.DATA_PUBLIC_EDITION]: process.env.NEXT_PUBLIC_EDITION,
  33. [DatasetAttr.DATA_PUBLIC_SUPPORT_MAIL_LOGIN]: process.env.NEXT_PUBLIC_SUPPORT_MAIL_LOGIN,
  34. [DatasetAttr.DATA_PUBLIC_SENTRY_DSN]: process.env.NEXT_PUBLIC_SENTRY_DSN,
  35. [DatasetAttr.DATA_PUBLIC_MAINTENANCE_NOTICE]: process.env.NEXT_PUBLIC_MAINTENANCE_NOTICE,
  36. [DatasetAttr.DATA_PUBLIC_SITE_ABOUT]: process.env.NEXT_PUBLIC_SITE_ABOUT,
  37. [DatasetAttr.DATA_PUBLIC_TEXT_GENERATION_TIMEOUT_MS]: process.env.NEXT_PUBLIC_TEXT_GENERATION_TIMEOUT_MS,
  38. [DatasetAttr.DATA_PUBLIC_MAX_TOOLS_NUM]: process.env.NEXT_PUBLIC_MAX_TOOLS_NUM,
  39. [DatasetAttr.DATA_PUBLIC_MAX_PARALLEL_LIMIT]: process.env.NEXT_PUBLIC_MAX_PARALLEL_LIMIT,
  40. [DatasetAttr.DATA_PUBLIC_TOP_K_MAX_VALUE]: process.env.NEXT_PUBLIC_TOP_K_MAX_VALUE,
  41. [DatasetAttr.DATA_PUBLIC_INDEXING_MAX_SEGMENTATION_TOKENS_LENGTH]: process.env.NEXT_PUBLIC_INDEXING_MAX_SEGMENTATION_TOKENS_LENGTH,
  42. [DatasetAttr.DATA_PUBLIC_LOOP_NODE_MAX_COUNT]: process.env.NEXT_PUBLIC_LOOP_NODE_MAX_COUNT,
  43. [DatasetAttr.DATA_PUBLIC_MAX_ITERATIONS_NUM]: process.env.NEXT_PUBLIC_MAX_ITERATIONS_NUM,
  44. [DatasetAttr.DATA_PUBLIC_MAX_TREE_DEPTH]: process.env.NEXT_PUBLIC_MAX_TREE_DEPTH,
  45. [DatasetAttr.DATA_PUBLIC_ALLOW_UNSAFE_DATA_SCHEME]: process.env.NEXT_PUBLIC_ALLOW_UNSAFE_DATA_SCHEME,
  46. [DatasetAttr.DATA_PUBLIC_ENABLE_WEBSITE_JINAREADER]: process.env.NEXT_PUBLIC_ENABLE_WEBSITE_JINAREADER,
  47. [DatasetAttr.DATA_PUBLIC_ENABLE_WEBSITE_FIRECRAWL]: process.env.NEXT_PUBLIC_ENABLE_WEBSITE_FIRECRAWL,
  48. [DatasetAttr.DATA_PUBLIC_ENABLE_WEBSITE_WATERCRAWL]: process.env.NEXT_PUBLIC_ENABLE_WEBSITE_WATERCRAWL,
  49. [DatasetAttr.NEXT_PUBLIC_ZENDESK_WIDGET_KEY]: process.env.NEXT_PUBLIC_ZENDESK_WIDGET_KEY,
  50. [DatasetAttr.NEXT_PUBLIC_ZENDESK_FIELD_ID_ENVIRONMENT]: process.env.NEXT_PUBLIC_ZENDESK_FIELD_ID_ENVIRONMENT,
  51. [DatasetAttr.NEXT_PUBLIC_ZENDESK_FIELD_ID_VERSION]: process.env.NEXT_PUBLIC_ZENDESK_FIELD_ID_VERSION,
  52. [DatasetAttr.NEXT_PUBLIC_ZENDESK_FIELD_ID_EMAIL]: process.env.NEXT_PUBLIC_ZENDESK_FIELD_ID_EMAIL,
  53. [DatasetAttr.NEXT_PUBLIC_ZENDESK_FIELD_ID_WORKSPACE_ID]: process.env.NEXT_PUBLIC_ZENDESK_FIELD_ID_WORKSPACE_ID,
  54. [DatasetAttr.NEXT_PUBLIC_ZENDESK_FIELD_ID_PLAN]: process.env.NEXT_PUBLIC_ZENDESK_FIELD_ID_PLAN,
  55. }
  56. return (
  57. <html lang={locale ?? 'en'} className="h-full" suppressHydrationWarning>
  58. <head>
  59. <link rel="manifest" href="/manifest.json" />
  60. <meta name="theme-color" content="#1C64F2" />
  61. <meta name="mobile-web-app-capable" content="yes" />
  62. <meta name="apple-mobile-web-app-capable" content="yes" />
  63. <meta name="apple-mobile-web-app-status-bar-style" content="default" />
  64. <meta name="apple-mobile-web-app-title" content="Dify" />
  65. <link rel="apple-touch-icon" href="/apple-touch-icon.png" />
  66. <link rel="icon" type="image/png" sizes="32x32" href="/icon-192x192.png" />
  67. <link rel="icon" type="image/png" sizes="16x16" href="/icon-192x192.png" />
  68. <meta name="msapplication-TileColor" content="#1C64F2" />
  69. <meta name="msapplication-config" content="/browserconfig.xml" />
  70. </head>
  71. <body
  72. className="color-scheme h-full select-auto"
  73. {...datasetMap}
  74. >
  75. <ThemeProvider
  76. attribute='data-theme'
  77. defaultTheme='system'
  78. enableSystem
  79. disableTransitionOnChange
  80. enableColorScheme={false}
  81. >
  82. <BrowserInitializer>
  83. <SentryInitializer>
  84. <TanstackQueryInitializer>
  85. <I18nServer>
  86. <GlobalPublicStoreProvider>
  87. {children}
  88. </GlobalPublicStoreProvider>
  89. </I18nServer>
  90. </TanstackQueryInitializer>
  91. </SentryInitializer>
  92. </BrowserInitializer>
  93. </ThemeProvider>
  94. <RoutePrefixHandle />
  95. <Zendesk />
  96. </body>
  97. </html>
  98. )
  99. }
  100. export default LocaleLayout