@bspk/ui 1.3.6 → 1.3.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/AvatarGroup/AvatarGroup.d.ts +2 -2
- package/dist/components/AvatarGroup/Overflow.d.ts +1 -2
- package/dist/components/BadgeDot/BadgeDot.d.ts +1 -2
- package/dist/components/Breadcrumb/Breadcrumb.d.ts +1 -1
- package/dist/components/Breadcrumb/Breadcrumb.js +1 -1
- package/dist/components/Breadcrumb/Breadcrumb.js.map +1 -1
- package/dist/components/Breadcrumb/{BreadcumbDropdown.d.ts → BreadcrumbDropdown.d.ts} +1 -2
- package/dist/components/Breadcrumb/{BreadcumbDropdown.js → BreadcrumbDropdown.js} +1 -1
- package/dist/components/Breadcrumb/BreadcrumbDropdown.js.map +1 -0
- package/dist/components/Breadcrumb/index.d.ts +1 -0
- package/dist/components/Breadcrumb/index.js +1 -0
- package/dist/components/Breadcrumb/index.js.map +1 -1
- package/dist/components/Calendar/Calendar.d.ts +32 -0
- package/dist/components/Checkbox/CheckboxExample.d.ts +3 -0
- package/dist/components/Checkbox/CheckboxExample.js +8 -0
- package/dist/components/Checkbox/CheckboxExample.js.map +1 -0
- package/dist/components/CheckboxGroup/CheckboxGroup.d.ts +3 -1
- package/dist/components/CheckboxGroup/CheckboxGroup.js +2 -0
- package/dist/components/CheckboxGroup/CheckboxGroup.js.map +1 -1
- package/dist/components/CheckboxGroup/CheckboxGroupExample.js +12 -0
- package/dist/components/CheckboxGroup/CheckboxGroupExample.js.map +1 -1
- package/dist/components/CheckboxGroupField/CheckboxGroupFieldExample.d.ts +4 -0
- package/dist/components/CheckboxGroupField/CheckboxGroupFieldExample.js +15 -0
- package/dist/components/CheckboxGroupField/CheckboxGroupFieldExample.js.map +1 -0
- package/dist/components/Chip/Chip.d.ts +1 -1
- package/dist/components/Field/field.css +2 -0
- package/dist/components/Field/field.css.js +2 -0
- package/dist/components/FormField/FormFieldExample.d.ts +1 -2
- package/dist/components/Input/InputElement.d.ts +1 -2
- package/dist/components/Input/InputExample.d.ts +1 -2
- package/dist/components/Input/InputExample.js +1 -0
- package/dist/components/Input/InputExample.js.map +1 -1
- package/dist/components/InputNumber/InputNumberExample.js +3 -0
- package/dist/components/InputNumber/InputNumberExample.js.map +1 -1
- package/dist/components/InputPhone/InputPhoneExample.js +3 -0
- package/dist/components/InputPhone/InputPhoneExample.js.map +1 -1
- package/dist/components/Modal/Modal.d.ts +0 -2
- package/dist/components/Modal/Modal.js +0 -2
- package/dist/components/Modal/Modal.js.map +1 -1
- package/dist/components/PageControl/PageControl.d.ts +3 -2
- package/dist/components/Pagination/PageInput.d.ts +1 -2
- package/dist/components/Password/PasswordExample.d.ts +3 -0
- package/dist/components/Password/PasswordExample.js +6 -0
- package/dist/components/Password/PasswordExample.js.map +1 -0
- package/dist/components/Portal/Portal.d.ts +1 -5
- package/dist/components/Portal/Portal.js.map +1 -1
- package/dist/components/Radio/RadioExample.js +3 -0
- package/dist/components/Radio/RadioExample.js.map +1 -1
- package/dist/components/Radio/radio.css +2 -1
- package/dist/components/Radio/radio.css.js +2 -1
- package/dist/components/RadioGroup/RadioGroup.d.ts +3 -1
- package/dist/components/RadioGroup/RadioGroup.js +2 -0
- package/dist/components/RadioGroup/RadioGroup.js.map +1 -1
- package/dist/components/RadioGroup/RadioGroupExample.d.ts +2 -2
- package/dist/components/RadioGroup/RadioGroupExample.js +72 -4
- package/dist/components/RadioGroup/RadioGroupExample.js.map +1 -1
- package/dist/components/RadioGroupField/RadioGroupFieldExample.d.ts +4 -0
- package/dist/components/RadioGroupField/RadioGroupFieldExample.js +15 -0
- package/dist/components/RadioGroupField/RadioGroupFieldExample.js.map +1 -0
- package/dist/components/SearchBar/SearchBar.d.ts +2 -2
- package/dist/components/SearchBar/SearchBar.js +10 -12
- package/dist/components/SearchBar/SearchBar.js.map +1 -1
- package/dist/components/SearchBar/SearchBarExample.js +3 -0
- package/dist/components/SearchBar/SearchBarExample.js.map +1 -1
- package/dist/components/Select/SelectExample.js +1 -0
- package/dist/components/Select/SelectExample.js.map +1 -1
- package/dist/components/Slider/SliderIntervalDots.d.ts +1 -2
- package/dist/components/Switch/SwitchExample.d.ts +3 -0
- package/dist/components/Switch/SwitchExample.js +8 -0
- package/dist/components/Switch/SwitchExample.js.map +1 -0
- package/dist/components/Table/index.d.ts +1 -0
- package/dist/components/Table/index.js +1 -0
- package/dist/components/Table/index.js.map +1 -1
- package/dist/components/Textarea/TextareaExample.js +3 -0
- package/dist/components/Textarea/TextareaExample.js.map +1 -1
- package/dist/components/TimePicker/Listbox.d.ts +2 -3
- package/dist/components/TimePicker/Segment.d.ts +1 -2
- package/dist/components/TimePicker/TimePickerExample.js +3 -0
- package/dist/components/TimePicker/TimePickerExample.js.map +1 -1
- package/dist/components/ToggleOption/ToggleOption.d.ts +2 -2
- package/dist/components/ToggleOption/ToggleOption.js +2 -2
- package/dist/components/ToggleOption/ToggleOption.js.map +1 -1
- package/dist/hooks/useArrowNavigation.d.ts +2 -3
- package/dist/hooks/useDebounceCallback.d.ts +1 -2
- package/dist/hooks/useDebounceState.d.ts +0 -1
- package/dist/hooks/useDebounceState.js +0 -1
- package/dist/hooks/useDebounceState.js.map +1 -1
- package/dist/hooks/useOutsideClick.d.ts +4 -5
- package/dist/hooks/useOutsideClick.js +5 -5
- package/dist/hooks/useOutsideClick.js.map +1 -1
- package/dist/hooks/useTimeout.d.ts +1 -2
- package/dist/types/common.d.ts +5 -8
- package/dist/types/common.js.map +1 -1
- package/dist/utils/countryCodes.d.ts +1 -2
- package/dist/utils/createExampleChildElement.d.ts +1 -2
- package/dist/utils/demo.d.ts +1 -2
- package/package.json +1 -1
- package/src/components/AvatarGroup/AvatarGroup.tsx +2 -2
- package/src/components/AvatarGroup/Overflow.tsx +1 -1
- package/src/components/BadgeDot/BadgeDot.tsx +1 -1
- package/src/components/Breadcrumb/Breadcrumb.tsx +1 -1
- package/src/components/Breadcrumb/{BreadcumbDropdown.tsx → BreadcrumbDropdown.tsx} +1 -1
- package/src/components/Breadcrumb/index.tsx +1 -0
- package/src/components/Calendar/Calendar.tsx +3 -3
- package/src/components/Checkbox/CheckboxExample.tsx +9 -0
- package/src/components/CheckboxGroup/CheckboxGroup.tsx +3 -1
- package/src/components/CheckboxGroup/CheckboxGroupExample.tsx +12 -0
- package/src/components/CheckboxGroupField/CheckboxGroupFieldExample.tsx +18 -0
- package/src/components/Chip/Chip.tsx +1 -1
- package/src/components/Field/field.scss +2 -0
- package/src/components/FormField/FormFieldExample.tsx +1 -1
- package/src/components/Input/InputElement.tsx +1 -1
- package/src/components/Input/InputExample.tsx +2 -1
- package/src/components/InputNumber/InputNumberExample.tsx +3 -0
- package/src/components/InputPhone/InputPhoneExample.tsx +3 -0
- package/src/components/Modal/Modal.tsx +0 -2
- package/src/components/PageControl/PageControl.tsx +3 -3
- package/src/components/Pagination/PageInput.tsx +1 -1
- package/src/components/Password/PasswordExample.tsx +8 -0
- package/src/components/Portal/Portal.tsx +1 -5
- package/src/components/Radio/RadioExample.tsx +3 -0
- package/src/components/Radio/radio.scss +2 -1
- package/src/components/RadioGroup/RadioGroup.tsx +3 -1
- package/src/components/RadioGroup/RadioGroupExample.tsx +72 -5
- package/src/components/RadioGroupField/RadioGroupFieldExample.tsx +18 -0
- package/src/components/SearchBar/SearchBar.tsx +14 -12
- package/src/components/SearchBar/SearchBarExample.tsx +3 -0
- package/src/components/Select/SelectExample.tsx +1 -0
- package/src/components/Slider/SliderIntervalDots.tsx +1 -1
- package/src/components/Switch/SwitchExample.tsx +9 -0
- package/src/components/Table/index.tsx +1 -0
- package/src/components/Textarea/TextareaExample.tsx +3 -0
- package/src/components/TimePicker/Listbox.tsx +2 -2
- package/src/components/TimePicker/Segment.tsx +1 -1
- package/src/components/TimePicker/TimePickerExample.tsx +3 -1
- package/src/components/ToggleOption/ToggleOption.tsx +3 -4
- package/src/hooks/useArrowNavigation.ts +2 -2
- package/src/hooks/useDebounceCallback.ts +1 -1
- package/src/hooks/useDebounceState.ts +0 -1
- package/src/hooks/useOutsideClick.ts +4 -8
- package/src/hooks/useTimeout.ts +1 -1
- package/src/types/common.ts +5 -7
- package/src/utils/countryCodes.ts +1 -1
- package/src/utils/createExampleChildElement.tsx +1 -1
- package/src/utils/demo.ts +1 -1
- package/dist/components/Breadcrumb/BreadcumbDropdown.js.map +0 -1
- package/dist/hooks/useModalState.d.ts +0 -22
- package/dist/hooks/useModalState.js +0 -34
- package/dist/hooks/useModalState.js.map +0 -1
- package/src/hooks/useModalState.ts +0 -37
|
@@ -9,7 +9,7 @@ import { handleKeyDown } from '-/utils/handleKeyDown';
|
|
|
9
9
|
import { scrollListItemsStyle } from '-/utils/scrollListItemsStyle';
|
|
10
10
|
import { useIds } from '-/utils/useIds';
|
|
11
11
|
|
|
12
|
-
type AvatarGroupOverflowProps = {
|
|
12
|
+
export type AvatarGroupOverflowProps = {
|
|
13
13
|
/** The number of overflow avatars */
|
|
14
14
|
overflow: number;
|
|
15
15
|
/** The size of the avatar group */
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import './breadcrumb.scss';
|
|
2
2
|
import { SvgChevronRight } from '@bspk/icons/ChevronRight';
|
|
3
|
-
import { BreadcrumbDropdown, BreadcrumbItem } from './
|
|
3
|
+
import { BreadcrumbDropdown, BreadcrumbItem } from './BreadcrumbDropdown';
|
|
4
4
|
import { Link } from '-/components/Link';
|
|
5
5
|
import { Txt } from '-/components/Txt';
|
|
6
6
|
import { useId } from '-/hooks/useId';
|
|
@@ -28,10 +28,10 @@ import { useId } from '-/hooks/useId';
|
|
|
28
28
|
import { getElementById } from '-/utils/dom';
|
|
29
29
|
import { handleKeyDown } from '-/utils/handleKeyDown';
|
|
30
30
|
|
|
31
|
-
type Direction = '<' | '<<' | '>' | '>>';
|
|
32
|
-
type Kind = 'day' | 'month' | 'year';
|
|
31
|
+
export type Direction = '<' | '<<' | '>' | '>>';
|
|
32
|
+
export type Kind = 'day' | 'month' | 'year';
|
|
33
33
|
|
|
34
|
-
type ConfigKind = {
|
|
34
|
+
export type ConfigKind = {
|
|
35
35
|
header: Record<
|
|
36
36
|
Direction,
|
|
37
37
|
{
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { CheckboxProps } from '.';
|
|
2
|
+
import { ComponentExample } from '-/utils/demo';
|
|
3
|
+
|
|
4
|
+
export const CheckboxExample: ComponentExample<CheckboxProps> = {
|
|
5
|
+
defaultState: {
|
|
6
|
+
'aria-label': 'checkbox aria-label',
|
|
7
|
+
},
|
|
8
|
+
render: ({ props, Component }) => <Component {...props} />,
|
|
9
|
+
};
|
|
@@ -9,7 +9,7 @@ const ALL_LABEL = 'All';
|
|
|
9
9
|
export type CheckboxGroupOption = Pick<CheckboxProps, 'value'> &
|
|
10
10
|
Pick<ToggleOptionProps, 'description' | 'disabled' | 'label'>;
|
|
11
11
|
|
|
12
|
-
export type CheckboxGroupProps = FieldControlProps<string[]> & {
|
|
12
|
+
export type CheckboxGroupProps = Omit<FieldControlProps<string[]>, 'readOnly'> & {
|
|
13
13
|
/**
|
|
14
14
|
* The options for the checkboxes.
|
|
15
15
|
*
|
|
@@ -37,6 +37,8 @@ export type CheckboxGroupProps = FieldControlProps<string[]> & {
|
|
|
37
37
|
/**
|
|
38
38
|
* A group of checkboxes that allows users to choose one or more items from a list or turn an feature on or off.
|
|
39
39
|
*
|
|
40
|
+
* For a more complete example with field usage, see the CheckboxGroupField component.
|
|
41
|
+
*
|
|
40
42
|
* @example
|
|
41
43
|
* import { CheckboxGroup } from '@bspk/ui/CheckboxGroup';
|
|
42
44
|
*
|
|
@@ -57,4 +57,16 @@ export const presets: Preset<CheckboxGroupProps>[] = [
|
|
|
57
57
|
|
|
58
58
|
export const CheckboxGroupExample: ComponentExample<CheckboxGroupProps> = {
|
|
59
59
|
presets,
|
|
60
|
+
defaultState: {
|
|
61
|
+
options: [
|
|
62
|
+
{ label: 'Option 1', value: 'option1', description: 'Description for option 1' },
|
|
63
|
+
{
|
|
64
|
+
label: 'Option 2',
|
|
65
|
+
value: 'option2',
|
|
66
|
+
description: 'Description for option 2 (disabled)',
|
|
67
|
+
disabled: true,
|
|
68
|
+
},
|
|
69
|
+
{ label: 'Option 3', value: 'option3', description: 'Description for option 3' },
|
|
70
|
+
],
|
|
71
|
+
},
|
|
60
72
|
};
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { CheckboxGroupFieldProps } from '.';
|
|
2
|
+
import { CheckboxGroupExample as checkboxGroupExample } from '-/components/CheckboxGroup/CheckboxGroupExample';
|
|
3
|
+
import { ComponentExample, Preset } from '-/utils/demo';
|
|
4
|
+
|
|
5
|
+
export const presets: Preset<CheckboxGroupFieldProps>[] = checkboxGroupExample.presets!.map((preset) => ({
|
|
6
|
+
...preset,
|
|
7
|
+
propState: {
|
|
8
|
+
label: 'Checkbox Group Field',
|
|
9
|
+
...preset.propState,
|
|
10
|
+
},
|
|
11
|
+
}));
|
|
12
|
+
|
|
13
|
+
export const CheckboxGroupFieldExample: ComponentExample<CheckboxGroupFieldProps> = {
|
|
14
|
+
presets,
|
|
15
|
+
defaultState: {
|
|
16
|
+
...checkboxGroupExample.defaultState,
|
|
17
|
+
},
|
|
18
|
+
};
|
|
@@ -29,7 +29,7 @@ export type ChipProps = {
|
|
|
29
29
|
/** The function to call when the chip is clicked. */
|
|
30
30
|
onClick?: (event: React.MouseEvent<HTMLButtonElement, MouseEvent>) => void;
|
|
31
31
|
/**
|
|
32
|
-
*
|
|
32
|
+
* Visual indication of whether the chip is currently selected.
|
|
33
33
|
*
|
|
34
34
|
* @default false
|
|
35
35
|
*/
|
|
@@ -15,7 +15,7 @@ import { TimePicker } from '-/components/TimePicker';
|
|
|
15
15
|
import { FieldControlProps } from '-/types/common';
|
|
16
16
|
import { ComponentExample, Preset, Syntax } from '-/utils/demo';
|
|
17
17
|
|
|
18
|
-
type ExampleProps = Partial<FieldControlProps & FormFieldProps>;
|
|
18
|
+
export type ExampleProps = Partial<FieldControlProps & FormFieldProps>;
|
|
19
19
|
|
|
20
20
|
export const presets: Preset<Partial<ExampleProps>>[] = [
|
|
21
21
|
{
|
|
@@ -13,7 +13,7 @@ export const DEFAULT = {
|
|
|
13
13
|
autoComplete: 'off',
|
|
14
14
|
} as const;
|
|
15
15
|
|
|
16
|
-
type InputElementBaseProps = CommonProps<'owner' | 'size'> &
|
|
16
|
+
export type InputElementBaseProps = CommonProps<'owner' | 'size'> &
|
|
17
17
|
FieldControlProps &
|
|
18
18
|
Pick<FieldContextProps, 'ariaDescribedBy' | 'ariaErrorMessage'> & {
|
|
19
19
|
/** The ref of the container. */
|
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
import { InputProps } from '.';
|
|
2
2
|
import { ComponentExample } from '-/utils/demo';
|
|
3
3
|
|
|
4
|
-
type InputExampleProps = InputProps & { label: string; description?: string };
|
|
4
|
+
export type InputExampleProps = InputProps & { label: string; description?: string };
|
|
5
5
|
|
|
6
6
|
export const InputExample: ComponentExample<InputExampleProps> = {
|
|
7
7
|
defaultState: {
|
|
8
8
|
label: 'Property Description',
|
|
9
|
+
'aria-label': 'input aria-label',
|
|
9
10
|
description: 'This is a description of the property.',
|
|
10
11
|
placeholder: 'Waterfront condo with great views',
|
|
11
12
|
},
|
|
@@ -2,5 +2,8 @@ import { InputNumberProps } from './InputNumber';
|
|
|
2
2
|
import { ComponentExample } from '-/utils/demo';
|
|
3
3
|
|
|
4
4
|
export const InputNumberExample: ComponentExample<InputNumberProps> = {
|
|
5
|
+
defaultState: {
|
|
6
|
+
'aria-label': 'input number aria-label',
|
|
7
|
+
},
|
|
5
8
|
render: ({ props, Component }) => <Component {...props} />,
|
|
6
9
|
};
|
|
@@ -4,6 +4,9 @@ import { ComponentExample, Preset } from '-/utils/demo';
|
|
|
4
4
|
export const presets: Preset<InputPhoneProps>[] = [];
|
|
5
5
|
|
|
6
6
|
export const InputPhoneExample: ComponentExample<InputPhoneProps> = {
|
|
7
|
+
defaultState: {
|
|
8
|
+
'aria-label': 'input phone aria-label',
|
|
9
|
+
},
|
|
7
10
|
render: ({ props, Component }) => <Component {...props} />,
|
|
8
11
|
variants: true,
|
|
9
12
|
};
|
|
@@ -9,7 +9,7 @@ export type PageControlProps = {
|
|
|
9
9
|
* @example
|
|
10
10
|
* 1;
|
|
11
11
|
*
|
|
12
|
-
* @
|
|
12
|
+
* @minimum 1
|
|
13
13
|
* @required
|
|
14
14
|
*/
|
|
15
15
|
currentPage: number;
|
|
@@ -19,7 +19,7 @@ export type PageControlProps = {
|
|
|
19
19
|
* @example
|
|
20
20
|
* 5;
|
|
21
21
|
*
|
|
22
|
-
* @
|
|
22
|
+
* @minimum 1
|
|
23
23
|
* @required
|
|
24
24
|
*/
|
|
25
25
|
numPages: number;
|
|
@@ -31,7 +31,7 @@ export type PageControlProps = {
|
|
|
31
31
|
variant?: 'flat' | 'floating';
|
|
32
32
|
};
|
|
33
33
|
|
|
34
|
-
type DotSize = 'medium' | 'small' | 'x-small';
|
|
34
|
+
export type DotSize = 'medium' | 'small' | 'x-small';
|
|
35
35
|
|
|
36
36
|
/**
|
|
37
37
|
* A visual indicator that displays a series of dots representing the number of pages or elements within a moving
|
|
@@ -4,7 +4,7 @@ import { PaginationProps } from './Pagination';
|
|
|
4
4
|
import { Input } from '-/components/Input';
|
|
5
5
|
import { Txt } from '-/components/Txt';
|
|
6
6
|
|
|
7
|
-
type PageInputProps = Pick<PaginationProps, 'numPages' | 'onChange' | 'value'>;
|
|
7
|
+
export type PageInputProps = Pick<PaginationProps, 'numPages' | 'onChange' | 'value'>;
|
|
8
8
|
|
|
9
9
|
export const PageInput: FC<PageInputProps> = ({ numPages, onChange, value }) => {
|
|
10
10
|
const [page, setPage] = useState<string>(String(value));
|
|
@@ -7,7 +7,7 @@ import { ElementProps, FieldControlProps } from '-/types/common';
|
|
|
7
7
|
export type RadioGroupOption = Pick<RadioOptionProps, 'checked' | 'description' | 'disabled' | 'label'> &
|
|
8
8
|
Pick<RadioProps, 'value'>;
|
|
9
9
|
|
|
10
|
-
export type RadioGroupProps = FieldControlProps & {
|
|
10
|
+
export type RadioGroupProps = Omit<FieldControlProps, 'readOnly'> & {
|
|
11
11
|
/**
|
|
12
12
|
* The options for the radios.
|
|
13
13
|
*
|
|
@@ -34,6 +34,8 @@ export type RadioGroupProps = FieldControlProps & {
|
|
|
34
34
|
/**
|
|
35
35
|
* A group of radios that allows users to choose one or more items from a list or turn an feature on or off.
|
|
36
36
|
*
|
|
37
|
+
* For a more complete example with field usage, see the RadioGroupField component.
|
|
38
|
+
*
|
|
37
39
|
* @example
|
|
38
40
|
* import { useState } from 'react';
|
|
39
41
|
* import { RadioGroup } from '@bspk/ui/RadioGroup';
|
|
@@ -1,11 +1,78 @@
|
|
|
1
1
|
import { RadioGroupProps } from '.';
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import { ComponentExample } from '-/utils/demo';
|
|
2
|
+
import { ComponentExample, Preset } from '-/utils/demo';
|
|
3
|
+
import { randomString } from '-/utils/random';
|
|
5
4
|
|
|
6
|
-
export const presets
|
|
5
|
+
export const presets: Preset<RadioGroupProps>[] = [
|
|
6
|
+
{
|
|
7
|
+
label: 'With Descriptions',
|
|
8
|
+
propState: {
|
|
9
|
+
value: 'option2',
|
|
10
|
+
disabled: false,
|
|
11
|
+
options: [
|
|
12
|
+
{ label: 'Option 1', value: 'option1', description: 'Description for option 1' },
|
|
13
|
+
{
|
|
14
|
+
label: 'Option 2',
|
|
15
|
+
value: 'option2',
|
|
16
|
+
description: 'Description for option 2 (disabled)',
|
|
17
|
+
disabled: true,
|
|
18
|
+
},
|
|
19
|
+
{ label: 'Option 3', value: 'option3', description: 'Description for option 3' },
|
|
20
|
+
],
|
|
21
|
+
['aria-label']: 'Radio group',
|
|
22
|
+
name: 'Radio group',
|
|
23
|
+
},
|
|
24
|
+
},
|
|
25
|
+
{
|
|
26
|
+
label: 'Group disabled',
|
|
27
|
+
propState: {
|
|
28
|
+
value: 'option2',
|
|
29
|
+
disabled: true,
|
|
30
|
+
options: [
|
|
31
|
+
{ label: 'Option 1', value: 'option1', description: 'Description for option 1' },
|
|
32
|
+
{
|
|
33
|
+
label: 'Option 2',
|
|
34
|
+
value: 'option2',
|
|
35
|
+
description: 'Description for option 2 (disabled)',
|
|
36
|
+
},
|
|
37
|
+
{ label: 'Option 3', value: 'option3', description: 'Description for option 3' },
|
|
38
|
+
],
|
|
39
|
+
['aria-label']: 'Radio group',
|
|
40
|
+
name: 'Radio group',
|
|
41
|
+
},
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
label: 'Long labels',
|
|
45
|
+
propState: {
|
|
46
|
+
value: 'option2',
|
|
47
|
+
disabled: false,
|
|
48
|
+
options: [
|
|
49
|
+
{ label: 'This is a very long label for option 1 that never seems to end', value: 'option1' },
|
|
50
|
+
{ label: 'This is a very long label for option 2 that never seems to end', value: 'option2' },
|
|
51
|
+
{ label: 'This is a very long label for option 3', value: 'option3' },
|
|
52
|
+
],
|
|
53
|
+
['aria-label']: 'Radio group',
|
|
54
|
+
name: 'Radio group',
|
|
55
|
+
},
|
|
56
|
+
},
|
|
57
|
+
];
|
|
7
58
|
|
|
8
59
|
export const RadioGroupExample: ComponentExample<RadioGroupProps> = {
|
|
9
|
-
render: RadioExample.render,
|
|
10
60
|
presets,
|
|
61
|
+
render: ({ props, Component }) => {
|
|
62
|
+
const id = randomString();
|
|
63
|
+
return <Component {...props} id={id} name={props.name + id} />;
|
|
64
|
+
},
|
|
65
|
+
defaultState: {
|
|
66
|
+
value: 'option3',
|
|
67
|
+
options: [
|
|
68
|
+
{ label: 'Option 1', value: 'option1', description: 'Description for option 1' },
|
|
69
|
+
{
|
|
70
|
+
label: 'Option 2',
|
|
71
|
+
value: 'option2',
|
|
72
|
+
description: 'Description for option 2 (disabled)',
|
|
73
|
+
disabled: true,
|
|
74
|
+
},
|
|
75
|
+
{ label: 'Option 3', value: 'option3', description: 'Description for option 3' },
|
|
76
|
+
],
|
|
77
|
+
},
|
|
11
78
|
};
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { RadioGroupFieldProps } from '.';
|
|
2
|
+
import { RadioGroupExample as radioGroupExample } from '-/components/RadioGroup/RadioGroupExample';
|
|
3
|
+
import { ComponentExample, Preset } from '-/utils/demo';
|
|
4
|
+
|
|
5
|
+
export const presets: Preset<RadioGroupFieldProps>[] = radioGroupExample.presets!.map((preset) => ({
|
|
6
|
+
...preset,
|
|
7
|
+
propState: {
|
|
8
|
+
label: 'Radio Group Field',
|
|
9
|
+
...preset.propState,
|
|
10
|
+
},
|
|
11
|
+
}));
|
|
12
|
+
|
|
13
|
+
export const RadioGroupFieldExample: ComponentExample<RadioGroupFieldProps> = {
|
|
14
|
+
presets,
|
|
15
|
+
defaultState: {
|
|
16
|
+
...radioGroupExample.defaultState,
|
|
17
|
+
},
|
|
18
|
+
};
|
|
@@ -23,7 +23,10 @@ import { useIds } from '-/utils/useIds';
|
|
|
23
23
|
*/
|
|
24
24
|
export type SearchBarOption = Pick<ListItemProps, 'label' | 'leading' | 'trailing'>;
|
|
25
25
|
|
|
26
|
-
export type SearchBarProps<O extends SearchBarOption = SearchBarOption> =
|
|
26
|
+
export type SearchBarProps<O extends SearchBarOption = SearchBarOption> = Omit<
|
|
27
|
+
FieldControlProps<string, O>,
|
|
28
|
+
'invalid' | 'readOnly' | 'required'
|
|
29
|
+
> &
|
|
27
30
|
Pick<InputProps, 'inputRef' | 'size' | 'trailing'> &
|
|
28
31
|
ScrollListItemsStyleProps & {
|
|
29
32
|
/**
|
|
@@ -111,9 +114,11 @@ export function SearchBar<O extends SearchBarOption>({
|
|
|
111
114
|
disabled = false,
|
|
112
115
|
scrollLimit,
|
|
113
116
|
trailing,
|
|
117
|
+
'aria-label': ariaLabel,
|
|
114
118
|
}: SearchBarProps<O>) {
|
|
115
119
|
const id = useId(idProp);
|
|
116
120
|
const menuId = `${id}-menu`;
|
|
121
|
+
const noResultsId = `${id}-no-results`;
|
|
117
122
|
|
|
118
123
|
const items = useIds(`search-bar-${id}`, itemsProp || []);
|
|
119
124
|
|
|
@@ -162,23 +167,20 @@ export function SearchBar<O extends SearchBarOption>({
|
|
|
162
167
|
};
|
|
163
168
|
|
|
164
169
|
useEffect(() => {
|
|
165
|
-
if (!hasFocus)
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
}
|
|
170
|
+
if (!hasFocus) return setActiveElementId(null);
|
|
171
|
+
|
|
172
|
+
if (!filteredItems.length) return setActiveElementId(noResultsId);
|
|
169
173
|
|
|
170
174
|
if (activeElementId) return;
|
|
171
175
|
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
setActiveElementId(value?.trim().length ? filteredItems[0].id : null);
|
|
175
|
-
}
|
|
176
|
-
}, [hasFocus, filteredItems, activeElementId, setActiveElementId, value]);
|
|
176
|
+
setActiveElementId(value?.trim().length ? filteredItems[0].id : null);
|
|
177
|
+
}, [hasFocus, filteredItems, activeElementId, setActiveElementId, value, noResultsId]);
|
|
177
178
|
|
|
178
179
|
return (
|
|
179
180
|
<>
|
|
180
181
|
<div data-bspk="search-bar">
|
|
181
182
|
<Input
|
|
183
|
+
aria-label={ariaLabel}
|
|
182
184
|
autoComplete="off"
|
|
183
185
|
containerRef={elements.setReference}
|
|
184
186
|
disabled={disabled}
|
|
@@ -242,8 +244,8 @@ export function SearchBar<O extends SearchBarOption>({
|
|
|
242
244
|
}}
|
|
243
245
|
tabIndex={-1}
|
|
244
246
|
>
|
|
245
|
-
{
|
|
246
|
-
<div data-bspk="no-items-found">
|
|
247
|
+
{activeElementId === noResultsId && (
|
|
248
|
+
<div data-bspk="no-items-found" id={noResultsId}>
|
|
247
249
|
<Txt as="div" variant="heading-h5">
|
|
248
250
|
No results found
|
|
249
251
|
</Txt>
|
|
@@ -3,6 +3,9 @@ import { ComponentExample } from '-/utils/demo';
|
|
|
3
3
|
import { randomString } from '-/utils/random';
|
|
4
4
|
|
|
5
5
|
export const SearchBarExample: ComponentExample<SearchBarProps> = {
|
|
6
|
+
defaultState: {
|
|
7
|
+
'aria-label': 'search bar aria-label',
|
|
8
|
+
},
|
|
6
9
|
render: ({ props, Component }) => {
|
|
7
10
|
return <Component {...props} id={`search-bar-${randomString(8)}`} />;
|
|
8
11
|
},
|
|
@@ -156,6 +156,7 @@ export const SelectExample: ComponentExample<SelectProps> = {
|
|
|
156
156
|
options: DEFAULT_OPTIONS,
|
|
157
157
|
scrollLimit: 5,
|
|
158
158
|
value: '',
|
|
159
|
+
'aria-label': 'select aria-label',
|
|
159
160
|
},
|
|
160
161
|
render: ({ props, Component, preset }) => <Component key={preset?.label} {...props} />,
|
|
161
162
|
presets,
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { SwitchProps } from '.';
|
|
2
|
+
import { ComponentExample } from '-/utils/demo';
|
|
3
|
+
|
|
4
|
+
export const SwitchExample: ComponentExample<SwitchProps> = {
|
|
5
|
+
defaultState: {
|
|
6
|
+
'aria-label': 'switch aria-label',
|
|
7
|
+
},
|
|
8
|
+
render: ({ props, Component }) => <Component {...props} />,
|
|
9
|
+
};
|
|
@@ -2,5 +2,8 @@ import { TextareaProps } from '.';
|
|
|
2
2
|
import { ComponentExample } from '-/utils/demo';
|
|
3
3
|
|
|
4
4
|
export const TextareaExample: ComponentExample<TextareaProps> = {
|
|
5
|
+
defaultState: {
|
|
6
|
+
'aria-label': 'textarea aria-label',
|
|
7
|
+
},
|
|
5
8
|
render: ({ props, Component }) => <Component {...props} />,
|
|
6
9
|
};
|
|
@@ -3,13 +3,13 @@ import { useArrowNavigation } from '-/hooks/useArrowNavigation';
|
|
|
3
3
|
import { getElementById } from '-/utils/dom';
|
|
4
4
|
import { handleKeyDown } from '-/utils/handleKeyDown';
|
|
5
5
|
|
|
6
|
-
type Option = {
|
|
6
|
+
export type Option = {
|
|
7
7
|
id: string;
|
|
8
8
|
value: string;
|
|
9
9
|
label: string;
|
|
10
10
|
};
|
|
11
11
|
|
|
12
|
-
type TimePickerListboxProps = {
|
|
12
|
+
export type TimePickerListboxProps = {
|
|
13
13
|
options: Option[];
|
|
14
14
|
selectedValue?: string;
|
|
15
15
|
type: TimePickerType;
|
|
@@ -9,7 +9,7 @@ export const NUMBER_PLACEHOLDER = '--' as const;
|
|
|
9
9
|
|
|
10
10
|
export type TimePickerType = 'hours' | 'meridiem' | 'minutes';
|
|
11
11
|
|
|
12
|
-
type TimePickerSegmentProps<T extends string> = {
|
|
12
|
+
export type TimePickerSegmentProps<T extends string> = {
|
|
13
13
|
disabled?: boolean;
|
|
14
14
|
name: string;
|
|
15
15
|
readOnly?: boolean;
|
|
@@ -3,6 +3,8 @@ import { ComponentExample } from '-/utils/demo';
|
|
|
3
3
|
|
|
4
4
|
export const TimePickerExample: ComponentExample<TimePickerProps> = {
|
|
5
5
|
variants: false,
|
|
6
|
-
|
|
6
|
+
defaultState: {
|
|
7
|
+
'aria-label': 'time picker aria-label',
|
|
8
|
+
},
|
|
7
9
|
render: ({ props, Component }) => <Component {...props} />,
|
|
8
10
|
};
|
|
@@ -6,7 +6,7 @@ import { CommonProps } from '-/types/common';
|
|
|
6
6
|
export type ToggleOptionControlProps<T extends { 'aria-label'?: string }> = Omit<T, 'aria-label'> &
|
|
7
7
|
Pick<ToggleOptionProps, 'description' | 'label'>;
|
|
8
8
|
|
|
9
|
-
export type ToggleOptionProps = CommonProps<'disabled'
|
|
9
|
+
export type ToggleOptionProps = CommonProps<'disabled'> &
|
|
10
10
|
Omit<ListItemProps, 'as' | 'label' | 'leading' | 'subtext' | 'trailing'> & {
|
|
11
11
|
/**
|
|
12
12
|
* The label of the option. Also used as the aria-label of the control.
|
|
@@ -30,13 +30,12 @@ export type ToggleOptionProps = CommonProps<'disabled' | 'readOnly'> &
|
|
|
30
30
|
* @name ToggleOption
|
|
31
31
|
* @phase Utility
|
|
32
32
|
*/
|
|
33
|
-
export function ToggleOption({ label, description, children, disabled,
|
|
33
|
+
export function ToggleOption({ label, description, children, disabled, ...props }: ToggleOptionProps) {
|
|
34
34
|
return (
|
|
35
35
|
<ListItem
|
|
36
36
|
{...props}
|
|
37
|
+
aria-disabled={disabled || undefined}
|
|
37
38
|
as="label"
|
|
38
|
-
data-disabled={disabled}
|
|
39
|
-
data-readonly={readOnly}
|
|
40
39
|
label={label}
|
|
41
40
|
leading={children}
|
|
42
41
|
subText={description}
|
|
@@ -3,7 +3,7 @@ import { getElementById } from '-/utils/dom';
|
|
|
3
3
|
import { KeysCallback } from '-/utils/handleKeyDown';
|
|
4
4
|
import { KeyboardEventCode } from '-/utils/keyboard';
|
|
5
5
|
|
|
6
|
-
type ArrowKeyNames = Extract<KeyboardEventCode, `Arrow${string}`>;
|
|
6
|
+
export type ArrowKeyNames = Extract<KeyboardEventCode, `Arrow${string}`>;
|
|
7
7
|
|
|
8
8
|
const ARROW_KEYS: ArrowKeyNames[] = ['ArrowLeft', 'ArrowRight', 'ArrowUp', 'ArrowDown'];
|
|
9
9
|
|
|
@@ -14,7 +14,7 @@ export type ArrowKeyNavigationCallbackParams = {
|
|
|
14
14
|
increment: number;
|
|
15
15
|
};
|
|
16
16
|
|
|
17
|
-
type UseArrowNavigationProps = {
|
|
17
|
+
export type UseArrowNavigationProps = {
|
|
18
18
|
/**
|
|
19
19
|
* An array of string IDs representing the navigable elements. These IDs should correspond to the `id` attributes of
|
|
20
20
|
* the elements in the DOM. Ensure the elements are not disabled.
|