@westpac/ui 0.4.0 → 0.6.0
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/CHANGELOG.md +12 -0
- package/dist/components/accordion/accordion.component.d.ts +2 -2
- package/dist/components/accordion/components/accordion-item/accordion-item.component.js +5 -3
- package/dist/components/accordion/components/accordion-item/accordion-item.styles.d.ts +16 -0
- package/dist/components/accordion/components/accordion-item/accordion-item.styles.js +17 -9
- package/dist/components/alert/alert.component.js +2 -1
- package/dist/components/alert/alert.styles.js +2 -2
- package/dist/components/autocomplete/autocomplete.styles.js +3 -3
- package/dist/components/button/button.component.d.ts +18 -2
- package/dist/components/button/button.component.js +6 -6
- package/dist/components/button/button.styles.d.ts +16 -0
- package/dist/components/button/button.styles.js +8 -0
- package/dist/components/button-dropdown/button-dropdown.styles.js +1 -1
- package/dist/components/button-dropdown/components/panel/panel.component.js +6 -3
- package/dist/components/button-dropdown/components/panel/panel.styles.d.ts +14 -2
- package/dist/components/button-dropdown/components/panel/panel.styles.js +8 -2
- package/dist/components/checkbox-group/components/checkbox/checkbox.component.js +2 -2
- package/dist/components/checkbox-group/components/checkbox/checkbox.styles.d.ts +2 -2
- package/dist/components/checkbox-group/components/checkbox/checkbox.styles.js +4 -4
- package/dist/components/collapsible/collapsible.styles.js +1 -1
- package/dist/components/compacta/compacta.component.js +4 -3
- package/dist/components/compacta/compacta.styles.js +1 -1
- package/dist/components/flexi-cell/flexi-cell.component.js +6 -3
- package/dist/components/flexi-cell/flexi-cell.styles.d.ts +10 -0
- package/dist/components/flexi-cell/flexi-cell.styles.js +7 -2
- package/dist/components/flexi-cell/flexi-cell.types.d.ts +4 -0
- package/dist/components/flexi-cell/index.d.ts +1 -0
- package/dist/components/flexi-cell/index.js +1 -0
- package/dist/components/icon/index.d.ts +1 -0
- package/dist/components/icon/index.js +1 -0
- package/dist/components/index.d.ts +3 -1
- package/dist/components/index.js +3 -1
- package/dist/components/input/input.component.d.ts +7 -1
- package/dist/components/input/input.component.js +5 -2
- package/dist/components/input/input.styles.d.ts +7 -1
- package/dist/components/input/input.styles.js +4 -1
- package/dist/components/link/link.component.d.ts +1 -1
- package/dist/components/link/link.component.js +5 -3
- package/dist/components/link/link.styles.d.ts +16 -0
- package/dist/components/link/link.styles.js +11 -3
- package/dist/components/list/components/item/item.component.d.ts +1 -1
- package/dist/components/list/components/item/item.component.js +6 -3
- package/dist/components/list/components/item/item.styles.d.ts +10 -0
- package/dist/components/list/components/item/item.styles.js +7 -2
- package/dist/components/list/list.component.d.ts +1 -1
- package/dist/components/list/list.stories.js +7 -1
- package/dist/components/list/list.styles.js +1 -1
- package/dist/components/list/list.utils.d.ts +1 -1
- package/dist/components/modal/components/backdrop/backdrop.styles.js +2 -2
- package/dist/components/modal/components/dialog/dialog.component.js +6 -4
- package/dist/components/modal/components/dialog/dialog.styles.d.ts +16 -0
- package/dist/components/modal/components/dialog/dialog.styles.js +11 -3
- package/dist/components/popover/components/panel/panel.styles.js +1 -1
- package/dist/components/popover/popover.component.js +0 -1
- package/dist/components/popover/popover.styles.d.ts +0 -2
- package/dist/components/popover/popover.styles.js +1 -2
- package/dist/components/radio-group/components/radio/radio.component.js +2 -2
- package/dist/components/radio-group/components/radio/radio.styles.d.ts +2 -2
- package/dist/components/radio-group/components/radio/radio.styles.js +5 -5
- package/dist/components/repeater/index.d.ts +2 -0
- package/dist/components/repeater/index.js +1 -0
- package/dist/components/repeater/repeater.component.d.ts +3 -0
- package/dist/components/repeater/repeater.component.js +144 -0
- package/dist/components/repeater/repeater.stories.d.ts +13 -0
- package/dist/components/repeater/repeater.stories.js +34 -0
- package/dist/components/repeater/repeater.styles.d.ts +49 -0
- package/dist/components/repeater/repeater.styles.js +36 -0
- package/dist/components/repeater/repeater.types.d.ts +19 -0
- package/dist/components/repeater/repeater.types.js +1 -0
- package/dist/components/repeater/repeater.utils.d.ts +2 -0
- package/dist/components/repeater/repeater.utils.js +2 -0
- package/dist/components/select/select.component.d.ts +11 -1
- package/dist/components/select/select.component.js +5 -2
- package/dist/components/select/select.styles.d.ts +11 -1
- package/dist/components/select/select.styles.js +6 -1
- package/dist/components/selector/components/index.d.ts +2 -0
- package/dist/components/selector/components/index.js +2 -0
- package/dist/components/selector/components/selector-checkbox-group/components/index.d.ts +1 -0
- package/dist/components/selector/components/selector-checkbox-group/components/index.js +1 -0
- package/dist/components/selector/components/selector-checkbox-group/components/selector-checkbox-group-option/index.d.ts +2 -0
- package/dist/components/selector/components/selector-checkbox-group/components/selector-checkbox-group-option/index.js +1 -0
- package/dist/components/selector/components/selector-checkbox-group/components/selector-checkbox-group-option/selector-checkbox-group-option.component.d.ts +12 -0
- package/dist/components/selector/components/selector-checkbox-group/components/selector-checkbox-group-option/selector-checkbox-group-option.component.js +67 -0
- package/dist/components/selector/components/selector-checkbox-group/components/selector-checkbox-group-option/selector-checkbox-group-option.styles.d.ts +59 -0
- package/dist/components/selector/components/selector-checkbox-group/components/selector-checkbox-group-option/selector-checkbox-group-option.styles.js +57 -0
- package/dist/components/selector/components/selector-checkbox-group/components/selector-checkbox-group-option/selector-checkbox-group-option.types.d.ts +10 -0
- package/dist/components/selector/components/selector-checkbox-group/components/selector-checkbox-group-option/selector-checkbox-group-option.types.js +1 -0
- package/dist/components/selector/components/selector-checkbox-group/index.d.ts +2 -0
- package/dist/components/selector/components/selector-checkbox-group/index.js +1 -0
- package/dist/components/selector/components/selector-checkbox-group/selector-checkbox-group.component.d.ts +15 -0
- package/dist/components/selector/components/selector-checkbox-group/selector-checkbox-group.component.js +49 -0
- package/dist/components/selector/components/selector-checkbox-group/selector-checkbox-group.styles.d.ts +3 -0
- package/dist/components/selector/components/selector-checkbox-group/selector-checkbox-group.styles.js +13 -0
- package/dist/components/selector/components/selector-checkbox-group/selector-checkbox-group.types.d.ts +20 -0
- package/dist/components/selector/components/selector-checkbox-group/selector-checkbox-group.types.js +1 -0
- package/dist/components/selector/components/selector-radio-group/components/index.d.ts +1 -0
- package/dist/components/selector/components/selector-radio-group/components/index.js +1 -0
- package/dist/components/selector/components/selector-radio-group/components/selector-radio-group-option/index.d.ts +2 -0
- package/dist/components/selector/components/selector-radio-group/components/selector-radio-group-option/index.js +1 -0
- package/dist/components/selector/components/selector-radio-group/components/selector-radio-group-option/selector-radio-group-option.component.d.ts +12 -0
- package/dist/components/selector/components/selector-radio-group/components/selector-radio-group-option/selector-radio-group-option.component.js +67 -0
- package/dist/components/selector/components/selector-radio-group/components/selector-radio-group-option/selector-radio-group-option.styles.d.ts +59 -0
- package/dist/components/selector/components/selector-radio-group/components/selector-radio-group-option/selector-radio-group-option.styles.js +57 -0
- package/dist/components/selector/components/selector-radio-group/components/selector-radio-group-option/selector-radio-group-option.types.d.ts +15 -0
- package/dist/components/selector/components/selector-radio-group/components/selector-radio-group-option/selector-radio-group-option.types.js +1 -0
- package/dist/components/selector/components/selector-radio-group/index.d.ts +2 -0
- package/dist/components/selector/components/selector-radio-group/index.js +1 -0
- package/dist/components/selector/components/selector-radio-group/selector-radio-group.component.d.ts +15 -0
- package/dist/components/selector/components/selector-radio-group/selector-radio-group.component.js +58 -0
- package/dist/components/selector/components/selector-radio-group/selector-radio-group.styles.d.ts +13 -0
- package/dist/components/selector/components/selector-radio-group/selector-radio-group.styles.js +18 -0
- package/dist/components/selector/components/selector-radio-group/selector-radio-group.types.d.ts +17 -0
- package/dist/components/selector/components/selector-radio-group/selector-radio-group.types.js +1 -0
- package/dist/components/selector/index.d.ts +2 -0
- package/dist/components/selector/index.js +1 -0
- package/dist/components/selector/selector.component.d.ts +30 -0
- package/dist/components/selector/selector.component.js +34 -0
- package/dist/components/selector/selector.stories.d.ts +57 -0
- package/dist/components/selector/selector.stories.js +515 -0
- package/dist/components/selector/selector.types.d.ts +20 -0
- package/dist/components/selector/selector.types.js +1 -0
- package/dist/components/switch/switch.component.d.ts +1 -1
- package/dist/components/switch/switch.component.js +11 -7
- package/dist/components/switch/switch.stories.js +1 -1
- package/dist/components/switch/switch.styles.d.ts +2 -2
- package/dist/components/switch/switch.styles.js +2 -2
- package/dist/components/switch/switch.types.d.ts +5 -1
- package/dist/components/tabs/components/tab/tab.component.js +5 -3
- package/dist/components/tabs/components/tab/tab.styles.d.ts +9 -1
- package/dist/components/tabs/components/tab/tab.styles.js +12 -8
- package/dist/components/tabs/components/tab-panel/tab-panel.component.js +5 -3
- package/dist/components/tabs/components/tab-panel/tab-panel.styles.d.ts +7 -1
- package/dist/components/tabs/components/tab-panel/tab-panel.styles.js +5 -2
- package/dist/components/textarea/textarea.component.d.ts +7 -1
- package/dist/components/textarea/textarea.component.js +5 -2
- package/dist/components/textarea/textarea.styles.d.ts +7 -1
- package/dist/components/textarea/textarea.styles.js +4 -1
- package/dist/css/westpac-ui.css +165 -3
- package/dist/css/westpac-ui.min.css +165 -3
- package/dist/tailwind/constants/colors.d.ts +9 -9
- package/dist/tailwind/themes/index.d.ts +11 -11
- package/dist/utils/generateId.d.ts +1 -0
- package/dist/utils/generateId.js +6 -0
- package/dist/utils/index.d.ts +1 -0
- package/dist/utils/index.js +1 -0
- package/package.json +7 -1
- package/src/components/accordion/components/accordion-item/accordion-item.component.tsx +4 -3
- package/src/components/accordion/components/accordion-item/accordion-item.styles.ts +17 -9
- package/src/components/alert/alert.component.tsx +1 -1
- package/src/components/alert/alert.styles.ts +2 -2
- package/src/components/autocomplete/autocomplete.styles.ts +3 -3
- package/src/components/button/button.component.tsx +9 -10
- package/src/components/button/button.styles.ts +4 -0
- package/src/components/button-dropdown/button-dropdown.styles.ts +1 -1
- package/src/components/button-dropdown/components/panel/panel.component.tsx +4 -3
- package/src/components/button-dropdown/components/panel/panel.styles.ts +8 -2
- package/src/components/checkbox-group/components/checkbox/checkbox.component.tsx +2 -2
- package/src/components/checkbox-group/components/checkbox/checkbox.styles.ts +4 -4
- package/src/components/collapsible/collapsible.styles.ts +1 -1
- package/src/components/compacta/compacta.component.tsx +4 -3
- package/src/components/compacta/compacta.styles.ts +1 -1
- package/src/components/flexi-cell/flexi-cell.component.tsx +5 -2
- package/src/components/flexi-cell/flexi-cell.styles.ts +5 -2
- package/src/components/flexi-cell/flexi-cell.types.ts +4 -0
- package/src/components/flexi-cell/index.ts +1 -0
- package/src/components/icon/index.ts +1 -0
- package/src/components/index.ts +3 -1
- package/src/components/input/input.component.tsx +10 -1
- package/src/components/input/input.styles.ts +4 -1
- package/src/components/link/link.component.tsx +10 -3
- package/src/components/link/link.styles.ts +7 -3
- package/src/components/list/components/item/item.component.tsx +4 -1
- package/src/components/list/components/item/item.styles.ts +5 -2
- package/src/components/list/list.stories.tsx +3 -3
- package/src/components/list/list.styles.ts +1 -1
- package/src/components/modal/components/backdrop/backdrop.styles.ts +2 -2
- package/src/components/modal/components/dialog/dialog.component.tsx +4 -3
- package/src/components/modal/components/dialog/dialog.styles.ts +7 -3
- package/src/components/popover/components/panel/panel.styles.ts +1 -1
- package/src/components/popover/popover.component.tsx +0 -1
- package/src/components/popover/popover.styles.ts +0 -1
- package/src/components/radio-group/components/radio/radio.component.tsx +2 -2
- package/src/components/radio-group/components/radio/radio.styles.ts +5 -5
- package/src/components/repeater/index.ts +2 -0
- package/src/components/repeater/repeater.component.tsx +124 -0
- package/src/components/repeater/repeater.stories.tsx +49 -0
- package/src/components/repeater/repeater.styles.ts +32 -0
- package/src/components/repeater/repeater.types.ts +20 -0
- package/src/components/repeater/repeater.utils.tsx +3 -0
- package/src/components/select/select.component.tsx +3 -1
- package/src/components/select/select.styles.ts +6 -1
- package/src/components/selector/components/index.ts +2 -0
- package/src/components/selector/components/selector-checkbox-group/components/index.ts +1 -0
- package/src/components/selector/components/selector-checkbox-group/components/selector-checkbox-group-option/index.ts +2 -0
- package/src/components/selector/components/selector-checkbox-group/components/selector-checkbox-group-option/selector-checkbox-group-option.component.tsx +96 -0
- package/src/components/selector/components/selector-checkbox-group/components/selector-checkbox-group-option/selector-checkbox-group-option.styles.ts +53 -0
- package/src/components/selector/components/selector-checkbox-group/components/selector-checkbox-group-option/selector-checkbox-group-option.types.ts +15 -0
- package/src/components/selector/components/selector-checkbox-group/index.ts +2 -0
- package/src/components/selector/components/selector-checkbox-group/selector-checkbox-group.component.tsx +46 -0
- package/src/components/selector/components/selector-checkbox-group/selector-checkbox-group.styles.ts +9 -0
- package/src/components/selector/components/selector-checkbox-group/selector-checkbox-group.types.ts +25 -0
- package/src/components/selector/components/selector-radio-group/components/index.ts +1 -0
- package/src/components/selector/components/selector-radio-group/components/selector-radio-group-option/index.ts +2 -0
- package/src/components/selector/components/selector-radio-group/components/selector-radio-group-option/selector-radio-group-option.component.tsx +90 -0
- package/src/components/selector/components/selector-radio-group/components/selector-radio-group-option/selector-radio-group-option.styles.ts +53 -0
- package/src/components/selector/components/selector-radio-group/components/selector-radio-group-option/selector-radio-group-option.types.ts +21 -0
- package/src/components/selector/components/selector-radio-group/index.ts +2 -0
- package/src/components/selector/components/selector-radio-group/selector-radio-group.component.tsx +48 -0
- package/src/components/selector/components/selector-radio-group/selector-radio-group.styles.ts +14 -0
- package/src/components/selector/components/selector-radio-group/selector-radio-group.types.ts +22 -0
- package/src/components/selector/index.ts +2 -0
- package/src/components/selector/selector.component.tsx +34 -0
- package/src/components/selector/selector.stories.tsx +621 -0
- package/src/components/selector/selector.types.ts +24 -0
- package/src/components/switch/switch.component.tsx +19 -7
- package/src/components/switch/switch.stories.tsx +1 -1
- package/src/components/switch/switch.styles.ts +2 -2
- package/src/components/switch/switch.types.ts +5 -1
- package/src/components/tabs/components/tab/tab.component.tsx +4 -3
- package/src/components/tabs/components/tab/tab.styles.ts +12 -8
- package/src/components/tabs/components/tab-panel/tab-panel.component.tsx +3 -2
- package/src/components/tabs/components/tab-panel/tab-panel.styles.ts +5 -2
- package/src/components/textarea/textarea.component.tsx +9 -1
- package/src/components/textarea/textarea.styles.ts +4 -1
- package/src/utils/generateId.ts +6 -0
- package/src/utils/index.ts +1 -0
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
import React, { forwardRef, useContext, useRef } from 'react';
|
|
2
|
+
import { VisuallyHidden, mergeProps, useFocusRing, useRadio } from 'react-aria';
|
|
3
|
+
|
|
4
|
+
import {
|
|
5
|
+
FlexiCellAdornment,
|
|
6
|
+
FlexiCellBody,
|
|
7
|
+
FlexiCellButton,
|
|
8
|
+
FlexiCellCircle,
|
|
9
|
+
FlexiCellFooter,
|
|
10
|
+
FlexiCellHint,
|
|
11
|
+
FlexiCellLabel,
|
|
12
|
+
} from '../../../../../../components/flexi-cell/index.js';
|
|
13
|
+
import { ArrowRightIcon, TickIcon } from '../../../../../../components/icon/index.js';
|
|
14
|
+
import { FlexiCell } from '../../../../../index.js';
|
|
15
|
+
import { SelectorRadioGroupContext } from '../../selector-radio-group.component.js';
|
|
16
|
+
|
|
17
|
+
import { styles as selectorRadioGroupOptionStyles } from './selector-radio-group-option.styles.js';
|
|
18
|
+
import { type SelectorRadioGroupOptionProps } from './selector-radio-group-option.types.js';
|
|
19
|
+
|
|
20
|
+
function BaseSelectorRadioGroupOption(
|
|
21
|
+
{
|
|
22
|
+
className,
|
|
23
|
+
children,
|
|
24
|
+
value,
|
|
25
|
+
withBorder = true,
|
|
26
|
+
withArrow,
|
|
27
|
+
after,
|
|
28
|
+
badge,
|
|
29
|
+
badgeZIndex,
|
|
30
|
+
before,
|
|
31
|
+
body = true,
|
|
32
|
+
checkIcon = 'checkbox',
|
|
33
|
+
...props
|
|
34
|
+
}: SelectorRadioGroupOptionProps,
|
|
35
|
+
ref: any,
|
|
36
|
+
) {
|
|
37
|
+
const state = useContext(SelectorRadioGroupContext);
|
|
38
|
+
const localRef = useRef(null);
|
|
39
|
+
const { inputProps, isSelected, isDisabled } = useRadio({ ...props, value, children }, state, localRef);
|
|
40
|
+
const { isFocused, focusProps } = useFocusRing();
|
|
41
|
+
const styles = selectorRadioGroupOptionStyles({ className, isSelected, isFocused, isDisabled, checkIcon });
|
|
42
|
+
|
|
43
|
+
const FinalIcon = checkIcon === 'checkbox' ? TickIcon : ArrowRightIcon;
|
|
44
|
+
|
|
45
|
+
return (
|
|
46
|
+
<FlexiCell
|
|
47
|
+
after={
|
|
48
|
+
<div className="flex gap-2">
|
|
49
|
+
{after}
|
|
50
|
+
<FinalIcon aria-hidden="true" className={styles.icon({})} />
|
|
51
|
+
</div>
|
|
52
|
+
}
|
|
53
|
+
badge={badge}
|
|
54
|
+
badgeZIndex={badgeZIndex}
|
|
55
|
+
before={before}
|
|
56
|
+
body={body}
|
|
57
|
+
withBorder={withBorder}
|
|
58
|
+
withArrow={withArrow}
|
|
59
|
+
tag="label"
|
|
60
|
+
ref={ref}
|
|
61
|
+
className={styles.base({})}
|
|
62
|
+
withHoverEffect
|
|
63
|
+
>
|
|
64
|
+
<VisuallyHidden>
|
|
65
|
+
<input {...mergeProps(inputProps, focusProps)} ref={localRef} />
|
|
66
|
+
</VisuallyHidden>
|
|
67
|
+
{children}
|
|
68
|
+
</FlexiCell>
|
|
69
|
+
);
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
export const SelectorRadioGroupOption = forwardRef(BaseSelectorRadioGroupOption) as React.ForwardRefExoticComponent<
|
|
73
|
+
SelectorRadioGroupOptionProps & React.RefAttributes<unknown>
|
|
74
|
+
> & {
|
|
75
|
+
Adornment: typeof FlexiCell.Adornment;
|
|
76
|
+
Body: typeof FlexiCell.Body;
|
|
77
|
+
Button: typeof FlexiCell.Button;
|
|
78
|
+
Circle: typeof FlexiCell.Circle;
|
|
79
|
+
Footer: typeof FlexiCell.Footer;
|
|
80
|
+
Hint: typeof FlexiCell.Hint;
|
|
81
|
+
Label: typeof FlexiCell.Label;
|
|
82
|
+
};
|
|
83
|
+
|
|
84
|
+
SelectorRadioGroupOption.Body = FlexiCellBody;
|
|
85
|
+
SelectorRadioGroupOption.Footer = FlexiCellFooter;
|
|
86
|
+
SelectorRadioGroupOption.Adornment = FlexiCellAdornment;
|
|
87
|
+
SelectorRadioGroupOption.Hint = FlexiCellHint;
|
|
88
|
+
SelectorRadioGroupOption.Label = FlexiCellLabel;
|
|
89
|
+
SelectorRadioGroupOption.Button = FlexiCellButton;
|
|
90
|
+
SelectorRadioGroupOption.Circle = FlexiCellCircle;
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { tv } from 'tailwind-variants';
|
|
2
|
+
|
|
3
|
+
export const styles = tv(
|
|
4
|
+
{
|
|
5
|
+
slots: {
|
|
6
|
+
base: 'group/radio-option cursor-pointer',
|
|
7
|
+
icon: 'transition-transform',
|
|
8
|
+
},
|
|
9
|
+
variants: {
|
|
10
|
+
checkIcon: {
|
|
11
|
+
arrow: {
|
|
12
|
+
icon: 'text-primary group-hover/radio-option:translate-x-1',
|
|
13
|
+
},
|
|
14
|
+
checkbox: {},
|
|
15
|
+
},
|
|
16
|
+
isSelected: {
|
|
17
|
+
true: {
|
|
18
|
+
base: 'border-hero shadow-hero shadow-[0_0_0_2px_inset]',
|
|
19
|
+
},
|
|
20
|
+
false: {},
|
|
21
|
+
},
|
|
22
|
+
isFocused: {
|
|
23
|
+
true: {
|
|
24
|
+
base: 'focus-outline',
|
|
25
|
+
},
|
|
26
|
+
false: {},
|
|
27
|
+
},
|
|
28
|
+
isDisabled: {
|
|
29
|
+
true: {
|
|
30
|
+
base: 'opacity-50',
|
|
31
|
+
},
|
|
32
|
+
false: {},
|
|
33
|
+
},
|
|
34
|
+
},
|
|
35
|
+
compoundVariants: [
|
|
36
|
+
{
|
|
37
|
+
checkIcon: 'checkbox',
|
|
38
|
+
isSelected: false,
|
|
39
|
+
className: {
|
|
40
|
+
icon: 'opacity-0',
|
|
41
|
+
},
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
checkIcon: 'checkbox',
|
|
45
|
+
isSelected: true,
|
|
46
|
+
className: {
|
|
47
|
+
icon: 'opacity-100',
|
|
48
|
+
},
|
|
49
|
+
},
|
|
50
|
+
],
|
|
51
|
+
},
|
|
52
|
+
{ responsiveVariants: ['xsl', 'sm', 'md', 'lg', 'xl'] },
|
|
53
|
+
);
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { type HTMLAttributes } from 'react';
|
|
2
|
+
import { type AriaRadioProps } from 'react-aria';
|
|
3
|
+
import { type VariantProps } from 'tailwind-variants';
|
|
4
|
+
|
|
5
|
+
import { type FlexiCellProps } from '../../../../../../index.js';
|
|
6
|
+
|
|
7
|
+
import { styles } from './selector-radio-group-option.styles.js';
|
|
8
|
+
|
|
9
|
+
export type SelectorRadioGroupOptionProps = {
|
|
10
|
+
/**
|
|
11
|
+
* Check icon to render
|
|
12
|
+
*/
|
|
13
|
+
checkIcon?: 'checkbox' | 'arrow';
|
|
14
|
+
/**
|
|
15
|
+
* Tag to render
|
|
16
|
+
*/
|
|
17
|
+
tag?: keyof JSX.IntrinsicElements;
|
|
18
|
+
} & FlexiCellProps &
|
|
19
|
+
AriaRadioProps &
|
|
20
|
+
VariantProps<typeof styles> &
|
|
21
|
+
HTMLAttributes<Element>;
|
package/src/components/selector/components/selector-radio-group/selector-radio-group.component.tsx
ADDED
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import React, { createContext } from 'react';
|
|
2
|
+
import { useRadioGroup } from 'react-aria';
|
|
3
|
+
import { useRadioGroupState } from 'react-stately';
|
|
4
|
+
|
|
5
|
+
import { SelectorRadioGroupOption } from './components/index.js';
|
|
6
|
+
import { styles } from './selector-radio-group.styles.js';
|
|
7
|
+
import { type SelectorRadioGroupContextState, type SelectorRadioGroupProps } from './selector-radio-group.types.js';
|
|
8
|
+
|
|
9
|
+
export const SelectorRadioGroupContext = createContext<SelectorRadioGroupContextState>({
|
|
10
|
+
// TODO: Remove deprecated name prop once React Aria removes it from RadioGroupState
|
|
11
|
+
name: '',
|
|
12
|
+
isDisabled: false,
|
|
13
|
+
isReadOnly: false,
|
|
14
|
+
isRequired: false,
|
|
15
|
+
validationState: null,
|
|
16
|
+
selectedValue: null,
|
|
17
|
+
setSelectedValue: () => null,
|
|
18
|
+
lastFocusedValue: null,
|
|
19
|
+
setLastFocusedValue: () => null,
|
|
20
|
+
orientation: 'vertical',
|
|
21
|
+
});
|
|
22
|
+
|
|
23
|
+
export function SelectorRadioGroup({
|
|
24
|
+
className,
|
|
25
|
+
children,
|
|
26
|
+
label,
|
|
27
|
+
orientation = 'vertical',
|
|
28
|
+
errorMessage,
|
|
29
|
+
...props
|
|
30
|
+
}: SelectorRadioGroupProps) {
|
|
31
|
+
const state = useRadioGroupState({ ...props, errorMessage, label, orientation });
|
|
32
|
+
const { radioGroupProps, labelProps, errorMessageProps } = useRadioGroup({ ...props, label, orientation }, state);
|
|
33
|
+
|
|
34
|
+
return (
|
|
35
|
+
<div className={styles({ className, orientation })} {...radioGroupProps}>
|
|
36
|
+
<span {...labelProps}>{label}</span>
|
|
37
|
+
<SelectorRadioGroupContext.Provider value={{ ...state, orientation }}>
|
|
38
|
+
{children}
|
|
39
|
+
</SelectorRadioGroupContext.Provider>
|
|
40
|
+
{errorMessage && state.validationState === 'invalid' && (
|
|
41
|
+
<div {...errorMessageProps} className="typography-body-10 text-danger">
|
|
42
|
+
{errorMessage}
|
|
43
|
+
</div>
|
|
44
|
+
)}
|
|
45
|
+
</div>
|
|
46
|
+
);
|
|
47
|
+
}
|
|
48
|
+
SelectorRadioGroup.Option = SelectorRadioGroupOption;
|
package/src/components/selector/components/selector-radio-group/selector-radio-group.styles.ts
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { tv } from 'tailwind-variants';
|
|
2
|
+
|
|
3
|
+
export const styles = tv(
|
|
4
|
+
{
|
|
5
|
+
base: 'flex gap-2 md:gap-3',
|
|
6
|
+
variants: {
|
|
7
|
+
orientation: {
|
|
8
|
+
vertical: 'flex-col',
|
|
9
|
+
horizontal: 'flex-row',
|
|
10
|
+
},
|
|
11
|
+
},
|
|
12
|
+
},
|
|
13
|
+
{ responsiveVariants: ['xsl', 'sm', 'md', 'lg', 'xl'] },
|
|
14
|
+
);
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { type HTMLAttributes } from 'react';
|
|
2
|
+
import { type AriaRadioGroupProps } from 'react-aria';
|
|
3
|
+
import { type RadioGroupState } from 'react-stately';
|
|
4
|
+
import { type VariantProps } from 'tailwind-variants';
|
|
5
|
+
|
|
6
|
+
import { styles } from './selector-radio-group.styles.js';
|
|
7
|
+
|
|
8
|
+
export type SelectorRadioGroupProps = {
|
|
9
|
+
/**
|
|
10
|
+
* Tag to render
|
|
11
|
+
*/
|
|
12
|
+
tag?: keyof JSX.IntrinsicElements;
|
|
13
|
+
} & VariantProps<typeof styles> &
|
|
14
|
+
AriaRadioGroupProps &
|
|
15
|
+
Omit<HTMLAttributes<Element>, 'onChange'>;
|
|
16
|
+
|
|
17
|
+
export type SelectorRadioGroupContextState = {
|
|
18
|
+
/**
|
|
19
|
+
* Controls orientation of `Radio` components, can't be applied directly on `Radio`
|
|
20
|
+
*/
|
|
21
|
+
orientation: 'vertical' | 'horizontal';
|
|
22
|
+
} & RadioGroupState;
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
|
|
3
|
+
import {
|
|
4
|
+
FlexiCellAdornment,
|
|
5
|
+
FlexiCellBody,
|
|
6
|
+
FlexiCellButton,
|
|
7
|
+
FlexiCellCircle,
|
|
8
|
+
FlexiCellFooter,
|
|
9
|
+
FlexiCellHint,
|
|
10
|
+
FlexiCellLabel,
|
|
11
|
+
} from '../flexi-cell/components/index.js';
|
|
12
|
+
|
|
13
|
+
import { SelectorCheckboxGroup, SelectorRadioGroup } from './components/index.js';
|
|
14
|
+
import { SelectorCheckboxGroupOption } from './components/selector-checkbox-group/components/index.js';
|
|
15
|
+
import { SelectorRadioGroupOption } from './components/selector-radio-group/components/index.js';
|
|
16
|
+
import { type SelectorProps } from './selector.types.js';
|
|
17
|
+
|
|
18
|
+
// TODO: react-aria doesn't consider the click as focus. so the focusRing will appeared just with the tab.
|
|
19
|
+
export function Selector(props: SelectorProps) {
|
|
20
|
+
if (props.type === 'checkbox') {
|
|
21
|
+
return <SelectorCheckboxGroup {...props} />;
|
|
22
|
+
}
|
|
23
|
+
return <SelectorRadioGroup {...props} />;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
Selector.Radio = SelectorRadioGroupOption;
|
|
27
|
+
Selector.Checkbox = SelectorCheckboxGroupOption;
|
|
28
|
+
Selector.Body = FlexiCellBody;
|
|
29
|
+
Selector.Footer = FlexiCellFooter;
|
|
30
|
+
Selector.Adornment = FlexiCellAdornment;
|
|
31
|
+
Selector.Hint = FlexiCellHint;
|
|
32
|
+
Selector.Label = FlexiCellLabel;
|
|
33
|
+
Selector.Button = FlexiCellButton;
|
|
34
|
+
Selector.Circle = FlexiCellCircle;
|