@seamly/web-ui 20.2.0 → 20.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (107) hide show
  1. package/build/dist/lib/deprecated-view.css +1 -1
  2. package/build/dist/lib/index.debug.js +211 -200
  3. package/build/dist/lib/index.debug.min.js +1 -1
  4. package/build/dist/lib/index.debug.min.js.LICENSE.txt +40 -36
  5. package/build/dist/lib/index.js +1811 -1137
  6. package/build/dist/lib/index.min.js +1 -1
  7. package/build/dist/lib/index.min.js.LICENSE.txt +2 -2
  8. package/build/dist/lib/standalone.js +5167 -2856
  9. package/build/dist/lib/standalone.min.js +1 -1
  10. package/build/dist/lib/standalone.min.js.LICENSE.txt +1 -1
  11. package/build/dist/lib/style-guide.js +7427 -7243
  12. package/build/dist/lib/style-guide.min.js +1 -1
  13. package/build/dist/lib/styles.css +1 -1
  14. package/package.json +15 -14
  15. package/src/javascripts/api/index.js +5 -4
  16. package/src/javascripts/domains/app/actions.js +22 -10
  17. package/src/javascripts/domains/config/reducer.js +2 -2
  18. package/src/javascripts/domains/forms/reducer.js +1 -1
  19. package/src/javascripts/domains/i18n/reducer.js +1 -1
  20. package/src/javascripts/domains/interrupt/reducer.js +1 -1
  21. package/src/javascripts/domains/store/state-reducer.js +1 -0
  22. package/src/javascripts/domains/translations/components/chat-status.js +10 -9
  23. package/src/javascripts/domains/translations/components/options-button.js +8 -3
  24. package/src/javascripts/domains/translations/components/options-dialog/form.js +6 -5
  25. package/src/javascripts/domains/translations/components/options-dialog/index.js +5 -2
  26. package/src/javascripts/domains/translations/hooks.js +15 -1
  27. package/src/javascripts/domains/translations/middleware.js +5 -2
  28. package/src/javascripts/domains/translations/reducer.js +2 -2
  29. package/src/javascripts/domains/visibility/actions.js +1 -1
  30. package/src/javascripts/index.js +1 -0
  31. package/src/javascripts/lib/debug.js +1 -0
  32. package/src/javascripts/lib/external-api/index.js +29 -4
  33. package/src/javascripts/style-guide/components/app.js +1 -1
  34. package/src/javascripts/style-guide/components/static-core.js +1 -4
  35. package/src/javascripts/style-guide/states.js +25 -0
  36. package/src/javascripts/ui/components/conversation/conversation.js +11 -12
  37. package/src/javascripts/ui/components/conversation/event/card-component.js +4 -1
  38. package/src/javascripts/ui/components/conversation/event/carousel-component/index.js +1 -1
  39. package/src/javascripts/ui/components/conversation/event/conversation-suggestions.js +18 -10
  40. package/src/javascripts/ui/components/conversation/event/cta.js +1 -1
  41. package/src/javascripts/ui/components/conversation/event/divider/variants/new-translation.js +4 -9
  42. package/src/javascripts/ui/components/conversation/event/image.js +12 -4
  43. package/src/javascripts/ui/components/conversation/event/text.js +2 -2
  44. package/src/javascripts/ui/components/conversation/loader.js +1 -1
  45. package/src/javascripts/ui/components/conversation/message-container.js +1 -1
  46. package/src/javascripts/ui/components/core/seamly-activity-monitor.js +1 -1
  47. package/src/javascripts/ui/components/core/seamly-core.js +2 -2
  48. package/src/javascripts/ui/components/core/seamly-file-upload.js +1 -1
  49. package/src/javascripts/ui/components/core/seamly-instance-functions-loader.js +6 -2
  50. package/src/javascripts/ui/components/core/seamly-live-region.js +2 -2
  51. package/src/javascripts/ui/components/entry/entry-container.js +2 -2
  52. package/src/javascripts/ui/components/entry/text-entry/hooks.js +1 -4
  53. package/src/javascripts/ui/components/entry/text-entry/text-entry-form.js +7 -1
  54. package/src/javascripts/ui/components/form-controls/select.js +1 -1
  55. package/src/javascripts/ui/components/layout/agent-info.js +1 -1
  56. package/src/javascripts/ui/components/layout/header.js +1 -1
  57. package/src/javascripts/ui/components/options/options-button.js +1 -1
  58. package/src/javascripts/ui/components/options/options.js +1 -1
  59. package/src/javascripts/ui/components/options/transcript/index.js +1 -1
  60. package/src/javascripts/ui/components/suggestions/suggestions-item.js +1 -1
  61. package/src/javascripts/ui/components/view/index.js +2 -2
  62. package/src/javascripts/ui/components/warnings/resume-conversation-prompt.js +1 -1
  63. package/src/javascripts/ui/components/widgets/lightbox.js +1 -1
  64. package/src/javascripts/ui/hooks/file-upload-hooks.js +2 -3
  65. package/src/javascripts/ui/hooks/focus-helper-hooks.js +2 -2
  66. package/src/javascripts/ui/hooks/seamly-entry-hooks.js +1 -1
  67. package/src/javascripts/ui/hooks/seamly-option-hooks.js +1 -1
  68. package/src/javascripts/ui/hooks/seamly-state-hooks.js +3 -0
  69. package/src/javascripts/ui/hooks/use-seamly-chat.js +2 -2
  70. package/src/javascripts/ui/hooks/use-seamly-commands.js +7 -7
  71. package/src/javascripts/ui/hooks/use-seamly-idle-detach-countdown.js +4 -4
  72. package/src/javascripts/ui/hooks/use-seamly-resume-conversation-prompt.js +2 -2
  73. package/src/javascripts/ui/hooks/use-single-file-upload.js +1 -1
  74. package/src/javascripts/ui/utils/general-utils.js +1 -1
  75. package/src/javascripts/ui/utils/seamly-utils.js +9 -1
  76. package/src/stylesheets/1-settings/_animations.scss +1 -1
  77. package/src/stylesheets/1-settings/_config.scss +17 -2
  78. package/src/stylesheets/2-tools/_functions.scss +4 -4
  79. package/src/stylesheets/2-tools/_mixins.scss +16 -14
  80. package/src/stylesheets/3-chat/_chat.scss +1 -1
  81. package/src/stylesheets/5-components/_choice-prompt.scss +1 -1
  82. package/src/stylesheets/5-components/_collapse-button.scss +1 -1
  83. package/src/stylesheets/5-components/_input.scss +1 -1
  84. package/src/stylesheets/5-components/_loader.scss +2 -2
  85. package/src/stylesheets/5-components/_message-carousel.scss +1 -1
  86. package/src/stylesheets/5-components/_message-count.scss +6 -3
  87. package/src/stylesheets/5-components/_message.scss +1 -2
  88. package/src/stylesheets/5-components/_modal.scss +1 -1
  89. package/src/stylesheets/5-components/_options.scss +3 -3
  90. package/src/stylesheets/5-components/_suggestions.scss +4 -5
  91. package/src/stylesheets/5-components/_upload.scss +1 -1
  92. package/src/stylesheets/7-deprecated/1-settings/_animations.scss +1 -1
  93. package/src/stylesheets/7-deprecated/1-settings/_config.scss +10 -7
  94. package/src/stylesheets/7-deprecated/2-tools/_functions.scss +2 -2
  95. package/src/stylesheets/7-deprecated/2-tools/_mixins.scss +6 -4
  96. package/src/stylesheets/7-deprecated/3-app/_app.scss +2 -2
  97. package/src/stylesheets/7-deprecated/4-base/_formelements.scss +1 -0
  98. package/src/stylesheets/7-deprecated/5-components/_chat-status.scss +1 -1
  99. package/src/stylesheets/7-deprecated/5-components/_collapse-button.scss +1 -1
  100. package/src/stylesheets/7-deprecated/5-components/_disclaimer.scss +1 -1
  101. package/src/stylesheets/7-deprecated/5-components/_input.scss +2 -1
  102. package/src/stylesheets/7-deprecated/5-components/_loader.scss +2 -2
  103. package/src/stylesheets/7-deprecated/5-components/_message-count.scss +1 -1
  104. package/src/stylesheets/7-deprecated/5-components/_message.scss +3 -4
  105. package/src/stylesheets/7-deprecated/5-components/_modal.scss +1 -1
  106. package/src/stylesheets/7-deprecated/5-components/_options.scss +2 -2
  107. package/src/stylesheets/7-deprecated/5-components/_upload.scss +1 -1
@@ -1,9 +1,8 @@
1
1
  import { useCallback, useContext } from 'preact/hooks'
2
- import { useSeamlyStateContext } from './seamly-state-hooks'
3
- import useSeamlyDispatchContext from './use-seamly-dispatch'
4
2
  import SeamlyFileUploadContext from 'ui/components/core/seamly-file-upload-context'
5
-
6
3
  import { seamlyActions } from 'ui/utils/seamly-utils'
4
+ import { useSeamlyStateContext } from './seamly-state-hooks'
5
+ import useSeamlyDispatchContext from './use-seamly-dispatch'
7
6
 
8
7
  const { CLEAR_ALL_UPLOADS } = seamlyActions
9
8
 
@@ -1,11 +1,11 @@
1
1
  import { useCallback, useRef } from 'preact/hooks'
2
- import { useSeamlyStateContext, useSkiplink } from './seamly-state-hooks'
3
2
  import {
4
3
  focusElement,
5
4
  runIfElementContainsOrHasFocus,
6
5
  } from 'ui/utils/general-utils'
7
- import useSeamlyDispatchContext from './use-seamly-dispatch'
8
6
  import { seamlyActions } from 'ui/utils/seamly-utils'
7
+ import { useSeamlyStateContext, useSkiplink } from './seamly-state-hooks'
8
+ import useSeamlyDispatchContext from './use-seamly-dispatch'
9
9
 
10
10
  const { SET_SEAMLY_CONTAINER_ELEMENT } = seamlyActions
11
11
 
@@ -1,10 +1,10 @@
1
1
  import { useRef, useCallback, useEffect } from 'preact/hooks'
2
2
  import { seamlyActions, actionTypes } from 'ui/utils/seamly-utils'
3
+ import { typingTimeout } from 'config'
3
4
  import { useSeamlyStateContext } from './seamly-state-hooks'
4
5
  import useSeamlyDispatchContext from './use-seamly-dispatch'
5
6
  import { useSeamlyOptions } from './seamly-option-hooks'
6
7
  import useSeamlyCommands from './use-seamly-commands'
7
- import { typingTimeout } from 'config'
8
8
 
9
9
  const {
10
10
  SET_BLOCK_AUTO_ENTRY_SWITCH,
@@ -1,10 +1,10 @@
1
1
  import { useCallback } from 'preact/hooks'
2
2
  import { useI18n } from 'domains/i18n'
3
+ import { seamlyActions } from 'ui/utils/seamly-utils'
3
4
  import { useSeamlyStateContext } from './seamly-state-hooks'
4
5
  import useSeamlyDispatchContext from './use-seamly-dispatch'
5
6
  import { useSeamlyObjectStore } from './seamly-api-hooks'
6
7
  import { useElementFocusingById } from './focus-helper-hooks'
7
- import { seamlyActions } from 'ui/utils/seamly-utils'
8
8
 
9
9
  const {
10
10
  SET_USER_SELECTED_OPTION,
@@ -71,6 +71,9 @@ export const useSeamlyHeaderData = () => useSeamlyStateContext().headerTitles
71
71
 
72
72
  export const useSeamlyUnreadCount = () => useSeamlyStateContext().unreadEvents
73
73
 
74
+ export const useLoadedImageEventIds = () =>
75
+ useSeamlyStateContext().loadedImageEventIds
76
+
74
77
  export const useSkiplink = () => useSeamlyStateContext().skiplinkTargetId
75
78
 
76
79
  export const useSeamlyParticipant = (participantId) =>
@@ -1,12 +1,12 @@
1
1
  import { useEffect, useRef } from 'preact/hooks'
2
2
  import { useI18n } from 'domains/i18n'
3
+ import { seamlyActions } from 'ui/utils/seamly-utils'
4
+ import { useVisibility, visibilityStates } from 'domains/visibility'
3
5
  import useSeamlyDispatchContext from './use-seamly-dispatch'
4
6
  import { useEvents } from './seamly-state-hooks'
5
7
  import useSeamlyCommands from './use-seamly-commands'
6
8
  import { useSeamlyHasConversation } from './seamly-api-hooks'
7
9
  import { useLiveRegion } from './live-region-hooks'
8
- import { seamlyActions } from 'ui/utils/seamly-utils'
9
- import { useVisibility, visibilityStates } from 'domains/visibility'
10
10
  import { useConfig } from '../../domains/config'
11
11
 
12
12
  const { SET_IS_LOADING } = seamlyActions
@@ -1,20 +1,20 @@
1
1
  import { useCallback, useContext } from 'preact/hooks'
2
- import {
3
- useSeamlyApiContext,
4
- useSeamlyHasConversation,
5
- } from './seamly-api-hooks'
6
- import { useSeamlyUnreadCount } from './seamly-state-hooks'
7
- import useSeamlyDispatchContext from './use-seamly-dispatch'
8
2
  import { SeamlyEventBusContext } from 'ui/components/core/seamly-api-context'
9
3
  import { randomId } from 'lib/id'
10
4
  import { userParticipantId } from 'config'
11
5
  import { actionTypes, seamlyActions } from 'ui/utils/seamly-utils'
12
- import { useStableCallback } from './utility-hooks'
13
6
  import { Actions as InterruptActions } from 'domains/interrupt'
14
7
  import { useConfig } from 'domains/config'
15
8
  import * as AppActions from 'domains/app/actions'
16
9
  import { useUserHasResponded } from 'domains/app/hooks'
17
10
  import { useVisibility } from 'domains/visibility'
11
+ import { useStableCallback } from './utility-hooks'
12
+ import useSeamlyDispatchContext from './use-seamly-dispatch'
13
+ import { useSeamlyUnreadCount } from './seamly-state-hooks'
14
+ import {
15
+ useSeamlyApiContext,
16
+ useSeamlyHasConversation,
17
+ } from './seamly-api-hooks'
18
18
 
19
19
  const { ADD_EVENT, SET_INITIAL_STATE } = seamlyActions
20
20
 
@@ -1,9 +1,5 @@
1
1
  import { useCallback, useRef } from 'preact/hooks'
2
- import useSeamlyDispatchContext from './use-seamly-dispatch'
3
- import { useSeamlyStateContext } from './seamly-state-hooks'
4
- import useSeamlyCommands from './use-seamly-commands'
5
2
  import { useI18n } from 'domains/i18n'
6
- import { useLiveRegion } from './live-region-hooks'
7
3
  import {
8
4
  getTimeFromSeconds,
9
5
  millisecondsToSeconds,
@@ -11,6 +7,10 @@ import {
11
7
  import { actionTypes, seamlyActions } from 'ui/utils/seamly-utils'
12
8
  import { screenReaderDebounceDelaySeconds } from 'config'
13
9
  import { useVisibility } from 'domains/visibility'
10
+ import { useLiveRegion } from './live-region-hooks'
11
+ import useSeamlyCommands from './use-seamly-commands'
12
+ import { useSeamlyStateContext } from './seamly-state-hooks'
13
+ import useSeamlyDispatchContext from './use-seamly-dispatch'
14
14
 
15
15
  const {
16
16
  CLEAR_IDLE_DETACH_COUNTDOWN,
@@ -1,9 +1,9 @@
1
+ import { useI18n } from 'domains/i18n'
2
+ import { actionTypes, dismissTypes, seamlyActions } from 'ui/utils/seamly-utils'
1
3
  import useSeamlyDispatchContext from './use-seamly-dispatch'
2
4
  import { useSeamlyStateContext } from './seamly-state-hooks'
3
5
  import useSeamlyCommands from './use-seamly-commands'
4
- import { useI18n } from 'domains/i18n'
5
6
  import { useLiveRegion } from './live-region-hooks'
6
- import { actionTypes, dismissTypes, seamlyActions } from 'ui/utils/seamly-utils'
7
7
 
8
8
  const { CLEAR_RESUME_CONVERSATION_PROMPT } = seamlyActions
9
9
 
@@ -1,6 +1,6 @@
1
- import { useFileUploads } from './seamly-hooks'
2
1
  import { Selectors } from 'domains/forms'
3
2
  import { useSelectorWithProps } from 'domains/redux'
3
+ import { useFileUploads } from './seamly-hooks'
4
4
 
5
5
  const useSingleFileUpload = (formId, name) => {
6
6
  const fileList = useSelectorWithProps(
@@ -103,7 +103,7 @@ export const formatBytes = (bytes, decimals = 2) => {
103
103
 
104
104
  const i = Math.floor(Math.log(bytes) / Math.log(k))
105
105
 
106
- return parseFloat((bytes / Math.pow(k, i)).toFixed(dm)) + ' ' + sizes[i]
106
+ return parseFloat((bytes / k ** i).toFixed(dm)) + ' ' + sizes[i]
107
107
  }
108
108
 
109
109
  export const getUrlParams = () => {
@@ -42,6 +42,7 @@ export const actionTypes = {
42
42
  interactivityUpdate: 'interactivity_update',
43
43
  dismiss: 'dismiss',
44
44
  sendTranscript: 'send_transcript',
45
+ setTopic: 'set_topic',
45
46
  setTranslation: 'set_translation',
46
47
  clickCta: 'click_cta',
47
48
  clickCard: 'click_card',
@@ -72,6 +73,7 @@ export const seamlyActions = {
72
73
  CLEAR_EVENTS: 'CLEAR_EVENTS',
73
74
  SET_HISTORY: 'SET_HISTORY',
74
75
  SET_EVENTS_READ: 'SET_EVENTS_READ',
76
+ SET_LOADED_IMAGE_EVENT_IDS: 'SET_LOADED_IMAGE_EVENT_IDS',
75
77
  ACK_EVENT: 'ACK_EVENT',
76
78
  SET_IS_LOADING: 'SET_IS_LOADING',
77
79
  CLEAR_PARTICIPANTS: 'CLEAR_PARTICIPANTS',
@@ -120,6 +122,7 @@ const {
120
122
  CLEAR_EVENTS,
121
123
  SET_HISTORY,
122
124
  SET_EVENTS_READ,
125
+ SET_LOADED_IMAGE_EVENT_IDS,
123
126
  ACK_EVENT,
124
127
  SET_IS_LOADING,
125
128
  CLEAR_PARTICIPANTS,
@@ -383,7 +386,7 @@ export const seamlyStateReducer = (state, action) => {
383
386
  : state
384
387
 
385
388
  case CLEAR_EVENTS:
386
- return { ...state, unreadEvents: 0, events: [] }
389
+ return { ...state, unreadEvents: 0, loadedImageEventIds: [], events: [] }
387
390
  case SET_EVENTS_READ:
388
391
  return {
389
392
  ...state,
@@ -403,6 +406,11 @@ export const seamlyStateReducer = (state, action) => {
403
406
  return event
404
407
  }),
405
408
  }
409
+ case SET_LOADED_IMAGE_EVENT_IDS:
410
+ return {
411
+ ...state,
412
+ loadedImageEventIds: [...state.loadedImageEventIds, action.eventId],
413
+ }
406
414
  case SET_HISTORY:
407
415
  const {
408
416
  events: history,
@@ -4,7 +4,7 @@
4
4
  75%,
5
5
  100% {
6
6
  transform: scaleY(0.45);
7
- border-radius: 50% 50%;
7
+ border-radius: 50%;
8
8
  }
9
9
 
10
10
  37.5% {
@@ -22,23 +22,28 @@ $brand3: #4a48c1 !default; // 'tertiary'
22
22
  $interaction: $brand3 !default;
23
23
  $interaction-dark: $brand2 !default;
24
24
 
25
+ // NEGATIVE
25
26
  $negative: #db1639 !default;
26
27
  $negative-dark: #ad001f !default;
27
28
 
29
+ // GREYS
28
30
  $grey-a: #eff3f6 !default;
29
31
  $grey-b: #dee3e5 !default;
30
32
  $grey-c: #a3b4bf !default;
31
33
  $grey-d: #6a7f8c !default;
32
34
  $grey-e: #3d4166 !default;
33
35
 
36
+ // DISABLED
34
37
  $disabled: #5e727b; // 5:1
35
38
 
39
+ // BLACK & WHITE
36
40
  $white: #fff !default;
37
41
  $black: #000 !default;
38
42
 
39
43
  // BACKGROUND COLORS
40
44
  $chat-bg: $white !default;
41
45
 
46
+ // THREADLIST
42
47
  $threadlist-agent-text-bgcolor: $grey-a;
43
48
  $threadlist-user-text-bgcolor: $brand2;
44
49
 
@@ -51,11 +56,13 @@ $fontsize-large: 18px !default;
51
56
  $fontsize-xlarge: 21px !default;
52
57
  $fontsize-xxlarge: 24px !default;
53
58
 
59
+ // FONT-WEIGHTS
54
60
  $fontweight-light: 300 !default;
55
61
  $fontweight-regular: 400 !default;
56
62
  $fontweight-semibold: 600 !default;
57
63
  $fontweight-bold: 700 !default;
58
64
 
65
+ // FONT-FAMILY
59
66
  $fontfamily-default: arial, helvetica, sans-serif !default;
60
67
 
61
68
  // SPACER
@@ -73,34 +80,42 @@ $borderradius-large: $borderradius * 2 !default;
73
80
  $chat-window-width: $spacer * 18 !default;
74
81
  $chat-window-height: $spacer * 36 !default;
75
82
 
83
+ // CHAT INLINE
76
84
  $chat-inline-height: $spacer * 32 !default;
77
85
  $chat-inline-maxheight: 90vh !default;
78
86
 
87
+ // CHAT SUGGESTION
79
88
  $chat-suggestions-maxheight: $spacer * 16 !default;
80
89
 
90
+ // VIEWPORT SIZES
81
91
  $viewport-width: 100vw !default;
82
92
  $viewport-height: 100vh !default;
83
93
 
94
+ // ICON SIZES
84
95
  $iconsize-small: 16px !default;
85
96
  $iconsize: 24px !default;
86
97
  $iconsize-large: 32px !default;
87
98
 
99
+ // BUTTON SIZED
88
100
  $buttonsize-small: 32px !default;
89
101
  $buttonsize: 40px !default;
90
102
 
103
+ // AVATAR SIZES
91
104
  $avatarsize: 32px !default;
92
105
  $avatarsize-large: 48px !default;
93
106
 
107
+ // DIVIDER
94
108
  $dividersize: 32px !default;
95
109
 
110
+ // MESSAGE COUNT
96
111
  $messagecountsize: $spacer * 1.25;
97
112
 
98
113
  // Z-INDEX
99
114
  $z-index: 1 !default;
100
115
 
101
116
  // BOX SHADOWS
102
- $boxshadow: 0 $spacer * 0.25 $spacer * 1.5 hsla(204, 26%, 28%, 0.15),
103
- 0 $spacer * 0.15 $spacer * 0.5 hsla(204, 26%, 28%, 0.2) !default;
117
+ $boxshadow: 0 $spacer * 0.25 $spacer * 1.5 hsl(204deg 26% 28% / 15%),
118
+ 0 $spacer * 0.15 $spacer * 0.5 hsl(204deg 26% 28% / 20%) !default;
104
119
  $boxshadow-soft: 0 0 $spacer 0 rgba($black, 0.1) !default;
105
120
 
106
121
  // TRANSITIONS
@@ -1,15 +1,15 @@
1
- // SET TEXT COLOR
1
+ /** SET TEXT COLOR */
2
2
  @function set-text-color($color) {
3
- @if (lightness($color) > 66.66) {
3
+ @if lightness($color) > 66.66 {
4
4
  @return $grey-e;
5
5
  } @else {
6
6
  @return $white;
7
7
  }
8
8
  }
9
9
 
10
- // SET BORDER COLOR
10
+ /** SET BORDER COLOR */
11
11
  @function set-border-color($color) {
12
- @if (lightness($color) > 66.66) {
12
+ @if lightness($color) > 66.66 {
13
13
  @return $grey-c;
14
14
  } @else {
15
15
  @return $white;
@@ -1,5 +1,5 @@
1
1
  /* stylelint-disable selector-max-universal */
2
- // BOX-SIZING
2
+ /** BOX-SIZING */
3
3
  @mixin boxSizing($value: border-box) {
4
4
  box-sizing: $value;
5
5
 
@@ -10,14 +10,15 @@
10
10
  }
11
11
  }
12
12
 
13
- // RESPONSIVE APP SIZING
13
+ /** RESPONSIVE APP SIZING */
14
14
  @mixin responsiveAppSizing() {
15
15
  max-width: calc(#{$viewport-width} - #{$spacer * 2});
16
16
  max-height: calc(#{$viewport-height * 0.85} - #{$spacer * 2});
17
17
 
18
18
  @include media('>phablet-l') {
19
19
  max-height: calc(#{$viewport-height} - #{$spacer * 2});
20
- // iOS Safari needs a bit more space
20
+
21
+ /** iOS Safari needs a bit more space */
21
22
  @supports (-webkit-overflow-scrolling: touch) {
22
23
  max-height: calc(#{$viewport-height * 0.9} - #{$spacer * 2});
23
24
  }
@@ -27,39 +28,40 @@
27
28
  right: $spacer;
28
29
  bottom: $spacer;
29
30
  max-height: calc(#{$viewport-height} - #{$spacer * 2});
30
- // iOS Safari needs a bit more space
31
+
32
+ /** iOS Safari needs a bit more space */
31
33
  @supports (-webkit-overflow-scrolling: touch) {
32
34
  max-height: calc(#{$viewport-height * 0.9} - #{$spacer * 2});
33
35
  }
34
36
  }
35
37
  }
36
38
 
37
- // UNLIST
39
+ /** UNLIST */
38
40
  @mixin unList() {
39
41
  margin: 0;
40
42
  padding: 0;
41
43
  list-style: none;
42
44
  }
43
45
 
44
- // STYLE PLACEHOLDER
46
+ /** STYLE PLACEHOLDER */
45
47
  @mixin stylePlaceholder() {
46
- &::-webkit-input-placeholder {
47
- // Chrome/Opera/Safari
48
+ &::input-placeholder {
49
+ /** Chrome/Opera/Safari */
48
50
  @content;
49
51
  }
50
52
 
51
- &::-moz-placeholder {
52
- // Firefox 19+
53
+ &::placeholder {
54
+ /** Firefox 19+ */
53
55
  @content;
54
56
  }
55
57
 
56
- &:-ms-input-placeholder {
57
- // IE 10+
58
+ &:input-placeholder {
59
+ /** IE 10+ */
58
60
  @content;
59
61
  }
60
62
 
61
- &:-moz-placeholder {
62
- // Firefox 18-
63
+ &:placeholder {
64
+ /** Firefox 18- */
63
65
  @content;
64
66
  }
65
67
  }
@@ -27,7 +27,7 @@
27
27
  }
28
28
 
29
29
  .#{$n}-chat--layout-window {
30
- @include responsiveAppSizing();
30
+ @include responsiveAppSizing;
31
31
 
32
32
  display: none;
33
33
  position: fixed;
@@ -50,7 +50,7 @@
50
50
  }
51
51
 
52
52
  .#{$n}-button--choose-again .#{$n}-icon path {
53
- fill: currentColor;
53
+ fill: currentcolor;
54
54
  }
55
55
 
56
56
  .#{$n}-button--choose-again[aria-expanded='true'] .#{$n}-icon {
@@ -10,7 +10,7 @@
10
10
  height: $buttonsize;
11
11
  padding: 0;
12
12
  border: 0 none;
13
- border-radius: 50% 50%;
13
+ border-radius: 50%;
14
14
  background-color: $white;
15
15
  box-shadow: $boxshadow;
16
16
  }
@@ -26,7 +26,7 @@
26
26
  font-size: $fontsize-default;
27
27
  resize: none;
28
28
 
29
- @include stylePlaceholder() {
29
+ @include stylePlaceholder {
30
30
  overflow: visible;
31
31
  color: $grey-c;
32
32
  line-height: $spacer;
@@ -24,8 +24,8 @@ $loader-quarter-duration: $loader-animation-duration * 0.2;
24
24
  animation-iteration-count: infinite;
25
25
  animation-direction: normal;
26
26
  animation-fill-mode: forwards;
27
- border-radius: 50% 50%;
28
- background-color: currentColor;
27
+ border-radius: 50%;
28
+ background-color: currentcolor;
29
29
 
30
30
  &.#{$n}-one {
31
31
  animation-delay: $loader-quarter-duration;
@@ -131,7 +131,7 @@
131
131
  height: $iconsize-small * 0.6;
132
132
  transform: translate(-50%, -50%);
133
133
  transform-origin: 50% 50%;
134
- border-radius: 50% 50%;
134
+ border-radius: 50%;
135
135
  background-color: $grey-c;
136
136
  }
137
137
  }
@@ -10,8 +10,10 @@
10
10
  height: $messagecountsize;
11
11
  transform: scale(1);
12
12
  transform-origin: 50% 50%;
13
- transition: transform 0.3s 0.5s cubic-bezier(0.175, 0.885, 0.32, 1.275);
14
- border-radius: 50% 50%;
13
+ transition: transform 0.3s 0.5s cubic-bezier(0.175, 0.885, 0.32, 1.275),
14
+ opacity $transition;
15
+ border-radius: 50%;
16
+ opacity: 1;
15
17
  background-color: $negative;
16
18
  color: $white;
17
19
  font-size: $fontsize-small;
@@ -20,6 +22,7 @@
20
22
 
21
23
  &:empty {
22
24
  transform: scale(0);
23
- transition: transform $transition;
25
+ transition: transform $transition, opacity $transition;
26
+ opacity: 0;
24
27
  }
25
28
  }
@@ -1,7 +1,6 @@
1
1
  .#{$n}-message {
2
2
  display: flex;
3
- flex-direction: row;
4
- flex-wrap: wrap;
3
+ flex-flow: row wrap;
5
4
  width: 80%;
6
5
  }
7
6
 
@@ -97,7 +97,7 @@
97
97
  height: $buttonsize;
98
98
  padding: 0;
99
99
  border: 0 none;
100
- border-radius: 50% 50%;
100
+ border-radius: 50%;
101
101
  background-color: $white;
102
102
  color: transparent;
103
103
  font-size: 0;
@@ -34,7 +34,7 @@
34
34
  }
35
35
 
36
36
  .#{$n}-chat__options__button .#{$n}-icon path {
37
- fill: currentColor;
37
+ fill: currentcolor;
38
38
  }
39
39
 
40
40
  // CONTEXT MENU
@@ -174,7 +174,7 @@
174
174
  }
175
175
 
176
176
  .#{$n}-options__close .#{$n}-icon path {
177
- fill: currentColor;
177
+ fill: currentcolor;
178
178
  }
179
179
 
180
180
  .#{$n}-options__form {
@@ -232,7 +232,7 @@
232
232
  border: $thin-border solid $grey-b;
233
233
  }
234
234
 
235
- @include stylePlaceholder() {
235
+ @include stylePlaceholder {
236
236
  overflow: visible;
237
237
  color: $grey-c;
238
238
  line-height: $spacer;
@@ -63,26 +63,25 @@
63
63
 
64
64
  .#{$n}-chat--layout-inline > .#{$n}-suggestions .#{$n}-suggestions__list {
65
65
  flex: 1 1 100%;
66
- flex-direction: column;
67
- flex-wrap: nowrap;
66
+ flex-flow: column nowrap;
68
67
  height: 100%;
69
68
  max-height: 100%;
70
69
  overflow-y: auto;
71
70
  }
72
71
 
73
- .#{$n}-suggestions-item {
72
+ .#{$n}-suggestions__item {
74
73
  display: block;
75
74
  flex: 0 0 auto;
76
75
  max-width: 100%;
77
76
  margin: 0 $spacer * 0.25 $spacer * 0.25 0;
78
77
  }
79
78
 
80
- .#{$n}-chat--layout-inline > .#{$n}-suggestions .#{$n}-suggestions-item {
79
+ .#{$n}-chat--layout-inline > .#{$n}-suggestions .#{$n}-suggestions__item {
81
80
  width: 100%;
82
81
  margin-right: 0;
83
82
  }
84
83
 
85
- .#{$n}-suggestions-item .#{$n}-icon {
84
+ .#{$n}-suggestions__item .#{$n}-icon {
86
85
  display: none;
87
86
  }
88
87
 
@@ -116,7 +116,7 @@
116
116
  }
117
117
 
118
118
  .#{$n}-upload__label .#{$n}-icon path {
119
- fill: currentColor;
119
+ fill: currentcolor;
120
120
  }
121
121
 
122
122
  .#{$n}-upload__label--text {
@@ -8,7 +8,7 @@
8
8
  75%,
9
9
  100% {
10
10
  transform: scaleY(0.45);
11
- border-radius: 50% 50%;
11
+ border-radius: 50%;
12
12
  }
13
13
 
14
14
  37.5% {
@@ -21,22 +21,28 @@ $brand3: #4a48c1 !default; // 'tertiary'
21
21
  // UI COLORS
22
22
  $interaction: $brand3 !default;
23
23
 
24
+ // Highlight color
24
25
  $highlight: #ffc700 !default;
25
26
 
27
+ // Positive colors
26
28
  $positive: #00875e !default;
27
29
  $positive-light: #19b183 !default;
28
30
 
31
+ // Negative colors
29
32
  $negative: #db1639 !default;
30
33
  $negative-dark: #ad001f !default;
31
34
 
35
+ // Greys
32
36
  $grey-a: #eff3f6 !default;
33
37
  $grey-b: #dee3e5 !default;
34
38
  $grey-c: #a3b4bf !default;
35
39
  $grey-d: #6a7f8c !default;
36
40
  $grey-e: #3d4166 !default;
37
41
 
42
+ // Disabled color
38
43
  $disabled: #5e727b; // 5:1
39
44
 
45
+ // BLACK & WHITE
40
46
  $white: #fff !default;
41
47
  $black: #000 !default;
42
48
 
@@ -51,8 +57,10 @@ $fontsize-default: 16px !default;
51
57
  $fontsize-large: 18px !default;
52
58
  $fontsize-xlarge: 21px !default;
53
59
 
60
+ // FONT-WEIGHT
54
61
  $fontweight-bold: 700 !default;
55
62
 
63
+ // FONT-FAMILY
56
64
  $fontfamily-default: arial, helvetica, sans-serif !default;
57
65
 
58
66
  // SPACER
@@ -69,26 +77,21 @@ $borderradius-small: $borderradius * 0.5 !default;
69
77
  // DIMENSIONS
70
78
  $app-initial-width: 195px !default;
71
79
  $app-started-width: 375px !default;
72
-
73
80
  $app-full-height: 720px !default;
74
81
  $app-collapsed-height: 54px !default;
75
-
76
82
  $app-inline-height: 480px !default;
77
-
78
83
  $post-full-height: 170px !default;
79
84
  $post-collapsed-height: 65px !default;
80
-
81
85
  $viewport-width: 100vw !default;
82
86
  $viewport-height: 100vh !default;
83
-
84
87
  $badge-touch-size: 32px !default;
85
88
 
86
89
  // Z-INDEX
87
90
  $z-index: 1 !default;
88
91
 
89
92
  // BOX SHADOWS
90
- $boxshadow: 0 $spacer * 0.25 $spacer * 1.5 hsla(204, 26%, 28%, 0.15),
91
- 0 $spacer * 0.15 $spacer * 0.5 hsla(204, 26%, 28%, 0.2) !default;
93
+ $boxshadow: 0 $spacer * 0.25 $spacer * 1.5 hsl(204deg 26% 28% / 15%),
94
+ 0 $spacer * 0.15 $spacer * 0.5 hsl(204deg 26% 28% / 20%) !default;
92
95
  $boxshadow-soft: 0 0 $spacer 0 rgba($black, 0.1) !default;
93
96
 
94
97
  // TRANSITIONS