This is an automated email from the ASF dual-hosted git repository.

pierrejeambrun pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/airflow.git


The following commit(s) were added to refs/heads/main by this push:
     new 6e8eb4ef9e3 Add Apache Airflow trademark in the nav footer (#63188)
6e8eb4ef9e3 is described below

commit 6e8eb4ef9e33ce9b916aadad712433e9d4a372d7
Author: Pierre Jeambrun <[email protected]>
AuthorDate: Wed Mar 11 10:31:22 2026 +0100

    Add Apache Airflow trademark in the nav footer (#63188)
    
    * Add Apache Airflow trademark in the nav footer
    
    * Remove mention if logo is not replaced
---
 airflow-core/src/airflow/ui/src/layouts/Nav/Nav.tsx | 15 +++++++++++++--
 1 file changed, 13 insertions(+), 2 deletions(-)

diff --git a/airflow-core/src/airflow/ui/src/layouts/Nav/Nav.tsx 
b/airflow-core/src/airflow/ui/src/layouts/Nav/Nav.tsx
index a408f8589c9..3253f2209ca 100644
--- a/airflow-core/src/airflow/ui/src/layouts/Nav/Nav.tsx
+++ b/airflow-core/src/airflow/ui/src/layouts/Nav/Nav.tsx
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-import { Box, Flex, VStack, useDisclosure } from "@chakra-ui/react";
+import { Box, Flex, Text, VStack, useDisclosure } from "@chakra-ui/react";
 import { useTranslation } from "react-i18next";
 import { FiDatabase, FiHome, FiClock } from "react-icons/fi";
 import { Link } from "react-router-dom";
@@ -30,6 +30,7 @@ import type { ExternalViewResponse } from 
"openapi/requests/types.gen";
 import { DagIcon } from "src/assets/DagIcon";
 import { Logo } from "src/components/Logo";
 import { useTimezone } from "src/context/timezone";
+import { useConfig } from "src/queries/useConfig";
 import { getTimezoneOffsetString, getTimezoneTooltipLabel } from 
"src/utils/datetimeUtils";
 import type { NavItemResponse } from "src/utils/types";
 
@@ -100,6 +101,8 @@ export const Nav = () => {
   const { selectedTimezone } = useTimezone();
   const offset = getTimezoneOffsetString(selectedTimezone);
   const tooltipLabel = getTimezoneTooltipLabel(selectedTimezone);
+  const theme = useConfig("theme") as unknown as { icon?: string; 
icon_dark_mode?: string } | undefined;
+  const hasCustomLogo = Boolean(theme?.icon) || Boolean(theme?.icon_dark_mode);
 
   // Get both external views and react apps with nav destination
   const navItems: Array<NavItemResponse> =
@@ -194,7 +197,7 @@ export const Nav = () => {
         <SecurityButton />
         <PluginMenus navItems={navItemsWithLegacy} />
       </Flex>
-      <Flex flexDir="column" gap={1}>
+      <Flex alignItems="center" flexDir="column" gap={1}>
         <DocsButton
           externalViews={docsItems}
           showAPI={authLinks?.authorized_menu_items.includes("Docs")}
@@ -206,6 +209,14 @@ export const Nav = () => {
           </Box>
         </Tooltip>
         <UserSettingsButton externalViews={userItems} />
+        {hasCustomLogo ? (
+          <Text asChild color="fg.muted" fontSize="2xs" lineHeight="1" pb={2} 
textAlign="center">
+            {/* eslint-disable-next-line i18next/no-literal-string -- 
Trademark must not be translated */}
+            <a href="https://airflow.apache.org/"; rel="noopener noreferrer" 
target="_blank">
+              Apache Airflow®
+            </a>
+          </Text>
+        ) : undefined}
       </Flex>
       <TimezoneModal isOpen={isOpenTimezone} onClose={onCloseTimezone} />
     </VStack>

Reply via email to