Skip to content

Commit f5db4ef

Browse files
Merge branch 'support-slds-2' into support-slds-2-notification
2 parents 831dd05 + b513781 commit f5db4ef

File tree

6 files changed

+302
-222
lines changed

6 files changed

+302
-222
lines changed

src/scripts/DropdownButton.tsx

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -199,18 +199,25 @@ export const DropdownButton = (props: DropdownButtonProps) => {
199199
iconMore,
200200
}}
201201
{...rprops}
202-
aria-haspopup
202+
aria-haspopup={true}
203+
aria-expanded={opened}
203204
buttonRef={buttonRef}
204205
onClick={onTriggerClick}
205206
onKeyDown={onKeyDown}
206207
onBlur={onBlur}
207208
/>
208209
);
209210

210-
const dropdownClassNames = classnames(className, 'slds-dropdown-trigger', {
211-
'slds-button-space-left': !grouped,
212-
'react-slds-dropdown-opened': opened,
213-
});
211+
const dropdownClassNames = classnames(
212+
className,
213+
'slds-dropdown-trigger',
214+
'slds-dropdown-trigger_click',
215+
{
216+
'slds-m-left_xx-small': !grouped,
217+
'slds-is-open': opened,
218+
'react-slds-dropdown-opened': opened,
219+
}
220+
);
214221
const noneStyle = { display: 'none' };
215222

216223
return (

src/scripts/DropdownMenu.tsx

Lines changed: 41 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -44,13 +44,14 @@ export const DropdownMenuHeader: FC<DropdownMenuHeaderProps> = ({
4444
}) => {
4545
const menuHeaderClass = classnames(
4646
'slds-dropdown__header',
47+
'slds-truncate',
4748
divider ? `slds-has-divider_${divider}-space` : undefined,
4849
className
4950
);
5051
return (
51-
<div className={menuHeaderClass}>
52-
<span className='slds-text-heading_label'>{children}</span>
53-
</div>
52+
<li className={menuHeaderClass} role='presentation'>
53+
<span>{children}</span>
54+
</li>
5455
);
5556
};
5657

@@ -221,35 +222,45 @@ export const DropdownMenuItem: FC<DropdownMenuItemProps> = (props) => {
221222
const menuItemClass = classnames(
222223
'slds-dropdown__item',
223224
{ 'slds-is-selected': selected },
224-
divider ? `slds-has-divider_${divider}-space` : undefined,
225225
submenu ? 'slds-has-submenu' : undefined,
226226
className
227227
);
228228
return (
229-
<li className={menuItemClass}>
230-
<a
231-
role='menuitem'
232-
{...rprops}
233-
className='slds-truncate react-slds-menuitem'
234-
aria-disabled={disabled}
235-
aria-haspopup={submenu != null}
236-
aria-expanded={submenuExpanded}
237-
tabIndex={disabled ? undefined : tabIndex}
238-
onClick={disabled ? undefined : onMenuItemClick}
239-
onBlur={disabled ? undefined : onMenuItemBlur}
240-
onFocus={disabled ? undefined : onMenuItemFocus}
241-
onKeyDown={disabled ? undefined : onKeyDown}
242-
>
243-
<p className='slds-truncate'>
244-
{icon ? <Icon icon={icon} size='x-small' align='left' /> : null}
245-
{label || children}
246-
</p>
247-
{iconRight || submenu ? (
248-
<Icon icon={iconRight ?? 'right'} size='x-small' align='right' />
249-
) : null}
250-
</a>
251-
{submenu && submenuExpanded ? submenu : undefined}
252-
</li>
229+
<>
230+
{divider === 'top' ? (
231+
<li className={`slds-has-divider_${divider}-space`} role='separator' />
232+
) : null}
233+
<li className={menuItemClass} role='presentation'>
234+
<a
235+
role='menuitem'
236+
{...rprops}
237+
className='react-slds-menuitem'
238+
aria-disabled={disabled}
239+
aria-haspopup={submenu != null}
240+
aria-expanded={submenuExpanded}
241+
tabIndex={disabled ? undefined : tabIndex}
242+
onClick={disabled ? undefined : onMenuItemClick}
243+
onBlur={disabled ? undefined : onMenuItemBlur}
244+
onFocus={disabled ? undefined : onMenuItemFocus}
245+
onKeyDown={disabled ? undefined : onKeyDown}
246+
>
247+
<span
248+
className='slds-truncate'
249+
title={typeof label === 'string' ? label : undefined}
250+
>
251+
{icon ? <Icon icon={icon} size='x-small' align='left' /> : null}
252+
{label || children}
253+
</span>
254+
{iconRight || submenu ? (
255+
<Icon icon={iconRight ?? 'right'} size='x-small' align='right' />
256+
) : null}
257+
</a>
258+
{submenu && submenuExpanded ? submenu : undefined}
259+
</li>
260+
{divider === 'bottom' ? (
261+
<li className={`slds-has-divider_${divider}-space`} role='separator' />
262+
) : null}
263+
</>
253264
);
254265
};
255266

@@ -389,8 +400,8 @@ const DropdownMenuInner: FC<DropdownMenuProps & AutoAlignInjectedProps> = (
389400
onBlur={onBlur}
390401
{...rprops}
391402
>
392-
{header ? <MenuHeader>{header}</MenuHeader> : null}
393-
<ul className='slds-dropdown__list' role='menu'>
403+
<ul className='slds-dropdown__list' role='menu' aria-label={header}>
404+
{header ? <MenuHeader>{header}</MenuHeader> : null}
394405
<DropdownMenuHandlerContext.Provider value={handlers}>
395406
<OpenSubmenuContext.Provider
396407
value={{ openSubmenuKeys, handleSubmenuOpen }}

src/scripts/FieldSet.tsx

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -75,13 +75,19 @@ export const FieldSet = createFC<
7575
{ isFormElement: boolean; Row: typeof FieldSetRow }
7676
>(
7777
({ className, label, children, ...props }) => {
78-
const fsClassNames = classnames(className, 'slds-form_compound');
78+
const fsClassNames = classnames(
79+
className,
80+
'slds-form-element',
81+
'slds-form-element_compound'
82+
);
83+
const legendClassNames = classnames(
84+
'slds-form-element__legend',
85+
'slds-form-element__label'
86+
);
7987
return (
8088
<fieldset className={fsClassNames} {...props}>
81-
{label ? (
82-
<legend className='slds-form-element__label'>{label}</legend>
83-
) : null}
84-
<div className='form-element__group'>{children}</div>
89+
{label ? <legend className={legendClassNames}>{label}</legend> : null}
90+
<div className='slds-form-element__control'>{children}</div>
8591
</fieldset>
8692
);
8793
},

src/scripts/FormElement.tsx

Lines changed: 28 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,11 @@ import { TooltipContent } from './TooltipContent';
1818
export type FormElementProps = {
1919
id?: string;
2020
className?: string;
21+
controlId?: string;
2122
label?: string;
2223
required?: boolean;
2324
error?: boolean | string | { message: string };
25+
errorId?: string;
2426
readOnly?: boolean;
2527
cols?: number;
2628
dropdown?: JSX.Element;
@@ -42,11 +44,13 @@ export const FormElement = createFC<
4244
const {
4345
id,
4446
className,
47+
controlId,
4548
cols = 1,
4649
elementRef,
4750
label,
4851
required,
4952
error,
53+
errorId,
5054
dropdown,
5155
children,
5256
readOnly,
@@ -66,13 +70,9 @@ export const FormElement = createFC<
6670
: undefined
6771
: undefined;
6872

69-
const formElementControlClassNames = classnames(
70-
'slds-form-element__control',
71-
{ 'slds-has-divider_bottom': readOnly }
72-
);
73-
7473
const formElementClassNames = classnames(
7574
'slds-form-element',
75+
readOnly ? 'slds-form-element_readonly' : null,
7676
error ? 'slds-has-error' : null,
7777
typeof totalCols === 'number'
7878
? `slds-size_${cols}-of-${totalCols}`
@@ -91,31 +91,47 @@ export const FormElement = createFC<
9191

9292
const emptyCtx = useMemo(() => ({}), []);
9393

94+
const LabelTag = readOnly ? 'span' : 'label';
95+
9496
return (
9597
<FieldSetColumnContext.Provider value={emptyCtx}>
9698
<div ref={elementRef} className={formElementClassNames}>
9799
{label ? (
98-
<label
100+
<LabelTag
101+
id={id}
99102
className='slds-form-element__label'
100-
htmlFor={id}
103+
{...(LabelTag === 'label' ? { htmlFor: controlId } : {})}
101104
onClick={id ? undefined : onClickLabel}
102105
>
103106
{required ? (
104-
<abbr className='slds-required' title='required'>
107+
<abbr
108+
className='slds-required'
109+
title='required'
110+
aria-hidden='true'
111+
>
105112
*
106113
</abbr>
107114
) : undefined}
108115
{label}
109-
</label>
116+
</LabelTag>
110117
) : null}
111118
{tooltip ? (
112119
<TooltipContent icon={tooltipIcon}>{tooltip}</TooltipContent>
113120
) : null}
114-
<div ref={controlElRef} className={formElementControlClassNames}>
115-
{children}
121+
<div ref={controlElRef} className='slds-form-element__control'>
122+
{readOnly ? (
123+
<div className='slds-form-element__static'>{children}</div>
124+
) : (
125+
children
126+
)}
116127
{dropdown}
117128
{errorMessage ? (
118-
<span className='slds-form-element__help'>{errorMessage}</span>
129+
<span
130+
className='slds-form-element__help'
131+
id={error ? errorId : undefined}
132+
>
133+
{errorMessage}
134+
</span>
119135
) : undefined}
120136
</div>
121137
</div>

0 commit comments

Comments
 (0)