@homebound/beam 2.230.1 → 2.231.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/dist/components/Button.d.ts +1 -1
- package/dist/components/Button.js +2 -1
- package/dist/components/ButtonDatePicker.js +5 -1
- package/dist/components/ButtonMenu.js +1 -1
- package/dist/components/ButtonModal.js +1 -1
- package/dist/components/Filters/index.d.ts +1 -1
- package/dist/components/Filters/index.js +3 -3
- package/dist/components/SuperDrawer/utils.js +0 -1
- package/dist/components/Table/components/EditColumnsButton.js +1 -1
- package/dist/components/internal/DatePicker/DatePicker.css +14 -14
- package/dist/components/internal/OverlayTrigger.d.ts +3 -0
- package/dist/components/internal/OverlayTrigger.js +10 -2
- package/dist/inputs/TextFieldBase.js +35 -29
- package/dist/inputs/index.d.ts +1 -1
- package/dist/inputs/index.js +1 -1
- package/dist/inputs/internal/ListBox.d.ts +1 -0
- package/dist/inputs/internal/ListBox.js +2 -2
- package/dist/inputs/internal/SelectFieldBase.js +1 -1
- package/package.json +3 -3
|
@@ -3,7 +3,7 @@ import { ButtonHTMLAttributes, ReactNode, RefObject } from "react";
|
|
|
3
3
|
import { IconProps } from "./";
|
|
4
4
|
import { BeamButtonProps, BeamFocusableProps } from "../interfaces";
|
|
5
5
|
export interface ButtonProps extends BeamButtonProps, BeamFocusableProps {
|
|
6
|
-
label:
|
|
6
|
+
label: ReactNode;
|
|
7
7
|
variant?: ButtonVariant;
|
|
8
8
|
size?: ButtonSize;
|
|
9
9
|
icon?: IconProps["icon"] | null;
|
|
@@ -9,6 +9,7 @@ const Css_1 = require("../Css");
|
|
|
9
9
|
const utils_1 = require("../utils");
|
|
10
10
|
const getInteractiveElement_1 = require("../utils/getInteractiveElement");
|
|
11
11
|
const useTestIds_1 = require("../utils/useTestIds");
|
|
12
|
+
const OverlayTrigger_1 = require("./internal/OverlayTrigger");
|
|
12
13
|
function Button(props) {
|
|
13
14
|
const { onClick: onPress, disabled, endAdornment, menuTriggerProps, tooltip, openInNew, download, contrast = false, forceFocusStyles = false, labelInFlight, ...otherProps } = props;
|
|
14
15
|
const asLink = typeof onPress === "string";
|
|
@@ -20,7 +21,7 @@ function Button(props) {
|
|
|
20
21
|
// Default the icon based on other properties.
|
|
21
22
|
icon = download ? "download" : showExternalLinkIcon ? "linkExternal" : undefined, variant = "primary", size = "sm", buttonRef, } = ariaProps;
|
|
22
23
|
const ref = buttonRef || (0, react_1.useRef)(null);
|
|
23
|
-
const tid = (0, useTestIds_1.useTestIds)(props,
|
|
24
|
+
const tid = (0, useTestIds_1.useTestIds)(props, (0, OverlayTrigger_1.labelOr)(ariaProps, "button"));
|
|
24
25
|
const { buttonProps, isPressed } = (0, react_aria_1.useButton)({
|
|
25
26
|
...ariaProps,
|
|
26
27
|
onPress: asLink
|
|
@@ -15,7 +15,11 @@ function ButtonDatePicker(props) {
|
|
|
15
15
|
const state = (0, react_stately_1.useMenuTriggerState)({ isOpen: defaultOpen });
|
|
16
16
|
const buttonRef = (0, react_1.useRef)(null);
|
|
17
17
|
const { menuTriggerProps, menuProps } = (0, react_aria_1.useMenuTrigger)({ isDisabled: !!disabled }, state, buttonRef);
|
|
18
|
-
const tid = (0, utils_1.useTestIds)(props, (0, OverlayTrigger_1.isTextButton)(trigger)
|
|
18
|
+
const tid = (0, utils_1.useTestIds)(props, (0, OverlayTrigger_1.isTextButton)(trigger)
|
|
19
|
+
? (0, defaultTestId_1.defaultTestId)((0, OverlayTrigger_1.labelOr)(trigger, "buttonDatePicker"))
|
|
20
|
+
: (0, OverlayTrigger_1.isIconButton)(trigger)
|
|
21
|
+
? trigger.icon
|
|
22
|
+
: trigger.name);
|
|
19
23
|
return ((0, jsx_runtime_1.jsx)(OverlayTrigger_1.OverlayTrigger, { ...props, menuTriggerProps: menuTriggerProps, state: state, buttonRef: buttonRef, ...tid, children: (0, jsx_runtime_1.jsx)(DatePickerOverlay_1.DatePickerOverlay, { overlayProps: menuProps, children: (0, jsx_runtime_1.jsx)(DatePicker_1.DatePicker, { ...datePickerProps, onSelect: (d) => {
|
|
20
24
|
onSelect(d);
|
|
21
25
|
state.close();
|
|
@@ -13,7 +13,7 @@ function ButtonMenu(props) {
|
|
|
13
13
|
const state = (0, react_stately_1.useMenuTriggerState)({ isOpen: defaultOpen });
|
|
14
14
|
const buttonRef = (0, react_1.useRef)(null);
|
|
15
15
|
const { menuTriggerProps, menuProps } = (0, react_aria_1.useMenuTrigger)({ isDisabled: !!disabled }, state, buttonRef);
|
|
16
|
-
const tid = (0, utils_1.useTestIds)(props, (0, OverlayTrigger_1.isTextButton)(trigger) ? trigger
|
|
16
|
+
const tid = (0, utils_1.useTestIds)(props, (0, OverlayTrigger_1.isTextButton)(trigger) ? (0, OverlayTrigger_1.labelOr)(trigger, "buttonMenu") : (0, OverlayTrigger_1.isIconButton)(trigger) ? trigger.icon : trigger.name);
|
|
17
17
|
return ((0, jsx_runtime_1.jsx)(OverlayTrigger_1.OverlayTrigger, { ...props, menuTriggerProps: menuTriggerProps, state: state, buttonRef: buttonRef, ...tid, children: (0, jsx_runtime_1.jsx)(Menu_1.Menu, { ariaMenuProps: menuProps, onClose: () => state.close(), items: items, persistentItems: persistentItems, searchable: searchable, ...tid }) }));
|
|
18
18
|
}
|
|
19
19
|
exports.ButtonMenu = ButtonMenu;
|
|
@@ -13,7 +13,7 @@ function ButtonModal(props) {
|
|
|
13
13
|
const state = (0, react_stately_1.useMenuTriggerState)({ isOpen: storybookDefaultOpen });
|
|
14
14
|
const buttonRef = (0, react_1.useRef)(null);
|
|
15
15
|
const { menuTriggerProps } = (0, react_aria_1.useMenuTrigger)({ isDisabled: !!disabled }, state, buttonRef);
|
|
16
|
-
const tid = (0, utils_1.useTestIds)(props, (0, OverlayTrigger_1.isTextButton)(trigger) ? trigger
|
|
16
|
+
const tid = (0, utils_1.useTestIds)(props, (0, OverlayTrigger_1.isTextButton)(trigger) ? (0, OverlayTrigger_1.labelOr)(trigger, "buttonModal") : (0, OverlayTrigger_1.isIconButton)(trigger) ? trigger.icon : trigger.name);
|
|
17
17
|
return ((0, jsx_runtime_1.jsx)(OverlayTrigger_1.OverlayTrigger, { ...props, menuTriggerProps: menuTriggerProps, state: state, buttonRef: buttonRef, ...tid, children: (0, jsx_runtime_1.jsx)(ContextualModal_1.ContextualModal, { content: content, title: title, close: state.close }) }));
|
|
18
18
|
}
|
|
19
19
|
exports.ButtonModal = ButtonModal;
|
|
@@ -2,8 +2,8 @@ export { dateFilter } from "./DateFilter";
|
|
|
2
2
|
export type { DateFilterValue } from "./DateFilter";
|
|
3
3
|
export { dateRangeFilter } from "./DateRangeFilter";
|
|
4
4
|
export type { DateRangeFilterValue } from "./DateRangeFilter";
|
|
5
|
-
export { numberRangeFilter } from "./NumberRangeFilter";
|
|
6
5
|
export { multiFilter } from "./MultiFilter";
|
|
6
|
+
export { numberRangeFilter } from "./NumberRangeFilter";
|
|
7
7
|
export { singleFilter } from "./SingleFilter";
|
|
8
8
|
export { booleanFilter } from "./BooleanFilter";
|
|
9
9
|
export { checkboxFilter } from "./CheckboxFilter";
|
|
@@ -14,15 +14,15 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
14
14
|
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
15
|
};
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
-
exports.toggleFilter = exports.checkboxFilter = exports.booleanFilter = exports.singleFilter = exports.
|
|
17
|
+
exports.toggleFilter = exports.checkboxFilter = exports.booleanFilter = exports.singleFilter = exports.numberRangeFilter = exports.multiFilter = exports.dateRangeFilter = exports.dateFilter = void 0;
|
|
18
18
|
var DateFilter_1 = require("./DateFilter");
|
|
19
19
|
Object.defineProperty(exports, "dateFilter", { enumerable: true, get: function () { return DateFilter_1.dateFilter; } });
|
|
20
20
|
var DateRangeFilter_1 = require("./DateRangeFilter");
|
|
21
21
|
Object.defineProperty(exports, "dateRangeFilter", { enumerable: true, get: function () { return DateRangeFilter_1.dateRangeFilter; } });
|
|
22
|
-
var NumberRangeFilter_1 = require("./NumberRangeFilter");
|
|
23
|
-
Object.defineProperty(exports, "numberRangeFilter", { enumerable: true, get: function () { return NumberRangeFilter_1.numberRangeFilter; } });
|
|
24
22
|
var MultiFilter_1 = require("./MultiFilter");
|
|
25
23
|
Object.defineProperty(exports, "multiFilter", { enumerable: true, get: function () { return MultiFilter_1.multiFilter; } });
|
|
24
|
+
var NumberRangeFilter_1 = require("./NumberRangeFilter");
|
|
25
|
+
Object.defineProperty(exports, "numberRangeFilter", { enumerable: true, get: function () { return NumberRangeFilter_1.numberRangeFilter; } });
|
|
26
26
|
var SingleFilter_1 = require("./SingleFilter");
|
|
27
27
|
Object.defineProperty(exports, "singleFilter", { enumerable: true, get: function () { return SingleFilter_1.singleFilter; } });
|
|
28
28
|
var BooleanFilter_1 = require("./BooleanFilter");
|
|
@@ -16,7 +16,7 @@ function EditColumnsButton(props) {
|
|
|
16
16
|
const state = (0, react_stately_1.useMenuTriggerState)({ isOpen: defaultOpen });
|
|
17
17
|
const buttonRef = (0, react_1.useRef)(null);
|
|
18
18
|
const { menuTriggerProps } = (0, react_aria_1.useMenuTrigger)({ isDisabled: !!disabled }, state, buttonRef);
|
|
19
|
-
const tid = (0, utils_1.useTestIds)(props, (0, OverlayTrigger_1.isTextButton)(trigger) ? trigger
|
|
19
|
+
const tid = (0, utils_1.useTestIds)(props, (0, OverlayTrigger_1.isTextButton)(trigger) ? (0, OverlayTrigger_1.labelOr)(trigger, "editColumnsButton") : (0, OverlayTrigger_1.isIconButton)(trigger) ? trigger.icon : trigger.name);
|
|
20
20
|
const { options } = (0, react_1.useMemo)(() => {
|
|
21
21
|
return columns.reduce((acc, column) => {
|
|
22
22
|
// Only include options that can be hidden and have the `name` property defined.
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
/* Modified by Beam (40 -> 32) */
|
|
3
3
|
--rdp-cell-size: 32px;
|
|
4
4
|
/* Modified by Beam (#0000ff -> LightBlue700) */
|
|
5
|
-
--rdp-accent-color: rgba(3,105,161,1);
|
|
5
|
+
--rdp-accent-color: rgba(3, 105, 161, 1);
|
|
6
6
|
--rdp-background-color: #e7edff;
|
|
7
7
|
/* Switch to dark colors for dark themes */
|
|
8
8
|
--rdp-accent-color-dark: #3003e1;
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
--rdp-outline: 2px solid var(--rdp-accent-color);
|
|
12
12
|
/* Outline border for focused and selected elements */
|
|
13
13
|
/* Modified by Beam (rgba(0, 0, 0, 0.75) -> LightBlue700) */
|
|
14
|
-
--rdp-outline-selected: 2px solid rgba(3,105,161,1);
|
|
14
|
+
--rdp-outline-selected: 2px solid rgba(3, 105, 161, 1);
|
|
15
15
|
}
|
|
16
16
|
|
|
17
17
|
/* Added in By Beam */
|
|
@@ -64,12 +64,12 @@
|
|
|
64
64
|
border: 2px solid transparent;
|
|
65
65
|
}
|
|
66
66
|
|
|
67
|
-
.rdp-button[aria-disabled=
|
|
67
|
+
.rdp-button[aria-disabled="true"] {
|
|
68
68
|
opacity: 0.25;
|
|
69
69
|
pointer-events: none;
|
|
70
70
|
}
|
|
71
71
|
|
|
72
|
-
.rdp-button:not([aria-disabled=
|
|
72
|
+
.rdp-button:not([aria-disabled="true"]) {
|
|
73
73
|
cursor: pointer;
|
|
74
74
|
}
|
|
75
75
|
|
|
@@ -80,7 +80,7 @@
|
|
|
80
80
|
background-color: var(--rdp-background-color);
|
|
81
81
|
}
|
|
82
82
|
|
|
83
|
-
.rdp-button:hover:not([aria-disabled=
|
|
83
|
+
.rdp-button:hover:not([aria-disabled="true"]) {
|
|
84
84
|
background-color: var(--rdp-background-color);
|
|
85
85
|
}
|
|
86
86
|
|
|
@@ -279,34 +279,34 @@
|
|
|
279
279
|
font-weight: bold;
|
|
280
280
|
}
|
|
281
281
|
|
|
282
|
-
.rdp-day_selected:not([aria-disabled=
|
|
283
|
-
.rdp-day_selected:focus:not([aria-disabled=
|
|
284
|
-
.rdp-day_selected:active:not([aria-disabled=
|
|
285
|
-
.rdp-day_selected:hover:not([aria-disabled=
|
|
282
|
+
.rdp-day_selected:not([aria-disabled="true"]),
|
|
283
|
+
.rdp-day_selected:focus:not([aria-disabled="true"]),
|
|
284
|
+
.rdp-day_selected:active:not([aria-disabled="true"]),
|
|
285
|
+
.rdp-day_selected:hover:not([aria-disabled="true"]) {
|
|
286
286
|
color: white;
|
|
287
287
|
background-color: var(--rdp-accent-color);
|
|
288
288
|
}
|
|
289
289
|
|
|
290
|
-
.rdp-day_selected:focus:not([aria-disabled=
|
|
290
|
+
.rdp-day_selected:focus:not([aria-disabled="true"]) {
|
|
291
291
|
border: var(--rdp-outline-selected);
|
|
292
292
|
}
|
|
293
293
|
|
|
294
|
-
.rdp:not([dir=
|
|
294
|
+
.rdp:not([dir="rtl"]) .rdp-day_range_start:not(.rdp-day_range_end) {
|
|
295
295
|
border-top-right-radius: 0;
|
|
296
296
|
border-bottom-right-radius: 0;
|
|
297
297
|
}
|
|
298
298
|
|
|
299
|
-
.rdp:not([dir=
|
|
299
|
+
.rdp:not([dir="rtl"]) .rdp-day_range_end:not(.rdp-day_range_start) {
|
|
300
300
|
border-top-left-radius: 0;
|
|
301
301
|
border-bottom-left-radius: 0;
|
|
302
302
|
}
|
|
303
303
|
|
|
304
|
-
.rdp[dir=
|
|
304
|
+
.rdp[dir="rtl"] .rdp-day_range_start:not(.rdp-day_range_end) {
|
|
305
305
|
border-top-left-radius: 0;
|
|
306
306
|
border-bottom-left-radius: 0;
|
|
307
307
|
}
|
|
308
308
|
|
|
309
|
-
.rdp[dir=
|
|
309
|
+
.rdp[dir="rtl"] .rdp-day_range_end:not(.rdp-day_range_start) {
|
|
310
310
|
border-top-right-radius: 0;
|
|
311
311
|
border-bottom-right-radius: 0;
|
|
312
312
|
}
|
|
@@ -34,4 +34,7 @@ export interface OverlayTriggerProps {
|
|
|
34
34
|
export declare function OverlayTrigger(props: OverlayTriggerProps): import("@emotion/react/jsx-runtime").JSX.Element;
|
|
35
35
|
export declare function isTextButton(trigger: TextButtonTriggerProps | IconButtonTriggerProps | AvatarButtonTriggerProps): trigger is TextButtonTriggerProps;
|
|
36
36
|
export declare function isIconButton(trigger: TextButtonTriggerProps | IconButtonTriggerProps | AvatarButtonTriggerProps): trigger is IconButtonTriggerProps;
|
|
37
|
+
export declare function labelOr(trigger: {
|
|
38
|
+
label: unknown;
|
|
39
|
+
}, fallback: string): string;
|
|
37
40
|
export {};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.isIconButton = exports.isTextButton = exports.OverlayTrigger = void 0;
|
|
3
|
+
exports.labelOr = exports.isIconButton = exports.isTextButton = exports.OverlayTrigger = void 0;
|
|
4
4
|
const jsx_runtime_1 = require("@emotion/react/jsx-runtime");
|
|
5
5
|
const react_1 = require("react");
|
|
6
6
|
const react_aria_1 = require("react-aria");
|
|
@@ -24,7 +24,11 @@ function OverlayTrigger(props) {
|
|
|
24
24
|
placement: (placement ? `bottom ${placement}` : "bottom left"),
|
|
25
25
|
offset: showActiveBorder ? 4 : undefined,
|
|
26
26
|
});
|
|
27
|
-
const tid = (0, utils_1.useTestIds)(props, isTextButton(trigger)
|
|
27
|
+
const tid = (0, utils_1.useTestIds)(props, isTextButton(trigger)
|
|
28
|
+
? (0, defaultTestId_1.defaultTestId)(labelOr(trigger, "overlayTrigger"))
|
|
29
|
+
: isIconButton(trigger)
|
|
30
|
+
? trigger.icon
|
|
31
|
+
: trigger.name);
|
|
28
32
|
return ((0, jsx_runtime_1.jsxs)("div", { css: Css_1.Css.relative.dib.$, children: [isTextButton(trigger) ? ((0, jsx_runtime_1.jsx)(Button_1.Button, { variant: variant ? variant : "secondary", ...trigger, menuTriggerProps: menuTriggerProps, buttonRef: buttonRef, endAdornment: !hideEndAdornment ? (0, jsx_runtime_1.jsx)(Icon_1.Icon, { icon: state.isOpen ? "chevronUp" : "chevronDown" }) : null, disabled: disabled, tooltip: tooltip, onClick: utils_1.noop, forceFocusStyles: showActiveBorder && state.isOpen, ...tid })) : isIconButton(trigger) ? ((0, jsx_runtime_1.jsx)(IconButton_1.IconButton, { ...trigger, menuTriggerProps: menuTriggerProps, buttonRef: buttonRef, ...tid, disabled: disabled, tooltip: tooltip, onClick: utils_1.noop, forceFocusStyles: showActiveBorder && state.isOpen })) : ((0, jsx_runtime_1.jsx)(AvatarButton_1.AvatarButton, { ...trigger, menuTriggerProps: menuTriggerProps, buttonRef: buttonRef, ...tid, disabled: disabled, tooltip: tooltip, onClick: utils_1.noop, forceFocusStyles: showActiveBorder && state.isOpen })), state.isOpen && ((0, jsx_runtime_1.jsx)(internal_1.Popover, { triggerRef: buttonRef, popoverRef: popoverRef, positionProps: positionProps, onClose: () => state.close(), isOpen: state.isOpen, children: children }))] }));
|
|
29
33
|
}
|
|
30
34
|
exports.OverlayTrigger = OverlayTrigger;
|
|
@@ -36,3 +40,7 @@ function isIconButton(trigger) {
|
|
|
36
40
|
return trigger && typeof trigger === "object" && "icon" in trigger;
|
|
37
41
|
}
|
|
38
42
|
exports.isIconButton = isIconButton;
|
|
43
|
+
function labelOr(trigger, fallback) {
|
|
44
|
+
return typeof trigger.label === "string" ? trigger.label : fallback;
|
|
45
|
+
}
|
|
46
|
+
exports.labelOr = labelOr;
|
|
@@ -92,36 +92,42 @@ function TextFieldBase(props) {
|
|
|
92
92
|
}, onFocus);
|
|
93
93
|
const showFocus = (isFocused && !inputProps.readOnly) || forceFocus;
|
|
94
94
|
const showHover = (isHovered && !inputProps.disabled && !inputProps.readOnly && !isFocused) || forceHover;
|
|
95
|
-
return ((0, jsx_runtime_1.jsxs)("div", { css: fieldStyles.container, ...groupProps, ...focusWithinProps, children: [label && labelStyle !== "inline" && ((0, jsx_runtime_1.jsx)(Label_1.Label, { labelProps: labelProps, hidden: labelStyle === "hidden" || compound, label: label, suffix: labelSuffix, contrast: contrast, ...tid.label })), (0, components_1.maybeTooltip)({
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
...(inputProps.disabled ? fieldStyles.disabled : {}),
|
|
108
|
-
...(showFocus ? fieldStyles.focus : {}),
|
|
109
|
-
...(showHover ? fieldStyles.hover : {}),
|
|
110
|
-
// Only show error styles if the field is not disabled, following the pattern that the error message is also hidden
|
|
111
|
-
...(errorMsg && !inputProps.disabled ? fieldStyles.error : {}),
|
|
112
|
-
...Css_1.Css.if(multiline).aifs.px0.mhPx(textAreaMinHeight).$,
|
|
113
|
-
}, ...hoverProps, ref: inputWrapRef, children: [!multiline && labelStyle === "inline" && label && ((0, jsx_runtime_1.jsx)(Label_1.InlineLabel, { labelProps: labelProps, label: label, ...tid.label })), !multiline && startAdornment && (0, jsx_runtime_1.jsx)("span", { css: Css_1.Css.df.aic.fs0.br4.pr1.$, children: startAdornment }), (0, jsx_runtime_1.jsx)(ElementType, { ...(0, react_aria_1.mergeProps)(inputProps, { onBlur, onFocus: onFocusChained, onChange: onDomChange }, { "aria-invalid": Boolean(errorMsg), ...(labelStyle === "hidden" ? { "aria-label": label } : {}) }), ...(errorMsg ? { "aria-errormessage": errorMessageId } : {}), ref: fieldRef, rows: multiline ? 1 : undefined, css: {
|
|
114
|
-
...fieldStyles.input,
|
|
95
|
+
return ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsxs)("div", { css: fieldStyles.container, ...groupProps, ...focusWithinProps, children: [label && labelStyle !== "inline" && ((0, jsx_runtime_1.jsx)(Label_1.Label, { labelProps: labelProps, hidden: labelStyle === "hidden" || compound, label: label, suffix: labelSuffix, contrast: contrast, ...tid.label })), (0, components_1.maybeTooltip)({
|
|
96
|
+
title: tooltip,
|
|
97
|
+
placement: "top",
|
|
98
|
+
children: inputProps.readOnly ? ((0, jsx_runtime_1.jsxs)("div", { css: {
|
|
99
|
+
// Use input wrapper to get common styles, but then we need to override some
|
|
100
|
+
...fieldStyles.inputWrapperReadOnly,
|
|
101
|
+
...(multiline ? Css_1.Css.fdc.aifs.gap2.$ : Css_1.Css.truncate.$),
|
|
102
|
+
...xss,
|
|
103
|
+
}, "data-readonly": "true", ...tid, children: [!multiline && labelStyle === "inline" && label && ((0, jsx_runtime_1.jsx)(Label_1.InlineLabel, { labelProps: labelProps, label: label, ...tid.label })), multiline
|
|
104
|
+
? (_g = inputProps.value) === null || _g === void 0 ? void 0 : _g.split("\n\n").map((p, i) => ((0, jsx_runtime_1.jsx)("p", { css: Css_1.Css.my1.$, children: p.split("\n").map((sentence, j) => ((0, jsx_runtime_1.jsxs)("span", { children: [sentence, (0, jsx_runtime_1.jsx)("br", {})] }, j))) }, i)))
|
|
105
|
+
: inputProps.value] })) : ((0, jsx_runtime_1.jsxs)("div", { css: {
|
|
106
|
+
...fieldStyles.inputWrapper,
|
|
115
107
|
...(inputProps.disabled ? fieldStyles.disabled : {}),
|
|
108
|
+
...(showFocus ? fieldStyles.focus : {}),
|
|
116
109
|
...(showHover ? fieldStyles.hover : {}),
|
|
117
|
-
|
|
118
|
-
...
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
110
|
+
// Only show error styles if the field is not disabled, following the pattern that the error message is also hidden
|
|
111
|
+
...(errorMsg && !inputProps.disabled ? fieldStyles.error : {}),
|
|
112
|
+
...Css_1.Css.if(multiline).aifs.px0.mhPx(textAreaMinHeight).$,
|
|
113
|
+
}, ...hoverProps, ref: inputWrapRef, children: [!multiline && labelStyle === "inline" && label && ((0, jsx_runtime_1.jsx)(Label_1.InlineLabel, { labelProps: labelProps, label: label, ...tid.label })), !multiline && startAdornment && (0, jsx_runtime_1.jsx)("span", { css: Css_1.Css.df.aic.fs0.br4.pr1.$, children: startAdornment }), (0, jsx_runtime_1.jsx)(ElementType, { ...(0, react_aria_1.mergeProps)(inputProps, { onBlur, onFocus: onFocusChained, onChange: onDomChange }, { "aria-invalid": Boolean(errorMsg), ...(labelStyle === "hidden" ? { "aria-label": label } : {}) }), ...(errorMsg ? { "aria-errormessage": errorMessageId } : {}), ref: fieldRef, rows: multiline ? 1 : undefined, css: {
|
|
114
|
+
...fieldStyles.input,
|
|
115
|
+
...(inputProps.disabled ? fieldStyles.disabled : {}),
|
|
116
|
+
...(showHover ? fieldStyles.hover : {}),
|
|
117
|
+
...(multiline ? Css_1.Css.h100.p1.add("resize", "none").$ : Css_1.Css.truncate.$),
|
|
118
|
+
...xss,
|
|
119
|
+
}, ...tid }), isFocused && clearable && onChange && inputProps.value && ((0, jsx_runtime_1.jsx)(components_1.IconButton, { icon: "xCircle", color: Css_1.Palette.Gray700, onClick: () => {
|
|
120
|
+
var _a;
|
|
121
|
+
onChange(undefined);
|
|
122
|
+
// Reset focus to input element
|
|
123
|
+
(_a = fieldRef.current) === null || _a === void 0 ? void 0 : _a.focus();
|
|
124
|
+
} })), errorInTooltip && errorMsg && !hideErrorMessage && ((0, jsx_runtime_1.jsx)("span", { css: Css_1.Css.df.aic.pl1.fs0.$, children: (0, jsx_runtime_1.jsx)(components_1.Icon, { icon: "error", color: Css_1.Palette.Red600, tooltip: errorMsg }) })), !multiline && endAdornment && (0, jsx_runtime_1.jsx)("span", { css: Css_1.Css.df.aic.pl1.fs0.$, children: endAdornment })] })),
|
|
125
|
+
}), labelStyle !== "left" && !compound && !inputProps.disabled && !inputProps.readOnly && ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [errorMsg && !errorInTooltip && ((0, jsx_runtime_1.jsx)(ErrorMessage_1.ErrorMessage, { id: errorMessageId, errorMsg: errorMsg, hidden: hideErrorMessage, ...tid.errorMsg })), helperText && (0, jsx_runtime_1.jsx)(HelperText_1.HelperText, { helperText: helperText, ...tid.helperText })] }))] }), labelStyle === "left" &&
|
|
126
|
+
!compound &&
|
|
127
|
+
!inputProps.disabled &&
|
|
128
|
+
!inputProps.readOnly &&
|
|
129
|
+
((errorMsg && !errorInTooltip) || helperText) && (
|
|
130
|
+
// Reduces the margin between the error/helper text and input field
|
|
131
|
+
(0, jsx_runtime_1.jsxs)("div", { css: Css_1.Css.mtPx(-8).$, children: [errorMsg && !errorInTooltip && ((0, jsx_runtime_1.jsx)(ErrorMessage_1.ErrorMessage, { id: errorMessageId, errorMsg: errorMsg, hidden: hideErrorMessage, ...tid.errorMsg })), helperText && (0, jsx_runtime_1.jsx)(HelperText_1.HelperText, { helperText: helperText, ...tid.helperText })] }))] }));
|
|
126
132
|
}
|
|
127
133
|
exports.TextFieldBase = TextFieldBase;
|
package/dist/inputs/index.d.ts
CHANGED
|
@@ -13,6 +13,6 @@ export * from "./Switch";
|
|
|
13
13
|
export * from "./TextAreaField";
|
|
14
14
|
export * from "./TextField";
|
|
15
15
|
export type { TextFieldApi } from "./TextField";
|
|
16
|
+
export * from "./ToggleButton";
|
|
16
17
|
export * from "./ToggleChipGroup";
|
|
17
18
|
export type { Value } from "./Value";
|
|
18
|
-
export * from "./ToggleButton";
|
package/dist/inputs/index.js
CHANGED
|
@@ -28,5 +28,5 @@ __exportStar(require("./SelectField"), exports);
|
|
|
28
28
|
__exportStar(require("./Switch"), exports);
|
|
29
29
|
__exportStar(require("./TextAreaField"), exports);
|
|
30
30
|
__exportStar(require("./TextField"), exports);
|
|
31
|
-
__exportStar(require("./ToggleChipGroup"), exports);
|
|
32
31
|
__exportStar(require("./ToggleButton"), exports);
|
|
32
|
+
__exportStar(require("./ToggleChipGroup"), exports);
|
|
@@ -7,6 +7,7 @@ interface ListBoxProps<O, V extends Key> {
|
|
|
7
7
|
getOptionLabel: (opt: O) => string;
|
|
8
8
|
getOptionValue: (opt: O) => V;
|
|
9
9
|
contrast?: boolean;
|
|
10
|
+
horizontalLayout?: boolean;
|
|
10
11
|
positionProps: React.HTMLAttributes<Element>;
|
|
11
12
|
loading?: boolean | (() => JSX.Element);
|
|
12
13
|
disabledOptionsWithReasons?: Record<string, string | undefined>;
|
|
@@ -12,7 +12,7 @@ const VirtualizedOptions_1 = require("./VirtualizedOptions");
|
|
|
12
12
|
/** A ListBox is an internal component used by SelectField and MultiSelectField to display the list of options */
|
|
13
13
|
function ListBox(props) {
|
|
14
14
|
var _a;
|
|
15
|
-
const { state, listBoxRef, selectedOptions = [], getOptionLabel, getOptionValue, contrast = false, positionProps, loading, disabledOptionsWithReasons = {}, } = props;
|
|
15
|
+
const { state, listBoxRef, selectedOptions = [], getOptionLabel, getOptionValue, contrast = false, positionProps, horizontalLayout = false, loading, disabledOptionsWithReasons = {}, } = props;
|
|
16
16
|
const { listBoxProps } = (0, react_aria_1.useListBox)({ disallowEmptySelection: true, ...props }, state, listBoxRef);
|
|
17
17
|
const positionMaxHeight = (_a = positionProps.style) === null || _a === void 0 ? void 0 : _a.maxHeight;
|
|
18
18
|
// The popoverMaxHeight will be based on the value defined by the positionProps returned from `useOverlayPosition` (which will always be a defined as a `number` based on React-Aria's `calculatePosition`).
|
|
@@ -53,7 +53,7 @@ function ListBox(props) {
|
|
|
53
53
|
firstRender.current = false;
|
|
54
54
|
}, [state.selectionManager.selectedKeys.size]);
|
|
55
55
|
return ((0, jsx_runtime_1.jsxs)("div", { css: {
|
|
56
|
-
...Css_1.Css.bgWhite.br4.w100.bshBasic.hPx(popoverHeight).df.fdc.if(contrast).bgGray700.$,
|
|
56
|
+
...Css_1.Css.bgWhite.br4.w100.bshBasic.hPx(popoverHeight).df.fdc.if(contrast).bgGray700.if(horizontalLayout).w50.$,
|
|
57
57
|
"&:hover": Css_1.Css.bshHover.$,
|
|
58
58
|
}, ref: listBoxRef, ...listBoxProps, children: [isMultiSelect && state.selectionManager.selectedKeys.size > 0 && ((0, jsx_runtime_1.jsx)("ul", { css: Css_1.Css.listReset.pt2.pl2.pb1.pr1.df.bb.bGray200.add("flexWrap", "wrap").$, ref: selectedList, children: selectedOptions.map((o) => ((0, jsx_runtime_1.jsx)(ListBoxToggleChip_1.ListBoxToggleChip, { state: state, option: o, getOptionValue: getOptionValue, getOptionLabel: getOptionLabel, disabled: state.disabledKeys.has(getOptionValue(o)) }, getOptionValue(o)))) })), (0, jsx_runtime_1.jsx)("ul", { css: Css_1.Css.listReset.fg1.$, children: hasSections ? ([...state.collection].map((section) => ((0, jsx_runtime_1.jsx)(ListBoxSection_1.ListBoxSection, { section: section, state: state, contrast: contrast, onListHeightChange: onListHeightChange, popoverHeight: popoverHeight,
|
|
59
59
|
// Only scroll on focus if using VirtualFocus (used for ComboBoxState (SelectField), but not SelectState (ChipSelectField))
|
|
@@ -247,7 +247,7 @@ function SelectFieldBase(props) {
|
|
|
247
247
|
// Ensures the menu never gets too small.
|
|
248
248
|
minWidth: 200,
|
|
249
249
|
};
|
|
250
|
-
return ((0, jsx_runtime_1.jsxs)("div", { css: Css_1.Css.df.fdc.w100.maxw((0, Css_1.px)(550)).if(otherProps.labelStyle === "left").maxw100.$, ref: comboBoxRef, children: [(0, jsx_runtime_1.jsx)(SelectFieldInput_1.SelectFieldInput, { ...otherProps, buttonProps: buttonProps, buttonRef: triggerRef, inputProps: inputProps, inputRef: inputRef, inputWrapRef: inputWrapRef, state: state, labelProps: labelProps, selectedOptions: fieldState.selectedOptions, getOptionValue: getOptionValue, getOptionLabel: getOptionLabel, contrast: contrast, nothingSelectedText: nothingSelectedText, borderless: borderless, tooltip: (0, components_1.resolveTooltip)(disabled, undefined, readOnly), resetField: resetField }), state.isOpen && ((0, jsx_runtime_1.jsx)(internal_1.Popover, { triggerRef: triggerRef, popoverRef: popoverRef, positionProps: positionProps, onClose: () => state.close(), isOpen: state.isOpen, minWidth: 200, children: (0, jsx_runtime_1.jsx)(ListBox_1.ListBox, { ...listBoxProps, positionProps: positionProps, state: state, listBoxRef: listBoxRef, selectedOptions: fieldState.selectedOptions, getOptionLabel: getOptionLabel, getOptionValue: (o) => (0, Value_1.valueToKey)(getOptionValue(o)), contrast: contrast, loading: fieldState.optionsLoading, disabledOptionsWithReasons: disabledOptionsWithReasons }) }))] }));
|
|
250
|
+
return ((0, jsx_runtime_1.jsxs)("div", { css: Css_1.Css.df.fdc.w100.maxw((0, Css_1.px)(550)).if(otherProps.labelStyle === "left").maxw100.$, ref: comboBoxRef, children: [(0, jsx_runtime_1.jsx)(SelectFieldInput_1.SelectFieldInput, { ...otherProps, buttonProps: buttonProps, buttonRef: triggerRef, inputProps: inputProps, inputRef: inputRef, inputWrapRef: inputWrapRef, state: state, labelProps: labelProps, selectedOptions: fieldState.selectedOptions, getOptionValue: getOptionValue, getOptionLabel: getOptionLabel, contrast: contrast, nothingSelectedText: nothingSelectedText, borderless: borderless, tooltip: (0, components_1.resolveTooltip)(disabled, undefined, readOnly), resetField: resetField }), state.isOpen && ((0, jsx_runtime_1.jsx)(internal_1.Popover, { triggerRef: triggerRef, popoverRef: popoverRef, positionProps: positionProps, onClose: () => state.close(), isOpen: state.isOpen, minWidth: 200, children: (0, jsx_runtime_1.jsx)(ListBox_1.ListBox, { ...listBoxProps, positionProps: positionProps, state: state, listBoxRef: listBoxRef, selectedOptions: fieldState.selectedOptions, getOptionLabel: getOptionLabel, getOptionValue: (o) => (0, Value_1.valueToKey)(getOptionValue(o)), contrast: contrast, horizontalLayout: otherProps.labelStyle === "left", loading: fieldState.optionsLoading, disabledOptionsWithReasons: disabledOptionsWithReasons }) }))] }));
|
|
251
251
|
}
|
|
252
252
|
exports.SelectFieldBase = SelectFieldBase;
|
|
253
253
|
function getInputValue(selectedOptions, getOptionLabel, multiselect, nothingSelectedText) {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@homebound/beam",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.231.0",
|
|
4
4
|
"author": "Homebound",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -115,8 +115,8 @@
|
|
|
115
115
|
"jest-watch-typeahead": "^0.6.5",
|
|
116
116
|
"mobx": "^6.3.2",
|
|
117
117
|
"mobx-react": "^7.2.0",
|
|
118
|
-
"prettier": "^2.
|
|
119
|
-
"prettier-plugin-organize-imports": "^
|
|
118
|
+
"prettier": "^2.8.1",
|
|
119
|
+
"prettier-plugin-organize-imports": "^3.2.1",
|
|
120
120
|
"react": "^16.14.0",
|
|
121
121
|
"react-beautiful-dnd": "^13.1.0",
|
|
122
122
|
"react-dom": "^16.14.0",
|