@mitodl/smoot-design 0.0.0-0a23f44

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 (325) hide show
  1. package/LICENSE +28 -0
  2. package/README.md +35 -0
  3. package/dist/bundles/aiDrawerManager.es.js +38832 -0
  4. package/dist/bundles/aiDrawerManager.es.js.map +1 -0
  5. package/dist/bundles/aiDrawerManager.umd.js +245 -0
  6. package/dist/bundles/aiDrawerManager.umd.js.map +1 -0
  7. package/dist/bundles/remoteTutorDrawer.es.js +38832 -0
  8. package/dist/bundles/remoteTutorDrawer.es.js.map +1 -0
  9. package/dist/bundles/remoteTutorDrawer.umd.js +245 -0
  10. package/dist/bundles/remoteTutorDrawer.umd.js.map +1 -0
  11. package/dist/cjs/VERSION.d.ts +12 -0
  12. package/dist/cjs/VERSION.js +15 -0
  13. package/dist/cjs/ai.d.ts +3 -0
  14. package/dist/cjs/ai.js +9 -0
  15. package/dist/cjs/bundles/AiDrawer/AiDrawer.d.ts +55 -0
  16. package/dist/cjs/bundles/AiDrawer/AiDrawer.js +262 -0
  17. package/dist/cjs/bundles/AiDrawer/AiDrawer.stories.d.ts +17 -0
  18. package/dist/cjs/bundles/AiDrawer/AiDrawer.stories.js +264 -0
  19. package/dist/cjs/bundles/AiDrawer/AiDrawerManager.d.ts +12 -0
  20. package/dist/cjs/bundles/AiDrawer/AiDrawerManager.js +51 -0
  21. package/dist/cjs/bundles/AiDrawer/AiDrawerManager.stories.d.ts +6 -0
  22. package/dist/cjs/bundles/AiDrawer/AiDrawerManager.stories.js +267 -0
  23. package/dist/cjs/bundles/AiDrawer/AiDrawerManager.test.d.ts +1 -0
  24. package/dist/cjs/bundles/AiDrawer/AiDrawerManager.test.js +245 -0
  25. package/dist/cjs/bundles/AiDrawer/FlashcardsScreen.d.ts +9 -0
  26. package/dist/cjs/bundles/AiDrawer/FlashcardsScreen.js +87 -0
  27. package/dist/cjs/bundles/aiDrawerManager.d.ts +6 -0
  28. package/dist/cjs/bundles/aiDrawerManager.js +44 -0
  29. package/dist/cjs/components/AiChat/AiChat.d.ts +5 -0
  30. package/dist/cjs/components/AiChat/AiChat.js +267 -0
  31. package/dist/cjs/components/AiChat/AiChat.stories.d.ts +17 -0
  32. package/dist/cjs/components/AiChat/AiChat.stories.js +194 -0
  33. package/dist/cjs/components/AiChat/AiChat.test.d.ts +1 -0
  34. package/dist/cjs/components/AiChat/AiChat.test.js +211 -0
  35. package/dist/cjs/components/AiChat/AiChatContext.d.ts +26 -0
  36. package/dist/cjs/components/AiChat/AiChatContext.js +106 -0
  37. package/dist/cjs/components/AiChat/AiChatContext.stories.d.ts +14 -0
  38. package/dist/cjs/components/AiChat/AiChatContext.stories.js +75 -0
  39. package/dist/cjs/components/AiChat/AiChatMarkdown.stories.d.ts +15 -0
  40. package/dist/cjs/components/AiChat/AiChatMarkdown.stories.js +282 -0
  41. package/dist/cjs/components/AiChat/ChatTitle.d.ts +8 -0
  42. package/dist/cjs/components/AiChat/ChatTitle.js +43 -0
  43. package/dist/cjs/components/AiChat/EllipsisIcon.d.ts +6 -0
  44. package/dist/cjs/components/AiChat/EllipsisIcon.js +17 -0
  45. package/dist/cjs/components/AiChat/EntryScreen.d.ts +11 -0
  46. package/dist/cjs/components/AiChat/EntryScreen.js +123 -0
  47. package/dist/cjs/components/AiChat/Markdown.d.ts +7 -0
  48. package/dist/cjs/components/AiChat/Markdown.js +14 -0
  49. package/dist/cjs/components/AiChat/TimLogo.d.ts +5 -0
  50. package/dist/cjs/components/AiChat/TimLogo.js +15 -0
  51. package/dist/cjs/components/AiChat/test-utils/api.d.ts +2 -0
  52. package/dist/cjs/components/AiChat/test-utils/api.js +164 -0
  53. package/dist/cjs/components/AiChat/types.d.ts +96 -0
  54. package/dist/cjs/components/AiChat/types.js +3 -0
  55. package/dist/cjs/components/AiChat/utils.d.ts +9 -0
  56. package/dist/cjs/components/AiChat/utils.js +41 -0
  57. package/dist/cjs/components/Alert/Alert.d.ts +15 -0
  58. package/dist/cjs/components/Alert/Alert.js +62 -0
  59. package/dist/cjs/components/Alert/Alert.stories.d.ts +8 -0
  60. package/dist/cjs/components/Alert/Alert.stories.js +53 -0
  61. package/dist/cjs/components/Button/ActionButton.d.ts +30 -0
  62. package/dist/cjs/components/Button/ActionButton.js +73 -0
  63. package/dist/cjs/components/Button/ActionButton.stories.d.ts +15 -0
  64. package/dist/cjs/components/Button/ActionButton.stories.js +113 -0
  65. package/dist/cjs/components/Button/Button.d.ts +58 -0
  66. package/dist/cjs/components/Button/Button.js +261 -0
  67. package/dist/cjs/components/Button/Button.stories.d.ts +18 -0
  68. package/dist/cjs/components/Button/Button.stories.js +148 -0
  69. package/dist/cjs/components/Button/Button.test.d.ts +1 -0
  70. package/dist/cjs/components/Button/Button.test.js +46 -0
  71. package/dist/cjs/components/Checkbox/Checkbox.d.ts +20 -0
  72. package/dist/cjs/components/Checkbox/Checkbox.js +85 -0
  73. package/dist/cjs/components/Checkbox/Checkbox.stories.d.ts +8 -0
  74. package/dist/cjs/components/Checkbox/Checkbox.stories.js +33 -0
  75. package/dist/cjs/components/CheckboxChoiceField/CheckboxChoiceField.d.ts +21 -0
  76. package/dist/cjs/components/CheckboxChoiceField/CheckboxChoiceField.js +43 -0
  77. package/dist/cjs/components/CheckboxChoiceField/CheckboxChoiceField.stories.d.ts +8 -0
  78. package/dist/cjs/components/CheckboxChoiceField/CheckboxChoiceField.stories.js +50 -0
  79. package/dist/cjs/components/CheckboxChoiceField/CheckboxChoiceField.test.d.ts +1 -0
  80. package/dist/cjs/components/CheckboxChoiceField/CheckboxChoiceField.test.js +52 -0
  81. package/dist/cjs/components/ImageAdapter/ImageAdapter.d.ts +23 -0
  82. package/dist/cjs/components/ImageAdapter/ImageAdapter.js +30 -0
  83. package/dist/cjs/components/Input/Input.d.ts +116 -0
  84. package/dist/cjs/components/Input/Input.js +237 -0
  85. package/dist/cjs/components/Input/Input.stories.d.ts +19 -0
  86. package/dist/cjs/components/Input/Input.stories.js +135 -0
  87. package/dist/cjs/components/Input/Input.test.d.ts +1 -0
  88. package/dist/cjs/components/Input/Input.test.js +32 -0
  89. package/dist/cjs/components/LinkAdapter/LinkAdapter.d.ts +23 -0
  90. package/dist/cjs/components/LinkAdapter/LinkAdapter.js +34 -0
  91. package/dist/cjs/components/RadioChoiceField/BooleanRadioChoiceField.stories.d.ts +6 -0
  92. package/dist/cjs/components/RadioChoiceField/BooleanRadioChoiceField.stories.js +47 -0
  93. package/dist/cjs/components/RadioChoiceField/RadioChoiceField.d.ts +45 -0
  94. package/dist/cjs/components/RadioChoiceField/RadioChoiceField.js +69 -0
  95. package/dist/cjs/components/RadioChoiceField/RadioChoiceField.stories.d.ts +6 -0
  96. package/dist/cjs/components/RadioChoiceField/RadioChoiceField.stories.js +55 -0
  97. package/dist/cjs/components/RadioChoiceField/RadioChoiceField.test.d.ts +1 -0
  98. package/dist/cjs/components/RadioChoiceField/RadioChoiceField.test.js +53 -0
  99. package/dist/cjs/components/ScrollSnap/ScrollSnap.d.ts +19 -0
  100. package/dist/cjs/components/ScrollSnap/ScrollSnap.js +59 -0
  101. package/dist/cjs/components/ScrollSnap/ScrollSnap.stories.d.ts +6 -0
  102. package/dist/cjs/components/ScrollSnap/ScrollSnap.stories.js +43 -0
  103. package/dist/cjs/components/ScrollSnap/useScrollSnap.d.ts +6 -0
  104. package/dist/cjs/components/ScrollSnap/useScrollSnap.js +36 -0
  105. package/dist/cjs/components/SrAnnouncer/SrAnnouncer.d.ts +25 -0
  106. package/dist/cjs/components/SrAnnouncer/SrAnnouncer.js +43 -0
  107. package/dist/cjs/components/SrAnnouncer/SrAnnouncer.stories.d.ts +6 -0
  108. package/dist/cjs/components/SrAnnouncer/SrAnnouncer.stories.js +44 -0
  109. package/dist/cjs/components/SrAnnouncer/SrAnnouncer.test.d.ts +1 -0
  110. package/dist/cjs/components/SrAnnouncer/SrAnnouncer.test.js +62 -0
  111. package/dist/cjs/components/TabButtons/TabButtonList.d.ts +25 -0
  112. package/dist/cjs/components/TabButtons/TabButtonList.js +97 -0
  113. package/dist/cjs/components/TabButtons/TabButtonList.stories.d.ts +24 -0
  114. package/dist/cjs/components/TabButtons/TabButtonList.stories.js +139 -0
  115. package/dist/cjs/components/TextField/TextField.d.ts +29 -0
  116. package/dist/cjs/components/TextField/TextField.js +33 -0
  117. package/dist/cjs/components/TextField/TextField.stories.d.ts +10 -0
  118. package/dist/cjs/components/TextField/TextField.stories.js +136 -0
  119. package/dist/cjs/components/TextField/TextField.test.d.ts +1 -0
  120. package/dist/cjs/components/TextField/TextField.test.js +77 -0
  121. package/dist/cjs/components/ThemeProvider/ThemeProvider.d.ts +21 -0
  122. package/dist/cjs/components/ThemeProvider/ThemeProvider.js +86 -0
  123. package/dist/cjs/components/ThemeProvider/ThemeProvider.stories.d.ts +63 -0
  124. package/dist/cjs/components/ThemeProvider/ThemeProvider.stories.js +102 -0
  125. package/dist/cjs/components/ThemeProvider/Typography.stories.d.ts +39 -0
  126. package/dist/cjs/components/ThemeProvider/Typography.stories.js +65 -0
  127. package/dist/cjs/components/ThemeProvider/breakpoints.d.ts +4 -0
  128. package/dist/cjs/components/ThemeProvider/breakpoints.js +19 -0
  129. package/dist/cjs/components/ThemeProvider/buttons.d.ts +7 -0
  130. package/dist/cjs/components/ThemeProvider/buttons.js +20 -0
  131. package/dist/cjs/components/ThemeProvider/chips.d.ts +3 -0
  132. package/dist/cjs/components/ThemeProvider/chips.js +154 -0
  133. package/dist/cjs/components/ThemeProvider/colors.d.ts +32 -0
  134. package/dist/cjs/components/ThemeProvider/colors.js +35 -0
  135. package/dist/cjs/components/ThemeProvider/typography.d.ts +18 -0
  136. package/dist/cjs/components/ThemeProvider/typography.js +173 -0
  137. package/dist/cjs/components/VisuallyHidden/VisuallyHidden.d.ts +24 -0
  138. package/dist/cjs/components/VisuallyHidden/VisuallyHidden.js +33 -0
  139. package/dist/cjs/components/VisuallyHidden/VisuallyHidden.stories.d.ts +6 -0
  140. package/dist/cjs/components/VisuallyHidden/VisuallyHidden.stories.js +13 -0
  141. package/dist/cjs/components/internal/FormHelpers/FormHelpers.d.ts +39 -0
  142. package/dist/cjs/components/internal/FormHelpers/FormHelpers.js +78 -0
  143. package/dist/cjs/components/internal/FormHelpers/FormHelpers.test.d.ts +1 -0
  144. package/dist/cjs/components/internal/FormHelpers/FormHelpers.test.js +93 -0
  145. package/dist/cjs/index.d.ts +25 -0
  146. package/dist/cjs/index.js +44 -0
  147. package/dist/cjs/jest-setup.d.ts +1 -0
  148. package/dist/cjs/jest-setup.js +18 -0
  149. package/dist/cjs/jsdom-extended.d.ts +6 -0
  150. package/dist/cjs/jsdom-extended.js +14 -0
  151. package/dist/cjs/story-utils/index.d.ts +6 -0
  152. package/dist/cjs/story-utils/index.js +17 -0
  153. package/dist/cjs/utils/composeRefs.d.ts +7 -0
  154. package/dist/cjs/utils/composeRefs.js +20 -0
  155. package/dist/cjs/utils/composeRefs.test.d.ts +1 -0
  156. package/dist/cjs/utils/composeRefs.test.js +19 -0
  157. package/dist/cjs/utils/retryingFetch.d.ts +19 -0
  158. package/dist/cjs/utils/retryingFetch.js +98 -0
  159. package/dist/cjs/utils/retryingFetch.test.d.ts +1 -0
  160. package/dist/cjs/utils/retryingFetch.test.js +48 -0
  161. package/dist/cjs/utils/useDevCheckStable.d.ts +8 -0
  162. package/dist/cjs/utils/useDevCheckStable.js +29 -0
  163. package/dist/cjs/utils/useInterval.d.ts +7 -0
  164. package/dist/cjs/utils/useInterval.js +25 -0
  165. package/dist/esm/VERSION.d.ts +12 -0
  166. package/dist/esm/VERSION.js +12 -0
  167. package/dist/esm/ai.d.ts +3 -0
  168. package/dist/esm/ai.js +2 -0
  169. package/dist/esm/bundles/AiDrawer/AiDrawer.d.ts +55 -0
  170. package/dist/esm/bundles/AiDrawer/AiDrawer.js +259 -0
  171. package/dist/esm/bundles/AiDrawer/AiDrawer.stories.d.ts +17 -0
  172. package/dist/esm/bundles/AiDrawer/AiDrawer.stories.js +261 -0
  173. package/dist/esm/bundles/AiDrawer/AiDrawerManager.d.ts +12 -0
  174. package/dist/esm/bundles/AiDrawer/AiDrawerManager.js +48 -0
  175. package/dist/esm/bundles/AiDrawer/AiDrawerManager.stories.d.ts +6 -0
  176. package/dist/esm/bundles/AiDrawer/AiDrawerManager.stories.js +264 -0
  177. package/dist/esm/bundles/AiDrawer/AiDrawerManager.test.d.ts +1 -0
  178. package/dist/esm/bundles/AiDrawer/AiDrawerManager.test.js +243 -0
  179. package/dist/esm/bundles/AiDrawer/FlashcardsScreen.d.ts +9 -0
  180. package/dist/esm/bundles/AiDrawer/FlashcardsScreen.js +83 -0
  181. package/dist/esm/bundles/aiDrawerManager.d.ts +6 -0
  182. package/dist/esm/bundles/aiDrawerManager.js +41 -0
  183. package/dist/esm/components/AiChat/AiChat.d.ts +5 -0
  184. package/dist/esm/components/AiChat/AiChat.js +263 -0
  185. package/dist/esm/components/AiChat/AiChat.stories.d.ts +17 -0
  186. package/dist/esm/components/AiChat/AiChat.stories.js +191 -0
  187. package/dist/esm/components/AiChat/AiChat.test.d.ts +1 -0
  188. package/dist/esm/components/AiChat/AiChat.test.js +209 -0
  189. package/dist/esm/components/AiChat/AiChatContext.d.ts +26 -0
  190. package/dist/esm/components/AiChat/AiChatContext.js +102 -0
  191. package/dist/esm/components/AiChat/AiChatContext.stories.d.ts +14 -0
  192. package/dist/esm/components/AiChat/AiChatContext.stories.js +72 -0
  193. package/dist/esm/components/AiChat/AiChatMarkdown.stories.d.ts +15 -0
  194. package/dist/esm/components/AiChat/AiChatMarkdown.stories.js +279 -0
  195. package/dist/esm/components/AiChat/ChatTitle.d.ts +8 -0
  196. package/dist/esm/components/AiChat/ChatTitle.js +40 -0
  197. package/dist/esm/components/AiChat/EllipsisIcon.d.ts +6 -0
  198. package/dist/esm/components/AiChat/EllipsisIcon.js +15 -0
  199. package/dist/esm/components/AiChat/EntryScreen.d.ts +11 -0
  200. package/dist/esm/components/AiChat/EntryScreen.js +120 -0
  201. package/dist/esm/components/AiChat/Markdown.d.ts +7 -0
  202. package/dist/esm/components/AiChat/Markdown.js +12 -0
  203. package/dist/esm/components/AiChat/TimLogo.d.ts +5 -0
  204. package/dist/esm/components/AiChat/TimLogo.js +13 -0
  205. package/dist/esm/components/AiChat/test-utils/api.d.ts +2 -0
  206. package/dist/esm/components/AiChat/test-utils/api.js +161 -0
  207. package/dist/esm/components/AiChat/types.d.ts +96 -0
  208. package/dist/esm/components/AiChat/types.js +2 -0
  209. package/dist/esm/components/AiChat/utils.d.ts +9 -0
  210. package/dist/esm/components/AiChat/utils.js +38 -0
  211. package/dist/esm/components/Alert/Alert.d.ts +15 -0
  212. package/dist/esm/components/Alert/Alert.js +59 -0
  213. package/dist/esm/components/Alert/Alert.stories.d.ts +8 -0
  214. package/dist/esm/components/Alert/Alert.stories.js +50 -0
  215. package/dist/esm/components/Button/ActionButton.d.ts +30 -0
  216. package/dist/esm/components/Button/ActionButton.js +68 -0
  217. package/dist/esm/components/Button/ActionButton.stories.d.ts +15 -0
  218. package/dist/esm/components/Button/ActionButton.stories.js +110 -0
  219. package/dist/esm/components/Button/Button.d.ts +58 -0
  220. package/dist/esm/components/Button/Button.js +252 -0
  221. package/dist/esm/components/Button/Button.stories.d.ts +18 -0
  222. package/dist/esm/components/Button/Button.stories.js +145 -0
  223. package/dist/esm/components/Button/Button.test.d.ts +1 -0
  224. package/dist/esm/components/Button/Button.test.js +44 -0
  225. package/dist/esm/components/Checkbox/Checkbox.d.ts +20 -0
  226. package/dist/esm/components/Checkbox/Checkbox.js +81 -0
  227. package/dist/esm/components/Checkbox/Checkbox.stories.d.ts +8 -0
  228. package/dist/esm/components/Checkbox/Checkbox.stories.js +30 -0
  229. package/dist/esm/components/CheckboxChoiceField/CheckboxChoiceField.d.ts +21 -0
  230. package/dist/esm/components/CheckboxChoiceField/CheckboxChoiceField.js +40 -0
  231. package/dist/esm/components/CheckboxChoiceField/CheckboxChoiceField.stories.d.ts +8 -0
  232. package/dist/esm/components/CheckboxChoiceField/CheckboxChoiceField.stories.js +47 -0
  233. package/dist/esm/components/CheckboxChoiceField/CheckboxChoiceField.test.d.ts +1 -0
  234. package/dist/esm/components/CheckboxChoiceField/CheckboxChoiceField.test.js +50 -0
  235. package/dist/esm/components/ImageAdapter/ImageAdapter.d.ts +23 -0
  236. package/dist/esm/components/ImageAdapter/ImageAdapter.js +27 -0
  237. package/dist/esm/components/Input/Input.d.ts +116 -0
  238. package/dist/esm/components/Input/Input.js +232 -0
  239. package/dist/esm/components/Input/Input.stories.d.ts +19 -0
  240. package/dist/esm/components/Input/Input.stories.js +132 -0
  241. package/dist/esm/components/Input/Input.test.d.ts +1 -0
  242. package/dist/esm/components/Input/Input.test.js +30 -0
  243. package/dist/esm/components/LinkAdapter/LinkAdapter.d.ts +23 -0
  244. package/dist/esm/components/LinkAdapter/LinkAdapter.js +31 -0
  245. package/dist/esm/components/RadioChoiceField/BooleanRadioChoiceField.stories.d.ts +6 -0
  246. package/dist/esm/components/RadioChoiceField/BooleanRadioChoiceField.stories.js +44 -0
  247. package/dist/esm/components/RadioChoiceField/RadioChoiceField.d.ts +45 -0
  248. package/dist/esm/components/RadioChoiceField/RadioChoiceField.js +65 -0
  249. package/dist/esm/components/RadioChoiceField/RadioChoiceField.stories.d.ts +6 -0
  250. package/dist/esm/components/RadioChoiceField/RadioChoiceField.stories.js +52 -0
  251. package/dist/esm/components/RadioChoiceField/RadioChoiceField.test.d.ts +1 -0
  252. package/dist/esm/components/RadioChoiceField/RadioChoiceField.test.js +51 -0
  253. package/dist/esm/components/ScrollSnap/ScrollSnap.d.ts +19 -0
  254. package/dist/esm/components/ScrollSnap/ScrollSnap.js +56 -0
  255. package/dist/esm/components/ScrollSnap/ScrollSnap.stories.d.ts +6 -0
  256. package/dist/esm/components/ScrollSnap/ScrollSnap.stories.js +40 -0
  257. package/dist/esm/components/ScrollSnap/useScrollSnap.d.ts +6 -0
  258. package/dist/esm/components/ScrollSnap/useScrollSnap.js +33 -0
  259. package/dist/esm/components/SrAnnouncer/SrAnnouncer.d.ts +25 -0
  260. package/dist/esm/components/SrAnnouncer/SrAnnouncer.js +40 -0
  261. package/dist/esm/components/SrAnnouncer/SrAnnouncer.stories.d.ts +6 -0
  262. package/dist/esm/components/SrAnnouncer/SrAnnouncer.stories.js +41 -0
  263. package/dist/esm/components/SrAnnouncer/SrAnnouncer.test.d.ts +1 -0
  264. package/dist/esm/components/SrAnnouncer/SrAnnouncer.test.js +60 -0
  265. package/dist/esm/components/TabButtons/TabButtonList.d.ts +25 -0
  266. package/dist/esm/components/TabButtons/TabButtonList.js +92 -0
  267. package/dist/esm/components/TabButtons/TabButtonList.stories.d.ts +24 -0
  268. package/dist/esm/components/TabButtons/TabButtonList.stories.js +136 -0
  269. package/dist/esm/components/TextField/TextField.d.ts +29 -0
  270. package/dist/esm/components/TextField/TextField.js +30 -0
  271. package/dist/esm/components/TextField/TextField.stories.d.ts +10 -0
  272. package/dist/esm/components/TextField/TextField.stories.js +133 -0
  273. package/dist/esm/components/TextField/TextField.test.d.ts +1 -0
  274. package/dist/esm/components/TextField/TextField.test.js +75 -0
  275. package/dist/esm/components/ThemeProvider/ThemeProvider.d.ts +21 -0
  276. package/dist/esm/components/ThemeProvider/ThemeProvider.js +82 -0
  277. package/dist/esm/components/ThemeProvider/ThemeProvider.stories.d.ts +63 -0
  278. package/dist/esm/components/ThemeProvider/ThemeProvider.stories.js +99 -0
  279. package/dist/esm/components/ThemeProvider/Typography.stories.d.ts +39 -0
  280. package/dist/esm/components/ThemeProvider/Typography.stories.js +62 -0
  281. package/dist/esm/components/ThemeProvider/breakpoints.d.ts +4 -0
  282. package/dist/esm/components/ThemeProvider/breakpoints.js +15 -0
  283. package/dist/esm/components/ThemeProvider/buttons.d.ts +7 -0
  284. package/dist/esm/components/ThemeProvider/buttons.js +17 -0
  285. package/dist/esm/components/ThemeProvider/chips.d.ts +3 -0
  286. package/dist/esm/components/ThemeProvider/chips.js +151 -0
  287. package/dist/esm/components/ThemeProvider/colors.d.ts +32 -0
  288. package/dist/esm/components/ThemeProvider/colors.js +32 -0
  289. package/dist/esm/components/ThemeProvider/typography.d.ts +18 -0
  290. package/dist/esm/components/ThemeProvider/typography.js +167 -0
  291. package/dist/esm/components/VisuallyHidden/VisuallyHidden.d.ts +24 -0
  292. package/dist/esm/components/VisuallyHidden/VisuallyHidden.js +30 -0
  293. package/dist/esm/components/VisuallyHidden/VisuallyHidden.stories.d.ts +6 -0
  294. package/dist/esm/components/VisuallyHidden/VisuallyHidden.stories.js +10 -0
  295. package/dist/esm/components/internal/FormHelpers/FormHelpers.d.ts +39 -0
  296. package/dist/esm/components/internal/FormHelpers/FormHelpers.js +73 -0
  297. package/dist/esm/components/internal/FormHelpers/FormHelpers.test.d.ts +1 -0
  298. package/dist/esm/components/internal/FormHelpers/FormHelpers.test.js +91 -0
  299. package/dist/esm/index.d.ts +25 -0
  300. package/dist/esm/index.js +16 -0
  301. package/dist/esm/jest-setup.d.ts +1 -0
  302. package/dist/esm/jest-setup.js +16 -0
  303. package/dist/esm/jsdom-extended.d.ts +6 -0
  304. package/dist/esm/jsdom-extended.js +12 -0
  305. package/dist/esm/story-utils/index.d.ts +6 -0
  306. package/dist/esm/story-utils/index.js +13 -0
  307. package/dist/esm/utils/composeRefs.d.ts +7 -0
  308. package/dist/esm/utils/composeRefs.js +17 -0
  309. package/dist/esm/utils/composeRefs.test.d.ts +1 -0
  310. package/dist/esm/utils/composeRefs.test.js +17 -0
  311. package/dist/esm/utils/retryingFetch.d.ts +19 -0
  312. package/dist/esm/utils/retryingFetch.js +96 -0
  313. package/dist/esm/utils/retryingFetch.test.d.ts +1 -0
  314. package/dist/esm/utils/retryingFetch.test.js +46 -0
  315. package/dist/esm/utils/useDevCheckStable.d.ts +8 -0
  316. package/dist/esm/utils/useDevCheckStable.js +26 -0
  317. package/dist/esm/utils/useInterval.d.ts +7 -0
  318. package/dist/esm/utils/useInterval.js +22 -0
  319. package/dist/tsconfig.tsbuildinfo +1 -0
  320. package/dist/type-augmentation/TypescriptDocs.mdx +17 -0
  321. package/dist/type-augmentation/imports.d.ts +3 -0
  322. package/dist/type-augmentation/index.d.ts +3 -0
  323. package/dist/type-augmentation/theme.d.ts +105 -0
  324. package/dist/type-augmentation/typography.d.ts +54 -0
  325. package/package.json +159 -0
@@ -0,0 +1,48 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ const retryingFetch_1 = require("./retryingFetch");
13
+ const msw_1 = require("msw");
14
+ const node_1 = require("msw/node");
15
+ const counter = jest.fn(); // use jest.fn as counter because it resets on each test
16
+ const NETWORK_SUCCESS_URL = "http://localhost:3456/success";
17
+ const NETWORK_ERROR_URL = "http://localhost:3456/error";
18
+ const server = (0, node_1.setupServer)(msw_1.http.get(NETWORK_SUCCESS_URL, (_a) => __awaiter(void 0, [_a], void 0, function* ({ request }) {
19
+ var _b;
20
+ counter();
21
+ const url = new URL(request.url);
22
+ const status = +((_b = url.searchParams.get("status")) !== null && _b !== void 0 ? _b : 200);
23
+ return msw_1.HttpResponse.text(`Status ${status}`, { status });
24
+ })), msw_1.http.get(NETWORK_ERROR_URL, () => __awaiter(void 0, void 0, void 0, function* () {
25
+ counter();
26
+ return msw_1.HttpResponse.error();
27
+ })));
28
+ beforeAll(() => server.listen());
29
+ afterEach(() => server.resetHandlers());
30
+ afterAll(() => server.close());
31
+ describe("retryingFetch", () => {
32
+ beforeAll(() => { });
33
+ test.each([200, 201, 202, 367, 400, 401, 403])("should not retry on %s", (status) => __awaiter(void 0, void 0, void 0, function* () {
34
+ const result = yield (0, retryingFetch_1.default)(`${NETWORK_SUCCESS_URL}?status=${status}`);
35
+ expect(yield result.text()).toBe(`Status ${status}`);
36
+ expect(counter).toHaveBeenCalledTimes(1);
37
+ }));
38
+ test.each([429, 500, 501, 502, 503])("should retry on %s", (status) => __awaiter(void 0, void 0, void 0, function* () {
39
+ const result = yield (0, retryingFetch_1.default)(`${NETWORK_SUCCESS_URL}?status=${status}`);
40
+ expect(yield result.text()).toBe(`Status ${status}`);
41
+ expect(counter).toHaveBeenCalledTimes(4);
42
+ }));
43
+ test("should retry on error", () => __awaiter(void 0, void 0, void 0, function* () {
44
+ const result = yield (0, retryingFetch_1.default)(NETWORK_ERROR_URL).catch((err) => err);
45
+ expect(result).toBeInstanceOf(Error);
46
+ expect(counter).toHaveBeenCalledTimes(4);
47
+ }));
48
+ });
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Emits `console.error` if two subsequent values of `jsonSerializable` serialize
3
+ * to the same thing but are different references.
4
+ *
5
+ * This hook does NOT run in production.
6
+ */
7
+ declare const useDevCheckStable: (jsonSerializable: unknown, msg?: string) => void;
8
+ export { useDevCheckStable };
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.useDevCheckStable = void 0;
4
+ const react_1 = require("react");
5
+ /**
6
+ * Emits `console.error` if two subsequent values of `jsonSerializable` serialize
7
+ * to the same thing but are different references.
8
+ *
9
+ * This hook does NOT run in production.
10
+ */
11
+ const useDevCheckStable = (jsonSerializable, msg = "The value has changed. This may cause unnecessary re-renders") => {
12
+ if (process.env.NODE_ENV !== "production") {
13
+ /**
14
+ * Calling hooks conditionally based on env vars is not really a problem.
15
+ * In a given environment, the hook will always run or always not run.
16
+ */
17
+ // eslint-disable-next-line react-hooks/rules-of-hooks
18
+ const valRef = (0, react_1.useRef)(jsonSerializable);
19
+ // eslint-disable-next-line react-hooks/rules-of-hooks
20
+ (0, react_1.useEffect)(() => {
21
+ const sameJson = JSON.stringify(valRef.current) === JSON.stringify(jsonSerializable);
22
+ const differentRefs = valRef.current !== jsonSerializable;
23
+ if (!sameJson || differentRefs) {
24
+ console.error(`useDevCheckStable: ${msg}`, valRef.current, jsonSerializable);
25
+ }
26
+ }, [jsonSerializable, msg]);
27
+ }
28
+ };
29
+ exports.useDevCheckStable = useDevCheckStable;
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Calls a function at a specified interval.
3
+ *
4
+ * Based on https://overreacted.io/making-setinterval-declarative-with-react-hooks/
5
+ */
6
+ declare const useInterval: (callback: () => void, delay: number | null) => void;
7
+ export { useInterval };
@@ -0,0 +1,25 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.useInterval = void 0;
4
+ const react_1 = require("react");
5
+ /**
6
+ * Calls a function at a specified interval.
7
+ *
8
+ * Based on https://overreacted.io/making-setinterval-declarative-with-react-hooks/
9
+ */
10
+ const useInterval = (callback, delay) => {
11
+ const savedCallback = (0, react_1.useRef)(null);
12
+ (0, react_1.useEffect)(() => {
13
+ savedCallback.current = callback;
14
+ }, [callback]);
15
+ (0, react_1.useEffect)(() => {
16
+ if (delay !== null) {
17
+ const id = setInterval(() => { var _a; return (_a = savedCallback.current) === null || _a === void 0 ? void 0 : _a.call(savedCallback); }, delay);
18
+ return () => clearInterval(id);
19
+ }
20
+ else {
21
+ return () => { };
22
+ }
23
+ }, [delay]);
24
+ };
25
+ exports.useInterval = useInterval;
@@ -0,0 +1,12 @@
1
+ /**
2
+ * This file is auto-generated at build time.
3
+ * Run node ./scripts/set_version.js to update the version.
4
+ * Do not update this file manually.
5
+ *
6
+ * NOTES:
7
+ * - In development, VERSION will always be "0.0.0"
8
+ * - The version should not simply be imported from package.json. This would
9
+ * result in all of the package.json being included in the bundled code, which
10
+ * is not desired.
11
+ */
12
+ export declare const VERSION = "0.0.0-0a23f44";
@@ -0,0 +1,12 @@
1
+ /**
2
+ * This file is auto-generated at build time.
3
+ * Run node ./scripts/set_version.js to update the version.
4
+ * Do not update this file manually.
5
+ *
6
+ * NOTES:
7
+ * - In development, VERSION will always be "0.0.0"
8
+ * - The version should not simply be imported from package.json. This would
9
+ * result in all of the package.json being included in the bundled code, which
10
+ * is not desired.
11
+ */
12
+ export const VERSION = "0.0.0-0a23f44";
@@ -0,0 +1,3 @@
1
+ export { AiChat, AiChatDisplay } from "./components/AiChat/AiChat";
2
+ export { AiChatProvider, useAiChat } from "./components/AiChat/AiChatContext";
3
+ export type { AiChatMessage, AiChatContextProps, AiChatDisplayProps, AiChatProps, } from "./components/AiChat/types";
package/dist/esm/ai.js ADDED
@@ -0,0 +1,2 @@
1
+ export { AiChat, AiChatDisplay } from "./components/AiChat/AiChat";
2
+ export { AiChatProvider, useAiChat } from "./components/AiChat/AiChatContext";
@@ -0,0 +1,55 @@
1
+ import { FC } from "react";
2
+ import type { AiChatProps, AiChatMessage } from "../../components/AiChat/types";
3
+ type AiDrawerInitMessage = {
4
+ type: "smoot-design::ai-drawer-open" | "smoot-design::tutor-drawer-open";
5
+ payload: {
6
+ blockType?: "problem" | "video";
7
+ target?: string;
8
+ /**
9
+ * If the title begins "AskTIM", it is styled as the AskTIM logo.
10
+ */
11
+ title?: string;
12
+ chat: {
13
+ chatId?: AiChatProps["chatId"];
14
+ conversationStarters?: AiChatProps["conversationStarters"];
15
+ initialMessages?: AiChatProps["initialMessages"];
16
+ apiUrl: AiChatProps["requestOpts"]["apiUrl"];
17
+ requestBody?: Record<string, unknown>;
18
+ entryScreenEnabled?: AiChatProps["entryScreenEnabled"];
19
+ entryScreenTitle?: AiChatProps["entryScreenTitle"];
20
+ };
21
+ summary?: {
22
+ apiUrl: string;
23
+ };
24
+ };
25
+ };
26
+ type AiDrawerProps = {
27
+ className?: string;
28
+ /**
29
+ * Transform the body of the request before sending it to the server.
30
+ * Its result will be merged with the per-message requestBody opt, with
31
+ * transformBody taking precedence.
32
+ *
33
+ * *This cannot be supplied via message events since the function is not serializable.*
34
+ *
35
+ */
36
+ transformBody?: (messages: AiChatMessage[]) => Iterable<unknown>;
37
+ /**
38
+ * Fetch options to be passed to the fetch call.
39
+ *
40
+ * NOTE: By default, the credentials are set to "include" to enable thread-
41
+ * identifying cookies.
42
+ */
43
+ fetchOpts?: AiChatProps["requestOpts"]["fetchOpts"];
44
+ /**
45
+ * Pass to target a specific drawer instance where multiple are on the page.
46
+ */
47
+ /** @deprecated The AiDrawerManager now handles multiple AiDrawer instance removing the need to target */
48
+ target?: string;
49
+ payload?: AiDrawerInitMessage["payload"];
50
+ open?: boolean;
51
+ onClose?: () => void;
52
+ };
53
+ declare const AiDrawer: FC<AiDrawerProps>;
54
+ export { AiDrawer };
55
+ export type { AiDrawerProps, AiDrawerInitMessage };
@@ -0,0 +1,259 @@
1
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
+ return new (P || (P = Promise))(function (resolve, reject) {
4
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
8
+ });
9
+ };
10
+ // @format
11
+ import * as React from "react";
12
+ import { useEffect, useState, useRef, useMemo } from "react";
13
+ import styled from "@emotion/styled";
14
+ import Markdown from "react-markdown";
15
+ import rehypeRaw from "rehype-raw";
16
+ import { RiCloseLine, RiSparkling2Line } from "@remixicon/react";
17
+ import Drawer from "@mui/material/Drawer";
18
+ import { TabButtonList, TabButton, } from "../../components/TabButtons/TabButtonList";
19
+ import Typography from "@mui/material/Typography";
20
+ import TabContext from "@mui/lab/TabContext";
21
+ import TabPanel from "@mui/lab/TabPanel";
22
+ import { AiChat } from "../../components/AiChat/AiChat";
23
+ import { ActionButton } from "../../components/Button/ActionButton";
24
+ import { FlashcardsScreen } from "./FlashcardsScreen";
25
+ import { VERSION } from "../../VERSION";
26
+ const Header = styled.div(({ theme }) => ({
27
+ display: "flex",
28
+ alignItems: "center",
29
+ justifyContent: "space-between",
30
+ gap: "4px",
31
+ color: theme.custom.colors.white,
32
+ position: "sticky",
33
+ top: 0,
34
+ padding: "32px 0 16px 0",
35
+ zIndex: 2,
36
+ backgroundColor: theme.custom.colors.white,
37
+ borderRadius: 0,
38
+ }));
39
+ const Title = styled.div(({ theme }) => ({
40
+ display: "flex",
41
+ alignItems: "center",
42
+ gap: "8px",
43
+ color: theme.custom.colors.darkGray2,
44
+ img: {
45
+ width: "24px",
46
+ height: "24px",
47
+ },
48
+ svg: {
49
+ fill: theme.custom.colors.red,
50
+ width: "24px",
51
+ height: "24px",
52
+ flexShrink: 0,
53
+ },
54
+ overflow: "hidden",
55
+ p: {
56
+ textOverflow: "ellipsis",
57
+ overflow: "hidden",
58
+ whiteSpace: "nowrap",
59
+ },
60
+ }));
61
+ const CloseButton = styled(ActionButton)(({ theme }) => ({
62
+ backgroundColor: theme.custom.colors.lightGray2,
63
+ "&&:hover": {
64
+ backgroundColor: theme.custom.colors.red,
65
+ color: theme.custom.colors.white,
66
+ },
67
+ zIndex: 3,
68
+ flexShrink: 0,
69
+ }));
70
+ const StyledTabButtonList = styled(TabButtonList)(({ theme }) => ({
71
+ padding: "0 0 16px",
72
+ backgroundColor: theme.custom.colors.white,
73
+ position: "sticky",
74
+ top: "88px",
75
+ zIndex: 2,
76
+ overflow: "visible",
77
+ }));
78
+ const StyledTabPanel = styled(TabPanel)({
79
+ padding: "0",
80
+ height: "calc(100% - 138px)",
81
+ position: "relative",
82
+ });
83
+ const StyledAiChat = styled(AiChat)(({ hasTabs, theme }) => ({
84
+ ".MitAiChat--entryScreenContainer": {
85
+ padding: hasTabs ? "114px 0 24px" : "168px 32px 24px",
86
+ [theme.breakpoints.down("md")]: {
87
+ padding: hasTabs ? "114px 0 24px" : "168px 16px 24px",
88
+ },
89
+ },
90
+ ".MitAiChat--chatScreenContainer": {
91
+ padding: hasTabs ? 0 : "0 32px",
92
+ [theme.breakpoints.down("md")]: {
93
+ padding: hasTabs ? 0 : "0 16px",
94
+ },
95
+ },
96
+ ".MitAiChat--messagesContainer": {
97
+ paddingTop: hasTabs ? "8px" : "88px",
98
+ },
99
+ }));
100
+ const StyledHTML = styled.div(({ theme }) => (Object.assign(Object.assign({ color: theme.custom.colors.darkGray2, backgroundColor: theme.custom.colors.white, padding: "12px 0 100px" }, theme.typography.body2), { "p:first-of-type": {
101
+ marginTop: 0,
102
+ }, "p:last-of-type": {
103
+ marginBottom: 0,
104
+ }, "ol, ul": {
105
+ paddingInlineStart: "32px",
106
+ li: {
107
+ margin: "16px 0",
108
+ },
109
+ }, ul: {
110
+ marginInlineStart: "-16px",
111
+ }, a: {
112
+ color: theme.custom.colors.red,
113
+ fontWeight: "normal",
114
+ } })));
115
+ const identity = (x) => x;
116
+ const DEFAULT_FETCH_OPTS = {
117
+ credentials: "include",
118
+ };
119
+ const useContentFetch = (contentUrl) => {
120
+ const [response, setResponse] = useState(null);
121
+ const [loading, setLoading] = useState(false);
122
+ useEffect(() => {
123
+ if (!contentUrl)
124
+ return;
125
+ const fetchData = () => __awaiter(void 0, void 0, void 0, function* () {
126
+ setLoading(true);
127
+ try {
128
+ const response = yield fetch(contentUrl);
129
+ const result = yield response.json();
130
+ if (!result.results) {
131
+ throw new Error("Unexpected response");
132
+ }
133
+ const [contentFile] = result.results;
134
+ if (!contentFile) {
135
+ throw new Error("No result found");
136
+ }
137
+ setResponse({
138
+ summary: contentFile.summary,
139
+ flashcards: contentFile.flashcards,
140
+ });
141
+ }
142
+ catch (error) {
143
+ console.error("Error fetching content", error);
144
+ }
145
+ finally {
146
+ setLoading(false);
147
+ }
148
+ });
149
+ fetchData();
150
+ }, [contentUrl]);
151
+ return { response, loading };
152
+ };
153
+ const DEFAULT_PROBLEM_INITIAL_MESSAGES = [
154
+ {
155
+ role: "assistant",
156
+ content: "Let's try to work on this problem together. It would be great to hear how you're thinking about solving it. Can you walk me through the approach you're considering?",
157
+ },
158
+ ];
159
+ const DEFAULT_VIDEO_ENTRY_SCREEN_TITLE = "What do you want to know about this video?";
160
+ const DEFAULT_VIDEO_STARTERS = [
161
+ { content: "What are the most important concepts introduced in the video?" },
162
+ {
163
+ content: "What examples are used to illustrate concepts covered in the video?",
164
+ },
165
+ { content: "What are the key terms introduced in this video?" },
166
+ ];
167
+ const ChatComponent = ({ payload, transformBody, fetchOpts, scrollElement, entryScreenEnabled, entryScreenTitle, conversationStarters, initialMessages, hasTabs, needsMathJax, }) => {
168
+ if (!payload)
169
+ return null;
170
+ return (React.createElement(StyledAiChat, { key: payload.chatId, chatId: payload.chatId, conversationStarters: conversationStarters, initialMessages: initialMessages, scrollElement: scrollElement, entryScreenEnabled: entryScreenEnabled, entryScreenTitle: entryScreenTitle, requestOpts: {
171
+ transformBody: (messages) => (Object.assign(Object.assign({}, payload.requestBody), transformBody === null || transformBody === void 0 ? void 0 : transformBody(messages))),
172
+ apiUrl: payload.apiUrl,
173
+ fetchOpts: Object.assign(Object.assign({}, DEFAULT_FETCH_OPTS), fetchOpts),
174
+ }, hasTabs: hasTabs, useMathJax: needsMathJax }));
175
+ };
176
+ const randomItems = (array, count) => {
177
+ const shuffled = [...array].sort(() => 0.5 - Math.random());
178
+ return shuffled.slice(0, count);
179
+ };
180
+ const AiDrawer = ({ transformBody = identity, className, fetchOpts, payload, open, onClose, }) => {
181
+ var _a, _b, _c, _d, _e, _f, _g;
182
+ const [tab, setTab] = useState("chat");
183
+ const { response } = useContentFetch((_a = payload === null || payload === void 0 ? void 0 : payload.summary) === null || _a === void 0 ? void 0 : _a.apiUrl);
184
+ const [_wasKeyboardFocus, setWasKeyboardFocus] = useState(false);
185
+ const mouseInteracted = useRef(false);
186
+ const handleMouseDown = () => {
187
+ mouseInteracted.current = true;
188
+ };
189
+ const handleFocus = () => {
190
+ if (!mouseInteracted.current) {
191
+ setWasKeyboardFocus(true);
192
+ }
193
+ mouseInteracted.current = false;
194
+ };
195
+ const [scrollElement, setScrollElement] = useState(null);
196
+ const paperRefCallback = (node) => {
197
+ if (node) {
198
+ setScrollElement(node);
199
+ }
200
+ };
201
+ useEffect(() => {
202
+ var _a;
203
+ (_a = scrollElement === null || scrollElement === void 0 ? void 0 : scrollElement.scrollTo) === null || _a === void 0 ? void 0 : _a.call(scrollElement, {
204
+ top: tab === "chat" ? scrollElement.scrollHeight : 0,
205
+ });
206
+ }, [tab, scrollElement]);
207
+ const conversationStarters = useMemo(() => {
208
+ var _a;
209
+ if (!payload)
210
+ return [];
211
+ return (payload.chat.conversationStarters ||
212
+ (((_a = response === null || response === void 0 ? void 0 : response.flashcards) === null || _a === void 0 ? void 0 : _a.length) && response.flashcards.length >= 3
213
+ ? randomItems(response.flashcards, 3).map((flashcard) => ({
214
+ content: flashcard.question,
215
+ }))
216
+ : DEFAULT_VIDEO_STARTERS));
217
+ }, [payload, response]);
218
+ if (!payload) {
219
+ return React.createElement("div", { "data-testid": "ai-drawer-waiting" });
220
+ }
221
+ const { title, blockType, chat } = payload;
222
+ const hasTabs = blockType === "video";
223
+ return (React.createElement(Drawer, { "data-smoot-version": VERSION, className: className, PaperProps: {
224
+ ref: paperRefCallback,
225
+ sx: {
226
+ width: "900px",
227
+ maxWidth: "100%",
228
+ boxSizing: "border-box",
229
+ padding: {
230
+ xs: "0 16px",
231
+ md: "0 32px",
232
+ },
233
+ },
234
+ }, anchor: "right", open: open, onClose: onClose, role: "dialog", "aria-modal": "true", keepMounted: true },
235
+ React.createElement(Header, null,
236
+ React.createElement(Title, null,
237
+ title ? React.createElement(RiSparkling2Line, null) : null,
238
+ React.createElement(Typography, { variant: "body1", component: "h1" }, (title === null || title === void 0 ? void 0 : title.includes("AskTIM")) ? (React.createElement(React.Fragment, null,
239
+ "Ask",
240
+ React.createElement("strong", null, "TIM"),
241
+ title.replace("AskTIM", ""))) : (title))),
242
+ React.createElement(CloseButton, { variant: "text", size: "medium", onClick: onClose, "aria-label": "Close" },
243
+ React.createElement(RiCloseLine, null))),
244
+ blockType === "problem" ? (React.createElement(ChatComponent, { payload: chat, transformBody: transformBody, fetchOpts: fetchOpts, scrollElement: scrollElement, entryScreenEnabled: (_b = chat === null || chat === void 0 ? void 0 : chat.entryScreenEnabled) !== null && _b !== void 0 ? _b : false, entryScreenTitle: chat.entryScreenTitle, initialMessages: chat.initialMessages || DEFAULT_PROBLEM_INITIAL_MESSAGES, hasTabs: hasTabs, needsMathJax: true })) : null,
245
+ blockType === "video" ? (React.createElement(TabContext, { value: tab },
246
+ React.createElement(StyledTabButtonList, { styleVariant: "chat", onChange: (e, tab) => setTab(tab) },
247
+ React.createElement(TabButton, { value: "chat", label: "Chat" }),
248
+ ((_c = response === null || response === void 0 ? void 0 : response.flashcards) === null || _c === void 0 ? void 0 : _c.length) ? (React.createElement(TabButton, { value: "flashcards", label: "Flashcards", onMouseDown: handleMouseDown, onFocus: handleFocus })) : null,
249
+ React.createElement(TabButton, { value: "summary", label: "Summary" })),
250
+ React.createElement(StyledTabPanel, { value: "chat", keepMounted: true },
251
+ React.createElement(ChatComponent, { payload: chat, transformBody: transformBody, fetchOpts: fetchOpts, scrollElement: scrollElement, entryScreenEnabled: (_d = chat === null || chat === void 0 ? void 0 : chat.entryScreenEnabled) !== null && _d !== void 0 ? _d : true, entryScreenTitle: (_e = chat.entryScreenTitle) !== null && _e !== void 0 ? _e : DEFAULT_VIDEO_ENTRY_SCREEN_TITLE, conversationStarters: conversationStarters, initialMessages: chat.initialMessages, hasTabs: hasTabs, needsMathJax: false })),
252
+ ((_f = response === null || response === void 0 ? void 0 : response.flashcards) === null || _f === void 0 ? void 0 : _f.length) ? (React.createElement(StyledTabPanel, { value: "flashcards" },
253
+ React.createElement(FlashcardsScreen, { flashcards: response === null || response === void 0 ? void 0 : response.flashcards, wasKeyboardFocus: _wasKeyboardFocus }))) : null,
254
+ React.createElement(StyledTabPanel, { value: "summary" },
255
+ React.createElement(Typography, { variant: "h4", component: "h4" }),
256
+ React.createElement(StyledHTML, null,
257
+ React.createElement(Markdown, { rehypePlugins: [rehypeRaw] }, (_g = response === null || response === void 0 ? void 0 : response.summary) !== null && _g !== void 0 ? _g : ""))))) : null));
258
+ };
259
+ export { AiDrawer };
@@ -0,0 +1,17 @@
1
+ import type { Meta, StoryObj } from "@storybook/react";
2
+ import { AiDrawer } from "./AiDrawer";
3
+ declare const meta: Meta<typeof AiDrawer>;
4
+ export default meta;
5
+ type Story = StoryObj<typeof AiDrawer>;
6
+ export declare const ProblemStory: Story;
7
+ export declare const ProblemDefaultInitialMessagesStory: Story;
8
+ export declare const EntryScreenStory: Story;
9
+ /**
10
+ * The chat entry screen is shown by default for the video blocks Tutor drawer.
11
+ */
12
+ export declare const VideoStory: Story;
13
+ /**
14
+ * Where conversation starters are not provided, they will be selected at random from the returned flashcard questions
15
+ * or from `DEFAULT_VIDEO_STARTERS` provided.
16
+ */
17
+ export declare const FlashcardConversationStartersStory: Story;