@homebound/beam 4.16.0 → 4.17.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/README.md CHANGED
@@ -4,7 +4,7 @@
4
4
 
5
5
  Homebound's React component design system.
6
6
 
7
- _To see the latest designs, check out the [Figma](https://www.figma.com/file/aWUE4pPeUTgrYZ4vaTYZQU/%E2%9C%A8Beam-Design-System-Refresh?node-id=0%3A1) file._
7
+ _To see the latest designs, check out the [Figma](https://www.figma.com/design/62R8KiDklvgBBSH0mQGWHo/BEAM_27_LIBRARY?node-id=0-1&p=f&m=draw) file._
8
8
 
9
9
  ## Page layout shells
10
10
 
package/dist/index.cjs CHANGED
@@ -6789,6 +6789,22 @@ function shallowEqual(objA, objB) {
6789
6789
  if (typeof objA !== "object" || objA === null || typeof objB !== "object" || objB === null) {
6790
6790
  return false;
6791
6791
  }
6792
+ if (objA instanceof Map || objB instanceof Map) {
6793
+ if (!(objA instanceof Map && objB instanceof Map) || objA.size !== objB.size) return false;
6794
+ for (const [key, value] of objA) {
6795
+ if (!objB.has(key) || !Object.is(value, objB.get(key))) return false;
6796
+ }
6797
+ return true;
6798
+ }
6799
+ if (objA instanceof Set || objB instanceof Set) {
6800
+ if (!(objA instanceof Set && objB instanceof Set) || objA.size !== objB.size) return false;
6801
+ for (const value of objA) {
6802
+ if (!objB.has(value)) return false;
6803
+ }
6804
+ return true;
6805
+ }
6806
+ if (Array.isArray(objA) !== Array.isArray(objB)) return false;
6807
+ if (!Array.isArray(objA) && (!isPlainObject(objA) || !isPlainObject(objB))) return false;
6792
6808
  const keysA = Object.keys(objA);
6793
6809
  const keysB = Object.keys(objB);
6794
6810
  if (keysA.length !== keysB.length) {
@@ -6796,12 +6812,16 @@ function shallowEqual(objA, objB) {
6796
6812
  }
6797
6813
  for (let i = 0; i < keysA.length; i++) {
6798
6814
  const currentKey = keysA[i];
6799
- if (!objB.hasOwnProperty(currentKey) || !Object.is(objA[currentKey], objB[currentKey])) {
6815
+ if (!Object.prototype.hasOwnProperty.call(objB, currentKey) || !Object.is(objA[currentKey], objB[currentKey])) {
6800
6816
  return false;
6801
6817
  }
6802
6818
  }
6803
6819
  return true;
6804
6820
  }
6821
+ function isPlainObject(value) {
6822
+ const prototype = Object.getPrototypeOf(value);
6823
+ return prototype === Object.prototype || prototype === null;
6824
+ }
6805
6825
 
6806
6826
  // src/hooks/useComputed.ts
6807
6827
  function useComputed(fn, deps) {
@@ -11707,6 +11727,7 @@ function TextFieldBase(props) {
11707
11727
  } = fieldProps ?? {};
11708
11728
  const {
11709
11729
  label,
11730
+ tooltip,
11710
11731
  required,
11711
11732
  labelProps,
11712
11733
  inputProps,
@@ -11728,7 +11749,6 @@ function TextFieldBase(props) {
11728
11749
  borderOnHover = fieldProps?.borderOnHover ?? false,
11729
11750
  textAreaMinHeight = 96,
11730
11751
  clearable = false,
11731
- tooltip,
11732
11752
  visuallyDisabled = fieldProps?.visuallyDisabled ?? true,
11733
11753
  errorInTooltip = fieldProps?.errorInTooltip ?? false,
11734
11754
  hideErrorMessage = false,
@@ -11749,6 +11769,9 @@ function TextFieldBase(props) {
11749
11769
  forceFocus = false,
11750
11770
  forceHover = false
11751
11771
  } = internalProps;
11772
+ const hasVisibleLabel = !!label && labelStyle !== "inline" && labelStyle !== "hidden" && !compound;
11773
+ const isInteractive = !inputProps.disabled && !inputProps.readOnly;
11774
+ const tooltipLocation = hasVisibleLabel ? "label" : !isInteractive ? "field" : void 0;
11752
11775
  const errorMessageId = `${inputProps.id}-error`;
11753
11776
  const labelSuffix = useLabelSuffix(required, inputProps.readOnly);
11754
11777
  const tid = useTestIds(props, defaultTestId(label));
@@ -12040,9 +12063,9 @@ function TextFieldBase(props) {
12040
12063
  };
12041
12064
  return /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)(import_jsx_runtime37.Fragment, { children: [
12042
12065
  /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)("div", { ...(0, import_runtime31.trussProps)(fieldStyles.container), ...groupProps, ...focusWithinProps, children: [
12043
- label && labelStyle !== "inline" && /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(Label, { labelProps, hidden: labelStyle === "hidden" || compound, label, inline: labelStyle !== "above", suffix: labelSuffix, ...tid.label }),
12066
+ label && labelStyle !== "inline" && /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(Label, { labelProps, hidden: labelStyle === "hidden" || compound, label, inline: labelStyle !== "above", suffix: labelSuffix, tooltip: tooltipLocation === "label" ? tooltip : void 0, ...tid.label }),
12044
12067
  maybeTooltip({
12045
- title: tooltip,
12068
+ title: tooltipLocation === "field" ? tooltip : void 0,
12046
12069
  placement: "top",
12047
12070
  children: inputProps.readOnly ? /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)("div", { ...(0, import_runtime31.trussProps)({
12048
12071
  // Use input wrapper to get common styles, but then we need to override some
@@ -19275,7 +19298,7 @@ function TreeSelectFieldBase(props) {
19275
19298
  maxWidth: "maxw100"
19276
19299
  } : {}
19277
19300
  }), ref: comboBoxRef, children: [
19278
- /* @__PURE__ */ (0, import_jsx_runtime105.jsx)(ComboBoxInput, { ...otherProps, fullWidth, labelStyle, buttonProps, buttonRef: triggerRef, inputProps, inputRef, inputWrapRef, listBoxRef, state, labelProps, selectedOptions: fieldState.selectedOptions, selectedOptionsLabels: fieldState.selectedOptionsLabels, getOptionValue, getOptionLabel, borderless, tooltip: resolveTooltip(disabled, void 0, readOnly), resetField, nothingSelectedText, isTree: true }),
19301
+ /* @__PURE__ */ (0, import_jsx_runtime105.jsx)(ComboBoxInput, { ...otherProps, fullWidth, labelStyle, buttonProps, buttonRef: triggerRef, inputProps, inputRef, inputWrapRef, listBoxRef, state, labelProps, selectedOptions: fieldState.selectedOptions, selectedOptionsLabels: fieldState.selectedOptionsLabels, getOptionValue, getOptionLabel, borderless, tooltip: resolveTooltip(disabled, props.tooltip, readOnly), resetField, nothingSelectedText, isTree: true }),
19279
19302
  state.isOpen && /* @__PURE__ */ (0, import_jsx_runtime105.jsx)(
19280
19303
  Popover,
19281
19304
  {
@@ -19524,6 +19547,7 @@ function ComboBoxBase(props) {
19524
19547
  onAddNew,
19525
19548
  autoSort = true,
19526
19549
  hideChips = false,
19550
+ tooltip,
19527
19551
  ...otherProps
19528
19552
  } = props;
19529
19553
  const labelStyle = otherProps.labelStyle ?? fieldProps?.labelStyle ?? "above";
@@ -19756,7 +19780,7 @@ function ComboBoxBase(props) {
19756
19780
  maxWidth: "maxw100"
19757
19781
  } : {}
19758
19782
  }), ref: comboBoxRef, children: [
19759
- /* @__PURE__ */ (0, import_jsx_runtime107.jsx)(ComboBoxInput, { ...otherProps, inputStylePalette, fullWidth, buttonProps, buttonRef: triggerRef, inputProps, inputRef, inputWrapRef, listBoxRef, state, labelProps, selectedOptions, getOptionValue, getOptionLabel, nothingSelectedText, borderless, tooltip: resolveTooltip(disabled, void 0, readOnly), resetField, hideChips, ...proposalProps }),
19783
+ /* @__PURE__ */ (0, import_jsx_runtime107.jsx)(ComboBoxInput, { ...otherProps, inputStylePalette, fullWidth, buttonProps, buttonRef: triggerRef, inputProps, inputRef, inputWrapRef, listBoxRef, state, labelProps, selectedOptions, getOptionValue, getOptionLabel, nothingSelectedText, borderless, tooltip: resolveTooltip(disabled, tooltip, readOnly), resetField, hideChips, ...proposalProps }),
19760
19784
  state.isOpen && /* @__PURE__ */ (0, import_jsx_runtime107.jsx)(
19761
19785
  Popover,
19762
19786
  {
@@ -20430,6 +20454,7 @@ var import_jsx_runtime116 = require("react/jsx-runtime");
20430
20454
  function LabeledGroupField(props) {
20431
20455
  const {
20432
20456
  label,
20457
+ tooltip,
20433
20458
  labelStyle,
20434
20459
  labelProps,
20435
20460
  groupProps,
@@ -20443,7 +20468,7 @@ function LabeledGroupField(props) {
20443
20468
  } = props;
20444
20469
  const isHiddenLabel = labelStyle === "hidden";
20445
20470
  const isLeftLabel = labelStyle === "left";
20446
- const labelElement = /* @__PURE__ */ (0, import_jsx_runtime116.jsx)(Label, { label, ...labelProps, ...tid.label, suffix: labelSuffix, hidden: isHiddenLabel, inline: isLeftLabel });
20471
+ const labelElement = /* @__PURE__ */ (0, import_jsx_runtime116.jsx)(Label, { label, ...labelProps, ...tid.label, suffix: labelSuffix, tooltip, hidden: isHiddenLabel, inline: isLeftLabel });
20447
20472
  return /* @__PURE__ */ (0, import_jsx_runtime116.jsxs)("div", { ...groupProps, ...(0, import_runtime87.trussProps)({
20448
20473
  width: "w100",
20449
20474
  ...isLeftLabel ? {
@@ -20471,6 +20496,7 @@ function CheckboxGroup(props) {
20471
20496
  const {
20472
20497
  options,
20473
20498
  label,
20499
+ tooltip,
20474
20500
  labelStyle = fieldProps?.labelStyle ?? "above",
20475
20501
  values,
20476
20502
  errorMsg,
@@ -20490,7 +20516,7 @@ function CheckboxGroup(props) {
20490
20516
  } = (0, import_react_aria39.useCheckboxGroup)(props, state);
20491
20517
  const tid = useTestIds(props, defaultTestId(label));
20492
20518
  const labelSuffix = useLabelSuffix(required, false);
20493
- return /* @__PURE__ */ (0, import_jsx_runtime117.jsx)(LabeledGroupField, { label, labelStyle, labelProps, groupProps, errorMsg, helperText, labelSuffix, onBlur, onFocus, tid, children: /* @__PURE__ */ (0, import_jsx_runtime117.jsx)("div", { ...(0, import_runtime88.trussProps)({
20519
+ return /* @__PURE__ */ (0, import_jsx_runtime117.jsx)(LabeledGroupField, { label, tooltip, labelStyle, labelProps, groupProps, errorMsg, helperText, labelSuffix, onBlur, onFocus, tid, children: /* @__PURE__ */ (0, import_jsx_runtime117.jsx)("div", { ...(0, import_runtime88.trussProps)({
20494
20520
  display: "dg",
20495
20521
  gridTemplateColumns: ["gtc_var", {
20496
20522
  "--gridTemplateColumns": (0, import_runtime88.maybeCssVar)(`repeat(${columns}, auto)`)
@@ -20721,6 +20747,7 @@ var import_jsx_runtime121 = require("react/jsx-runtime");
20721
20747
  function DateFieldBase(props) {
20722
20748
  const {
20723
20749
  label,
20750
+ tooltip,
20724
20751
  disabled,
20725
20752
  required,
20726
20753
  value,
@@ -20913,7 +20940,7 @@ function DateFieldBase(props) {
20913
20940
  },
20914
20941
  endAdornment: !iconLeft && EndFieldButtons,
20915
20942
  startAdornment: !hideCalendarIcon && iconLeft && calendarButton,
20916
- tooltip: resolveTooltip(disabled, void 0, readOnly),
20943
+ tooltip: resolveTooltip(disabled, tooltip, readOnly),
20917
20944
  ...others
20918
20945
  }
20919
20946
  ),
@@ -21128,6 +21155,7 @@ function MultiLineSelectField(props) {
21128
21155
  getOptionValue = (opt) => opt.id,
21129
21156
  getOptionLabel = (opt) => opt.name,
21130
21157
  labelStyle,
21158
+ tooltip,
21131
21159
  ...otherProps
21132
21160
  } = props;
21133
21161
  const tid = useTestIds(props, "");
@@ -21143,7 +21171,7 @@ function MultiLineSelectField(props) {
21143
21171
  ...labelStyle === "left" ? {
21144
21172
  width: "w50"
21145
21173
  } : {}
21146
- }), children: /* @__PURE__ */ (0, import_jsx_runtime128.jsx)(Label, { ...tid.label, label: props.label }) }),
21174
+ }), children: /* @__PURE__ */ (0, import_jsx_runtime128.jsx)(Label, { ...tid.label, label: props.label, tooltip }) }),
21147
21175
  /* @__PURE__ */ (0, import_jsx_runtime128.jsxs)("div", { ...(0, import_runtime91.trussProps)({
21148
21176
  ...labelStyle === "left" ? {
21149
21177
  width: "w50"
@@ -21719,6 +21747,7 @@ function MultiSelectCardGroup(props) {
21719
21747
  } = usePresentationContext();
21720
21748
  const {
21721
21749
  label,
21750
+ tooltip,
21722
21751
  labelStyle = fieldProps?.labelStyle ?? "above",
21723
21752
  values,
21724
21753
  options,
@@ -21753,7 +21782,7 @@ function MultiSelectCardGroup(props) {
21753
21782
  label,
21754
21783
  isDisabled
21755
21784
  }, state);
21756
- return /* @__PURE__ */ (0, import_jsx_runtime135.jsx)(LabeledGroupField, { label, labelStyle, labelProps, groupProps, errorMsg, helperText, tid, children: /* @__PURE__ */ (0, import_jsx_runtime135.jsx)("div", { ...(0, import_runtime98.trussProps)(getSelectCardOptionsCss({
21785
+ return /* @__PURE__ */ (0, import_jsx_runtime135.jsx)(LabeledGroupField, { label, tooltip, labelStyle, labelProps, groupProps, errorMsg, helperText, tid, children: /* @__PURE__ */ (0, import_jsx_runtime135.jsx)("div", { ...(0, import_runtime98.trussProps)(getSelectCardOptionsCss({
21757
21786
  view,
21758
21787
  hasDescription,
21759
21788
  layout,
@@ -21967,6 +21996,7 @@ function NumberField(props) {
21967
21996
  readOnly,
21968
21997
  type,
21969
21998
  label,
21999
+ tooltip,
21970
22000
  onBlur,
21971
22001
  onFocus,
21972
22002
  errorMsg,
@@ -22126,7 +22156,7 @@ function NumberField(props) {
22126
22156
  onFocus,
22127
22157
  errorMsg,
22128
22158
  helperText,
22129
- tooltip: resolveTooltip(disabled, void 0, readOnly),
22159
+ tooltip: resolveTooltip(disabled, tooltip, readOnly),
22130
22160
  ...proposalProps,
22131
22161
  ...otherProps
22132
22162
  }
@@ -22209,6 +22239,7 @@ function RadioGroupField(props) {
22209
22239
  errorMsg,
22210
22240
  helperText,
22211
22241
  layout = "vertical",
22242
+ tooltip,
22212
22243
  ...otherProps
22213
22244
  } = props;
22214
22245
  const name = (0, import_react99.useMemo)(() => `radio-group-${++nextNameId}`, []);
@@ -22242,7 +22273,7 @@ function RadioGroupField(props) {
22242
22273
  justifyContent: "jcsb"
22243
22274
  } : {}
22244
22275
  }), ...tid, children: [
22245
- /* @__PURE__ */ (0, import_jsx_runtime143.jsx)(Label, { label, ...labelProps, ...tid.label, suffix: labelSuffix, hidden: labelStyle === "hidden" }),
22276
+ /* @__PURE__ */ (0, import_jsx_runtime143.jsx)(Label, { label, ...labelProps, ...tid.label, suffix: labelSuffix, tooltip, hidden: labelStyle === "hidden" }),
22246
22277
  /* @__PURE__ */ (0, import_jsx_runtime143.jsxs)("div", { ...radioGroupProps, children: [
22247
22278
  /* @__PURE__ */ (0, import_jsx_runtime143.jsx)("div", { ...(0, import_runtime100.trussProps)({
22248
22279
  display: "df",
@@ -22544,7 +22575,7 @@ function RichTextFieldImpl(props) {
22544
22575
  maxWidth: "maxw_550px"
22545
22576
  } : {}
22546
22577
  }), children: [
22547
- label && /* @__PURE__ */ (0, import_jsx_runtime146.jsx)(Label, { labelProps: {}, label }),
22578
+ label && /* @__PURE__ */ (0, import_jsx_runtime146.jsx)(Label, { labelProps: {}, label, tooltip: props.tooltip }),
22548
22579
  /* @__PURE__ */ (0, import_jsx_runtime146.jsxs)("div", { className: "beam-trix-editor", children: [
22549
22580
  /* @__PURE__ */ (0, import_jsx_runtime146.jsx)("input", { type: "hidden", id: `input-${id}`, value }),
22550
22581
  (0, import_react101.createElement)("trix-editor", {
@@ -22567,7 +22598,7 @@ function RichTextFieldImpl(props) {
22567
22598
  maxWidth: "maxw_550px"
22568
22599
  } : {}
22569
22600
  }), children: [
22570
- label && /* @__PURE__ */ (0, import_jsx_runtime146.jsx)(Label, { label }),
22601
+ label && /* @__PURE__ */ (0, import_jsx_runtime146.jsx)(Label, { label, tooltip: props.tooltip }),
22571
22602
  /* @__PURE__ */ (0, import_jsx_runtime146.jsx)("div", { ...(0, import_runtime101.trussProps)({
22572
22603
  minHeight: "mh_120px",
22573
22604
  backgroundColor: ["bgColor_var", {
@@ -22712,6 +22743,7 @@ function SelectCardGroup(props) {
22712
22743
  } = usePresentationContext();
22713
22744
  const {
22714
22745
  label,
22746
+ tooltip,
22715
22747
  labelStyle = fieldProps?.labelStyle ?? "above",
22716
22748
  value,
22717
22749
  options,
@@ -22740,7 +22772,7 @@ function SelectCardGroup(props) {
22740
22772
  label,
22741
22773
  isDisabled
22742
22774
  }, state);
22743
- return /* @__PURE__ */ (0, import_jsx_runtime149.jsx)(LabeledGroupField, { label, labelStyle, labelProps, groupProps: radioGroupProps, errorMsg, helperText, tid, children: /* @__PURE__ */ (0, import_jsx_runtime149.jsx)("div", { ...(0, import_runtime102.trussProps)(getSelectCardOptionsCss({
22775
+ return /* @__PURE__ */ (0, import_jsx_runtime149.jsx)(LabeledGroupField, { label, tooltip, labelStyle, labelProps, groupProps: radioGroupProps, errorMsg, helperText, tid, children: /* @__PURE__ */ (0, import_jsx_runtime149.jsx)("div", { ...(0, import_runtime102.trussProps)(getSelectCardOptionsCss({
22744
22776
  view,
22745
22777
  hasDescription,
22746
22778
  layout,
@@ -23075,6 +23107,7 @@ function TextAreaField(props) {
23075
23107
  preventNewLines,
23076
23108
  onEnter,
23077
23109
  maxLines,
23110
+ tooltip,
23078
23111
  ...otherProps
23079
23112
  } = props;
23080
23113
  const { effectiveValue, proposalProps } = useAiProposal(value, proposedValue);
@@ -23114,7 +23147,7 @@ function TextAreaField(props) {
23114
23147
  inputRef,
23115
23148
  inputWrapRef,
23116
23149
  textAreaMinHeight: preventNewLines ? 0 : void 0,
23117
- tooltip: resolveTooltip(disabled, void 0, readOnly),
23150
+ tooltip: resolveTooltip(disabled, tooltip, readOnly),
23118
23151
  ...proposalProps
23119
23152
  }
23120
23153
  );
@@ -23182,6 +23215,7 @@ function TextField(props) {
23182
23215
  onEnter,
23183
23216
  onEscapeBubble,
23184
23217
  hideErrorMessage,
23218
+ tooltip,
23185
23219
  ...otherProps
23186
23220
  } = props;
23187
23221
  const { effectiveValue, proposalProps } = useAiProposal(value, proposedValue);
@@ -23224,7 +23258,7 @@ function TextField(props) {
23224
23258
  labelProps,
23225
23259
  inputProps,
23226
23260
  inputRef,
23227
- tooltip: resolveTooltip(disabled, void 0, readOnly),
23261
+ tooltip: resolveTooltip(disabled, tooltip, readOnly),
23228
23262
  hideErrorMessage,
23229
23263
  ...proposalProps
23230
23264
  }
@@ -23294,6 +23328,7 @@ function ToggleChipGroup(props) {
23294
23328
  const {
23295
23329
  values,
23296
23330
  label,
23331
+ tooltip,
23297
23332
  labelStyle = fieldProps?.labelStyle ?? "above",
23298
23333
  options,
23299
23334
  required,
@@ -23322,7 +23357,7 @@ function ToggleChipGroup(props) {
23322
23357
  justifyContent: "jcsb"
23323
23358
  } : {}
23324
23359
  }), children: [
23325
- /* @__PURE__ */ (0, import_jsx_runtime158.jsx)(Label, { label, ...labelProps, hidden: labelStyle === "hidden", inline: labelStyle !== "above", suffix: labelSuffix }),
23360
+ /* @__PURE__ */ (0, import_jsx_runtime158.jsx)(Label, { label, ...labelProps, ...tid.label, hidden: labelStyle === "hidden", inline: labelStyle !== "above", suffix: labelSuffix, tooltip }),
23326
23361
  /* @__PURE__ */ (0, import_jsx_runtime158.jsx)("div", { ...(0, import_runtime104.trussProps)({
23327
23362
  display: "df",
23328
23363
  gap: "g_1",