diff --git a/package.json b/package.json
index f66506e75..e4d92c243 100644
--- a/package.json
+++ b/package.json
@@ -38,7 +38,7 @@
"gestalt": "^146.5.4",
"gray-matter": "^4.0.3",
"highlight.js": "^11.6.0",
- "i18next": "^21.9.1",
+ "i18next": "^23.2.3",
"instantsearch.css": "^7.4.5",
"katex": "^0.16.11",
"less": "^4.1.3",
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 35b4b7dfe..18784aec3 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -90,8 +90,8 @@ importers:
specifier: ^11.6.0
version: 11.9.0
i18next:
- specifier: ^21.9.1
- version: 21.10.0
+ specifier: ^23.2.3
+ version: 23.16.8
instantsearch.css:
specifier: ^7.4.5
version: 7.4.5
@@ -142,7 +142,7 @@ importers:
version: 6.1.0(react@18.2.0)
react-i18next:
specifier: ^14.1.0
- version: 14.1.2(i18next@21.10.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)
+ version: 14.1.2(i18next@23.16.8)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)
react-player:
specifier: ^2.9.0
version: 2.16.0(react@18.2.0)
@@ -3040,8 +3040,8 @@ packages:
engines: {node: '>=18'}
hasBin: true
- i18next@21.10.0:
- resolution: {integrity: sha512-YeuIBmFsGjUfO3qBmMOc0rQaun4mIpGKET5WDwvu8lU7gvwpcariZLNtL0Fzj+zazcHUrlXHiptcFhBMFaxzfg==}
+ i18next@23.16.8:
+ resolution: {integrity: sha512-06r/TitrM88Mg5FdUXAKL96dJMzgqLE5dv3ryBAra4KCwD9mJ4ndOTS95ZuymIGoE+2hzfdaMak2X11/es7ZWg==}
iconv-lite@0.6.3:
resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==}
@@ -8304,7 +8304,7 @@ snapshots:
eslint: 8.19.0
eslint-import-resolver-node: 0.3.9
eslint-import-resolver-typescript: 2.7.1(eslint-plugin-import@2.29.1(eslint@8.19.0))(eslint@8.19.0)
- eslint-plugin-import: 2.29.1(@typescript-eslint/parser@5.62.0(eslint@8.19.0)(typescript@5.4.5))(eslint-import-resolver-typescript@2.7.1)(eslint@8.19.0)
+ eslint-plugin-import: 2.29.1(@typescript-eslint/parser@5.62.0(eslint@8.19.0)(typescript@5.4.5))(eslint-import-resolver-typescript@2.7.1(eslint-plugin-import@2.29.1(eslint@8.19.0))(eslint@8.19.0))(eslint@8.19.0)
eslint-plugin-jsx-a11y: 6.8.0(eslint@8.19.0)
eslint-plugin-react: 7.34.2(eslint@8.19.0)
eslint-plugin-react-hooks: 4.6.2(eslint@8.19.0)
@@ -8326,7 +8326,7 @@ snapshots:
dependencies:
debug: 4.3.4
eslint: 8.19.0
- eslint-plugin-import: 2.29.1(@typescript-eslint/parser@5.62.0(eslint@8.19.0)(typescript@5.4.5))(eslint-import-resolver-typescript@2.7.1)(eslint@8.19.0)
+ eslint-plugin-import: 2.29.1(@typescript-eslint/parser@5.62.0(eslint@8.19.0)(typescript@5.4.5))(eslint-import-resolver-typescript@2.7.1(eslint-plugin-import@2.29.1(eslint@8.19.0))(eslint@8.19.0))(eslint@8.19.0)
glob: 7.2.3
is-glob: 4.0.3
resolve: 1.22.8
@@ -8345,7 +8345,7 @@ snapshots:
transitivePeerDependencies:
- supports-color
- eslint-plugin-import@2.29.1(@typescript-eslint/parser@5.62.0(eslint@8.19.0)(typescript@5.4.5))(eslint-import-resolver-typescript@2.7.1)(eslint@8.19.0):
+ eslint-plugin-import@2.29.1(@typescript-eslint/parser@5.62.0(eslint@8.19.0)(typescript@5.4.5))(eslint-import-resolver-typescript@2.7.1(eslint-plugin-import@2.29.1(eslint@8.19.0))(eslint@8.19.0))(eslint@8.19.0):
dependencies:
array-includes: 3.1.8
array.prototype.findlastindex: 1.2.5
@@ -8948,7 +8948,7 @@ snapshots:
husky@9.0.11: {}
- i18next@21.10.0:
+ i18next@23.16.8:
dependencies:
'@babel/runtime': 7.24.6
@@ -10328,11 +10328,11 @@ snapshots:
react: 18.2.0
react-dom: 18.2.0(react@18.2.0)
- react-i18next@14.1.2(i18next@21.10.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0):
+ react-i18next@14.1.2(i18next@23.16.8)(react-dom@18.2.0(react@18.2.0))(react@18.2.0):
dependencies:
'@babel/runtime': 7.24.6
html-parse-stringify: 3.0.1
- i18next: 21.10.0
+ i18next: 23.16.8
react: 18.2.0
optionalDependencies:
react-dom: 18.2.0(react@18.2.0)
diff --git a/public/images/ai-bird.png b/public/images/ai-bird.png
new file mode 100644
index 000000000..c3acc7e5e
Binary files /dev/null and b/public/images/ai-bird.png differ
diff --git a/public/images/authors/davidwang.png b/public/images/authors/davidwang.png
new file mode 100644
index 000000000..7f9df339f
Binary files /dev/null and b/public/images/authors/davidwang.png differ
diff --git a/public/images/authors/jiangchen.png b/public/images/authors/jiangchen.png
new file mode 100644
index 000000000..e4a194db5
Binary files /dev/null and b/public/images/authors/jiangchen.png differ
diff --git a/public/images/authors/stefanwebb.png b/public/images/authors/stefanwebb.png
new file mode 100644
index 000000000..8f4b6f826
Binary files /dev/null and b/public/images/authors/stefanwebb.png differ
diff --git a/public/images/supported.png b/public/images/supported.png
new file mode 100644
index 000000000..0483d8471
Binary files /dev/null and b/public/images/supported.png differ
diff --git a/src/components/aside/index.module.less b/src/components/aside/index.module.less
index 01935d832..f933e3d8c 100644
--- a/src/components/aside/index.module.less
+++ b/src/components/aside/index.module.less
@@ -1,7 +1,7 @@
@import url('@/styles/global.module.less');
.rightNavWrapper {
- font-family: 'Inter';
+ font-family: 'Geist';
.btnsGroup {
padding: 12px 0;
@@ -160,7 +160,7 @@ div.customRootClass {
}
.customTitleClass {
- font-family: 'Inter';
+ font-family: 'Geist';
color: @color-dark;
font-size: 32px;
font-weight: 700;
@@ -169,7 +169,7 @@ div.customRootClass {
}
p.dialogSubTitle {
- font-family: 'Inter';
+ font-family: 'Geist';
color: @color-dark;
font-size: 16px;
font-weight: 400;
@@ -178,7 +178,7 @@ p.dialogSubTitle {
}
label.inputLabel {
- font-family: 'Inter';
+ font-family: 'Geist';
color: @color-dark;
font-size: 12px;
font-weight: 700;
@@ -188,7 +188,7 @@ label.inputLabel {
}
input.customInputField {
- font-family: 'Inter';
+ font-family: 'Geist';
font-size: 14px;
font-weight: 400;
line-height: 20px;
diff --git a/src/components/banner/index.module.less b/src/components/banner/index.module.less
new file mode 100644
index 000000000..16eaac3ad
--- /dev/null
+++ b/src/components/banner/index.module.less
@@ -0,0 +1,19 @@
+@import (reference) '../../styles/global.module.less';
+
+.bannerContainer {
+ padding: 10px 25px;
+ background-color: #000;
+
+ .bannerText {
+ .paragraph4-regular();
+ text-align: center;
+ color: #fff;
+
+ a {
+ color: @color-blue1;
+ &:hover {
+ text-decoration: underline;
+ }
+ }
+ }
+}
diff --git a/src/components/banner/index.tsx b/src/components/banner/index.tsx
new file mode 100644
index 000000000..0b265cf1f
--- /dev/null
+++ b/src/components/banner/index.tsx
@@ -0,0 +1,19 @@
+import { CLOUD_SIGNUP_LINK } from '@/consts';
+import classes from './index.module.less';
+import { useTranslation, Trans } from 'react-i18next';
+
+export default function CloudBanner() {
+ const { t } = useTranslation('home');
+
+ return (
+
+ );
+}
diff --git a/src/components/card/sizingToolCard/index.module.less b/src/components/card/sizingToolCard/index.module.less
index d72ab2602..36b5d8ce5 100644
--- a/src/components/card/sizingToolCard/index.module.less
+++ b/src/components/card/sizingToolCard/index.module.less
@@ -76,7 +76,7 @@
.key,
.value {
- font-family: Inter;
+ font-family: Geist;
font-weight: 400;
font-size: 14px;
line-height: 1.5em;
diff --git a/src/components/cookieConsent/index.module.less b/src/components/cookieConsent/index.module.less
index 5841577e1..fc8ccec5c 100644
--- a/src/components/cookieConsent/index.module.less
+++ b/src/components/cookieConsent/index.module.less
@@ -28,13 +28,13 @@
.paragraph4();
color: @color-black1;
margin-bottom: 6px;
- font-family: Inter !important;
+ font-family: Geist !important;
}
p {
.paragraph6-regular();
color: @color-black2;
- font-family: Inter !important;
+ font-family: Geist !important;
}
}
.buttonsWrapper {
@@ -52,7 +52,7 @@
margin: 0 !important;
padding: 8px 12px !important;
border-radius: 6px !important;
- font-family: Inter !important;
+ font-family: Geist !important;
&:hover {
opacity: 0.7;
diff --git a/src/components/copyCodeButton/index.module.less b/src/components/copyCodeButton/index.module.less
index b0e7aaa48..84c61bab2 100644
--- a/src/components/copyCodeButton/index.module.less
+++ b/src/components/copyCodeButton/index.module.less
@@ -13,7 +13,7 @@
}
.installPy {
- font-family: RobotoMono;
+ font-family: 'Geist Mono';
font-size: 16px;
font-weight: 400;
line-height: 24px;
diff --git a/src/components/customButton/index.module.less b/src/components/customButton/index.module.less
index 410b294c8..2abe5dd45 100644
--- a/src/components/customButton/index.module.less
+++ b/src/components/customButton/index.module.less
@@ -1,7 +1,7 @@
@import url('@/styles/global.module.less');
.linkButton {
- font-family: 'Inter';
+ font-family: 'Geist Mono';
.resetNativeButton();
.paragraph3();
display: flex;
diff --git a/src/components/customTabs/index.module.less b/src/components/customTabs/index.module.less
index b692121a7..c22e3b20e 100644
--- a/src/components/customTabs/index.module.less
+++ b/src/components/customTabs/index.module.less
@@ -3,7 +3,7 @@
.tabsWrapper {
list-style-type: none;
display: flex;
- font-family: Inter;
+ font-family: Geist;
position: relative;
}
diff --git a/src/components/dialog/Dialog.jsx b/src/components/dialog/Dialog.jsx
index 1c8582d4f..32a8290dc 100644
--- a/src/components/dialog/Dialog.jsx
+++ b/src/components/dialog/Dialog.jsx
@@ -11,7 +11,7 @@ export const BootstrapDialogTitle = props => {
const { children, onClose, ...other } = props;
return (
-
+
{children}
{onClose ? (
{
onClose={handleClose}
open={open}
sx={{
- fontFamily: 'Inter',
+ fontFamily: 'Geist',
}}
>
diff --git a/src/components/footer/index.tsx b/src/components/footer/index.tsx
index f906247df..921260101 100644
--- a/src/components/footer/index.tsx
+++ b/src/components/footer/index.tsx
@@ -11,6 +11,7 @@ import {
GITHUB_MILVUS_LINK,
CLOUD_SIGNUP_LINK,
GITHUB_MILVUS_BACKUP_LINK,
+ GITHUB_VTS_LINK,
} from '@/consts/links';
import { RightTopArrowIcon } from '@/components/icons';
import SocialMedias from '../socialMedias';
@@ -50,6 +51,11 @@ const footerJson = [
trans: false,
to: GITHUB_MILVUS_BACKUP_LINK,
},
+ {
+ name: 'Vector Transport Service (VTS)',
+ trans: false,
+ to: GITHUB_VTS_LINK,
+ },
],
},
{
diff --git a/src/components/header/DescktopHeader.tsx b/src/components/header/DescktopHeader.tsx
index b2e6795ab..24421c051 100644
--- a/src/components/header/DescktopHeader.tsx
+++ b/src/components/header/DescktopHeader.tsx
@@ -70,7 +70,7 @@ export default function DesktopHeader(props: Props) {
label: t('tools.vts'),
link: GITHUB_VTS_LINK,
rel: 'noopener noreferrer',
- }
+ },
],
},
{ label: t('blog'), link: '/blog' },
@@ -88,13 +88,13 @@ export default function DesktopHeader(props: Props) {
-
+
{menuConfigs.map(config => {
if (config.list) {
return (
-
-
);
diff --git a/src/components/subscribe/index.tsx b/src/components/subscribe/index.tsx
index 77bd3bed3..24d506e9a 100644
--- a/src/components/subscribe/index.tsx
+++ b/src/components/subscribe/index.tsx
@@ -4,6 +4,7 @@ import classes from './index.module.less';
import CustomInput from '../customInput/customInput';
import CustomButton from '../customButton';
import { useTranslation } from 'react-i18next';
+import clsx from 'clsx';
const UNIQUE_EMAIL_ID = 'UNIQUE_EMAIL_ID';
const REGEX =
@@ -16,11 +17,25 @@ enum SubscribeEnum {
FAIL,
}
-const SubscribeNewsletter = (props: {
+interface Props {
className?: string;
showAddress?: boolean;
-}) => {
- const { className: classNameProp = '', showAddress = false } = props;
+ withoutTitle?: boolean;
+ classes?: {
+ input?: string;
+ inputContainer?: string;
+ button?: string;
+ errorMessage?: string;
+ };
+}
+
+const SubscribeNewsletter: React.FC = props => {
+ const {
+ className: classNameProp = '',
+ showAddress = false,
+ withoutTitle = false,
+ classes: customClasses = {},
+ } = props;
const { t } = useTranslation(['common', 'home']);
const [value, setValue] = useState('');
const [subscribeStatus, setSubscribeStatus] = useState(
@@ -63,29 +78,44 @@ const SubscribeNewsletter = (props: {
setErrMsg('');
};
- return (
-
+ const renderTitle = () => {
+ if (withoutTitle) {
+ return null;
+ }
+
+ return (
{t('home:subscribeSection.subscribe.title')}
+ );
+ };
+
+ return (
+
+ {renderTitle()}
-
{errMsg}
+
+ {errMsg}
+
{btnTextMap[subscribeStatus]}
diff --git a/src/components/treeView/ExpansionTreeView.module.less b/src/components/treeView/ExpansionTreeView.module.less
index 3006f3f87..10cebef1b 100644
--- a/src/components/treeView/ExpansionTreeView.module.less
+++ b/src/components/treeView/ExpansionTreeView.module.less
@@ -28,7 +28,7 @@
width: 100%;
height: 100%;
color: @color-grey-01;
- font-family: Inter;
+ font-family: Geist;
span {
font-size: inherit;
diff --git a/src/components/ui/button.tsx b/src/components/ui/button.tsx
index a81163cad..cd31199d3 100644
--- a/src/components/ui/button.tsx
+++ b/src/components/ui/button.tsx
@@ -5,7 +5,7 @@ import { cva, type VariantProps } from 'class-variance-authority';
import { cn } from '@/utils/merge';
const buttonVariants = cva(
- 'inline-flex items-center justify-center whitespace-nowrap rounded-md text-sm font-medium ring-offset-white transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-slate-950 focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 dark:ring-offset-slate-950 dark:focus-visible:ring-slate-300',
+ 'inline-flex items-center justify-center whitespace-nowrap rounded-md text-sm font-medium ring-offset-white transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-slate-950 focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 dark:ring-offset-slate-950 dark:focus-visible:ring-slate-300 font-mono',
{
variants: {
variant: {
diff --git a/src/hooks/use-inkeep-settings.ts b/src/hooks/use-inkeep-settings.ts
index b5d240078..32a50cd65 100644
--- a/src/hooks/use-inkeep-settings.ts
+++ b/src/hooks/use-inkeep-settings.ts
@@ -24,6 +24,7 @@ export const useInkeepSettings = (): InkeepSharedSettings => {
const modalSettings: InkeepModalSettings = {
// optional settings
+ defaultView: 'AI_CHAT',
};
const searchSettings: InkeepSearchSettings = {
diff --git a/src/i18n/en/blog.json b/src/i18n/en/blog.json
new file mode 100644
index 000000000..94443cb46
--- /dev/null
+++ b/src/i18n/en/blog.json
@@ -0,0 +1,32 @@
+{
+ "trending": "TRENDING",
+ "recent": {
+ "most": "MOST RECENT",
+ "release": "RELEASES & EVENTS"
+ },
+ "subscribe": {
+ "title": "Join <0>30,000+0> VDB engineers",
+ "desc": "Get updates on Milvus releases and tutorials from Zilliz, Milvus' creator and key maintainer."
+ },
+ "filter": {
+ "all": "ALL",
+ "engineering": "Engineering",
+ "announcements": "Announcements",
+ "tutorials": "Tutorials",
+ "usecases": "Use Cases"
+ },
+ "aiService": {
+ "title": "Ask me anything about Milvus!",
+ "desc": "An AI assistant trained on documentation, help articles, and other content."
+ },
+ "zillizAdv": {
+ "title": "Hassle-free and 10x faster than Milvus",
+ "smallTitle": "Zilliz Cloud",
+ "feature1": "Use-case optimized compute for your workload",
+ "feature2": "Enterprise grade security built-in, available across all three clouds",
+ "btn": "Try Fully Managed Milvus Free"
+ },
+ "authors": {
+ "title": "Most Contributing Authors"
+ }
+}
\ No newline at end of file
diff --git a/src/i18n/en/home.json b/src/i18n/en/home.json
index e8a0a9282..5d31300fd 100644
--- a/src/i18n/en/home.json
+++ b/src/i18n/en/home.json
@@ -134,5 +134,6 @@
},
"productionSection": {
"title": "Trusted for production workloads"
- }
+ },
+ "banner": "🚀 Try Zilliz Cloud, the fully managed Milvus, for free—experience 10x faster performance! <0>Try Now>>0>"
}
diff --git a/src/i18n/index.ts b/src/i18n/index.ts
index 1dbd2f366..2a9555d15 100644
--- a/src/i18n/index.ts
+++ b/src/i18n/index.ts
@@ -11,6 +11,7 @@ import sizingToolEn from './en/sizingTool.json';
import useCaseEn from './en/useCase.json';
import communityEn from './en/community.json';
import notFoundEn from './en/404.json';
+import blogEn from './en/blog.json';
import docsCn from './cn/docs.json';
import headerCn from './cn/header.json';
@@ -39,6 +40,7 @@ export const resources = {
demo: demoEn,
community: communityEn,
notFound: notFoundEn,
+ blog: blogEn,
},
cn: {
common: commonCn,
diff --git a/src/pages/_app.tsx b/src/pages/_app.tsx
index 5f2b84cc7..5436e844f 100755
--- a/src/pages/_app.tsx
+++ b/src/pages/_app.tsx
@@ -28,7 +28,7 @@ function MyApp({ Component, pageProps }) {
content="milvus, vector database, milvus docs, milvus blogs"
/>
-
+