@react-spectrum/s2 1.5.0 → 1.5.1

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.
Files changed (268) hide show
  1. package/dist/private/Accordion.cjs +2 -2
  2. package/dist/private/Accordion.css +2 -2
  3. package/dist/private/Accordion.mjs +2 -2
  4. package/dist/private/ActionBar.cjs +59 -59
  5. package/dist/private/ActionBar.css +58 -58
  6. package/dist/private/ActionBar.mjs +59 -59
  7. package/dist/private/ActionButton.cjs +247 -247
  8. package/dist/private/ActionButton.css +169 -169
  9. package/dist/private/ActionButton.mjs +247 -247
  10. package/dist/private/ActionButtonGroup.cjs +15 -15
  11. package/dist/private/ActionButtonGroup.css +9 -9
  12. package/dist/private/ActionButtonGroup.mjs +15 -15
  13. package/dist/private/Add.cjs +10 -10
  14. package/dist/private/Add.css +6 -6
  15. package/dist/private/Add.mjs +10 -10
  16. package/dist/private/AlertDialog.cjs +3 -3
  17. package/dist/private/AlertDialog.css +3 -3
  18. package/dist/private/AlertDialog.mjs +3 -3
  19. package/dist/private/Asterisk.cjs +6 -6
  20. package/dist/private/Asterisk.css +4 -4
  21. package/dist/private/Asterisk.mjs +6 -6
  22. package/dist/private/Avatar.cjs +16 -16
  23. package/dist/private/Avatar.css +16 -16
  24. package/dist/private/Avatar.mjs +16 -16
  25. package/dist/private/AvatarGroup.cjs +120 -120
  26. package/dist/private/AvatarGroup.css +31 -31
  27. package/dist/private/AvatarGroup.mjs +120 -120
  28. package/dist/private/Badge.cjs +197 -197
  29. package/dist/private/Badge.css +125 -125
  30. package/dist/private/Badge.mjs +197 -197
  31. package/dist/private/Breadcrumbs.cjs +234 -234
  32. package/dist/private/Breadcrumbs.css +100 -100
  33. package/dist/private/Breadcrumbs.mjs +234 -234
  34. package/dist/private/Button.cjs +335 -326
  35. package/dist/private/Button.cjs.map +1 -1
  36. package/dist/private/Button.css +176 -172
  37. package/dist/private/Button.css.map +1 -1
  38. package/dist/private/Button.mjs +335 -326
  39. package/dist/private/Button.mjs.map +1 -1
  40. package/dist/private/ButtonGroup.cjs +21 -21
  41. package/dist/private/ButtonGroup.css +16 -16
  42. package/dist/private/ButtonGroup.mjs +21 -21
  43. package/dist/private/Calendar.cjs +232 -232
  44. package/dist/private/Calendar.css +149 -149
  45. package/dist/private/Calendar.mjs +232 -232
  46. package/dist/private/Card.cjs +309 -309
  47. package/dist/private/Card.css +206 -206
  48. package/dist/private/Card.mjs +309 -309
  49. package/dist/private/CardView.cjs +17 -17
  50. package/dist/private/CardView.css +17 -17
  51. package/dist/private/CardView.mjs +17 -17
  52. package/dist/private/CenterBaseline.cjs +1 -1
  53. package/dist/private/CenterBaseline.css +2 -2
  54. package/dist/private/CenterBaseline.mjs +1 -1
  55. package/dist/private/Checkbox.cjs +188 -188
  56. package/dist/private/Checkbox.css +110 -110
  57. package/dist/private/Checkbox.mjs +188 -188
  58. package/dist/private/CheckboxGroup.cjs +43 -43
  59. package/dist/private/CheckboxGroup.css +37 -37
  60. package/dist/private/CheckboxGroup.mjs +43 -43
  61. package/dist/private/Checkmark.cjs +12 -12
  62. package/dist/private/Checkmark.css +8 -8
  63. package/dist/private/Checkmark.mjs +12 -12
  64. package/dist/private/Chevron.cjs +12 -12
  65. package/dist/private/Chevron.css +10 -10
  66. package/dist/private/Chevron.mjs +12 -12
  67. package/dist/private/ClearButton.cjs +30 -30
  68. package/dist/private/ClearButton.css +30 -30
  69. package/dist/private/ClearButton.mjs +30 -30
  70. package/dist/private/CloseButton.cjs +52 -52
  71. package/dist/private/CloseButton.css +46 -46
  72. package/dist/private/CloseButton.mjs +52 -52
  73. package/dist/private/ColorArea.cjs +16 -16
  74. package/dist/private/ColorArea.css +16 -16
  75. package/dist/private/ColorArea.mjs +16 -16
  76. package/dist/private/ColorField.cjs +31 -31
  77. package/dist/private/ColorField.css +27 -27
  78. package/dist/private/ColorField.mjs +31 -31
  79. package/dist/private/ColorHandle.cjs +27 -27
  80. package/dist/private/ColorHandle.css +42 -42
  81. package/dist/private/ColorHandle.mjs +27 -27
  82. package/dist/private/ColorSlider.cjs +108 -108
  83. package/dist/private/ColorSlider.css +52 -52
  84. package/dist/private/ColorSlider.mjs +108 -108
  85. package/dist/private/ColorSwatch.cjs +29 -29
  86. package/dist/private/ColorSwatch.css +29 -29
  87. package/dist/private/ColorSwatch.mjs +29 -29
  88. package/dist/private/ColorSwatchPicker.cjs +29 -29
  89. package/dist/private/ColorSwatchPicker.css +48 -48
  90. package/dist/private/ColorSwatchPicker.mjs +29 -29
  91. package/dist/private/ColorWheel.cjs +26 -26
  92. package/dist/private/ColorWheel.css +17 -17
  93. package/dist/private/ColorWheel.mjs +26 -26
  94. package/dist/private/ComboBox.cjs +381 -381
  95. package/dist/private/ComboBox.css +188 -188
  96. package/dist/private/ComboBox.mjs +381 -381
  97. package/dist/private/ContextualHelp.cjs +5 -5
  98. package/dist/private/ContextualHelp.css +50 -50
  99. package/dist/private/ContextualHelp.mjs +5 -5
  100. package/dist/private/CornerTriangle.cjs +8 -8
  101. package/dist/private/CornerTriangle.css +6 -6
  102. package/dist/private/CornerTriangle.mjs +8 -8
  103. package/dist/private/Cross.cjs +14 -14
  104. package/dist/private/Cross.css +10 -10
  105. package/dist/private/Cross.mjs +14 -14
  106. package/dist/private/CustomDialog.cjs +25 -25
  107. package/dist/private/CustomDialog.css +25 -25
  108. package/dist/private/CustomDialog.mjs +25 -25
  109. package/dist/private/Dash.cjs +10 -10
  110. package/dist/private/Dash.css +6 -6
  111. package/dist/private/Dash.mjs +10 -10
  112. package/dist/private/DateField.cjs +73 -73
  113. package/dist/private/DateField.css +77 -77
  114. package/dist/private/DateField.mjs +73 -73
  115. package/dist/private/DatePicker.cjs +172 -172
  116. package/dist/private/DatePicker.css +128 -128
  117. package/dist/private/DatePicker.mjs +172 -172
  118. package/dist/private/DateRangePicker.cjs +55 -55
  119. package/dist/private/DateRangePicker.css +59 -59
  120. package/dist/private/DateRangePicker.mjs +55 -55
  121. package/dist/private/Dialog.cjs +17 -17
  122. package/dist/private/Dialog.css +70 -70
  123. package/dist/private/Dialog.mjs +17 -17
  124. package/dist/private/Disclosure.cjs +119 -119
  125. package/dist/private/Disclosure.css +112 -112
  126. package/dist/private/Disclosure.mjs +119 -119
  127. package/dist/private/Divider.cjs +25 -25
  128. package/dist/private/Divider.css +25 -25
  129. package/dist/private/Divider.mjs +25 -25
  130. package/dist/private/DragHandle.cjs +8 -8
  131. package/dist/private/DragHandle.css +6 -6
  132. package/dist/private/DragHandle.mjs +8 -8
  133. package/dist/private/DragPreview.cjs +154 -154
  134. package/dist/private/DragPreview.css +106 -106
  135. package/dist/private/DragPreview.mjs +154 -154
  136. package/dist/private/DropZone.cjs +61 -61
  137. package/dist/private/DropZone.css +57 -57
  138. package/dist/private/DropZone.mjs +61 -61
  139. package/dist/private/Field.cjs +360 -360
  140. package/dist/private/Field.cjs.map +1 -1
  141. package/dist/private/Field.css +160 -160
  142. package/dist/private/Field.mjs +360 -360
  143. package/dist/private/Field.mjs.map +1 -1
  144. package/dist/private/Form.cjs +9 -9
  145. package/dist/private/Form.css +9 -9
  146. package/dist/private/Form.mjs +9 -9
  147. package/dist/private/FullscreenDialog.cjs +5 -5
  148. package/dist/private/FullscreenDialog.css +78 -78
  149. package/dist/private/FullscreenDialog.mjs +5 -5
  150. package/dist/private/IllustratedMessage.cjs +228 -228
  151. package/dist/private/IllustratedMessage.css +72 -72
  152. package/dist/private/IllustratedMessage.mjs +228 -228
  153. package/dist/private/Image.cjs +14 -14
  154. package/dist/private/Image.css +14 -14
  155. package/dist/private/Image.mjs +14 -14
  156. package/dist/private/InlineAlert.cjs +100 -100
  157. package/dist/private/InlineAlert.css +76 -76
  158. package/dist/private/InlineAlert.mjs +100 -100
  159. package/dist/private/LabeledValue.cjs +134 -134
  160. package/dist/private/LabeledValue.css +63 -63
  161. package/dist/private/LabeledValue.mjs +134 -134
  162. package/dist/private/Link.cjs +49 -49
  163. package/dist/private/Link.css +41 -41
  164. package/dist/private/Link.mjs +49 -49
  165. package/dist/private/LinkOut.cjs +8 -8
  166. package/dist/private/LinkOut.css +8 -8
  167. package/dist/private/LinkOut.mjs +8 -8
  168. package/dist/private/ListView.cjs +245 -245
  169. package/dist/private/ListView.css +177 -177
  170. package/dist/private/ListView.mjs +245 -245
  171. package/dist/private/Menu.cjs +446 -446
  172. package/dist/private/Menu.css +196 -196
  173. package/dist/private/Menu.mjs +446 -446
  174. package/dist/private/Meter.cjs +153 -153
  175. package/dist/private/Meter.css +91 -91
  176. package/dist/private/Meter.mjs +153 -153
  177. package/dist/private/Modal.cjs +74 -74
  178. package/dist/private/Modal.css +59 -59
  179. package/dist/private/Modal.mjs +74 -74
  180. package/dist/private/NotificationBadge.cjs +56 -56
  181. package/dist/private/NotificationBadge.css +49 -49
  182. package/dist/private/NotificationBadge.mjs +56 -56
  183. package/dist/private/NumberField.cjs +114 -114
  184. package/dist/private/NumberField.css +99 -99
  185. package/dist/private/NumberField.mjs +114 -114
  186. package/dist/private/Picker.cjs +275 -275
  187. package/dist/private/Picker.css +173 -173
  188. package/dist/private/Picker.mjs +275 -275
  189. package/dist/private/Popover.cjs +95 -95
  190. package/dist/private/Popover.css +75 -75
  191. package/dist/private/Popover.mjs +95 -95
  192. package/dist/private/ProgressBar.cjs +163 -163
  193. package/dist/private/ProgressBar.css +99 -99
  194. package/dist/private/ProgressBar.mjs +163 -163
  195. package/dist/private/ProgressCircle.cjs +31 -31
  196. package/dist/private/ProgressCircle.css +24 -24
  197. package/dist/private/ProgressCircle.mjs +31 -31
  198. package/dist/private/Provider.cjs +19 -19
  199. package/dist/private/Provider.css +15 -15
  200. package/dist/private/Provider.mjs +19 -19
  201. package/dist/private/RadioGroup.cjs +208 -208
  202. package/dist/private/RadioGroup.css +113 -113
  203. package/dist/private/RadioGroup.mjs +208 -208
  204. package/dist/private/RangeCalendar.cjs +16 -16
  205. package/dist/private/RangeCalendar.css +17 -17
  206. package/dist/private/RangeCalendar.mjs +16 -16
  207. package/dist/private/SearchField.cjs +41 -41
  208. package/dist/private/SearchField.css +45 -45
  209. package/dist/private/SearchField.mjs +41 -41
  210. package/dist/private/SegmentedControl.cjs +178 -178
  211. package/dist/private/SegmentedControl.css +123 -123
  212. package/dist/private/SegmentedControl.mjs +178 -178
  213. package/dist/private/SelectBoxGroup.cjs +142 -142
  214. package/dist/private/SelectBoxGroup.css +120 -120
  215. package/dist/private/SelectBoxGroup.mjs +142 -142
  216. package/dist/private/Slider.cjs +292 -292
  217. package/dist/private/Slider.css +159 -159
  218. package/dist/private/Slider.mjs +292 -292
  219. package/dist/private/StatusLight.cjs +115 -115
  220. package/dist/private/StatusLight.css +59 -59
  221. package/dist/private/StatusLight.mjs +115 -115
  222. package/dist/private/Switch.cjs +171 -171
  223. package/dist/private/Switch.css +85 -85
  224. package/dist/private/Switch.mjs +171 -171
  225. package/dist/private/TableView.cjs +540 -540
  226. package/dist/private/TableView.css +290 -290
  227. package/dist/private/TableView.mjs +540 -540
  228. package/dist/private/Tabs.cjs +123 -123
  229. package/dist/private/Tabs.css +105 -105
  230. package/dist/private/Tabs.mjs +123 -123
  231. package/dist/private/TabsPicker.cjs +127 -127
  232. package/dist/private/TabsPicker.css +108 -108
  233. package/dist/private/TabsPicker.mjs +127 -127
  234. package/dist/private/TagGroup.cjs +203 -203
  235. package/dist/private/TagGroup.css +146 -146
  236. package/dist/private/TagGroup.mjs +203 -203
  237. package/dist/private/TextField.cjs +58 -58
  238. package/dist/private/TextField.css +54 -54
  239. package/dist/private/TextField.mjs +58 -58
  240. package/dist/private/TimeField.cjs +51 -51
  241. package/dist/private/TimeField.css +47 -47
  242. package/dist/private/TimeField.mjs +51 -51
  243. package/dist/private/Toast.cjs +120 -120
  244. package/dist/private/Toast.css +110 -110
  245. package/dist/private/Toast.mjs +120 -120
  246. package/dist/private/ToggleButton.cjs +16 -16
  247. package/dist/private/ToggleButton.css +23 -23
  248. package/dist/private/ToggleButton.mjs +16 -16
  249. package/dist/private/Tooltip.cjs +86 -86
  250. package/dist/private/Tooltip.css +70 -70
  251. package/dist/private/Tooltip.mjs +86 -86
  252. package/dist/private/TreeView.cjs +229 -229
  253. package/dist/private/TreeView.css +184 -184
  254. package/dist/private/TreeView.mjs +229 -229
  255. package/dist/private/dnd-utils.cjs +42 -42
  256. package/dist/private/dnd-utils.css +39 -39
  257. package/dist/private/dnd-utils.mjs +42 -42
  258. package/icons/Icon.cjs +10 -10
  259. package/icons/Icon.css +9 -9
  260. package/icons/Icon.mjs +10 -10
  261. package/icons/Skeleton.cjs +2 -2
  262. package/icons/Skeleton.cjs.map +1 -1
  263. package/icons/Skeleton.css +6 -6
  264. package/icons/Skeleton.mjs +2 -2
  265. package/icons/Skeleton.mjs.map +1 -1
  266. package/package.json +2 -2
  267. package/src/Button.tsx +12 -2
  268. package/style/__tests__/style-macro.test.js +73 -71
@@ -1 +1 @@
1
- {"mappings":"ACuGe;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;;;EAAA;;;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAsME;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;;EAmLU;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAeD;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EA0EA;;;;EAAA;;;;EAAA;;;;EAQsC;;;;EACtC;;;;EAAA;;;;EAAA;;;;EAAA;;;;;AA3dX;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;;AAAA;EAAA;;;;;AAAA;EAAA;;;;;AAAA;EAAA;;;;;AAAA;EAAA;;;;;AAAA;EAAA;;;;;AAAA;EAAA;;;;;AAAA;EAAA;;;;;AAAA;EAAA;IAAA;;;;IAAA;;;;IAAA;;;;IAAA;;;;IAAA;;;;IAAA;;;;IAAA;;;;IAAA;;;;IAAA;;;;IAAA;;;;IAAA;;;;IAAA;;;;IAsME;;;;;;AAtMF;EAAA;IAAA;;;;;;AA2PS;;;;;;AAAA;;;;;;AAAA","sources":["47c518d02ef77298","packages/@react-spectrum/s2/src/Button.tsx"],"sourcesContent":["@import \"84fda4530d887d61\";\n@import \"58029840d81c849c\";\n@import \"741c49b4968f5e00\";\n@import \"d2d5d6a0faea83be\";\n@import \"7420f4e12e7ef59c\";\n@import \"b849e4ca63c3cc49\";\n@import \"36ff0e1e9ec0e357\";\n@import \"5ed629d4d0b8048c\";\n@import \"341672feb3593eb4\";\n@import \"e68e1721c6627faa\";\n@import \"42efd4ec8049a799\";\n@import \"95ab9abea37ea72d\";\n@import \"8b2fc5f468b9d46d\";\n@import \"52b2e217b498e7a2\";\n@import \"9ea4c114cf8bdeec\";\n@import \"ab8478361150f3f7\";\n@import \"981e6619126f3569\";\n@import \"bcbcf345b1725911\";\n","/*\n * Copyright 2024 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 {baseColor, focusRing, fontRelative, lightDark, style} from '../style' with {type: 'macro'};\nimport {\n ButtonRenderProps,\n Button as RACButton,\n ButtonProps as RACButtonProps\n} from 'react-aria-components/Button';\nimport {centerBaseline} from './CenterBaseline';\nimport {ContextValue, Provider} from 'react-aria-components/slots';\nimport {\n control,\n getAllowedOverrides,\n staticColor,\n StyleProps\n} from './style-utils' with {type: 'macro'};\nimport {createContext, forwardRef, ReactNode, useContext, useEffect, useState} from 'react';\nimport {FocusableRef, FocusableRefValue, GlobalDOMAttributes} from '@react-types/shared';\nimport {IconContext} from './Icon';\nimport intlMessages from '../intl/*.json';\nimport {linearGradient} from '../style/spectrum-theme' with {type: 'macro'};\nimport {Link, LinkProps} from 'react-aria-components/Link';\nimport {OverlayTriggerStateContext} from 'react-aria-components/Dialog';\nimport {pressScale} from './pressScale';\nimport {ProgressCircle} from './ProgressCircle';\nimport {SkeletonContext} from './Skeleton';\nimport {Text, TextContext} from './Content';\nimport {useFocusableRef} from './useDOMRef';\nimport {useFormProps} from './Form';\nimport {useLocalizedStringFormatter} from 'react-aria/useLocalizedStringFormatter';\nimport {useSpectrumContextProps} from './useSpectrumContextProps';\n\ninterface ButtonStyleProps {\n /**\n * The [visual style](https://spectrum.adobe.com/page/button/#Options) of the button.\n *\n * @default 'primary'\n */\n variant?: 'primary' | 'secondary' | 'accent' | 'negative' | 'premium' | 'genai';\n /**\n * The background style of the Button.\n *\n * @default 'fill'\n */\n fillStyle?: 'fill' | 'outline';\n /**\n * The size of the Button.\n *\n * @default 'M'\n */\n size?: 'S' | 'M' | 'L' | 'XL';\n /** The static color style to apply. Useful when the Button appears over a color background. */\n staticColor?: 'white' | 'black' | 'auto';\n}\n\nexport interface ButtonProps\n extends\n Omit<\n RACButtonProps,\n | 'className'\n | 'style'\n | 'render'\n | 'children'\n | 'onHover'\n | 'onHoverStart'\n | 'onHoverEnd'\n | 'onHoverChange'\n | 'onClick'\n | keyof GlobalDOMAttributes\n >,\n StyleProps,\n ButtonStyleProps {\n /** The content to display in the Button. */\n children: ReactNode;\n}\n\nexport interface LinkButtonProps\n extends\n Omit<\n LinkProps,\n 'className' | 'style' | 'render' | 'children' | 'onClick' | keyof GlobalDOMAttributes\n >,\n StyleProps,\n ButtonStyleProps {\n /** The content to display in the Button. */\n children: ReactNode;\n}\n\nexport const ButtonContext =\n createContext<ContextValue<Partial<ButtonProps>, FocusableRefValue<HTMLButtonElement>>>(null);\nexport const LinkButtonContext =\n createContext<ContextValue<Partial<ButtonProps>, FocusableRefValue<HTMLAnchorElement>>>(null);\n\nconst button = style<ButtonRenderProps & ButtonStyleProps & {isStaticColor: boolean}>(\n {\n ...focusRing(),\n ...staticColor(),\n ...control({shape: 'pill', wrap: true, icon: true}),\n position: 'relative',\n justifyContent: 'center',\n textAlign: 'start',\n fontWeight: 'bold',\n userSelect: 'none',\n width: 'fit',\n textDecoration: 'none', // for link buttons\n transition: 'default',\n borderStyle: 'solid',\n borderWidth: {\n fillStyle: {\n fill: 0,\n outline: 2\n },\n variant: {\n premium: 0,\n genai: 0\n }\n },\n borderColor: {\n variant: {\n primary: baseColor('gray-800'),\n secondary: baseColor('gray-300')\n },\n isDisabled: 'disabled',\n isStaticColor: {\n variant: {\n primary: baseColor('transparent-overlay-800'),\n secondary: baseColor('transparent-overlay-300')\n },\n isDisabled: 'transparent-overlay-300'\n },\n forcedColors: {\n default: 'ButtonBorder',\n isHovered: 'Highlight',\n isDisabled: 'GrayText'\n }\n },\n backgroundColor: {\n fillStyle: {\n fill: {\n variant: {\n primary: baseColor('neutral'),\n secondary: baseColor('gray-100'),\n accent: {\n default: lightDark('accent-900', 'accent-700'),\n isHovered: lightDark('accent-1000', 'accent-600'),\n isPressed: lightDark('accent-1000', 'accent-600'),\n isFocusVisible: lightDark('accent-1000', 'accent-600')\n },\n negative: {\n default: lightDark('negative-900', 'negative-700'),\n isHovered: lightDark('negative-1000', 'negative-600'),\n isPressed: lightDark('negative-1000', 'negative-600'),\n isFocusVisible: lightDark('negative-1000', 'negative-600')\n },\n premium: 'gray-100',\n genai: 'gray-100'\n },\n isDisabled: 'disabled'\n },\n outline: {\n variant: {\n premium: 'gray-100',\n genai: 'gray-100'\n },\n default: 'transparent',\n isHovered: 'gray-100',\n isPressed: 'gray-100',\n isFocusVisible: 'gray-100',\n isDisabled: {\n default: 'transparent',\n variant: {\n premium: 'gray-100',\n genai: 'gray-100'\n }\n }\n }\n },\n isStaticColor: {\n fillStyle: {\n fill: {\n variant: {\n primary: baseColor('transparent-overlay-800'),\n secondary: baseColor('transparent-overlay-100'),\n premium: 'transparent-overlay-100',\n genai: 'transparent-overlay-100'\n },\n isDisabled: 'transparent-overlay-100'\n },\n outline: {\n variant: {\n premium: 'transparent-overlay-100',\n genai: 'transparent-overlay-100'\n },\n default: 'transparent',\n isHovered: 'transparent-overlay-100',\n isPressed: 'transparent-overlay-100',\n isFocusVisible: 'transparent-overlay-100',\n isDisabled: {\n default: 'transparent',\n variant: {\n premium: 'transparent-overlay-100',\n genai: 'transparent-overlay-100'\n }\n }\n }\n }\n },\n forcedColors: {\n fillStyle: {\n fill: {\n default: 'ButtonText',\n isHovered: 'Highlight',\n isDisabled: 'GrayText'\n },\n outline: 'ButtonFace'\n }\n }\n },\n color: {\n fillStyle: {\n fill: {\n variant: {\n primary: 'gray-25',\n secondary: baseColor('neutral'),\n accent: 'white',\n negative: 'white',\n premium: 'white',\n genai: 'white'\n },\n isDisabled: 'disabled'\n },\n outline: {\n default: baseColor('neutral'),\n variant: {\n premium: 'white',\n genai: 'white'\n },\n isDisabled: 'disabled'\n }\n },\n isStaticColor: {\n fillStyle: {\n fill: {\n variant: {\n primary: 'auto',\n secondary: 'white',\n premium: 'white',\n genai: 'white'\n }\n },\n outline: {\n variant: {\n premium: 'white',\n genai: 'white'\n },\n default: 'white'\n }\n },\n isDisabled: 'transparent-overlay-400'\n },\n forcedColors: {\n fillStyle: {\n fill: {\n default: 'ButtonFace',\n isDisabled: 'HighlightText'\n },\n outline: {\n default: 'ButtonText',\n isDisabled: 'GrayText'\n }\n }\n }\n },\n '--iconPrimary': {\n type: 'fill',\n value: 'currentColor'\n },\n outlineColor: {\n default: 'focus-ring',\n isStaticColor: 'transparent-overlay-1000',\n forcedColors: 'Highlight'\n },\n forcedColorAdjust: 'none',\n disableTapHighlight: true\n },\n getAllowedOverrides()\n);\n\n// Put the gradient background on a separate element from the button to work around a Safari\n// bug where transitions of custom properties cause layout flickering if any properties use rems. 🤣\n// https://bugs.webkit.org/show_bug.cgi?id=285622\nconst gradient = style({\n position: 'absolute',\n inset: 0,\n zIndex: -1,\n transition: 'default',\n borderRadius: 'inherit',\n backgroundImage: {\n variant: {\n premium: {\n default: linearGradient(\n 'to bottom right',\n ['fuchsia-900', 0],\n ['indigo-900', 66],\n ['blue-900', 100]\n ),\n isHovered: linearGradient(\n 'to bottom right',\n ['fuchsia-1000', 0],\n ['indigo-1000', 66],\n ['blue-1000', 100]\n ),\n isPressed: linearGradient(\n 'to bottom right',\n ['fuchsia-1000', 0],\n ['indigo-1000', 66],\n ['blue-1000', 100]\n ),\n isFocusVisible: linearGradient(\n 'to bottom right',\n ['fuchsia-1000', 0],\n ['indigo-1000', 66],\n ['blue-1000', 100]\n )\n },\n genai: {\n default: linearGradient(\n 'to bottom right',\n ['red-900', 0],\n ['magenta-900', 33],\n ['indigo-900', 100]\n ),\n isHovered: linearGradient(\n 'to bottom right',\n ['red-1000', 0],\n ['magenta-1000', 33],\n ['indigo-1000', 100]\n ),\n isPressed: linearGradient(\n 'to bottom right',\n ['red-1000', 0],\n ['magenta-1000', 33],\n ['indigo-1000', 100]\n ),\n isFocusVisible: linearGradient(\n 'to bottom right',\n ['red-1000', 0],\n ['magenta-1000', 33],\n ['indigo-1000', 100]\n )\n }\n },\n isDisabled: 'none',\n forcedColors: 'none'\n },\n // Force gradient colors to remain static between light and dark theme.\n colorScheme: {\n variant: {\n premium: 'light',\n genai: 'light'\n }\n }\n});\n\nexport function usePendingState(isPending: boolean) {\n let [isProgressVisible, setIsProgressVisible] = useState(false);\n useEffect(() => {\n let timeout: ReturnType<typeof setTimeout>;\n if (isPending) {\n timeout = setTimeout(() => {\n setIsProgressVisible(true);\n }, 1000);\n } else {\n setIsProgressVisible(false);\n }\n return () => {\n clearTimeout(timeout);\n };\n }, [isPending]);\n return {isProgressVisible};\n}\n\n/**\n * Buttons allow users to perform an action.\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 */\nexport const Button = forwardRef(function Button(\n props: ButtonProps,\n ref: FocusableRef<HTMLButtonElement>\n) {\n [props, ref] = useSpectrumContextProps(props, ref, ButtonContext);\n props = useFormProps(props);\n let stringFormatter = useLocalizedStringFormatter(intlMessages, '@react-spectrum/s2');\n let {isPending = false, variant = 'primary', fillStyle = 'fill', size = 'M', staticColor} = props;\n let domRef = useFocusableRef(ref);\n let overlayTriggerState = useContext(OverlayTriggerStateContext);\n\n let {isProgressVisible} = usePendingState(isPending);\n\n return (\n <RACButton\n {...props}\n ref={domRef}\n style={pressScale(domRef, props.UNSAFE_style)}\n className={renderProps =>\n (props.UNSAFE_className || '') +\n button(\n {\n ...renderProps,\n // Retain hover styles when an overlay is open.\n isHovered: renderProps.isHovered || overlayTriggerState?.isOpen || false,\n isDisabled: renderProps.isDisabled || isProgressVisible,\n variant,\n fillStyle,\n size,\n staticColor,\n isStaticColor: !!staticColor\n },\n props.styles\n )\n }>\n {renderProps => (\n <>\n {variant === 'genai' || variant === 'premium' ? (\n <span\n className={gradient({\n ...renderProps,\n // Retain hover styles when an overlay is open.\n isHovered: renderProps.isHovered || overlayTriggerState?.isOpen || false,\n isDisabled: renderProps.isDisabled || isProgressVisible,\n variant\n })}\n />\n ) : null}\n <Provider\n values={[\n [SkeletonContext, null],\n [\n TextContext,\n {\n styles: style({\n paddingY: '--labelPadding',\n order: 1,\n visibility: {\n isProgressVisible: 'hidden'\n }\n })({isProgressVisible}),\n // @ts-ignore data-attributes allowed on all JSX elements, but adding to DOMProps has been problematic in the past\n 'data-rsp-slot': 'text'\n }\n ],\n [\n IconContext,\n {\n render: centerBaseline({slot: 'icon', styles: style({order: 0})}),\n styles: style({\n size: fontRelative(20),\n marginStart: '--iconMargin',\n flexShrink: 0,\n visibility: {\n isProgressVisible: 'hidden'\n }\n })({isProgressVisible})\n }\n ]\n ]}>\n {typeof props.children === 'string' ? <Text>{props.children}</Text> : props.children}\n {isPending && (\n <div\n className={style({\n position: 'absolute',\n top: '50%',\n left: '50%',\n transform: 'translate(-50%, -50%)',\n visibility: {\n default: 'hidden',\n isProgressVisible: 'visible'\n }\n })({isProgressVisible, isPending})}>\n <ProgressCircle\n isIndeterminate\n aria-label={stringFormatter.format('button.pending')}\n size=\"S\"\n staticColor={staticColor}\n styles={style({\n size: {\n size: {\n S: 14,\n M: 18,\n L: 20,\n XL: 24\n }\n }\n })({size})}\n />\n </div>\n )}\n </Provider>\n </>\n )}\n </RACButton>\n );\n});\n\n/**\n * A LinkButton combines the functionality of a link with the appearance of a button. Useful for\n * allowing users to navigate to another page.\n */\nexport const LinkButton = forwardRef(function LinkButton(\n props: LinkButtonProps,\n ref: FocusableRef<HTMLAnchorElement>\n) {\n [props, ref] = useSpectrumContextProps(props, ref, LinkButtonContext);\n props = useFormProps(props);\n let domRef = useFocusableRef(ref);\n let overlayTriggerState = useContext(OverlayTriggerStateContext);\n let {fillStyle = 'fill', size = 'M', variant = 'primary', staticColor, styles, children} = props;\n\n return (\n <Link\n {...props}\n ref={domRef}\n style={pressScale(domRef, props.UNSAFE_style)}\n className={renderProps =>\n (props.UNSAFE_className || '') +\n button(\n {\n ...renderProps,\n // Retain hover styles when an overlay is open.\n isHovered: renderProps.isHovered || overlayTriggerState?.isOpen || false,\n variant,\n fillStyle,\n size,\n staticColor,\n isStaticColor: !!staticColor,\n isPending: false\n },\n styles\n )\n }>\n {renderProps => (\n <>\n {variant === 'genai' || variant === 'premium' ? (\n <span\n className={gradient({\n ...renderProps,\n // Retain hover styles when an overlay is open.\n isHovered: renderProps.isHovered || overlayTriggerState?.isOpen || false,\n variant\n })}\n />\n ) : null}\n <Provider\n values={[\n [SkeletonContext, null],\n [\n TextContext,\n {\n styles: style({paddingY: '--labelPadding', order: 1}),\n // @ts-ignore data-attributes allowed on all JSX elements, but adding to DOMProps has been problematic in the past\n 'data-rsp-slot': 'text'\n }\n ],\n [\n IconContext,\n {\n render: centerBaseline({slot: 'icon', styles: style({order: 0})}),\n styles: style({\n size: fontRelative(20),\n marginStart: '--iconMargin',\n flexShrink: 0\n })\n }\n ]\n ]}>\n {typeof children === 'string' ? <Text>{children}</Text> : children}\n </Provider>\n </>\n )}\n </Link>\n );\n});\n"],"names":[],"version":3,"file":"Button.css.map"}
1
+ {"mappings":"ACuGe;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;;;EAAA;;;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAgNE;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;;EAmLU;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAeD;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EA0EA;;;;EAAA;;;;EAAA;;;;EAQsC;;;;EACtC;;;;EAAA;;;;EAAA;;;;EAAA;;;;;AAreX;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;;AAAA;EAAA;;;;;AAAA;EAAA;;;;;AAAA;EAAA;;;;;AAAA;EAAA;;;;;AAAA;EAAA;;;;;AAAA;EAAA;;;;;AAAA;EAAA;;;;;AAAA;EAAA;IAAA;;;;IAAA;;;;IAAA;;;;IAAA;;;;IAAA;;;;IAAA;;;;IAAA;;;;IAAA;;;;IAAA;;;;IAAA;;;;IAAA;;;;IAAA;;;;IAgNE;;;;;;AAhNF;EAAA;IAAA;;;;;;AAqQS;;;;;;AAAA;;;;;;AAAA","sources":["47c518d02ef77298","packages/@react-spectrum/s2/src/Button.tsx"],"sourcesContent":["@import \"84fda4530d887d61\";\n@import \"58029840d81c849c\";\n@import \"741c49b4968f5e00\";\n@import \"d2d5d6a0faea83be\";\n@import \"7420f4e12e7ef59c\";\n@import \"b849e4ca63c3cc49\";\n@import \"36ff0e1e9ec0e357\";\n@import \"5ed629d4d0b8048c\";\n@import \"341672feb3593eb4\";\n@import \"e68e1721c6627faa\";\n@import \"42efd4ec8049a799\";\n@import \"95ab9abea37ea72d\";\n@import \"8b2fc5f468b9d46d\";\n@import \"52b2e217b498e7a2\";\n@import \"9ea4c114cf8bdeec\";\n@import \"ab8478361150f3f7\";\n@import \"981e6619126f3569\";\n@import \"bcbcf345b1725911\";\n","/*\n * Copyright 2024 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 {baseColor, focusRing, fontRelative, lightDark, style} from '../style' with {type: 'macro'};\nimport {\n ButtonRenderProps,\n Button as RACButton,\n ButtonProps as RACButtonProps\n} from 'react-aria-components/Button';\nimport {centerBaseline} from './CenterBaseline';\nimport {ContextValue, Provider} from 'react-aria-components/slots';\nimport {\n control,\n getAllowedOverrides,\n staticColor,\n StyleProps\n} from './style-utils' with {type: 'macro'};\nimport {createContext, forwardRef, ReactNode, useContext, useEffect, useState} from 'react';\nimport {FocusableRef, FocusableRefValue, GlobalDOMAttributes} from '@react-types/shared';\nimport {IconContext} from './Icon';\nimport intlMessages from '../intl/*.json';\nimport {linearGradient} from '../style/spectrum-theme' with {type: 'macro'};\nimport {Link, LinkProps} from 'react-aria-components/Link';\nimport {OverlayTriggerStateContext} from 'react-aria-components/Dialog';\nimport {pressScale} from './pressScale';\nimport {ProgressCircle} from './ProgressCircle';\nimport {SkeletonContext} from './Skeleton';\nimport {Text, TextContext} from './Content';\nimport {useFocusableRef} from './useDOMRef';\nimport {useFormProps} from './Form';\nimport {useLocalizedStringFormatter} from 'react-aria/useLocalizedStringFormatter';\nimport {useSpectrumContextProps} from './useSpectrumContextProps';\n\ninterface ButtonStyleProps {\n /**\n * The [visual style](https://spectrum.adobe.com/page/button/#Options) of the button.\n *\n * @default 'primary'\n */\n variant?: 'primary' | 'secondary' | 'accent' | 'negative' | 'premium' | 'genai';\n /**\n * The background style of the Button.\n *\n * @default 'fill'\n */\n fillStyle?: 'fill' | 'outline';\n /**\n * The size of the Button.\n *\n * @default 'M'\n */\n size?: 'S' | 'M' | 'L' | 'XL';\n /** The static color style to apply. Useful when the Button appears over a color background. */\n staticColor?: 'white' | 'black' | 'auto';\n}\n\nexport interface ButtonProps\n extends\n Omit<\n RACButtonProps,\n | 'className'\n | 'style'\n | 'render'\n | 'children'\n | 'onHover'\n | 'onHoverStart'\n | 'onHoverEnd'\n | 'onHoverChange'\n | 'onClick'\n | keyof GlobalDOMAttributes\n >,\n StyleProps,\n ButtonStyleProps {\n /** The content to display in the Button. */\n children: ReactNode;\n}\n\nexport interface LinkButtonProps\n extends\n Omit<\n LinkProps,\n 'className' | 'style' | 'render' | 'children' | 'onClick' | keyof GlobalDOMAttributes\n >,\n StyleProps,\n ButtonStyleProps {\n /** The content to display in the Button. */\n children: ReactNode;\n}\n\nexport const ButtonContext =\n createContext<ContextValue<Partial<ButtonProps>, FocusableRefValue<HTMLButtonElement>>>(null);\nexport const LinkButtonContext =\n createContext<ContextValue<Partial<ButtonProps>, FocusableRefValue<HTMLAnchorElement>>>(null);\n\nconst button = style<ButtonRenderProps & ButtonStyleProps & {isStaticColor: boolean}>(\n {\n ...focusRing(),\n ...staticColor(),\n ...control({shape: 'pill', wrap: true, icon: true}),\n position: 'relative',\n justifyContent: 'center',\n textAlign: 'start',\n fontWeight: 'bold',\n userSelect: 'none',\n width: 'fit',\n textDecoration: 'none', // for link buttons\n transition: 'default',\n borderStyle: 'solid',\n borderWidth: {\n fillStyle: {\n fill: 0,\n outline: 2\n },\n variant: {\n premium: 0,\n genai: 0\n }\n },\n borderColor: {\n variant: {\n primary: baseColor('gray-800'),\n secondary: baseColor('gray-300')\n },\n isDisabled: 'disabled',\n isStaticColor: {\n variant: {\n primary: baseColor('transparent-overlay-800'),\n secondary: baseColor('transparent-overlay-300')\n },\n isDisabled: 'transparent-overlay-300'\n },\n forcedColors: {\n default: 'ButtonBorder',\n isHovered: 'Highlight',\n isDisabled: 'GrayText'\n }\n },\n backgroundColor: {\n fillStyle: {\n fill: {\n variant: {\n primary: baseColor('neutral'),\n secondary: baseColor('gray-100'),\n accent: {\n default: lightDark('accent-900', 'accent-700'),\n isHovered: lightDark('accent-1000', 'accent-600'),\n isPressed: lightDark('accent-1000', 'accent-600'),\n isFocusVisible: lightDark('accent-1000', 'accent-600')\n },\n negative: {\n default: lightDark('negative-900', 'negative-700'),\n isHovered: lightDark('negative-1000', 'negative-600'),\n isPressed: lightDark('negative-1000', 'negative-600'),\n isFocusVisible: lightDark('negative-1000', 'negative-600')\n },\n premium: 'gray-100',\n genai: 'gray-100'\n },\n isDisabled: 'disabled'\n },\n outline: {\n variant: {\n premium: 'gray-100',\n genai: 'gray-100'\n },\n default: 'transparent',\n isHovered: 'gray-100',\n isPressed: 'gray-100',\n isFocusVisible: 'gray-100',\n isDisabled: {\n default: 'transparent',\n variant: {\n premium: 'gray-100',\n genai: 'gray-100'\n }\n }\n }\n },\n isStaticColor: {\n fillStyle: {\n fill: {\n variant: {\n primary: baseColor('transparent-overlay-800'),\n secondary: baseColor('transparent-overlay-100'),\n premium: 'transparent-overlay-100',\n genai: 'transparent-overlay-100'\n },\n isDisabled: 'transparent-overlay-100'\n },\n outline: {\n variant: {\n premium: 'transparent-overlay-100',\n genai: 'transparent-overlay-100'\n },\n default: 'transparent',\n isHovered: 'transparent-overlay-100',\n isPressed: 'transparent-overlay-100',\n isFocusVisible: 'transparent-overlay-100',\n isDisabled: {\n default: 'transparent',\n variant: {\n premium: 'transparent-overlay-100',\n genai: 'transparent-overlay-100'\n }\n }\n }\n }\n },\n forcedColors: {\n fillStyle: {\n fill: {\n default: 'ButtonText',\n isHovered: 'Highlight',\n isDisabled: 'GrayText'\n },\n outline: 'ButtonFace'\n }\n }\n },\n color: {\n fillStyle: {\n fill: {\n variant: {\n primary: 'gray-25',\n secondary: baseColor('neutral'),\n accent: 'white',\n negative: 'white',\n premium: 'white',\n genai: 'white'\n },\n isDisabled: 'disabled'\n },\n outline: {\n default: baseColor('neutral'),\n variant: {\n premium: 'white',\n genai: 'white'\n },\n isDisabled: 'disabled'\n }\n },\n isStaticColor: {\n fillStyle: {\n fill: {\n variant: {\n primary: 'auto',\n secondary: {\n default: 'transparent-overlay-1000',\n isHovered: 'transparent-overlay-1000',\n isFocusVisible: 'transparent-overlay-1000',\n isPressed: 'transparent-overlay-1000'\n },\n premium: 'white',\n genai: 'white'\n }\n },\n outline: {\n variant: {\n premium: 'white',\n genai: 'white'\n },\n default: {\n default: 'transparent-overlay-1000',\n isHovered: 'transparent-overlay-1000',\n isFocusVisible: 'transparent-overlay-1000',\n isPressed: 'transparent-overlay-1000'\n }\n }\n },\n isDisabled: 'transparent-overlay-400'\n },\n forcedColors: {\n fillStyle: {\n fill: {\n default: 'ButtonFace',\n isDisabled: 'HighlightText'\n },\n outline: {\n default: 'ButtonText',\n isDisabled: 'GrayText'\n }\n }\n }\n },\n '--iconPrimary': {\n type: 'fill',\n value: 'currentColor'\n },\n outlineColor: {\n default: 'focus-ring',\n isStaticColor: 'transparent-overlay-1000',\n forcedColors: 'Highlight'\n },\n forcedColorAdjust: 'none',\n disableTapHighlight: true\n },\n getAllowedOverrides()\n);\n\n// Put the gradient background on a separate element from the button to work around a Safari\n// bug where transitions of custom properties cause layout flickering if any properties use rems. 🤣\n// https://bugs.webkit.org/show_bug.cgi?id=285622\nconst gradient = style({\n position: 'absolute',\n inset: 0,\n zIndex: -1,\n transition: 'default',\n borderRadius: 'inherit',\n backgroundImage: {\n variant: {\n premium: {\n default: linearGradient(\n 'to bottom right',\n ['fuchsia-900', 0],\n ['indigo-900', 66],\n ['blue-900', 100]\n ),\n isHovered: linearGradient(\n 'to bottom right',\n ['fuchsia-1000', 0],\n ['indigo-1000', 66],\n ['blue-1000', 100]\n ),\n isPressed: linearGradient(\n 'to bottom right',\n ['fuchsia-1000', 0],\n ['indigo-1000', 66],\n ['blue-1000', 100]\n ),\n isFocusVisible: linearGradient(\n 'to bottom right',\n ['fuchsia-1000', 0],\n ['indigo-1000', 66],\n ['blue-1000', 100]\n )\n },\n genai: {\n default: linearGradient(\n 'to bottom right',\n ['red-900', 0],\n ['magenta-900', 33],\n ['indigo-900', 100]\n ),\n isHovered: linearGradient(\n 'to bottom right',\n ['red-1000', 0],\n ['magenta-1000', 33],\n ['indigo-1000', 100]\n ),\n isPressed: linearGradient(\n 'to bottom right',\n ['red-1000', 0],\n ['magenta-1000', 33],\n ['indigo-1000', 100]\n ),\n isFocusVisible: linearGradient(\n 'to bottom right',\n ['red-1000', 0],\n ['magenta-1000', 33],\n ['indigo-1000', 100]\n )\n }\n },\n isDisabled: 'none',\n forcedColors: 'none'\n },\n // Force gradient colors to remain static between light and dark theme.\n colorScheme: {\n variant: {\n premium: 'light',\n genai: 'light'\n }\n }\n});\n\nexport function usePendingState(isPending: boolean) {\n let [isProgressVisible, setIsProgressVisible] = useState(false);\n useEffect(() => {\n let timeout: ReturnType<typeof setTimeout>;\n if (isPending) {\n timeout = setTimeout(() => {\n setIsProgressVisible(true);\n }, 1000);\n } else {\n setIsProgressVisible(false);\n }\n return () => {\n clearTimeout(timeout);\n };\n }, [isPending]);\n return {isProgressVisible};\n}\n\n/**\n * Buttons allow users to perform an action.\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 */\nexport const Button = forwardRef(function Button(\n props: ButtonProps,\n ref: FocusableRef<HTMLButtonElement>\n) {\n [props, ref] = useSpectrumContextProps(props, ref, ButtonContext);\n props = useFormProps(props);\n let stringFormatter = useLocalizedStringFormatter(intlMessages, '@react-spectrum/s2');\n let {isPending = false, variant = 'primary', fillStyle = 'fill', size = 'M', staticColor} = props;\n let domRef = useFocusableRef(ref);\n let overlayTriggerState = useContext(OverlayTriggerStateContext);\n\n let {isProgressVisible} = usePendingState(isPending);\n\n return (\n <RACButton\n {...props}\n ref={domRef}\n style={pressScale(domRef, props.UNSAFE_style)}\n className={renderProps =>\n (props.UNSAFE_className || '') +\n button(\n {\n ...renderProps,\n // Retain hover styles when an overlay is open.\n isHovered: renderProps.isHovered || overlayTriggerState?.isOpen || false,\n isDisabled: renderProps.isDisabled || isProgressVisible,\n variant,\n fillStyle,\n size,\n staticColor,\n isStaticColor: !!staticColor\n },\n props.styles\n )\n }>\n {renderProps => (\n <>\n {variant === 'genai' || variant === 'premium' ? (\n <span\n className={gradient({\n ...renderProps,\n // Retain hover styles when an overlay is open.\n isHovered: renderProps.isHovered || overlayTriggerState?.isOpen || false,\n isDisabled: renderProps.isDisabled || isProgressVisible,\n variant\n })}\n />\n ) : null}\n <Provider\n values={[\n [SkeletonContext, null],\n [\n TextContext,\n {\n styles: style({\n paddingY: '--labelPadding',\n order: 1,\n visibility: {\n isProgressVisible: 'hidden'\n }\n })({isProgressVisible}),\n // @ts-ignore data-attributes allowed on all JSX elements, but adding to DOMProps has been problematic in the past\n 'data-rsp-slot': 'text'\n }\n ],\n [\n IconContext,\n {\n render: centerBaseline({slot: 'icon', styles: style({order: 0})}),\n styles: style({\n size: fontRelative(20),\n marginStart: '--iconMargin',\n flexShrink: 0,\n visibility: {\n isProgressVisible: 'hidden'\n }\n })({isProgressVisible})\n }\n ]\n ]}>\n {typeof props.children === 'string' ? <Text>{props.children}</Text> : props.children}\n {isPending && (\n <div\n className={style({\n position: 'absolute',\n top: '50%',\n left: '50%',\n transform: 'translate(-50%, -50%)',\n visibility: {\n default: 'hidden',\n isProgressVisible: 'visible'\n }\n })({isProgressVisible, isPending})}>\n <ProgressCircle\n isIndeterminate\n aria-label={stringFormatter.format('button.pending')}\n size=\"S\"\n staticColor={staticColor}\n styles={style({\n size: {\n size: {\n S: 14,\n M: 18,\n L: 20,\n XL: 24\n }\n }\n })({size})}\n />\n </div>\n )}\n </Provider>\n </>\n )}\n </RACButton>\n );\n});\n\n/**\n * A LinkButton combines the functionality of a link with the appearance of a button. Useful for\n * allowing users to navigate to another page.\n */\nexport const LinkButton = forwardRef(function LinkButton(\n props: LinkButtonProps,\n ref: FocusableRef<HTMLAnchorElement>\n) {\n [props, ref] = useSpectrumContextProps(props, ref, LinkButtonContext);\n props = useFormProps(props);\n let domRef = useFocusableRef(ref);\n let overlayTriggerState = useContext(OverlayTriggerStateContext);\n let {fillStyle = 'fill', size = 'M', variant = 'primary', staticColor, styles, children} = props;\n\n return (\n <Link\n {...props}\n ref={domRef}\n style={pressScale(domRef, props.UNSAFE_style)}\n className={renderProps =>\n (props.UNSAFE_className || '') +\n button(\n {\n ...renderProps,\n // Retain hover styles when an overlay is open.\n isHovered: renderProps.isHovered || overlayTriggerState?.isOpen || false,\n variant,\n fillStyle,\n size,\n staticColor,\n isStaticColor: !!staticColor,\n isPending: false\n },\n styles\n )\n }>\n {renderProps => (\n <>\n {variant === 'genai' || variant === 'premium' ? (\n <span\n className={gradient({\n ...renderProps,\n // Retain hover styles when an overlay is open.\n isHovered: renderProps.isHovered || overlayTriggerState?.isOpen || false,\n variant\n })}\n />\n ) : null}\n <Provider\n values={[\n [SkeletonContext, null],\n [\n TextContext,\n {\n styles: style({paddingY: '--labelPadding', order: 1}),\n // @ts-ignore data-attributes allowed on all JSX elements, but adding to DOMProps has been problematic in the past\n 'data-rsp-slot': 'text'\n }\n ],\n [\n IconContext,\n {\n render: centerBaseline({slot: 'icon', styles: style({order: 0})}),\n styles: style({\n size: fontRelative(20),\n marginStart: '--iconMargin',\n flexShrink: 0\n })\n }\n ]\n ]}>\n {typeof children === 'string' ? <Text>{children}</Text> : children}\n </Provider>\n </>\n )}\n </Link>\n );\n});\n"],"names":[],"version":3,"file":"Button.css.map"}