@homebound/beam 2.259.0 → 2.261.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/{Avatar.js → Avatar/Avatar.js} +9 -8
- package/dist/components/{AvatarButton.d.ts → Avatar/AvatarButton.d.ts} +1 -1
- package/dist/components/{AvatarButton.js → Avatar/AvatarButton.js} +9 -9
- package/dist/components/Avatar/AvatarGroup.d.ts +9 -0
- package/dist/components/Avatar/AvatarGroup.js +31 -0
- package/dist/components/Avatar/index.d.ts +3 -0
- package/dist/components/Avatar/index.js +19 -0
- package/dist/components/Layout/RightPaneLayout/RightPaneLayout.d.ts +2 -1
- package/dist/components/Layout/RightPaneLayout/RightPaneLayout.js +17 -8
- package/dist/components/index.d.ts +0 -1
- package/dist/components/index.js +0 -1
- package/dist/components/internal/OverlayTrigger.d.ts +1 -1
- package/dist/components/internal/OverlayTrigger.js +1 -1
- package/package.json +1 -1
- /package/dist/components/{Avatar.d.ts → Avatar/Avatar.d.ts} +0 -0
|
@@ -3,9 +3,10 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.Avatar = void 0;
|
|
4
4
|
const jsx_runtime_1 = require("@emotion/react/jsx-runtime");
|
|
5
5
|
const react_1 = require("react");
|
|
6
|
-
const Icon_1 = require("
|
|
7
|
-
const
|
|
8
|
-
const
|
|
6
|
+
const Icon_1 = require("../Icon");
|
|
7
|
+
const Tooltip_1 = require("../Tooltip");
|
|
8
|
+
const Css_1 = require("../../Css");
|
|
9
|
+
const utils_1 = require("../../utils");
|
|
9
10
|
function Avatar({ src, name, size = "md", showName = false, ...others }) {
|
|
10
11
|
const tid = (0, utils_1.useTestIds)(others, "avatar");
|
|
11
12
|
const px = sizeToPixel[size];
|
|
@@ -13,7 +14,7 @@ function Avatar({ src, name, size = "md", showName = false, ...others }) {
|
|
|
13
14
|
// Define min-width as well as width to prevent the image from shrinking when displayed within a flex-child that allows shrinking.
|
|
14
15
|
const styles = Css_1.Css.br100.wPx(px).hPx(px).mwPx(px).overflowHidden.$;
|
|
15
16
|
const img = showFallback ? ((0, jsx_runtime_1.jsx)("div", { css: { ...styles, ...Css_1.Css[sizeToFallbackTypeScale[size]].bgGray400.gray100.df.aic.jcc.$ }, ...tid, children: name ? nameToInitials(name) : (0, jsx_runtime_1.jsx)(Icon_1.Icon, { icon: "userCircle", inc: sizeToIconInc[size] }) })) : ((0, jsx_runtime_1.jsx)("img", { src: src, alt: name, css: { ...styles, ...Css_1.Css.objectCover.$ }, onError: () => setShowFallback(true), loading: "lazy", ...tid }));
|
|
16
|
-
return showName && name ? ((0, jsx_runtime_1.jsxs)("div", { css: Css_1.Css.dif.aic.gap1.if(size === "lg" || size === "xl").fdc.$, children: [img, (0, jsx_runtime_1.jsx)("span", { css: Css_1.Css[sizeToTypeScale[size]].$, children: name })] })) : (img);
|
|
17
|
+
return showName && name ? ((0, jsx_runtime_1.jsxs)("div", { css: Css_1.Css.dif.aic.gap1.if(size === "lg" || size === "xl").fdc.$, children: [img, (0, jsx_runtime_1.jsx)("span", { css: Css_1.Css[sizeToTypeScale[size]].$, children: name })] })) : ((0, Tooltip_1.maybeTooltip)({ title: name, children: img, placement: "top" }));
|
|
17
18
|
}
|
|
18
19
|
exports.Avatar = Avatar;
|
|
19
20
|
const sizeToPixel = {
|
|
@@ -35,10 +36,10 @@ const sizeToIconInc = {
|
|
|
35
36
|
xl: 8,
|
|
36
37
|
};
|
|
37
38
|
const sizeToTypeScale = {
|
|
38
|
-
sm: "
|
|
39
|
-
md: "
|
|
40
|
-
lg: "
|
|
41
|
-
xl: "
|
|
39
|
+
sm: "smMd",
|
|
40
|
+
md: "smMd",
|
|
41
|
+
lg: "base",
|
|
42
|
+
xl: "base",
|
|
42
43
|
};
|
|
43
44
|
function nameToInitials(name) {
|
|
44
45
|
return (name
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { AriaButtonProps } from "@react-types/button";
|
|
2
2
|
import { RefObject } from "react";
|
|
3
3
|
import { AvatarProps } from "./Avatar";
|
|
4
|
-
import { BeamButtonProps, BeamFocusableProps } from "
|
|
4
|
+
import { BeamButtonProps, BeamFocusableProps } from "../../interfaces";
|
|
5
5
|
export interface AvatarButtonProps extends AvatarProps, BeamButtonProps, BeamFocusableProps {
|
|
6
6
|
menuTriggerProps?: AriaButtonProps;
|
|
7
7
|
buttonRef?: RefObject<HTMLButtonElement>;
|
|
@@ -4,13 +4,13 @@ exports.pressedStyles = exports.hoverStyles = exports.AvatarButton = 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 components_1 = require("./");
|
|
8
7
|
const Avatar_1 = require("./Avatar");
|
|
9
|
-
const
|
|
10
|
-
const
|
|
11
|
-
const
|
|
12
|
-
const
|
|
13
|
-
const
|
|
8
|
+
const index_1 = require("../index");
|
|
9
|
+
const Css_1 = require("../../Css");
|
|
10
|
+
const useGetRef_1 = require("../../hooks/useGetRef");
|
|
11
|
+
const utils_1 = require("../../utils");
|
|
12
|
+
const getInteractiveElement_1 = require("../../utils/getInteractiveElement");
|
|
13
|
+
const useTestIds_1 = require("../../utils/useTestIds");
|
|
14
14
|
function AvatarButton(props) {
|
|
15
15
|
const { onClick: onPress, disabled, autoFocus, buttonRef, tooltip, menuTriggerProps, openInNew, forceFocusStyles = false, ...avatarProps } = props;
|
|
16
16
|
const isDisabled = !!disabled;
|
|
@@ -36,13 +36,13 @@ function AvatarButton(props) {
|
|
|
36
36
|
...buttonProps,
|
|
37
37
|
...focusProps,
|
|
38
38
|
...hoverProps,
|
|
39
|
-
className: typeof onPress === "string" ?
|
|
39
|
+
className: typeof onPress === "string" ? index_1.navLink : undefined,
|
|
40
40
|
ref: ref,
|
|
41
41
|
css: styles,
|
|
42
42
|
};
|
|
43
43
|
// If we're disabled b/c of a non-boolean ReactNode, or the caller specified tooltip text, then show it in a tooltip
|
|
44
|
-
return (0,
|
|
45
|
-
title: (0,
|
|
44
|
+
return (0, index_1.maybeTooltip)({
|
|
45
|
+
title: (0, index_1.resolveTooltip)(disabled, tooltip),
|
|
46
46
|
placement: "top",
|
|
47
47
|
children: (0, getInteractiveElement_1.getButtonOrLink)((0, jsx_runtime_1.jsx)(Avatar_1.Avatar, { ...avatarProps, ...tid }), onPress, buttonAttrs, openInNew),
|
|
48
48
|
});
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { AvatarSize } from "./Avatar";
|
|
2
|
+
export interface AvatarGroupProps {
|
|
3
|
+
avatars: {
|
|
4
|
+
src: string | undefined;
|
|
5
|
+
name?: string;
|
|
6
|
+
}[];
|
|
7
|
+
size?: AvatarSize;
|
|
8
|
+
}
|
|
9
|
+
export declare function AvatarGroup(props: AvatarGroupProps): import("@emotion/react/jsx-runtime").JSX.Element;
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.AvatarGroup = void 0;
|
|
4
|
+
const jsx_runtime_1 = require("@emotion/react/jsx-runtime");
|
|
5
|
+
const Avatar_1 = require("./Avatar");
|
|
6
|
+
const ButtonModal_1 = require("../ButtonModal");
|
|
7
|
+
const Css_1 = require("../../Css");
|
|
8
|
+
function AvatarGroup(props) {
|
|
9
|
+
const { avatars, size = "md" } = props;
|
|
10
|
+
// If there are 8 or fewer avatars, show them all. Otherwise, show the first 7 and a menu with the rest.
|
|
11
|
+
const maxVisibleAvatars = avatars.length <= 8 ? 8 : 7;
|
|
12
|
+
const visibleAvatars = avatars.slice(0, maxVisibleAvatars);
|
|
13
|
+
const menuAvatars = avatars.slice(maxVisibleAvatars);
|
|
14
|
+
return ((0, jsx_runtime_1.jsxs)("div", { css: Css_1.Css.df.aic.gap1.xsSb.$, children: [(0, jsx_runtime_1.jsx)("div", { css: Css_1.Css.df.aic.$, children: visibleAvatars.map((avatar, idx) => {
|
|
15
|
+
var _a;
|
|
16
|
+
return ((0, jsx_runtime_1.jsx)("div", { css: Css_1.Css.br100.ba.bWhite
|
|
17
|
+
.add("borderWidth", "3px")
|
|
18
|
+
.if(idx > 0)
|
|
19
|
+
.mlPx(-1 * sizeToOverlap[size]).$, children: (0, jsx_runtime_1.jsx)(Avatar_1.Avatar, { src: avatar.src, name: avatar.name, size: size }) }, (_a = avatar.src) !== null && _a !== void 0 ? _a : idx));
|
|
20
|
+
}) }), menuAvatars.length > 0 && ((0, jsx_runtime_1.jsx)(ButtonModal_1.ButtonModal, { trigger: { label: `+ ${menuAvatars.length} more`, variant: "text" }, hideEndAdornment: true, content: (0, jsx_runtime_1.jsx)("div", { css: Css_1.Css.df.fdc.gap1.mPx(-12).$, children: menuAvatars.map((a, idx) => {
|
|
21
|
+
var _a;
|
|
22
|
+
return ((0, jsx_runtime_1.jsx)(Avatar_1.Avatar, { src: a.src, name: a.name, showName: true, size: "md" }, (_a = a.src) !== null && _a !== void 0 ? _a : idx));
|
|
23
|
+
}) }) }))] }));
|
|
24
|
+
}
|
|
25
|
+
exports.AvatarGroup = AvatarGroup;
|
|
26
|
+
const sizeToOverlap = {
|
|
27
|
+
sm: 9,
|
|
28
|
+
md: 9,
|
|
29
|
+
lg: 15,
|
|
30
|
+
xl: 22,
|
|
31
|
+
};
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./Avatar"), exports);
|
|
18
|
+
__exportStar(require("./AvatarButton"), exports);
|
|
19
|
+
__exportStar(require("./AvatarGroup"), exports);
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { ReactElement } from "react";
|
|
2
2
|
import { Palette } from "../../../Css";
|
|
3
|
-
export declare function RightPaneLayout({ children, paneBgColor, paneWidth, }: {
|
|
3
|
+
export declare function RightPaneLayout({ children, paneBgColor, paneWidth, defaultPaneContent, }: {
|
|
4
4
|
children: ReactElement;
|
|
5
5
|
paneBgColor?: Palette;
|
|
6
6
|
paneWidth?: number;
|
|
7
|
+
defaultPaneContent?: ReactElement;
|
|
7
8
|
}): import("@emotion/react/jsx-runtime").JSX.Element;
|
|
@@ -6,7 +6,7 @@ const framer_motion_1 = require("framer-motion");
|
|
|
6
6
|
const react_1 = require("react");
|
|
7
7
|
const Css_1 = require("../../../Css");
|
|
8
8
|
const RightPaneContext_1 = require("./RightPaneContext");
|
|
9
|
-
function RightPaneLayout({ children, paneBgColor = Css_1.Palette.White, paneWidth = 450, }) {
|
|
9
|
+
function RightPaneLayout({ children, paneBgColor = Css_1.Palette.White, paneWidth = 450, defaultPaneContent, }) {
|
|
10
10
|
const { isRightPaneOpen, rightPaneContent, clearPane, closePane } = (0, RightPaneContext_1.useRightPaneContext)();
|
|
11
11
|
// Close pane on page unmount because otherwise the next page that has a right pane will show our stale content
|
|
12
12
|
(0, react_1.useEffect)(() => {
|
|
@@ -14,12 +14,21 @@ function RightPaneLayout({ children, paneBgColor = Css_1.Palette.White, paneWidt
|
|
|
14
14
|
closePane();
|
|
15
15
|
};
|
|
16
16
|
}, []);
|
|
17
|
-
return ((0, jsx_runtime_1.jsx)("div", { css: Css_1.Css.h100.df.overflowXHidden.$, children: (0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)("div", { css:
|
|
18
|
-
.add("transition", "width .2s linear")
|
|
19
|
-
.
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
17
|
+
return ((0, jsx_runtime_1.jsx)("div", { css: Css_1.Css.h100.df.overflowXHidden.$, children: (0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)("div", { css: {
|
|
18
|
+
...Css_1.Css.w(`calc(100% - ${paneWidth + 24}px)`).add("transition", "width .2s linear").h100.mr3.overflowXAuto.$,
|
|
19
|
+
...Css_1.Css.if(!isRightPaneOpen).w100.mr0.$,
|
|
20
|
+
...Css_1.Css.if(!!defaultPaneContent).w(`calc(100% - ${paneWidth + 24}px)`).mr3.$,
|
|
21
|
+
}, children: children }), (0, jsx_runtime_1.jsxs)("div", { css: Css_1.Css.position("relative").if(!!defaultPaneContent).wPx(paneWidth).$, children: [defaultPaneContent && ((0, jsx_runtime_1.jsx)("div", { css: Css_1.Css.h100
|
|
22
|
+
.wPx(paneWidth)
|
|
23
|
+
.left(0)
|
|
24
|
+
.position("absolute")
|
|
25
|
+
.add("transition", "all .3s ease-in-out")
|
|
26
|
+
.if(isRightPaneOpen)
|
|
27
|
+
.add("opacity", 0)
|
|
28
|
+
.left(100).$, children: defaultPaneContent })), (0, jsx_runtime_1.jsx)(framer_motion_1.AnimatePresence, { children: isRightPaneOpen && ((0, jsx_runtime_1.jsx)(framer_motion_1.motion.div, { layout: "position", "data-testid": "rightPaneContent", css: Css_1.Css.bgColor(paneBgColor).h100.wPx(paneWidth).$,
|
|
29
|
+
// Keeping initial x to offset pane width and space between panel and page content
|
|
30
|
+
initial: { x: paneWidth + 24, position: "absolute" }, animate: { x: 0 }, transition: { ease: "linear", duration: 0.2 }, exit: { transition: { ease: "linear", duration: 0.2 }, x: paneWidth },
|
|
31
|
+
// Clear the content of the detail pane when the animation is completed and only when pane is closing
|
|
32
|
+
onAnimationComplete: (definition) => definition.x !== 0 && clearPane(), children: rightPaneContent }, "rightPane")) })] })] }) }));
|
|
24
33
|
}
|
|
25
34
|
exports.RightPaneLayout = RightPaneLayout;
|
|
@@ -7,7 +7,6 @@ export * from "./Accordion";
|
|
|
7
7
|
export * from "./AccordionList";
|
|
8
8
|
export * from "./AutoSaveIndicator";
|
|
9
9
|
export * from "./Avatar";
|
|
10
|
-
export * from "./AvatarButton";
|
|
11
10
|
export { BeamProvider } from "./BeamContext";
|
|
12
11
|
export * from "./Button";
|
|
13
12
|
export * from "./ButtonDatePicker";
|
package/dist/components/index.js
CHANGED
|
@@ -24,7 +24,6 @@ __exportStar(require("./Accordion"), exports);
|
|
|
24
24
|
__exportStar(require("./AccordionList"), exports);
|
|
25
25
|
__exportStar(require("./AutoSaveIndicator"), exports);
|
|
26
26
|
__exportStar(require("./Avatar"), exports);
|
|
27
|
-
__exportStar(require("./AvatarButton"), exports);
|
|
28
27
|
var BeamContext_1 = require("./BeamContext");
|
|
29
28
|
Object.defineProperty(exports, "BeamProvider", { enumerable: true, get: function () { return BeamContext_1.BeamProvider; } });
|
|
30
29
|
__exportStar(require("./Button"), exports);
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { AriaButtonProps } from "@react-types/button";
|
|
2
2
|
import { MutableRefObject, ReactElement, ReactNode } from "react";
|
|
3
3
|
import { MenuTriggerState } from "react-stately";
|
|
4
|
-
import { AvatarButtonProps } from "../AvatarButton";
|
|
4
|
+
import { AvatarButtonProps } from "../Avatar/AvatarButton";
|
|
5
5
|
import { ButtonProps, ButtonVariant } from "../Button";
|
|
6
6
|
import { IconButtonProps } from "../IconButton";
|
|
7
7
|
import { NavLinkProps } from "../NavLink";
|
|
@@ -4,7 +4,7 @@ exports.labelOr = exports.isNavLinkButton = exports.isIconButton = exports.isTex
|
|
|
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 AvatarButton_1 = require("../AvatarButton");
|
|
7
|
+
const AvatarButton_1 = require("../Avatar/AvatarButton");
|
|
8
8
|
const Button_1 = require("../Button");
|
|
9
9
|
const Icon_1 = require("../Icon");
|
|
10
10
|
const IconButton_1 = require("../IconButton");
|
package/package.json
CHANGED
|
File without changes
|