@vectara/vectara-ui 16.8.0 → 16.9.0
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/lib/components/button/BaseButton.d.ts +1 -0
- package/lib/components/button/BaseButton.js +27 -18
- package/lib/components/button/baseButton.scss +5 -0
- package/lib/styles/index.css +5 -0
- package/package.json +1 -1
- package/src/docs/pages/button/Icons.tsx +1 -1
- package/src/docs/pages/button/Truncate.tsx +1 -1
|
@@ -26,6 +26,7 @@ export type BaseButtonProps = {
|
|
|
26
26
|
isSubmit?: boolean;
|
|
27
27
|
isLoading?: boolean;
|
|
28
28
|
truncate?: boolean;
|
|
29
|
+
"aria-label"?: string;
|
|
29
30
|
};
|
|
30
31
|
export declare const BaseButton: import("react").ForwardRefExoticComponent<BaseButtonProps & {
|
|
31
32
|
spinnerColor?: "accent" | "primary" | "success" | "warning" | "danger" | "subdued" | "empty" | "dark" | undefined;
|
|
@@ -15,6 +15,7 @@ import classNames from "classnames";
|
|
|
15
15
|
import { getTrackingProps } from "../../utils/getTrackingProps";
|
|
16
16
|
import { useVuiContext } from "../context/Context";
|
|
17
17
|
import { VuiSpinner } from "../spinner/Spinner";
|
|
18
|
+
import { VuiTooltip } from "../tooltip/Tooltip";
|
|
18
19
|
const alignToClassMap = {
|
|
19
20
|
left: "vuiBaseButton--alignLeft",
|
|
20
21
|
center: "vuiBaseButton--alignCenter",
|
|
@@ -27,12 +28,13 @@ const sizeToSpinnerSizeMap = {
|
|
|
27
28
|
l: "m"
|
|
28
29
|
};
|
|
29
30
|
export const BaseButton = forwardRef((_a, ref) => {
|
|
30
|
-
var { children, icon, iconSide = "left", align = "center", className, size = "m", fullWidth, onClick, onMouseOver, onMouseOut, onMouseMove, tabIndex, isInert, isDisabled, href, target, track, htmlFor, isSubmit, isLoading, spinnerColor, truncate } = _a, rest = __rest(_a, ["children", "icon", "iconSide", "align", "className", "size", "fullWidth", "onClick", "onMouseOver", "onMouseOut", "onMouseMove", "tabIndex", "isInert", "isDisabled", "href", "target", "track", "htmlFor", "isSubmit", "isLoading", "spinnerColor", "truncate"]);
|
|
31
|
+
var { children, icon, iconSide = "left", align = "center", className, size = "m", fullWidth, onClick, onMouseOver, onMouseOut, onMouseMove, tabIndex, isInert, isDisabled, href, target, track, htmlFor, isSubmit, isLoading, spinnerColor, truncate, "aria-label": ariaLabel } = _a, rest = __rest(_a, ["children", "icon", "iconSide", "align", "className", "size", "fullWidth", "onClick", "onMouseOver", "onMouseOut", "onMouseMove", "tabIndex", "isInert", "isDisabled", "href", "target", "track", "htmlFor", "isSubmit", "isLoading", "spinnerColor", "truncate", "aria-label"]);
|
|
31
32
|
const { createLink } = useVuiContext();
|
|
32
33
|
const classes = classNames("vuiBaseButton", className, `vuiBaseButton--${size}`, alignToClassMap[align], {
|
|
33
34
|
"vuiBaseButton-isInert": isInert,
|
|
34
35
|
"vuiBaseButton-isDisabled": isDisabled,
|
|
35
36
|
"vuiBaseButton--fullWidth": fullWidth,
|
|
37
|
+
"vuiBaseButton--truncate": truncate,
|
|
36
38
|
[`vuiBaseButton--${isLoading ? "left" : iconSide}`]: (Boolean(icon) || isLoading) && Boolean(children)
|
|
37
39
|
});
|
|
38
40
|
let iconContainer;
|
|
@@ -42,33 +44,40 @@ export const BaseButton = forwardRef((_a, ref) => {
|
|
|
42
44
|
else if (icon) {
|
|
43
45
|
iconContainer = _jsx("span", Object.assign({ className: "vuiBaseButtonIconContainer" }, { children: icon }));
|
|
44
46
|
}
|
|
45
|
-
|
|
46
|
-
// for uploading files and adding a button to trigger it.
|
|
47
|
+
let button;
|
|
47
48
|
if (htmlFor) {
|
|
48
|
-
|
|
49
|
+
// This is useful for controlling other elements, e.g. creating an <input type="file" />
|
|
50
|
+
// for uploading files and adding a button to trigger it.
|
|
51
|
+
button = (_jsxs("label", Object.assign({ "aria-label": ariaLabel, htmlFor: htmlFor, className: classes, tabIndex: tabIndex }, rest, { children: [iconContainer, children] })));
|
|
49
52
|
}
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
+
else if (href && !isDisabled) {
|
|
54
|
+
// Anchor tags can't be disabled, so we'll just render a button instead
|
|
55
|
+
// if isDisabled is true.
|
|
53
56
|
const wrapperClasses = classNames("vuiBaseButtonLinkWrapper", {
|
|
54
57
|
"vuiBaseButtonLinkWrapper--fullWidth": fullWidth
|
|
55
58
|
});
|
|
56
|
-
|
|
59
|
+
button = createLink(Object.assign(Object.assign({ className: wrapperClasses, href,
|
|
57
60
|
onClick,
|
|
58
61
|
onMouseOver,
|
|
59
62
|
onMouseOut,
|
|
60
63
|
onMouseMove, children: (
|
|
61
64
|
//* Wrap a button otherwise the flex layout breaks */}
|
|
62
|
-
_jsxs("button", Object.assign({ className: classes, tabIndex: -1, ref: ref }, { children: [iconContainer, children] }))), target,
|
|
65
|
+
_jsxs("button", Object.assign({ "aria-label": ariaLabel, className: classes, tabIndex: -1, ref: ref }, { children: [iconContainer, children] }))), target,
|
|
63
66
|
tabIndex }, rest), getTrackingProps(track)));
|
|
64
67
|
}
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
68
|
+
else {
|
|
69
|
+
const labelClasses = classNames({
|
|
70
|
+
"vuiBaseButtonLabel--truncate": truncate
|
|
71
|
+
});
|
|
72
|
+
const props = Object.assign({ onClick,
|
|
73
|
+
onMouseOver,
|
|
74
|
+
onMouseOut,
|
|
75
|
+
onMouseMove,
|
|
76
|
+
tabIndex, type: isSubmit ? "submit" : "button", disabled: isDisabled }, rest);
|
|
77
|
+
button = (_jsxs("button", Object.assign({ "aria-label": ariaLabel, className: classes }, props, { ref: ref }, { children: [iconContainer, _jsx("span", Object.assign({ className: labelClasses }, { children: children }))] })));
|
|
78
|
+
}
|
|
79
|
+
if (ariaLabel) {
|
|
80
|
+
return _jsx(VuiTooltip, Object.assign({ tip: ariaLabel }, { children: button }));
|
|
81
|
+
}
|
|
82
|
+
return button;
|
|
74
83
|
});
|
package/lib/styles/index.css
CHANGED
package/package.json
CHANGED
|
@@ -18,7 +18,7 @@ export const Icons = () => {
|
|
|
18
18
|
</Subsection>
|
|
19
19
|
|
|
20
20
|
<Subsection title="Icon only">
|
|
21
|
-
<VuiButtonPrimary icon={icon} color="primary" size="m" />
|
|
21
|
+
<VuiButtonPrimary icon={icon} color="primary" size="m" aria-label="Add to favorites" />
|
|
22
22
|
</Subsection>
|
|
23
23
|
</>
|
|
24
24
|
);
|