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>