@mxenabled/connect-widget 0.7.0 → 0.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.es.js CHANGED
@@ -14369,7 +14369,7 @@ const Spinner = ({ bgColor, fgColor, size = 64 }) => {
14369
14369
  const tokens = useTokens();
14370
14370
  const bg = bgColor || "transparent";
14371
14371
  const fg = fgColor || tokens.TextColor.Default;
14372
- const styles = getStyles$1C(bg, fg, size);
14372
+ const styles = getStyles$1E(bg, fg, size);
14373
14373
  const RANDOM_NUMBER = Math.random();
14374
14374
  const idCutOff = `cut-off-${RANDOM_NUMBER}`;
14375
14375
  const idSpinGradient = `spin-gradient-${RANDOM_NUMBER}`;
@@ -14416,7 +14416,7 @@ const animationModulate = dist.keyframes("modulate", {
14416
14416
  "30%": { strokeDashoffset: 160 },
14417
14417
  "100%": { strokeDashoffset: 270 }
14418
14418
  });
14419
- const getStyles$1C = (bgColor, fgColor, size) => ({
14419
+ const getStyles$1E = (bgColor, fgColor, size) => ({
14420
14420
  ring: {
14421
14421
  animation: `1.6s linear infinite ${animationRotate}`,
14422
14422
  width: size,
@@ -14474,7 +14474,7 @@ dist.keyframes("pulse", {
14474
14474
 
14475
14475
  const LoadingSpinner = ({ showText = false, size = 48 }) => {
14476
14476
  const tokens = useTokens();
14477
- const styles = getStyles$1B(tokens);
14477
+ const styles = getStyles$1D(tokens);
14478
14478
  return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { style: styles.container, children: [
14479
14479
  /* @__PURE__ */ jsxRuntimeExports.jsx(
14480
14480
  Spinner,
@@ -14487,7 +14487,7 @@ const LoadingSpinner = ({ showText = false, size = 48 }) => {
14487
14487
  showText && /* @__PURE__ */ jsxRuntimeExports.jsx("div", { style: styles.text, children: __("Loading ...") })
14488
14488
  ] });
14489
14489
  };
14490
- const getStyles$1B = (tokens) => {
14490
+ const getStyles$1D = (tokens) => {
14491
14491
  return {
14492
14492
  container: {
14493
14493
  backgroundColor: tokens.BackgroundColor.Container,
@@ -45255,7 +45255,7 @@ const AuthenticationMethods = {
45255
45255
 
45256
45256
  const GenericError = ({ loadError, onAnalyticPageview, subtitle, title }) => {
45257
45257
  const tokens = useTokens();
45258
- const styles = getStyles$1A(tokens);
45258
+ const styles = getStyles$1C(tokens);
45259
45259
  useEffect(() => {
45260
45260
  if (!isRunningE2ETests())
45261
45261
  onAnalyticPageview(
@@ -45281,7 +45281,7 @@ const GenericError = ({ loadError, onAnalyticPageview, subtitle, title }) => {
45281
45281
  subtitle && /* @__PURE__ */ jsxRuntimeExports.jsx(x, { component: "h2", truncate: false, variant: "Paragraph", children: subtitle })
45282
45282
  ] });
45283
45283
  };
45284
- function getStyles$1A(tokens) {
45284
+ function getStyles$1C(tokens) {
45285
45285
  return {
45286
45286
  container: {
45287
45287
  backgroundColor: tokens.BackgroundColor.Container,
@@ -49103,10 +49103,10 @@ const fadeOut = (el, direction = "up", duration = 500) => {
49103
49103
  };
49104
49104
 
49105
49105
  const SlideDown = ({ delay = 0, duration = 300, children }) => {
49106
- const styles = getStyles$1z(delay, duration);
49106
+ const styles = getStyles$1B(delay, duration);
49107
49107
  return /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: styles, children });
49108
49108
  };
49109
- const getStyles$1z = (delay, duration) => {
49109
+ const getStyles$1B = (delay, duration) => {
49110
49110
  const slideAnimation = dist.keyframes({
49111
49111
  from: {
49112
49112
  opacity: 0,
@@ -49193,14 +49193,14 @@ const propTypes$2 = {
49193
49193
  const ConnectInstitutionHeader = (props) => {
49194
49194
  const colorScheme = useSelector(selectColorScheme);
49195
49195
  useTokens();
49196
- const styles = getStyles$1y();
49196
+ const styles = getStyles$1A();
49197
49197
  return /* @__PURE__ */ jsxRuntimeExports.jsx("div", { "data-test": "disclosure-svg-header", style: styles.container, children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { style: styles.backdropImage, children: [
49198
49198
  colorScheme === COLOR_SCHEME.LIGHT ? /* @__PURE__ */ jsxRuntimeExports.jsx(SvgHeaderBackdropLight, {}) : /* @__PURE__ */ jsxRuntimeExports.jsx(SvgHeaderBackdropDark, {}),
49199
49199
  /* @__PURE__ */ jsxRuntimeExports.jsx("div", { style: styles.device, children: /* @__PURE__ */ jsxRuntimeExports.jsx(SvgHeaderDevice, {}) }),
49200
49200
  /* @__PURE__ */ jsxRuntimeExports.jsx("div", { style: styles.institutionLogo, children: props.institutionGuid ? /* @__PURE__ */ jsxRuntimeExports.jsx(InstitutionLogo, { alt: "", institutionGuid: props.institutionGuid, size: 64 }) : /* @__PURE__ */ jsxRuntimeExports.jsx(SvgHeaderDefaultInstitution, {}) })
49201
49201
  ] }) });
49202
49202
  };
49203
- function getStyles$1y() {
49203
+ function getStyles$1A() {
49204
49204
  const maxHeight = "64px";
49205
49205
  const maxWidth = "240px";
49206
49206
  return {
@@ -49247,7 +49247,7 @@ const GoBackButton = forwardRef((props, ref) => {
49247
49247
  const defaultRef = useRef(null);
49248
49248
  const { handleGoBack } = props;
49249
49249
  const tokens = useTokens();
49250
- const styles = getStyles$1x(tokens);
49250
+ const styles = getStyles$1z(tokens);
49251
49251
  return /* @__PURE__ */ jsxRuntimeExports.jsx(
49252
49252
  IconButton$1,
49253
49253
  {
@@ -49267,7 +49267,7 @@ const GoBackButton = forwardRef((props, ref) => {
49267
49267
  }
49268
49268
  );
49269
49269
  });
49270
- const getStyles$1x = (tokens) => ({
49270
+ const getStyles$1z = (tokens) => ({
49271
49271
  height: "44px",
49272
49272
  margin: `0px ${tokens.Spacing.XSmall}px ${tokens.Spacing.XSmall}px -${tokens.Spacing.Medium}px`,
49273
49273
  padding: `0px 8px`,
@@ -49280,7 +49280,7 @@ GoBackButton.displayName = "GoBackButton";
49280
49280
 
49281
49281
  const LeavingNoticeFlat = ({ onContinue, onCancel, portalTo = "connect-wrapper" }) => {
49282
49282
  const tokens = useTokens();
49283
- const styles = getStyles$1w(tokens);
49283
+ const styles = getStyles$1y(tokens);
49284
49284
  const getNextDelay = getDelay();
49285
49285
  return createPortal(
49286
49286
  /* @__PURE__ */ jsxRuntimeExports.jsx("div", { role: "alert", style: styles.container, children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { style: styles.content, children: [
@@ -49342,7 +49342,7 @@ const LeavingNoticeFlat = ({ onContinue, onCancel, portalTo = "connect-wrapper"
49342
49342
  document.getElementById(portalTo)
49343
49343
  );
49344
49344
  };
49345
- const getStyles$1w = (tokens) => {
49345
+ const getStyles$1y = (tokens) => {
49346
49346
  return {
49347
49347
  container: {
49348
49348
  top: 0,
@@ -51130,7 +51130,7 @@ const PrivacyPolicy = () => {
51130
51130
  const [currentUrl, setCurrentUrl] = useState(null);
51131
51131
  const getNextDelay = getDelay();
51132
51132
  const tokens = useTokens();
51133
- const styles = getStyles$1v(tokens);
51133
+ const styles = getStyles$1x(tokens);
51134
51134
  const handleLinkClick = (url, isExternalUrl = true) => {
51135
51135
  const newUrl = { url, isExternalUrl };
51136
51136
  if (showExternalLinkPopup) {
@@ -51215,7 +51215,7 @@ const PrivacyPolicy = () => {
51215
51215
  /* @__PURE__ */ jsxRuntimeExports.jsx(SlideDown, { delay: getNextDelay(), children: privacyData.body.map((el, i) => buildElementJSX(el, i)) })
51216
51216
  ] }) });
51217
51217
  };
51218
- const getStyles$1v = (tokens) => ({
51218
+ const getStyles$1x = (tokens) => ({
51219
51219
  header: {
51220
51220
  display: "flex",
51221
51221
  flexDirection: "column"
@@ -51283,7 +51283,7 @@ MXLogo.displayName = "MXLogo";
51283
51283
 
51284
51284
  const PoweredByMXText = () => {
51285
51285
  const tokens = useTokens();
51286
- const styles = getStyles$1u(tokens);
51286
+ const styles = getStyles$1w(tokens);
51287
51287
  return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { style: styles.poweredBy, children: [
51288
51288
  /* @__PURE__ */ jsxRuntimeExports.jsx("span", { style: styles.accessibleAriaLabel, children: `${__("Data access by")} MX` }),
51289
51289
  /* @__PURE__ */ jsxRuntimeExports.jsxs(
@@ -51305,7 +51305,7 @@ const PoweredByMXText = () => {
51305
51305
  /* @__PURE__ */ jsxRuntimeExports.jsx(MXLogo, { color: tokens.TextColor.Default, size: 25 })
51306
51306
  ] });
51307
51307
  };
51308
- const getStyles$1u = (tokens) => {
51308
+ const getStyles$1w = (tokens) => {
51309
51309
  return {
51310
51310
  accessibleAriaLabel: {
51311
51311
  position: "absolute",
@@ -51337,7 +51337,7 @@ const Disclosure = React__default.forwardRef((props, disclosureRef) => {
51337
51337
  const containerRef = useRef(null);
51338
51338
  useAnalyticsPath(...PageviewInfo.CONNECT_DISCLOSURE);
51339
51339
  const tokens = useTokens();
51340
- const styles = getStyles$1t(tokens);
51340
+ const styles = getStyles$1v(tokens);
51341
51341
  const getNextDelay = getDelay();
51342
51342
  const [showPrivacyPolicy, setShowPrivacyPolicy] = useState(false);
51343
51343
  const IS_IN_AGG_MODE = mode === AGG_MODE;
@@ -51444,7 +51444,7 @@ const Disclosure = React__default.forwardRef((props, disclosureRef) => {
51444
51444
  }
51445
51445
  );
51446
51446
  });
51447
- const getStyles$1t = (tokens) => {
51447
+ const getStyles$1v = (tokens) => {
51448
51448
  return {
51449
51449
  svg: {
51450
51450
  margin: `${tokens.Spacing.Large}px auto 0`,
@@ -53521,7 +53521,7 @@ ToggleBase.displayName = "ToggleBase";
53521
53521
  const CheckBox = ({ className = "", error, labelPosition = LEFT, size = 16, ...rest }) => {
53522
53522
  const isLabelLeft = labelPosition === LEFT;
53523
53523
  const tokens = useTokens();
53524
- const styles = getStyles$1s(tokens, size, isLabelLeft, error);
53524
+ const styles = getStyles$1u(tokens, size, isLabelLeft, error);
53525
53525
  return /* @__PURE__ */ jsxRuntimeExports.jsx(
53526
53526
  ToggleBase,
53527
53527
  {
@@ -53543,7 +53543,7 @@ const CheckBox = ({ className = "", error, labelPosition = LEFT, size = 16, ...r
53543
53543
  }
53544
53544
  );
53545
53545
  };
53546
- const getStyles$1s = (tokens, size, isLabelLeft, error) => ({
53546
+ const getStyles$1u = (tokens, size, isLabelLeft, error) => ({
53547
53547
  container: {
53548
53548
  "& > input + .togglebase-label:before": {
53549
53549
  boxSizing: "border-box",
@@ -53671,7 +53671,7 @@ const TextInput = forwardRef(
53671
53671
  const tokens = useTokens();
53672
53672
  const labelWidth = !maxLabelWidth ? DEFAULT_LABEL_WIDTH : maxLabelWidth;
53673
53673
  const isMultilineLabel = label?.length > labelWidth ? -tokens.Spacing.Medium : -tokens.Spacing.XSmall;
53674
- const styles = getStyles$1r(tokens, label, showSecondaryLabelBackground, isMultilineLabel);
53674
+ const styles = getStyles$1t(tokens, label, showSecondaryLabelBackground, isMultilineLabel);
53675
53675
  const defaultRef = useRef();
53676
53676
  const inputRef = ref || defaultRef;
53677
53677
  const inputId = id || name;
@@ -53734,7 +53734,7 @@ const TextInput = forwardRef(
53734
53734
  );
53735
53735
  }
53736
53736
  );
53737
- const getStyles$1r = (tokens, label, showSecondaryLabelBackground, isMultilineLabel) => {
53737
+ const getStyles$1t = (tokens, label, showSecondaryLabelBackground, isMultilineLabel) => {
53738
53738
  return {
53739
53739
  container: {
53740
53740
  // paragraph tag reset
@@ -53945,7 +53945,7 @@ const filterValue = (value) => {
53945
53945
  const ColorInput = forwardRef(
53946
53946
  ({ className = "", label, onChange, style, value, ...rest }, ref) => {
53947
53947
  const tokens = useTokens();
53948
- const styles = getStyles$1q(tokens, { value });
53948
+ const styles = getStyles$1s(tokens, { value });
53949
53949
  const defaultRef = useRef();
53950
53950
  const inputRef = ref || defaultRef;
53951
53951
  const handleChange = (e) => {
@@ -53970,7 +53970,7 @@ const ColorInput = forwardRef(
53970
53970
  ] });
53971
53971
  }
53972
53972
  );
53973
- const getStyles$1q = (tokens, { value }) => {
53973
+ const getStyles$1s = (tokens, { value }) => {
53974
53974
  return {
53975
53975
  display: "flex",
53976
53976
  alignItems: "flex-end",
@@ -54072,7 +54072,7 @@ const PasswordInput = forwardRef(
54072
54072
  const [showPassword, setShowPassword] = useState(false);
54073
54073
  const defaultRef = useRef(0);
54074
54074
  const inputRef = ref || defaultRef;
54075
- const styles = getStyles$1p(tokens);
54075
+ const styles = getStyles$1r(tokens);
54076
54076
  const [capsLockDetected, setCapsLockDetected] = useState(false);
54077
54077
  const [validationState, setValidationState] = useState(DEFAULT_VALIDATION_STATE$1);
54078
54078
  const [warningMessage, setWarningMessage] = useState("");
@@ -54158,7 +54158,7 @@ const PasswordInput = forwardRef(
54158
54158
  );
54159
54159
  }
54160
54160
  );
54161
- const getStyles$1p = (tokens) => ({
54161
+ const getStyles$1r = (tokens) => ({
54162
54162
  button: {
54163
54163
  color: tokens.TextColor.ButtonTransparent,
54164
54164
  border: "none",
@@ -54214,7 +54214,7 @@ PasswordInput.displayName = "PasswordInput";
54214
54214
  const Radio = ({ className = "", labelPosition = LEFT, size = 16, ...rest }) => {
54215
54215
  const isLabelLeft = labelPosition === LEFT;
54216
54216
  const tokens = useTokens();
54217
- const styles = getStyles$1o(tokens, size, isLabelLeft);
54217
+ const styles = getStyles$1q(tokens, size, isLabelLeft);
54218
54218
  return /* @__PURE__ */ jsxRuntimeExports.jsx(
54219
54219
  ToggleBase,
54220
54220
  {
@@ -54227,7 +54227,7 @@ const Radio = ({ className = "", labelPosition = LEFT, size = 16, ...rest }) =>
54227
54227
  }
54228
54228
  );
54229
54229
  };
54230
- const getStyles$1o = (tokens, size, isLabelLeft) => ({
54230
+ const getStyles$1q = (tokens, size, isLabelLeft) => ({
54231
54231
  container: {
54232
54232
  "& > input + label": {
54233
54233
  display: "inline-block"
@@ -57265,13 +57265,13 @@ const itemShape = PropTypes$1.shape({
57265
57265
 
57266
57266
  const DescriptionText = ({ buttonPropsId, showDescriptionIcon, description }) => {
57267
57267
  const tokens = useTokens();
57268
- const styles = getStyles$1n(tokens);
57268
+ const styles = getStyles$1p(tokens);
57269
57269
  return /* @__PURE__ */ jsxRuntimeExports.jsxs("p", { className: dist.css(styles.textContainer), id: `${buttonPropsId}-description`, children: [
57270
57270
  showDescriptionIcon ? /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: dist.css(styles.textIconContainer), children: /* @__PURE__ */ jsxRuntimeExports.jsx(Help, { color: tokens.TextColor.InputLabel, size: 12 }) }) : null,
57271
57271
  description
57272
57272
  ] });
57273
57273
  };
57274
- const getStyles$1n = (tokens) => ({
57274
+ const getStyles$1p = (tokens) => ({
57275
57275
  textContainer: {
57276
57276
  display: "flex",
57277
57277
  marginTop: tokens.Spacing.Tiny,
@@ -57294,13 +57294,13 @@ DescriptionText.propTypes = {
57294
57294
 
57295
57295
  const ErrorText = ({ buttonPropsId, showErrorIcon, errorText }) => {
57296
57296
  const tokens = useTokens();
57297
- const styles = getStyles$1m(tokens);
57297
+ const styles = getStyles$1o(tokens);
57298
57298
  return /* @__PURE__ */ jsxRuntimeExports.jsxs("p", { className: dist.css(styles.errorContainer), id: `${buttonPropsId}-error`, children: [
57299
57299
  showErrorIcon ? /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: dist.css(styles.textIconContainer), children: /* @__PURE__ */ jsxRuntimeExports.jsx(CloseFilled, { color: tokens.TextColor.Error, size: 12 }) }) : null,
57300
57300
  errorText
57301
57301
  ] });
57302
57302
  };
57303
- const getStyles$1m = (tokens) => ({
57303
+ const getStyles$1o = (tokens) => ({
57304
57304
  errorContainer: {
57305
57305
  display: "flex",
57306
57306
  marginTop: tokens.Spacing.Tiny,
@@ -57588,7 +57588,7 @@ const Select = ({
57588
57588
  });
57589
57589
  const tokens = useTokens();
57590
57590
  const labelPosition = label?.length > LABEL_LENGTH ? -tokens.Spacing.Medium : -tokens.Spacing.XSmall;
57591
- const styles = getStyles$1l(tokens, labelPosition, label, showSecondaryLabelBackground);
57591
+ const styles = getStyles$1n(tokens, labelPosition, label, showSecondaryLabelBackground);
57592
57592
  const buttonProps = getToggleButtonProps({
57593
57593
  disabled: isDisabled,
57594
57594
  name
@@ -57684,7 +57684,7 @@ const Select = ({
57684
57684
  }
57685
57685
  );
57686
57686
  };
57687
- const getStyles$1l = (tokens, labelPosition, label, showSecondaryLabelBackground) => {
57687
+ const getStyles$1n = (tokens, labelPosition, label, showSecondaryLabelBackground) => {
57688
57688
  return {
57689
57689
  container: {
57690
57690
  "& p": {
@@ -57876,7 +57876,7 @@ const SelectionBox = ({
57876
57876
  variant = "radio"
57877
57877
  }) => {
57878
57878
  const tokens = useTokens();
57879
- const styles = getStyles$1k(borderType, checked, children, disabled, error, tokens);
57879
+ const styles = getStyles$1m(borderType, checked, children, disabled, error, tokens);
57880
57880
  const [isFocused, setIsFocused] = useState(false);
57881
57881
  return /* @__PURE__ */ jsxRuntimeExports.jsxs(
57882
57882
  "label",
@@ -57927,7 +57927,7 @@ const SelectionBox = ({
57927
57927
  }
57928
57928
  );
57929
57929
  };
57930
- const getStyles$1k = (borderType, checked, children, disabled, error, tokens) => ({
57930
+ const getStyles$1m = (borderType, checked, children, disabled, error, tokens) => ({
57931
57931
  wrapper: {
57932
57932
  display: "flex",
57933
57933
  flexDirection: "column",
@@ -58355,7 +58355,7 @@ const FeedbackRadioButton = ({
58355
58355
  }
58356
58356
  };
58357
58357
  const tokens = useTokens();
58358
- const styles = getStyles$1j(tokens);
58358
+ const styles = getStyles$1l(tokens);
58359
58359
  useEffect(() => {
58360
58360
  let feedbackIcon = null;
58361
58361
  if (checked[variant]) {
@@ -58402,7 +58402,7 @@ FeedbackRadioButton.propTypes = {
58402
58402
  value: PropTypes$1.number.isRequired,
58403
58403
  variant: PropTypes$1.string
58404
58404
  };
58405
- const getStyles$1j = (tokens) => {
58405
+ const getStyles$1l = (tokens) => {
58406
58406
  return {
58407
58407
  wrapper: {
58408
58408
  cursor: "pointer",
@@ -58498,7 +58498,7 @@ const UserFeedback = ({
58498
58498
  };
58499
58499
  const [checked, setChecked] = useState(DEFAULT_CHECKED_STATE);
58500
58500
  const tokens = useTokens();
58501
- const styles = getStyles$1i(tokens, hasVisibleLables(feedbackLabels));
58501
+ const styles = getStyles$1k(tokens, hasVisibleLables(feedbackLabels));
58502
58502
  const onChangeHandler = (e) => {
58503
58503
  const checkedVariant = e.target.id;
58504
58504
  const value = e.target.value;
@@ -58576,7 +58576,7 @@ const UserFeedback = ({
58576
58576
  )
58577
58577
  ] });
58578
58578
  };
58579
- const getStyles$1i = (tokens, hasVisibleLables2) => ({
58579
+ const getStyles$1k = (tokens, hasVisibleLables2) => ({
58580
58580
  display: "flex",
58581
58581
  alignItems: "center",
58582
58582
  justifyContent: "space-around",
@@ -58705,7 +58705,7 @@ const InstitutionGridTile = (props) => {
58705
58705
  const width = trueWidth > 400 ? 400 : trueWidth;
58706
58706
  const numColumns = width >= 360 ? 4 : 3;
58707
58707
  const containerWidth = width >= 360 ? (width - margin) / numColumns : (width - margin) / numColumns;
58708
- const styles = getStyles$1h(tokens, containerWidth);
58708
+ const styles = getStyles$1j(tokens, containerWidth);
58709
58709
  return /* @__PURE__ */ jsxRuntimeExports.jsx(
58710
58710
  Button$1,
58711
58711
  {
@@ -58746,7 +58746,7 @@ const InstitutionGridTile = (props) => {
58746
58746
  }
58747
58747
  );
58748
58748
  };
58749
- const getStyles$1h = (tokens, width) => {
58749
+ const getStyles$1j = (tokens, width) => {
58750
58750
  return {
58751
58751
  container: {
58752
58752
  padding: `${tokens.Spacing.Tiny}px ${tokens.Spacing.Tiny}px 0px`,
@@ -58811,7 +58811,7 @@ const InstituionGrid = (props) => {
58811
58811
  const clientUsesOauth = useSelector((state) => state.profiles.clientProfile.uses_oauth ?? false);
58812
58812
  const width = trueWidth;
58813
58813
  const fourColumns = width >= 360;
58814
- const styles = getStyles$1g(fourColumns);
58814
+ const styles = getStyles$1i(fourColumns);
58815
58815
  return /* @__PURE__ */ jsxRuntimeExports.jsx("div", { style: styles.gridContainer, children: institutions.map((institution, i) => {
58816
58816
  return /* @__PURE__ */ jsxRuntimeExports.jsx("div", { children: /* @__PURE__ */ jsxRuntimeExports.jsx(
58817
58817
  InstitutionGridTile,
@@ -58830,7 +58830,7 @@ const InstituionGrid = (props) => {
58830
58830
  ) }, `${i}-${institution.guid}`);
58831
58831
  }) });
58832
58832
  };
58833
- const getStyles$1g = (fourColumns) => {
58833
+ const getStyles$1i = (fourColumns) => {
58834
58834
  return {
58835
58835
  gridContainer: {
58836
58836
  display: "grid",
@@ -58856,7 +58856,7 @@ const PopularInstitutionsList = (props) => {
58856
58856
  } = props;
58857
58857
  const getNextDelay = getDelay();
58858
58858
  const tokens = useTokens();
58859
- const styles = getStyles$1f(tokens);
58859
+ const styles = getStyles$1h(tokens);
58860
58860
  return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { style: styles.listContainer, children: [
58861
58861
  /* @__PURE__ */ jsxRuntimeExports.jsx(SlideDown, { delay: getNextDelay(), children: /* @__PURE__ */ jsxRuntimeExports.jsx(
58862
58862
  InstituionGrid,
@@ -58889,7 +58889,7 @@ const PopularInstitutionsList = (props) => {
58889
58889
  ] })
58890
58890
  ] });
58891
58891
  };
58892
- const getStyles$1f = (tokens) => {
58892
+ const getStyles$1h = (tokens) => {
58893
58893
  return {
58894
58894
  listContainer: {
58895
58895
  display: "flex",
@@ -58965,7 +58965,7 @@ const formatUrl = (url) => {
58965
58965
  const InstitutionTile = (props) => {
58966
58966
  const { institution, selectInstitution, size } = props;
58967
58967
  const tokens = useTokens();
58968
- const styles = getStyles$1e(tokens);
58968
+ const styles = getStyles$1g(tokens);
58969
58969
  return /* @__PURE__ */ jsxRuntimeExports.jsx(
58970
58970
  Button$1,
58971
58971
  {
@@ -59018,7 +59018,7 @@ const InstitutionTile = (props) => {
59018
59018
  }
59019
59019
  );
59020
59020
  };
59021
- const getStyles$1e = (tokens) => {
59021
+ const getStyles$1g = (tokens) => {
59022
59022
  return {
59023
59023
  container: {
59024
59024
  height: "72px",
@@ -59096,7 +59096,7 @@ const SearchedInstitutionsList = (props) => {
59096
59096
  setAriaLiveRegionMessage
59097
59097
  } = props;
59098
59098
  const tokens = useTokens();
59099
- const styles = getStyles$1d(tokens);
59099
+ const styles = getStyles$1f(tokens);
59100
59100
  const getNextDelay = getDelay();
59101
59101
  const clientUsesOauth = useSelector((state) => state.profiles.clientProfile.uses_oauth ?? false);
59102
59102
  const [currentPage, setCurrentPage] = useState(SEARCH_PAGE_DEFAULT);
@@ -59190,7 +59190,7 @@ const SearchedInstitutionsList = (props) => {
59190
59190
  ] })
59191
59191
  ] });
59192
59192
  };
59193
- const getStyles$1d = (tokens) => {
59193
+ const getStyles$1f = (tokens) => {
59194
59194
  return {
59195
59195
  container: {
59196
59196
  background: tokens.BackgroundColor.Container,
@@ -59247,7 +59247,7 @@ const SearchNoResult = (props) => {
59247
59247
  } = props;
59248
59248
  const timerRef = useRef(null);
59249
59249
  const tokens = useTokens();
59250
- const styles = getStyles$1c(tokens);
59250
+ const styles = getStyles$1e(tokens);
59251
59251
  useEffect(() => {
59252
59252
  timerRef.current = setTimeout(() => {
59253
59253
  setAriaLiveRegionMessage(__("No results found for ”%1”", props.searchTerm));
@@ -59312,7 +59312,7 @@ const SearchNoResult = (props) => {
59312
59312
  ] })
59313
59313
  ] });
59314
59314
  };
59315
- const getStyles$1c = (tokens) => {
59315
+ const getStyles$1e = (tokens) => {
59316
59316
  return {
59317
59317
  container: {
59318
59318
  overflow: "auto",
@@ -59351,7 +59351,7 @@ SearchNoResult.propTypes = {
59351
59351
  const SearchFailed = () => {
59352
59352
  useAnalyticsPath(...PageviewInfo.CONNECT_SEARCH_FAILED);
59353
59353
  const tokens = useTokens();
59354
- const styles = getStyles$1b(tokens);
59354
+ const styles = getStyles$1d(tokens);
59355
59355
  return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { style: styles.container, children: [
59356
59356
  /* @__PURE__ */ jsxRuntimeExports.jsx("div", { style: styles.iconContainer, children: /* @__PURE__ */ jsxRuntimeExports.jsx(AttentionFilled, { color: tokens.Color.NeutralWhite, size: 24 }) }),
59357
59357
  /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { style: styles.textContainer, children: [
@@ -59360,7 +59360,7 @@ const SearchFailed = () => {
59360
59360
  ] })
59361
59361
  ] });
59362
59362
  };
59363
- const getStyles$1b = (tokens) => {
59363
+ const getStyles$1d = (tokens) => {
59364
59364
  return {
59365
59365
  container: {
59366
59366
  display: "flex",
@@ -59426,10 +59426,10 @@ const getFlexAlignmentCss = (alignmentKey) => {
59426
59426
 
59427
59427
  const BaseLeft = ({ children, gap, alignSelf, ...rest }) => {
59428
59428
  const tokens = useTokens();
59429
- const styles = getStyles$1a(gap, tokens, alignSelf);
59429
+ const styles = getStyles$1c(gap, tokens, alignSelf);
59430
59430
  return /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: `kyper-utilityrow-base-left ${dist.css(styles.baseLeft)}`, ...rest, children });
59431
59431
  };
59432
- const getStyles$1a = (gap, tokens, alignSelf) => {
59432
+ const getStyles$1c = (gap, tokens, alignSelf) => {
59433
59433
  const alignmentCss = getFlexAlignmentCss(alignSelf);
59434
59434
  return {
59435
59435
  baseLeft: {
@@ -59517,7 +59517,7 @@ const Text = forwardRef(
59517
59517
  }, ref) => {
59518
59518
  const tokens = useTokens();
59519
59519
  const componentAs = as || tagMapper[Element];
59520
- const styles = getStyles$19(tokens, componentAs);
59520
+ const styles = getStyles$1b(tokens, componentAs);
59521
59521
  const defaultRef = useRef();
59522
59522
  const textRef = ref || defaultRef;
59523
59523
  return /* @__PURE__ */ jsxRuntimeExports.jsx(
@@ -59531,7 +59531,7 @@ const Text = forwardRef(
59531
59531
  );
59532
59532
  }
59533
59533
  );
59534
- const getStyles$19 = (tokens, as) => ({
59534
+ const getStyles$1b = (tokens, as) => ({
59535
59535
  wrapper: {
59536
59536
  marginTop: 0,
59537
59537
  marginRight: 0,
@@ -59613,13 +59613,13 @@ const LINK_VARIANTS = {
59613
59613
 
59614
59614
  const BaseMiddle = ({ textColor, subTitle, title, ...rest }) => {
59615
59615
  const tokens = useTokens();
59616
- const styles = getStyles$18(tokens);
59616
+ const styles = getStyles$1a(tokens);
59617
59617
  return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: `kyper-utilityrow-base-middle ${dist.css(styles.baseMiddle)}`, ...rest, children: [
59618
59618
  /* @__PURE__ */ jsxRuntimeExports.jsx(Text, { as: "Body", bold: !!subTitle, color: textColor, "data-ui-test": "kyper-utilityrow-title", children: title }),
59619
59619
  subTitle && /* @__PURE__ */ jsxRuntimeExports.jsx(Text, { as: "XSmall", color: textColor, "data-ui-test": "kyper-utilityrow-subtitle", children: subTitle })
59620
59620
  ] });
59621
59621
  };
59622
- const getStyles$18 = (tokens) => {
59622
+ const getStyles$1a = (tokens) => {
59623
59623
  return {
59624
59624
  baseMiddle: {
59625
59625
  display: "flex",
@@ -59641,10 +59641,10 @@ BaseMiddle.displayName = "BaseMiddle";
59641
59641
 
59642
59642
  const BaseRight = ({ alignSelf, children, gap, ...rest }) => {
59643
59643
  const tokens = useTokens();
59644
- const styles = getStyles$17(alignSelf, gap, tokens);
59644
+ const styles = getStyles$19(alignSelf, gap, tokens);
59645
59645
  return /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: `kyper-utilityrow-base-right ${dist.css(styles.baseRight)}`, ...rest, children });
59646
59646
  };
59647
- const getStyles$17 = (alignSelf, gap, tokens) => {
59647
+ const getStyles$19 = (alignSelf, gap, tokens) => {
59648
59648
  const alignmentCss = getFlexAlignmentCss(alignSelf);
59649
59649
  return {
59650
59650
  baseRight: {
@@ -59681,7 +59681,7 @@ const BaseRow = ({
59681
59681
  ...rest
59682
59682
  }) => {
59683
59683
  const tokens = useTokens();
59684
- const styles = getStyles$16(leftChildren, tokens);
59684
+ const styles = getStyles$18(leftChildren, tokens);
59685
59685
  const Element = onClick ? "button" : "div";
59686
59686
  return /* @__PURE__ */ jsxRuntimeExports.jsxs(
59687
59687
  Element,
@@ -59710,7 +59710,7 @@ const BaseRow = ({
59710
59710
  }
59711
59711
  );
59712
59712
  };
59713
- const getStyles$16 = (leftChildren, tokens) => dist.css({
59713
+ const getStyles$18 = (leftChildren, tokens) => dist.css({
59714
59714
  minHeight: 64,
59715
59715
  width: "100%",
59716
59716
  boxSizing: "border-box",
@@ -59869,7 +59869,7 @@ const SupportMenu = React__default.forwardRef((props, menuRef) => {
59869
59869
  const { selectGeneralSupport, selectRequestInstitution } = props;
59870
59870
  useAnalyticsPath(...PageviewInfo.CONNECT_SUPPORT_MENU);
59871
59871
  const tokens = useTokens();
59872
- const styles = getStyles$15(tokens);
59872
+ const styles = getStyles$17(tokens);
59873
59873
  const getNextDelay = getDelay();
59874
59874
  return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { ref: menuRef, children: [
59875
59875
  /* @__PURE__ */ jsxRuntimeExports.jsx(SlideDown, { delay: getNextDelay(), children: /* @__PURE__ */ jsxRuntimeExports.jsx(x, { style: styles.title, truncate: false, variant: "H2", children: __("Get help") }) }),
@@ -59897,7 +59897,7 @@ const SupportMenu = React__default.forwardRef((props, menuRef) => {
59897
59897
  ] })
59898
59898
  ] });
59899
59899
  });
59900
- const getStyles$15 = (tokens) => ({
59900
+ const getStyles$17 = (tokens) => ({
59901
59901
  title: {
59902
59902
  display: "block",
59903
59903
  marginBottom: tokens.Spacing.XSmall
@@ -59911,7 +59911,7 @@ SupportMenu.displayName = "SupportMenu";
59911
59911
 
59912
59912
  const PrivateAndSecure = ({ style }) => {
59913
59913
  const tokens = useTokens();
59914
- const styles = getStyles$14(tokens);
59914
+ const styles = getStyles$16(tokens);
59915
59915
  return /* @__PURE__ */ jsxRuntimeExports.jsxs(
59916
59916
  "div",
59917
59917
  {
@@ -59925,7 +59925,7 @@ const PrivateAndSecure = ({ style }) => {
59925
59925
  }
59926
59926
  );
59927
59927
  };
59928
- const getStyles$14 = (tokens) => ({
59928
+ const getStyles$16 = (tokens) => ({
59929
59929
  secureSeal: {
59930
59930
  alignContent: "center",
59931
59931
  color: tokens.TextColor.InputLabel,
@@ -59942,7 +59942,7 @@ const getStyles$14 = (tokens) => ({
59942
59942
  const AriaLive = ({ level = "polite", message = "", timeout = 0, ...rest }) => {
59943
59943
  const [ariaLiveRegionMessage, setAriaLiveRegionMessage] = useState("");
59944
59944
  const timerRef = useRef();
59945
- const styles = getStyles$13();
59945
+ const styles = getStyles$15();
59946
59946
  useEffect(() => {
59947
59947
  timerRef.current = setTimeout(() => {
59948
59948
  setAriaLiveRegionMessage(message);
@@ -59954,7 +59954,7 @@ const AriaLive = ({ level = "polite", message = "", timeout = 0, ...rest }) => {
59954
59954
  }, [message]);
59955
59955
  return /* @__PURE__ */ jsxRuntimeExports.jsx("div", { "aria-live": level, style: styles.accessibilityStyles, ...rest, children: ariaLiveRegionMessage });
59956
59956
  };
59957
- const getStyles$13 = () => {
59957
+ const getStyles$15 = () => {
59958
59958
  return {
59959
59959
  accessibilityStyles: {
59960
59960
  border: 0,
@@ -61134,7 +61134,7 @@ const RequestInstitution = React__default.forwardRef((props, requestInstitutionR
61134
61134
  initialForm
61135
61135
  );
61136
61136
  const tokens = useTokens();
61137
- const styles = getStyles$12(tokens);
61137
+ const styles = getStyles$14(tokens);
61138
61138
  const getNextDelay = getDelay();
61139
61139
  useEffect(() => {
61140
61140
  if (submitting) {
@@ -61265,7 +61265,7 @@ const RequestInstitution = React__default.forwardRef((props, requestInstitutionR
61265
61265
  ] })
61266
61266
  ] });
61267
61267
  });
61268
- const getStyles$12 = (tokens) => ({
61268
+ const getStyles$14 = (tokens) => ({
61269
61269
  title: {
61270
61270
  display: "block",
61271
61271
  marginBottom: tokens.Spacing.XSmall
@@ -61327,7 +61327,7 @@ const GeneralSupport = React__default.forwardRef((props, generalSupportRef) => {
61327
61327
  initialForm
61328
61328
  );
61329
61329
  const tokens = useTokens();
61330
- const styles = getStyles$11(tokens);
61330
+ const styles = getStyles$13(tokens);
61331
61331
  const getNextDelay = getDelay();
61332
61332
  useEffect(() => {
61333
61333
  if (submitting) {
@@ -61437,7 +61437,7 @@ const GeneralSupport = React__default.forwardRef((props, generalSupportRef) => {
61437
61437
  )
61438
61438
  ] });
61439
61439
  });
61440
- const getStyles$11 = (tokens) => ({
61440
+ const getStyles$13 = (tokens) => ({
61441
61441
  title: {
61442
61442
  display: "block",
61443
61443
  marginBottom: tokens.Spacing.XSmall
@@ -61471,7 +61471,7 @@ const SupportSuccess = React__default.forwardRef((props, supportSuccessRef) => {
61471
61471
  const { email, handleClose } = props;
61472
61472
  useAnalyticsPath(...PageviewInfo.CONNECT_SUPPORT_SUCCESS);
61473
61473
  const tokens = useTokens();
61474
- const styles = getStyles$10(tokens);
61474
+ const styles = getStyles$12(tokens);
61475
61475
  const getNextDelay = getDelay();
61476
61476
  const onClose = () => fadeOut(supportSuccessRef.current, "up", 300).then(() => handleClose());
61477
61477
  return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { ref: supportSuccessRef, children: [
@@ -61498,7 +61498,7 @@ const SupportSuccess = React__default.forwardRef((props, supportSuccessRef) => {
61498
61498
  ] })
61499
61499
  ] });
61500
61500
  });
61501
- const getStyles$10 = (tokens) => ({
61501
+ const getStyles$12 = (tokens) => ({
61502
61502
  title: {
61503
61503
  display: "block",
61504
61504
  marginBottom: tokens.Spacing.XSmall
@@ -61533,7 +61533,7 @@ const Support = React__default.forwardRef((props, supportNavRef) => {
61533
61533
  const generalSupportRef = useRef(null);
61534
61534
  const supportSuccessRef = useRef(null);
61535
61535
  const tokens = useTokens();
61536
- const styles = getStyles$$(tokens);
61536
+ const styles = getStyles$11(tokens);
61537
61537
  useImperativeHandle(supportNavRef, () => {
61538
61538
  return {
61539
61539
  handleCloseSupport() {
@@ -61595,7 +61595,7 @@ const Support = React__default.forwardRef((props, supportNavRef) => {
61595
61595
  )
61596
61596
  ] }) });
61597
61597
  });
61598
- const getStyles$$ = (tokens) => ({
61598
+ const getStyles$11 = (tokens) => ({
61599
61599
  container: {
61600
61600
  backgroundColor: tokens.BackgroundColor.Container,
61601
61601
  minHeight: "100%",
@@ -61842,7 +61842,7 @@ const Search$2 = React__default.forwardRef((props, navigationRef) => {
61842
61842
  }
61843
61843
  }, 500);
61844
61844
  const tokens = useTokens();
61845
- const styles = getStyles$_(tokens, state.currentView);
61845
+ const styles = getStyles$10(tokens, state.currentView);
61846
61846
  if (state.currentView === SEARCH_VIEWS.OOPS) {
61847
61847
  throw state.error;
61848
61848
  }
@@ -61963,7 +61963,7 @@ const Search$2 = React__default.forwardRef((props, navigationRef) => {
61963
61963
  /* @__PURE__ */ jsxRuntimeExports.jsx(AriaLive, { level: "assertive", message: ariaLiveRegionMessage })
61964
61964
  ] });
61965
61965
  });
61966
- const getStyles$_ = (tokens) => {
61966
+ const getStyles$10 = (tokens) => {
61967
61967
  return {
61968
61968
  searchBar: {
61969
61969
  marginBottom: `${tokens.Spacing.Small}px`
@@ -62066,7 +62066,7 @@ const Button = forwardRef(
62066
62066
  ...rest
62067
62067
  }, ref) => {
62068
62068
  const tokens = useTokens();
62069
- const styles = getStyles$Z(tokens, disabled, size);
62069
+ const styles = getStyles$$(tokens, disabled, size);
62070
62070
  return /* @__PURE__ */ jsxRuntimeExports.jsx(
62071
62071
  "button",
62072
62072
  {
@@ -62081,7 +62081,7 @@ const Button = forwardRef(
62081
62081
  );
62082
62082
  }
62083
62083
  );
62084
- const getStyles$Z = (tokens, disabled, size) => ({
62084
+ const getStyles$$ = (tokens, disabled, size) => ({
62085
62085
  display: "flex",
62086
62086
  alignItems: "center",
62087
62087
  justifyContent: "center",
@@ -62280,7 +62280,7 @@ const IconButton = forwardRef(
62280
62280
  ...rest
62281
62281
  }, ref) => {
62282
62282
  const tokens = useTokens();
62283
- const styles = getStyles$Y(tokens, { disabled, largeTouchTarget, variant });
62283
+ const styles = getStyles$_(tokens, { disabled, largeTouchTarget, variant });
62284
62284
  return /* @__PURE__ */ jsxRuntimeExports.jsx(
62285
62285
  "button",
62286
62286
  {
@@ -62295,7 +62295,7 @@ const IconButton = forwardRef(
62295
62295
  );
62296
62296
  }
62297
62297
  );
62298
- const getStyles$Y = (tokens, { disabled, largeTouchTarget, variant }) => ({
62298
+ const getStyles$_ = (tokens, { disabled, largeTouchTarget, variant }) => ({
62299
62299
  display: "inline-flex",
62300
62300
  alignItems: "center",
62301
62301
  justifyContent: "center",
@@ -62401,7 +62401,7 @@ function MessageBox({
62401
62401
  ...rest
62402
62402
  }) {
62403
62403
  const tokens = useTokens();
62404
- const styles = getStyles$X(borderRadius, title, tokens, variant);
62404
+ const styles = getStyles$Z(borderRadius, title, tokens, variant);
62405
62405
  return /* @__PURE__ */ jsxRuntimeExports.jsxs(
62406
62406
  "div",
62407
62407
  {
@@ -62432,7 +62432,7 @@ function MessageBox({
62432
62432
  }
62433
62433
  );
62434
62434
  }
62435
- const getStyles$X = (borderRadius, title, tokens, variant) => ({
62435
+ const getStyles$Z = (borderRadius, title, tokens, variant) => ({
62436
62436
  messageBox: {
62437
62437
  position: "relative",
62438
62438
  color: tokens.TextColor.Default,
@@ -62506,7 +62506,7 @@ MessageBox.displayName = "MessageBox";
62506
62506
  const InstitutionBlock = ({ institution, style }) => {
62507
62507
  const { guid, logo_url, name, url } = institution;
62508
62508
  const tokens = useTokens();
62509
- const styles = getStyles$W(tokens);
62509
+ const styles = getStyles$Y(tokens);
62510
62510
  return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { "data-test": "institution-block", style: { ...styles.institutionBlock, ...style }, children: [
62511
62511
  /* @__PURE__ */ jsxRuntimeExports.jsx(
62512
62512
  De,
@@ -62524,7 +62524,7 @@ const InstitutionBlock = ({ institution, style }) => {
62524
62524
  ] })
62525
62525
  ] });
62526
62526
  };
62527
- const getStyles$W = (tokens) => {
62527
+ const getStyles$Y = (tokens) => {
62528
62528
  return {
62529
62529
  institutionBlock: {
62530
62530
  display: "flex",
@@ -62563,14 +62563,14 @@ InstitutionBlock.propTypes = {
62563
62563
 
62564
62564
  const ViewTitle = ({ connectionStatus, title }) => {
62565
62565
  const tokens = useTokens();
62566
- const styles = getStyles$V(tokens);
62566
+ const styles = getStyles$X(tokens);
62567
62567
  return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { style: styles.container, children: [
62568
62568
  /* @__PURE__ */ jsxRuntimeExports.jsx(x, { bold: true, component: "h2", "data-test": "title-text", truncate: false, variant: "H2", children: title }),
62569
62569
  connectionStatus === ReadableStatuses$1.DEGRADED && /* @__PURE__ */ jsxRuntimeExports.jsx(InfoFilled, { color: tokens.BackgroundColor.MessageBoxHelp, size: 24 }),
62570
62570
  connectionStatus === ReadableStatuses$1.REJECTED && /* @__PURE__ */ jsxRuntimeExports.jsx(AttentionFilled, { color: tokens.BackgroundColor.MessageBoxError, size: 24 })
62571
62571
  ] });
62572
62572
  };
62573
- const getStyles$V = (tokens) => ({
62573
+ const getStyles$X = (tokens) => ({
62574
62574
  container: {
62575
62575
  display: "flex",
62576
62576
  justifyContent: "space-between",
@@ -62602,7 +62602,7 @@ const MFAOptions = (props) => {
62602
62602
  return onSubmit(credentialsToSubmit);
62603
62603
  };
62604
62604
  const tokens = useTokens();
62605
- const styles = getStyles$U(tokens);
62605
+ const styles = getStyles$W(tokens);
62606
62606
  const mfaLabel = mfaCredentials.map((credential) => credential.label);
62607
62607
  const dynamicLabel = mfaLabel[0] ? mfaLabel[0] : __("Choose an authentication method.");
62608
62608
  return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
@@ -62667,7 +62667,7 @@ const MFAOptions = (props) => {
62667
62667
  )
62668
62668
  ] });
62669
62669
  };
62670
- const getStyles$U = (tokens) => {
62670
+ const getStyles$W = (tokens) => {
62671
62671
  return {
62672
62672
  label: {
62673
62673
  marginBottom: tokens.Spacing.Medium
@@ -62752,7 +62752,7 @@ const DefaultMFA = (props) => {
62752
62752
  focusElement(button);
62753
62753
  }, []);
62754
62754
  const tokens = useTokens();
62755
- const styles = getStyles$T(tokens);
62755
+ const styles = getStyles$V(tokens);
62756
62756
  const credentials = mfaCredentials.map((credential) => credential);
62757
62757
  const initialFormValues = buildInitialValues$1(credentials);
62758
62758
  const formSchema = buildFormSchema$1(credentials);
@@ -62835,7 +62835,7 @@ const DefaultMFA = (props) => {
62835
62835
  )
62836
62836
  ] });
62837
62837
  };
62838
- const getStyles$T = (tokens) => {
62838
+ const getStyles$V = (tokens) => {
62839
62839
  return {
62840
62840
  label: {
62841
62841
  marginBottom: tokens.Spacing.Large
@@ -62878,7 +62878,7 @@ const MFAImages = (props) => {
62878
62878
  focusElement(button);
62879
62879
  }, []);
62880
62880
  const tokens = useTokens();
62881
- const styles = getStyles$S(tokens);
62881
+ const styles = getStyles$U(tokens);
62882
62882
  const [selectedOption, setSelectedOption] = useState({});
62883
62883
  const [credentialsToSubmit, setCredentials] = useState(
62884
62884
  mfaCredentials.map((cred) => ({ guid: cred.guid, value: null }))
@@ -62959,7 +62959,7 @@ const MFAImages = (props) => {
62959
62959
  )
62960
62960
  ] });
62961
62961
  };
62962
- const getStyles$S = (tokens) => {
62962
+ const getStyles$U = (tokens) => {
62963
62963
  return {
62964
62964
  label: {
62965
62965
  marginBottom: tokens.Spacing.Medium
@@ -63056,7 +63056,7 @@ const MFAForm = (props) => {
63056
63056
  const mfaCredentials = _get(currentMember, "mfa.credentials", []);
63057
63057
  const mfaType = getMFAFieldType(mfaCredentials);
63058
63058
  const isSAS = mfaCredentials[0].external_id === "single_account_select";
63059
- const styles = getStyles$R(tokens, isSAS);
63059
+ const styles = getStyles$T(tokens, isSAS);
63060
63060
  const handleSubmit = (credentials) => {
63061
63061
  const posthogEventMetadata = {
63062
63062
  institution_guid: institution.guid,
@@ -63110,7 +63110,7 @@ const MFAForm = (props) => {
63110
63110
  /* @__PURE__ */ jsxRuntimeExports.jsx("form", { onSubmit: (e) => e.preventDefault(), children: Form })
63111
63111
  ] });
63112
63112
  };
63113
- const getStyles$R = (tokens, isSAS) => {
63113
+ const getStyles$T = (tokens, isSAS) => {
63114
63114
  return {
63115
63115
  container: {
63116
63116
  display: "flex",
@@ -63152,7 +63152,7 @@ const MFAStep = React__default.forwardRef((props, navigationRef) => {
63152
63152
  const { api } = useApi();
63153
63153
  const mfaCredentials = _get(currentMember, "mfa.credentials", []);
63154
63154
  const tokens = useTokens();
63155
- const styles = getStyles$Q(tokens);
63155
+ const styles = getStyles$S(tokens);
63156
63156
  const getNextDelay = getDelay();
63157
63157
  useImperativeHandle(navigationRef, () => {
63158
63158
  return {
@@ -63256,7 +63256,7 @@ MFAStep.propTypes = {
63256
63256
  onGoBack: PropTypes$1.func.isRequired
63257
63257
  };
63258
63258
  MFAStep.displayName = "MFAStep";
63259
- const getStyles$Q = (tokens) => {
63259
+ const getStyles$S = (tokens) => {
63260
63260
  return {
63261
63261
  goBackButton: {
63262
63262
  marginRight: tokens.Spacing.Large,
@@ -63289,7 +63289,7 @@ const Export = createSvgIcon$2(({ color }) => /* @__PURE__ */ jsxRuntimeExports.
63289
63289
  ] }));
63290
63290
  Export.displayName = "Export";
63291
63291
 
63292
- /*! @license DOMPurify 3.1.6 | (c) Cure53 and other contributors | Released under the Apache license 2.0 and Mozilla Public License 2.0 | github.com/cure53/DOMPurify/blob/3.1.6/LICENSE */
63292
+ /*! @license DOMPurify 3.2.4 | (c) Cure53 and other contributors | Released under the Apache license 2.0 and Mozilla Public License 2.0 | github.com/cure53/DOMPurify/blob/3.2.4/LICENSE */
63293
63293
 
63294
63294
  const {
63295
63295
  entries,
@@ -63328,8 +63328,10 @@ if (!construct) {
63328
63328
  };
63329
63329
  }
63330
63330
  const arrayForEach = unapply(Array.prototype.forEach);
63331
+ const arrayLastIndexOf = unapply(Array.prototype.lastIndexOf);
63331
63332
  const arrayPop = unapply(Array.prototype.pop);
63332
63333
  const arrayPush = unapply(Array.prototype.push);
63334
+ const arraySplice = unapply(Array.prototype.splice);
63333
63335
  const stringToLowerCase = unapply(String.prototype.toLowerCase);
63334
63336
  const stringToString = unapply(String.prototype.toString);
63335
63337
  const stringMatch = unapply(String.prototype.match);
@@ -63339,12 +63341,11 @@ const stringTrim = unapply(String.prototype.trim);
63339
63341
  const objectHasOwnProperty = unapply(Object.prototype.hasOwnProperty);
63340
63342
  const regExpTest = unapply(RegExp.prototype.test);
63341
63343
  const typeErrorCreate = unconstruct(TypeError);
63342
-
63343
63344
  /**
63344
63345
  * Creates a new function that calls the given function with a specified thisArg and arguments.
63345
63346
  *
63346
- * @param {Function} func - The function to be wrapped and called.
63347
- * @returns {Function} A new function that calls the given function with a specified thisArg and arguments.
63347
+ * @param func - The function to be wrapped and called.
63348
+ * @returns A new function that calls the given function with a specified thisArg and arguments.
63348
63349
  */
63349
63350
  function unapply(func) {
63350
63351
  return function (thisArg) {
@@ -63354,12 +63355,11 @@ function unapply(func) {
63354
63355
  return apply(func, thisArg, args);
63355
63356
  };
63356
63357
  }
63357
-
63358
63358
  /**
63359
63359
  * Creates a new function that constructs an instance of the given constructor function with the provided arguments.
63360
63360
  *
63361
- * @param {Function} func - The constructor function to be wrapped and called.
63362
- * @returns {Function} A new function that constructs an instance of the given constructor function with the provided arguments.
63361
+ * @param func - The constructor function to be wrapped and called.
63362
+ * @returns A new function that constructs an instance of the given constructor function with the provided arguments.
63363
63363
  */
63364
63364
  function unconstruct(func) {
63365
63365
  return function () {
@@ -63369,14 +63369,13 @@ function unconstruct(func) {
63369
63369
  return construct(func, args);
63370
63370
  };
63371
63371
  }
63372
-
63373
63372
  /**
63374
63373
  * Add properties to a lookup table
63375
63374
  *
63376
- * @param {Object} set - The set to which elements will be added.
63377
- * @param {Array} array - The array containing elements to be added to the set.
63378
- * @param {Function} transformCaseFunc - An optional function to transform the case of each element before adding to the set.
63379
- * @returns {Object} The modified set with added elements.
63375
+ * @param set - The set to which elements will be added.
63376
+ * @param array - The array containing elements to be added to the set.
63377
+ * @param transformCaseFunc - An optional function to transform the case of each element before adding to the set.
63378
+ * @returns The modified set with added elements.
63380
63379
  */
63381
63380
  function addToSet(set, array) {
63382
63381
  let transformCaseFunc = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : stringToLowerCase;
@@ -63403,12 +63402,11 @@ function addToSet(set, array) {
63403
63402
  }
63404
63403
  return set;
63405
63404
  }
63406
-
63407
63405
  /**
63408
63406
  * Clean up an array to harden against CSPP
63409
63407
  *
63410
- * @param {Array} array - The array to be cleaned.
63411
- * @returns {Array} The cleaned version of the array
63408
+ * @param array - The array to be cleaned.
63409
+ * @returns The cleaned version of the array
63412
63410
  */
63413
63411
  function cleanArray(array) {
63414
63412
  for (let index = 0; index < array.length; index++) {
@@ -63419,12 +63417,11 @@ function cleanArray(array) {
63419
63417
  }
63420
63418
  return array;
63421
63419
  }
63422
-
63423
63420
  /**
63424
63421
  * Shallow clone an object
63425
63422
  *
63426
- * @param {Object} object - The object to be cloned.
63427
- * @returns {Object} A new object that copies the original.
63423
+ * @param object - The object to be cloned.
63424
+ * @returns A new object that copies the original.
63428
63425
  */
63429
63426
  function clone(object) {
63430
63427
  const newObject = create(null);
@@ -63442,13 +63439,12 @@ function clone(object) {
63442
63439
  }
63443
63440
  return newObject;
63444
63441
  }
63445
-
63446
63442
  /**
63447
63443
  * This method automatically checks if the prop is function or getter and behaves accordingly.
63448
63444
  *
63449
- * @param {Object} object - The object to look up the getter function in its prototype chain.
63450
- * @param {String} prop - The property name for which to find the getter function.
63451
- * @returns {Function} The getter function found in the prototype chain or a fallback function.
63445
+ * @param object - The object to look up the getter function in its prototype chain.
63446
+ * @param prop - The property name for which to find the getter function.
63447
+ * @returns The getter function found in the prototype chain or a fallback function.
63452
63448
  */
63453
63449
  function lookupGetter(object, prop) {
63454
63450
  while (object !== null) {
@@ -63470,33 +63466,29 @@ function lookupGetter(object, prop) {
63470
63466
  }
63471
63467
 
63472
63468
  const html$1 = freeze(['a', 'abbr', 'acronym', 'address', 'area', 'article', 'aside', 'audio', 'b', 'bdi', 'bdo', 'big', 'blink', 'blockquote', 'body', 'br', 'button', 'canvas', 'caption', 'center', 'cite', 'code', 'col', 'colgroup', 'content', 'data', 'datalist', 'dd', 'decorator', 'del', 'details', 'dfn', 'dialog', 'dir', 'div', 'dl', 'dt', 'element', 'em', 'fieldset', 'figcaption', 'figure', 'font', 'footer', 'form', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'head', 'header', 'hgroup', 'hr', 'html', 'i', 'img', 'input', 'ins', 'kbd', 'label', 'legend', 'li', 'main', 'map', 'mark', 'marquee', 'menu', 'menuitem', 'meter', 'nav', 'nobr', 'ol', 'optgroup', 'option', 'output', 'p', 'picture', 'pre', 'progress', 'q', 'rp', 'rt', 'ruby', 's', 'samp', 'section', 'select', 'shadow', 'small', 'source', 'spacer', 'span', 'strike', 'strong', 'style', 'sub', 'summary', 'sup', 'table', 'tbody', 'td', 'template', 'textarea', 'tfoot', 'th', 'thead', 'time', 'tr', 'track', 'tt', 'u', 'ul', 'var', 'video', 'wbr']);
63473
-
63474
- // SVG
63475
63469
  const svg$1 = freeze(['svg', 'a', 'altglyph', 'altglyphdef', 'altglyphitem', 'animatecolor', 'animatemotion', 'animatetransform', 'circle', 'clippath', 'defs', 'desc', 'ellipse', 'filter', 'font', 'g', 'glyph', 'glyphref', 'hkern', 'image', 'line', 'lineargradient', 'marker', 'mask', 'metadata', 'mpath', 'path', 'pattern', 'polygon', 'polyline', 'radialgradient', 'rect', 'stop', 'style', 'switch', 'symbol', 'text', 'textpath', 'title', 'tref', 'tspan', 'view', 'vkern']);
63476
63470
  const svgFilters = freeze(['feBlend', 'feColorMatrix', 'feComponentTransfer', 'feComposite', 'feConvolveMatrix', 'feDiffuseLighting', 'feDisplacementMap', 'feDistantLight', 'feDropShadow', 'feFlood', 'feFuncA', 'feFuncB', 'feFuncG', 'feFuncR', 'feGaussianBlur', 'feImage', 'feMerge', 'feMergeNode', 'feMorphology', 'feOffset', 'fePointLight', 'feSpecularLighting', 'feSpotLight', 'feTile', 'feTurbulence']);
63477
-
63478
63471
  // List of SVG elements that are disallowed by default.
63479
63472
  // We still need to know them so that we can do namespace
63480
63473
  // checks properly in case one wants to add them to
63481
63474
  // allow-list.
63482
63475
  const svgDisallowed = freeze(['animate', 'color-profile', 'cursor', 'discard', 'font-face', 'font-face-format', 'font-face-name', 'font-face-src', 'font-face-uri', 'foreignobject', 'hatch', 'hatchpath', 'mesh', 'meshgradient', 'meshpatch', 'meshrow', 'missing-glyph', 'script', 'set', 'solidcolor', 'unknown', 'use']);
63483
63476
  const mathMl$1 = freeze(['math', 'menclose', 'merror', 'mfenced', 'mfrac', 'mglyph', 'mi', 'mlabeledtr', 'mmultiscripts', 'mn', 'mo', 'mover', 'mpadded', 'mphantom', 'mroot', 'mrow', 'ms', 'mspace', 'msqrt', 'mstyle', 'msub', 'msup', 'msubsup', 'mtable', 'mtd', 'mtext', 'mtr', 'munder', 'munderover', 'mprescripts']);
63484
-
63485
63477
  // Similarly to SVG, we want to know all MathML elements,
63486
63478
  // even those that we disallow by default.
63487
63479
  const mathMlDisallowed = freeze(['maction', 'maligngroup', 'malignmark', 'mlongdiv', 'mscarries', 'mscarry', 'msgroup', 'mstack', 'msline', 'msrow', 'semantics', 'annotation', 'annotation-xml', 'mprescripts', 'none']);
63488
63480
  const text = freeze(['#text']);
63489
63481
 
63490
63482
  const html = freeze(['accept', 'action', 'align', 'alt', 'autocapitalize', 'autocomplete', 'autopictureinpicture', 'autoplay', 'background', 'bgcolor', 'border', 'capture', 'cellpadding', 'cellspacing', 'checked', 'cite', 'class', 'clear', 'color', 'cols', 'colspan', 'controls', 'controlslist', 'coords', 'crossorigin', 'datetime', 'decoding', 'default', 'dir', 'disabled', 'disablepictureinpicture', 'disableremoteplayback', 'download', 'draggable', 'enctype', 'enterkeyhint', 'face', 'for', 'headers', 'height', 'hidden', 'high', 'href', 'hreflang', 'id', 'inputmode', 'integrity', 'ismap', 'kind', 'label', 'lang', 'list', 'loading', 'loop', 'low', 'max', 'maxlength', 'media', 'method', 'min', 'minlength', 'multiple', 'muted', 'name', 'nonce', 'noshade', 'novalidate', 'nowrap', 'open', 'optimum', 'pattern', 'placeholder', 'playsinline', 'popover', 'popovertarget', 'popovertargetaction', 'poster', 'preload', 'pubdate', 'radiogroup', 'readonly', 'rel', 'required', 'rev', 'reversed', 'role', 'rows', 'rowspan', 'spellcheck', 'scope', 'selected', 'shape', 'size', 'sizes', 'span', 'srclang', 'start', 'src', 'srcset', 'step', 'style', 'summary', 'tabindex', 'title', 'translate', 'type', 'usemap', 'valign', 'value', 'width', 'wrap', 'xmlns', 'slot']);
63491
- const svg = freeze(['accent-height', 'accumulate', 'additive', 'alignment-baseline', 'ascent', 'attributename', 'attributetype', 'azimuth', 'basefrequency', 'baseline-shift', 'begin', 'bias', 'by', 'class', 'clip', 'clippathunits', 'clip-path', 'clip-rule', 'color', 'color-interpolation', 'color-interpolation-filters', 'color-profile', 'color-rendering', 'cx', 'cy', 'd', 'dx', 'dy', 'diffuseconstant', 'direction', 'display', 'divisor', 'dur', 'edgemode', 'elevation', 'end', 'fill', 'fill-opacity', 'fill-rule', 'filter', 'filterunits', 'flood-color', 'flood-opacity', 'font-family', 'font-size', 'font-size-adjust', 'font-stretch', 'font-style', 'font-variant', 'font-weight', 'fx', 'fy', 'g1', 'g2', 'glyph-name', 'glyphref', 'gradientunits', 'gradienttransform', 'height', 'href', 'id', 'image-rendering', 'in', 'in2', 'k', 'k1', 'k2', 'k3', 'k4', 'kerning', 'keypoints', 'keysplines', 'keytimes', 'lang', 'lengthadjust', 'letter-spacing', 'kernelmatrix', 'kernelunitlength', 'lighting-color', 'local', 'marker-end', 'marker-mid', 'marker-start', 'markerheight', 'markerunits', 'markerwidth', 'maskcontentunits', 'maskunits', 'max', 'mask', 'media', 'method', 'mode', 'min', 'name', 'numoctaves', 'offset', 'operator', 'opacity', 'order', 'orient', 'orientation', 'origin', 'overflow', 'paint-order', 'path', 'pathlength', 'patterncontentunits', 'patterntransform', 'patternunits', 'points', 'preservealpha', 'preserveaspectratio', 'primitiveunits', 'r', 'rx', 'ry', 'radius', 'refx', 'refy', 'repeatcount', 'repeatdur', 'restart', 'result', 'rotate', 'scale', 'seed', 'shape-rendering', 'specularconstant', 'specularexponent', 'spreadmethod', 'startoffset', 'stddeviation', 'stitchtiles', 'stop-color', 'stop-opacity', 'stroke-dasharray', 'stroke-dashoffset', 'stroke-linecap', 'stroke-linejoin', 'stroke-miterlimit', 'stroke-opacity', 'stroke', 'stroke-width', 'style', 'surfacescale', 'systemlanguage', 'tabindex', 'targetx', 'targety', 'transform', 'transform-origin', 'text-anchor', 'text-decoration', 'text-rendering', 'textlength', 'type', 'u1', 'u2', 'unicode', 'values', 'viewbox', 'visibility', 'version', 'vert-adv-y', 'vert-origin-x', 'vert-origin-y', 'width', 'word-spacing', 'wrap', 'writing-mode', 'xchannelselector', 'ychannelselector', 'x', 'x1', 'x2', 'xmlns', 'y', 'y1', 'y2', 'z', 'zoomandpan']);
63483
+ const svg = freeze(['accent-height', 'accumulate', 'additive', 'alignment-baseline', 'amplitude', 'ascent', 'attributename', 'attributetype', 'azimuth', 'basefrequency', 'baseline-shift', 'begin', 'bias', 'by', 'class', 'clip', 'clippathunits', 'clip-path', 'clip-rule', 'color', 'color-interpolation', 'color-interpolation-filters', 'color-profile', 'color-rendering', 'cx', 'cy', 'd', 'dx', 'dy', 'diffuseconstant', 'direction', 'display', 'divisor', 'dur', 'edgemode', 'elevation', 'end', 'exponent', 'fill', 'fill-opacity', 'fill-rule', 'filter', 'filterunits', 'flood-color', 'flood-opacity', 'font-family', 'font-size', 'font-size-adjust', 'font-stretch', 'font-style', 'font-variant', 'font-weight', 'fx', 'fy', 'g1', 'g2', 'glyph-name', 'glyphref', 'gradientunits', 'gradienttransform', 'height', 'href', 'id', 'image-rendering', 'in', 'in2', 'intercept', 'k', 'k1', 'k2', 'k3', 'k4', 'kerning', 'keypoints', 'keysplines', 'keytimes', 'lang', 'lengthadjust', 'letter-spacing', 'kernelmatrix', 'kernelunitlength', 'lighting-color', 'local', 'marker-end', 'marker-mid', 'marker-start', 'markerheight', 'markerunits', 'markerwidth', 'maskcontentunits', 'maskunits', 'max', 'mask', 'media', 'method', 'mode', 'min', 'name', 'numoctaves', 'offset', 'operator', 'opacity', 'order', 'orient', 'orientation', 'origin', 'overflow', 'paint-order', 'path', 'pathlength', 'patterncontentunits', 'patterntransform', 'patternunits', 'points', 'preservealpha', 'preserveaspectratio', 'primitiveunits', 'r', 'rx', 'ry', 'radius', 'refx', 'refy', 'repeatcount', 'repeatdur', 'restart', 'result', 'rotate', 'scale', 'seed', 'shape-rendering', 'slope', 'specularconstant', 'specularexponent', 'spreadmethod', 'startoffset', 'stddeviation', 'stitchtiles', 'stop-color', 'stop-opacity', 'stroke-dasharray', 'stroke-dashoffset', 'stroke-linecap', 'stroke-linejoin', 'stroke-miterlimit', 'stroke-opacity', 'stroke', 'stroke-width', 'style', 'surfacescale', 'systemlanguage', 'tabindex', 'tablevalues', 'targetx', 'targety', 'transform', 'transform-origin', 'text-anchor', 'text-decoration', 'text-rendering', 'textlength', 'type', 'u1', 'u2', 'unicode', 'values', 'viewbox', 'visibility', 'version', 'vert-adv-y', 'vert-origin-x', 'vert-origin-y', 'width', 'word-spacing', 'wrap', 'writing-mode', 'xchannelselector', 'ychannelselector', 'x', 'x1', 'x2', 'xmlns', 'y', 'y1', 'y2', 'z', 'zoomandpan']);
63492
63484
  const mathMl = freeze(['accent', 'accentunder', 'align', 'bevelled', 'close', 'columnsalign', 'columnlines', 'columnspan', 'denomalign', 'depth', 'dir', 'display', 'displaystyle', 'encoding', 'fence', 'frame', 'height', 'href', 'id', 'largeop', 'length', 'linethickness', 'lspace', 'lquote', 'mathbackground', 'mathcolor', 'mathsize', 'mathvariant', 'maxsize', 'minsize', 'movablelimits', 'notation', 'numalign', 'open', 'rowalign', 'rowlines', 'rowspacing', 'rowspan', 'rspace', 'rquote', 'scriptlevel', 'scriptminsize', 'scriptsizemultiplier', 'selection', 'separator', 'separators', 'stretchy', 'subscriptshift', 'supscriptshift', 'symmetric', 'voffset', 'width', 'xmlns']);
63493
63485
  const xml = freeze(['xlink:href', 'xml:id', 'xlink:title', 'xml:space', 'xmlns:xlink']);
63494
63486
 
63495
63487
  // eslint-disable-next-line unicorn/better-regex
63496
63488
  const MUSTACHE_EXPR = seal(/\{\{[\w\W]*|[\w\W]*\}\}/gm); // Specify template detection regex for SAFE_FOR_TEMPLATES mode
63497
63489
  const ERB_EXPR = seal(/<%[\w\W]*|[\w\W]*%>/gm);
63498
- const TMPLIT_EXPR = seal(/\${[\w\W]*}/gm);
63499
- const DATA_ATTR = seal(/^data-[\-\w.\u00B7-\uFFFF]/); // eslint-disable-line no-useless-escape
63490
+ const TMPLIT_EXPR = seal(/\$\{[\w\W]*/gm); // eslint-disable-line unicorn/better-regex
63491
+ const DATA_ATTR = seal(/^data-[\-\w.\u00B7-\uFFFF]+$/); // eslint-disable-line no-useless-escape
63500
63492
  const ARIA_ATTR = seal(/^aria-[\-\w]+$/); // eslint-disable-line no-useless-escape
63501
63493
  const IS_ALLOWED_URI = seal(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|sms|cid|xmpp):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i // eslint-disable-line no-useless-escape
63502
63494
  );
@@ -63508,18 +63500,19 @@ const CUSTOM_ELEMENT = seal(/^[a-z][.\w]*(-[.\w]+)+$/i);
63508
63500
 
63509
63501
  var EXPRESSIONS = /*#__PURE__*/Object.freeze({
63510
63502
  __proto__: null,
63511
- MUSTACHE_EXPR: MUSTACHE_EXPR,
63512
- ERB_EXPR: ERB_EXPR,
63513
- TMPLIT_EXPR: TMPLIT_EXPR,
63514
- DATA_ATTR: DATA_ATTR,
63515
63503
  ARIA_ATTR: ARIA_ATTR,
63516
- IS_ALLOWED_URI: IS_ALLOWED_URI,
63517
- IS_SCRIPT_OR_DATA: IS_SCRIPT_OR_DATA,
63518
63504
  ATTR_WHITESPACE: ATTR_WHITESPACE,
63505
+ CUSTOM_ELEMENT: CUSTOM_ELEMENT,
63506
+ DATA_ATTR: DATA_ATTR,
63519
63507
  DOCTYPE_NAME: DOCTYPE_NAME,
63520
- CUSTOM_ELEMENT: CUSTOM_ELEMENT
63508
+ ERB_EXPR: ERB_EXPR,
63509
+ IS_ALLOWED_URI: IS_ALLOWED_URI,
63510
+ IS_SCRIPT_OR_DATA: IS_SCRIPT_OR_DATA,
63511
+ MUSTACHE_EXPR: MUSTACHE_EXPR,
63512
+ TMPLIT_EXPR: TMPLIT_EXPR
63521
63513
  });
63522
63514
 
63515
+ /* eslint-disable @typescript-eslint/indent */
63523
63516
  // https://developer.mozilla.org/en-US/docs/Web/API/Node/nodeType
63524
63517
  const NODE_TYPE = {
63525
63518
  element: 1,
@@ -63540,20 +63533,18 @@ const NODE_TYPE = {
63540
63533
  const getGlobal = function getGlobal() {
63541
63534
  return typeof window === 'undefined' ? null : window;
63542
63535
  };
63543
-
63544
63536
  /**
63545
63537
  * Creates a no-op policy for internal use only.
63546
63538
  * Don't export this function outside this module!
63547
- * @param {TrustedTypePolicyFactory} trustedTypes The policy factory.
63548
- * @param {HTMLScriptElement} purifyHostElement The Script element used to load DOMPurify (to determine policy name suffix).
63549
- * @return {TrustedTypePolicy} The policy created (or null, if Trusted Types
63539
+ * @param trustedTypes The policy factory.
63540
+ * @param purifyHostElement The Script element used to load DOMPurify (to determine policy name suffix).
63541
+ * @return The policy created (or null, if Trusted Types
63550
63542
  * are not supported or creating the policy failed).
63551
63543
  */
63552
63544
  const _createTrustedTypesPolicy = function _createTrustedTypesPolicy(trustedTypes, purifyHostElement) {
63553
63545
  if (typeof trustedTypes !== 'object' || typeof trustedTypes.createPolicy !== 'function') {
63554
63546
  return null;
63555
63547
  }
63556
-
63557
63548
  // Allow the callers to control the unique policy name
63558
63549
  // by adding a data-tt-policy-suffix to the script element with the DOMPurify.
63559
63550
  // Policy creation with duplicate names throws in Trusted Types.
@@ -63580,22 +63571,25 @@ const _createTrustedTypesPolicy = function _createTrustedTypesPolicy(trustedType
63580
63571
  return null;
63581
63572
  }
63582
63573
  };
63574
+ const _createHooksMap = function _createHooksMap() {
63575
+ return {
63576
+ afterSanitizeAttributes: [],
63577
+ afterSanitizeElements: [],
63578
+ afterSanitizeShadowDOM: [],
63579
+ beforeSanitizeAttributes: [],
63580
+ beforeSanitizeElements: [],
63581
+ beforeSanitizeShadowDOM: [],
63582
+ uponSanitizeAttribute: [],
63583
+ uponSanitizeElement: [],
63584
+ uponSanitizeShadowNode: []
63585
+ };
63586
+ };
63583
63587
  function createDOMPurify() {
63584
63588
  let window = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : getGlobal();
63585
63589
  const DOMPurify = root => createDOMPurify(root);
63586
-
63587
- /**
63588
- * Version label, exposed for easier checks
63589
- * if DOMPurify is up to date or not
63590
- */
63591
- DOMPurify.version = '3.1.6';
63592
-
63593
- /**
63594
- * Array of elements that DOMPurify removed during sanitation.
63595
- * Empty if nothing was removed.
63596
- */
63590
+ DOMPurify.version = '3.2.4';
63597
63591
  DOMPurify.removed = [];
63598
- if (!window || !window.document || window.document.nodeType !== NODE_TYPE.document) {
63592
+ if (!window || !window.document || window.document.nodeType !== NODE_TYPE.document || !window.Element) {
63599
63593
  // Not running in a browser, provide a factory function
63600
63594
  // so that you can pass your own Window
63601
63595
  DOMPurify.isSupported = false;
@@ -63623,7 +63617,6 @@ function createDOMPurify() {
63623
63617
  const getNextSibling = lookupGetter(ElementPrototype, 'nextSibling');
63624
63618
  const getChildNodes = lookupGetter(ElementPrototype, 'childNodes');
63625
63619
  const getParentNode = lookupGetter(ElementPrototype, 'parentNode');
63626
-
63627
63620
  // As per issue #47, the web-components registry is inherited by a
63628
63621
  // new document created via createHTMLDocument. As per the spec
63629
63622
  // (http://w3c.github.io/webcomponents/spec/custom/#creating-and-passing-registries)
@@ -63647,8 +63640,7 @@ function createDOMPurify() {
63647
63640
  const {
63648
63641
  importNode
63649
63642
  } = originalDocument;
63650
- let hooks = {};
63651
-
63643
+ let hooks = _createHooksMap();
63652
63644
  /**
63653
63645
  * Expose whether this browser supports running the full DOMPurify.
63654
63646
  */
@@ -63666,22 +63658,18 @@ function createDOMPurify() {
63666
63658
  let {
63667
63659
  IS_ALLOWED_URI: IS_ALLOWED_URI$1
63668
63660
  } = EXPRESSIONS;
63669
-
63670
63661
  /**
63671
63662
  * We consider the elements and attributes below to be safe. Ideally
63672
63663
  * don't add any new ones but feel free to remove unwanted ones.
63673
63664
  */
63674
-
63675
63665
  /* allowed element names */
63676
63666
  let ALLOWED_TAGS = null;
63677
63667
  const DEFAULT_ALLOWED_TAGS = addToSet({}, [...html$1, ...svg$1, ...svgFilters, ...mathMl$1, ...text]);
63678
-
63679
63668
  /* Allowed attribute names */
63680
63669
  let ALLOWED_ATTR = null;
63681
63670
  const DEFAULT_ALLOWED_ATTR = addToSet({}, [...html, ...svg, ...mathMl, ...xml]);
63682
-
63683
63671
  /*
63684
- * Configure how DOMPUrify should handle custom elements and their attributes as well as customized built-in elements.
63672
+ * Configure how DOMPurify should handle custom elements and their attributes as well as customized built-in elements.
63685
63673
  * @property {RegExp|Function|null} tagNameCheck one of [null, regexPattern, predicate]. Default: `null` (disallow any custom elements)
63686
63674
  * @property {RegExp|Function|null} attributeNameCheck one of [null, regexPattern, predicate]. Default: `null` (disallow any attributes not on the allow list)
63687
63675
  * @property {boolean} allowCustomizedBuiltInElements allow custom elements derived from built-ins if they pass CUSTOM_ELEMENT_HANDLING.tagNameCheck. Default: `false`.
@@ -63706,65 +63694,49 @@ function createDOMPurify() {
63706
63694
  value: false
63707
63695
  }
63708
63696
  }));
63709
-
63710
63697
  /* Explicitly forbidden tags (overrides ALLOWED_TAGS/ADD_TAGS) */
63711
63698
  let FORBID_TAGS = null;
63712
-
63713
63699
  /* Explicitly forbidden attributes (overrides ALLOWED_ATTR/ADD_ATTR) */
63714
63700
  let FORBID_ATTR = null;
63715
-
63716
63701
  /* Decide if ARIA attributes are okay */
63717
63702
  let ALLOW_ARIA_ATTR = true;
63718
-
63719
63703
  /* Decide if custom data attributes are okay */
63720
63704
  let ALLOW_DATA_ATTR = true;
63721
-
63722
63705
  /* Decide if unknown protocols are okay */
63723
63706
  let ALLOW_UNKNOWN_PROTOCOLS = false;
63724
-
63725
63707
  /* Decide if self-closing tags in attributes are allowed.
63726
63708
  * Usually removed due to a mXSS issue in jQuery 3.0 */
63727
63709
  let ALLOW_SELF_CLOSE_IN_ATTR = true;
63728
-
63729
63710
  /* Output should be safe for common template engines.
63730
63711
  * This means, DOMPurify removes data attributes, mustaches and ERB
63731
63712
  */
63732
63713
  let SAFE_FOR_TEMPLATES = false;
63733
-
63734
63714
  /* Output should be safe even for XML used within HTML and alike.
63735
63715
  * This means, DOMPurify removes comments when containing risky content.
63736
63716
  */
63737
63717
  let SAFE_FOR_XML = true;
63738
-
63739
63718
  /* Decide if document with <html>... should be returned */
63740
63719
  let WHOLE_DOCUMENT = false;
63741
-
63742
63720
  /* Track whether config is already set on this instance of DOMPurify. */
63743
63721
  let SET_CONFIG = false;
63744
-
63745
63722
  /* Decide if all elements (e.g. style, script) must be children of
63746
63723
  * document.body. By default, browsers might move them to document.head */
63747
63724
  let FORCE_BODY = false;
63748
-
63749
63725
  /* Decide if a DOM `HTMLBodyElement` should be returned, instead of a html
63750
63726
  * string (or a TrustedHTML object if Trusted Types are supported).
63751
63727
  * If `WHOLE_DOCUMENT` is enabled a `HTMLHtmlElement` will be returned instead
63752
63728
  */
63753
63729
  let RETURN_DOM = false;
63754
-
63755
63730
  /* Decide if a DOM `DocumentFragment` should be returned, instead of a html
63756
63731
  * string (or a TrustedHTML object if Trusted Types are supported) */
63757
63732
  let RETURN_DOM_FRAGMENT = false;
63758
-
63759
63733
  /* Try to return a Trusted Type object instead of a string, return a string in
63760
63734
  * case Trusted Types are not supported */
63761
63735
  let RETURN_TRUSTED_TYPE = false;
63762
-
63763
63736
  /* Output should be free from DOM clobbering attacks?
63764
63737
  * This sanitizes markups named with colliding, clobberable built-in DOM APIs.
63765
63738
  */
63766
63739
  let SANITIZE_DOM = true;
63767
-
63768
63740
  /* Achieve full DOM Clobbering protection by isolating the namespace of named
63769
63741
  * properties and JS variables, mitigating attacks that abuse the HTML/DOM spec rules.
63770
63742
  *
@@ -63780,25 +63752,19 @@ function createDOMPurify() {
63780
63752
  */
63781
63753
  let SANITIZE_NAMED_PROPS = false;
63782
63754
  const SANITIZE_NAMED_PROPS_PREFIX = 'user-content-';
63783
-
63784
63755
  /* Keep element content when removing element? */
63785
63756
  let KEEP_CONTENT = true;
63786
-
63787
63757
  /* If a `Node` is passed to sanitize(), then performs sanitization in-place instead
63788
63758
  * of importing it into a new Document and returning a sanitized copy */
63789
63759
  let IN_PLACE = false;
63790
-
63791
63760
  /* Allow usage of profiles like html, svg and mathMl */
63792
63761
  let USE_PROFILES = {};
63793
-
63794
63762
  /* Tags to ignore content of when KEEP_CONTENT is true */
63795
63763
  let FORBID_CONTENTS = null;
63796
63764
  const DEFAULT_FORBID_CONTENTS = addToSet({}, ['annotation-xml', 'audio', 'colgroup', 'desc', 'foreignobject', 'head', 'iframe', 'math', 'mi', 'mn', 'mo', 'ms', 'mtext', 'noembed', 'noframes', 'noscript', 'plaintext', 'script', 'style', 'svg', 'template', 'thead', 'title', 'video', 'xmp']);
63797
-
63798
63765
  /* Tags that are safe for data: URIs */
63799
63766
  let DATA_URI_TAGS = null;
63800
63767
  const DEFAULT_DATA_URI_TAGS = addToSet({}, ['audio', 'video', 'img', 'source', 'image', 'track']);
63801
-
63802
63768
  /* Attributes safe for values like "javascript:" */
63803
63769
  let URI_SAFE_ATTRIBUTES = null;
63804
63770
  const DEFAULT_URI_SAFE_ATTRIBUTES = addToSet({}, ['alt', 'class', 'for', 'id', 'label', 'name', 'pattern', 'placeholder', 'role', 'summary', 'title', 'value', 'style', 'xmlns']);
@@ -63808,32 +63774,33 @@ function createDOMPurify() {
63808
63774
  /* Document namespace */
63809
63775
  let NAMESPACE = HTML_NAMESPACE;
63810
63776
  let IS_EMPTY_INPUT = false;
63811
-
63812
63777
  /* Allowed XHTML+XML namespaces */
63813
63778
  let ALLOWED_NAMESPACES = null;
63814
63779
  const DEFAULT_ALLOWED_NAMESPACES = addToSet({}, [MATHML_NAMESPACE, SVG_NAMESPACE, HTML_NAMESPACE], stringToString);
63815
-
63780
+ let MATHML_TEXT_INTEGRATION_POINTS = addToSet({}, ['mi', 'mo', 'mn', 'ms', 'mtext']);
63781
+ let HTML_INTEGRATION_POINTS = addToSet({}, ['annotation-xml']);
63782
+ // Certain elements are allowed in both SVG and HTML
63783
+ // namespace. We need to specify them explicitly
63784
+ // so that they don't get erroneously deleted from
63785
+ // HTML namespace.
63786
+ const COMMON_SVG_AND_HTML_ELEMENTS = addToSet({}, ['title', 'style', 'font', 'a', 'script']);
63816
63787
  /* Parsing of strict XHTML documents */
63817
63788
  let PARSER_MEDIA_TYPE = null;
63818
63789
  const SUPPORTED_PARSER_MEDIA_TYPES = ['application/xhtml+xml', 'text/html'];
63819
63790
  const DEFAULT_PARSER_MEDIA_TYPE = 'text/html';
63820
63791
  let transformCaseFunc = null;
63821
-
63822
63792
  /* Keep a reference to config to pass to hooks */
63823
63793
  let CONFIG = null;
63824
-
63825
63794
  /* Ideally, do not touch anything below this line */
63826
63795
  /* ______________________________________________ */
63827
-
63828
63796
  const formElement = document.createElement('form');
63829
63797
  const isRegexOrFunction = function isRegexOrFunction(testValue) {
63830
63798
  return testValue instanceof RegExp || testValue instanceof Function;
63831
63799
  };
63832
-
63833
63800
  /**
63834
63801
  * _parseConfig
63835
63802
  *
63836
- * @param {Object} cfg optional config literal
63803
+ * @param cfg optional config literal
63837
63804
  */
63838
63805
  // eslint-disable-next-line complexity
63839
63806
  const _parseConfig = function _parseConfig() {
@@ -63841,39 +63808,23 @@ function createDOMPurify() {
63841
63808
  if (CONFIG && CONFIG === cfg) {
63842
63809
  return;
63843
63810
  }
63844
-
63845
63811
  /* Shield configuration object from tampering */
63846
63812
  if (!cfg || typeof cfg !== 'object') {
63847
63813
  cfg = {};
63848
63814
  }
63849
-
63850
63815
  /* Shield configuration object from prototype pollution */
63851
63816
  cfg = clone(cfg);
63852
63817
  PARSER_MEDIA_TYPE =
63853
63818
  // eslint-disable-next-line unicorn/prefer-includes
63854
63819
  SUPPORTED_PARSER_MEDIA_TYPES.indexOf(cfg.PARSER_MEDIA_TYPE) === -1 ? DEFAULT_PARSER_MEDIA_TYPE : cfg.PARSER_MEDIA_TYPE;
63855
-
63856
63820
  // HTML tags and attributes are not case-sensitive, converting to lowercase. Keeping XHTML as is.
63857
63821
  transformCaseFunc = PARSER_MEDIA_TYPE === 'application/xhtml+xml' ? stringToString : stringToLowerCase;
63858
-
63859
63822
  /* Set configuration parameters */
63860
63823
  ALLOWED_TAGS = objectHasOwnProperty(cfg, 'ALLOWED_TAGS') ? addToSet({}, cfg.ALLOWED_TAGS, transformCaseFunc) : DEFAULT_ALLOWED_TAGS;
63861
63824
  ALLOWED_ATTR = objectHasOwnProperty(cfg, 'ALLOWED_ATTR') ? addToSet({}, cfg.ALLOWED_ATTR, transformCaseFunc) : DEFAULT_ALLOWED_ATTR;
63862
63825
  ALLOWED_NAMESPACES = objectHasOwnProperty(cfg, 'ALLOWED_NAMESPACES') ? addToSet({}, cfg.ALLOWED_NAMESPACES, stringToString) : DEFAULT_ALLOWED_NAMESPACES;
63863
- URI_SAFE_ATTRIBUTES = objectHasOwnProperty(cfg, 'ADD_URI_SAFE_ATTR') ? addToSet(clone(DEFAULT_URI_SAFE_ATTRIBUTES),
63864
- // eslint-disable-line indent
63865
- cfg.ADD_URI_SAFE_ATTR,
63866
- // eslint-disable-line indent
63867
- transformCaseFunc // eslint-disable-line indent
63868
- ) // eslint-disable-line indent
63869
- : DEFAULT_URI_SAFE_ATTRIBUTES;
63870
- DATA_URI_TAGS = objectHasOwnProperty(cfg, 'ADD_DATA_URI_TAGS') ? addToSet(clone(DEFAULT_DATA_URI_TAGS),
63871
- // eslint-disable-line indent
63872
- cfg.ADD_DATA_URI_TAGS,
63873
- // eslint-disable-line indent
63874
- transformCaseFunc // eslint-disable-line indent
63875
- ) // eslint-disable-line indent
63876
- : DEFAULT_DATA_URI_TAGS;
63826
+ URI_SAFE_ATTRIBUTES = objectHasOwnProperty(cfg, 'ADD_URI_SAFE_ATTR') ? addToSet(clone(DEFAULT_URI_SAFE_ATTRIBUTES), cfg.ADD_URI_SAFE_ATTR, transformCaseFunc) : DEFAULT_URI_SAFE_ATTRIBUTES;
63827
+ DATA_URI_TAGS = objectHasOwnProperty(cfg, 'ADD_DATA_URI_TAGS') ? addToSet(clone(DEFAULT_DATA_URI_TAGS), cfg.ADD_DATA_URI_TAGS, transformCaseFunc) : DEFAULT_DATA_URI_TAGS;
63877
63828
  FORBID_CONTENTS = objectHasOwnProperty(cfg, 'FORBID_CONTENTS') ? addToSet({}, cfg.FORBID_CONTENTS, transformCaseFunc) : DEFAULT_FORBID_CONTENTS;
63878
63829
  FORBID_TAGS = objectHasOwnProperty(cfg, 'FORBID_TAGS') ? addToSet({}, cfg.FORBID_TAGS, transformCaseFunc) : {};
63879
63830
  FORBID_ATTR = objectHasOwnProperty(cfg, 'FORBID_ATTR') ? addToSet({}, cfg.FORBID_ATTR, transformCaseFunc) : {};
@@ -63895,6 +63846,8 @@ function createDOMPurify() {
63895
63846
  IN_PLACE = cfg.IN_PLACE || false; // Default false
63896
63847
  IS_ALLOWED_URI$1 = cfg.ALLOWED_URI_REGEXP || IS_ALLOWED_URI;
63897
63848
  NAMESPACE = cfg.NAMESPACE || HTML_NAMESPACE;
63849
+ MATHML_TEXT_INTEGRATION_POINTS = cfg.MATHML_TEXT_INTEGRATION_POINTS || MATHML_TEXT_INTEGRATION_POINTS;
63850
+ HTML_INTEGRATION_POINTS = cfg.HTML_INTEGRATION_POINTS || HTML_INTEGRATION_POINTS;
63898
63851
  CUSTOM_ELEMENT_HANDLING = cfg.CUSTOM_ELEMENT_HANDLING || {};
63899
63852
  if (cfg.CUSTOM_ELEMENT_HANDLING && isRegexOrFunction(cfg.CUSTOM_ELEMENT_HANDLING.tagNameCheck)) {
63900
63853
  CUSTOM_ELEMENT_HANDLING.tagNameCheck = cfg.CUSTOM_ELEMENT_HANDLING.tagNameCheck;
@@ -63911,7 +63864,6 @@ function createDOMPurify() {
63911
63864
  if (RETURN_DOM_FRAGMENT) {
63912
63865
  RETURN_DOM = true;
63913
63866
  }
63914
-
63915
63867
  /* Parse profile info */
63916
63868
  if (USE_PROFILES) {
63917
63869
  ALLOWED_TAGS = addToSet({}, text);
@@ -63936,7 +63888,6 @@ function createDOMPurify() {
63936
63888
  addToSet(ALLOWED_ATTR, xml);
63937
63889
  }
63938
63890
  }
63939
-
63940
63891
  /* Merge configuration parameters */
63941
63892
  if (cfg.ADD_TAGS) {
63942
63893
  if (ALLOWED_TAGS === DEFAULT_ALLOWED_TAGS) {
@@ -63959,17 +63910,14 @@ function createDOMPurify() {
63959
63910
  }
63960
63911
  addToSet(FORBID_CONTENTS, cfg.FORBID_CONTENTS, transformCaseFunc);
63961
63912
  }
63962
-
63963
63913
  /* Add #text in case KEEP_CONTENT is set to true */
63964
63914
  if (KEEP_CONTENT) {
63965
63915
  ALLOWED_TAGS['#text'] = true;
63966
63916
  }
63967
-
63968
63917
  /* Add html, head and body to ALLOWED_TAGS in case WHOLE_DOCUMENT is true */
63969
63918
  if (WHOLE_DOCUMENT) {
63970
63919
  addToSet(ALLOWED_TAGS, ['html', 'head', 'body']);
63971
63920
  }
63972
-
63973
63921
  /* Add tbody to ALLOWED_TAGS in case tables are permitted, see #286, #365 */
63974
63922
  if (ALLOWED_TAGS.table) {
63975
63923
  addToSet(ALLOWED_TAGS, ['tbody']);
@@ -63982,10 +63930,8 @@ function createDOMPurify() {
63982
63930
  if (typeof cfg.TRUSTED_TYPES_POLICY.createScriptURL !== 'function') {
63983
63931
  throw typeErrorCreate('TRUSTED_TYPES_POLICY configuration option must provide a "createScriptURL" hook.');
63984
63932
  }
63985
-
63986
63933
  // Overwrite existing TrustedTypes policy.
63987
63934
  trustedTypesPolicy = cfg.TRUSTED_TYPES_POLICY;
63988
-
63989
63935
  // Sign local variables required by `sanitize`.
63990
63936
  emptyHTML = trustedTypesPolicy.createHTML('');
63991
63937
  } else {
@@ -63993,13 +63939,11 @@ function createDOMPurify() {
63993
63939
  if (trustedTypesPolicy === undefined) {
63994
63940
  trustedTypesPolicy = _createTrustedTypesPolicy(trustedTypes, currentScript);
63995
63941
  }
63996
-
63997
63942
  // If creating the internal policy succeeded sign internal variables.
63998
63943
  if (trustedTypesPolicy !== null && typeof emptyHTML === 'string') {
63999
63944
  emptyHTML = trustedTypesPolicy.createHTML('');
64000
63945
  }
64001
63946
  }
64002
-
64003
63947
  // Prevent further manipulation of configuration.
64004
63948
  // Not available in IE8, Safari 5, etc.
64005
63949
  if (freeze) {
@@ -64007,30 +63951,19 @@ function createDOMPurify() {
64007
63951
  }
64008
63952
  CONFIG = cfg;
64009
63953
  };
64010
- const MATHML_TEXT_INTEGRATION_POINTS = addToSet({}, ['mi', 'mo', 'mn', 'ms', 'mtext']);
64011
- const HTML_INTEGRATION_POINTS = addToSet({}, ['foreignobject', 'annotation-xml']);
64012
-
64013
- // Certain elements are allowed in both SVG and HTML
64014
- // namespace. We need to specify them explicitly
64015
- // so that they don't get erroneously deleted from
64016
- // HTML namespace.
64017
- const COMMON_SVG_AND_HTML_ELEMENTS = addToSet({}, ['title', 'style', 'font', 'a', 'script']);
64018
-
64019
63954
  /* Keep track of all possible SVG and MathML tags
64020
63955
  * so that we can perform the namespace checks
64021
63956
  * correctly. */
64022
63957
  const ALL_SVG_TAGS = addToSet({}, [...svg$1, ...svgFilters, ...svgDisallowed]);
64023
63958
  const ALL_MATHML_TAGS = addToSet({}, [...mathMl$1, ...mathMlDisallowed]);
64024
-
64025
63959
  /**
64026
- * @param {Element} element a DOM element whose namespace is being checked
64027
- * @returns {boolean} Return false if the element has a
63960
+ * @param element a DOM element whose namespace is being checked
63961
+ * @returns Return false if the element has a
64028
63962
  * namespace that a spec-compliant parser would never
64029
63963
  * return. Return true otherwise.
64030
63964
  */
64031
63965
  const _checkValidNamespace = function _checkValidNamespace(element) {
64032
63966
  let parent = getParentNode(element);
64033
-
64034
63967
  // In JSDOM, if we're inside shadow DOM, then parentNode
64035
63968
  // can be null. We just simulate parent in this case.
64036
63969
  if (!parent || !parent.tagName) {
@@ -64051,14 +63984,12 @@ function createDOMPurify() {
64051
63984
  if (parent.namespaceURI === HTML_NAMESPACE) {
64052
63985
  return tagName === 'svg';
64053
63986
  }
64054
-
64055
63987
  // The only way to switch from MathML to SVG is via`
64056
63988
  // svg if parent is either <annotation-xml> or MathML
64057
63989
  // text integration points.
64058
63990
  if (parent.namespaceURI === MATHML_NAMESPACE) {
64059
63991
  return tagName === 'svg' && (parentTagName === 'annotation-xml' || MATHML_TEXT_INTEGRATION_POINTS[parentTagName]);
64060
63992
  }
64061
-
64062
63993
  // We only allow elements that are defined in SVG
64063
63994
  // spec. All others are disallowed in SVG namespace.
64064
63995
  return Boolean(ALL_SVG_TAGS[tagName]);
@@ -64070,13 +64001,11 @@ function createDOMPurify() {
64070
64001
  if (parent.namespaceURI === HTML_NAMESPACE) {
64071
64002
  return tagName === 'math';
64072
64003
  }
64073
-
64074
64004
  // The only way to switch from SVG to MathML is via
64075
64005
  // <math> and HTML integration points
64076
64006
  if (parent.namespaceURI === SVG_NAMESPACE) {
64077
64007
  return tagName === 'math' && HTML_INTEGRATION_POINTS[parentTagName];
64078
64008
  }
64079
-
64080
64009
  // We only allow elements that are defined in MathML
64081
64010
  // spec. All others are disallowed in MathML namespace.
64082
64011
  return Boolean(ALL_MATHML_TAGS[tagName]);
@@ -64091,28 +64020,24 @@ function createDOMPurify() {
64091
64020
  if (parent.namespaceURI === MATHML_NAMESPACE && !MATHML_TEXT_INTEGRATION_POINTS[parentTagName]) {
64092
64021
  return false;
64093
64022
  }
64094
-
64095
64023
  // We disallow tags that are specific for MathML
64096
64024
  // or SVG and should never appear in HTML namespace
64097
64025
  return !ALL_MATHML_TAGS[tagName] && (COMMON_SVG_AND_HTML_ELEMENTS[tagName] || !ALL_SVG_TAGS[tagName]);
64098
64026
  }
64099
-
64100
64027
  // For XHTML and XML documents that support custom namespaces
64101
64028
  if (PARSER_MEDIA_TYPE === 'application/xhtml+xml' && ALLOWED_NAMESPACES[element.namespaceURI]) {
64102
64029
  return true;
64103
64030
  }
64104
-
64105
64031
  // The code should never reach this place (this means
64106
64032
  // that the element somehow got namespace that is not
64107
64033
  // HTML, SVG, MathML or allowed via ALLOWED_NAMESPACES).
64108
64034
  // Return false just in case.
64109
64035
  return false;
64110
64036
  };
64111
-
64112
64037
  /**
64113
64038
  * _forceRemove
64114
64039
  *
64115
- * @param {Node} node a DOM node
64040
+ * @param node a DOM node
64116
64041
  */
64117
64042
  const _forceRemove = function _forceRemove(node) {
64118
64043
  arrayPush(DOMPurify.removed, {
@@ -64125,46 +64050,43 @@ function createDOMPurify() {
64125
64050
  remove(node);
64126
64051
  }
64127
64052
  };
64128
-
64129
64053
  /**
64130
64054
  * _removeAttribute
64131
64055
  *
64132
- * @param {String} name an Attribute name
64133
- * @param {Node} node a DOM node
64056
+ * @param name an Attribute name
64057
+ * @param element a DOM node
64134
64058
  */
64135
- const _removeAttribute = function _removeAttribute(name, node) {
64059
+ const _removeAttribute = function _removeAttribute(name, element) {
64136
64060
  try {
64137
64061
  arrayPush(DOMPurify.removed, {
64138
- attribute: node.getAttributeNode(name),
64139
- from: node
64062
+ attribute: element.getAttributeNode(name),
64063
+ from: element
64140
64064
  });
64141
64065
  } catch (_) {
64142
64066
  arrayPush(DOMPurify.removed, {
64143
64067
  attribute: null,
64144
- from: node
64068
+ from: element
64145
64069
  });
64146
64070
  }
64147
- node.removeAttribute(name);
64148
-
64149
- // We void attribute values for unremovable "is"" attributes
64150
- if (name === 'is' && !ALLOWED_ATTR[name]) {
64071
+ element.removeAttribute(name);
64072
+ // We void attribute values for unremovable "is" attributes
64073
+ if (name === 'is') {
64151
64074
  if (RETURN_DOM || RETURN_DOM_FRAGMENT) {
64152
64075
  try {
64153
- _forceRemove(node);
64076
+ _forceRemove(element);
64154
64077
  } catch (_) {}
64155
64078
  } else {
64156
64079
  try {
64157
- node.setAttribute(name, '');
64080
+ element.setAttribute(name, '');
64158
64081
  } catch (_) {}
64159
64082
  }
64160
64083
  }
64161
64084
  };
64162
-
64163
64085
  /**
64164
64086
  * _initDocument
64165
64087
  *
64166
- * @param {String} dirty a string of dirty markup
64167
- * @return {Document} a DOM, filled with the dirty markup
64088
+ * @param dirty - a string of dirty markup
64089
+ * @return a DOM, filled with the dirty markup
64168
64090
  */
64169
64091
  const _initDocument = function _initDocument(dirty) {
64170
64092
  /* Create a HTML document */
@@ -64191,7 +64113,6 @@ function createDOMPurify() {
64191
64113
  doc = new DOMParser().parseFromString(dirtyPayload, PARSER_MEDIA_TYPE);
64192
64114
  } catch (_) {}
64193
64115
  }
64194
-
64195
64116
  /* Use createHTMLDocument in case DOMParser is not available */
64196
64117
  if (!doc || !doc.documentElement) {
64197
64118
  doc = implementation.createDocument(NAMESPACE, 'template', null);
@@ -64205,112 +64126,86 @@ function createDOMPurify() {
64205
64126
  if (dirty && leadingWhitespace) {
64206
64127
  body.insertBefore(document.createTextNode(leadingWhitespace), body.childNodes[0] || null);
64207
64128
  }
64208
-
64209
64129
  /* Work on whole document or just its body */
64210
64130
  if (NAMESPACE === HTML_NAMESPACE) {
64211
64131
  return getElementsByTagName.call(doc, WHOLE_DOCUMENT ? 'html' : 'body')[0];
64212
64132
  }
64213
64133
  return WHOLE_DOCUMENT ? doc.documentElement : body;
64214
64134
  };
64215
-
64216
64135
  /**
64217
64136
  * Creates a NodeIterator object that you can use to traverse filtered lists of nodes or elements in a document.
64218
64137
  *
64219
- * @param {Node} root The root element or node to start traversing on.
64220
- * @return {NodeIterator} The created NodeIterator
64138
+ * @param root The root element or node to start traversing on.
64139
+ * @return The created NodeIterator
64221
64140
  */
64222
64141
  const _createNodeIterator = function _createNodeIterator(root) {
64223
64142
  return createNodeIterator.call(root.ownerDocument || root, root,
64224
64143
  // eslint-disable-next-line no-bitwise
64225
64144
  NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_COMMENT | NodeFilter.SHOW_TEXT | NodeFilter.SHOW_PROCESSING_INSTRUCTION | NodeFilter.SHOW_CDATA_SECTION, null);
64226
64145
  };
64227
-
64228
64146
  /**
64229
64147
  * _isClobbered
64230
64148
  *
64231
- * @param {Node} elm element to check for clobbering attacks
64232
- * @return {Boolean} true if clobbered, false if safe
64149
+ * @param element element to check for clobbering attacks
64150
+ * @return true if clobbered, false if safe
64233
64151
  */
64234
- const _isClobbered = function _isClobbered(elm) {
64235
- return elm instanceof HTMLFormElement && (typeof elm.nodeName !== 'string' || typeof elm.textContent !== 'string' || typeof elm.removeChild !== 'function' || !(elm.attributes instanceof NamedNodeMap) || typeof elm.removeAttribute !== 'function' || typeof elm.setAttribute !== 'function' || typeof elm.namespaceURI !== 'string' || typeof elm.insertBefore !== 'function' || typeof elm.hasChildNodes !== 'function');
64152
+ const _isClobbered = function _isClobbered(element) {
64153
+ return element instanceof HTMLFormElement && (typeof element.nodeName !== 'string' || typeof element.textContent !== 'string' || typeof element.removeChild !== 'function' || !(element.attributes instanceof NamedNodeMap) || typeof element.removeAttribute !== 'function' || typeof element.setAttribute !== 'function' || typeof element.namespaceURI !== 'string' || typeof element.insertBefore !== 'function' || typeof element.hasChildNodes !== 'function');
64236
64154
  };
64237
-
64238
64155
  /**
64239
64156
  * Checks whether the given object is a DOM node.
64240
64157
  *
64241
- * @param {Node} object object to check whether it's a DOM node
64242
- * @return {Boolean} true is object is a DOM node
64158
+ * @param value object to check whether it's a DOM node
64159
+ * @return true is object is a DOM node
64243
64160
  */
64244
- const _isNode = function _isNode(object) {
64245
- return typeof Node === 'function' && object instanceof Node;
64161
+ const _isNode = function _isNode(value) {
64162
+ return typeof Node === 'function' && value instanceof Node;
64246
64163
  };
64247
-
64248
- /**
64249
- * _executeHook
64250
- * Execute user configurable hooks
64251
- *
64252
- * @param {String} entryPoint Name of the hook's entry point
64253
- * @param {Node} currentNode node to work on with the hook
64254
- * @param {Object} data additional hook parameters
64255
- */
64256
- const _executeHook = function _executeHook(entryPoint, currentNode, data) {
64257
- if (!hooks[entryPoint]) {
64258
- return;
64259
- }
64260
- arrayForEach(hooks[entryPoint], hook => {
64164
+ function _executeHooks(hooks, currentNode, data) {
64165
+ arrayForEach(hooks, hook => {
64261
64166
  hook.call(DOMPurify, currentNode, data, CONFIG);
64262
64167
  });
64263
- };
64264
-
64168
+ }
64265
64169
  /**
64266
64170
  * _sanitizeElements
64267
64171
  *
64268
64172
  * @protect nodeName
64269
64173
  * @protect textContent
64270
64174
  * @protect removeChild
64271
- *
64272
- * @param {Node} currentNode to check for permission to exist
64273
- * @return {Boolean} true if node was killed, false if left alive
64175
+ * @param currentNode to check for permission to exist
64176
+ * @return true if node was killed, false if left alive
64274
64177
  */
64275
64178
  const _sanitizeElements = function _sanitizeElements(currentNode) {
64276
64179
  let content = null;
64277
-
64278
64180
  /* Execute a hook if present */
64279
- _executeHook('beforeSanitizeElements', currentNode, null);
64280
-
64181
+ _executeHooks(hooks.beforeSanitizeElements, currentNode, null);
64281
64182
  /* Check if element is clobbered or can clobber */
64282
64183
  if (_isClobbered(currentNode)) {
64283
64184
  _forceRemove(currentNode);
64284
64185
  return true;
64285
64186
  }
64286
-
64287
64187
  /* Now let's check the element's type and name */
64288
64188
  const tagName = transformCaseFunc(currentNode.nodeName);
64289
-
64290
64189
  /* Execute a hook if present */
64291
- _executeHook('uponSanitizeElement', currentNode, {
64190
+ _executeHooks(hooks.uponSanitizeElement, currentNode, {
64292
64191
  tagName,
64293
64192
  allowedTags: ALLOWED_TAGS
64294
64193
  });
64295
-
64296
64194
  /* Detect mXSS attempts abusing namespace confusion */
64297
64195
  if (currentNode.hasChildNodes() && !_isNode(currentNode.firstElementChild) && regExpTest(/<[/\w]/g, currentNode.innerHTML) && regExpTest(/<[/\w]/g, currentNode.textContent)) {
64298
64196
  _forceRemove(currentNode);
64299
64197
  return true;
64300
64198
  }
64301
-
64302
64199
  /* Remove any occurrence of processing instructions */
64303
64200
  if (currentNode.nodeType === NODE_TYPE.progressingInstruction) {
64304
64201
  _forceRemove(currentNode);
64305
64202
  return true;
64306
64203
  }
64307
-
64308
64204
  /* Remove any kind of possibly harmful comments */
64309
64205
  if (SAFE_FOR_XML && currentNode.nodeType === NODE_TYPE.comment && regExpTest(/<[/\w]/g, currentNode.data)) {
64310
64206
  _forceRemove(currentNode);
64311
64207
  return true;
64312
64208
  }
64313
-
64314
64209
  /* Remove element if anything forbids its presence */
64315
64210
  if (!ALLOWED_TAGS[tagName] || FORBID_TAGS[tagName]) {
64316
64211
  /* Check if we have a custom element to handle */
@@ -64322,7 +64217,6 @@ function createDOMPurify() {
64322
64217
  return false;
64323
64218
  }
64324
64219
  }
64325
-
64326
64220
  /* Keep content except for bad-listed elements */
64327
64221
  if (KEEP_CONTENT && !FORBID_CONTENTS[tagName]) {
64328
64222
  const parentNode = getParentNode(currentNode) || currentNode.parentNode;
@@ -64339,19 +64233,16 @@ function createDOMPurify() {
64339
64233
  _forceRemove(currentNode);
64340
64234
  return true;
64341
64235
  }
64342
-
64343
64236
  /* Check whether element has a valid namespace */
64344
64237
  if (currentNode instanceof Element && !_checkValidNamespace(currentNode)) {
64345
64238
  _forceRemove(currentNode);
64346
64239
  return true;
64347
64240
  }
64348
-
64349
64241
  /* Make sure that older browsers don't get fallback-tag mXSS */
64350
64242
  if ((tagName === 'noscript' || tagName === 'noembed' || tagName === 'noframes') && regExpTest(/<\/no(script|embed|frames)/i, currentNode.innerHTML)) {
64351
64243
  _forceRemove(currentNode);
64352
64244
  return true;
64353
64245
  }
64354
-
64355
64246
  /* Sanitize element content to be template-safe */
64356
64247
  if (SAFE_FOR_TEMPLATES && currentNode.nodeType === NODE_TYPE.text) {
64357
64248
  /* Get the element's text content */
@@ -64366,19 +64257,17 @@ function createDOMPurify() {
64366
64257
  currentNode.textContent = content;
64367
64258
  }
64368
64259
  }
64369
-
64370
64260
  /* Execute a hook if present */
64371
- _executeHook('afterSanitizeElements', currentNode, null);
64261
+ _executeHooks(hooks.afterSanitizeElements, currentNode, null);
64372
64262
  return false;
64373
64263
  };
64374
-
64375
64264
  /**
64376
64265
  * _isValidAttribute
64377
64266
  *
64378
- * @param {string} lcTag Lowercase tag name of containing element.
64379
- * @param {string} lcName Lowercase attribute name.
64380
- * @param {string} value Attribute value.
64381
- * @return {Boolean} Returns true if `value` is valid, otherwise false.
64267
+ * @param lcTag Lowercase tag name of containing element.
64268
+ * @param lcName Lowercase attribute name.
64269
+ * @param value Attribute value.
64270
+ * @return Returns true if `value` is valid, otherwise false.
64382
64271
  */
64383
64272
  // eslint-disable-next-line complexity
64384
64273
  const _isValidAttribute = function _isValidAttribute(lcTag, lcName, value) {
@@ -64386,7 +64275,6 @@ function createDOMPurify() {
64386
64275
  if (SANITIZE_DOM && (lcName === 'id' || lcName === 'name') && (value in document || value in formElement)) {
64387
64276
  return false;
64388
64277
  }
64389
-
64390
64278
  /* Allow valid data-* attributes: At least one character after "-"
64391
64279
  (https://html.spec.whatwg.org/multipage/dom.html#embedding-custom-non-visible-data-with-the-data-*-attributes)
64392
64280
  XML-compatible (https://html.spec.whatwg.org/multipage/infrastructure.html#xml-compatible and http://www.w3.org/TR/xml/#d0e804)
@@ -64408,19 +64296,17 @@ function createDOMPurify() {
64408
64296
  } else ;
64409
64297
  return true;
64410
64298
  };
64411
-
64412
64299
  /**
64413
64300
  * _isBasicCustomElement
64414
64301
  * checks if at least one dash is included in tagName, and it's not the first char
64415
64302
  * for more sophisticated checking see https://github.com/sindresorhus/validate-element-name
64416
64303
  *
64417
- * @param {string} tagName name of the tag of the node to sanitize
64418
- * @returns {boolean} Returns true if the tag name meets the basic criteria for a custom element, otherwise false.
64304
+ * @param tagName name of the tag of the node to sanitize
64305
+ * @returns Returns true if the tag name meets the basic criteria for a custom element, otherwise false.
64419
64306
  */
64420
64307
  const _isBasicCustomElement = function _isBasicCustomElement(tagName) {
64421
64308
  return tagName !== 'annotation-xml' && stringMatch(tagName, CUSTOM_ELEMENT);
64422
64309
  };
64423
-
64424
64310
  /**
64425
64311
  * _sanitizeAttributes
64426
64312
  *
@@ -64429,27 +64315,26 @@ function createDOMPurify() {
64429
64315
  * @protect removeAttribute
64430
64316
  * @protect setAttribute
64431
64317
  *
64432
- * @param {Node} currentNode to sanitize
64318
+ * @param currentNode to sanitize
64433
64319
  */
64434
64320
  const _sanitizeAttributes = function _sanitizeAttributes(currentNode) {
64435
64321
  /* Execute a hook if present */
64436
- _executeHook('beforeSanitizeAttributes', currentNode, null);
64322
+ _executeHooks(hooks.beforeSanitizeAttributes, currentNode, null);
64437
64323
  const {
64438
64324
  attributes
64439
64325
  } = currentNode;
64440
-
64441
64326
  /* Check if we have attributes; if not we might have a text node */
64442
- if (!attributes) {
64327
+ if (!attributes || _isClobbered(currentNode)) {
64443
64328
  return;
64444
64329
  }
64445
64330
  const hookEvent = {
64446
64331
  attrName: '',
64447
64332
  attrValue: '',
64448
64333
  keepAttr: true,
64449
- allowedAttributes: ALLOWED_ATTR
64334
+ allowedAttributes: ALLOWED_ATTR,
64335
+ forceKeepAttr: undefined
64450
64336
  };
64451
64337
  let l = attributes.length;
64452
-
64453
64338
  /* Go backwards over all attributes; safely remove bad ones */
64454
64339
  while (l--) {
64455
64340
  const attr = attributes[l];
@@ -64460,64 +64345,53 @@ function createDOMPurify() {
64460
64345
  } = attr;
64461
64346
  const lcName = transformCaseFunc(name);
64462
64347
  let value = name === 'value' ? attrValue : stringTrim(attrValue);
64463
-
64464
64348
  /* Execute a hook if present */
64465
64349
  hookEvent.attrName = lcName;
64466
64350
  hookEvent.attrValue = value;
64467
64351
  hookEvent.keepAttr = true;
64468
64352
  hookEvent.forceKeepAttr = undefined; // Allows developers to see this is a property they can set
64469
- _executeHook('uponSanitizeAttribute', currentNode, hookEvent);
64353
+ _executeHooks(hooks.uponSanitizeAttribute, currentNode, hookEvent);
64470
64354
  value = hookEvent.attrValue;
64471
-
64355
+ /* Full DOM Clobbering protection via namespace isolation,
64356
+ * Prefix id and name attributes with `user-content-`
64357
+ */
64358
+ if (SANITIZE_NAMED_PROPS && (lcName === 'id' || lcName === 'name')) {
64359
+ // Remove the attribute with this value
64360
+ _removeAttribute(name, currentNode);
64361
+ // Prefix the value and later re-create the attribute with the sanitized value
64362
+ value = SANITIZE_NAMED_PROPS_PREFIX + value;
64363
+ }
64472
64364
  /* Work around a security issue with comments inside attributes */
64473
64365
  if (SAFE_FOR_XML && regExpTest(/((--!?|])>)|<\/(style|title)/i, value)) {
64474
64366
  _removeAttribute(name, currentNode);
64475
64367
  continue;
64476
64368
  }
64477
-
64478
64369
  /* Did the hooks approve of the attribute? */
64479
64370
  if (hookEvent.forceKeepAttr) {
64480
64371
  continue;
64481
64372
  }
64482
-
64483
64373
  /* Remove attribute */
64484
64374
  _removeAttribute(name, currentNode);
64485
-
64486
64375
  /* Did the hooks approve of the attribute? */
64487
64376
  if (!hookEvent.keepAttr) {
64488
64377
  continue;
64489
64378
  }
64490
-
64491
64379
  /* Work around a security issue in jQuery 3.0 */
64492
64380
  if (!ALLOW_SELF_CLOSE_IN_ATTR && regExpTest(/\/>/i, value)) {
64493
64381
  _removeAttribute(name, currentNode);
64494
64382
  continue;
64495
64383
  }
64496
-
64497
64384
  /* Sanitize attribute content to be template-safe */
64498
64385
  if (SAFE_FOR_TEMPLATES) {
64499
64386
  arrayForEach([MUSTACHE_EXPR, ERB_EXPR, TMPLIT_EXPR], expr => {
64500
64387
  value = stringReplace(value, expr, ' ');
64501
64388
  });
64502
64389
  }
64503
-
64504
64390
  /* Is `value` valid for this attribute? */
64505
64391
  const lcTag = transformCaseFunc(currentNode.nodeName);
64506
64392
  if (!_isValidAttribute(lcTag, lcName, value)) {
64507
64393
  continue;
64508
64394
  }
64509
-
64510
- /* Full DOM Clobbering protection via namespace isolation,
64511
- * Prefix id and name attributes with `user-content-`
64512
- */
64513
- if (SANITIZE_NAMED_PROPS && (lcName === 'id' || lcName === 'name')) {
64514
- // Remove the attribute with this value
64515
- _removeAttribute(name, currentNode);
64516
-
64517
- // Prefix the value and later re-create the attribute with the sanitized value
64518
- value = SANITIZE_NAMED_PROPS_PREFIX + value;
64519
- }
64520
-
64521
64395
  /* Handle attributes that require Trusted Types */
64522
64396
  if (trustedTypesPolicy && typeof trustedTypes === 'object' && typeof trustedTypes.getAttributeType === 'function') {
64523
64397
  if (namespaceURI) ; else {
@@ -64535,7 +64409,6 @@ function createDOMPurify() {
64535
64409
  }
64536
64410
  }
64537
64411
  }
64538
-
64539
64412
  /* Handle invalid data-* attribute set by try-catching it */
64540
64413
  try {
64541
64414
  if (namespaceURI) {
@@ -64551,51 +64424,34 @@ function createDOMPurify() {
64551
64424
  }
64552
64425
  } catch (_) {}
64553
64426
  }
64554
-
64555
64427
  /* Execute a hook if present */
64556
- _executeHook('afterSanitizeAttributes', currentNode, null);
64428
+ _executeHooks(hooks.afterSanitizeAttributes, currentNode, null);
64557
64429
  };
64558
-
64559
64430
  /**
64560
64431
  * _sanitizeShadowDOM
64561
64432
  *
64562
- * @param {DocumentFragment} fragment to iterate over recursively
64433
+ * @param fragment to iterate over recursively
64563
64434
  */
64564
64435
  const _sanitizeShadowDOM = function _sanitizeShadowDOM(fragment) {
64565
64436
  let shadowNode = null;
64566
64437
  const shadowIterator = _createNodeIterator(fragment);
64567
-
64568
64438
  /* Execute a hook if present */
64569
- _executeHook('beforeSanitizeShadowDOM', fragment, null);
64439
+ _executeHooks(hooks.beforeSanitizeShadowDOM, fragment, null);
64570
64440
  while (shadowNode = shadowIterator.nextNode()) {
64571
64441
  /* Execute a hook if present */
64572
- _executeHook('uponSanitizeShadowNode', shadowNode, null);
64573
-
64442
+ _executeHooks(hooks.uponSanitizeShadowNode, shadowNode, null);
64574
64443
  /* Sanitize tags and elements */
64575
- if (_sanitizeElements(shadowNode)) {
64576
- continue;
64577
- }
64578
-
64444
+ _sanitizeElements(shadowNode);
64445
+ /* Check attributes next */
64446
+ _sanitizeAttributes(shadowNode);
64579
64447
  /* Deep shadow DOM detected */
64580
64448
  if (shadowNode.content instanceof DocumentFragment) {
64581
64449
  _sanitizeShadowDOM(shadowNode.content);
64582
64450
  }
64583
-
64584
- /* Check attributes, sanitize if necessary */
64585
- _sanitizeAttributes(shadowNode);
64586
64451
  }
64587
-
64588
64452
  /* Execute a hook if present */
64589
- _executeHook('afterSanitizeShadowDOM', fragment, null);
64453
+ _executeHooks(hooks.afterSanitizeShadowDOM, fragment, null);
64590
64454
  };
64591
-
64592
- /**
64593
- * Sanitize
64594
- * Public method providing core sanitation functionality
64595
- *
64596
- * @param {String|Node} dirty string or DOM node
64597
- * @param {Object} cfg object
64598
- */
64599
64455
  // eslint-disable-next-line complexity
64600
64456
  DOMPurify.sanitize = function (dirty) {
64601
64457
  let cfg = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
@@ -64610,7 +64466,6 @@ function createDOMPurify() {
64610
64466
  if (IS_EMPTY_INPUT) {
64611
64467
  dirty = '<!-->';
64612
64468
  }
64613
-
64614
64469
  /* Stringify, in case dirty is an object */
64615
64470
  if (typeof dirty !== 'string' && !_isNode(dirty)) {
64616
64471
  if (typeof dirty.toString === 'function') {
@@ -64622,20 +64477,16 @@ function createDOMPurify() {
64622
64477
  throw typeErrorCreate('toString is not a function');
64623
64478
  }
64624
64479
  }
64625
-
64626
64480
  /* Return dirty HTML if DOMPurify cannot run */
64627
64481
  if (!DOMPurify.isSupported) {
64628
64482
  return dirty;
64629
64483
  }
64630
-
64631
64484
  /* Assign config vars */
64632
64485
  if (!SET_CONFIG) {
64633
64486
  _parseConfig(cfg);
64634
64487
  }
64635
-
64636
64488
  /* Clean up removed elements */
64637
64489
  DOMPurify.removed = [];
64638
-
64639
64490
  /* Check if dirty is correctly typed for IN_PLACE */
64640
64491
  if (typeof dirty === 'string') {
64641
64492
  IN_PLACE = false;
@@ -64669,45 +64520,34 @@ function createDOMPurify() {
64669
64520
  dirty.indexOf('<') === -1) {
64670
64521
  return trustedTypesPolicy && RETURN_TRUSTED_TYPE ? trustedTypesPolicy.createHTML(dirty) : dirty;
64671
64522
  }
64672
-
64673
64523
  /* Initialize the document to work on */
64674
64524
  body = _initDocument(dirty);
64675
-
64676
64525
  /* Check we have a DOM node from the data */
64677
64526
  if (!body) {
64678
64527
  return RETURN_DOM ? null : RETURN_TRUSTED_TYPE ? emptyHTML : '';
64679
64528
  }
64680
64529
  }
64681
-
64682
64530
  /* Remove first element node (ours) if FORCE_BODY is set */
64683
64531
  if (body && FORCE_BODY) {
64684
64532
  _forceRemove(body.firstChild);
64685
64533
  }
64686
-
64687
64534
  /* Get node iterator */
64688
64535
  const nodeIterator = _createNodeIterator(IN_PLACE ? dirty : body);
64689
-
64690
64536
  /* Now start iterating over the created document */
64691
64537
  while (currentNode = nodeIterator.nextNode()) {
64692
64538
  /* Sanitize tags and elements */
64693
- if (_sanitizeElements(currentNode)) {
64694
- continue;
64695
- }
64696
-
64539
+ _sanitizeElements(currentNode);
64540
+ /* Check attributes next */
64541
+ _sanitizeAttributes(currentNode);
64697
64542
  /* Shadow DOM detected, sanitize it */
64698
64543
  if (currentNode.content instanceof DocumentFragment) {
64699
64544
  _sanitizeShadowDOM(currentNode.content);
64700
64545
  }
64701
-
64702
- /* Check attributes, sanitize if necessary */
64703
- _sanitizeAttributes(currentNode);
64704
64546
  }
64705
-
64706
64547
  /* If we sanitized `dirty` in-place, return it. */
64707
64548
  if (IN_PLACE) {
64708
64549
  return dirty;
64709
64550
  }
64710
-
64711
64551
  /* Return sanitized string or DOM */
64712
64552
  if (RETURN_DOM) {
64713
64553
  if (RETURN_DOM_FRAGMENT) {
@@ -64732,12 +64572,10 @@ function createDOMPurify() {
64732
64572
  return returnNode;
64733
64573
  }
64734
64574
  let serializedHTML = WHOLE_DOCUMENT ? body.outerHTML : body.innerHTML;
64735
-
64736
64575
  /* Serialize doctype if allowed */
64737
64576
  if (WHOLE_DOCUMENT && ALLOWED_TAGS['!doctype'] && body.ownerDocument && body.ownerDocument.doctype && body.ownerDocument.doctype.name && regExpTest(DOCTYPE_NAME, body.ownerDocument.doctype.name)) {
64738
64577
  serializedHTML = '<!DOCTYPE ' + body.ownerDocument.doctype.name + '>\n' + serializedHTML;
64739
64578
  }
64740
-
64741
64579
  /* Sanitize final string template-safe */
64742
64580
  if (SAFE_FOR_TEMPLATES) {
64743
64581
  arrayForEach([MUSTACHE_EXPR, ERB_EXPR, TMPLIT_EXPR], expr => {
@@ -64746,39 +64584,15 @@ function createDOMPurify() {
64746
64584
  }
64747
64585
  return trustedTypesPolicy && RETURN_TRUSTED_TYPE ? trustedTypesPolicy.createHTML(serializedHTML) : serializedHTML;
64748
64586
  };
64749
-
64750
- /**
64751
- * Public method to set the configuration once
64752
- * setConfig
64753
- *
64754
- * @param {Object} cfg configuration object
64755
- */
64756
64587
  DOMPurify.setConfig = function () {
64757
64588
  let cfg = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
64758
64589
  _parseConfig(cfg);
64759
64590
  SET_CONFIG = true;
64760
64591
  };
64761
-
64762
- /**
64763
- * Public method to remove the configuration
64764
- * clearConfig
64765
- *
64766
- */
64767
64592
  DOMPurify.clearConfig = function () {
64768
64593
  CONFIG = null;
64769
64594
  SET_CONFIG = false;
64770
64595
  };
64771
-
64772
- /**
64773
- * Public method to check if an attribute value is valid.
64774
- * Uses last set config, if any. Otherwise, uses config defaults.
64775
- * isValidAttribute
64776
- *
64777
- * @param {String} tag Tag name of containing element.
64778
- * @param {String} attr Attribute name.
64779
- * @param {String} value Attribute value.
64780
- * @return {Boolean} Returns true if `value` is valid. Otherwise, returns false.
64781
- */
64782
64596
  DOMPurify.isValidAttribute = function (tag, attr, value) {
64783
64597
  /* Initialize shared config vars if necessary. */
64784
64598
  if (!CONFIG) {
@@ -64788,54 +64602,24 @@ function createDOMPurify() {
64788
64602
  const lcName = transformCaseFunc(attr);
64789
64603
  return _isValidAttribute(lcTag, lcName, value);
64790
64604
  };
64791
-
64792
- /**
64793
- * AddHook
64794
- * Public method to add DOMPurify hooks
64795
- *
64796
- * @param {String} entryPoint entry point for the hook to add
64797
- * @param {Function} hookFunction function to execute
64798
- */
64799
64605
  DOMPurify.addHook = function (entryPoint, hookFunction) {
64800
64606
  if (typeof hookFunction !== 'function') {
64801
64607
  return;
64802
64608
  }
64803
- hooks[entryPoint] = hooks[entryPoint] || [];
64804
64609
  arrayPush(hooks[entryPoint], hookFunction);
64805
64610
  };
64806
-
64807
- /**
64808
- * RemoveHook
64809
- * Public method to remove a DOMPurify hook at a given entryPoint
64810
- * (pops it from the stack of hooks if more are present)
64811
- *
64812
- * @param {String} entryPoint entry point for the hook to remove
64813
- * @return {Function} removed(popped) hook
64814
- */
64815
- DOMPurify.removeHook = function (entryPoint) {
64816
- if (hooks[entryPoint]) {
64817
- return arrayPop(hooks[entryPoint]);
64611
+ DOMPurify.removeHook = function (entryPoint, hookFunction) {
64612
+ if (hookFunction !== undefined) {
64613
+ const index = arrayLastIndexOf(hooks[entryPoint], hookFunction);
64614
+ return index === -1 ? undefined : arraySplice(hooks[entryPoint], index, 1)[0];
64818
64615
  }
64616
+ return arrayPop(hooks[entryPoint]);
64819
64617
  };
64820
-
64821
- /**
64822
- * RemoveHooks
64823
- * Public method to remove all DOMPurify hooks at a given entryPoint
64824
- *
64825
- * @param {String} entryPoint entry point for the hooks to remove
64826
- */
64827
64618
  DOMPurify.removeHooks = function (entryPoint) {
64828
- if (hooks[entryPoint]) {
64829
- hooks[entryPoint] = [];
64830
- }
64619
+ hooks[entryPoint] = [];
64831
64620
  };
64832
-
64833
- /**
64834
- * RemoveAllHooks
64835
- * Public method to remove all DOMPurify hooks
64836
- */
64837
64621
  DOMPurify.removeAllHooks = function () {
64838
- hooks = {};
64622
+ hooks = _createHooksMap();
64839
64623
  };
64840
64624
  return DOMPurify;
64841
64625
  }
@@ -64848,7 +64632,7 @@ const InstructionalText = ({
64848
64632
  style = {}
64849
64633
  }) => {
64850
64634
  const tokens = useTokens();
64851
- const styles = getStyles$P(tokens);
64635
+ const styles = getStyles$R(tokens);
64852
64636
  const sanitizedInstructionalText = purify.sanitize(instructionalText, {
64853
64637
  ALLOWED_TAGS: ["a"],
64854
64638
  // Only allow <a />
@@ -64886,7 +64670,7 @@ const InstructionalText = ({
64886
64670
  }
64887
64671
  );
64888
64672
  };
64889
- const getStyles$P = (tokens) => ({
64673
+ const getStyles$R = (tokens) => ({
64890
64674
  instructionalLink: {
64891
64675
  display: "inline",
64892
64676
  whiteSpace: "normal",
@@ -64906,7 +64690,7 @@ InstructionalText.propTypes = {
64906
64690
  const InstructionList = (props) => {
64907
64691
  const tokens = useTokens();
64908
64692
  const listRef = useRef(null);
64909
- const styles = getStyles$O(tokens);
64693
+ const styles = getStyles$Q(tokens);
64910
64694
  const sanitizedItems = props.items.map(
64911
64695
  (item) => purify.sanitize(item, {
64912
64696
  ALLOWED_TAGS: ["a"],
@@ -64957,7 +64741,7 @@ const InstructionList = (props) => {
64957
64741
  item
64958
64742
  )) });
64959
64743
  };
64960
- const getStyles$O = (tokens) => ({
64744
+ const getStyles$Q = (tokens) => ({
64961
64745
  list: {
64962
64746
  listStyleType: "none",
64963
64747
  listStylePosition: "outside",
@@ -65019,7 +64803,7 @@ const OAuthDefault = (props) => {
65019
64803
  const isOauthLoading = useSelector((state) => state.connect.isOauthLoading);
65020
64804
  const oauthURL = useSelector((state) => state.connect.oauthURL);
65021
64805
  const tokens = useTokens();
65022
- const styles = getStyles$N(tokens);
64806
+ const styles = getStyles$P(tokens);
65023
64807
  return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { role: "alert", children: [
65024
64808
  /* @__PURE__ */ jsxRuntimeExports.jsx(InstitutionBlock, { institution: props.institution }),
65025
64809
  /* @__PURE__ */ jsxRuntimeExports.jsx(
@@ -65081,7 +64865,7 @@ OAuthDefault.propTypes = {
65081
64865
  selectedInstructionalData: PropTypes$1.object.isRequired,
65082
64866
  setIsLeavingUrl: PropTypes$1.func.isRequired
65083
64867
  };
65084
- const getStyles$N = (tokens) => ({
64868
+ const getStyles$P = (tokens) => ({
65085
64869
  primaryButton: {
65086
64870
  display: "flex",
65087
64871
  marginTop: tokens.Spacing.XLarge
@@ -65228,7 +65012,7 @@ const WaitingForOAuth = ({
65228
65012
  const sendPosthogEvent = useAnalyticsEvent();
65229
65013
  const [disableOauthButtons, setDisableOauthButtons] = useState(true);
65230
65014
  const tokens = useTokens();
65231
- const styles = getStyles$M(tokens);
65015
+ const styles = getStyles$O(tokens);
65232
65016
  const getNextDelay = getDelay();
65233
65017
  const { api } = useApi();
65234
65018
  useEffect(() => {
@@ -65299,7 +65083,7 @@ const WaitingForOAuth = ({
65299
65083
  ) })
65300
65084
  ] });
65301
65085
  };
65302
- const getStyles$M = (tokens) => ({
65086
+ const getStyles$O = (tokens) => ({
65303
65087
  spinner: {
65304
65088
  marginTop: tokens.Spacing.XLarge
65305
65089
  },
@@ -65321,7 +65105,7 @@ WaitingForOAuth.propTypes = {
65321
65105
  const MemberError = (props) => {
65322
65106
  const postMessageFunctions = useContext(PostMessageContext);
65323
65107
  const tokens = useTokens();
65324
- const styles = getStyles$L(tokens);
65108
+ const styles = getStyles$N(tokens);
65325
65109
  const errorStatus = props.error?.response?.status;
65326
65110
  useEffect(() => {
65327
65111
  const errorPayload = {
@@ -65355,7 +65139,7 @@ const MemberError = (props) => {
65355
65139
  /* @__PURE__ */ jsxRuntimeExports.jsx(AriaLive, { level: "assertive", message: `Something went wrong. ${getMessage()}` })
65356
65140
  ] });
65357
65141
  };
65358
- const getStyles$L = (tokens) => ({
65142
+ const getStyles$N = (tokens) => ({
65359
65143
  messageBox: {
65360
65144
  marginBottom: tokens.Spacing.Medium
65361
65145
  }
@@ -65367,7 +65151,7 @@ MemberError.propTypes = {
65367
65151
 
65368
65152
  const OAuthStartError = (props) => {
65369
65153
  const tokens = useTokens();
65370
- const styles = getStyles$K(tokens);
65154
+ const styles = getStyles$M(tokens);
65371
65155
  const getNextDelay = getDelay();
65372
65156
  return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
65373
65157
  /* @__PURE__ */ jsxRuntimeExports.jsx(SlideDown, { delay: getNextDelay(), children: /* @__PURE__ */ jsxRuntimeExports.jsx(InstitutionBlock, { institution: props.institution }) }),
@@ -65384,7 +65168,7 @@ const OAuthStartError = (props) => {
65384
65168
  ) })
65385
65169
  ] });
65386
65170
  };
65387
- const getStyles$K = (tokens) => ({
65171
+ const getStyles$M = (tokens) => ({
65388
65172
  spinner: {
65389
65173
  marginTop: tokens.Spacing.XLarge
65390
65174
  },
@@ -65404,7 +65188,7 @@ OAuthStartError.propTypes = {
65404
65188
 
65405
65189
  const PoweredByMX = ({ onClick }) => {
65406
65190
  useTokens();
65407
- const styles = getStyles$J();
65191
+ const styles = getStyles$L();
65408
65192
  return /* @__PURE__ */ jsxRuntimeExports.jsxs(
65409
65193
  Button$1,
65410
65194
  {
@@ -65424,7 +65208,7 @@ const PoweredByMX = ({ onClick }) => {
65424
65208
  PoweredByMX.propTypes = {
65425
65209
  onClick: PropTypes$1.func
65426
65210
  };
65427
- const getStyles$J = () => {
65211
+ const getStyles$L = () => {
65428
65212
  return {
65429
65213
  button: {
65430
65214
  display: "flex",
@@ -65437,7 +65221,7 @@ const getStyles$J = () => {
65437
65221
  const StickyComponentContainer = React__default.forwardRef(
65438
65222
  ({ children, header = null, footer = null }, ref) => {
65439
65223
  const tokens = useTokens();
65440
- const styles = getStyles$I(tokens);
65224
+ const styles = getStyles$K(tokens);
65441
65225
  return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { ref, style: styles.container, children: [
65442
65226
  header && /* @__PURE__ */ jsxRuntimeExports.jsx("div", { style: styles.header, children: header }),
65443
65227
  /* @__PURE__ */ jsxRuntimeExports.jsx("div", { style: styles.content, children }),
@@ -65450,7 +65234,7 @@ StickyComponentContainer.propTypes = {
65450
65234
  header: PropTypes$1.element
65451
65235
  };
65452
65236
  StickyComponentContainer.displayName = "StickyComponentContainer";
65453
- const getStyles$I = (tokens) => {
65237
+ const getStyles$K = (tokens) => {
65454
65238
  return {
65455
65239
  container: {
65456
65240
  display: "flex",
@@ -65549,7 +65333,7 @@ const ConnectLogoHeader = (props) => {
65549
65333
  const colorScheme = useSelector(selectColorScheme);
65550
65334
  const clientGuid = useSelector((state) => state.profiles.client.guid);
65551
65335
  const tokens = useTokens();
65552
- const styles = getStyles$H();
65336
+ const styles = getStyles$J();
65553
65337
  const defaultInstitutionImage = () => colorScheme === COLOR_SCHEME.LIGHT ? /* @__PURE__ */ jsxRuntimeExports.jsx("div", { style: { borderRadius: tokens.BorderRadius.Large }, children: /* @__PURE__ */ jsxRuntimeExports.jsx(SvgConnectHeaderInstitutionLight, {}) }) : /* @__PURE__ */ jsxRuntimeExports.jsx("div", { style: { borderRadius: tokens.BorderRadius.Large }, children: /* @__PURE__ */ jsxRuntimeExports.jsx(SvgConnectHeaderInstitutionDark, {}) });
65554
65338
  return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { "aria-hidden": true, style: styles.container, children: [
65555
65339
  /* @__PURE__ */ jsxRuntimeExports.jsx("div", { "data-test": "mxLogo", style: styles.backdropImage, children: colorScheme === COLOR_SCHEME.LIGHT ? /* @__PURE__ */ jsxRuntimeExports.jsx(SvgConnectHeaderBackdropLight, {}) : /* @__PURE__ */ jsxRuntimeExports.jsx(SvgConnectHeaderBackdropDark, {}) }),
@@ -65566,7 +65350,7 @@ const ConnectLogoHeader = (props) => {
65566
65350
  ) : defaultInstitutionImage() })
65567
65351
  ] });
65568
65352
  };
65569
- const getStyles$H = () => {
65353
+ const getStyles$J = () => {
65570
65354
  const maxHeight = "64px";
65571
65355
  const maxWidth = "240px";
65572
65356
  return {
@@ -65687,7 +65471,7 @@ const getDataClusters = () => {
65687
65471
 
65688
65472
  const DataCluster = (props) => {
65689
65473
  const tokens = useTokens();
65690
- const styles = getStyles$G(tokens);
65474
+ const styles = getStyles$I(tokens);
65691
65475
  const dataCluster = props.dataCluster;
65692
65476
  return /* @__PURE__ */ jsxRuntimeExports.jsxs(Fragment, { children: [
65693
65477
  /* @__PURE__ */ jsxRuntimeExports.jsx(
@@ -65713,7 +65497,7 @@ const DataCluster = (props) => {
65713
65497
  )
65714
65498
  ] });
65715
65499
  };
65716
- const getStyles$G = (tokens) => ({
65500
+ const getStyles$I = (tokens) => ({
65717
65501
  subTitle: {
65718
65502
  fontSize: tokens.FontSize.Body,
65719
65503
  fontWeight: tokens.FontWeight.Semibold,
@@ -65739,7 +65523,7 @@ const DataRequested = (props) => {
65739
65523
  } = getDataClusters();
65740
65524
  const connectConfig = useSelector(selectConnectConfig);
65741
65525
  const tokens = useTokens();
65742
- const styles = getStyles$F(tokens);
65526
+ const styles = getStyles$H(tokens);
65743
65527
  const getNextDelay = getDelay();
65744
65528
  const appName = useSelector((state) => state.profiles.client.oauth_app_name || null);
65745
65529
  const mode = connectConfig.mode ?? AGG_MODE;
@@ -65810,7 +65594,7 @@ const DataRequested = (props) => {
65810
65594
  )
65811
65595
  ] }) });
65812
65596
  };
65813
- const getStyles$F = (tokens) => {
65597
+ const getStyles$H = (tokens) => {
65814
65598
  return {
65815
65599
  title: {
65816
65600
  marginBottom: tokens.Spacing.Tiny
@@ -65835,7 +65619,7 @@ const DataAvailable = () => {
65835
65619
  useAnalyticsPath(...PageviewInfo.CONNECT_DISCLOSURE_DATA_AVAILABLE);
65836
65620
  const { dataClusters } = getDataClusters();
65837
65621
  const tokens = useTokens();
65838
- const styles = getStyles$E(tokens);
65622
+ const styles = getStyles$G(tokens);
65839
65623
  const getNextDelay = getDelay();
65840
65624
  const appName = useSelector((state) => state.profiles.client.oauth_app_name || null);
65841
65625
  return /* @__PURE__ */ jsxRuntimeExports.jsx(Fragment, { children: /* @__PURE__ */ jsxRuntimeExports.jsx(SlideDown, { delay: getNextDelay(), children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { style: styles.container, children: [
@@ -65868,7 +65652,7 @@ const DataAvailable = () => {
65868
65652
  Object.values(dataClusters).map((cluster, i) => /* @__PURE__ */ jsxRuntimeExports.jsx(DataCluster, { dataCluster: cluster }, i))
65869
65653
  ] }) }) });
65870
65654
  };
65871
- const getStyles$E = (tokens) => {
65655
+ const getStyles$G = (tokens) => {
65872
65656
  return {
65873
65657
  title: {
65874
65658
  marginBottom: tokens.Spacing.Tiny
@@ -65899,7 +65683,7 @@ const DisclosureInterstitial = React__default.forwardRef((props, interstitialNav
65899
65683
  const { handleGoBack, scrollToTop } = props;
65900
65684
  useAnalyticsPath(...PageviewInfo.CONNECT_DISCLOSURE);
65901
65685
  const tokens = useTokens();
65902
- const styles = getStyles$D(tokens);
65686
+ const styles = getStyles$F(tokens);
65903
65687
  const getNextDelay = getDelay();
65904
65688
  const institution = useSelector((state) => state.connect.selectedInstitution);
65905
65689
  const appName = useSelector((state) => state.profiles.client.oauth_app_name || null);
@@ -66048,7 +65832,7 @@ const DisclosureInterstitial = React__default.forwardRef((props, interstitialNav
66048
65832
  ] })
66049
65833
  ] });
66050
65834
  });
66051
- const getStyles$D = (tokens) => {
65835
+ const getStyles$F = (tokens) => {
66052
65836
  return {
66053
65837
  logoHeader: {
66054
65838
  marginTop: tokens.Spacing.Medium,
@@ -66303,7 +66087,7 @@ const OAuthError = React__default.forwardRef((props, navigationRef) => {
66303
66087
  const errorReason = useSelector((state) => state.connect.oauthErrorReason);
66304
66088
  const selectedInstitution = useSelector((state) => state.connect.selectedInstitution);
66305
66089
  const tokens = useTokens();
66306
- const styles = getStyles$C(tokens);
66090
+ const styles = getStyles$E(tokens);
66307
66091
  const getNextDelay = getDelay();
66308
66092
  useImperativeHandle(navigationRef, () => {
66309
66093
  return {
@@ -66351,7 +66135,7 @@ OAuthError.propTypes = {
66351
66135
  onReturnToSearch: PropTypes$1.func.isRequired
66352
66136
  };
66353
66137
  OAuthError.displayName = "OAuthError";
66354
- const getStyles$C = (tokens) => {
66138
+ const getStyles$E = (tokens) => {
66355
66139
  return {
66356
66140
  errorTitle: {
66357
66141
  fontWeight: tokens.FontWeight.Semibold
@@ -66390,6 +66174,22 @@ const getOAuthErrorMessage = (errorReason, memberName = null) => {
66390
66174
  };
66391
66175
 
66392
66176
  const getInstitutionLoginUrl = (institution) => institution.login_url ?? institution.url;
66177
+ const instutionSupportRequestedProducts = (config, institution) => {
66178
+ const products = config?.data_request?.products;
66179
+ if (Array.isArray(products) && products.length > 0) {
66180
+ return products.every((product) => {
66181
+ switch (product) {
66182
+ case COMBO_JOB_DATA_TYPES.ACCOUNT_NUMBER:
66183
+ return institution.account_verification_is_enabled;
66184
+ case COMBO_JOB_DATA_TYPES.ACCOUNT_OWNER:
66185
+ return institution.account_identification_is_enabled;
66186
+ default:
66187
+ return true;
66188
+ }
66189
+ });
66190
+ }
66191
+ return true;
66192
+ };
66393
66193
 
66394
66194
  const buildInitialValues = (loginFields) => {
66395
66195
  return loginFields.reduce((acc, currentField) => {
@@ -66553,7 +66353,7 @@ const Credentials = React__default.forwardRef(
66553
66353
  const [needToSendAnalyticEvent, setNeedToSendAnalyticEvent] = useState(true);
66554
66354
  const [needToSendPasswordAnalyticEvent, setPasswordAnalyticEvent] = useState(true);
66555
66355
  const tokens = useTokens();
66556
- const styles = getStyles$B(tokens);
66356
+ const styles = getStyles$D(tokens);
66557
66357
  const getNextDelay = getDelay(0, 100);
66558
66358
  const initialValues = buildInitialValues(credentials);
66559
66359
  const formSchema = buildFormSchema(credentials);
@@ -66927,7 +66727,7 @@ const Credentials = React__default.forwardRef(
66927
66727
  ] });
66928
66728
  }
66929
66729
  );
66930
- const getStyles$B = (tokens) => {
66730
+ const getStyles$D = (tokens) => {
66931
66731
  return {
66932
66732
  headerText: {
66933
66733
  paddingBottom: tokens.Spacing.XSmall
@@ -67185,7 +66985,7 @@ CreateMemberForm.propTypes = {
67185
66985
  const DeleteMemberSuccess = ({ institution, onContinueClick }) => {
67186
66986
  useAnalyticsPath(...PageviewInfo.CONNECT_DELETE_MEMBER_SUCCESS);
67187
66987
  const tokens = useTokens();
67188
- const styles = getStyles$A(tokens);
66988
+ const styles = getStyles$C(tokens);
67189
66989
  const getNextDelay = getDelay();
67190
66990
  return /* @__PURE__ */ jsxRuntimeExports.jsxs(React__default.Fragment, { children: [
67191
66991
  /* @__PURE__ */ jsxRuntimeExports.jsxs(SlideDown, { delay: getNextDelay(), children: [
@@ -67205,7 +67005,7 @@ const DeleteMemberSuccess = ({ institution, onContinueClick }) => {
67205
67005
  /* @__PURE__ */ jsxRuntimeExports.jsx(SlideDown, { delay: getNextDelay(), children: /* @__PURE__ */ jsxRuntimeExports.jsx(PrivateAndSecure, {}) })
67206
67006
  ] });
67207
67007
  };
67208
- const getStyles$A = (tokens) => {
67008
+ const getStyles$C = (tokens) => {
67209
67009
  return {
67210
67010
  primaryText: {
67211
67011
  fontSize: tokens.FontSize.H2,
@@ -67509,7 +67309,7 @@ const Connecting = (props) => {
67509
67309
  authentication_method: currentMember.is_oauth ? AuthenticationMethods.OAUTH : AuthenticationMethods.NON_OAUTH
67510
67310
  });
67511
67311
  const tokens = useTokens();
67512
- const styles = getStyles$z(tokens);
67312
+ const styles = getStyles$B(tokens);
67513
67313
  const getNextDelay = getDelay();
67514
67314
  const dispatch = useDispatch();
67515
67315
  const analyticFunctions = useContext(AnalyticContext);
@@ -67692,7 +67492,7 @@ const Connecting = (props) => {
67692
67492
  /* @__PURE__ */ jsxRuntimeExports.jsx(AriaLive, { level: "assertive", message, timeout: 500 })
67693
67493
  ] });
67694
67494
  };
67695
- const getStyles$z = (tokens) => ({
67495
+ const getStyles$B = (tokens) => ({
67696
67496
  container: {
67697
67497
  textAlign: "center"
67698
67498
  },
@@ -67755,7 +67555,7 @@ const PrimaryActions = ({
67755
67555
  onUpdateCredentialsClick
67756
67556
  }) => {
67757
67557
  const tokens = useTokens();
67758
- const styles = getStyles$y(tokens);
67558
+ const styles = getStyles$A(tokens);
67759
67559
  const actionMap = {
67760
67560
  [REFRESH]: {
67761
67561
  text: __("Try again"),
@@ -67790,7 +67590,7 @@ const PrimaryActions = ({
67790
67590
  );
67791
67591
  }) });
67792
67592
  };
67793
- const getStyles$y = (tokens) => {
67593
+ const getStyles$A = (tokens) => {
67794
67594
  return {
67795
67595
  container: {
67796
67596
  marginTop: tokens.Spacing.XLarge
@@ -67818,7 +67618,7 @@ const SecondaryActions = ({
67818
67618
  }) => {
67819
67619
  const sendPosthogEvent = useAnalyticsEvent();
67820
67620
  const tokens = useTokens();
67821
- const styles = getStyles$x(tokens);
67621
+ const styles = getStyles$z(tokens);
67822
67622
  const actionMap = [
67823
67623
  {
67824
67624
  key: VISIT_WEBSITE,
@@ -67876,7 +67676,7 @@ const SecondaryActions = ({
67876
67676
  );
67877
67677
  }) });
67878
67678
  };
67879
- const getStyles$x = (tokens) => {
67679
+ const getStyles$z = (tokens) => {
67880
67680
  return {
67881
67681
  container: {
67882
67682
  display: "flex",
@@ -67926,7 +67726,7 @@ const ImpededMemberError = ({
67926
67726
  title
67927
67727
  }) => {
67928
67728
  const tokens = useTokens();
67929
- const styles = getStyles$w(tokens);
67729
+ const styles = getStyles$y(tokens);
67930
67730
  return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { style: styles.container, children: [
67931
67731
  /* @__PURE__ */ jsxRuntimeExports.jsx(x, { truncate: false, variant: "H2", children: title }),
67932
67732
  /* @__PURE__ */ jsxRuntimeExports.jsx(x, { truncate: false, variant: "Paragraph", children: message }),
@@ -67965,7 +67765,7 @@ const ImpededMemberError = ({
67965
67765
  ] })
67966
67766
  ] });
67967
67767
  };
67968
- const getStyles$w = (tokens) => {
67768
+ const getStyles$y = (tokens) => {
67969
67769
  return {
67970
67770
  container: {
67971
67771
  display: "flex",
@@ -68008,7 +67808,7 @@ ImpededMemberError.propTypes = {
68008
67808
  const NoEligibleAccounts = () => {
68009
67809
  const sendPosthogEvent = useAnalyticsEvent();
68010
67810
  const tokens = useTokens();
68011
- const styles = getStyles$v(tokens);
67811
+ const styles = getStyles$x(tokens);
68012
67812
  const postMessageFunctions = useContext(PostMessageContext);
68013
67813
  const dispatch = useDispatch();
68014
67814
  const currentMember = useSelector(getCurrentMember);
@@ -68093,7 +67893,7 @@ const NoEligibleAccounts = () => {
68093
67893
  )
68094
67894
  ] });
68095
67895
  };
68096
- const getStyles$v = (tokens) => {
67896
+ const getStyles$x = (tokens) => {
68097
67897
  return {
68098
67898
  headerText: {
68099
67899
  fontWeight: tokens.FontWeight.Bold
@@ -68842,7 +68642,7 @@ const ThankYouMessage = ({
68842
68642
  portalTo = "connect-wrapper"
68843
68643
  }) => {
68844
68644
  const tokens = useTokens();
68845
- const styles = getStyles$u(tokens);
68645
+ const styles = getStyles$w(tokens);
68846
68646
  return createPortal(
68847
68647
  /* @__PURE__ */ jsxRuntimeExports.jsx("div", { style: styles.container, children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { style: styles.thankYouContainer, children: [
68848
68648
  /* @__PURE__ */ jsxRuntimeExports.jsx(SlideDown, { children: /* @__PURE__ */ jsxRuntimeExports.jsx("div", { style: styles.checkMarkIcon, children: /* @__PURE__ */ jsxRuntimeExports.jsx(CheckmarkFilled, { color: "#12875E", size: 80 }) }) }),
@@ -68852,7 +68652,7 @@ const ThankYouMessage = ({
68852
68652
  document.getElementById(portalTo)
68853
68653
  );
68854
68654
  };
68855
- const getStyles$u = (tokens) => ({
68655
+ const getStyles$w = (tokens) => ({
68856
68656
  container: {
68857
68657
  top: 0,
68858
68658
  margin: "0 auto",
@@ -68864,8 +68664,7 @@ const getStyles$u = (tokens) => ({
68864
68664
  },
68865
68665
  checkMarkIcon: {
68866
68666
  display: "flex",
68867
- justifyContent: "center",
68868
- marginBottom: tokens.Spacing.XLarge
68667
+ justifyContent: "center"
68869
68668
  },
68870
68669
  thankYouContainer: {
68871
68670
  display: "flex",
@@ -68873,14 +68672,14 @@ const getStyles$u = (tokens) => ({
68873
68672
  justifyContent: "center",
68874
68673
  alignItems: "center",
68875
68674
  maxWidth: "400px",
68876
- margin: "60px auto 0",
68675
+ margin: "80px auto 0",
68877
68676
  padding: "0 24px"
68878
68677
  },
68879
68678
  thankYouMessage: {
68880
- marginTop: "31px"
68679
+ marginTop: "24px"
68881
68680
  },
68882
68681
  button: {
68883
- marginTop: "31px"
68682
+ marginTop: "32px"
68884
68683
  }
68885
68684
  });
68886
68685
 
@@ -68905,125 +68704,123 @@ const SURVEY_RATING = {
68905
68704
  4: "4",
68906
68705
  5: "5"
68907
68706
  };
68908
- const ConnectSuccessSurvey = React__default.forwardRef(
68909
- ({ handleBack, handleDone }, connectSuccessSurveyRef) => {
68910
- const [currentQuestionIndex, setCurrentQuestionIndex] = useState(0);
68911
- const [answers, setAnswers] = useState({});
68912
- const [showThankYouMessage, setShowThankYouMessage] = useState(false);
68913
- const [showErrorMessage, setShowErrorMessage] = useState(false);
68914
- const { onSubmitConnectSuccessSurvey } = useContext(AnalyticContext);
68915
- const tokens = useTokens();
68916
- const styles = getStyles$t(tokens);
68917
- useImperativeHandle(connectSuccessSurveyRef, () => {
68918
- return {
68919
- handleConnectSuccessSurveyBackButton() {
68920
- if (currentQuestionIndex === 0) {
68921
- handleBack();
68922
- } else {
68923
- setCurrentQuestionIndex(currentQuestionIndex - 1);
68924
- setShowErrorMessage(false);
68925
- }
68707
+ const ConnectSuccessSurvey = React__default.forwardRef(({ handleBack, handleDone }, connectSuccessSurveyRef) => {
68708
+ const [currentQuestionIndex, setCurrentQuestionIndex] = useState(0);
68709
+ const [answers, setAnswers] = useState({});
68710
+ const [showThankYouMessage, setShowThankYouMessage] = useState(false);
68711
+ const [showErrorMessage, setShowErrorMessage] = useState(false);
68712
+ const { onSubmitConnectSuccessSurvey } = useContext(AnalyticContext);
68713
+ const tokens = useTokens();
68714
+ const styles = getStyles$v(tokens);
68715
+ useImperativeHandle(connectSuccessSurveyRef, () => {
68716
+ return {
68717
+ handleConnectSuccessSurveyBackButton() {
68718
+ if (currentQuestionIndex === 0) {
68719
+ handleBack();
68720
+ } else {
68721
+ setCurrentQuestionIndex(currentQuestionIndex - 1);
68722
+ setShowErrorMessage(false);
68926
68723
  }
68927
- };
68928
- }, [currentQuestionIndex]);
68929
- const handleToggleButtonChange = (questionIndex, answer) => {
68930
- if (answer !== null) {
68931
- setAnswers({ ...answers, [questionIndex]: answer });
68932
- setShowErrorMessage(false);
68933
68724
  }
68934
68725
  };
68935
- const handleTextFieldChange = (questionIndex, answer) => {
68726
+ }, [currentQuestionIndex]);
68727
+ const handleToggleButtonChange = (questionIndex, answer) => {
68728
+ if (answer !== null) {
68936
68729
  setAnswers({ ...answers, [questionIndex]: answer });
68937
- };
68938
- const handleContinue = () => {
68939
- if (currentQuestionIndex in answers) {
68940
- setCurrentQuestionIndex(currentQuestionIndex + 1);
68941
- } else {
68942
- setShowErrorMessage(true);
68943
- }
68944
- };
68945
- const sendFeedback = () => {
68946
- onSubmitConnectSuccessSurvey(answers);
68947
- setShowThankYouMessage(true);
68948
- };
68949
- const currentQuestion = SURVEY_QUESTIONS[currentQuestionIndex];
68950
- return /* @__PURE__ */ jsxRuntimeExports.jsx("div", { ref: connectSuccessSurveyRef, children: showThankYouMessage ? /* @__PURE__ */ jsxRuntimeExports.jsx(ThankYouMessage, { handleDone }) : /* @__PURE__ */ jsxRuntimeExports.jsx(React__default.Fragment, { children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { style: styles.surveyQuestion, children: [
68951
- /* @__PURE__ */ jsxRuntimeExports.jsx(x, { component: "h2", truncate: false, variant: "H2", children: currentQuestion.question() }),
68952
- currentQuestion.type === "number" ? /* @__PURE__ */ jsxRuntimeExports.jsxs(React__default.Fragment, { children: [
68953
- /* @__PURE__ */ jsxRuntimeExports.jsx(
68954
- ToggleButtonGroup,
68955
- {
68956
- "aria-label": "Platform",
68957
- color: "primary",
68958
- exclusive: true,
68959
- onChange: (e) => handleToggleButtonChange(currentQuestionIndex, e.target.value),
68960
- style: styles.toggleButtonGroup,
68961
- value: answers[currentQuestionIndex],
68962
- children: Object.keys(SURVEY_RATING).map((key) => {
68963
- return /* @__PURE__ */ jsxRuntimeExports.jsx(
68964
- ToggleButton,
68965
- {
68730
+ setShowErrorMessage(false);
68731
+ }
68732
+ };
68733
+ const handleTextFieldChange = (questionIndex, answer) => {
68734
+ setAnswers({ ...answers, [questionIndex]: answer });
68735
+ };
68736
+ const handleContinue = () => {
68737
+ if (currentQuestionIndex in answers) {
68738
+ setCurrentQuestionIndex(currentQuestionIndex + 1);
68739
+ } else {
68740
+ setShowErrorMessage(true);
68741
+ }
68742
+ };
68743
+ const sendFeedback = () => {
68744
+ onSubmitConnectSuccessSurvey(answers);
68745
+ setShowThankYouMessage(true);
68746
+ };
68747
+ const currentQuestion = SURVEY_QUESTIONS[currentQuestionIndex];
68748
+ return /* @__PURE__ */ jsxRuntimeExports.jsx("div", { children: showThankYouMessage ? /* @__PURE__ */ jsxRuntimeExports.jsx(ThankYouMessage, { handleDone }) : /* @__PURE__ */ jsxRuntimeExports.jsx(React__default.Fragment, { children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { style: styles.surveyQuestion, children: [
68749
+ /* @__PURE__ */ jsxRuntimeExports.jsx(x, { component: "h2", truncate: false, variant: "H2", children: currentQuestion.question() }),
68750
+ currentQuestion.type === "number" ? /* @__PURE__ */ jsxRuntimeExports.jsxs(React__default.Fragment, { children: [
68751
+ /* @__PURE__ */ jsxRuntimeExports.jsx(
68752
+ ToggleButtonGroup,
68753
+ {
68754
+ "aria-label": "Platform",
68755
+ color: "primary",
68756
+ exclusive: true,
68757
+ onChange: (_, newSelected) => handleToggleButtonChange(currentQuestionIndex, newSelected),
68758
+ style: styles.toggleButtonGroup,
68759
+ value: answers[currentQuestionIndex],
68760
+ children: Object.keys(SURVEY_RATING).map((key) => {
68761
+ return /* @__PURE__ */ jsxRuntimeExports.jsx(
68762
+ ToggleButton,
68763
+ {
68764
+ style: styles.toggleButton,
68765
+ sx: {
68966
68766
  color: "#2C64EF",
68967
- style: styles.toggleButton,
68968
- sx: {
68969
- "&.Mui-selected": {
68970
- backgroundColor: "#2C64EF",
68971
- color: tokens.TextColor.Light,
68972
- boxShadow: "none"
68973
- }
68974
- },
68975
- value: SURVEY_RATING[key],
68976
- children: key
68767
+ "&.Mui-selected": {
68768
+ backgroundColor: "#2C64EF",
68769
+ color: tokens.TextColor.Light,
68770
+ boxShadow: "none"
68771
+ }
68977
68772
  },
68978
- key
68979
- );
68980
- })
68981
- }
68982
- ),
68983
- /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { style: styles.boundLabels, children: [
68984
- /* @__PURE__ */ jsxRuntimeExports.jsx(x, { bold: true, variant: "Small", children: __("Strongly disagree") }),
68985
- /* @__PURE__ */ jsxRuntimeExports.jsx(x, { bold: true, variant: "Small", children: __("Strongly agree") })
68986
- ] })
68987
- ] }) : /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { style: styles.textQuestion, children: [
68988
- /* @__PURE__ */ jsxRuntimeExports.jsx(x, { style: styles.textQuestionTitle, variant: "Paragraph", children: __("Please let us know how we can improve.") }),
68989
- /* @__PURE__ */ jsxRuntimeExports.jsx(
68990
- TextField$1,
68991
- {
68992
- autoFocus: true,
68993
- multiline: true,
68994
- onChange: (e) => handleTextFieldChange(currentQuestionIndex, e.target.value),
68995
- rows: 4,
68996
- value: answers[currentQuestionIndex]
68997
- }
68998
- )
68999
- ] }),
69000
- showErrorMessage && /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { style: styles.errorMessage, children: [
69001
- /* @__PURE__ */ jsxRuntimeExports.jsx(AttentionFilled, { color: "#E32727", size: 16, style: styles.errorIcon }),
69002
- /* @__PURE__ */ jsxRuntimeExports.jsx(x, { color: "#E32727", sx: { fontSize: "12px" }, variant: "XSmall", children: __("Please select an option before continuing.") })
69003
- ] }),
69004
- currentQuestionIndex === SURVEY_QUESTIONS.length - 1 ? /* @__PURE__ */ jsxRuntimeExports.jsx(
69005
- Button$1,
69006
- {
69007
- fullWidth: true,
69008
- onClick: sendFeedback,
69009
- style: styles.button,
69010
- variant: "contained",
69011
- children: __("Send feedback")
68773
+ value: SURVEY_RATING[+key],
68774
+ children: key
68775
+ },
68776
+ key
68777
+ );
68778
+ })
69012
68779
  }
69013
- ) : /* @__PURE__ */ jsxRuntimeExports.jsx(
69014
- Button$1,
68780
+ ),
68781
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { style: styles.boundLabels, children: [
68782
+ /* @__PURE__ */ jsxRuntimeExports.jsx(x, { bold: true, variant: "Small", children: __("Strongly disagree") }),
68783
+ /* @__PURE__ */ jsxRuntimeExports.jsx(x, { bold: true, variant: "Small", children: __("Strongly agree") })
68784
+ ] })
68785
+ ] }) : /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { style: styles.textQuestion, children: [
68786
+ /* @__PURE__ */ jsxRuntimeExports.jsx(x, { style: styles.textQuestionTitle, variant: "Paragraph", children: __("Please let us know how we can improve.") }),
68787
+ /* @__PURE__ */ jsxRuntimeExports.jsx(
68788
+ TextField$1,
69015
68789
  {
69016
- fullWidth: true,
69017
- onClick: handleContinue,
69018
- style: styles.button,
69019
- variant: "contained",
69020
- children: __("Continue")
68790
+ autoFocus: true,
68791
+ multiline: true,
68792
+ onChange: (e) => handleTextFieldChange(currentQuestionIndex, e.target.value),
68793
+ rows: 4,
68794
+ value: answers[currentQuestionIndex]
69021
68795
  }
69022
68796
  )
69023
- ] }) }) });
69024
- }
69025
- );
69026
- const getStyles$t = (tokens) => ({
68797
+ ] }),
68798
+ showErrorMessage && /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { style: styles.errorMessage, children: [
68799
+ /* @__PURE__ */ jsxRuntimeExports.jsx(AttentionFilled, { color: "#E32727", size: 16, style: styles.errorIcon }),
68800
+ /* @__PURE__ */ jsxRuntimeExports.jsx(x, { color: "#E32727", sx: { fontSize: "12px" }, variant: "XSmall", children: __("Please select an option before continuing.") })
68801
+ ] }),
68802
+ currentQuestionIndex === SURVEY_QUESTIONS.length - 1 ? /* @__PURE__ */ jsxRuntimeExports.jsx(
68803
+ Button$1,
68804
+ {
68805
+ fullWidth: true,
68806
+ onClick: sendFeedback,
68807
+ style: styles.button,
68808
+ variant: "contained",
68809
+ children: __("Send feedback")
68810
+ }
68811
+ ) : /* @__PURE__ */ jsxRuntimeExports.jsx(
68812
+ Button$1,
68813
+ {
68814
+ fullWidth: true,
68815
+ onClick: handleContinue,
68816
+ style: styles.button,
68817
+ variant: "contained",
68818
+ children: __("Continue")
68819
+ }
68820
+ )
68821
+ ] }) }) });
68822
+ });
68823
+ const getStyles$v = (tokens) => ({
69027
68824
  checkMarkIcon: {
69028
68825
  display: "flex",
69029
68826
  justifyContent: "center",
@@ -69082,8 +68879,7 @@ const getStyles$t = (tokens) => ({
69082
68879
  display: "flex",
69083
68880
  flexDirection: "column",
69084
68881
  width: "100%",
69085
- marginTop: tokens.Spacing.Large,
69086
- marginBottom: tokens.Spacing.XLarge
68882
+ marginTop: tokens.Spacing.Large
69087
68883
  },
69088
68884
  textQuestionTitle: {
69089
68885
  marginBottom: tokens.Spacing.Medium
@@ -69104,7 +68900,7 @@ const Connected = React__default.forwardRef(
69104
68900
  const appName = useSelector((state) => state.profiles.client.oauth_app_name || null);
69105
68901
  const { onShowConnectSuccessSurvey } = useContext(AnalyticContext);
69106
68902
  const tokens = useTokens();
69107
- const styles = getStyles$s(tokens);
68903
+ const styles = getStyles$u(tokens);
69108
68904
  const getNextDelay = getDelay();
69109
68905
  const [showFeedBack, setShowFeedBack] = useState(false);
69110
68906
  const { name: institutionName } = institution;
@@ -69119,7 +68915,7 @@ const Connected = React__default.forwardRef(
69119
68915
  useImperativeHandle(navigationRef, () => {
69120
68916
  return {
69121
68917
  handleBackButton() {
69122
- connectSuccessSurveyRef.current.handleConnectSuccessSurveyBackButton();
68918
+ connectSuccessSurveyRef.current?.handleConnectSuccessSurveyBackButton();
69123
68919
  },
69124
68920
  showBackButton() {
69125
68921
  return showFeedBack;
@@ -69212,7 +69008,7 @@ const Connected = React__default.forwardRef(
69212
69008
  ] });
69213
69009
  }
69214
69010
  );
69215
- const getStyles$s = (tokens) => {
69011
+ const getStyles$u = (tokens) => {
69216
69012
  return {
69217
69013
  header: {
69218
69014
  display: "flex",
@@ -69265,13 +69061,13 @@ const Tag = ({
69265
69061
  ...rest
69266
69062
  }) => {
69267
69063
  const tokens = useTokens();
69268
- const styles = getStyles$r(tokens);
69064
+ const styles = getStyles$t(tokens);
69269
69065
  return /* @__PURE__ */ jsxRuntimeExports.jsxs("span", { className: `${dist.css(styles.wrapper)} ${size} ${variant} kyper-tag ${className}`, ...rest, children: [
69270
69066
  title,
69271
69067
  children
69272
69068
  ] });
69273
69069
  };
69274
- const getStyles$r = (tokens) => ({
69070
+ const getStyles$t = (tokens) => ({
69275
69071
  wrapper: {
69276
69072
  display: "inline-flex",
69277
69073
  alignItems: "center",
@@ -69348,7 +69144,7 @@ Tag.propTypes = {
69348
69144
  const ActionTile = (props) => {
69349
69145
  const { icon, onSelectAction, subTitle, title } = props;
69350
69146
  const tokens = useTokens();
69351
- const styles = getStyles$q(tokens);
69147
+ const styles = getStyles$s(tokens);
69352
69148
  const startIcon = /* @__PURE__ */ jsxRuntimeExports.jsx("div", { style: styles.iconColumn, children: /* @__PURE__ */ jsxRuntimeExports.jsx("div", { style: styles.iconBackground, children: icon }) });
69353
69149
  return /* @__PURE__ */ jsxRuntimeExports.jsx("div", { children: /* @__PURE__ */ jsxRuntimeExports.jsx(
69354
69150
  Button$1,
@@ -69366,7 +69162,7 @@ const ActionTile = (props) => {
69366
69162
  }
69367
69163
  ) });
69368
69164
  };
69369
- const getStyles$q = (tokens) => ({
69165
+ const getStyles$s = (tokens) => ({
69370
69166
  iconColumn: {
69371
69167
  alignSelf: "start",
69372
69168
  display: "flex",
@@ -69404,7 +69200,7 @@ const SharedRoutingNumber = (props) => {
69404
69200
  useAnalyticsPath(...PageviewInfo.CONNECT_SHARED_ROUTING_NUMBER);
69405
69201
  const containerRef = useRef(null);
69406
69202
  const tokens = useTokens();
69407
- const styles = getStyles$p(tokens);
69203
+ const styles = getStyles$r(tokens);
69408
69204
  const getNextDelay = getDelay();
69409
69205
  return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { ref: containerRef, style: styles.container, children: [
69410
69206
  /* @__PURE__ */ jsxRuntimeExports.jsxs(SlideDown, { delay: getNextDelay(), children: [
@@ -69464,7 +69260,7 @@ const SharedRoutingNumber = (props) => {
69464
69260
  ] })
69465
69261
  ] });
69466
69262
  };
69467
- const getStyles$p = (tokens) => ({
69263
+ const getStyles$r = (tokens) => ({
69468
69264
  container: {
69469
69265
  display: "flex",
69470
69266
  flexDirection: "column"
@@ -69515,7 +69311,7 @@ const SvgCheckRoutingNumber = (props) => /* @__PURE__ */ React$2.createElement("
69515
69311
  const FindAccountInfo = ({ onClose, step }) => {
69516
69312
  const containerRef = useRef(null);
69517
69313
  const tokens = useTokens();
69518
- const styles = getStyles$o(tokens);
69314
+ const styles = getStyles$q(tokens);
69519
69315
  const getNextDelay = getDelay();
69520
69316
  const type = step === VIEWS.ACCOUNT_INFO ? __("account") : __("routing");
69521
69317
  const handleClose = () => fadeOut(containerRef.current, "up", 300).then(onClose);
@@ -69570,7 +69366,7 @@ const FindAccountInfo = ({ onClose, step }) => {
69570
69366
  ) })
69571
69367
  ] });
69572
69368
  };
69573
- const getStyles$o = (tokens) => ({
69369
+ const getStyles$q = (tokens) => ({
69574
69370
  container: {
69575
69371
  display: "flex",
69576
69372
  flexDirection: "column",
@@ -69596,7 +69392,7 @@ FindAccountInfo.propTypes = {
69596
69392
  const ActionableUtilityRow = (props) => {
69597
69393
  const { text, textStyles, onClick, icon, role = "button", showHorizontalLine = true } = props;
69598
69394
  const tokens = useTokens();
69599
- const styles = getStyles$n(tokens);
69395
+ const styles = getStyles$p(tokens);
69600
69396
  return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { style: styles.container, children: [
69601
69397
  /* @__PURE__ */ jsxRuntimeExports.jsx(
69602
69398
  Button$1,
@@ -69626,7 +69422,7 @@ const ActionableUtilityRow = (props) => {
69626
69422
  showHorizontalLine && /* @__PURE__ */ jsxRuntimeExports.jsx("hr", { style: styles.hr })
69627
69423
  ] });
69628
69424
  };
69629
- const getStyles$n = (tokens) => {
69425
+ const getStyles$p = (tokens) => {
69630
69426
  return {
69631
69427
  container: {
69632
69428
  marginLeft: `-${tokens.Spacing.Small}px`,
@@ -69668,7 +69464,7 @@ const RoutingNumber = (props) => {
69668
69464
  const containerRef = useRef(null);
69669
69465
  useAnalyticsPath(...PageviewInfo.CONNECT_MICRODEPOSITS_ROUTING_NUMBER);
69670
69466
  const tokens = useTokens();
69671
- const styles = getStyles$m(tokens);
69467
+ const styles = getStyles$o(tokens);
69672
69468
  const getNextDelay = getDelay();
69673
69469
  const postMessageFunctions = useContext(PostMessageContext);
69674
69470
  const [routingBlocked, setRoutingBlocked] = useState("");
@@ -69810,7 +69606,7 @@ const RoutingNumber = (props) => {
69810
69606
  ] })
69811
69607
  ] });
69812
69608
  };
69813
- const getStyles$m = (tokens) => ({
69609
+ const getStyles$o = (tokens) => ({
69814
69610
  header: {
69815
69611
  display: "flex",
69816
69612
  flexDirection: "column"
@@ -69835,7 +69631,7 @@ const HowItWorks = ({ onContinue }) => {
69835
69631
  const containerRef = useRef(null);
69836
69632
  useAnalyticsPath(...PageviewInfo.CONNECT_MICRODEPOSITS_HOW_IT_WORKS);
69837
69633
  const tokens = useTokens();
69838
- const styles = getStyles$l(tokens);
69634
+ const styles = getStyles$n(tokens);
69839
69635
  const getNextDelay = getDelay();
69840
69636
  return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { ref: containerRef, children: [
69841
69637
  /* @__PURE__ */ jsxRuntimeExports.jsx(SlideDown, { delay: getNextDelay(), children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { style: styles.body, children: [
@@ -69864,7 +69660,7 @@ const HowItWorks = ({ onContinue }) => {
69864
69660
  ) })
69865
69661
  ] });
69866
69662
  };
69867
- const getStyles$l = (tokens) => {
69663
+ const getStyles$n = (tokens) => {
69868
69664
  return {
69869
69665
  body: {
69870
69666
  display: "flex",
@@ -69909,7 +69705,7 @@ const PersonalInfoForm = ({ accountDetails, onContinue }) => {
69909
69705
  initialFormValues
69910
69706
  );
69911
69707
  const tokens = useTokens();
69912
- const styles = getStyles$k(tokens);
69708
+ const styles = getStyles$m(tokens);
69913
69709
  const getNextDelay = getDelay();
69914
69710
  useEffect(() => {
69915
69711
  if (!isSubmitting) return () => {
@@ -69996,7 +69792,7 @@ const PersonalInfoForm = ({ accountDetails, onContinue }) => {
69996
69792
  /* @__PURE__ */ jsxRuntimeExports.jsx(AriaLive, { level: "assertive", message: Object.values(errors).join(", ") })
69997
69793
  ] }) });
69998
69794
  };
69999
- const getStyles$k = (tokens) => ({
69795
+ const getStyles$m = (tokens) => ({
70000
69796
  header: {
70001
69797
  display: "flex",
70002
69798
  flexDirection: "column"
@@ -70048,7 +69844,7 @@ const AccountInfo = (props) => {
70048
69844
  initialForm
70049
69845
  );
70050
69846
  const tokens = useTokens();
70051
- const styles = getStyles$j(tokens);
69847
+ const styles = getStyles$l(tokens);
70052
69848
  const getNextDelay = getDelay();
70053
69849
  function handleContinue() {
70054
69850
  const newAccountDetails = {
@@ -70159,7 +69955,7 @@ const AccountInfo = (props) => {
70159
69955
  ] })
70160
69956
  ] });
70161
69957
  };
70162
- const getStyles$j = (tokens) => ({
69958
+ const getStyles$l = (tokens) => ({
70163
69959
  header: {
70164
69960
  display: "flex",
70165
69961
  flexDirection: "column"
@@ -70210,7 +70006,7 @@ Edit.displayName = "Edit";
70210
70006
 
70211
70007
  const DetailReviewItem = (props) => {
70212
70008
  const tokens = useTokens();
70213
- const styles = getStyles$i(tokens);
70009
+ const styles = getStyles$k(tokens);
70214
70010
  return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { style: styles.infoRow, children: [
70215
70011
  /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { style: styles.textGroup, children: [
70216
70012
  /* @__PURE__ */ jsxRuntimeExports.jsx(
@@ -70254,7 +70050,7 @@ const DetailReviewItem = (props) => {
70254
70050
  )
70255
70051
  ] });
70256
70052
  };
70257
- const getStyles$i = (tokens) => ({
70053
+ const getStyles$k = (tokens) => ({
70258
70054
  infoRow: {
70259
70055
  alignItems: "center",
70260
70056
  borderBottom: `1px solid ${tokens.Color.Neutral300}`,
@@ -70295,7 +70091,7 @@ const ConfirmDetails = (props) => {
70295
70091
  const is_mobile_webview = useSelector(selectIsMobileWebView);
70296
70092
  const user_guid = useSelector((state) => state.profiles.user.guid);
70297
70093
  const tokens = useTokens();
70298
- const styles = getStyles$h(tokens);
70094
+ const styles = getStyles$j(tokens);
70299
70095
  const getNextDelay = getDelay();
70300
70096
  const analyticFunctions = useContext(AnalyticContext);
70301
70097
  const postMessageFunctions = useContext(PostMessageContext);
@@ -70431,7 +70227,7 @@ const ConfirmDetails = (props) => {
70431
70227
  ] })
70432
70228
  ] });
70433
70229
  };
70434
- const getStyles$h = (tokens) => ({
70230
+ const getStyles$j = (tokens) => ({
70435
70231
  header: {
70436
70232
  display: "flex",
70437
70233
  flexDirection: "column"
@@ -70477,7 +70273,7 @@ const ComeBack = ({ microdeposit, onDone }) => {
70477
70273
  const containerRef = useRef(null);
70478
70274
  useAnalyticsPath(...PageviewInfo.CONNECT_MICRODEPOSITS_COME_BACK);
70479
70275
  const tokens = useTokens();
70480
- const styles = getStyles$g(tokens);
70276
+ const styles = getStyles$i(tokens);
70481
70277
  const postMessageFunctions = useContext(PostMessageContext);
70482
70278
  return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { ref: containerRef, children: [
70483
70279
  /* @__PURE__ */ jsxRuntimeExports.jsx(SlideDown, { delay: 100, children: /* @__PURE__ */ jsxRuntimeExports.jsx("div", { "aria-hidden": true, "data-test": "svg-header", style: styles.svg, children: /* @__PURE__ */ jsxRuntimeExports.jsx(SvgComeBackGraphic, {}) }) }),
@@ -70515,7 +70311,7 @@ const ComeBack = ({ microdeposit, onDone }) => {
70515
70311
  ) })
70516
70312
  ] });
70517
70313
  };
70518
- const getStyles$g = (tokens) => ({
70314
+ const getStyles$i = (tokens) => ({
70519
70315
  header: {
70520
70316
  display: "flex",
70521
70317
  flexDirection: "column"
@@ -70577,7 +70373,7 @@ const VerifyDeposits = ({ microdeposit, onSuccess }) => {
70577
70373
  initialForm
70578
70374
  );
70579
70375
  const tokens = useTokens();
70580
- const styles = getStyles$f(tokens);
70376
+ const styles = getStyles$h(tokens);
70581
70377
  const [state, dispatch] = useReducer(reducer$3, { isSubmitting: false, submittingError: false });
70582
70378
  useEffect(() => {
70583
70379
  if (!state.isSubmitting) return () => {
@@ -70672,7 +70468,7 @@ const VerifyDeposits = ({ microdeposit, onSuccess }) => {
70672
70468
  ] })
70673
70469
  ] });
70674
70470
  };
70675
- const getStyles$f = (tokens) => ({
70471
+ const getStyles$h = (tokens) => ({
70676
70472
  header: {
70677
70473
  display: "flex",
70678
70474
  flexDirection: "column"
@@ -70720,7 +70516,7 @@ const MicrodepositErrors = ({
70720
70516
  const containerRef = useRef(null);
70721
70517
  useAnalyticsPath(...PageviewInfo.CONNECT_MICRODEPOSITS_MICRODEPOSIT_ERRORS);
70722
70518
  const tokens = useTokens();
70723
- const styles = getStyles$e(tokens);
70519
+ const styles = getStyles$g(tokens);
70724
70520
  const postMessageFunctions = useContext(PostMessageContext);
70725
70521
  const isErroredStatus = microdeposit?.status === MicrodepositsStatuses.ERRORED || microdepositCreateError?.status === 400;
70726
70522
  const accountNumber = microdeposit?.account_number || microdepositCreateError?.data.micro_deposit.account_number || accountDetails?.account_number;
@@ -70794,7 +70590,7 @@ const MicrodepositErrors = ({
70794
70590
  ] })
70795
70591
  ] });
70796
70592
  };
70797
- const getStyles$e = (tokens) => ({
70593
+ const getStyles$g = (tokens) => ({
70798
70594
  header: {
70799
70595
  display: "flex",
70800
70596
  flexDirection: "column"
@@ -70845,7 +70641,7 @@ const Verifying = ({ microdeposit, onError, onSuccess }) => {
70845
70641
  useAnalyticsPath(...PageviewInfo.CONNECT_MICRODEPOSITS_VERIFYING);
70846
70642
  const { api } = useApi();
70847
70643
  const tokens = useTokens();
70848
- const styles = getStyles$d(tokens);
70644
+ const styles = getStyles$f(tokens);
70849
70645
  useEffect(() => {
70850
70646
  const pollStatus = (originalMicrodeposit) => interval(3e3).pipe(
70851
70647
  switchMap(() => defer(() => api.loadMicrodepositByGuid(microdeposit.guid))),
@@ -70896,7 +70692,7 @@ const Verifying = ({ microdeposit, onError, onSuccess }) => {
70896
70692
  /* @__PURE__ */ jsxRuntimeExports.jsx(SlideDown, { children: /* @__PURE__ */ jsxRuntimeExports.jsx("div", { style: styles.spinner, children: /* @__PURE__ */ jsxRuntimeExports.jsx(LoadingSpinner, {}) }) })
70897
70693
  ] });
70898
70694
  };
70899
- const getStyles$d = (tokens) => ({
70695
+ const getStyles$f = (tokens) => ({
70900
70696
  header: {
70901
70697
  display: "flex",
70902
70698
  flexDirection: "column"
@@ -70923,7 +70719,7 @@ const Verified = ({ microdeposit, onDone }) => {
70923
70719
  const containerRef = useRef(null);
70924
70720
  useAnalyticsPath(...PageviewInfo.CONNECT_MICRODEPOSITS_VERIFIED);
70925
70721
  const tokens = useTokens();
70926
- const styles = getStyles$c(tokens);
70722
+ const styles = getStyles$e(tokens);
70927
70723
  const postMessageFunctions = useContext(PostMessageContext);
70928
70724
  const is_mobile_webview = useSelector(selectIsMobileWebView);
70929
70725
  const analyticFunctions = useContext(AnalyticContext);
@@ -70957,7 +70753,7 @@ const Verified = ({ microdeposit, onDone }) => {
70957
70753
  ) })
70958
70754
  ] });
70959
70755
  };
70960
- const getStyles$c = (tokens) => ({
70756
+ const getStyles$e = (tokens) => ({
70961
70757
  container: {
70962
70758
  position: "relative"
70963
70759
  },
@@ -71348,14 +71144,17 @@ const VerifyExistingMember = (props) => {
71348
71144
  const { api } = useApi();
71349
71145
  const dispatch = useDispatch();
71350
71146
  const { members, onAddNew } = props;
71351
- const iavMembers = members.filter((member) => member.verification_is_enabled);
71147
+ const iavMembers = members.filter(
71148
+ (member) => member.verification_is_enabled && member.is_managed_by_user
71149
+ // Only show user-managed members that support verification
71150
+ );
71352
71151
  const [selectedMember, setSelectedMember] = useState(null);
71353
71152
  const [{ isLoadingInstitution, institutionError }, setInstitution] = useState({
71354
71153
  isLoadingInstitution: false,
71355
71154
  institutionError: null
71356
71155
  });
71357
71156
  const tokens = useTokens();
71358
- const styles = getStyles$b(tokens);
71157
+ const styles = getStyles$d(tokens);
71359
71158
  const handleMemberClick = (selectedMember2) => {
71360
71159
  setSelectedMember(selectedMember2);
71361
71160
  setInstitution((state) => ({ ...state, isLoadingInstitution: true }));
@@ -71470,7 +71269,7 @@ const VerifyExistingMember = (props) => {
71470
71269
  /* @__PURE__ */ jsxRuntimeExports.jsx(PrivateAndSecure, {})
71471
71270
  ] });
71472
71271
  };
71473
- const getStyles$b = (tokens) => {
71272
+ const getStyles$d = (tokens) => {
71474
71273
  return {
71475
71274
  container: {
71476
71275
  display: "flex",
@@ -71490,7 +71289,7 @@ VerifyExistingMember.displayName = "VerifyExistingMember";
71490
71289
  const VerifyError = ({ error, onGoBack }) => {
71491
71290
  const buttonText = __("Go back");
71492
71291
  const tokens = useTokens();
71493
- const styles = getStyles$a(tokens);
71292
+ const styles = getStyles$c(tokens);
71494
71293
  const getNextDelay = getDelay();
71495
71294
  return /* @__PURE__ */ jsxRuntimeExports.jsxs(React__default.Fragment, { children: [
71496
71295
  /* @__PURE__ */ jsxRuntimeExports.jsx(SlideDown, { delay: getNextDelay(), children: /* @__PURE__ */ jsxRuntimeExports.jsx(ViewTitle, { title: __("Something went wrong") }) }),
@@ -71518,7 +71317,7 @@ function getErrorMessage(status = 500) {
71518
71317
  return __("Oops! Something went wrong. Error code: %1", status);
71519
71318
  }
71520
71319
  }
71521
- const getStyles$a = (tokens) => {
71320
+ const getStyles$c = (tokens) => {
71522
71321
  return {
71523
71322
  header: {
71524
71323
  fontSize: tokens.FontSize.H2,
@@ -71871,7 +71670,7 @@ const StyledAccountTypeIcon = ({
71871
71670
  ...props
71872
71671
  }) => {
71873
71672
  const tokens = useTokens();
71874
- const styles = getStyles$9(tokens, props.size, style);
71673
+ const styles = getStyles$b(tokens, props.size, style);
71875
71674
  const getIcon = () => {
71876
71675
  switch (props.icon) {
71877
71676
  case AccountTypes.CHECKING:
@@ -71906,7 +71705,7 @@ const StyledAccountTypeIcon = ({
71906
71705
  };
71907
71706
  return /* @__PURE__ */ jsxRuntimeExports.jsx("div", { style: styles.wrapper, children: getIcon() });
71908
71707
  };
71909
- const getStyles$9 = (tokens, size, style) => ({
71708
+ const getStyles$b = (tokens, size, style) => ({
71910
71709
  wrapper: {
71911
71710
  background: "linear-gradient(to top right, rgba(77, 214, 214, 0.35), rgba(143, 69, 229, 0.35)",
71912
71711
  border: `1px solid rgba(18, 20, 23, 0.25)`,
@@ -71959,7 +71758,7 @@ const _range = /*@__PURE__*/getDefaultExportFromCjs(range_1);
71959
71758
  const DayOfMonthPicker = React__default.forwardRef(
71960
71759
  (props, ref) => {
71961
71760
  const tokens = useTokens();
71962
- const styles = getStyles$8(tokens);
71761
+ const styles = getStyles$a(tokens);
71963
71762
  const getNextDelay = getDelay();
71964
71763
  const days = _range(1, 32);
71965
71764
  const containerRef = ref;
@@ -72014,7 +71813,7 @@ const DayOfMonthPicker = React__default.forwardRef(
72014
71813
  ] });
72015
71814
  }
72016
71815
  );
72017
- const getStyles$8 = (tokens) => ({
71816
+ const getStyles$a = (tokens) => ({
72018
71817
  buttons: {
72019
71818
  display: "flex",
72020
71819
  flexWrap: "wrap",
@@ -72038,7 +71837,7 @@ const ManualAccountForm = React__default.forwardRef(
72038
71837
  const [accountCreationError, setAccountCreationError] = useState(null);
72039
71838
  const dispatch = useDispatch();
72040
71839
  const tokens = useTokens();
72041
- const styles = getStyles$7(tokens);
71840
+ const styles = getStyles$9(tokens);
72042
71841
  const getNextDelay = getDelay();
72043
71842
  const fields = getFormFields(props.accountType);
72044
71843
  const formRef = ref;
@@ -72272,7 +72071,7 @@ const ManualAccountForm = React__default.forwardRef(
72272
72071
  ] });
72273
72072
  }
72274
72073
  );
72275
- const getStyles$7 = (tokens) => ({
72074
+ const getStyles$9 = (tokens) => ({
72276
72075
  title: {
72277
72076
  display: "flex",
72278
72077
  marginBottom: tokens.Spacing.Large,
@@ -72308,7 +72107,7 @@ ManualAccountForm.displayName = "ManualAccountForm";
72308
72107
 
72309
72108
  const ManualAccountMenu = React__default.forwardRef((props, ref) => {
72310
72109
  const tokens = useTokens();
72311
- const styles = getStyles$6(tokens);
72110
+ const styles = getStyles$8(tokens);
72312
72111
  const getNextDelay = getDelay();
72313
72112
  const typeList = props.availableAccountTypes?.length !== 0 ? props.availableAccountTypes : [
72314
72113
  AccountTypes.CHECKING,
@@ -72385,7 +72184,7 @@ const ManualAccountMenu = React__default.forwardRef((props, ref) => {
72385
72184
  )) })
72386
72185
  ] });
72387
72186
  });
72388
- const getStyles$6 = (tokens) => ({
72187
+ const getStyles$8 = (tokens) => ({
72389
72188
  title: {
72390
72189
  marginBottom: tokens.Spacing.XSmall,
72391
72190
  marginTop: tokens.Spacing.Large
@@ -72406,7 +72205,7 @@ const ManualAccountSuccess = (props) => {
72406
72205
  useAnalyticsPath(...PageviewInfo.CONNECT_MANUAL_ACCOUNT_SUCCESS);
72407
72206
  const postMessageFunctions = useContext(PostMessageContext);
72408
72207
  const tokens = useTokens();
72409
- const styles = getStyles$5(tokens);
72208
+ const styles = getStyles$7(tokens);
72410
72209
  const getNextDelay = getDelay();
72411
72210
  const handleDone = () => fadeOut(containerRef.current, "up", 300).then(() => props.handleDone());
72412
72211
  const manualAccountSuccessMessage = __(
@@ -72471,7 +72270,7 @@ const ManualAccountSuccess = (props) => {
72471
72270
  /* @__PURE__ */ jsxRuntimeExports.jsx(AriaLive, { level: "assertive", message: manualAccountSuccessMessage, timeout: 100 })
72472
72271
  ] });
72473
72272
  };
72474
- const getStyles$5 = (tokens) => ({
72273
+ const getStyles$7 = (tokens) => ({
72475
72274
  container: {
72476
72275
  textAlign: "center"
72477
72276
  },
@@ -72656,7 +72455,7 @@ const RenderConnectStep = (props) => {
72656
72455
  const { handleSelectInstitution } = useSelectInstitution();
72657
72456
  const dispatch = useDispatch();
72658
72457
  const tokens = useTokens();
72659
- const styles = getStyles$4(tokens, step);
72458
+ const styles = getStyles$6(tokens, step);
72660
72459
  const mode = connectConfig?.mode ?? AGG_MODE;
72661
72460
  const isMicrodepositsEnabled = mode === VERIFY_MODE && // MDV is only enabled in verification
72662
72461
  clientProfile.account_verification_is_enabled && // Client supports verification
@@ -72882,7 +72681,7 @@ RenderConnectStep.propTypes = {
72882
72681
  setConnectLocalState: PropTypes$1.func.isRequired
72883
72682
  };
72884
72683
  RenderConnectStep.displayName = "RenderConnectStep";
72885
- const getStyles$4 = (tokens, step) => {
72684
+ const getStyles$6 = (tokens, step) => {
72886
72685
  return {
72887
72686
  container: {
72888
72687
  backgroundColor: tokens.BackgroundColor.Container,
@@ -74399,7 +74198,7 @@ const DeleteMemberSurvey = (props) => {
74399
74198
  });
74400
74199
  const [isSubmitted, setIsSubmitted] = useState(false);
74401
74200
  const tokens = useTokens();
74402
- const styles = getStyles$3(tokens);
74201
+ const styles = getStyles$5(tokens);
74403
74202
  useEffect(() => {
74404
74203
  if (deleteMemberState.loading === false) return () => {
74405
74204
  };
@@ -74497,7 +74296,7 @@ const DeleteMemberSurvey = (props) => {
74497
74296
  )
74498
74297
  ] }) }) }) });
74499
74298
  };
74500
- const getStyles$3 = (tokens) => ({
74299
+ const getStyles$5 = (tokens) => ({
74501
74300
  component: {
74502
74301
  display: "block",
74503
74302
  whiteSpace: "normal"
@@ -74579,7 +74378,7 @@ const NON_CONECTED_REASONS = [
74579
74378
  const ConnectNavigationHeader = (props) => {
74580
74379
  const goBackButtonContainerRef = useRef();
74581
74380
  const tokens = useTokens();
74582
- const styles = getStyles$2(tokens);
74381
+ const styles = getStyles$4(tokens);
74583
74382
  const step = useSelector(
74584
74383
  (state) => state.connect.location[state.connect.location.length - 1]?.step ?? STEPS.SEARCH
74585
74384
  );
@@ -74611,7 +74410,7 @@ ConnectNavigationHeader.propTypes = {
74611
74410
  connectGoBack: PropTypes$1.func.isRequired,
74612
74411
  stepComponentRef: PropTypes$1.object
74613
74412
  };
74614
- const getStyles$2 = (tokens) => {
74413
+ const getStyles$4 = (tokens) => {
74615
74414
  return {
74616
74415
  container: {
74617
74416
  display: "flex",
@@ -74635,6 +74434,61 @@ const getStyles$2 = (tokens) => {
74635
74434
  };
74636
74435
  };
74637
74436
 
74437
+ const Container = (props) => {
74438
+ const tokens = useTokens();
74439
+ const styles = getStyles$3(tokens, props.step);
74440
+ return /* @__PURE__ */ jsxRuntimeExports.jsx("div", { "data-test": "container", style: styles.container, children: /* @__PURE__ */ jsxRuntimeExports.jsx("div", { style: styles.content, children: props.children }) });
74441
+ };
74442
+ Container.propTypes = {
74443
+ step: PropTypes$1.string
74444
+ };
74445
+ const getStyles$3 = (tokens, step) => {
74446
+ return {
74447
+ container: {
74448
+ backgroundColor: tokens.BackgroundColor.Container,
74449
+ minHeight: "100%",
74450
+ maxHeight: step === STEPS.SEARCH ? "100%" : null,
74451
+ display: "flex",
74452
+ justifyContent: "center"
74453
+ },
74454
+ content: {
74455
+ maxWidth: "400px",
74456
+ // Our max content width (does not include side margin)
74457
+ minWidth: "270px",
74458
+ // Our min content width (does not include side margin)
74459
+ width: "100%",
74460
+ // We want this container to shrink and grow between our min-max
74461
+ margin: tokens.Spacing.Large
74462
+ }
74463
+ };
74464
+ };
74465
+
74466
+ const ConfigError = ({ error }) => {
74467
+ const tokens = useTokens();
74468
+ const styles = getStyles$2(tokens);
74469
+ return /* @__PURE__ */ jsxRuntimeExports.jsx(Container, { children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { style: styles.container, children: [
74470
+ /* @__PURE__ */ jsxRuntimeExports.jsx(AttentionFilled, { color: "#4D4D4D", size: 32, style: styles.errorIcon }),
74471
+ /* @__PURE__ */ jsxRuntimeExports.jsx(x, { component: "h2", style: styles.errorTitle, truncate: false, variant: "H2", children: error.title }),
74472
+ /* @__PURE__ */ jsxRuntimeExports.jsx(x, { component: "p", truncate: false, variant: "Paragraph", children: error.message })
74473
+ ] }) });
74474
+ };
74475
+ const getStyles$2 = (tokens) => ({
74476
+ container: {
74477
+ display: "flex",
74478
+ flexDirection: "column",
74479
+ alignItems: "center",
74480
+ justifyCcontent: "center",
74481
+ marginTop: "36px",
74482
+ textAlign: "center"
74483
+ },
74484
+ errorTitle: {
74485
+ marginBottom: tokens.Spacing.Tiny
74486
+ },
74487
+ errorIcon: {
74488
+ marginBottom: tokens.Spacing.Large
74489
+ }
74490
+ });
74491
+
74638
74492
  const getErrorResource = (err) => {
74639
74493
  if (err.config?.url.includes("/institutions")) {
74640
74494
  return "/institutions";
@@ -74667,23 +74521,39 @@ const useLoadConnect = () => {
74667
74521
  request$ = of({ config });
74668
74522
  }
74669
74523
  const requestSubscription$ = request$.pipe(
74670
- mergeMap(
74671
- (dependencies) => from(api.loadMembers()).pipe(
74672
- map(
74673
- (members) => loadConnectSuccess$1({
74674
- members,
74675
- widgetProfile: profiles.widgetProfile,
74676
- ...dependencies
74677
- })
74678
- )
74679
- )
74680
- ),
74524
+ mergeMap((dependencies) => {
74525
+ if (clientSupportRequestedProducts(config, profiles.clientProfile)) {
74526
+ return from(api.loadMembers()).pipe(
74527
+ map(
74528
+ (members) => loadConnectSuccess$1({
74529
+ members,
74530
+ widgetProfile: profiles.widgetProfile,
74531
+ ...dependencies
74532
+ })
74533
+ )
74534
+ );
74535
+ }
74536
+ return of(
74537
+ loadConnectError$1({
74538
+ title: __("Mode not enabled"),
74539
+ message: __(
74540
+ "This mode isn’t available in your current plan. Please contact your representative to explore options."
74541
+ ),
74542
+ type: "config"
74543
+ })
74544
+ );
74545
+ }),
74681
74546
  catchError((err) => {
74682
- if (err instanceof VerifyNotEnabled) {
74547
+ if (err instanceof InstitutionConfigNotEnabled) {
74683
74548
  return of(
74684
74549
  loadConnectError$1({
74685
- message: __("This connection doesn't support verification."),
74686
- resource: err.entity_type
74550
+ title: __("Feature not available"),
74551
+ message: __(
74552
+ "%1 does not offer this feature. Please contact your representative to explore options.",
74553
+ err.entity.name
74554
+ ),
74555
+ resource: err.entity_type,
74556
+ type: "config"
74687
74557
  })
74688
74558
  );
74689
74559
  } else {
@@ -74711,16 +74581,21 @@ const useLoadConnect = () => {
74711
74581
  function loadConnectFromMemberConfig(config, api) {
74712
74582
  return from(api.loadMemberByGuid(config.current_member_guid)).pipe(
74713
74583
  mergeMap((member) => {
74714
- if (config.mode === VERIFY_MODE && !member.verification_is_enabled) {
74715
- throw new VerifyNotEnabled(member, "Loaded member does not support verification", "/member");
74716
- }
74717
- if (config.mode === VERIFY_MODE && member.connection_status === ReadableStatuses$1.CONNECTED) {
74718
- return defer(() => api.loadInstitutionByGuid(member.institution_guid)).pipe(
74719
- map((institution) => ({ member, institution, config }))
74720
- );
74721
- }
74722
74584
  return defer(() => api.loadInstitutionByGuid(member.institution_guid)).pipe(
74723
- map((institution) => ({ member, institution, config }))
74585
+ map((institution) => {
74586
+ if (instutionSupportRequestedProducts(config, institution)) {
74587
+ return {
74588
+ member,
74589
+ institution,
74590
+ config
74591
+ };
74592
+ }
74593
+ throw new InstitutionConfigNotEnabled(
74594
+ institution,
74595
+ "Loaded institution does not support verification",
74596
+ "/institution"
74597
+ );
74598
+ })
74724
74599
  );
74725
74600
  })
74726
74601
  );
@@ -74729,14 +74604,17 @@ function loadConnectFromInstitutionConfig(config, api) {
74729
74604
  const request$ = config.current_institution_guid ? from(api.loadInstitutionByGuid(config.current_institution_guid)) : from(api.loadInstitutionByCode(config.current_institution_code));
74730
74605
  return request$.pipe(
74731
74606
  map((institution) => {
74732
- if (config.mode === VERIFY_MODE && !institution.account_verification_is_enabled) {
74733
- throw new VerifyNotEnabled(
74607
+ if (instutionSupportRequestedProducts(config, institution)) {
74608
+ return {
74734
74609
  institution,
74735
- "Loaded institution does not support verification",
74736
- "/institution"
74737
- );
74610
+ config
74611
+ };
74738
74612
  }
74739
- return { institution, config };
74613
+ throw new InstitutionConfigNotEnabled(
74614
+ institution,
74615
+ "Loaded institution does not support verification",
74616
+ "/institution"
74617
+ );
74740
74618
  })
74741
74619
  );
74742
74620
  }
@@ -74745,12 +74623,28 @@ function loadConnectFromMicrodepositConfig(config, api) {
74745
74623
  map((microdeposit) => ({ microdeposit, config }))
74746
74624
  );
74747
74625
  }
74748
- class VerifyNotEnabled extends Error {
74626
+ function clientSupportRequestedProducts(config, clientProfile) {
74627
+ const products = config?.data_request?.products;
74628
+ if (Array.isArray(products) && products.length > 0) {
74629
+ return products.every((product) => {
74630
+ switch (product) {
74631
+ case COMBO_JOB_DATA_TYPES.ACCOUNT_NUMBER:
74632
+ return clientProfile.account_verification_is_enabled;
74633
+ case COMBO_JOB_DATA_TYPES.ACCOUNT_OWNER:
74634
+ return clientProfile.account_identification_is_enabled;
74635
+ default:
74636
+ return true;
74637
+ }
74638
+ });
74639
+ }
74640
+ return true;
74641
+ }
74642
+ class InstitutionConfigNotEnabled extends Error {
74749
74643
  entity;
74750
74644
  entity_type;
74751
74645
  constructor(entity, message, entity_type) {
74752
74646
  super(message);
74753
- this.name = "VerifyNotEnabled";
74647
+ this.name = "InstitutionConfigNotEnabled";
74754
74648
  this.message = message;
74755
74649
  this.stack = new Error().stack;
74756
74650
  this.entity = entity;
@@ -74763,7 +74657,7 @@ const AnalyticContext = createContext({
74763
74657
  },
74764
74658
  onAnalyticPageview: () => {
74765
74659
  },
74766
- onShowConnectSuccessSurvey: null,
74660
+ onShowConnectSuccessSurvey: void 0,
74767
74661
  onSubmitConnectSuccessSurvey: () => {
74768
74662
  }
74769
74663
  });
@@ -74781,7 +74675,7 @@ const Connect$2 = ({
74781
74675
  },
74782
74676
  onAnalyticPageview = () => {
74783
74677
  },
74784
- onShowConnectSuccessSurvey = null,
74678
+ onShowConnectSuccessSurvey = void 0,
74785
74679
  onSubmitConnectSuccessSurvey = () => {
74786
74680
  },
74787
74681
  ...props
@@ -74791,12 +74685,6 @@ const Connect$2 = ({
74791
74685
  const hasAtriumAPI = useSelector((state2) => state2.profiles.client.has_atrium_api);
74792
74686
  const isLoading = useSelector((state2) => state2.connect.isComponentLoading);
74793
74687
  const isMobileWebview = useSelector(selectIsMobileWebView);
74794
- const isVerificationEnabled = useSelector(
74795
- (state2) => state2.profiles.clientProfile.account_verification_is_enabled
74796
- );
74797
- const isTaxStatementIsEnabled = useSelector(
74798
- (state2) => state2.profiles.clientProfile.tax_statement_is_enabled
74799
- );
74800
74688
  const step = useSelector(
74801
74689
  (state2) => state2.connect.location[state2.connect.location.length - 1]?.step ?? STEPS.SEARCH
74802
74690
  );
@@ -74815,10 +74703,10 @@ const Connect$2 = ({
74815
74703
  const dispatch = useDispatch();
74816
74704
  useEffect(() => {
74817
74705
  const [name, path] = PageviewInfo.CONNECT;
74818
- const mode2 = props.clientConfig.mode;
74819
- dispatch(addAnalyticPath({ name, path: `${path}/${mode2}` }));
74706
+ const mode = props.clientConfig.mode;
74707
+ dispatch(addAnalyticPath({ name, path: `${path}/${mode}` }));
74820
74708
  return () => {
74821
- dispatch(removeAnalyticPath(`${PageviewInfo.CONNECT[1]}/${mode2}`));
74709
+ dispatch(removeAnalyticPath(`${PageviewInfo.CONNECT[1]}/${mode}`));
74822
74710
  };
74823
74711
  }, []);
74824
74712
  useEffect(() => {
@@ -74919,19 +74807,13 @@ const Connect$2 = ({
74919
74807
  const _handleStepDOMChange = useCallback((ref) => {
74920
74808
  setState((prevState) => ({ ...prevState, stepComponentRef: ref }));
74921
74809
  }, []);
74922
- const mode = connectConfig?.mode ?? AGG_MODE;
74923
- const IS_IN_TAX_MODE = mode === TAX_MODE;
74924
- const IS_IN_VERIFY_MODE = mode === VERIFY_MODE;
74925
- const invalidTaxMode = IS_IN_TAX_MODE && !isTaxStatementIsEnabled;
74926
- const invalidVerifyMode = IS_IN_VERIFY_MODE && !isVerificationEnabled;
74927
- if (invalidVerifyMode || invalidTaxMode) {
74928
- const title = IS_IN_TAX_MODE ? __("Oops! Tax statements must be enabled to use this feature.") : __("Oops! Verification must be enabled to use this feature.");
74929
- return /* @__PURE__ */ jsxRuntimeExports.jsx(GenericError, { onAnalyticPageview, title });
74930
- }
74931
74810
  if (isLoading) {
74932
74811
  return /* @__PURE__ */ jsxRuntimeExports.jsx(LoadingSpinner, { showText: true });
74933
74812
  }
74934
74813
  if (loadError) {
74814
+ if (loadError.type === "config") {
74815
+ return /* @__PURE__ */ jsxRuntimeExports.jsx(ConfigError, { error: loadError });
74816
+ }
74935
74817
  return /* @__PURE__ */ jsxRuntimeExports.jsx(
74936
74818
  GenericError,
74937
74819
  {
@@ -75422,6 +75304,11 @@ const frCa = {
75422
75304
  "Please select an option before continuing.": "Veuillez sélectionner une option avant de continuer.",
75423
75305
  "Send feedback": "Envoyer des commentaires",
75424
75306
  "Give feedback": "Donnez votre avis",
75307
+ "Disconnect institution": "Déconnecter l'institution",
75308
+ "Mode not enabled": "Mode non activé",
75309
+ "This mode isn’t available in your current plan. Please contact your representative to explore options.": "Ce mode n'est pas disponible avec votre forfait actuel. Veuillez contacter votre représentant pour explorer les options.",
75310
+ "Feature not available": "Fonctionnalité non disponible",
75311
+ "%1 does not offer this feature. Please contact your representative to explore options.": "%1 n'offre pas cette fonctionnalité. Veuillez contacter votre représentant pour explorer les options.",
75425
75312
  "connect/disclosure/policy/text\u0004By clicking Continue, you agree to the ": "En cliquant sur Continuer, vous acceptez la ",
75426
75313
  "connect/disclosure/policy/link\u0004MX Privacy Policy.": "Politique de confidentialité de MX.",
75427
75314
  "connect/disclosure/policy/link\u0004MX Privacy Policy": "Politique de confidentialité de MX.",
@@ -75848,6 +75735,11 @@ const es = {
75848
75735
  "Please select an option before continuing.": "Seleccione una opción antes de continuar.",
75849
75736
  "Send feedback": "Enviar comentarios",
75850
75737
  "Give feedback": "Dar retroalimentación",
75738
+ "Disconnect institution": "Desconectar institución",
75739
+ "Mode not enabled": "Modo no habilitado",
75740
+ "This mode isn’t available in your current plan. Please contact your representative to explore options.": "Este modo no está disponible en tu plan actual. Contacte a su representante para explorar las opciones.",
75741
+ "Feature not available": "Característica no disponible",
75742
+ "%1 does not offer this feature. Please contact your representative to explore options.": "%1 no ofrece esta función. Contacte a su representante para explorar las opciones.",
75851
75743
  "connect/disclosure/button\u0004Continue": "Continuar",
75852
75744
  "connect/disclosure/policy/text\u0004By clicking Continue, you agree to the ": "Al hacer clic en Continuar, tu aceptas la ",
75853
75745
  "connect/disclosure/policy/link\u0004MX Privacy Policy.": "Política de privacidad de Money Experience.",