odaptos_design_system 2.0.13 → 2.0.14

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 (362) hide show
  1. package/LICENSE +20 -20
  2. package/README.md +112 -112
  3. package/dist/Atoms/NumbersCode/NumbersCode.d.ts +1 -1
  4. package/dist/odaptos_design_system.cjs.development.js +108 -108
  5. package/dist/odaptos_design_system.cjs.development.js.map +1 -1
  6. package/dist/odaptos_design_system.cjs.production.min.js +1 -1
  7. package/dist/odaptos_design_system.cjs.production.min.js.map +1 -1
  8. package/dist/odaptos_design_system.esm.js +109 -109
  9. package/dist/odaptos_design_system.esm.js.map +1 -1
  10. package/package.json +103 -103
  11. package/src/Atoms/Avatar/Avatar.module.scss +72 -72
  12. package/src/Atoms/Avatar/Avatar.tsx +43 -43
  13. package/src/Atoms/Badge/Badge.modules.scss +108 -108
  14. package/src/Atoms/Badge/Badge.tsx +109 -109
  15. package/src/Atoms/Box/Box.module.scss +12 -12
  16. package/src/Atoms/Box/Box.tsx +18 -18
  17. package/src/Atoms/Buttons/Button.modules.scss +266 -266
  18. package/src/Atoms/Buttons/Button.tsx +69 -69
  19. package/src/Atoms/Buttons/IconButton.modules.scss +195 -195
  20. package/src/Atoms/Buttons/IconButton.tsx +65 -65
  21. package/src/Atoms/Cards/Card.modules.scss +12 -12
  22. package/src/Atoms/Cards/Card.tsx +24 -24
  23. package/src/Atoms/Cards/CardButton.modules.scss +23 -23
  24. package/src/Atoms/Cards/CardButton.tsx +14 -14
  25. package/src/Atoms/Checkbox/Checkbox.module.scss +5 -5
  26. package/src/Atoms/Checkbox/Checkbox.tsx +121 -121
  27. package/src/Atoms/ColorPicker/ColorPicker.modules.scss +46 -46
  28. package/src/Atoms/ColorPicker/ColorPicker.tsx +35 -35
  29. package/src/Atoms/DataProtectionDisclaimer/DataProtectionDisclaimer.tsx +23 -23
  30. package/src/Atoms/DataProtectionDisclaimer/data-protection-disclaimer.module.scss +14 -14
  31. package/src/Atoms/NumbersCode/NumbersCode.modules.scss +4 -4
  32. package/src/Atoms/NumbersCode/NumbersCode.tsx +226 -224
  33. package/src/Atoms/PopoverBeta/PopoverBeta.tsx +107 -107
  34. package/src/Atoms/QuestionButton/QuestionButton.module.scss +29 -29
  35. package/src/Atoms/QuestionButton/QuestionButton.tsx +26 -26
  36. package/src/Atoms/Radio/Radio.module.scss +9 -9
  37. package/src/Atoms/Radio/Radio.tsx +89 -89
  38. package/src/Atoms/Search/Search.tsx +32 -32
  39. package/src/Atoms/SquareText/SquareText.module.scss +7 -7
  40. package/src/Atoms/SquareText/SquareText.tsx +19 -19
  41. package/src/Atoms/Switch/Switch.module.scss +14 -14
  42. package/src/Atoms/Switch/Switch.tsx +64 -64
  43. package/src/Atoms/Tag/Tag.modules.scss +86 -86
  44. package/src/Atoms/Tag/Tag.tsx +134 -134
  45. package/src/Atoms/TimeInterval/TimeInterval.module.scss +5 -5
  46. package/src/Atoms/TimeInterval/TimeInterval.tsx +52 -52
  47. package/src/Atoms/Tooltip/Layout/TooltipCustomLayout.module.scss +54 -54
  48. package/src/Atoms/Tooltip/Layout/TooltipCustomLayout.tsx +140 -140
  49. package/src/Atoms/Tooltip/Tooltip.tsx +184 -184
  50. package/src/Atoms/Typography/Caption.modules.scss +17 -17
  51. package/src/Atoms/Typography/Caption.tsx +33 -33
  52. package/src/Atoms/Typography/Link.modules.scss +140 -140
  53. package/src/Atoms/Typography/Link.tsx +73 -73
  54. package/src/Atoms/Typography/Text.modules.scss +277 -277
  55. package/src/Atoms/Typography/Text.tsx +69 -69
  56. package/src/Atoms/Typography/TextForButton.modules.scss +29 -29
  57. package/src/Atoms/Typography/TextForButton.tsx +41 -41
  58. package/src/Atoms/Typography/TextForDropDownItem.modules.scss +31 -31
  59. package/src/Atoms/Typography/TextForDropDownItem.tsx +42 -42
  60. package/src/Atoms/Typography/TextWithLink.modules.scss +281 -281
  61. package/src/Atoms/Typography/TextWithLink.tsx +73 -73
  62. package/src/Atoms/Typography/Title.modules.scss +82 -82
  63. package/src/Atoms/Typography/Title.tsx +148 -148
  64. package/src/DesignTokens/ColorGuide/colors.ts +99 -99
  65. package/src/DesignTokens/Icons/Arrows/ArrowDoubleLineDownIcon.tsx +52 -52
  66. package/src/DesignTokens/Icons/Arrows/ArrowDoubleLineLeftIcon.tsx +52 -52
  67. package/src/DesignTokens/Icons/Arrows/ArrowDoubleLineRightIcon.tsx +52 -52
  68. package/src/DesignTokens/Icons/Arrows/ArrowDoubleLineUpIcon.tsx +52 -52
  69. package/src/DesignTokens/Icons/Arrows/ArrowFilledDownIcon.tsx +37 -37
  70. package/src/DesignTokens/Icons/Arrows/ArrowFilledLeftIcon.tsx +37 -37
  71. package/src/DesignTokens/Icons/Arrows/ArrowFilledRightIcon.tsx +37 -37
  72. package/src/DesignTokens/Icons/Arrows/ArrowFilledUpIcon.tsx +37 -37
  73. package/src/DesignTokens/Icons/Arrows/ArrowLineDownIcon.tsx +46 -46
  74. package/src/DesignTokens/Icons/Arrows/ArrowLineLeftIcon.tsx +46 -46
  75. package/src/DesignTokens/Icons/Arrows/ArrowLineRightIcon.tsx +46 -46
  76. package/src/DesignTokens/Icons/Arrows/ArrowLineUpIcon.tsx +46 -46
  77. package/src/DesignTokens/Icons/Arrows/ArrowPointerDown.tsx +52 -52
  78. package/src/DesignTokens/Icons/Arrows/ArrowPointerDownLeft.tsx +45 -45
  79. package/src/DesignTokens/Icons/Arrows/ArrowPointerDownRight.tsx +45 -45
  80. package/src/DesignTokens/Icons/Arrows/ArrowPointerLeft.tsx +52 -52
  81. package/src/DesignTokens/Icons/Arrows/ArrowPointerRight.tsx +52 -52
  82. package/src/DesignTokens/Icons/Arrows/ArrowPointerUp.tsx +52 -52
  83. package/src/DesignTokens/Icons/Arrows/ArrowPointerUpLeft.tsx +45 -45
  84. package/src/DesignTokens/Icons/Arrows/ArrowPointerUpRight.tsx +45 -45
  85. package/src/DesignTokens/Icons/Circled/AddCircledIcon.tsx +51 -51
  86. package/src/DesignTokens/Icons/Circled/AlertCircledIcon.tsx +64 -64
  87. package/src/DesignTokens/Icons/Circled/CheckedCircled.tsx +52 -52
  88. package/src/DesignTokens/Icons/Circled/InfoCircledIcon.tsx +64 -64
  89. package/src/DesignTokens/Icons/Circled/MinusCircledIcon.tsx +52 -52
  90. package/src/DesignTokens/Icons/Circled/NavigationCircledIcon.tsx +58 -58
  91. package/src/DesignTokens/Icons/Circled/QuestionCircledIcon.tsx +57 -57
  92. package/src/DesignTokens/Icons/Circled/RemoveCircledIcon.tsx +51 -51
  93. package/src/DesignTokens/Icons/Circled/SearchCircledIcon.tsx +58 -58
  94. package/src/DesignTokens/Icons/Circled/SettingsCircledIcon.tsx +51 -51
  95. package/src/DesignTokens/Icons/Equipment/CameraIcon.tsx +45 -45
  96. package/src/DesignTokens/Icons/Equipment/LaptopIcon.tsx +74 -74
  97. package/src/DesignTokens/Icons/Equipment/MicrophonePodcastIcon.tsx +38 -38
  98. package/src/DesignTokens/Icons/Equipment/MobileIcon.tsx +81 -81
  99. package/src/DesignTokens/Icons/Equipment/TvFlatScreenIcon.tsx +75 -75
  100. package/src/DesignTokens/Icons/Equipment/TvIcon.tsx +51 -51
  101. package/src/DesignTokens/Icons/Illustrations/AI_UserTest.tsx +544 -544
  102. package/src/DesignTokens/Icons/Illustrations/AngryIntervieweeFemale.tsx +163 -163
  103. package/src/DesignTokens/Icons/Illustrations/Blog.tsx +124 -124
  104. package/src/DesignTokens/Icons/Illustrations/EmotionsHeatMap.tsx +113 -113
  105. package/src/DesignTokens/Icons/Illustrations/Faq.tsx +74 -74
  106. package/src/DesignTokens/Icons/Illustrations/HappyMen.tsx +254 -254
  107. package/src/DesignTokens/Icons/Illustrations/IntegratedUsabilityScore.tsx +101 -101
  108. package/src/DesignTokens/Icons/Illustrations/InterviewTranscript.tsx +162 -162
  109. package/src/DesignTokens/Icons/Illustrations/InterviewTranscriptGreen.tsx +162 -162
  110. package/src/DesignTokens/Icons/Illustrations/MenShowingSomething.tsx +141 -141
  111. package/src/DesignTokens/Icons/Illustrations/MetaAnalyse.tsx +112 -112
  112. package/src/DesignTokens/Icons/Illustrations/MetaAnalyse2.tsx +74 -74
  113. package/src/DesignTokens/Icons/Illustrations/Non_Moderated.tsx +86 -86
  114. package/src/DesignTokens/Icons/Illustrations/OdaAccountPro.tsx +204 -204
  115. package/src/DesignTokens/Icons/Illustrations/OdaWaiting.tsx +339 -339
  116. package/src/DesignTokens/Icons/Illustrations/ScheduleTasks.tsx +118 -118
  117. package/src/DesignTokens/Icons/Illustrations/Sentiment.tsx +112 -112
  118. package/src/DesignTokens/Icons/Illustrations/Success.tsx +228 -228
  119. package/src/DesignTokens/Icons/Illustrations/UsabilityBrowser.tsx +127 -127
  120. package/src/DesignTokens/Icons/Illustrations/UserFlows.tsx +133 -133
  121. package/src/DesignTokens/Icons/Illustrations/UserPanel.tsx +127 -127
  122. package/src/DesignTokens/Icons/Illustrations/UxGuide.tsx +151 -151
  123. package/src/DesignTokens/Icons/Illustrations/VideoFlag.tsx +67 -67
  124. package/src/DesignTokens/Icons/Illustrations/VideoFlag2.tsx +69 -69
  125. package/src/DesignTokens/Icons/Illustrations/VideoFlagGreen.tsx +69 -69
  126. package/src/DesignTokens/Icons/Illustrations/WaitingMen.tsx +249 -249
  127. package/src/DesignTokens/Icons/Interaction/AccountIcon.tsx +39 -39
  128. package/src/DesignTokens/Icons/Interaction/AddIcon.tsx +51 -51
  129. package/src/DesignTokens/Icons/Interaction/AddTagIcon.tsx +47 -47
  130. package/src/DesignTokens/Icons/Interaction/AgendaIcon.tsx +76 -76
  131. package/src/DesignTokens/Icons/Interaction/BillingIcon.tsx +75 -75
  132. package/src/DesignTokens/Icons/Interaction/BinIcon.tsx +73 -73
  133. package/src/DesignTokens/Icons/Interaction/CheckedIcon.tsx +38 -38
  134. package/src/DesignTokens/Icons/Interaction/ClockIcon.tsx +58 -58
  135. package/src/DesignTokens/Icons/Interaction/CloseIcon.tsx +37 -37
  136. package/src/DesignTokens/Icons/Interaction/CogIcon.tsx +46 -46
  137. package/src/DesignTokens/Icons/Interaction/CopyPasteIcon.tsx +83 -83
  138. package/src/DesignTokens/Icons/Interaction/DragDropIcon.tsx +42 -42
  139. package/src/DesignTokens/Icons/Interaction/EditIcon.tsx +56 -56
  140. package/src/DesignTokens/Icons/Interaction/EditTextIcon.tsx +64 -64
  141. package/src/DesignTokens/Icons/Interaction/FilterIcon.tsx +49 -49
  142. package/src/DesignTokens/Icons/Interaction/LayoutIcon.tsx +46 -46
  143. package/src/DesignTokens/Icons/Interaction/LayoutLeftIcon.tsx +39 -39
  144. package/src/DesignTokens/Icons/Interaction/LayoutRightIcon.tsx +39 -39
  145. package/src/DesignTokens/Icons/Interaction/LockIcon.tsx +39 -39
  146. package/src/DesignTokens/Icons/Interaction/LogoutIcon.tsx +58 -58
  147. package/src/DesignTokens/Icons/Interaction/MenuHorizontalIcon.tsx +36 -36
  148. package/src/DesignTokens/Icons/Interaction/MenuVerticalIcon.tsx +57 -57
  149. package/src/DesignTokens/Icons/Interaction/MinusIcon.tsx +34 -34
  150. package/src/DesignTokens/Icons/Interaction/PencilWriteIcon.tsx +46 -46
  151. package/src/DesignTokens/Icons/Interaction/SearchIcon.tsx +52 -52
  152. package/src/DesignTokens/Icons/Interaction/SearchRemoveIcon.tsx +63 -63
  153. package/src/DesignTokens/Icons/Interaction/SettingsSliderIcon.tsx +45 -45
  154. package/src/DesignTokens/Icons/Interaction/ShareIcon.tsx +62 -62
  155. package/src/DesignTokens/Icons/Interaction/SortingIcon.tsx +39 -39
  156. package/src/DesignTokens/Icons/Interaction/TagAddIcon.tsx +46 -46
  157. package/src/DesignTokens/Icons/Interaction/TagEditIcon.tsx +46 -46
  158. package/src/DesignTokens/Icons/Interaction/TagRemoveIcon.tsx +46 -46
  159. package/src/DesignTokens/Icons/Interaction/TeamIcon.tsx +76 -76
  160. package/src/DesignTokens/Icons/Interaction/UnLockIcon.tsx +46 -46
  161. package/src/DesignTokens/Icons/Interaction/UndoIcon.tsx +46 -46
  162. package/src/DesignTokens/Icons/Interaction/UnlockedIcon.tsx +46 -46
  163. package/src/DesignTokens/Icons/Logos/LogoBeta.tsx +52 -52
  164. package/src/DesignTokens/Icons/Logos/LogoNormal.tsx +38 -38
  165. package/src/DesignTokens/Icons/Logos/LogoSmall.tsx +32 -32
  166. package/src/DesignTokens/Icons/Logos/LogoSquare.tsx +72 -72
  167. package/src/DesignTokens/Icons/Logos/LogoText.tsx +32 -32
  168. package/src/DesignTokens/Icons/Logos/LogoWhite.tsx +38 -38
  169. package/src/DesignTokens/Icons/MediaControl/CutClipIcon.tsx +39 -39
  170. package/src/DesignTokens/Icons/MediaControl/HangUpIcon.tsx +58 -58
  171. package/src/DesignTokens/Icons/MediaControl/MeetingIcon.tsx +45 -45
  172. package/src/DesignTokens/Icons/MediaControl/MicrophoneIcon.tsx +51 -51
  173. package/src/DesignTokens/Icons/MediaControl/MoveBackIcon.tsx +32 -32
  174. package/src/DesignTokens/Icons/MediaControl/MoveInIcon.tsx +59 -59
  175. package/src/DesignTokens/Icons/MediaControl/MuteIcon.tsx +51 -51
  176. package/src/DesignTokens/Icons/MediaControl/NoCameraIcon.tsx +54 -54
  177. package/src/DesignTokens/Icons/MediaControl/NoMicrophoneIcon.tsx +46 -46
  178. package/src/DesignTokens/Icons/MediaControl/PauseIcon.tsx +45 -45
  179. package/src/DesignTokens/Icons/MediaControl/PlayIcon.tsx +39 -39
  180. package/src/DesignTokens/Icons/MediaControl/PreviousIcon.tsx +49 -49
  181. package/src/DesignTokens/Icons/MediaControl/RecordIcon.tsx +40 -40
  182. package/src/DesignTokens/Icons/MediaControl/RecordingIcon.tsx +82 -82
  183. package/src/DesignTokens/Icons/MediaControl/StopRecordIcon.tsx +38 -38
  184. package/src/DesignTokens/Icons/MediaControl/TagIcon.tsx +46 -46
  185. package/src/DesignTokens/Icons/MediaControl/VolumeIcon.tsx +57 -57
  186. package/src/DesignTokens/Icons/Miscellaneous/AddSeatIcon.tsx +37 -37
  187. package/src/DesignTokens/Icons/Miscellaneous/AddUsersIcon.tsx +69 -69
  188. package/src/DesignTokens/Icons/Miscellaneous/AnonymizeIcon.tsx +46 -46
  189. package/src/DesignTokens/Icons/Miscellaneous/AppWindowPieIcon.tsx +39 -39
  190. package/src/DesignTokens/Icons/Miscellaneous/ArchiveIcon.tsx +39 -39
  191. package/src/DesignTokens/Icons/Miscellaneous/BillPdfIcon.tsx +37 -37
  192. package/src/DesignTokens/Icons/Miscellaneous/BinocularIcon.tsx +38 -38
  193. package/src/DesignTokens/Icons/Miscellaneous/BookFlipPageIcon.tsx +39 -39
  194. package/src/DesignTokens/Icons/Miscellaneous/BrainIcon.tsx +105 -105
  195. package/src/DesignTokens/Icons/Miscellaneous/BulbIcon.tsx +45 -45
  196. package/src/DesignTokens/Icons/Miscellaneous/CalendarIcon.tsx +46 -46
  197. package/src/DesignTokens/Icons/Miscellaneous/ChatBubbleIcon.tsx +68 -68
  198. package/src/DesignTokens/Icons/Miscellaneous/ChatIcon.tsx +37 -37
  199. package/src/DesignTokens/Icons/Miscellaneous/CheckoutIcon.tsx +37 -37
  200. package/src/DesignTokens/Icons/Miscellaneous/ClipIcon.tsx +57 -57
  201. package/src/DesignTokens/Icons/Miscellaneous/ContentPenWriteIcon.tsx +46 -46
  202. package/src/DesignTokens/Icons/Miscellaneous/CreditCardIcon.tsx +37 -37
  203. package/src/DesignTokens/Icons/Miscellaneous/DownloadIcon.tsx +78 -78
  204. package/src/DesignTokens/Icons/Miscellaneous/EarthIcon.tsx +58 -58
  205. package/src/DesignTokens/Icons/Miscellaneous/FaceCenterIcon.tsx +42 -42
  206. package/src/DesignTokens/Icons/Miscellaneous/FaceRecognitionIcon.tsx +88 -88
  207. package/src/DesignTokens/Icons/Miscellaneous/FileUploadIcon.tsx +65 -65
  208. package/src/DesignTokens/Icons/Miscellaneous/FilesIcon.tsx +51 -51
  209. package/src/DesignTokens/Icons/Miscellaneous/FillRecordIcon.tsx +39 -39
  210. package/src/DesignTokens/Icons/Miscellaneous/FilledTaskIcon.tsx +37 -37
  211. package/src/DesignTokens/Icons/Miscellaneous/FlashIcon.tsx +46 -46
  212. package/src/DesignTokens/Icons/Miscellaneous/FolderIcon.tsx +39 -39
  213. package/src/DesignTokens/Icons/Miscellaneous/GoogleIcon.tsx +67 -67
  214. package/src/DesignTokens/Icons/Miscellaneous/GroupIcon.tsx +46 -46
  215. package/src/DesignTokens/Icons/Miscellaneous/HardDriveIcon.tsx +58 -58
  216. package/src/DesignTokens/Icons/Miscellaneous/HelpIcon.tsx +37 -37
  217. package/src/DesignTokens/Icons/Miscellaneous/HelpIconAlt.tsx +33 -33
  218. package/src/DesignTokens/Icons/Miscellaneous/LanguageIcon.tsx +34 -34
  219. package/src/DesignTokens/Icons/Miscellaneous/LinkIcon.tsx +42 -42
  220. package/src/DesignTokens/Icons/Miscellaneous/ListToDoIcon.tsx +39 -39
  221. package/src/DesignTokens/Icons/Miscellaneous/MessagesBubbleSquareQuestionIcon.tsx +46 -46
  222. package/src/DesignTokens/Icons/Miscellaneous/MetaAnalyseIcon.tsx +74 -74
  223. package/src/DesignTokens/Icons/Miscellaneous/ModeratedIcon.tsx +88 -88
  224. package/src/DesignTokens/Icons/Miscellaneous/MultipleUsersIcon.tsx +46 -46
  225. package/src/DesignTokens/Icons/Miscellaneous/NbOfUsersIcon.tsx +64 -64
  226. package/src/DesignTokens/Icons/Miscellaneous/NeutralBackgroudIcon.tsx +42 -42
  227. package/src/DesignTokens/Icons/Miscellaneous/OfficeDrawerIcon.tsx +46 -46
  228. package/src/DesignTokens/Icons/Miscellaneous/OneColumnIcon.tsx +46 -46
  229. package/src/DesignTokens/Icons/Miscellaneous/RefreshIcon.tsx +54 -54
  230. package/src/DesignTokens/Icons/Miscellaneous/ReportIcon.tsx +70 -70
  231. package/src/DesignTokens/Icons/Miscellaneous/SeatIcon.tsx +36 -36
  232. package/src/DesignTokens/Icons/Miscellaneous/SendEmailIcon.tsx +51 -51
  233. package/src/DesignTokens/Icons/Miscellaneous/SendIcon.tsx +46 -46
  234. package/src/DesignTokens/Icons/Miscellaneous/SmartBrainIcon.tsx +52 -52
  235. package/src/DesignTokens/Icons/Miscellaneous/StarIcon.tsx +44 -44
  236. package/src/DesignTokens/Icons/Miscellaneous/TaskIcon.tsx +64 -64
  237. package/src/DesignTokens/Icons/Miscellaneous/TestDetailsIcon.tsx +37 -37
  238. package/src/DesignTokens/Icons/Miscellaneous/TestIcon.tsx +47 -47
  239. package/src/DesignTokens/Icons/Miscellaneous/ThreeColumnIcon.tsx +46 -46
  240. package/src/DesignTokens/Icons/Miscellaneous/TwoColumnIcon.tsx +46 -46
  241. package/src/DesignTokens/Icons/Miscellaneous/UnmoderatedIcon.tsx +63 -63
  242. package/src/DesignTokens/Icons/Miscellaneous/ViewIcon.tsx +39 -39
  243. package/src/DesignTokens/Icons/Miscellaneous/ViewOffIcon.tsx +39 -39
  244. package/src/DesignTokens/Icons/Miscellaneous/VoiceIcon.tsx +47 -47
  245. package/src/DesignTokens/Icons/Notifications/AlamBellIdleIcon.tsx +50 -50
  246. package/src/DesignTokens/Icons/Notifications/AlarmBellStatusIcon.tsx +56 -56
  247. package/src/DesignTokens/Icons/Notifications/ConversationIdleIcon.tsx +39 -39
  248. package/src/DesignTokens/Icons/Notifications/ConversationStatusIcon.tsx +54 -54
  249. package/src/DesignTokens/Icons/Notifications/NotifAlertIcon.tsx +41 -41
  250. package/src/DesignTokens/Icons/Other/DashedArrowSvg.tsx +38 -38
  251. package/src/DesignTokens/Icons/Other/ProjectHoverSvg.tsx +52 -52
  252. package/src/DesignTokens/Icons/Other/ProjectSvg.tsx +40 -40
  253. package/src/DesignTokens/Icons/Partners/Partner1.tsx +165 -165
  254. package/src/DesignTokens/Icons/Partners/Partner2.tsx +94 -94
  255. package/src/DesignTokens/Icons/Partners/Partner3.tsx +47 -47
  256. package/src/DesignTokens/Icons/Partners/Partner4.tsx +199 -199
  257. package/src/DesignTokens/Icons/Partners/Partner5.tsx +79 -79
  258. package/src/DesignTokens/Icons/Partners/Partner6.tsx +39 -39
  259. package/src/DesignTokens/Icons/Partners/Partner7.tsx +45 -45
  260. package/src/DesignTokens/Icons/Partners/Partner8.tsx +37 -37
  261. package/src/DesignTokens/Icons/Partners/Partner9.tsx +63 -63
  262. package/src/DesignTokens/Icons/index.ts +197 -197
  263. package/src/Molecules/Accordion/Accordion.modules.scss +41 -41
  264. package/src/Molecules/Accordion/Accordion.tsx +49 -49
  265. package/src/Molecules/ChatMessage/ChatMessage.module.scss +161 -161
  266. package/src/Molecules/ChatMessage/ChatMessage.tsx +110 -110
  267. package/src/Molecules/FeaturesTable/FeaturesTable.module.scss +212 -212
  268. package/src/Molecules/FeaturesTable/FeaturesTable.tsx +35 -35
  269. package/src/Molecules/FeaturesTable/components/TableBody/TableBody.tsx +54 -54
  270. package/src/Molecules/FeaturesTable/components/TableBody/components/FeatureGroup.tsx +36 -36
  271. package/src/Molecules/FeaturesTable/components/TableBody/components/FeatureRow.tsx +64 -64
  272. package/src/Molecules/FeaturesTable/components/TableBody/components/RowCell.tsx +29 -29
  273. package/src/Molecules/FeaturesTable/components/TableBody/components/SectionTitleRow.tsx +16 -16
  274. package/src/Molecules/FeaturesTable/components/TableHeader/TableHeader.tsx +37 -37
  275. package/src/Molecules/FeaturesTable/components/TableHeader/components/HeaderCell.tsx +69 -69
  276. package/src/Molecules/Interviews/Chat.modules.scss +250 -248
  277. package/src/Molecules/Interviews/Chat.tsx +419 -419
  278. package/src/Molecules/Interviews/ChatInput.modules.scss +33 -33
  279. package/src/Molecules/Interviews/ChatInput.tsx +42 -42
  280. package/src/Molecules/Interviews/CircleIconButton.modules.scss +51 -51
  281. package/src/Molecules/Interviews/CircledIconButton.tsx +37 -37
  282. package/src/Molecules/Interviews/ControlsBar.modules.scss +62 -62
  283. package/src/Molecules/Interviews/ControlsBar.tsx +247 -247
  284. package/src/Molecules/Interviews/EndRecording.module.scss +20 -20
  285. package/src/Molecules/Interviews/EndRecording.tsx +31 -31
  286. package/src/Molecules/Interviews/InterviewButton.modules.scss +112 -112
  287. package/src/Molecules/Interviews/InterviewButton.tsx +54 -54
  288. package/src/Molecules/Interviews/MarkUpBar.modules.scss +36 -36
  289. package/src/Molecules/Interviews/MarkUpBar.tsx +67 -67
  290. package/src/Molecules/Interviews/Scenario.modules.scss +21 -21
  291. package/src/Molecules/Interviews/Scenario.tsx +53 -53
  292. package/src/Molecules/Interviews/SelfPrortocolTaskContainer.tsx +47 -47
  293. package/src/Molecules/Interviews/SelfProtocolManager.modules.scss +62 -62
  294. package/src/Molecules/Interviews/SelfProtocolManager.tsx +227 -227
  295. package/src/Molecules/Interviews/SusExplanation.module.scss +11 -11
  296. package/src/Molecules/Interviews/SusExplanation.tsx +17 -17
  297. package/src/Molecules/Interviews/Task.modules.scss +294 -294
  298. package/src/Molecules/Interviews/Task.tsx +258 -258
  299. package/src/Molecules/Interviews/WelcomeMessage.modules.scss +28 -28
  300. package/src/Molecules/Interviews/WelcomeMessage.tsx +33 -33
  301. package/src/Molecules/LogoSlider/LogoSlider.module.scss +6 -6
  302. package/src/Molecules/LogoSlider/LogoSlider.tsx +55 -55
  303. package/src/Molecules/Notifications/Banner.modules.scss +160 -160
  304. package/src/Molecules/Notifications/Banner.tsx +134 -134
  305. package/src/Molecules/Notifications/NotificationIcon.tsx +26 -26
  306. package/src/Molecules/Notifications/Toast.modules.scss +87 -87
  307. package/src/Molecules/Notifications/Toast.tsx +90 -90
  308. package/src/Molecules/PricingCard/PricingCard.module.scss +120 -120
  309. package/src/Molecules/PricingCard/PricingCard.tsx +284 -284
  310. package/src/Molecules/StarRating/StarRating.module.scss +24 -24
  311. package/src/Molecules/StarRating/StarRating.tsx +71 -71
  312. package/src/Molecules/Tabs/Tabs.tsx +83 -83
  313. package/src/Molecules/Tabs/TabsUnderLine.tsx +200 -200
  314. package/src/Molecules/Tabs/tabs.modules.scss +60 -60
  315. package/src/Molecules/Tabs/tabsUnderline.modules.scss +63 -63
  316. package/src/Molecules/Thematic/Thematic.modules.scss +121 -121
  317. package/src/Molecules/Thematic/Thematic.tsx +458 -458
  318. package/src/Molecules/ToggleTab/ToggleTab.module.scss +37 -37
  319. package/src/Molecules/ToggleTab/ToggleTab.tsx +118 -118
  320. package/src/Molecules/UserIndicator/UserIndicator.module.scss +16 -16
  321. package/src/Molecules/UserIndicator/UserIndicator.tsx +58 -58
  322. package/src/Organisms/DatePicker/DatePicker.modules.scss +68 -68
  323. package/src/Organisms/DatePicker/DatePicker.tsx +268 -268
  324. package/src/Organisms/FormQuestions/FormQuestions.module.scss +52 -52
  325. package/src/Organisms/FormQuestions/FormQuestions.tsx +78 -78
  326. package/src/Organisms/Modal/Modal.modules.scss +66 -66
  327. package/src/Organisms/Modal/Modal.tsx +163 -163
  328. package/src/Organisms/MultiSelect/MultiSelect.modules.scss +78 -78
  329. package/src/Organisms/MultiSelect/MultiSelect.tsx +303 -303
  330. package/src/Organisms/MultiSelect/MultiSelectWithCategories.modules.scss +78 -78
  331. package/src/Organisms/MultiSelect/MultiSelectWithCategories.tsx +325 -325
  332. package/src/Organisms/NumberField/NumberField.module.scss +60 -60
  333. package/src/Organisms/NumberField/NumberField.tsx +244 -244
  334. package/src/Organisms/PasswordField/PasswordField.module.scss +55 -55
  335. package/src/Organisms/PasswordField/PasswordField.tsx +231 -231
  336. package/src/Organisms/RatingScale/RatingScale.module.scss +26 -26
  337. package/src/Organisms/RatingScale/RatingScale.tsx +104 -104
  338. package/src/Organisms/SingleSelect/SingleSelect.modules.scss +64 -64
  339. package/src/Organisms/SingleSelect/SingleSelect.tsx +271 -271
  340. package/src/Organisms/Table/Table.modules.scss +6 -6
  341. package/src/Organisms/Table/TableFooter.modules.scss +56 -56
  342. package/src/Organisms/Table/TableFooter.tsx +43 -43
  343. package/src/Organisms/Table/header.modules.scss +24 -24
  344. package/src/Organisms/Table/header.tsx +80 -80
  345. package/src/Organisms/Table/index.tsx +79 -79
  346. package/src/Organisms/Table/rows.modules.scss +37 -37
  347. package/src/Organisms/Table/rows.tsx +86 -86
  348. package/src/Organisms/Table/table-cell.modules.scss +13 -13
  349. package/src/Organisms/Table/table-cell.tsx +40 -40
  350. package/src/Organisms/TextInput/TextInput.modules.scss +55 -55
  351. package/src/Organisms/TextInput/TextInput.tsx +222 -222
  352. package/src/Organisms/Textarea/Textarea.module.scss +19 -19
  353. package/src/Organisms/Textarea/Textarea.tsx +97 -97
  354. package/src/Organisms/TimePicker/TimePicker.modules.scss +67 -67
  355. package/src/Organisms/TimePicker/TimePicker.tsx +242 -242
  356. package/src/__mocks__/InterviewRoom/tasksAndScenariosArray.js +92 -92
  357. package/src/__mocks__/PricingPageData/pricingPageMockedData.js +2120 -2120
  358. package/src/hooks/useClickOutside.ts +30 -30
  359. package/src/index.ts +75 -75
  360. package/src/utils/changeColorLuminance.ts +22 -22
  361. package/src/utils/getIconSize.ts +7 -7
  362. package/src/utils/getReadableTextColor.ts +36 -36
@@ -1,419 +1,419 @@
1
- import React, { useRef, useEffect, HTMLAttributes } from 'react';
2
- import styles from './Chat.modules.scss';
3
- import {
4
- Text,
5
- ChatInput,
6
- Title,
7
- Scenario,
8
- WelcomeMessage,
9
- Task,
10
- EndRecording,
11
- SusExplanation,
12
- Button,
13
- TvIcon,
14
- SendIcon,
15
- } from '../../';
16
- import Grid from '@mui/material/Grid';
17
-
18
- export interface ChatProps extends HTMLAttributes<HTMLDivElement> {
19
- chatTitle?: string;
20
- welcomeTitle?: string;
21
- welcomeDescription?: string;
22
- startInterviewTitle?: string;
23
- startInterviewBtnTitle?: string;
24
- startInterviewIcon?: JSX.Element;
25
- startInterview?: (task: any) => void;
26
- tasks: any[];
27
- sendTask: (task: any) => void;
28
- currentTask?: any;
29
- chatInputPlaceholder?: string;
30
- chatInputValue?: string;
31
- chatInputonChange?: (message: string) => void;
32
- sendMessage: () => void;
33
- className?: string;
34
- isTaskMode?: boolean;
35
- isChatDisplay?: boolean;
36
- isInterviewer?: boolean;
37
- messages: any[];
38
- idsTasksAlreadySent: string[];
39
- customScrollingClassname?: string;
40
- customContentClassname?: string;
41
- disabledTask?: boolean;
42
- disabledScenario?: boolean;
43
- areAllTasksSend?: boolean;
44
- isRecordingFinished?: boolean;
45
- stopRecTitle: string;
46
- stopRecDescription: string;
47
- stopRecCTA: string;
48
- SusExplanationTitle: string;
49
- SusExplanationDescription: string;
50
- isSus: boolean;
51
- stopRecording: () => void;
52
- isInterviewNonModerated?: boolean;
53
- startNMScreenSharing: () => void; //Non-Moderated Screen Sharing
54
- }
55
-
56
- export const Chat = ({
57
- chatTitle,
58
- welcomeTitle,
59
- welcomeDescription,
60
- startInterviewTitle,
61
- startInterviewBtnTitle,
62
- startInterviewIcon,
63
- startInterview,
64
- tasks,
65
- sendTask,
66
- currentTask,
67
- chatInputPlaceholder,
68
- chatInputValue,
69
- chatInputonChange,
70
- sendMessage,
71
- className,
72
- isTaskMode,
73
- isInterviewer,
74
- messages,
75
- idsTasksAlreadySent,
76
- customScrollingClassname,
77
- customContentClassname,
78
- disabledTask,
79
- disabledScenario,
80
- areAllTasksSend,
81
- isRecordingFinished,
82
- stopRecTitle,
83
- stopRecDescription,
84
- stopRecCTA,
85
- SusExplanationTitle,
86
- SusExplanationDescription,
87
- isSus,
88
- stopRecording,
89
- startNMScreenSharing,
90
- isInterviewNonModerated = false,
91
- ...props
92
- }: ChatProps) => {
93
- const replaceURLs = (message: string) => {
94
- if (!message) return;
95
- var urlRegex = /(((https?:\/\/)|(www\.))[^\s]+)/g;
96
- return message.replace(urlRegex, (url) => {
97
- var hyperlink = url;
98
- if (!hyperlink.match('^https?://')) {
99
- hyperlink = 'https://' + hyperlink;
100
- }
101
- return (
102
- '<a href="' +
103
- hyperlink +
104
- '" target="_blank" rel="noopener noreferrer">' +
105
- url +
106
- '</a>'
107
- );
108
- });
109
- };
110
-
111
- const refTask = useRef<HTMLDivElement>(null);
112
- const refMsg = useRef<HTMLDivElement>(null);
113
-
114
- useEffect(() => {
115
- if (messages.length) {
116
- if (refTask && refTask.current)
117
- refTask.current.scrollIntoView({
118
- behavior: 'smooth',
119
- block: 'end',
120
- });
121
- }
122
- }, [tasks.length]);
123
-
124
- useEffect(() => {
125
- if (messages.length) {
126
- if (refMsg && refMsg.current)
127
- refMsg.current.scrollIntoView({
128
- behavior: 'smooth',
129
- block: 'end',
130
- });
131
- }
132
- }, [messages.length]);
133
-
134
- if (isTaskMode) {
135
- return (
136
- <Grid
137
- container
138
- item
139
- xs={3}
140
- direction="column"
141
- className={`${className ?? ''} ${styles.chatContainer}`}
142
- {...props}
143
- >
144
- <div
145
- className={`${styles.scrolling_content} ${styles.no_scrollbar} ${customContentClassname}`}
146
- >
147
- {chatTitle && <Text text={chatTitle} weight="bold" size="lg" />}
148
-
149
- <div
150
- className={`${styles.tasks_container}
151
- ${customScrollingClassname}`}
152
- >
153
- {isInterviewNonModerated && (
154
- <div className={styles.nm_message_container}>
155
- <Text text={'Share your screen'} weight="bold" size="base" />
156
- <Text
157
- text={
158
- 'In order to participate to this test you need to share your screen before the first task is sent'
159
- }
160
- size="sm"
161
- />
162
- <Button
163
- id="start_screen_share"
164
- text={'Share my screen'}
165
- onClick={() => startNMScreenSharing()}
166
- iconRight={<TvIcon />}
167
- className={styles.nm_button}
168
- />
169
- </div>
170
- )}
171
- {tasks.map((task) => {
172
- if (
173
- task.type === 'question' ||
174
- task.type === 'task' ||
175
- (task.type === 'scenario' && isInterviewer)
176
- ) {
177
- const realTask = isInterviewer ? task : JSON.parse(task.body);
178
- const realCurrentTask = isInterviewer
179
- ? currentTask
180
- : JSON.parse(currentTask.body);
181
-
182
- return (
183
- <Task
184
- key={realTask._id}
185
- taskNumber={`${
186
- realTask.type === 'task'
187
- ? 'Task'
188
- : realTask.type === 'question'
189
- ? 'Question'
190
- : 'Scenario'
191
- } #${realTask.index}`}
192
- taskTitle={
193
- realTask.type === 'scenario'
194
- ? (idsTasksAlreadySent.includes(realTask._id) &&
195
- realCurrentTask._id !== realTask._id) ||
196
- disabledTask
197
- ? realTask.name ?? realTask.description
198
- : realCurrentTask &&
199
- realCurrentTask._id === realTask._id
200
- ? realTask.description
201
- : realTask.name ?? realTask.description
202
- : realTask.description
203
- }
204
- taskTitleTooltip={realTask.description || realTask.name}
205
- url={realTask.url}
206
- notes={realTask.notes}
207
- state={
208
- idsTasksAlreadySent.includes(realTask._id) &&
209
- realCurrentTask._id !== realTask._id
210
- ? 'done'
211
- : disabledTask
212
- ? 'disabled'
213
- : realCurrentTask &&
214
- realCurrentTask._id === realTask._id
215
- ? 'active'
216
- : 'idle'
217
- }
218
- task={realTask}
219
- sendTask={() => {
220
- if (
221
- realTask.type === 'task' ||
222
- realTask.type === 'question'
223
- )
224
- sendTask(realTask);
225
- else if (startInterview && realTask.type === 'scenario')
226
- startInterview(realTask);
227
- else return;
228
- }}
229
- isDone={
230
- idsTasksAlreadySent.includes(realTask._id) &&
231
- realCurrentTask._id !== realTask._id
232
- }
233
- isInterviewer={isInterviewer}
234
- />
235
- );
236
- } else if (
237
- task.type === 'scenario' &&
238
- !isInterviewer &&
239
- !isInterviewNonModerated
240
- ) {
241
- const scenario = isInterviewer ? task : JSON.parse(task.body);
242
-
243
- return (
244
- <Scenario
245
- title={`Scenario #${scenario.index}`}
246
- scenarioName={scenario.name}
247
- description={scenario.description}
248
- buttonText={
249
- scenario.url ? startInterviewBtnTitle : undefined
250
- }
251
- buttonIcon={scenario.url ? startInterviewIcon : undefined}
252
- url={scenario.url ?? ''}
253
- disabled={disabledScenario}
254
- isInterviewer={isInterviewer}
255
- />
256
- );
257
- }
258
- if (task.type === 'scenario' && isInterviewNonModerated) {
259
- const realTask = isInterviewer ? task : JSON.parse(task.body);
260
- return (
261
- <div className={styles.nm_message_container}>
262
- <Text text={realTask.name} weight="bold" size="base" />
263
- <Text text={realTask.description} size="sm" />
264
- <Button
265
- id="start_scenario"
266
- text={'Start Now'}
267
- onClick={() => sendTask(realTask)}
268
- iconRight={<SendIcon />}
269
- className={styles.nm_button}
270
- />
271
- </div>
272
- );
273
- } else return <></>;
274
- })}
275
- {isInterviewer && areAllTasksSend && !isRecordingFinished && (
276
- <EndRecording
277
- stopRecTitle={stopRecTitle}
278
- stopRecDescription={stopRecDescription}
279
- stopRecCTA={stopRecCTA}
280
- stopRecording={stopRecording}
281
- />
282
- )}
283
- {isInterviewer &&
284
- isRecordingFinished &&
285
- isSus &&
286
- areAllTasksSend && (
287
- <SusExplanation
288
- title={SusExplanationTitle}
289
- description={SusExplanationDescription}
290
- />
291
- )}
292
- <div ref={refTask} />
293
- </div>
294
- </div>
295
- </Grid>
296
- );
297
- } else
298
- return (
299
- <Grid
300
- container
301
- item
302
- xs={3}
303
- direction="column"
304
- className={`${className ?? ''} ${styles.chatContainer}`}
305
- {...props}
306
- >
307
- <div
308
- className={`${styles.scrolling_content} ${styles.no_scrollbar} ${customContentClassname}`}
309
- >
310
- {chatTitle && <Text text={chatTitle} weight="bold" size="lg" />}
311
-
312
- <div
313
- className={`${styles.tasks_container}
314
- ${customScrollingClassname}`}
315
- >
316
- {welcomeTitle && welcomeDescription && !isInterviewer && (
317
- <WelcomeMessage
318
- title={welcomeTitle}
319
- description={welcomeDescription}
320
- />
321
- )}
322
- {messages &&
323
- messages.map((message) => {
324
- if (message && message.type === 'normal') {
325
- if (
326
- (message.from.identity === 'interviewee' &&
327
- isInterviewer) ||
328
- (message.from.identity === 'interviewer' && !isInterviewer)
329
- )
330
- return (
331
- <div className={styles.user_message_container}>
332
- <div className={styles.bot_indicator}>
333
- <Title
334
- text={`${message.from.name
335
- .split(' ')
336
- .map((n: string[]) => n[0])
337
- .join('')}`}
338
- weight="bold"
339
- color="white"
340
- size="sm"
341
- />
342
- </div>
343
- <div className={styles.message_chatbot}>
344
- <div className={styles.not_user_text_message}>
345
- <div
346
- dangerouslySetInnerHTML={{
347
- __html: replaceURLs(message.body) ?? '',
348
- }}
349
- className={styles.user_text}
350
- />
351
- </div>
352
- <Text
353
- text={new Date(
354
- message.createdAt
355
- ).toLocaleTimeString()}
356
- size="xs"
357
- color="grey"
358
- className={styles.user_text_message_username}
359
- />
360
- </div>
361
- </div>
362
- );
363
- else if (
364
- (message.from.identity === 'interviewee' &&
365
- !isInterviewer) ||
366
- (message.from.identity === 'interviewer' && isInterviewer)
367
- )
368
- return (
369
- <div className={styles.user_message_container}>
370
- <div className={styles.message_chatbot}>
371
- <div className={styles.user_text_message}>
372
- <div
373
- dangerouslySetInnerHTML={{
374
- __html: replaceURLs(message.body) ?? '',
375
- }}
376
- className={styles.user_text}
377
- />
378
- </div>
379
- <Text
380
- text={new Date(
381
- message.createdAt
382
- ).toLocaleTimeString()}
383
- size="xs"
384
- color="grey"
385
- className={styles.user_text_message_username_left}
386
- />
387
- </div>
388
- <div className={styles.user_indicator}>
389
- <Title
390
- text={`${message.from.name
391
- .split(' ')
392
- .map((n: string[]) => n[0])
393
- .join('')}`}
394
- weight="bold"
395
- color="white"
396
- size="sm"
397
- />
398
- </div>
399
- </div>
400
- );
401
- else return <></>;
402
- } else return <></>;
403
- })}
404
- <div ref={refMsg} />
405
- </div>
406
- {chatInputPlaceholder &&
407
- typeof chatInputValue === 'string' &&
408
- chatInputonChange && (
409
- <ChatInput
410
- placeholder={chatInputPlaceholder}
411
- value={chatInputValue}
412
- onChange={chatInputonChange}
413
- sendMessage={sendMessage}
414
- />
415
- )}
416
- </div>
417
- </Grid>
418
- );
419
- };
1
+ import React, { useRef, useEffect, HTMLAttributes } from 'react';
2
+ import styles from './Chat.modules.scss';
3
+ import {
4
+ Text,
5
+ ChatInput,
6
+ Title,
7
+ Scenario,
8
+ WelcomeMessage,
9
+ Task,
10
+ EndRecording,
11
+ SusExplanation,
12
+ Button,
13
+ TvIcon,
14
+ SendIcon,
15
+ } from '../../';
16
+ import Grid from '@mui/material/Grid';
17
+
18
+ export interface ChatProps extends HTMLAttributes<HTMLDivElement> {
19
+ chatTitle?: string;
20
+ welcomeTitle?: string;
21
+ welcomeDescription?: string;
22
+ startInterviewTitle?: string;
23
+ startInterviewBtnTitle?: string;
24
+ startInterviewIcon?: JSX.Element;
25
+ startInterview?: (task: any) => void;
26
+ tasks: any[];
27
+ sendTask: (task: any) => void;
28
+ currentTask?: any;
29
+ chatInputPlaceholder?: string;
30
+ chatInputValue?: string;
31
+ chatInputonChange?: (message: string) => void;
32
+ sendMessage: () => void;
33
+ className?: string;
34
+ isTaskMode?: boolean;
35
+ isChatDisplay?: boolean;
36
+ isInterviewer?: boolean;
37
+ messages: any[];
38
+ idsTasksAlreadySent: string[];
39
+ customScrollingClassname?: string;
40
+ customContentClassname?: string;
41
+ disabledTask?: boolean;
42
+ disabledScenario?: boolean;
43
+ areAllTasksSend?: boolean;
44
+ isRecordingFinished?: boolean;
45
+ stopRecTitle: string;
46
+ stopRecDescription: string;
47
+ stopRecCTA: string;
48
+ SusExplanationTitle: string;
49
+ SusExplanationDescription: string;
50
+ isSus: boolean;
51
+ stopRecording: () => void;
52
+ isInterviewNonModerated?: boolean;
53
+ startNMScreenSharing: () => void; //Non-Moderated Screen Sharing
54
+ }
55
+
56
+ export const Chat = ({
57
+ chatTitle,
58
+ welcomeTitle,
59
+ welcomeDescription,
60
+ startInterviewTitle,
61
+ startInterviewBtnTitle,
62
+ startInterviewIcon,
63
+ startInterview,
64
+ tasks,
65
+ sendTask,
66
+ currentTask,
67
+ chatInputPlaceholder,
68
+ chatInputValue,
69
+ chatInputonChange,
70
+ sendMessage,
71
+ className,
72
+ isTaskMode,
73
+ isInterviewer,
74
+ messages,
75
+ idsTasksAlreadySent,
76
+ customScrollingClassname,
77
+ customContentClassname,
78
+ disabledTask,
79
+ disabledScenario,
80
+ areAllTasksSend,
81
+ isRecordingFinished,
82
+ stopRecTitle,
83
+ stopRecDescription,
84
+ stopRecCTA,
85
+ SusExplanationTitle,
86
+ SusExplanationDescription,
87
+ isSus,
88
+ stopRecording,
89
+ startNMScreenSharing,
90
+ isInterviewNonModerated = false,
91
+ ...props
92
+ }: ChatProps) => {
93
+ const replaceURLs = (message: string) => {
94
+ if (!message) return;
95
+ var urlRegex = /(((https?:\/\/)|(www\.))[^\s]+)/g;
96
+ return message.replace(urlRegex, (url) => {
97
+ var hyperlink = url;
98
+ if (!hyperlink.match('^https?://')) {
99
+ hyperlink = 'https://' + hyperlink;
100
+ }
101
+ return (
102
+ '<a href="' +
103
+ hyperlink +
104
+ '" target="_blank" rel="noopener noreferrer">' +
105
+ url +
106
+ '</a>'
107
+ );
108
+ });
109
+ };
110
+
111
+ const refTask = useRef<HTMLDivElement>(null);
112
+ const refMsg = useRef<HTMLDivElement>(null);
113
+
114
+ useEffect(() => {
115
+ if (messages.length) {
116
+ if (refTask && refTask.current)
117
+ refTask.current.scrollIntoView({
118
+ behavior: 'smooth',
119
+ block: 'end',
120
+ });
121
+ }
122
+ }, [tasks.length]);
123
+
124
+ useEffect(() => {
125
+ if (messages.length) {
126
+ if (refMsg && refMsg.current)
127
+ refMsg.current.scrollIntoView({
128
+ behavior: 'smooth',
129
+ block: 'end',
130
+ });
131
+ }
132
+ }, [messages.length]);
133
+
134
+ if (isTaskMode) {
135
+ return (
136
+ <Grid
137
+ container
138
+ item
139
+ xs={3}
140
+ direction="column"
141
+ className={`${className ?? ''} ${styles.chatContainer}`}
142
+ {...props}
143
+ >
144
+ <div
145
+ className={`${styles.scrolling_content} ${styles.no_scrollbar} ${customContentClassname}`}
146
+ >
147
+ {chatTitle && <Text text={chatTitle} weight="bold" size="lg" />}
148
+
149
+ <div
150
+ className={`${styles.tasks_container}
151
+ ${customScrollingClassname}`}
152
+ >
153
+ {isInterviewNonModerated && (
154
+ <div className={styles.nm_message_container}>
155
+ <Text text={'Share your screen'} weight="bold" size="base" />
156
+ <Text
157
+ text={
158
+ 'In order to participate to this test you need to share your screen before the first task is sent'
159
+ }
160
+ size="sm"
161
+ />
162
+ <Button
163
+ id="start_screen_share"
164
+ text={'Share my screen'}
165
+ onClick={() => startNMScreenSharing()}
166
+ iconRight={<TvIcon />}
167
+ className={styles.nm_button}
168
+ />
169
+ </div>
170
+ )}
171
+ {tasks.map((task) => {
172
+ if (
173
+ task.type === 'question' ||
174
+ task.type === 'task' ||
175
+ (task.type === 'scenario' && isInterviewer)
176
+ ) {
177
+ const realTask = isInterviewer ? task : JSON.parse(task.body);
178
+ const realCurrentTask = isInterviewer
179
+ ? currentTask
180
+ : JSON.parse(currentTask.body);
181
+
182
+ return (
183
+ <Task
184
+ key={realTask._id}
185
+ taskNumber={`${
186
+ realTask.type === 'task'
187
+ ? 'Task'
188
+ : realTask.type === 'question'
189
+ ? 'Question'
190
+ : 'Scenario'
191
+ } #${realTask.index}`}
192
+ taskTitle={
193
+ realTask.type === 'scenario'
194
+ ? (idsTasksAlreadySent.includes(realTask._id) &&
195
+ realCurrentTask._id !== realTask._id) ||
196
+ disabledTask
197
+ ? realTask.name ?? realTask.description
198
+ : realCurrentTask &&
199
+ realCurrentTask._id === realTask._id
200
+ ? realTask.description
201
+ : realTask.name ?? realTask.description
202
+ : realTask.description
203
+ }
204
+ taskTitleTooltip={realTask.description || realTask.name}
205
+ url={realTask.url}
206
+ notes={realTask.notes}
207
+ state={
208
+ idsTasksAlreadySent.includes(realTask._id) &&
209
+ realCurrentTask._id !== realTask._id
210
+ ? 'done'
211
+ : disabledTask
212
+ ? 'disabled'
213
+ : realCurrentTask &&
214
+ realCurrentTask._id === realTask._id
215
+ ? 'active'
216
+ : 'idle'
217
+ }
218
+ task={realTask}
219
+ sendTask={() => {
220
+ if (
221
+ realTask.type === 'task' ||
222
+ realTask.type === 'question'
223
+ )
224
+ sendTask(realTask);
225
+ else if (startInterview && realTask.type === 'scenario')
226
+ startInterview(realTask);
227
+ else return;
228
+ }}
229
+ isDone={
230
+ idsTasksAlreadySent.includes(realTask._id) &&
231
+ realCurrentTask._id !== realTask._id
232
+ }
233
+ isInterviewer={isInterviewer}
234
+ />
235
+ );
236
+ } else if (
237
+ task.type === 'scenario' &&
238
+ !isInterviewer &&
239
+ !isInterviewNonModerated
240
+ ) {
241
+ const scenario = isInterviewer ? task : JSON.parse(task.body);
242
+
243
+ return (
244
+ <Scenario
245
+ title={`Scenario #${scenario.index}`}
246
+ scenarioName={scenario.name}
247
+ description={scenario.description}
248
+ buttonText={
249
+ scenario.url ? startInterviewBtnTitle : undefined
250
+ }
251
+ buttonIcon={scenario.url ? startInterviewIcon : undefined}
252
+ url={scenario.url ?? ''}
253
+ disabled={disabledScenario}
254
+ isInterviewer={isInterviewer}
255
+ />
256
+ );
257
+ }
258
+ if (task.type === 'scenario' && isInterviewNonModerated) {
259
+ const realTask = isInterviewer ? task : JSON.parse(task.body);
260
+ return (
261
+ <div className={styles.nm_message_container}>
262
+ <Text text={realTask.name} weight="bold" size="base" />
263
+ <Text text={realTask.description} size="sm" />
264
+ <Button
265
+ id="start_scenario"
266
+ text={'Start Now'}
267
+ onClick={() => sendTask(realTask)}
268
+ iconRight={<SendIcon />}
269
+ className={styles.nm_button}
270
+ />
271
+ </div>
272
+ );
273
+ } else return <></>;
274
+ })}
275
+ {isInterviewer && areAllTasksSend && !isRecordingFinished && (
276
+ <EndRecording
277
+ stopRecTitle={stopRecTitle}
278
+ stopRecDescription={stopRecDescription}
279
+ stopRecCTA={stopRecCTA}
280
+ stopRecording={stopRecording}
281
+ />
282
+ )}
283
+ {isInterviewer &&
284
+ isRecordingFinished &&
285
+ isSus &&
286
+ areAllTasksSend && (
287
+ <SusExplanation
288
+ title={SusExplanationTitle}
289
+ description={SusExplanationDescription}
290
+ />
291
+ )}
292
+ <div ref={refTask} />
293
+ </div>
294
+ </div>
295
+ </Grid>
296
+ );
297
+ } else
298
+ return (
299
+ <Grid
300
+ container
301
+ item
302
+ xs={3}
303
+ direction="column"
304
+ className={`${className ?? ''} ${styles.chatContainer}`}
305
+ {...props}
306
+ >
307
+ <div
308
+ className={`${styles.scrolling_content} ${styles.no_scrollbar} ${customContentClassname}`}
309
+ >
310
+ {chatTitle && <Text text={chatTitle} weight="bold" size="lg" />}
311
+
312
+ <div
313
+ className={`${styles.tasks_container}
314
+ ${customScrollingClassname}`}
315
+ >
316
+ {welcomeTitle && welcomeDescription && !isInterviewer && (
317
+ <WelcomeMessage
318
+ title={welcomeTitle}
319
+ description={welcomeDescription}
320
+ />
321
+ )}
322
+ {messages &&
323
+ messages.map((message) => {
324
+ if (message && message.type === 'normal') {
325
+ if (
326
+ (message.from.identity === 'interviewee' &&
327
+ isInterviewer) ||
328
+ (message.from.identity === 'interviewer' && !isInterviewer)
329
+ )
330
+ return (
331
+ <div className={styles.user_message_container}>
332
+ <div className={styles.bot_indicator}>
333
+ <Title
334
+ text={`${message.from.name
335
+ .split(' ')
336
+ .map((n: string[]) => n[0])
337
+ .join('')}`}
338
+ weight="bold"
339
+ color="white"
340
+ size="sm"
341
+ />
342
+ </div>
343
+ <div className={styles.message_chatbot}>
344
+ <div className={styles.not_user_text_message}>
345
+ <div
346
+ dangerouslySetInnerHTML={{
347
+ __html: replaceURLs(message.body) ?? '',
348
+ }}
349
+ className={styles.user_text}
350
+ />
351
+ </div>
352
+ <Text
353
+ text={new Date(
354
+ message.createdAt
355
+ ).toLocaleTimeString()}
356
+ size="xs"
357
+ color="grey"
358
+ className={styles.user_text_message_username}
359
+ />
360
+ </div>
361
+ </div>
362
+ );
363
+ else if (
364
+ (message.from.identity === 'interviewee' &&
365
+ !isInterviewer) ||
366
+ (message.from.identity === 'interviewer' && isInterviewer)
367
+ )
368
+ return (
369
+ <div className={styles.user_message_container}>
370
+ <div className={styles.message_chatbot}>
371
+ <div className={styles.user_text_message}>
372
+ <div
373
+ dangerouslySetInnerHTML={{
374
+ __html: replaceURLs(message.body) ?? '',
375
+ }}
376
+ className={styles.user_text}
377
+ />
378
+ </div>
379
+ <Text
380
+ text={new Date(
381
+ message.createdAt
382
+ ).toLocaleTimeString()}
383
+ size="xs"
384
+ color="grey"
385
+ className={styles.user_text_message_username_left}
386
+ />
387
+ </div>
388
+ <div className={styles.user_indicator}>
389
+ <Title
390
+ text={`${message.from.name
391
+ .split(' ')
392
+ .map((n: string[]) => n[0])
393
+ .join('')}`}
394
+ weight="bold"
395
+ color="white"
396
+ size="sm"
397
+ />
398
+ </div>
399
+ </div>
400
+ );
401
+ else return <></>;
402
+ } else return <></>;
403
+ })}
404
+ <div ref={refMsg} />
405
+ </div>
406
+ {chatInputPlaceholder &&
407
+ typeof chatInputValue === 'string' &&
408
+ chatInputonChange && (
409
+ <ChatInput
410
+ placeholder={chatInputPlaceholder}
411
+ value={chatInputValue}
412
+ onChange={chatInputonChange}
413
+ sendMessage={sendMessage}
414
+ />
415
+ )}
416
+ </div>
417
+ </Grid>
418
+ );
419
+ };