@react-spectrum/button 3.0.0-nightly.2925 → 3.0.0-nightly.2928
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/Button.main.js +10 -1
 - package/dist/Button.main.js.map +1 -1
 - package/dist/Button.mjs +10 -1
 - package/dist/Button.module.js +10 -1
 - package/dist/Button.module.js.map +1 -1
 - package/dist/types.d.ts.map +1 -1
 - package/package.json +16 -16
 - package/src/Button.tsx +14 -1
 
    
        package/dist/Button.main.js
    CHANGED
    
    | 
         @@ -112,12 +112,21 @@ function $842a195ed1671b15$var$Button(props, ref) { 
     | 
|
| 
       112 
112 
     | 
    
         
             
                const isPendingAriaLiveLabelledby = hasAriaLabel ? (_buttonProps_arialabelledby_replace = (_buttonProps_arialabelledby = buttonProps['aria-labelledby']) === null || _buttonProps_arialabelledby === void 0 ? void 0 : _buttonProps_arialabelledby.replace(buttonId, spinnerId)) !== null && _buttonProps_arialabelledby_replace !== void 0 ? _buttonProps_arialabelledby_replace : spinnerId : `${hasIcon ? iconId : ''} ${hasLabel ? textId : ''} ${spinnerId}`.trim();
         
     | 
| 
       113 
113 
     | 
    
         
             
                let ariaLive = 'polite';
         
     | 
| 
       114 
114 
     | 
    
         
             
                if ((0, $hN0b7$reactariautils.isAppleDevice)() && (!hasAriaLabel || (0, $hN0b7$reactariautils.isFirefox)())) ariaLive = 'off';
         
     | 
| 
      
 115 
     | 
    
         
            +
                let isPendingProps = isPending ? {
         
     | 
| 
      
 116 
     | 
    
         
            +
                    onClick: (e)=>{
         
     | 
| 
      
 117 
     | 
    
         
            +
                        if (e.currentTarget instanceof HTMLButtonElement) e.preventDefault();
         
     | 
| 
      
 118 
     | 
    
         
            +
                    }
         
     | 
| 
      
 119 
     | 
    
         
            +
                } : {
         
     | 
| 
      
 120 
     | 
    
         
            +
                    // no-op. 
         
     | 
| 
      
 121 
     | 
    
         
            +
                    // Not sure why, but TypeScript wouldn't allow to have an empty object `{}`.
         
     | 
| 
      
 122 
     | 
    
         
            +
                    onClick: ()=>{}
         
     | 
| 
      
 123 
     | 
    
         
            +
                };
         
     | 
| 
       115 
124 
     | 
    
         
             
                return /*#__PURE__*/ (0, ($parcel$interopDefault($hN0b7$react))).createElement((0, $hN0b7$reactariafocus.FocusRing), {
         
     | 
| 
       116 
125 
     | 
    
         
             
                    focusRingClass: (0, $hN0b7$reactspectrumutils.classNames)((0, ($parcel$interopDefault($afc5a4514aca2340$exports))), 'focus-ring'),
         
     | 
| 
       117 
126 
     | 
    
         
             
                    autoFocus: autoFocus
         
     | 
| 
       118 
127 
     | 
    
         
             
                }, /*#__PURE__*/ (0, ($parcel$interopDefault($hN0b7$react))).createElement(Element, {
         
     | 
| 
       119 
128 
     | 
    
         
             
                    ...styleProps,
         
     | 
| 
       120 
     | 
    
         
            -
                    ...(0, $hN0b7$reactariautils.mergeProps)(buttonProps, hoverProps, focusProps),
         
     | 
| 
      
 129 
     | 
    
         
            +
                    ...(0, $hN0b7$reactariautils.mergeProps)(buttonProps, hoverProps, focusProps, isPendingProps),
         
     | 
| 
       121 
130 
     | 
    
         
             
                    id: buttonId,
         
     | 
| 
       122 
131 
     | 
    
         
             
                    ref: domRef,
         
     | 
| 
       123 
132 
     | 
    
         
             
                    "data-variant": variant,
         
     | 
    
        package/dist/Button.main.js.map
    CHANGED
    
    | 
         @@ -1 +1 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            {"mappings":"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","sources":["packages/@react-spectrum/button/src/Button.tsx"],"sourcesContent":["/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {\n  classNames,\n  SlotProvider,\n  useFocusableRef,\n  useHasChild,\n  useSlotProps,\n  useStyleProps\n} from '@react-spectrum/utils';\nimport {FocusableRef} from '@react-types/shared';\nimport {FocusRing} from '@react-aria/focus';\n// @ts-ignore\nimport intlMessages from '../intl/*.json';\nimport {isAppleDevice, isFirefox, mergeProps, useId} from '@react-aria/utils';\nimport {ProgressCircle} from '@react-spectrum/progress';\nimport React, {ElementType, ReactElement, useEffect, useState} from 'react';\nimport {SpectrumButtonProps} from '@react-types/button';\nimport styles from '@adobe/spectrum-css-temp/components/button/vars.css';\nimport {Text} from '@react-spectrum/text';\nimport {useButton} from '@react-aria/button';\nimport {useFocus, useHover} from '@react-aria/interactions';\nimport {useLocalizedStringFormatter} from '@react-aria/i18n';\nimport {useProviderProps} from '@react-spectrum/provider';\n\nfunction disablePendingProps(props) {\n  // Don't allow interaction while isPending is true\n  if (props.isPending) {\n    props.onPress = undefined;\n    props.onPressStart = undefined;\n    props.onPressEnd = undefined;\n    props.onPressChange = undefined;\n    props.onPressUp = undefined;\n    props.onKeyDown = undefined;\n    props.onKeyUp = undefined;\n    props.onClick = undefined;\n    props.href = undefined;\n  }\n  return props;\n}\n\nfunction Button<T extends ElementType = 'button'>(props: SpectrumButtonProps<T>, ref: FocusableRef<HTMLElement>) {\n  props = useProviderProps(props);\n  props = useSlotProps(props, 'button');\n  props = disablePendingProps(props);\n  let {\n    elementType: Element = 'button',\n    children,\n    variant,\n    style = variant === 'accent' || variant === 'cta' ? 'fill' : 'outline',\n    staticColor,\n    isDisabled,\n    isPending,\n    autoFocus,\n    ...otherProps\n  } = props;\n  let domRef = useFocusableRef(ref);\n  let {buttonProps, isPressed} = useButton(props, domRef);\n  let {hoverProps, isHovered} = useHover({isDisabled});\n  let [isFocused, onFocusChange] = useState(false);\n  let {focusProps} = useFocus({onFocusChange, isDisabled});\n  let stringFormatter = useLocalizedStringFormatter(intlMessages, '@react-spectrum/button');\n  let {styleProps} = useStyleProps(otherProps);\n  let hasLabel = useHasChild(`.${styles['spectrum-Button-label']}`, domRef);\n  let hasIcon = useHasChild(`.${styles['spectrum-Icon']}`, domRef);\n  // an aria label will block children and their labels from being read, this is undesirable for pending state\n  let hasAriaLabel = !!buttonProps['aria-label'] || !!buttonProps['aria-labelledby'];\n  let [isProgressVisible, setIsProgressVisible] = useState(false);\n  let backupButtonId = useId();\n  let buttonId = buttonProps.id || backupButtonId;\n  let iconId = useId();\n  let textId = useId();\n  let spinnerId = useId();\n\n  useEffect(() => {\n    let timeout: ReturnType<typeof setTimeout>;\n\n    if (isPending) {\n      // Start timer when isPending is set to true.\n      timeout = setTimeout(() => {\n        setIsProgressVisible(true);\n      }, 1000);\n    } else {\n      // Exit loading state when isPending is set to false. */\n      setIsProgressVisible(false);\n    }\n    return () => {\n      // Clean up on unmount or when user removes isPending prop before entering loading state.\n      clearTimeout(timeout);\n    };\n  }, [isPending]);\n\n  if (variant === 'cta') {\n    variant = 'accent';\n  } else if (variant === 'overBackground') {\n    variant = 'primary';\n    staticColor = 'white';\n  }\n\n  const isPendingAriaLiveLabel = `${hasAriaLabel ? buttonProps['aria-label'] : ''} ${stringFormatter.format('pending')}`.trim();\n  const isPendingAriaLiveLabelledby = hasAriaLabel ? (buttonProps['aria-labelledby']?.replace(buttonId, spinnerId) ?? spinnerId) : `${hasIcon ? iconId : ''} ${hasLabel ? textId : ''} ${spinnerId}`.trim();\n\n  let ariaLive: 'off' | 'polite' | 'assertive' = 'polite';\n  if (isAppleDevice() && (!hasAriaLabel || isFirefox())) {\n    ariaLive = 'off';\n  }\n  return (\n    <FocusRing focusRingClass={classNames(styles, 'focus-ring')} autoFocus={autoFocus}>\n      <Element\n        {...styleProps}\n        {...mergeProps(buttonProps, hoverProps, focusProps)}\n        id={buttonId}\n        ref={domRef}\n        data-variant={variant}\n        data-style={style}\n        data-static-color={staticColor || undefined}\n        aria-disabled={isPending ? 'true' : undefined}\n        aria-label={isPending ? isPendingAriaLiveLabel : buttonProps['aria-label']}\n        aria-labelledby={isPending ? isPendingAriaLiveLabelledby : buttonProps['aria-labelledby']}\n        className={\n          classNames(\n            styles,\n            'spectrum-Button',\n            {\n              'spectrum-Button--iconOnly': hasIcon && !hasLabel,\n              'is-disabled': isDisabled || isProgressVisible,\n              'is-active': isPressed,\n              'is-hovered': isHovered,\n              'spectrum-Button--pending': isProgressVisible\n            },\n            styleProps.className\n          )\n        }>\n        <SlotProvider\n          slots={{\n            icon: {\n              id: iconId,\n              size: 'S',\n              UNSAFE_className: classNames(styles, 'spectrum-Icon')\n            },\n            text: {\n              id: textId,\n              UNSAFE_className: classNames(styles, 'spectrum-Button-label')\n            }\n          }}>\n          {typeof children === 'string'\n            ? <Text>{children}</Text>\n            : children}\n          {isPending && (\n            <div\n              aria-hidden=\"true\"\n              style={{visibility: isProgressVisible ? 'visible' : 'hidden'}}\n              className={classNames(styles, 'spectrum-Button-circleLoader')}>\n              <ProgressCircle\n                aria-label={isPendingAriaLiveLabel}\n                isIndeterminate\n                size=\"S\"\n                staticColor={staticColor} />\n            </div>\n          )}\n          {isPending &&\n            <>\n              <div aria-live={isFocused ? ariaLive : 'off'}>\n                {isProgressVisible &&\n                  <div role=\"img\" aria-labelledby={isPendingAriaLiveLabelledby} />\n                }\n              </div>\n              {/* Adding the element here with the same labels as the button itself causes aria-live to pick up the change in Safari.\n              Safari with VO unfortunately doesn't announce changes to *all* of its labels specifically for button\n              https://a11ysupport.io/tests/tech__html__button-name-change#assertion-aria-aria-label_attribute-convey_name_change-html-button_element-vo_macos-safari\n              The aria-live may cause extra announcements in other browsers. */}\n              <div id={spinnerId} role=\"img\" aria-label={isPendingAriaLiveLabel} />\n            </>\n          }\n        </SlotProvider>\n      </Element>\n    </FocusRing>\n  );\n}\n\n/**\n * Buttons allow users to perform an action or to navigate to another page.\n * They have multiple styles for various needs, and are ideal for calling attention to\n * where a user needs to do something in order to move forward in a flow.\n */\nlet _Button = React.forwardRef(Button) as <T extends ElementType = 'button'>(props: SpectrumButtonProps<T> & {ref?: FocusableRef<HTMLElement>}) => ReactElement;\nexport {_Button as Button};\n"],"names":[],"version":3,"file":"Button.main.js.map"}
         
     | 
| 
      
 1 
     | 
    
         
            +
            {"mappings":"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","sources":["packages/@react-spectrum/button/src/Button.tsx"],"sourcesContent":["/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {\n  classNames,\n  SlotProvider,\n  useFocusableRef,\n  useHasChild,\n  useSlotProps,\n  useStyleProps\n} from '@react-spectrum/utils';\nimport {FocusableRef} from '@react-types/shared';\nimport {FocusRing} from '@react-aria/focus';\n// @ts-ignore\nimport intlMessages from '../intl/*.json';\nimport {isAppleDevice, isFirefox, mergeProps, useId} from '@react-aria/utils';\nimport {ProgressCircle} from '@react-spectrum/progress';\nimport React, {ElementType, ReactElement, useEffect, useState} from 'react';\nimport {SpectrumButtonProps} from '@react-types/button';\nimport styles from '@adobe/spectrum-css-temp/components/button/vars.css';\nimport {Text} from '@react-spectrum/text';\nimport {useButton} from '@react-aria/button';\nimport {useFocus, useHover} from '@react-aria/interactions';\nimport {useLocalizedStringFormatter} from '@react-aria/i18n';\nimport {useProviderProps} from '@react-spectrum/provider';\n\nfunction disablePendingProps(props) {\n  // Don't allow interaction while isPending is true\n  if (props.isPending) {\n    props.onPress = undefined;\n    props.onPressStart = undefined;\n    props.onPressEnd = undefined;\n    props.onPressChange = undefined;\n    props.onPressUp = undefined;\n    props.onKeyDown = undefined;\n    props.onKeyUp = undefined;\n    props.onClick = undefined;\n    props.href = undefined;\n  }\n  return props;\n}\n\nfunction Button<T extends ElementType = 'button'>(props: SpectrumButtonProps<T>, ref: FocusableRef<HTMLElement>) {\n  props = useProviderProps(props);\n  props = useSlotProps(props, 'button');\n  props = disablePendingProps(props);\n  let {\n    elementType: Element = 'button',\n    children,\n    variant,\n    style = variant === 'accent' || variant === 'cta' ? 'fill' : 'outline',\n    staticColor,\n    isDisabled,\n    isPending,\n    autoFocus,\n    ...otherProps\n  } = props;\n  let domRef = useFocusableRef(ref);\n  let {buttonProps, isPressed} = useButton(props, domRef);\n  let {hoverProps, isHovered} = useHover({isDisabled});\n  let [isFocused, onFocusChange] = useState(false);\n  let {focusProps} = useFocus({onFocusChange, isDisabled});\n  let stringFormatter = useLocalizedStringFormatter(intlMessages, '@react-spectrum/button');\n  let {styleProps} = useStyleProps(otherProps);\n  let hasLabel = useHasChild(`.${styles['spectrum-Button-label']}`, domRef);\n  let hasIcon = useHasChild(`.${styles['spectrum-Icon']}`, domRef);\n  // an aria label will block children and their labels from being read, this is undesirable for pending state\n  let hasAriaLabel = !!buttonProps['aria-label'] || !!buttonProps['aria-labelledby'];\n  let [isProgressVisible, setIsProgressVisible] = useState(false);\n  let backupButtonId = useId();\n  let buttonId = buttonProps.id || backupButtonId;\n  let iconId = useId();\n  let textId = useId();\n  let spinnerId = useId();\n\n  useEffect(() => {\n    let timeout: ReturnType<typeof setTimeout>;\n\n    if (isPending) {\n      // Start timer when isPending is set to true.\n      timeout = setTimeout(() => {\n        setIsProgressVisible(true);\n      }, 1000);\n    } else {\n      // Exit loading state when isPending is set to false. */\n      setIsProgressVisible(false);\n    }\n    return () => {\n      // Clean up on unmount or when user removes isPending prop before entering loading state.\n      clearTimeout(timeout);\n    };\n  }, [isPending]);\n\n  if (variant === 'cta') {\n    variant = 'accent';\n  } else if (variant === 'overBackground') {\n    variant = 'primary';\n    staticColor = 'white';\n  }\n\n  const isPendingAriaLiveLabel = `${hasAriaLabel ? buttonProps['aria-label'] : ''} ${stringFormatter.format('pending')}`.trim();\n  const isPendingAriaLiveLabelledby = hasAriaLabel ? (buttonProps['aria-labelledby']?.replace(buttonId, spinnerId) ?? spinnerId) : `${hasIcon ? iconId : ''} ${hasLabel ? textId : ''} ${spinnerId}`.trim();\n\n  let ariaLive: 'off' | 'polite' | 'assertive' = 'polite';\n  if (isAppleDevice() && (!hasAriaLabel || isFirefox())) {\n    ariaLive = 'off';\n  }\n\n  let isPendingProps = isPending ? {\n    onClick: (e) => {\n      if (e.currentTarget instanceof HTMLButtonElement) {\n        e.preventDefault();\n      }\n    }\n  } : {\n    // no-op. \n    // Not sure why, but TypeScript wouldn't allow to have an empty object `{}`.\n    onClick: () => {}\n  };\n\n  return (\n    <FocusRing focusRingClass={classNames(styles, 'focus-ring')} autoFocus={autoFocus}>\n      <Element\n        {...styleProps}\n        {...mergeProps(buttonProps, hoverProps, focusProps, isPendingProps)}\n        id={buttonId}\n        ref={domRef}\n        data-variant={variant}\n        data-style={style}\n        data-static-color={staticColor || undefined}\n        aria-disabled={isPending ? 'true' : undefined}\n        aria-label={isPending ? isPendingAriaLiveLabel : buttonProps['aria-label']}\n        aria-labelledby={isPending ? isPendingAriaLiveLabelledby : buttonProps['aria-labelledby']}\n        className={\n          classNames(\n            styles,\n            'spectrum-Button',\n            {\n              'spectrum-Button--iconOnly': hasIcon && !hasLabel,\n              'is-disabled': isDisabled || isProgressVisible,\n              'is-active': isPressed,\n              'is-hovered': isHovered,\n              'spectrum-Button--pending': isProgressVisible\n            },\n            styleProps.className\n          )\n        }>\n        <SlotProvider\n          slots={{\n            icon: {\n              id: iconId,\n              size: 'S',\n              UNSAFE_className: classNames(styles, 'spectrum-Icon')\n            },\n            text: {\n              id: textId,\n              UNSAFE_className: classNames(styles, 'spectrum-Button-label')\n            }\n          }}>\n          {typeof children === 'string'\n            ? <Text>{children}</Text>\n            : children}\n          {isPending && (\n            <div\n              aria-hidden=\"true\"\n              style={{visibility: isProgressVisible ? 'visible' : 'hidden'}}\n              className={classNames(styles, 'spectrum-Button-circleLoader')}>\n              <ProgressCircle\n                aria-label={isPendingAriaLiveLabel}\n                isIndeterminate\n                size=\"S\"\n                staticColor={staticColor} />\n            </div>\n          )}\n          {isPending &&\n            <>\n              <div aria-live={isFocused ? ariaLive : 'off'}>\n                {isProgressVisible &&\n                  <div role=\"img\" aria-labelledby={isPendingAriaLiveLabelledby} />\n                }\n              </div>\n              {/* Adding the element here with the same labels as the button itself causes aria-live to pick up the change in Safari.\n              Safari with VO unfortunately doesn't announce changes to *all* of its labels specifically for button\n              https://a11ysupport.io/tests/tech__html__button-name-change#assertion-aria-aria-label_attribute-convey_name_change-html-button_element-vo_macos-safari\n              The aria-live may cause extra announcements in other browsers. */}\n              <div id={spinnerId} role=\"img\" aria-label={isPendingAriaLiveLabel} />\n            </>\n          }\n        </SlotProvider>\n      </Element>\n    </FocusRing>\n  );\n}\n\n/**\n * Buttons allow users to perform an action or to navigate to another page.\n * They have multiple styles for various needs, and are ideal for calling attention to\n * where a user needs to do something in order to move forward in a flow.\n */\nlet _Button = React.forwardRef(Button) as <T extends ElementType = 'button'>(props: SpectrumButtonProps<T> & {ref?: FocusableRef<HTMLElement>}) => ReactElement;\nexport {_Button as Button};\n"],"names":[],"version":3,"file":"Button.main.js.map"}
         
     | 
    
        package/dist/Button.mjs
    CHANGED
    
    | 
         @@ -106,12 +106,21 @@ function $b865a6f0049e2d66$var$Button(props, ref) { 
     | 
|
| 
       106 
106 
     | 
    
         
             
                const isPendingAriaLiveLabelledby = hasAriaLabel ? (_buttonProps_arialabelledby_replace = (_buttonProps_arialabelledby = buttonProps['aria-labelledby']) === null || _buttonProps_arialabelledby === void 0 ? void 0 : _buttonProps_arialabelledby.replace(buttonId, spinnerId)) !== null && _buttonProps_arialabelledby_replace !== void 0 ? _buttonProps_arialabelledby_replace : spinnerId : `${hasIcon ? iconId : ''} ${hasLabel ? textId : ''} ${spinnerId}`.trim();
         
     | 
| 
       107 
107 
     | 
    
         
             
                let ariaLive = 'polite';
         
     | 
| 
       108 
108 
     | 
    
         
             
                if ((0, $l1zrX$isAppleDevice)() && (!hasAriaLabel || (0, $l1zrX$isFirefox)())) ariaLive = 'off';
         
     | 
| 
      
 109 
     | 
    
         
            +
                let isPendingProps = isPending ? {
         
     | 
| 
      
 110 
     | 
    
         
            +
                    onClick: (e)=>{
         
     | 
| 
      
 111 
     | 
    
         
            +
                        if (e.currentTarget instanceof HTMLButtonElement) e.preventDefault();
         
     | 
| 
      
 112 
     | 
    
         
            +
                    }
         
     | 
| 
      
 113 
     | 
    
         
            +
                } : {
         
     | 
| 
      
 114 
     | 
    
         
            +
                    // no-op. 
         
     | 
| 
      
 115 
     | 
    
         
            +
                    // Not sure why, but TypeScript wouldn't allow to have an empty object `{}`.
         
     | 
| 
      
 116 
     | 
    
         
            +
                    onClick: ()=>{}
         
     | 
| 
      
 117 
     | 
    
         
            +
                };
         
     | 
| 
       109 
118 
     | 
    
         
             
                return /*#__PURE__*/ (0, $l1zrX$react).createElement((0, $l1zrX$FocusRing), {
         
     | 
| 
       110 
119 
     | 
    
         
             
                    focusRingClass: (0, $l1zrX$classNames)((0, ($parcel$interopDefault($l1zrX$button_vars_cssmodulejs))), 'focus-ring'),
         
     | 
| 
       111 
120 
     | 
    
         
             
                    autoFocus: autoFocus
         
     | 
| 
       112 
121 
     | 
    
         
             
                }, /*#__PURE__*/ (0, $l1zrX$react).createElement(Element, {
         
     | 
| 
       113 
122 
     | 
    
         
             
                    ...styleProps,
         
     | 
| 
       114 
     | 
    
         
            -
                    ...(0, $l1zrX$mergeProps)(buttonProps, hoverProps, focusProps),
         
     | 
| 
      
 123 
     | 
    
         
            +
                    ...(0, $l1zrX$mergeProps)(buttonProps, hoverProps, focusProps, isPendingProps),
         
     | 
| 
       115 
124 
     | 
    
         
             
                    id: buttonId,
         
     | 
| 
       116 
125 
     | 
    
         
             
                    ref: domRef,
         
     | 
| 
       117 
126 
     | 
    
         
             
                    "data-variant": variant,
         
     | 
    
        package/dist/Button.module.js
    CHANGED
    
    | 
         @@ -106,12 +106,21 @@ function $b865a6f0049e2d66$var$Button(props, ref) { 
     | 
|
| 
       106 
106 
     | 
    
         
             
                const isPendingAriaLiveLabelledby = hasAriaLabel ? (_buttonProps_arialabelledby_replace = (_buttonProps_arialabelledby = buttonProps['aria-labelledby']) === null || _buttonProps_arialabelledby === void 0 ? void 0 : _buttonProps_arialabelledby.replace(buttonId, spinnerId)) !== null && _buttonProps_arialabelledby_replace !== void 0 ? _buttonProps_arialabelledby_replace : spinnerId : `${hasIcon ? iconId : ''} ${hasLabel ? textId : ''} ${spinnerId}`.trim();
         
     | 
| 
       107 
107 
     | 
    
         
             
                let ariaLive = 'polite';
         
     | 
| 
       108 
108 
     | 
    
         
             
                if ((0, $l1zrX$isAppleDevice)() && (!hasAriaLabel || (0, $l1zrX$isFirefox)())) ariaLive = 'off';
         
     | 
| 
      
 109 
     | 
    
         
            +
                let isPendingProps = isPending ? {
         
     | 
| 
      
 110 
     | 
    
         
            +
                    onClick: (e)=>{
         
     | 
| 
      
 111 
     | 
    
         
            +
                        if (e.currentTarget instanceof HTMLButtonElement) e.preventDefault();
         
     | 
| 
      
 112 
     | 
    
         
            +
                    }
         
     | 
| 
      
 113 
     | 
    
         
            +
                } : {
         
     | 
| 
      
 114 
     | 
    
         
            +
                    // no-op. 
         
     | 
| 
      
 115 
     | 
    
         
            +
                    // Not sure why, but TypeScript wouldn't allow to have an empty object `{}`.
         
     | 
| 
      
 116 
     | 
    
         
            +
                    onClick: ()=>{}
         
     | 
| 
      
 117 
     | 
    
         
            +
                };
         
     | 
| 
       109 
118 
     | 
    
         
             
                return /*#__PURE__*/ (0, $l1zrX$react).createElement((0, $l1zrX$FocusRing), {
         
     | 
| 
       110 
119 
     | 
    
         
             
                    focusRingClass: (0, $l1zrX$classNames)((0, ($parcel$interopDefault($l1zrX$button_vars_cssmodulejs))), 'focus-ring'),
         
     | 
| 
       111 
120 
     | 
    
         
             
                    autoFocus: autoFocus
         
     | 
| 
       112 
121 
     | 
    
         
             
                }, /*#__PURE__*/ (0, $l1zrX$react).createElement(Element, {
         
     | 
| 
       113 
122 
     | 
    
         
             
                    ...styleProps,
         
     | 
| 
       114 
     | 
    
         
            -
                    ...(0, $l1zrX$mergeProps)(buttonProps, hoverProps, focusProps),
         
     | 
| 
      
 123 
     | 
    
         
            +
                    ...(0, $l1zrX$mergeProps)(buttonProps, hoverProps, focusProps, isPendingProps),
         
     | 
| 
       115 
124 
     | 
    
         
             
                    id: buttonId,
         
     | 
| 
       116 
125 
     | 
    
         
             
                    ref: domRef,
         
     | 
| 
       117 
126 
     | 
    
         
             
                    "data-variant": variant,
         
     | 
| 
         @@ -1 +1 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            {"mappings":"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","sources":["packages/@react-spectrum/button/src/Button.tsx"],"sourcesContent":["/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {\n  classNames,\n  SlotProvider,\n  useFocusableRef,\n  useHasChild,\n  useSlotProps,\n  useStyleProps\n} from '@react-spectrum/utils';\nimport {FocusableRef} from '@react-types/shared';\nimport {FocusRing} from '@react-aria/focus';\n// @ts-ignore\nimport intlMessages from '../intl/*.json';\nimport {isAppleDevice, isFirefox, mergeProps, useId} from '@react-aria/utils';\nimport {ProgressCircle} from '@react-spectrum/progress';\nimport React, {ElementType, ReactElement, useEffect, useState} from 'react';\nimport {SpectrumButtonProps} from '@react-types/button';\nimport styles from '@adobe/spectrum-css-temp/components/button/vars.css';\nimport {Text} from '@react-spectrum/text';\nimport {useButton} from '@react-aria/button';\nimport {useFocus, useHover} from '@react-aria/interactions';\nimport {useLocalizedStringFormatter} from '@react-aria/i18n';\nimport {useProviderProps} from '@react-spectrum/provider';\n\nfunction disablePendingProps(props) {\n  // Don't allow interaction while isPending is true\n  if (props.isPending) {\n    props.onPress = undefined;\n    props.onPressStart = undefined;\n    props.onPressEnd = undefined;\n    props.onPressChange = undefined;\n    props.onPressUp = undefined;\n    props.onKeyDown = undefined;\n    props.onKeyUp = undefined;\n    props.onClick = undefined;\n    props.href = undefined;\n  }\n  return props;\n}\n\nfunction Button<T extends ElementType = 'button'>(props: SpectrumButtonProps<T>, ref: FocusableRef<HTMLElement>) {\n  props = useProviderProps(props);\n  props = useSlotProps(props, 'button');\n  props = disablePendingProps(props);\n  let {\n    elementType: Element = 'button',\n    children,\n    variant,\n    style = variant === 'accent' || variant === 'cta' ? 'fill' : 'outline',\n    staticColor,\n    isDisabled,\n    isPending,\n    autoFocus,\n    ...otherProps\n  } = props;\n  let domRef = useFocusableRef(ref);\n  let {buttonProps, isPressed} = useButton(props, domRef);\n  let {hoverProps, isHovered} = useHover({isDisabled});\n  let [isFocused, onFocusChange] = useState(false);\n  let {focusProps} = useFocus({onFocusChange, isDisabled});\n  let stringFormatter = useLocalizedStringFormatter(intlMessages, '@react-spectrum/button');\n  let {styleProps} = useStyleProps(otherProps);\n  let hasLabel = useHasChild(`.${styles['spectrum-Button-label']}`, domRef);\n  let hasIcon = useHasChild(`.${styles['spectrum-Icon']}`, domRef);\n  // an aria label will block children and their labels from being read, this is undesirable for pending state\n  let hasAriaLabel = !!buttonProps['aria-label'] || !!buttonProps['aria-labelledby'];\n  let [isProgressVisible, setIsProgressVisible] = useState(false);\n  let backupButtonId = useId();\n  let buttonId = buttonProps.id || backupButtonId;\n  let iconId = useId();\n  let textId = useId();\n  let spinnerId = useId();\n\n  useEffect(() => {\n    let timeout: ReturnType<typeof setTimeout>;\n\n    if (isPending) {\n      // Start timer when isPending is set to true.\n      timeout = setTimeout(() => {\n        setIsProgressVisible(true);\n      }, 1000);\n    } else {\n      // Exit loading state when isPending is set to false. */\n      setIsProgressVisible(false);\n    }\n    return () => {\n      // Clean up on unmount or when user removes isPending prop before entering loading state.\n      clearTimeout(timeout);\n    };\n  }, [isPending]);\n\n  if (variant === 'cta') {\n    variant = 'accent';\n  } else if (variant === 'overBackground') {\n    variant = 'primary';\n    staticColor = 'white';\n  }\n\n  const isPendingAriaLiveLabel = `${hasAriaLabel ? buttonProps['aria-label'] : ''} ${stringFormatter.format('pending')}`.trim();\n  const isPendingAriaLiveLabelledby = hasAriaLabel ? (buttonProps['aria-labelledby']?.replace(buttonId, spinnerId) ?? spinnerId) : `${hasIcon ? iconId : ''} ${hasLabel ? textId : ''} ${spinnerId}`.trim();\n\n  let ariaLive: 'off' | 'polite' | 'assertive' = 'polite';\n  if (isAppleDevice() && (!hasAriaLabel || isFirefox())) {\n    ariaLive = 'off';\n  }\n  return (\n    <FocusRing focusRingClass={classNames(styles, 'focus-ring')} autoFocus={autoFocus}>\n      <Element\n        {...styleProps}\n        {...mergeProps(buttonProps, hoverProps, focusProps)}\n        id={buttonId}\n        ref={domRef}\n        data-variant={variant}\n        data-style={style}\n        data-static-color={staticColor || undefined}\n        aria-disabled={isPending ? 'true' : undefined}\n        aria-label={isPending ? isPendingAriaLiveLabel : buttonProps['aria-label']}\n        aria-labelledby={isPending ? isPendingAriaLiveLabelledby : buttonProps['aria-labelledby']}\n        className={\n          classNames(\n            styles,\n            'spectrum-Button',\n            {\n              'spectrum-Button--iconOnly': hasIcon && !hasLabel,\n              'is-disabled': isDisabled || isProgressVisible,\n              'is-active': isPressed,\n              'is-hovered': isHovered,\n              'spectrum-Button--pending': isProgressVisible\n            },\n            styleProps.className\n          )\n        }>\n        <SlotProvider\n          slots={{\n            icon: {\n              id: iconId,\n              size: 'S',\n              UNSAFE_className: classNames(styles, 'spectrum-Icon')\n            },\n            text: {\n              id: textId,\n              UNSAFE_className: classNames(styles, 'spectrum-Button-label')\n            }\n          }}>\n          {typeof children === 'string'\n            ? <Text>{children}</Text>\n            : children}\n          {isPending && (\n            <div\n              aria-hidden=\"true\"\n              style={{visibility: isProgressVisible ? 'visible' : 'hidden'}}\n              className={classNames(styles, 'spectrum-Button-circleLoader')}>\n              <ProgressCircle\n                aria-label={isPendingAriaLiveLabel}\n                isIndeterminate\n                size=\"S\"\n                staticColor={staticColor} />\n            </div>\n          )}\n          {isPending &&\n            <>\n              <div aria-live={isFocused ? ariaLive : 'off'}>\n                {isProgressVisible &&\n                  <div role=\"img\" aria-labelledby={isPendingAriaLiveLabelledby} />\n                }\n              </div>\n              {/* Adding the element here with the same labels as the button itself causes aria-live to pick up the change in Safari.\n              Safari with VO unfortunately doesn't announce changes to *all* of its labels specifically for button\n              https://a11ysupport.io/tests/tech__html__button-name-change#assertion-aria-aria-label_attribute-convey_name_change-html-button_element-vo_macos-safari\n              The aria-live may cause extra announcements in other browsers. */}\n              <div id={spinnerId} role=\"img\" aria-label={isPendingAriaLiveLabel} />\n            </>\n          }\n        </SlotProvider>\n      </Element>\n    </FocusRing>\n  );\n}\n\n/**\n * Buttons allow users to perform an action or to navigate to another page.\n * They have multiple styles for various needs, and are ideal for calling attention to\n * where a user needs to do something in order to move forward in a flow.\n */\nlet _Button = React.forwardRef(Button) as <T extends ElementType = 'button'>(props: SpectrumButtonProps<T> & {ref?: FocusableRef<HTMLElement>}) => ReactElement;\nexport {_Button as Button};\n"],"names":[],"version":3,"file":"Button.module.js.map"}
         
     | 
| 
      
 1 
     | 
    
         
            +
            {"mappings":"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","sources":["packages/@react-spectrum/button/src/Button.tsx"],"sourcesContent":["/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {\n  classNames,\n  SlotProvider,\n  useFocusableRef,\n  useHasChild,\n  useSlotProps,\n  useStyleProps\n} from '@react-spectrum/utils';\nimport {FocusableRef} from '@react-types/shared';\nimport {FocusRing} from '@react-aria/focus';\n// @ts-ignore\nimport intlMessages from '../intl/*.json';\nimport {isAppleDevice, isFirefox, mergeProps, useId} from '@react-aria/utils';\nimport {ProgressCircle} from '@react-spectrum/progress';\nimport React, {ElementType, ReactElement, useEffect, useState} from 'react';\nimport {SpectrumButtonProps} from '@react-types/button';\nimport styles from '@adobe/spectrum-css-temp/components/button/vars.css';\nimport {Text} from '@react-spectrum/text';\nimport {useButton} from '@react-aria/button';\nimport {useFocus, useHover} from '@react-aria/interactions';\nimport {useLocalizedStringFormatter} from '@react-aria/i18n';\nimport {useProviderProps} from '@react-spectrum/provider';\n\nfunction disablePendingProps(props) {\n  // Don't allow interaction while isPending is true\n  if (props.isPending) {\n    props.onPress = undefined;\n    props.onPressStart = undefined;\n    props.onPressEnd = undefined;\n    props.onPressChange = undefined;\n    props.onPressUp = undefined;\n    props.onKeyDown = undefined;\n    props.onKeyUp = undefined;\n    props.onClick = undefined;\n    props.href = undefined;\n  }\n  return props;\n}\n\nfunction Button<T extends ElementType = 'button'>(props: SpectrumButtonProps<T>, ref: FocusableRef<HTMLElement>) {\n  props = useProviderProps(props);\n  props = useSlotProps(props, 'button');\n  props = disablePendingProps(props);\n  let {\n    elementType: Element = 'button',\n    children,\n    variant,\n    style = variant === 'accent' || variant === 'cta' ? 'fill' : 'outline',\n    staticColor,\n    isDisabled,\n    isPending,\n    autoFocus,\n    ...otherProps\n  } = props;\n  let domRef = useFocusableRef(ref);\n  let {buttonProps, isPressed} = useButton(props, domRef);\n  let {hoverProps, isHovered} = useHover({isDisabled});\n  let [isFocused, onFocusChange] = useState(false);\n  let {focusProps} = useFocus({onFocusChange, isDisabled});\n  let stringFormatter = useLocalizedStringFormatter(intlMessages, '@react-spectrum/button');\n  let {styleProps} = useStyleProps(otherProps);\n  let hasLabel = useHasChild(`.${styles['spectrum-Button-label']}`, domRef);\n  let hasIcon = useHasChild(`.${styles['spectrum-Icon']}`, domRef);\n  // an aria label will block children and their labels from being read, this is undesirable for pending state\n  let hasAriaLabel = !!buttonProps['aria-label'] || !!buttonProps['aria-labelledby'];\n  let [isProgressVisible, setIsProgressVisible] = useState(false);\n  let backupButtonId = useId();\n  let buttonId = buttonProps.id || backupButtonId;\n  let iconId = useId();\n  let textId = useId();\n  let spinnerId = useId();\n\n  useEffect(() => {\n    let timeout: ReturnType<typeof setTimeout>;\n\n    if (isPending) {\n      // Start timer when isPending is set to true.\n      timeout = setTimeout(() => {\n        setIsProgressVisible(true);\n      }, 1000);\n    } else {\n      // Exit loading state when isPending is set to false. */\n      setIsProgressVisible(false);\n    }\n    return () => {\n      // Clean up on unmount or when user removes isPending prop before entering loading state.\n      clearTimeout(timeout);\n    };\n  }, [isPending]);\n\n  if (variant === 'cta') {\n    variant = 'accent';\n  } else if (variant === 'overBackground') {\n    variant = 'primary';\n    staticColor = 'white';\n  }\n\n  const isPendingAriaLiveLabel = `${hasAriaLabel ? buttonProps['aria-label'] : ''} ${stringFormatter.format('pending')}`.trim();\n  const isPendingAriaLiveLabelledby = hasAriaLabel ? (buttonProps['aria-labelledby']?.replace(buttonId, spinnerId) ?? spinnerId) : `${hasIcon ? iconId : ''} ${hasLabel ? textId : ''} ${spinnerId}`.trim();\n\n  let ariaLive: 'off' | 'polite' | 'assertive' = 'polite';\n  if (isAppleDevice() && (!hasAriaLabel || isFirefox())) {\n    ariaLive = 'off';\n  }\n\n  let isPendingProps = isPending ? {\n    onClick: (e) => {\n      if (e.currentTarget instanceof HTMLButtonElement) {\n        e.preventDefault();\n      }\n    }\n  } : {\n    // no-op. \n    // Not sure why, but TypeScript wouldn't allow to have an empty object `{}`.\n    onClick: () => {}\n  };\n\n  return (\n    <FocusRing focusRingClass={classNames(styles, 'focus-ring')} autoFocus={autoFocus}>\n      <Element\n        {...styleProps}\n        {...mergeProps(buttonProps, hoverProps, focusProps, isPendingProps)}\n        id={buttonId}\n        ref={domRef}\n        data-variant={variant}\n        data-style={style}\n        data-static-color={staticColor || undefined}\n        aria-disabled={isPending ? 'true' : undefined}\n        aria-label={isPending ? isPendingAriaLiveLabel : buttonProps['aria-label']}\n        aria-labelledby={isPending ? isPendingAriaLiveLabelledby : buttonProps['aria-labelledby']}\n        className={\n          classNames(\n            styles,\n            'spectrum-Button',\n            {\n              'spectrum-Button--iconOnly': hasIcon && !hasLabel,\n              'is-disabled': isDisabled || isProgressVisible,\n              'is-active': isPressed,\n              'is-hovered': isHovered,\n              'spectrum-Button--pending': isProgressVisible\n            },\n            styleProps.className\n          )\n        }>\n        <SlotProvider\n          slots={{\n            icon: {\n              id: iconId,\n              size: 'S',\n              UNSAFE_className: classNames(styles, 'spectrum-Icon')\n            },\n            text: {\n              id: textId,\n              UNSAFE_className: classNames(styles, 'spectrum-Button-label')\n            }\n          }}>\n          {typeof children === 'string'\n            ? <Text>{children}</Text>\n            : children}\n          {isPending && (\n            <div\n              aria-hidden=\"true\"\n              style={{visibility: isProgressVisible ? 'visible' : 'hidden'}}\n              className={classNames(styles, 'spectrum-Button-circleLoader')}>\n              <ProgressCircle\n                aria-label={isPendingAriaLiveLabel}\n                isIndeterminate\n                size=\"S\"\n                staticColor={staticColor} />\n            </div>\n          )}\n          {isPending &&\n            <>\n              <div aria-live={isFocused ? ariaLive : 'off'}>\n                {isProgressVisible &&\n                  <div role=\"img\" aria-labelledby={isPendingAriaLiveLabelledby} />\n                }\n              </div>\n              {/* Adding the element here with the same labels as the button itself causes aria-live to pick up the change in Safari.\n              Safari with VO unfortunately doesn't announce changes to *all* of its labels specifically for button\n              https://a11ysupport.io/tests/tech__html__button-name-change#assertion-aria-aria-label_attribute-convey_name_change-html-button_element-vo_macos-safari\n              The aria-live may cause extra announcements in other browsers. */}\n              <div id={spinnerId} role=\"img\" aria-label={isPendingAriaLiveLabel} />\n            </>\n          }\n        </SlotProvider>\n      </Element>\n    </FocusRing>\n  );\n}\n\n/**\n * Buttons allow users to perform an action or to navigate to another page.\n * They have multiple styles for various needs, and are ideal for calling attention to\n * where a user needs to do something in order to move forward in a flow.\n */\nlet _Button = React.forwardRef(Button) as <T extends ElementType = 'button'>(props: SpectrumButtonProps<T> & {ref?: FocusableRef<HTMLElement>}) => ReactElement;\nexport {_Button as Button};\n"],"names":[],"version":3,"file":"Button.module.js.map"}
         
     | 
    
        package/dist/types.d.ts.map
    CHANGED
    
    | 
         @@ -1 +1 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            {"mappings":";;; 
     | 
| 
      
 1 
     | 
    
         
            +
            {"mappings":";;;AA2MA;;;;GAIG;AACH,OAAA,IAAI;UAAgH,aAAa,WAAW,CAAC;MAAM,YAAY,CAAC;AC3GhK;;;GAGG;AACH,OAAA,IAAI,uJAA8C,CAAC;ACnFnD,0BAA2B,SAAQ,WAAW,EAAE,QAAQ,EAAE,UAAU;IAClE,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,eAAe,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IACtC,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,cAAc,CAAC,EAAE,MAAM,CAAA;CACxB;AAsDD,OAAA,IAAI,iIAA4C,CAAC;ACpBjD;;GAEG;AACH,OAAA,IAAI,qJAA4C,CAAC;AC1CjD,2BAA2B,CAAC,SAAS,WAAW,GAAG,QAAQ,CAAE,SAAQ,WAAW,EAAE,2BAA2B,CAAC,CAAC,EAAE,QAAQ,EAAE,UAAU;IACnI,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,OAAO,CAAC,EAAE,gBAAgB,CAAC;IAC3B,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,YAAY,CAAC,EAAE,OAAO,CAAA;CACvB;AAmDD,OAAA,IAAI,uJAA4C,CAAC;ACQjD;;;GAGG;AACH,OAAA,IAAI,uJAA8C,CAAC;ACzEnD,YAAY,EAAC,yBAAyB,EAAE,mBAAmB,EAAE,wBAAwB,EAAE,yBAAyB,EAAC,MAAM,qBAAqB,CAAC","sources":["packages/@react-spectrum/button/src/packages/@react-spectrum/button/src/Button.tsx","packages/@react-spectrum/button/src/packages/@react-spectrum/button/src/ActionButton.tsx","packages/@react-spectrum/button/src/packages/@react-spectrum/button/src/FieldButton.tsx","packages/@react-spectrum/button/src/packages/@react-spectrum/button/src/LogicButton.tsx","packages/@react-spectrum/button/src/packages/@react-spectrum/button/src/ClearButton.tsx","packages/@react-spectrum/button/src/packages/@react-spectrum/button/src/ToggleButton.tsx","packages/@react-spectrum/button/src/packages/@react-spectrum/button/src/index.ts","packages/@react-spectrum/button/src/index.ts"],"sourcesContent":[null,null,null,null,null,null,null,"/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n/// <reference types=\"css-module-types\" />\nexport {Button} from './Button';\nexport {ActionButton} from './ActionButton';\nexport {FieldButton} from './FieldButton';\nexport {LogicButton} from './LogicButton';\nexport {ClearButton} from './ClearButton';\nexport {ToggleButton} from './ToggleButton';\nexport type {SpectrumActionButtonProps, SpectrumButtonProps, SpectrumLogicButtonProps, SpectrumToggleButtonProps} from '@react-types/button';\n"],"names":[],"version":3,"file":"types.d.ts.map"}
         
     | 
    
        package/package.json
    CHANGED
    
    | 
         @@ -1,6 +1,6 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            {
         
     | 
| 
       2 
2 
     | 
    
         
             
              "name": "@react-spectrum/button",
         
     | 
| 
       3 
     | 
    
         
            -
              "version": "3.0.0-nightly. 
     | 
| 
      
 3 
     | 
    
         
            +
              "version": "3.0.0-nightly.2928+379e8d64f",
         
     | 
| 
       4 
4 
     | 
    
         
             
              "description": "Spectrum UI components in React",
         
     | 
| 
       5 
5 
     | 
    
         
             
              "license": "Apache-2.0",
         
     | 
| 
       6 
6 
     | 
    
         
             
              "main": "dist/main.js",
         
     | 
| 
         @@ -36,23 +36,23 @@ 
     | 
|
| 
       36 
36 
     | 
    
         
             
                "url": "https://github.com/adobe/react-spectrum"
         
     | 
| 
       37 
37 
     | 
    
         
             
              },
         
     | 
| 
       38 
38 
     | 
    
         
             
              "dependencies": {
         
     | 
| 
       39 
     | 
    
         
            -
                "@react-aria/button": "3.0.0-nightly. 
     | 
| 
       40 
     | 
    
         
            -
                "@react-aria/focus": "3.0.0-nightly. 
     | 
| 
       41 
     | 
    
         
            -
                "@react-aria/i18n": "3.0.0-nightly. 
     | 
| 
       42 
     | 
    
         
            -
                "@react-aria/interactions": "3.0.0-nightly. 
     | 
| 
       43 
     | 
    
         
            -
                "@react-aria/utils": "3.0.0-nightly. 
     | 
| 
       44 
     | 
    
         
            -
                "@react-spectrum/progress": "3.0.0-nightly. 
     | 
| 
       45 
     | 
    
         
            -
                "@react-spectrum/text": "3.5.6-nightly. 
     | 
| 
       46 
     | 
    
         
            -
                "@react-spectrum/utils": "3.0.0-nightly. 
     | 
| 
       47 
     | 
    
         
            -
                "@react-stately/toggle": "3.0.0-nightly. 
     | 
| 
       48 
     | 
    
         
            -
                "@react-types/button": "3.9.5-nightly. 
     | 
| 
       49 
     | 
    
         
            -
                "@react-types/shared": "3.0.0-nightly. 
     | 
| 
       50 
     | 
    
         
            -
                "@spectrum-icons/ui": "3.0.0-nightly. 
     | 
| 
      
 39 
     | 
    
         
            +
                "@react-aria/button": "3.0.0-nightly.2928+379e8d64f",
         
     | 
| 
      
 40 
     | 
    
         
            +
                "@react-aria/focus": "3.0.0-nightly.2928+379e8d64f",
         
     | 
| 
      
 41 
     | 
    
         
            +
                "@react-aria/i18n": "3.0.0-nightly.2928+379e8d64f",
         
     | 
| 
      
 42 
     | 
    
         
            +
                "@react-aria/interactions": "3.0.0-nightly.2928+379e8d64f",
         
     | 
| 
      
 43 
     | 
    
         
            +
                "@react-aria/utils": "3.0.0-nightly.2928+379e8d64f",
         
     | 
| 
      
 44 
     | 
    
         
            +
                "@react-spectrum/progress": "3.0.0-nightly.2928+379e8d64f",
         
     | 
| 
      
 45 
     | 
    
         
            +
                "@react-spectrum/text": "3.5.6-nightly.4640+379e8d64f",
         
     | 
| 
      
 46 
     | 
    
         
            +
                "@react-spectrum/utils": "3.0.0-nightly.2928+379e8d64f",
         
     | 
| 
      
 47 
     | 
    
         
            +
                "@react-stately/toggle": "3.0.0-nightly.2928+379e8d64f",
         
     | 
| 
      
 48 
     | 
    
         
            +
                "@react-types/button": "3.9.5-nightly.4640+379e8d64f",
         
     | 
| 
      
 49 
     | 
    
         
            +
                "@react-types/shared": "3.0.0-nightly.2928+379e8d64f",
         
     | 
| 
      
 50 
     | 
    
         
            +
                "@spectrum-icons/ui": "3.0.0-nightly.2928+379e8d64f",
         
     | 
| 
       51 
51 
     | 
    
         
             
                "@swc/helpers": "^0.5.0"
         
     | 
| 
       52 
52 
     | 
    
         
             
              },
         
     | 
| 
       53 
53 
     | 
    
         
             
              "devDependencies": {
         
     | 
| 
       54 
     | 
    
         
            -
                "@adobe/spectrum-css-temp": "3.0.0-nightly. 
     | 
| 
       55 
     | 
    
         
            -
                "@react-spectrum/test-utils-internal": "3.0.0-nightly. 
     | 
| 
      
 54 
     | 
    
         
            +
                "@adobe/spectrum-css-temp": "3.0.0-nightly.2928+379e8d64f",
         
     | 
| 
      
 55 
     | 
    
         
            +
                "@react-spectrum/test-utils-internal": "3.0.0-nightly.4640+379e8d64f"
         
     | 
| 
       56 
56 
     | 
    
         
             
              },
         
     | 
| 
       57 
57 
     | 
    
         
             
              "peerDependencies": {
         
     | 
| 
       58 
58 
     | 
    
         
             
                "@react-spectrum/provider": "^3.0.0",
         
     | 
| 
         @@ -61,5 +61,5 @@ 
     | 
|
| 
       61 
61 
     | 
    
         
             
              "publishConfig": {
         
     | 
| 
       62 
62 
     | 
    
         
             
                "access": "public"
         
     | 
| 
       63 
63 
     | 
    
         
             
              },
         
     | 
| 
       64 
     | 
    
         
            -
              "gitHead": " 
     | 
| 
      
 64 
     | 
    
         
            +
              "gitHead": "379e8d64f76c15bbb35f710c4150cc84e85b1d7e"
         
     | 
| 
       65 
65 
     | 
    
         
             
            }
         
     | 
    
        package/src/Button.tsx
    CHANGED
    
    | 
         @@ -114,11 +114,24 @@ function Button<T extends ElementType = 'button'>(props: SpectrumButtonProps<T>, 
     | 
|
| 
       114 
114 
     | 
    
         
             
              if (isAppleDevice() && (!hasAriaLabel || isFirefox())) {
         
     | 
| 
       115 
115 
     | 
    
         
             
                ariaLive = 'off';
         
     | 
| 
       116 
116 
     | 
    
         
             
              }
         
     | 
| 
      
 117 
     | 
    
         
            +
             
     | 
| 
      
 118 
     | 
    
         
            +
              let isPendingProps = isPending ? {
         
     | 
| 
      
 119 
     | 
    
         
            +
                onClick: (e) => {
         
     | 
| 
      
 120 
     | 
    
         
            +
                  if (e.currentTarget instanceof HTMLButtonElement) {
         
     | 
| 
      
 121 
     | 
    
         
            +
                    e.preventDefault();
         
     | 
| 
      
 122 
     | 
    
         
            +
                  }
         
     | 
| 
      
 123 
     | 
    
         
            +
                }
         
     | 
| 
      
 124 
     | 
    
         
            +
              } : {
         
     | 
| 
      
 125 
     | 
    
         
            +
                // no-op. 
         
     | 
| 
      
 126 
     | 
    
         
            +
                // Not sure why, but TypeScript wouldn't allow to have an empty object `{}`.
         
     | 
| 
      
 127 
     | 
    
         
            +
                onClick: () => {}
         
     | 
| 
      
 128 
     | 
    
         
            +
              };
         
     | 
| 
      
 129 
     | 
    
         
            +
             
     | 
| 
       117 
130 
     | 
    
         
             
              return (
         
     | 
| 
       118 
131 
     | 
    
         
             
                <FocusRing focusRingClass={classNames(styles, 'focus-ring')} autoFocus={autoFocus}>
         
     | 
| 
       119 
132 
     | 
    
         
             
                  <Element
         
     | 
| 
       120 
133 
     | 
    
         
             
                    {...styleProps}
         
     | 
| 
       121 
     | 
    
         
            -
                    {...mergeProps(buttonProps, hoverProps, focusProps)}
         
     | 
| 
      
 134 
     | 
    
         
            +
                    {...mergeProps(buttonProps, hoverProps, focusProps, isPendingProps)}
         
     | 
| 
       122 
135 
     | 
    
         
             
                    id={buttonId}
         
     | 
| 
       123 
136 
     | 
    
         
             
                    ref={domRef}
         
     | 
| 
       124 
137 
     | 
    
         
             
                    data-variant={variant}
         
     |