Skip to content

Commit 2d3b48d

Browse files
authored
chore(S2): audit style macro utilities (#9544)
* export all utilities * export remaining utils * removed unsafe exports for now * add JSDoc descriptions * rename colorScheme() to setColorScheme() * remove raw/keyframes from s2 export * export WidthProperties and HeightProperties as types * cleanup JSDocs * add docs * lint * address review comments * extract docs from JSDoc * add imports to all examples * update styles->className in example * fix size in md output * add linearGradient * remove getAllowedOverrides from exports/docs (could have breaking changes) * remove WidthProperties/HeightProperties since we removed getAllowedOverrides export * address review comments * rename raw -> css
1 parent f187e3b commit 2d3b48d

29 files changed

Lines changed: 803 additions & 75 deletions

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,9 @@
1010
* governing permissions and limitations under the License.
1111
*/
1212

13+
import {css} from '../style/style-macro' with {type: 'macro'};
1314
import {CSSProperties, ReactNode} from 'react';
1415
import {mergeStyles} from '../style/runtime';
15-
import {raw} from '../style/style-macro' with {type: 'macro'};
1616
import {style} from '../style' with {type: 'macro'};
1717
import {StyleString} from '../style/types';
1818

@@ -39,7 +39,7 @@ export function CenterBaseline(props: CenterBaselineProps): ReactNode {
3939
);
4040
}
4141

42-
export const centerBaselineBefore = raw('&::before { content: "\u00a0"; width: 0; visibility: hidden }');
42+
export const centerBaselineBefore = css('&::before { content: "\u00a0"; width: 0; visibility: hidden }');
4343

4444
export function centerBaseline(props: Omit<CenterBaselineProps, 'children'> = {}): (icon: ReactNode) => ReactNode {
4545
return (icon: ReactNode) => <CenterBaseline {...props}>{icon}</CenterBaseline>;

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

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,6 @@ import {
2727
import {ButtonContext} from './Button';
2828
import {Card} from './Card';
2929
import {CheckboxContext} from './Checkbox';
30-
import {colorScheme, getAllowedOverrides, StyleProps} from './style-utils' with {type: 'macro'};
3130
import {ColorSchemeContext} from './Provider';
3231
import {ContentContext, FooterContext, KeyboardContext, TextContext} from './Content';
3332
import {
@@ -38,16 +37,17 @@ import {
3837
useContext,
3938
useRef
4039
} from 'react';
40+
import {css, keyframes} from '../style/style-macro' with {type: 'macro'};
4141
import {DividerContext} from './Divider';
4242
import {forwardRefType} from './types';
43+
import {getAllowedOverrides, StyleProps} from './style-utils' with {type: 'macro'};
4344
import {GlobalDOMAttributes} from '@react-types/shared';
4445
import {ImageContext} from './Image';
4546
import {ImageCoordinator} from './ImageCoordinator';
46-
import {keyframes, raw} from '../style/style-macro' with {type: 'macro'};
4747
import {mergeStyles} from '../style/runtime';
4848
import {PressResponder} from '@react-aria/interactions';
49+
import {setColorScheme, space, style} from '../style' with {type: 'macro'};
4950
import {SliderContext} from './Slider';
50-
import {space, style} from '../style' with {type: 'macro'};
5151
import {useId, useObjectRef, useOverlayTrigger} from 'react-aria';
5252
import {useLayoutEffect} from '@react-aria/utils';
5353
import {useMenuTriggerState} from 'react-stately';
@@ -106,7 +106,7 @@ const slideLeftKeyframes = keyframes(`
106106
`);
107107

108108
let popover = style({
109-
...colorScheme(),
109+
...setColorScheme(),
110110
'--s2-container-bg': {
111111
type: 'backgroundColor',
112112
value: 'layer-2'
@@ -474,7 +474,7 @@ const indicator = style({
474474
}
475475
});
476476

477-
const pulse = raw(`&:before { content: ""; display: inline-block; position: absolute; top: var(--borderOffset); bottom: var(--borderOffset); left: var(--borderOffset); right: var(--borderOffset); border-radius: var(--ringRadius); outline-style: solid; outline-color: var(--activeElement); outline-width: 4px; animation-duration: 2s; animation-iteration-count: infinite; animation-timing-function: ease-in-out; animation-fill-mode: forwards; animation-name: ${pulseAnimation}}`);
477+
const pulse = css(`&:before { content: ""; display: inline-block; position: absolute; top: var(--borderOffset); bottom: var(--borderOffset); left: var(--borderOffset); right: var(--borderOffset); border-radius: var(--ringRadius); outline-style: solid; outline-color: var(--activeElement); outline-width: 4px; animation-duration: 2s; animation-iteration-count: infinite; animation-timing-function: ease-in-out; animation-fill-mode: forwards; animation-name: ${pulseAnimation}}`);
478478

479479
interface CoachMarkIndicatorProps {
480480
children: ReactNode,

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,9 +36,8 @@ import {
3636
import {AsyncLoadable, GlobalDOMAttributes, HelpTextProps, LoadingState, SingleSelection, SpectrumLabelableProps} from '@react-types/shared';
3737
import {AvatarContext} from './Avatar';
3838
import {BaseCollection, CollectionNode, createLeafComponent} from '@react-aria/collections';
39-
import {baseColor, focusRing, space, style} from '../style' with {type: 'macro'};
39+
import {baseColor, centerPadding, focusRing, space, style} from '../style' with {type: 'macro'};
4040
import {centerBaseline} from './CenterBaseline';
41-
import {centerPadding, control, controlBorderRadius, controlFont, controlSize, field, fieldInput, getAllowedOverrides, StyleProps} from './style-utils' with {type: 'macro'};
4241
import {
4342
checkmark,
4443
description,
@@ -49,6 +48,7 @@ import {
4948
} from './Menu';
5049
import CheckmarkIcon from '../ui-icons/Checkmark';
5150
import ChevronIcon from '../ui-icons/Chevron';
51+
import {control, controlBorderRadius, controlFont, controlSize, field, fieldInput, getAllowedOverrides, StyleProps} from './style-utils' with {type: 'macro'};
5252
import {createContext, CSSProperties, ForwardedRef, forwardRef, ReactNode, Ref, useCallback, useContext, useEffect, useImperativeHandle, useMemo, useRef, useState} from 'react';
5353
import {createFocusableRef} from '@react-spectrum/utils';
5454
import {edgeToText} from '../style/spectrum-theme' with {type: 'macro'};

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

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

1313
import {ActionButtonContext} from './ActionButton';
1414
import {AriaLabelingProps, DOMProps, DOMRef, DOMRefValue, forwardRefType, GlobalDOMAttributes} from '@react-types/shared';
15-
import {baseColor, focusRing, lightDark, space, style} from '../style' with { type: 'macro' };
15+
import {baseColor, centerPadding, focusRing, lightDark, space, style} from '../style' with { type: 'macro' };
1616
import {Button, ContextValue, DisclosureStateContext, Heading, Provider, Disclosure as RACDisclosure, DisclosurePanel as RACDisclosurePanel, DisclosurePanelProps as RACDisclosurePanelProps, DisclosureProps as RACDisclosureProps, useLocale, useSlottedContext} from 'react-aria-components';
1717
import {CenterBaseline} from './CenterBaseline';
18-
import {centerPadding, getAllowedOverrides, StyleProps, UnsafeStyles} from './style-utils' with { type: 'macro' };
1918
import Chevron from '../ui-icons/Chevron';
2019
import {filterDOMProps} from '@react-aria/utils';
20+
import {getAllowedOverrides, StyleProps, UnsafeStyles} from './style-utils' with {type: 'macro'};
2121
import React, {createContext, forwardRef, ReactNode, useContext} from 'react';
2222
import {useDOMRef} from '@react-spectrum/utils';
2323
import {useSpectrumContextProps} from './useSpectrumContextProps';

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,12 +28,12 @@ import {
2828
Separator,
2929
SeparatorProps
3030
} from 'react-aria-components';
31-
import {baseColor, focusRing, fontRelative, size, space, style} from '../style' with {type: 'macro'};
31+
import {baseColor, centerPadding, focusRing, fontRelative, size, space, style} from '../style' with {type: 'macro'};
3232
import {box, iconStyles} from './Checkbox';
3333
import {centerBaseline} from './CenterBaseline';
34-
import {centerPadding, control, controlFont, controlSize, getAllowedOverrides, StyleProps} from './style-utils' with {type: 'macro'};
3534
import CheckmarkIcon from '../ui-icons/Checkmark';
3635
import ChevronRightIcon from '../ui-icons/Chevron';
36+
import {control, controlFont, controlSize, getAllowedOverrides, StyleProps} from './style-utils' with {type: 'macro'};
3737
import {createContext, forwardRef, JSX, ReactElement, ReactNode, useContext, useRef, useState} from 'react';
3838
import {divider} from './Divider';
3939
import {DOMRef, DOMRefValue, GlobalDOMAttributes, PressEvent} from '@react-types/shared';

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

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,12 +10,11 @@
1010
* governing permissions and limitations under the License.
1111
*/
1212

13-
import {colorScheme} from './style-utils' with {type: 'macro'};
1413
import {ColorSchemeContext} from './Provider';
1514
import {DOMRef, GlobalDOMAttributes} from '@react-types/shared';
1615
import {forwardRef, MutableRefObject, useCallback, useContext} from 'react';
1716
import {ModalOverlay, ModalOverlayProps, Modal as RACModal, useLocale} from 'react-aria-components';
18-
import {style} from '../style' with {type: 'macro'};
17+
import {setColorScheme, style} from '../style' with {type: 'macro'};
1918
import {useDOMRef} from '@react-spectrum/utils';
2019

2120
interface ModalProps extends Omit<ModalOverlayProps, 'className' | 'style' | 'render' | keyof GlobalDOMAttributes> {
@@ -28,7 +27,7 @@ interface ModalProps extends Omit<ModalOverlayProps, 'className' | 'style' | 're
2827
}
2928

3029
const modalOverlayStyles = style({
31-
...colorScheme(),
30+
...setColorScheme(),
3231
position: 'absolute',
3332
top: 0,
3433
left: 0,

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@ import ChevronIcon from '../ui-icons/Chevron';
5252
import {control, controlBorderRadius, controlFont, field, fieldInput, getAllowedOverrides, StyleProps} from './style-utils' with {type: 'macro'};
5353
import {createHideableComponent} from '@react-aria/collections';
5454
import {createShadowTreeWalker, getOwnerDocument, isFocusable, useGlobalListeners, useSlotId} from '@react-aria/utils';
55+
import {css} from '../style/style-macro' with {type: 'macro'};
5556
import {
5657
Divider,
5758
listbox,
@@ -77,7 +78,6 @@ import {Popover} from './Popover';
7778
import {PressResponder} from '@react-aria/interactions';
7879
import {pressScale} from './pressScale';
7980
import {ProgressCircle} from './ProgressCircle';
80-
import {raw} from '../style/style-macro' with {type: 'macro'};
8181
import React, {createContext, forwardRef, ReactNode, useContext, useEffect, useMemo, useRef, useState} from 'react';
8282
import {useFocusableRef} from '@react-spectrum/utils';
8383
import {useLocale, useLocalizedStringFormatter} from '@react-aria/i18n';
@@ -584,7 +584,7 @@ const PickerButton = createHideableComponent(function PickerButton<T extends obj
584584
<SelectValue
585585
className={
586586
valueStyles({isQuiet}) +
587-
(renderValue ? '' : ' ' + raw('&> :not([slot=icon], [slot=avatar], [slot=label], [data-slot=label]) {display: none;}'))
587+
(renderValue ? '' : ' ' + css('&> :not([slot=icon], [slot=avatar], [slot=label], [data-slot=label]) {display: none;}'))
588588
}>
589589
{({selectedItems, defaultChildren}) => {
590590
const selectedValues = selectedItems.filter((item): item is T => item != null);

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,11 +20,11 @@ import {
2020
OverlayTriggerStateContext,
2121
useLocale
2222
} from 'react-aria-components';
23-
import {colorScheme, getAllowedOverrides, heightProperties, UnsafeStyles, widthProperties} from './style-utils' with {type: 'macro'};
2423
import {ColorSchemeContext} from './Provider';
2524
import {createContext, ForwardedRef, forwardRef, ReactNode, useCallback, useContext, useMemo} from 'react';
2625
import {DOMRef, DOMRefValue, GlobalDOMAttributes} from '@react-types/shared';
27-
import {lightDark, style} from '../style' with {type: 'macro'};
26+
import {getAllowedOverrides, heightProperties, UnsafeStyles, widthProperties} from './style-utils' with {type: 'macro'};
27+
import {lightDark, setColorScheme, style} from '../style' with {type: 'macro'};
2828
import {mergeRefs} from '@react-aria/utils';
2929
import {mergeStyles} from '../style/runtime';
3030
import {StyleString} from '../style/types' with {type: 'macro'};
@@ -62,7 +62,7 @@ export interface PopoverProps extends UnsafeStyles, Omit<AriaPopoverProps,
6262
}
6363

6464
let popover = style({
65-
...colorScheme(),
65+
...setColorScheme(),
6666
'--s2-container-bg': {
6767
type: 'backgroundColor',
6868
value: {

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

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

1313
import type {ColorScheme, Router} from '@react-types/provider';
14-
import {colorScheme, UnsafeStyles} from './style-utils' with {type: 'macro'};
1514
import {createContext, JSX, ReactNode, useContext} from 'react';
1615
import {DOMProps} from '@react-types/shared';
1716
import {filterDOMProps} from '@react-aria/utils';
1817
import {Fonts} from './Fonts';
1918
import {generateDefaultColorSchemeStyles} from './page.macro' with {type: 'macro'};
2019
import {I18nProvider, RouterProvider, useLocale} from 'react-aria-components';
2120
import {mergeStyles} from '../style/runtime';
22-
import {style} from '../style' with {type: 'macro'};
21+
import {setColorScheme, style} from '../style' with {type: 'macro'};
2322
import {StyleString} from '../style/types';
23+
import {UnsafeStyles} from './style-utils' with {type: 'macro'};
2424

2525
export interface ProviderProps extends UnsafeStyles, DOMProps {
2626
/** The content of the Provider. */
@@ -77,7 +77,7 @@ export function Provider(props: ProviderProps): JSX.Element {
7777
generateDefaultColorSchemeStyles();
7878

7979
let providerStyles = style({
80-
...colorScheme(),
80+
...setColorScheme(),
8181
'--s2-container-bg': {
8282
type: 'backgroundColor',
8383
value: {

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,12 +22,12 @@ import {centerBaseline} from './CenterBaseline';
2222
import {ClearButton} from './ClearButton';
2323
import {createContext, forwardRef, Ref, useContext, useImperativeHandle, useRef} from 'react';
2424
import {createFocusableRef} from '@react-spectrum/utils';
25+
import {css} from '../style/style-macro' with {type: 'macro'};
2526
import {field, getAllowedOverrides, StyleProps} from './style-utils' with {type: 'macro'};
2627
import {FieldGroup, FieldLabel, HelpText, Input} from './Field';
2728
import {FormContext, useFormProps} from './Form';
2829
import {GlobalDOMAttributes, HelpTextProps, SpectrumLabelableProps} from '@react-types/shared';
2930
import {IconContext} from './Icon';
30-
import {raw} from '../style/style-macro' with {type: 'macro'};
3131
import SearchIcon from '../s2wf-icons/S2_Icon_Search_20_N.svg';
3232
import {TextFieldRef} from '@react-types/textfield';
3333
import {useSpectrumContextProps} from './useSpectrumContextProps';
@@ -142,7 +142,7 @@ export const SearchField = /*#__PURE__*/ forwardRef(function SearchField(props:
142142
]}>
143143
<SearchIcon />
144144
</Provider>
145-
<Input ref={inputRef} UNSAFE_className={raw('&::-webkit-search-cancel-button { display: none }')} />
145+
<Input ref={inputRef} UNSAFE_className={css('&::-webkit-search-cancel-button { display: none }')} />
146146
{!isEmpty && !searchFieldProps.isReadOnly && <ClearButton size={props.size} />}
147147
</FieldGroup>
148148
<HelpText

0 commit comments

Comments
 (0)