Skip to content

Commit 5b166d5

Browse files
committed
fixes from audit
1 parent 4efd535 commit 5b166d5

File tree

15 files changed

+103
-57
lines changed

15 files changed

+103
-57
lines changed

packages/@react-spectrum/s2/chromatic/Breadcrumbs.stories.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212

1313
import {Breadcrumb, Breadcrumbs} from '../src';
1414
import {generatePowerset} from '@react-spectrum/story-utils';
15-
import {Many} from '../stories/Breadcrumbs.stories';
15+
import {type IMany, Many} from '../stories/Breadcrumbs.stories';
1616
import type {Meta, StoryObj} from '@storybook/react';
1717
import {ReactNode} from 'react';
1818
import {shortName} from './utils';
@@ -27,7 +27,7 @@ const meta: Meta<typeof Breadcrumbs> = {
2727

2828
export default meta;
2929

30-
export const Dynamic: StoryObj<typeof Breadcrumbs> = {
30+
export const Dynamic: StoryObj<IMany> = {
3131
...Many,
3232
parameters: {
3333
// TODO: move these options back to meta above once we get strings for ar-AE. This is just to prevent the RTL story's config from actually applying

packages/@react-spectrum/s2/src/Breadcrumbs.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -62,9 +62,9 @@ interface BreadcrumbsStyleProps {
6262
// TODO: showRoot?: boolean,
6363
}
6464

65-
export interface BreadcrumbsProps<T> extends Omit<AriaBreadcrumbsProps<T>, 'children' | 'items' | 'style' | 'className' | keyof GlobalDOMAttributes>, BreadcrumbsStyleProps, StyleProps {
65+
export interface BreadcrumbsProps<T> extends Omit<AriaBreadcrumbsProps<T>, 'children' | 'style' | 'className' | keyof GlobalDOMAttributes>, BreadcrumbsStyleProps, StyleProps {
6666
/** The children of the Breadcrumbs. */
67-
children: ReactNode
67+
children: ReactNode | ((item: T) => ReactNode)
6868
}
6969

7070
export const BreadcrumbsContext = createContext<ContextValue<Partial<BreadcrumbsProps<any>>, DOMRefValue<HTMLOListElement>>>(null);

packages/@react-spectrum/s2/src/DatePicker.tsx

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,14 +20,15 @@ import {
2020
Dialog,
2121
FormContext,
2222
OverlayTriggerStateContext,
23+
PopoverProps,
2324
Provider,
2425
TimeValue
2526
} from 'react-aria-components';
2627
import {baseColor, focusRing, fontRelative, space, style} from '../style' with {type: 'macro'};
2728
import {Calendar, CalendarProps, IconContext, TimeField} from '../';
2829
import CalendarIcon from '../s2wf-icons/S2_Icon_Calendar_20_N.svg';
2930
import {controlBorderRadius, field, fieldInput, getAllowedOverrides, StyleProps} from './style-utils' with {type: 'macro'};
30-
import {createContext, forwardRef, PropsWithChildren, ReactElement, Ref, useContext, useRef, useState} from 'react';
31+
import {createContext, forwardRef, ReactElement, ReactNode, Ref, useContext, useRef, useState} from 'react';
3132
import {DateInput, DateInputContainer, InvalidIndicator} from './DateField';
3233
import {FieldGroup, FieldLabel, HelpText} from './Field';
3334
import {forwardRefType, GlobalDOMAttributes, HelpTextProps, SpectrumLabelableProps} from '@react-types/shared';
@@ -42,6 +43,7 @@ import {useSpectrumContextProps} from './useSpectrumContextProps';
4243
export interface DatePickerProps<T extends DateValue> extends
4344
Omit<AriaDatePickerProps<T>, 'children' | 'className' | 'style' | keyof GlobalDOMAttributes>,
4445
Pick<CalendarProps<T>, 'createCalendar' | 'pageBehavior' | 'firstDayOfWeek' | 'isDateUnavailable'>,
46+
Pick<PopoverProps, 'shouldFlip'>,
4547
StyleProps,
4648
SpectrumLabelableProps,
4749
HelpTextProps {
@@ -203,7 +205,7 @@ export const DatePicker = /*#__PURE__*/ (forwardRef as forwardRefType)(function
203205
<InvalidIndicator isInvalid={isInvalid} isDisabled={isDisabled} />
204206
<CalendarButton isOpen={isOpen} size={size} setButtonHasFocus={setButtonHasFocus} />
205207
</FieldGroup>
206-
<CalendarPopover>
208+
<CalendarPopover shouldFlip={props.shouldFlip}>
207209
<Calendar
208210
visibleMonths={maxVisibleMonths}
209211
createCalendar={createCalendar} />
@@ -238,9 +240,10 @@ export const DatePicker = /*#__PURE__*/ (forwardRef as forwardRefType)(function
238240
);
239241
});
240242

241-
export function CalendarPopover(props: PropsWithChildren): ReactElement {
243+
export function CalendarPopover(props: Omit<PopoverProps, 'children'> & {children: ReactNode}): ReactElement {
242244
return (
243245
<Popover
246+
{...props}
244247
hideArrow
245248
padding="none">
246249
<div

packages/@react-spectrum/s2/src/DateRangePicker.tsx

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,8 @@ import {
1515
DateRangePickerProps as AriaDateRangePickerProps,
1616
ContextValue,
1717
DateValue,
18-
FormContext
18+
FormContext,
19+
PopoverProps
1920
} from 'react-aria-components';
2021
import {CalendarButton, CalendarPopover, timeField} from './DatePicker';
2122
import {createContext, forwardRef, ReactElement, Ref, useContext, useState} from 'react';
@@ -34,6 +35,7 @@ import {useSpectrumContextProps} from './useSpectrumContextProps';
3435
export interface DateRangePickerProps<T extends DateValue> extends
3536
Omit<AriaDateRangePickerProps<T>, 'children' | 'className' | 'style' | keyof GlobalDOMAttributes>,
3637
Pick<RangeCalendarProps<T>, 'createCalendar' | 'pageBehavior' | 'firstDayOfWeek' | 'isDateUnavailable'>,
38+
Pick<PopoverProps, 'shouldFlip'>,
3739
StyleProps,
3840
SpectrumLabelableProps,
3941
HelpTextProps {
@@ -143,7 +145,7 @@ export const DateRangePicker = /*#__PURE__*/ (forwardRef as forwardRefType)(func
143145
<CalendarButton isOpen={isOpen} size={size} setButtonHasFocus={setButtonHasFocus} />
144146
</div>
145147
</FieldGroup>
146-
<CalendarPopover>
148+
<CalendarPopover shouldFlip={props.shouldFlip}>
147149
<RangeCalendar
148150
visibleMonths={maxVisibleMonths}
149151
createCalendar={createCalendar} />

packages/@react-spectrum/s2/src/Picker.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -675,7 +675,7 @@ function DefaultProvider({context, value, children}: {context: React.Context<any
675675
return <context.Provider value={value}>{children}</context.Provider>;
676676
}
677677

678-
export interface PickerSectionProps<T extends object> extends Omit<SectionProps<T>, keyof GlobalDOMAttributes> {}
678+
export interface PickerSectionProps<T extends object> extends Omit<SectionProps<T>, 'style' | 'className' | keyof GlobalDOMAttributes>, StyleProps {}
679679
export function PickerSection<T extends object>(props: PickerSectionProps<T>): ReactNode {
680680
let {size} = useContext(InternalPickerContext);
681681
return (

packages/@react-spectrum/s2/src/Provider.tsx

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,14 +13,16 @@
1313
import type {ColorScheme, Router} from '@react-types/provider';
1414
import {colorScheme, UnsafeStyles} from './style-utils' with {type: 'macro'};
1515
import {createContext, JSX, ReactNode, useContext} from 'react';
16+
import {DOMProps} from '@react-types/shared';
17+
import {filterDOMProps} from '@react-aria/utils';
1618
import {Fonts} from './Fonts';
1719
import {generateDefaultColorSchemeStyles} from './page.macro' with {type: 'macro'};
1820
import {I18nProvider, RouterProvider, useLocale} from 'react-aria-components';
1921
import {mergeStyles} from '../style/runtime';
2022
import {style} from '../style' with {type: 'macro'};
2123
import {StyleString} from '../style/types';
2224

23-
export interface ProviderProps extends UnsafeStyles {
25+
export interface ProviderProps extends UnsafeStyles, DOMProps {
2426
/** The content of the Provider. */
2527
children: ReactNode,
2628
/**
@@ -113,6 +115,7 @@ function ProviderInner(props: ProviderProps) {
113115
let {locale, direction} = useLocale();
114116
return (
115117
<Element
118+
{...filterDOMProps(props)}
116119
lang={locale}
117120
dir={direction}
118121
style={UNSAFE_style}

packages/@react-spectrum/s2/src/ToggleButtonGroup.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,10 +13,10 @@
1313
import {ActionButtonGroupProps, actionGroupStyle} from './ActionButtonGroup';
1414
import {ContextValue, ToggleButtonGroup as RACToggleButtonGroup, ToggleButtonGroupProps as RACToggleButtonGroupProps} from 'react-aria-components';
1515
import {createContext, ForwardedRef, forwardRef} from 'react';
16-
import {GlobalDOMAttributes} from '@react-types/shared';
16+
import {DOMProps, GlobalDOMAttributes} from '@react-types/shared';
1717
import {useSpectrumContextProps} from './useSpectrumContextProps';
1818

19-
export interface ToggleButtonGroupProps extends ActionButtonGroupProps, Omit<RACToggleButtonGroupProps, 'children' | 'style' | 'className' | keyof GlobalDOMAttributes> {
19+
export interface ToggleButtonGroupProps extends ActionButtonGroupProps, Omit<RACToggleButtonGroupProps, 'children' | 'style' | 'className' | keyof GlobalDOMAttributes>, DOMProps {
2020
/** Whether the button should be displayed with an [emphasized style](https://spectrum.adobe.com/page/action-button/#Emphasis). */
2121
isEmphasized?: boolean
2222
}

packages/@react-spectrum/s2/src/Tooltip.tsx

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ import {centerPadding, colorScheme, UnsafeStyles} from './style-utils' with {typ
2323
import {ColorScheme} from '@react-types/provider';
2424
import {ColorSchemeContext} from './Provider';
2525
import {createContext, forwardRef, MutableRefObject, ReactNode, useCallback, useContext, useState} from 'react';
26-
import {DOMRef, GlobalDOMAttributes} from '@react-types/shared';
26+
import {DOMProps, DOMRef, GlobalDOMAttributes} from '@react-types/shared';
2727
import {style} from '../style' with {type: 'macro'};
2828
import {useDOMRef} from '@react-spectrum/utils';
2929

@@ -35,10 +35,16 @@ export interface TooltipTriggerProps extends Omit<AriaTooltipTriggerComponentPro
3535
*
3636
* @default 'top'
3737
*/
38-
placement?: 'start' | 'end' | 'right' | 'left' | 'top' | 'bottom'
38+
placement?: 'start' | 'end' | 'right' | 'left' | 'top' | 'bottom',
39+
/**
40+
* The offset of the tooltip from the trigger.
41+
*
42+
* @default 4
43+
*/
44+
offset?: number
3945
}
4046

41-
export interface TooltipProps extends Omit<AriaTooltipProps, 'children' | 'className' | 'style' | 'triggerRef' | 'UNSTABLE_portalContainer' | 'isEntering' | 'isExiting' | 'placement' | 'containerPadding' | 'offset' | 'crossOffset' | 'shouldFlip' | 'arrowBoundaryOffset' | 'isOpen' | 'defaultOpen' | 'onOpenChange' | keyof GlobalDOMAttributes>, UnsafeStyles {
47+
export interface TooltipProps extends Omit<AriaTooltipProps, 'children' | 'className' | 'style' | 'triggerRef' | 'UNSTABLE_portalContainer' | 'isEntering' | 'isExiting' | 'placement' | 'containerPadding' | 'offset' | 'crossOffset' | 'shouldFlip' | 'arrowBoundaryOffset' | 'isOpen' | 'defaultOpen' | 'onOpenChange' | keyof GlobalDOMAttributes>, DOMProps, UnsafeStyles {
4248
/** The content of the tooltip. */
4349
children: ReactNode
4450
}
@@ -139,7 +145,7 @@ export const Tooltip = forwardRef(function Tooltip(props: TooltipProps, ref: DOM
139145
let {
140146
containerPadding,
141147
crossOffset,
142-
offset,
148+
offset = 4,
143149
placement = 'top',
144150
shouldFlip
145151
} = useContext(InternalTooltipTriggerContext);

packages/@react-spectrum/s2/stories/Breadcrumbs.stories.tsx

Lines changed: 39 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
*/
1212

1313
import {action} from '@storybook/addon-actions';
14-
import {Breadcrumb, Breadcrumbs} from '../src';
14+
import {Breadcrumb, Breadcrumbs, BreadcrumbsProps} from '../src';
1515
import type {Meta, StoryObj} from '@storybook/react';
1616

1717
const meta: Meta<typeof Breadcrumbs> = {
@@ -57,24 +57,31 @@ export const Example: Story = {
5757
)
5858
};
5959

60-
let items = [
60+
interface Item {
61+
id: string,
62+
name: string
63+
}
64+
let items: Item[] = [
6165
{id: 'home', name: 'Home'},
6266
{id: 'react-aria', name: 'React Aria'},
6367
{id: 'breadcrumbs', name: 'Breadcrumbs'}
6468
];
65-
export const WithActions: Story = {
66-
render: (args: any) => (
67-
<Breadcrumbs onAction={action('onAction')} items={items} {...args}>
68-
{item => (
69-
<Breadcrumb href={item.href}>
70-
{item.name}
71-
</Breadcrumb>
72-
)}
73-
</Breadcrumbs>
74-
)
69+
70+
const BreadcrumbsExampleDynamic = (args: BreadcrumbsProps<Item>) => (
71+
<Breadcrumbs onAction={action('onAction')} items={items} {...args}>
72+
{item => (
73+
<Breadcrumb>
74+
{item.name}
75+
</Breadcrumb>
76+
)}
77+
</Breadcrumbs>
78+
);
79+
80+
export const WithActions: StoryObj<typeof BreadcrumbsExampleDynamic> = {
81+
render: BreadcrumbsExampleDynamic
7582
};
7683

77-
let manyItems = [
84+
let manyItems: Item[] = [
7885
{id: 'Folder 1', name: 'The quick brown fox jumps over'},
7986
{id: 'Folder 2', name: 'My Documents'},
8087
{id: 'Folder 3', name: 'Kangaroos jump high'},
@@ -83,9 +90,9 @@ let manyItems = [
8390
{id: 'Folder 6', name: 'Wattle trees'},
8491
{id: 'Folder 7', name: 'April 7'}
8592
];
86-
87-
export const Many: Story = {
88-
render: (args: any) => (
93+
export type IMany = typeof BreadcrumbsExampleDynamic;
94+
export const Many: StoryObj<typeof BreadcrumbsExampleDynamic> = {
95+
render: (args: BreadcrumbsProps<Item>) => (
8996
<div style={{width: '400px', resize: 'horizontal', overflow: 'hidden', padding: '4px'}}>
9097
<Breadcrumbs items={manyItems} {...args}>
9198
{item => (
@@ -98,7 +105,10 @@ export const Many: Story = {
98105
)
99106
};
100107

101-
let manyItemsWithLinks = [
108+
interface ItemWithLink extends Item {
109+
href: string
110+
}
111+
let manyItemsWithLinks: ItemWithLink[] = [
102112
{id: 'Folder 1', name: 'The quick brown fox jumps over', href: '/folder1'},
103113
{id: 'Folder 2', name: 'My Documents', href: '/folder2'},
104114
{id: 'Folder 3', name: 'Kangaroos jump high', href: '/folder3'},
@@ -108,16 +118,16 @@ let manyItemsWithLinks = [
108118
{id: 'Folder 7', name: 'April 7', href: '/folder7'}
109119
];
110120

111-
export const ManyWithLinks: Story = {
112-
render: (args: any) => (
113-
<div style={{width: '400px', resize: 'horizontal', overflow: 'hidden', padding: '4px'}}>
114-
<Breadcrumbs items={manyItemsWithLinks} {...args}>
115-
{item => (
116-
<Breadcrumb href={item.href}>
117-
{item.name}
118-
</Breadcrumb>
119-
)}
120-
</Breadcrumbs>
121-
</div>
122-
)
121+
const BreadcrumbsExampleDynamicWithLinks = (args: BreadcrumbsProps<ItemWithLink>) => (
122+
<Breadcrumbs onAction={action('onAction')} items={manyItemsWithLinks} {...args}>
123+
{item => (
124+
<Breadcrumb href={item.href}>
125+
{item.name}
126+
</Breadcrumb>
127+
)}
128+
</Breadcrumbs>
129+
);
130+
131+
export const ManyWithLinks: StoryObj<typeof BreadcrumbsExampleDynamicWithLinks> = {
132+
render: BreadcrumbsExampleDynamicWithLinks
123133
};

packages/@react-spectrum/tree/test/TreeView.test.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -518,7 +518,7 @@ describe('Tree', () => {
518518
let rows = getAllByRole('row');
519519
expect(rows).toHaveLength(1);
520520

521-
expect(rows[0]).toHaveAttribute('aria-label', 'Test');
521+
expect(rows[0]).toHaveAttribute('aria-label', 'test row');
522522
});
523523

524524
describe('general interactions', () => {

0 commit comments

Comments
 (0)