feat(client): add Card header/footer, DescriptionList, and portal ContextMenu

- add Card header prop (primary/secondary variants) and footer prop (sticks to bottom)
- add Breadcrumbs to all 5 pages; remove duplicate h1 headings
- add pageToolbar layout for breadcrumbs + danger button aligned right
- add DescriptionList component replacing raw dl/dt/dd markup; supports truncate+tooltip
- rewrite ContextMenu to render dropdown via React portal to avoid clip/overflow issues
- update EnvironmentCard to use Card header (primary), footer (Timestamp), and truncated DescriptionList
- fix cog button contrast, square sizing, and right-edge alignment on colored header
- add border to Timestamp pill for dark-mode visibility
- add id badge pill styling to environment card header
This commit is contained in:
2026-04-09 14:29:16 +03:00
parent 35997f8bcb
commit 89016b01d2
13 changed files with 359 additions and 97 deletions
@@ -18,6 +18,7 @@ const meta: Meta<typeof Card> = {
],
argTypes: {
padding: { control: 'select', options: ['sm', 'md', 'lg'] },
headerVariant: { control: 'select', options: ['primary', 'secondary'] },
},
};
export default meta;
@@ -27,6 +28,31 @@ export const Default: Story = {
args: { children: 'Card content goes here.', padding: 'md' },
};
export const WithPrimaryHeader: Story = {
args: {
header: 'Section Title',
headerVariant: 'primary',
children: 'Card content with a primary header.',
},
};
export const WithSecondaryHeader: Story = {
args: {
header: 'Section Title',
headerVariant: 'secondary',
children: 'Card content with a secondary header.',
},
};
export const WithFooter: Story = {
args: {
header: 'My Card',
headerVariant: 'primary',
children: 'Card body content.',
footer: 'Last updated 2 minutes ago',
},
};
export const ScenarioCard: Story = {
render: () => (
<Card>