@wise/dynamic-flow-client-internal 4.2.0 → 4.3.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.
@@ -1,33 +1,33 @@
1
1
  {
2
- "df.wise.ArraySchema.addItem": "Save",
3
- "df.wise.ArraySchema.addItemTitle": "Add Item",
4
- "df.wise.ArraySchema.editItem": "Save",
5
- "df.wise.ArraySchema.maxItemsError": "Please add {maxItems} or fewer.",
6
- "df.wise.ArraySchema.minItemsError": "Please add at least {minItems}.",
7
- "df.wise.ArraySchema.removeItem": "Remove",
8
- "df.wise.ControlFeedback.maxLength": "Please enter {maxLength} or fewer characters.",
9
- "df.wise.ControlFeedback.maximum": "Please enter a number that's {maximum} or less.",
10
- "df.wise.ControlFeedback.maximumDate": "Please enter a date that's on or before {maximum}.",
11
- "df.wise.ControlFeedback.minLength": "Please enter at least {minLength} characters.",
12
- "df.wise.ControlFeedback.minimum": "Please enter a number that's {minimum} or more.",
13
- "df.wise.ControlFeedback.minimumDate": "Please enter a date that's on or after {minimum}.",
14
- "df.wise.ControlFeedback.pattern": "Please enter this in the correct format.",
15
- "df.wise.ControlFeedback.patternDate": "Please enter a date in the corrrect format.",
16
- "df.wise.ControlFeedback.required": "Please fill out this field.",
17
- "df.wise.ControlFeedback.type": "Incorrect type",
18
- "df.wise.DynamicParagraph.copied": "Copied to clipboard",
2
+ "df.wise.ArraySchema.addItem": "Opslaan",
3
+ "df.wise.ArraySchema.addItemTitle": "Item toevoegen",
4
+ "df.wise.ArraySchema.editItem": "Opslaan",
5
+ "df.wise.ArraySchema.maxItemsError": "Voeg {maxItems} of minder toe.",
6
+ "df.wise.ArraySchema.minItemsError": "Voeg minimaal {minItems} toe.",
7
+ "df.wise.ArraySchema.removeItem": "Verwijderen",
8
+ "df.wise.ControlFeedback.maxLength": "Voer {maxLength} of minder tekens in.",
9
+ "df.wise.ControlFeedback.maximum": "Voer een getal in dat {maximum} of lager is.",
10
+ "df.wise.ControlFeedback.maximumDate": "Voer een datum in die op of voor {maximum} is.",
11
+ "df.wise.ControlFeedback.minLength": "Voer minimaal {minLength} tekens in.",
12
+ "df.wise.ControlFeedback.minimum": "Voer een getal in dat {minimum} of hoger is.",
13
+ "df.wise.ControlFeedback.minimumDate": "Voer een datum in die op of na {minimum} is.",
14
+ "df.wise.ControlFeedback.pattern": "Voer dit in de juiste indeling in.",
15
+ "df.wise.ControlFeedback.patternDate": "Voer een datum in de juiste indeling in.",
16
+ "df.wise.ControlFeedback.required": "Vul dit veld in.",
17
+ "df.wise.ControlFeedback.type": "Onjuist type",
18
+ "df.wise.DynamicParagraph.copied": "Naar klembord gekopiëerd",
19
19
  "df.wise.DynamicParagraph.copy": "Kopiëren",
20
- "df.wise.ErrorBoundary.errorAlert": "Something went wrong.",
21
- "df.wise.ErrorBoundary.retry": "Retry",
22
- "df.wise.ExternalConfirmation.cancel": "Cancel",
23
- "df.wise.ExternalConfirmation.description": "Please confirm you want to open **{origin}** in a new browser tab.",
24
- "df.wise.ExternalConfirmation.open": "Open in new tab",
25
- "df.wise.ExternalConfirmation.title": "Please confirm",
26
- "df.wise.Help.ariaLabel": "Click here for more info.",
27
- "df.wise.MultiSelect.summary": "{first} and {count} more",
28
- "df.wise.MultipleFileUploadSchema.maxFileSizeError": "Sorry, that file is too big. Please upload a smaller file.",
29
- "df.wise.MultipleFileUploadSchema.maxItemsError": "Please upload {maxItems} or fewer files.",
30
- "df.wise.MultipleFileUploadSchema.minItemsError": "Please upload at least {minItems} file(s).",
20
+ "df.wise.ErrorBoundary.errorAlert": "Er is iets misgegaan.",
21
+ "df.wise.ErrorBoundary.retry": "Opnieuw proberen",
22
+ "df.wise.ExternalConfirmation.cancel": "Annuleren",
23
+ "df.wise.ExternalConfirmation.description": "Bevestig dat je **{origin}** in een nieuw browsertabblad wilt openen.",
24
+ "df.wise.ExternalConfirmation.open": "In nieuw tabblad openen",
25
+ "df.wise.ExternalConfirmation.title": "Bevestig",
26
+ "df.wise.Help.ariaLabel": "Klik hier voor meer informatie.",
27
+ "df.wise.MultiSelect.summary": "{first} en nog {count}",
28
+ "df.wise.MultipleFileUploadSchema.maxFileSizeError": "Het bestand is te groot. Upload een kleiner bestand.",
29
+ "df.wise.MultipleFileUploadSchema.maxItemsError": "Upload {maxItems} of minder bestanden.",
30
+ "df.wise.MultipleFileUploadSchema.minItemsError": "Upload mimimaal {minItems} bestand(en).",
31
31
  "df.wise.PersistAsyncSchema.genericError": "Er ging iets mis, probeer het a. u. b. opnieuw.",
32
- "df.wise.SearchLayout.loading": "Loading..."
32
+ "df.wise.SearchLayout.loading": "Laden..."
33
33
  }
package/build/main.css CHANGED
@@ -265,6 +265,9 @@ button.df-back-btn {
265
265
  flex-direction: row;
266
266
  }
267
267
  }
268
+ .df-image .df-illustration {
269
+ padding: 0;
270
+ }
268
271
  .df-back-btn .tw-avatar__content {
269
272
  cursor: pointer;
270
273
  background-color: var(--color-background-neutral);
@@ -275,6 +278,7 @@ button.df-back-btn {
275
278
  .df-back-btn:active .tw-avatar__content {
276
279
  background-color: var(--color-background-neutral-active);
277
280
  }
278
- .df-image .df-illustration {
279
- padding: 0;
281
+ .splash-screen {
282
+ display: flex;
283
+ flex-direction: column;
280
284
  }
package/build/main.js CHANGED
@@ -52743,7 +52743,7 @@ var translations = languages.reduce(
52743
52743
  var i18n_default = translations;
52744
52744
 
52745
52745
  // src/dynamicFlow/DynamicFlow.tsx
52746
- var import_react28 = require("react");
52746
+ var import_react33 = require("react");
52747
52747
  var import_react_intl16 = require("react-intl");
52748
52748
  var import_dynamic_flow_client2 = require("@wise/dynamic-flow-client");
52749
52749
 
@@ -55138,6 +55138,126 @@ var getListAction = (callToAction) => {
55138
55138
  };
55139
55139
  var ListRenderer_default = ListRenderer;
55140
55140
 
55141
+ // ../renderers/src/step/SplashStepRenderer.tsx
55142
+ var import_jsx_runtime72 = require("react/jsx-runtime");
55143
+ var SplashStepRenderer = {
55144
+ canRenderType: "step",
55145
+ canRender: ({ control }) => control === "splash",
55146
+ render: SplashStepRendererComponent
55147
+ };
55148
+ function SplashStepRendererComponent(props) {
55149
+ const { back, children, external } = props;
55150
+ const { requiresUserConfirmation, dismissConfirmation } = useExternal(external == null ? void 0 : external.url);
55151
+ if ((external == null ? void 0 : external.url) && requiresUserConfirmation) {
55152
+ return /* @__PURE__ */ (0, import_jsx_runtime72.jsx)(ExternalConfirmationDialog, { external, onClose: dismissConfirmation });
55153
+ }
55154
+ return /* @__PURE__ */ (0, import_jsx_runtime72.jsxs)("div", { className: "splash-screen m-t-5", children: [
55155
+ back ? /* @__PURE__ */ (0, import_jsx_runtime72.jsx)(BackButton_default, __spreadValues({}, back)) : null,
55156
+ children
55157
+ ] });
55158
+ }
55159
+
55160
+ // ../../node_modules/.pnpm/@wise+components-theming@1.6.1_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@wise/components-theming/dist/const.mjs
55161
+ var baseThemes = ["light", "personal"];
55162
+ var extraThemes = ["forest-green", "bright-green"];
55163
+ var screenModes = ["light", "dark"];
55164
+ var modernThemes = [baseThemes[1], ...extraThemes];
55165
+ var DEFAULT_BASE_THEME = "light";
55166
+ var DEFAULT_SCREEN_MODE = "light";
55167
+
55168
+ // ../../node_modules/.pnpm/@wise+components-theming@1.6.1_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@wise/components-theming/dist/helpers.mjs
55169
+ var isThemeModern = (theme) => modernThemes.includes(theme);
55170
+ var isExtraTheme = (theme) => extraThemes.includes(theme);
55171
+ var isForestGreenTheme = (theme) => theme === extraThemes[0];
55172
+ var isScreenModeDark = (theme, screenMode) => isThemeModern(theme) && screenModes[1] === screenMode;
55173
+ var getThemeClassName = (theme, screenMode) => {
55174
+ if (!isThemeModern(theme)) {
55175
+ return `np-theme-${theme || "personal"}`;
55176
+ }
55177
+ let classes = `np-theme-personal`;
55178
+ if (isExtraTheme(theme)) {
55179
+ classes += ` ${classes}--${theme}`;
55180
+ } else if (screenModes[1] === screenMode) {
55181
+ classes += ` ${classes}--${screenMode}`;
55182
+ }
55183
+ return classes;
55184
+ };
55185
+
55186
+ // ../../node_modules/.pnpm/@wise+components-theming@1.6.1_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@wise/components-theming/dist/ThemeProvider.mjs
55187
+ var import_react29 = require("react");
55188
+
55189
+ // ../../node_modules/.pnpm/@wise+components-theming@1.6.1_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@wise/components-theming/dist/useTheme.mjs
55190
+ var import_react28 = require("react");
55191
+ var FALLBACK_VALUES = {
55192
+ theme: DEFAULT_BASE_THEME,
55193
+ screenMode: DEFAULT_SCREEN_MODE
55194
+ };
55195
+ var isNotProduction = () => {
55196
+ try {
55197
+ return ["localhost", "dev-wi.se"].includes(window.location.hostname);
55198
+ } catch (e) {
55199
+ return false;
55200
+ }
55201
+ };
55202
+ var useTheme = () => {
55203
+ const theming = (0, import_react28.useContext)(ThemeContext);
55204
+ if (!theming && isNotProduction()) {
55205
+ console.warn("Call to useTheme outside a ThemeProvider");
55206
+ }
55207
+ const {
55208
+ theme,
55209
+ screenMode: contextScreenMode
55210
+ } = theming != null ? theming : FALLBACK_VALUES;
55211
+ const screenMode = theme === DEFAULT_BASE_THEME ? DEFAULT_SCREEN_MODE : contextScreenMode;
55212
+ return (0, import_react28.useMemo)(() => ({
55213
+ theme,
55214
+ screenMode,
55215
+ isModern: isThemeModern(theme),
55216
+ isForestGreenTheme: isForestGreenTheme(theme),
55217
+ isScreenModeDark: isScreenModeDark(theme, screenMode),
55218
+ className: getThemeClassName(theme, screenMode)
55219
+ }), [theme, screenMode]);
55220
+ };
55221
+
55222
+ // ../../node_modules/.pnpm/@wise+components-theming@1.6.1_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@wise/components-theming/dist/ThemeProvider.mjs
55223
+ var import_jsx_runtime73 = require("react/jsx-runtime");
55224
+ var ThemeContext = /* @__PURE__ */ (0, import_react29.createContext)(void 0);
55225
+
55226
+ // ../renderers/src/utils/useCustomTheme.ts
55227
+ var import_react30 = require("react");
55228
+ var ThemeRequiredEventName = "Theme Required";
55229
+ var useCustomTheme = (theme, trackEvent) => {
55230
+ const previousThemeHookValue = useTheme();
55231
+ const previousTheme = (0, import_react30.useMemo)(() => previousThemeHookValue.theme, []);
55232
+ (0, import_react30.useEffect)(() => {
55233
+ trackEvent(ThemeRequiredEventName, { theme });
55234
+ return theme !== previousTheme ? () => {
55235
+ trackEvent(ThemeRequiredEventName, { theme: previousTheme });
55236
+ } : () => {
55237
+ };
55238
+ }, []);
55239
+ };
55240
+
55241
+ // ../renderers/src/step/SplashCelebrationStepRenderer.tsx
55242
+ var import_jsx_runtime74 = require("react/jsx-runtime");
55243
+ var SplashCelebrationStepRenderer = {
55244
+ canRenderType: "step",
55245
+ canRender: ({ control }) => control === "splash-celebration",
55246
+ render: SplashCelebrationStepRendererComponent
55247
+ };
55248
+ function SplashCelebrationStepRendererComponent(props) {
55249
+ const { back, children, external, trackEvent } = props;
55250
+ useCustomTheme("forest-green", trackEvent);
55251
+ const { requiresUserConfirmation, dismissConfirmation } = useExternal(external == null ? void 0 : external.url);
55252
+ if ((external == null ? void 0 : external.url) && requiresUserConfirmation) {
55253
+ return /* @__PURE__ */ (0, import_jsx_runtime74.jsx)(ExternalConfirmationDialog, { external, onClose: dismissConfirmation });
55254
+ }
55255
+ return /* @__PURE__ */ (0, import_jsx_runtime74.jsxs)("div", { className: "splash-screen m-t-5", children: [
55256
+ back ? /* @__PURE__ */ (0, import_jsx_runtime74.jsx)(BackButton_default, __spreadValues({}, back)) : null,
55257
+ children
55258
+ ] });
55259
+ }
55260
+
55141
55261
  // ../renderers/src/getWiseRenderers.ts
55142
55262
  var getWiseRenderers = () => [
55143
55263
  AlertRenderer_default,
@@ -55170,46 +55290,95 @@ var getWiseRenderers = () => [
55170
55290
  StatusListRenderer_default,
55171
55291
  TextInputRenderer_default,
55172
55292
  UploadInputRenderer,
55293
+ SplashStepRenderer,
55294
+ SplashCelebrationStepRenderer,
55173
55295
  StepRenderer
55174
55296
  ];
55175
55297
 
55298
+ // src/dynamicFlow/filters/useFilteredOnEvent.ts
55299
+ var import_react31 = require("react");
55300
+ var useFilteredOnEvent = (onEvent, onAnalytics, onThemeChange) => (0, import_react31.useMemo)(
55301
+ () => (name, properties) => {
55302
+ onEvent == null ? void 0 : onEvent(name, properties);
55303
+ if (name.includes(ThemeRequiredEventName)) {
55304
+ const { theme } = properties != null ? properties : { theme: "personal" };
55305
+ if (theme && isThemeModern(theme)) {
55306
+ onThemeChange == null ? void 0 : onThemeChange(theme);
55307
+ }
55308
+ } else {
55309
+ onAnalytics == null ? void 0 : onAnalytics(name, properties);
55310
+ }
55311
+ },
55312
+ [onEvent, onAnalytics, onThemeChange]
55313
+ );
55314
+
55315
+ // src/dynamicFlow/filters/useFilteredOnLog.ts
55316
+ var import_react32 = require("react");
55317
+ var useFilteredOnLog = (onLog) => (0, import_react32.useMemo)(() => {
55318
+ return (level, message, extra) => {
55319
+ if (level !== "info") {
55320
+ onLog == null ? void 0 : onLog(level, message, extra);
55321
+ }
55322
+ };
55323
+ }, [onLog]);
55324
+
55176
55325
  // src/dynamicFlow/DynamicFlow.tsx
55177
- var import_jsx_runtime72 = require("react/jsx-runtime");
55326
+ var import_jsx_runtime75 = require("react/jsx-runtime");
55178
55327
  var wiseRenderers = getWiseRenderers();
55179
55328
  function DynamicFlowLegacy(props) {
55180
55329
  const { customFetch = globalThis.fetch } = props;
55181
55330
  const coreProps = __spreadProps(__spreadValues({}, props), { httpClient: customFetch });
55182
- return /* @__PURE__ */ (0, import_jsx_runtime72.jsx)(import_dynamic_flow_client2.DynamicFlow, __spreadValues({}, coreProps));
55331
+ return /* @__PURE__ */ (0, import_jsx_runtime75.jsx)(import_dynamic_flow_client2.DynamicFlow, __spreadValues({}, coreProps));
55183
55332
  }
55184
55333
  function DynamicFlowRevamp(props) {
55185
- const { customFetch = globalThis.fetch, renderers, onLog, onLink = openLinkInNewTab } = props;
55334
+ const {
55335
+ customFetch = globalThis.fetch,
55336
+ renderers,
55337
+ onAnalytics,
55338
+ onEvent,
55339
+ onLog,
55340
+ onLink = openLinkInNewTab,
55341
+ onThemeChange
55342
+ } = props;
55186
55343
  const httpClient = useWiseHttpClient(customFetch);
55187
- const mergedRenderers = (0, import_react28.useMemo)(() => [...renderers != null ? renderers : [], ...wiseRenderers], [renderers]);
55344
+ const mergedRenderers = (0, import_react33.useMemo)(() => [...renderers != null ? renderers : [], ...wiseRenderers], [renderers]);
55188
55345
  const filteredOnLog = useFilteredOnLog(onLog);
55346
+ const filteredOnEvent = useFilteredOnEvent(onEvent, onAnalytics, onThemeChange);
55189
55347
  const coreProps = __spreadProps(__spreadValues({}, props), {
55190
55348
  httpClient,
55191
55349
  renderers: mergedRenderers,
55350
+ onEvent: filteredOnEvent,
55192
55351
  onLink,
55193
55352
  onLog: filteredOnLog
55194
55353
  });
55195
- return /* @__PURE__ */ (0, import_jsx_runtime72.jsx)(import_dynamic_flow_client2.DynamicFlowCoreRevamp, __spreadValues({}, coreProps));
55354
+ return /* @__PURE__ */ (0, import_jsx_runtime75.jsx)(import_dynamic_flow_client2.DynamicFlowCoreRevamp, __spreadValues({}, coreProps));
55196
55355
  }
55197
- var DynamicForm = (0, import_react28.forwardRef)(function DynamicForm2(props, ref) {
55198
- const { customFetch = globalThis.fetch, renderers, onLog, onLink = openLinkInNewTab } = props;
55356
+ var DynamicForm = (0, import_react33.forwardRef)(function DynamicForm2(props, ref) {
55357
+ const {
55358
+ customFetch = globalThis.fetch,
55359
+ renderers,
55360
+ onAnalytics,
55361
+ onEvent,
55362
+ onLog,
55363
+ onLink = openLinkInNewTab,
55364
+ onThemeChange
55365
+ } = props;
55199
55366
  const httpClient = useWiseHttpClient(customFetch);
55200
- const mergedRenderers = (0, import_react28.useMemo)(() => [...renderers != null ? renderers : [], ...wiseRenderers], [renderers]);
55367
+ const mergedRenderers = (0, import_react33.useMemo)(() => [...renderers != null ? renderers : [], ...wiseRenderers], [renderers]);
55368
+ const filteredOnEvent = useFilteredOnEvent(onEvent, onAnalytics, onThemeChange);
55201
55369
  const filteredOnLog = useFilteredOnLog(onLog);
55202
55370
  const coreProps = __spreadProps(__spreadValues({}, props), {
55203
55371
  httpClient,
55204
55372
  renderers: mergedRenderers,
55373
+ onEvent: filteredOnEvent,
55205
55374
  onLink,
55206
55375
  onLog: filteredOnLog
55207
55376
  });
55208
- return /* @__PURE__ */ (0, import_jsx_runtime72.jsx)(import_dynamic_flow_client2.DynamicFormCore, __spreadProps(__spreadValues({}, coreProps), { ref }));
55377
+ return /* @__PURE__ */ (0, import_jsx_runtime75.jsx)(import_dynamic_flow_client2.DynamicFormCore, __spreadProps(__spreadValues({}, coreProps), { ref }));
55209
55378
  });
55210
55379
  var useWiseHttpClient = (httpClient) => {
55211
55380
  const { locale } = (0, import_react_intl16.useIntl)();
55212
- return (0, import_react28.useCallback)(
55381
+ return (0, import_react33.useCallback)(
55213
55382
  async (input, init = {}) => {
55214
55383
  const headers = new Headers(init.headers);
55215
55384
  headers.set("accept-language", locale);
@@ -55227,13 +55396,6 @@ var openLinkInNewTab = (url) => {
55227
55396
  return false;
55228
55397
  }
55229
55398
  };
55230
- var useFilteredOnLog = (onLog) => (0, import_react28.useMemo)(() => {
55231
- return (level, message, extra) => {
55232
- if (level !== "info") {
55233
- onLog == null ? void 0 : onLog(level, message, extra);
55234
- }
55235
- };
55236
- }, [onLog]);
55237
55399
  /*! Bundled license information:
55238
55400
 
55239
55401
  classnames/index.js:
package/build/main.mjs CHANGED
@@ -52733,7 +52733,7 @@ var translations = languages.reduce(
52733
52733
  var i18n_default = translations;
52734
52734
 
52735
52735
  // src/dynamicFlow/DynamicFlow.tsx
52736
- import { forwardRef as forwardRef5, useCallback as useCallback2, useMemo as useMemo7 } from "react";
52736
+ import { forwardRef as forwardRef5, useCallback as useCallback2, useMemo as useMemo12 } from "react";
52737
52737
  import { useIntl as useIntl9 } from "react-intl";
52738
52738
  import {
52739
52739
  DynamicFlow as DynamicFlowCoreLegacy,
@@ -55138,6 +55138,126 @@ var getListAction = (callToAction) => {
55138
55138
  };
55139
55139
  var ListRenderer_default = ListRenderer;
55140
55140
 
55141
+ // ../renderers/src/step/SplashStepRenderer.tsx
55142
+ import { jsx as jsx71, jsxs as jsxs36 } from "react/jsx-runtime";
55143
+ var SplashStepRenderer = {
55144
+ canRenderType: "step",
55145
+ canRender: ({ control }) => control === "splash",
55146
+ render: SplashStepRendererComponent
55147
+ };
55148
+ function SplashStepRendererComponent(props) {
55149
+ const { back, children, external } = props;
55150
+ const { requiresUserConfirmation, dismissConfirmation } = useExternal(external == null ? void 0 : external.url);
55151
+ if ((external == null ? void 0 : external.url) && requiresUserConfirmation) {
55152
+ return /* @__PURE__ */ jsx71(ExternalConfirmationDialog, { external, onClose: dismissConfirmation });
55153
+ }
55154
+ return /* @__PURE__ */ jsxs36("div", { className: "splash-screen m-t-5", children: [
55155
+ back ? /* @__PURE__ */ jsx71(BackButton_default, __spreadValues({}, back)) : null,
55156
+ children
55157
+ ] });
55158
+ }
55159
+
55160
+ // ../../node_modules/.pnpm/@wise+components-theming@1.6.1_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@wise/components-theming/dist/const.mjs
55161
+ var baseThemes = ["light", "personal"];
55162
+ var extraThemes = ["forest-green", "bright-green"];
55163
+ var screenModes = ["light", "dark"];
55164
+ var modernThemes = [baseThemes[1], ...extraThemes];
55165
+ var DEFAULT_BASE_THEME = "light";
55166
+ var DEFAULT_SCREEN_MODE = "light";
55167
+
55168
+ // ../../node_modules/.pnpm/@wise+components-theming@1.6.1_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@wise/components-theming/dist/helpers.mjs
55169
+ var isThemeModern = (theme) => modernThemes.includes(theme);
55170
+ var isExtraTheme = (theme) => extraThemes.includes(theme);
55171
+ var isForestGreenTheme = (theme) => theme === extraThemes[0];
55172
+ var isScreenModeDark = (theme, screenMode) => isThemeModern(theme) && screenModes[1] === screenMode;
55173
+ var getThemeClassName = (theme, screenMode) => {
55174
+ if (!isThemeModern(theme)) {
55175
+ return `np-theme-${theme || "personal"}`;
55176
+ }
55177
+ let classes = `np-theme-personal`;
55178
+ if (isExtraTheme(theme)) {
55179
+ classes += ` ${classes}--${theme}`;
55180
+ } else if (screenModes[1] === screenMode) {
55181
+ classes += ` ${classes}--${screenMode}`;
55182
+ }
55183
+ return classes;
55184
+ };
55185
+
55186
+ // ../../node_modules/.pnpm/@wise+components-theming@1.6.1_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@wise/components-theming/dist/ThemeProvider.mjs
55187
+ import { createContext as createContext3, useContext as useContext5, useEffect as useEffect13, useMemo as useMemo8 } from "react";
55188
+
55189
+ // ../../node_modules/.pnpm/@wise+components-theming@1.6.1_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@wise/components-theming/dist/useTheme.mjs
55190
+ import { useContext as useContext4, useMemo as useMemo7 } from "react";
55191
+ var FALLBACK_VALUES = {
55192
+ theme: DEFAULT_BASE_THEME,
55193
+ screenMode: DEFAULT_SCREEN_MODE
55194
+ };
55195
+ var isNotProduction = () => {
55196
+ try {
55197
+ return ["localhost", "dev-wi.se"].includes(window.location.hostname);
55198
+ } catch (e) {
55199
+ return false;
55200
+ }
55201
+ };
55202
+ var useTheme = () => {
55203
+ const theming = useContext4(ThemeContext);
55204
+ if (!theming && isNotProduction()) {
55205
+ console.warn("Call to useTheme outside a ThemeProvider");
55206
+ }
55207
+ const {
55208
+ theme,
55209
+ screenMode: contextScreenMode
55210
+ } = theming != null ? theming : FALLBACK_VALUES;
55211
+ const screenMode = theme === DEFAULT_BASE_THEME ? DEFAULT_SCREEN_MODE : contextScreenMode;
55212
+ return useMemo7(() => ({
55213
+ theme,
55214
+ screenMode,
55215
+ isModern: isThemeModern(theme),
55216
+ isForestGreenTheme: isForestGreenTheme(theme),
55217
+ isScreenModeDark: isScreenModeDark(theme, screenMode),
55218
+ className: getThemeClassName(theme, screenMode)
55219
+ }), [theme, screenMode]);
55220
+ };
55221
+
55222
+ // ../../node_modules/.pnpm/@wise+components-theming@1.6.1_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@wise/components-theming/dist/ThemeProvider.mjs
55223
+ import { jsx as jsx72 } from "react/jsx-runtime";
55224
+ var ThemeContext = /* @__PURE__ */ createContext3(void 0);
55225
+
55226
+ // ../renderers/src/utils/useCustomTheme.ts
55227
+ import { useEffect as useEffect14, useMemo as useMemo9 } from "react";
55228
+ var ThemeRequiredEventName = "Theme Required";
55229
+ var useCustomTheme = (theme, trackEvent) => {
55230
+ const previousThemeHookValue = useTheme();
55231
+ const previousTheme = useMemo9(() => previousThemeHookValue.theme, []);
55232
+ useEffect14(() => {
55233
+ trackEvent(ThemeRequiredEventName, { theme });
55234
+ return theme !== previousTheme ? () => {
55235
+ trackEvent(ThemeRequiredEventName, { theme: previousTheme });
55236
+ } : () => {
55237
+ };
55238
+ }, []);
55239
+ };
55240
+
55241
+ // ../renderers/src/step/SplashCelebrationStepRenderer.tsx
55242
+ import { jsx as jsx73, jsxs as jsxs37 } from "react/jsx-runtime";
55243
+ var SplashCelebrationStepRenderer = {
55244
+ canRenderType: "step",
55245
+ canRender: ({ control }) => control === "splash-celebration",
55246
+ render: SplashCelebrationStepRendererComponent
55247
+ };
55248
+ function SplashCelebrationStepRendererComponent(props) {
55249
+ const { back, children, external, trackEvent } = props;
55250
+ useCustomTheme("forest-green", trackEvent);
55251
+ const { requiresUserConfirmation, dismissConfirmation } = useExternal(external == null ? void 0 : external.url);
55252
+ if ((external == null ? void 0 : external.url) && requiresUserConfirmation) {
55253
+ return /* @__PURE__ */ jsx73(ExternalConfirmationDialog, { external, onClose: dismissConfirmation });
55254
+ }
55255
+ return /* @__PURE__ */ jsxs37("div", { className: "splash-screen m-t-5", children: [
55256
+ back ? /* @__PURE__ */ jsx73(BackButton_default, __spreadValues({}, back)) : null,
55257
+ children
55258
+ ] });
55259
+ }
55260
+
55141
55261
  // ../renderers/src/getWiseRenderers.ts
55142
55262
  var getWiseRenderers = () => [
55143
55263
  AlertRenderer_default,
@@ -55170,42 +55290,91 @@ var getWiseRenderers = () => [
55170
55290
  StatusListRenderer_default,
55171
55291
  TextInputRenderer_default,
55172
55292
  UploadInputRenderer,
55293
+ SplashStepRenderer,
55294
+ SplashCelebrationStepRenderer,
55173
55295
  StepRenderer
55174
55296
  ];
55175
55297
 
55298
+ // src/dynamicFlow/filters/useFilteredOnEvent.ts
55299
+ import { useMemo as useMemo10 } from "react";
55300
+ var useFilteredOnEvent = (onEvent, onAnalytics, onThemeChange) => useMemo10(
55301
+ () => (name, properties) => {
55302
+ onEvent == null ? void 0 : onEvent(name, properties);
55303
+ if (name.includes(ThemeRequiredEventName)) {
55304
+ const { theme } = properties != null ? properties : { theme: "personal" };
55305
+ if (theme && isThemeModern(theme)) {
55306
+ onThemeChange == null ? void 0 : onThemeChange(theme);
55307
+ }
55308
+ } else {
55309
+ onAnalytics == null ? void 0 : onAnalytics(name, properties);
55310
+ }
55311
+ },
55312
+ [onEvent, onAnalytics, onThemeChange]
55313
+ );
55314
+
55315
+ // src/dynamicFlow/filters/useFilteredOnLog.ts
55316
+ import { useMemo as useMemo11 } from "react";
55317
+ var useFilteredOnLog = (onLog) => useMemo11(() => {
55318
+ return (level, message, extra) => {
55319
+ if (level !== "info") {
55320
+ onLog == null ? void 0 : onLog(level, message, extra);
55321
+ }
55322
+ };
55323
+ }, [onLog]);
55324
+
55176
55325
  // src/dynamicFlow/DynamicFlow.tsx
55177
- import { jsx as jsx71 } from "react/jsx-runtime";
55326
+ import { jsx as jsx74 } from "react/jsx-runtime";
55178
55327
  var wiseRenderers = getWiseRenderers();
55179
55328
  function DynamicFlowLegacy(props) {
55180
55329
  const { customFetch = globalThis.fetch } = props;
55181
55330
  const coreProps = __spreadProps(__spreadValues({}, props), { httpClient: customFetch });
55182
- return /* @__PURE__ */ jsx71(DynamicFlowCoreLegacy, __spreadValues({}, coreProps));
55331
+ return /* @__PURE__ */ jsx74(DynamicFlowCoreLegacy, __spreadValues({}, coreProps));
55183
55332
  }
55184
55333
  function DynamicFlowRevamp(props) {
55185
- const { customFetch = globalThis.fetch, renderers, onLog, onLink = openLinkInNewTab } = props;
55334
+ const {
55335
+ customFetch = globalThis.fetch,
55336
+ renderers,
55337
+ onAnalytics,
55338
+ onEvent,
55339
+ onLog,
55340
+ onLink = openLinkInNewTab,
55341
+ onThemeChange
55342
+ } = props;
55186
55343
  const httpClient = useWiseHttpClient(customFetch);
55187
- const mergedRenderers = useMemo7(() => [...renderers != null ? renderers : [], ...wiseRenderers], [renderers]);
55344
+ const mergedRenderers = useMemo12(() => [...renderers != null ? renderers : [], ...wiseRenderers], [renderers]);
55188
55345
  const filteredOnLog = useFilteredOnLog(onLog);
55346
+ const filteredOnEvent = useFilteredOnEvent(onEvent, onAnalytics, onThemeChange);
55189
55347
  const coreProps = __spreadProps(__spreadValues({}, props), {
55190
55348
  httpClient,
55191
55349
  renderers: mergedRenderers,
55350
+ onEvent: filteredOnEvent,
55192
55351
  onLink,
55193
55352
  onLog: filteredOnLog
55194
55353
  });
55195
- return /* @__PURE__ */ jsx71(DynamicFlowCoreRevamp, __spreadValues({}, coreProps));
55354
+ return /* @__PURE__ */ jsx74(DynamicFlowCoreRevamp, __spreadValues({}, coreProps));
55196
55355
  }
55197
55356
  var DynamicForm = forwardRef5(function DynamicForm2(props, ref) {
55198
- const { customFetch = globalThis.fetch, renderers, onLog, onLink = openLinkInNewTab } = props;
55357
+ const {
55358
+ customFetch = globalThis.fetch,
55359
+ renderers,
55360
+ onAnalytics,
55361
+ onEvent,
55362
+ onLog,
55363
+ onLink = openLinkInNewTab,
55364
+ onThemeChange
55365
+ } = props;
55199
55366
  const httpClient = useWiseHttpClient(customFetch);
55200
- const mergedRenderers = useMemo7(() => [...renderers != null ? renderers : [], ...wiseRenderers], [renderers]);
55367
+ const mergedRenderers = useMemo12(() => [...renderers != null ? renderers : [], ...wiseRenderers], [renderers]);
55368
+ const filteredOnEvent = useFilteredOnEvent(onEvent, onAnalytics, onThemeChange);
55201
55369
  const filteredOnLog = useFilteredOnLog(onLog);
55202
55370
  const coreProps = __spreadProps(__spreadValues({}, props), {
55203
55371
  httpClient,
55204
55372
  renderers: mergedRenderers,
55373
+ onEvent: filteredOnEvent,
55205
55374
  onLink,
55206
55375
  onLog: filteredOnLog
55207
55376
  });
55208
- return /* @__PURE__ */ jsx71(DynamicFormCore, __spreadProps(__spreadValues({}, coreProps), { ref }));
55377
+ return /* @__PURE__ */ jsx74(DynamicFormCore, __spreadProps(__spreadValues({}, coreProps), { ref }));
55209
55378
  });
55210
55379
  var useWiseHttpClient = (httpClient) => {
55211
55380
  const { locale } = useIntl9();
@@ -55227,13 +55396,6 @@ var openLinkInNewTab = (url) => {
55227
55396
  return false;
55228
55397
  }
55229
55398
  };
55230
- var useFilteredOnLog = (onLog) => useMemo7(() => {
55231
- return (level, message, extra) => {
55232
- if (level !== "info") {
55233
- onLog == null ? void 0 : onLog(level, message, extra);
55234
- }
55235
- };
55236
- }, [onLog]);
55237
55399
  export {
55238
55400
  DynamicFlowLegacy,
55239
55401
  DynamicFlowRevamp,
@@ -1,4 +1,5 @@
1
1
  import type { DynamicFlowProps as DynamicFlowCoreLegacyProps, DynamicFlowRevampProps as DynamicFlowCoreRevampProps, DynamicFlowRevampPropsWithInitialAction, DynamicFlowRevampPropsWithInitialStep, DynamicFormController, DynamicFlowLegacyPropsWithInitialAction, DynamicFlowLegacyPropsWithInitialStep } from '@wise/dynamic-flow-client';
2
+ import { Theming } from '@wise/components-theming';
2
3
  /**
3
4
  * @deprecated Use DynamicFlowRevampProps instead. See https://transferwise.atlassian.net/wiki/x/B0FJwg
4
5
  */
@@ -10,8 +11,11 @@ export type DynamicFlowLegacyProps = (Omit<DynamicFlowLegacyPropsWithInitialActi
10
11
  */
11
12
  export declare function DynamicFlowLegacy(props: DynamicFlowLegacyProps): import("react/jsx-runtime").JSX.Element;
12
13
  type MakeOptional<T, K extends keyof T> = Omit<T, K> & Partial<Pick<T, K>>;
14
+ export type OnThemeChange = (theme: Theming['theme']) => void;
13
15
  export type DynamicFlowRevampProps = (MakeOptional<Omit<DynamicFlowRevampPropsWithInitialAction, 'httpClient'>, 'renderers' | 'onLink'> | MakeOptional<Omit<DynamicFlowRevampPropsWithInitialStep, 'httpClient'>, 'renderers' | 'onLink'>) & {
14
16
  customFetch?: DynamicFlowCoreRevampProps['httpClient'];
17
+ onAnalytics?: DynamicFlowCoreRevampProps['onEvent'];
18
+ onThemeChange?: OnThemeChange;
15
19
  };
16
20
  export declare function DynamicFlowRevamp(props: DynamicFlowRevampProps): import("react/jsx-runtime").JSX.Element;
17
21
  export type DynamicFormProps = Omit<DynamicFlowRevampProps, 'onCompletion'> & {
@@ -0,0 +1,5 @@
1
+ import { OnThemeChange } from '../DynamicFlow';
2
+ import { DynamicFlowRevampProps } from '@wise/dynamic-flow-client';
3
+ type OnEvent = DynamicFlowRevampProps['onEvent'];
4
+ export declare const useFilteredOnEvent: (onEvent: OnEvent, onAnalytics: OnEvent, onThemeChange?: OnThemeChange) => OnEvent;
5
+ export {};
@@ -0,0 +1,4 @@
1
+ import { DynamicFlowRevampProps } from '@wise/dynamic-flow-client';
2
+ type OnLog = DynamicFlowRevampProps['onLog'];
3
+ export declare const useFilteredOnLog: (onLog: OnLog) => OnLog;
4
+ export {};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@wise/dynamic-flow-client-internal",
3
- "version": "4.2.0",
3
+ "version": "4.3.0",
4
4
  "description": "Dynamic Flow web client for Wise",
5
5
  "license": "Apache-2.0",
6
6
  "main": "./build/main.js",
@@ -30,30 +30,30 @@
30
30
  "url": "git+https://github.com/transferwise/dynamic-flow.git"
31
31
  },
32
32
  "devDependencies": {
33
- "@babel/core": "7.26.9",
33
+ "@babel/core": "7.26.10",
34
34
  "@babel/plugin-syntax-flow": "7.26.0",
35
35
  "@babel/plugin-transform-react-jsx": "7.25.9",
36
36
  "@babel/preset-env": "7.26.9",
37
37
  "@babel/preset-react": "7.26.3",
38
38
  "@babel/preset-typescript": "7.26.0",
39
- "@chromatic-com/storybook": "3.2.5",
39
+ "@chromatic-com/storybook": "3.2.6",
40
40
  "@formatjs/cli": "^6.6.1",
41
- "@storybook/addon-a11y": "^8.6.3",
42
- "@storybook/addon-actions": "^8.6.3",
43
- "@storybook/addon-essentials": "^8.6.3",
44
- "@storybook/addon-interactions": "^8.6.3",
45
- "@storybook/addon-links": "^8.6.3",
41
+ "@storybook/addon-a11y": "^8.6.7",
42
+ "@storybook/addon-actions": "^8.6.7",
43
+ "@storybook/addon-essentials": "^8.6.7",
44
+ "@storybook/addon-interactions": "^8.6.7",
45
+ "@storybook/addon-links": "^8.6.7",
46
46
  "@storybook/addon-webpack5-compiler-babel": "^3.0.5",
47
- "@storybook/react": "^8.6.3",
48
- "@storybook/react-webpack5": "^8.6.3",
49
- "@storybook/test": "^8.6.3",
47
+ "@storybook/react": "^8.6.7",
48
+ "@storybook/react-webpack5": "^8.6.7",
49
+ "@storybook/test": "^8.6.7",
50
50
  "@testing-library/dom": "10.4.0",
51
51
  "@testing-library/jest-dom": "6.6.3",
52
52
  "@testing-library/react": "16.2.0",
53
53
  "@testing-library/user-event": "14.6.1",
54
- "@transferwise/components": "46.93.1",
54
+ "@transferwise/components": "46.94.1",
55
55
  "@transferwise/formatting": "^2.13.1",
56
- "@transferwise/icons": "3.18.0",
56
+ "@transferwise/icons": "3.19.1",
57
57
  "@transferwise/neptune-css": "14.22.0",
58
58
  "@types/jest": "29.5.14",
59
59
  "@types/react": "18.3.18",
@@ -62,20 +62,20 @@
62
62
  "@wise/components-theming": "^1.6.1",
63
63
  "babel-jest": "29.7.0",
64
64
  "currency-flags": "4.0.7",
65
- "esbuild": "0.25.0",
65
+ "esbuild": "0.25.1",
66
66
  "jest": "29.7.0",
67
67
  "jest-environment-jsdom": "29.7.0",
68
68
  "jest-fetch-mock": "^3.0.3",
69
69
  "jest-watch-typeahead": "^2.2.2",
70
70
  "npm-run-all2": "7.0.2",
71
71
  "postcss": "^8.5.3",
72
- "postcss-cli": "^11.0.0",
72
+ "postcss-cli": "^11.0.1",
73
73
  "postcss-import": "^16.1.0",
74
74
  "react": "18.3.1",
75
75
  "react-dom": "18.3.1",
76
76
  "react-intl": "6.8.9",
77
- "storybook": "^8.6.3",
78
- "stylelint": "16.15.0",
77
+ "storybook": "^8.6.7",
78
+ "stylelint": "16.16.0",
79
79
  "stylelint-config-standard": "36.0.1",
80
80
  "stylelint-no-unsupported-browser-features": "8.0.4",
81
81
  "stylelint-value-no-unknown-custom-properties": "6.0.1",
@@ -83,8 +83,8 @@
83
83
  "typescript": "5.8.2",
84
84
  "webpack": "5.98.0",
85
85
  "@wise/dynamic-flow-fixtures": "0.0.1",
86
- "@wise/dynamic-flow-renderers": "0.0.0",
87
- "@wise/dynamic-flow-types": "3.0.1"
86
+ "@wise/dynamic-flow-types": "3.1.0",
87
+ "@wise/dynamic-flow-renderers": "0.0.0"
88
88
  },
89
89
  "peerDependencies": {
90
90
  "@transferwise/components": "^46.92.0",
@@ -92,14 +92,15 @@
92
92
  "@transferwise/icons": "^3.18.0",
93
93
  "@transferwise/neptune-css": "^14.22.0",
94
94
  "@wise/art": "^2.19.0",
95
+ "@wise/components-theming": "^0.7.1 || ^1",
95
96
  "react-dom": "^18",
96
97
  "react-intl": "^6",
97
98
  "react": "^18"
98
99
  },
99
100
  "dependencies": {
100
101
  "classnames": "2.5.1",
101
- "@wise/dynamic-flow-client": "4.0.2",
102
- "@wise/dynamic-flow-types": "3.0.1"
102
+ "@wise/dynamic-flow-client": "4.0.3",
103
+ "@wise/dynamic-flow-types": "3.1.0"
103
104
  },
104
105
  "scripts": {
105
106
  "dev": "pnpm build:visual-tests && storybook dev -p 3005",