Merge branch 'master' into bui-dialog-component

This commit is contained in:
Charles de Dreuille
2025-10-10 10:47:25 +01:00
230 changed files with 25789 additions and 22300 deletions
File diff suppressed because one or more lines are too long
+5
View File
@@ -85,6 +85,11 @@ building it incrementally with not conflict with the existing theming system.
description="A search field component to help you search for items."
href="/components/search-field"
/>
<ComponentCard
title="PasswordField"
description="A password field component to help you input passwords."
href="/components/password-field"
/>
<ComponentCard
title="Select"
description="A select component to help you select items."
+2 -2
View File
@@ -226,7 +226,7 @@ color of your app.
### Foreground colors
Foreground colours are meant to work in pair with a background colours. Typeically this would work
Foreground colours are meant to work in pair with a background colours. Typically this would work
for icons, texts, shapes, ... Use a matching name to know what foreground color to use. These colors
are prefixed with `fg` to make it easier to identify.
@@ -446,7 +446,7 @@ monospace font that we use for code blocks and tables.
</Table.Row>
<Table.Row>
<Table.Cell>
<Chip head>--bui-font-mono</Chip>
<Chip head>--bui-font-monospace</Chip>
</Table.Cell>
<Table.Cell>The monospace font for the theme.</Table.Cell>
</Table.Row>
@@ -70,6 +70,16 @@ export const menuPropDefs: Record<string, PropDef> = {
type: 'enum',
values: placementValues,
},
virtualized: {
type: 'boolean',
default: 'false',
},
maxWidth: {
type: 'number',
},
maxHeight: {
type: 'number',
},
...classNamePropDefs,
...stylePropDefs,
};
@@ -95,6 +105,16 @@ export const menuListBoxPropDefs: Record<string, PropDef> = {
type: 'enum',
values: placementValues,
},
virtualized: {
type: 'boolean',
default: 'false',
},
maxWidth: {
type: 'number',
},
maxHeight: {
type: 'number',
},
...classNamePropDefs,
...stylePropDefs,
};
@@ -104,6 +124,16 @@ export const menuAutocompletePropDefs: Record<string, PropDef> = {
type: 'enum',
values: placementValues,
},
virtualized: {
type: 'boolean',
default: 'false',
},
maxWidth: {
type: 'number',
},
maxHeight: {
type: 'number',
},
...classNamePropDefs,
...stylePropDefs,
};
@@ -113,6 +143,16 @@ export const menuAutocompleteListboxPropDefs: Record<string, PropDef> = {
type: 'enum',
values: placementValues,
},
virtualized: {
type: 'boolean',
default: 'false',
},
maxWidth: {
type: 'number',
},
maxHeight: {
type: 'number',
},
...classNamePropDefs,
...stylePropDefs,
};
@@ -0,0 +1,64 @@
import { PropsTable } from '@/components/PropsTable';
import { Snippet } from '@/components/Snippet';
import { PasswordFieldSnippet } from '@/snippets/stories-snippets';
import {
inputPropDefs,
passwordFieldUsageSnippet,
passwordFieldDefaultSnippet,
passwordFieldSizesSnippet,
passwordFieldDescriptionSnippet,
} from './password-field.props';
import { PageTitle } from '@/components/PageTitle';
import { Theming } from '@/components/Theming';
import { ChangelogComponent } from '@/components/ChangelogComponent';
import { CodeBlock } from '@/components/CodeBlock';
<PageTitle
title="PasswordField"
description="A password field component for your forms."
/>
<Snippet
align="center"
py={4}
preview={<PasswordFieldSnippet story="WithLabel" />}
code={passwordFieldDefaultSnippet}
/>
## Usage
<CodeBlock code={passwordFieldUsageSnippet} />
## API reference
<PropsTable data={inputPropDefs} />
## Examples
### Sizes
We support two different sizes: `small`, `medium`.
<Snippet
align="center"
py={4}
open
preview={<PasswordFieldSnippet story="Sizes" />}
code={passwordFieldSizesSnippet}
/>
### With description
Here's a simple PasswordField with a description.
<Snippet
align="center"
py={4}
open
preview={<PasswordFieldSnippet story="WithDescription" />}
code={passwordFieldDescriptionSnippet}
/>
<Theming component="PasswordField" />
<ChangelogComponent component="password-field" />
@@ -0,0 +1,43 @@
import {
classNamePropDefs,
stylePropDefs,
type PropDef,
} from '@/utils/propDefs';
export const inputPropDefs: Record<string, PropDef> = {
size: {
type: 'enum',
values: ['small', 'medium'],
default: 'small',
responsive: true,
},
label: {
type: 'string',
},
icon: {
type: 'enum',
values: ['ReactNode'],
},
description: {
type: 'string',
},
name: {
type: 'string',
required: true,
},
...classNamePropDefs,
...stylePropDefs,
};
export const passwordFieldUsageSnippet = `import { PasswordField } from '@backstage/ui';
<PasswordField />`;
export const passwordFieldDefaultSnippet = `<PasswordField label="Label" placeholder="Enter a secret" />`;
export const passwordFieldSizesSnippet = `<Flex direction="row" gap="4">
<PasswordField size="small" placeholder="Small" icon={<Icon name="sparkling" />} />
<PasswordField size="medium" placeholder="Medium" icon={<Icon name="sparkling" />} />
</Flex>`;
export const passwordFieldDescriptionSnippet = `<PasswordField label="Label" description="Description" placeholder="Enter a secret" />`;
@@ -29,6 +29,7 @@ import * as HeaderStories from '../../../packages/ui/src/components/Header/Heade
import * as HeaderPageStories from '../../../packages/ui/src/components/HeaderPage/HeaderPage.stories';
import * as TableStories from '../../../packages/ui/src/components/Table/Table.stories';
import * as TagGroupStories from '../../../packages/ui/src/components/TagGroup/TagGroup.stories';
import * as PasswordFieldStories from '../../../packages/ui/src/components/PasswordField/PasswordField.stories';
// Helper function to create snippet components
// eslint-disable-next-line @typescript-eslint/no-explicit-any
@@ -54,6 +55,8 @@ export const ContainerSnippet = createSnippetComponent(ContainerStories);
export const GridSnippet = createSnippetComponent(GridStories);
export const IconSnippet = createSnippetComponent(IconStories);
export const TextFieldSnippet = createSnippetComponent(TextFieldStories);
export const PasswordFieldSnippet =
createSnippetComponent(PasswordFieldStories);
export const TextSnippet = createSnippetComponent(TextStories);
export const FlexSnippet = createSnippetComponent(FlexStories);
export const SelectSnippet = createSnippetComponent(SelectStories);
+2 -1
View File
@@ -25,7 +25,8 @@ export type Component =
| 'radio-group'
| 'card'
| 'skeleton'
| 'header';
| 'header'
| 'passwordfield';
export type Version = `${number}.${number}.${number}`;
+5
View File
@@ -131,6 +131,11 @@ export const components: Page[] = [
slug: 'menu',
status: 'alpha',
},
{
title: 'PasswordField',
slug: 'password-field',
status: 'alpha',
},
{
title: 'RadioGroup',
slug: 'radio-group',