@homebound/beam 2.235.5 → 2.237.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.
@@ -17,9 +17,11 @@ function ButtonDatePicker(props) {
17
17
  const { menuTriggerProps, menuProps } = (0, react_aria_1.useMenuTrigger)({ isDisabled: !!disabled }, state, buttonRef);
18
18
  const tid = (0, utils_1.useTestIds)(props, (0, OverlayTrigger_1.isTextButton)(trigger)
19
19
  ? (0, defaultTestId_1.defaultTestId)((0, OverlayTrigger_1.labelOr)(trigger, "buttonDatePicker"))
20
- : (0, OverlayTrigger_1.isIconButton)(trigger)
21
- ? trigger.icon
22
- : trigger.name);
20
+ : (0, OverlayTrigger_1.isNavLinkButton)(trigger)
21
+ ? (0, defaultTestId_1.defaultTestId)(trigger.navLabel)
22
+ : (0, OverlayTrigger_1.isIconButton)(trigger)
23
+ ? trigger.icon
24
+ : trigger.name);
23
25
  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) => {
24
26
  onSelect(d);
25
27
  state.close();
@@ -6,6 +6,7 @@ interface ButtonMenuProps extends Pick<OverlayTriggerProps, "trigger" | "placeme
6
6
  persistentItems?: MenuItem[];
7
7
  searchable?: boolean;
8
8
  defaultOpen?: boolean;
9
+ contrast?: boolean;
9
10
  }
10
11
  export declare function ButtonMenu(props: ButtonMenuProps): import("@emotion/react/jsx-runtime").JSX.Element;
11
12
  type MenuItemBase = {
@@ -8,12 +8,19 @@ const react_stately_1 = require("react-stately");
8
8
  const Menu_1 = require("./internal/Menu");
9
9
  const OverlayTrigger_1 = require("./internal/OverlayTrigger");
10
10
  const utils_1 = require("../utils");
11
+ const defaultTestId_1 = require("../utils/defaultTestId");
11
12
  function ButtonMenu(props) {
12
- const { defaultOpen, disabled, items, persistentItems, trigger, searchable } = props;
13
+ const { defaultOpen, disabled, items, persistentItems, trigger, searchable, contrast = false } = props;
13
14
  const state = (0, react_stately_1.useMenuTriggerState)({ isOpen: defaultOpen });
14
15
  const buttonRef = (0, react_1.useRef)(null);
15
16
  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) ? (0, OverlayTrigger_1.labelOr)(trigger, "buttonMenu") : (0, OverlayTrigger_1.isIconButton)(trigger) ? trigger.icon : trigger.name);
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 }) }));
17
+ const tid = (0, utils_1.useTestIds)(props, (0, OverlayTrigger_1.isTextButton)(trigger)
18
+ ? (0, OverlayTrigger_1.labelOr)(trigger, "buttonMenu")
19
+ : (0, OverlayTrigger_1.isNavLinkButton)(trigger)
20
+ ? (0, defaultTestId_1.defaultTestId)(trigger.navLabel)
21
+ : (0, OverlayTrigger_1.isIconButton)(trigger)
22
+ ? trigger.icon
23
+ : trigger.name);
24
+ return ((0, jsx_runtime_1.jsx)(OverlayTrigger_1.OverlayTrigger, { ...props, menuTriggerProps: menuTriggerProps, state: state, buttonRef: buttonRef, ...tid, contrast: contrast, children: (0, jsx_runtime_1.jsx)(Menu_1.Menu, { ariaMenuProps: menuProps, onClose: () => state.close(), items: items, persistentItems: persistentItems, searchable: searchable, contrast: contrast, ...tid }) }));
18
25
  }
19
26
  exports.ButtonMenu = ButtonMenu;
@@ -7,13 +7,20 @@ const react_aria_1 = require("react-aria");
7
7
  const react_stately_1 = require("react-stately");
8
8
  const OverlayTrigger_1 = require("./internal/OverlayTrigger");
9
9
  const utils_1 = require("../utils");
10
+ const defaultTestId_1 = require("../utils/defaultTestId");
10
11
  const ContextualModal_1 = require("./internal/ContextualModal");
11
12
  function ButtonModal(props) {
12
13
  const { storybookDefaultOpen, trigger, disabled, content, title } = props;
13
14
  const state = (0, react_stately_1.useMenuTriggerState)({ isOpen: storybookDefaultOpen });
14
15
  const buttonRef = (0, react_1.useRef)(null);
15
16
  const { menuTriggerProps } = (0, react_aria_1.useMenuTrigger)({ isDisabled: !!disabled }, state, buttonRef);
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
+ const tid = (0, utils_1.useTestIds)(props, (0, OverlayTrigger_1.isTextButton)(trigger)
18
+ ? (0, OverlayTrigger_1.labelOr)(trigger, "buttonModal")
19
+ : (0, OverlayTrigger_1.isNavLinkButton)(trigger)
20
+ ? (0, defaultTestId_1.defaultTestId)(trigger.navLabel)
21
+ : (0, OverlayTrigger_1.isIconButton)(trigger)
22
+ ? trigger.icon
23
+ : trigger.name);
17
24
  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
25
  }
19
26
  exports.ButtonModal = ButtonModal;
@@ -1,3 +1,5 @@
1
+ import { AriaButtonProps } from "@react-types/button";
2
+ import { RefObject } from "react";
1
3
  import type { IconKey } from "./";
2
4
  import { Properties } from "../Css";
3
5
  import { BeamFocusableProps } from "../interfaces";
@@ -5,15 +7,19 @@ export interface NavLinkProps extends BeamFocusableProps {
5
7
  /** active indicates the user is on the current page */
6
8
  active?: boolean;
7
9
  disabled?: boolean;
8
- href: string;
10
+ /** if `href` isn't provided, it is treated as a <button> */
11
+ href?: string;
9
12
  label: string;
10
13
  icon?: IconKey;
11
14
  variant: NavLinkVariant;
12
15
  openInNew?: boolean;
13
16
  contrast?: boolean;
17
+ /** HTML attributes to apply to the button element when it is being used to trigger a menu. */
18
+ menuTriggerProps?: AriaButtonProps;
19
+ buttonRef?: RefObject<HTMLElement>;
14
20
  }
15
21
  type NavLinkVariant = "side" | "global";
16
- export declare function NavLink(props: NavLinkProps): import("@emotion/react/jsx-runtime").JSX.Element;
22
+ export declare function NavLink(props: NavLinkProps): JSX.Element;
17
23
  export declare function getNavLinkStyles(variant: NavLinkVariant, contrast: boolean): {
18
24
  baseStyles: Properties;
19
25
  hoverStyles: Properties;
@@ -4,30 +4,25 @@ exports.getNavLinkStyles = exports.NavLink = 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");
7
- const react_router_dom_1 = require("react-router-dom");
8
7
  const components_1 = require("./");
9
8
  const Css_1 = require("../Css");
10
- const utils_1 = require("../utils");
9
+ const useGetRef_1 = require("../hooks/useGetRef");
10
+ const getInteractiveElement_1 = require("../utils/getInteractiveElement");
11
11
  const Icon_1 = require("./Icon");
12
12
  function NavLink(props) {
13
- const { disabled: isDisabled, label, openInNew, contrast = false, ...otherProps } = props;
14
- const ariaProps = { children: label, isDisabled, ...otherProps };
13
+ const { disabled: isDisabled, label, openInNew, contrast = false, menuTriggerProps, buttonRef, ...otherProps } = props;
14
+ const ariaProps = { children: label, isDisabled, ...menuTriggerProps, ...otherProps };
15
15
  const { href, active = false, icon = false, variant } = ariaProps;
16
- const ref = (0, react_1.useRef)();
17
- const { buttonProps, isPressed } = (0, react_aria_1.useButton)({ ...ariaProps, elementType: "a" }, ref);
18
- // remove `type=button` from being passed into the component, as it causes style issues in Safari.
19
- const { type, ...otherButtonProps } = buttonProps;
16
+ const ref = (0, useGetRef_1.useGetRef)(buttonRef);
17
+ const { buttonProps, isPressed } = (0, react_aria_1.useButton)({ ...ariaProps, elementType: href ? "a" : "button" }, ref);
20
18
  const { hoverProps, isHovered } = (0, react_aria_1.useHover)({ isDisabled });
21
19
  const { isFocusVisible, focusProps } = (0, react_aria_1.useFocusRing)(ariaProps);
22
20
  const { baseStyles, activeStyles, focusRingStyles, hoverStyles, disabledStyles, pressedStyles } = (0, react_1.useMemo)(() => getNavLinkStyles(variant, contrast), [variant, contrast]);
23
- const external = (0, utils_1.isAbsoluteUrl)(href) || openInNew;
24
21
  const linkAttributes = {
25
22
  className: components_1.navLink,
26
23
  ref: ref,
27
- rel: external ? "noopener noreferrer" : undefined,
28
24
  /** does not focus if disabled */
29
25
  tabIndex: isDisabled ? -1 : 0,
30
- target: external ? "_blank" : undefined,
31
26
  /** aria-current represents the current page within a set of pages */
32
27
  "aria-current": active ? "page" : undefined,
33
28
  css: {
@@ -40,7 +35,7 @@ function NavLink(props) {
40
35
  },
41
36
  };
42
37
  const linkContent = ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [label, icon && ((0, jsx_runtime_1.jsx)("span", { css: Css_1.Css.ml1.$, children: (0, jsx_runtime_1.jsx)(Icon_1.Icon, { icon: icon }) }))] }));
43
- return external ? ((0, jsx_runtime_1.jsx)("a", { href: href, ...(0, react_aria_1.mergeProps)(otherButtonProps, focusProps, hoverProps), ...linkAttributes, children: linkContent })) : ((0, jsx_runtime_1.jsx)(react_router_dom_1.Link, { to: href, ...(0, react_aria_1.mergeProps)(otherButtonProps, focusProps, hoverProps), ...linkAttributes, children: linkContent }));
38
+ return (0, getInteractiveElement_1.getButtonOrLink)(linkContent, href, { ...(0, react_aria_1.mergeProps)(buttonProps, focusProps, hoverProps), ...linkAttributes });
44
39
  }
45
40
  exports.NavLink = NavLink;
46
41
  function getNavLinkStyles(variant, contrast) {
@@ -11,12 +11,19 @@ const Css_1 = require("../../../Css");
11
11
  const hooks_1 = require("../../../hooks");
12
12
  const inputs_1 = require("../../../inputs");
13
13
  const utils_1 = require("../../../utils");
14
+ const defaultTestId_1 = require("../../../utils/defaultTestId");
14
15
  function EditColumnsButton(props) {
15
16
  const { defaultOpen, disabled, columns, trigger, title, api } = props;
16
17
  const state = (0, react_stately_1.useMenuTriggerState)({ isOpen: defaultOpen });
17
18
  const buttonRef = (0, react_1.useRef)(null);
18
19
  const { menuTriggerProps } = (0, react_aria_1.useMenuTrigger)({ isDisabled: !!disabled }, state, buttonRef);
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
+ const tid = (0, utils_1.useTestIds)(props, (0, OverlayTrigger_1.isTextButton)(trigger)
21
+ ? (0, OverlayTrigger_1.labelOr)(trigger, "editColumnsButton")
22
+ : (0, OverlayTrigger_1.isNavLinkButton)(trigger)
23
+ ? (0, defaultTestId_1.defaultTestId)(trigger.navLabel)
24
+ : (0, OverlayTrigger_1.isIconButton)(trigger)
25
+ ? trigger.icon
26
+ : trigger.name);
20
27
  const { options } = (0, react_1.useMemo)(() => {
21
28
  return columns.reduce((acc, column) => {
22
29
  // Only include options that can be hidden and have the `name` property defined.
@@ -6,6 +6,7 @@ interface MenuProps<T> {
6
6
  items: MenuItem[];
7
7
  searchable?: boolean;
8
8
  persistentItems?: MenuItem[];
9
+ contrast: boolean;
9
10
  }
10
11
  export declare function Menu<T>(props: PropsWithChildren<MenuProps<T>>): import("@emotion/react/jsx-runtime").JSX.Element;
11
12
  export {};
@@ -11,7 +11,7 @@ const Css_1 = require("../../Css");
11
11
  const MenuSearchField_1 = require("../../inputs/internal/MenuSearchField");
12
12
  const utils_1 = require("../../utils");
13
13
  function Menu(props) {
14
- const { ariaMenuProps, items, persistentItems, onClose, searchable } = props;
14
+ const { ariaMenuProps, items, persistentItems, onClose, searchable, contrast } = props;
15
15
  // Build out the Menu's Tree data to include the Persistent Action, if any. This is a collection of Nodes that is used
16
16
  // by React-Aria to keep track of item states such as focus, and provide hooks for calling those actions.
17
17
  const tree = (0, react_stately_1.useTreeData)({
@@ -60,8 +60,8 @@ function Menu(props) {
60
60
  return ((0, jsx_runtime_1.jsx)(react_aria_1.FocusScope, { children: (0, jsx_runtime_1.jsxs)("div", {
61
61
  // Using `max-height: inherit` allows us to take advantage of the height set on the overlay container, which updates based on the available space for the overlay within the viewport
62
62
  css: {
63
- ...Css_1.Css.df.fdc.myPx(4).bgWhite.outline0.br4.bshBasic.maxh("inherit").overflowAuto.$,
63
+ ...Css_1.Css.df.fdc.myPx(4).bgWhite.outline0.br4.bshBasic.maxh("inherit").overflowAuto.if(contrast).bgGray900.$,
64
64
  "&:hover": Css_1.Css.bshHover.$,
65
- }, children: [searchable && ((0, jsx_runtime_1.jsx)(MenuSearchField_1.MenuSearchField, { label: "", value: search, placeholder: "Search...", labelStyle: "inline", onChange: setSearch, ...tid })), (0, jsx_runtime_1.jsx)("ul", { css: Css_1.Css.listReset.$, ...menuProps, ref: menuRef, ...tid.menu, children: [...state.collection].map((item) => ((0, jsx_runtime_1.jsx)(MenuSection_1.MenuSectionImpl, { section: item, state: state, onClose: onClose, ...tid }, item.key))) })] }) }));
65
+ }, children: [searchable && ((0, jsx_runtime_1.jsx)(MenuSearchField_1.MenuSearchField, { label: "", value: search, placeholder: "Search...", labelStyle: "inline", onChange: setSearch, ...tid })), (0, jsx_runtime_1.jsx)("ul", { css: Css_1.Css.listReset.$, ...menuProps, ref: menuRef, ...tid.menu, children: [...state.collection].map((item) => ((0, jsx_runtime_1.jsx)(MenuSection_1.MenuSectionImpl, { section: item, state: state, onClose: onClose, contrast: contrast, ...tid }, item.key))) })] }) }));
66
66
  }
67
67
  exports.Menu = Menu;
@@ -5,6 +5,7 @@ interface MenuItemProps {
5
5
  item: Node<MenuItem>;
6
6
  state: TreeState<MenuItem>;
7
7
  onClose: VoidFunction;
8
+ contrast: boolean;
8
9
  }
9
10
  export declare function MenuItemImpl(props: MenuItemProps): import("@emotion/react/jsx-runtime").JSX.Element;
10
11
  export {};
@@ -13,7 +13,7 @@ const Css_1 = require("../../Css");
13
13
  const utils_1 = require("../../utils");
14
14
  const defaultTestId_1 = require("../../utils/defaultTestId");
15
15
  function MenuItemImpl(props) {
16
- const { item, state, onClose } = props;
16
+ const { item, state, onClose, contrast } = props;
17
17
  const menuItem = item.value;
18
18
  const { disabled, onClick, label, destructive } = menuItem;
19
19
  const isDisabled = Boolean(disabled);
@@ -48,7 +48,7 @@ function MenuItemImpl(props) {
48
48
  }, state, ref);
49
49
  return ((0, jsx_runtime_1.jsx)("li", { ...menuItemProps, ...hoverProps, ref: ref, css: {
50
50
  ...Css_1.Css.df.aic.py1.px2.cursorPointer.outline0.mh("42px").$,
51
- ...(!isDisabled && isHovered ? Css_1.Css.bgGray100.$ : {}),
51
+ ...(!isDisabled && isHovered ? (contrast ? Css_1.Css.bgGray800.$ : Css_1.Css.bgGray100.$) : {}),
52
52
  ...(isFocused ? Css_1.Css.add("boxShadow", `inset 0 0 0 1px ${Css_1.Palette.LightBlue700}`).$ : {}),
53
53
  ...(isDisabled ? Css_1.Css.gray500.cursorNotAllowed.$ : {}),
54
54
  ...(destructive ? Css_1.Css.red600.$ : {}),
@@ -5,6 +5,7 @@ interface MenuSectionProps {
5
5
  section: Node<MenuItem>;
6
6
  state: TreeState<MenuItem>;
7
7
  onClose: VoidFunction;
8
+ contrast: boolean;
8
9
  }
9
10
  export declare function MenuSectionImpl(props: MenuSectionProps): import("@emotion/react/jsx-runtime").JSX.Element;
10
11
  export {};
@@ -7,11 +7,11 @@ const internal_1 = require("./");
7
7
  const Css_1 = require("../../Css");
8
8
  const utils_1 = require("../../utils");
9
9
  function MenuSectionImpl(props) {
10
- const { section, state, onClose } = props;
10
+ const { section, state, onClose, contrast } = props;
11
11
  const { itemProps, groupProps } = (0, react_aria_1.useMenuSection)(props.section);
12
12
  const { separatorProps } = (0, react_aria_1.useSeparator)({ elementType: "li" });
13
13
  const isPersistentSection = section.key !== state.collection.getFirstKey();
14
14
  const tid = (0, utils_1.useTestIds)(props);
15
- return ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [isPersistentSection && (0, jsx_runtime_1.jsx)("li", { ...separatorProps, css: Css_1.Css.bt.bGray200.$ }), (0, jsx_runtime_1.jsx)("li", { ...itemProps, css: Css_1.Css.if(!isPersistentSection).overflowAuto.$, children: (0, jsx_runtime_1.jsx)("ul", { css: Css_1.Css.listReset.$, ...groupProps, ...tid[isPersistentSection ? "persistentItems" : "menuItems"], children: [...section.childNodes].map((item) => ((0, jsx_runtime_1.jsx)(internal_1.MenuItemImpl, { item: item, state: state, onClose: onClose, ...tid }, item.key))) }) })] }));
15
+ return ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [isPersistentSection && (0, jsx_runtime_1.jsx)("li", { ...separatorProps, css: Css_1.Css.bt.bGray200.$ }), (0, jsx_runtime_1.jsx)("li", { ...itemProps, css: Css_1.Css.if(!isPersistentSection).overflowAuto.if(contrast).white.$, children: (0, jsx_runtime_1.jsx)("ul", { css: Css_1.Css.listReset.$, ...groupProps, ...tid[isPersistentSection ? "persistentItems" : "menuItems"], children: [...section.childNodes].map((item) => ((0, jsx_runtime_1.jsx)(internal_1.MenuItemImpl, { item: item, state: state, onClose: onClose, contrast: contrast, ...tid }, item.key))) }) })] }));
16
16
  }
17
17
  exports.MenuSectionImpl = MenuSectionImpl;
@@ -4,14 +4,18 @@ import { MenuTriggerState } from "react-stately";
4
4
  import { AvatarButtonProps } from "../AvatarButton";
5
5
  import { ButtonProps, ButtonVariant } from "../Button";
6
6
  import { IconButtonProps } from "../IconButton";
7
+ import { NavLinkProps } from "../NavLink";
7
8
  interface TextButtonTriggerProps extends Pick<ButtonProps, "label" | "variant" | "size" | "icon"> {
8
9
  }
9
10
  interface IconButtonTriggerProps extends Pick<IconButtonProps, "icon" | "color" | "compact" | "contrast"> {
10
11
  }
11
12
  interface AvatarButtonTriggerProps extends Pick<AvatarButtonProps, "src" | "name" | "size"> {
12
13
  }
14
+ interface NavLinkButtonTriggerProps extends Pick<NavLinkProps, "active" | "variant" | "icon"> {
15
+ navLabel: string;
16
+ }
13
17
  export interface OverlayTriggerProps {
14
- trigger: TextButtonTriggerProps | IconButtonTriggerProps | AvatarButtonTriggerProps;
18
+ trigger: TextButtonTriggerProps | IconButtonTriggerProps | AvatarButtonTriggerProps | NavLinkButtonTriggerProps;
15
19
  /** Defaults to "left" */
16
20
  placement?: "left" | "right";
17
21
  /** Whether the Button is disabled. If a ReactNode, it's treated as a "disabled reason" that's shown in a tooltip. */
@@ -30,10 +34,12 @@ export interface OverlayTriggerProps {
30
34
  variant?: ButtonVariant;
31
35
  hideEndAdornment?: boolean;
32
36
  showActiveBorder?: boolean;
37
+ contrast?: boolean;
33
38
  }
34
39
  export declare function OverlayTrigger(props: OverlayTriggerProps): import("@emotion/react/jsx-runtime").JSX.Element;
35
- export declare function isTextButton(trigger: TextButtonTriggerProps | IconButtonTriggerProps | AvatarButtonTriggerProps): trigger is TextButtonTriggerProps;
36
- export declare function isIconButton(trigger: TextButtonTriggerProps | IconButtonTriggerProps | AvatarButtonTriggerProps): trigger is IconButtonTriggerProps;
40
+ export declare function isTextButton(trigger: TextButtonTriggerProps | IconButtonTriggerProps | AvatarButtonTriggerProps | NavLinkButtonTriggerProps): trigger is TextButtonTriggerProps;
41
+ export declare function isIconButton(trigger: TextButtonTriggerProps | IconButtonTriggerProps | AvatarButtonTriggerProps | NavLinkButtonTriggerProps): trigger is IconButtonTriggerProps;
42
+ export declare function isNavLinkButton(trigger: TextButtonTriggerProps | IconButtonTriggerProps | AvatarButtonTriggerProps | NavLinkButtonTriggerProps): trigger is NavLinkButtonTriggerProps;
37
43
  export declare function labelOr(trigger: {
38
44
  label: unknown;
39
45
  }, fallback: string): string;
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.labelOr = exports.isIconButton = exports.isTextButton = exports.OverlayTrigger = void 0;
3
+ exports.labelOr = exports.isNavLinkButton = 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");
@@ -9,11 +9,12 @@ const Button_1 = require("../Button");
9
9
  const Icon_1 = require("../Icon");
10
10
  const IconButton_1 = require("../IconButton");
11
11
  const internal_1 = require("./");
12
+ const NavLink_1 = require("../NavLink");
12
13
  const Css_1 = require("../../Css");
13
14
  const utils_1 = require("../../utils");
14
15
  const defaultTestId_1 = require("../../utils/defaultTestId");
15
16
  function OverlayTrigger(props) {
16
- const { trigger, buttonRef, menuTriggerProps, placement, state, disabled, tooltip, children, variant, hideEndAdornment, showActiveBorder = false, } = props;
17
+ const { trigger, buttonRef, menuTriggerProps, placement, state, disabled, tooltip, children, variant, hideEndAdornment, showActiveBorder = false, contrast = false, } = props;
17
18
  const popoverRef = (0, react_1.useRef)(null);
18
19
  const { overlayProps: positionProps } = (0, react_aria_1.useOverlayPosition)({
19
20
  targetRef: buttonRef,
@@ -26,10 +27,12 @@ function OverlayTrigger(props) {
26
27
  });
27
28
  const tid = (0, utils_1.useTestIds)(props, isTextButton(trigger)
28
29
  ? (0, defaultTestId_1.defaultTestId)(labelOr(trigger, "overlayTrigger"))
29
- : isIconButton(trigger)
30
- ? trigger.icon
31
- : trigger.name);
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 }))] }));
30
+ : isNavLinkButton(trigger)
31
+ ? (0, defaultTestId_1.defaultTestId)(trigger.navLabel)
32
+ : isIconButton(trigger)
33
+ ? trigger.icon
34
+ : trigger.name);
35
+ 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", contrast: contrast, ...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 })) : isNavLinkButton(trigger) ? ((0, jsx_runtime_1.jsx)(NavLink_1.NavLink, { ...trigger, label: trigger.navLabel, disabled: !!disabled, contrast: contrast, menuTriggerProps: menuTriggerProps, buttonRef: buttonRef, ...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 }))] }));
33
36
  }
34
37
  exports.OverlayTrigger = OverlayTrigger;
35
38
  function isTextButton(trigger) {
@@ -40,6 +43,10 @@ function isIconButton(trigger) {
40
43
  return trigger && typeof trigger === "object" && "icon" in trigger;
41
44
  }
42
45
  exports.isIconButton = isIconButton;
46
+ function isNavLinkButton(trigger) {
47
+ return trigger && typeof trigger === "object" && "navLabel" in trigger;
48
+ }
49
+ exports.isNavLinkButton = isNavLinkButton;
43
50
  function labelOr(trigger, fallback) {
44
51
  return typeof trigger.label === "string" ? trigger.label : fallback;
45
52
  }
@@ -13,6 +13,7 @@ export interface FormLinesProps {
13
13
  /** Let the user interleave group-less lines and grouped lines. */
14
14
  children: ReactNode;
15
15
  labelSuffix?: LabelSuffixStyle;
16
+ labelStyle?: "inline" | "hidden" | "above" | "left";
16
17
  width?: FormWidth;
17
18
  compact?: boolean;
18
19
  }
@@ -12,11 +12,12 @@ const Css_1 = require("../Css");
12
12
  * (see the `FieldGroup` component), where they will be laid out side-by-side.
13
13
  */
14
14
  function FormLines(props) {
15
- const { children, width = "full", labelSuffix, compact } = props;
15
+ const { children, width = "full", labelSuffix, labelStyle, compact } = props;
16
16
  let firstFormHeading = true;
17
17
  // Only overwrite `fieldProps` if new values are explicitly set. Ensures we only set to `undefined` if explicitly set.
18
18
  const newFieldProps = {
19
19
  ...("labelSuffix" in props ? { labelSuffix } : {}),
20
+ ...("labelStyle" in props ? { labelStyle } : {}),
20
21
  ...("compact" in props ? { compact } : {}),
21
22
  };
22
23
  return ((0, jsx_runtime_1.jsx)(PresentationContext_1.PresentationProvider, { fieldProps: newFieldProps, children: (0, jsx_runtime_1.jsx)("div", { css: {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@homebound/beam",
3
- "version": "2.235.5",
3
+ "version": "2.237.0",
4
4
  "author": "Homebound",
5
5
  "license": "MIT",
6
6
  "main": "dist/index.js",