@seamly/web-ui 20.0.0 → 20.2.0-alpha.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (165) hide show
  1. package/build/dist/lib/deprecated-view.css +1 -1
  2. package/build/dist/lib/index.debug.js +135 -135
  3. package/build/dist/lib/index.debug.min.js +1 -1
  4. package/build/dist/lib/index.js +86 -59
  5. package/build/dist/lib/index.min.js +1 -1
  6. package/build/dist/lib/standalone.js +86 -59
  7. package/build/dist/lib/standalone.min.js +1 -1
  8. package/build/dist/lib/style-guide.js +45 -31
  9. package/build/dist/lib/style-guide.min.js +1 -1
  10. package/build/dist/lib/styles-default-implementation.css +1 -1
  11. package/build/dist/lib/styles.css +1 -1
  12. package/package.json +1 -1
  13. package/src/javascripts/api/errors/seamly-base-error.js +1 -0
  14. package/src/javascripts/api/index.js +33 -21
  15. package/src/javascripts/api/producer.js +3 -3
  16. package/src/javascripts/domains/app/actions.js +12 -8
  17. package/src/javascripts/domains/app/hooks.js +1 -1
  18. package/src/javascripts/domains/app/utils.js +1 -1
  19. package/src/javascripts/domains/config/hooks.js +1 -1
  20. package/src/javascripts/domains/config/reducer.js +3 -3
  21. package/src/javascripts/domains/config/selectors.js +1 -1
  22. package/src/javascripts/domains/config/utils.js +1 -1
  23. package/src/javascripts/domains/errors/index.js +2 -2
  24. package/src/javascripts/domains/forms/hooks.js +1 -1
  25. package/src/javascripts/domains/forms/provider.js +5 -3
  26. package/src/javascripts/domains/forms/reducer.js +1 -1
  27. package/src/javascripts/domains/forms/selectors.js +1 -1
  28. package/src/javascripts/domains/forms/utils.js +1 -1
  29. package/src/javascripts/domains/i18n/actions.js +1 -1
  30. package/src/javascripts/domains/i18n/hooks.js +1 -1
  31. package/src/javascripts/domains/i18n/reducer.js +1 -1
  32. package/src/javascripts/domains/i18n/utils.js +1 -1
  33. package/src/javascripts/domains/interrupt/hooks.js +2 -2
  34. package/src/javascripts/domains/interrupt/middleware.js +6 -6
  35. package/src/javascripts/domains/interrupt/reducer.js +1 -1
  36. package/src/javascripts/domains/interrupt/utils.js +1 -1
  37. package/src/javascripts/domains/options/middleware.js +1 -1
  38. package/src/javascripts/domains/store/index.js +10 -10
  39. package/src/javascripts/domains/store/state-reducer.js +3 -3
  40. package/src/javascripts/domains/translations/components/chat-status.js +5 -5
  41. package/src/javascripts/domains/translations/components/options-button.js +6 -6
  42. package/src/javascripts/domains/translations/components/options-dialog/form.js +5 -5
  43. package/src/javascripts/domains/translations/components/options-dialog/index.js +7 -7
  44. package/src/javascripts/domains/translations/hooks.js +3 -3
  45. package/src/javascripts/domains/translations/middleware.js +2 -2
  46. package/src/javascripts/domains/translations/reducer.js +3 -3
  47. package/src/javascripts/domains/translations/selectors.js +1 -1
  48. package/src/javascripts/domains/translations/utils.js +1 -1
  49. package/src/javascripts/domains/visibility/actions.js +3 -3
  50. package/src/javascripts/domains/visibility/hooks.js +1 -1
  51. package/src/javascripts/domains/visibility/utils.js +1 -1
  52. package/src/javascripts/lib/css.js +1 -1
  53. package/src/javascripts/lib/engine/index.js +6 -5
  54. package/src/javascripts/lib/external-api/index.js +1 -1
  55. package/src/javascripts/lib/redux-helpers/index.js +1 -1
  56. package/src/javascripts/style-guide/components/app.js +1 -1
  57. package/src/javascripts/style-guide/components/links.js +6 -6
  58. package/src/javascripts/style-guide/components/static-core.js +8 -8
  59. package/src/javascripts/style-guide.js +2 -0
  60. package/src/javascripts/ui/components/app-options/index.js +4 -4
  61. package/src/javascripts/ui/components/chat-status/index.js +2 -2
  62. package/src/javascripts/ui/components/conversation/component-filter.js +1 -1
  63. package/src/javascripts/ui/components/conversation/conversation.js +6 -6
  64. package/src/javascripts/ui/components/conversation/event/card-component.js +4 -4
  65. package/src/javascripts/ui/components/conversation/event/card-message.js +3 -3
  66. package/src/javascripts/ui/components/conversation/event/carousel-component/components/controls.js +3 -3
  67. package/src/javascripts/ui/components/conversation/event/carousel-component/components/pagination.js +1 -1
  68. package/src/javascripts/ui/components/conversation/event/carousel-component/index.js +3 -3
  69. package/src/javascripts/ui/components/conversation/event/carousel-message/components/slide.js +3 -3
  70. package/src/javascripts/ui/components/conversation/event/carousel-message/index.js +3 -3
  71. package/src/javascripts/ui/components/conversation/event/choice-prompt.js +7 -7
  72. package/src/javascripts/ui/components/conversation/event/cta.js +6 -6
  73. package/src/javascripts/ui/components/conversation/event/divider/index.js +1 -1
  74. package/src/javascripts/ui/components/conversation/event/divider/variants/default.js +3 -3
  75. package/src/javascripts/ui/components/conversation/event/divider/variants/new-translation.js +4 -4
  76. package/src/javascripts/ui/components/conversation/event/divider/variants/time-indicator.js +5 -5
  77. package/src/javascripts/ui/components/conversation/event/event-participant.js +4 -4
  78. package/src/javascripts/ui/components/conversation/event/event.js +2 -2
  79. package/src/javascripts/ui/components/conversation/event/hooks/use-event-link-click-handler.js +2 -2
  80. package/src/javascripts/ui/components/conversation/event/hooks/use-formatted-date.js +3 -3
  81. package/src/javascripts/ui/components/conversation/event/image-lightbox.js +4 -4
  82. package/src/javascripts/ui/components/conversation/event/image.js +2 -2
  83. package/src/javascripts/ui/components/conversation/event/participant.js +4 -4
  84. package/src/javascripts/ui/components/conversation/event/text.js +3 -3
  85. package/src/javascripts/ui/components/conversation/event/translation.js +3 -3
  86. package/src/javascripts/ui/components/conversation/event/upload.js +18 -15
  87. package/src/javascripts/ui/components/conversation/event/video.js +4 -4
  88. package/src/javascripts/ui/components/conversation/event-divider.js +2 -2
  89. package/src/javascripts/ui/components/conversation/loader.js +2 -2
  90. package/src/javascripts/ui/components/conversation/message-container.js +4 -4
  91. package/src/javascripts/ui/components/core/seamly-activity-monitor.js +3 -3
  92. package/src/javascripts/ui/components/core/seamly-core.js +2 -2
  93. package/src/javascripts/ui/components/core/seamly-event-subscriber.js +8 -8
  94. package/src/javascripts/ui/components/core/seamly-file-upload.js +4 -4
  95. package/src/javascripts/ui/components/core/seamly-idle-detach-counter.js +2 -2
  96. package/src/javascripts/ui/components/core/seamly-initializer.js +2 -2
  97. package/src/javascripts/ui/components/core/seamly-instance-functions-loader.js +5 -5
  98. package/src/javascripts/ui/components/core/seamly-live-region.js +2 -2
  99. package/src/javascripts/ui/components/core/seamly-new-notifications.js +5 -5
  100. package/src/javascripts/ui/components/core/seamly-read-state.js +6 -6
  101. package/src/javascripts/ui/components/entry/deprecated-toggle-button.js +5 -5
  102. package/src/javascripts/ui/components/entry/entry-container.js +8 -8
  103. package/src/javascripts/ui/components/entry/text-entry/hooks.js +6 -6
  104. package/src/javascripts/ui/components/entry/text-entry/index.js +2 -2
  105. package/src/javascripts/ui/components/entry/text-entry/text-entry-form.js +8 -8
  106. package/src/javascripts/ui/components/entry/upload/file-upload-form.js +5 -5
  107. package/src/javascripts/ui/components/entry/upload/index.js +10 -10
  108. package/src/javascripts/ui/components/entry/upload-toggle.js +9 -9
  109. package/src/javascripts/ui/components/faq/faq.js +16 -16
  110. package/src/javascripts/ui/components/form-controls/error.js +2 -2
  111. package/src/javascripts/ui/components/form-controls/file-input.js +4 -4
  112. package/src/javascripts/ui/components/form-controls/form.js +2 -2
  113. package/src/javascripts/ui/components/form-controls/input.js +1 -1
  114. package/src/javascripts/ui/components/form-controls/select.js +1 -1
  115. package/src/javascripts/ui/components/form-controls/wrapper.js +1 -1
  116. package/src/javascripts/ui/components/layout/agent-info.js +6 -6
  117. package/src/javascripts/ui/components/layout/chat-frame.js +5 -5
  118. package/src/javascripts/ui/components/layout/deprecated-app-frame.js +7 -7
  119. package/src/javascripts/ui/components/layout/header.js +3 -3
  120. package/src/javascripts/ui/components/layout/icon.js +1 -1
  121. package/src/javascripts/ui/components/layout/interrupt.js +3 -3
  122. package/src/javascripts/ui/components/layout/privacy-disclaimer.js +3 -3
  123. package/src/javascripts/ui/components/options/options-button.js +7 -12
  124. package/src/javascripts/ui/components/options/options-frame.js +4 -4
  125. package/src/javascripts/ui/components/options/options.js +1 -1
  126. package/src/javascripts/ui/components/options/transcript/index.js +8 -8
  127. package/src/javascripts/ui/components/options/transcript/transcript-form.js +4 -4
  128. package/src/javascripts/ui/components/warnings/idle-detach-warning.js +6 -6
  129. package/src/javascripts/ui/components/warnings/prompt.js +2 -2
  130. package/src/javascripts/ui/components/warnings/resume-conversation-prompt.js +5 -5
  131. package/src/javascripts/ui/components/widgets/in-out-transition.js +3 -3
  132. package/src/javascripts/ui/components/widgets/lightbox.js +5 -5
  133. package/src/javascripts/ui/components/widgets/modal.js +2 -2
  134. package/src/javascripts/ui/components/widgets/upload-progress.js +4 -4
  135. package/src/javascripts/ui/hooks/component-helper-hooks.js +1 -1
  136. package/src/javascripts/ui/hooks/file-upload-hooks.js +2 -2
  137. package/src/javascripts/ui/hooks/focus-helper-hooks.js +2 -2
  138. package/src/javascripts/ui/hooks/live-region-hooks.js +2 -2
  139. package/src/javascripts/ui/hooks/seamly-api-hooks.js +1 -1
  140. package/src/javascripts/ui/hooks/seamly-entry-hooks.js +2 -2
  141. package/src/javascripts/ui/hooks/seamly-option-hooks.js +2 -2
  142. package/src/javascripts/ui/hooks/seamly-state-hooks.js +5 -5
  143. package/src/javascripts/ui/hooks/use-event-component-mapping.js +2 -2
  144. package/src/javascripts/ui/hooks/use-seamly-activity-event-handler.js +1 -1
  145. package/src/javascripts/ui/hooks/use-seamly-chat.js +3 -3
  146. package/src/javascripts/ui/hooks/use-seamly-commands.js +9 -9
  147. package/src/javascripts/ui/hooks/use-seamly-dispatch.js +1 -1
  148. package/src/javascripts/ui/hooks/use-seamly-idle-detach-countdown.js +5 -5
  149. package/src/javascripts/ui/hooks/use-seamly-resume-conversation-prompt.js +2 -2
  150. package/src/javascripts/ui/hooks/use-single-file-upload.js +2 -2
  151. package/src/javascripts/ui/hooks/utility-hooks.js +1 -1
  152. package/src/stylesheets/4-base/_formelements.scss +3 -3
  153. package/src/stylesheets/5-components/_buttons.scss +1 -1
  154. package/src/stylesheets/5-components/_chat-status.scss +4 -0
  155. package/src/stylesheets/5-components/_input.scss +2 -2
  156. package/src/stylesheets/5-components/_message-body.scss +19 -12
  157. package/src/stylesheets/6-default-implementation/_hover.scss +24 -12
  158. package/src/stylesheets/7-deprecated/4-base/_formelements.scss +4 -4
  159. package/src/stylesheets/7-deprecated/5-components/_buttons.scss +1 -1
  160. package/src/stylesheets/7-deprecated/5-components/_input.scss +1 -1
  161. package/src/stylesheets/7-deprecated/5-components/_message.scss +4 -3
  162. package/src/stylesheets/7-deprecated/5-components/_options.scss +2 -2
  163. package/webpack/config.common.js +5 -0
  164. package/webpack/config.package.js +10 -0
  165. package/src/.DS_Store +0 -0
@@ -16964,6 +16964,29 @@ const setLocale = i18n_utils_createThunk('setLocale', async (locale, {
16964
16964
  return api.getTranslations(locale);
16965
16965
  });
16966
16966
  });
16967
+ ;// CONCATENATED MODULE: ./src/javascripts/domains/translations/utils.js
16968
+
16969
+ const {
16970
+ createActions: utils_createActions,
16971
+ createReducer: translations_utils_createReducer,
16972
+ selectState: translations_utils_selectState
16973
+ } = createDomain('translations');
16974
+ ;// CONCATENATED MODULE: ./src/javascripts/domains/translations/actions.js
16975
+
16976
+ const [enable, disable] = utils_createActions('translate', {
16977
+ enable: locale => ({
16978
+ locale
16979
+ }),
16980
+ disable: () => ({})
16981
+ });
16982
+ const [enableEvent, disableEvent] = utils_createActions('event', {
16983
+ enable: payloadId => ({
16984
+ payloadId
16985
+ }),
16986
+ disable: payloadId => ({
16987
+ payloadId
16988
+ })
16989
+ });
16967
16990
  ;// CONCATENATED MODULE: ./src/javascripts/domains/app/utils.js
16968
16991
 
16969
16992
  const {
@@ -16982,7 +17005,7 @@ const selectUserHasResponded = createSelector(app_utils_selectState, state => st
16982
17005
 
16983
17006
  const {
16984
17007
  createAction: visibility_utils_createAction,
16985
- createActions: utils_createActions,
17008
+ createActions: visibility_utils_createActions,
16986
17009
  createThunk: visibility_utils_createThunk,
16987
17010
  createReducer: visibility_utils_createReducer,
16988
17011
  selectState: visibility_utils_selectState
@@ -17272,6 +17295,7 @@ class SeamlyBaseError extends Error {
17272
17295
  if (originalError !== null && originalError !== void 0 && originalError.payload) {
17273
17296
  this.originalEvent = originalError;
17274
17297
  this.originalError = originalError.payload.error;
17298
+ this.message = `Event of type ${originalError.payload.type} encountered`;
17275
17299
  }
17276
17300
 
17277
17301
  if (originalError !== null && originalError !== void 0 && originalError.error) {
@@ -17313,6 +17337,7 @@ const clear = interrupt_utils_createAction('clear');
17313
17337
 
17314
17338
 
17315
17339
 
17340
+
17316
17341
  const setHasResponded = app_utils_createAction('setHasResponded', hasResponded => ({
17317
17342
  hasResponded
17318
17343
  }));
@@ -17355,7 +17380,7 @@ const app_actions_initialize = app_utils_createThunk('initialize', async (_, {
17355
17380
 
17356
17381
  if (agentParticipant !== null && agentParticipant !== void 0 && agentParticipant.name) {
17357
17382
  dispatch({
17358
- type: seamlyActions.SET_HEADER_TITLE,
17383
+ type: seamlyActions.SET_HEADER_SUB_TITLE,
17359
17384
  title: agentParticipant.name
17360
17385
  });
17361
17386
  }
@@ -17364,6 +17389,8 @@ const app_actions_initialize = app_utils_createThunk('initialize', async (_, {
17364
17389
  }
17365
17390
 
17366
17391
  try {
17392
+ var _config$context2;
17393
+
17367
17394
  if (api.hasConversation()) {
17368
17395
  var _initialState$transla;
17369
17396
 
@@ -17377,6 +17404,9 @@ const app_actions_initialize = app_utils_createThunk('initialize', async (_, {
17377
17404
  if ('userResponded' in initialState) {
17378
17405
  dispatch(setHasResponded(initialState.userResponded));
17379
17406
  }
17407
+ } else if (config !== null && config !== void 0 && (_config$context2 = config.context) !== null && _config$context2 !== void 0 && _config$context2.translationLocale) {
17408
+ locale = config.context.translationLocale;
17409
+ dispatch(enable(locale));
17380
17410
  }
17381
17411
  } catch (e) {
17382
17412
  if (e instanceof SeamlySessionExpiredError) {
@@ -19741,29 +19771,6 @@ const app_reducer_initialState = {
19741
19771
 
19742
19772
 
19743
19773
 
19744
- ;// CONCATENATED MODULE: ./src/javascripts/domains/translations/utils.js
19745
-
19746
- const {
19747
- createActions: translations_utils_createActions,
19748
- createReducer: translations_utils_createReducer,
19749
- selectState: translations_utils_selectState
19750
- } = createDomain('translations');
19751
- ;// CONCATENATED MODULE: ./src/javascripts/domains/translations/actions.js
19752
-
19753
- const [enable, disable] = translations_utils_createActions('translate', {
19754
- enable: locale => ({
19755
- locale
19756
- }),
19757
- disable: () => ({})
19758
- });
19759
- const [enableEvent, disableEvent] = translations_utils_createActions('event', {
19760
- enable: payloadId => ({
19761
- payloadId
19762
- }),
19763
- disable: payloadId => ({
19764
- payloadId
19765
- })
19766
- });
19767
19774
  ;// CONCATENATED MODULE: ./src/javascripts/domains/redux/utils.js
19768
19775
 
19769
19776
 
@@ -20577,10 +20584,14 @@ function FormProvider(_ref) {
20577
20584
  });
20578
20585
  }, [setExternalErrors]);
20579
20586
  const handleSubmit = hooks_module_A(e => {
20580
- e.preventDefault();
20581
- setIsSubmitted(true);
20587
+ var _e$submitter;
20582
20588
 
20583
- if (validationIsValid) {
20589
+ e.preventDefault(); // If the submitter is set to being aria-disabled, block the submit action
20590
+
20591
+ const ariaDisabled = ((_e$submitter = e.submitter) === null || _e$submitter === void 0 ? void 0 : _e$submitter.ariaDisabled) === 'true';
20592
+ setIsSubmitted(!ariaDisabled);
20593
+
20594
+ if (!ariaDisabled && validationIsValid) {
20584
20595
  onSubmit(values, {
20585
20596
  updateControlValue,
20586
20597
  setError
@@ -27640,8 +27651,10 @@ const UploadContent = ({
27640
27651
  href: url,
27641
27652
  download: true,
27642
27653
  target: target || undefined,
27654
+ className: css_className(['download', 'download-link']),
27643
27655
  children: children
27644
27656
  }) : jsxRuntime_module_e("span", {
27657
+ className: css_className('download'),
27645
27658
  children: children
27646
27659
  });
27647
27660
 
@@ -27671,22 +27684,19 @@ const Upload = _ref => {
27671
27684
  event: event,
27672
27685
  type: "upload"
27673
27686
  }, props), {}, {
27674
- children: jsxRuntime_module_e("div", {
27675
- className: css_className('download'),
27687
+ children: jsxRuntime_module_e(UploadContent, {
27688
+ url: url,
27689
+ target: !fromClient ? '_blank' : undefined,
27676
27690
  children: [jsxRuntime_module_e(icon, {
27677
27691
  name: "download",
27678
27692
  size: "16"
27679
- }), jsxRuntime_module_e(UploadContent, {
27680
- url: url,
27681
- target: !fromClient ? '_blank' : undefined,
27682
- children: [jsxRuntime_module_e("span", {
27683
- "aria-hidden": "true",
27684
- className: css_className('file-download'),
27685
- children: filename
27686
- }), jsxRuntime_module_e("span", {
27687
- className: css_className('visually-hidden'),
27688
- children: srText
27689
- })]
27693
+ }), jsxRuntime_module_e("span", {
27694
+ "aria-hidden": "true",
27695
+ className: css_className('file-download'),
27696
+ children: filename
27697
+ }), jsxRuntime_module_e("span", {
27698
+ className: css_className('visually-hidden'),
27699
+ children: srText
27690
27700
  })]
27691
27701
  })
27692
27702
  }));
@@ -28879,7 +28889,7 @@ function TextEntryForm({
28879
28889
  }), jsxRuntime_module_e("button", {
28880
28890
  className: css_className('button', 'input__submit'),
28881
28891
  type: "submit",
28882
- disabled: !hasValue || reachedCharacterLimit,
28892
+ "aria-disabled": !hasValue || reachedCharacterLimit ? 'true' : null,
28883
28893
  children: jsxRuntime_module_e(icon, {
28884
28894
  name: "send",
28885
28895
  size: "32",
@@ -29020,9 +29030,9 @@ const UploadToggle = () => {
29020
29030
  children: jsxRuntime_module_e("button", {
29021
29031
  className: css_className(['button', 'button--secondary', 'upload-toggle']),
29022
29032
  ref: uploadButton,
29023
- disabled: !showUploadButton ? 'true' : null,
29033
+ "aria-disabled": !showUploadButton ? 'true' : null,
29024
29034
  type: "button",
29025
- onClick: onClickHandler,
29035
+ onClick: showUploadButton ? onClickHandler : null,
29026
29036
  children: jsxRuntime_module_e(icon, {
29027
29037
  name: "file",
29028
29038
  size: "32",
@@ -29897,7 +29907,7 @@ const OptionsButton = () => {
29897
29907
  ref: item => {
29898
29908
  menuItemButtons.current[i] = item;
29899
29909
  },
29900
- className: css_className(['button', 'button--secondary', ...(available ? [] : ['button--disabled'])]),
29910
+ className: css_className(['button', 'button--secondary']),
29901
29911
  onKeyDown: e => onMenuItemKeyDownHandler(e, i),
29902
29912
  onKeyPress: e => onKeyPressHandler(e, i),
29903
29913
  onClick: () => onMenuItemClickHandler(name, available),
@@ -29914,7 +29924,7 @@ const OptionsButton = () => {
29914
29924
  })
29915
29925
  }), jsxRuntime_module_e("button", {
29916
29926
  type: "button",
29917
- className: css_className(['button', 'button--secondary', 'chat__options__button', ...(!multiMenu && firstOptionName ? [`chat__options__button--${firstOptionName}`] : []), ...(!multiMenu && !firstOption.available ? ['button--disabled'] : [])]),
29927
+ className: css_className(['button', 'button--secondary', 'chat__options__button', ...(!multiMenu && firstOptionName ? [`chat__options__button--${firstOptionName}`] : [])]),
29918
29928
  id: id,
29919
29929
  onClick: onClickHandler,
29920
29930
  onKeyDown: multiMenu ? onButtonKeyDownHandler : null,
@@ -33273,15 +33283,6 @@ function getTimeZone() {
33273
33283
  }
33274
33284
  }
33275
33285
 
33276
- function getEnvironment() {
33277
- return {
33278
- screenResolution: `${window.screen.width}x${window.screen.height}`,
33279
- userAgent: navigator.userAgent,
33280
- currentUrl: window.location.toString(),
33281
- timezone: getTimeZone()
33282
- };
33283
- }
33284
-
33285
33286
  class API {
33286
33287
  /**
33287
33288
  * Creates an instance of API.
@@ -33291,14 +33292,17 @@ class API {
33291
33292
  * @param {string} config.secure Connect securely
33292
33293
  * @param {string} config.externalId Unique visitor identifier (optional)
33293
33294
  * @param {boolean} config.sendEnvironment
33295
+ * @param {string} layoutMode
33294
33296
  * @param {string} namespace
33295
- * @param {Object} [context={ channelName: undefined, variables: undefined, locale: undefined }]
33297
+ * @param {Object} [context={ channelName: undefined, variables: undefined, locale: undefined, translationLocale: undefined }]
33296
33298
  * @param {string} context.channelName
33297
33299
  * @param {object} context.variables
33298
33300
  * @param {string} context.locale
33301
+ * @param {string} context.translationLocale
33299
33302
  * @memberof API
33300
33303
  */
33301
33304
  constructor({
33305
+ layoutMode,
33302
33306
  namespace,
33303
33307
  config = {},
33304
33308
  context = {}
@@ -33320,6 +33324,7 @@ class API {
33320
33324
  this.connected = false;
33321
33325
  this.configReady = false;
33322
33326
  this.externalId = config.externalId;
33327
+ this.layoutMode = layoutMode;
33323
33328
  this.internalProducer = new EventProducer('API');
33324
33329
  this.internal$ = xstream_default().create(this.internalProducer).flatten();
33325
33330
  this.connection$ = filter_default()(_context = this.internal$).call(_context, event => event.type === 'connection');
@@ -33446,7 +33451,7 @@ class API {
33446
33451
  v: apiVersion
33447
33452
  }).send({
33448
33453
  context: api_objectSpread(api_objectSpread({}, this.config.context), {}, {
33449
- environment: this.config.sendEnvironment === true ? getEnvironment() : this.config.sendEnvironment
33454
+ environment: this.config.sendEnvironment === true ? this.getEnvironment() : this.config.sendEnvironment
33450
33455
  })
33451
33456
  }).then(({
33452
33457
  body
@@ -33460,7 +33465,7 @@ class API {
33460
33465
  }
33461
33466
 
33462
33467
  if (error.status >= 500) {
33463
- throw new SeamlyGeneralError();
33468
+ throw new SeamlyGeneralError(error);
33464
33469
  }
33465
33470
 
33466
33471
  throw error;
@@ -33534,7 +33539,7 @@ class API {
33534
33539
 
33535
33540
  if (this.config.sendEnvironment) {
33536
33541
  this.send('context', {
33537
- environment: this.config.sendEnvironment === true ? getEnvironment() : this.config.sendEnvironment
33542
+ environment: this.config.sendEnvironment === true ? this.getEnvironment() : this.config.sendEnvironment
33538
33543
  }, false);
33539
33544
  }
33540
33545
 
@@ -33630,6 +33635,7 @@ class API {
33630
33635
  sendContext(context = {}) {
33631
33636
  const {
33632
33637
  locale,
33638
+ translationLocale,
33633
33639
  variables
33634
33640
  } = context;
33635
33641
  const payload = {};
@@ -33642,6 +33648,14 @@ class API {
33642
33648
  payload.locale = locale;
33643
33649
  }
33644
33650
 
33651
+ if (translationLocale) {
33652
+ if (typeof translationLocale !== 'string') {
33653
+ throw new Error('Translation locale must be a string');
33654
+ }
33655
+
33656
+ payload.translationLocale = translationLocale;
33657
+ }
33658
+
33645
33659
  if (variables) {
33646
33660
  if (typeof variables !== 'object') {
33647
33661
  throw new Error('Variables must be an object');
@@ -33664,6 +33678,18 @@ class API {
33664
33678
  return filter_default()(_context5 = this.internal$).call(_context5, event => event.type !== 'connection');
33665
33679
  }
33666
33680
 
33681
+ getEnvironment() {
33682
+ return {
33683
+ clientName: "@seamly/web-ui",
33684
+ clientVariant: this.layoutMode,
33685
+ clientVersion: "20.2.0-alpha.1",
33686
+ currentUrl: window.location.toString(),
33687
+ screenResolution: `${window.screen.width}x${window.screen.height}`,
33688
+ timezone: getTimeZone(),
33689
+ userAgent: navigator.userAgent
33690
+ };
33691
+ }
33692
+
33667
33693
  }
33668
33694
  ;// CONCATENATED MODULE: ./node_modules/redux-thunk/es/index.js
33669
33695
  function createThunkMiddleware(extraArgument) {
@@ -33870,6 +33896,7 @@ class Engine {
33870
33896
  this.parentElement = parentElement;
33871
33897
  this.externalApi = externalApi;
33872
33898
  this.api = new API({
33899
+ layoutMode: config.layoutMode,
33873
33900
  namespace: config.namespace,
33874
33901
  config: config.api,
33875
33902
  context: config.context