@seamly/web-ui 20.7.0 → 20.8.0-beta.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 (226) hide show
  1. package/build/dist/lib/hooks.js +1 -1
  2. package/build/dist/lib/hooks.min.js +1 -1
  3. package/build/dist/lib/index.debug.js +945 -790
  4. package/build/dist/lib/index.debug.min.js +1 -1
  5. package/build/dist/lib/index.debug.min.js.LICENSE.txt +187 -131
  6. package/build/dist/lib/index.js +24800 -19606
  7. package/build/dist/lib/index.min.js +1 -1
  8. package/build/dist/lib/index.min.js.LICENSE.txt +38 -4
  9. package/build/dist/lib/standalone.js +32920 -26742
  10. package/build/dist/lib/standalone.min.js +1 -1
  11. package/build/dist/lib/standalone.min.js.LICENSE.txt +39 -0
  12. package/build/dist/lib/storage.js +2 -2
  13. package/build/dist/lib/storage.min.js +1 -1
  14. package/build/dist/lib/style-guide.js +8780 -7907
  15. package/build/dist/lib/style-guide.min.js +2 -1
  16. package/build/dist/lib/style-guide.min.js.LICENSE.txt +38 -0
  17. package/build/dist/lib/styles.css +1 -1
  18. package/build/dist/lib/utils.js +1 -2
  19. package/build/dist/lib/utils.min.js +1 -1
  20. package/package.json +19 -9
  21. package/src/icons/avatar_agent-32.svg +7 -0
  22. package/src/icons/avatar_bot-32.svg +6 -1
  23. package/src/javascripts/api/index.js +1 -1
  24. package/src/javascripts/{config.js → config.ts} +3 -1
  25. package/src/javascripts/config.types.ts +96 -0
  26. package/src/javascripts/domains/app/actions.ts +83 -0
  27. package/src/javascripts/domains/app/app.types.ts +3 -0
  28. package/src/javascripts/domains/app/hooks.js +3 -5
  29. package/src/javascripts/domains/app/selectors.ts +6 -0
  30. package/src/javascripts/domains/app/slice.ts +30 -0
  31. package/src/javascripts/domains/config/actions.ts +45 -0
  32. package/src/javascripts/domains/config/hooks.ts +19 -0
  33. package/src/javascripts/domains/config/selectors.ts +24 -0
  34. package/src/javascripts/domains/config/slice.ts +113 -0
  35. package/src/javascripts/domains/errors/index.js +13 -9
  36. package/src/javascripts/domains/forms/context.ts +14 -0
  37. package/src/javascripts/domains/forms/forms.types.ts +24 -0
  38. package/src/javascripts/domains/forms/{hooks.js → hooks.ts} +23 -26
  39. package/src/javascripts/domains/forms/{provider.js → provider.tsx} +20 -14
  40. package/src/javascripts/domains/forms/{selectors.js → selectors.ts} +7 -8
  41. package/src/javascripts/domains/forms/slice.ts +84 -0
  42. package/src/javascripts/domains/forms/utils.ts +15 -0
  43. package/src/javascripts/domains/i18n/actions.ts +24 -0
  44. package/src/javascripts/domains/i18n/{hooks.js → hooks.ts} +2 -2
  45. package/src/javascripts/domains/i18n/i18n.types.ts +6 -0
  46. package/src/javascripts/domains/i18n/selectors.ts +16 -0
  47. package/src/javascripts/domains/i18n/{reducer.js → slice.ts} +40 -37
  48. package/src/javascripts/domains/interrupt/{hooks.js → hooks.ts} +2 -2
  49. package/src/javascripts/domains/interrupt/{middleware.js → middleware.ts} +11 -8
  50. package/src/javascripts/domains/interrupt/selectors.ts +6 -0
  51. package/src/javascripts/domains/interrupt/slice.ts +40 -0
  52. package/src/javascripts/domains/options/middleware.js +9 -6
  53. package/src/javascripts/domains/redux/redux.types.ts +11 -0
  54. package/src/javascripts/domains/store/index.ts +53 -0
  55. package/src/javascripts/domains/store/slice.ts +642 -0
  56. package/src/javascripts/domains/store/store.types.ts +146 -0
  57. package/src/javascripts/domains/translations/components/chat-status.js +2 -2
  58. package/src/javascripts/domains/translations/components/options-button.js +1 -1
  59. package/src/javascripts/domains/translations/components/options-dialog/form.js +5 -5
  60. package/src/javascripts/domains/translations/components/options-dialog/index.js +2 -2
  61. package/src/javascripts/domains/translations/hooks.ts +114 -0
  62. package/src/javascripts/domains/translations/middleware.js +29 -27
  63. package/src/javascripts/domains/translations/selectors.ts +12 -0
  64. package/src/javascripts/domains/translations/slice.ts +120 -0
  65. package/src/javascripts/domains/translations/translations.types.ts +19 -0
  66. package/src/javascripts/domains/visibility/{actions.js → actions.ts} +25 -19
  67. package/src/javascripts/domains/visibility/{hooks.js → hooks.ts} +13 -10
  68. package/src/javascripts/domains/visibility/{selectors.js → selectors.ts} +3 -6
  69. package/src/javascripts/domains/visibility/slice.ts +38 -0
  70. package/src/javascripts/domains/visibility/utils.js +0 -9
  71. package/src/javascripts/domains/visibility/visibility.types.ts +6 -0
  72. package/src/javascripts/index.ts +92 -0
  73. package/src/javascripts/lib/engine/index.js +15 -11
  74. package/src/javascripts/lib/external-api/initialize-api.js +1 -1
  75. package/src/javascripts/lib/id.js +5 -8
  76. package/src/javascripts/lib/mutex.js +3 -1
  77. package/src/javascripts/lib/store/providers/cookie-storage.js +1 -1
  78. package/src/javascripts/lib/store/providers/session-storage.js +1 -1
  79. package/src/javascripts/package/hooks.js +2 -2
  80. package/src/javascripts/package/utils.js +0 -1
  81. package/src/javascripts/schema.ts +1448 -0
  82. package/src/javascripts/style-guide/components/app.js +6 -6
  83. package/src/javascripts/style-guide/components/static-core.js +87 -65
  84. package/src/javascripts/style-guide/components/view.js +4 -4
  85. package/src/javascripts/style-guide/state-helpers/index.js +5 -5
  86. package/src/javascripts/style-guide/states.js +67 -7
  87. package/src/javascripts/style-guide.ts +5 -0
  88. package/src/javascripts/ui/components/app-options/index.js +2 -4
  89. package/src/javascripts/ui/components/conversation/component-filter.js +1 -1
  90. package/src/javascripts/ui/components/conversation/conversation.js +11 -7
  91. package/src/javascripts/ui/components/conversation/event/card-message.js +2 -2
  92. package/src/javascripts/ui/components/conversation/event/carousel-component/components/controls.js +1 -1
  93. package/src/javascripts/ui/components/conversation/event/carousel-message/components/slide.js +1 -1
  94. package/src/javascripts/ui/components/conversation/event/carousel-message/index.js +2 -2
  95. package/src/javascripts/ui/components/conversation/event/choice-prompt.js +3 -3
  96. package/src/javascripts/ui/components/conversation/event/conversation-suggestions.js +19 -15
  97. package/src/javascripts/ui/components/conversation/event/cta.js +2 -2
  98. package/src/javascripts/ui/components/conversation/event/divider/variants/default.js +1 -1
  99. package/src/javascripts/ui/components/conversation/event/divider/variants/new-translation.js +44 -5
  100. package/src/javascripts/ui/components/conversation/event/event-participant.js +2 -2
  101. package/src/javascripts/ui/components/conversation/event/hooks/use-formatted-date.js +2 -2
  102. package/src/javascripts/ui/components/conversation/event/image-lightbox.js +1 -1
  103. package/src/javascripts/ui/components/conversation/event/image.js +6 -8
  104. package/src/javascripts/ui/components/conversation/event/participant.js +2 -2
  105. package/src/javascripts/ui/components/conversation/event/splash.js +4 -4
  106. package/src/javascripts/ui/components/conversation/event/text.js +2 -2
  107. package/src/javascripts/ui/components/conversation/event/translation.js +3 -3
  108. package/src/javascripts/ui/components/conversation/event/upload.js +3 -3
  109. package/src/javascripts/ui/components/conversation/event/video.js +2 -2
  110. package/src/javascripts/ui/components/conversation/message-container.js +4 -26
  111. package/src/javascripts/ui/components/core/seamly-api-context.js +1 -1
  112. package/src/javascripts/ui/components/core/seamly-core.js +15 -14
  113. package/src/javascripts/ui/components/core/seamly-event-subscriber.js +98 -92
  114. package/src/javascripts/ui/components/core/seamly-file-upload.js +20 -24
  115. package/src/javascripts/ui/components/core/seamly-initializer.js +1 -1
  116. package/src/javascripts/ui/components/core/seamly-instance-functions-loader.js +5 -4
  117. package/src/javascripts/ui/components/core/seamly-new-notifications.js +2 -2
  118. package/src/javascripts/ui/components/core/seamly-read-state.js +10 -17
  119. package/src/javascripts/ui/components/entry/deprecated-toggle-button.js +3 -3
  120. package/src/javascripts/ui/components/entry/entry-container.js +4 -6
  121. package/src/javascripts/ui/components/entry/text-entry/hooks.js +3 -3
  122. package/src/javascripts/ui/components/entry/text-entry/index.js +3 -2
  123. package/src/javascripts/ui/components/entry/text-entry/text-entry-form.js +6 -10
  124. package/src/javascripts/ui/components/entry/upload/file-upload-form.js +2 -2
  125. package/src/javascripts/ui/components/entry/upload/index.js +10 -9
  126. package/src/javascripts/ui/components/entry/upload-toggle.js +2 -2
  127. package/src/javascripts/ui/components/faq/faq.js +9 -7
  128. package/src/javascripts/ui/components/form-controls/file-input.js +1 -1
  129. package/src/javascripts/ui/components/form-controls/form.js +1 -1
  130. package/src/javascripts/ui/components/form-controls/input.js +1 -1
  131. package/src/javascripts/ui/components/form-controls/select.js +1 -1
  132. package/src/javascripts/ui/components/layout/agent-info.js +4 -4
  133. package/src/javascripts/ui/components/layout/chat-frame.js +3 -3
  134. package/src/javascripts/ui/components/layout/chat.js +11 -12
  135. package/src/javascripts/ui/components/layout/deprecated-app-frame.js +10 -9
  136. package/src/javascripts/ui/components/layout/header.js +1 -1
  137. package/src/javascripts/ui/components/layout/interrupt.js +23 -24
  138. package/src/javascripts/ui/components/layout/pre-chat-messages.js +11 -11
  139. package/src/javascripts/ui/components/layout/privacy-disclaimer.js +2 -2
  140. package/src/javascripts/ui/components/options/options-button.js +14 -10
  141. package/src/javascripts/ui/components/options/transcript/index.js +2 -2
  142. package/src/javascripts/ui/components/options/transcript/transcript-form.js +1 -1
  143. package/src/javascripts/ui/components/suggestions/index.js +14 -10
  144. package/src/javascripts/ui/components/view/deprecated-view.js +19 -16
  145. package/src/javascripts/ui/components/view/index.js +12 -12
  146. package/src/javascripts/ui/components/view/inline-view.js +2 -2
  147. package/src/javascripts/ui/components/view/window-view/collapse-button.js +3 -3
  148. package/src/javascripts/ui/components/view/window-view/index.js +13 -13
  149. package/src/javascripts/ui/components/view/window-view/window-open-button.js +13 -13
  150. package/src/javascripts/ui/components/warnings/idle-detach-warning.js +1 -1
  151. package/src/javascripts/ui/components/warnings/resume-conversation-prompt.js +1 -1
  152. package/src/javascripts/ui/components/widgets/lightbox.js +2 -2
  153. package/src/javascripts/ui/components/widgets/upload-progress.js +1 -1
  154. package/src/javascripts/ui/hooks/component-helper-hooks.js +1 -1
  155. package/src/javascripts/ui/hooks/file-upload-hooks.js +4 -6
  156. package/src/javascripts/ui/hooks/focus-helper-hooks.js +14 -12
  157. package/src/javascripts/ui/hooks/live-region-hooks.js +2 -0
  158. package/src/javascripts/ui/hooks/seamly-api-hooks.js +8 -3
  159. package/src/javascripts/ui/hooks/seamly-entry-hooks.js +28 -25
  160. package/src/javascripts/ui/hooks/seamly-hooks.js +25 -25
  161. package/src/javascripts/ui/hooks/seamly-option-hooks.js +17 -19
  162. package/src/javascripts/ui/hooks/seamly-state-hooks.js +20 -13
  163. package/src/javascripts/ui/hooks/use-seamly-chat.js +15 -25
  164. package/src/javascripts/ui/hooks/use-seamly-commands.js +46 -46
  165. package/src/javascripts/ui/hooks/use-seamly-idle-detach-countdown.js +22 -24
  166. package/src/javascripts/ui/hooks/use-seamly-resume-conversation-prompt.js +8 -9
  167. package/src/javascripts/ui/hooks/use-single-file-upload.js +4 -6
  168. package/src/javascripts/ui/hooks/utility-hooks.js +4 -4
  169. package/src/javascripts/ui/utils/form-utils.js +0 -145
  170. package/src/javascripts/ui/utils/general-utils.js +3 -4
  171. package/src/javascripts/ui/utils/seamly-utils.ts +73 -0
  172. package/src/stylesheets/5-components/_message-carousel.scss +10 -8
  173. package/webpack/config.common.js +16 -0
  174. package/webpack/config.dev.js +1 -0
  175. package/webpack/config.package.js +26 -5
  176. package/webpack/defaults.js +7 -2
  177. package/webpack/parts/babel-loader-browser-plugins.js +1 -0
  178. package/webpack/parts/dev-server.js +4 -3
  179. package/CHANGELOG.md +0 -791
  180. package/src/javascripts/domains/app/actions.js +0 -112
  181. package/src/javascripts/domains/app/index.js +0 -7
  182. package/src/javascripts/domains/app/reducer.js +0 -16
  183. package/src/javascripts/domains/app/selectors.js +0 -8
  184. package/src/javascripts/domains/app/utils.js +0 -4
  185. package/src/javascripts/domains/config/actions.js +0 -7
  186. package/src/javascripts/domains/config/hooks.js +0 -23
  187. package/src/javascripts/domains/config/index.js +0 -7
  188. package/src/javascripts/domains/config/reducer.js +0 -79
  189. package/src/javascripts/domains/config/selectors.js +0 -23
  190. package/src/javascripts/domains/config/utils.js +0 -4
  191. package/src/javascripts/domains/forms/actions.js +0 -21
  192. package/src/javascripts/domains/forms/context.js +0 -6
  193. package/src/javascripts/domains/forms/index.js +0 -8
  194. package/src/javascripts/domains/forms/reducer.js +0 -84
  195. package/src/javascripts/domains/forms/utils.js +0 -20
  196. package/src/javascripts/domains/i18n/actions.js +0 -20
  197. package/src/javascripts/domains/i18n/index.js +0 -7
  198. package/src/javascripts/domains/i18n/selectors.js +0 -15
  199. package/src/javascripts/domains/i18n/utils.js +0 -4
  200. package/src/javascripts/domains/interrupt/actions.js +0 -4
  201. package/src/javascripts/domains/interrupt/index.js +0 -9
  202. package/src/javascripts/domains/interrupt/reducer.js +0 -22
  203. package/src/javascripts/domains/interrupt/selectors.js +0 -6
  204. package/src/javascripts/domains/interrupt/utils.js +0 -4
  205. package/src/javascripts/domains/options/index.js +0 -1
  206. package/src/javascripts/domains/redux/context.js +0 -6
  207. package/src/javascripts/domains/redux/create-redux-store.js +0 -21
  208. package/src/javascripts/domains/redux/hooks.js +0 -80
  209. package/src/javascripts/domains/redux/index.js +0 -19
  210. package/src/javascripts/domains/redux/provider.js +0 -5
  211. package/src/javascripts/domains/redux/utils.js +0 -12
  212. package/src/javascripts/domains/store/index.js +0 -46
  213. package/src/javascripts/domains/store/state-reducer.js +0 -56
  214. package/src/javascripts/domains/translations/actions.js +0 -11
  215. package/src/javascripts/domains/translations/hooks.js +0 -103
  216. package/src/javascripts/domains/translations/index.js +0 -10
  217. package/src/javascripts/domains/translations/reducer.js +0 -69
  218. package/src/javascripts/domains/translations/selectors.js +0 -16
  219. package/src/javascripts/domains/translations/utils.js +0 -4
  220. package/src/javascripts/domains/visibility/index.js +0 -8
  221. package/src/javascripts/domains/visibility/reducer.js +0 -24
  222. package/src/javascripts/index.js +0 -153
  223. package/src/javascripts/lib/redux-helpers/index.js +0 -99
  224. package/src/javascripts/style-guide.js +0 -5
  225. package/src/javascripts/ui/hooks/use-seamly-dispatch.js +0 -3
  226. package/src/javascripts/ui/utils/seamly-utils.js +0 -832
@@ -1,150 +1,5 @@
1
- export const formActions = {
2
- REGISTER_FORM: 'REGISTER_FORM',
3
- DE_REGISTER_FORM: 'DE_REGISTER_FORM',
4
- REGISTER: 'REGISTER',
5
- DE_REGISTER: 'DEREGISTER',
6
- SET_VALUE: 'SET_VALUE',
7
- SET_VALIDITY: 'SET_VALIDITY',
8
- SET_STATE: 'SET_STATE',
9
- SET_SUBMITTED: 'SET_SUBMITTED',
10
- SET_PERSIST_FORM_DATA: 'SET_PERSIST_FORM_DATA',
11
- }
12
-
13
- const {
14
- REGISTER_FORM,
15
- DE_REGISTER_FORM,
16
- REGISTER,
17
- DE_REGISTER,
18
- SET_VALUE,
19
- SET_VALIDITY,
20
- SET_STATE,
21
- SET_SUBMITTED,
22
- SET_PERSIST_FORM_DATA,
23
- } = formActions
24
-
25
1
  export const getValidator = (fn, errorText, compareValue = null) => ({
26
2
  fn,
27
3
  errorText,
28
4
  compareValue,
29
5
  })
30
-
31
- export const formReducer = (state, action) => {
32
- const {
33
- formId,
34
- name,
35
- controlId,
36
- value,
37
- data,
38
- validity,
39
- errorText,
40
- hasSubmitted,
41
- persistData,
42
- } = action
43
-
44
- const setControls = (controls) => ({
45
- ...state,
46
- [formId]: {
47
- ...state[formId],
48
- controls: {
49
- ...state[formId].controls,
50
- ...controls,
51
- },
52
- },
53
- })
54
-
55
- switch (action.type) {
56
- case REGISTER_FORM:
57
- return {
58
- [formId]: {
59
- controls: {},
60
- validity: true,
61
- hasSubmitted: false,
62
- persistData: false,
63
- },
64
- ...state,
65
- }
66
- case DE_REGISTER_FORM:
67
- const removedFormState = { ...state }
68
- delete removedFormState[formId]
69
- return removedFormState
70
- case REGISTER:
71
- const {
72
- value: existingValue,
73
- validity: existingValidity,
74
- errorText: existingErrorText,
75
- } = state[formId].controls[name] || {}
76
-
77
- return setControls({
78
- [name]: {
79
- controlId,
80
- value: existingValue || value,
81
- validity: existingValidity !== false,
82
- errorText: existingErrorText || '',
83
- },
84
- })
85
- case DE_REGISTER:
86
- const relatedForm = state[formId]
87
- if (!relatedForm) {
88
- return state
89
- }
90
- const newControls = { ...relatedForm.controls }
91
- delete newControls[action.name]
92
- return { ...state, [formId]: { ...relatedForm, controls: newControls } }
93
- case SET_VALUE:
94
- return setControls({
95
- [name]: {
96
- ...state[formId].controls[name],
97
- value,
98
- },
99
- })
100
- case SET_VALIDITY:
101
- const newControlValidities = {
102
- ...state[formId].controls,
103
- [name]: {
104
- ...state[formId].controls[name],
105
- validity,
106
- errorText,
107
- },
108
- }
109
- return {
110
- ...state,
111
- [formId]: {
112
- ...state[formId],
113
- controls: newControlValidities,
114
- validity: Object.keys(newControlValidities)
115
- .map((key) => newControlValidities[key].validity)
116
- .every((v) => v),
117
- },
118
- }
119
- case SET_STATE:
120
- return {
121
- ...state,
122
- [formId]: {
123
- ...state[formId],
124
- controls: Object.keys(data).reduce(
125
- (acc, key) => {
126
- return {
127
- ...acc,
128
- [key]: {
129
- ...state[formId].controls[key],
130
- value: data[key],
131
- validity: true,
132
- errorText: '',
133
- },
134
- }
135
- },
136
- { ...state.controls },
137
- ),
138
- },
139
- }
140
- case SET_SUBMITTED:
141
- return { ...state, [formId]: { ...state[formId], hasSubmitted } }
142
- case SET_PERSIST_FORM_DATA:
143
- return {
144
- ...state,
145
- [formId]: { ...state[formId], persistData },
146
- }
147
- default:
148
- return state
149
- }
150
- }
@@ -1,13 +1,12 @@
1
1
  export const debounce = (func, wait) => {
2
2
  let timeout
3
3
  return function (...args) {
4
- const context = this
5
4
  let isCancelled = false
6
5
  clearTimeout(timeout)
7
6
  timeout = setTimeout(() => {
8
7
  timeout = null
9
8
  if (!isCancelled) {
10
- func.apply(context, args)
9
+ func.apply(this, args)
11
10
  }
12
11
  isCancelled = false
13
12
  }, wait)
@@ -15,7 +14,7 @@ export const debounce = (func, wait) => {
15
14
  return (runInstant) => {
16
15
  isCancelled = true
17
16
  if (runInstant) {
18
- func.apply(context, args)
17
+ func.apply(this, args)
19
18
  }
20
19
  }
21
20
  }
@@ -103,7 +102,7 @@ export const formatBytes = (bytes, decimals = 2) => {
103
102
 
104
103
  const i = Math.floor(Math.log(bytes) / Math.log(k))
105
104
 
106
- return parseFloat((bytes / k ** i).toFixed(dm)) + ' ' + sizes[i]
105
+ return `${parseFloat((bytes / k ** i).toFixed(dm))} ${sizes[i]}`
107
106
  }
108
107
 
109
108
  export const getUrlParams = () => {
@@ -0,0 +1,73 @@
1
+ export const eventTypes = {
2
+ info: 'info',
3
+ message: 'message',
4
+ participant: 'participant',
5
+ system: 'system',
6
+ } as const
7
+
8
+ export const payloadTypes = {
9
+ choicePrompt: 'choice_prompt',
10
+ text: 'text',
11
+ image: 'image',
12
+ video: 'video',
13
+ participant: 'participant',
14
+ divider: 'divider',
15
+ translation: 'translation',
16
+ message: 'message',
17
+ countdown: 'countdown',
18
+ upload: 'upload',
19
+ cta: 'cta',
20
+ splash: 'splash',
21
+ }
22
+
23
+ export const entryTypes = {
24
+ text: 'text',
25
+ upload: 'upload',
26
+ }
27
+
28
+ export const readStates = {
29
+ received: 'received',
30
+ read: 'read',
31
+ }
32
+
33
+ export const actionTypes = {
34
+ pickChoice: 'pick_choice',
35
+ navigate: 'navigate',
36
+ custom: 'custom',
37
+ typing: 'typing',
38
+ read: 'read',
39
+ detachService: 'detach_service',
40
+ interactivityUpdate: 'interactivity_update',
41
+ dismiss: 'dismiss',
42
+ sendTranscript: 'send_transcript',
43
+ setTopic: 'set_topic',
44
+ setTranslation: 'set_translation',
45
+ clickCta: 'click_cta',
46
+ clickCard: 'click_card',
47
+ }
48
+
49
+ export const dismissTypes = {
50
+ resumeConversationPrompt: 'resume_conversation_prompt',
51
+ }
52
+
53
+ export const ariaLiveLevels = {
54
+ assertive: 'assertive',
55
+ polite: 'polite',
56
+ }
57
+
58
+ export const dividerKeys = {
59
+ new_topic: 'newTopic',
60
+ new_translation: 'newTranslation',
61
+ }
62
+
63
+ export const featureKeys = {
64
+ sendTranscript: 'sendTranscript',
65
+ typingPeekahead: 'typingPeekahead',
66
+ uploads: 'uploads',
67
+ }
68
+
69
+ export const cardTypes = {
70
+ ask: 'ask',
71
+ navigate: 'navigate',
72
+ topic: 'topic',
73
+ }
@@ -41,6 +41,7 @@
41
41
  .#{$n}-carousel-controls {
42
42
  display: flex;
43
43
  position: relative;
44
+ align-items: center;
44
45
  justify-content: space-between;
45
46
  width: 100%;
46
47
  height: fit-content;
@@ -51,6 +52,7 @@
51
52
  /* stylelint-disable no-descending-specificity */
52
53
  .#{$n}-carousel-controls .#{$n}-button {
53
54
  display: flex;
55
+ flex: 0 0 $buttonsize;
54
56
  align-items: center;
55
57
  justify-content: center;
56
58
  width: $buttonsize;
@@ -89,21 +91,21 @@
89
91
  padding: 0 $spacer * 0.5;
90
92
  }
91
93
 
92
- .#{$n}-carousel-pagination {
94
+ .#{$n}-carousel-pagination__wrapper {
93
95
  display: flex;
94
96
  position: relative;
95
97
  flex-direction: row;
96
98
  justify-content: center;
97
- width: 100%;
98
- margin: 0 auto;
99
- padding: 0;
100
99
  }
101
100
 
102
- .#{$n}-carousel-pagination__wrapper {
101
+ .#{$n}-carousel-pagination {
103
102
  display: flex;
104
103
  position: relative;
105
- flex-direction: row;
104
+ flex-flow: row wrap;
106
105
  justify-content: center;
106
+ width: 100%;
107
+ margin: 0 auto;
108
+ padding: 0;
107
109
  }
108
110
 
109
111
  .#{$n}-carousel-pagination__item {
@@ -114,8 +116,8 @@
114
116
  .#{$n}-carousel-pagination__button {
115
117
  display: block;
116
118
  position: relative;
117
- width: $buttonsize-small;
118
- height: $buttonsize-small;
119
+ width: $buttonsize-small * 0.75;
120
+ height: $buttonsize-small * 0.75;
119
121
  padding: 0;
120
122
  border: 0;
121
123
  border-radius: 0;
@@ -51,6 +51,7 @@ module.exports = (env = {}, argv = {}, configOverrides = {}) => {
51
51
  publicPath: PUBLIC_PATH,
52
52
  },
53
53
  resolve: {
54
+ extensions: ['.js', '.ts', '.tsx'],
54
55
  modules: [path.resolve(__dirname, '../src/javascripts'), 'node_modules'],
55
56
  alias: {
56
57
  ...ALIASSES,
@@ -116,6 +117,21 @@ module.exports = (env = {}, argv = {}, configOverrides = {}) => {
116
117
  exclude: /(doc-site[\\\/]+|node_modules|bower_components)/,
117
118
  use: ['style-loader', ...site.scssLoaders({ browsers: BROWSERS })],
118
119
  },
120
+ {
121
+ test: /\.tsx?$/,
122
+ loader: 'ts-loader',
123
+ exclude: /node_modules|\.d\.ts$/,
124
+ options: {
125
+ compilerOptions: {
126
+ outDir: 'build',
127
+ noEmit: false,
128
+ },
129
+ },
130
+ },
131
+ {
132
+ test: /\.d\.ts$/,
133
+ loader: 'ignore-loader',
134
+ },
119
135
  ],
120
136
  },
121
137
  }
@@ -1,3 +1,4 @@
1
+ /* eslint-disable @typescript-eslint/no-var-requires */
1
2
  const webpackMerge = require('webpack-merge').merge
2
3
  const site = require('@seamly/doc-site/lib/config/site')
3
4
  const defaultConfig = require('./defaults')
@@ -21,7 +21,6 @@ module.exports = (env = {}, argv = {}, configOverrides = {}) => {
21
21
  ROOT,
22
22
 
23
23
  BABEL_TRANSPILE_MODULES,
24
-
25
24
  BROWSERS,
26
25
  } = implConfig
27
26
 
@@ -52,11 +51,18 @@ module.exports = (env = {}, argv = {}, configOverrides = {}) => {
52
51
  ],
53
52
  resolve: {
54
53
  modules: [path.resolve(__dirname, '../src/javascripts'), 'node_modules'],
54
+ alias: {
55
+ react: 'preact/compat',
56
+ 'react-dom/test-utils': 'preact/test-utils',
57
+ 'react-dom': 'preact/compat', // Must be below test-utils
58
+ 'react/jsx-runtime': 'preact/jsx-runtime',
59
+ },
60
+ extensions: ['.ts', '.tsx', '.js'],
55
61
  },
56
62
  module: {
57
63
  rules: [
58
64
  {
59
- test: /\.js$/,
65
+ test: /\.(j|t)s$/,
60
66
  include: BABEL_TRANSPILE_MODULES.map((moduleName) =>
61
67
  path.resolve('node_modules', moduleName),
62
68
  ),
@@ -66,20 +72,35 @@ module.exports = (env = {}, argv = {}, configOverrides = {}) => {
66
72
  },
67
73
  },
68
74
  {
69
- test: /\.js$/,
75
+ test: /\.(j|t)s$/,
70
76
  exclude: /(node_modules|bower_components)/,
71
77
  loader: 'babel-loader',
72
78
  options: {
73
79
  plugins: generateBabelLoaderPluginsPart(env, argv, implConfig),
74
80
  },
75
81
  },
82
+ {
83
+ test: /\.tsx?$/,
84
+ loader: 'ts-loader',
85
+ exclude: /node_modules|\.d\.ts$/,
86
+ options: {
87
+ compilerOptions: {
88
+ outDir: 'build',
89
+ noEmit: false,
90
+ },
91
+ },
92
+ },
93
+ {
94
+ test: /\.d\.ts$/,
95
+ loader: 'ignore-loader',
96
+ },
76
97
  ],
77
98
  },
78
99
  }
79
100
 
80
101
  const packageConfig = webpackMerge(baseConfig, {
81
102
  entry: {
82
- index: path.join(SRC_ROOT, 'javascripts/index.js'),
103
+ index: path.join(SRC_ROOT, 'javascripts/index.ts'),
83
104
  },
84
105
  })
85
106
 
@@ -93,7 +114,7 @@ module.exports = (env = {}, argv = {}, configOverrides = {}) => {
93
114
 
94
115
  const styleguideConfig = webpackMerge(baseConfig, {
95
116
  entry: {
96
- 'style-guide': path.join(SRC_ROOT, 'javascripts/style-guide.js'),
117
+ 'style-guide': path.join(SRC_ROOT, 'javascripts/style-guide.ts'),
97
118
  },
98
119
  externals: [/^@seamly\/web-ui(\/.*)?/i],
99
120
  })
@@ -1,3 +1,4 @@
1
+ /* eslint-disable @typescript-eslint/no-var-requires */
1
2
  const path = require('path')
2
3
 
3
4
  const BABEL_TRANSPILE_MODULES = ['debug', 'superagent', 'phoenix']
@@ -10,7 +11,7 @@ const PUBLIC_ROOT = path.join(ROOT, 'public')
10
11
  const PUBLIC_TEST_ROOT = path.join(PUBLIC_ROOT, 'test')
11
12
  const PUBLIC_STYLEGUIDE_ROOT = path.join(PUBLIC_ROOT, 'style-guide')
12
13
 
13
- const PUBLIC_PATH = process.env['PUBLIC_PATH'] || '/'
14
+ const PUBLIC_PATH = process.env.PUBLIC_PATH || '/'
14
15
 
15
16
  const ALIASSES = {
16
17
  '@seamly/web-ui$': path.resolve(SRC_ROOT, 'javascripts'),
@@ -40,7 +41,7 @@ const ALIASSES = {
40
41
  ),
41
42
  '@seamly/web-ui/style-guide$': path.resolve(
42
43
  SRC_ROOT,
43
- 'javascripts/style-guide.js',
44
+ 'javascripts/style-guide.ts',
44
45
  ),
45
46
  '@seamly/web-ui/src/stylesheets/styles.scss': path.resolve(
46
47
  SRC_ROOT,
@@ -55,6 +56,10 @@ const ALIASSES = {
55
56
  'style-guide.scss',
56
57
  ),
57
58
  lib: path.resolve(SRC_ROOT, 'javascripts/lib/'),
59
+ react: 'preact/compat',
60
+ 'react-dom/test-utils': 'preact/test-utils',
61
+ 'react-dom': 'preact/compat', // Must be below test-utils
62
+ 'react/jsx-runtime': 'preact/jsx-runtime',
58
63
  }
59
64
 
60
65
  module.exports = {
@@ -1,3 +1,4 @@
1
+ /* eslint-disable @typescript-eslint/no-var-requires */
1
2
  const babelLoaderPlugins = require('./babel-loader-plugins')
2
3
 
3
4
  module.exports = (env, argv, config) => [
@@ -1,3 +1,4 @@
1
+ /* eslint-disable @typescript-eslint/no-var-requires */
1
2
  const path = require('path')
2
3
 
3
4
  module.exports = (env, argv, { PUBLIC_PATH, SRC_ROOT }) => ({
@@ -13,9 +14,9 @@ module.exports = (env, argv, { PUBLIC_PATH, SRC_ROOT }) => ({
13
14
  },
14
15
  resolve: {
15
16
  alias: {
16
- api: path.resolve(SRC_ROOT, 'javascripts/api'),
17
- domains: path.resolve(SRC_ROOT, 'javascripts/domains'),
18
- ui: path.resolve(SRC_ROOT, 'javascripts/ui'),
17
+ api: path.resolve(SRC_ROOT, 'javascripts/api/'),
18
+ domains: path.resolve(SRC_ROOT, 'javascripts/domains/'),
19
+ ui: path.resolve(SRC_ROOT, 'javascripts/ui/'),
19
20
  },
20
21
  },
21
22
  })