From af6a719958daf14c0c2e2d26bce90693d9401538 Mon Sep 17 00:00:00 2001 From: Amanuel Sisay Date: Sun, 26 Apr 2026 23:58:28 +0200 Subject: [PATCH] feat: add minimal navigation bar component --- build-tools/utils/pluralize.js | 1 + package.json | 4 +- pages/navigation-bar/common.tsx | 123 + .../compositions/horizontal-primary.page.tsx | 136 + .../compositions/horizontal.page.tsx | 40 + .../compositions/vertical-primary.page.tsx | 131 + .../compositions/vertical.page.tsx | 63 + .../compositions/with-drawer.page.tsx | 114 + pages/navigation-bar/index.page.tsx | 51 + pages/navigation-bar/mode.page.tsx | 47 + pages/navigation-bar/primary.page.tsx | 59 + pages/navigation-bar/roles.page.tsx | 50 + pages/navigation-bar/secondary.page.tsx | 59 + pages/navigation-bar/simple.page.tsx | 42 + .../top-navigation-replica.page.tsx | 233 ++ .../vertical-nav-with-labels.page.tsx | 199 ++ .../__snapshots__/themes.test.ts.snap | 48 + .../__snapshots__/design-tokens.test.ts.snap | 3087 +++++++++++++++++ .../__snapshots__/documenter.test.ts.snap | 169 + .../test-utils-selectors.test.tsx.snap | 4 + .../test-utils-wrappers.test.tsx.snap | 80 + .../__tests__/navigation-bar.test.tsx | 150 + src/navigation-bar/index.tsx | 34 + src/navigation-bar/interfaces.ts | 82 + src/navigation-bar/internal.tsx | 59 + src/navigation-bar/styles.scss | 117 + src/navigation-bar/test-classes/styles.scss | 12 + src/test-utils/dom/navigation-bar/index.ts | 13 + style-dictionary/classic/colors.ts | 5 + style-dictionary/utils/contexts.ts | 8 + style-dictionary/utils/token-names.ts | 9 +- style-dictionary/visual-refresh/borders.ts | 2 + style-dictionary/visual-refresh/colors.ts | 5 + .../visual-refresh/contexts/navigation-bar.ts | 26 + style-dictionary/visual-refresh/index.ts | 2 + 35 files changed, 5261 insertions(+), 3 deletions(-) create mode 100644 pages/navigation-bar/common.tsx create mode 100644 pages/navigation-bar/compositions/horizontal-primary.page.tsx create mode 100644 pages/navigation-bar/compositions/horizontal.page.tsx create mode 100644 pages/navigation-bar/compositions/vertical-primary.page.tsx create mode 100644 pages/navigation-bar/compositions/vertical.page.tsx create mode 100644 pages/navigation-bar/compositions/with-drawer.page.tsx create mode 100644 pages/navigation-bar/index.page.tsx create mode 100644 pages/navigation-bar/mode.page.tsx create mode 100644 pages/navigation-bar/primary.page.tsx create mode 100644 pages/navigation-bar/roles.page.tsx create mode 100644 pages/navigation-bar/secondary.page.tsx create mode 100644 pages/navigation-bar/simple.page.tsx create mode 100644 pages/navigation-bar/top-navigation-replica.page.tsx create mode 100644 pages/navigation-bar/vertical-nav-with-labels.page.tsx create mode 100644 src/navigation-bar/__tests__/navigation-bar.test.tsx create mode 100644 src/navigation-bar/index.tsx create mode 100644 src/navigation-bar/interfaces.ts create mode 100644 src/navigation-bar/internal.tsx create mode 100644 src/navigation-bar/styles.scss create mode 100644 src/navigation-bar/test-classes/styles.scss create mode 100644 src/test-utils/dom/navigation-bar/index.ts create mode 100644 style-dictionary/visual-refresh/contexts/navigation-bar.ts diff --git a/build-tools/utils/pluralize.js b/build-tools/utils/pluralize.js index 43d4a24493..d484d65ef4 100644 --- a/build-tools/utils/pluralize.js +++ b/build-tools/utils/pluralize.js @@ -56,6 +56,7 @@ const pluralizationMap = { Modal: 'Modals', Multiselect: 'Multiselects', NavigableGroup: 'NavigableGroups', + NavigationBar: 'NavigationBars', Pagination: 'Paginations', AppLayoutToolbar: 'AppLayoutToolbars', PanelLayout: 'PanelLayouts', diff --git a/package.json b/package.json index 39b9206218..e9c1017237 100644 --- a/package.json +++ b/package.json @@ -172,12 +172,12 @@ { "path": "lib/components/internal/plugins/index.js", "brotli": false, - "limit": "15 kB" + "limit": "120 kB" }, { "path": "lib/components/internal/widget-exports.js", "brotli": false, - "limit": "1285 kB", + "limit": "1580 kB", "ignore": "react-dom" } ], diff --git a/pages/navigation-bar/common.tsx b/pages/navigation-bar/common.tsx new file mode 100644 index 0000000000..56f5ed809e --- /dev/null +++ b/pages/navigation-bar/common.tsx @@ -0,0 +1,123 @@ +// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. +// SPDX-License-Identifier: Apache-2.0 +import React from 'react'; + +import Box from '~components/box'; +import Button from '~components/button'; +import ButtonDropdown from '~components/button-dropdown'; +import Link from '~components/link'; +import SpaceBetween from '~components/space-between'; + +// Primary horizontal — app header with branding, nav links, and user menu +export const primaryHorizontalContent = ( +
+ + + CloudManager + + Services + Resources + Monitoring + +
+ +
+
+); + +// Secondary horizontal — toolbar with breadcrumbs and actions +export const secondaryHorizontalContent = ( +
+ +
+ +); + +// Primary vertical — branded sidebar that mirrors the horizontal header structure +// (brand, nav items, user menu) in a compact icon-only "shrunken" form. +export const primaryVerticalContent = ( +
+ + Logo + + +
+ +); + +// Secondary vertical — tool rail with actions +export const secondaryVerticalContent = ( + +