Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
29 commits
Select commit Hold shift + click to select a range
248ebe8
Initial commit
SeamusLeonardHPE Dec 10, 2025
71239ae
Removed unused partial
SeamusLeonardHPE Dec 12, 2025
6b21bc2
Removed unnecessary imports
SeamusLeonardHPE Dec 12, 2025
1f1e27e
Merge branch 'master' of github.com:grommet/hpe-design-system into do…
britt6612 Dec 12, 2025
746de12
add code changes
britt6612 Dec 12, 2025
19d227c
Updates from review
SeamusLeonardHPE Dec 17, 2025
713bbfd
Changed example border to weak
SeamusLeonardHPE Dec 17, 2025
3c65231
Modifed based on PR feedback ascending navigation example
SeamusLeonardHPE Jan 28, 2026
8c3dd11
Modifed based on PR feedback fix
SeamusLeonardHPE Jan 28, 2026
8336d31
Remove unnecessary fragment from HomeContent
SeamusLeonardHPE Jan 28, 2026
70c3ae0
Updated example content
SeamusLeonardHPE Feb 3, 2026
6c35542
Removed unused icon cause build fail
SeamusLeonardHPE Feb 3, 2026
dbcfdec
requested edits to example content
SeamusLeonardHPE Feb 5, 2026
bfc437e
fixed build fail
SeamusLeonardHPE Feb 5, 2026
4e6f7c8
Added code example in accordian - fixed padding issue
SeamusLeonardHPE Feb 5, 2026
37de7d3
Fixed build error
SeamusLeonardHPE Feb 5, 2026
1f32531
Content update
SeamusLeonardHPE Feb 5, 2026
160cb18
Content update from @julauxen
SeamusLeonardHPE Feb 5, 2026
eac9a19
Content update from @julauxen
SeamusLeonardHPE Feb 5, 2026
89af502
Merge branch 'master' of github.com:grommet/hpe-design-system into do…
britt6612 Feb 9, 2026
043c179
Merge branch 'master' into docs-ascending-navigation-update
britt6612 Feb 9, 2026
a6ba58c
Merge branch 'docs-ascending-navigation-update' of github.com:grommet…
britt6612 Feb 9, 2026
f83f445
merge with master
britt6612 Feb 11, 2026
f569729
update files
britt6612 Feb 11, 2026
207a0f6
Review feedback
SeamusLeonardHPE Feb 12, 2026
2884f44
Updated avatar props to standarize across other examples
SeamusLeonardHPE Feb 12, 2026
1d55c54
Removed redundant size prop, fixed card padding
SeamusLeonardHPE Feb 12, 2026
9621ba1
remove box
britt6612 Feb 12, 2026
92c2cc9
Apply suggestion from @britt6612
britt6612 Feb 12, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions apps/docs/src/data/structures/templates/templates.js
Original file line number Diff line number Diff line change
Expand Up @@ -15,9 +15,9 @@ export const templates = [
name: 'Ascending navigation',
available: true,
cardOrder: 101,
description: `The Ascending Button for Navigation allows
the user to navigate to a parent page from a child page
by moving upward in the application or website hierarchy.`,
description: `Ascending navigation enables users
to move up one level in an application’s hierarchy,
from a child page back to its parent.`,
preview: {
image: {
src: {
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
/* eslint-disable react/prop-types */
import React from 'react';
import { Anchor, Button, PageHeader } from 'grommet';
import { Left } from '@hpe-design/icons-grommet';

export const AscendingNavigationCodeExample = () => {
return (
<PageHeader
title="Child page title"
subtitle="Page subtitle goes here. It can be a little bit longer to
provide more context about the page."
size="large"
parent={
<Anchor
label="Home"
icon={<Left />}
a11yTitle="Link to the home page"
/>
}
actions={<Button label="Action" primary />}
/>
);
};
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
/* eslint-disable react/prop-types */
import React, { useState } from 'react';
import { Anchor, Box, Button, PageContent, PageHeader } from 'grommet';
import { Left } from '@hpe-design/icons-grommet';
import { HomeContent } from './components/HomeContent';
import { PageOneContent } from './components/PageOneContent';
import { PageTwoContent } from './components/PageTwoContent';
import { sectionConfig } from './data/sections';

export const AscendingNavigationExample = () => {
const [activePage, setActivePage] = useState('pageOne');

const page = sectionConfig[activePage];

const sectionContent = {
home: <HomeContent onNavigate={setActivePage} />,
pageOne: <PageOneContent onNavigate={setActivePage} />,
pageTwo: <PageTwoContent onNavigate={setActivePage} />,
};

return (
<PageContent gap="xsmall" kind="full">
<Box width="xlarge" pad={{ bottom: 'xxlarge' }}>
<PageHeader
title={page.label}
subtitle={page.subtitle}
size="large"
parent={
activePage !== 'home' ? (
<Anchor
label={sectionConfig.home.label}
icon={<Left />}
onClick={() => setActivePage('home')}
/>
) : undefined
}
actions={
activePage !== 'home' && <Button label={page.action} primary />
}
/>
<Box gap="small">{sectionContent[activePage]}</Box>
</Box>
</PageContent>
);
};
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
/* eslint-disable react/prop-types */
import { Grid } from 'grommet';
import { SectionCard } from './SectionCard';
import { sectionConfig } from '../data/sections';

export const HomeContent = ({ onNavigate }) => (
<Grid columns="small" gap="small">
{Object.entries(sectionConfig)
.filter(([key]) => key !== 'home')
.map(([key, config]) => (
<SectionCard
key={key}
section={{ id: key, ...config }}
onClick={onNavigate}
/>
))}
</Grid>
);
Original file line number Diff line number Diff line change
@@ -0,0 +1,92 @@
/* eslint-disable react/prop-types */
import { useState } from 'react';
import { Box, DataTable, Avatar, Text } from 'grommet';

const data = [
{
id: 1,
initials: 'AL',
name: 'Alex Lee',
email: 'alex.lee@example.com',
status: 'Active',
},
{
id: 2,
initials: 'SM',
name: 'Sofia Martinez',
email: 'sofia.martinez@example.com',
status: 'Active',
},
{
id: 3,
initials: 'JR',
name: 'Jordan Roberts',
email: 'jordan.roberts@example.com',
status: 'Pending',
},
{
id: 4,
initials: 'AK',
name: 'Aisha Khan',
email: 'aisha.khan@example.com',
status: 'Inactive',
},
{
id: 5,
initials: 'DL',
name: 'Daniel Lopez',
email: 'daniel.lopez@example.com',
status: 'Active',
},
{
id: 6,
initials: 'NP',
name: 'Nina Patel',
email: 'nina.patel@example.com',
status: 'Active',
},
{
id: 7,
initials: 'MT',
name: 'Marco Tan',
email: 'marco.tan@example.com',
status: 'Pending',
},
];

export const PageOneContent = () => {
const [selected, setSelected] = useState([]);

return (
<DataTable
data={data}
aria-describedby="User management table"
select={selected}
onSelect={setSelected}
columns={[
{
property: 'name',
header: 'User name',
primary: true,
render: datum => (
<Box direction="row" gap="small" align="center">
<Avatar background="decorative-green">
<Text color="text-strong">{datum.initials}</Text>
</Avatar>
<Text>{datum.name}</Text>
</Box>
),
},
{
property: 'email',
header: 'Email',
},
{
property: 'status',
header: 'Status',
render: datum => <Text>{datum.status}</Text>,
},
]}
/>
);
};
Original file line number Diff line number Diff line change
@@ -0,0 +1,108 @@
/* eslint-disable react/prop-types */
import { useState } from 'react';
import { DataTable, Text } from 'grommet';

const data = [
{
id: 'id-1',
displayName: 'Server 1',
serialNumber: '8899569448808967',
model: 'Proliant SY 480 Gen10',
powerState: 'On',
health: { summary: 'OK' },
state: { connected: false },
},
{
id: 'id-2',
displayName: 'Server 2',
serialNumber: '482148808968',
model: 'Proliant SY 990 Gen9',
powerState: 'Off',
health: { summary: 'Warning' },
state: { connected: true },
},
{
id: 'id-3',
displayName: 'Server 3',
serialNumber: '3890108963',
model: 'Proliant SY 990 Gen9',
powerState: 'Off',
health: { summary: 'Warning' },
state: { connected: false },
},
{
id: 'id-4',
displayName: 'Server 4',
serialNumber: '8508964',
model: 'Proliant SY 660 Gen10',
powerState: 'On',
health: { summary: 'OK' },
state: { connected: true },
},
{
id: 'id-5',
displayName: 'Server 5',
serialNumber: '3123i4264',
model: 'Proliant SY 660 Gen10',
powerState: 'On',
health: { summary: 'OK' },
state: { connected: true },
},
{
id: 'id-6',
displayName: '3M442501WV',
serialNumber: '4208964',
model: 'ProLiant DL380 Gen10',
powerState: 'Off',
health: { summary: 'Critical' },
state: { connected: true },
},
{
id: 'id-7',
displayName: 'ZFD3712GP',
serialNumber: 'CCD21712GP',
model: null,
powerState: 'On',
health: { summary: 'OK' },
state: { connected: false },
},
];

export const PageTwoContent = () => {
const [selected, setSelected] = useState([]);

return (
<DataTable
data={data}
aria-describedby="Server data table"
select={selected}
onSelect={setSelected}
columns={[
{
property: 'displayName',
header: 'Name',
primary: true,
render: datum => <Text>{datum.displayName}</Text>,
},
{
property: 'serialNumber',
header: 'Serial Number',
},
{
property: 'model',
header: 'Model',
render: datum => <Text>{datum.model || '—'}</Text>,
},
{
property: 'powerState',
header: 'Power',
},
{
property: 'health',
header: 'Health',
render: datum => <Text>{datum.health?.summary}</Text>,
},
]}
/>
);
};
Loading