@wise/dynamic-flow-client-internal 5.31.0 → 5.32.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.
Files changed (77) hide show
  1. package/build/i18n/ar.json +2 -0
  2. package/build/i18n/cs.json +2 -0
  3. package/build/i18n/de.json +2 -0
  4. package/build/i18n/en.json +2 -0
  5. package/build/i18n/es.json +2 -0
  6. package/build/i18n/fr.json +2 -0
  7. package/build/i18n/hu.json +2 -0
  8. package/build/i18n/id.json +2 -0
  9. package/build/i18n/it.json +2 -0
  10. package/build/i18n/ja.json +2 -0
  11. package/build/i18n/ko.json +2 -0
  12. package/build/i18n/nl.json +2 -0
  13. package/build/i18n/pl.json +2 -0
  14. package/build/i18n/pt.json +2 -0
  15. package/build/i18n/ro.json +2 -0
  16. package/build/i18n/ru.json +2 -0
  17. package/build/i18n/sv.json +2 -0
  18. package/build/i18n/th.json +2 -0
  19. package/build/i18n/tr.json +2 -0
  20. package/build/i18n/uk.json +2 -0
  21. package/build/i18n/zh_CN.json +2 -0
  22. package/build/i18n/zh_HK.json +2 -0
  23. package/build/main.js +418 -168
  24. package/build/main.mjs +408 -157
  25. package/build/tsconfig.types.tsbuildinfo +1 -1
  26. package/package.json +2 -2
  27. package/build/dynamicFlow/DynamicFlow.js +0 -11
  28. package/build/dynamicFlow/DynamicFlowModal.js +0 -21
  29. package/build/dynamicFlow/DynamicFlowWiseProps.js +0 -1
  30. package/build/dynamicFlow/DynamicFlowWithRef.js +0 -19
  31. package/build/dynamicFlow/context-menu/useContextMenu.js +0 -33
  32. package/build/dynamicFlow/context-menu/useDFContextMenu.js +0 -135
  33. package/build/dynamicFlow/context-menu/useDFContextMenu.test.js +0 -101
  34. package/build/dynamicFlow/getMergedRenderers.js +0 -36
  35. package/build/dynamicFlow/messages.js +0 -13
  36. package/build/dynamicFlow/renderers.js +0 -10
  37. package/build/dynamicFlow/telemetry/app-version.js +0 -4
  38. package/build/dynamicFlow/telemetry/dispatchAnalyticsEvent.js +0 -8
  39. package/build/dynamicFlow/telemetry/getLogEvent.js +0 -22
  40. package/build/dynamicFlow/telemetry/getTrackEvent.js +0 -39
  41. package/build/dynamicFlow/telemetry/index.js +0 -2
  42. package/build/dynamicFlow/useCreateSnackBar.js +0 -9
  43. package/build/dynamicFlow/useOnCopy.js +0 -16
  44. package/build/dynamicFlow/useWiseHttpClient.js +0 -24
  45. package/build/dynamicFlow/useWiseToCoreProps.js +0 -42
  46. package/build/i18n/index.js +0 -43
  47. package/build/index.js +0 -6
  48. package/build/stories/ButtonLoader.story.js +0 -109
  49. package/build/stories/ContainerQueries.story.js +0 -74
  50. package/build/stories/DynamicFlow.story.js +0 -37
  51. package/build/stories/DynamicFlowWithRef.story.js +0 -72
  52. package/build/stories/Editable.story.js +0 -58
  53. package/build/stories/Initialisation.story.js +0 -33
  54. package/build/stories/PinnedButtons.story.js +0 -94
  55. package/build/stories/SCAIntegration.story.js +0 -67
  56. package/build/stories/utils/fixtureHttpClient.js +0 -59
  57. package/build/test-utils/NeptuneProviders.js +0 -11
  58. package/build/test-utils/index.js +0 -4
  59. package/build/test-utils/respond-with.js +0 -6
  60. package/build/test-utils/rtl-utils.js +0 -7
  61. package/build/test-utils/wait.js +0 -3
  62. package/build/tests/DynamicFlow.test.js +0 -177
  63. package/build/tests/HideStepTitle.test.js +0 -58
  64. package/build/tests/RequestCache.test.js +0 -34
  65. package/build/tests/SCARejectionHandling.test.js +0 -71
  66. package/build/tests/Subflow.Wise.test.js +0 -650
  67. package/build/tests/events.test.js +0 -124
  68. package/build/tests/logging.test.js +0 -12
  69. package/build/tests/onNotification.test.js +0 -96
  70. package/build/tests/renderers/ControlAndTags.test.js +0 -225
  71. package/build/tests/renderers/ImageRenderer.test.js +0 -129
  72. package/build/tests/renderers/RadioInputRendererComponent.test.js +0 -89
  73. package/build/tests/renderers/ReviewRenderer.test.js +0 -41
  74. package/build/tests/renderers/TextInputRenderer.test.js +0 -44
  75. package/build/tests/renderers/TimeZoneHeader.test.js +0 -19
  76. package/build/tests/renderers/UploadInputRenderer.maxSize.test.js +0 -22
  77. package/build/tests/renderers/value-utils.test.js +0 -24
package/build/main.mjs CHANGED
@@ -64,7 +64,7 @@ var require_classnames = __commonJS({
64
64
  (function() {
65
65
  "use strict";
66
66
  var hasOwn = {}.hasOwnProperty;
67
- function classNames36() {
67
+ function classNames37() {
68
68
  var classes = "";
69
69
  for (var i = 0; i < arguments.length; i++) {
70
70
  var arg = arguments[i];
@@ -82,7 +82,7 @@ var require_classnames = __commonJS({
82
82
  return "";
83
83
  }
84
84
  if (Array.isArray(arg)) {
85
- return classNames36.apply(null, arg);
85
+ return classNames37.apply(null, arg);
86
86
  }
87
87
  if (arg.toString !== Object.prototype.toString && !arg.toString.toString().includes("[native code]")) {
88
88
  return arg.toString();
@@ -105,14 +105,14 @@ var require_classnames = __commonJS({
105
105
  return value + newClass;
106
106
  }
107
107
  if (typeof module !== "undefined" && module.exports) {
108
- classNames36.default = classNames36;
109
- module.exports = classNames36;
108
+ classNames37.default = classNames37;
109
+ module.exports = classNames37;
110
110
  } else if (typeof define === "function" && typeof define.amd === "object" && define.amd) {
111
111
  define("classnames", [], function() {
112
- return classNames36;
112
+ return classNames37;
113
113
  });
114
114
  } else {
115
- window.classNames = classNames36;
115
+ window.classNames = classNames37;
116
116
  }
117
117
  })();
118
118
  }
@@ -127,7 +127,7 @@ import { useDynamicFlow } from "@wise/dynamic-flow-client";
127
127
  // src/dynamicFlow/telemetry/app-version.ts
128
128
  var appVersion = (
129
129
  // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
130
- typeof process !== "undefined" ? "5.31.0" : "0.0.0"
130
+ typeof process !== "undefined" ? "5.32.0" : "0.0.0"
131
131
  );
132
132
 
133
133
  // src/dynamicFlow/context-menu/useContextMenu.tsx
@@ -1535,6 +1535,7 @@ var getSupportingValues = (supportingValues) => {
1535
1535
  };
1536
1536
 
1537
1537
  // ../renderers/src/CheckboxInputRenderer.tsx
1538
+ var import_classnames11 = __toESM(require_classnames());
1538
1539
  import { jsx as jsx34 } from "react/jsx-runtime";
1539
1540
  var CheckboxInputRenderer = {
1540
1541
  canRenderType: "input-checkbox",
@@ -1589,36 +1590,26 @@ var CheckboxComponent = (props) => {
1589
1590
  );
1590
1591
  };
1591
1592
  var CheckboxItemComponent = (props) => {
1592
- const {
1593
- additionalText,
1594
- description,
1595
- disabled,
1596
- inlineAlert,
1597
- media,
1598
- supportingValues,
1599
- title,
1600
- validationState,
1601
- value,
1602
- features,
1603
- onChange
1604
- } = props;
1593
+ const { validationState, value, features, onChange } = props;
1605
1594
  const { ref } = useScrollToError(validationState, features);
1606
1595
  return /* @__PURE__ */ jsx34("div", { ref, children: /* @__PURE__ */ jsx34(
1607
1596
  ListItem3,
1608
- __spreadProps(__spreadValues({
1609
- title,
1610
- subtitle: description,
1611
- additionalInfo: getAdditionalText(additionalText),
1612
- media: getMedia(media, false),
1613
- disabled,
1614
- prompt: getInlineAlertOrValidation(validationState, inlineAlert),
1597
+ __spreadProps(__spreadValues({}, getListItemProps(props)), {
1615
1598
  control: /* @__PURE__ */ jsx34(ListItem3.Checkbox, { checked: value, onChange: () => onChange(!value) })
1616
- }, getSupportingValues(supportingValues)), {
1617
- className: controlAndTagsToCSSClass(props)
1618
1599
  })
1619
1600
  ) });
1620
1601
  };
1621
1602
  var SwitchItemComponent = (props) => {
1603
+ const { validationState, value, features, onChange } = props;
1604
+ const { ref } = useScrollToError(validationState, features);
1605
+ return /* @__PURE__ */ jsx34("div", { ref, children: /* @__PURE__ */ jsx34(
1606
+ ListItem3,
1607
+ __spreadProps(__spreadValues({}, getListItemProps(props)), {
1608
+ control: /* @__PURE__ */ jsx34(ListItem3.Switch, { checked: value, onClick: () => onChange(!value) })
1609
+ })
1610
+ ) });
1611
+ };
1612
+ var getListItemProps = (props) => {
1622
1613
  const {
1623
1614
  additionalText,
1624
1615
  description,
@@ -1626,27 +1617,23 @@ var SwitchItemComponent = (props) => {
1626
1617
  inlineAlert,
1627
1618
  media,
1628
1619
  supportingValues,
1620
+ tags,
1629
1621
  title,
1630
- validationState,
1631
- value,
1632
- features,
1633
- onChange
1622
+ validationState
1634
1623
  } = props;
1635
- const { ref } = useScrollToError(validationState, features);
1636
- return /* @__PURE__ */ jsx34("div", { ref, children: /* @__PURE__ */ jsx34(
1637
- ListItem3,
1638
- __spreadProps(__spreadValues({
1639
- title,
1640
- subtitle: description,
1641
- additionalInfo: getAdditionalText(additionalText),
1642
- media: getMedia(media, false),
1643
- disabled,
1644
- prompt: getInlineAlertOrValidation(validationState, inlineAlert),
1645
- control: /* @__PURE__ */ jsx34(ListItem3.Switch, { checked: value, onClick: () => onChange(!value) })
1646
- }, getSupportingValues(supportingValues)), {
1647
- className: controlAndTagsToCSSClass(props)
1648
- })
1649
- ) });
1624
+ const spotlight = (tags == null ? void 0 : tags.includes("spotlight-active")) ? "active" : (tags == null ? void 0 : tags.includes("spotlight-inactive")) ? "inactive" : void 0;
1625
+ return __spreadValues({
1626
+ additionalInfo: getAdditionalText(additionalText),
1627
+ className: (0, import_classnames11.default)(controlAndTagsToCSSClass(props), {
1628
+ "m-b-1": spotlight
1629
+ }),
1630
+ disabled,
1631
+ media: getMedia(media, false),
1632
+ prompt: getInlineAlertOrValidation(validationState, inlineAlert),
1633
+ spotlight,
1634
+ subtitle: description,
1635
+ title
1636
+ }, getSupportingValues(supportingValues));
1650
1637
  };
1651
1638
  var getInlineAlertOrValidation = (validationState, inlineAlert) => {
1652
1639
  if ((validationState == null ? void 0 : validationState.status) === "invalid") {
@@ -3756,7 +3743,7 @@ var CollectionRenderer = createCollectionRenderer(() => true);
3756
3743
  var CollectionRenderer_default = CollectionRenderer;
3757
3744
 
3758
3745
  // ../renderers/src/ColumnsRenderer.tsx
3759
- var import_classnames11 = __toESM(require_classnames());
3746
+ var import_classnames12 = __toESM(require_classnames());
3760
3747
 
3761
3748
  // ../renderers/src/utils/useIsCollapsed.ts
3762
3749
  import { useEffect as useEffect8, useState as useState9 } from "react";
@@ -3795,7 +3782,7 @@ function ColumnsRendererComponent(props) {
3795
3782
  return /* @__PURE__ */ jsxs9(
3796
3783
  "div",
3797
3784
  {
3798
- className: (0, import_classnames11.default)(
3785
+ className: (0, import_classnames12.default)(
3799
3786
  "df-columns-renderer-container",
3800
3787
  getMargin(margin),
3801
3788
  {
@@ -4153,11 +4140,11 @@ var GroupedDecisionList = (_a) => {
4153
4140
  };
4154
4141
 
4155
4142
  // ../renderers/src/DecisionRenderer/DecisionWrapper.tsx
4156
- var import_classnames12 = __toESM(require_classnames());
4143
+ var import_classnames13 = __toESM(require_classnames());
4157
4144
  import { Fragment as Fragment5, jsx as jsx49, jsxs as jsxs11 } from "react/jsx-runtime";
4158
4145
  var DecisionWrapper = (props) => {
4159
4146
  const { margin, control, title, tags } = props;
4160
- return /* @__PURE__ */ jsxs11("div", { className: (0, import_classnames12.default)(getMargin(margin), controlAndTagsToCSSClass({ control, tags })), children: [
4147
+ return /* @__PURE__ */ jsxs11("div", { className: (0, import_classnames13.default)(getMargin(margin), controlAndTagsToCSSClass({ control, tags })), children: [
4161
4148
  title && /* @__PURE__ */ jsx49(Header3, { as: "h2", title }),
4162
4149
  control === "filtered" ? /* @__PURE__ */ jsx49(FilteredDecisionList, __spreadValues({}, props)) : /* @__PURE__ */ jsx49(UnfilteredDecisionList, __spreadValues({}, props))
4163
4150
  ] });
@@ -4237,7 +4224,7 @@ var renderDecisionList = ({ options, control }) => {
4237
4224
  var DecisionRenderer_default = DecisionRenderer;
4238
4225
 
4239
4226
  // ../renderers/src/DividerRenderer.tsx
4240
- var import_classnames13 = __toESM(require_classnames());
4227
+ var import_classnames14 = __toESM(require_classnames());
4241
4228
  import { Divider } from "@transferwise/components";
4242
4229
  import { jsx as jsx51 } from "react/jsx-runtime";
4243
4230
  var mapControlToLevel = (control) => {
@@ -4255,7 +4242,7 @@ var DividerRenderer = {
4255
4242
  render: ({ margin, control, tags }) => /* @__PURE__ */ jsx51(
4256
4243
  Divider,
4257
4244
  {
4258
- className: (0, import_classnames13.default)(
4245
+ className: (0, import_classnames14.default)(
4259
4246
  "m-t-0",
4260
4247
  "d-block",
4261
4248
  getMargin(margin),
@@ -4355,11 +4342,11 @@ function getOrigin(url) {
4355
4342
  var ExternalConfirmationRenderer_default = ExternalConfirmationRenderer;
4356
4343
 
4357
4344
  // ../renderers/src/FormRenderer.tsx
4358
- var import_classnames14 = __toESM(require_classnames());
4345
+ var import_classnames15 = __toESM(require_classnames());
4359
4346
  import { jsx as jsx53 } from "react/jsx-runtime";
4360
4347
  var FormRenderer = {
4361
4348
  canRenderType: "form",
4362
- render: ({ children, margin, control, tags }) => /* @__PURE__ */ jsx53("div", { className: (0, import_classnames14.default)(getMargin(margin), controlAndTagsToCSSClass({ control, tags })), children })
4349
+ render: ({ children, margin, control, tags }) => /* @__PURE__ */ jsx53("div", { className: (0, import_classnames15.default)(getMargin(margin), controlAndTagsToCSSClass({ control, tags })), children })
4363
4350
  };
4364
4351
  var FormRenderer_default = FormRenderer;
4365
4352
 
@@ -4383,7 +4370,7 @@ var FormSectionRenderer = {
4383
4370
  var FormSectionRenderer_default = FormSectionRenderer;
4384
4371
 
4385
4372
  // ../renderers/src/HeadingRenderer.tsx
4386
- var import_classnames15 = __toESM(require_classnames());
4373
+ var import_classnames16 = __toESM(require_classnames());
4387
4374
  import { Display, Title } from "@transferwise/components";
4388
4375
  import { jsx as jsx55 } from "react/jsx-runtime";
4389
4376
  var HeadingRenderer = {
@@ -4392,7 +4379,7 @@ var HeadingRenderer = {
4392
4379
  };
4393
4380
  function Heading(props) {
4394
4381
  const { text, size, align, margin, control } = props;
4395
- const className = (0, import_classnames15.default)(
4382
+ const className = (0, import_classnames16.default)(
4396
4383
  getTextAlignmentAndMargin({ align, margin }),
4397
4384
  controlAndTagsToCSSClass(props)
4398
4385
  );
@@ -4431,7 +4418,7 @@ var getTitleTypeBySize = (size) => {
4431
4418
  var HeadingRenderer_default = HeadingRenderer;
4432
4419
 
4433
4420
  // ../renderers/src/ImageRenderer/UrlImage.tsx
4434
- var import_classnames16 = __toESM(require_classnames());
4421
+ var import_classnames17 = __toESM(require_classnames());
4435
4422
  import { Image } from "@transferwise/components";
4436
4423
  import { useEffect as useEffect10, useState as useState12 } from "react";
4437
4424
 
@@ -4463,7 +4450,7 @@ function UrlImage({
4463
4450
  return /* @__PURE__ */ jsx56(
4464
4451
  "div",
4465
4452
  {
4466
- className: (0, import_classnames16.default)(
4453
+ className: (0, import_classnames17.default)(
4467
4454
  "df-image",
4468
4455
  align,
4469
4456
  size || "md",
@@ -4526,7 +4513,7 @@ var ImageRenderer = {
4526
4513
  var ImageRenderer_default = ImageRenderer;
4527
4514
 
4528
4515
  // ../renderers/src/InstructionsRenderer.tsx
4529
- var import_classnames17 = __toESM(require_classnames());
4516
+ var import_classnames18 = __toESM(require_classnames());
4530
4517
  import { Header as Header5, InstructionsList } from "@transferwise/components";
4531
4518
  import { jsx as jsx58, jsxs as jsxs14 } from "react/jsx-runtime";
4532
4519
  var doContext = ["positive", "neutral", "proposition"];
@@ -4536,7 +4523,7 @@ var InstructionsRenderer = {
4536
4523
  render: ({ items, margin, title, control, tags }) => {
4537
4524
  const dos = items.filter((item) => doContext.includes(item.context)).map(({ text }) => text);
4538
4525
  const donts = items.filter((item) => dontContext.includes(item.context)).map(({ text }) => text);
4539
- return /* @__PURE__ */ jsxs14("div", { className: (0, import_classnames17.default)(getMargin(margin), controlAndTagsToCSSClass({ control, tags })), children: [
4526
+ return /* @__PURE__ */ jsxs14("div", { className: (0, import_classnames18.default)(getMargin(margin), controlAndTagsToCSSClass({ control, tags })), children: [
4540
4527
  title ? /* @__PURE__ */ jsx58(Header5, { title }) : null,
4541
4528
  /* @__PURE__ */ jsx58(InstructionsList, { dos, donts })
4542
4529
  ] });
@@ -4621,7 +4608,7 @@ var IntegerInputRenderer = {
4621
4608
  var IntegerInputRenderer_default = IntegerInputRenderer;
4622
4609
 
4623
4610
  // ../renderers/src/ListRenderer.tsx
4624
- var import_classnames18 = __toESM(require_classnames());
4611
+ var import_classnames19 = __toESM(require_classnames());
4625
4612
  import { ListItem as ListItem8 } from "@transferwise/components";
4626
4613
 
4627
4614
  // ../renderers/src/components/Header.tsx
@@ -4642,7 +4629,7 @@ var getHeaderAction = (callToAction) => {
4642
4629
  import { jsx as jsx61, jsxs as jsxs15 } from "react/jsx-runtime";
4643
4630
  var ListRenderer = {
4644
4631
  canRenderType: "list",
4645
- render: ({ callToAction, control, margin, items, tags, title }) => /* @__PURE__ */ jsxs15("div", { className: (0, import_classnames18.default)(getMargin(margin), controlAndTagsToCSSClass({ control, tags })), children: [
4632
+ render: ({ callToAction, control, margin, items, tags, title }) => /* @__PURE__ */ jsxs15("div", { className: (0, import_classnames19.default)(getMargin(margin), controlAndTagsToCSSClass({ control, tags })), children: [
4646
4633
  /* @__PURE__ */ jsx61(Header, { title, callToAction }),
4647
4634
  items.map((item) => {
4648
4635
  var _a, _b;
@@ -4680,7 +4667,7 @@ var ListRenderer = {
4680
4667
  var ListRenderer_default = ListRenderer;
4681
4668
 
4682
4669
  // ../renderers/src/LoadingIndicatorRenderer.tsx
4683
- var import_classnames19 = __toESM(require_classnames());
4670
+ var import_classnames20 = __toESM(require_classnames());
4684
4671
  import { Loader } from "@transferwise/components";
4685
4672
  import { jsx as jsx62 } from "react/jsx-runtime";
4686
4673
  var LoadingIndicatorRenderer = {
@@ -4690,7 +4677,7 @@ var LoadingIndicatorRenderer = {
4690
4677
  {
4691
4678
  size,
4692
4679
  classNames: {
4693
- "tw-loader": (0, import_classnames19.default)(
4680
+ "tw-loader": (0, import_classnames20.default)(
4694
4681
  "tw-loader",
4695
4682
  "m-x-auto",
4696
4683
  getMargin(margin),
@@ -4704,7 +4691,7 @@ var LoadingIndicatorRenderer = {
4704
4691
  var LoadingIndicatorRenderer_default = LoadingIndicatorRenderer;
4705
4692
 
4706
4693
  // ../renderers/src/MarkdownRenderer.tsx
4707
- var import_classnames20 = __toESM(require_classnames());
4694
+ var import_classnames21 = __toESM(require_classnames());
4708
4695
  import { Markdown as Markdown4 } from "@transferwise/components";
4709
4696
  import { jsx as jsx63 } from "react/jsx-runtime";
4710
4697
  var MarkdownRenderer = {
@@ -4714,14 +4701,14 @@ var MarkdownRenderer = {
4714
4701
  return /* @__PURE__ */ jsx63(
4715
4702
  "div",
4716
4703
  {
4717
- className: (0, import_classnames20.default)(
4704
+ className: (0, import_classnames21.default)(
4718
4705
  getTextAlignmentAndMargin({ align, margin }),
4719
4706
  controlAndTagsToCSSClass({ control, tags })
4720
4707
  ),
4721
4708
  children: /* @__PURE__ */ jsx63(
4722
4709
  Markdown4,
4723
4710
  {
4724
- className: (0, import_classnames20.default)("df-markdown", {
4711
+ className: (0, import_classnames21.default)("df-markdown", {
4725
4712
  "np-text-body-large": isLarge,
4726
4713
  "np-text-body-default": !isLarge
4727
4714
  }),
@@ -4736,7 +4723,7 @@ var MarkdownRenderer = {
4736
4723
  var MarkdownRenderer_default = MarkdownRenderer;
4737
4724
 
4738
4725
  // ../renderers/src/MediaRenderer.tsx
4739
- var import_classnames21 = __toESM(require_classnames());
4726
+ var import_classnames22 = __toESM(require_classnames());
4740
4727
  import { jsx as jsx64 } from "react/jsx-runtime";
4741
4728
  var MediaRenderer = {
4742
4729
  canRenderType: "media",
@@ -4763,7 +4750,7 @@ var AvatarMediaRendererComponent = ({
4763
4750
  return /* @__PURE__ */ jsx64(
4764
4751
  "div",
4765
4752
  {
4766
- className: (0, import_classnames21.default)(
4753
+ className: (0, import_classnames22.default)(
4767
4754
  "df-media-layout-avatar",
4768
4755
  align,
4769
4756
  getMargin(margin),
@@ -4814,7 +4801,7 @@ var mapAvatarMediaSize = (size) => {
4814
4801
  };
4815
4802
 
4816
4803
  // ../renderers/src/ModalLayoutRenderer.tsx
4817
- var import_classnames22 = __toESM(require_classnames());
4804
+ var import_classnames23 = __toESM(require_classnames());
4818
4805
  import { Button as Button6, Modal as Modal2 } from "@transferwise/components";
4819
4806
  import { useState as useState13 } from "react";
4820
4807
  import { jsx as jsx65, jsxs as jsxs16 } from "react/jsx-runtime";
@@ -4826,7 +4813,7 @@ var ModalLayoutRenderer_default = ModalLayoutRenderer;
4826
4813
  function DFModal({ content, margin, trigger, control, tags }) {
4827
4814
  const [visible, setVisible] = useState13(false);
4828
4815
  const { children, title } = content;
4829
- return /* @__PURE__ */ jsxs16("div", { className: (0, import_classnames22.default)(getMargin(margin), controlAndTagsToCSSClass({ control, tags })), children: [
4816
+ return /* @__PURE__ */ jsxs16("div", { className: (0, import_classnames23.default)(getMargin(margin), controlAndTagsToCSSClass({ control, tags })), children: [
4830
4817
  /* @__PURE__ */ jsx65(Button6, { v2: true, priority: "tertiary", block: true, onClick: () => setVisible(true), children: trigger.title }),
4831
4818
  /* @__PURE__ */ jsx65(
4832
4819
  Modal2,
@@ -5258,7 +5245,7 @@ import { Status, UploadInput } from "@transferwise/components";
5258
5245
 
5259
5246
  // ../renderers/src/components/UploadFieldInput.tsx
5260
5247
  import { InlineAlert as InlineAlert2 } from "@transferwise/components";
5261
- var import_classnames23 = __toESM(require_classnames());
5248
+ var import_classnames24 = __toESM(require_classnames());
5262
5249
  import { jsx as jsx72, jsxs as jsxs18 } from "react/jsx-runtime";
5263
5250
  function UploadFieldInput({
5264
5251
  id,
@@ -5278,7 +5265,7 @@ function UploadFieldInput({
5278
5265
  "div",
5279
5266
  {
5280
5267
  ref,
5281
- className: (0, import_classnames23.default)(
5268
+ className: (0, import_classnames24.default)(
5282
5269
  "form-group d-block",
5283
5270
  {
5284
5271
  "has-error": (validation == null ? void 0 : validation.status) === "invalid"
@@ -5439,7 +5426,7 @@ var NumberInputRenderer = {
5439
5426
  var NumberInputRenderer_default = NumberInputRenderer;
5440
5427
 
5441
5428
  // ../renderers/src/ParagraphRenderer.tsx
5442
- var import_classnames24 = __toESM(require_classnames());
5429
+ var import_classnames25 = __toESM(require_classnames());
5443
5430
  import { Button as Button7, Input as Input4 } from "@transferwise/components";
5444
5431
  import { useIntl as useIntl14 } from "react-intl";
5445
5432
 
@@ -5475,7 +5462,7 @@ var ParagraphRenderer = {
5475
5462
  };
5476
5463
  function Paragraph(props) {
5477
5464
  const { align, control, margin, size, text } = props;
5478
- const className = (0, import_classnames24.default)(
5465
+ const className = (0, import_classnames25.default)(
5479
5466
  getTextAlignmentAndMargin({ align, margin }),
5480
5467
  controlAndTagsToCSSClass(props)
5481
5468
  );
@@ -5506,7 +5493,7 @@ function CopyableParagraph({
5506
5493
  type: "text",
5507
5494
  value: text,
5508
5495
  readOnly: true,
5509
- className: (0, import_classnames24.default)("text-ellipsis", inputAlignmentClasses)
5496
+ className: (0, import_classnames25.default)("text-ellipsis", inputAlignmentClasses)
5510
5497
  }
5511
5498
  ),
5512
5499
  /* @__PURE__ */ jsx75(Button7, { v2: true, block: true, onClick: copy, children: formatMessage(paragraph_messages_default.copy) })
@@ -5515,7 +5502,7 @@ function CopyableParagraph({
5515
5502
  var ParagraphRenderer_default = ParagraphRenderer;
5516
5503
 
5517
5504
  // ../renderers/src/ProgressRenderer.tsx
5518
- var import_classnames25 = __toESM(require_classnames());
5505
+ var import_classnames26 = __toESM(require_classnames());
5519
5506
  import { ProgressBar } from "@transferwise/components";
5520
5507
  import { jsx as jsx76 } from "react/jsx-runtime";
5521
5508
  var ProgressRenderer = {
@@ -5525,7 +5512,7 @@ var ProgressRenderer = {
5525
5512
  ProgressBar,
5526
5513
  {
5527
5514
  id: uid,
5528
- className: (0, import_classnames25.default)(getMargin(margin), controlAndTagsToCSSClass({ control, tags })),
5515
+ className: (0, import_classnames26.default)(getMargin(margin), controlAndTagsToCSSClass({ control, tags })),
5529
5516
  title: title && help ? /* @__PURE__ */ jsx76(LabelContentWithHelp, { text: title, help }) : title,
5530
5517
  description,
5531
5518
  progress: {
@@ -5539,7 +5526,7 @@ var ProgressRenderer = {
5539
5526
  };
5540
5527
 
5541
5528
  // ../renderers/src/RepeatableRenderer.tsx
5542
- var import_classnames26 = __toESM(require_classnames());
5529
+ var import_classnames27 = __toESM(require_classnames());
5543
5530
  import { Button as Button8, Header as Header6, InlineAlert as InlineAlert3, Modal as Modal4, NavigationOption } from "@transferwise/components";
5544
5531
  import { Plus } from "@transferwise/icons";
5545
5532
  import { useState as useState16 } from "react";
@@ -5622,7 +5609,7 @@ function Repeatable(props) {
5622
5609
  /* @__PURE__ */ jsxs20(
5623
5610
  "div",
5624
5611
  {
5625
- className: (0, import_classnames26.default)("form-group", {
5612
+ className: (0, import_classnames27.default)("form-group", {
5626
5613
  "has-error": (validationState == null ? void 0 : validationState.status) === "invalid"
5627
5614
  }),
5628
5615
  children: [
@@ -5687,14 +5674,14 @@ function ItemSummaryOption({
5687
5674
  var RepeatableRenderer_default = RepeatableRenderer;
5688
5675
 
5689
5676
  // ../renderers/src/ReviewLegacyRenderer.tsx
5690
- var import_classnames27 = __toESM(require_classnames());
5677
+ var import_classnames28 = __toESM(require_classnames());
5691
5678
  import { DefinitionList } from "@transferwise/components";
5692
5679
  import { Fragment as Fragment10, jsx as jsx78, jsxs as jsxs21 } from "react/jsx-runtime";
5693
5680
  var ReviewRenderer = {
5694
5681
  canRenderType: "review",
5695
5682
  render: ({ callToAction, control, fields, margin, title, trackEvent, tags }) => {
5696
5683
  const orientation = mapControlToDefinitionListLayout(control);
5697
- return /* @__PURE__ */ jsxs21("div", { className: (0, import_classnames27.default)(getMargin(margin), controlAndTagsToCSSClass({ control, tags })), children: [
5684
+ return /* @__PURE__ */ jsxs21("div", { className: (0, import_classnames28.default)(getMargin(margin), controlAndTagsToCSSClass({ control, tags })), children: [
5698
5685
  /* @__PURE__ */ jsx78(Header, { title, callToAction }),
5699
5686
  /* @__PURE__ */ jsx78("div", { className: margin, children: /* @__PURE__ */ jsx78(
5700
5687
  DefinitionList,
@@ -5744,7 +5731,7 @@ var getFieldLabel = (label, help, onClick) => {
5744
5731
  };
5745
5732
 
5746
5733
  // ../renderers/src/ReviewRenderer.tsx
5747
- var import_classnames28 = __toESM(require_classnames());
5734
+ var import_classnames29 = __toESM(require_classnames());
5748
5735
  import { ListItem as ListItem10, Markdown as Markdown5, Popover } from "@transferwise/components";
5749
5736
  import { QuestionMarkCircle } from "@transferwise/icons";
5750
5737
  import { useIntl as useIntl16 } from "react-intl";
@@ -5770,7 +5757,7 @@ var Review = ({
5770
5757
  trackEvent
5771
5758
  }) => {
5772
5759
  const intl = useIntl16();
5773
- return /* @__PURE__ */ jsxs22("div", { className: (0, import_classnames28.default)(getMargin(margin), controlAndTagsToCSSClass({ control, tags })), children: [
5760
+ return /* @__PURE__ */ jsxs22("div", { className: (0, import_classnames29.default)(getMargin(margin), controlAndTagsToCSSClass({ control, tags })), children: [
5774
5761
  /* @__PURE__ */ jsx79(Header, { title, callToAction }),
5775
5762
  fields.map((field) => {
5776
5763
  var _a, _b, _c;
@@ -6058,7 +6045,7 @@ var SearchRenderer = {
6058
6045
  var SearchRenderer_default = SearchRenderer;
6059
6046
 
6060
6047
  // ../renderers/src/SectionRenderer.tsx
6061
- var import_classnames29 = __toESM(require_classnames());
6048
+ var import_classnames30 = __toESM(require_classnames());
6062
6049
  import { Header as Header7 } from "@transferwise/components";
6063
6050
 
6064
6051
  // ../renderers/src/utils/getHeaderAction.tsx
@@ -6090,7 +6077,7 @@ var SectionRenderer = {
6090
6077
  return /* @__PURE__ */ jsxs25(
6091
6078
  "section",
6092
6079
  {
6093
- className: (0, import_classnames29.default)(getMargin(margin), controlAndTagsToCSSClass({ control, tags })),
6080
+ className: (0, import_classnames30.default)(getMargin(margin), controlAndTagsToCSSClass({ control, tags })),
6094
6081
  children: [
6095
6082
  (title || callToAction) && /* @__PURE__ */ jsx84(Header7, { title: title != null ? title : "", action: getHeaderAction2(callToAction) }),
6096
6083
  children
@@ -6430,12 +6417,12 @@ var SelectInputRenderer = {
6430
6417
  var SelectInputRenderer_default = SelectInputRenderer;
6431
6418
 
6432
6419
  // ../renderers/src/StatusListRenderer.tsx
6433
- var import_classnames30 = __toESM(require_classnames());
6420
+ var import_classnames31 = __toESM(require_classnames());
6434
6421
  import { AvatarView as AvatarView4, Header as Header9, ListItem as ListItem13 } from "@transferwise/components";
6435
6422
  import { jsx as jsx91, jsxs as jsxs31 } from "react/jsx-runtime";
6436
6423
  var StatusListRenderer = {
6437
6424
  canRenderType: "status-list",
6438
- render: ({ margin, items, title, control, tags }) => /* @__PURE__ */ jsxs31("div", { className: (0, import_classnames30.default)(getMargin(margin), controlAndTagsToCSSClass({ control, tags })), children: [
6425
+ render: ({ margin, items, title, control, tags }) => /* @__PURE__ */ jsxs31("div", { className: (0, import_classnames31.default)(getMargin(margin), controlAndTagsToCSSClass({ control, tags })), children: [
6439
6426
  title ? /* @__PURE__ */ jsx91(Header9, { title }) : null,
6440
6427
  items.map((item) => {
6441
6428
  const { callToAction, description, title: itemTitle } = item;
@@ -6484,7 +6471,7 @@ var mapStatus = (status) => {
6484
6471
  var StatusListRenderer_default = StatusListRenderer;
6485
6472
 
6486
6473
  // ../renderers/src/step/SplashCelebrationStepRenderer.tsx
6487
- var import_classnames31 = __toESM(require_classnames());
6474
+ var import_classnames32 = __toESM(require_classnames());
6488
6475
 
6489
6476
  // ../renderers/src/utils/useCustomTheme.ts
6490
6477
  import { useTheme } from "@wise/components-theming";
@@ -6634,7 +6621,7 @@ function SplashCelebrationStepRendererComponent(props) {
6634
6621
  return /* @__PURE__ */ jsxs36(
6635
6622
  "div",
6636
6623
  {
6637
- className: (0, import_classnames31.default)("splash-screen", "m-t-5", controlAndTagsToCSSClass({ control, tags })),
6624
+ className: (0, import_classnames32.default)("splash-screen", "m-t-5", controlAndTagsToCSSClass({ control, tags })),
6638
6625
  children: [
6639
6626
  /* @__PURE__ */ jsx96(TopBar, { back, toolbar, tags }),
6640
6627
  title || description ? /* @__PURE__ */ jsx96("div", { className: "m-b-4", children: /* @__PURE__ */ jsx96(StepHeader, { title, description, tags }) }) : void 0,
@@ -6646,7 +6633,7 @@ function SplashCelebrationStepRendererComponent(props) {
6646
6633
  }
6647
6634
 
6648
6635
  // ../renderers/src/step/SplashStepRenderer.tsx
6649
- var import_classnames32 = __toESM(require_classnames());
6636
+ var import_classnames33 = __toESM(require_classnames());
6650
6637
  import { jsx as jsx97, jsxs as jsxs37 } from "react/jsx-runtime";
6651
6638
  var SplashStepRenderer = {
6652
6639
  canRenderType: "step",
@@ -6658,7 +6645,7 @@ function SplashStepRendererComponent(props) {
6658
6645
  return /* @__PURE__ */ jsxs37(
6659
6646
  "div",
6660
6647
  {
6661
- className: (0, import_classnames32.default)("splash-screen", "m-t-5", controlAndTagsToCSSClass({ control, tags })),
6648
+ className: (0, import_classnames33.default)("splash-screen", "m-t-5", controlAndTagsToCSSClass({ control, tags })),
6662
6649
  children: [
6663
6650
  /* @__PURE__ */ jsx97(TopBar, { back, toolbar, tags }),
6664
6651
  title || description ? /* @__PURE__ */ jsx97("div", { className: "m-b-4", children: /* @__PURE__ */ jsx97(StepHeader, { title, description, tags }) }) : void 0,
@@ -6688,7 +6675,7 @@ function StepRendererComponent(props) {
6688
6675
  }
6689
6676
 
6690
6677
  // ../renderers/src/TabsRenderer.tsx
6691
- var import_classnames33 = __toESM(require_classnames());
6678
+ var import_classnames34 = __toESM(require_classnames());
6692
6679
  import { Chips as Chips2, SegmentedControl as SegmentedControl2, Tabs as Tabs2 } from "@transferwise/components";
6693
6680
  import { useState as useState19 } from "react";
6694
6681
  import { jsx as jsx99, jsxs as jsxs39 } from "react/jsx-runtime";
@@ -6710,7 +6697,7 @@ var TabsRenderer = {
6710
6697
  };
6711
6698
  function TabsRendererComponent({ uid, margin, tabs, control, tags }) {
6712
6699
  const [selectedIndex, setSelectedIndex] = useState19(0);
6713
- return /* @__PURE__ */ jsx99("div", { className: (0, import_classnames33.default)(getMargin(margin), controlAndTagsToCSSClass({ control, tags })), children: /* @__PURE__ */ jsx99(
6700
+ return /* @__PURE__ */ jsx99("div", { className: (0, import_classnames34.default)(getMargin(margin), controlAndTagsToCSSClass({ control, tags })), children: /* @__PURE__ */ jsx99(
6714
6701
  Tabs2,
6715
6702
  {
6716
6703
  name: uid,
@@ -6731,7 +6718,7 @@ function TabsRendererComponent({ uid, margin, tabs, control, tags }) {
6731
6718
  function SegmentedTabsRendererComponent({ uid, margin, tabs, control, tags }) {
6732
6719
  var _a;
6733
6720
  const [selectedIndex, setSelectedIndex] = useState19(0);
6734
- return /* @__PURE__ */ jsxs39("div", { className: (0, import_classnames33.default)(getMargin(margin), controlAndTagsToCSSClass({ control, tags })), children: [
6721
+ return /* @__PURE__ */ jsxs39("div", { className: (0, import_classnames34.default)(getMargin(margin), controlAndTagsToCSSClass({ control, tags })), children: [
6735
6722
  /* @__PURE__ */ jsx99(
6736
6723
  SegmentedControl2,
6737
6724
  {
@@ -6753,7 +6740,7 @@ function SegmentedTabsRendererComponent({ uid, margin, tabs, control, tags }) {
6753
6740
  function ChipsTabsRendererComponent({ margin, tabs, control, tags }) {
6754
6741
  var _a;
6755
6742
  const [selectedIndex, setSelectedIndex] = useState19(0);
6756
- return /* @__PURE__ */ jsxs39("div", { className: (0, import_classnames33.default)(getMargin(margin), controlAndTagsToCSSClass({ control, tags })), children: [
6743
+ return /* @__PURE__ */ jsxs39("div", { className: (0, import_classnames34.default)(getMargin(margin), controlAndTagsToCSSClass({ control, tags })), children: [
6757
6744
  /* @__PURE__ */ jsx99("div", { className: "chips-container", children: /* @__PURE__ */ jsx99(
6758
6745
  Chips2,
6759
6746
  {
@@ -6768,15 +6755,108 @@ function ChipsTabsRendererComponent({ margin, tabs, control, tags }) {
6768
6755
 
6769
6756
  // ../renderers/src/TextInputRenderer.tsx
6770
6757
  import { InputGroup as InputGroup5 } from "@transferwise/components";
6758
+ import { useState as useState21 } from "react";
6771
6759
 
6772
6760
  // ../renderers/src/components/VariableTextInput.tsx
6773
6761
  import {
6762
+ IconButton as IconButton4,
6774
6763
  Input as Input6,
6775
6764
  InputWithDisplayFormat,
6776
6765
  PhoneNumberInput,
6777
6766
  TextArea,
6778
6767
  TextareaWithDisplayFormat
6779
6768
  } from "@transferwise/components";
6769
+ import { Eye, EyeShut } from "@transferwise/icons";
6770
+ import { useIntl as useIntl21 } from "react-intl";
6771
+ import { useLayoutEffect as useLayoutEffect3, useRef as useRef5, useState as useState20 } from "react";
6772
+
6773
+ // ../renderers/src/messages/ssn-input.messages.ts
6774
+ import { defineMessages as defineMessages15 } from "react-intl";
6775
+ var ssn_input_messages_default = defineMessages15({
6776
+ showValue: {
6777
+ id: "df.wise.ssnInput.showValue",
6778
+ defaultMessage: "Show value",
6779
+ description: "Accessible label for showing a masked SSN or SIN value"
6780
+ },
6781
+ hideValue: {
6782
+ id: "df.wise.ssnInput.hideValue",
6783
+ defaultMessage: "Hide value",
6784
+ description: "Accessible label for hiding an SSN or SIN value"
6785
+ }
6786
+ });
6787
+
6788
+ // ../renderers/src/components/ssnInputUtils.ts
6789
+ function formatSsnValue(rawValue, displayFormat, isVisible) {
6790
+ if (!displayFormat) {
6791
+ return isVisible ? rawValue : "\u2022".repeat(rawValue.length);
6792
+ }
6793
+ const formattedValue = displayFormat.split("").reduce(
6794
+ ({ display, digitsUsed }, character) => {
6795
+ if (character === "*") {
6796
+ return digitsUsed < rawValue.length ? {
6797
+ display: `${display}${isVisible ? rawValue[digitsUsed] : "\u2022"}`,
6798
+ digitsUsed: digitsUsed + 1
6799
+ } : { display, digitsUsed };
6800
+ }
6801
+ return digitsUsed > 0 && digitsUsed < rawValue.length ? { display: `${display}${character}`, digitsUsed } : { display, digitsUsed };
6802
+ },
6803
+ { display: "", digitsUsed: 0 }
6804
+ ).display;
6805
+ const displayFormatDigitCount = displayFormat.split("").filter((character) => character === "*").length;
6806
+ const extraValue = rawValue.slice(displayFormatDigitCount);
6807
+ return `${formattedValue}${isVisible ? extraValue : "\u2022".repeat(extraValue.length)}`;
6808
+ }
6809
+ function getRawOffset(displayValue, displayOffset, rawValueLength) {
6810
+ return Math.min(
6811
+ displayValue.slice(0, displayOffset).split("").filter((character) => character === "\u2022" || /\d/.test(character)).length,
6812
+ rawValueLength
6813
+ );
6814
+ }
6815
+ function replaceSsnSelection(rawValue, displayValue, insertedValue, start, end) {
6816
+ const startOffset = getRawOffset(displayValue, start, rawValue.length);
6817
+ const endOffset = getRawOffset(displayValue, end, rawValue.length);
6818
+ if (!insertedValue) {
6819
+ return void 0;
6820
+ }
6821
+ return {
6822
+ value: `${rawValue.slice(0, startOffset)}${insertedValue}${rawValue.slice(endOffset)}`,
6823
+ caret: startOffset + insertedValue.length
6824
+ };
6825
+ }
6826
+ function deleteSsnSelection(rawValue, displayValue, start, end, backward) {
6827
+ let startOffset = getRawOffset(displayValue, start, rawValue.length);
6828
+ let endOffset = getRawOffset(displayValue, end, rawValue.length);
6829
+ if (startOffset === endOffset) {
6830
+ if (backward) {
6831
+ startOffset = Math.max(0, startOffset - 1);
6832
+ } else {
6833
+ endOffset = Math.min(rawValue.length, endOffset + 1);
6834
+ }
6835
+ }
6836
+ return {
6837
+ value: `${rawValue.slice(0, startOffset)}${rawValue.slice(endOffset)}`,
6838
+ caret: startOffset
6839
+ };
6840
+ }
6841
+ function getDisplayOffset(displayValue, rawOffset) {
6842
+ if (rawOffset === 0) {
6843
+ return 0;
6844
+ }
6845
+ let displayOffset = 0;
6846
+ let digitsSeen = 0;
6847
+ for (const character of displayValue) {
6848
+ if (character === "\u2022" || /\d/.test(character)) {
6849
+ digitsSeen += 1;
6850
+ if (digitsSeen === rawOffset) {
6851
+ return displayOffset + 1;
6852
+ }
6853
+ }
6854
+ displayOffset += 1;
6855
+ }
6856
+ return displayOffset;
6857
+ }
6858
+
6859
+ // ../renderers/src/components/VariableTextInput.tsx
6780
6860
  import { jsx as jsx100 } from "react/jsx-runtime";
6781
6861
  var commonKeys = [
6782
6862
  "autoComplete",
@@ -6792,13 +6872,15 @@ var commonKeys = [
6792
6872
  "value"
6793
6873
  ];
6794
6874
  function VariableTextInput(inputProps) {
6795
- const { id, value, control, onChange } = inputProps;
6875
+ const { id, value, control, onChange, isSsnVisible } = inputProps;
6796
6876
  const commonProps = __spreadProps(__spreadValues({}, pick(inputProps, ...commonKeys)), { name: id });
6797
6877
  switch (control) {
6798
6878
  case "email":
6799
6879
  return /* @__PURE__ */ jsx100(TextInput, __spreadProps(__spreadValues({}, commonProps), { type: "email", onChange }));
6800
6880
  case "password":
6801
6881
  return /* @__PURE__ */ jsx100(TextInput, __spreadProps(__spreadValues({}, commonProps), { type: "password", onChange }));
6882
+ case "ssn-input":
6883
+ return /* @__PURE__ */ jsx100(SsnInput, __spreadProps(__spreadValues({}, commonProps), { isVisible: isSsnVisible, onChange }));
6802
6884
  case "numeric": {
6803
6885
  const numericProps = __spreadProps(__spreadValues({}, commonProps), { type: "number", onWheel });
6804
6886
  return /* @__PURE__ */ jsx100(
@@ -6818,74 +6900,207 @@ function VariableTextInput(inputProps) {
6818
6900
  }
6819
6901
  }
6820
6902
  }
6903
+ function SsnInputToggle({
6904
+ isVisible,
6905
+ onClick
6906
+ }) {
6907
+ const { formatMessage } = useIntl21();
6908
+ return /* @__PURE__ */ jsx100(
6909
+ IconButton4,
6910
+ {
6911
+ priority: "minimal",
6912
+ size: 24,
6913
+ "aria-label": formatMessage(isVisible ? ssn_input_messages_default.hideValue : ssn_input_messages_default.showValue),
6914
+ "aria-pressed": isVisible,
6915
+ onClick,
6916
+ children: isVisible ? /* @__PURE__ */ jsx100(EyeShut, { size: 24 }) : /* @__PURE__ */ jsx100(Eye, { size: 24 })
6917
+ }
6918
+ );
6919
+ }
6821
6920
  function TextInput(props) {
6822
- const _a = props, { control, displayFormat, onChange } = _a, commonProps = __objRest(_a, ["control", "displayFormat", "onChange"]);
6921
+ const _a = props, { control, displayFormat, onChange, type } = _a, commonProps = __objRest(_a, ["control", "displayFormat", "onChange", "type"]);
6823
6922
  const InputWithPattern = control === "textarea" ? TextareaWithDisplayFormat : InputWithDisplayFormat;
6824
6923
  const InputWithoutPattern = control === "textarea" ? TextArea : Input6;
6825
- return displayFormat ? /* @__PURE__ */ jsx100(InputWithPattern, __spreadProps(__spreadValues({ displayPattern: displayFormat }, commonProps), { onChange })) : /* @__PURE__ */ jsx100(InputWithoutPattern, __spreadProps(__spreadValues({}, commonProps), { onChange: (e) => onChange(e.target.value) }));
6924
+ return displayFormat ? /* @__PURE__ */ jsx100(InputWithPattern, __spreadProps(__spreadValues({ displayPattern: displayFormat }, commonProps), { onChange })) : /* @__PURE__ */ jsx100(InputWithoutPattern, __spreadProps(__spreadValues({}, commonProps), { type, onChange: (e) => onChange(e.target.value) }));
6925
+ }
6926
+ function SsnInput(props) {
6927
+ const _a = props, { displayFormat = "", isVisible = false, onChange, value = "" } = _a, commonProps = __objRest(_a, ["displayFormat", "isVisible", "onChange", "value"]);
6928
+ const [editVersion, setEditVersion] = useState20(0);
6929
+ const inputRef = useRef5(null);
6930
+ const selection = useRef5({ start: 0, end: 0 });
6931
+ const pendingCaret = useRef5(null);
6932
+ const rawValue = value.replace(/\D/g, "");
6933
+ const formattedValue = formatSsnValue(rawValue, displayFormat, isVisible);
6934
+ const scheduleCaret = (rawOffset) => {
6935
+ pendingCaret.current = rawOffset;
6936
+ setEditVersion((version) => version + 1);
6937
+ };
6938
+ const replaceSelection = (insertedValue, start, end) => {
6939
+ const result = replaceSsnSelection(rawValue, formattedValue, insertedValue, start, end);
6940
+ if (!result) {
6941
+ return;
6942
+ }
6943
+ scheduleCaret(result.caret);
6944
+ onChange(result.value);
6945
+ };
6946
+ const deleteSelection = (start, end, backward) => {
6947
+ const result = deleteSsnSelection(rawValue, formattedValue, start, end, backward);
6948
+ scheduleCaret(result.caret);
6949
+ onChange(result.value);
6950
+ };
6951
+ useLayoutEffect3(() => {
6952
+ if (pendingCaret.current === null || !inputRef.current) {
6953
+ return;
6954
+ }
6955
+ inputRef.current.setSelectionRange(
6956
+ getDisplayOffset(formattedValue, pendingCaret.current),
6957
+ getDisplayOffset(formattedValue, pendingCaret.current)
6958
+ );
6959
+ pendingCaret.current = null;
6960
+ }, [editVersion, formattedValue, rawValue]);
6961
+ return /* @__PURE__ */ jsx100(
6962
+ "input",
6963
+ __spreadProps(__spreadValues({
6964
+ ref: inputRef
6965
+ }, commonProps), {
6966
+ className: "form-control np-form-control np-input np-input--shape-rectangle",
6967
+ type: "text",
6968
+ inputMode: "numeric",
6969
+ value: formattedValue,
6970
+ onChange: (event) => {
6971
+ const nextValue = event.currentTarget.value;
6972
+ const inputType = event.nativeEvent.inputType;
6973
+ const start = selection.current.start;
6974
+ const end = selection.current.end;
6975
+ if (isVisible || /^\d+$/.test(nextValue)) {
6976
+ const nextRawValue = nextValue.replace(/\D/g, "");
6977
+ scheduleCaret(nextRawValue.length);
6978
+ onChange(nextRawValue);
6979
+ } else if ((inputType == null ? void 0 : inputType.startsWith("delete")) || nextValue.length < formattedValue.length) {
6980
+ deleteSelection(start, end, inputType === "deleteContentBackward");
6981
+ } else {
6982
+ replaceSelection(nextValue.replace(/\D/g, ""), start, end);
6983
+ }
6984
+ },
6985
+ onSelect: (event) => {
6986
+ var _a2, _b;
6987
+ selection.current = {
6988
+ start: (_a2 = event.currentTarget.selectionStart) != null ? _a2 : 0,
6989
+ end: (_b = event.currentTarget.selectionEnd) != null ? _b : 0
6990
+ };
6991
+ },
6992
+ onKeyDown: (event) => {
6993
+ var _a2, _b;
6994
+ selection.current = {
6995
+ start: (_a2 = event.currentTarget.selectionStart) != null ? _a2 : 0,
6996
+ end: (_b = event.currentTarget.selectionEnd) != null ? _b : 0
6997
+ };
6998
+ if (/^\d$/.test(event.key)) {
6999
+ event.preventDefault();
7000
+ replaceSelection(event.key, selection.current.start, selection.current.end);
7001
+ } else if (event.key === "Backspace") {
7002
+ event.preventDefault();
7003
+ deleteSelection(selection.current.start, selection.current.end, true);
7004
+ } else if (event.key === "Delete") {
7005
+ event.preventDefault();
7006
+ deleteSelection(selection.current.start, selection.current.end, false);
7007
+ }
7008
+ },
7009
+ onPaste: (event) => {
7010
+ var _a2, _b;
7011
+ event.preventDefault();
7012
+ selection.current = {
7013
+ start: (_a2 = event.currentTarget.selectionStart) != null ? _a2 : 0,
7014
+ end: (_b = event.currentTarget.selectionEnd) != null ? _b : 0
7015
+ };
7016
+ const pastedValue = event.clipboardData.getData("text").replace(/\D/g, "");
7017
+ replaceSelection(pastedValue, selection.current.start, selection.current.end);
7018
+ }
7019
+ })
7020
+ );
6826
7021
  }
6827
7022
 
6828
7023
  // ../renderers/src/TextInputRenderer.tsx
6829
7024
  import { jsx as jsx101 } from "react/jsx-runtime";
6830
7025
  var TextInputRenderer = {
6831
7026
  canRenderType: "input-text",
6832
- render: (props) => {
6833
- const _a = props, {
7027
+ render: (props) => /* @__PURE__ */ jsx101(TextInputRendererComponent, __spreadValues({}, props))
7028
+ };
7029
+ function TextInputRendererComponent(props) {
7030
+ const [isSsnVisible, setIsSsnVisible] = useState21(false);
7031
+ const _a = props, {
7032
+ id,
7033
+ title,
7034
+ description,
7035
+ help,
7036
+ media,
7037
+ validationState,
7038
+ value: initialValue,
7039
+ onChange
7040
+ } = _a, rest = __objRest(_a, [
7041
+ "id",
7042
+ "title",
7043
+ "description",
7044
+ "help",
7045
+ "media",
7046
+ "validationState",
7047
+ "value",
7048
+ "onChange"
7049
+ ]);
7050
+ const value = initialValue != null ? initialValue : "";
7051
+ const isSsnInput = props.control === "ssn-input";
7052
+ const inputProps = __spreadProps(__spreadValues({}, rest), {
7053
+ value,
7054
+ id,
7055
+ isSsnVisible,
7056
+ onChange: (newValue) => {
7057
+ if ((value != null ? value : "") !== (newValue != null ? newValue : "")) {
7058
+ onChange(newValue);
7059
+ }
7060
+ }
7061
+ });
7062
+ return /* @__PURE__ */ jsx101(
7063
+ FieldInput_default,
7064
+ {
6834
7065
  id,
6835
- title,
7066
+ label: title,
6836
7067
  description,
7068
+ validation: validationState,
7069
+ inlineAlert: props.inlineAlert,
7070
+ loadingState: props.fieldLoadingState,
6837
7071
  help,
6838
- media,
6839
- validationState,
6840
- value: initialValue,
6841
- onChange
6842
- } = _a, rest = __objRest(_a, [
6843
- "id",
6844
- "title",
6845
- "description",
6846
- "help",
6847
- "media",
6848
- "validationState",
6849
- "value",
6850
- "onChange"
6851
- ]);
6852
- const value = initialValue != null ? initialValue : "";
6853
- const inputProps = __spreadProps(__spreadValues({}, rest), {
6854
- value,
6855
- id,
6856
- onChange: (newValue) => {
6857
- if ((value != null ? value : "") !== (newValue != null ? newValue : "")) {
6858
- onChange(newValue);
7072
+ features: props.features,
7073
+ control: props.control,
7074
+ tags: props.tags,
7075
+ children: /* @__PURE__ */ jsx101(
7076
+ InputGroup5,
7077
+ {
7078
+ addonStart: getInputGroupAddonStart(media),
7079
+ addonEnd: isSsnInput ? {
7080
+ interactive: true,
7081
+ content: /* @__PURE__ */ jsx101(
7082
+ SsnInputToggle,
7083
+ {
7084
+ isVisible: isSsnVisible,
7085
+ onClick: () => setIsSsnVisible((visible) => !visible)
7086
+ }
7087
+ )
7088
+ } : void 0,
7089
+ children: /* @__PURE__ */ jsx101(VariableTextInput, __spreadValues({}, inputProps))
6859
7090
  }
6860
- }
6861
- });
6862
- return /* @__PURE__ */ jsx101(
6863
- FieldInput_default,
6864
- {
6865
- id,
6866
- label: title,
6867
- description,
6868
- validation: validationState,
6869
- inlineAlert: props.inlineAlert,
6870
- loadingState: props.fieldLoadingState,
6871
- help,
6872
- features: props.features,
6873
- control: props.control,
6874
- tags: props.tags,
6875
- children: /* @__PURE__ */ jsx101(InputGroup5, { addonStart: getInputGroupAddonStart(media), children: /* @__PURE__ */ jsx101(VariableTextInput, __spreadValues({}, inputProps)) })
6876
- }
6877
- );
6878
- }
6879
- };
7091
+ )
7092
+ }
7093
+ );
7094
+ }
6880
7095
  var TextInputRenderer_default = TextInputRenderer;
6881
7096
 
6882
7097
  // ../renderers/src/UpdatableRenderer.tsx
6883
- var import_classnames34 = __toESM(require_classnames());
7098
+ var import_classnames35 = __toESM(require_classnames());
6884
7099
  import { jsx as jsx102 } from "react/jsx-runtime";
6885
7100
  var UpdatableRenderer = {
6886
7101
  canRenderType: "updatable",
6887
7102
  render: ({ children, control, margin, tags }) => {
6888
- return /* @__PURE__ */ jsx102("div", { className: (0, import_classnames34.default)(getMargin(margin), controlAndTagsToCSSClass({ control, tags })), children });
7103
+ return /* @__PURE__ */ jsx102("div", { className: (0, import_classnames35.default)(getMargin(margin), controlAndTagsToCSSClass({ control, tags })), children });
6889
7104
  }
6890
7105
  };
6891
7106
 
@@ -7032,9 +7247,9 @@ var LargeUploadRenderer = {
7032
7247
  };
7033
7248
 
7034
7249
  // ../renderers/src/UpsellRenderer.tsx
7035
- var import_classnames35 = __toESM(require_classnames());
7250
+ var import_classnames36 = __toESM(require_classnames());
7036
7251
  import { Nudge } from "@transferwise/components";
7037
- import { useState as useState20 } from "react";
7252
+ import { useState as useState22 } from "react";
7038
7253
  import { jsx as jsx104 } from "react/jsx-runtime";
7039
7254
  var UpsellRenderer = {
7040
7255
  canRenderType: "upsell",
@@ -7042,11 +7257,11 @@ var UpsellRenderer = {
7042
7257
  };
7043
7258
  function UpsellRendererComponent(props) {
7044
7259
  const { text, callToAction, media, margin, onDismiss, control, tags } = props;
7045
- const [isVisible, setIsVisible] = useState20(true);
7260
+ const [isVisible, setIsVisible] = useState22(true);
7046
7261
  return isVisible ? /* @__PURE__ */ jsx104(
7047
7262
  Nudge,
7048
7263
  {
7049
- className: (0, import_classnames35.default)(getMargin(margin), controlAndTagsToCSSClass({ control, tags })),
7264
+ className: (0, import_classnames36.default)(getMargin(margin), controlAndTagsToCSSClass({ control, tags })),
7050
7265
  mediaName: getMediaName(media),
7051
7266
  title: text,
7052
7267
  action: __spreadValues({
@@ -7272,11 +7487,11 @@ var customEventsToAnalytics = {
7272
7487
 
7273
7488
  // src/dynamicFlow/useOnCopy.tsx
7274
7489
  import { useCallback as useCallback2 } from "react";
7275
- import { useIntl as useIntl21 } from "react-intl";
7490
+ import { useIntl as useIntl22 } from "react-intl";
7276
7491
 
7277
7492
  // src/dynamicFlow/messages.ts
7278
- import { defineMessages as defineMessages15 } from "react-intl";
7279
- var messages_default = defineMessages15({
7493
+ import { defineMessages as defineMessages16 } from "react-intl";
7494
+ var messages_default = defineMessages16({
7280
7495
  copied: {
7281
7496
  id: "df.wise.CopyFeedback.copy",
7282
7497
  defaultMessage: "Copied to clipboard",
@@ -7291,7 +7506,7 @@ var messages_default = defineMessages15({
7291
7506
 
7292
7507
  // src/dynamicFlow/useOnCopy.tsx
7293
7508
  var useOnCopy = () => {
7294
- const { formatMessage } = useIntl21();
7509
+ const { formatMessage } = useIntl22();
7295
7510
  const createSnackBar = useSnackBarIfAvailable();
7296
7511
  return useCallback2(
7297
7512
  (copiedContent) => {
@@ -7307,9 +7522,9 @@ var useOnCopy = () => {
7307
7522
 
7308
7523
  // src/dynamicFlow/useWiseHttpClient.tsx
7309
7524
  import { useCallback as useCallback3 } from "react";
7310
- import { useIntl as useIntl22 } from "react-intl";
7525
+ import { useIntl as useIntl23 } from "react-intl";
7311
7526
  var useWiseHttpClient = (httpClient) => {
7312
- const { locale } = useIntl22();
7527
+ const { locale } = useIntl23();
7313
7528
  return useCallback3(
7314
7529
  async (input, init = {}) => {
7315
7530
  const headers = new Headers(init.headers);
@@ -7485,6 +7700,8 @@ var cs_default = {
7485
7700
  "df.wise.group.currencies-with-account-details": "M\u011Bny s detaily \xFA\u010Dtu",
7486
7701
  "df.wise.group.popular": "Popul\xE1rn\xED",
7487
7702
  "df.wise.group.recent": "Ned\xE1vn\xE9",
7703
+ "df.wise.ssnInput.hideValue": "Hide value",
7704
+ "df.wise.ssnInput.showValue": "Show value",
7488
7705
  "df.wise.step.scrollToBottom": "P\u0159ej\xEDt na konec"
7489
7706
  };
7490
7707
 
@@ -7535,6 +7752,8 @@ var de_default = {
7535
7752
  "df.wise.group.currencies-with-account-details": "W\xE4hrungen mit Bankverbindung",
7536
7753
  "df.wise.group.popular": "Beliebt",
7537
7754
  "df.wise.group.recent": "K\xFCrzlich verwendet",
7755
+ "df.wise.ssnInput.hideValue": "Hide value",
7756
+ "df.wise.ssnInput.showValue": "Show value",
7538
7757
  "df.wise.step.scrollToBottom": "Nach unten scrollen"
7539
7758
  };
7540
7759
 
@@ -7585,6 +7804,8 @@ var en_default = {
7585
7804
  "df.wise.group.currencies-with-account-details": "Currencies with account details",
7586
7805
  "df.wise.group.popular": "Popular",
7587
7806
  "df.wise.group.recent": "Recent",
7807
+ "df.wise.ssnInput.hideValue": "Hide value",
7808
+ "df.wise.ssnInput.showValue": "Show value",
7588
7809
  "df.wise.step.scrollToBottom": "Scroll to bottom"
7589
7810
  };
7590
7811
 
@@ -7635,6 +7856,8 @@ var es_default = {
7635
7856
  "df.wise.group.currencies-with-account-details": "Divisas con datos de cuenta",
7636
7857
  "df.wise.group.popular": "Populares",
7637
7858
  "df.wise.group.recent": "Recientes",
7859
+ "df.wise.ssnInput.hideValue": "Ocultar valor",
7860
+ "df.wise.ssnInput.showValue": "Mostrar valor",
7638
7861
  "df.wise.step.scrollToBottom": "Despl\xE1zate hasta abajo"
7639
7862
  };
7640
7863
 
@@ -7685,6 +7908,8 @@ var fr_default = {
7685
7908
  "df.wise.group.currencies-with-account-details": "Devises avec num\xE9ros de compte",
7686
7909
  "df.wise.group.popular": "Populaires",
7687
7910
  "df.wise.group.recent": "R\xE9cents",
7911
+ "df.wise.ssnInput.hideValue": "Hide value",
7912
+ "df.wise.ssnInput.showValue": "Show value",
7688
7913
  "df.wise.step.scrollToBottom": "Faire d\xE9filer vers le bas"
7689
7914
  };
7690
7915
 
@@ -7735,6 +7960,8 @@ var hu_default = {
7735
7960
  "df.wise.group.currencies-with-account-details": "P\xE9nznemek sz\xE1mlaadatokkal",
7736
7961
  "df.wise.group.popular": "N\xE9pszer\u0171",
7737
7962
  "df.wise.group.recent": "Legut\xF3bbi",
7963
+ "df.wise.ssnInput.hideValue": "Hide value",
7964
+ "df.wise.ssnInput.showValue": "Show value",
7738
7965
  "df.wise.step.scrollToBottom": "G\xF6rgess legalulra"
7739
7966
  };
7740
7967
 
@@ -7785,6 +8012,8 @@ var id_default = {
7785
8012
  "df.wise.group.currencies-with-account-details": "Mata uang dengan detail rekening",
7786
8013
  "df.wise.group.popular": "Populer",
7787
8014
  "df.wise.group.recent": "Terbaru",
8015
+ "df.wise.ssnInput.hideValue": "Sembunyikan nilai",
8016
+ "df.wise.ssnInput.showValue": "Tampilkan nilai",
7788
8017
  "df.wise.step.scrollToBottom": "Gulir ke bawah"
7789
8018
  };
7790
8019
 
@@ -7835,6 +8064,8 @@ var it_default = {
7835
8064
  "df.wise.group.currencies-with-account-details": "Valute con estremi del conto",
7836
8065
  "df.wise.group.popular": "Popolari",
7837
8066
  "df.wise.group.recent": "Recenti",
8067
+ "df.wise.ssnInput.hideValue": "Hide value",
8068
+ "df.wise.ssnInput.showValue": "Show value",
7838
8069
  "df.wise.step.scrollToBottom": "Scorri fino in fondo"
7839
8070
  };
7840
8071
 
@@ -7885,6 +8116,8 @@ var ja_default = {
7885
8116
  "df.wise.group.currencies-with-account-details": "\u53E3\u5EA7\u60C5\u5831\u3092\u53D6\u5F97\u3067\u304D\u308B\u901A\u8CA8",
7886
8117
  "df.wise.group.popular": "\u4EBA\u6C17",
7887
8118
  "df.wise.group.recent": "\u6700\u8FD1",
8119
+ "df.wise.ssnInput.hideValue": "Hide value",
8120
+ "df.wise.ssnInput.showValue": "Show value",
7888
8121
  "df.wise.step.scrollToBottom": "\u4E0B\u307E\u3067\u30B9\u30AF\u30ED\u30FC\u30EB\u3059\u308B"
7889
8122
  };
7890
8123
 
@@ -7935,6 +8168,8 @@ var nl_default = {
7935
8168
  "df.wise.group.currencies-with-account-details": "Valuta's met rekeninggegevens",
7936
8169
  "df.wise.group.popular": "Populair",
7937
8170
  "df.wise.group.recent": "Recent",
8171
+ "df.wise.ssnInput.hideValue": "Hide value",
8172
+ "df.wise.ssnInput.showValue": "Show value",
7938
8173
  "df.wise.step.scrollToBottom": "Scrol omlaag"
7939
8174
  };
7940
8175
 
@@ -7985,6 +8220,8 @@ var pl_default = {
7985
8220
  "df.wise.group.currencies-with-account-details": "Waluty z danymi bankowymi",
7986
8221
  "df.wise.group.popular": "Popularne",
7987
8222
  "df.wise.group.recent": "Ostatnie",
8223
+ "df.wise.ssnInput.hideValue": "Hide value",
8224
+ "df.wise.ssnInput.showValue": "Show value",
7988
8225
  "df.wise.step.scrollToBottom": "Przewi\u0144 w d\xF3\u0142"
7989
8226
  };
7990
8227
 
@@ -8035,6 +8272,8 @@ var pt_default = {
8035
8272
  "df.wise.group.currencies-with-account-details": "Moedas com dados de conta",
8036
8273
  "df.wise.group.popular": "Popular",
8037
8274
  "df.wise.group.recent": "Recente",
8275
+ "df.wise.ssnInput.hideValue": "Hide value",
8276
+ "df.wise.ssnInput.showValue": "Show value",
8038
8277
  "df.wise.step.scrollToBottom": "Descer at\xE9 o final da p\xE1gina"
8039
8278
  };
8040
8279
 
@@ -8085,6 +8324,8 @@ var ro_default = {
8085
8324
  "df.wise.group.currencies-with-account-details": "Monede cu detalii de cont",
8086
8325
  "df.wise.group.popular": "Populare",
8087
8326
  "df.wise.group.recent": "Recente",
8327
+ "df.wise.ssnInput.hideValue": "Hide value",
8328
+ "df.wise.ssnInput.showValue": "Show value",
8088
8329
  "df.wise.step.scrollToBottom": "Deruleaz\u0103 \xEEn jos"
8089
8330
  };
8090
8331
 
@@ -8135,6 +8376,8 @@ var ru_default = {
8135
8376
  "df.wise.group.currencies-with-account-details": "\u0412\u0430\u043B\u044E\u0442\u044B \u0441 \u0440\u0435\u043A\u0432\u0438\u0437\u0438\u0442\u0430\u043C\u0438 \u0441\u0447\u0435\u0442\u0430",
8136
8377
  "df.wise.group.popular": "\u041F\u043E\u043F\u0443\u043B\u044F\u0440\u043D\u044B\u0435",
8137
8378
  "df.wise.group.recent": "\u041D\u0435\u0434\u0430\u0432\u043D\u0438\u0435",
8379
+ "df.wise.ssnInput.hideValue": "Hide value",
8380
+ "df.wise.ssnInput.showValue": "Show value",
8138
8381
  "df.wise.step.scrollToBottom": "\u041F\u0440\u043E\u043B\u0438\u0441\u0442\u0430\u0439\u0442\u0435 \u0432\u043D\u0438\u0437"
8139
8382
  };
8140
8383
 
@@ -8185,6 +8428,8 @@ var th_default = {
8185
8428
  "df.wise.group.currencies-with-account-details": "\u0E2A\u0E01\u0E38\u0E25\u0E40\u0E07\u0E34\u0E19\u0E15\u0E48\u0E32\u0E07\u0E46 \u0E1E\u0E23\u0E49\u0E2D\u0E21\u0E23\u0E32\u0E22\u0E25\u0E30\u0E40\u0E2D\u0E35\u0E22\u0E14\u0E1A\u0E31\u0E0D\u0E0A\u0E35",
8186
8429
  "df.wise.group.popular": "\u0E2A\u0E01\u0E38\u0E25\u0E22\u0E2D\u0E14\u0E19\u0E34\u0E22\u0E21",
8187
8430
  "df.wise.group.recent": "\u0E25\u0E48\u0E32\u0E2A\u0E38\u0E14",
8431
+ "df.wise.ssnInput.hideValue": "\u0E0B\u0E48\u0E2D\u0E19\u0E04\u0E48\u0E32",
8432
+ "df.wise.ssnInput.showValue": "\u0E41\u0E2A\u0E14\u0E07\u0E04\u0E48\u0E32",
8188
8433
  "df.wise.step.scrollToBottom": "\u0E40\u0E25\u0E37\u0E48\u0E2D\u0E19\u0E44\u0E1B\u0E14\u0E49\u0E32\u0E19\u0E25\u0E48\u0E32\u0E07"
8189
8434
  };
8190
8435
 
@@ -8235,6 +8480,8 @@ var tr_default = {
8235
8480
  "df.wise.group.currencies-with-account-details": "Hesap bilgileri olan bakiyeler",
8236
8481
  "df.wise.group.popular": "Pop\xFCler",
8237
8482
  "df.wise.group.recent": "Yak\u0131n zamanl\u0131",
8483
+ "df.wise.ssnInput.hideValue": "Hide value",
8484
+ "df.wise.ssnInput.showValue": "Show value",
8238
8485
  "df.wise.step.scrollToBottom": "A\u015Fa\u011F\u0131 kayd\u0131r"
8239
8486
  };
8240
8487
 
@@ -8285,6 +8532,8 @@ var zh_CN_default = {
8285
8532
  "df.wise.group.currencies-with-account-details": "\u5E26\u6709\u8D26\u6237\u8BE6\u7EC6\u4FE1\u606F\u7684\u8D27\u5E01",
8286
8533
  "df.wise.group.popular": "\u70ED\u95E8",
8287
8534
  "df.wise.group.recent": "\u6700\u8FD1",
8535
+ "df.wise.ssnInput.hideValue": "Hide value",
8536
+ "df.wise.ssnInput.showValue": "Show value",
8288
8537
  "df.wise.step.scrollToBottom": "\u6EDA\u52A8\u5230\u5E95\u90E8"
8289
8538
  };
8290
8539
 
@@ -8335,6 +8584,8 @@ var zh_HK_default = {
8335
8584
  "df.wise.group.currencies-with-account-details": "\u63D0\u4F9B\u5E33\u6236\u8CC7\u6599\u7684\u8CA8\u5E63",
8336
8585
  "df.wise.group.popular": "\u71B1\u9580",
8337
8586
  "df.wise.group.recent": "\u6700\u8FD1\u7684",
8587
+ "df.wise.ssnInput.hideValue": "Hide value",
8588
+ "df.wise.ssnInput.showValue": "Show value",
8338
8589
  "df.wise.step.scrollToBottom": "\u6ED1\u52D5\u5230\u6700\u5E95\u90E8"
8339
8590
  };
8340
8591