@algolia/satellite 2.1.0 → 2.2.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 (55) hide show
  1. package/README.md +1 -1
  2. package/dist/cjs/Actions/Button/PolymorphicIconButton.d.ts +10 -2
  3. package/dist/cjs/Actions/Button/PolymorphicIconButton.js +8 -2
  4. package/dist/cjs/Actions/IconButtonWithFeedback/IconButtonWithFeedback.d.ts +68 -0
  5. package/dist/cjs/Actions/IconButtonWithFeedback/IconButtonWithFeedback.js +209 -0
  6. package/dist/cjs/Actions/SegmentedControl/SegmentedControl.d.ts +4 -4
  7. package/dist/cjs/Actions/index.d.ts +2 -0
  8. package/dist/cjs/Actions/index.js +19 -0
  9. package/dist/cjs/Fields/AutoComplete/AutoComplete.js +18 -5
  10. package/dist/cjs/Fields/AutoComplete/types.d.ts +6 -2
  11. package/dist/cjs/Fields/AutoComplete/types.js +4 -1
  12. package/dist/cjs/Fields/FilePicker/FilePicker.d.ts +10 -0
  13. package/dist/cjs/Fields/FilePicker/FilePicker.js +9 -2
  14. package/dist/cjs/Fields/Input/Input.js +1 -1
  15. package/dist/cjs/Fields/Input/Input.tailwind.js +7 -7
  16. package/dist/cjs/Fields/TextArea/TextArea.tailwind.js +7 -7
  17. package/dist/cjs/Overlay/MenuButton/MenuButton.d.ts +1 -1
  18. package/dist/cjs/Overlay/MenuButton/components/items/Item.d.ts +1 -1
  19. package/dist/cjs/Overlay/Modal/Modal.d.ts +1 -1
  20. package/dist/cjs/Overlay/Modal/Modal.js +17 -11
  21. package/dist/cjs/Overlay/Modal/Modal.tailwind.js +3 -0
  22. package/dist/cjs/Satellite/locale.d.ts +2 -0
  23. package/dist/cjs/Typography/Typography.tailwind.js +1 -1
  24. package/dist/cjs/utils/isCssPropertySupported.d.ts +1 -1
  25. package/dist/cjs/utils/prefersReducedMotion.js +1 -1
  26. package/dist/cjs/utils/useTimeoutFn.d.ts +2 -0
  27. package/dist/cjs/utils/useTimeoutFn.js +44 -0
  28. package/dist/esm/Actions/Button/PolymorphicIconButton.d.ts +10 -2
  29. package/dist/esm/Actions/Button/PolymorphicIconButton.js +8 -2
  30. package/dist/esm/Actions/IconButtonWithFeedback/IconButtonWithFeedback.d.ts +68 -0
  31. package/dist/esm/Actions/IconButtonWithFeedback/IconButtonWithFeedback.js +202 -0
  32. package/dist/esm/Actions/SegmentedControl/SegmentedControl.d.ts +4 -4
  33. package/dist/esm/Actions/index.d.ts +2 -0
  34. package/dist/esm/Actions/index.js +2 -2
  35. package/dist/esm/Fields/AutoComplete/AutoComplete.js +18 -5
  36. package/dist/esm/Fields/AutoComplete/types.d.ts +6 -2
  37. package/dist/esm/Fields/AutoComplete/types.js +2 -1
  38. package/dist/esm/Fields/FilePicker/FilePicker.d.ts +10 -0
  39. package/dist/esm/Fields/FilePicker/FilePicker.js +9 -2
  40. package/dist/esm/Fields/Input/Input.js +1 -1
  41. package/dist/esm/Fields/Input/Input.tailwind.js +7 -9
  42. package/dist/esm/Fields/TextArea/TextArea.tailwind.js +7 -9
  43. package/dist/esm/Overlay/MenuButton/MenuButton.d.ts +1 -1
  44. package/dist/esm/Overlay/MenuButton/components/items/Item.d.ts +1 -1
  45. package/dist/esm/Overlay/Modal/Modal.d.ts +1 -1
  46. package/dist/esm/Overlay/Modal/Modal.js +17 -11
  47. package/dist/esm/Overlay/Modal/Modal.tailwind.js +3 -0
  48. package/dist/esm/Satellite/locale.d.ts +2 -0
  49. package/dist/esm/Typography/Typography.tailwind.js +1 -1
  50. package/dist/esm/utils/isCssPropertySupported.d.ts +1 -1
  51. package/dist/esm/utils/prefersReducedMotion.js +1 -1
  52. package/dist/esm/utils/useTimeoutFn.d.ts +2 -0
  53. package/dist/esm/utils/useTimeoutFn.js +38 -0
  54. package/dist/satellite.min.css +1 -1
  55. package/package.json +2 -1
package/README.md CHANGED
@@ -54,7 +54,7 @@ import ReactDOM from "react-dom";
54
54
 
55
55
  import "@algolia/satellite/satellite.min.css";
56
56
 
57
- import { Satellite, Button, stl } from "@algolia/satellite/Button";
57
+ import { Satellite, Button, stl } from "@algolia/satellite";
58
58
 
59
59
  const loading = true;
60
60
 
@@ -15,7 +15,6 @@ export interface IconButtonBaseProps {
15
15
  size?: ButtonSize;
16
16
  /**
17
17
  * Whether the `IconButton` is disabled.
18
- * @default false
19
18
  */
20
19
  disabled?: boolean;
21
20
  /**
@@ -28,7 +27,6 @@ export interface IconButtonBaseProps {
28
27
  title: string;
29
28
  /**
30
29
  * Whether to show the tooltip.
31
- * @default false
32
30
  */
33
31
  showTooltip?: boolean;
34
32
  /**
@@ -36,6 +34,16 @@ export interface IconButtonBaseProps {
36
34
  * @default top
37
35
  */
38
36
  tooltipSide?: TooltipWrapperBaseProps["side"];
37
+ /**
38
+ * The delay before showing the tooltip.
39
+ * @default 500
40
+ */
41
+ tooltipDelay?: TooltipWrapperBaseProps["delay"];
42
+ /**
43
+ * The delay before hiding the tooltip.
44
+ * @default 500
45
+ */
46
+ tooltipHideDelay?: TooltipWrapperBaseProps["hideDelay"];
39
47
  /**
40
48
  * Whether the `IconButton` is loading.
41
49
  * @default false
@@ -16,7 +16,7 @@ var _Indicators = require("./../../Indicators");
16
16
  var _Overlay = require("./../../Overlay");
17
17
  var _satellitePrefixer = _interopRequireDefault(require("./../../styles/helpers/satellitePrefixer"));
18
18
  var _jsxRuntime = require("react/jsx-runtime");
19
- var _excluded = ["as", "className", "variant", "size", "icon", "title", "showTooltip", "tooltipSide", "loading"];
19
+ var _excluded = ["as", "className", "variant", "size", "icon", "title", "showTooltip", "tooltipSide", "tooltipDelay", "tooltipHideDelay", "loading"];
20
20
  var _templateObject, _templateObject2, _templateObject3, _templateObject4, _templateObject5, _templateObject6, _templateObject7, _templateObject8, _templateObject9;
21
21
  function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
22
22
  function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2["default"])(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
@@ -47,6 +47,10 @@ var PolymorphicIconButton = exports.PolymorphicIconButton = /*#__PURE__*/(0, _re
47
47
  showTooltip = props.showTooltip,
48
48
  _props$tooltipSide = props.tooltipSide,
49
49
  tooltipSide = _props$tooltipSide === void 0 ? "top" : _props$tooltipSide,
50
+ _props$tooltipDelay = props.tooltipDelay,
51
+ tooltipDelay = _props$tooltipDelay === void 0 ? 500 : _props$tooltipDelay,
52
+ _props$tooltipHideDel = props.tooltipHideDelay,
53
+ tooltipHideDelay = _props$tooltipHideDel === void 0 ? 500 : _props$tooltipHideDel,
50
54
  _props$loading = props.loading,
51
55
  loading = _props$loading === void 0 ? false : _props$loading,
52
56
  cleanedProps = (0, _objectWithoutProperties2["default"])(props, _excluded);
@@ -61,12 +65,14 @@ var PolymorphicIconButton = exports.PolymorphicIconButton = /*#__PURE__*/(0, _re
61
65
  cleanedProps.type = "button";
62
66
  }
63
67
  return /*#__PURE__*/(0, _jsxRuntime.jsx)(_Overlay.TooltipWrapper, {
64
- delay: 500,
68
+ delay: tooltipDelay,
69
+ hideDelay: tooltipHideDelay,
65
70
  show: showTooltip,
66
71
  side: tooltipSide,
67
72
  content: title,
68
73
  children: /*#__PURE__*/(0, _jsxRuntime.jsx)(Tag, _objectSpread(_objectSpread({}, cleanedProps), {}, {
69
74
  className: iconButtonClassName,
75
+ "aria-busy": loading,
70
76
  "aria-label": title,
71
77
  ref: ref,
72
78
  children: /*#__PURE__*/(0, _jsxRuntime.jsxs)(_jsxRuntime.Fragment, {
@@ -0,0 +1,68 @@
1
+ import type { FC, MouseEvent } from "react";
2
+ import type { IconButtonProps } from "../../Actions/IconButton/IconButton";
3
+ import type { IconComponentType } from "../../Icons";
4
+ export declare const RESET_STATUS_DELAY = 100;
5
+ export declare type IconButtonWithFeedbackLocale = {
6
+ /**
7
+ * The tooltip message shown after a successful click.
8
+ * @default "Success"
9
+ */
10
+ success?: string;
11
+ /**
12
+ * The tooltip message shown after an error occurs in the `onClick` handler.
13
+ * @default "Something went wrong"
14
+ */
15
+ error?: string;
16
+ /**
17
+ * The tooltip message shown while the action is loading.
18
+ * @default "Loading..."
19
+ */
20
+ loading?: string;
21
+ };
22
+ export declare type IconButtonWithFeedbackProps = Omit<IconButtonProps, "title" | "showTooltip" | "loading" | "onClick"> & {
23
+ /**
24
+ * The icon to display when the action succeeds.
25
+ * Set to `false` to disable the success icon.
26
+ * @default CheckIcon
27
+ */
28
+ successIcon?: IconComponentType | false;
29
+ /**
30
+ * The icon to display when the action fails.
31
+ * Set to `false` to disable the error icon.
32
+ * @default AlertTriangleIcon
33
+ */
34
+ errorIcon?: IconComponentType | false;
35
+ /**
36
+ * The tooltip message shown by default.
37
+ */
38
+ message: string;
39
+ /**
40
+ * The locale for the tooltip messages.
41
+ */
42
+ locale?: IconButtonWithFeedbackLocale;
43
+ /**
44
+ * How long to show the success message tooltip (ms).
45
+ * @default 1000
46
+ */
47
+ tooltipSuccessMessageDuration?: number;
48
+ /**
49
+ * How long to show the error message tooltip (ms).
50
+ * @default 2000
51
+ */
52
+ tooltipErrorMessageDuration?: number;
53
+ /**
54
+ * Called when the button is clicked.
55
+ * Can be async.
56
+ */
57
+ onClick?: (evt: MouseEvent<HTMLButtonElement>) => Promise<void> | void;
58
+ /**
59
+ * Called when an error occurs during `onClick`.
60
+ */
61
+ onError?: (error: unknown) => void;
62
+ };
63
+ /**
64
+ * A compact, icon-only button that displays contextual tooltips on hover and click, enhancing user understanding and confirmation.
65
+ *
66
+ * See the [IconButtonWithFeedback documentation page](https://zeroheight.com/8261d6576/p/70da74-icon-button-with-feedback) for more information.
67
+ */
68
+ export declare const IconButtonWithFeedback: FC<IconButtonWithFeedbackProps>;
@@ -0,0 +1,209 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.RESET_STATUS_DELAY = exports.IconButtonWithFeedback = void 0;
8
+ var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
9
+ var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
10
+ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
11
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
12
+ var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
13
+ var _react = require("react");
14
+ var _useMountedState = _interopRequireDefault(require("react-use/lib/useMountedState"));
15
+ var _spinDelay = require("spin-delay");
16
+ var _IconButton = require("./../IconButton/IconButton");
17
+ var _Icons = require("./../../Icons");
18
+ var _Satellite = require("./../../Satellite");
19
+ var _useTimeoutFn7 = require("./../../utils/useTimeoutFn");
20
+ var _jsxRuntime = require("react/jsx-runtime");
21
+ var _excluded = ["icon", "successIcon", "errorIcon", "message", "tooltipDelay", "tooltipHideDelay", "tooltipSuccessMessageDuration", "tooltipErrorMessageDuration", "onClick", "onError", "locale"];
22
+ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
23
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2["default"])(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
24
+ var DEFAULT_TOOLTIP_SHOW_DELAY = 250;
25
+ var DEFAULT_TOOLTIP_HIDE_DELAY = 500;
26
+ var DEFAULT_TOOLTIP_SUCCESS_MESSAGE_DURATION = 1000;
27
+ var DEFAULT_TOOLTIP_ERROR_MESSAGE_DURATION = 2000;
28
+
29
+ // Used in the tests but not re-exported externally.
30
+ var RESET_STATUS_DELAY = exports.RESET_STATUS_DELAY = 100;
31
+ var DEFAULT_ICON_WITH_BUTTON_FEEDBACK_LOCALE = {
32
+ success: "Success",
33
+ error: "Something went wrong",
34
+ loading: "Loading..."
35
+ };
36
+ /**
37
+ * A compact, icon-only button that displays contextual tooltips on hover and click, enhancing user understanding and confirmation.
38
+ *
39
+ * See the [IconButtonWithFeedback documentation page](https://zeroheight.com/8261d6576/p/70da74-icon-button-with-feedback) for more information.
40
+ */
41
+ var IconButtonWithFeedback = exports.IconButtonWithFeedback = function IconButtonWithFeedback(_ref) {
42
+ var iconProp = _ref.icon,
43
+ _ref$successIcon = _ref.successIcon,
44
+ successIcon = _ref$successIcon === void 0 ? _Icons.CheckIcon : _ref$successIcon,
45
+ _ref$errorIcon = _ref.errorIcon,
46
+ errorIcon = _ref$errorIcon === void 0 ? _Icons.AlertTriangleIcon : _ref$errorIcon,
47
+ message = _ref.message,
48
+ _ref$tooltipDelay = _ref.tooltipDelay,
49
+ tooltipDelay = _ref$tooltipDelay === void 0 ? DEFAULT_TOOLTIP_SHOW_DELAY : _ref$tooltipDelay,
50
+ _ref$tooltipHideDelay = _ref.tooltipHideDelay,
51
+ tooltipHideDelay = _ref$tooltipHideDelay === void 0 ? DEFAULT_TOOLTIP_HIDE_DELAY : _ref$tooltipHideDelay,
52
+ _ref$tooltipSuccessMe = _ref.tooltipSuccessMessageDuration,
53
+ tooltipSuccessMessageDuration = _ref$tooltipSuccessMe === void 0 ? DEFAULT_TOOLTIP_SUCCESS_MESSAGE_DURATION : _ref$tooltipSuccessMe,
54
+ _ref$tooltipErrorMess = _ref.tooltipErrorMessageDuration,
55
+ tooltipErrorMessageDuration = _ref$tooltipErrorMess === void 0 ? DEFAULT_TOOLTIP_ERROR_MESSAGE_DURATION : _ref$tooltipErrorMess,
56
+ onClick = _ref.onClick,
57
+ onError = _ref.onError,
58
+ propsLocale = _ref.locale,
59
+ props = (0, _objectWithoutProperties2["default"])(_ref, _excluded);
60
+ var contextLocale = (0, _Satellite.useLocale)("iconButtonWithFeedback");
61
+ var locale = _objectSpread(_objectSpread(_objectSpread({}, DEFAULT_ICON_WITH_BUTTON_FEEDBACK_LOCALE), contextLocale), propsLocale);
62
+ var _useState = (0, _react.useState)("idle"),
63
+ _useState2 = (0, _slicedToArray2["default"])(_useState, 2),
64
+ status = _useState2[0],
65
+ setStatus = _useState2[1];
66
+ var _useState3 = (0, _react.useState)(false),
67
+ _useState4 = (0, _slicedToArray2["default"])(_useState3, 2),
68
+ showTooltip = _useState4[0],
69
+ setShowTooltip = _useState4[1];
70
+ var mounted = (0, _useMountedState["default"])();
71
+
72
+ // Use a delayed loading state to prevent flickering of the loading spinner.
73
+ var isLoading = (0, _spinDelay.useSpinDelay)(status === "loading", {
74
+ delay: 200,
75
+ minDuration: 600
76
+ });
77
+
78
+ // Show the tooltip after a delay when the button is hovered/focused.
79
+ var _useTimeoutFn = (0, _useTimeoutFn7.useTimeoutFn)(function () {
80
+ if (mounted()) setShowTooltip(true);
81
+ }, tooltipDelay, false),
82
+ _useTimeoutFn2 = (0, _slicedToArray2["default"])(_useTimeoutFn, 3),
83
+ cancelShowTooltip = _useTimeoutFn2[1],
84
+ scheduleShowTooltip = _useTimeoutFn2[2];
85
+
86
+ // Hide the tooltip after a delay when the button is unhovered/unfocused.
87
+ var _useTimeoutFn3 = (0, _useTimeoutFn7.useTimeoutFn)(function () {
88
+ if (mounted()) setShowTooltip(false);
89
+ }, status === "error" ? tooltipErrorMessageDuration : tooltipSuccessMessageDuration, false),
90
+ _useTimeoutFn4 = (0, _slicedToArray2["default"])(_useTimeoutFn3, 3),
91
+ scheduleHideTooltip = _useTimeoutFn4[2];
92
+
93
+ // Reset the tooltip status after a delay when the tooltip is hidden.
94
+ var _useTimeoutFn5 = (0, _useTimeoutFn7.useTimeoutFn)(function () {
95
+ if (mounted()) setStatus("idle");
96
+ }, tooltipHideDelay + RESET_STATUS_DELAY, false),
97
+ _useTimeoutFn6 = (0, _slicedToArray2["default"])(_useTimeoutFn5, 3),
98
+ scheduleResetStatus = _useTimeoutFn6[2];
99
+
100
+ // Auto-hide tooltip while showing success/error messages.
101
+ (0, _react.useEffect)(function () {
102
+ if (status === "idle" || isLoading) return;
103
+ scheduleHideTooltip();
104
+ }, [status, isLoading, scheduleHideTooltip]);
105
+
106
+ // After tooltip fully fades out, go back to idle.
107
+ (0, _react.useEffect)(function () {
108
+ if (showTooltip || status !== "success" && status !== "error") return;
109
+ scheduleResetStatus();
110
+ }, [showTooltip, status, scheduleResetStatus]);
111
+ var getTitle = function getTitle() {
112
+ if (isLoading) return locale.loading;
113
+ switch (status) {
114
+ case "success":
115
+ return locale.success;
116
+ case "error":
117
+ return locale.error;
118
+ default:
119
+ return message;
120
+ }
121
+ };
122
+ var getIcon = function getIcon() {
123
+ if (status === "error" && errorIcon) return errorIcon;
124
+ if (status === "success" && successIcon) return successIcon;
125
+ return iconProp;
126
+ };
127
+ var title = getTitle();
128
+ var icon = getIcon();
129
+ var handleClick = /*#__PURE__*/function () {
130
+ var _ref2 = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee(evt) {
131
+ return _regenerator["default"].wrap(function _callee$(_context) {
132
+ while (1) switch (_context.prev = _context.next) {
133
+ case 0:
134
+ if (!evt.defaultPrevented) {
135
+ _context.next = 2;
136
+ break;
137
+ }
138
+ return _context.abrupt("return");
139
+ case 2:
140
+ cancelShowTooltip();
141
+ setStatus("loading");
142
+ setShowTooltip(true);
143
+ _context.prev = 5;
144
+ _context.next = 8;
145
+ return onClick === null || onClick === void 0 ? void 0 : onClick(evt);
146
+ case 8:
147
+ if (mounted()) {
148
+ _context.next = 10;
149
+ break;
150
+ }
151
+ return _context.abrupt("return");
152
+ case 10:
153
+ setStatus("success");
154
+ _context.next = 19;
155
+ break;
156
+ case 13:
157
+ _context.prev = 13;
158
+ _context.t0 = _context["catch"](5);
159
+ if (mounted()) {
160
+ _context.next = 17;
161
+ break;
162
+ }
163
+ return _context.abrupt("return");
164
+ case 17:
165
+ setStatus("error");
166
+ onError === null || onError === void 0 || onError(_context.t0);
167
+ case 19:
168
+ case "end":
169
+ return _context.stop();
170
+ }
171
+ }, _callee, null, [[5, 13]]);
172
+ }));
173
+ return function handleClick(_x) {
174
+ return _ref2.apply(this, arguments);
175
+ };
176
+ }();
177
+
178
+ // Common handler for pointer enter/focus
179
+ var handleShowTooltip = function handleShowTooltip(e) {
180
+ var _props$onPointerEnter, _props$onFocus;
181
+ // Call the original handler if provided
182
+ if (e.type === "pointerenter") (_props$onPointerEnter = props.onPointerEnter) === null || _props$onPointerEnter === void 0 || _props$onPointerEnter.call(props, e);
183
+ if (e.type === "focus") (_props$onFocus = props.onFocus) === null || _props$onFocus === void 0 || _props$onFocus.call(props, e);
184
+ if (isLoading || status !== "idle") return;
185
+ scheduleShowTooltip();
186
+ };
187
+
188
+ // Common handler for pointer leave/blur
189
+ var handleHideTooltip = function handleHideTooltip(e) {
190
+ var _props$onPointerLeave, _props$onBlur;
191
+ if (e.type === "pointerleave") (_props$onPointerLeave = props.onPointerLeave) === null || _props$onPointerLeave === void 0 || _props$onPointerLeave.call(props, e);
192
+ if (e.type === "blur") (_props$onBlur = props.onBlur) === null || _props$onBlur === void 0 || _props$onBlur.call(props, e);
193
+ if (isLoading || status !== "idle") return;
194
+ cancelShowTooltip();
195
+ setShowTooltip(false);
196
+ };
197
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_IconButton.IconButton, _objectSpread(_objectSpread({}, props), {}, {
198
+ title: title,
199
+ showTooltip: showTooltip,
200
+ tooltipHideDelay: tooltipHideDelay,
201
+ icon: icon,
202
+ loading: isLoading,
203
+ onClick: handleClick,
204
+ onPointerEnter: handleShowTooltip,
205
+ onPointerLeave: handleHideTooltip,
206
+ onFocus: handleShowTooltip,
207
+ onBlur: handleHideTooltip
208
+ }));
209
+ };
@@ -2,7 +2,7 @@ import type { ReactNode } from "react";
2
2
  import type { SegmentedControlSize } from "./types";
3
3
  export interface SegmentedControlProps {
4
4
  /**
5
- * The class name of the `Switch`.
5
+ * The class name of the `SegmentedControl`.
6
6
  */
7
7
  className?: string;
8
8
  /**
@@ -10,7 +10,7 @@ export interface SegmentedControlProps {
10
10
  */
11
11
  value: string;
12
12
  /**
13
- * Whether the `Switch` is disabled.
13
+ * Whether the `SegmentedControl` is disabled.
14
14
  */
15
15
  disabled?: boolean;
16
16
  /**
@@ -18,11 +18,11 @@ export interface SegmentedControlProps {
18
18
  */
19
19
  onChange: (value: string) => void;
20
20
  /**
21
- * The content of the `Switch`.
21
+ * The content of the `SegmentedControl`.
22
22
  */
23
23
  children: ReactNode;
24
24
  /**
25
- * The size of the `Switch`.
25
+ * The size of the `SegmentedControl`.
26
26
  */
27
27
  size?: SegmentedControlSize;
28
28
  /**
@@ -2,6 +2,8 @@ export * from "./Accordion/Accordion";
2
2
  export * from "./Button/Button";
3
3
  export * from "./ButtonGroup/ButtonGroup";
4
4
  export * from "./ButtonLink/ButtonLink";
5
+ export type { IconButtonWithFeedbackLocale, IconButtonWithFeedbackProps, } from "./IconButtonWithFeedback/IconButtonWithFeedback";
6
+ export { IconButtonWithFeedback } from "./IconButtonWithFeedback/IconButtonWithFeedback";
5
7
  export * from "./IconButton/IconButton";
6
8
  export * from "./IconButtonLink/IconButtonLink";
7
9
  export * from "./SegmentedControl";
@@ -3,9 +3,19 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
+ var _exportNames = {
7
+ IconButtonWithFeedback: true
8
+ };
9
+ Object.defineProperty(exports, "IconButtonWithFeedback", {
10
+ enumerable: true,
11
+ get: function get() {
12
+ return _IconButtonWithFeedback.IconButtonWithFeedback;
13
+ }
14
+ });
6
15
  var _Accordion = require("./Accordion/Accordion");
7
16
  Object.keys(_Accordion).forEach(function (key) {
8
17
  if (key === "default" || key === "__esModule") return;
18
+ if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
9
19
  if (key in exports && exports[key] === _Accordion[key]) return;
10
20
  Object.defineProperty(exports, key, {
11
21
  enumerable: true,
@@ -17,6 +27,7 @@ Object.keys(_Accordion).forEach(function (key) {
17
27
  var _Button = require("./Button/Button");
18
28
  Object.keys(_Button).forEach(function (key) {
19
29
  if (key === "default" || key === "__esModule") return;
30
+ if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
20
31
  if (key in exports && exports[key] === _Button[key]) return;
21
32
  Object.defineProperty(exports, key, {
22
33
  enumerable: true,
@@ -28,6 +39,7 @@ Object.keys(_Button).forEach(function (key) {
28
39
  var _ButtonGroup = require("./ButtonGroup/ButtonGroup");
29
40
  Object.keys(_ButtonGroup).forEach(function (key) {
30
41
  if (key === "default" || key === "__esModule") return;
42
+ if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
31
43
  if (key in exports && exports[key] === _ButtonGroup[key]) return;
32
44
  Object.defineProperty(exports, key, {
33
45
  enumerable: true,
@@ -39,6 +51,7 @@ Object.keys(_ButtonGroup).forEach(function (key) {
39
51
  var _ButtonLink = require("./ButtonLink/ButtonLink");
40
52
  Object.keys(_ButtonLink).forEach(function (key) {
41
53
  if (key === "default" || key === "__esModule") return;
54
+ if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
42
55
  if (key in exports && exports[key] === _ButtonLink[key]) return;
43
56
  Object.defineProperty(exports, key, {
44
57
  enumerable: true,
@@ -47,9 +60,11 @@ Object.keys(_ButtonLink).forEach(function (key) {
47
60
  }
48
61
  });
49
62
  });
63
+ var _IconButtonWithFeedback = require("./IconButtonWithFeedback/IconButtonWithFeedback");
50
64
  var _IconButton = require("./IconButton/IconButton");
51
65
  Object.keys(_IconButton).forEach(function (key) {
52
66
  if (key === "default" || key === "__esModule") return;
67
+ if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
53
68
  if (key in exports && exports[key] === _IconButton[key]) return;
54
69
  Object.defineProperty(exports, key, {
55
70
  enumerable: true,
@@ -61,6 +76,7 @@ Object.keys(_IconButton).forEach(function (key) {
61
76
  var _IconButtonLink = require("./IconButtonLink/IconButtonLink");
62
77
  Object.keys(_IconButtonLink).forEach(function (key) {
63
78
  if (key === "default" || key === "__esModule") return;
79
+ if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
64
80
  if (key in exports && exports[key] === _IconButtonLink[key]) return;
65
81
  Object.defineProperty(exports, key, {
66
82
  enumerable: true,
@@ -72,6 +88,7 @@ Object.keys(_IconButtonLink).forEach(function (key) {
72
88
  var _SegmentedControl = require("./SegmentedControl");
73
89
  Object.keys(_SegmentedControl).forEach(function (key) {
74
90
  if (key === "default" || key === "__esModule") return;
91
+ if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
75
92
  if (key in exports && exports[key] === _SegmentedControl[key]) return;
76
93
  Object.defineProperty(exports, key, {
77
94
  enumerable: true,
@@ -83,6 +100,7 @@ Object.keys(_SegmentedControl).forEach(function (key) {
83
100
  var _ToggleButton = require("./ToggleButton/ToggleButton");
84
101
  Object.keys(_ToggleButton).forEach(function (key) {
85
102
  if (key === "default" || key === "__esModule") return;
103
+ if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
86
104
  if (key in exports && exports[key] === _ToggleButton[key]) return;
87
105
  Object.defineProperty(exports, key, {
88
106
  enumerable: true,
@@ -94,6 +112,7 @@ Object.keys(_ToggleButton).forEach(function (key) {
94
112
  var _ToggleGroup = require("./ToggleGroup/ToggleGroup");
95
113
  Object.keys(_ToggleGroup).forEach(function (key) {
96
114
  if (key === "default" || key === "__esModule") return;
115
+ if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
97
116
  if (key in exports && exports[key] === _ToggleGroup[key]) return;
98
117
  Object.defineProperty(exports, key, {
99
118
  enumerable: true,
@@ -176,14 +176,14 @@ var AutoComplete = exports.AutoComplete = /*#__PURE__*/(0, _react.forwardRef)(fu
176
176
  selectedItems: selectedItems,
177
177
  onSelectedItemsChange: function onSelectedItemsChange(changes) {
178
178
  if (typeof changes.selectedItems === "undefined") {
179
- onChange(null);
179
+ onChange(null, changes.type);
180
180
  } else if (multiple) {
181
181
  onChange((0, _uniqBy.uniqBy)(changes.selectedItems, function (i) {
182
182
  return i.value;
183
- }));
183
+ }), changes.type);
184
184
  } else {
185
185
  var _changes$selectedItem;
186
- onChange((_changes$selectedItem = changes.selectedItems[0]) !== null && _changes$selectedItem !== void 0 ? _changes$selectedItem : null);
186
+ onChange((_changes$selectedItem = changes.selectedItems[0]) !== null && _changes$selectedItem !== void 0 ? _changes$selectedItem : null, changes.type);
187
187
  }
188
188
  }
189
189
  });
@@ -199,6 +199,7 @@ var AutoComplete = exports.AutoComplete = /*#__PURE__*/(0, _react.forwardRef)(fu
199
199
  });
200
200
  },
201
201
  defaultHighlightedIndex: 0,
202
+ isOpen: inputValue ? items.length > 0 ? undefined : true : undefined,
202
203
  getA11yStatusMessage: function getA11yStatusMessage(_ref2) {
203
204
  var isOpen = _ref2.isOpen,
204
205
  resultCount = _ref2.resultCount,
@@ -285,7 +286,13 @@ var AutoComplete = exports.AutoComplete = /*#__PURE__*/(0, _react.forwardRef)(fu
285
286
  setInputFocused(true);
286
287
  },
287
288
  onBlur: function onBlur(evt) {
289
+ var _evt$relatedTarget;
288
290
  _onBlur === null || _onBlur === void 0 || _onBlur(evt);
291
+
292
+ // Do not update inputFocused if the blur is caused by the clear button
293
+ if (evt.relatedTarget instanceof Element && ((_evt$relatedTarget = evt.relatedTarget) === null || _evt$relatedTarget === void 0 ? void 0 : _evt$relatedTarget.getAttribute("aria-label")) === locale.clearInputButton) {
294
+ return;
295
+ }
289
296
  setInputFocused(false);
290
297
  },
291
298
  onKeyDown: function onKeyDown(evt) {
@@ -344,7 +351,8 @@ var AutoComplete = exports.AutoComplete = /*#__PURE__*/(0, _react.forwardRef)(fu
344
351
  className: (0, _clsx["default"])((0, _satellitePrefixer["default"])(_templateObject4 || (_templateObject4 = (0, _taggedTemplateLiteral2["default"])(["autocomplete-container"]))), inputFocused && (0, _satellitePrefixer["default"])(_templateObject5 || (_templateObject5 = (0, _taggedTemplateLiteral2["default"])(["focusable-show"]))), variant === "large" && (0, _satellitePrefixer["default"])(_templateObject6 || (_templateObject6 = (0, _taggedTemplateLiteral2["default"])(["autocomplete-large py-1"]))), disabled && (0, _satellitePrefixer["default"])(_templateObject7 || (_templateObject7 = (0, _taggedTemplateLiteral2["default"])(["autocomplete-disabled"]))), isInvalid && (0, _satellitePrefixer["default"])(_templateObject8 || (_templateObject8 = (0, _taggedTemplateLiteral2["default"])(["autocomplete-invalid"]))), noWrap && (0, _satellitePrefixer["default"])(_templateObject9 || (_templateObject9 = (0, _taggedTemplateLiteral2["default"])(["autocomplete-nowrap"])))),
345
352
  onClick: function onClick() {
346
353
  var _inputRef$current;
347
- return (_inputRef$current = inputRef.current) === null || _inputRef$current === void 0 ? void 0 : _inputRef$current.focus();
354
+ (_inputRef$current = inputRef.current) === null || _inputRef$current === void 0 || _inputRef$current.focus();
355
+ combobox.openMenu();
348
356
  },
349
357
  children: [Icon && /*#__PURE__*/(0, _jsxRuntime.jsx)(Icon, {
350
358
  className: (0, _clsx["default"])((0, _satellitePrefixer["default"])(_templateObject10 || (_templateObject10 = (0, _taggedTemplateLiteral2["default"])(["mr-4 shrink-0"]))), (0, _satellitePrefixer["default"])(_templateObject11 || (_templateObject11 = (0, _taggedTemplateLiteral2["default"])(["", ""])), disabled ? "text-grey-200" : inputFocused ? "text-accent-600" : "text-grey-500")),
@@ -394,7 +402,12 @@ var AutoComplete = exports.AutoComplete = /*#__PURE__*/(0, _react.forwardRef)(fu
394
402
  }), showClearButton && /*#__PURE__*/(0, _jsxRuntime.jsx)("button", {
395
403
  type: "button",
396
404
  className: (0, _satellitePrefixer["default"])(_templateObject22 || (_templateObject22 = (0, _taggedTemplateLiteral2["default"])(["w-6 h-6 flex items-center justify-center text-grey-500"]))),
397
- onClick: function onClick() {
405
+ onClick: function onClick(evt) {
406
+ var _inputRef$current2;
407
+ // We stop propagation to avoid calling the onClick handler of the container
408
+ // which would open the combobox
409
+ evt.stopPropagation();
410
+ (_inputRef$current2 = inputRef.current) === null || _inputRef$current2 === void 0 || _inputRef$current2.focus();
398
411
  setInternalInputValue("");
399
412
  multipleSelection.setSelectedItems([]);
400
413
  },
@@ -1,3 +1,4 @@
1
+ import { UseMultipleSelectionStateChangeTypes } from "downshift";
1
2
  import type { ComponentType, FocusEventHandler, ForwardedRef, PropsWithChildren, ReactNode, RefObject } from "react";
2
3
  import type { IconComponentType } from "../../Icons";
3
4
  export declare type AutoCompleteVariant = "medium" | "large";
@@ -171,8 +172,11 @@ export interface AutoCompleteSingleProps<T extends Option = Option> extends Auto
171
172
  /**
172
173
  * The callback function that is called when the value of the `AutoComplete` changes.
173
174
  */
174
- onChange: (option: T | null) => void;
175
+ onChange: (option: T | null, changeType?: AutoCompleteChangeTypesValue) => void;
175
176
  }
177
+ declare type UseMultipleSelectionStateChangeTypesKey = keyof typeof UseMultipleSelectionStateChangeTypes;
178
+ export declare type AutoCompleteChangeTypesValue = (typeof UseMultipleSelectionStateChangeTypes)[UseMultipleSelectionStateChangeTypesKey];
179
+ export declare const AutoCompleteChangeTypes: typeof UseMultipleSelectionStateChangeTypes;
176
180
  export interface AutoCompleteMultiProps<T extends Option = Option> extends AutoCompleteBaseProps<T> {
177
181
  /**
178
182
  * Whether the `AutoComplete` is a multiple selection.
@@ -185,7 +189,7 @@ export interface AutoCompleteMultiProps<T extends Option = Option> extends AutoC
185
189
  /**
186
190
  * The callback function that is called when the value of the `AutoComplete` changes.
187
191
  */
188
- onChange: (option: T[] | null) => void;
192
+ onChange: (option: T[] | null, changeType?: AutoCompleteChangeTypesValue) => void;
189
193
  }
190
194
  export declare type AutoCompleteProps<T extends Option = Option> = AutoCompleteMultiProps<T> | AutoCompleteSingleProps<T>;
191
195
  declare type OptionsValue = string | number | boolean;
@@ -2,4 +2,7 @@
2
2
 
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
- });
5
+ });
6
+ exports.AutoCompleteChangeTypes = void 0;
7
+ var _downshift = require("downshift");
8
+ var AutoCompleteChangeTypes = exports.AutoCompleteChangeTypes = _downshift.UseMultipleSelectionStateChangeTypes;
@@ -5,6 +5,11 @@ export declare type FilePickerLocale = {
5
5
  };
6
6
  export declare type FilePickerProps = DropzoneProps & {
7
7
  locale?: FilePickerLocale;
8
+ /**
9
+ * Whether the picked files can be cleared.
10
+ * @default true
11
+ */
12
+ clearable?: boolean;
8
13
  };
9
14
  /**
10
15
  * The `FilePicker` component allows users to select multiple files for attachment, supporting both drag-and-drop and browse options.
@@ -13,4 +18,9 @@ export declare type FilePickerProps = DropzoneProps & {
13
18
  */
14
19
  export declare const FilePicker: import("react").ForwardRefExoticComponent<import("../../Fields/Dropzone").DropzoneBaseProps & Omit<import("react-dropzone").DropzoneProps, "multiple" | "onDropAccepted" | "onDropRejected"> & {
15
20
  locale?: FilePickerLocale | undefined;
21
+ /**
22
+ * Whether the picked files can be cleared.
23
+ * @default true
24
+ */
25
+ clearable?: boolean | undefined;
16
26
  } & import("react").RefAttributes<HTMLElement>>;