This is an automated email from the ASF dual-hosted git repository.
twice pushed a commit to branch unstable
in repository https://gitbox.apache.org/repos/asf/kvrocks-controller.git
The following commit(s) were added to refs/heads/unstable by this push:
new 96eb1f1 feat(webui): redesign the footer element (#287)
96eb1f1 is described below
commit 96eb1f13fa0b809d4e1b362703323bb7b0ee72f1
Author: shubham-j-sde <[email protected]>
AuthorDate: Sat Mar 22 12:40:34 2025 +0530
feat(webui): redesign the footer element (#287)
* redesigning footer element
* adding license
* Update asf_logo.svg
adding license
---
webui/config.ts | 84 +++++++++++++++
webui/public/asf_logo.svg | 228 +++++++++++++++++++++++++++++++++++++++
webui/src/app/layout.tsx | 2 +
webui/src/app/lib/definitions.ts | 43 ++++++++
webui/src/app/page.tsx | 9 --
webui/src/app/ui/footer.tsx | 74 +++++++++++++
6 files changed, 431 insertions(+), 9 deletions(-)
diff --git a/webui/config.ts b/webui/config.ts
new file mode 100644
index 0000000..4cc1ea0
--- /dev/null
+++ b/webui/config.ts
@@ -0,0 +1,84 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import { footerConfigType } from "@/app/lib/definitions";
+
+export const footerConfig: footerConfigType = {
+ links: [
+ {
+ title: 'Docs',
+ items: [
+ {
+ label: 'Getting started',
+ to: '/docs/getting-started',
+ },
+ {
+ label: 'Supported commands',
+ to: '/docs/supported-commands',
+ },
+ {
+ label: 'How to contribute',
+ to: '/community/contributing',
+ }
+ ],
+ },
+ {
+ title: 'Community',
+ items: [
+ {
+ label: 'Zulip',
+ href: 'https://kvrocks.zulipchat.com/',
+ },
+ {
+ label: 'Issue Tracker',
+ href:
'https://github.com/apache/kvrocks-controller/issues',
+ },
+ {
+ label: 'Mailing list',
+ href:
'https://lists.apache.org/[email protected]',
+ },
+ ],
+ },
+ {
+ title: 'Repositories',
+ items: [
+ {
+ label: 'Kvrocks',
+ href: 'https://github.com/apache/kvrocks',
+ },
+ {
+ label: 'Website',
+ href: 'https://github.com/apache/kvrocks-website',
+ },
+ {
+ label: 'Controller',
+ href: 'https://github.com/apache/kvrocks-controller',
+ }
+ ]
+ }
+ ],
+ logo: {
+ height: 128,
+ width: 320,
+ alt: 'Apache logo',
+ src: '/asf_logo.svg',
+ href: 'https://www.apache.org/'
+ },
+ copyright: `The Apache Software Foundation. Apache Kvrocks, Kvrocks, and
its feather logo are trademarks of The Apache Software Foundation. Redis and
its cube logo are registered trademarks of Redis Ltd.`,
+};
\ No newline at end of file
diff --git a/webui/public/asf_logo.svg b/webui/public/asf_logo.svg
new file mode 100644
index 0000000..6dd4d4a
--- /dev/null
+++ b/webui/public/asf_logo.svg
@@ -0,0 +1,228 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+-->
+<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version:
6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_2" xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ viewBox="0 0 7127.6 2890" enable-background="new 0 0 7127.6 2890"
xml:space="preserve">
+<path fill="#6D6E71"
d="M7104.7,847.8c15.3,15.3,22.9,33.7,22.9,55.2c0,21.5-7.6,39.9-22.9,55.4c-15.3,15.4-33.8,23.1-55.6,23.1
+
c-21.8,0-40.2-7.6-55.4-22.9c-15.1-15.3-22.7-33.7-22.7-55.2c0-21.5,7.6-39.9,22.9-55.4c15.3-15.4,33.7-23.1,55.4-23.1
+ C7070.9,824.9,7089.4,832.5,7104.7,847.8z
M7098.1,951.9c13.3-13.6,20-29.8,20-48.7s-6.6-35-19.8-48.5
+
c-13.2-13.4-29.4-20.1-48.6-20.1c-19.2,0-35.4,6.7-48.7,20.2c-13.3,13.5-19.9,29.7-19.9,48.7c0,19,6.6,35.2,19.7,48.6
+ c13.1,13.4,29.3,20.1,48.5,20.1S7084.7,965.4,7098.1,951.9z
M7087.1,888.1c0,14-6.1,22.8-18.4,26.4l22.5,30.5h-18.2l-20.3-28.3
+
h-18.6v28.3h-14.7v-84.6h31.8c12.8,0,22,2.2,27.6,6.6C7084.4,871.4,7087.1,878.4,7087.1,888.1z
M7068.2,900c3-2.4,4.4-6.5,4.4-12
+
c0-5.5-1.5-9.4-4.5-11.6c-3-2.2-8.4-3.2-16-3.2h-18v30.5h17.5C7059.7,903.6,7065.3,902.4,7068.2,900z"/>
+<path fill="#6D6E71"
d="M1803.6,499.8v155.4h-20V499.8h-56.8v-19.2h133.9v19.2H1803.6z"/>
+<path fill="#6D6E71"
d="M2082.2,655.2v-76.9h-105.2v76.9h-20V480.5h20v78.9h105.2v-78.9h20v174.7H2082.2z"/>
+<path fill="#6D6E71"
d="M2241.4,499.8v57.4h88.1v19.2h-88.1v59.8h101.8v19h-121.8V480.5H2340v19.2H2241.4z"/>
+<path fill="#D22128"
d="M1574.5,1852.4l417.3-997.6h80.1l417.3,997.6h-105.4l-129.3-311.9h-448.2l-127.9,311.9H1574.5z
M2032.6,970
+ l-205.1,493.2h404.7L2032.6,970z"/>
+<path fill="#D22128"
d="M2596.9,1852.4V854.8H3010c171.4,0,295.1,158.8,295.1,313.3c0,163-115.2,316.1-286.6,316.1h-324.6v368.1
+ H2596.9z
M2693.9,1397.1h318.9c118,0,193.9-108.2,193.9-229c0-125.1-92.7-226.2-202.3-226.2h-310.5V1397.1z"/>
+<path fill="#D22128"
d="M3250.5,1852.4l417.3-997.6h80.1l417.3,997.6h-105.4l-129.3-311.9h-448.2l-127.9,311.9H3250.5z
M3708.6,970
+ l-205.1,493.2h404.7L3708.6,970z"/>
+<path fill="#D22128"
d="M4637.3,849.1c177,0,306.3,89.9,368.1,217.8l-78.7,47.8c-63.2-132.1-186.9-177-295.1-177
+
c-238.9,0-369.5,213.6-369.5,414.5c0,220.6,161.6,420.1,373.7,420.1c112.4,0,244.5-56.2,307.7-185.5l81.5,42.1
+
c-64.6,148.9-241.7,231.8-394.8,231.8c-274,0-466.5-261.3-466.5-514.2C4163.8,1106.3,4336.6,849.1,4637.3,849.1z"/>
+<path fill="#D22128"
d="M5949.1,854.8v997.6h-98.4v-466.5h-591.5v466.5h-96.9V854.8h96.9v444h591.5v-444H5949.1z"/>
+<path fill="#D22128"
d="M6844.6,1765.2v87.1h-670.2V854.8H6832v87.1h-560.6v359.7h489v82.9h-489v380.8H6844.6z"/>
+<path fill="#6D6E71"
d="M1667.6,2063.6c11.8,3.5,22.2,8.3,31,14.2l-10.3,22.6c-9-6-18.6-10.4-28.9-13.4c-10.2-2.9-20-4.4-29.2-4.4
+
c-13.6,0-24.5,2.4-32.6,7.3c-8.1,4.9-12.2,11.8-12.2,20.7c0,7.6,2.3,14,6.8,19c4.5,5,10.2,8.9,17,11.7c6.8,2.8,16.1,6,28,9.6
+
c14.4,4.6,26,8.9,34.7,12.9c8.8,4,16.3,9.9,22.5,17.8c6.2,7.8,9.3,18.2,9.3,31c0,11.7-3.2,21.8-9.5,30.6
+
c-6.3,8.7-15.3,15.5-26.8,20.3c-11.6,4.8-24.9,7.2-40,7.2c-15.1,0-29.7-2.9-43.9-8.7c-14.2-5.8-26.4-13.6-36.6-23.4l10.7-21.6
+
c9.6,9.4,20.7,16.7,33.3,21.9c12.6,5.2,24.8,7.8,36.8,7.8c15.3,0,27.3-3,36.1-8.9c8.8-5.9,13.2-13.9,13.2-23.9
+
c0-7.8-2.3-14.3-6.9-19.4c-4.6-5.1-10.3-9-17.1-11.9c-6.8-2.8-16.1-6-28-9.6c-14.2-4.2-25.7-8.3-34.6-12.2
+
c-8.9-3.9-16.4-9.7-22.5-17.5c-6.1-7.7-9.2-17.9-9.2-30.6c0-10.9,3-20.4,9-28.6c6-8.2,14.6-14.6,25.6-19.1
+
c11.1-4.5,23.8-6.8,38.2-6.8C1643.8,2058.3,1655.7,2060.1,1667.6,2063.6z"/>
+<path fill="#6D6E71"
d="M1980.1,2072.8c16.8,9.4,30.2,22.3,40,38.4c9.8,16.2,14.8,33.9,14.8,53.3c0,19.5-4.9,37.4-14.8,53.6
+
c-9.8,16.3-23.2,29.1-40,38.6c-16.8,9.5-35.3,14.3-55.2,14.3c-20.3,0-38.8-4.7-55.7-14.3c-16.8-9.5-30.2-22.4-40-38.6
+
c-9.8-16.3-14.8-34.1-14.8-53.6c0-19.5,4.9-37.3,14.8-53.5c9.8-16.2,23.2-29,40-38.3c16.8-9.4,35.4-14,55.7-14
+ C1944.8,2058.6,1963.2,2063.3,1980.1,2072.8z
M1881.9,2092.7c-13.1,7.4-23.6,17.5-31.4,30.1c-7.8,12.6-11.8,26.5-11.8,41.7
+
c0,15.3,3.9,29.3,11.8,42c7.8,12.7,18.3,22.8,31.4,30.2c13.1,7.4,27.4,11.1,42.9,11.1c15.5,0,29.7-3.7,42.7-11.1
+
c13-7.4,23.3-17.4,31.1-30.2c7.7-12.7,11.6-26.7,11.6-42s-3.9-29.2-11.6-41.8c-7.7-12.6-18.1-22.6-31.1-30
+
c-13-7.4-27.2-11.2-42.6-11.2C1909.4,2081.5,1895.1,2085.2,1881.9,2092.7z"/>
+<path fill="#6D6E71"
d="M2186.5,2082.4v74h98.4v23.2h-98.4v90.2h-24.1v-210.6h133.8v23.2H2186.5z"/>
+<path fill="#6D6E71"
d="M2491.6,2082.4v187.4h-24.1v-187.4h-68.4v-23.2h161.4v23.2H2491.6z"/>
+<path fill="#6D6E71"
d="M2871.8,2269.8l-56.8-177.4l-57.6,177.4h-24.5l-70.5-210.6h25.9l57.9,182.7l57.1-182.4l24.1-0.3l57.7,182.7
+ l57.1-182.7h25l-70.6,210.6H2871.8z"/>
+<path fill="#6D6E71"
d="M3087.3,2216.6l-23.5,53.2h-25.6l94.4-210.6h25l94.1,210.6h-26.1l-23.5-53.2H3087.3z
M3144.5,2086.6
+ l-46.9,106.8h94.4L3144.5,2086.6z"/>
+<path fill="#6D6E71"
d="M3461.1,2202.7c-6,0.4-10.7,0.6-14.1,0.6h-56v66.5H3367v-210.6h80c26.2,0,46.6,6.2,61.2,18.5
+
c14.5,12.3,21.8,29.8,21.8,52.3c0,17.2-4.1,31.7-12.2,43.3c-8.1,11.6-19.8,20-35,25l49.2,71.5h-27.3L3461.1,2202.7z
M3491.3,2167.6
+
c10.3-8.4,15.5-20.8,15.5-37c0-15.9-5.2-27.9-15.5-36c-10.3-8.1-25.1-12.2-44.3-12.2h-56v97.8h56
+ C3466.2,2180.2,3481,2176,3491.3,2167.6z"/>
+<path fill="#6D6E71"
d="M3688.3,2082.4v69.2h106.2v23.2h-106.2v72.1h122.8v22.9h-146.9v-210.6h142.9v23.2H3688.3z"/>
+<path fill="#6D6E71"
d="M4147,2082.4v74h98.4v23.2H4147v90.2h-24.1v-210.6h133.8v23.2H4147z"/>
+<path fill="#6D6E71"
d="M4523.3,2072.8c16.8,9.4,30.2,22.3,40,38.4c9.8,16.2,14.8,33.9,14.8,53.3c0,19.5-4.9,37.4-14.8,53.6
+
c-9.8,16.3-23.2,29.1-40,38.6c-16.8,9.5-35.3,14.3-55.2,14.3c-20.3,0-38.8-4.7-55.7-14.3c-16.8-9.5-30.2-22.4-40-38.6
+
c-9.8-16.3-14.8-34.1-14.8-53.6c0-19.5,4.9-37.3,14.8-53.5c9.8-16.2,23.2-29,40-38.3c16.8-9.4,35.4-14,55.7-14
+ C4488.1,2058.6,4506.5,2063.3,4523.3,2072.8z
M4425.2,2092.7c-13.1,7.4-23.6,17.5-31.4,30.1c-7.8,12.6-11.8,26.5-11.8,41.7
+
c0,15.3,3.9,29.3,11.8,42c7.8,12.7,18.3,22.8,31.4,30.2c13.1,7.4,27.4,11.1,42.9,11.1c15.5,0,29.7-3.7,42.7-11.1
+
c13-7.4,23.3-17.4,31.1-30.2c7.7-12.7,11.6-26.7,11.6-42s-3.9-29.2-11.6-41.8c-7.7-12.6-18.1-22.6-31.1-30
+
c-13-7.4-27.2-11.2-42.6-11.2C4452.6,2081.5,4438.3,2085.2,4425.2,2092.7z"/>
+<path fill="#6D6E71"
d="M4854.7,2247.7c-15.7,15.5-37.3,23.3-64.8,23.3c-27.7,0-49.4-7.8-65.1-23.3c-15.7-15.5-23.6-37-23.6-64.6
+
v-124h24.1v124c0,20.3,5.8,36.1,17.3,47.5c11.6,11.4,27.3,17.1,47.3,17.1c20.1,0,35.8-5.7,47.1-17c11.4-11.3,17-27.2,17-47.7v-124
+ h24.1v124C4878.2,2210.7,4870.4,2232.2,4854.7,2247.7z"/>
+<path fill="#6D6E71"
d="M5169.5,2269.8l-126.3-169.1v169.1h-24.1v-210.6h25l126.3,169.3v-169.3h23.8v210.6H5169.5z"/>
+<path fill="#6D6E71"
d="M5478.4,2073.1c16.4,9.3,29.4,21.9,38.9,37.9c9.6,16,14.3,33.9,14.3,53.5s-4.8,37.6-14.3,53.6
+
c-9.5,16.1-22.6,28.7-39.3,37.9c-16.6,9.2-35.2,13.8-55.5,13.8h-84.3v-210.6h85.2C5443.7,2059.2,5462,2063.8,5478.4,2073.1z
+
M5362.3,2246.9h61.4c15.5,0,29.6-3.5,42.3-10.6c12.7-7.1,22.8-16.9,30.2-29.5c7.4-12.5,11.1-26.5,11.1-42
+
c0-15.5-3.8-29.4-11.3-41.9c-7.5-12.5-17.7-22.3-30.6-29.6c-12.8-7.2-27-10.9-42.6-10.9h-60.5V2246.9z"/>
+<path fill="#6D6E71"
d="M5668.6,2216.6l-23.5,53.2h-25.6l94.4-210.6h25l94.1,210.6H5807l-23.5-53.2H5668.6z
M5725.8,2086.6
+ l-46.9,106.8h94.4L5725.8,2086.6z"/>
+<path fill="#6D6E71"
d="M5991,2082.4v187.4H5967v-187.4h-68.4v-23.2h161.4v23.2H5991z"/>
+<path fill="#6D6E71" d="M6175.9,2269.8v-210.6h24.1v210.6H6175.9z"/>
+<path fill="#6D6E71"
d="M6493.7,2072.8c16.8,9.4,30.2,22.3,40,38.4c9.8,16.2,14.8,33.9,14.8,53.3c0,19.5-4.9,37.4-14.8,53.6
+
c-9.8,16.3-23.2,29.1-40,38.6c-16.8,9.5-35.3,14.3-55.2,14.3c-20.3,0-38.8-4.7-55.7-14.3c-16.8-9.5-30.2-22.4-40-38.6
+
c-9.8-16.3-14.8-34.1-14.8-53.6c0-19.5,4.9-37.3,14.8-53.5c9.8-16.2,23.2-29,40-38.3c16.8-9.4,35.4-14,55.7-14
+ C6458.5,2058.6,6476.9,2063.3,6493.7,2072.8z
M6395.6,2092.7c-13.1,7.4-23.6,17.5-31.4,30.1c-7.8,12.6-11.8,26.5-11.8,41.7
+
c0,15.3,3.9,29.3,11.8,42c7.8,12.7,18.3,22.8,31.4,30.2c13.1,7.4,27.4,11.1,42.9,11.1c15.5,0,29.7-3.7,42.7-11.1
+
c13-7.4,23.3-17.4,31.1-30.2c7.7-12.7,11.6-26.7,11.6-42s-3.9-29.2-11.6-41.8c-7.7-12.6-18.1-22.6-31.1-30
+ c-13-7.4-27.2-11.2-42.6-11.2C6423,2081.5,6408.8,2085.2,6395.6,2092.7z"/>
+<path fill="#6D6E71"
d="M6826.5,2269.8l-126.3-169.1v169.1h-24.1v-210.6h25l126.3,169.3v-169.3h23.8v210.6H6826.5z"/>
+<linearGradient id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="-4516.6152"
y1="-2338.7222" x2="-4108.4111" y2="-1861.3982"
gradientTransform="matrix(0.4226 -0.9063 0.9063 0.4226 5117.8774 -2859.9343)">
+ <stop offset="0" style="stop-color:#F69923"/>
+ <stop offset="0.3123" style="stop-color:#F79A23"/>
+ <stop offset="0.8383" style="stop-color:#E97826"/>
+</linearGradient>
+<path fill="url(#SVGID_1_)"
d="M1230.1,13.7c-45.3,26.8-120.6,102.5-210.5,212.3l82.6,155.9c58-82.9,116.9-157.5,176.3-221.2
+
c4.6-5.1,7-7.5,7-7.5c-2.3,2.5-4.6,5-7,7.5c-19.2,21.2-77.5,89.2-165.5,224.4c84.7-4.2,214.9-21.6,321.1-39.7
+ c31.6-177-31-258-31-258S1323.4-41.4,1230.1,13.7z"/>
+<path fill="none"
d="M1090.2,903.1c0.6-0.1,1.2-0.2,1.8-0.3l-11.9,1.3c-0.7,0.3-1.4,0.7-2.1,1
+ C1082.1,904.4,1086.2,903.7,1090.2,903.1z"/>
+<path fill="none"
d="M1005.9,1182.3c-6.7,1.5-13.7,2.7-20.7,3.7C992.3,1185,999.2,1183.8,1005.9,1182.3z"/>
+<path fill="none"
d="M432.9,1808.8c0.9-2.3,1.8-4.7,2.6-7c18.2-48,36.2-94.7,54-140.1c20-51,39.8-100.4,59.3-148.3
+
c20.6-50.4,40.9-99.2,60.9-146.3c21-49.4,41.7-97,62-142.8c16.5-37.3,32.8-73.4,48.9-108.3c5.4-11.7,10.7-23.2,16-34.6
+
c10.5-22.7,21-44.8,31.3-66.5c9.5-20,19-39.6,28.3-58.8c3.1-6.4,6.2-12.8,9.3-19.1c0.5-1,1-2,1.5-3.1l-10.2,1.1l-8-15.9
+
c-0.8,1.6-1.6,3.1-2.4,4.6c-14.5,28.8-28.9,57.9-43.1,87.2c-8.2,16.9-16.4,34-24.6,51c-22.6,47.4-44.8,95.2-66.6,143.3
+
c-22.1,48.6-43.7,97.5-64.9,146.5c-20.8,48.1-41.3,96.2-61.2,144.2c-20,48-39.5,95.7-58.5,143.2c-19.9,49.5-39.2,98.7-58,147.2
+
c-4.2,10.9-8.5,21.9-12.7,32.8c-15,39.2-29.7,77.8-44,116l12.7,25.1l11.4-1.2c0.4-1.1,0.8-2.3,1.3-3.4
+ C396.7,1905.4,414.9,1856.4,432.9,1808.8z"/>
+<path fill="none"
d="M980,1186.8L980,1186.8c0.1,0,0.1,0,0.1-0.1C980.1,1186.8,980.1,1186.8,980,1186.8z"/>
+<path fill="#BE202E"
d="M952.6,1323c-10.6,1.9-21.4,3.8-32.5,5.7c-0.1,0-0.1,0.1-0.2,0.1c5.6-0.8,11.2-1.7,16.6-2.6
+ C942,1325.2,947.3,1324.1,952.6,1323z"/>
+<path opacity="0.35" fill="#BE202E"
d="M952.6,1323c-10.6,1.9-21.4,3.8-32.5,5.7c-0.1,0-0.1,0.1-0.2,0.1c5.6-0.8,11.2-1.7,16.6-2.6
+ C942,1325.2,947.3,1324.1,952.6,1323z"/>
+<path fill="#BE202E"
d="M980.3,1186.7C980.2,1186.7,980.2,1186.7,980.3,1186.7c-0.1,0.1-0.2,0.1-0.2,0.1c1.8-0.2,3.5-0.5,5.2-0.8
+
c7-1,13.9-2.2,20.7-3.7C997.5,1183.8,989,1185.2,980.3,1186.7L980.3,1186.7L980.3,1186.7z"/>
+<path opacity="0.35" fill="#BE202E"
d="M980.3,1186.7C980.2,1186.7,980.2,1186.7,980.3,1186.7c-0.1,0.1-0.2,0.1-0.2,0.1
+
c1.8-0.2,3.5-0.5,5.2-0.8c7-1,13.9-2.2,20.7-3.7C997.5,1183.8,989,1185.2,980.3,1186.7L980.3,1186.7L980.3,1186.7z"/>
+<linearGradient id="SVGID_2_" gradientUnits="userSpaceOnUse" x1="-7537.7339"
y1="-2391.4075" x2="-4625.4141" y2="-2391.4075"
gradientTransform="matrix(0.4226 -0.9063 0.9063 0.4226 5117.8774 -2859.9343)">
+ <stop offset="0.3233" style="stop-color:#9E2064"/>
+ <stop offset="0.6302" style="stop-color:#C92037"/>
+ <stop offset="0.7514" style="stop-color:#CD2335"/>
+ <stop offset="1" style="stop-color:#E97826"/>
+</linearGradient>
+<path fill="url(#SVGID_2_)"
d="M858.6,784.7c25.1-46.9,50.5-92.8,76.2-137.4c26.7-46.4,53.7-91.3,80.9-134.7
+
c1.6-2.6,3.2-5.2,4.8-7.7c27-42.7,54.2-83.7,81.6-122.9L1019.5,226c-6.2,7.6-12.5,15.3-18.8,23.2c-23.8,29.7-48.6,61.6-73.9,95.5
+
c-28.6,38.2-58,78.9-87.8,121.7c-27.6,39.5-55.5,80.9-83.5,123.7c-23.8,36.5-47.7,74-71.4,112.5c-0.9,1.4-1.8,2.9-2.6,4.3
+ l107.5,212.3C811.8,873.6,835.1,828.7,858.6,784.7z"/>
+<linearGradient id="SVGID_3_" gradientUnits="userSpaceOnUse" x1="-7186.1777"
y1="-2099.3059" x2="-5450.7183" y2="-2099.3059"
gradientTransform="matrix(0.4226 -0.9063 0.9063 0.4226 5117.8774 -2859.9343)">
+ <stop offset="0" style="stop-color:#282662"/>
+ <stop offset="9.548390e-02" style="stop-color:#662E8D"/>
+ <stop offset="0.7882" style="stop-color:#9F2064"/>
+ <stop offset="0.9487" style="stop-color:#CD2032"/>
+</linearGradient>
+<path fill="url(#SVGID_3_)"
d="M369,1981c-14.2,39.1-28.5,78.9-42.9,119.6c-0.2,0.6-0.4,1.2-0.6,1.8c-2,5.7-4.1,11.5-6.1,17.2
+
c-9.7,27.4-18,52.1-37.3,108.2c31.7,14.5,57.1,52.5,81.1,95.6c-2.6-44.7-21-86.6-56.2-119.1c156.1,7,290.6-32.4,360.1-146.6
+
c6.2-10.2,11.9-20.9,17-32.2c-31.6,40.1-70.8,57.1-144.5,53c-0.2,0.1-0.3,0.1-0.5,0.2c0.2-0.1,0.3-0.1,0.5-0.2
+
c108.6-48.6,163.1-95.3,211.2-172.6c11.4-18.3,22.5-38.4,33.8-60.6c-94.9,97.5-205,125.3-320.9,104.2l-86.9,9.5
+ C374.4,1966.3,371.7,1973.6,369,1981z"/>
+<linearGradient id="SVGID_4_" gradientUnits="userSpaceOnUse" x1="-7374.1626"
y1="-2418.5454" x2="-4461.8428" y2="-2418.5454"
gradientTransform="matrix(0.4226 -0.9063 0.9063 0.4226 5117.8774 -2859.9343)">
+ <stop offset="0.3233" style="stop-color:#9E2064"/>
+ <stop offset="0.6302" style="stop-color:#C92037"/>
+ <stop offset="0.7514" style="stop-color:#CD2335"/>
+ <stop offset="1" style="stop-color:#E97826"/>
+</linearGradient>
+<path fill="url(#SVGID_4_)"
d="M409.6,1786.3c18.8-48.5,38.1-97.7,58-147.2c19-47.4,38.5-95.2,58.5-143.2
+
c20-48,40.4-96.1,61.2-144.2c21.2-49,42.9-97.8,64.9-146.5c21.8-48.1,44-95.9,66.6-143.3c8.1-17.1,16.3-34.1,24.6-51
+
c14.2-29.3,28.6-58.4,43.1-87.2c0.8-1.6,1.6-3.1,2.4-4.6L681.4,706.8c-1.8,2.9-3.5,5.8-5.3,8.6c-25.1,40.9-50,82.7-74.4,125.4
+
c-24.7,43.1-49,87.1-72.7,131.7c-20,37.6-39.6,75.6-58.6,113.9c-3.8,7.8-7.6,15.5-11.3,23.2c-23.4,48.2-44.6,94.8-63.7,139.5
+
c-21.7,50.7-40.7,99.2-57.5,145.1c-11,30.2-21,59.4-30.1,87.4c-7.5,24-14.7,47.9-21.5,71.8c-16,56.3-29.9,112.4-41.2,168.3
+
L353,1935.1c14.3-38.1,28.9-76.8,44-116C401.1,1808.2,405.4,1797.3,409.6,1786.3z"/>
+<linearGradient id="SVGID_5_" gradientUnits="userSpaceOnUse" x1="-7161.7642"
y1="-2379.1431" x2="-5631.2524" y2="-2379.1431"
gradientTransform="matrix(0.4226 -0.9063 0.9063 0.4226 5117.8774 -2859.9343)">
+ <stop offset="0" style="stop-color:#282662"/>
+ <stop offset="9.548390e-02" style="stop-color:#662E8D"/>
+ <stop offset="0.7882" style="stop-color:#9F2064"/>
+ <stop offset="0.9487" style="stop-color:#CD2032"/>
+</linearGradient>
+<path fill="url(#SVGID_5_)"
d="M243.5,1729.4c-13.6,68.2-23.2,136.2-28,203.8c-0.2,2.4-0.4,4.7-0.5,7.1
+
c-33.7-54-124-106.8-123.8-106.2c64.6,93.7,113.7,186.7,120.9,278c-34.6,7.1-82-3.2-136.8-23.3c57.1,52.5,100,67,116.7,70.9
+
c-52.5,3.3-107.1,39.3-162.1,80.8c80.5-32.8,145.5-45.8,192.1-35.3C148.1,2414.2,74.1,2645,0,2890c22.7-6.7,36.2-21.9,43.9-42.6
+
c13.2-44.4,100.8-335.6,238-718.2c3.9-10.9,7.8-21.8,11.8-32.9c1.1-3,2.2-6.1,3.3-9.2c14.5-40.1,29.5-81.1,45.1-122.9
+
c3.5-9.5,7.1-19,10.7-28.6c0.1-0.2,0.1-0.4,0.2-0.6l-107.9-213.2C244.6,1724.4,244,1726.9,243.5,1729.4z"/>
+<linearGradient id="SVGID_6_" gradientUnits="userSpaceOnUse" x1="-7374.1626"
y1="-2117.1309" x2="-4461.8428" y2="-2117.1309"
gradientTransform="matrix(0.4226 -0.9063 0.9063 0.4226 5117.8774 -2859.9343)">
+ <stop offset="0.3233" style="stop-color:#9E2064"/>
+ <stop offset="0.6302" style="stop-color:#C92037"/>
+ <stop offset="0.7514" style="stop-color:#CD2335"/>
+ <stop offset="1" style="stop-color:#E97826"/>
+</linearGradient>
+<path fill="url(#SVGID_6_)"
d="M805.6,937c-3.1,6.3-6.2,12.7-9.3,19.1c-9.3,19.2-18.8,38.8-28.3,58.8
+
c-10.3,21.7-20.7,43.9-31.3,66.5c-5.3,11.4-10.6,22.9-16,34.6c-16.1,35-32.4,71.1-48.9,108.3c-20.3,45.8-41,93.4-62,142.8
+
c-20,47.1-40.3,95.9-60.9,146.3c-19.5,47.9-39.3,97.3-59.3,148.3c-17.8,45.4-35.9,92.1-54,140.1c-0.9,2.3-1.8,4.7-2.6,7
+
c-18,47.6-36.2,96.6-54.6,146.8c-0.4,1.1-0.8,2.3-1.3,3.4l86.9-9.5c-1.7-0.3-3.5-0.5-5.2-0.9c103.9-13,242.1-90.6,331.4-186.5
+
c41.1-44.2,78.5-96.3,113-157.3c25.7-45.4,49.8-95.8,72.8-151.5c20.1-48.7,39.4-101.4,58-158.6c-23.9,12.6-51.2,21.8-81.4,28.2
+
c-5.3,1.1-10.7,2.2-16.1,3.1c-5.5,1-11,1.8-16.6,2.6l0,0l0,0c0.1,0,0.1-0.1,0.2-0.1c96.9-37.3,158-109.2,202.4-197.4
+
c-25.5,17.4-66.9,40.1-116.6,51.1c-6.7,1.5-13.7,2.7-20.7,3.7c-1.7,0.3-3.5,0.6-5.2,0.8l0,0l0,0c0.1,0,0.1,0,0.1-0.1
+
c0,0,0.1,0,0.1,0l0,0c33.6-14.1,62-29.8,86.6-48.4c5.3-4,10.4-8.1,15.3-12.3c7.5-6.5,14.7-13.3,21.5-20.5c4.4-4.6,8.6-9.3,12.7-14.2
+
c9.6-11.5,18.7-23.9,27.1-37.3c2.6-4.1,5.1-8.3,7.6-12.6c3.2-6.2,6.3-12.3,9.3-18.3c13.5-27.2,24.4-51.5,33-72.8
+
c4.3-10.6,8.1-20.5,11.3-29.7c1.3-3.7,2.5-7.2,3.7-10.6c3.4-10.2,6.2-19.3,8.4-27.3c3.3-12,5.3-21.5,6.4-28.4l0,0l0,0
+
c-3.3,2.6-7.1,5.2-11.3,7.7c-29.3,17.5-79.5,33.4-119.9,40.8l79.8-8.8l-79.8,8.8c-0.6,0.1-1.2,0.2-1.8,0.3c-4,0.7-8.1,1.3-12.2,2
+ c0.7-0.3,1.4-0.7,2.1-1l-273,29.9C806.6,935,806.1,936,805.6,937z"/>
+<linearGradient id="SVGID_7_" gradientUnits="userSpaceOnUse" x1="-7554.8232"
y1="-2132.0981" x2="-4642.5034" y2="-2132.0981"
gradientTransform="matrix(0.4226 -0.9063 0.9063 0.4226 5117.8774 -2859.9343)">
+ <stop offset="0.3233" style="stop-color:#9E2064"/>
+ <stop offset="0.6302" style="stop-color:#C92037"/>
+ <stop offset="0.7514" style="stop-color:#CD2335"/>
+ <stop offset="1" style="stop-color:#E97826"/>
+</linearGradient>
+<path fill="url(#SVGID_7_)"
d="M1112.9,385.1c-24.3,37.3-50.8,79.6-79.4,127.5c-1.5,2.5-3,5.1-4.5,7.6
+
c-24.6,41.5-50.8,87.1-78.3,137c-23.8,43.1-48.5,89.3-74.3,139c-22.4,43.3-45.6,89.2-69.4,137.8l273-29.9
+
c79.5-36.6,115.1-69.7,149.6-117.6c9.2-13.2,18.4-27,27.5-41.3c28-43.8,55.6-92,80.1-139.9c23.7-46.3,44.7-92.2,60.7-133.5
+
c10.2-26.3,18.4-50.8,24.1-72.3c5-19,8.9-36.9,11.9-54.1C1327.9,363.5,1197.6,380.9,1112.9,385.1z"/>
+<path fill="#BE202E"
d="M936.5,1326.1c-5.5,1-11,1.8-16.6,2.6l0,0C925.5,1328,931,1327.1,936.5,1326.1z"/>
+<path opacity="0.35" fill="#BE202E"
d="M936.5,1326.1c-5.5,1-11,1.8-16.6,2.6l0,0C925.5,1328,931,1327.1,936.5,1326.1z"/>
+<linearGradient id="SVGID_8_" gradientUnits="userSpaceOnUse" x1="-7374.1626"
y1="-2027.484" x2="-4461.8433" y2="-2027.484" gradientTransform="matrix(0.4226
-0.9063 0.9063 0.4226 5117.8774 -2859.9343)">
+ <stop offset="0.3233" style="stop-color:#9E2064"/>
+ <stop offset="0.6302" style="stop-color:#C92037"/>
+ <stop offset="0.7514" style="stop-color:#CD2335"/>
+ <stop offset="1" style="stop-color:#E97826"/>
+</linearGradient>
+<path fill="url(#SVGID_8_)"
d="M936.5,1326.1c-5.5,1-11,1.8-16.6,2.6l0,0C925.5,1328,931,1327.1,936.5,1326.1z"/>
+<path fill="#BE202E"
d="M980,1186.8c1.8-0.2,3.5-0.5,5.2-0.8C983.5,1186.3,981.8,1186.6,980,1186.8L980,1186.8z"/>
+<path opacity="0.35" fill="#BE202E"
d="M980,1186.8c1.8-0.2,3.5-0.5,5.2-0.8C983.5,1186.3,981.8,1186.6,980,1186.8L980,1186.8z"/>
+<linearGradient id="SVGID_9_" gradientUnits="userSpaceOnUse" x1="-7374.1626"
y1="-2037.7417" x2="-4461.8433" y2="-2037.7417"
gradientTransform="matrix(0.4226 -0.9063 0.9063 0.4226 5117.8774 -2859.9343)">
+ <stop offset="0.3233" style="stop-color:#9E2064"/>
+ <stop offset="0.6302" style="stop-color:#C92037"/>
+ <stop offset="0.7514" style="stop-color:#CD2335"/>
+ <stop offset="1" style="stop-color:#E97826"/>
+</linearGradient>
+<path fill="url(#SVGID_9_)"
d="M980,1186.8c1.8-0.2,3.5-0.5,5.2-0.8C983.5,1186.3,981.8,1186.6,980,1186.8L980,1186.8z"/>
+<path fill="#BE202E"
d="M980.2,1186.7C980.2,1186.7,980.2,1186.7,980.2,1186.7L980.2,1186.7L980.2,1186.7L980.2,1186.7
+ C980.2,1186.7,980.2,1186.7,980.2,1186.7z"/>
+<path opacity="0.35" fill="#BE202E"
d="M980.2,1186.7C980.2,1186.7,980.2,1186.7,980.2,1186.7L980.2,1186.7L980.2,1186.7
+ L980.2,1186.7C980.2,1186.7,980.2,1186.7,980.2,1186.7z"/>
+<linearGradient id="SVGID_10_" gradientUnits="userSpaceOnUse" x1="-5738.0635"
y1="-2039.799" x2="-5094.3457" y2="-2039.799" gradientTransform="matrix(0.4226
-0.9063 0.9063 0.4226 5117.8774 -2859.9343)">
+ <stop offset="0.3233" style="stop-color:#9E2064"/>
+ <stop offset="0.6302" style="stop-color:#C92037"/>
+ <stop offset="0.7514" style="stop-color:#CD2335"/>
+ <stop offset="1" style="stop-color:#E97826"/>
+</linearGradient>
+<path fill="url(#SVGID_10_)"
d="M980.2,1186.7C980.2,1186.7,980.2,1186.7,980.2,1186.7L980.2,1186.7L980.2,1186.7L980.2,1186.7
+ C980.2,1186.7,980.2,1186.7,980.2,1186.7z"/>
+</svg>
diff --git a/webui/src/app/layout.tsx b/webui/src/app/layout.tsx
index 20a34d7..3cd3bb5 100644
--- a/webui/src/app/layout.tsx
+++ b/webui/src/app/layout.tsx
@@ -23,6 +23,7 @@ import "./globals.css";
import Banner from "./ui/banner";
import { Container } from "@mui/material";
import { ThemeProvider } from "./theme-provider";
+import Footer from "./ui/footer";
const inter = Inter({ subsets: ["latin"] });
@@ -43,6 +44,7 @@ export default function RootLayout({
<Banner />
<Container sx={{marginTop: '64px', height: 'calc(100vh -
64px)'}} maxWidth={false} disableGutters>
{children}
+ <Footer/>
</Container>
</ThemeProvider>
</body>
diff --git a/webui/src/app/lib/definitions.ts b/webui/src/app/lib/definitions.ts
new file mode 100644
index 0000000..a79b429
--- /dev/null
+++ b/webui/src/app/lib/definitions.ts
@@ -0,0 +1,43 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+export type footerColumnItem = {
+ label: string;
+ to?: string;
+ href?: string;
+}
+
+export type footerColumn = {
+ title: string;
+ items: footerColumnItem[];
+}
+
+export type footerLogo = {
+ height: number;
+ width: number;
+ alt: string;
+ src: string;
+ href: string;
+};
+
+export type footerConfigType = {
+ links: footerColumn[];
+ logo: footerLogo;
+ copyright: string;
+}
\ No newline at end of file
diff --git a/webui/src/app/page.tsx b/webui/src/app/page.tsx
index 9c46b5e..44a96c9 100644
--- a/webui/src/app/page.tsx
+++ b/webui/src/app/page.tsx
@@ -188,15 +188,6 @@ export default function Home() {
</Grid>
</div>
</section>
-
- {/* Footer */}
- <footer className="py-6 px-6 border-t border-light-border
dark:border-dark-border">
- <div className="max-w-6xl mx-auto text-center">
- <Typography variant="body2" className="text-gray-500
dark:text-gray-400">
- Copyright © {currentYear} The Apache Software
Foundation. Apache Kvrocks, Kvrocks, and its feather logo are trademarks of The
Apache Software Foundation. Redis and its cube logo are registered trademarks
of Redis Ltd. Apache Kvrocks Controller is released under Apache License,
Version 2.0.
- </Typography>
- </div>
- </footer>
</div>
);
}
\ No newline at end of file
diff --git a/webui/src/app/ui/footer.tsx b/webui/src/app/ui/footer.tsx
new file mode 100644
index 0000000..34ea7d2
--- /dev/null
+++ b/webui/src/app/ui/footer.tsx
@@ -0,0 +1,74 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import Image from "next/image";
+import Link from "next/link";
+import LaunchIcon from '@mui/icons-material/Launch';
+import { footerConfig } from "../../../config";
+import { footerColumn, footerColumnItem, footerLogo } from
"../lib/definitions";
+
+export default function Footer(){
+ return (
+ <footer className="bg-[#303846] text-[#ebedf0] py-2 w-full box-border
lg:px-8 py-8">
+ <div className="flex flex-col px-4">
+ <div className="grid grid-cols-3 gap-2 justify-items-start">
+ {footerConfig.links.map(column => <Column
key={column.title} column={column}/>)}
+ <div className="col-span-full mt-px flex flex-col
items-center text-center w-full">
+ <Logo logo={footerConfig.logo}/>
+ <Copyright copyright={footerConfig.copyright}/>
+ </div>
+ </div>
+ </div>
+ </footer>
+ );
+}
+
+const Column = ({column }: {column : footerColumn}) =>
+ <div className="flex flex-col w-full items-start px-4">
+ <span className="mb-1 font-bold min-h-10">{column.title}</span>
+ {column.items.map(item => <LinkItem key={item.label} item={item} />)}
+ </div>
+
+const LinkItem = ({item} : { item: footerColumnItem}) =>
+ <div className="flex flex-col min-h-8 font-(serif:Avenir-Medium)
font-light">
+ <Link href={item.href || item.to || '/'} target={item.href &&
"_blank"}>
+ <div className="inline-flex hover:underline hover:text-sky-700">
+ {item.label}
+ <span>{item.href && <LaunchIcon className="mx-px
size-4"/>}</span>
+ </div>
+ </Link>
+ </div>
+
+const Copyright = ({copyright} : {copyright: string}) =>
+ <div className="text-center flex items-center border-t border-[#ccc]
min-h-16 w-full leading-[20px] font-(serif:Avenir-Medium) text-sm text-[#999]">
+ <span>{`Copyright © ${new Date().getFullYear()} ${copyright}`}</span>
+ </div>
+
+const Logo = ({logo} : { logo: footerLogo}) =>
+ <div className="mb-2 box-border w-full flex place-content-center">
+ <Link href={logo.href} className="opacity-50 hover:opacity-100
transition-opacity">
+ <Image
+ src={logo.src}
+ height={logo.height}
+ width={logo.width}
+ alt={logo.alt}
+ className="mt-4"
+ />
+ </Link>
+ </div>