@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
@@ -9225,6 +9225,29 @@ const setLocale = i18n_utils_createThunk('setLocale', async (locale, {
9225
9225
  return api.getTranslations(locale);
9226
9226
  });
9227
9227
  });
9228
+ ;// CONCATENATED MODULE: ./src/javascripts/domains/translations/utils.js
9229
+
9230
+ const {
9231
+ createActions: utils_createActions,
9232
+ createReducer: translations_utils_createReducer,
9233
+ selectState: translations_utils_selectState
9234
+ } = createDomain('translations');
9235
+ ;// CONCATENATED MODULE: ./src/javascripts/domains/translations/actions.js
9236
+
9237
+ const [enable, disable] = utils_createActions('translate', {
9238
+ enable: locale => ({
9239
+ locale
9240
+ }),
9241
+ disable: () => ({})
9242
+ });
9243
+ const [enableEvent, disableEvent] = utils_createActions('event', {
9244
+ enable: payloadId => ({
9245
+ payloadId
9246
+ }),
9247
+ disable: payloadId => ({
9248
+ payloadId
9249
+ })
9250
+ });
9228
9251
  ;// CONCATENATED MODULE: ./src/javascripts/domains/app/utils.js
9229
9252
 
9230
9253
  const {
@@ -9243,7 +9266,7 @@ const selectUserHasResponded = createSelector(app_utils_selectState, state => st
9243
9266
 
9244
9267
  const {
9245
9268
  createAction: visibility_utils_createAction,
9246
- createActions: utils_createActions,
9269
+ createActions: visibility_utils_createActions,
9247
9270
  createThunk: visibility_utils_createThunk,
9248
9271
  createReducer: visibility_utils_createReducer,
9249
9272
  selectState: visibility_utils_selectState
@@ -9509,6 +9532,7 @@ class SeamlyBaseError extends Error {
9509
9532
  if (originalError !== null && originalError !== void 0 && originalError.payload) {
9510
9533
  this.originalEvent = originalError;
9511
9534
  this.originalError = originalError.payload.error;
9535
+ this.message = `Event of type ${originalError.payload.type} encountered`;
9512
9536
  }
9513
9537
 
9514
9538
  if (originalError !== null && originalError !== void 0 && originalError.error) {
@@ -9549,6 +9573,7 @@ const clear = interrupt_utils_createAction('clear');
9549
9573
 
9550
9574
 
9551
9575
 
9576
+
9552
9577
  const setHasResponded = app_utils_createAction('setHasResponded', hasResponded => ({
9553
9578
  hasResponded
9554
9579
  }));
@@ -9591,7 +9616,7 @@ const app_actions_initialize = app_utils_createThunk('initialize', async (_, {
9591
9616
 
9592
9617
  if (agentParticipant !== null && agentParticipant !== void 0 && agentParticipant.name) {
9593
9618
  dispatch({
9594
- type: seamlyActions.SET_HEADER_TITLE,
9619
+ type: seamlyActions.SET_HEADER_SUB_TITLE,
9595
9620
  title: agentParticipant.name
9596
9621
  });
9597
9622
  }
@@ -9600,6 +9625,8 @@ const app_actions_initialize = app_utils_createThunk('initialize', async (_, {
9600
9625
  }
9601
9626
 
9602
9627
  try {
9628
+ var _config$context2;
9629
+
9603
9630
  if (api.hasConversation()) {
9604
9631
  var _initialState$transla;
9605
9632
 
@@ -9613,6 +9640,9 @@ const app_actions_initialize = app_utils_createThunk('initialize', async (_, {
9613
9640
  if ('userResponded' in initialState) {
9614
9641
  dispatch(setHasResponded(initialState.userResponded));
9615
9642
  }
9643
+ } else if (config !== null && config !== void 0 && (_config$context2 = config.context) !== null && _config$context2 !== void 0 && _config$context2.translationLocale) {
9644
+ locale = config.context.translationLocale;
9645
+ dispatch(enable(locale));
9616
9646
  }
9617
9647
  } catch (e) {
9618
9648
  if (e instanceof SeamlySessionExpiredError) {
@@ -11848,29 +11878,6 @@ const app_reducer_initialState = {
11848
11878
 
11849
11879
 
11850
11880
 
11851
- ;// CONCATENATED MODULE: ./src/javascripts/domains/translations/utils.js
11852
-
11853
- const {
11854
- createActions: translations_utils_createActions,
11855
- createReducer: translations_utils_createReducer,
11856
- selectState: translations_utils_selectState
11857
- } = createDomain('translations');
11858
- ;// CONCATENATED MODULE: ./src/javascripts/domains/translations/actions.js
11859
-
11860
- const [enable, disable] = translations_utils_createActions('translate', {
11861
- enable: locale => ({
11862
- locale
11863
- }),
11864
- disable: () => ({})
11865
- });
11866
- const [enableEvent, disableEvent] = translations_utils_createActions('event', {
11867
- enable: payloadId => ({
11868
- payloadId
11869
- }),
11870
- disable: payloadId => ({
11871
- payloadId
11872
- })
11873
- });
11874
11881
  ;// CONCATENATED MODULE: ./src/javascripts/domains/redux/utils.js
11875
11882
  const arrayContentEquals = (a, b) => {
11876
11883
  if (a === b) {
@@ -12635,10 +12642,14 @@ function FormProvider(_ref) {
12635
12642
  });
12636
12643
  }, [setExternalErrors]);
12637
12644
  const handleSubmit = (0,hooks_namespaceObject.useCallback)(e => {
12638
- e.preventDefault();
12639
- setIsSubmitted(true);
12645
+ var _e$submitter;
12640
12646
 
12641
- if (validationIsValid) {
12647
+ e.preventDefault(); // If the submitter is set to being aria-disabled, block the submit action
12648
+
12649
+ const ariaDisabled = ((_e$submitter = e.submitter) === null || _e$submitter === void 0 ? void 0 : _e$submitter.ariaDisabled) === 'true';
12650
+ setIsSubmitted(!ariaDisabled);
12651
+
12652
+ if (!ariaDisabled && validationIsValid) {
12642
12653
  onSubmit(values, {
12643
12654
  updateControlValue,
12644
12655
  setError
@@ -19575,8 +19586,10 @@ const UploadContent = ({
19575
19586
  href: url,
19576
19587
  download: true,
19577
19588
  target: target || undefined,
19589
+ className: css_className(['download', 'download-link']),
19578
19590
  children: children
19579
19591
  }) : (0,jsx_runtime_namespaceObject.jsx)("span", {
19592
+ className: css_className('download'),
19580
19593
  children: children
19581
19594
  });
19582
19595
 
@@ -19606,22 +19619,19 @@ const Upload = _ref => {
19606
19619
  event: event,
19607
19620
  type: "upload"
19608
19621
  }, props), {}, {
19609
- children: (0,jsx_runtime_namespaceObject.jsxs)("div", {
19610
- className: css_className('download'),
19622
+ children: (0,jsx_runtime_namespaceObject.jsxs)(UploadContent, {
19623
+ url: url,
19624
+ target: !fromClient ? '_blank' : undefined,
19611
19625
  children: [(0,jsx_runtime_namespaceObject.jsx)(icon, {
19612
19626
  name: "download",
19613
19627
  size: "16"
19614
- }), (0,jsx_runtime_namespaceObject.jsxs)(UploadContent, {
19615
- url: url,
19616
- target: !fromClient ? '_blank' : undefined,
19617
- children: [(0,jsx_runtime_namespaceObject.jsx)("span", {
19618
- "aria-hidden": "true",
19619
- className: css_className('file-download'),
19620
- children: filename
19621
- }), (0,jsx_runtime_namespaceObject.jsx)("span", {
19622
- className: css_className('visually-hidden'),
19623
- children: srText
19624
- })]
19628
+ }), (0,jsx_runtime_namespaceObject.jsx)("span", {
19629
+ "aria-hidden": "true",
19630
+ className: css_className('file-download'),
19631
+ children: filename
19632
+ }), (0,jsx_runtime_namespaceObject.jsx)("span", {
19633
+ className: css_className('visually-hidden'),
19634
+ children: srText
19625
19635
  })]
19626
19636
  })
19627
19637
  }));
@@ -20741,7 +20751,7 @@ function TextEntryForm({
20741
20751
  }), (0,jsx_runtime_namespaceObject.jsx)("button", {
20742
20752
  className: css_className('button', 'input__submit'),
20743
20753
  type: "submit",
20744
- disabled: !hasValue || reachedCharacterLimit,
20754
+ "aria-disabled": !hasValue || reachedCharacterLimit ? 'true' : null,
20745
20755
  children: (0,jsx_runtime_namespaceObject.jsx)(icon, {
20746
20756
  name: "send",
20747
20757
  size: "32",
@@ -20875,9 +20885,9 @@ const UploadToggle = () => {
20875
20885
  children: (0,jsx_runtime_namespaceObject.jsx)("button", {
20876
20886
  className: css_className(['button', 'button--secondary', 'upload-toggle']),
20877
20887
  ref: uploadButton,
20878
- disabled: !showUploadButton ? 'true' : null,
20888
+ "aria-disabled": !showUploadButton ? 'true' : null,
20879
20889
  type: "button",
20880
- onClick: onClickHandler,
20890
+ onClick: showUploadButton ? onClickHandler : null,
20881
20891
  children: (0,jsx_runtime_namespaceObject.jsx)(icon, {
20882
20892
  name: "file",
20883
20893
  size: "32",
@@ -21724,7 +21734,7 @@ const OptionsButton = () => {
21724
21734
  ref: item => {
21725
21735
  menuItemButtons.current[i] = item;
21726
21736
  },
21727
- className: css_className(['button', 'button--secondary', ...(available ? [] : ['button--disabled'])]),
21737
+ className: css_className(['button', 'button--secondary']),
21728
21738
  onKeyDown: e => onMenuItemKeyDownHandler(e, i),
21729
21739
  onKeyPress: e => onKeyPressHandler(e, i),
21730
21740
  onClick: () => onMenuItemClickHandler(name, available),
@@ -21741,7 +21751,7 @@ const OptionsButton = () => {
21741
21751
  })
21742
21752
  }), (0,jsx_runtime_namespaceObject.jsxs)("button", {
21743
21753
  type: "button",
21744
- className: css_className(['button', 'button--secondary', 'chat__options__button', ...(!multiMenu && firstOptionName ? [`chat__options__button--${firstOptionName}`] : []), ...(!multiMenu && !firstOption.available ? ['button--disabled'] : [])]),
21754
+ className: css_className(['button', 'button--secondary', 'chat__options__button', ...(!multiMenu && firstOptionName ? [`chat__options__button--${firstOptionName}`] : [])]),
21745
21755
  id: id,
21746
21756
  onClick: onClickHandler,
21747
21757
  onKeyDown: multiMenu ? onButtonKeyDownHandler : null,
@@ -24921,15 +24931,6 @@ function getTimeZone() {
24921
24931
  }
24922
24932
  }
24923
24933
 
24924
- function getEnvironment() {
24925
- return {
24926
- screenResolution: `${window.screen.width}x${window.screen.height}`,
24927
- userAgent: navigator.userAgent,
24928
- currentUrl: window.location.toString(),
24929
- timezone: getTimeZone()
24930
- };
24931
- }
24932
-
24933
24934
  class API {
24934
24935
  /**
24935
24936
  * Creates an instance of API.
@@ -24939,14 +24940,17 @@ class API {
24939
24940
  * @param {string} config.secure Connect securely
24940
24941
  * @param {string} config.externalId Unique visitor identifier (optional)
24941
24942
  * @param {boolean} config.sendEnvironment
24943
+ * @param {string} layoutMode
24942
24944
  * @param {string} namespace
24943
- * @param {Object} [context={ channelName: undefined, variables: undefined, locale: undefined }]
24945
+ * @param {Object} [context={ channelName: undefined, variables: undefined, locale: undefined, translationLocale: undefined }]
24944
24946
  * @param {string} context.channelName
24945
24947
  * @param {object} context.variables
24946
24948
  * @param {string} context.locale
24949
+ * @param {string} context.translationLocale
24947
24950
  * @memberof API
24948
24951
  */
24949
24952
  constructor({
24953
+ layoutMode,
24950
24954
  namespace,
24951
24955
  config = {},
24952
24956
  context = {}
@@ -24966,6 +24970,7 @@ class API {
24966
24970
  this.connected = false;
24967
24971
  this.configReady = false;
24968
24972
  this.externalId = config.externalId;
24973
+ this.layoutMode = layoutMode;
24969
24974
  this.internalProducer = new EventProducer('API');
24970
24975
  this.internal$ = xstream_default().create(this.internalProducer).flatten();
24971
24976
  this.connection$ = this.internal$.filter(event => event.type === 'connection');
@@ -25090,7 +25095,7 @@ class API {
25090
25095
  v: apiVersion
25091
25096
  }).send({
25092
25097
  context: api_objectSpread(api_objectSpread({}, this.config.context), {}, {
25093
- environment: this.config.sendEnvironment === true ? getEnvironment() : this.config.sendEnvironment
25098
+ environment: this.config.sendEnvironment === true ? this.getEnvironment() : this.config.sendEnvironment
25094
25099
  })
25095
25100
  }).then(({
25096
25101
  body
@@ -25104,7 +25109,7 @@ class API {
25104
25109
  }
25105
25110
 
25106
25111
  if (error.status >= 500) {
25107
- throw new SeamlyGeneralError();
25112
+ throw new SeamlyGeneralError(error);
25108
25113
  }
25109
25114
 
25110
25115
  throw error;
@@ -25178,7 +25183,7 @@ class API {
25178
25183
 
25179
25184
  if (this.config.sendEnvironment) {
25180
25185
  this.send('context', {
25181
- environment: this.config.sendEnvironment === true ? getEnvironment() : this.config.sendEnvironment
25186
+ environment: this.config.sendEnvironment === true ? this.getEnvironment() : this.config.sendEnvironment
25182
25187
  }, false);
25183
25188
  }
25184
25189
 
@@ -25271,6 +25276,7 @@ class API {
25271
25276
  sendContext(context = {}) {
25272
25277
  const {
25273
25278
  locale,
25279
+ translationLocale,
25274
25280
  variables
25275
25281
  } = context;
25276
25282
  const payload = {};
@@ -25283,6 +25289,14 @@ class API {
25283
25289
  payload.locale = locale;
25284
25290
  }
25285
25291
 
25292
+ if (translationLocale) {
25293
+ if (typeof translationLocale !== 'string') {
25294
+ throw new Error('Translation locale must be a string');
25295
+ }
25296
+
25297
+ payload.translationLocale = translationLocale;
25298
+ }
25299
+
25286
25300
  if (variables) {
25287
25301
  if (typeof variables !== 'object') {
25288
25302
  throw new Error('Variables must be an object');
@@ -25303,6 +25317,18 @@ class API {
25303
25317
  return this.internal$.filter(event => event.type !== 'connection');
25304
25318
  }
25305
25319
 
25320
+ getEnvironment() {
25321
+ return {
25322
+ clientName: "@seamly/web-ui",
25323
+ clientVariant: this.layoutMode,
25324
+ clientVersion: "20.2.0-alpha.1",
25325
+ currentUrl: window.location.toString(),
25326
+ screenResolution: `${window.screen.width}x${window.screen.height}`,
25327
+ timezone: getTimeZone(),
25328
+ userAgent: navigator.userAgent
25329
+ };
25330
+ }
25331
+
25306
25332
  }
25307
25333
  ;// CONCATENATED MODULE: ./node_modules/redux-thunk/es/index.js
25308
25334
  function createThunkMiddleware(extraArgument) {
@@ -25496,6 +25522,7 @@ class Engine {
25496
25522
  this.parentElement = parentElement;
25497
25523
  this.externalApi = externalApi;
25498
25524
  this.api = new API({
25525
+ layoutMode: config.layoutMode,
25499
25526
  namespace: config.namespace,
25500
25527
  config: config.api,
25501
25528
  context: config.context