@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.
- package/README.md +1 -1
- package/dist/cjs/Actions/Button/PolymorphicIconButton.d.ts +10 -2
- package/dist/cjs/Actions/Button/PolymorphicIconButton.js +8 -2
- package/dist/cjs/Actions/IconButtonWithFeedback/IconButtonWithFeedback.d.ts +68 -0
- package/dist/cjs/Actions/IconButtonWithFeedback/IconButtonWithFeedback.js +209 -0
- package/dist/cjs/Actions/SegmentedControl/SegmentedControl.d.ts +4 -4
- package/dist/cjs/Actions/index.d.ts +2 -0
- package/dist/cjs/Actions/index.js +19 -0
- package/dist/cjs/Fields/AutoComplete/AutoComplete.js +18 -5
- package/dist/cjs/Fields/AutoComplete/types.d.ts +6 -2
- package/dist/cjs/Fields/AutoComplete/types.js +4 -1
- package/dist/cjs/Fields/FilePicker/FilePicker.d.ts +10 -0
- package/dist/cjs/Fields/FilePicker/FilePicker.js +9 -2
- package/dist/cjs/Fields/Input/Input.js +1 -1
- package/dist/cjs/Fields/Input/Input.tailwind.js +7 -7
- package/dist/cjs/Fields/TextArea/TextArea.tailwind.js +7 -7
- package/dist/cjs/Overlay/MenuButton/MenuButton.d.ts +1 -1
- package/dist/cjs/Overlay/MenuButton/components/items/Item.d.ts +1 -1
- package/dist/cjs/Overlay/Modal/Modal.d.ts +1 -1
- package/dist/cjs/Overlay/Modal/Modal.js +17 -11
- package/dist/cjs/Overlay/Modal/Modal.tailwind.js +3 -0
- package/dist/cjs/Satellite/locale.d.ts +2 -0
- package/dist/cjs/Typography/Typography.tailwind.js +1 -1
- package/dist/cjs/utils/isCssPropertySupported.d.ts +1 -1
- package/dist/cjs/utils/prefersReducedMotion.js +1 -1
- package/dist/cjs/utils/useTimeoutFn.d.ts +2 -0
- package/dist/cjs/utils/useTimeoutFn.js +44 -0
- package/dist/esm/Actions/Button/PolymorphicIconButton.d.ts +10 -2
- package/dist/esm/Actions/Button/PolymorphicIconButton.js +8 -2
- package/dist/esm/Actions/IconButtonWithFeedback/IconButtonWithFeedback.d.ts +68 -0
- package/dist/esm/Actions/IconButtonWithFeedback/IconButtonWithFeedback.js +202 -0
- package/dist/esm/Actions/SegmentedControl/SegmentedControl.d.ts +4 -4
- package/dist/esm/Actions/index.d.ts +2 -0
- package/dist/esm/Actions/index.js +2 -2
- package/dist/esm/Fields/AutoComplete/AutoComplete.js +18 -5
- package/dist/esm/Fields/AutoComplete/types.d.ts +6 -2
- package/dist/esm/Fields/AutoComplete/types.js +2 -1
- package/dist/esm/Fields/FilePicker/FilePicker.d.ts +10 -0
- package/dist/esm/Fields/FilePicker/FilePicker.js +9 -2
- package/dist/esm/Fields/Input/Input.js +1 -1
- package/dist/esm/Fields/Input/Input.tailwind.js +7 -9
- package/dist/esm/Fields/TextArea/TextArea.tailwind.js +7 -9
- package/dist/esm/Overlay/MenuButton/MenuButton.d.ts +1 -1
- package/dist/esm/Overlay/MenuButton/components/items/Item.d.ts +1 -1
- package/dist/esm/Overlay/Modal/Modal.d.ts +1 -1
- package/dist/esm/Overlay/Modal/Modal.js +17 -11
- package/dist/esm/Overlay/Modal/Modal.tailwind.js +3 -0
- package/dist/esm/Satellite/locale.d.ts +2 -0
- package/dist/esm/Typography/Typography.tailwind.js +1 -1
- package/dist/esm/utils/isCssPropertySupported.d.ts +1 -1
- package/dist/esm/utils/prefersReducedMotion.js +1 -1
- package/dist/esm/utils/useTimeoutFn.d.ts +2 -0
- package/dist/esm/utils/useTimeoutFn.js +38 -0
- package/dist/satellite.min.css +1 -1
- package/package.json +2 -1
package/README.md
CHANGED
@@ -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:
|
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 `
|
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 `
|
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 `
|
21
|
+
* The content of the `SegmentedControl`.
|
22
22
|
*/
|
23
23
|
children: ReactNode;
|
24
24
|
/**
|
25
|
-
* The size of the `
|
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
|
-
|
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>>;
|