@wise/dynamic-flow-client 5.6.2 → 5.7.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/build/main.css CHANGED
@@ -153,6 +153,21 @@
153
153
  width: 300px;
154
154
  }
155
155
  }
156
+ .df-media-layout-avatar {
157
+ display: flex;
158
+ }
159
+ .df-media-layout-avatar.start {
160
+ justify-content: start;
161
+ align-items: start;
162
+ }
163
+ .df-media-layout-avatar.center {
164
+ justify-content: center;
165
+ align-items: center;
166
+ }
167
+ .df-media-layout-avatar.end {
168
+ justify-content: end;
169
+ align-items: end;
170
+ }
156
171
  .df-toolbar {
157
172
  display: flex;
158
173
  gap: 0.25em;
package/build/main.js CHANGED
@@ -841,6 +841,7 @@ var getChildren = (node) => {
841
841
  case "list":
842
842
  case "loading-indicator":
843
843
  case "markdown":
844
+ case "media":
844
845
  case "input-multi-select":
845
846
  case "input-upload-multi":
846
847
  case "input-number":
@@ -854,6 +855,7 @@ var getChildren = (node) => {
854
855
  case "input-upload":
855
856
  case "external-confirmation":
856
857
  case "subflow":
858
+ case "upsell":
857
859
  return [];
858
860
  }
859
861
  };
@@ -1134,6 +1136,55 @@ var createSubflowDomainComponent = (subflowProps, onComponentUpdate) => {
1134
1136
  return subflowComponent;
1135
1137
  };
1136
1138
 
1139
+ // src/domain/features/prefetch/request-cache.ts
1140
+ var makeRequestCacheWithParent = (parent) => {
1141
+ const map = /* @__PURE__ */ new Map();
1142
+ const cache = {
1143
+ get: (requestParams) => {
1144
+ var _a;
1145
+ const key = makeRequestCacheKey(requestParams);
1146
+ const promise = (_a = map.get(key)) != null ? _a : parent == null ? void 0 : parent.get(requestParams);
1147
+ map.delete(key);
1148
+ return promise;
1149
+ },
1150
+ set: (requestParams, responsePromise) => {
1151
+ return map.set(makeRequestCacheKey(requestParams), responsePromise);
1152
+ }
1153
+ };
1154
+ return cache;
1155
+ };
1156
+ var makeRequestCache = (initialValues = []) => {
1157
+ const cache = makeRequestCacheWithParent(void 0);
1158
+ initialValues.forEach(([requestParams, responsePromise]) => {
1159
+ cache.set(requestParams, responsePromise);
1160
+ });
1161
+ return cache;
1162
+ };
1163
+ var normaliseRequestCache = (cache) => {
1164
+ if (cache === void 0) {
1165
+ return makeRequestCache();
1166
+ }
1167
+ if (isRequestCacheInstance(cache)) {
1168
+ return cache;
1169
+ }
1170
+ return makeRequestCache(cache);
1171
+ };
1172
+ var isRequestCacheInstance = (cache) => {
1173
+ return !cache || !Array.isArray(cache);
1174
+ };
1175
+ var makeRequestCacheKey = (requestParams) => {
1176
+ var _a, _b;
1177
+ const [input, init] = requestParams;
1178
+ const url = typeof input === "string" || input instanceof URL ? input.toString() : input.url;
1179
+ const key = JSON.stringify({
1180
+ url,
1181
+ method: (_a = init == null ? void 0 : init.method) != null ? _a : "GET",
1182
+ headers: (init == null ? void 0 : init.headers) ? Array.from(new Headers(init.headers).entries()) : [],
1183
+ body: (_b = init == null ? void 0 : init.body) != null ? _b : null
1184
+ });
1185
+ return key;
1186
+ };
1187
+
1137
1188
  // src/domain/components/ModalComponent.ts
1138
1189
  var createModalContentComponent = (modalProps, onComponentUpdate) => {
1139
1190
  const update = getInputUpdateFunction(onComponentUpdate);
@@ -1208,51 +1259,6 @@ var getActionByReference = ($ref, actions = []) => {
1208
1259
  return action;
1209
1260
  };
1210
1261
 
1211
- // src/domain/mappers/utils/call-to-action-utils.ts
1212
- var getDomainLayerCallToAction = (callToAction, mapperProps) => {
1213
- var _a;
1214
- if (!callToAction) {
1215
- return void 0;
1216
- }
1217
- const { step, onBehavior, registerSubmissionBehavior } = mapperProps;
1218
- const stepActions = (_a = step.actions) != null ? _a : [];
1219
- const { title = "", accessibilityDescription, action, behavior } = callToAction;
1220
- return getCallToAction(
1221
- { title, accessibilityDescription },
1222
- getDomainLayerBehavior({ action, behavior }, stepActions, registerSubmissionBehavior),
1223
- onBehavior
1224
- );
1225
- };
1226
- var getCallToAction = ({ title, accessibilityDescription }, behavior, onBehavior) => {
1227
- const onClick = () => {
1228
- void onBehavior(behavior);
1229
- };
1230
- switch (behavior.type) {
1231
- case "action":
1232
- case "modal":
1233
- case "copy":
1234
- case "dismiss": {
1235
- return {
1236
- type: behavior.type,
1237
- title: title != null ? title : "",
1238
- accessibilityDescription,
1239
- onClick
1240
- };
1241
- }
1242
- case "link": {
1243
- return {
1244
- type: "link",
1245
- title: title != null ? title : "",
1246
- href: behavior.url,
1247
- accessibilityDescription,
1248
- onClick
1249
- };
1250
- }
1251
- default:
1252
- return void 0;
1253
- }
1254
- };
1255
-
1256
1262
  // src/domain/mappers/utils/legacy-utils.ts
1257
1263
  var mapLegacyContext = (context) => {
1258
1264
  switch (context) {
@@ -1304,6 +1310,27 @@ var legacyActionTypeToControl = {
1304
1310
  };
1305
1311
  var mapLegacyActionTypeToControl = (type) => type && type in legacyActionTypeToControl ? legacyActionTypeToControl[type] : "secondary";
1306
1312
 
1313
+ // src/domain/mappers/utils/call-to-action-utils.ts
1314
+ function getDomainLayerCallToAction(cta, mapperProps) {
1315
+ var _a, _b;
1316
+ if (!cta) {
1317
+ return void 0;
1318
+ }
1319
+ const { step, onBehavior, registerSubmissionBehavior } = mapperProps;
1320
+ const stepActions = (_a = step.actions) != null ? _a : [];
1321
+ const behavior = getDomainLayerBehavior(cta, stepActions, registerSubmissionBehavior);
1322
+ return {
1323
+ type: behavior.type,
1324
+ title: (_b = cta.title) != null ? _b : "",
1325
+ context: cta.context ? mapLegacyContext(cta.context) : void 0,
1326
+ accessibilityDescription: cta.accessibilityDescription,
1327
+ href: behavior.type === "link" ? behavior.url : void 0,
1328
+ onClick: () => {
1329
+ void onBehavior(behavior);
1330
+ }
1331
+ };
1332
+ }
1333
+
1307
1334
  // src/domain/mappers/layout/alertLayoutToComponent.ts
1308
1335
  var alertLayoutToComponent = (uid, {
1309
1336
  control,
@@ -1852,6 +1879,24 @@ var markdownLayoutToComponent = (uid, {
1852
1879
  size: size != null ? size : "md"
1853
1880
  });
1854
1881
 
1882
+ // src/domain/components/MediaComponent.ts
1883
+ var createMediaComponent = (props) => __spreadValues({
1884
+ type: "media",
1885
+ kind: "layout"
1886
+ }, props);
1887
+
1888
+ // src/domain/mappers/layout/mediaLayoutToComponent.ts
1889
+ var mediaLayoutToComponent = (uid, { analyticsId, align, control, margin, media, size, tags }) => createMediaComponent({
1890
+ uid,
1891
+ analyticsId,
1892
+ align: mapLegacyAlign(align != null ? align : "center"),
1893
+ control,
1894
+ margin: margin != null ? margin : "md",
1895
+ media,
1896
+ size: size != null ? size : "md",
1897
+ tags
1898
+ });
1899
+
1855
1900
  // src/domain/components/ModalLayoutComponent.ts
1856
1901
  var createModalComponent = (modalProps) => __spreadProps(__spreadValues({
1857
1902
  type: "modal-layout",
@@ -1951,14 +1996,14 @@ var reviewLayoutToComponent = (uid, {
1951
1996
  }, mapperProps) => createReviewComponent({
1952
1997
  uid,
1953
1998
  analyticsId,
1954
- callToAction: getCallToAction2({ mapperProps, callToAction, action }),
1999
+ callToAction: getCallToAction({ mapperProps, callToAction, action }),
1955
2000
  control: getOrientationControl({ control, orientation }),
1956
2001
  fields: fields.map((field) => mapReviewField(field, mapperProps)),
1957
2002
  margin: margin != null ? margin : "md",
1958
2003
  tags,
1959
2004
  title
1960
2005
  });
1961
- var getCallToAction2 = ({
2006
+ var getCallToAction = ({
1962
2007
  callToAction,
1963
2008
  action,
1964
2009
  mapperProps
@@ -1996,7 +2041,7 @@ var mapReviewField = (field, mapperProps) => {
1996
2041
  help: (_a = field.help) == null ? void 0 : _a.markdown,
1997
2042
  inlineAlert: mapInlineAlert(field.inlineAlert),
1998
2043
  additionalInfo: mapAdditionalInfo(field.additionalInfo, mapperProps),
1999
- callToAction: getCallToAction2({
2044
+ callToAction: getCallToAction({
2000
2045
  callToAction: field.callToAction,
2001
2046
  mapperProps
2002
2047
  }),
@@ -2043,7 +2088,7 @@ var debounce = (callback, waitMs) => {
2043
2088
  // src/domain/components/searchComponent/SearchComponent.ts
2044
2089
  var DEBOUNCE_TIME = 400;
2045
2090
  var createSearchComponent = (searchProps, performSearch, onBehavior, onComponentUpdate) => {
2046
- const { uid, analyticsId, control, emptyMessage, margin, tags, title } = searchProps;
2091
+ const { uid, analyticsId, control, emptyMessage, hint, margin, tags, title } = searchProps;
2047
2092
  const update = getInputUpdateFunction(onComponentUpdate);
2048
2093
  let abortController = new AbortController();
2049
2094
  const search = (component2, query, searchConfig) => {
@@ -2079,6 +2124,7 @@ var createSearchComponent = (searchProps, performSearch, onBehavior, onComponent
2079
2124
  analyticsId,
2080
2125
  control,
2081
2126
  emptyMessage,
2127
+ hint,
2082
2128
  margin,
2083
2129
  tags,
2084
2130
  title,
@@ -2165,7 +2211,7 @@ var isValidResponseBody = (body) => isObject(body) && "results" in body && isArr
2165
2211
  var hashRequest = (query, config) => JSON.stringify({ query, config });
2166
2212
 
2167
2213
  // src/domain/mappers/layout/searchLayoutToComponent.ts
2168
- var searchLayoutToComponent = (uid, { analyticsId, control, emptyMessage, method, param, title, url, margin, tags }, mapperProps) => {
2214
+ var searchLayoutToComponent = (uid, { analyticsId, control, emptyMessage, hint, method, param, title, url, margin, tags }, mapperProps) => {
2169
2215
  const { httpClient, onBehavior, onComponentUpdate } = mapperProps;
2170
2216
  const search = getPerformSearchFunction(httpClient, { method, param, url });
2171
2217
  return createSearchComponent(
@@ -2174,6 +2220,7 @@ var searchLayoutToComponent = (uid, { analyticsId, control, emptyMessage, method
2174
2220
  analyticsId,
2175
2221
  control,
2176
2222
  emptyMessage: emptyMessage != null ? emptyMessage : "",
2223
+ hint,
2177
2224
  margin: margin != null ? margin : "md",
2178
2225
  tags,
2179
2226
  title
@@ -2253,6 +2300,60 @@ var mapTabs = (tabs, uid, mapperProps, schemaComponents) => tabs.map(({ componen
2253
2300
  )
2254
2301
  }));
2255
2302
 
2303
+ // src/domain/components/UpsellComponent.ts
2304
+ var createUpsellComponent = (upsellProps, onComponentUpdate) => {
2305
+ const update = getInputUpdateFunction(onComponentUpdate);
2306
+ const _a = upsellProps, { onDismiss: propsOnDismiss } = _a, restProps = __objRest(_a, ["onDismiss"]);
2307
+ const component = __spreadProps(__spreadValues({
2308
+ type: "upsell",
2309
+ kind: "layout"
2310
+ }, restProps), {
2311
+ visible: true,
2312
+ onDismiss: propsOnDismiss ? () => {
2313
+ update(component, (draft) => {
2314
+ draft.visible = false;
2315
+ });
2316
+ propsOnDismiss();
2317
+ } : void 0
2318
+ });
2319
+ return component;
2320
+ };
2321
+
2322
+ // src/domain/mappers/layout/upsellLayoutToComponent.ts
2323
+ var upsellLayoutToComponent = (uid, {
2324
+ analyticsId,
2325
+ callToAction,
2326
+ context,
2327
+ control,
2328
+ margin,
2329
+ media,
2330
+ onDismiss,
2331
+ tags,
2332
+ text
2333
+ }, mapperProps) => {
2334
+ const { onComponentUpdate } = mapperProps;
2335
+ return createUpsellComponent(
2336
+ {
2337
+ uid,
2338
+ analyticsId,
2339
+ callToAction: getDomainLayerCallToAction(callToAction, mapperProps),
2340
+ context: context ? mapLegacyContext(context) : "neutral",
2341
+ control,
2342
+ margin: margin != null ? margin : "md",
2343
+ media: getDomainLayerMedia({ media }),
2344
+ tags,
2345
+ text,
2346
+ onDismiss: onDismiss ? () => {
2347
+ const { url, method } = onDismiss;
2348
+ const body = method === "GET" ? void 0 : JSON.stringify(onDismiss.body);
2349
+ void mapperProps.httpClient(url, { method, body }).catch(() => {
2350
+ });
2351
+ } : void 0
2352
+ },
2353
+ onComponentUpdate
2354
+ );
2355
+ };
2356
+
2256
2357
  // src/domain/mappers/mapLayoutToComponent.ts
2257
2358
  var mapLayoutToComponent = (uid, layout, mapperProps, schemaComponents) => {
2258
2359
  switch (layout.type) {
@@ -2284,6 +2385,8 @@ var mapLayoutToComponent = (uid, layout, mapperProps, schemaComponents) => {
2284
2385
  return loadingIndicatorLayoutToComponent(uid, layout);
2285
2386
  case "markdown":
2286
2387
  return markdownLayoutToComponent(uid, layout);
2388
+ case "media":
2389
+ return mediaLayoutToComponent(uid, layout);
2287
2390
  case "modal":
2288
2391
  return modalLayoutToComponent(uid, layout, mapperProps, schemaComponents);
2289
2392
  case "paragraph":
@@ -2300,6 +2403,8 @@ var mapLayoutToComponent = (uid, layout, mapperProps, schemaComponents) => {
2300
2403
  return statusListLayoutToComponent(uid, layout, mapperProps);
2301
2404
  case "tabs":
2302
2405
  return tabsLayoutToComponent(uid, layout, mapperProps, schemaComponents);
2406
+ case "upsell":
2407
+ return upsellLayoutToComponent(uid, layout, mapperProps);
2303
2408
  default:
2304
2409
  throw new Error(`Invalid layout type in ${JSON.stringify(layout)}`);
2305
2410
  }
@@ -6031,55 +6136,6 @@ var createRequestFromAction = (action, model) => {
6031
6136
  });
6032
6137
  };
6033
6138
 
6034
- // src/domain/features/prefetch/request-cache.ts
6035
- var makeRequestCacheWithParent = (parent) => {
6036
- const map = /* @__PURE__ */ new Map();
6037
- const cache = {
6038
- get: (requestParams) => {
6039
- var _a;
6040
- const key = makeRequestCacheKey(requestParams);
6041
- const promise = (_a = map.get(key)) != null ? _a : parent == null ? void 0 : parent.get(requestParams);
6042
- map.delete(key);
6043
- return promise;
6044
- },
6045
- set: (requestParams, responsePromise) => {
6046
- return map.set(makeRequestCacheKey(requestParams), responsePromise);
6047
- }
6048
- };
6049
- return cache;
6050
- };
6051
- var makeRequestCache = (initialValues = []) => {
6052
- const cache = makeRequestCacheWithParent(void 0);
6053
- initialValues.forEach(([requestParams, responsePromise]) => {
6054
- cache.set(requestParams, responsePromise);
6055
- });
6056
- return cache;
6057
- };
6058
- var normaliseRequestCache = (cache) => {
6059
- if (cache === void 0) {
6060
- return makeRequestCache();
6061
- }
6062
- if (isRequestCacheInstance(cache)) {
6063
- return cache;
6064
- }
6065
- return makeRequestCache(cache);
6066
- };
6067
- var isRequestCacheInstance = (cache) => {
6068
- return !cache || !Array.isArray(cache);
6069
- };
6070
- var makeRequestCacheKey = (requestParams) => {
6071
- var _a, _b;
6072
- const [input, init] = requestParams;
6073
- const url = typeof input === "string" || input instanceof URL ? input.toString() : input.url;
6074
- const key = JSON.stringify({
6075
- url,
6076
- method: (_a = init == null ? void 0 : init.method) != null ? _a : "GET",
6077
- headers: (init == null ? void 0 : init.headers) ? Array.from(new Headers(init.headers).entries()) : [],
6078
- body: (_b = init == null ? void 0 : init.body) != null ? _b : null
6079
- });
6080
- return key;
6081
- };
6082
-
6083
6139
  // src/domain/features/prefetch/getStepPrefetch.ts
6084
6140
  var getStepPrefetch = (httpClient, flowRequestCache, submissionBehaviors) => {
6085
6141
  const requestCache = makeRequestCacheWithParent(flowRequestCache);
@@ -6850,7 +6906,11 @@ var createFlowController = (props) => {
6850
6906
  initState = "created";
6851
6907
  trackEvent("Initiated");
6852
6908
  rootComponent.setLoadingState("submitting");
6853
- void onAction(__spreadValues({ method: "GET" }, initialAction), null);
6909
+ void onAction(__spreadValues({ method: "GET" }, initialAction), null).then(() => {
6910
+ initState = "started";
6911
+ rootComponent.start();
6912
+ });
6913
+ return;
6854
6914
  }
6855
6915
  if (initState === "created") {
6856
6916
  initState = "started";
@@ -7497,6 +7557,9 @@ var markdownComponentToProps = (control, rendererMapperProps) => __spreadValues(
7497
7557
  "size"
7498
7558
  )), rendererMapperProps);
7499
7559
 
7560
+ // src/renderers/mappers/mediaComponentToProps.ts
7561
+ var mediaComponentToProps = (component, rendererMapperProps) => __spreadValues(__spreadValues({}, pick(component, "uid", "analyticsId", "type", "align", "control", "margin", "media", "size", "tags")), rendererMapperProps);
7562
+
7500
7563
  // src/renderers/mappers/modalComponentToProps.ts
7501
7564
  var modalComponentToProps = (component, rendererMapperProps) => {
7502
7565
  const { uid, analyticsId, open, tags, title, close } = component;
@@ -7842,7 +7905,19 @@ var rootComponentToProps = (rootComponent, rendererMapperProps) => {
7842
7905
 
7843
7906
  // src/renderers/mappers/searchComponentToProps.ts
7844
7907
  var searchComponentToProps = (component, rendererMapperProps) => {
7845
- const { uid, control, emptyMessage, error, isLoading, margin, query, results, title, tags } = component;
7908
+ const {
7909
+ uid,
7910
+ control,
7911
+ emptyMessage,
7912
+ error,
7913
+ hint,
7914
+ isLoading,
7915
+ margin,
7916
+ query,
7917
+ results,
7918
+ title,
7919
+ tags
7920
+ } = component;
7846
7921
  const onChange = component.onChange.bind(component);
7847
7922
  const onSelect = component.onSelect.bind(component);
7848
7923
  const state = getSearchState({
@@ -7859,6 +7934,7 @@ var searchComponentToProps = (component, rendererMapperProps) => {
7859
7934
  type: "search",
7860
7935
  id: uid,
7861
7936
  control,
7937
+ hint,
7862
7938
  isLoading,
7863
7939
  margin,
7864
7940
  query,
@@ -8003,6 +8079,23 @@ var uploadInputComponentToProps = (component, rendererMapperProps) => {
8003
8079
  });
8004
8080
  };
8005
8081
 
8082
+ // src/renderers/mappers/upsellComponentToProps.ts
8083
+ var upsellComponentToProps = (component, rendererMapperProps) => __spreadValues(__spreadProps(__spreadValues({}, pick(
8084
+ component,
8085
+ "uid",
8086
+ "analyticsId",
8087
+ "type",
8088
+ "callToAction",
8089
+ "context",
8090
+ "control",
8091
+ "margin",
8092
+ "media",
8093
+ "tags",
8094
+ "text"
8095
+ )), {
8096
+ onDismiss: component.onDismiss ? component.onDismiss.bind(component) : void 0
8097
+ }), rendererMapperProps);
8098
+
8006
8099
  // src/renderers/mappers/subflowComponentToRendererProps.ts
8007
8100
  var subflowComponentToRendererProps = (component, rendererMapperProps) => {
8008
8101
  return __spreadValues(__spreadProps(__spreadValues({
@@ -8084,6 +8177,8 @@ var getComponentProps = (component, rendererMapperProps) => {
8084
8177
  return loadingIndicatorComponentToProps(component, rendererMapperProps);
8085
8178
  case "markdown":
8086
8179
  return markdownComponentToProps(component, rendererMapperProps);
8180
+ case "media":
8181
+ return mediaComponentToProps(component, rendererMapperProps);
8087
8182
  case "modal-layout":
8088
8183
  return modalLayoutComponentToProps(component, rendererMapperProps);
8089
8184
  case "modal":
@@ -8124,6 +8219,8 @@ var getComponentProps = (component, rendererMapperProps) => {
8124
8219
  return tupleComponentToProps(component, rendererMapperProps);
8125
8220
  case "upload":
8126
8221
  return uploadInputComponentToProps(component, rendererMapperProps);
8222
+ case "upsell":
8223
+ return upsellComponentToProps(component, rendererMapperProps);
8127
8224
  case "persist-async":
8128
8225
  return persistAsyncComponentToProps(component, rendererMapperProps);
8129
8226
  case "step":
package/build/main.mjs CHANGED
@@ -811,6 +811,7 @@ var getChildren = (node) => {
811
811
  case "list":
812
812
  case "loading-indicator":
813
813
  case "markdown":
814
+ case "media":
814
815
  case "input-multi-select":
815
816
  case "input-upload-multi":
816
817
  case "input-number":
@@ -824,6 +825,7 @@ var getChildren = (node) => {
824
825
  case "input-upload":
825
826
  case "external-confirmation":
826
827
  case "subflow":
828
+ case "upsell":
827
829
  return [];
828
830
  }
829
831
  };
@@ -1104,6 +1106,55 @@ var createSubflowDomainComponent = (subflowProps, onComponentUpdate) => {
1104
1106
  return subflowComponent;
1105
1107
  };
1106
1108
 
1109
+ // src/domain/features/prefetch/request-cache.ts
1110
+ var makeRequestCacheWithParent = (parent) => {
1111
+ const map = /* @__PURE__ */ new Map();
1112
+ const cache = {
1113
+ get: (requestParams) => {
1114
+ var _a;
1115
+ const key = makeRequestCacheKey(requestParams);
1116
+ const promise = (_a = map.get(key)) != null ? _a : parent == null ? void 0 : parent.get(requestParams);
1117
+ map.delete(key);
1118
+ return promise;
1119
+ },
1120
+ set: (requestParams, responsePromise) => {
1121
+ return map.set(makeRequestCacheKey(requestParams), responsePromise);
1122
+ }
1123
+ };
1124
+ return cache;
1125
+ };
1126
+ var makeRequestCache = (initialValues = []) => {
1127
+ const cache = makeRequestCacheWithParent(void 0);
1128
+ initialValues.forEach(([requestParams, responsePromise]) => {
1129
+ cache.set(requestParams, responsePromise);
1130
+ });
1131
+ return cache;
1132
+ };
1133
+ var normaliseRequestCache = (cache) => {
1134
+ if (cache === void 0) {
1135
+ return makeRequestCache();
1136
+ }
1137
+ if (isRequestCacheInstance(cache)) {
1138
+ return cache;
1139
+ }
1140
+ return makeRequestCache(cache);
1141
+ };
1142
+ var isRequestCacheInstance = (cache) => {
1143
+ return !cache || !Array.isArray(cache);
1144
+ };
1145
+ var makeRequestCacheKey = (requestParams) => {
1146
+ var _a, _b;
1147
+ const [input, init] = requestParams;
1148
+ const url = typeof input === "string" || input instanceof URL ? input.toString() : input.url;
1149
+ const key = JSON.stringify({
1150
+ url,
1151
+ method: (_a = init == null ? void 0 : init.method) != null ? _a : "GET",
1152
+ headers: (init == null ? void 0 : init.headers) ? Array.from(new Headers(init.headers).entries()) : [],
1153
+ body: (_b = init == null ? void 0 : init.body) != null ? _b : null
1154
+ });
1155
+ return key;
1156
+ };
1157
+
1107
1158
  // src/domain/components/ModalComponent.ts
1108
1159
  var createModalContentComponent = (modalProps, onComponentUpdate) => {
1109
1160
  const update = getInputUpdateFunction(onComponentUpdate);
@@ -1178,51 +1229,6 @@ var getActionByReference = ($ref, actions = []) => {
1178
1229
  return action;
1179
1230
  };
1180
1231
 
1181
- // src/domain/mappers/utils/call-to-action-utils.ts
1182
- var getDomainLayerCallToAction = (callToAction, mapperProps) => {
1183
- var _a;
1184
- if (!callToAction) {
1185
- return void 0;
1186
- }
1187
- const { step, onBehavior, registerSubmissionBehavior } = mapperProps;
1188
- const stepActions = (_a = step.actions) != null ? _a : [];
1189
- const { title = "", accessibilityDescription, action, behavior } = callToAction;
1190
- return getCallToAction(
1191
- { title, accessibilityDescription },
1192
- getDomainLayerBehavior({ action, behavior }, stepActions, registerSubmissionBehavior),
1193
- onBehavior
1194
- );
1195
- };
1196
- var getCallToAction = ({ title, accessibilityDescription }, behavior, onBehavior) => {
1197
- const onClick = () => {
1198
- void onBehavior(behavior);
1199
- };
1200
- switch (behavior.type) {
1201
- case "action":
1202
- case "modal":
1203
- case "copy":
1204
- case "dismiss": {
1205
- return {
1206
- type: behavior.type,
1207
- title: title != null ? title : "",
1208
- accessibilityDescription,
1209
- onClick
1210
- };
1211
- }
1212
- case "link": {
1213
- return {
1214
- type: "link",
1215
- title: title != null ? title : "",
1216
- href: behavior.url,
1217
- accessibilityDescription,
1218
- onClick
1219
- };
1220
- }
1221
- default:
1222
- return void 0;
1223
- }
1224
- };
1225
-
1226
1232
  // src/domain/mappers/utils/legacy-utils.ts
1227
1233
  var mapLegacyContext = (context) => {
1228
1234
  switch (context) {
@@ -1274,6 +1280,27 @@ var legacyActionTypeToControl = {
1274
1280
  };
1275
1281
  var mapLegacyActionTypeToControl = (type) => type && type in legacyActionTypeToControl ? legacyActionTypeToControl[type] : "secondary";
1276
1282
 
1283
+ // src/domain/mappers/utils/call-to-action-utils.ts
1284
+ function getDomainLayerCallToAction(cta, mapperProps) {
1285
+ var _a, _b;
1286
+ if (!cta) {
1287
+ return void 0;
1288
+ }
1289
+ const { step, onBehavior, registerSubmissionBehavior } = mapperProps;
1290
+ const stepActions = (_a = step.actions) != null ? _a : [];
1291
+ const behavior = getDomainLayerBehavior(cta, stepActions, registerSubmissionBehavior);
1292
+ return {
1293
+ type: behavior.type,
1294
+ title: (_b = cta.title) != null ? _b : "",
1295
+ context: cta.context ? mapLegacyContext(cta.context) : void 0,
1296
+ accessibilityDescription: cta.accessibilityDescription,
1297
+ href: behavior.type === "link" ? behavior.url : void 0,
1298
+ onClick: () => {
1299
+ void onBehavior(behavior);
1300
+ }
1301
+ };
1302
+ }
1303
+
1277
1304
  // src/domain/mappers/layout/alertLayoutToComponent.ts
1278
1305
  var alertLayoutToComponent = (uid, {
1279
1306
  control,
@@ -1822,6 +1849,24 @@ var markdownLayoutToComponent = (uid, {
1822
1849
  size: size != null ? size : "md"
1823
1850
  });
1824
1851
 
1852
+ // src/domain/components/MediaComponent.ts
1853
+ var createMediaComponent = (props) => __spreadValues({
1854
+ type: "media",
1855
+ kind: "layout"
1856
+ }, props);
1857
+
1858
+ // src/domain/mappers/layout/mediaLayoutToComponent.ts
1859
+ var mediaLayoutToComponent = (uid, { analyticsId, align, control, margin, media, size, tags }) => createMediaComponent({
1860
+ uid,
1861
+ analyticsId,
1862
+ align: mapLegacyAlign(align != null ? align : "center"),
1863
+ control,
1864
+ margin: margin != null ? margin : "md",
1865
+ media,
1866
+ size: size != null ? size : "md",
1867
+ tags
1868
+ });
1869
+
1825
1870
  // src/domain/components/ModalLayoutComponent.ts
1826
1871
  var createModalComponent = (modalProps) => __spreadProps(__spreadValues({
1827
1872
  type: "modal-layout",
@@ -1921,14 +1966,14 @@ var reviewLayoutToComponent = (uid, {
1921
1966
  }, mapperProps) => createReviewComponent({
1922
1967
  uid,
1923
1968
  analyticsId,
1924
- callToAction: getCallToAction2({ mapperProps, callToAction, action }),
1969
+ callToAction: getCallToAction({ mapperProps, callToAction, action }),
1925
1970
  control: getOrientationControl({ control, orientation }),
1926
1971
  fields: fields.map((field) => mapReviewField(field, mapperProps)),
1927
1972
  margin: margin != null ? margin : "md",
1928
1973
  tags,
1929
1974
  title
1930
1975
  });
1931
- var getCallToAction2 = ({
1976
+ var getCallToAction = ({
1932
1977
  callToAction,
1933
1978
  action,
1934
1979
  mapperProps
@@ -1966,7 +2011,7 @@ var mapReviewField = (field, mapperProps) => {
1966
2011
  help: (_a = field.help) == null ? void 0 : _a.markdown,
1967
2012
  inlineAlert: mapInlineAlert(field.inlineAlert),
1968
2013
  additionalInfo: mapAdditionalInfo(field.additionalInfo, mapperProps),
1969
- callToAction: getCallToAction2({
2014
+ callToAction: getCallToAction({
1970
2015
  callToAction: field.callToAction,
1971
2016
  mapperProps
1972
2017
  }),
@@ -2013,7 +2058,7 @@ var debounce = (callback, waitMs) => {
2013
2058
  // src/domain/components/searchComponent/SearchComponent.ts
2014
2059
  var DEBOUNCE_TIME = 400;
2015
2060
  var createSearchComponent = (searchProps, performSearch, onBehavior, onComponentUpdate) => {
2016
- const { uid, analyticsId, control, emptyMessage, margin, tags, title } = searchProps;
2061
+ const { uid, analyticsId, control, emptyMessage, hint, margin, tags, title } = searchProps;
2017
2062
  const update = getInputUpdateFunction(onComponentUpdate);
2018
2063
  let abortController = new AbortController();
2019
2064
  const search = (component2, query, searchConfig) => {
@@ -2049,6 +2094,7 @@ var createSearchComponent = (searchProps, performSearch, onBehavior, onComponent
2049
2094
  analyticsId,
2050
2095
  control,
2051
2096
  emptyMessage,
2097
+ hint,
2052
2098
  margin,
2053
2099
  tags,
2054
2100
  title,
@@ -2135,7 +2181,7 @@ var isValidResponseBody = (body) => isObject(body) && "results" in body && isArr
2135
2181
  var hashRequest = (query, config) => JSON.stringify({ query, config });
2136
2182
 
2137
2183
  // src/domain/mappers/layout/searchLayoutToComponent.ts
2138
- var searchLayoutToComponent = (uid, { analyticsId, control, emptyMessage, method, param, title, url, margin, tags }, mapperProps) => {
2184
+ var searchLayoutToComponent = (uid, { analyticsId, control, emptyMessage, hint, method, param, title, url, margin, tags }, mapperProps) => {
2139
2185
  const { httpClient, onBehavior, onComponentUpdate } = mapperProps;
2140
2186
  const search = getPerformSearchFunction(httpClient, { method, param, url });
2141
2187
  return createSearchComponent(
@@ -2144,6 +2190,7 @@ var searchLayoutToComponent = (uid, { analyticsId, control, emptyMessage, method
2144
2190
  analyticsId,
2145
2191
  control,
2146
2192
  emptyMessage: emptyMessage != null ? emptyMessage : "",
2193
+ hint,
2147
2194
  margin: margin != null ? margin : "md",
2148
2195
  tags,
2149
2196
  title
@@ -2223,6 +2270,60 @@ var mapTabs = (tabs, uid, mapperProps, schemaComponents) => tabs.map(({ componen
2223
2270
  )
2224
2271
  }));
2225
2272
 
2273
+ // src/domain/components/UpsellComponent.ts
2274
+ var createUpsellComponent = (upsellProps, onComponentUpdate) => {
2275
+ const update = getInputUpdateFunction(onComponentUpdate);
2276
+ const _a = upsellProps, { onDismiss: propsOnDismiss } = _a, restProps = __objRest(_a, ["onDismiss"]);
2277
+ const component = __spreadProps(__spreadValues({
2278
+ type: "upsell",
2279
+ kind: "layout"
2280
+ }, restProps), {
2281
+ visible: true,
2282
+ onDismiss: propsOnDismiss ? () => {
2283
+ update(component, (draft) => {
2284
+ draft.visible = false;
2285
+ });
2286
+ propsOnDismiss();
2287
+ } : void 0
2288
+ });
2289
+ return component;
2290
+ };
2291
+
2292
+ // src/domain/mappers/layout/upsellLayoutToComponent.ts
2293
+ var upsellLayoutToComponent = (uid, {
2294
+ analyticsId,
2295
+ callToAction,
2296
+ context,
2297
+ control,
2298
+ margin,
2299
+ media,
2300
+ onDismiss,
2301
+ tags,
2302
+ text
2303
+ }, mapperProps) => {
2304
+ const { onComponentUpdate } = mapperProps;
2305
+ return createUpsellComponent(
2306
+ {
2307
+ uid,
2308
+ analyticsId,
2309
+ callToAction: getDomainLayerCallToAction(callToAction, mapperProps),
2310
+ context: context ? mapLegacyContext(context) : "neutral",
2311
+ control,
2312
+ margin: margin != null ? margin : "md",
2313
+ media: getDomainLayerMedia({ media }),
2314
+ tags,
2315
+ text,
2316
+ onDismiss: onDismiss ? () => {
2317
+ const { url, method } = onDismiss;
2318
+ const body = method === "GET" ? void 0 : JSON.stringify(onDismiss.body);
2319
+ void mapperProps.httpClient(url, { method, body }).catch(() => {
2320
+ });
2321
+ } : void 0
2322
+ },
2323
+ onComponentUpdate
2324
+ );
2325
+ };
2326
+
2226
2327
  // src/domain/mappers/mapLayoutToComponent.ts
2227
2328
  var mapLayoutToComponent = (uid, layout, mapperProps, schemaComponents) => {
2228
2329
  switch (layout.type) {
@@ -2254,6 +2355,8 @@ var mapLayoutToComponent = (uid, layout, mapperProps, schemaComponents) => {
2254
2355
  return loadingIndicatorLayoutToComponent(uid, layout);
2255
2356
  case "markdown":
2256
2357
  return markdownLayoutToComponent(uid, layout);
2358
+ case "media":
2359
+ return mediaLayoutToComponent(uid, layout);
2257
2360
  case "modal":
2258
2361
  return modalLayoutToComponent(uid, layout, mapperProps, schemaComponents);
2259
2362
  case "paragraph":
@@ -2270,6 +2373,8 @@ var mapLayoutToComponent = (uid, layout, mapperProps, schemaComponents) => {
2270
2373
  return statusListLayoutToComponent(uid, layout, mapperProps);
2271
2374
  case "tabs":
2272
2375
  return tabsLayoutToComponent(uid, layout, mapperProps, schemaComponents);
2376
+ case "upsell":
2377
+ return upsellLayoutToComponent(uid, layout, mapperProps);
2273
2378
  default:
2274
2379
  throw new Error(`Invalid layout type in ${JSON.stringify(layout)}`);
2275
2380
  }
@@ -6001,55 +6106,6 @@ var createRequestFromAction = (action, model) => {
6001
6106
  });
6002
6107
  };
6003
6108
 
6004
- // src/domain/features/prefetch/request-cache.ts
6005
- var makeRequestCacheWithParent = (parent) => {
6006
- const map = /* @__PURE__ */ new Map();
6007
- const cache = {
6008
- get: (requestParams) => {
6009
- var _a;
6010
- const key = makeRequestCacheKey(requestParams);
6011
- const promise = (_a = map.get(key)) != null ? _a : parent == null ? void 0 : parent.get(requestParams);
6012
- map.delete(key);
6013
- return promise;
6014
- },
6015
- set: (requestParams, responsePromise) => {
6016
- return map.set(makeRequestCacheKey(requestParams), responsePromise);
6017
- }
6018
- };
6019
- return cache;
6020
- };
6021
- var makeRequestCache = (initialValues = []) => {
6022
- const cache = makeRequestCacheWithParent(void 0);
6023
- initialValues.forEach(([requestParams, responsePromise]) => {
6024
- cache.set(requestParams, responsePromise);
6025
- });
6026
- return cache;
6027
- };
6028
- var normaliseRequestCache = (cache) => {
6029
- if (cache === void 0) {
6030
- return makeRequestCache();
6031
- }
6032
- if (isRequestCacheInstance(cache)) {
6033
- return cache;
6034
- }
6035
- return makeRequestCache(cache);
6036
- };
6037
- var isRequestCacheInstance = (cache) => {
6038
- return !cache || !Array.isArray(cache);
6039
- };
6040
- var makeRequestCacheKey = (requestParams) => {
6041
- var _a, _b;
6042
- const [input, init] = requestParams;
6043
- const url = typeof input === "string" || input instanceof URL ? input.toString() : input.url;
6044
- const key = JSON.stringify({
6045
- url,
6046
- method: (_a = init == null ? void 0 : init.method) != null ? _a : "GET",
6047
- headers: (init == null ? void 0 : init.headers) ? Array.from(new Headers(init.headers).entries()) : [],
6048
- body: (_b = init == null ? void 0 : init.body) != null ? _b : null
6049
- });
6050
- return key;
6051
- };
6052
-
6053
6109
  // src/domain/features/prefetch/getStepPrefetch.ts
6054
6110
  var getStepPrefetch = (httpClient, flowRequestCache, submissionBehaviors) => {
6055
6111
  const requestCache = makeRequestCacheWithParent(flowRequestCache);
@@ -6820,7 +6876,11 @@ var createFlowController = (props) => {
6820
6876
  initState = "created";
6821
6877
  trackEvent("Initiated");
6822
6878
  rootComponent.setLoadingState("submitting");
6823
- void onAction(__spreadValues({ method: "GET" }, initialAction), null);
6879
+ void onAction(__spreadValues({ method: "GET" }, initialAction), null).then(() => {
6880
+ initState = "started";
6881
+ rootComponent.start();
6882
+ });
6883
+ return;
6824
6884
  }
6825
6885
  if (initState === "created") {
6826
6886
  initState = "started";
@@ -7467,6 +7527,9 @@ var markdownComponentToProps = (control, rendererMapperProps) => __spreadValues(
7467
7527
  "size"
7468
7528
  )), rendererMapperProps);
7469
7529
 
7530
+ // src/renderers/mappers/mediaComponentToProps.ts
7531
+ var mediaComponentToProps = (component, rendererMapperProps) => __spreadValues(__spreadValues({}, pick(component, "uid", "analyticsId", "type", "align", "control", "margin", "media", "size", "tags")), rendererMapperProps);
7532
+
7470
7533
  // src/renderers/mappers/modalComponentToProps.ts
7471
7534
  var modalComponentToProps = (component, rendererMapperProps) => {
7472
7535
  const { uid, analyticsId, open, tags, title, close } = component;
@@ -7812,7 +7875,19 @@ var rootComponentToProps = (rootComponent, rendererMapperProps) => {
7812
7875
 
7813
7876
  // src/renderers/mappers/searchComponentToProps.ts
7814
7877
  var searchComponentToProps = (component, rendererMapperProps) => {
7815
- const { uid, control, emptyMessage, error, isLoading, margin, query, results, title, tags } = component;
7878
+ const {
7879
+ uid,
7880
+ control,
7881
+ emptyMessage,
7882
+ error,
7883
+ hint,
7884
+ isLoading,
7885
+ margin,
7886
+ query,
7887
+ results,
7888
+ title,
7889
+ tags
7890
+ } = component;
7816
7891
  const onChange = component.onChange.bind(component);
7817
7892
  const onSelect = component.onSelect.bind(component);
7818
7893
  const state = getSearchState({
@@ -7829,6 +7904,7 @@ var searchComponentToProps = (component, rendererMapperProps) => {
7829
7904
  type: "search",
7830
7905
  id: uid,
7831
7906
  control,
7907
+ hint,
7832
7908
  isLoading,
7833
7909
  margin,
7834
7910
  query,
@@ -7973,6 +8049,23 @@ var uploadInputComponentToProps = (component, rendererMapperProps) => {
7973
8049
  });
7974
8050
  };
7975
8051
 
8052
+ // src/renderers/mappers/upsellComponentToProps.ts
8053
+ var upsellComponentToProps = (component, rendererMapperProps) => __spreadValues(__spreadProps(__spreadValues({}, pick(
8054
+ component,
8055
+ "uid",
8056
+ "analyticsId",
8057
+ "type",
8058
+ "callToAction",
8059
+ "context",
8060
+ "control",
8061
+ "margin",
8062
+ "media",
8063
+ "tags",
8064
+ "text"
8065
+ )), {
8066
+ onDismiss: component.onDismiss ? component.onDismiss.bind(component) : void 0
8067
+ }), rendererMapperProps);
8068
+
7976
8069
  // src/renderers/mappers/subflowComponentToRendererProps.ts
7977
8070
  var subflowComponentToRendererProps = (component, rendererMapperProps) => {
7978
8071
  return __spreadValues(__spreadProps(__spreadValues({
@@ -8054,6 +8147,8 @@ var getComponentProps = (component, rendererMapperProps) => {
8054
8147
  return loadingIndicatorComponentToProps(component, rendererMapperProps);
8055
8148
  case "markdown":
8056
8149
  return markdownComponentToProps(component, rendererMapperProps);
8150
+ case "media":
8151
+ return mediaComponentToProps(component, rendererMapperProps);
8057
8152
  case "modal-layout":
8058
8153
  return modalLayoutComponentToProps(component, rendererMapperProps);
8059
8154
  case "modal":
@@ -8094,6 +8189,8 @@ var getComponentProps = (component, rendererMapperProps) => {
8094
8189
  return tupleComponentToProps(component, rendererMapperProps);
8095
8190
  case "upload":
8096
8191
  return uploadInputComponentToProps(component, rendererMapperProps);
8192
+ case "upsell":
8193
+ return upsellComponentToProps(component, rendererMapperProps);
8097
8194
  case "persist-async":
8098
8195
  return persistAsyncComponentToProps(component, rendererMapperProps);
8099
8196
  case "step":
@@ -0,0 +1,10 @@
1
+ import type { Size } from '@wise/dynamic-flow-types/spec';
2
+ import type { Align, BaseLayoutComponent, Media } from '../types';
3
+ export type MediaComponent = BaseLayoutComponent & {
4
+ type: 'media';
5
+ kind: 'layout';
6
+ align: Align;
7
+ media: Media;
8
+ size: Size;
9
+ };
10
+ export declare const createMediaComponent: (props: Pick<MediaComponent, "uid" | "align" | "media" | "control" | "margin" | "size" | "analyticsId" | "tags">) => MediaComponent;
@@ -0,0 +1,12 @@
1
+ import type { BaseLayoutComponent, CallToAction, Context, Media, OnComponentUpdate } from '../types';
2
+ export type UpsellComponent = BaseLayoutComponent & {
3
+ type: 'upsell';
4
+ kind: 'layout';
5
+ text: string;
6
+ callToAction: CallToAction;
7
+ media?: Media;
8
+ visible: boolean;
9
+ onDismiss: (() => void) | undefined;
10
+ context: Context;
11
+ };
12
+ export declare const createUpsellComponent: (upsellProps: Pick<UpsellComponent, "uid" | "analyticsId" | "callToAction" | "context" | "control" | "margin" | "media" | "tags" | "text" | "onDismiss">, onComponentUpdate: OnComponentUpdate) => UpsellComponent;
@@ -15,6 +15,7 @@ export type SearchComponent = BaseLayoutComponent & {
15
15
  type: 'search';
16
16
  kind: 'layout';
17
17
  emptyMessage: string;
18
+ hint?: string;
18
19
  isLoading: boolean;
19
20
  query: string;
20
21
  title: string;
@@ -23,4 +24,4 @@ export type SearchComponent = BaseLayoutComponent & {
23
24
  onChange: (query: string) => void;
24
25
  onSelect: (result: SearchResult) => void;
25
26
  };
26
- export declare const createSearchComponent: (searchProps: Pick<SearchComponent, "uid" | "analyticsId" | "control" | "emptyMessage" | "margin" | "tags" | "title">, performSearch: PerformSearch, onBehavior: OnBehavior, onComponentUpdate: OnComponentUpdate) => SearchComponent;
27
+ export declare const createSearchComponent: (searchProps: Pick<SearchComponent, "uid" | "analyticsId" | "control" | "emptyMessage" | "hint" | "margin" | "tags" | "title">, performSearch: PerformSearch, onBehavior: OnBehavior, onComponentUpdate: OnComponentUpdate) => SearchComponent;
@@ -0,0 +1,2 @@
1
+ import type { MediaLayout } from '@wise/dynamic-flow-types/spec';
2
+ export declare const mediaLayoutToComponent: (uid: string, { analyticsId, align, control, margin, media, size, tags }: MediaLayout) => import("../../components/MediaComponent").MediaComponent;
@@ -1,3 +1,3 @@
1
1
  import type { SearchLayout } from '@wise/dynamic-flow-types/spec';
2
2
  import type { MapperProps } from '../schema/types';
3
- export declare const searchLayoutToComponent: (uid: string, { analyticsId, control, emptyMessage, method, param, title, url, margin, tags }: SearchLayout, mapperProps: MapperProps) => import("../../components/searchComponent/SearchComponent").SearchComponent;
3
+ export declare const searchLayoutToComponent: (uid: string, { analyticsId, control, emptyMessage, hint, method, param, title, url, margin, tags }: SearchLayout, mapperProps: MapperProps) => import("../../components/searchComponent/SearchComponent").SearchComponent;
@@ -0,0 +1,3 @@
1
+ import type { UpsellLayout } from '@wise/dynamic-flow-types/spec';
2
+ import { MapperProps } from '../schema/types';
3
+ export declare const upsellLayoutToComponent: (uid: string, { analyticsId, callToAction, context, control, margin, media, onDismiss, tags, text, }: UpsellLayout, mapperProps: MapperProps) => import("../../components/UpsellComponent").UpsellComponent;
@@ -1,11 +1,13 @@
1
- import { Action, Behavior as SpecBehavior } from '@wise/dynamic-flow-types/spec';
1
+ import { Action, Context, Behavior as SpecBehavior } from '@wise/dynamic-flow-types/spec';
2
2
  import { CallToAction } from '../../types';
3
3
  import { MapperProps } from '../schema/types';
4
4
  type SpecCallToAction = {
5
5
  title?: string;
6
+ context?: Context;
6
7
  accessibilityDescription?: string;
7
8
  action?: Action;
8
9
  behavior?: SpecBehavior;
9
10
  };
10
- export declare const getDomainLayerCallToAction: (callToAction: SpecCallToAction | undefined, mapperProps: MapperProps) => CallToAction | undefined;
11
+ export declare function getDomainLayerCallToAction(cta: SpecCallToAction, mp: MapperProps): CallToAction;
12
+ export declare function getDomainLayerCallToAction(cta: SpecCallToAction | undefined, mapperProps: MapperProps): CallToAction | undefined;
11
13
  export {};
@@ -19,6 +19,7 @@ import type { IntegerInputComponent } from './components/IntegerInputComponent';
19
19
  import type { ListComponent } from './components/ListComponent';
20
20
  import type { LoadingIndicatorComponent } from './components/LoadingIndicatorComponent';
21
21
  import type { MarkdownComponent } from './components/MarkdownComponent';
22
+ import type { MediaComponent } from './components/MediaComponent';
22
23
  import type { ModalComponent } from './components/ModalComponent';
23
24
  import type { ModalLayoutComponent } from './components/ModalLayoutComponent';
24
25
  import type { MoneyInputComponent } from './components/MoneyInputComponent';
@@ -38,12 +39,13 @@ import type { SelectInputComponent } from './components/SelectInputComponent';
38
39
  import type { StatusListComponent } from './components/StatusListComponent';
39
40
  import type { ExternalConfirmationComponent } from './components/step/ExternalConfirmationComponent';
40
41
  import type { StepDomainComponent } from './components/step/StepDomainComponent';
42
+ import type { SubflowDomainComponent } from './components/SubflowDomainComponent';
41
43
  import type { TabsComponent } from './components/TabsComponent';
42
44
  import type { TextInputComponent } from './components/TextInputComponent';
43
45
  import type { TupleComponent } from './components/TupleComponent';
44
46
  import type { UploadInputComponent } from './components/UploadInputComponent';
45
- import type { SubflowDomainComponent } from './components/SubflowDomainComponent';
46
- export type DomainComponent = RootDomainComponent | StepDomainComponent | PersistAsyncComponent | AllOfComponent | BooleanInputComponent | ConstComponent | DateInputComponent | IntegerInputComponent | MultiSelectComponent | MultiUploadInputComponent | NumberInputComponent | ObjectComponent | RepeatableComponent | SelectInputComponent | TextInputComponent | TupleComponent | UploadInputComponent | AlertComponent | BoxComponent | ButtonComponent | ColumnsComponent | ContainerComponent | DecisionComponent | DividerComponent | ExternalConfirmationComponent | FormattedValueComponent | FormComponent | HeadingComponent | ImageComponent | InstructionsComponent | ListComponent | LoadingIndicatorComponent | MarkdownComponent | ModalLayoutComponent | ModalComponent | MoneyInputComponent | ParagraphComponent | ProgressComponent | ReviewComponent | SearchComponent | SectionComponent | StatusListComponent | SubflowDomainComponent | TabsComponent;
47
+ import type { UpsellComponent } from './components/UpsellComponent';
48
+ export type DomainComponent = RootDomainComponent | StepDomainComponent | PersistAsyncComponent | AllOfComponent | BooleanInputComponent | ConstComponent | DateInputComponent | IntegerInputComponent | MultiSelectComponent | MultiUploadInputComponent | NumberInputComponent | ObjectComponent | RepeatableComponent | SelectInputComponent | TextInputComponent | TupleComponent | UploadInputComponent | AlertComponent | BoxComponent | ButtonComponent | ColumnsComponent | ContainerComponent | DecisionComponent | DividerComponent | ExternalConfirmationComponent | FormattedValueComponent | FormComponent | HeadingComponent | ImageComponent | InstructionsComponent | ListComponent | LoadingIndicatorComponent | MarkdownComponent | MediaComponent | ModalLayoutComponent | ModalComponent | MoneyInputComponent | ParagraphComponent | ProgressComponent | ReviewComponent | SearchComponent | SectionComponent | StatusListComponent | SubflowDomainComponent | TabsComponent | UpsellComponent;
47
49
  export type SchemaComponent = DomainComponent & {
48
50
  kind: 'input';
49
51
  };
@@ -56,18 +58,6 @@ export interface LocalValueObject extends Record<string, LocalValuePrimitive | L
56
58
  }
57
59
  export interface LocalValueArray extends Array<LocalValuePrimitive | LocalValueObject | LocalValueArray> {
58
60
  }
59
- export type CallToAction = {
60
- type: 'action' | 'modal' | 'dismiss' | 'copy';
61
- title: string;
62
- accessibilityDescription?: string;
63
- onClick: () => void;
64
- } | {
65
- type: 'link';
66
- title: string;
67
- accessibilityDescription?: string;
68
- href: string;
69
- onClick: () => void;
70
- };
71
61
  export type Behavior = (ActionBehavior | CopyBehavior | DismissBehavior | LinkBehavior | ModalBehavior | NonMergingActionBehaviour | NullBehavior | RefreshBehavior | BackBehaviour | SubflowBehavior) & {
72
62
  analytics?: Record<string, unknown>;
73
63
  };
@@ -98,6 +88,14 @@ export type SubflowBehavior = {
98
88
  onCompletion?: Behavior;
99
89
  onError?: Behavior;
100
90
  };
91
+ export type CallToAction = {
92
+ type: Behavior['type'];
93
+ title: string;
94
+ context?: Context;
95
+ accessibilityDescription?: string;
96
+ href?: string;
97
+ onClick: () => void;
98
+ };
101
99
  export type BaseComponent = {
102
100
  kind: 'step' | 'input' | 'layout';
103
101
  type: string;
@@ -0,0 +1,4 @@
1
+ import type { MediaRendererProps } from '@wise/dynamic-flow-types/renderers';
2
+ import type { MediaComponent } from '../../domain/components/MediaComponent';
3
+ import { RendererMapperProps } from './componentToRendererProps';
4
+ export declare const mediaComponentToProps: (component: MediaComponent, rendererMapperProps: RendererMapperProps) => MediaRendererProps;
@@ -0,0 +1,4 @@
1
+ import type { HiddenRendererProps, UpsellRendererProps } from '@wise/dynamic-flow-types/renderers';
2
+ import type { UpsellComponent } from '../../domain/components/UpsellComponent';
3
+ import { RendererMapperProps } from './componentToRendererProps';
4
+ export declare const upsellComponentToProps: (component: UpsellComponent, rendererMapperProps: RendererMapperProps) => UpsellRendererProps | HiddenRendererProps;
@@ -1,2 +1,2 @@
1
1
  import { DynamicFlowWiseProps } from './DynamicFlowWise';
2
- export declare const getMergedTestRenderers: (props: DynamicFlowWiseProps) => (import("@wise/dynamic-flow-types/renderers").Renderer<import("@wise/dynamic-flow-types/renderers").CoreContainerRendererProps> | import("@wise/dynamic-flow-types/renderers").Renderer<import("@wise/dynamic-flow-types/renderers").RootRendererProps> | import("@wise/dynamic-flow-types/renderers").Renderer<import("@wise/dynamic-flow-types/renderers").StepRendererProps> | import("@wise/dynamic-flow-types/renderers").Renderer<import("@wise/dynamic-flow-types/renderers").AlertRendererProps> | import("@wise/dynamic-flow-types/renderers").Renderer<import("@wise/dynamic-flow-types/renderers").BoxRendererProps> | import("@wise/dynamic-flow-types/renderers").Renderer<import("@wise/dynamic-flow-types/renderers").ColumnsRendererProps> | import("@wise/dynamic-flow-types/renderers").Renderer<import("@wise/dynamic-flow-types/renderers").DecisionRendererProps> | import("@wise/dynamic-flow-types/renderers").Renderer<import("@wise/dynamic-flow-types/renderers").DividerRendererProps> | import("@wise/dynamic-flow-types/renderers").Renderer<import("@wise/dynamic-flow-types/renderers").ExternalConfirmationRendererProps> | import("@wise/dynamic-flow-types/renderers").Renderer<import("@wise/dynamic-flow-types/renderers").FormattedValueRendererProps> | import("@wise/dynamic-flow-types/renderers").Renderer<import("@wise/dynamic-flow-types/renderers").FormRendererProps> | import("@wise/dynamic-flow-types/renderers").Renderer<import("@wise/dynamic-flow-types/renderers").HeadingRendererProps> | import("@wise/dynamic-flow-types/renderers").Renderer<import("@wise/dynamic-flow-types/renderers").InstructionsRendererProps> | import("@wise/dynamic-flow-types/renderers").Renderer<import("@wise/dynamic-flow-types/renderers").ListRendererProps> | import("@wise/dynamic-flow-types/renderers").Renderer<import("@wise/dynamic-flow-types/renderers").LoadingIndicatorRendererProps> | import("@wise/dynamic-flow-types/renderers").Renderer<import("@wise/dynamic-flow-types/renderers").MarkdownRendererProps> | import("@wise/dynamic-flow-types/renderers").Renderer<import("@wise/dynamic-flow-types/renderers").ImageRendererProps> | import("@wise/dynamic-flow-types/renderers").Renderer<import("@wise/dynamic-flow-types/renderers").ModalLayoutRendererProps> | import("@wise/dynamic-flow-types/renderers").Renderer<import("@wise/dynamic-flow-types/renderers").ModalRendererProps> | import("@wise/dynamic-flow-types/renderers").Renderer<import("@wise/dynamic-flow-types/renderers").ParagraphRendererProps> | import("@wise/dynamic-flow-types/renderers").Renderer<import("@wise/dynamic-flow-types/renderers").ProgressRendererProps> | import("@wise/dynamic-flow-types/renderers").Renderer<import("@wise/dynamic-flow-types/renderers").ReviewRendererProps> | import("@wise/dynamic-flow-types/renderers").Renderer<import("@wise/dynamic-flow-types/renderers").SearchRendererProps> | import("@wise/dynamic-flow-types/renderers").Renderer<import("@wise/dynamic-flow-types/renderers").StatusListRendererProps> | import("@wise/dynamic-flow-types/renderers").Renderer<import("@wise/dynamic-flow-types/renderers").CheckboxInputRendererProps> | import("@wise/dynamic-flow-types/renderers").Renderer<import("@wise/dynamic-flow-types/renderers").ButtonRendererProps> | import("@wise/dynamic-flow-types/renderers").Renderer<import("@wise/dynamic-flow-types/renderers").DateInputRendererProps> | import("@wise/dynamic-flow-types/renderers").Renderer<import("@wise/dynamic-flow-types/renderers").HiddenRendererProps> | import("@wise/dynamic-flow-types/renderers").Renderer<import("@wise/dynamic-flow-types/renderers").IntegerInputRendererProps> | import("@wise/dynamic-flow-types/renderers").Renderer<import("@wise/dynamic-flow-types/renderers").MoneyInputRendererProps> | import("@wise/dynamic-flow-types/renderers").Renderer<import("@wise/dynamic-flow-types/renderers").NumberInputRendererProps> | import("@wise/dynamic-flow-types/renderers").Renderer<import("@wise/dynamic-flow-types/renderers").RepeatableRendererProps> | import("@wise/dynamic-flow-types/renderers").Renderer<import("@wise/dynamic-flow-types/renderers").FormSectionRendererProps> | import("@wise/dynamic-flow-types/renderers").Renderer<import("@wise/dynamic-flow-types/renderers").SelectInputRendererProps> | import("@wise/dynamic-flow-types/renderers").Renderer<import("@wise/dynamic-flow-types/renderers").SectionRendererProps> | import("@wise/dynamic-flow-types/renderers").Renderer<import("@wise/dynamic-flow-types/renderers").SubflowRendererProps> | import("@wise/dynamic-flow-types/renderers").Renderer<import("@wise/dynamic-flow-types/renderers").MultiSelectInputRendererProps> | import("@wise/dynamic-flow-types/renderers").Renderer<import("@wise/dynamic-flow-types/renderers").TabsRendererProps> | import("@wise/dynamic-flow-types/renderers").Renderer<import("@wise/dynamic-flow-types/renderers").TextInputRendererProps> | import("@wise/dynamic-flow-types/renderers").Renderer<import("@wise/dynamic-flow-types/renderers").UploadInputRendererProps> | import("@wise/dynamic-flow-types/renderers").Renderer<import("@wise/dynamic-flow-types/renderers").MultiUploadInputRendererProps>)[];
2
+ export declare const getMergedTestRenderers: (props: DynamicFlowWiseProps) => (import("@wise/dynamic-flow-types/renderers").Renderer<import("@wise/dynamic-flow-types/renderers").CoreContainerRendererProps> | import("@wise/dynamic-flow-types/renderers").Renderer<import("@wise/dynamic-flow-types/renderers").RootRendererProps> | import("@wise/dynamic-flow-types/renderers").Renderer<import("@wise/dynamic-flow-types/renderers").StepRendererProps> | import("@wise/dynamic-flow-types/renderers").Renderer<import("@wise/dynamic-flow-types/renderers").AlertRendererProps> | import("@wise/dynamic-flow-types/renderers").Renderer<import("@wise/dynamic-flow-types/renderers").BoxRendererProps> | import("@wise/dynamic-flow-types/renderers").Renderer<import("@wise/dynamic-flow-types/renderers").ColumnsRendererProps> | import("@wise/dynamic-flow-types/renderers").Renderer<import("@wise/dynamic-flow-types/renderers").DecisionRendererProps> | import("@wise/dynamic-flow-types/renderers").Renderer<import("@wise/dynamic-flow-types/renderers").DividerRendererProps> | import("@wise/dynamic-flow-types/renderers").Renderer<import("@wise/dynamic-flow-types/renderers").ExternalConfirmationRendererProps> | import("@wise/dynamic-flow-types/renderers").Renderer<import("@wise/dynamic-flow-types/renderers").FormattedValueRendererProps> | import("@wise/dynamic-flow-types/renderers").Renderer<import("@wise/dynamic-flow-types/renderers").FormRendererProps> | import("@wise/dynamic-flow-types/renderers").Renderer<import("@wise/dynamic-flow-types/renderers").HeadingRendererProps> | import("@wise/dynamic-flow-types/renderers").Renderer<import("@wise/dynamic-flow-types/renderers").InstructionsRendererProps> | import("@wise/dynamic-flow-types/renderers").Renderer<import("@wise/dynamic-flow-types/renderers").ListRendererProps> | import("@wise/dynamic-flow-types/renderers").Renderer<import("@wise/dynamic-flow-types/renderers").LoadingIndicatorRendererProps> | import("@wise/dynamic-flow-types/renderers").Renderer<import("@wise/dynamic-flow-types/renderers").MarkdownRendererProps> | import("@wise/dynamic-flow-types/renderers").Renderer<import("@wise/dynamic-flow-types/renderers").ImageRendererProps> | import("@wise/dynamic-flow-types/renderers").Renderer<import("@wise/dynamic-flow-types/renderers").MediaRendererProps> | import("@wise/dynamic-flow-types/renderers").Renderer<import("@wise/dynamic-flow-types/renderers").ModalLayoutRendererProps> | import("@wise/dynamic-flow-types/renderers").Renderer<import("@wise/dynamic-flow-types/renderers").ModalRendererProps> | import("@wise/dynamic-flow-types/renderers").Renderer<import("@wise/dynamic-flow-types/renderers").ParagraphRendererProps> | import("@wise/dynamic-flow-types/renderers").Renderer<import("@wise/dynamic-flow-types/renderers").ProgressRendererProps> | import("@wise/dynamic-flow-types/renderers").Renderer<import("@wise/dynamic-flow-types/renderers").ReviewRendererProps> | import("@wise/dynamic-flow-types/renderers").Renderer<import("@wise/dynamic-flow-types/renderers").SearchRendererProps> | import("@wise/dynamic-flow-types/renderers").Renderer<import("@wise/dynamic-flow-types/renderers").StatusListRendererProps> | import("@wise/dynamic-flow-types/renderers").Renderer<import("@wise/dynamic-flow-types/renderers").CheckboxInputRendererProps> | import("@wise/dynamic-flow-types/renderers").Renderer<import("@wise/dynamic-flow-types/renderers").ButtonRendererProps> | import("@wise/dynamic-flow-types/renderers").Renderer<import("@wise/dynamic-flow-types/renderers").DateInputRendererProps> | import("@wise/dynamic-flow-types/renderers").Renderer<import("@wise/dynamic-flow-types/renderers").HiddenRendererProps> | import("@wise/dynamic-flow-types/renderers").Renderer<import("@wise/dynamic-flow-types/renderers").IntegerInputRendererProps> | import("@wise/dynamic-flow-types/renderers").Renderer<import("@wise/dynamic-flow-types/renderers").MoneyInputRendererProps> | import("@wise/dynamic-flow-types/renderers").Renderer<import("@wise/dynamic-flow-types/renderers").NumberInputRendererProps> | import("@wise/dynamic-flow-types/renderers").Renderer<import("@wise/dynamic-flow-types/renderers").RepeatableRendererProps> | import("@wise/dynamic-flow-types/renderers").Renderer<import("@wise/dynamic-flow-types/renderers").FormSectionRendererProps> | import("@wise/dynamic-flow-types/renderers").Renderer<import("@wise/dynamic-flow-types/renderers").SelectInputRendererProps> | import("@wise/dynamic-flow-types/renderers").Renderer<import("@wise/dynamic-flow-types/renderers").SectionRendererProps> | import("@wise/dynamic-flow-types/renderers").Renderer<import("@wise/dynamic-flow-types/renderers").SubflowRendererProps> | import("@wise/dynamic-flow-types/renderers").Renderer<import("@wise/dynamic-flow-types/renderers").MultiSelectInputRendererProps> | import("@wise/dynamic-flow-types/renderers").Renderer<import("@wise/dynamic-flow-types/renderers").TabsRendererProps> | import("@wise/dynamic-flow-types/renderers").Renderer<import("@wise/dynamic-flow-types/renderers").TextInputRendererProps> | import("@wise/dynamic-flow-types/renderers").Renderer<import("@wise/dynamic-flow-types/renderers").UploadInputRendererProps> | import("@wise/dynamic-flow-types/renderers").Renderer<import("@wise/dynamic-flow-types/renderers").MultiUploadInputRendererProps> | import("@wise/dynamic-flow-types/renderers").Renderer<import("@wise/dynamic-flow-types/renderers").UpsellRendererProps>)[];
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@wise/dynamic-flow-client",
3
- "version": "5.6.2",
3
+ "version": "5.7.0",
4
4
  "description": "Dynamic Flow web client",
5
5
  "license": "Apache-2.0",
6
6
  "main": "./build/main.js",
@@ -86,7 +86,7 @@
86
86
  "react-intl": "^6 || ^7"
87
87
  },
88
88
  "dependencies": {
89
- "@wise/dynamic-flow-types": "4.7.0"
89
+ "@wise/dynamic-flow-types": "4.8.0"
90
90
  },
91
91
  "scripts": {
92
92
  "dev": "EXCLUDE_VISUAL_TESTS=true pnpm storybook dev -p 3003",