@shopgate/engage 7.32.0-beta.6 → 7.32.0-beta.8

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 (205) hide show
  1. package/account/components/Profile/ProfileAddressBook.d.ts.map +1 -1
  2. package/account/components/Profile/ProfileAddressBook.js +13 -22
  3. package/account/components/Profile/ProfileAddressCard.d.ts.map +1 -1
  4. package/account/components/Profile/ProfileAddressCard.js +9 -18
  5. package/account/components/Profile/ProfileForm.d.ts.map +1 -1
  6. package/account/components/Profile/ProfileForm.js +15 -42
  7. package/account/components/ProfileContact/ProfileContact.js +13 -21
  8. package/admin-preview/components/FrontendSettingsPreviewBridge/FrontendSettingsPreviewBridge.d.ts.map +1 -1
  9. package/admin-preview/components/FrontendSettingsPreviewBridge/FrontendSettingsPreviewBridge.js +40 -6
  10. package/admin-preview/components/FrontendSettingsPreviewBridge/types.d.ts +9 -2
  11. package/admin-preview/components/FrontendSettingsPreviewBridge/types.d.ts.map +1 -1
  12. package/admin-preview/initialization/_internal/initialFrontendSettings.d.ts +32 -0
  13. package/admin-preview/initialization/_internal/initialFrontendSettings.d.ts.map +1 -0
  14. package/admin-preview/initialization/_internal/initialFrontendSettings.js +43 -0
  15. package/admin-preview/initialization/awaitInitialFrontendSettings.d.ts +22 -0
  16. package/admin-preview/initialization/awaitInitialFrontendSettings.d.ts.map +1 -0
  17. package/admin-preview/initialization/awaitInitialFrontendSettings.js +84 -0
  18. package/back-in-stock/components/BackInStockButton/index.js +5 -5
  19. package/cart/components/CartItem/CartItemProductLayout.js +1 -0
  20. package/cart/components/CartItem/CartItemProductLayoutWideRemoveItem.js +7 -14
  21. package/cart/components/CartItems/CartItemCardReservationLabelChangeStore.js +6 -24
  22. package/cart/components/CartItems/CartItems.js +8 -10
  23. package/cart/components/CartItems/CartItemsSubstitution.js +3 -2
  24. package/cart/components/CartSummaryWide/CartSummaryWide.js +2 -2
  25. package/cart/components/CartSummaryWide/CartSummaryWideCheckoutButton.js +9 -23
  26. package/cart/components/PaymentBar/PaymentBarCheckoutButton.js +8 -30
  27. package/cart/components/PaymentBar/testUtils/mockFactories.js +4 -11
  28. package/category/components/CategoryImage/index.js +13 -2
  29. package/checkout/components/AddressBook/AddressList.js +14 -23
  30. package/checkout/components/Checkout/CheckoutActions.js +4 -3
  31. package/checkout/components/Checkout/CheckoutAddress.js +8 -0
  32. package/checkout/components/Checkout/CheckoutSection.js +6 -2
  33. package/checkout/components/CheckoutConfirmation/CheckoutConfirmation.js +6 -7
  34. package/checkout/components/ResponsiveBackButton/ResponsiveBackButton.js +7 -17
  35. package/components/Card/Card.d.ts +27 -0
  36. package/components/Card/Card.d.ts.map +1 -0
  37. package/components/Card/Card.js +57 -0
  38. package/components/Card/index.d.ts +4 -0
  39. package/components/Card/index.d.ts.map +1 -0
  40. package/components/Card/index.js +2 -0
  41. package/components/Card/spec.d.ts +2 -0
  42. package/components/Card/spec.d.ts.map +1 -0
  43. package/components/Card/spec.js +128 -0
  44. package/components/Card/useCardAppearance.d.ts +11 -0
  45. package/components/Card/useCardAppearance.d.ts.map +1 -0
  46. package/components/Card/useCardAppearance.js +22 -0
  47. package/components/ChipLayout/index.js +2 -4
  48. package/components/NavigationHandler/connector.js +1 -1
  49. package/components/NavigationHandler/spec.js +10 -1
  50. package/components/Paper/Paper.d.ts +48 -0
  51. package/components/Paper/Paper.d.ts.map +1 -0
  52. package/components/Paper/Paper.js +64 -0
  53. package/components/Paper/index.d.ts +3 -0
  54. package/components/Paper/index.d.ts.map +1 -0
  55. package/components/Paper/index.js +1 -0
  56. package/components/Paper/spec.d.ts +2 -0
  57. package/components/Paper/spec.d.ts.map +1 -0
  58. package/components/Paper/spec.js +131 -0
  59. package/components/RadioCard/RadioCard.d.ts.map +1 -1
  60. package/components/RadioCard/RadioCard.js +2 -1
  61. package/components/Tabs/components/Tab.d.ts.map +1 -1
  62. package/components/Tabs/components/Tab.js +14 -16
  63. package/components/Typography/Typography.d.ts +1 -1
  64. package/components/index.d.ts +4 -1
  65. package/components/index.d.ts.map +1 -1
  66. package/components/index.js +3 -2
  67. package/components/v2/Button/Button.d.ts +24 -13
  68. package/components/v2/Button/Button.d.ts.map +1 -1
  69. package/components/v2/Button/Button.js +89 -37
  70. package/components/v2/ButtonBase/ButtonBase.d.ts +50 -10
  71. package/components/v2/ButtonBase/ButtonBase.d.ts.map +1 -1
  72. package/components/v2/ButtonBase/ButtonBase.js +153 -16
  73. package/components/v2/ButtonBase/hooks.d.ts +0 -1
  74. package/components/v2/ButtonBase/hooks.d.ts.map +1 -1
  75. package/components/v2/ButtonBase/hooks.js +36 -12
  76. package/components/v2/ButtonGroup/ButtonGroup.d.ts +11 -5
  77. package/components/v2/ButtonGroup/ButtonGroup.d.ts.map +1 -1
  78. package/components/v2/ButtonGroup/ButtonGroup.js +30 -18
  79. package/components/v2/CircularProgress/CircularProgress.d.ts.map +1 -1
  80. package/components/v2/CircularProgress/CircularProgress.js +10 -5
  81. package/core/hooks/useNavigation.d.ts +10 -2
  82. package/core/hooks/useNavigation.d.ts.map +1 -1
  83. package/core/hooks/useNavigation.js +1 -2
  84. package/core/initialization/index.d.ts.map +1 -1
  85. package/core/initialization/index.js +24 -5
  86. package/core/router/conductor.d.ts +9 -0
  87. package/core/router/helpers.d.ts +28 -15
  88. package/core/router/helpers.d.ts.map +1 -1
  89. package/core/router/helpers.js +8 -8
  90. package/development/components/DevelopmentSettings/DevelopmentSettings.js +3 -3
  91. package/favorites/components/FavoriteButtonWide/FavoriteButtonWide.js +7 -17
  92. package/favorites/components/Item/Item.d.ts +1 -1
  93. package/favorites/components/List/List.d.ts.map +1 -1
  94. package/favorites/components/List/List.js +0 -1
  95. package/favorites/components/List/ListContent.js +4 -5
  96. package/favorites/components/Lists/Lists.js +4 -5
  97. package/filter/components/FilterPageContent/components/ApplyButton/index.js +8 -10
  98. package/filter/components/FilterPageContent/components/ResetButton/index.js +8 -6
  99. package/locations/components/ChangeLocationButton/ChangeLocationButton.js +10 -14
  100. package/locations/components/FulfillmentSlotSwitcher/FulfillmentSlotDialog.js +4 -8
  101. package/locations/components/FulfillmentSlotSwitcher/FulfillmentSlotSwitcher.js +1 -1
  102. package/locations/components/FulfillmentSlotSwitcher/FulfillmentSlotSwitcherBar.js +8 -13
  103. package/locations/components/FulfillmentSlotSwitcher/FulfillmentSlotSwitcherDefault.js +10 -10
  104. package/locations/components/GlobalLocationSwitcher/GlobalLocationSwitcherBar.js +8 -14
  105. package/locations/components/GlobalLocationSwitcher/GlobalLocationSwitcherDefault.js +9 -10
  106. package/locations/components/ReserveForm/ReserveForm.js +6 -7
  107. package/locations/components/StoreDetails/components/GetDirectionsButton.js +2 -4
  108. package/locations/components/StoreDetails/components/StoreDetails.js +5 -10
  109. package/locations/components/StoreDetails/components/StoresNearbyListItem.js +13 -21
  110. package/locations/components/StoreFinder/StoreFinderSelectLocationButton.js +5 -11
  111. package/locations/components/StoreFinder/StoreFinderStoreInfoButton.js +5 -11
  112. package/locations/components/StoreList/StoreSelectLocationButton.js +5 -11
  113. package/login/components/ForgotPassword/ForgotPassword.js +11 -23
  114. package/orders/components/OrderDetails/OrderDetailsAuthenticate.js +5 -7
  115. package/orders/components/OrderHistory/OrderHistoryList.d.ts.map +1 -1
  116. package/orders/components/OrderHistory/OrderHistoryList.js +8 -9
  117. package/orders/components/OrderHistory/OrderHistoryTable.d.ts.map +1 -1
  118. package/orders/components/OrderHistory/OrderHistoryTable.js +4 -0
  119. package/package.json +7 -7
  120. package/page/components/NotFound.d.ts.map +1 -1
  121. package/page/components/NotFound.js +7 -6
  122. package/page/components/ResponsiveWidgetImage/ResponsiveWidgetImage.d.ts +1 -1
  123. package/page/components/ResponsiveWidgetImage/ResponsiveWidgetImage.js +2 -2
  124. package/page/components/WidgetVideo/WidgetVideo.d.ts +1 -1
  125. package/page/components/WidgetVideo/WidgetVideo.d.ts.map +1 -1
  126. package/page/helpers/index.d.ts +5 -2
  127. package/page/helpers/index.d.ts.map +1 -1
  128. package/page/helpers/index.js +8 -5
  129. package/page/widgets/Button/Button.js +2 -3
  130. package/page/widgets/NestedCategoryFilter/NestedCategoryFilter.js +8 -8
  131. package/page/widgets/ProductList/ProductList.js +18 -14
  132. package/page/widgets/Video/hooks.d.ts +2 -2
  133. package/product/components/ProductCard/index.js +27 -14
  134. package/product/components/ProductGrid/components/Item/components/ItemDetails/index.js +6 -3
  135. package/product/components/ProductGrid/components/Item/components/ItemImage/index.js +1 -11
  136. package/product/components/ProductGrid/components/Item/components/ItemName/index.js +5 -1
  137. package/product/components/ProductGrid/components/Item/components/ItemName/spec.js +19 -1
  138. package/product/components/ProductGrid/components/Item/index.js +10 -1
  139. package/product/components/ProductImage/ProductImage.d.ts.map +1 -1
  140. package/product/components/ProductImage/ProductImage.js +7 -2
  141. package/product/components/ProductImage/ProductImagePlaceholder.js +3 -3
  142. package/product/components/ProductSlider/index.js +4 -2
  143. package/product/components/RelationsSlider/RelationsSliderContent.js +3 -2
  144. package/product/components/RelationsSlider/constants.d.ts +3 -0
  145. package/product/components/RelationsSlider/constants.d.ts.map +1 -0
  146. package/product/components/RelationsSlider/constants.js +2 -1
  147. package/product/components/RelationsSlider/hooks.d.ts +6 -0
  148. package/product/components/RelationsSlider/hooks.d.ts.map +1 -0
  149. package/product/components/RelationsSlider/hooks.js +34 -0
  150. package/product/components/UnitQuantityPicker/UnitQuantityPicker.d.ts.map +1 -1
  151. package/product/components/UnitQuantityPicker/UnitQuantityPicker.js +14 -33
  152. package/push-opt-in/components/PushOptInModal/index.js +4 -4
  153. package/registration/components/Registration/RegistrationFormActions.js +4 -4
  154. package/reviews/components/Reviews/components/AllReviewsLink/index.js +6 -6
  155. package/reviews/components/Reviews/components/Header/components/WriteReviewLink/index.js +4 -3
  156. package/reviews/components/Reviews/components/Header/components/WriteReviewLink/spec.js +28 -22
  157. package/reviews/components/Reviews/spec.js +5 -6
  158. package/settings/action-creators/appSettings.d.ts +3 -3
  159. package/settings/action-creators/appSettings.d.ts.map +1 -1
  160. package/settings/reducers/appSettings.d.ts.map +1 -1
  161. package/settings/reducers/appSettings.js +40 -18
  162. package/settings/reducers/index.d.ts +1 -1
  163. package/settings/selectors/appSettings.d.ts +48 -0
  164. package/settings/selectors/appSettings.d.ts.map +1 -1
  165. package/settings/selectors/appSettings.js +31 -1
  166. package/settings/types/appSettings.d.ts +69 -0
  167. package/settings/types/appSettings.d.ts.map +1 -1
  168. package/styles/helpers/index.d.ts +1 -0
  169. package/styles/helpers/index.js +1 -0
  170. package/styles/helpers/loadFontCss.d.ts +22 -0
  171. package/styles/helpers/loadFontCss.d.ts.map +1 -0
  172. package/styles/helpers/loadFontCss.js +138 -0
  173. package/styles/helpers/loadThemeCss.d.ts.map +1 -1
  174. package/styles/helpers/loadThemeCss.js +11 -0
  175. package/styles/index.d.ts +1 -1
  176. package/styles/index.d.ts.map +1 -1
  177. package/styles/theme/createTheme/createComponents.types.d.ts +75 -0
  178. package/styles/theme/createTheme/createComponents.types.d.ts.map +1 -1
  179. package/styles/theme/createTheme/createComponents.types.js +75 -0
  180. package/styles/theme/createTheme/createCssVarsForColorSchemeThemes.d.ts.map +1 -1
  181. package/styles/theme/createTheme/createCssVarsForColorSchemeThemes.js +5 -1
  182. package/styles/theme/createTheme/createPalette.types.d.ts +4 -0
  183. package/styles/theme/createTheme/createPalette.types.d.ts.map +1 -1
  184. package/styles/theme/createTheme/createPalette.types.js +5 -1
  185. package/styles/theme/createTheme/createShape.d.ts +3 -0
  186. package/styles/theme/createTheme/createShape.d.ts.map +1 -1
  187. package/styles/theme/createTheme/createThemeFromColorScheme.d.ts +3 -1
  188. package/styles/theme/createTheme/createThemeFromColorScheme.d.ts.map +1 -1
  189. package/styles/theme/createTheme/createThemeFromColorScheme.js +6 -3
  190. package/styles/theme/createTheme/createTypography.d.ts +2 -1
  191. package/styles/theme/createTheme/createTypography.js +58 -18
  192. package/styles/theme/createTheme/index.js +1 -1
  193. package/styles/theme/createTheme/shadows.d.ts +11 -1
  194. package/styles/theme/createTheme/shadows.d.ts.map +1 -1
  195. package/styles/theme/createTheme/shadows.js +41 -7
  196. package/styles/theme/createTheme/types.d.ts +5 -1
  197. package/styles/theme/createTheme/types.d.ts.map +1 -1
  198. package/styles/theme/index.d.ts +2 -0
  199. package/styles/theme/index.d.ts.map +1 -1
  200. package/tracking/components/CookieConsentModal/index.js +3 -4
  201. package/tracking/components/PrivacySettings/index.js +3 -3
  202. package/cart/components/PaymentBar/PaymentBarReserveButton.connector.js +0 -6
  203. package/cart/components/PaymentBar/PaymentBarReserveButton.js +0 -71
  204. package/locations/components/StoreFinder/StoreFinderGetDirectionsButton.connector.js +0 -16
  205. package/locations/components/StoreFinder/StoreFinderGetDirectionsButton.js +0 -52
@@ -1,45 +1,140 @@
1
1
  import "core-js/modules/es.array.includes.js";
2
- import React, { forwardRef } from 'react';
2
+ import "core-js/modules/es.string.replace.js";
3
+ import React, { forwardRef, useEffect } from 'react';
3
4
  import { makeStyles } from '@shopgate/engage/styles';
4
5
  import { useReduceMotion } from '@shopgate/engage/a11y/hooks';
6
+ // Imported from the defining modules instead of the `core` barrels on purpose: `core/hooks` imports
7
+ // from `engage/components`, so going through a barrel would create a circular import.
8
+ import { useNavigation } from '@shopgate/engage/core/hooks/useNavigation';
9
+ import { hasWebBridge } from '@shopgate/engage/core/helpers/bridge';
5
10
  import Ripple from "./Ripple";
6
11
  import { usePressRipple } from "./hooks";
7
12
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
8
13
  const supportedButtonTypes = ['button', 'submit', 'reset'];
9
14
 
15
+ /**
16
+ * Props read off the resolved element rather than declared on `ButtonBaseOwnProps`. Typed loosely
17
+ * because the element type is generic - `React.ComponentPropsWithRef<C>` keeps consumers exact.
18
+ */
19
+
10
20
  /**
11
21
  * The ButtonBase component serves as a foundational button element that can be extended with
12
22
  * additional styles and functionality. It handles basic button behavior, including disabled
13
23
  * state and type validation.
14
24
  */
15
- const ButtonBase = /*#__PURE__*/forwardRef((props, ref) => {
25
+ function ButtonBase(props, ref) {
16
26
  const {
27
+ component,
28
+ href,
29
+ linkOptions,
17
30
  disabled = false,
18
31
  disableRipple: disableRippleProp = false,
32
+ disableBaseClassName = false,
33
+ className,
34
+ classes: classesProp,
35
+ testId,
36
+ children,
37
+ ...rest
38
+ } = props;
39
+ const {
19
40
  type = 'button',
41
+ onClick,
42
+ onKeyDown,
20
43
  onPointerDown,
21
44
  onPointerUp,
22
45
  onPointerLeave,
23
46
  onPointerCancel,
24
- className,
25
- children,
26
47
  ...other
27
- } = props;
48
+ } = rest;
28
49
  const {
29
50
  classes,
30
51
  cx
31
52
  } = useStyles(undefined, {
32
53
  props: {
33
- classes: props.classes
54
+ classes: classesProp
34
55
  }
35
56
  });
36
57
  const {
37
58
  ripples,
38
59
  start,
39
- end
60
+ end,
61
+ clearAll
40
62
  } = usePressRipple();
41
63
  const reduceMotion = useReduceMotion();
64
+ const {
65
+ push,
66
+ replace
67
+ } = useNavigation();
42
68
  const disableRipple = disableRippleProp || reduceMotion;
69
+
70
+ // A button that disables itself on click gets `pointer-events: none`, which makes the browser
71
+ // drop the pointer capture. The pointer up then lands somewhere else and the ripple would never
72
+ // be told to finish, so it's cleared here instead.
73
+ useEffect(() => {
74
+ if (disabled) {
75
+ clearAll();
76
+ }
77
+ }, [disabled, clearAll]);
78
+
79
+ // A real anchor is only safe on web builds. Inside the app webview `preventDefault()` sometimes
80
+ // fails and the page navigates for real, so link buttons stay `<button>` there.
81
+ const Component = component || (href && hasWebBridge() ? 'a' : 'button');
82
+ const isButtonElement = Component === 'button';
83
+
84
+ /**
85
+ * Hands the target over to the app router. Deferred like the `Link` component does, so the
86
+ * current event finishes dispatching before the route changes.
87
+ */
88
+ const navigate = () => {
89
+ if (!href) {
90
+ return;
91
+ }
92
+ const state = {
93
+ ...linkOptions?.state,
94
+ ...(linkOptions?.target ? {
95
+ target: linkOptions.target
96
+ } : {})
97
+ };
98
+ const params = {
99
+ pathname: href,
100
+ ...(Object.keys(state).length ? {
101
+ state
102
+ } : {})
103
+ };
104
+ setTimeout(() => {
105
+ if (linkOptions?.replace) {
106
+ replace(params);
107
+ } else {
108
+ push(params);
109
+ }
110
+ }, 0);
111
+ };
112
+ const handleClick = event => {
113
+ if (disabled) {
114
+ event.preventDefault();
115
+ return;
116
+ }
117
+ onClick?.(event);
118
+ if (!href || event.defaultPrevented) {
119
+ return;
120
+ }
121
+ event.preventDefault();
122
+ navigate();
123
+ };
124
+ const handleKeyDown = event => {
125
+ onKeyDown?.(event);
126
+ if (isButtonElement || disabled || event.defaultPrevented) {
127
+ return;
128
+ }
129
+ if (event.key !== 'Enter' && event.key !== ' ') {
130
+ return;
131
+ }
132
+
133
+ // Only buttons activate on Enter and Space. Preventing the default also stops an anchor from
134
+ // firing its own click on Enter, so the element is activated exactly once.
135
+ event.preventDefault();
136
+ event.currentTarget.click();
137
+ };
43
138
  const handlePointerDown = event => {
44
139
  if (!disabled && !disableRipple) {
45
140
  event.currentTarget.setPointerCapture?.(event.pointerId);
@@ -47,41 +142,75 @@ const ButtonBase = /*#__PURE__*/forwardRef((props, ref) => {
47
142
  }
48
143
  onPointerDown?.(event);
49
144
  };
145
+
146
+ /**
147
+ * Gives up pointer capture that was taken on pointer down. While an element captures the pointer,
148
+ * hit testing is redirected to it, so it keeps matching `:hover` and never receives a leave event.
149
+ * @param event The pointer event.
150
+ */
151
+ const releaseCapture = event => {
152
+ const target = event.currentTarget;
153
+ if (target.hasPointerCapture?.(event.pointerId)) {
154
+ target.releasePointerCapture(event.pointerId);
155
+ }
156
+ };
50
157
  const handlePointerUp = event => {
158
+ releaseCapture(event);
51
159
  if (!disableRipple) {
52
160
  end(event.pointerId);
53
161
  }
54
162
  onPointerUp?.(event);
55
163
  };
56
164
  const handlePointerCancel = event => {
165
+ releaseCapture(event);
57
166
  if (!disableRipple) {
58
167
  end(event.pointerId);
59
168
  }
60
169
  onPointerCancel?.(event);
61
170
  };
171
+
172
+ /**
173
+ * Fires whenever the capture taken on pointer down ends - including when the browser drops it
174
+ * because the element stopped being hit testable. Without this the ripple would stay behind.
175
+ * @param event The pointer event.
176
+ */
177
+ const handleLostPointerCapture = event => {
178
+ if (!disableRipple) {
179
+ end(event.pointerId);
180
+ }
181
+ };
62
182
  const handlePointerLeave = event => {
63
183
  if (!disableRipple && event.buttons === 1) {
64
184
  end(event.pointerId);
65
185
  }
66
186
  onPointerLeave?.(event);
67
187
  };
68
- return /*#__PURE__*/_jsxs("button", {
188
+ return /*#__PURE__*/_jsxs(Component, {
69
189
  ref: ref,
70
- className: cx(classes.root, className),
71
- disabled: disabled,
190
+ "data-test-id": testId,
191
+ className: cx(classes.root, !disableBaseClassName && 'engage__button-base', className),
192
+ onClick: handleClick,
193
+ onKeyDown: handleKeyDown,
72
194
  onPointerDown: handlePointerDown,
73
195
  onPointerUp: handlePointerUp,
74
196
  onPointerCancel: handlePointerCancel,
75
- onPointerLeave: handlePointerLeave
76
- // eslint-disable-next-line react/button-has-type
77
- ,
78
- type: supportedButtonTypes.includes(type) ? type : 'button',
197
+ onPointerLeave: handlePointerLeave,
198
+ onLostPointerCapture: handleLostPointerCapture,
199
+ ...(isButtonElement ? {
200
+ disabled,
201
+ type: supportedButtonTypes.includes(type) ? type : 'button'
202
+ } : {
203
+ 'aria-disabled': disabled || undefined,
204
+ ...(href ? {
205
+ href
206
+ } : {})
207
+ }),
79
208
  ...other,
80
209
  children: [children, !disableRipple && /*#__PURE__*/_jsx(Ripple, {
81
210
  ripples: ripples
82
211
  })]
83
212
  });
84
- });
213
+ }
85
214
  const useStyles = makeStyles({
86
215
  name: 'ButtonBase'
87
216
  })({
@@ -109,9 +238,17 @@ const useStyles = makeStyles({
109
238
  borderStyle: 'none'
110
239
  },
111
240
  '&:disabled': {
241
+ cursor: 'not-allowed'
242
+ },
243
+ '&[aria-disabled="true"]': {
112
244
  pointerEvents: 'none',
113
245
  cursor: 'default'
114
246
  }
115
247
  }
116
248
  });
117
- export default ButtonBase;
249
+ const ButtonBaseWithRef = /*#__PURE__*/forwardRef(ButtonBase);
250
+ ButtonBaseWithRef.displayName = 'ButtonBase';
251
+
252
+ // `forwardRef` erases the generic, so the call signature is restored with a cast. Same approach as
253
+ // the Typography component.
254
+ export default ButtonBaseWithRef;
@@ -1,6 +1,5 @@
1
1
  export interface RippleItem {
2
2
  key: number;
3
- pointerId: number;
4
3
  x: number;
5
4
  y: number;
6
5
  size: number;
@@ -1 +1 @@
1
- {"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../../../../components/v2/ButtonBase/hooks.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,UAAU;IACzB,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;IAClB,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;;;;;;;GAQG;AACH,wBAAgB,cAAc;;mBAKM,KAAK,CAAC,YAAY,CAAC,WAAW,CAAC;qBA2B7B,MAAM;;EA0B3C"}
1
+ {"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../../../../components/v2/ButtonBase/hooks.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,UAAU;IACzB,GAAG,EAAE,MAAM,CAAC;IACZ,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;;;;;;;GAQG;AACH,wBAAgB,cAAc;;mBAYM,KAAK,CAAC,YAAY,CAAC,WAAW,CAAC;qBAqC7B,MAAM;;EA2C3C"}
@@ -1,4 +1,4 @@
1
- import { useCallback, useRef, useState } from 'react';
1
+ import { useCallback, useEffect, useRef, useState } from 'react';
2
2
  import { RIPPLE_MIN_VISIBLE_MS } from "./constants";
3
3
  /**
4
4
  * Manages the active ripple queue.
@@ -12,39 +12,63 @@ import { RIPPLE_MIN_VISIBLE_MS } from "./constants";
12
12
  export function usePressRipple() {
13
13
  const [ripples, setRipples] = useState([]);
14
14
  const nextKey = useRef(0);
15
- const startedAtByPointer = useRef(new Map());
15
+ const startedAtByKey = useRef(new Map());
16
+ const activeKeyByPointer = useRef(new Map());
17
+ const pendingTimeouts = useRef(new Set());
18
+ useEffect(() => () => {
19
+ pendingTimeouts.current.forEach(timeoutId => window.clearTimeout(timeoutId));
20
+ pendingTimeouts.current.clear();
21
+ }, []);
16
22
  const start = useCallback(event => {
17
23
  const element = event.currentTarget;
18
24
  const rect = element.getBoundingClientRect();
19
- const rippleX = Math.round(event.clientX - rect.left);
20
- const rippleY = Math.round(event.clientY - rect.top);
25
+ const hasPointerPosition = Number.isFinite(event.clientX) && Number.isFinite(event.clientY);
26
+ const rippleX = hasPointerPosition ? Math.round(event.clientX - rect.left) : Math.round(element.clientWidth / 2);
27
+ const rippleY = hasPointerPosition ? Math.round(event.clientY - rect.top) : Math.round(element.clientHeight / 2);
21
28
  const sizeX = Math.max(element.clientWidth - rippleX, rippleX) * 2 + 2;
22
29
  const sizeY = Math.max(element.clientHeight - rippleY, rippleY) * 2 + 2;
23
30
  const rippleSize = Math.sqrt(sizeX ** 2 + sizeY ** 2);
24
- startedAtByPointer.current.set(event.pointerId, performance.now());
25
31
  nextKey.current += 1;
32
+ const key = nextKey.current;
33
+ startedAtByKey.current.set(key, performance.now());
34
+
35
+ // A mouse reuses one pointerId for every press, so the pointer only ever points at the newest
36
+ // one. Keying the rest by ripple instead means an earlier press can no longer end this one.
37
+ activeKeyByPointer.current.set(event.pointerId, key);
26
38
  setRipples(prev => [].concat(prev, [{
27
- key: nextKey.current,
28
- pointerId: event.pointerId,
39
+ key,
29
40
  x: rippleX,
30
41
  y: rippleY,
31
42
  size: rippleSize
32
43
  }]));
33
44
  }, []);
34
45
  const end = useCallback(pointerId => {
35
- const startedAt = startedAtByPointer.current.get(pointerId);
46
+ const key = activeKeyByPointer.current.get(pointerId);
47
+ if (key == null) {
48
+ return;
49
+ }
50
+
51
+ // Pointer up, cancel, leave and lost capture can all fire for a single press, and the press is
52
+ // over after whichever comes first.
53
+ activeKeyByPointer.current.delete(pointerId);
54
+ const startedAt = startedAtByKey.current.get(key);
36
55
  if (startedAt == null) {
37
56
  return;
38
57
  }
39
58
  const elapsed = performance.now() - startedAt;
40
59
  const delay = Math.max(0, RIPPLE_MIN_VISIBLE_MS - elapsed);
41
- window.setTimeout(() => {
42
- setRipples(prev => prev.filter(ripple => ripple.pointerId !== pointerId));
43
- startedAtByPointer.current.delete(pointerId);
60
+ const timeoutId = window.setTimeout(() => {
61
+ pendingTimeouts.current.delete(timeoutId);
62
+ setRipples(prev => prev.filter(ripple => ripple.key !== key));
63
+ startedAtByKey.current.delete(key);
44
64
  }, delay);
65
+ pendingTimeouts.current.add(timeoutId);
45
66
  }, []);
46
67
  const clearAll = useCallback(() => {
47
- startedAtByPointer.current.clear();
68
+ pendingTimeouts.current.forEach(timeoutId => window.clearTimeout(timeoutId));
69
+ pendingTimeouts.current.clear();
70
+ startedAtByKey.current.clear();
71
+ activeKeyByPointer.current.clear();
48
72
  setRipples([]);
49
73
  }, []);
50
74
  return {
@@ -8,7 +8,7 @@ declare const useStyles: (params: Omit<ButtonGroupOwnProps, "children">, muiStyl
8
8
  props: Record<string, unknown>;
9
9
  ownerState?: Record<string, unknown> | undefined;
10
10
  } | undefined) => {
11
- classes: Record<"root" | "disabled" | "contained" | "disableElevation" | "fullWidth" | "vertical" | "grouped" | "groupedHorizontal" | "groupedVertical" | "groupedContained" | "groupedContainedHorizontal" | "groupedContainedVertical" | "groupedOutlined" | "groupedOutlinedHorizontal" | "groupedOutlinedVertical" | "groupedText" | "groupedTextHorizontal" | "groupedTextVertical", string>;
11
+ classes: Record<"root" | "disabled" | "enableElevation" | "fullWidth" | "vertical" | "grouped" | "groupedHorizontal" | "groupedVertical" | "groupedContained" | "groupedContainedHorizontal" | "groupedContainedVertical" | "groupedOutlined" | "groupedOutlinedHorizontal" | "groupedOutlinedVertical" | "groupedText" | "groupedTextHorizontal" | "groupedTextVertical", string>;
12
12
  theme: import("@shopgate/engage/styles").Theme;
13
13
  css: import("tss-react").Css;
14
14
  cx: import("tss-react").Cx;
@@ -24,21 +24,27 @@ export interface ButtonGroupOwnProps {
24
24
  * @default 'medium'
25
25
  */
26
26
  size?: 'small' | 'medium' | 'large';
27
+ /**
28
+ * If true, the buttons use reduced padding.
29
+ * @default false
30
+ */
31
+ dense?: boolean;
27
32
  /**
28
33
  * The orientation of the buttons in the group.
29
34
  * @default 'horizontal'
30
35
  */
31
36
  orientation?: 'horizontal' | 'vertical';
32
37
  /**
33
- * If true, no elevation is used for contained buttons.
38
+ * If true, a drop shadow is added to the group. Button groups are flat by default.
34
39
  * @default false
35
40
  */
36
- disableElevation?: boolean;
41
+ enableElevation?: boolean;
37
42
  /**
38
- * The color of the component.
43
+ * The color of the component. Besides the palette colors, `cta` is supported. It resolves to the
44
+ * merchant configurable call to action color from `components.ctaButton`.
39
45
  * @default 'inherit'
40
46
  */
41
- color?: PaletteColorsWithMain | 'inherit';
47
+ color?: PaletteColorsWithMain | 'inherit' | 'cta';
42
48
  /**
43
49
  * If true, the buttons will take up the full width of their container.
44
50
  * @default false
@@ -1 +1 @@
1
- {"version":3,"file":"ButtonGroup.d.ts","sourceRoot":"","sources":["../../../../components/v2/ButtonGroup/ButtonGroup.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAqB,MAAM,OAAO,CAAC;AAG1C,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAErE;;GAEG;AACH,QAAA,MAAM,WAAW,mIA4Df,CAAC;AAEH,QAAA,MAAM,SAAS;;cAoDM,CAAA;;;;;;CAmFnB,CAAC;AAEH,MAAM,WAAW,mBAAmB;IAClC;;;OAGG;IACH,OAAO,CAAC,EAAE,WAAW,GAAG,UAAU,GAAG,MAAM,CAAC;IAC5C;;;OAGG;IACH,IAAI,CAAC,EAAE,OAAO,GAAG,QAAQ,GAAG,OAAO,CAAC;IACpC;;;OAGG;IACH,WAAW,CAAC,EAAE,YAAY,GAAG,UAAU,CAAC;IACxC;;;OAGG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B;;;OAGG;IACH,KAAK,CAAC,EAAE,qBAAqB,GAAG,SAAS,CAAC;IAC1C;;;OAGG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB;;;OAGG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB;;;OAGG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;OAEG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC,UAAU,CAAC,OAAO,SAAS,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;IAC3D,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B;AAED,MAAM,MAAM,gBAAgB,GAAG,mBAAmB,GAAG,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC,CAAA;AAEzF,eAAe,WAAW,CAAC"}
1
+ {"version":3,"file":"ButtonGroup.d.ts","sourceRoot":"","sources":["../../../../components/v2/ButtonGroup/ButtonGroup.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAqB,MAAM,OAAO,CAAC;AAG1C,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAErE;;GAEG;AACH,QAAA,MAAM,WAAW,mIAsEf,CAAC;AAEH,QAAA,MAAM,SAAS;;cAqCX,CAAJ;;;;;;CAiGE,CAAC;AAEH,MAAM,WAAW,mBAAmB;IAClC;;;OAGG;IACH,OAAO,CAAC,EAAE,WAAW,GAAG,UAAU,GAAG,MAAM,CAAC;IAC5C;;;OAGG;IACH,IAAI,CAAC,EAAE,OAAO,GAAG,QAAQ,GAAG,OAAO,CAAC;IACpC;;;OAGG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB;;;OAGG;IACH,WAAW,CAAC,EAAE,YAAY,GAAG,UAAU,CAAC;IACxC;;;OAGG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B;;;;OAIG;IACH,KAAK,CAAC,EAAE,qBAAqB,GAAG,SAAS,GAAG,KAAK,CAAC;IAClD;;;OAGG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB;;;OAGG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB;;;OAGG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;OAEG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC,UAAU,CAAC,OAAO,SAAS,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;IAC3D,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B;AAED,MAAM,MAAM,gBAAgB,GAAG,mBAAmB,GAAG,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC,CAAA;AAIzF,eAAe,WAAW,CAAC"}
@@ -9,13 +9,15 @@ const ButtonGroup = /*#__PURE__*/forwardRef((props, ref) => {
9
9
  const {
10
10
  variant = 'contained',
11
11
  size = 'medium',
12
+ dense = false,
12
13
  orientation = 'horizontal',
13
- disableElevation = false,
14
+ enableElevation = false,
14
15
  fullWidth = false,
15
16
  disableRipple = false,
16
17
  disabled = false,
17
18
  color = 'inherit',
18
19
  className,
20
+ classes: classesProp,
19
21
  children,
20
22
  ...other
21
23
  } = props;
@@ -27,7 +29,7 @@ const ButtonGroup = /*#__PURE__*/forwardRef((props, ref) => {
27
29
  variant
28
30
  }, {
29
31
  props: {
30
- classes: props.classes
32
+ classes: classesProp
31
33
  }
32
34
  });
33
35
  const buttonClassName = cx(classes.grouped, classes[`grouped${capitalize(orientation)}`], classes[`grouped${capitalize(variant)}`], classes[`grouped${capitalize(variant)}${capitalize(orientation)}`], {
@@ -36,11 +38,18 @@ const ButtonGroup = /*#__PURE__*/forwardRef((props, ref) => {
36
38
  return /*#__PURE__*/_jsx("div", {
37
39
  role: "group",
38
40
  className: cx(classes.root, {
39
- [classes.contained]: variant === 'contained',
40
41
  [classes.vertical]: orientation === 'vertical',
41
42
  [classes.fullWidth]: fullWidth,
42
- [classes.disableElevation]: disableElevation
43
- }, className),
43
+ [classes.enableElevation]: enableElevation && variant === 'contained'
44
+ }, 'engage__button-group', className),
45
+ "data-variant": variant,
46
+ "data-color": color,
47
+ "data-size": size,
48
+ "data-orientation": orientation,
49
+ "data-dense": dense || undefined,
50
+ "data-full-width": fullWidth || undefined,
51
+ "data-enable-elevation": enableElevation || undefined,
52
+ "data-disabled": disabled || undefined,
44
53
  ref: ref,
45
54
  ...other,
46
55
  children: React.Children.map(children, child => {
@@ -51,10 +60,11 @@ const ButtonGroup = /*#__PURE__*/forwardRef((props, ref) => {
51
60
  className: cx(buttonClassName, child.props.className),
52
61
  color: child.props.color || color,
53
62
  disabled: child.props.disabled || disabled,
54
- disableElevation: child.props.disableElevation || disableElevation,
63
+ enableElevation: child.props.enableElevation || enableElevation,
55
64
  disableRipple,
56
65
  fullWidth,
57
66
  size: child.props.size || size,
67
+ dense: child.props.dense || dense,
58
68
  variant: child.props.variant || variant
59
69
  });
60
70
  })
@@ -68,7 +78,9 @@ const useStyles = makeStyles({
68
78
  variant
69
79
  } = props;
70
80
  let cssColor = '';
71
- if (color !== 'inherit') {
81
+ if (color === 'cta') {
82
+ cssColor = theme.components.ctaButton.background;
83
+ } else if (color !== 'inherit') {
72
84
  cssColor = color && theme.palette?.[color]?.main ? theme.palette[color].main : theme.palette.primary.main;
73
85
  } else if (variant === 'contained') {
74
86
  // eslint-disable-next-line prefer-destructuring
@@ -81,14 +93,11 @@ const useStyles = makeStyles({
81
93
  '--button-group-color': `var(${theme.vars.components.button.color}, ${cssColor})`,
82
94
  '--disabledColor': theme.palette.action.disabled,
83
95
  display: 'inline-flex',
84
- borderRadius: `var(${theme.vars.components.button.borderRadius}, ${theme.shape.borderRadius})`
85
- },
86
- contained: {
87
- boxShadow: theme.shadows[2]
96
+ borderRadius: theme.components.button.borderRadius
88
97
  },
89
98
  disabled: {},
90
- disableElevation: {
91
- boxShadow: 'none'
99
+ enableElevation: {
100
+ boxShadow: theme.shadows[2]
92
101
  },
93
102
  fullWidth: {
94
103
  width: '100%'
@@ -128,7 +137,7 @@ const useStyles = makeStyles({
128
137
  borderRightWidth: 1,
129
138
  borderRightStyle: 'solid',
130
139
  borderRightColor: theme.darken('var(--button-group-color)'),
131
- '&:disabled': {
140
+ '&:disabled, &[aria-disabled="true"]': {
132
141
  borderRightColor: 'var(--disabledColor)'
133
142
  }
134
143
  }
@@ -138,7 +147,7 @@ const useStyles = makeStyles({
138
147
  borderBottomWidth: 1,
139
148
  borderBottomStyle: 'solid',
140
149
  borderBottomColor: theme.darken('var(--button-group-color)'),
141
- '&:disabled': {
150
+ '&:disabled, &[aria-disabled="true"]': {
142
151
  borderBottomColor: 'var(--disabledColor)'
143
152
  }
144
153
  }
@@ -148,7 +157,7 @@ const useStyles = makeStyles({
148
157
  '&:hover': {
149
158
  borderColor: 'var(--button-group-color)'
150
159
  },
151
- '&:disabled': {
160
+ '&:disabled, &[aria-disabled="true"]': {
152
161
  borderColor: 'var(--disabledColor) !important'
153
162
  }
154
163
  },
@@ -168,13 +177,15 @@ const useStyles = makeStyles({
168
177
  borderBottomColor: 'transparent !important'
169
178
  }
170
179
  },
180
+ // Text buttons need no shared styles, but the key has to exist because the class is looked up
181
+ // dynamically as `grouped${capitalize(variant)}`.
171
182
  groupedText: {},
172
183
  groupedTextHorizontal: {
173
184
  '&&:not(:last-of-type)': {
174
185
  borderRightWidth: 1,
175
186
  borderRightStyle: 'solid',
176
187
  borderRightColor: `${theme.lighten('var(--button-group-color)', 0.5)}`,
177
- '&:disabled': {
188
+ '&:disabled, &[aria-disabled="true"]': {
178
189
  borderRightColor: 'var(--disabledColor)'
179
190
  }
180
191
  }
@@ -184,7 +195,7 @@ const useStyles = makeStyles({
184
195
  borderBottomWidth: 1,
185
196
  borderBottomStyle: 'solid',
186
197
  borderBottomColor: `${theme.lighten('var(--button-group-color)', 0.5)}`,
187
- '&:disabled': {
198
+ '&:disabled, &[aria-disabled="true"]': {
188
199
  borderBottomColor: 'var(--disabledColor)'
189
200
  }
190
201
  }
@@ -192,4 +203,5 @@ const useStyles = makeStyles({
192
203
  /* eslint-enable tss-unused-classes/unused-classes */
193
204
  };
194
205
  });
206
+ ButtonGroup.displayName = 'ButtonGroup';
195
207
  export default ButtonGroup;
@@ -1 +1 @@
1
- {"version":3,"file":"CircularProgress.d.ts","sourceRoot":"","sources":["../../../../components/v2/CircularProgress/CircularProgress.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAqB,MAAM,OAAO,CAAC;AAE1C,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAIrE;;;GAGG;AACH,QAAA,MAAM,gBAAgB,8FA6DpB,CAAC;AA0BH,QAAA,MAAM,SAAS;;cA4BX,CAAA;;;;;;CAeF,CAAC;AAEH,MAAM,WAAW,qBAAqB;IACpC;;OAEG;IACH,KAAK,CAAC,EAAE,qBAAqB,GAAG,SAAS,CAAC;IAC1C;;;OAGG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;OAGG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB;;;OAGG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;OAGG;IACH,OAAO,CAAC,EAAE,eAAe,GAAG,aAAa,CAAC;IAC1C;;OAEG;IACH,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IAC5B;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;OAEG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC,UAAU,CAAC,OAAO,SAAS,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;CAC5D;AAED,eAAe,gBAAgB,CAAC"}
1
+ {"version":3,"file":"CircularProgress.d.ts","sourceRoot":"","sources":["../../../../components/v2/CircularProgress/CircularProgress.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAqB,MAAM,OAAO,CAAC;AAE1C,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAIrE;;;GAGG;AACH,QAAA,MAAM,gBAAgB,8FAiEpB,CAAC;AA0BH,QAAA,MAAM,SAAS;;cAuBN,CAAC;;;;;;CAoBR,CAAC;AAEH,MAAM,WAAW,qBAAqB;IACpC;;OAEG;IACH,KAAK,CAAC,EAAE,qBAAqB,GAAG,SAAS,CAAC;IAC1C;;;OAGG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;OAGG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB;;;OAGG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;OAGG;IACH,OAAO,CAAC,EAAE,eAAe,GAAG,aAAa,CAAC;IAC1C;;OAEG;IACH,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IAC5B;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;OAEG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC,UAAU,CAAC,OAAO,SAAS,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;CAC5D;AAID,eAAe,gBAAgB,CAAC"}
@@ -17,6 +17,7 @@ const CircularProgress = /*#__PURE__*/forwardRef((props, ref) => {
17
17
  thickness = 3.6,
18
18
  style,
19
19
  className,
20
+ classes: classesProp,
20
21
  ...other
21
22
  } = props;
22
23
  const {
@@ -26,7 +27,7 @@ const CircularProgress = /*#__PURE__*/forwardRef((props, ref) => {
26
27
  color
27
28
  }, {
28
29
  props: {
29
- classes: props.classes
30
+ classes: classesProp
30
31
  }
31
32
  });
32
33
  const circleStyle = {};
@@ -40,10 +41,10 @@ const CircularProgress = /*#__PURE__*/forwardRef((props, ref) => {
40
41
  rootStyle.transform = 'rotate(-90deg)';
41
42
  }
42
43
  return /*#__PURE__*/_jsx("div", {
43
- className: cx(classes.root, className, {
44
+ className: cx(classes.root, {
44
45
  [classes.indeterminate]: variant === 'indeterminate',
45
46
  [classes.determinate]: variant === 'determinate'
46
- }),
47
+ }, 'engage__circular-progress', className),
47
48
  style: {
48
49
  width: size,
49
50
  height: size,
@@ -52,6 +53,9 @@ const CircularProgress = /*#__PURE__*/forwardRef((props, ref) => {
52
53
  },
53
54
  ref: ref,
54
55
  role: "progressbar",
56
+ "data-variant": variant,
57
+ "data-color": color,
58
+ "data-disable-shrink": disableShrink || undefined,
55
59
  ...rootProps,
56
60
  ...other,
57
61
  children: /*#__PURE__*/_jsx("svg", {
@@ -108,8 +112,8 @@ const useStyles = makeStyles({
108
112
  return {
109
113
  root: {
110
114
  display: 'inline-block',
111
- '--sg-circular-progress-circle-color': cssColor,
112
- color: 'var(--sg-circular-progress-circle-color)'
115
+ '--circular-progress-color': cssColor,
116
+ color: 'var(--circular-progress-color)'
113
117
  },
114
118
  svg: {
115
119
  display: 'block'
@@ -136,4 +140,5 @@ const useStyles = makeStyles({
136
140
  }
137
141
  };
138
142
  });
143
+ CircularProgress.displayName = 'CircularProgress';
139
144
  export default CircularProgress;
@@ -1,6 +1,14 @@
1
+ import { push, pop, replace, reset, update } from '../router/helpers';
2
+ export interface Navigation {
3
+ push: typeof push;
4
+ pop: typeof pop;
5
+ replace: typeof replace;
6
+ reset: typeof reset;
7
+ update: typeof update;
8
+ }
1
9
  /**
2
10
  * Provides functions for navigation.
3
- * @returns {Object}
11
+ * @returns The navigation functions.
4
12
  */
5
- export function useNavigation(): Object;
13
+ export declare function useNavigation(): Navigation;
6
14
  //# sourceMappingURL=useNavigation.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"useNavigation.d.ts","sourceRoot":"","sources":["../../../core/hooks/useNavigation.js"],"names":[],"mappings":"AAIA;;;GAGG;AACH,iCAFa,MAAM,CAUlB"}
1
+ {"version":3,"file":"useNavigation.d.ts","sourceRoot":"","sources":["../../../core/hooks/useNavigation.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,IAAI,EAAE,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAClC,MAAM,mBAAmB,CAAC;AAE3B,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,OAAO,IAAI,CAAC;IAClB,GAAG,EAAE,OAAO,GAAG,CAAC;IAChB,OAAO,EAAE,OAAO,OAAO,CAAC;IACxB,KAAK,EAAE,OAAO,KAAK,CAAC;IACpB,MAAM,EAAE,OAAO,MAAM,CAAC;CACvB;AAED;;;GAGG;AACH,wBAAgB,aAAa,IAAI,UAAU,CAQ1C"}
@@ -1,8 +1,7 @@
1
1
  import { push, pop, replace, reset, update } from "../router/helpers";
2
-
3
2
  /**
4
3
  * Provides functions for navigation.
5
- * @returns {Object}
4
+ * @returns The navigation functions.
6
5
  */
7
6
  export function useNavigation() {
8
7
  return {
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../core/initialization/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,KAAK,IAAI,UAAU,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAChE,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAgB5D,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,MAAM;QACd,YAAY,CAAC,EAAE;YACb,YAAY,EAAE,OAAO,CAAC;YACtB,KAAK,EAAE,OAAO,CAAC;SAChB,CAAC;KACH;CACF;AAED;;;;;;;;GAQG;AACH,KAAK,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,aAAa,CAAC,EAAE,UAAU,CAAC,GAAG;IAClE,QAAQ,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,OAAO,CAAC;CACxC,CAAC;AAMF;;;;;;;GAOG;AACH,eAAO,MAAM,UAAU,GACrB,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAChC,UAAU,UAAU,CAAC,OAAO,cAAc,CAAC,CAAC,CAAC,CAAC,EAC9C,aAAa,UAAU,CAAC,OAAO,cAAc,CAAC,CAAC,CAAC,CAAC;;EAuDlD,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../core/initialization/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,KAAK,IAAI,UAAU,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAChE,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAqB5D,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,MAAM;QACd,YAAY,CAAC,EAAE;YACb,YAAY,EAAE,OAAO,CAAC;YACtB,KAAK,EAAE,OAAO,CAAC;SAChB,CAAC;KACH;CACF;AAED;;;;;;;;GAQG;AACH,KAAK,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,aAAa,CAAC,EAAE,UAAU,CAAC,GAAG;IAClE,QAAQ,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,OAAO,CAAC;CACxC,CAAC;AAMF;;;;;;;GAOG;AACH,eAAO,MAAM,UAAU,GACrB,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAChC,UAAU,UAAU,CAAC,OAAO,cAAc,CAAC,CAAC,CAAC,CAAC,EAC9C,aAAa,UAAU,CAAC,OAAO,cAAc,CAAC,CAAC,CAAC,CAAC;;EA4ElD,CAAC"}